From 159e6a1b2051512a584172eb32d2afd9d4235a10 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 24 Feb 2009 22:26:32 -0800 Subject: [PATCH] X n'est pas une print API. (cherry picked from commit 1c8bd318fbaf65890ef16fe26c76dd5e6f14dfde) --- Xext/Makefile.am | 7 - Xext/xprint.c | 2617 -------------- configure.ac | 102 - dix/Makefile.am | 10 - dix/dispatch.c | 6 - dix/dixfonts.c | 50 +- dix/globals.c | 3 - dix/main.c | 9 - dix/xpstubs.c | 28 - hw/Makefile.am | 9 +- hw/xnest/Font.c | 5 - hw/xprint/AttrValid.c | 701 ---- hw/xprint/AttrValid.h | 219 -- hw/xprint/DiPrint.h | 85 - hw/xprint/Init.c | 1920 ---------- hw/xprint/Makefile.am | 58 - hw/xprint/Oid.c | 3181 ----------------- hw/xprint/Oid.h | 293 -- hw/xprint/OidDefs.h | 170 - hw/xprint/OidStrs.h | 172 - hw/xprint/Util.c | 370 -- hw/xprint/ValTree.c | 191 - hw/xprint/attributes.c | 1740 --------- hw/xprint/attributes.h | 130 - hw/xprint/config/C/Makefile.am | 1 - hw/xprint/config/C/print/Makefile.am | 14 - hw/xprint/config/C/print/Xprinters | 49 - .../config/C/print/attributes/Makefile.am | 3 - hw/xprint/config/C/print/attributes/document | 49 - hw/xprint/config/C/print/attributes/job | 25 - hw/xprint/config/C/print/attributes/printer | 96 - .../config/C/print/ddx-config/Makefile.am | 1 - .../C/print/ddx-config/raster/Makefile.am | 3 - .../config/C/print/ddx-config/raster/pcl | 39 - .../C/print/ddx-config/raster/postscript | 0 .../C/print/models/CANONBJ10E-GS/Makefile.am | 3 - .../C/print/models/CANONBJ10E-GS/model-config | 23 - .../C/print/models/CANONC3200-PS/Makefile.am | 5 - .../models/CANONC3200-PS/fonts/Makefile.am | 54 - .../C/print/models/CANONC3200-PS/model-config | 40 - .../C/print/models/GSdefault/Makefile.am | 3 - .../C/print/models/GSdefault/model-config | 137 - .../C/print/models/HPDJ1600C/Makefile.am | 5 - .../print/models/HPDJ1600C/fonts/9nb00051.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00052.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00053.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00054.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00055.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00056.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00057.pmf | Bin 5632 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00058.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00059.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00060.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00061.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00062.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00063.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00064.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00065.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00066.pmf | Bin 5732 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00067.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00068.pmf | Bin 5732 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00069.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00070.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00071.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00072.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00073.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00074.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00075.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00076.pmf | Bin 5716 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00077.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00079.pmf | Bin 5656 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00080.pmf | Bin 5664 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00081.pmf | Bin 5672 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00082.pmf | Bin 5660 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00083.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00084.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00085.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00086.pmf | Bin 5716 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00087.pmf | Bin 5752 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00088.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00089.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00090.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00091.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00092.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00093.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00094.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/Makefile.am | 50 - .../C/print/models/HPDJ1600C/fonts/README | 197 - .../print/models/HPDJ1600C/fonts/fonts.alias | 0 .../C/print/models/HPDJ1600C/fonts/fonts.dir | 45 - .../print/models/HPDJ1600C/fonts/lpr0ye1a.pmf | Bin 4296 -> 0 bytes .../C/print/models/HPDJ1600C/model-config | 40 - .../C/print/models/HPLJ4050-PS/Makefile.am | 5 - .../models/HPLJ4050-PS/fonts/Makefile.am | 54 - .../C/print/models/HPLJ4050-PS/model-config | 36 - .../C/print/models/HPLJ4family/Makefile.am | 5 - .../models/HPLJ4family/fonts/9nb00051.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00052.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00053.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00054.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00055.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00056.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00057.pmf | Bin 5632 -> 0 bytes .../models/HPLJ4family/fonts/9nb00058.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00059.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00060.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00061.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00062.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00063.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00064.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00065.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00066.pmf | Bin 5732 -> 0 bytes .../models/HPLJ4family/fonts/9nb00067.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00068.pmf | Bin 5732 -> 0 bytes .../models/HPLJ4family/fonts/9nb00069.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00070.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00071.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00072.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00073.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00074.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00075.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00076.pmf | Bin 5716 -> 0 bytes .../models/HPLJ4family/fonts/9nb00077.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00079.pmf | Bin 5656 -> 0 bytes .../models/HPLJ4family/fonts/9nb00080.pmf | Bin 5664 -> 0 bytes .../models/HPLJ4family/fonts/9nb00081.pmf | Bin 5672 -> 0 bytes .../models/HPLJ4family/fonts/9nb00082.pmf | Bin 5660 -> 0 bytes .../models/HPLJ4family/fonts/9nb00083.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00084.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00085.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00086.pmf | Bin 5716 -> 0 bytes .../models/HPLJ4family/fonts/9nb00087.pmf | Bin 5752 -> 0 bytes .../models/HPLJ4family/fonts/9nb00088.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00089.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00090.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00091.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00092.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00093.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00094.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/Makefile.am | 50 - .../C/print/models/HPLJ4family/fonts/README | 203 -- .../models/HPLJ4family/fonts/fonts.alias | 0 .../print/models/HPLJ4family/fonts/fonts.dir | 45 - .../models/HPLJ4family/fonts/lpr0ye1a.pmf | Bin 4296 -> 0 bytes .../C/print/models/HPLJ4family/model-config | 39 - hw/xprint/config/C/print/models/Makefile.am | 11 - .../models/PS2PDFspooldir-GS/Makefile.am | 4 - .../models/PS2PDFspooldir-GS/model-config | 72 - .../PS2PDFspooldir-GS/ps2pdf_spooltodir.sh | 130 - .../C/print/models/PSdefault/Makefile.am | 5 - .../PSdefault/fonts/AvantGarde-Book.pmf | Bin 6716 -> 0 bytes .../fonts/AvantGarde-BookOblique.pmf | Bin 6728 -> 0 bytes .../PSdefault/fonts/AvantGarde-Demi.pmf | Bin 6712 -> 0 bytes .../fonts/AvantGarde-DemiOblique.pmf | Bin 6724 -> 0 bytes .../models/PSdefault/fonts/Courier-Bold.pmf | Bin 6612 -> 0 bytes .../PSdefault/fonts/Courier-BoldOblique.pmf | Bin 6636 -> 0 bytes .../PSdefault/fonts/Courier-Oblique.pmf | Bin 6608 -> 0 bytes .../print/models/PSdefault/fonts/Courier.pmf | Bin 6592 -> 0 bytes .../models/PSdefault/fonts/Helvetica-Bold.pmf | Bin 6680 -> 0 bytes .../PSdefault/fonts/Helvetica-BoldOblique.pmf | Bin 6692 -> 0 bytes .../PSdefault/fonts/Helvetica-Oblique.pmf | Bin 6688 -> 0 bytes .../models/PSdefault/fonts/Helvetica.pmf | Bin 6672 -> 0 bytes .../PSdefault/fonts/LubalinGraph-Book.pmf | Bin 6628 -> 0 bytes .../fonts/LubalinGraph-BookOblique.pmf | Bin 6640 -> 0 bytes .../PSdefault/fonts/LubalinGraph-Demi.pmf | Bin 6624 -> 0 bytes .../fonts/LubalinGraph-DemiOblique.pmf | Bin 6636 -> 0 bytes .../print/models/PSdefault/fonts/Makefile.am | 44 - .../PSdefault/fonts/NewCentSchlbk-Bold.pmf | Bin 6644 -> 0 bytes .../fonts/NewCentSchlbk-BoldItal.pmf | Bin 6656 -> 0 bytes .../PSdefault/fonts/NewCentSchlbk-Ital.pmf | Bin 6652 -> 0 bytes .../PSdefault/fonts/NewCentSchlbk-Roman.pmf | Bin 6648 -> 0 bytes .../models/PSdefault/fonts/Souvenir-Demi.pmf | Bin 6680 -> 0 bytes .../PSdefault/fonts/Souvenir-DemiItalic.pmf | Bin 6692 -> 0 bytes .../models/PSdefault/fonts/Souvenir-Light.pmf | Bin 6684 -> 0 bytes .../PSdefault/fonts/Souvenir-LightItalic.pmf | Bin 6696 -> 0 bytes .../C/print/models/PSdefault/fonts/Symbol.pmf | Bin 6556 -> 0 bytes .../models/PSdefault/fonts/Times-Bold.pmf | Bin 6660 -> 0 bytes .../PSdefault/fonts/Times-BoldItalic.pmf | Bin 6672 -> 0 bytes .../models/PSdefault/fonts/Times-Italic.pmf | Bin 6668 -> 0 bytes .../models/PSdefault/fonts/Times-Roman.pmf | Bin 6664 -> 0 bytes .../models/PSdefault/fonts/ZapfDingbats.pmf | Bin 6676 -> 0 bytes .../C/print/models/PSdefault/model-config | 136 - .../C/print/models/PSspooldir/Makefile.am | 4 - .../C/print/models/PSspooldir/model-config | 71 - .../C/print/models/PSspooldir/spooltodir.sh | 127 - .../C/print/models/SPSPARC2/Makefile.am | 5 - .../C/print/models/SPSPARC2/fonts/Makefile.am | 37 - .../C/print/models/SPSPARC2/model-config | 18 - hw/xprint/config/Makefile.am | 712 ---- hw/xprint/config/README | 318 -- hw/xprint/config/en_US/Makefile.am | 1 - hw/xprint/config/en_US/print/Makefile.am | 1 - .../config/en_US/print/attributes/Makefile.am | 3 - .../config/en_US/print/attributes/document | 13 - hw/xprint/ddxInit.c | 390 -- hw/xprint/doc/Makefile.am | 19 - hw/xprint/doc/Xprt.html | 115 - hw/xprint/doc/Xprt.man.pre | 196 - hw/xprint/doc/Xprt.sgml | 371 -- hw/xprint/etc/Makefile.am | 1 - .../etc/Xsession.d/92xprint-xpserverlist | 30 - hw/xprint/etc/Xsession.d/Makefile.am | 2 - hw/xprint/etc/init.d/Makefile.am | 12 - hw/xprint/etc/init.d/xprint.cpp | 1277 ------- hw/xprint/etc/profile.d/Makefile.am | 1 - hw/xprint/etc/profile.d/xprint.csh | 16 - hw/xprint/etc/profile.d/xprint.sh | 16 - hw/xprint/mediaSizes.c | 782 ---- hw/xprint/pcl-mono/Makefile.am | 5 - hw/xprint/pcl/Makefile.am | 6 - hw/xprint/pcl/Makefile.am.inc | 27 - hw/xprint/pcl/Pcl.h | 619 ---- hw/xprint/pcl/PclArc.c | 268 -- hw/xprint/pcl/PclArea.c | 436 --- hw/xprint/pcl/PclAttVal.c | 206 -- hw/xprint/pcl/PclAttr.c | 86 - hw/xprint/pcl/PclColor.c | 851 ----- hw/xprint/pcl/PclCursor.c | 113 - hw/xprint/pcl/PclDef.h | 67 - hw/xprint/pcl/PclFonts.c | 72 - hw/xprint/pcl/PclGC.c | 971 ----- hw/xprint/pcl/PclInit.c | 575 --- hw/xprint/pcl/PclLine.c | 314 -- hw/xprint/pcl/PclMisc.c | 301 -- hw/xprint/pcl/PclPixel.c | 159 - hw/xprint/pcl/PclPolygon.c | 351 -- hw/xprint/pcl/PclPrint.c | 709 ---- hw/xprint/pcl/PclSFonts.c | 427 --- hw/xprint/pcl/PclSFonts.h | 115 - hw/xprint/pcl/PclSpans.c | 137 - hw/xprint/pcl/PclText.c | 934 ----- hw/xprint/pcl/PclWindow.c | 209 -- hw/xprint/pcl/Pclmap.h | 210 -- hw/xprint/ps/Makefile.am | 42 - hw/xprint/ps/Ps.h | 600 ---- hw/xprint/ps/PsArc.c | 181 - hw/xprint/ps/PsArea.c | 390 -- hw/xprint/ps/PsAttVal.c | 289 -- hw/xprint/ps/PsAttr.c | 116 - hw/xprint/ps/PsCache.c | 328 -- hw/xprint/ps/PsColor.c | 257 -- hw/xprint/ps/PsDef.h | 96 - hw/xprint/ps/PsFTFonts.c | 85 - hw/xprint/ps/PsFonts.c | 873 ----- hw/xprint/ps/PsGC.c | 418 --- hw/xprint/ps/PsImageUtil.c | 329 -- hw/xprint/ps/PsInit.c | 648 ---- hw/xprint/ps/PsLine.c | 191 - hw/xprint/ps/PsMisc.c | 320 -- hw/xprint/ps/PsPixel.c | 156 - hw/xprint/ps/PsPixmap.c | 623 ---- hw/xprint/ps/PsPolygon.c | 259 -- hw/xprint/ps/PsPrint.c | 459 --- hw/xprint/ps/PsSpans.c | 164 - hw/xprint/ps/PsText.c | 581 --- hw/xprint/ps/PsWindow.c | 222 -- hw/xprint/ps/psout.c | 1789 --------- hw/xprint/ps/psout.h | 335 -- hw/xprint/ps/psout_ft.c | 337 -- hw/xprint/ps/psout_ftpstype1.c | 185 - hw/xprint/ps/psout_ftpstype3.c | 439 --- hw/xprint/ps/ttf2pt1wrap.c | 14 - hw/xprint/raster/Makefile.am | 10 - hw/xprint/raster/Raster.c | 1563 -------- hw/xprint/raster/Raster.h | 117 - hw/xprint/raster/RasterAttVal.c | 267 -- hw/xprint/spooler.c | 202 -- hw/xprint/spooler.h | 75 - include/dix.h | 3 - mi/miinitext.c | 48 +- os/utils.c | 13 - 271 files changed, 26 insertions(+), 39501 deletions(-) delete mode 100644 Xext/xprint.c delete mode 100644 hw/xprint/AttrValid.c delete mode 100644 hw/xprint/AttrValid.h delete mode 100644 hw/xprint/DiPrint.h delete mode 100644 hw/xprint/Init.c delete mode 100644 hw/xprint/Makefile.am delete mode 100644 hw/xprint/Oid.c delete mode 100644 hw/xprint/Oid.h delete mode 100644 hw/xprint/OidDefs.h delete mode 100644 hw/xprint/OidStrs.h delete mode 100644 hw/xprint/Util.c delete mode 100644 hw/xprint/ValTree.c delete mode 100644 hw/xprint/attributes.c delete mode 100644 hw/xprint/attributes.h delete mode 100644 hw/xprint/config/C/Makefile.am delete mode 100644 hw/xprint/config/C/print/Makefile.am delete mode 100644 hw/xprint/config/C/print/Xprinters delete mode 100644 hw/xprint/config/C/print/attributes/Makefile.am delete mode 100644 hw/xprint/config/C/print/attributes/document delete mode 100644 hw/xprint/config/C/print/attributes/job delete mode 100644 hw/xprint/config/C/print/attributes/printer delete mode 100644 hw/xprint/config/C/print/ddx-config/Makefile.am delete mode 100644 hw/xprint/config/C/print/ddx-config/raster/Makefile.am delete mode 100644 hw/xprint/config/C/print/ddx-config/raster/pcl delete mode 100644 hw/xprint/config/C/print/ddx-config/raster/postscript delete mode 100644 hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config delete mode 100644 hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/CANONC3200-PS/model-config delete mode 100644 hw/xprint/config/C/print/models/GSdefault/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/GSdefault/model-config delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00051.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00052.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00053.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00054.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00055.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00056.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00057.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00058.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00059.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00060.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00061.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00062.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00063.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00064.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00065.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00066.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00067.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00068.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00069.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00070.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00071.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00072.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00073.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00074.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00075.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00076.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00077.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00079.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00080.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00081.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00082.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00083.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00084.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00085.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00086.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00087.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00088.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00089.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00090.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00091.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00092.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00093.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00094.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/README delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/fonts.alias delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/fonts.dir delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/lpr0ye1a.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/model-config delete mode 100644 hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4050-PS/model-config delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00051.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00052.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00053.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00054.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00055.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00056.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00057.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00058.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00059.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00060.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00061.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00062.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00063.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00064.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00065.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00066.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00067.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00068.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00069.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00070.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00071.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00072.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00073.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00074.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00075.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00076.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00077.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00079.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00080.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00081.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00082.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00083.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00084.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00085.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00086.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00087.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00088.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00089.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00090.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00091.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00092.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00093.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00094.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/README delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/fonts.alias delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/fonts.dir delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/lpr0ye1a.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/model-config delete mode 100644 hw/xprint/config/C/print/models/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PS2PDFspooldir-GS/model-config delete mode 100755 hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh delete mode 100644 hw/xprint/config/C/print/models/PSdefault/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Book.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-BookOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Demi.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier-BoldOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Oblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-BoldOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Oblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Book.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-BookOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Demi.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-DemiOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-BoldItal.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Ital.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Roman.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Demi.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-DemiItalic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Light.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-LightItalic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Symbol.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-BoldItalic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-Italic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-Roman.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/ZapfDingbats.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/model-config delete mode 100644 hw/xprint/config/C/print/models/PSspooldir/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PSspooldir/model-config delete mode 100755 hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh delete mode 100644 hw/xprint/config/C/print/models/SPSPARC2/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/SPSPARC2/model-config delete mode 100644 hw/xprint/config/Makefile.am delete mode 100644 hw/xprint/config/README delete mode 100644 hw/xprint/config/en_US/Makefile.am delete mode 100644 hw/xprint/config/en_US/print/Makefile.am delete mode 100644 hw/xprint/config/en_US/print/attributes/Makefile.am delete mode 100644 hw/xprint/config/en_US/print/attributes/document delete mode 100644 hw/xprint/ddxInit.c delete mode 100644 hw/xprint/doc/Makefile.am delete mode 100644 hw/xprint/doc/Xprt.html delete mode 100644 hw/xprint/doc/Xprt.man.pre delete mode 100644 hw/xprint/doc/Xprt.sgml delete mode 100644 hw/xprint/etc/Makefile.am delete mode 100644 hw/xprint/etc/Xsession.d/92xprint-xpserverlist delete mode 100644 hw/xprint/etc/Xsession.d/Makefile.am delete mode 100644 hw/xprint/etc/init.d/Makefile.am delete mode 100644 hw/xprint/etc/init.d/xprint.cpp delete mode 100644 hw/xprint/etc/profile.d/Makefile.am delete mode 100644 hw/xprint/etc/profile.d/xprint.csh delete mode 100644 hw/xprint/etc/profile.d/xprint.sh delete mode 100644 hw/xprint/mediaSizes.c delete mode 100644 hw/xprint/pcl-mono/Makefile.am delete mode 100644 hw/xprint/pcl/Makefile.am delete mode 100644 hw/xprint/pcl/Makefile.am.inc delete mode 100644 hw/xprint/pcl/Pcl.h delete mode 100644 hw/xprint/pcl/PclArc.c delete mode 100644 hw/xprint/pcl/PclArea.c delete mode 100644 hw/xprint/pcl/PclAttVal.c delete mode 100644 hw/xprint/pcl/PclAttr.c delete mode 100644 hw/xprint/pcl/PclColor.c delete mode 100644 hw/xprint/pcl/PclCursor.c delete mode 100644 hw/xprint/pcl/PclDef.h delete mode 100644 hw/xprint/pcl/PclFonts.c delete mode 100644 hw/xprint/pcl/PclGC.c delete mode 100644 hw/xprint/pcl/PclInit.c delete mode 100644 hw/xprint/pcl/PclLine.c delete mode 100644 hw/xprint/pcl/PclMisc.c delete mode 100644 hw/xprint/pcl/PclPixel.c delete mode 100644 hw/xprint/pcl/PclPolygon.c delete mode 100644 hw/xprint/pcl/PclPrint.c delete mode 100644 hw/xprint/pcl/PclSFonts.c delete mode 100644 hw/xprint/pcl/PclSFonts.h delete mode 100644 hw/xprint/pcl/PclSpans.c delete mode 100644 hw/xprint/pcl/PclText.c delete mode 100644 hw/xprint/pcl/PclWindow.c delete mode 100644 hw/xprint/pcl/Pclmap.h delete mode 100644 hw/xprint/ps/Makefile.am delete mode 100644 hw/xprint/ps/Ps.h delete mode 100644 hw/xprint/ps/PsArc.c delete mode 100644 hw/xprint/ps/PsArea.c delete mode 100644 hw/xprint/ps/PsAttVal.c delete mode 100644 hw/xprint/ps/PsAttr.c delete mode 100644 hw/xprint/ps/PsCache.c delete mode 100644 hw/xprint/ps/PsColor.c delete mode 100644 hw/xprint/ps/PsDef.h delete mode 100644 hw/xprint/ps/PsFTFonts.c delete mode 100644 hw/xprint/ps/PsFonts.c delete mode 100644 hw/xprint/ps/PsGC.c delete mode 100644 hw/xprint/ps/PsImageUtil.c delete mode 100644 hw/xprint/ps/PsInit.c delete mode 100644 hw/xprint/ps/PsLine.c delete mode 100644 hw/xprint/ps/PsMisc.c delete mode 100644 hw/xprint/ps/PsPixel.c delete mode 100644 hw/xprint/ps/PsPixmap.c delete mode 100644 hw/xprint/ps/PsPolygon.c delete mode 100644 hw/xprint/ps/PsPrint.c delete mode 100644 hw/xprint/ps/PsSpans.c delete mode 100644 hw/xprint/ps/PsText.c delete mode 100644 hw/xprint/ps/PsWindow.c delete mode 100644 hw/xprint/ps/psout.c delete mode 100644 hw/xprint/ps/psout.h delete mode 100644 hw/xprint/ps/psout_ft.c delete mode 100644 hw/xprint/ps/psout_ftpstype1.c delete mode 100644 hw/xprint/ps/psout_ftpstype3.c delete mode 100644 hw/xprint/ps/ttf2pt1wrap.c delete mode 100644 hw/xprint/raster/Makefile.am delete mode 100644 hw/xprint/raster/Raster.c delete mode 100644 hw/xprint/raster/Raster.h delete mode 100644 hw/xprint/raster/RasterAttVal.c delete mode 100644 hw/xprint/spooler.c delete mode 100644 hw/xprint/spooler.h diff --git a/Xext/Makefile.am b/Xext/Makefile.am index c3bb37c52..af4bfc718 100644 --- a/Xext/Makefile.am +++ b/Xext/Makefile.am @@ -99,12 +99,6 @@ if XEVIE BUILTIN_SRCS += $(XEVIE_SRCS) endif -# XPrint: Printing via X Protocol -XPRINT_SRCS = xprint.c -if XPRINT -BUILTIN_SRCS += $(XPRINT_SRCS) -endif - # Colormap Utilization Protocol: Less flashing when switching between # PsuedoColor apps and better sharing of limited colormap slots CUP_SRCS = cup.c @@ -163,7 +157,6 @@ EXTRA_DIST = \ $(XCALIBRATE_SRCS) \ $(XINERAMA_SRCS) \ $(XEVIE_SRCS) \ - $(XPRINT_SRCS) \ $(CUP_SRCS) \ $(EVI_SRCS) \ $(MULTIBUFFER_SRCS) \ diff --git a/Xext/xprint.c b/Xext/xprint.c deleted file mode 100644 index a5d8fcc33..000000000 --- a/Xext/xprint.c +++ /dev/null @@ -1,2617 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: xprint.c -** * -** * Copyright: Copyright 1993, 1995 Hewlett-Packard Company -** * -** * Copyright 1989 by The Massachusetts Institute of Technology -** * -** * Permission to use, copy, modify, and distribute this -** * software and its documentation for any purpose and without -** * fee is hereby granted, provided that the above copyright -** * notice appear in all copies and that both that copyright -** * notice and this permission notice appear in supporting -** * documentation, and that the name of MIT not be used in -** * advertising or publicity pertaining to distribution of the -** * software without specific prior written permission. -** * M.I.T. makes no representation about the suitability of -** * this software for any purpose. It is provided "as is" -** * without any express or implied warranty. -** * -** * MIT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -** * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -** * NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MIT BE LI- -** * ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -** * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -** * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -** * THE USE OR PERFORMANCE OF THIS SOFTWARE. -** * -** ********************************************************* -** -********************************************************************/ - -#define _XP_PRINT_SERVER_ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#define NEED_EVENTS -#include -#undef NEED_EVENTS -#include "misc.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "extnsionst.h" -#include "dixstruct.h" -#include -#include -#include -#include "../hw/xprint/DiPrint.h" -#include "../hw/xprint/attributes.h" -#include "modinit.h" - -static void XpResetProc(ExtensionEntry *); - -static int ProcXpDispatch(ClientPtr); -static int ProcXpSwappedDispatch(ClientPtr); - -static int ProcXpQueryVersion(ClientPtr); -static int ProcXpGetPrinterList(ClientPtr); -static int ProcXpCreateContext(ClientPtr); -static int ProcXpSetContext(ClientPtr); -static int ProcXpGetContext(ClientPtr); -static int ProcXpDestroyContext(ClientPtr); -static int ProcXpGetContextScreen(ClientPtr); -static int ProcXpStartJob(ClientPtr); -static int ProcXpEndJob(ClientPtr); -static int ProcXpStartDoc(ClientPtr); -static int ProcXpEndDoc(ClientPtr); -static int ProcXpStartPage(ClientPtr); -static int ProcXpEndPage(ClientPtr); -static int ProcXpSelectInput(ClientPtr); -static int ProcXpInputSelected(ClientPtr); -static int ProcXpPutDocumentData(ClientPtr); -static int ProcXpGetDocumentData(ClientPtr); -static int ProcXpGetAttributes(ClientPtr); -static int ProcXpGetOneAttribute(ClientPtr); -static int ProcXpSetAttributes(ClientPtr); -static int ProcXpRehashPrinterList(ClientPtr); -static int ProcXpQueryScreens(ClientPtr); -static int ProcXpGetPageDimensions(ClientPtr); -static int ProcXpSetImageResolution(ClientPtr); -static int ProcXpGetImageResolution(ClientPtr); - -static void SwapXpNotifyEvent(xPrintPrintEvent *, xPrintPrintEvent *); -static void SwapXpAttributeEvent(xPrintAttributeEvent *, xPrintAttributeEvent *); - -static int SProcXpGetPrinterList(ClientPtr); -static int SProcXpCreateContext(ClientPtr); -static int SProcXpSetContext(ClientPtr); -static int SProcXpGetContext(ClientPtr); -static int SProcXpDestroyContext(ClientPtr); -static int SProcXpGetContextScreen(ClientPtr); -static int SProcXpStartJob(ClientPtr); -static int SProcXpEndJob(ClientPtr); -static int SProcXpStartDoc(ClientPtr); -static int SProcXpEndDoc(ClientPtr); -static int SProcXpStartPage(ClientPtr); -static int SProcXpEndPage(ClientPtr); -static int SProcXpSelectInput(ClientPtr); -static int SProcXpInputSelected(ClientPtr); -static int SProcXpPutDocumentData(ClientPtr); -static int SProcXpGetDocumentData(ClientPtr); -static int SProcXpGetAttributes(ClientPtr); -static int SProcXpGetOneAttribute(ClientPtr); -static int SProcXpSetAttributes(ClientPtr); -static int SProcXpRehashPrinterList(ClientPtr); -static int SProcXpGetPageDimensions(ClientPtr); -static int SProcXpSetImageResolution(ClientPtr); -static int SProcXpGetImageResolution(ClientPtr); - -static void SendXpNotify(XpContextPtr, int, int); -static void SendAttributeNotify(XpContextPtr, int); -static int XpFreeClient(pointer, XID); -static int XpFreeContext(pointer, XID); -static int XpFreePage(pointer, XID); -static Bool XpCloseScreen(int, ScreenPtr); -static CARD32 GetAllEventMasks(XpContextPtr); -static struct _XpClient *CreateXpClient(ClientPtr); -static struct _XpClient *FindClient(XpContextPtr, ClientPtr); -static struct _XpClient *AcquireClient(XpContextPtr, ClientPtr); - -typedef struct _driver { - struct _driver *next; - char *name; - int (* CreateContext)(XpContextPtr); -} XpDriverRec, *XpDriverPtr; - -typedef struct _xpScreen { - Bool (* CloseScreen)(int, ScreenPtr); - struct _driver *drivers; -} XpScreenRec, *XpScreenPtr; - -/* - * Each context has a list of XpClients indicating which clients have - * associated this context with their connection. - * Each such client has a RTclient resource allocated for it, - * and this per-client - * resource is used to delete the XpClientRec if/when the client closes - * its connection. - * The list of XpClients is also walked if/when the context is destroyed - * so that the ContextPtr can be removed from the client's devPrivates. - */ -typedef struct _XpClient { - struct _XpClient *pNext; - ClientPtr client; - XpContextPtr context; - CARD32 eventMask; - XID contextClientID; /* unneeded sanity check? */ -} XpClientRec, *XpClientPtr; - -static void FreeXpClient(XpClientPtr, Bool); - -/* - * Each StartPage request specifies a window which forms the top level - * window of the page. One of the following structs is created as a - * RTpage resource with the same ID as the window itself. This enables - * us to clean up when/if the window is destroyed, and to prevent the - * same window from being simultaneously referenced in multiple contexts. - * The page resource is created at the first StartPage on a given window, - * and is only destroyed when/if the window is destroyed. When the - * EndPage is recieved (or an EndDoc or EndJob) the context field is - * set to NULL, but the resource remains alive. - */ -typedef struct _XpPage { - XpContextPtr context; -} XpPageRec, *XpPagePtr; - -typedef struct _XpStPageRec { - XpContextPtr pContext; - Bool slept; - XpPagePtr pPage; - WindowPtr pWin; -} XpStPageRec, *XpStPagePtr; - -typedef struct _XpStDocRec { - XpContextPtr pContext; - Bool slept; - CARD8 type; -} XpStDocRec, *XpStDocPtr; - -#define QUADPAD(x) ((((x)+3)>>2)<<2) - -/* - * Possible bit-mask values in the "state" field of a XpContextRec. - */ -#define JOB_STARTED (1 << 0) -#define DOC_RAW_STARTED (1 << 1) -#define DOC_COOKED_STARTED (1 << 2) -#define PAGE_STARTED (1 << 3) -#define GET_DOC_DATA_STARTED (1 << 4) -#define JOB_GET_DATA (1 << 5) - -static XpScreenPtr XpScreens[MAXSCREENS]; -static unsigned char XpReqCode; -static int XpEventBase; -static int XpErrorBase; -static DevPrivateKey XpClientPrivateKey = &XpClientPrivateKey; - -#define XP_GETPRIV(pClient) ((XpContextPtr) \ - dixLookupPrivate(&(pClient)->devPrivates, XpClientPrivateKey)) -#define XP_SETPRIV(pClient, p) \ - dixSetPrivate(&(pClient)->devPrivates, XpClientPrivateKey, p) - -/* - * There are three types of resources involved. One is the resource associated - * with the context itself, with an ID specified by a printing client. The - * next is a resource created by us on the client's behalf (and unknown to - * the client) when a client inits or sets a context which allows us to - * track each client's interest in events - * on a particular context, and also allows us to clean up this interest - * record when/if the client's connection is closed. Finally, there is - * a resource created for each window that's specified in a StartPage. This - * resource carries the same ID as the window itself, and enables us to - * easily prevent the same window being referenced in multiple contexts - * simultaneously, and enables us to clean up if the window is destroyed - * before the EndPage. - */ -static RESTYPE RTclient, RTcontext, RTpage; - -/* - * allEvents is the OR of all the legal event mask bits. - */ -static CARD32 allEvents = XPPrintMask | XPAttributeMask; - - -/******************************************************************************* - * - * ExtensionInit, Driver Init functions, QueryVersion, and Dispatch procs - * - ******************************************************************************/ - -/* - * XpExtensionInit - * - * Called from InitExtensions in main() usually through miinitextension - * - */ - -void -XpExtensionInit(INITARGS) -{ - ExtensionEntry *extEntry; - int i; - - RTclient = CreateNewResourceType(XpFreeClient); - RTcontext = CreateNewResourceType(XpFreeContext); - RTpage = CreateNewResourceType(XpFreePage); - if (RTclient && RTcontext && RTpage && - (extEntry = AddExtension(XP_PRINTNAME, XP_EVENTS, XP_ERRORS, - ProcXpDispatch, ProcXpSwappedDispatch, - XpResetProc, StandardMinorOpcode))) - { - XpReqCode = (unsigned char)extEntry->base; - XpEventBase = extEntry->eventBase; - XpErrorBase = extEntry->errorBase; - EventSwapVector[XpEventBase] = (EventSwapPtr) SwapXpNotifyEvent; - EventSwapVector[XpEventBase+1] = (EventSwapPtr) SwapXpAttributeEvent; - } - - for(i = 0; i < MAXSCREENS; i++) - { - /* - * If a screen has registered with our extension, then we - * wrap the screen's CloseScreen function to allow us to - * reset our ContextPrivate stuff. Note that this - * requires a printing DDX to call XpRegisterInitFunc - * _before_ this extension is initialized - i.e. at screen init - * time, _not_ at root window creation time. - */ - if(XpScreens[i] != (XpScreenPtr)NULL) - { - XpScreens[i]->CloseScreen = screenInfo.screens[i]->CloseScreen; - screenInfo.screens[i]->CloseScreen = XpCloseScreen; - } - } -} - -static void -XpResetProc(ExtensionEntry *extEntry) -{ - /* - * We can't free up the XpScreens recs here, because extensions are - * closed before screens, and our CloseScreen function uses the XpScreens - * recs. - - int i; - - for(i = 0; i < MAXSCREENS; i++) - { - if(XpScreens[i] != (XpScreenPtr)NULL) - Xfree(XpScreens[i]); - XpScreens[i] = (XpScreenPtr)NULL; - } - */ -} - -static Bool -XpCloseScreen(int index, ScreenPtr pScreen) -{ - Bool (* CloseScreen)(int, ScreenPtr); - - CloseScreen = XpScreens[index]->CloseScreen; - if(XpScreens[index] != (XpScreenPtr)NULL) - { - XpDriverPtr pDriv, nextDriv; - - pDriv = XpScreens[index]->drivers; - while(pDriv != (XpDriverPtr)NULL) - { - nextDriv = pDriv->next; - Xfree(pDriv); - pDriv = nextDriv; - } - Xfree(XpScreens[index]); - } - XpScreens[index] = (XpScreenPtr)NULL; - - return (*CloseScreen)(index, pScreen); -} - -/* - * XpRegisterInitFunc tells the print extension which screens - * are printers as opposed to displays, and what drivers are - * supported on each screen. This eliminates the need of - * allocating print-related private structures on windows on _all_ screens. - * It also hands the extension a pointer to the routine to be called - * whenever a context gets created for a particular driver on this screen. - */ -void -XpRegisterInitFunc(ScreenPtr pScreen, char *driverName, int (*initContext)(struct _XpContext *)) -{ - XpDriverPtr pDriver; - - if(XpScreens[pScreen->myNum] == 0) - { - if((XpScreens[pScreen->myNum] = - (XpScreenPtr) Xalloc(sizeof(XpScreenRec))) == 0) - return; - XpScreens[pScreen->myNum]->CloseScreen = 0; - XpScreens[pScreen->myNum]->drivers = 0; - } - - if((pDriver = (XpDriverPtr)Xalloc(sizeof(XpDriverRec))) == 0) - return; - pDriver->next = XpScreens[pScreen->myNum]->drivers; - pDriver->name = driverName; - pDriver->CreateContext = initContext; - XpScreens[pScreen->myNum]->drivers = pDriver; -} - -static int -ProcXpDispatch(ClientPtr client) -{ - REQUEST(xReq); - - switch(stuff->data) - { - case X_PrintQueryVersion: - return ProcXpQueryVersion(client); - case X_PrintGetPrinterList: - return ProcXpGetPrinterList(client); - case X_PrintCreateContext: - return ProcXpCreateContext(client); - case X_PrintSetContext: - return ProcXpSetContext(client); - case X_PrintGetContext: - return ProcXpGetContext(client); - case X_PrintDestroyContext: - return ProcXpDestroyContext(client); - case X_PrintGetContextScreen: - return ProcXpGetContextScreen(client); - case X_PrintStartJob: - return ProcXpStartJob(client); - case X_PrintEndJob: - return ProcXpEndJob(client); - case X_PrintStartDoc: - return ProcXpStartDoc(client); - case X_PrintEndDoc: - return ProcXpEndDoc(client); - case X_PrintStartPage: - return ProcXpStartPage(client); - case X_PrintEndPage: - return ProcXpEndPage(client); - case X_PrintSelectInput: - return ProcXpSelectInput(client); - case X_PrintInputSelected: - return ProcXpInputSelected(client); - case X_PrintPutDocumentData: - return ProcXpPutDocumentData(client); - case X_PrintGetDocumentData: - return ProcXpGetDocumentData(client); - case X_PrintSetAttributes: - return ProcXpSetAttributes(client); - case X_PrintGetAttributes: - return ProcXpGetAttributes(client); - case X_PrintGetOneAttribute: - return ProcXpGetOneAttribute(client); - case X_PrintRehashPrinterList: - return ProcXpRehashPrinterList(client); - case X_PrintQueryScreens: - return ProcXpQueryScreens(client); - case X_PrintGetPageDimensions: - return ProcXpGetPageDimensions(client); - case X_PrintSetImageResolution: - return ProcXpSetImageResolution(client); - case X_PrintGetImageResolution: - return ProcXpGetImageResolution(client); - default: - return BadRequest; - } -} - -static int -ProcXpSwappedDispatch(ClientPtr client) -{ - int temp; - REQUEST(xReq); - - switch(stuff->data) - { - case X_PrintQueryVersion: - swaps(&stuff->length, temp); - return ProcXpQueryVersion(client); - case X_PrintGetPrinterList: - return SProcXpGetPrinterList(client); - case X_PrintCreateContext: - return SProcXpCreateContext(client); - case X_PrintSetContext: - return SProcXpSetContext(client); - case X_PrintGetContext: - return SProcXpGetContext(client); - case X_PrintDestroyContext: - return SProcXpDestroyContext(client); - case X_PrintGetContextScreen: - return SProcXpGetContextScreen(client); - case X_PrintStartJob: - return SProcXpStartJob(client); - case X_PrintEndJob: - return SProcXpEndJob(client); - case X_PrintStartDoc: - return SProcXpStartDoc(client); - case X_PrintEndDoc: - return SProcXpEndDoc(client); - case X_PrintStartPage: - return SProcXpStartPage(client); - case X_PrintEndPage: - return SProcXpEndPage(client); - case X_PrintSelectInput: - return SProcXpSelectInput(client); - case X_PrintInputSelected: - return SProcXpInputSelected(client); - case X_PrintPutDocumentData: - return SProcXpPutDocumentData(client); - case X_PrintGetDocumentData: - return SProcXpGetDocumentData(client); - case X_PrintSetAttributes: - return SProcXpSetAttributes(client); - case X_PrintGetAttributes: - return SProcXpGetAttributes(client); - case X_PrintGetOneAttribute: - return SProcXpGetOneAttribute(client); - case X_PrintRehashPrinterList: - return SProcXpRehashPrinterList(client); - case X_PrintQueryScreens: - swaps(&stuff->length, temp); - return ProcXpQueryScreens(client); - case X_PrintGetPageDimensions: - return SProcXpGetPageDimensions(client); - case X_PrintSetImageResolution: - return SProcXpSetImageResolution(client); - case X_PrintGetImageResolution: - return SProcXpGetImageResolution(client); - default: - return BadRequest; - } -} - -static int -ProcXpQueryVersion(ClientPtr client) -{ - /* REQUEST(xPrintQueryVersionReq); */ - xPrintQueryVersionReply rep; - register int n; - long l; - - REQUEST_SIZE_MATCH(xPrintQueryVersionReq); - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; - rep.majorVersion = XP_MAJOR_VERSION; - rep.minorVersion = XP_MINOR_VERSION; - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.majorVersion, n); - swaps(&rep.minorVersion, n); - } - WriteToClient(client, sz_xPrintQueryVersionReply, (char *)&rep); - return client->noClientException; -} - -/******************************************************************************* - * - * GetPrinterList : Return a list of all printers associated with this - * server. Calls XpDiGetPrinterList, which is defined in - * the device-independent code in Xserver/Xprint. - * - ******************************************************************************/ - -static int -ProcXpGetPrinterList(ClientPtr client) -{ - REQUEST(xPrintGetPrinterListReq); - int totalSize; - int numEntries; - XpDiListEntry **pList; - xPrintGetPrinterListReply *rep; - int n, i, totalBytes; - long l; - char *curByte; - - REQUEST_AT_LEAST_SIZE(xPrintGetPrinterListReq); - - totalSize = ((sz_xPrintGetPrinterListReq) >> 2) + - ((stuff->printerNameLen + 3) >> 2) + - ((stuff->localeLen + 3) >> 2); - if(totalSize != client->req_len) - return BadLength; - - pList = XpDiGetPrinterList(stuff->printerNameLen, (char *)(stuff + 1), - stuff->localeLen, (char *)((stuff + 1) + - QUADPAD(stuff->printerNameLen))); - - for(numEntries = 0, totalBytes = sz_xPrintGetPrinterListReply; - pList[numEntries] != (XpDiListEntry *)NULL; - numEntries++) - { - totalBytes += 2 * sizeof(CARD32); - totalBytes += QUADPAD(strlen(pList[numEntries]->name)); - totalBytes += QUADPAD(strlen(pList[numEntries]->description)); - } - - if((rep = (xPrintGetPrinterListReply *)xalloc(totalBytes)) == - (xPrintGetPrinterListReply *)NULL) - return BadAlloc; - - rep->type = X_Reply; - rep->length = (totalBytes - sz_xPrintGetPrinterListReply) >> 2; - rep->sequenceNumber = client->sequence; - rep->listCount = numEntries; - if (client->swapped) { - swaps(&rep->sequenceNumber, n); - swapl(&rep->length, l); - swapl(&rep->listCount, l); - } - - for(i = 0, curByte = (char *)(rep + 1); i < numEntries; i++) - { - CARD32 *pCrd; - int len; - - pCrd = (CARD32 *)curByte; - len = strlen(pList[i]->name); - *pCrd = len; - if (client->swapped) - swapl((long *)curByte, l); - curByte += sizeof(CARD32); - strncpy(curByte, pList[i]->name, len); - curByte += QUADPAD(len); - - pCrd = (CARD32 *)curByte; - len = strlen(pList[i]->description); - *pCrd = len; - if (client->swapped) - swapl((long *)curByte, l); - curByte += sizeof(CARD32); - strncpy(curByte, pList[i]->description, len); - curByte += QUADPAD(len); - } - - XpDiFreePrinterList(pList); - - WriteToClient(client, totalBytes, (char *)rep); - xfree(rep); - return client->noClientException; -} - -/******************************************************************************* - * - * QueryScreens: Returns the list of screens which are associated with - * print drivers. - * - ******************************************************************************/ - -static int -ProcXpQueryScreens(ClientPtr client) -{ - /* REQUEST(xPrintQueryScreensReq); */ - int i, numPrintScreens, totalSize; - WINDOW *pWinId; - xPrintQueryScreensReply *rep; - long l; - - REQUEST_SIZE_MATCH(xPrintQueryScreensReq); - - rep = (xPrintQueryScreensReply *)xalloc(sz_xPrintQueryScreensReply); - pWinId = (WINDOW *)(rep + 1); - - for(i = 0, numPrintScreens = 0, totalSize = sz_xPrintQueryScreensReply; - i < MAXSCREENS; i++) - { - /* - * If a screen has registered with our extension, then it's - * a printer screen. - */ - if(XpScreens[i] != (XpScreenPtr)NULL) - { - numPrintScreens++; - totalSize += sizeof(WINDOW); - rep = (xPrintQueryScreensReply *)xrealloc(rep, totalSize); - /* fix of bug: pWinId should be set again after reallocate rep */ - pWinId = (WINDOW *)(rep + 1); - *pWinId = WindowTable[i]->drawable.id; - if (client->swapped) - swapl((long *)pWinId, l); - } - } - - rep->type = X_Reply; - rep->sequenceNumber = client->sequence; - rep->length = (totalSize - sz_xPrintQueryScreensReply) >> 2; - rep->listCount = numPrintScreens; - if (client->swapped) - { - int n; - - swaps(&rep->sequenceNumber, n); - swapl(&rep->length, l); - swapl(&rep->listCount, l); - } - - WriteToClient(client, totalSize, (char *)rep); - xfree(rep); - return client->noClientException; -} - -static int -ProcXpGetPageDimensions(ClientPtr client) -{ - REQUEST(xPrintGetPageDimensionsReq); - CARD16 width, height; - xRectangle rect; - xPrintGetPageDimensionsReply rep; - XpContextPtr pContext; - int result; - - REQUEST_SIZE_MATCH(xPrintGetPageDimensionsReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if((pContext->funcs.GetMediumDimensions == 0) || - (pContext->funcs.GetReproducibleArea == 0)) - return BadImplementation; - - result = pContext->funcs.GetMediumDimensions(pContext, &width, &height); - if(result != Success) - return result; - - result = pContext->funcs.GetReproducibleArea(pContext, &rect); - if(result != Success) - return result; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.width = width; - rep.height = height; - rep.rx = rect.x; - rep.ry = rect.y; - rep.rwidth = rect.width; - rep.rheight = rect.height; - - if(client->swapped) - { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.width, n); - swaps(&rep.height, n); - swaps(&rep.rx, n); - swaps(&rep.ry, n); - swaps(&rep.rwidth, n); - swaps(&rep.rheight, n); - } - - WriteToClient(client, sz_xPrintGetPageDimensionsReply, (char *)&rep); - return client->noClientException; -} - -static int -ProcXpSetImageResolution(ClientPtr client) -{ - REQUEST(xPrintSetImageResolutionReq); - xPrintSetImageResolutionReply rep; - XpContextPtr pContext; - Bool status; - int result; - - REQUEST_SIZE_MATCH(xPrintSetImageResolutionReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - rep.prevRes = pContext->imageRes; - if(pContext->funcs.SetImageResolution != 0) { - result = pContext->funcs.SetImageResolution(pContext, - (int)stuff->imageRes, - &status); - if(result != Success) - status = FALSE; - } else - status = FALSE; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.status = status; - - if(client->swapped) - { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.prevRes, n); - } - - WriteToClient(client, sz_xPrintSetImageResolutionReply, (char *)&rep); - return client->noClientException; -} - -static int -ProcXpGetImageResolution(ClientPtr client) -{ - REQUEST(xPrintGetImageResolutionReq); - xPrintGetImageResolutionReply rep; - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintGetImageResolutionReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.imageRes = pContext->imageRes; - - if(client->swapped) - { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.imageRes, n); - } - - WriteToClient(client, sz_xPrintGetImageResolutionReply, (char *)&rep); - return client->noClientException; -} - -/******************************************************************************* - * - * RehashPrinterList : Cause the server's list of printers to be rebuilt. - * This allows new printers to be added, or old ones - * deleted without needing to restart the server. - * - ******************************************************************************/ - -static int -ProcXpRehashPrinterList(ClientPtr client) -{ - /* REQUEST(xPrintRehashPrinterListReq); */ - - REQUEST_SIZE_MATCH(xPrintRehashPrinterListReq); - - return XpRehashPrinterList(); -} - -/****************************************************************************** - * - * Context functions: Init, Set, Destroy, FreeContext - * AllocateContextPrivateIndex, AllocateContextPrivate - * and supporting functions. - * - * Init creates a context, creates a XpClientRec for the calling - * client, and stores the contextPtr in the client's devPrivates. - * - * Set creates a XpClientRec for the calling client, and stores the - * contextPtr in the client's devPrivates unless the context is None. - * If the context is None, then the client's connection association - * with any context is removed. - * - * Destroy frees any and all XpClientRecs associated with the context, - * frees the context itself, and removes the contextPtr from any - * relevant client devPrivates. - * - * FreeContext is called by FreeResource to free up a context. - * - ******************************************************************************/ - -/* - * CreateContext creates and initializes the memory for the context itself. - * The driver's CreateContext function - * is then called. - */ -static int -ProcXpCreateContext(ClientPtr client) -{ - REQUEST(xPrintCreateContextReq); - XpScreenPtr pPrintScreen; - WindowPtr pRoot; - char *driverName; - XpContextPtr pContext; - int result = Success; - XpDriverPtr pDriver; - - REQUEST_AT_LEAST_SIZE(xPrintCreateContextReq); - - LEGAL_NEW_RESOURCE(stuff->contextID, client); - - /* - * Check to see if the printer name is valid. - */ - if((pRoot = XpDiValidatePrinter((char *)(stuff + 1), stuff->printerNameLen)) == - (WindowPtr)NULL) - return BadMatch; - - pPrintScreen = XpScreens[pRoot->drawable.pScreen->myNum]; - - /* - * Allocate and add the context resource. - */ - if((pContext = (XpContextPtr) xalloc(sizeof(XpContextRec))) == - (XpContextPtr) NULL) - return BadAlloc; - - if(AddResource(stuff->contextID, RTcontext, (pointer) pContext) - != TRUE) - { - xfree(pContext); - return BadAlloc; - } - - pContext->contextID = stuff->contextID; - pContext->clientHead = (XpClientPtr)NULL; - pContext->screenNum = pRoot->drawable.pScreen->myNum; - pContext->state = 0; - pContext->clientSlept = (ClientPtr)NULL; - pContext->imageRes = 0; - pContext->devPrivates = NULL; - - pContext->funcs.DestroyContext = 0; - pContext->funcs.StartJob = 0; - pContext->funcs.EndJob = 0; - pContext->funcs.StartDoc = 0; - pContext->funcs.EndDoc = 0; - pContext->funcs.StartPage = 0; - pContext->funcs.EndPage = 0; - pContext->funcs.PutDocumentData = 0; - pContext->funcs.GetDocumentData = 0; - pContext->funcs.GetAttributes = 0; - pContext->funcs.GetOneAttribute = 0; - pContext->funcs.SetAttributes = 0; - pContext->funcs.AugmentAttributes = 0; - pContext->funcs.GetMediumDimensions = 0; - pContext->funcs.GetReproducibleArea = 0; - pContext->funcs.SetImageResolution = 0; - - if((pContext->printerName = (char *)xalloc(stuff->printerNameLen + 1)) == - (char *)NULL) - { - /* Freeing the context also causes the XpClients to be freed. */ - FreeResource(stuff->contextID, RT_NONE); - return BadAlloc; - } - strncpy(pContext->printerName, (char *)(stuff + 1), stuff->printerNameLen); - pContext->printerName[stuff->printerNameLen] = (char)'\0'; - - driverName = XpDiGetDriverName(pRoot->drawable.pScreen->myNum, - pContext->printerName); - - for(pDriver = pPrintScreen->drivers; - pDriver != (XpDriverPtr)NULL; - pDriver = pDriver->next) - { - if(!strcmp(driverName, pDriver->name)) - { - if(pDriver->CreateContext != 0) - pDriver->CreateContext(pContext); - else - return BadImplementation; - break; - } - } - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -/* - * SetContext creates the calling client's contextClient resource, - * and stashes the contextID in the client's devPrivate. - */ -static int -ProcXpSetContext(ClientPtr client) -{ - REQUEST(xPrintSetContextReq); - - XpContextPtr pContext; - XpClientPtr pPrintClient; - int result = Success; - - REQUEST_AT_LEAST_SIZE(xPrintSetContextReq); - - if((pContext = XP_GETPRIV(client)) != (pointer)NULL) - { - /* - * Erase this client's knowledge of its old context, if any. - */ - if((pPrintClient = FindClient(pContext, client)) != (XpClientPtr)NULL) - { - XpUnsetFontResFunc(client); - - if(pPrintClient->eventMask == 0) - FreeXpClient(pPrintClient, TRUE); - } - - XP_SETPRIV(client, NULL); - } - if(stuff->printContext == None) - return Success; - - /* - * Check to see that the supplied XID is really a valid print context - * in this server. - */ - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if((pPrintClient = AcquireClient(pContext, client)) == (XpClientPtr)NULL) - return BadAlloc; - - XP_SETPRIV(client, pContext); - - XpSetFontResFunc(client); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -XpContextPtr -XpGetPrintContext(ClientPtr client) -{ - return XP_GETPRIV(client); -} - -static int -ProcXpGetContext(ClientPtr client) -{ - /* REQUEST(xPrintGetContextReq); */ - xPrintGetContextReply rep; - - XpContextPtr pContext; - register int n; - register long l; - - REQUEST_SIZE_MATCH(xPrintGetContextReq); - - if((pContext = XP_GETPRIV(client)) == (pointer)NULL) - rep.printContext = None; - else - rep.printContext = pContext->contextID; - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.printContext, l); - } - WriteToClient(client, sz_xPrintGetContextReply, (char *)&rep); - return client->noClientException; -} - - -/* - * DestroyContext frees the context associated with the calling client. - * It operates by freeing the context resource ID, thus causing XpFreeContext - * to be called. - */ -static int -ProcXpDestroyContext(ClientPtr client) -{ - REQUEST(xPrintDestroyContextReq); - - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintDestroyContextReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixDestroyAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - XpUnsetFontResFunc(client); - - FreeResource(pContext->contextID, RT_NONE); - - return Success; -} - -static int -ProcXpGetContextScreen(ClientPtr client) -{ - REQUEST(xPrintGetContextScreenReq); - xPrintGetContextScreenReply rep; - XpContextPtr pContext; - int n; - long l; - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - return XpErrorBase+XPBadContext; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.rootWindow = WindowTable[pContext->screenNum]->drawable.id; - - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.rootWindow, l); - } - - WriteToClient(client, sz_xPrintGetContextScreenReply, (char *)&rep); - return client->noClientException; -} - -/* - * XpFreeContext is the routine called by dix:FreeResource when a context - * resource ID is freed. - * It checks to see if there's a partial job pending on the context, and - * if so it calls the appropriate End procs with the cancel flag set. - * It calls the driver's DestroyContext routine to allow the driver to clean - * up any context-related memory or state. - * It calls FreeXpClient to free all the - * associated XpClientRecs and to set all the client->devPrivates to NULL. - * It frees the printer name string, and frees the context - * itself. - */ -static int -XpFreeContext(pointer data, XID id) -{ - XpContextPtr pContext = (XpContextPtr)data; - - /* Clean up any pending job on this context */ - if(pContext->state != 0) - { - if(pContext->state & PAGE_STARTED) - { - WindowPtr pWin = (WindowPtr )LookupIDByType( - pContext->pageWin, RT_WINDOW); - XpPagePtr pPage = (XpPagePtr)LookupIDByType( - pContext->pageWin, RTpage); - - pContext->funcs.EndPage(pContext, pWin); - SendXpNotify(pContext, XPEndPageNotify, TRUE); - pContext->state &= ~PAGE_STARTED; - if(pPage) - pPage->context = (XpContextPtr)NULL; - } - if((pContext->state & DOC_RAW_STARTED) || - (pContext->state & DOC_COOKED_STARTED)) - { - pContext->funcs.EndDoc(pContext, TRUE); - SendXpNotify(pContext, XPEndDocNotify, TRUE); - pContext->state &= ~DOC_RAW_STARTED; - pContext->state &= ~DOC_COOKED_STARTED; - } - if(pContext->funcs.EndJob != 0) - { - pContext->funcs.EndJob(pContext, TRUE); - SendXpNotify(pContext, XPEndJobNotify, TRUE); - pContext->state &= ~JOB_STARTED; - pContext->state &= ~GET_DOC_DATA_STARTED; - } - } - - /* - * Tell the driver we're destroying the context - * This allows the driver to free and ContextPrivate data - */ - if(pContext->funcs.DestroyContext != 0) - pContext->funcs.DestroyContext(pContext); - - /* Free up all the XpClientRecs */ - while(pContext->clientHead != (XpClientPtr)NULL) - { - FreeXpClient(pContext->clientHead, TRUE); - } - - xfree(pContext->printerName); - dixFreePrivates(pContext->devPrivates); - xfree(pContext); - return Success; /* ??? */ -} - -/* - * XpFreeClient is the routine called by dix:FreeResource when a RTclient - * is freed. It simply calls the FreeXpClient routine to do the work. - */ -static int -XpFreeClient(pointer data, XID id) -{ - FreeXpClient((XpClientPtr)data, TRUE); - return Success; -} - -/* - * FreeXpClient - * frees the ClientRec passed in, and sets the client->devPrivates to NULL - * if the client->devPrivates points to the same context as the XpClient. - * Called from XpFreeContext(from FreeResource), and - * XpFreeClient. The boolean freeResource specifies whether or not to call - * FreeResource for the XpClientRec's XID. We should free it except if we're - * called from XpFreeClient (which is itself called from FreeResource for the - * XpClientRec's XID). - */ -static void -FreeXpClient(XpClientPtr pXpClient, Bool freeResource) -{ - XpClientPtr pCurrent, pPrev; - XpContextPtr pContext = pXpClient->context; - - /* - * If we're freeing the clientRec associated with the context tied - * to the client's devPrivates, then we need to clear the devPrivates. - */ - if(XP_GETPRIV(pXpClient->client) == pXpClient->context) - { - XP_SETPRIV(pXpClient->client, NULL); - } - - for(pPrev = (XpClientPtr)NULL, pCurrent = pContext->clientHead; - pCurrent != (XpClientPtr)NULL; - pCurrent = pCurrent->pNext) - { - if(pCurrent == pXpClient) - { - if(freeResource == TRUE) - FreeResource (pCurrent->contextClientID, RTclient); - - if (pPrev != (XpClientPtr)NULL) - pPrev->pNext = pCurrent->pNext; - else - pContext->clientHead = pCurrent->pNext; - - xfree (pCurrent); - break; - } - pPrev = pCurrent; - } -} - -/* - * CreateXpClient takes a ClientPtr and returns a pointer to a - * XpClientRec which it allocates. It also initializes the Rec, - * including adding a resource on behalf of the client to enable the - * freeing of the Rec when the client's connection is closed. - */ -static XpClientPtr -CreateXpClient(ClientPtr client) -{ - XpClientPtr pNewPrintClient; - XID clientResource; - - if((pNewPrintClient = (XpClientPtr)xalloc(sizeof(XpClientRec))) == - (XpClientPtr)NULL) - return (XpClientPtr)NULL; - - clientResource = FakeClientID(client->index); - if(!AddResource(clientResource, RTclient, (pointer)pNewPrintClient)) - { - xfree (pNewPrintClient); - return (XpClientPtr)NULL; - } - - pNewPrintClient->pNext = (XpClientPtr)NULL; - pNewPrintClient->client = client; - pNewPrintClient->context = (XpContextPtr)NULL; - pNewPrintClient->eventMask = 0; - pNewPrintClient->contextClientID = clientResource; - - return pNewPrintClient; -} - -/* - * XpFreePage is the routine called by dix:FreeResource to free the page - * resource built with the same ID as a page window. It checks to see - * if we're in the middle of a page, and if so calls the driver's EndPage - * function with 'cancel' set TRUE. It frees the memory associated with - * the page resource. - */ -static int -XpFreePage(pointer data, XID id) -{ - XpPagePtr page = (XpPagePtr)data; - int result = Success; - WindowPtr pWin = (WindowPtr )LookupIDByType(id, RT_WINDOW); - - /* Check to see if the window's being deleted in the middle of a page */ - if(page->context != (XpContextPtr)NULL && - page->context->state & PAGE_STARTED) - { - if(page->context->funcs.EndPage != 0) - result = page->context->funcs.EndPage(page->context, pWin); - SendXpNotify(page->context, XPEndPageNotify, (int)TRUE); - page->context->pageWin = 0; /* None, NULL??? XXX */ - } - - xfree(page); - return result; -} - -static XpClientPtr -AcquireClient(XpContextPtr pContext, ClientPtr client) -{ - XpClientPtr pXpClient; - - if((pXpClient = FindClient(pContext, client)) != (XpClientPtr)NULL) - return pXpClient; - - if((pXpClient = CreateXpClient(client)) == (XpClientPtr)NULL) - return (XpClientPtr)NULL; - - pXpClient->context = pContext; - pXpClient->pNext = pContext->clientHead; - pContext->clientHead = pXpClient; - - return pXpClient; -} - -static XpClientPtr -FindClient(XpContextPtr pContext, ClientPtr client) -{ - XpClientPtr pXpClient; - - for(pXpClient = pContext->clientHead; pXpClient != (XpClientPtr)NULL; - pXpClient = pXpClient->pNext) - { - if(pXpClient->client == client) return pXpClient; - } - return (XpClientPtr)NULL; -} - - -/****************************************************************************** - * - * Start/End Functions: StartJob, EndJob, StartDoc, EndDoc, StartPage, EndPage - * - ******************************************************************************/ - -static int -ProcXpStartJob(ClientPtr client) -{ - REQUEST(xPrintStartJobReq); - XpContextPtr pContext; - int result = Success; - - REQUEST_SIZE_MATCH(xPrintStartJobReq); - - /* Check to see that a context has been established by this client. */ - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadContext; - - if(pContext->state != 0) - return XpErrorBase+XPBadSequence; - - if(stuff->saveData != XPSpool && stuff->saveData != XPGetData) - { - client->errorValue = stuff->saveData; - return BadValue; - } - - if(pContext->funcs.StartJob != 0) - result = pContext->funcs.StartJob(pContext, - (stuff->saveData == XPGetData)? TRUE:FALSE, - client); - else - return BadImplementation; - - pContext->state = JOB_STARTED; - if(stuff->saveData == XPGetData) - pContext->state |= JOB_GET_DATA; - - SendXpNotify(pContext, XPStartJobNotify, FALSE); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpEndJob(ClientPtr client) -{ - REQUEST(xPrintEndJobReq); - int result = Success; - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintEndJobReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & JOB_STARTED)) - return XpErrorBase+XPBadSequence; - - /* Check for missing EndDoc */ - if((pContext->state & DOC_RAW_STARTED) || - (pContext->state & DOC_COOKED_STARTED)) - { - if(pContext->state & PAGE_STARTED) - { - WindowPtr pWin = (WindowPtr )LookupIDByType( - pContext->pageWin, RT_WINDOW); - XpPagePtr pPage = (XpPagePtr)LookupIDByType( - pContext->pageWin, RTpage); - - if(stuff->cancel != TRUE) - return XpErrorBase+XPBadSequence; - - if(pContext->funcs.EndPage != 0) - result = pContext->funcs.EndPage(pContext, pWin); - else - return BadImplementation; - - SendXpNotify(pContext, XPEndPageNotify, TRUE); - - pContext->state &= ~PAGE_STARTED; - - if(pPage) - pPage->context = (XpContextPtr)NULL; - - if(result != Success) return result; - } - - if(pContext->funcs.EndDoc != 0) - result = pContext->funcs.EndDoc(pContext, stuff->cancel); - else - return BadImplementation; - - SendXpNotify(pContext, XPEndDocNotify, stuff->cancel); - } - - if(pContext->funcs.EndJob != 0) - result = pContext->funcs.EndJob(pContext, stuff->cancel); - else - return BadImplementation; - - pContext->state = 0; - - SendXpNotify(pContext, XPEndJobNotify, stuff->cancel); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static Bool -DoStartDoc(ClientPtr client, XpStDocPtr c) -{ - XpContextPtr pContext = c->pContext; - - if(c->pContext->state & JOB_GET_DATA && - !(c->pContext->state & GET_DOC_DATA_STARTED)) - { - if(!c->slept) - { - c->slept = TRUE; - ClientSleep(client, (ClientSleepProcPtr)DoStartDoc, (pointer) c); - c->pContext->clientSlept = client; - } - return TRUE; - } - - if(pContext->funcs.StartDoc != 0) - (void) pContext->funcs.StartDoc(pContext, c->type); - else - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadImplementation); - return TRUE; - } - - if(c->type == XPDocNormal) - pContext->state |= DOC_COOKED_STARTED; - else - pContext->state |= DOC_RAW_STARTED; - - SendXpNotify(pContext, XPStartDocNotify, (int)FALSE); - - xfree(c); - return TRUE; -} - -static int -ProcXpStartDoc(ClientPtr client) -{ - REQUEST(xPrintStartDocReq); - int result = Success; - XpContextPtr pContext; - XpStDocPtr c; - - REQUEST_SIZE_MATCH(xPrintStartDocReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & JOB_STARTED) || - pContext->state & DOC_RAW_STARTED || - pContext->state & DOC_COOKED_STARTED) - return XpErrorBase+XPBadSequence; - - if(stuff->type != XPDocNormal && stuff->type != XPDocRaw) - { - client->errorValue = stuff->type; - return BadValue; - } - - c = (XpStDocPtr)xalloc(sizeof(XpStDocRec)); - c->pContext = pContext; - c->type = stuff->type; - c->slept = FALSE; - (void)DoStartDoc(client, c); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpEndDoc(ClientPtr client) -{ - REQUEST(xPrintEndDocReq); - XpContextPtr pContext; - int result = Success; - - REQUEST_SIZE_MATCH(xPrintEndDocReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & DOC_RAW_STARTED) && - !(pContext->state & DOC_COOKED_STARTED)) - return XpErrorBase+XPBadSequence; - - if(pContext->state & PAGE_STARTED) - { - if(stuff->cancel == TRUE) - { - WindowPtr pWin = (WindowPtr )LookupIDByType( - pContext->pageWin, RT_WINDOW); - XpPagePtr pPage = (XpPagePtr)LookupIDByType( - pContext->pageWin, RTpage); - - if(pContext->funcs.EndPage != 0) - result = pContext->funcs.EndPage(pContext, pWin); - else - return BadImplementation; - - SendXpNotify(pContext, XPEndPageNotify, TRUE); - - if(pPage) - pPage->context = (XpContextPtr)NULL; - } - else - return XpErrorBase+XPBadSequence; - if(result != Success) - return result; - } - - if(pContext->funcs.EndDoc != 0) - result = pContext->funcs.EndDoc(pContext, stuff->cancel); - else - return BadImplementation; - - pContext->state &= ~DOC_RAW_STARTED; - pContext->state &= ~DOC_COOKED_STARTED; - - SendXpNotify(pContext, XPEndDocNotify, stuff->cancel); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static Bool -DoStartPage( - ClientPtr client, - XpStPagePtr c) -{ - WindowPtr pWin = c->pWin; - int result = Success; - XpContextPtr pContext = c->pContext; - XpPagePtr pPage; - - if(c->pContext->state & JOB_GET_DATA && - !(c->pContext->state & GET_DOC_DATA_STARTED)) - { - if(!c->slept) - { - c->slept = TRUE; - ClientSleep(client, (ClientSleepProcPtr)DoStartPage, (pointer) c); - c->pContext->clientSlept = client; - } - return TRUE; - } - - if(!(pContext->state & DOC_COOKED_STARTED)) - { - /* Implied StartDoc if it was omitted */ - if(pContext->funcs.StartDoc != 0) - result = pContext->funcs.StartDoc(pContext, XPDocNormal); - else - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadImplementation); - return TRUE; - } - - if(result != Success) - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, result); - return TRUE; - } - - pContext->state |= DOC_COOKED_STARTED; - SendXpNotify(pContext, XPStartDocNotify, (int)FALSE); - } - - /* ensure the window's not already being used as a page */ - if((pPage = (XpPagePtr)LookupIDByType(c->pWin->drawable.id, RTpage)) != - (XpPagePtr)NULL) - { - if(pPage->context != (XpContextPtr)NULL) - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadWindow); - return TRUE; - } - } - else - { - if((pPage = (XpPagePtr)xalloc(sizeof(XpPageRec))) == (XpPagePtr)NULL) - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadAlloc); - return TRUE; - } - if(AddResource(c->pWin->drawable.id, RTpage, pPage) == FALSE) - { - xfree(pPage); - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadAlloc); - return TRUE; - } - } - - pPage->context = pContext; - pContext->pageWin = c->pWin->drawable.id; - - if(pContext->funcs.StartPage != 0) - result = pContext->funcs.StartPage(pContext, pWin); - else - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadImplementation); - return TRUE; - } - - pContext->state |= PAGE_STARTED; - - (void)MapWindow(pWin, client); - - SendXpNotify(pContext, XPStartPageNotify, (int)FALSE); - - return TRUE; -} - -static int -ProcXpStartPage(ClientPtr client) -{ - REQUEST(xPrintStartPageReq); - WindowPtr pWin; - int result = Success; - XpContextPtr pContext; - XpStPagePtr c; - - REQUEST_SIZE_MATCH(xPrintStartPageReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & JOB_STARTED)) - return XpErrorBase+XPBadSequence; - - /* can't have pages in a raw documented */ - if(pContext->state & DOC_RAW_STARTED) - return XpErrorBase+XPBadSequence; - - if(pContext->state & PAGE_STARTED) - return XpErrorBase+XPBadSequence; - - result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess); - if (result != Success) - return result; - if (pWin->drawable.pScreen->myNum != pContext->screenNum) - return BadWindow; - - if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL) - return BadAlloc; - c->pContext = pContext; - c->slept = FALSE; - c->pWin = pWin; - - (void)DoStartPage(client, c); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpEndPage(ClientPtr client) -{ - REQUEST(xPrintEndPageReq); - int result = Success; - XpContextPtr pContext; - XpPagePtr page; - WindowPtr pWin; - - REQUEST_SIZE_MATCH(xPrintEndPageReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & PAGE_STARTED)) - return XpErrorBase+XPBadSequence; - - pWin = (WindowPtr )LookupIDByType(pContext->pageWin, RT_WINDOW); - - /* Call the ddx's EndPage proc. */ - if(pContext->funcs.EndPage != 0) - result = pContext->funcs.EndPage(pContext, pWin); - else - return BadImplementation; - - if((page = (XpPagePtr)LookupIDByType(pContext->pageWin, RTpage)) != - (XpPagePtr)NULL) - page->context = (XpContextPtr)NULL; - - pContext->state &= ~PAGE_STARTED; - pContext->pageWin = 0; /* None, NULL??? XXX */ - - (void)UnmapWindow(pWin, FALSE); - - SendXpNotify(pContext, XPEndPageNotify, stuff->cancel); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -/******************************************************************************* - * - * Document Data Functions: PutDocumentData, GetDocumentData - * - ******************************************************************************/ - -static int -ProcXpPutDocumentData(ClientPtr client) -{ - REQUEST(xPrintPutDocumentDataReq); - XpContextPtr pContext; - DrawablePtr pDraw; - int result = Success; - unsigned totalSize; - char *pData, *pDoc_fmt, *pOptions; - - REQUEST_AT_LEAST_SIZE(xPrintPutDocumentDataReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & DOC_RAW_STARTED) && - !(pContext->state & DOC_COOKED_STARTED)) - return XpErrorBase+XPBadSequence; - - if (stuff->drawable) { - if (pContext->state & DOC_RAW_STARTED) - return BadDrawable; - result = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, - DixWriteAccess); - if (result != Success) - return result; - if (pDraw->pScreen->myNum != pContext->screenNum) - return BadDrawable; - } else { - if (pContext->state & DOC_COOKED_STARTED) - return BadDrawable; - pDraw = NULL; - } - - pData = (char *)(&stuff[1]); - - totalSize = (stuff->len_data + 3) >> 2; - pDoc_fmt = pData + (totalSize << 2); - - totalSize += (stuff->len_fmt + 3) >> 2; - pOptions = pData + (totalSize << 2); - - totalSize += (stuff->len_options + 3) >> 2; - if((totalSize + (sz_xPrintPutDocumentDataReq >> 2)) != client->req_len) - return BadLength; - - if(pContext->funcs.PutDocumentData != 0) - { - result = (*pContext->funcs.PutDocumentData)(pContext, pDraw, - pData, stuff->len_data, - pDoc_fmt, stuff->len_fmt, - pOptions, stuff->len_options, - client); - } - else - return BadImplementation; - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpGetDocumentData(ClientPtr client) -{ - REQUEST(xPrintGetDocumentDataReq); - xPrintGetDocumentDataReply rep; - XpContextPtr pContext; - int result = Success; - - REQUEST_SIZE_MATCH(xPrintGetDocumentDataReq); - - if((pContext = (XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.GetDocumentData == 0) - return BadImplementation; - - if(!(pContext->state & JOB_GET_DATA) || - pContext->state & GET_DOC_DATA_STARTED) - return XpErrorBase+XPBadSequence; - - if(stuff->maxBufferSize <= 0) - { - client->errorValue = stuff->maxBufferSize; - return BadValue; /* gotta have a positive buffer size */ - } - - result = (*pContext->funcs.GetDocumentData)(pContext, client, - stuff->maxBufferSize); - if(result != Success) - { - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.dataLen = 0; - rep.statusCode = 1; - rep.finishedFlag = TRUE; - if (client->swapped) { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.statusCode, l); /* XXX Why are these longs??? */ - swapl(&rep.finishedFlag, l); /* XXX Why are these longs??? */ - } - (void)WriteToClient(client,sz_xPrintGetDocumentDataReply,(char *)&rep); - } - else - pContext->state |= GET_DOC_DATA_STARTED; - - if(pContext->clientSlept != (ClientPtr)NULL) - { - ClientSignal(pContext->clientSlept); - ClientWakeup(pContext->clientSlept); - pContext->clientSlept = (ClientPtr)NULL; - } - - return result; -} - -/******************************************************************************* - * - * Attribute requests: GetAttributes, SetAttributes, GetOneAttribute - * - ******************************************************************************/ - -static int -ProcXpGetAttributes(ClientPtr client) -{ - REQUEST(xPrintGetAttributesReq); - XpContextPtr pContext; - char *attrs; - xPrintGetAttributesReply *pRep; - int totalSize, n; - unsigned long l; - - REQUEST_SIZE_MATCH(xPrintGetAttributesReq); - - if(stuff->type < XPJobAttr || stuff->type > XPServerAttr) - { - client->errorValue = stuff->type; - return BadValue; - } - - if(stuff->type != XPServerAttr) - { - if((pContext = (XpContextPtr)SecurityLookupIDByType( - client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.GetAttributes == 0) - return BadImplementation; - if((attrs = (*pContext->funcs.GetAttributes)(pContext, stuff->type)) == - (char *)NULL) - return BadAlloc; - } - else - { - if((attrs = XpGetAttributes((XpContextPtr)NULL, XPServerAttr)) == - (char *)NULL) - return BadAlloc; - } - - totalSize = sz_xPrintGetAttributesReply + QUADPAD(strlen(attrs)); - if((pRep = (xPrintGetAttributesReply *)malloc(totalSize)) == - (xPrintGetAttributesReply *)NULL) - return BadAlloc; - - pRep->type = X_Reply; - pRep->length = (totalSize - sz_xPrintGetAttributesReply) >> 2; - pRep->sequenceNumber = client->sequence; - pRep->stringLen = strlen(attrs); - - if (client->swapped) { - swaps(&pRep->sequenceNumber, n); - swapl(&pRep->length, l); - swapl(&pRep->stringLen, l); - } - - strncpy((char*)(pRep + 1), attrs, strlen(attrs)); - xfree(attrs); - - WriteToClient(client, totalSize, (char *)pRep); - - xfree(pRep); - - return client->noClientException; -} - -static int -ProcXpSetAttributes(ClientPtr client) -{ - REQUEST(xPrintSetAttributesReq); - int result = Success; - XpContextPtr pContext; - char *attr; - - REQUEST_AT_LEAST_SIZE(xPrintSetAttributesReq); - - if(stuff->type < XPJobAttr || stuff->type > XPServerAttr) - { - client->errorValue = stuff->type; - return BadValue; - } - - /* - * Disallow changing of read-only attribute pools - */ - if(stuff->type == XPPrinterAttr || stuff->type == XPServerAttr) - return BadMatch; - - if((pContext = (XpContextPtr)SecurityLookupIDByType( - client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.SetAttributes == 0) - return BadImplementation; - - /* - * Check for attributes being set after their relevant phase - * has already begun (e.g. Job attributes set after StartJob). - */ - if((pContext->state & JOB_STARTED) && stuff->type == XPJobAttr) - return XpErrorBase+XPBadSequence; - if(((pContext->state & DOC_RAW_STARTED) || - (pContext->state & DOC_COOKED_STARTED)) && stuff->type == XPDocAttr) - return XpErrorBase+XPBadSequence; - if((pContext->state & PAGE_STARTED) && stuff->type == XPPageAttr) - return XpErrorBase+XPBadSequence; - - if((attr = (char *)malloc(stuff->stringLen + 1)) == (char *)NULL) - return BadAlloc; - - strncpy(attr, (char *)(stuff + 1), stuff->stringLen); - attr[stuff->stringLen] = (char)'\0'; - - if(stuff->rule == XPAttrReplace) - (*pContext->funcs.SetAttributes)(pContext, stuff->type, attr); - else if(stuff->rule == XPAttrMerge) - (*pContext->funcs.AugmentAttributes)(pContext, stuff->type, attr); - else - { - client->errorValue = stuff->rule; - result = BadValue; - } - - xfree(attr); - - SendAttributeNotify(pContext, stuff->type); - - return result; -} - -static int -ProcXpGetOneAttribute(ClientPtr client) -{ - REQUEST(xPrintGetOneAttributeReq); - XpContextPtr pContext; - char *value, *attrName; - xPrintGetOneAttributeReply *pRep; - int totalSize; - int n; - unsigned long l; - - REQUEST_AT_LEAST_SIZE(xPrintGetOneAttributeReq); - - totalSize = ((sz_xPrintGetOneAttributeReq) >> 2) + - ((stuff->nameLen + 3) >> 2); - if(totalSize != client->req_len) - return BadLength; - - if(stuff->type < XPJobAttr || stuff->type > XPServerAttr) - { - client->errorValue = stuff->type; - return BadValue; - } - - if((attrName = (char *)malloc(stuff->nameLen + 1)) == (char *)NULL) - return BadAlloc; - strncpy(attrName, (char *)(stuff+1), stuff->nameLen); - attrName[stuff->nameLen] = (char)'\0'; - - if(stuff->type != XPServerAttr) - { - if((pContext = (XpContextPtr)SecurityLookupIDByType( - client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.GetOneAttribute == 0) - return BadImplementation; - if((value = (*pContext->funcs.GetOneAttribute)(pContext, stuff->type, - attrName)) == (char *)NULL) - return BadAlloc; - } - else - { - if((value = XpGetOneAttribute((XpContextPtr)NULL, XPServerAttr, - attrName)) == (char *)NULL) - return BadAlloc; - } - - free(attrName); - - totalSize = sz_xPrintGetOneAttributeReply + QUADPAD(strlen(value)); - if((pRep = (xPrintGetOneAttributeReply *)malloc(totalSize)) == - (xPrintGetOneAttributeReply *)NULL) - return BadAlloc; - - pRep->type = X_Reply; - pRep->length = (totalSize - sz_xPrintGetOneAttributeReply) >> 2; - pRep->sequenceNumber = client->sequence; - pRep->valueLen = strlen(value); - - if (client->swapped) { - swaps(&pRep->sequenceNumber, n); - swapl(&pRep->length, l); - swapl(&pRep->valueLen, l); - } - - strncpy((char*)(pRep + 1), value, strlen(value)); - - WriteToClient(client, totalSize, (char *)pRep); - - xfree(pRep); - - return client->noClientException; -} - -/******************************************************************************* - * - * Print Event requests: SelectInput InputSelected, SendXpNotify - * - ******************************************************************************/ - - -static int -ProcXpSelectInput(ClientPtr client) -{ - REQUEST(xPrintSelectInputReq); - int result = Success; - XpContextPtr pContext; - XpClientPtr pPrintClient; - - REQUEST_SIZE_MATCH(xPrintSelectInputReq); - - /* - * Check to see that the supplied XID is really a valid print context - * in this server. - */ - if((pContext=(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(stuff->eventMask & ~allEvents) - { - client->errorValue = stuff->eventMask; - return BadValue; /* bogus event mask bits */ - } - - if((pPrintClient = AcquireClient(pContext, client)) == (XpClientPtr)NULL) - return BadAlloc; - - pPrintClient->eventMask = stuff->eventMask; - - return result; -} - -static int -ProcXpInputSelected(ClientPtr client) -{ - REQUEST(xPrintInputSelectedReq); - xPrintInputSelectedReply rep; - register int n; - long l; - XpClientPtr pXpClient; - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintInputSelectedReq); - - if((pContext=(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - pXpClient = FindClient(pContext, client); - - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; - rep.eventMask = (pXpClient != (XpClientPtr)NULL)? pXpClient->eventMask : 0; - rep.allEventsMask = GetAllEventMasks(pContext); - - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.eventMask, l); - swapl(&rep.allEventsMask, l); - } - - WriteToClient(client, sz_xPrintInputSelectedReply, (char *)&rep); - return client->noClientException; -} - -static void -SendAttributeNotify(XpContextPtr pContext, int which) -{ - XpClientPtr pXpClient; - xPrintAttributeEvent ae; - ClientPtr client; - - pXpClient = pContext->clientHead; - if(pXpClient == (XpClientPtr)NULL) - return; /* Nobody's interested in the events (or this context). */ - - for (pXpClient = pContext->clientHead; - pXpClient != (XpClientPtr)NULL; - pXpClient = pXpClient->pNext) - { - client = pXpClient->client; - if (client == serverClient || client->clientGone || - !(pXpClient->eventMask & XPAttributeMask)) - continue; - ae.type = XPAttributeNotify + XpEventBase; - ae.detail = which; - ae.printContext = pContext->contextID; - ae.sequenceNumber = client->sequence; - WriteEventsToClient (client, 1, (xEvent *) &ae); - } -} - -static void -SendXpNotify(XpContextPtr pContext, int which, int val) -{ - XpClientPtr pXpClient; - xPrintPrintEvent pe; - ClientPtr client; - - pXpClient = pContext->clientHead; - if(pXpClient == (XpClientPtr)NULL) - return; /* Nobody's interested in the events (or this context). */ - - for (pXpClient = pContext->clientHead; - pXpClient != (XpClientPtr)NULL; - pXpClient = pXpClient->pNext) - { - client = pXpClient->client; - if (client == serverClient || client->clientGone || - !(pXpClient->eventMask & XPPrintMask)) - continue; - pe.type = XPPrintNotify + XpEventBase; - pe.detail = which; - pe.printContext = pContext->contextID; - pe.cancel = (Bool)val; - pe.sequenceNumber = client->sequence; - WriteEventsToClient (client, 1, (xEvent *) &pe); - } -} - -static CARD32 -GetAllEventMasks(XpContextPtr pContext) -{ - XpClientPtr pPrintClient; - CARD32 totalMask = (CARD32)0; - - for (pPrintClient = pContext->clientHead; - pPrintClient != (XpClientPtr)NULL; - pPrintClient = pPrintClient->pNext) - { - totalMask |= pPrintClient->eventMask; - } - return totalMask; -} - -/* - * XpContextOfClient - returns the XpContextPtr to the context - * associated with the specified client, or NULL if the client - * does not currently have a context set. - */ -XpContextPtr -XpContextOfClient(ClientPtr client) -{ - return XP_GETPRIV(client); -} - - -/******************************************************************************* - * - * Swap-request functions - * - ******************************************************************************/ - -static int -SProcXpCreateContext(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintCreateContextReq); - - swaps(&stuff->length, i); - swapl(&stuff->contextID, n); - swapl(&stuff->printerNameLen, n); - swapl(&stuff->localeLen, n); - return ProcXpCreateContext(client); -} - -static int -SProcXpGetPrinterList(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintGetPrinterListReq); - - swaps(&stuff->length, i); - swapl(&stuff->printerNameLen, n); - swapl(&stuff->localeLen, n); - return ProcXpGetPrinterList(client); -} - -static int -SProcXpRehashPrinterList(ClientPtr client) -{ - int i; - - REQUEST(xPrintRehashPrinterListReq); - swaps(&stuff->length, i); - return ProcXpRehashPrinterList(client); -} - -static int -SProcXpSetContext(ClientPtr client) -{ - int i; - - REQUEST(xPrintSetContextReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, i); - return ProcXpSetContext(client); -} - -static int -SProcXpGetContext(ClientPtr client) -{ - int i; - - REQUEST(xPrintGetContextReq); - swaps(&stuff->length, i); - return ProcXpGetContext(client); -} - -static int -SProcXpDestroyContext(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintDestroyContextReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpDestroyContext(client); -} - -static int -SProcXpGetContextScreen(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintGetContextScreenReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetContextScreen(client); -} - -static int -SProcXpInputSelected(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintInputSelectedReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpInputSelected(client); -} - -static int -SProcXpStartJob(ClientPtr client) -{ - int i; - - REQUEST(xPrintStartJobReq); - swaps(&stuff->length, i); - return ProcXpStartJob(client); -} - -static int -SProcXpEndJob(ClientPtr client) -{ - int i; - - REQUEST(xPrintEndJobReq); - swaps(&stuff->length, i); - return ProcXpEndJob(client); -} - -static int -SProcXpStartDoc(ClientPtr client) -{ - int i; - - REQUEST(xPrintStartDocReq); - swaps(&stuff->length, i); - return ProcXpStartDoc(client); -} - -static int -SProcXpEndDoc(ClientPtr client) -{ - int i; - - REQUEST(xPrintEndDocReq); - swaps(&stuff->length, i); - return ProcXpEndDoc(client); -} - -static int -SProcXpStartPage(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintStartPageReq); - swaps(&stuff->length, i); - swapl(&stuff->window, n); - return ProcXpStartPage(client); -} - -static int -SProcXpEndPage(ClientPtr client) -{ - int i; - - REQUEST(xPrintEndPageReq); - swaps(&stuff->length, i); - return ProcXpEndPage(client); -} - -static int -SProcXpPutDocumentData(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintPutDocumentDataReq); - swaps(&stuff->length, i); - swapl(&stuff->drawable, n); - swapl(&stuff->len_data, n); - swaps(&stuff->len_fmt, i); - swaps(&stuff->len_options, i); - return ProcXpPutDocumentData(client); -} - -static int -SProcXpGetDocumentData(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetDocumentDataReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swapl(&stuff->maxBufferSize, n); - return ProcXpGetDocumentData(client); -} - -static int -SProcXpGetAttributes(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetAttributesReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetAttributes(client); -} - -static int -SProcXpSetAttributes(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintSetAttributesReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swapl(&stuff->stringLen, n); - return ProcXpSetAttributes(client); -} - -static int -SProcXpGetOneAttribute(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetOneAttributeReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swapl(&stuff->nameLen, n); - return ProcXpGetOneAttribute(client); -} - -static int -SProcXpSelectInput(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintSelectInputReq); - swaps(&stuff->length, i); - swapl(&stuff->eventMask, n); - swapl(&stuff->printContext, n); - return ProcXpSelectInput(client); -} - -static int -SProcXpGetPageDimensions(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetPageDimensionsReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetPageDimensions(client); -} - -static int -SProcXpSetImageResolution(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintSetImageResolutionReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swaps(&stuff->imageRes, i); - return ProcXpSetImageResolution(client); -} - -static int -SProcXpGetImageResolution(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetImageResolutionReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetImageResolution(client); -} - -static void -SwapXpNotifyEvent(xPrintPrintEvent *src, xPrintPrintEvent *dst) -{ - /* - * Swap the sequence number and context fields. - */ - cpswaps(src->sequenceNumber, dst->sequenceNumber); - cpswapl(src->printContext, dst->printContext); - - /* - * Copy the byte-long fields. - */ - dst->type = src->type; - dst->detail = src->detail; - dst->cancel = src->cancel; -} - -static void -SwapXpAttributeEvent(xPrintAttributeEvent *src, xPrintAttributeEvent *dst) -{ - /* - * Swap the sequence number and context fields. - */ - cpswaps(src->sequenceNumber, dst->sequenceNumber); - cpswapl(src->printContext, dst->printContext); - - /* - * Copy the byte-long fields. - */ - dst->type = src->type; - dst->detail = src->detail; -} diff --git a/configure.ac b/configure.ac index d0d1ee65f..87ffa28c8 100644 --- a/configure.ac +++ b/configure.ac @@ -576,7 +576,6 @@ AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest serv AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addigion to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) -AC_ARG_ENABLE(xprint, AS_HELP_STRING([--enable-xprint], [Build Xprint extension and server (default: no)]), [XPRINT=$enableval], [XPRINT=no]) AC_ARG_ENABLE(xgl, AS_HELP_STRING([--enable-xgl], [Build Xgl server (default: no)]), [XGL=$enableval], [XGL=no]) AC_ARG_ENABLE(xglx, AS_HELP_STRING([--enable-xglx], [Build Xglx xgl module (default: no)]), [XGLX=$enableval], [XGLX=no]) AC_ARG_ENABLE(xegl, AS_HELP_STRING([--enable-xegl], [Build Xegl xgl module (default: no)]), [XEGL=$enableval], [XEGL=no]) @@ -1000,15 +999,6 @@ if test "x$DPMSExtension" = xyes; then AC_DEFINE(DPMSExtension, 1, [Support DPMS extension]) fi -if test "x$XPRINT" = xauto; then - PKG_CHECK_MODULES([XPRINTPROTO], [printproto], [XPRINT=yes], [XPRINT=no]) -fi -AM_CONDITIONAL(XPRINT, [test "x$XPRINT" = xyes]) -if test "x$XPRINT" = xyes; then - AC_DEFINE(XPRINT, 1, [Build Print extension]) - REQUIRED_MODULES="$REQUIRED_MODULES printproto" -fi - if test "x$BUILTIN_FONTS" = xyes; then AC_DEFINE(BUILTIN_FONTS, 1, [Use only built-in fonts]) AC_DEFINE(NOFONTSERVERACCESS, 1, [Avoid using a font server]) @@ -1616,62 +1606,6 @@ if test "x$MFB" = xyes -o "x$CFB" = xyes -o "x$AFB" = xyes; then fi fi -dnl Xprint DDX - -AC_MSG_CHECKING([whether to build Xprint DDX]) -AC_MSG_RESULT([$XPRINT]) - -if test "x$XPRINT" = xyes; then - PKG_CHECK_MODULES([XPRINTMODULES], [printproto x11 xfont $XDMCP_MODULES xau]) - XPRINT_CFLAGS="$XPRINTMODULES_CFLAGS -DXPRINT" - XPRINT_LIBS="$XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $RENDER_LIB $COMPOSITE_LIB $RANDR_LIB $XI_LIB $FIXES_LIB $DAMAGE_LIB $XI_LIB $GLX_LIBS $MIEXT_DAMAGE_LIB $XKB_LIB $XKB_STUB_LIB" - XPRINT_SYS_LIBS="$XPRINTMODULES_LIBS" - - xpconfigdir=$libdir/X11/xserver - AC_SUBST([xpconfigdir]) - - AC_PATH_PROG(MKFONTSCALE, mkfontscale) - AC_PATH_PROG(MKFONTDIR, mkfontdir) - - # freetype support code borrowed from lib/XFont - if test x$XP_USE_FREETYPE = xyes; then - AC_DEFINE(XP_USE_FREETYPE,1,[Support FreeType rasterizer in Xprint for nearly all font file formats]) - - if test "$freetype_config" = "auto" ; then - PKG_CHECK_MODULES(FREETYPE, freetype2, - freetype_config=no, freetype_config=yes) - fi - - if test "$freetype_config" = "yes"; then - AC_PATH_PROG(ft_config,freetype-config,no) - if test "$ft_config" = "no"; then - AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/]) - fi - else - ft_config="$freetype_config" - fi - - if test "$freetype_config" != "no"; then - FREETYPE_CFLAGS="`$ft_config --cflags`" - FREETYPE_LIBS="`$ft_config --libs`" - fi - FREETYPE_REQUIRES="freetype2" - else - FREETYPE_CFLAGS="" - FREETYPE_LIBS="" - FREETYPE_REQUIRES="" - fi - XPRINT_CFLAGS="$XPRINT_CFLAGS $FREETYPE_CFLAGS" - XPRINT_SYS_LIBS="$XPRINT_SYS_LIBS $FREETYPE_LIBS" - # end freetype support - - AC_SUBST([XPRINT_CFLAGS]) - AC_SUBST([XPRINT_LIBS]) - AC_SUBST([XPRINT_SYS_LIBS]) -fi -AM_CONDITIONAL(XP_USE_FREETYPE, [test "x$XPRINT" = xyes && test "x$XP_USE_FREETYPE" = xyes]) - - dnl XWin DDX AC_MSG_CHECKING([whether to build XWin DDX]) @@ -2196,41 +2130,5 @@ hw/kdrive/smi/Makefile hw/kdrive/src/Makefile hw/kdrive/vesa/Makefile hw/kdrive/via/Makefile -hw/xprint/Makefile -hw/xprint/doc/Makefile -hw/xprint/pcl/Makefile -hw/xprint/pcl-mono/Makefile -hw/xprint/raster/Makefile -hw/xprint/ps/Makefile -hw/xprint/etc/Makefile -hw/xprint/etc/Xsession.d/Makefile -hw/xprint/etc/init.d/Makefile -hw/xprint/etc/profile.d/Makefile -hw/xprint/config/Makefile -hw/xprint/config/C/print/attributes/Makefile -hw/xprint/config/C/print/ddx-config/Makefile -hw/xprint/config/C/print/ddx-config/raster/Makefile -hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile -hw/xprint/config/C/print/models/PSdefault/fonts/Makefile -hw/xprint/config/C/print/models/PSdefault/Makefile -hw/xprint/config/C/print/models/PSspooldir/Makefile -hw/xprint/config/C/print/models/SPSPARC2/Makefile -hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile -hw/xprint/config/C/print/models/GSdefault/Makefile -hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile -hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile -hw/xprint/config/C/print/models/Makefile -hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile -hw/xprint/config/C/print/models/CANONC3200-PS/Makefile -hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile -hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile -hw/xprint/config/C/print/models/HPLJ4family/Makefile -hw/xprint/config/C/print/models/HPDJ1600C/Makefile -hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile -hw/xprint/config/C/print/Makefile -hw/xprint/config/C/Makefile -hw/xprint/config/en_US/print/attributes/Makefile -hw/xprint/config/en_US/print/Makefile -hw/xprint/config/en_US/Makefile xorg-server.pc ]) diff --git a/dix/Makefile.am b/dix/Makefile.am index eb5e77946..771c13112 100644 --- a/dix/Makefile.am +++ b/dix/Makefile.am @@ -1,10 +1,6 @@ standard_dix_libs = libdix.la libxpstubs.la -if XPRINT -noinst_LTLIBRARIES = $(standard_dix_libs) libXpdix.la -else noinst_LTLIBRARIES = $(standard_dix_libs) -endif AM_CFLAGS = $(DIX_CFLAGS) \ -DVENDOR_NAME=\""@VENDOR_NAME@"\" \ @@ -46,12 +42,6 @@ libdix_la_SOURCES = \ libxpstubs_la_SOURCES = \ xpstubs.c -if XPRINT -libXpdix_la_SOURCES = $(libdix_la_SOURCES) -libXpdix_la_CPPFLAGS = -I$(top_srcdir)/hw/xprint -libXpdix_la_CFLAGS = $(AM_CFLAGS) $(XPRINT_CFLAGS) -endif - EXTRA_DIST = buildatoms BuiltInAtoms CHANGES Xserver.d Xserver-dtrace.h.in # Install list of protocol names diff --git a/dix/dispatch.c b/dix/dispatch.c index ce57a8b08..b8c84bf77 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -399,9 +399,6 @@ Dispatch(void) } isItTimeToYield = FALSE; -#ifdef XPRINT - requestingClient = client; -#endif #ifdef SMART_SCHEDULE start_tick = SmartScheduleTime; #endif @@ -472,9 +469,6 @@ Dispatch(void) client = clients[clientReady[nready]]; if (client) client->smart_stop_tick = SmartScheduleTime; -#endif -#ifdef XPRINT - requestingClient = NULL; #endif } dispatchException &= ~DE_PRIORITYCHANGE; diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 6fb29de3a..0b08e9e53 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -1937,37 +1937,27 @@ GetDefaultPointSize () FontResolutionPtr GetClientResolutions (int *num) { -#ifdef XPRINT - if (requestingClient && requestingClient->fontResFunc != NULL && - !requestingClient->clientGone) - { - return (*requestingClient->fontResFunc)(requestingClient, num); - } - else -#endif - { - static struct _FontResolution res; - ScreenPtr pScreen; + static struct _FontResolution res; + ScreenPtr pScreen; - pScreen = screenInfo.screens[0]; - res.x_resolution = (pScreen->width * 25.4) / pScreen->mmWidth; - /* - * XXX - we'll want this as long as bitmap instances are prevalent - so that we can match them from scalable fonts - */ - if (res.x_resolution < 88) - res.x_resolution = 75; - else - res.x_resolution = 100; - res.y_resolution = (pScreen->height * 25.4) / pScreen->mmHeight; - if (res.y_resolution < 88) - res.y_resolution = 75; - else - res.y_resolution = 100; - res.point_size = 120; - *num = 1; - return &res; - } + pScreen = screenInfo.screens[0]; + res.x_resolution = (pScreen->width * 25.4) / pScreen->mmWidth; + /* + * XXX - we'll want this as long as bitmap instances are prevalent + so that we can match them from scalable fonts + */ + if (res.x_resolution < 88) + res.x_resolution = 75; + else + res.x_resolution = 100; + res.y_resolution = (pScreen->height * 25.4) / pScreen->mmHeight; + if (res.y_resolution < 88) + res.y_resolution = 75; + else + res.y_resolution = 100; + res.point_size = 120; + *num = 1; + return &res; } /* diff --git a/dix/globals.c b/dix/globals.c index 7f95eabd5..2fb7ba0b3 100644 --- a/dix/globals.c +++ b/dix/globals.c @@ -143,9 +143,6 @@ Bool loadableFonts = FALSE; CursorPtr rootCursor; Bool blackRoot=FALSE; Bool whiteRoot=FALSE; -#ifdef XPRINT -ClientPtr requestingClient; /* XXX this should be obsolete now, remove? */ -#endif _X_EXPORT TimeStamp currentTime; _X_EXPORT TimeStamp lastDeviceEventTime; diff --git a/dix/main.c b/dix/main.c index b4000bd71..4d6a096eb 100644 --- a/dix/main.c +++ b/dix/main.c @@ -103,9 +103,6 @@ Equipment Corporation. #include "extnsionst.h" #include "privates.h" #include "registry.h" -#ifdef XPRINT -#include "DiPrint.h" -#endif #ifdef PANORAMIX #include "panoramiXsrv.h" #else @@ -257,9 +254,6 @@ int main(int argc, char *argv[], char *envp[]) InitGlobals(); InitRegions(); -#ifdef XPRINT - PrinterInitGlobals(); -#endif CheckUserParameters(argc, argv, envp); @@ -354,9 +348,6 @@ int main(int argc, char *argv[], char *envp[]) InitCallbackManager(); InitVisualWrap(); InitOutput(&screenInfo, argc, argv); -#ifdef XPRINT - PrinterInitOutput(&screenInfo, argc, argv); -#endif if (screenInfo.numScreens < 1) FatalError("no screens found"); diff --git a/dix/xpstubs.c b/dix/xpstubs.c index 59340ad21..f8cd207eb 100644 --- a/dix/xpstubs.c +++ b/dix/xpstubs.c @@ -31,12 +31,8 @@ from The Open Group. #include "misc.h" #include -#ifdef XPRINT -#include "DiPrint.h" -#else extern Bool XpClientIsBitmapClient(ClientPtr client); extern Bool XpClientIsPrintClient(ClientPtr client, FontPathElementPtr fpe); -#endif Bool XpClientIsBitmapClient( @@ -52,27 +48,3 @@ XpClientIsPrintClient( { return FALSE; } -#ifdef XPRINT -int -PrinterOptions( - int argc, - char **argv, - int i) -{ - return i; -} -void -PrinterInitOutput( - ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ -} -void PrinterUseMsg(void) -{ -} -void PrinterInitGlobals(void) -{ -} -#endif /* XPRINT */ - diff --git a/hw/Makefile.am b/hw/Makefile.am index c2b9571b9..4589b7eef 100644 --- a/hw/Makefile.am +++ b/hw/Makefile.am @@ -26,10 +26,6 @@ if KDRIVE KDRIVE_SUBDIRS = kdrive endif -if XPRINT -XPRINT_SUBDIRS = xprint -endif - if XQUARTZ XQUARTZ_SUBDIRS = xquartz endif @@ -42,10 +38,9 @@ SUBDIRS = \ $(XNEST_SUBDIRS) \ $(DMX_SUBDIRS) \ $(KDRIVE_SUBDIRS) \ - $(XQUARTZ_SUBDIRS) \ - $(XPRINT_SUBDIRS) + $(XQUARTZ_SUBDIRS) -DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xgl xprint +DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xgl relink: for i in $(SUBDIRS) ; do $(MAKE) -C $$i relink ; done diff --git a/hw/xnest/Font.c b/hw/xnest/Font.c index 9f30085b1..26faf1633 100644 --- a/hw/xnest/Font.c +++ b/hw/xnest/Font.c @@ -44,11 +44,6 @@ xnestRealizeFont(ScreenPtr pScreen, FontPtr pFont) FontSetPrivate(pFont, xnestFontPrivateIndex, NULL); -#ifdef XPRINT - if (requestingClient && XpClientIsPrintClient(requestingClient, NULL)) - return True; -#endif - name_atom = MakeAtom("FONT", 4, True); value_atom = 0L; diff --git a/hw/xprint/AttrValid.c b/hw/xprint/AttrValid.c deleted file mode 100644 index f8c292faa..000000000 --- a/hw/xprint/AttrValid.c +++ /dev/null @@ -1,701 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "attributes.h" - -/* - * default medium-source-sizes supported = na-letter w/.25" margins - */ -static XpOidMediumDiscreteSize DefaultMediumSize = { - xpoid_val_medium_size_na_letter, xFalse, {6.35, 209.55, 6.35, 273.05} -}; -static XpOidMediumDiscreteSizeList DefaultMediumSizeList = { - &DefaultMediumSize, 1 -}; -static XpOidMediumSourceSize DefaultMediumSourceSize = { - xpoid_unspecified, XpOidMediumSS_DISCRETE, { &DefaultMediumSizeList } -}; -static XpOidMediumSS DefaultMediumSS = { - &DefaultMediumSourceSize, 1 -}; - -/* - * if 'valid_oid_list' is NULL any oid found is considered valid - */ -XpOid -XpGetOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list) -{ - XpOid value_oid; - - value_oid = XpOidFromString(XpGetStringAttr(pContext, pool, oid)); - if((const XpOidList*)NULL == valid_oid_list - || - XpOidListHasOid(valid_oid_list, value_oid)) - { - return value_oid; - } - else - { - return xpoid_none; - } -} - -void -XpPutOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - XpOid value_oid) -{ - XpPutStringAttr(pContext, pool, oid, XpOidString(value_oid)); -} - -void -XpValidateOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - XpOid default_oid) -{ - XpOid value_oid; - value_oid = XpGetOidAttr(pContext, pool, oid, valid_oids); - XpPutOidAttr(pContext, pool, oid, - value_oid == xpoid_none ? default_oid : value_oid); -} - -/* - * if 'valid_card_list' is NULL any cardinal found is considered valid - */ -unsigned long -XpGetCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list) -{ - unsigned long value_card; - - if(XpOidParseUnsignedValue(XpGetStringAttr(pContext, pool, oid), - (const char**)NULL, - &value_card)) - { - if((const XpOidCardList*)NULL == valid_card_list - || - XpOidCardListHasCard(valid_card_list, value_card)) - { - return value_card; - } - } - return 0; -} - -void -XpPutCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - unsigned long value_card) -{ - if(value_card > 0) - { - char value_out[16]; - sprintf(value_out, "%lu", value_card); - XpPutStringAttr(pContext, pool, oid, value_out); - } - else - XpPutStringAttr(pContext, pool, oid, (const char*)NULL); -} - -void -XpValidateCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - unsigned long default_card) -{ - unsigned long value_card; - value_card = XpGetCardAttr(pContext, pool, oid, valid_cards); - XpPutCardAttr(pContext, pool, oid, - value_card == 0 ? default_card : value_card); -} - -XpOidList* -XpGetListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list) -{ - return XpOidListNew(XpGetStringAttr(pContext, pool, oid), valid_oid_list); -} - -void -XpPutListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* list) -{ - char* value_out; - - value_out = XpOidListString(list); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidateListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - const XpOidList* default_oids) -{ - XpOidList* list = XpGetListAttr(pContext, pool, oid, valid_oids); - if(XpOidListCount(list) == 0) - XpPutListAttr(pContext, pool, oid, default_oids); - else - XpPutListAttr(pContext, pool, oid, list); - XpOidListDelete(list); -} - -XpOidCardList* -XpGetCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list) -{ - return XpOidCardListNew(XpGetStringAttr(pContext, pool, oid), - valid_card_list); -} - -void -XpPutCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* list) -{ - char* value_out; - - value_out = XpOidCardListString(list); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidateCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - const XpOidCardList* default_cards) -{ - XpOidCardList* list = XpGetCardListAttr(pContext, pool, oid, valid_cards); - if(XpOidCardListCount(list) == 0 && (XpOidCardList*)NULL != default_cards) - XpPutCardListAttr(pContext, pool, oid, default_cards); - else - XpPutCardListAttr(pContext, pool, oid, list); - XpOidCardListDelete(list); -} - -XpOidDocFmtList* -XpGetDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmt_list) -{ - return XpOidDocFmtListNew(XpGetStringAttr(pContext, pool, oid), - valid_fmt_list); -} - -void -XpPutDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* list) -{ - char* value_out; - - value_out = XpOidDocFmtListString(list); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidateDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmts, - const XpOidDocFmtList* default_fmts) -{ - XpOidDocFmtList* list; - - list = XpGetDocFmtListAttr(pContext, pool, oid, valid_fmts); - if(XpOidDocFmtListCount(list) == 0 - && - (XpOidDocFmtList*)NULL != default_fmts) - { - XpPutDocFmtListAttr(pContext, pool, oid, default_fmts); - } - else - { - XpPutDocFmtListAttr(pContext, pool, oid, list); - } - XpOidDocFmtListDelete(list); -} - -XpOidMediumSS* -XpGetMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidList* valid_sizes) -{ - return XpOidMediumSSNew(XpGetStringAttr(pContext, pool, oid), - valid_trays, valid_sizes); -} - -void -XpPutMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidMediumSS* msss) -{ - char* value_out; - - value_out = XpOidMediumSSString(msss); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -const XpOidMediumSS* -XpGetDefaultMediumSS() -{ - return &DefaultMediumSS; -} - -XpOidTrayMediumList* -XpGetTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidMediumSS* msss) -{ - return XpOidTrayMediumListNew(XpGetStringAttr(pContext, pool, oid), - valid_trays, msss); -} - -void -XpPutTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidTrayMediumList* tm) -{ - char* value_out; - - value_out = XpOidTrayMediumListString(tm); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidatePrinterMediaAttrs(XpContextPtr pContext, - const XpOidList* valid_trays, - const XpOidList* valid_sizes) -{ - const XpOidMediumSS* msss; - XpOidMediumSS* pool_msss; - XpOidTrayMediumList* tm; - - pool_msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - valid_trays, valid_sizes); - if(0 == XpOidMediumSSCount(pool_msss)) - msss = XpGetDefaultMediumSS(); - else - msss = pool_msss; - XpPutMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, msss); - - tm = XpGetTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, - valid_trays, msss); - XpPutTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, tm); - - XpOidMediumSSDelete(pool_msss); - XpOidTrayMediumListDelete(tm); -} - - -void -XpValidatePrinterPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - /* - * content-orientations-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, - xpoid_att_content_orientations_supported, - vpr->valid_content_orientations_supported, - vpr->default_content_orientations_supported); - /* - * document-formats-supported - */ - XpValidateDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_document_formats_supported, - vpr->valid_document_formats_supported, - vpr->default_document_formats_supported); - /* - * plexes-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, xpoid_att_plexes_supported, - vpr->valid_plexes_supported, - vpr->default_plexes_supported); - /* - * printer-resolutions-supported - */ - XpValidateCardListAttr(pContext, XPPrinterAttr, - xpoid_att_printer_resolutions_supported, - vpr->valid_printer_resolutions_supported, - vpr->default_printer_resolutions_supported); - /* - * xp-embedded-formats-supported - */ - XpValidateDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_embedded_formats_supported, - vpr->valid_xp_embedded_formats_supported, - vpr->default_xp_embedded_formats_supported); - /* - * xp-listfonts-modes-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_listfonts_modes_supported, - vpr->valid_xp_listfonts_modes_supported, - vpr->default_xp_listfonts_modes_supported); - /* - * xp-raw-formats-supported - */ - XpValidateDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_raw_formats_supported, - vpr->valid_xp_raw_formats_supported, - vpr->default_xp_raw_formats_supported); - /* - * xp-setup-proviso - */ - XpValidateOidAttr(pContext, XPPrinterAttr, xpoid_att_xp_setup_proviso, - vpr->valid_xp_setup_proviso, xpoid_none); - /* - * medium-source-sizes-supported - * input-trays-mdeium - */ - XpValidatePrinterMediaAttrs(pContext, - vpr->valid_input_trays, - vpr->valid_medium_sizes); - /* - * available-compressions-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, - xpoid_att_available_compressions_supported, - vpr->valid_available_compressions_supported, - vpr->default_available_compressions_supported); -} - - -void -XpValidateNotificationProfile(XpContextPtr pContext) -{ - const char* value_in; - const char* value_out; - - value_in = XpGetStringAttr(pContext, XPJobAttr, - xpoid_att_notification_profile); - value_out = XpOidNotifyString(XpOidNotifyParse(value_in)); - XpPutStringAttr(pContext, XPJobAttr, - xpoid_att_notification_profile, value_out); -} - -void -XpValidateJobPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - /* - * Note: the 'vpr' argument is unused in this - * implementation; it is reserved for future use - */ - XpOidList* job_attrs_supported; - /* - * only validate attributes found in job-attributes-supported - */ - job_attrs_supported = XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_job_attributes_supported, - (const XpOidList*)NULL); - /* - * notification-profile - */ - if(XpOidListHasOid(job_attrs_supported, xpoid_att_notification_profile)) - { - XpValidateNotificationProfile(pContext); - } - /* - * clean up - */ - XpOidListDelete(job_attrs_supported); -} - - -static void -XpValidateDocOrPagePool(XpContextPtr pContext, - XPAttributes pool, /* XPDocAttr or XPPageAttr */ - const XpOidList* attrs_supported, - const XpValidatePoolsRec* vpr) -{ - /* - * content-orientation - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_content_orientation)) - { - XpOidList* content_orientations_supported; - content_orientations_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_content_orientations_supported, - vpr->valid_content_orientations_supported); - XpValidateOidAttr(pContext, pool, xpoid_att_content_orientation, - content_orientations_supported, xpoid_none); - XpOidListDelete(content_orientations_supported); - } - /* - * copy-count - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_copy_count)) - XpValidateCardAttr(pContext, pool, xpoid_att_copy_count, - (const XpOidCardList*)NULL, 0); - /* - * default-printer-resolution - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_default_printer_resolution)) - { - XpOidCardList* printer_resolutions_supported; - printer_resolutions_supported = - XpGetCardListAttr(pContext, XPPrinterAttr, - xpoid_att_printer_resolutions_supported, - vpr->valid_printer_resolutions_supported); - XpValidateCardAttr(pContext, pool, - xpoid_att_default_printer_resolution, - printer_resolutions_supported, 0); - XpOidCardListDelete(printer_resolutions_supported); - } - /* - * default-input-tray - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_default_input_tray)) - { - XpOidTrayMediumList* input_trays_medium; - const char* value_in; - XpOid value_tray; - - input_trays_medium = - XpGetTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, - (const XpOidList*)NULL, - (const XpOidMediumSS*)NULL); - value_in = - XpGetStringAttr(pContext, pool, xpoid_att_default_input_tray); - value_tray = XpOidFromString(value_in); - if(!XpOidTrayMediumListHasTray(input_trays_medium, value_tray)) - value_tray = xpoid_none; - XpPutOidAttr(pContext, pool, xpoid_att_default_input_tray, value_tray); - XpOidTrayMediumListDelete(input_trays_medium); - } - /* - * default-medium - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_default_medium)) - { - XpOidMediumSS* msss; - const char* value_in; - XpOid value_size; - - msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*)NULL, - (const XpOidList*)NULL); - value_in = XpGetStringAttr(pContext, pool, xpoid_att_default_medium); - value_size = XpOidFromString(value_in); - if(!XpOidMediumSSHasSize(msss, value_size)) - value_size = xpoid_none; - XpPutOidAttr(pContext, pool, xpoid_att_default_medium, value_size); - XpOidMediumSSDelete(msss); - } - /* - * document-format - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_document_format)) - { - XpOidDocFmtList* document_formats_supported; - const char* value_in; - XpOidDocFmt* document_format; - const char* value_out; - - document_formats_supported = - XpGetDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_document_formats_supported, - vpr->valid_document_formats_supported); - value_in = XpGetStringAttr(pContext, pool, xpoid_att_document_format); - document_format = XpOidDocFmtNew(value_in); - if(XpOidDocFmtListHasFmt(document_formats_supported, document_format)) - value_out = XpOidDocFmtString(document_format); - else - value_out = XpOidDocFmtString(vpr->default_document_format); - XpOidDocFmtListDelete(document_formats_supported); - XpOidDocFmtDelete(document_format); - XpPutStringAttr(pContext, pool, xpoid_att_document_format, value_out); - XpOidFree(value_out); - } - /* - * plex - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_plex)) - { - XpOidList* plexes_supported; - plexes_supported = - XpGetListAttr(pContext, XPPrinterAttr, xpoid_att_plexes_supported, - vpr->valid_plexes_supported); - XpValidateOidAttr(pContext, pool, xpoid_att_plex, - plexes_supported, xpoid_none); - XpOidListDelete(plexes_supported); - } - /* - * xp-listfonts-modes - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_xp_listfonts_modes)) - { - XpOidList* xp_listfonts_modes_supported; - xp_listfonts_modes_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_listfonts_modes_supported, - vpr->valid_xp_listfonts_modes_supported); - XpValidateListAttr(pContext, pool, xpoid_att_xp_listfonts_modes, - xp_listfonts_modes_supported, - (const XpOidList*)NULL); - XpOidListDelete(xp_listfonts_modes_supported); - } - /* - * available-compressions - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_available_compression)) - { - XpOidList* available_compressions_supported; - available_compressions_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_available_compressions_supported, - vpr->valid_available_compressions_supported); - XpValidateOidAttr(pContext, pool, xpoid_att_available_compression, - available_compressions_supported, xpoid_none); - XpOidListDelete(available_compressions_supported); - } -} - -void -XpValidateDocumentPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - XpOidList* document_attrs_supported; - /* - * only validate attributes found in document-attributes-supported - */ - document_attrs_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_document_attributes_supported, - (const XpOidList*)NULL); - /* - * validate - */ - XpValidateDocOrPagePool(pContext, XPDocAttr, - document_attrs_supported, vpr); - /* - * clean up - */ - XpOidListDelete(document_attrs_supported); -} - -void -XpValidatePagePool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - XpOidList* page_attrs_supported; - /* - * only validate attributes found in xp-page-attributes-supported - */ - page_attrs_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_page_attributes_supported, - (const XpOidList*)NULL); - /* - * validate - */ - XpValidateDocOrPagePool(pContext, XPPageAttr, - page_attrs_supported, vpr); - /* - * clean up - */ - XpOidListDelete(page_attrs_supported); -} - -void -XpValidateAttributePool(XpContextPtr pContext, - XPAttributes pool, - const XpValidatePoolsRec* vpr) -{ - switch(pool) - { - case XPPrinterAttr: - XpValidatePrinterPool(pContext, vpr); - break; - - case XPDocAttr: - XpValidateDocumentPool(pContext, vpr); - break; - - case XPJobAttr: - XpValidateJobPool(pContext, vpr); - break; - - case XPPageAttr: - XpValidatePagePool(pContext, vpr); - break; - - default: - break; - } -} diff --git a/hw/xprint/AttrValid.h b/hw/xprint/AttrValid.h deleted file mode 100644 index 7bb7ce1c8..000000000 --- a/hw/xprint/AttrValid.h +++ /dev/null @@ -1,219 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _Xp_AttrValid_h -#define _Xp_AttrValid_h - -#include -#include "Oid.h" - -#define XpNumber(a) (sizeof(a) / sizeof(*(a))) - -/* - * Attribute pool validation valid values and defaults - */ -typedef struct -{ - XpOidList* valid_content_orientations_supported; - XpOidList* default_content_orientations_supported; - - XpOidDocFmtList* valid_document_formats_supported; - XpOidDocFmtList* default_document_formats_supported; - - XpOidList* valid_input_trays; - XpOidList* valid_medium_sizes; - - XpOidList* valid_plexes_supported; - XpOidList* default_plexes_supported; - - XpOidCardList* valid_printer_resolutions_supported; - XpOidCardList* default_printer_resolutions_supported; - - XpOidDocFmtList* valid_xp_embedded_formats_supported; - XpOidDocFmtList* default_xp_embedded_formats_supported; - - XpOidList* valid_xp_listfonts_modes_supported; - XpOidList* default_xp_listfonts_modes_supported; - - XpOidDocFmtList* valid_xp_raw_formats_supported; - XpOidDocFmtList* default_xp_raw_formats_supported; - - XpOidList* valid_xp_setup_proviso; - - XpOidDocFmt* default_document_format; - XpOidList* valid_available_compressions_supported; - XpOidList* default_available_compressions_supported; - -} XpValidatePoolsRec; - -/* - * XpOid resource access - */ -#define XpGetStringAttr(pContext, pool, oid) \ - (const char*)XpGetOneAttribute(pContext, pool, (char*)XpOidString(oid)) -#define XpPutStringAttr(pContext, pool, oid, value) \ - XpPutOneAttribute(pContext, pool, XpOidString(oid), value) - -#ifdef _XP_PRINT_SERVER_ /* needed for XpContextPtr in Printstr.h */ - -/* - * XpOid-valued attribute access - */ -XpOid XpGetOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list); -void XpPutOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - XpOid value_oid); -void XpValidateOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - XpOid default_oid); -/* - * cardinal-valued attribute access - */ -unsigned long XpGetCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list); -void XpPutCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - unsigned long value_card); -void XpValidateCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - unsigned long default_card); -/* - * XpOidList-valued attribute access - */ -XpOidList* XpGetListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list); -void XpPutListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* list); -void XpValidateListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - const XpOidList* default_oids); -/* - * XpOidCardList-valued attribute access - */ -XpOidCardList* XpGetCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list); -void XpPutCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* list); -void XpValidateCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - const XpOidCardList* default_cards); -/* - * XpOidDocFmtList-valued attribute access - */ -XpOidDocFmtList* XpGetDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmt_list); -void XpPutDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* list); -void XpValidateDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmts, - const XpOidDocFmtList* default_fmts); -/* - * XpOidMediumSS-valued attribute access - */ -XpOidMediumSS* XpGetMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidList* valid_sizes); -void XpPutMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidMediumSS* msss); -const XpOidMediumSS* XpGetDefaultMediumSS(void); - -/* - * XpOidTrayMediumList-valued attribute access - */ -XpOidTrayMediumList* XpGetTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidMediumSS* msss); -void XpPutTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidTrayMediumList* tm); -void XpValidatePrinterMediaAttrs(XpContextPtr pContext, - const XpOidList* valid_trays, - const XpOidList* valid_sizes); -/* - * Attribute pool validation - */ -void XpValidateAttributePool(XpContextPtr pContext, - XPAttributes pool, - const XpValidatePoolsRec* vpr); -void XpValidatePrinterPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); -void XpValidateNotificationProfile(XpContextPtr pContext); -void XpValidateJobPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); -void XpValidateDocumentPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); -void XpValidatePagePool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); - -#endif /* _XP_PRINT_SERVER_ */ - -#endif /* _Xp_AttrValid_h - don't add anything after this line */ diff --git a/hw/xprint/DiPrint.h b/hw/xprint/DiPrint.h deleted file mode 100644 index 22cbf0d43..000000000 --- a/hw/xprint/DiPrint.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/* - * The XpDiListEntry struct is the type of each element of the array - * handed back to the extension code to handle a GetPrinterList request. - * We don't use the printerDb directly because of the desire to handle - * multiple locales. Creating this new array for each GetPrinterList - * request will allow us to build it with the description in the locale of - * the requesting client. - */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif -#include - -#ifndef _XpDiPrint_H_ -#define _XpDiPrint_H_ 1 - -#include "scrnintstr.h" - -typedef struct _diListEntry { - char *name; - char *description; - char *localeName; - unsigned long rootWinId; -} XpDiListEntry; - -extern void XpDiFreePrinterList(XpDiListEntry **list); - -extern XpDiListEntry **XpDiGetPrinterList( - int nameLen, - char *name, - int localeLen, - char *locale); - -extern char * XpDiGetDriverName(int index, char *printerName); - -extern WindowPtr XpDiValidatePrinter(char *printerName, int printerNameLen); - -extern int PrinterOptions(int argc, char **argv, int i); - -extern void PrinterUseMsg(void); - -extern void PrinterInitGlobals(void); - -extern void PrinterInitOutput(ScreenInfo *pScreenInfo, int argc, char **argv); - -extern Bool XpClientIsPrintClient(ClientPtr client, FontPathElementPtr fpe); - -extern Bool XpClientIsBitmapClient(ClientPtr client); - -extern void _XpVoidNoop(void); - -extern Bool _XpBoolNoop(void); - -#endif /* _XpDiPrint_H_ */ diff --git a/hw/xprint/Init.c b/hw/xprint/Init.c deleted file mode 100644 index 69100d390..000000000 --- a/hw/xprint/Init.c +++ /dev/null @@ -1,1920 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996-2004 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. -(c) Copyright 2003-2004 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: printer/Init.c -** * -** * Contents: -** * The InitOutput routine here would presumably -** * be called from the normal server's InitOutput -** * after all display screens have been added. -** * There is are ifdef'd routines suitable for -** * use in building a printer-only server. Turn -** * on the "PRINTER_ONLY_SERVER" define if this is -** * to be the only ddx-level driver. -** * -** * Copyright: Copyright 1993,1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __hpux -#include -#endif - -#include -#define NEED_EVENTS 1 -#include -#include - -#include "screenint.h" -#include "input.h" -#include "cursor.h" -#include "misc.h" -#include "windowstr.h" -#include "inputstr.h" - -#include "gcstruct.h" -#include -#include "errno.h" - -typedef char *XPointer; -#define HAVE_XPointer 1 - -#define Status int -#include - -#include "DiPrint.h" -#include "attributes.h" - -#include "os.h" -#include "spooler.h" - -static void GenericScreenInit( - int index, - ScreenPtr pScreen, - int argc, - char **argv); -static Bool InitPrintDrivers( - int index, - ScreenPtr pScreen, - int argc, - char **argv); - -/* - * The following two defines are used to build the name "X*printers", where - * the "*" is replaced by the display number. This is used to construct - * the name of the default printers configuration file if the -XpFile - * command line option was not specified. - */ -#define XNPRINTERSFILEPREFIX "/X" -#define XNPRINTERSFILESUFFIX "printers" -#define XPRINTERSFILENAME "Xprinters" - -#define MODELDIRNAME "/models" -#define FONTDIRNAME "/fonts" - -#ifdef XPRASTERDDX - -static -PixmapFormatRec RasterPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD } -}; -#define NUMRASTFORMATS (sizeof RasterPixmapFormats)/(sizeof RasterPixmapFormats[0]) - -#include "raster/Raster.h" - -#endif - -#ifdef XPPCLDDX - -static -PixmapFormatRec ColorPclPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD }, - { 8, 8, BITMAP_SCANLINE_PAD }, - { 24, 32, BITMAP_SCANLINE_PAD } -}; - -#define NUMCPCLFORMATS (sizeof ColorPclPixmapFormats)/(sizeof ColorPclPixmapFormats[0]) - -#endif - -#ifdef XPMONOPCLDDX - -static -PixmapFormatRec MonoPclPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD } -}; - -#define NUMMPCLFORMATS (sizeof MonoPclPixmapFormats)/(sizeof MonoPclPixmapFormats[0]) - -#endif - -#if defined(XPPCLDDX) || defined(XPMONOPCLDDX) -#include "pcl/Pcl.h" -#endif - -#ifdef XPPSDDX - -static -PixmapFormatRec PSPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD }, - { 8, 8, BITMAP_SCANLINE_PAD }, - { 12, 16, BITMAP_SCANLINE_PAD }, - { 14, 16, BITMAP_SCANLINE_PAD }, - { 16, 16, BITMAP_SCANLINE_PAD }, - { 24, 32, BITMAP_SCANLINE_PAD } -}; - -#define NUMPSFORMATS (sizeof PSPixmapFormats)/(sizeof PSPixmapFormats[0]) - -#include "ps/Ps.h" - -#endif - -/* - * The driverInitArray contains an entry for each driver the - * server knows about. Each element contains pointers to pixmap formats, the - * driver's initialization routine, and pointers to the driver's - * attribute validation rec, and/or a driver function which - * returns the maximum medium width&height, and maximum resolution - * given a printer name. Either the validation rec OR the dimension - * function can be NULL. If the function is non-NULL then it - * will be called, and will be passed the (possibly NULL) validation rec. - * If the function is NULL, then XpGetMaxWidthHeightRes() is called. - */ -typedef struct _driverInitRec { - char *driverName; - pBFunc initFunc; - XpValidatePoolsRec *pValRec; - pVFunc dimensionsFunc; - PixmapFormatRec *pFmts; - int numFmts; -} driverInitRec; - -static driverInitRec driverInits[] = { -#ifdef XPRASTERDDX - { - "XP-RASTER", - InitializeRasterDriver, - &RasterValidatePoolsRec, - (pVFunc) NULL, - RasterPixmapFormats, - NUMRASTFORMATS - }, -#endif -#ifdef XPPCLDDX - { - "XP-PCL-COLOR", - InitializeColorPclDriver, - &PclValidatePoolsRec, - (pVFunc) NULL, - ColorPclPixmapFormats, - NUMCPCLFORMATS - }, -#endif -#ifdef XPMONOPCLDDX - { - "XP-PCL-MONO", - InitializeMonoPclDriver, - &PclValidatePoolsRec, - (pVFunc) NULL, - MonoPclPixmapFormats, - NUMMPCLFORMATS - }, -#endif -#ifdef XPPSDDX - { - "XP-POSTSCRIPT", - InitializePsDriver, - &PsValidatePoolsRec, - (pVFunc) NULL, - PSPixmapFormats, - NUMPSFORMATS - }, -#endif -}; - - -/* - * The printerDb variable points to a list of PrinterDbEntry structs - * which map printer names with screen numbers and driver names. - */ -typedef struct _printerDbEntry { - struct _printerDbEntry *next; - char *name; - char *qualifier; - int screenNum; - char *driverName; - char *desc; -} PrinterDbEntry, *PrinterDbPtr; - -static PrinterDbPtr printerDb = (PrinterDbPtr)NULL; - -/* - * The nameMap is a list used in initializing the attribute store - * for each printer. The list is freed once the printerDb is built - * and the attribute stores for all printers have been initialized. - */ -typedef struct _nameMapEntry { - struct _nameMapEntry *next; - char *name; - char *qualifier; -} NameMapEntry, *NameMapPtr; - -static NameMapPtr nameMap = (NameMapPtr)NULL; - -/* - * The driverMap is a list which provides the mapping between driver names - * and screen numbers. It is built and used - * by RehashPrinterList to correctly fill in the screenNum field in the - * printerDb entries. The list is freed before RehashPrinterList terminates. - */ -typedef struct _driverMapping { - struct _driverMapping *next; - char *driverName; - int screenNum; -} DriverMapEntry, *DriverMapPtr; - -static const char configFilePath[] = -"/etc/dt/config/print:/usr/dt/config/print"; - -static const char printServerConfigDir[] = "XPSERVERCONFIGDIR"; - -static char *configFileName = (char *)NULL; -static Bool freeDefaultFontPath = FALSE; -static char *origFontPath = (char *)NULL; - -static Bool xprintInitGlobalsCalled = FALSE; -/* - * This function is responsible for doing initalisation of any global - * variables at an very early point of server startup (even before - * |ProcessCommandLine()|. - */ -void PrinterInitGlobals(void) -{ - xprintInitGlobalsCalled = TRUE; - -#ifdef DAMAGE - /* Disable DAMAGE extension for now as it does not work with - * the Postscript DDX yet (see - * https://bugs.freedesktop.org/show_bug.cgi?id=1660) ... - * (you can enable the DAMAGE extension explicitly via - * % X +extension DAMAGE ... #) ;-( */ - noDamageExtension = TRUE; -#endif /* DAMAGE */ - -#ifdef SMART_SCHEDULE - /* Somehow the XF86 "smart scheduler" completely kills the Xprint DDX - * (see http://xprint.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=467 - * ("Xfree86's "smart scheduler" breaks Xprt") */ - SmartScheduleDisable = TRUE; -#endif /* SMART_SCHEDULE */ - - /* Disable internal screensaver for Xprint (workaround for - * http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=567 ("Xorg - * Xprt starts to consume 100% CPU when being idle for some time")) */ - defaultScreenSaverTime = 0; - - /* Ensure that the maximum request size for the BIGREQUESTS extension - * is at least 8MB (see - * http://xprint.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=622 - "RFE: - * Xprt's default BIGREQUESTS extension buffer size should be 8MB") - */ - maxBigRequestSize = (8*1048576)-1; - - /* Xprt should not reset by default when the last client exists - * (default for Xprt is |0|, video Xservers use |DE_RESET|) */ - dispatchExceptionAtReset = 0; -} - -/* - * PrinterUseMsg() prints usage for the Xprint-specific options - */ -void PrinterUseMsg(void) -{ - XpSpoolerTypePtr curr = xpstm; - - /* Option '-XpFile' */ - ErrorF("-XpFile file specifies an alternate `Xprinters' file, rather\n"); - ErrorF(" than the default one (e.g.\n"); - ErrorF(" `${XPCONFIGDIR}/${LANG}/print/Xprinters') or\n"); - ErrorF(" `${XPCONFIGDIR}/C/print/Xprinters'.\n"); - - /* Option '-XpSpoolerType' */ - ErrorF("-XpSpoolerType string specifies a spooler type.\n"); - ErrorF(" Supported values are:\n"); - - while( curr->name != NULL ) - { - ErrorF(" - '%s'\n", curr->name); - curr++; - } - ErrorF(" (multiple values can be specified, seperated by ':',\n"); - ErrorF(" the first active spooler will be chosen).\n"); - ErrorF(" default is '%s'.\n", XPDEFAULTSPOOLERNAMELIST); -} - -/* - * PrinterOptions checks argv[i] to see if it is our command line - * option specifying a configuration file name. It returns the index - * of the next option to process. - */ -int -PrinterOptions( - int argc, - char **argv, - int i) -{ - if(strcmp(argv[i], "-XpFile") == 0) - { - if ((i + 1) >= argc) { - ddxUseMsg (); - return i + 2; - } - configFileName = argv[i + 1]; - return i + 2; - } - else if(strcmp(argv[i], "-XpSpoolerType") == 0) - { - if ((i + 1) >= argc) { - ddxUseMsg (); - return i + 2; - } - XpSetSpoolerTypeNameList(argv[i + 1]); - return i + 2; - } - else - { - return i; - } -} - -/************************************************************ - * GetInitFunc -- - * - * This routine is called from the InitPrintDrivers function. - * Given the name of a driver, return a pointer to the driver's - * initialization function. - * - * Results: - * Returns a pointer to the initialization function for the driver. - * - * - ************************************************************/ - -/* -typedef Bool (*pIFunc)(); -static pIFunc -GetInitFunc(driverName) -*/ - -static pBFunc GetInitFunc(char *driverName) -{ - driverInitRec *pInitRec; - int numDrivers = sizeof(driverInits)/sizeof(driverInitRec); - int i; - - for(pInitRec = driverInits, i = 0; i < numDrivers; pInitRec++, i++) - { - if( !strcmp( driverName, pInitRec->driverName ) ) - return pInitRec->initFunc; - } - - return 0; -} - -static void -GetDimFuncAndRec( - char *driverName, - XpValidatePoolsRec **pValRec, - pVFunc *dimensionsFunc) -{ - driverInitRec *pInitRec; - int numDrivers = sizeof(driverInits)/sizeof(driverInitRec); - int i; - - for(pInitRec = driverInits, i = 0; i < numDrivers; pInitRec++, i++) - { - if( !strcmp( driverName, pInitRec->driverName ) ) - { - *dimensionsFunc = pInitRec->dimensionsFunc; - *pValRec = pInitRec->pValRec; - return ; - } - } - - *dimensionsFunc = 0; - *pValRec = 0; - return; -} - -static void -FreePrinterDb(void) -{ - PrinterDbPtr pCurEntry, pNextEntry; - - for(pCurEntry = printerDb, pNextEntry = (PrinterDbPtr)NULL; - pCurEntry != (PrinterDbPtr)NULL; pCurEntry = pNextEntry) - { - pNextEntry = pCurEntry->next; - if(pCurEntry->name != (char *)NULL) - xfree(pCurEntry->name); - if(pCurEntry->desc != (char *)NULL) - xfree(pCurEntry->desc); - /* - * We don't free the driver name, because it's expected to simply - * be a pointer into the xrm database. - */ - xfree(pCurEntry); - } - printerDb = (PrinterDbPtr)NULL; -} - -/* - * AddPrinterDbName allocates an entry in the printerDb list, and - * initializes the "name". It returns TRUE if the element was - * successfully added, and FALSE if an allocation error ocurred. - * XXX AddPrinterDbName needs to check for (and not add) duplicate names. - */ -static Bool -AddPrinterDbName(char *name, char *desc) -{ - PrinterDbPtr pEntry = (PrinterDbPtr)xalloc(sizeof(PrinterDbEntry)); - - if(pEntry == (PrinterDbPtr)NULL) return FALSE; - pEntry->name = (name != NULL) ? strdup(name) : NULL; - pEntry->desc = (desc != NULL) ? strdup(desc) : NULL; - pEntry->qualifier = (char *)NULL; - - if(printerDb == (PrinterDbPtr)NULL) - { - pEntry->next = (PrinterDbPtr)NULL; - printerDb = pEntry; - } - else - { - pEntry->next = printerDb; - printerDb = pEntry; - } - return TRUE; -} - -static int -AugmentPrinterDb(const char *command) -{ - FILE *fp; - char name[256]; - int num_printers = 0; /* Number of printers we found */ - size_t namelen; - char *desc = NULL; - - fp = popen(command, "r"); - /* XXX is a 256 character limit overly restrictive for printer names? */ - while(fgets(name, 256, fp) != (char *)NULL && (namelen=strlen(name))) - { - char *option = name; - - name[namelen-1] = (char)'\0'; /* strip the \n */ - -#define XP_DESCRIPTOR "xp-printerattr.descriptor=" -#define XP_DESCRIPTOR_LEN (sizeof(XP_DESCRIPTOR)-1) - while ((option = strchr(option, '\t'))) { - option++; /* Skip the '\t' */ - if (!strncmp(option, XP_DESCRIPTOR, XP_DESCRIPTOR_LEN)) { - *(option-1) = '\0'; /* Kill the '\t' (only if we found a valid option) */ - option += XP_DESCRIPTOR_LEN; - if (*option != '\0') { - desc = option; - } - } - else - { - /* Unknown option */ - ErrorF("AugmentPrinterDb: Unknown option '%s'\n", option); - } - } - AddPrinterDbName(name, desc); - num_printers++; - } - pclose(fp); - return num_printers; -} - -/* - * FreeNameMap frees all remaining memory associated with the nameMap. - */ -static void -FreeNameMap(void) -{ - NameMapPtr pEntry, pTmp; - - for(pEntry = nameMap, pTmp = (NameMapPtr)NULL; - pEntry != (NameMapPtr)NULL; - pEntry = pTmp) - { - if(pEntry->name != (char *)NULL) - xfree(pEntry->name); - if(pEntry->qualifier != (char *)NULL) - xfree(pEntry->qualifier); - pTmp = pEntry->next; - xfree(pEntry); - } - nameMap = (NameMapPtr)NULL; -} - -/* - * AddNameMap adds an element to the nameMap linked list. - */ -static Bool -AddNameMap(char *name, char *qualifier) -{ - NameMapPtr pEntry; - - if((pEntry = (NameMapPtr)xalloc(sizeof(NameMapEntry))) == (NameMapPtr)NULL) - return FALSE; - pEntry->name = name; - pEntry->qualifier = qualifier; - pEntry->next = nameMap; - nameMap = pEntry; - return TRUE; -} - -/* - * MergeNameMap - puts the "map" names (aka qualifiers, aliases) into - * the printerDb. This should be called once, after both the printerDb - * and nameMap lists are complete. When/if MergeNameMap finds a map for - * an entry in the printerDb, the qualifier is _moved_ (not copied) to - * the printerDb. This means that the qualifier pointer in the nameMap - * is NULLed out. - */ -static void -MergeNameMap(void) -{ - NameMapPtr pMap; - PrinterDbPtr pDb; - - for(pMap = nameMap; pMap != (NameMapPtr)NULL; pMap = pMap->next) - { - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(!strcmp(pMap->name, pDb->name)) - { - pDb->qualifier = pMap->qualifier; - pMap->qualifier = (char *)NULL; - } - } - } -} - -/* - * CreatePrinterAttrs causes the attribute stores to be built for - * each printer in the printerDb. - */ -static void -CreatePrinterAttrs(void) -{ - PrinterDbPtr pDb; - - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - XpBuildAttributeStore(pDb->name, (pDb->qualifier)? - pDb->qualifier : pDb->name); - } -} - -#ifdef XPPSDDX -#define defaultDriver "XP-POSTSCRIPT" -#else -#ifdef XPPCLDDX -#define defaultDriver "XP-PCL-COLOR" -#else -#ifdef XPMONOPCLDDX -#define defaultDriver "XP-PCL-MONO" -#else -#define defaultDriver "XP-RASTER" -#endif -#endif -#endif - -/* - * StoreDriverNames - queries the attribute store for the ddx-identifier. - * if the ddx-identifier is not in the attribute database, then a default - * ddx-identifier is store in both the attribute store for the printer, - * and in the printerDb. - * The ddx-identifier is stored in the printerDb for use in initializing - * the screens. - */ -static void -StoreDriverNames(void) -{ - PrinterDbPtr pEntry; - - for(pEntry = printerDb; pEntry != (PrinterDbPtr)NULL; - pEntry = pEntry->next) - { - pEntry->driverName = (char*)XpGetPrinterAttribute(pEntry->name, - "xp-ddx-identifier"); - if(pEntry->driverName == (char *)NULL || - strlen(pEntry->driverName) == 0 || - GetInitFunc(pEntry->driverName) == (Bool(*)())NULL) - { - if (pEntry->driverName && (strlen(pEntry->driverName) != 0)) { - ErrorF("Xp Extension: Can't load driver %s\n", - pEntry->driverName); - ErrorF(" init function missing\n"); - } - - pEntry->driverName = defaultDriver; - XpAddPrinterAttribute(pEntry->name, - (pEntry->qualifier != (char *)NULL)? - pEntry->qualifier : pEntry->name, - "*xp-ddx-identifier", pEntry->driverName); - } - } -} - -/* - * StoreDescriptors - queries the attribute store for the descriptor. - * if the descriptor is not in the attribute database, then the descriptor - * from the printerDb is store in the attribute store for the printer. - */ -static void -StoreDescriptors(void) -{ - PrinterDbPtr pEntry; - - for(pEntry = printerDb; pEntry != (PrinterDbPtr)NULL; - pEntry = pEntry->next) - { - if (pEntry->desc != NULL) - { - XpAddPrinterAttribute(pEntry->name, - (pEntry->qualifier != (char *)NULL)? - pEntry->qualifier : pEntry->name, - "*descriptor", pEntry->desc); - } - } -} - -static char * -MbStrchr( - char *str, - int ch) -{ - size_t mbCurMax = MB_CUR_MAX; - wchar_t targetChar, curChar; - char tmpChar; - int i, numBytes, byteLen; - - if(mbCurMax <= 1) return strchr(str, ch); - - tmpChar = (char)ch; - mbtowc(&targetChar, &tmpChar, mbCurMax); - for(i = 0, numBytes = 0, byteLen = strlen(str); i < byteLen; i += numBytes) - { - numBytes = mbtowc(&curChar, &str[i], mbCurMax); - if(curChar == targetChar) return &str[i]; - } - return (char *)NULL; -} - -/* - * GetConfigFileName - Looks for a "Xprinters" file in - * $(XPRINTDIR)/$LANG/print, and then in $(XPRINTDIR)/C/print. If it - * finds such a file, it returns the path to the file. The returned - * string must be freed by the caller. - */ -static char * -GetConfigFileName(void) -{ - /* - * We need to find the system-wide file, if one exists. This - * file can be in either $(XPRINTDIR)/$LANG/print, or in - * $(PRINTDIR)/C/print, and the file itself is named "Xprinters". - */ - char *dirName, *filePath; - - /* - * Check for a LANG-specific file. - */ - if((dirName = XpGetConfigDir(TRUE))) - { - filePath = (char *)xalloc(strlen(dirName) + - strlen(XPRINTERSFILENAME) + 2); - - if(filePath == (char *)NULL) - { - xfree(dirName); - return (char *)NULL; - } - - sprintf(filePath, "%s/%s", dirName, XPRINTERSFILENAME); - xfree(dirName); - if(access(filePath, R_OK) == 0) - return filePath; - - xfree(filePath); - } - - if((dirName = XpGetConfigDir(FALSE))) - { - filePath = (char *)xalloc(strlen(dirName) + - strlen(XPRINTERSFILENAME) + 2); - if(filePath == (char *)NULL) - { - xfree(dirName); - return (char *)NULL; - } - sprintf(filePath, "%s/%s", dirName, XPRINTERSFILENAME); - xfree(dirName); - if(access(filePath, R_OK) == 0) - return filePath; - xfree(filePath); - } - return (char *)NULL; -} - -/* - * BuildPrinterDb - reads the config file if it exists, and if necessary - * executes a command such as lpstat to generate a list of printers. - * XXX - * XXX BuildPrinterDb must be rewritten to allow 16-bit characters in - * XXX printer names. The will involve replacing the use of strtok() and its - * XXX related functions. - * XXX At the same time, BuildPrinterDb and it's support routines should have - * XXX allocation error checking added. - * XXX - */ -static PrinterDbPtr -BuildPrinterDb(void) -{ - Bool defaultAugment = TRUE, freeConfigFileName; - - if(configFileName && access(configFileName, R_OK) != 0) - { - ErrorF("Xp Extension: Can't open file %s\n", configFileName); - } - if(!configFileName && (configFileName = GetConfigFileName())) - freeConfigFileName = TRUE; - else - freeConfigFileName = FALSE; - - if(configFileName != (char *)NULL && access(configFileName, R_OK) == 0) - { - char line[256]; - FILE *fp = fopen(configFileName, "r"); - - while(fgets(line, 256, fp) != (char *)NULL) - { - char *tok, *ptr; - if((tok = strtok(line, " \t\012")) != (char *)NULL) - { - if(tok[0] == (char)'#') continue; - if(strcmp(tok, "Printer") == 0) - { - while((tok = strtok((char *)NULL, " \t")) != (char *)NULL) - { - if((ptr = MbStrchr(tok, '\012'))) - *ptr = (char)'\0'; - AddPrinterDbName(tok, NULL); - } - } - else if(strcmp(tok, "Map") == 0) - { - char *name, *qualifier; - - if((tok = strtok((char *)NULL, " \t\012")) == (char *)NULL) - continue; - name = strdup(tok); - if((tok = strtok((char *)NULL, " \t\012")) == (char *)NULL) - { - xfree(name); - continue; - } - qualifier = strdup(tok); - AddNameMap(name, qualifier); - } - else if(strcmp(tok, "Augment_Printer_List") == 0) - { - if((tok = strtok((char *)NULL, " \t\012")) == (char *)NULL) - continue; - - if(strcmp(tok, "%default%") == 0) - continue; - defaultAugment = FALSE; - if(strcmp(tok, "%none%") == 0) - continue; - AugmentPrinterDb(tok); - } - else - break; /* XXX Generate an error? */ - } - } - fclose(fp); - } - - if(defaultAugment == TRUE) - { - XpSpoolerTypePtr curr_spooler_type; /* spooler we are currently probing for queues */ - int num_printers_found; /* number of printers found by |AugmentPrinterDb()| */ - char *tok_lasts; /* strtok_r() position token */ - char *spnamelist; /* list of spooler names, seperated by ":" */ - char *spname; /* spooler name */ - - spnamelist = strdup(XpGetSpoolerTypeNameList()); /* strtok_r() modifies string so dup' it first */ - - for( spname = strtok_r(spnamelist, ":", &tok_lasts) ; - spname != NULL ; - spname = strtok_r(NULL, ":", &tok_lasts) ) - { - curr_spooler_type = XpSpoolerNameToXpSpoolerType(spname); - if(!curr_spooler_type) - { - FatalError("BuildPrinterDb: No spooler type entry found for '%s'.\n", spname); - } - - if(curr_spooler_type->list_queues_command == NULL || - strlen(curr_spooler_type->list_queues_command) == 0) - { - continue; - } - - num_printers_found = AugmentPrinterDb(curr_spooler_type->list_queues_command); - /* Did we found a spooler which works ? */ - if(num_printers_found > 0) - { - spooler_type = curr_spooler_type; -#ifdef DEBUG_gisburn - fprintf(stderr, "BuildPrinterDb: using '%s'.\n", spooler_type->name); -#endif /* DEBUG_gisburn */ - break; - } - } - - free(spnamelist); - } - - MergeNameMap(); - FreeNameMap(); - - /* Create the attribute stores for all printers */ - CreatePrinterAttrs(); - - /* - * Find the drivers for each printers, and store the driver names - * in the printerDb - */ - StoreDriverNames(); - StoreDescriptors(); - - if(freeConfigFileName) - { - xfree(configFileName); - configFileName = (char *)NULL; - } - - return printerDb; -} - -static void -FreeDriverMap(DriverMapPtr driverMap) -{ - DriverMapPtr pCurEntry, pNextEntry; - - for(pCurEntry = driverMap, pNextEntry = (DriverMapPtr)NULL; - pCurEntry != (DriverMapPtr)NULL; pCurEntry = pNextEntry) - { - pNextEntry = pCurEntry->next; - if(pCurEntry->driverName != (char *)NULL) - xfree(pCurEntry->driverName); - xfree(pCurEntry); - } -} - -/* - * XpRehashPrinterList rebuilds the list of printers known to the - * server. It first walks the printerDb to build a table mapping - * driver names and screen numbers, since this is not an easy mapping - * to change in the sample server. The normal configuration files are - * then read & parsed to create the new list of printers. Printers - * which require drivers other than those already initialized are - * deleted from the printerDb. This leaves attribute stores in place - * for inaccessible printers, but those stores will be cleaned up in - * the next rehash or server recycle. - */ -int -XpRehashPrinterList(void) -{ - PrinterDbPtr pEntry, pPrev; - DriverMapPtr driverMap = (DriverMapPtr)NULL, pDrvEnt; - int result; - - /* Build driverMap */ - for(pEntry = printerDb; pEntry != (PrinterDbPtr)NULL; pEntry = pEntry->next) - { - for(pDrvEnt = driverMap; pDrvEnt != (DriverMapPtr)NULL; - pDrvEnt = pDrvEnt->next) - { - if(!strcmp(pEntry->driverName, pDrvEnt->driverName)) - break; - } - - if(pDrvEnt != (DriverMapPtr)NULL) - continue; - - if((pDrvEnt = (DriverMapPtr)xalloc(sizeof(DriverMapEntry))) == - (DriverMapPtr)NULL) - { - FreeDriverMap(driverMap); - return BadAlloc; - } - pDrvEnt->driverName = strdup(pEntry->driverName); - pDrvEnt->screenNum = pEntry->screenNum; - pDrvEnt->next = driverMap; - driverMap = pDrvEnt; - } - - /* Free the old printerDb */ - FreePrinterDb(); - - /* Free/Rehash attribute stores */ - if((result = XpRehashAttributes()) != Success) - return result; - - /* Build a new printerDb */ - if(BuildPrinterDb() == (PrinterDbPtr)NULL) - return BadAlloc; - - /* Walk PrinterDb & either store screenNum, or delete printerDb entry */ - for(pEntry = printerDb, pPrev = (PrinterDbPtr)NULL; - pEntry != (PrinterDbPtr)NULL; pEntry = pEntry->next) - { - for(pDrvEnt = driverMap; pDrvEnt != (DriverMapPtr)NULL; - pDrvEnt = pDrvEnt->next) - { - if(!strcmp(printerDb->driverName, pDrvEnt->driverName)) - break; - } - - /* - * Either store the screen number, or delete the printerDb entry. - * Deleting the entry leaves orphaned attribute stores, but they'll - * get cleaned up at the next rehash or server recycle. - */ - if(pDrvEnt != (DriverMapPtr)NULL) - { - pEntry->screenNum = pDrvEnt->screenNum; - pPrev = pEntry; - } - else { - if(pPrev) - pPrev->next = pEntry->next; - else - pPrev = pEntry->next; - if(pEntry->name != (char *)NULL) - xfree(pEntry->name); - xfree(pEntry); - pEntry = pPrev; - } - } - - FreeDriverMap(driverMap); - - return Success; -} - -/* - * ValidateFontDir looks for a valid font directory for the specified - * printer model within the specified configuration directory. It returns - * the directory name, or NULL if no valid font directory was found. - * It is the caller's responsibility to free the returned font directory - * name. - */ -static char * -ValidateFontDir( - char *configDir, - char *modelName) -{ - char *pathName; - - if(!configDir || !modelName) - return (char *)NULL; - - pathName = (char *)xalloc(strlen(configDir) + strlen(MODELDIRNAME) + - strlen(modelName) + strlen(FONTDIRNAME) + - strlen("fonts.dir") + 5); - if(!pathName) - return (char *)NULL; - sprintf(pathName, "%s/%s/%s/%s/%s", configDir, MODELDIRNAME, modelName, - FONTDIRNAME, "fonts.dir"); - if(access(pathName, R_OK) != 0) - { - xfree(pathName); - return (char *)NULL; - } - pathName[strlen(pathName) - 9] = (char)'\0'; /* erase fonts.dir */ - return pathName; -} - -/* - * FindFontDir returns a pointer to the path name of the font directory - * for the specified printer model name, if such a directory exists. - * The directory contents are superficially checked for validity. - * The caller must free the returned char *. - * - * We first look in the locale-specific model-config directory, and - * then fall back to the C language model-config directory. - */ -static char * -FindFontDir( - char *modelName) -{ - char *configDir, *fontDir; - - if(!modelName || !strlen(modelName)) - return (char *)NULL; - - configDir = XpGetConfigDir(TRUE); - if((fontDir = ValidateFontDir(configDir, modelName))) - { - xfree(configDir); - return fontDir; - } - - if(configDir) - xfree(configDir); - configDir = XpGetConfigDir(FALSE); - fontDir = ValidateFontDir(configDir, modelName); - - xfree(configDir); - - return fontDir; -} - -/* - * AddToFontPath adds the specified font path element to the global - * defaultFontPath string. It adds the keyword "PRINTER:" to the front - * of the path to denote that this is a printer-specific font path - * element. - */ -static char PATH_PREFIX[] = "PRINTER:"; -static int PATH_PREFIX_LEN = sizeof(PATH_PREFIX) - 1; /* same as strlen() */ - -static void -AddToFontPath( - char *pathName) -{ - char *newPath; - Bool freeOldPath; - - if(defaultFontPath == origFontPath) - freeOldPath = FALSE; - else - freeOldPath = TRUE; - - newPath = (char *)xalloc(strlen(defaultFontPath) + strlen(pathName) + - PATH_PREFIX_LEN + 2); - - sprintf(newPath, "%s%s,%s", PATH_PREFIX, pathName, defaultFontPath); - - if(freeOldPath) - xfree(defaultFontPath); - - defaultFontPath = newPath; - return; -} - -/* - * AugmentFontPath adds printer-model-specific font path elements to - * the front of the font path global variable "defaultFontPath" (dix/globals.c). - * We can't call SetFontPath() because the font code has not yet been - * initialized when InitOutput is called (from whence this routine is called). - * - * This utilizes the static variables origFontPath and - * freeDefaultFontPath to track the original contents of defaultFontPath, - * and to properly free the modified version upon server recycle. - */ -static void -AugmentFontPath(void) -{ - char *modelID, **allIDs = (char **)NULL; - PrinterDbPtr pDbEntry; - int numModels, i; - - if(!origFontPath) - origFontPath = defaultFontPath; - - if(freeDefaultFontPath) - { - xfree(defaultFontPath); - defaultFontPath = origFontPath; - freeDefaultFontPath = FALSE; - } - - /* - * Build a list of printer models to check for internal fonts. - */ - for(pDbEntry = printerDb, numModels = 0; - pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next) - { - modelID = - (char*)XpGetPrinterAttribute(pDbEntry->name, - "xp-model-identifier"); - - if(modelID && strlen(modelID) != 0) - { - /* look for current model in the list of allIDs */ - for(i = 0; i < numModels; i++) - { - if(!strcmp(modelID, allIDs[i])) - { - modelID = (char *)NULL; - break; - } - } - } - - /* - * If this printer's model-identifier isn't in the allIDs list, - * then add it to allIDs. - */ - if(modelID && strlen(modelID) != 0) - { - allIDs = (char **)xrealloc(allIDs, (numModels+2) * sizeof(char *)); - if(allIDs == (char **)NULL) - return; - allIDs[numModels] = modelID; - allIDs[numModels + 1] = (char *)NULL; - numModels++; - } - } - - /* for each model, check for a valid font directory, and add it to - * the front of defaultFontPath. - */ - for(i = 0; allIDs != (char **)NULL && allIDs[i] != (char *)NULL; i ++) - { - char *fontDir; - if((fontDir = FindFontDir(allIDs[i]))) - { - AddToFontPath(fontDir); - xfree(fontDir); - freeDefaultFontPath = TRUE; - } - } - - if(allIDs) - xfree(allIDs); - - return; -} - -/* - * XpClientIsBitmapClient is called by the font code to find out if - * a particular client should be granted access to bitmap fonts. - * This function works by - * calling XpContextOfClient (in Xserver/Xext/xprint.c) to determine - * the context associated with the client, and then queries the context's - * attributes to determine whether the bitmap fonts should be visible. - * It looks at the value of the xp-listfonts-modes document/page attribute to - * see if xp-list-glyph-fonts has been left out of the mode list. Only - * if the xp-listfonts-modes attribute exists, and it does not contain - * xp-list-glyph-fonts does this function return FALSE. In any other - * case the funtion returns TRUE, indicating that the bitmap fonts - * should be visible to the client. - */ -Bool -XpClientIsBitmapClient( - ClientPtr client) -{ - XpContextPtr pContext; - char *mode; - - if(!(pContext = XpContextOfClient(client))) - return TRUE; - - /* - * Check the page attributes, and if it's not defined there, then - * check the document attributes. - */ - mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-modes"); - if(!mode || !strlen(mode)) - { - mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-modes"); - if(!mode || !strlen(mode)) - return TRUE; - } - - if(!strstr(mode, "xp-list-glyph-fonts")) - return FALSE; - - return TRUE; -} - -/* - * XpClientIsPrintClient is called by the font code to find out if - * a particular client has set a context which references a printer - * which utilizes a particular font path. - * This function works by calling XpContextOfClient - * (in Xserver/Xext/xprint.c) to determine the context associated with - * the client and then looks at the value of the xp-listfonts-modes - * document/page attribute to see if xp-list-internal-printer-fonts has - * been left out of the mode list. - * If the xp-listfonts-modes attribute exists, and it does not contain - * xp-list-internal-printer-fonts this function returns FALSE. - * Otherwise it looks up the font directory for the context. The font - * directory is then compared with the directory specified in the - * FontPathElement which is passed in. - */ -Bool -XpClientIsPrintClient( - ClientPtr client, - FontPathElementPtr fpe) -{ - XpContextPtr pContext; - char *mode; - char *modelID, *fontDir; - - if(!(pContext = XpContextOfClient(client))) - return FALSE; - - /* - * Check the page attributes, and if it's not defined there, then - * check the document attributes. - */ - mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-modes"); - if(!mode || !strlen(mode)) - { - mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-modes"); - } - - if(mode && strlen(mode)) - { - if(!strstr(mode, "xp-list-internal-printer-fonts")) - return FALSE; - } - - if (!fpe) - return TRUE; - - modelID = XpGetOneAttribute(pContext, XPPrinterAttr, "xp-model-identifier"); - if(!modelID || !strlen(modelID)) - return FALSE; - - if(!(fontDir = FindFontDir(modelID))) - return FALSE; - - /* - * The grunge here is to ignore the PATH_PREFIX at the front of the - * fpe->name. - */ - if(fpe->name_length < PATH_PREFIX_LEN || - (strlen(fontDir) != (fpe->name_length - PATH_PREFIX_LEN)) || - strncmp(fontDir, fpe->name + PATH_PREFIX_LEN, - fpe->name_length - PATH_PREFIX_LEN)) - { - xfree(fontDir); - return FALSE; - } - xfree(fontDir); - return TRUE; -} - -static void -AddFormats(ScreenInfo *pScreenInfo, char *driverName) -{ - int i, j; - driverInitRec *pInitRec; - int numDrivers = sizeof(driverInits)/sizeof(driverInitRec); - PixmapFormatRec *formats; - int numfmts; - - for (pInitRec = driverInits, i = 0; i < numDrivers; pInitRec++, i++) - { - if ( !strcmp( driverName, pInitRec->driverName ) ) - break; - } - if (i >= numDrivers) - return; - formats = pInitRec->pFmts; - numfmts = pInitRec->numFmts; - for (i = 0; i < numfmts && pScreenInfo->numPixmapFormats < MAXFORMATS; i++) - { - for (j = 0; j < pScreenInfo->numPixmapFormats; j++) { - if (pScreenInfo->formats[j].depth == formats[i].depth && - pScreenInfo->formats[j].bitsPerPixel == formats[i].bitsPerPixel && - pScreenInfo->formats[j].scanlinePad == formats[i].scanlinePad) - break; - } - if (j == pScreenInfo->numPixmapFormats) { - pScreenInfo->formats[j] = formats[i]; - pScreenInfo->numPixmapFormats++; - } - } -} - -/************************************************************ - * PrinterInitOutput -- - * This routine is to be called from a ddx's InitOutput - * during the server startup initialization, and when - * the server is to be reset. The routine creates the - * screens associated with configured printers by calling - * dix:AddScreen. The configuration information comes from a - * database read from the X*printers file. - * - * Results: - * The array of ScreenRec pointers referenced by - * pScreenInfo->screen is increased by the addition - * of the printer screen(s), as is the value of - * pScreenInfo->numScreens. This is done via calls - * to AddScreen() in dix. - * - ************************************************************/ - -void -PrinterInitOutput( - ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - PrinterDbPtr pDb, pDbEntry; - int driverCount = 0, i; - char **driverNames; - char *configDir; - - /* This should NEVER happen, but... */ - if( !xprintInitGlobalsCalled ) - { - FatalError("Internal error: PrinterInitGlobals() not called."); - } -#ifdef SMART_SCHEDULE - /* |PrinterInitGlobals| should have set |SmartScheduleDisable| to - * |TRUE| - if not we will trigger this safeguard. */ - if( SmartScheduleDisable != TRUE ) - { - FatalError("Internal error: XF86 smart scheduler incompatible to Xprint DDX."); - } -#endif /* SMART_SCHEDULE */ - /* Safeguard for - * http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=567 ("Xorg - * Xprt starts to consume 100% CPU when being idle for some time") - * |PrinterInitGlobals| should have set |defaultScreenSaverTime| to - * |0| - if not we will trigger this trap. */ - if( defaultScreenSaverTime != 0 ) - { - FatalError("Internal screen saver must be OFF for printing."); - } - - /* Print a warnung when the maximum request size of the BIGREQUESTS - * extension is smaller than 8MB (see - * http://xprint.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=622) - */ - if (maxBigRequestSize < (8*1048576)-1) { - ErrorF("Xp Extension: BIGREQUESTS max. request is currently %ld bytes " - ", recommemded minimum for Xprint is 8MB.\n", (long)maxBigRequestSize); - } - - /* - * this little test is just a warning at startup to make sure - * that the config directory exists. - * - * what this ugly looking if says is that if both ways of - * calling configDir works and both directories don't exist, - * then print an error saying we can't find the non-lang one. - */ - if (((configDir = XpGetConfigDir(TRUE)) != NULL) && - (access(configDir, F_OK) == 0)) - { - xfree(configDir); - } - else if (((configDir = XpGetConfigDir(FALSE)) != NULL) && - (access(configDir, F_OK) == 0)) - { - xfree(configDir); - } - else { - /* Refuse to start when we do not have our config dir... */ - FatalError("Xp Extension: could not find config dir %s\n", - configDir ? configDir : XPRINTDIR); - } - - if(printerDb != (PrinterDbPtr)NULL) - FreePrinterDb(); - - /* - * Calling BuildPrinterDb serves to build the printer database, - * and to initialize the attribute store for each printer. - * The driver can, if it so desires, modify the attribute - * store at a later time. - */ - if((pDb = BuildPrinterDb()) == (PrinterDbPtr)NULL) return; - - /* - * We now have to decide how many screens to initialize, and call - * AddScreen for each one. The printerDb must be properly initialized - * for at least one screen's worth of printers prior to calling AddScreen - * because InitPrintDrivers reads the printerDb to determine which - * driver(s) to init on a particular screen. - * We put each driver's printers on a different - * screen, and call AddScreen for each screen/driver pair. - */ - /* count the number of printers */ - for(pDbEntry = pDb, driverCount = 0; pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next, driverCount++) - ; - /* - * Allocate memory for the worst case - a driver per printer - */ - driverNames = (char **)xalloc(sizeof(char *) * driverCount); - - /* - * Assign the driver for the first printer to the first screen - */ - pDb->screenNum = screenInfo.numScreens; - driverNames[0] = pDb->driverName; - driverCount = 1; - AddFormats(pScreenInfo, pDb->driverName); - - /* - * For each printer, look to see if its driver is already assigned - * to a screen, and if so copy that screen number into the printerDb. - * Otherwise, assign a new screen number to the driver for this - * printer. - */ - for(pDbEntry = pDb; pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next) - { - Bool foundMatch; - - for(i = 0, foundMatch = FALSE; i < driverCount; i++) - { - if(!strcmp(driverNames[i], pDbEntry->driverName)) - { - foundMatch = TRUE; - pDbEntry->screenNum = screenInfo.numScreens + i; - break; - } - } - if(foundMatch == FALSE) - { - driverNames[driverCount] = pDbEntry->driverName; - pDbEntry->screenNum = screenInfo.numScreens + driverCount; - AddFormats(pScreenInfo, pDbEntry->driverName); - driverCount++; - } - } - - for(i = 0; i < driverCount; i++) - { - int curScreen = screenInfo.numScreens; - if(AddScreen(InitPrintDrivers, argc, argv) < 0) - { - PrinterDbPtr pPrev; - /* - * AddScreen failed, so we pull the associated printers - * from the list. - */ - ErrorF("Xp Extension: Could not add screen for driver %s\n", - driverNames[i]); - for(pPrev = pDbEntry = printerDb; pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next) - { - if(pDbEntry->screenNum == curScreen) - { - if(pPrev == printerDb) - { - printerDb = pDbEntry->next; - pPrev = printerDb; - } - else - pPrev->next = pDbEntry->next; - - xfree(pDbEntry->name); - xfree(pDbEntry); - pDbEntry = pPrev; - } - else - { - if(pDbEntry->screenNum > curScreen) - pDbEntry->screenNum--; - pPrev = pDbEntry; - } - } - } - } - - xfree(driverNames); - - AugmentFontPath(); - - if(pScreenInfo->numScreens > MAXSCREENS) - { - ErrorF("The number of printer screens requested "); - ErrorF("exceeds the allowable limit of %d screens.\n", MAXSCREENS); - ErrorF("Please reduce the number of requested printers in your "); - ErrorF("\nX%sprinters file.", display); - ErrorF("Server exiting...\n"); - exit(-1); - } -} - -/* - * InitPrintDrivers is called from dix:AddScreen. It in turn calls the - * driver initialization routine for any and all drivers which are - * implicated in supporting printers on the particular screen number - * specified by the "index" parameter. The printerDb variable is used - * to determine which printers are to be associated with a particular - * screen. - */ -static Bool -InitPrintDrivers( - int index, - ScreenPtr pScreen, - int argc, - char **argv) -{ - PrinterDbPtr pDb, pDb2; - - GenericScreenInit(index, pScreen, argc, argv); - - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(pDb->screenNum == index) - { - Bool callInit = TRUE; - for(pDb2 = printerDb; pDb2 != pDb; pDb2 = pDb2->next) - { - if(!strcmp(pDb->driverName, pDb2->driverName)) - { - callInit = FALSE; - break; - } - } - if(callInit == TRUE) - { - Bool (*initFunc)(BFuncArgs); - initFunc = GetInitFunc(pDb->driverName); - if(initFunc(index, pScreen, argc, argv) == FALSE) - { - /* XXX - What do I do if the driver's init fails? */ - } - } - } - } - return TRUE; -} - -void -_XpVoidNoop(void) -{ - return; -} - -Bool -_XpBoolNoop(void) -{ - return TRUE; -} - -/* - * GenericScreenInit - The common initializations required by all - * printer screens and drivers. It sets the screen's cursor functions - * to Noops, and computes the maximum screen (i.e. medium) dimensions. - */ - -static void -GenericScreenInit( - int index, - ScreenPtr pScreen, - int argc, - char **argv) -{ - float fWidth, fHeight, maxWidth, maxHeight; - unsigned short width, height; - PrinterDbPtr pDb; - int res, maxRes; - - /* - * Set the cursor ops to no-op functions. - */ - pScreen->DisplayCursor = (DisplayCursorProcPtr)_XpBoolNoop; - pScreen->RealizeCursor = (RealizeCursorProcPtr)_XpBoolNoop; - pScreen->UnrealizeCursor = (UnrealizeCursorProcPtr)_XpBoolNoop; - pScreen->SetCursorPosition = (SetCursorPositionProcPtr)_XpBoolNoop; - pScreen->ConstrainCursor = (ConstrainCursorProcPtr)_XpVoidNoop; - pScreen->CursorLimits = (CursorLimitsProcPtr)_XpVoidNoop; - pScreen->RecolorCursor = (RecolorCursorProcPtr)_XpVoidNoop; - - /* - * Find the largest paper size for all the printers on the given - * screen. - */ - maxRes = 0; - maxWidth = maxHeight = 0.0; - for( pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(pDb->screenNum == index) - { - - XpValidatePoolsRec *pValRec; - pVFunc dimensionsFunc; - - GetDimFuncAndRec(pDb->driverName, &pValRec, &dimensionsFunc); - if(dimensionsFunc != (pVFunc)NULL) - dimensionsFunc(pDb->name, pValRec, &fWidth, &fHeight, &res); - else - XpGetMaxWidthHeightRes(pDb->name, pValRec, &fWidth, - &fHeight, &res); - if( res > maxRes ) - maxRes = res; - if( fWidth > maxWidth ) - maxWidth = fWidth; - if( fHeight > maxHeight ) - maxHeight = fHeight; - } - } - - width = (unsigned short) (maxWidth * maxRes / 25.4); - height = (unsigned short) (maxHeight * maxRes / 25.4); - pScreen->width = pScreen->height = ( width > height ) ? width : - height; - - pScreen->mmWidth = pScreen->mmHeight = ( maxWidth > maxHeight ) ? - (unsigned short)(maxWidth + 0.5) : - (unsigned short)(maxHeight + 0.5); -} - -#if 0 /* No one uses this anymore... */ -/* - * QualifyName - takes an unqualified file name such as X6printers and - * a colon-separated list of directory path names such as - * /etc/opt/dt:/opt/dt/config. - * - * Returns a fully qualified file path name such as /etc/opt/dt/X6printers. - * The returned value is malloc'd, and the caller is responsible for - * freeing the associated memory. - */ -static char * -QualifyName(char *fileName, char *searchPath) -{ - char * curPath = searchPath; - char * nextPath; - char * chance; - FILE *pFile; - - if (fileName == NULL || searchPath == NULL) - return NULL; - - while (1) { - if ((nextPath = strchr(curPath, ':')) != NULL) - *nextPath = 0; - - chance = (char *)xalloc(strlen(curPath) + strlen(fileName) + 2); - sprintf(chance,"%s/%s",curPath,fileName); - - /* see if we can read from the file */ - if((pFile = fopen(chance, "r")) != (FILE *)NULL) - { - fclose(pFile); - /* ... restore the colon, .... */ - if (nextPath) - *nextPath = ':'; - - return chance; - } - - xfree(chance); - - if (nextPath == NULL) /* End of path list? */ - break; - - /* try the next path */ - curPath = nextPath + 1; - } - return NULL; -} -#endif - -/* - * FillPrinterListEntry fills in a single XpDiListEntry element with data - * derived from the supplied PrinterDbPtr element. - * - * XXX A smarter (i.e. future) version of this routine might inspect the - * XXX "locale" parameter and attempt to match the "description" and - * XXX "localeName" elements of the XpDiListEntry to the specified locale. - */ -static void -FillPrinterListEntry( - XpDiListEntry *pEntry, - PrinterDbPtr pDb, - int localeLen, - char *locale) -{ - static char *localeStr = (char *)NULL; - - if(localeStr == (char *)NULL) - localeStr = strdup(setlocale(LC_ALL, (const char *)NULL)); - - pEntry->name = pDb->name; - pEntry->description = - (char*)XpGetPrinterAttribute(pDb->name, "descriptor"); - pEntry->localeName = localeStr; - pEntry->rootWinId = WindowTable[pDb->screenNum]->drawable.id; -} - -/* - * GetPrinterListInfo fills in the XpDiListEntry struct pointed to by the - * parameter pEntry with the information regarding the printer specified - * by the name and nameLen parameters. The pointers placed in the - * XpDiListEntry structure MUST NOT be freed by the caller. They are - * pointers into existing long-lived databases. - * - */ -static Bool -GetPrinterListInfo( - XpDiListEntry *pEntry, - int nameLen, - char *name, - int localeLen, - char *locale) -{ - PrinterDbPtr pDb; - - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(strlen(pDb->name) == nameLen && !strncmp(pDb->name, name, nameLen)) - { - FillPrinterListEntry(pEntry, pDb, localeLen, locale); - return TRUE; - } - } - return FALSE; -} - -/* - * XpDiFreePrinterList is the approved method of releasing memory used - * for a printer list. - */ -void -XpDiFreePrinterList(XpDiListEntry **list) -{ - int i; - - for(i = 0; list[i] != (XpDiListEntry *)NULL; i++) - xfree(list[i]); - xfree(list); -} - -/* - * XpDiGetPrinterList returns a pointer to a NULL-terminated array of - * XpDiListEntry pointers. Each entry structure contains the name, - * description, root window, and locale of a printer. The call returns - * either a list of all printers configured on the server, or it returns - * the information for one specific printer depending on the values passed - * in. Non-NULL values passed in indicate that only the information for - * the one specific printer is desired, while NULL values indicate that - * the information for all printers is desired. - */ -XpDiListEntry ** -XpDiGetPrinterList( - int nameLen, - char *name, - int localeLen, - char *locale) -{ - XpDiListEntry **pList; - - if(!nameLen || name == (char *)NULL) - { - int i; - PrinterDbPtr pDb; - - for(pDb = printerDb, i = 0; pDb != (PrinterDbPtr)NULL; - pDb = pDb->next, i++) - ; - - if((pList = (XpDiListEntry **)xalloc((i+1) * sizeof(XpDiListEntry *))) - == (XpDiListEntry **)NULL) - return pList; - - pList[i] = (XpDiListEntry *)NULL; - for(pDb = printerDb, i = 0; pDb != (PrinterDbPtr)NULL; - pDb = pDb->next, i++) - { - if((pList[i] = (XpDiListEntry *)xalloc(sizeof(XpDiListEntry)))== - (XpDiListEntry *)NULL) - { - XpDiFreePrinterList(pList); - return (XpDiListEntry **)NULL; - } - FillPrinterListEntry(pList[i], pDb, localeLen, locale); - } - } - else - { - if((pList = (XpDiListEntry **)xalloc(2 * sizeof(XpDiListEntry *))) == - (XpDiListEntry **)NULL) - return pList; - - if((pList[0] = (XpDiListEntry *)xalloc(sizeof(XpDiListEntry))) == - (XpDiListEntry *)NULL) - { - xfree(pList); - return (XpDiListEntry **)NULL; - } - pList[1] = (XpDiListEntry *)NULL; - if(GetPrinterListInfo(pList[0], nameLen, name, localeLen, locale) == - FALSE) - { - xfree(pList[0]); - pList[0] = (XpDiListEntry *)NULL; - } - } - return pList; -} - -WindowPtr -XpDiValidatePrinter(char *printerName, int printerNameLen) -{ - PrinterDbPtr pCurEntry; - - for(pCurEntry = printerDb; - pCurEntry != (PrinterDbPtr)NULL; pCurEntry = pCurEntry->next) - { - if(strlen(pCurEntry->name) == printerNameLen && - !strncmp(pCurEntry->name, printerName, printerNameLen)) - return WindowTable[pCurEntry->screenNum]; - } - return (WindowPtr)NULL; -} - -/* - * XpDiGetDriverName takes a screen index and a printer name, and returns - * a pointer to the name of the driver to be used for the specified printer - * on the specified screen. - */ -char * -XpDiGetDriverName(int index, char *printerName) -{ - - PrinterDbPtr pCurEntry; - - for(pCurEntry = printerDb; - pCurEntry != (PrinterDbPtr)NULL; pCurEntry = pCurEntry->next) - { - if(pCurEntry->screenNum == index && - !strcmp(pCurEntry->name, printerName)) - return pCurEntry->driverName; - } - - return (char *)NULL; /* XXX Should we supply a default driverName? */ -} - diff --git a/hw/xprint/Makefile.am b/hw/xprint/Makefile.am deleted file mode 100644 index 2ed7aaf57..000000000 --- a/hw/xprint/Makefile.am +++ /dev/null @@ -1,58 +0,0 @@ -SUBDIRS = doc pcl pcl-mono raster ps etc config - -bin_PROGRAMS = Xprt - -Xprt_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ \ - -DPRINT_ONLY_SERVER -D_XP_PRINT_SERVER_ \ - -DXPRINTDIR=\"$(libdir)/X11/xserver\" \ - -DXPRASTERDDX -DXPPCLDDX -DXPMONOPCLDDX -DXPPSDDX \ - -DXFree86Server - -Xprt_LDFLAGS = -L$(top_srcdir) -XPRINT_LIBS = \ - @XPRINT_LIBS@ \ - ps/libps.la \ - raster/libraster.la \ - pcl/libpcl.la \ - pcl-mono/libpcl.la \ - $(top_builddir)/fb/libfb.la \ - $(top_builddir)/render/librender.la \ - $(top_builddir)/dix/libXpdix.la \ - $(XSERVER_LIBS) \ - $(top_builddir)/Xext/libXext.la \ - $(top_builddir)/xkb/libxkb.la \ - $(top_builddir)/xkb/libxkbstubs.la \ - $(top_builddir)/os/libos.la # for Xprintf - -Xprt_DEPENDENCIES = $(XPRINT_LIBS) -Xprt_LDADD = $(XPRINT_LIBS) $(XPRINT_SYS_LIBS) $(XSERVER_SYS_LIBS) - -miinitext-wrapper.c: - echo "#include \"$(top_srcdir)/mi/miinitext.c\"" >> $@ - -dpmsstubs-wrapper.c: - echo "#include \"$(top_srcdir)/Xext/dpmsstubs.c\"" >> $@ - -Xprt_SOURCES = \ - attributes.c \ - attributes.h \ - AttrValid.c \ - AttrValid.h \ - ddxInit.c \ - DiPrint.h \ - Init.c \ - mediaSizes.c \ - Oid.c \ - OidDefs.h \ - Oid.h \ - OidStrs.h \ - spooler.c \ - spooler.h \ - Util.c \ - miinitext-wrapper.c \ - dpmsstubs-wrapper.c \ - $(top_srcdir)/fb/fbcmap_mi.c - -EXTRA_DIST = ValTree.c - -CLEANFILES = miinitext-wrapper.c dpmsstubs-wrapper.c diff --git a/hw/xprint/Oid.c b/hw/xprint/Oid.c deleted file mode 100644 index a2af00108..000000000 --- a/hw/xprint/Oid.c +++ /dev/null @@ -1,3181 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "attributes.h" - -/* - * XpOidNotify value strings - */ -#define NOTIFY_EMAIL_STR "{{event-report-job-completed} electronic-mail}" -#define NOTIFY_NONE_STR "{}" - -#define SafeStrLen(s) ((s) ? strlen((s)) : 0) - -/* - * entry type for the object identifier string map - */ -typedef struct _XpOidStringMapEntry -{ - const char* string; - int length; - int msg_set; - int msg_number; - const char* default_message; - -} XpOidStringMapEntry; - -/* - * include the auto-generated static XpOidStringMap - */ -#include "OidStrs.h" - -/* - * XpOid static function declarations - */ -static XpOid XpOidParse(const char* value_string, - const char** ptr_return); -/* - * XpOidList static function declarations - */ -static XpOidList* XpOidListParse(const char* value_string, - const XpOidList* valid_oids, - const char** ptr_return, int i); - -/* - * XpOidList static function declarations - */ -static XpOidCardList* XpOidCardListParse(const char* value_string, - const XpOidCardList* valid_cards, - const char** ptr_return, int i); - -/* - * XpOidMediumSourceSize static function declarations - */ -static XpOidMediumSS* MediumSSParse(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes, - const char** ptr_return, int i); -static XpOidMediumContinuousSize* MediumContinuousSizeParse(const char*, - const char**); -static void MediumContinuousSizeDelete(XpOidMediumContinuousSize* me); -static XpOidMediumDiscreteSizeList* MediumDiscreteSizeListParse(const char*, - const XpOidList*, - const char**, - int i); -static void MediumDiscreteSizeListDelete(XpOidMediumDiscreteSizeList* list); - -static BOOL ParseArea(const char* value_string, - const char** ptr_return, - XpOidArea* area_return); -static BOOL ParseRealRange(const char* value_string, - const char** ptr_return, - XpOidRealRange* range_return); - -/* - * XpOidTrayMediumList static function declarations - */ -static XpOidTrayMediumList* TrayMediumListParse(const char* value_string, - const XpOidList* valid_trays, - const char** ptr_return, - int i); -static void TrayMediumListValidate(XpOidTrayMediumList* me, - const XpOidMediumSS* msss); - -/* - * XpOidDocFmt - */ -static BOOL XpOidDocFmtNext(XpOidDocFmt* doc_fmt, - const char* value_string, - const char** ptr_return); - -/* - * XpOidDocFmtListParse - */ -static XpOidDocFmtList* XpOidDocFmtListParse(const char* value_string, - const XpOidDocFmtList* valid_fmts, - const char** ptr_return, int i); - -/* - * misc. parsing static function declarations - */ -static BOOL ParseBoolValue(const char* value_string, - const char** ptr_return, - BOOL* bool_return); -static BOOL ParseRealValue(const char* value_string, - const char** ptr_return, - float* real_return); -static BOOL ParseSeqEnd( - const char* value_string, - const char** ptr_return); -static BOOL ParseSeqStart( - const char* value_string, - const char** ptr_return); -static BOOL ParseUnspecifiedValue( - const char* value_string, - const char** ptr_return); -static int SpanToken( - const char* string); -static int SpanWhitespace( - const char* string); - -/* - * String comparison function. - */ -#ifdef HAVE_STRCASECMP -# define StrnCaseCmp(s1, s2, len) strncasecmp(s1, s2, len) -#else -static int StrnCaseCmp(const char *s1, const char *s2, size_t len); -#endif - -/* - * ------------------------------------------------------------------------ - * Name: XpOidString - * - * Description: - * - * Obtain the string representation of an XpOid. - * - * Example: XpOidString(xpoid_copy_count) returns "copy-count". - * - * Return value: - * - * A const pointer to the string. - */ -const char* -XpOidString(XpOid xp_oid) -{ - /* - * XpOid enum values are index values into the string map - */ - return XpOidStringMap[xp_oid].string; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidStringLength - * - * Description: - * - * Obtain the length of the string representation for a given - * XpOid. - * - * Return value: - * - * The string length in bytes. - * - */ -int -XpOidStringLength(XpOid xp_oid) -{ - /* - * XpOid enum values are index values into the string map - */ - return XpOidStringMap[xp_oid].length; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidFromString - * - * Description: - * - * Obtains the XpOid given a string representation of an XpOid. - * - * Example: XpOidFromString("copy-count") returns 'xpoid_copy_count'. - * - * Return value: - * - * The XpOid if successful. 'xpoid_none' if the string pointed to by - * 'value is not recognized or if 'value' is NULL. - */ -XpOid -XpOidFromString(const char* value) -{ - if(value == (const char*)NULL) - return xpoid_none; - else - return XpOidParse(value, (const char**)NULL); -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidParse - * - * Description: - * - * Parse the next whitespace-delimited string from 'value_string' - * updating 'ptr_return' to point to the next unparsed location in - * 'value_string'. 'ptr_return' can be NULL. - * - * Return value: - * - * The corresponding XpOid for the parsed name string. - * A return value of xpoid_none is returned if the parsed name - * was not a valid oid or if no name was found. - * - */ -static XpOid -XpOidParse(const char* value_string, - const char** ptr_return) -{ - const char* ptr; - int length; - int i; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * get the whitespace-delimited token length - */ - length = SpanToken(ptr); - /* - * match the oid string in the map - */ - for(i = 0; i < XpOidStringMapCount; i++) - if(length == XpOidStringMap[i].length) - if(strncmp(ptr, XpOidStringMap[i].string, length) == 0) - break; - if(i == XpOidStringMapCount) - i = xpoid_none; - /* - * update the return pointer and return - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr+length; - return i; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListNew - * - * Description: - * - * Creates a new XpOidList initialized from a whitespace-delimited - * list of recognized string representations of oids. The returned - * list will contain only oids found within the passed 'valid_oids' - * XpOidList. - * - * Note: One may notice that in order to create an XpOidList with - * this function, an XpOidList is needed; the 'valid_oids' list - * is often an statically initialized structure. XpOidListInit - * can also be used. - * - * Return value: - * - * NULL if the passed 'value_string' is NULL. - * - * If the list indicated by 'value_string' is empty or contains only - * unrecognized oid string representations, a new XpOidList - * containing zero elements is returned. - * - * If 'valid_oids' is NULL all oids are considered valid. - * - */ -XpOidList* -XpOidListNew(const char* value_string, - const XpOidList* valid_oids) -{ - if(value_string == (const char*)NULL) - return (XpOidList*)NULL; - else - { - const char* ptr; - return XpOidListParse(value_string, valid_oids, &ptr, 0); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListDelete - * - * Description: - * - * Frees the memory allocated for 'list'. - * - * Return value: - * - * None. - * - */ -void -XpOidListDelete(XpOidList* list) -{ - if(list != (XpOidList*)NULL) - { - XpOidFree((char*)list->list); - XpOidFree((char*)list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListParse - * - * Description: - * - * This function recursively parses the whitespace-delimited list of - * oid string representations passed via 'value_string'. Oids are - * only added to the resulting list if they are found within the - * passed 'valid_oids' XpOidList. - * - * 'ptr_return' points to a char* variable allocated by the - * caller, and is really only of use during recursion (upon return to - * the original caller, it will point to the end of value_string). - * - * 'value_string' and 'ptr_return' *cannot* be NULL. - * - * Return value: - * - * A newly allocated and initialized XpOidList. - * - * If the list indicated by 'value_string' is empty or contains only - * unrecognized oid string representations, a new XpOidList - * containing zero elements is returned. - * - * If 'valid_oids' is NULL all oids are considered valid. - * - */ -static XpOidList* -XpOidListParse(const char* value_string, - const XpOidList* valid_oids, - const char** ptr_return, - int i) -{ - XpOid oid; - XpOidList* list; - /* - * parse the next valid oid out of the value string - */ - ptr_return = &value_string; - while(1) - { - if(**ptr_return == '\0') - { - /* - * end of value string; stop parsing - */ - oid = xpoid_none; - break; - } - /* - * parse the next oid from the value - */ - oid = XpOidParse(*ptr_return, ptr_return); - if(xpoid_none == oid) - { - /* - * unrecognized oid; keep parsing - */ - continue; - } - if((const XpOidList*)NULL == valid_oids - || - XpOidListHasOid(valid_oids, oid)) - { - /* - * valid oid found; stop parsing - */ - break; - } - } - - if(oid == xpoid_none) - { - /* - * end of value string; allocate the list structure - */ - list = (XpOidList*)XpOidCalloc(1, sizeof(XpOidList)); - list->count = i; - list->list = (XpOid*)XpOidCalloc(i, sizeof(XpOid)); - } - else - { - /* - * recurse - */ - list = XpOidListParse(*ptr_return, valid_oids, ptr_return, i+1); - /* - * set the oid in the list - */ - list->list[i] = oid; - } - /* - * return - */ - return list; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListHasOid - * - * Description: - * - * Determines if 'oid' is an element of 'list'. - * - * Return value: - * - * xTrue if the oid is found in the list. - * - * xFalse if the oid is not in the list, or if 'list' is NULL. - * - */ -BOOL -XpOidListHasOid(const XpOidList* list, XpOid oid) -{ - int i; - if(list != (XpOidList*)NULL) - for(i = 0; i < list->count; i++) - if(list->list[i] == oid) - return xTrue; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListGetIndex - * - * Description: - * - * Returns the array index of 'oid' in 'list' - * - * Return value: - * - * The index of 'oid' in list. - * - * -1 if the oid is not in the list, or if 'list' is NULL. - * - */ -int -XpOidListGetIndex(const XpOidList* list, XpOid oid) -{ - int i; - if(list != (XpOidList*)NULL) - for(i = 0; i < list->count; i++) - if(list->list[i] == oid) - return i; - return -1; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListString - * - * Description: - * - * Creates a string representation of an XpOidList structure. - * - * Return value: - * - * A newly allocated - * - */ -char* -XpOidListString(const XpOidList* me) -{ - int i; - int length; - char* str; - char* ptr; - /* - * allocate enough memory for the oid string representations, - * including intervening whitespace - */ - for(i = 0, length = 0; i < XpOidListCount(me); i++) - length += XpOidStringLength(XpOidListGetOid(me, i)) + 1; - str = XpOidMalloc(length+1); - /* - * format the list - */ - for(i = 0, ptr = str; i < XpOidListCount(me); i++) -#if defined(sun) && !defined(SVR4) - { - sprintf(ptr, "%s ", XpOidString(XpOidListGetOid(me, i))); - ptr += strlen(ptr); - } -#else - ptr += sprintf(ptr, "%s ", XpOidString(XpOidListGetOid(me, i))); -#endif - /* - * chop trailing whitespace or terminate empty string - */ - str[length] = '\0'; - /* - * return - */ - return str; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListNew - * - * Description: - * - * Creates a new instance of an empty XpOidLinkedList. - * - * Return value: - * - * The new XpOidLinkedList. - * - */ -XpOidLinkedList* -XpOidLinkedListNew() -{ - return (XpOidLinkedList*)XpOidCalloc(1, sizeof(XpOidLinkedList)); -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListDelete - * - * Description: - * - * Frees the memory allocated for a XpOidLinkedList. - * - * Return value: - * - * None. - * - */ -void -XpOidLinkedListDelete(XpOidLinkedList* me) -{ - if(me != (XpOidLinkedList*)NULL) - { - while(me->head) - { - me->current = me->head; - me->head = me->current->next; - XpOidFree((char*)me->current); - } - XpOidFree((char*)me); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListGetOid - * - * Description: - * - * Retrieves the oid at position 'i' (zero-based) in the - * XpOidLinkedList 'me'. - * - * Return value: - * - * The oid at position 'i'. - * - * xpoid_none if the oid was not found, or the list is empty (or if - * the list contains xpoid_none at position 'i'). - */ -XpOid -XpOidLinkedListGetOid(XpOidLinkedList* me, int i) -{ - if(me == (XpOidLinkedList*)NULL || i < 0 || i >= me->count) - { - return xpoid_none; - } - else - { - me->current = me->head; - while(i--) me->current = me->current->next; - return me->current->oid; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListAddOid - * - * Description: - * - * Adds an oid to the end of an XpOidLinkedList. - * - * Return value: - * - * None. - * - */ -void -XpOidLinkedListAddOid(XpOidLinkedList* me, XpOid oid) -{ - me->current = (XpOidNode)XpOidCalloc(1, sizeof(struct XpOidNodeStruct)); - me->current->oid = oid; - ++me->count; - if(me->tail) - { - me->tail->next = me->current; - me->tail = me->current; - } - else - me->head = me->tail = me->current; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListGetIndex - * - * Description: - * - * Returns the position of an oid in a XpOidLinkedList. - * - * Return value: - * - * The zero-based position of 'oid' in the list. - * - * -1 if the oid is not in the list, or if 'me' is NULL. - * - */ -int -XpOidLinkedListGetIndex(XpOidLinkedList* me, XpOid oid) -{ - if((XpOidLinkedList*)NULL != me) - { - int i = 0; - me->current = me->head; - while(me->current) - if(me->current->oid == oid) - { - return i; - } - else - { - ++i; - me->current = me->current->next; - } - } - return -1; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListHasOid - * - * Description: - * - * Determines if an oid is an element of a XpOidLinkedList. - * - * Return value: - * - * xTrue if the oid is found in the list. - * - * xFalse if the oid is not in the list, or if 'me' is NULL. - */ -BOOL -XpOidLinkedListHasOid(XpOidLinkedList* me, - XpOid oid) -{ - if((XpOidLinkedList*)NULL != me) - { - me->current = me->head; - while(me->current) - if(me->current->oid == oid) - return xTrue; - else - me->current = me->current->next; - } - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListFirstOid - * - * Description: - * - * Positions the XpOidLinkedList 'current' pointer to the first entry - * in the list. - * - * Return value: - * - * The first oid in the list, or xpoid_none if the list NULL or - * empty. - */ -XpOid -XpOidLinkedListFirstOid(XpOidLinkedList* me) -{ - if((XpOidLinkedList*)NULL != me && (me->current = me->head)) - return me->current->oid; - else - return xpoid_none; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListNextOid - * - * Description: - * - * Positions the XpOidLinkedList 'current' pointer to the next entry - * in the list. - * - * Return value: - * - * The next oid, or xpoid_none if the end of the list has been - * reached. - */ -XpOid -XpOidLinkedListNextOid(XpOidLinkedList* me) -{ - if(me->current ? (me->current = me->current->next) : xFalse) - return me->current->oid; - else - return xpoid_none; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSNew - * - * Description: - * - * Creates a new XpOidMediumSS initialized from a string value - * specified using the medium-source-sizes syntax. See - * MediumSSParse() below for parsing details. - * - * Return value: - * - * NULL if the passed 'value_string' is NULL, or if a syntax error is - * encountered while parsing the medium-source-sizes value. - * - */ -XpOidMediumSS* -XpOidMediumSSNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes) -{ - if(value_string == (const char*)NULL) - return (XpOidMediumSS*)NULL; - else - { - const char* ptr = value_string + SpanWhitespace(value_string); - if(*ptr == '\0') - return (XpOidMediumSS*)NULL; - else - return MediumSSParse(ptr, valid_trays, valid_medium_sizes, - &ptr, 0); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumSSParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * - * Return value: - * - * - * - */ -static XpOidMediumSS* -MediumSSParse(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes, - const char** ptr_return, - int i) -{ - XpOidMediumSS* medium_ss; - XpOidMediumSourceSize mss; - /* - * check for the start of a new MediumSourceSize sequence - */ - if(ParseSeqStart(value_string, ptr_return)) - { - /* - * check for an unspecified tray value - */ - if(ParseUnspecifiedValue(*ptr_return, ptr_return)) - mss.input_tray = xpoid_unspecified; - else - { - const char* tray_str; - *ptr_return += SpanWhitespace(*ptr_return); - tray_str = *ptr_return; - /* - * parse out the input tray - */ - mss.input_tray = XpOidParse(*ptr_return, ptr_return); - if((const XpOidList*)NULL != valid_trays - && - !XpOidListHasOid(valid_trays, mss.input_tray) - ) - mss.input_tray = xpoid_none; - if(xpoid_none == mss.input_tray) - { - char* invalid_tray_str; - int len = *ptr_return - tray_str; - if(len > 0) - { - invalid_tray_str = XpOidMalloc(len+1); - strncpy(invalid_tray_str, tray_str, len); - invalid_tray_str[len] = '\0'; - ErrorF("%s\nInvalid tray (%s) found. Will attempt to continue parsing.\n", - XPMSG_WARN_MSS, invalid_tray_str); - XpOidFree(invalid_tray_str); - } - } - } - /* - * attempt to parse a Continuous MediumSize sequence - */ - mss.ms.continuous_size = - MediumContinuousSizeParse(*ptr_return, ptr_return); - if(mss.ms.continuous_size != (XpOidMediumContinuousSize*)NULL) - { - mss.mstag = XpOidMediumSS_CONTINUOUS; - } - else - { - /* - * not continuous, try Discrete MediumSize - */ - mss.ms.discrete = - MediumDiscreteSizeListParse(*ptr_return, valid_medium_sizes, - ptr_return, 0); - if(mss.ms.discrete == (XpOidMediumDiscreteSizeList*)NULL) - { - const char* tray_str; - /* - * syntax error (MediumDiscreteSizeListParse reports error) - */ - switch(mss.input_tray) - { - case xpoid_none: - tray_str = "an invalid"; - break; - case xpoid_unspecified: - tray_str = "default (tray specifier omitted)"; - break; - default: - tray_str = XpOidString(mss.input_tray); - break; - } - ErrorF("%s\nError occurred while parsing medium sizes for %s tray.\n", - XPMSG_WARN_MSS, tray_str); - return NULL; - } - mss.mstag = XpOidMediumSS_DISCRETE; - } - /* - * parse out the MediumSourceSize sequence end - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - { - /* - * syntax error - */ - ErrorF("%s\nSequence End expected. Unparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return NULL; - } - /* - * recurse to parse the next MediumSourceSize sequence - */ - medium_ss = MediumSSParse(*ptr_return, - valid_trays, valid_medium_sizes, - ptr_return, - xpoid_none == mss.input_tray ? i : i+1); - if(medium_ss == (XpOidMediumSS*)NULL - || - xpoid_none == mss.input_tray) - { - /* - * syntax error or invalid tray - clean up - */ - switch(mss.mstag) - { - case XpOidMediumSS_CONTINUOUS: - MediumContinuousSizeDelete(mss.ms.continuous_size); - break; - case XpOidMediumSS_DISCRETE: - MediumDiscreteSizeListDelete(mss.ms.discrete); - break; - } - if(medium_ss == (XpOidMediumSS*)NULL) - /* - * syntax error - return - */ - return NULL; - } - if(xpoid_none != mss.input_tray) - { - /* - * copy the current MediumSourceSize into the array - */ - memmove((medium_ss->mss)+i, &mss, sizeof(XpOidMediumSourceSize)); - } - } - else - { - /* - * MediumSourceSize sequence start not found - */ - if(**ptr_return == '\0') - { - if(0 == i) - { - ErrorF("%s\nNo valid trays found.\n", XPMSG_WARN_MSS); - return NULL; - } - /* - * end of value string; allocate the MediumSS structure - */ - medium_ss = (XpOidMediumSS*)XpOidCalloc(1, sizeof(XpOidMediumSS)); - medium_ss->count = i; - medium_ss->mss = (XpOidMediumSourceSize*) - XpOidCalloc(i, sizeof(XpOidMediumSourceSize)); - } - else - { - /* - * syntax error - */ - ErrorF("%s\nSequence Start expected.\nunparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return NULL; - } - } - return medium_ss; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSDelete - * - * Description: - * - * - * - * Return value: - * - * - * - */ -void -XpOidMediumSSDelete(XpOidMediumSS* me) -{ - if(me != (XpOidMediumSS*)NULL) - { - int i; - for(i = 0; i < me->count; i++) - { - switch((me->mss)[i].mstag) - { - case XpOidMediumSS_CONTINUOUS: - MediumContinuousSizeDelete((me->mss)[i].ms.continuous_size); - break; - case XpOidMediumSS_DISCRETE: - MediumDiscreteSizeListDelete((me->mss)[i].ms.discrete); - break; - } - } - XpOidFree((char*)me); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSHasSize - * - * Description: - * - * - * - * Return value: - * - * - * - */ -BOOL -XpOidMediumSSHasSize(XpOidMediumSS* me, XpOid page_size) -{ - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - - if(me != (XpOidMediumSS*)NULL && page_size != xpoid_none) - for(i_mss = 0; i_mss < me->count; i_mss++) - { - switch((me->mss)[i_mss].mstag) - { - case XpOidMediumSS_DISCRETE: - ds_list = (me->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - if(page_size == (ds_list->list)[i_ds].page_size) - return xTrue; - break; - - case XpOidMediumSS_CONTINUOUS: - /* - * unsupported - */ - break; - } - } - /* - * return - */ - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSString - * - * Description: - * - * Creates a string representation of an XpOidMediumSS structure. - * - * Return value: - * - * A newly allocated - * - */ -char* XpOidMediumSSString(const XpOidMediumSS* me) -{ - int itray, isize; - int valid_size_count; - int length; - char* str; - char* ptr; - XpOidMediumDiscreteSize* ds; - char buf[128]; - /* - * determine the size of the string representation - */ - for(itray = 0, length = 0; itray < XpOidMediumSSCount(me); itray++) - { - if(xpoid_none == me->mss[itray].input_tray - || - XpOidMediumSS_CONTINUOUS == me->mss[itray].mstag) - { - /* - * skip invalid tray or unsupported continuous size spec - */ - continue; - } - for(isize = 0, valid_size_count = 0; - isize < me->mss[itray].ms.discrete->count; - isize++) - { - ds = me->mss[itray].ms.discrete->list+isize; - if(ds->page_size == xpoid_none) - continue; - ++valid_size_count; - length += XpOidStringLength(ds->page_size); - length += ds->long_edge_feeds ? 4 : 5; /* "True" or "False" */ -#if defined(sun) && !defined(SVR4) - sprintf(buf, "{%.4f %.4f %.4f %.4f}", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); - length += strlen(buf); -#else - length += sprintf(buf, "{%.4f %.4f %.4f %.4f}", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); -#endif - length += 5; /* "{ } " */ - } - if(valid_size_count == 0) - { - /* - * no valid sizes, skip - */ - continue; - } - if(xpoid_unspecified == me->mss[itray].input_tray) - length += 2; /* "''" */ - else - length += XpOidStringLength(me->mss[itray].input_tray); - length += 4; /* "{ } " */ - } - /* - * allocate - */ - str = XpOidMalloc(length+1); - /* - * format - */ - for(itray = 0, ptr = str; itray < XpOidMediumSSCount(me); itray++) - { - if(xpoid_none == me->mss[itray].input_tray - || - XpOidMediumSS_CONTINUOUS == me->mss[itray].mstag) - { - /* - * skip invalid tray or unsupported continuous size spec - */ - continue; - } - /* - * check to ensure all of the specified sizes are valid - */ - for(isize = 0, valid_size_count = 0; - isize < me->mss[itray].ms.discrete->count; - isize++) - { - ds = me->mss[itray].ms.discrete->list+isize; - if(ds->page_size != xpoid_none) - ++valid_size_count; - } - if(valid_size_count == 0) - { - /* - * no valid sizes, skip - */ - continue; - } - - if(xpoid_unspecified == me->mss[itray].input_tray) - { -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{'' "); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "{'' "); -#endif - } - else - { -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{%s ", XpOidString(me->mss[itray].input_tray)); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "{%s ", - XpOidString(me->mss[itray].input_tray)); -#endif - } - for(isize = 0; isize < me->mss[itray].ms.discrete->count; isize++) - { - ds = me->mss[itray].ms.discrete->list+isize; - if(ds->page_size != xpoid_none) -#if defined(sun) && !defined(SVR4) - { - sprintf(ptr, "{%s %s {%.4f %.4f %.4f %.4f}} ", - XpOidString(ds->page_size), - ds->long_edge_feeds ? "True" : "False", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); - ptr += strlen(ptr); - } -#else - ptr += sprintf(ptr, "{%s %s {%.4f %.4f %.4f %.4f}} ", - XpOidString(ds->page_size), - ds->long_edge_feeds ? "True" : "False", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); -#endif - } -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "} "); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "} "); -#endif - } - /* - * chop trailing whitespace or terminate empty string - */ - str[length] = '\0'; - /* - * return - */ - return str; -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumContinuousSizeParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * - * Return value: - * - * - * - */ -static XpOidMediumContinuousSize* -MediumContinuousSizeParse(const char* value_string, - const char** ptr_return) -{ - const char* first_nonws_ptr; - XpOidMediumContinuousSize* mcs = NULL; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the MediumSize sequence start char - */ - if(!ParseSeqStart(first_nonws_ptr, ptr_return)) - goto MediumContinuousSizeParse_error; - /* - * peek ahead to see if it looks like we actually have a continuous - * size spec (looking for the sequence start char on the 1st range spec) - */ - if(!ParseSeqStart(*ptr_return, (const char**)NULL)) - goto MediumContinuousSizeParse_error; - /* - * Ok, let's go for it - */ - mcs = (XpOidMediumContinuousSize*) - XpOidCalloc(1, sizeof(XpOidMediumContinuousSize)); - /* - * "range across the feed direction" - */ - if(!ParseRealRange(*ptr_return, ptr_return, &mcs->range_across_feed)) - goto MediumContinuousSizeParse_error; - /* - * "increment across the feed direction" (optional, default 0) - */ - if(!ParseUnspecifiedValue(*ptr_return, ptr_return)) - if(!ParseRealValue(*ptr_return, ptr_return, - &mcs->increment_across_feed)) - goto MediumContinuousSizeParse_error; - /* - * "range in the feed direction" - */ - if(!ParseRealRange(*ptr_return, ptr_return, &mcs->range_in_feed)) - goto MediumContinuousSizeParse_error; - /* - * "increment in the feed direction" (optional, default 0) - */ - if(!ParseUnspecifiedValue(*ptr_return, ptr_return)) - if(!ParseRealValue(*ptr_return, ptr_return, - &mcs->increment_in_feed)) - goto MediumContinuousSizeParse_error; - /* - * "long edge feeds" flag (default TRUE) - */ - if(ParseUnspecifiedValue(*ptr_return, ptr_return)) - mcs->long_edge_feeds = xTrue; - else - if(!ParseBoolValue(*ptr_return, ptr_return, &mcs->long_edge_feeds)) - goto MediumContinuousSizeParse_error; - /* - * "generic assured reproduction area" - */ - if(!ParseArea(*ptr_return, ptr_return, &mcs->assured_reproduction_area)) - goto MediumContinuousSizeParse_error; - /* - * parse out the MediumSize sequence end character - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - goto MediumContinuousSizeParse_error; - /* - * return - */ - return mcs; - - - MediumContinuousSizeParse_error: - /* - * syntax error - don't log since this function may be called - * as a lookahead - */ - *ptr_return = first_nonws_ptr; - XpOidFree((char*)mcs); - return NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumContinuousSizeDelete - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * - * Return value: - * - * - * - */ -static void -MediumContinuousSizeDelete(XpOidMediumContinuousSize* me) -{ - XpOidFree((char*)me); -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumDiscreteSizeListParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * Return value: - * - * - * - */ -static XpOidMediumDiscreteSizeList* -MediumDiscreteSizeListParse(const char* value_string, - const XpOidList* valid_medium_sizes, - const char** ptr_return, - int i) -{ - XpOidMediumDiscreteSizeList* list; - XpOidMediumDiscreteSize mds; - /* - * check for the start of a new MediumSize sequence - */ - if(ParseSeqStart(value_string, ptr_return)) - { - /* - * "page size" - */ - mds.page_size = XpOidParse(*ptr_return, ptr_return); - if((const XpOidList*)NULL != valid_medium_sizes - && - !XpOidListHasOid(valid_medium_sizes, mds.page_size) - ) - mds.page_size = xpoid_none; - /* - * "long edge feeds" flag (default TRUE) - */ - if(ParseUnspecifiedValue(*ptr_return, ptr_return)) - mds.long_edge_feeds = xTrue; - else - if(!ParseBoolValue(*ptr_return, ptr_return, - &mds.long_edge_feeds)) - { - /* - * syntax error - */ - ErrorF("%s\nBoolean expected.\nunparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return (XpOidMediumDiscreteSizeList*)NULL; - } - /* - * "assured reproduction area" - */ - if(!ParseArea(*ptr_return, ptr_return, - &mds.assured_reproduction_area)) - { - /* - * syntax error - */ - ErrorF("%s\nArea specification error.\nunparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return (XpOidMediumDiscreteSizeList*)NULL; - } - /* - * parse out the MediumSize sequence end character - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - { - ErrorF("%s\nSequence End expected. Unparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return (XpOidMediumDiscreteSizeList*)NULL; - } - /* - * recurse to parse the next Discrete MediumSize sequence - */ - if(mds.page_size == xpoid_none) - { - list = MediumDiscreteSizeListParse(*ptr_return, valid_medium_sizes, - ptr_return, i); - } - else - { - list = MediumDiscreteSizeListParse(*ptr_return, valid_medium_sizes, - ptr_return, i+1); - if(list != (XpOidMediumDiscreteSizeList*)NULL) - { - /* - * copy the current discrete MediumSize into the list - */ - memmove((list->list)+i, &mds, sizeof(XpOidMediumDiscreteSize)); - } - } - } - else - { - /* - * MediumSize sequence start not found; end of the discrete sizes - * list - */ - if(0 == i) - { - ErrorF("%s\nNo valid medium sizes found for tray.\n", - XPMSG_WARN_MSS); - return (XpOidMediumDiscreteSizeList*)NULL; - } - list = (XpOidMediumDiscreteSizeList*) - XpOidCalloc(1, sizeof(XpOidMediumDiscreteSizeList)); - list->count = i; - list->list = (XpOidMediumDiscreteSize*) - XpOidCalloc(i, sizeof(XpOidMediumDiscreteSize)); - } - return list; -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumDiscreteSizeListDelete - * - * Description: - * - * - * - * Return value: - * - * - * - */ -static void -MediumDiscreteSizeListDelete(XpOidMediumDiscreteSizeList* list) -{ - if(list != (XpOidMediumDiscreteSizeList*)NULL) - { - XpOidFree((char*)list->list); - XpOidFree((char*)list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListNew - * - * Description: - * - * Only need the valid trays; validation requires bumping up against - * msss using TrayMediumListValidate; this needs valid trays - * because of unspecified trays ion msss, but - * TrayMediumListValidate will take care of invalid sizes... - * - * Return value: - * - * - * - */ -XpOidTrayMediumList* -XpOidTrayMediumListNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidMediumSS* msss) -{ - if(value_string == (const char*)NULL) - return (XpOidTrayMediumList*)NULL; - else - { - const char* ptr; - XpOidTrayMediumList* me; - me = TrayMediumListParse(value_string, valid_trays, &ptr, 0); - if((XpOidTrayMediumList*)NULL != me) - TrayMediumListValidate(me, msss); - return me; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListDelete - * - * Description: - * - * - * - * Return value: - * - * - * - */ -void -XpOidTrayMediumListDelete(XpOidTrayMediumList* list) -{ - if(list != (XpOidTrayMediumList*)NULL) - { - XpOidFree((char*)list->list); - XpOidFree((char*)list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: TrayMediumListParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * Return value: - * - * - * - */ -static XpOidTrayMediumList* -TrayMediumListParse(const char* value_string, - const XpOidList* valid_trays, - const char** ptr_return, int i) -{ - XpOidTrayMedium tm; - XpOidTrayMediumList* list; - /* - * check for the start of a new InputTrayMedium sequence - */ - if(ParseSeqStart(value_string, ptr_return)) - { - /* - * "input tray" - */ - tm.input_tray = XpOidParse(*ptr_return, ptr_return); - if((XpOidList*)NULL != valid_trays - && - !XpOidListHasOid(valid_trays, tm.input_tray) - ) - tm.input_tray = xpoid_none; - /* - * "medium" - */ - tm.medium = XpOidParse(*ptr_return, ptr_return); - /* - * parse out the InputTrayMedium sequence end character - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - { - ErrorF("%s\n", XPMSG_WARN_ITM); - return NULL; - } - /* - * recurse to parse the next InputTrayMedium sequence - */ - list = TrayMediumListParse(*ptr_return, valid_trays, ptr_return, i+1); - if(list != (XpOidTrayMediumList*)NULL) - { - /* - * copy the current InputTrayMedium into the list - */ - memmove((list->list)+i, &tm, sizeof(XpOidTrayMedium)); - } - } - else - { - /* - * InputTrayMedium sequence start not found - */ - if(**ptr_return == '\0') - { - /* - * end of the list - */ - list = (XpOidTrayMediumList*) - XpOidCalloc(1, sizeof(XpOidTrayMediumList)); - list->count = i; - list->list = (XpOidTrayMedium*) - XpOidCalloc(i, sizeof(XpOidTrayMedium)); - } - else - { - /* - * syntax error - */ - ErrorF("%s\n", XPMSG_WARN_ITM); - return NULL; - } - } - /* - * return - */ - return list; -} - -/* - * ------------------------------------------------------------------------ - * Name: TrayMediumListValidate - * - * Description: - * - * Validate the input-trays-medium list based on a passed - * medium-source-sizes-supported structure. The validated - * input-trays-medium list will have the same number of entries upon - * return from this function. Invalid entries are indicated by - * setting the tray specification to xpoid_none. - * - * Return value: - * - * None. - * - */ -static void -TrayMediumListValidate(XpOidTrayMediumList* me, - const XpOidMediumSS* msss) -{ - int i_mss, i_ds, i_itm; - XpOid current_tray, current_medium; - XpOidMediumDiscreteSizeList* unspecified_tray_ds; - XpOidMediumDiscreteSizeList* tray_ds; - - if(msss == (XpOidMediumSS*)NULL - || - me == (XpOidTrayMediumList*)NULL) - { - return; - } - /* - * loop through the input trays medium list - */ - for(i_itm = 0; i_itm < XpOidTrayMediumListCount(me); i_itm++) - { - current_tray = XpOidTrayMediumListTray(me, i_itm); - if(current_tray == xpoid_none) - continue; - current_medium = XpOidTrayMediumListMedium(me, i_itm); - if(current_medium == xpoid_none) - { - /* - * no medium; invalidate this entry - */ - me->list[i_itm].input_tray = xpoid_none; - continue; - } - /* - * loop through the MediumSourceSizes, looking for an appropriate - * discrete sizes spec for the current tray - */ - unspecified_tray_ds = (XpOidMediumDiscreteSizeList*)NULL; - tray_ds = (XpOidMediumDiscreteSizeList*)NULL; - for(i_mss = 0; - i_mss < msss->count && - tray_ds == (XpOidMediumDiscreteSizeList*)NULL; - i_mss++) - { - switch((msss->mss)[i_mss].mstag) - { - case XpOidMediumSS_DISCRETE: - if((msss->mss)[i_mss].input_tray == current_tray) - tray_ds = (msss->mss)[i_mss].ms.discrete; - else if((msss->mss)[i_mss].input_tray == xpoid_unspecified) - unspecified_tray_ds = (msss->mss)[i_mss].ms.discrete; - break; - - case XpOidMediumSS_CONTINUOUS: - /* - * unsupported - */ - break; - } - } - /* - * if the tray was not matched, use the unspecified tray size - * list - */ - if(tray_ds == (XpOidMediumDiscreteSizeList*)NULL) - { - if(unspecified_tray_ds == (XpOidMediumDiscreteSizeList*)NULL) - { - /* - * not even an unspecified tray, invalidate this - * input-trays-medium entry. - */ - me->list[i_itm].input_tray = xpoid_none; - continue; - } - else - tray_ds = unspecified_tray_ds; - } - /* - * loop through the discrete sizes list, looking for a size that - * matches the medium for the current input tray - */ - for(i_ds = 0; i_ds < tray_ds->count; i_ds++) - { - /* - * check to see if the current input tray's medium size - * matches the current discrete size - * - * Note: in the CDEnext SI, medium identifiers coincide with - * medium-size identifiers. If the DP-Medium object is - * ever implemented, this check would need to be - * changed so that the input tray's medium size is - * obtained from the indicated Medium object, and not - * inferred from the medium identifier itself. - */ - if((tray_ds->list)[i_ds].page_size == current_medium) - { - /* - * The current input tray's medium size matches the - * current discrete medium size. - */ - break; - } - } - if(i_ds == tray_ds->count) - { - /* - * The current input tray's medium size was not found in the - * discrete size list; mark the input tray medium entry - * invalid - */ - me->list[i_itm].input_tray = xpoid_none; - } - - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListString - * - * Description: - * - * Creates a string representation of an XpOidTrayMediumList structure. - * - * Return value: - * - * A newly allocated - * - */ -char* XpOidTrayMediumListString(const XpOidTrayMediumList* me) -{ - int i; - int length; - char* str; - char* ptr; - XpOid tray; - /* - * allocate enough memory for the string representation, - * including intervening delimiters and whitespace - */ - for(i = 0, length = 0; i < XpOidTrayMediumListCount(me); i++) - { - tray = XpOidTrayMediumListTray(me, i); - if(xpoid_none != tray) - { - length += XpOidStringLength(tray); - length += XpOidStringLength(XpOidTrayMediumListMedium(me, i)); - length += 4; - } - } - str = XpOidMalloc(length+1); - /* - * format the list - */ - for(i = 0, ptr = str; i < XpOidTrayMediumListCount(me); i++) - { - tray = XpOidTrayMediumListTray(me, i); - if(xpoid_none != tray) - { -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{%s %s} ", - XpOidString(tray), - XpOidString(XpOidTrayMediumListMedium(me, i))); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "{%s %s} ", - XpOidString(tray), - XpOidString(XpOidTrayMediumListMedium(me, i))); -#endif - } - } - /* - * chop trailing whitespace or terminate empty string - */ - str[length] = '\0'; - /* - * return - */ - return str; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListHasTray - * - * Description: - * - * Determines if 'tray' is found in 'list'. - * - * Return value: - * - * xTrue if the tray is found in the list. - * - * xFalse if the tray is not in the list, or if 'list' is NULL. - * - */ -BOOL -XpOidTrayMediumListHasTray(const XpOidTrayMediumList* list, XpOid tray) -{ - int i; - if(list != (XpOidTrayMediumList*)NULL && tray != xpoid_none) - for(i = 0; i < list->count; i++) - if(XpOidTrayMediumListTray(list, i) == tray) - return xTrue; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseArea - * - * Description: - * - * Skips leading whitespace and parses out and returns a XpOidArea. - * - * Return value: - * - * xTrue if the XpOidArea was successfully parsed. ptr_return is - * updated to point to location where the parsing ended. - * - * xFalse if a XpOidArea was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseArea(const char* value_string, - const char** ptr_return, - XpOidArea* area_return) -{ - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the area sequence start - */ - if(!ParseSeqStart(first_nonws_ptr, &ptr)) - goto ParseArea_error; - /* - * parse the minimum x value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->minimum_x : NULL)) - goto ParseArea_error; - /* - * parse the maximum x value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->maximum_x : NULL)) - goto ParseArea_error; - /* - * parse the minimum y value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->minimum_y : NULL)) - goto ParseArea_error; - /* - * parse the maximum y value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->maximum_y : NULL)) - goto ParseArea_error; - /* - * parse out the area sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - goto ParseArea_error; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return xTrue; - - - ParseArea_error: - /* - * syntax error - */ - if(ptr_return != (const char**)NULL) - *ptr_return = first_nonws_ptr; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseRealRange - * - * Description: - * - * Skips leading whitespace and parses out and returns a - * XpOidRealRange. - * - * Return value: - * - * xTrue if the XpOidRealRange was successfully - * parsed. ptr_return is updated to point to location where the - * parsing ended. - * - * xFalse if a XpOidRealRange was not found; ptr_return is - * updated to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseRealRange(const char* value_string, - const char** ptr_return, - XpOidRealRange* range_return) -{ - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the range sequence start - */ - if(!ParseSeqStart(first_nonws_ptr, &ptr)) - goto ParseRealRange_error; - /* - * parse the lower bound - */ - if(!ParseRealValue(ptr, &ptr, - range_return ? &range_return->lower_bound : NULL)) - goto ParseRealRange_error; - /* - * parse the upper bound - */ - if(!ParseRealValue(ptr, &ptr, - range_return ? &range_return->upper_bound : NULL)) - goto ParseRealRange_error; - /* - * parse out the range sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - goto ParseRealRange_error; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return xTrue; - - - ParseRealRange_error: - /* - * syntax error - */ - if(ptr_return != (const char**)NULL) - *ptr_return = first_nonws_ptr; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidNotifyParse - * - * Description: - * - * - * Return value: - * - * - */ -XpOidNotify XpOidNotifyParse(const char* value_string) -{ - const char* ptr = value_string; - - if(value_string == (const char*)NULL) - return XPOID_NOTIFY_NONE; - /* - * look for an event handling profile sequence start - */ - if(!ParseSeqStart(value_string, &ptr)) - { - if('\0' == *ptr) - /* - * empty value is valid - */ - return XPOID_NOTIFY_NONE; - else - return XPOID_NOTIFY_UNSUPPORTED; - } - /* - * look for an event set sequence start - */ - if(!ParseSeqStart(ptr, &ptr)) - { - /* - * check for an empty event handling profile - */ - if(ParseSeqEnd(ptr, &ptr)) - { - ptr += SpanWhitespace(ptr); - if(*ptr == '\0') - /* - * valid empty event handling profile sequence - */ - return XPOID_NOTIFY_NONE; - } - return XPOID_NOTIFY_UNSUPPORTED; - } - /* - * the only event in the set should be report job completed - */ - if(xpoid_val_event_report_job_completed != XpOidParse(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * event set sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * delivery method of electronic mail - */ - if(xpoid_val_delivery_method_electronic_mail != XpOidParse(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * event handling profile sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * end of value - */ - ptr += SpanWhitespace(ptr); - if('\0' == *ptr) - /* - * valid supported notification profile - */ - return XPOID_NOTIFY_EMAIL; - else - return XPOID_NOTIFY_UNSUPPORTED; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidNotifyString - * - * Description: - * - * - * Return value: - * - * - */ -const char* XpOidNotifyString(XpOidNotify notify) -{ - switch(notify) - { - case XPOID_NOTIFY_NONE: - return NOTIFY_NONE_STR; - case XPOID_NOTIFY_EMAIL: - return NOTIFY_EMAIL_STR; - case XPOID_NOTIFY_UNSUPPORTED: - return (const char *)NULL; - } - - ErrorF("XpOidNotifyString: Unsupported notify=%ld\n", (long)notify); - return (const char *)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtNew - * - * Description: - * - * - * Return value: - * - * - */ -XpOidDocFmt* -XpOidDocFmtNew(const char* value_string) -{ - XpOidDocFmt* doc_fmt; - const char* ptr; - - if((const char*)NULL == value_string) - return (XpOidDocFmt*)NULL; - ptr = value_string + SpanWhitespace(value_string); - if('\0' == *ptr) - return (XpOidDocFmt*)NULL; - /* - * get the document format from the value string - */ - doc_fmt = (XpOidDocFmt*)XpOidCalloc(1, sizeof(XpOidDocFmt)); - if(xTrue == XpOidDocFmtNext(doc_fmt, ptr, &ptr)) - { - /* - * verify that the document format is the only value specified - */ - ptr += SpanWhitespace(ptr); - if('\0' == *ptr) - /* - * valid document-format value - */ - return doc_fmt; - } - /* - * invalid - */ - XpOidDocFmtDelete(doc_fmt); - ErrorF("%s\n", XPMSG_WARN_DOC_FMT); - return (XpOidDocFmt*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtDelete - * - * Description: - * - * - * Return value: - * - * - */ -void -XpOidDocFmtDelete(XpOidDocFmt* doc_fmt) -{ - if((XpOidDocFmt*)NULL != doc_fmt) - { - XpOidFree(doc_fmt->format); - XpOidFree(doc_fmt->variant); - XpOidFree(doc_fmt->version); - XpOidFree(doc_fmt); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtString - * - * Description: - * - * - * Return value: - * - * - */ -char* -XpOidDocFmtString(XpOidDocFmt* doc_fmt) -{ - if((XpOidDocFmt*)NULL != doc_fmt) - { - if((char*)NULL != doc_fmt->format) - { - char* str = XpOidMalloc(1+SafeStrLen(doc_fmt->format)+ - 1+SafeStrLen(doc_fmt->variant)+ - 1+SafeStrLen(doc_fmt->version)+ - 1+1); - sprintf(str, "{%s %s %s}", doc_fmt->format, - (char*)NULL != doc_fmt->variant ? doc_fmt->variant : "", - (char*)NULL != doc_fmt->version ? doc_fmt->version : ""); - return str; - } - } - return (char*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtNext - * - * Description: - * - * Assumes non-NULL value string. - * - * Return value: - * - * - */ -static BOOL -XpOidDocFmtNext(XpOidDocFmt* doc_fmt, - const char* value_string, - const char** ptr_return) -{ - const char* ptr; - const char* first_nonws_ptr; - const char* format; - const char* variant; - const char* version; - int format_len; - int variant_len; - int version_len; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - first_nonws_ptr = ptr; - /* - * sequence start - */ - if(!ParseSeqStart(ptr, &ptr)) - goto XpOidDocFmtNext_error; - /* - * skip whitepace to the start of the document format, and save the - * location - */ - ptr += SpanWhitespace(ptr); - format = ptr; - /* - * document format - */ - if(0 == (format_len = SpanToken(ptr))) - goto XpOidDocFmtNext_error; - ptr += format_len; - /* - * optional variant - */ - ptr += SpanWhitespace(ptr); - variant = ptr; - if(0 != (variant_len = SpanToken(ptr))) - { - ptr += variant_len; - /* - * optional version - */ - ptr += SpanWhitespace(ptr); - version = ptr; - version_len = SpanToken(ptr); - ptr += version_len; - } - else - version_len = 0; - /* - * sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - goto XpOidDocFmtNext_error; - /* - * update return pointer - */ - if((const char**)NULL != ptr_return) - *ptr_return = ptr; - /* - * update the passed document format struct - */ - memset(doc_fmt, 0, sizeof(XpOidDocFmt)); - doc_fmt->format = XpOidMalloc(format_len+1); - strncpy(doc_fmt->format, format, format_len); - doc_fmt->format[format_len] = '\0'; - if(0 < variant_len) - { - doc_fmt->variant = XpOidMalloc(variant_len+1); - strncpy(doc_fmt->variant, variant, variant_len); - doc_fmt->variant[variant_len] = '\0'; - if(0 < version_len) - { - doc_fmt->version = XpOidMalloc(version_len+1); - strncpy(doc_fmt->version, version, version_len); - doc_fmt->version[version_len] = '\0'; - } - } - return xTrue; - - XpOidDocFmtNext_error: - if((const char**)NULL != ptr_return) - *ptr_return = first_nonws_ptr; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListNew - * - * Description: - * - * - * Return value: - * - * - */ -XpOidDocFmtList* -XpOidDocFmtListNew(const char* value_string, - const XpOidDocFmtList* valid_fmts) -{ - if((char*)NULL != value_string) - { - const char* ptr; - return XpOidDocFmtListParse(value_string, valid_fmts, &ptr, 0); - } - return (XpOidDocFmtList*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListDelete - * - * Description: - * - * - * Return value: - * - * - */ -void -XpOidDocFmtListDelete(XpOidDocFmtList* list) -{ - if((XpOidDocFmtList*)NULL != list) - { - int i; - for(i = 0; i < list->count; i++) - { - XpOidFree(list->list[i].format); - XpOidFree(list->list[i].variant); - XpOidFree(list->list[i].version); - } - XpOidFree(list->list); - XpOidFree(list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListString - * - * Description: - * - * Assumes the passed structure is valid. - * - * Return value: - * - * - */ -char* -XpOidDocFmtListString(const XpOidDocFmtList* list) -{ - if((XpOidDocFmtList*)NULL != list) - { - if(0 < list->count) - { - int i; - int str_len; - char* str; - char* ptr; - /* - * allocate the return string - */ - for(i = 0, str_len = 0; i < list->count; i++) - { - str_len += - 1 + SafeStrLen(list->list[i].format) + - 1 + SafeStrLen(list->list[i].variant) + - 1 + SafeStrLen(list->list[i].version) + 2; - } - str = XpOidMalloc(str_len+1); - /* - * print the list into the string and return it - */ - ptr = str; - for(i = 0; i < list->count; i++) - { - XpOidDocFmt* df = &list->list[i]; - -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{%s %s %s} ", - df->format, - (char*)NULL != df->variant ? df->variant : "", - (char*)NULL != df->version ? df->version : ""); - ptr += strlen(ptr); -#else - ptr += - sprintf(ptr, "{%s %s %s} ", - df->format, - (char*)NULL != df->variant ? df->variant : "", - (char*)NULL != df->version ? df->version : ""); -#endif - } - return str; - } - } - return (char*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListParse - * - * Description: - * - * Assumes the passed value_string and ptr_return are non-NULL. - * - * Return value: - * - * - */ -static XpOidDocFmtList* -XpOidDocFmtListParse(const char* value_string, - const XpOidDocFmtList* valid_fmts, - const char** ptr_return, - int i) -{ - XpOidDocFmt doc_fmt; - XpOidDocFmtList* list; - BOOL status; - /* - * get the next document-format from the value string, skipping - * values not found in the passed list of valid formats - */ - *ptr_return = value_string; - while((status = XpOidDocFmtNext(&doc_fmt, *ptr_return, ptr_return)) - && - (const XpOidDocFmtList*)NULL != valid_fmts - && - !XpOidDocFmtListHasFmt(valid_fmts, &doc_fmt) - ); - - if(xFalse == status) - { - if('\0' == **ptr_return) - { - if(0 == i) - { - /* - * empty value string - */ - return (XpOidDocFmtList*)NULL; - } - else - { - /* - * done parsing; allocate the list and return - */ - list = - (XpOidDocFmtList*)XpOidCalloc(1, sizeof(XpOidDocFmtList)); - list->count = i; - list->list = (XpOidDocFmt*)XpOidCalloc(i, sizeof(XpOidDocFmt)); - return list; - } - } - else - { - /* - * invalid document format - */ - ErrorF("%s\n", XPMSG_WARN_DOCFMT_LIST); - return (XpOidDocFmtList*)NULL; - } - } - else - { - /* - * recurse to parse remaining document formats - */ - list = XpOidDocFmtListParse(*ptr_return, valid_fmts, ptr_return, i+1); - if((XpOidDocFmtList*)NULL != list) - { - /* - * add this doc fmt to the list - */ - list->list[i].format = doc_fmt.format; - list->list[i].variant = doc_fmt.variant; - list->list[i].version = doc_fmt.version; - } - return list; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListHasFmt - * - * Description: - * - * Assumes the passed structure is valid. - * - * Return value: - * - * - */ -BOOL -XpOidDocFmtListHasFmt(const XpOidDocFmtList* list, - const XpOidDocFmt* fmt) -{ - int i; - if(list != (XpOidDocFmtList*)NULL - && - fmt != (XpOidDocFmt*)NULL - && - fmt->format != (char*)NULL - ) - { - for(i = 0; i < list->count; i++) - { - /* - * formats must match - */ - if(strcmp(fmt->format, list->list[i].format) != 0) - continue; - /* - * variants must both be NULL or match - */ - if(fmt->variant == (char*)NULL) - { - if(list->list[i].variant == (char*)NULL) - return xTrue; - else - continue; - } - if(list->list[i].variant == (char*)NULL) - continue; - if(strcmp(fmt->variant, list->list[i].variant) != 0) - continue; - /* - * versions must both be NULL or match - */ - if(fmt->version == (char*)NULL) - { - if(list->list[i].version == (char*)NULL) - return xTrue; - else - continue; - } - if(list->list[i].version == (char*)NULL) - continue; - if(strcmp(fmt->version, list->list[i].version) == 0) - return xTrue; - } - } - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListNew - * - * Description: - * - * - * Return value: - * - * - */ -XpOidCardList* -XpOidCardListNew(const char* value_string, const XpOidCardList* valid_cards) -{ - if((const char*)NULL != value_string) - { - const char* ptr; - - return XpOidCardListParse(value_string, valid_cards, &ptr, 0); - } - else - return (XpOidCardList*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListDelete - * - * Description: - * - * - * Return value: - * - * - */ -void -XpOidCardListDelete(XpOidCardList* list) -{ - if((XpOidCardList*)NULL != list) - { - XpOidFree(list->list); - XpOidFree(list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListString - * - * Description: - * - * - * Return value: - * - * - */ -char* -XpOidCardListString(const XpOidCardList* list) -{ - if((XpOidCardList*)NULL != list) - { - char buf[48]; - int str_len; - char* str; - int i; - char* ptr; - /* - * allocate the output string - */ - for(i = 0, str_len = 0; i < list->count; i++) -#if defined(sun) && !defined(SVR4) - { - sprintf(buf, "%lu", list->list[i]) + 1; - str_len += strlen(buf); - } -#else - str_len += sprintf(buf, "%lu", list->list[i]) + 1; -#endif - str = XpOidMalloc(str_len+1); - /* - * write the list to the string - */ - for(i = 0, ptr = str; i < list->count; i++) -#if defined(sun) && !defined(SVR4) - { - sprintf(ptr, "%lu ", list->list[i]); - ptr += strlen(ptr); - } -#else - ptr += sprintf(ptr, "%lu ", list->list[i]); -#endif - return str; - } - else - return (char*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListHasCard - * - * Description: - * - * Determines if 'card' is an element of 'list'. - * - * Return value: - * - * xTrue if the card is found in the list. - * - * xFalse if the card is not in the list, or if 'list' is NULL. - * - */ -BOOL -XpOidCardListHasCard(const XpOidCardList* list, unsigned long card) -{ - int i; - if(list != (XpOidCardList*)NULL) - for(i = 0; i < list->count; i++) - if(list->list[i] == card) - return xTrue; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListParse - * - * Description: - * - * Assumes the passed value_string and ptr_return are non-NULL. - * - * Return value: - * - * - */ -static XpOidCardList* -XpOidCardListParse(const char* value_string, - const XpOidCardList* valid_cards, - const char** ptr_return, - int i) -{ - unsigned long card; - XpOidCardList* list; - BOOL status; - - /* - * get the next card from the value string, skipping values not - * found in the passed list of valid cards - */ - *ptr_return = value_string; - while((status = XpOidParseUnsignedValue(*ptr_return, ptr_return, &card)) - && - (const XpOidCardList*)NULL != valid_cards - && - !XpOidCardListHasCard(valid_cards, card) - ); - - if(xFalse == status) - { - if('\0' == **ptr_return) - { - if(0 == i) - { - /* - * empty value string - */ - return (XpOidCardList*)NULL; - } - else - { - /* - * done parsing; allocate the list and return - */ - list = (XpOidCardList*)XpOidCalloc(1, sizeof(XpOidCardList)); - list->count = i; - list->list = - (unsigned long*)XpOidCalloc(i, sizeof(unsigned long)); - return list; - } - } - else - { - /* - * parsing error - */ - ErrorF("%s\n", XPMSG_WARN_CARD_LIST); - return (XpOidCardList*)NULL; - } - } - else - { - /* - * recurse to parse remaining cardinal values - */ - list = XpOidCardListParse(*ptr_return, valid_cards, ptr_return, i+1); - if((XpOidCardList*)NULL != list) - { - /* - * add this value to the list - */ - list->list[i] = card; - } - return list; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseBoolValue - * - * Description: - * - * - * Return value: - * - * - */ -static BOOL -ParseBoolValue(const char* value_string, - const char** ptr_return, - BOOL* bool_return) -{ - const char* ptr; - int length; - BOOL status; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * get the whitespace-delimited token length - */ - length = SpanToken(ptr); - /* - * determine if true or false or bad - */ - if(StrnCaseCmp(ptr, "TRUE", length) == 0) - { - if(bool_return != (BOOL*)NULL) - *bool_return = xTrue; - status = xTrue; - } - else if(StrnCaseCmp(ptr, "FALSE", length) == 0) - { - if(bool_return != (BOOL*)NULL) - *bool_return = xFalse; - status = xTrue; - } - else - { - /* - * syntax error - */ - status = xFalse; - } - /* - * update the return pointer and return - */ - if(ptr_return != (const char**)NULL) - *ptr_return = status ? ptr+length : ptr; - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidParseUnsignedValue - * - * Description: - * - * Skips leading whitespace and parses out and returns a unsigned number. - * - * Return value: - * - * xTrue if a unsigned number was successfully parsed. ptr_return is - * updated to point to location where the unsigned number parsing - * ended. - * - * xFalse if a unsigned number was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -BOOL -XpOidParseUnsignedValue(const char* value_string, - const char** ptr_return, - unsigned long* unsigned_return) -{ - long value; - BOOL status; - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - value = strtol(first_nonws_ptr, (char**)(&ptr), 0); - if(ptr == first_nonws_ptr || value < 0) - status = xFalse; - else - status = xTrue; - /* - * update return parms - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - if(unsigned_return != (unsigned long*)NULL) - *unsigned_return = (unsigned long)value; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseRealValue - * - * Description: - * - * Skips leading whitespace and parses out and returns a real number. - * - * Return value: - * - * xTrue if a real number was successfully parsed. ptr_return is - * updated to point to location where the real number parsing - * ended. - * - * xFalse if a real number was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseRealValue(const char* value_string, - const char** ptr_return, - float* real_return) -{ - float real_value; - BOOL status; - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - real_value = (float)strtod(first_nonws_ptr, (char**)(&ptr)); - if(ptr == first_nonws_ptr) - status = xFalse; - else - status = xTrue; - /* - * update return parms - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - if(real_return != (float*)NULL) - *real_return = real_value; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseSeqEnd - * - * Description: - * - * Description: - * - * Skips leading whitespace and parses out the sequence end - * character '}'. - * - * Return value: - * - * xTrue if the sequence end character was parsed; ptr_return is - * updated to point to the first char following the sequence end - * character. - * - * xFalse if the sequence end character was not found; ptr_return is - * updated to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseSeqEnd(const char* value_string, - const char** ptr_return) -{ - const char* ptr; - BOOL status; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the sequence end character - */ - if(*ptr == '}') - { - status = xTrue; - ++ptr; - } - else - status = xFalse; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseSeqStart - * - * Description: - * - * Skips leading whitespace and parses out the sequence start - * character '{'. - * - * Return value: - * - * xTrue if the sequence start character was parsed; ptr_return is - * updated to point to the first char following the sequence start - * character. - * - * xFalse if the sequence start character was not found; ptr_return is - * updated to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseSeqStart(const char* value_string, - const char** ptr_return) -{ - const char* ptr; - BOOL status; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the sequence start character - */ - if(*ptr == '{') - { - status = xTrue; - ++ptr; - } - else - status = xFalse; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseUnspecifiedValue - * - * Description: - * - * Skips leading whitespace and parses out an unspecified optional - * value (i.e. matching '' or "" - skips all data between the set of - * quotes). - * - * Return value: - * - * xTrue if an unspecified value was parsed; ptr_return is updated to - * point to the first char following the trailing quote. - * - * xFalse if an unspecified value was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseUnspecifiedValue(const char* value_string, - const char** ptr_return) -{ - BOOL status; - const char* ptr; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * parse out an unspecified optional value ('' or "") - */ - if(*ptr == '\'' || *ptr == '"') - { - char delim[2]; - - if(ptr_return != (const char**)NULL) - { - delim[0] = *ptr; - delim[1] = '\0'; - /* - * skip over the matching delimiter - */ - ++ptr; - ptr += strcspn(ptr, delim); - if(*ptr != '\0') - ++ptr; - } - status = xTrue; - } - else - status = xFalse; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: SpanToken - * - * Description: - * - * Returns the length of the initial segment of the passed string - * that consists entirely of non-whitespace and non-sequence - * delimiter characters. - * - * - */ -static int -SpanToken(const char* string) -{ - const char* ptr; - for(ptr = string; - *ptr != '\0' && !isspace(*ptr) && *ptr != '{' && *ptr != '}'; - ++ptr); - return ptr - string; -} - -/* - * ------------------------------------------------------------------------ - * Name: SpanWhitespace - * - * Description: - * - * Returns the length of the initial segment of the passed string - * that consists entirely of whitespace characters. - * - * - */ -static int -SpanWhitespace(const char* string) -{ - const char* ptr; - for(ptr = string; *ptr != '\0' && isspace(*ptr); ++ptr); - return ptr - string; -} - -#ifndef HAVE_STRCASECMP -/* - * ------------------------------------------------------------------------ - * Name: StrnCaseCmp - * - * Description: - * - * Implements strncasecmp() for those platforms that need it. - * - * - */ -static int -StrnCaseCmp(const char *s1, const char *s2, size_t len) -{ - char c1, c2; - int result; - - while (len--) - { - c1 = *s1++; - c2 = *s2++; - result = tolower(c1) - tolower(c2); - - if (result != 0) - return result; - } - - return 0; -} -#endif diff --git a/hw/xprint/Oid.h b/hw/xprint/Oid.h deleted file mode 100644 index 79e85ec64..000000000 --- a/hw/xprint/Oid.h +++ /dev/null @@ -1,293 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _Xp_Oid_h -#define _Xp_Oid_h - -#include - -/* - * include the auto-generated XpOid enum definition - */ -#include "OidDefs.h" - -/* - * messages - */ -#define XPMSG_WARN_MSS "Syntax error parsing medium-source-sizes" -#define XPMSG_WARN_ITM "Syntax error parsing input-trays-medium" -#define XPMSG_WARN_DOC_FMT "Syntax error parsing document format" -#define XPMSG_WARN_DOCFMT_LIST "Syntax error parsing document format list" -#define XPMSG_WARN_CARD_LIST "Syntax error parsing cardinal list" - -/* - * macros for memory allocation - */ -#define XpOidMalloc(size) ((char*)Xalloc((unsigned long)(size))) -#define XpOidCalloc(count, size) \ - ((char*)Xcalloc((unsigned long)((count)*(size)))) -#define XpOidFree(mem) (Xfree((unsigned long*)(mem))) - -/* - * list of object identifiers - */ -typedef struct _XpOidList -{ - XpOid* list; - int count; -} XpOidList; - -/* - * linked list of object identifiers - */ -typedef struct XpOidNodeStruct -{ - XpOid oid; - struct XpOidNodeStruct* next; -} *XpOidNode; - -typedef struct _XpOidLinkedList -{ - XpOidNode head; - XpOidNode tail; - XpOidNode current; - int count; -} XpOidLinkedList; - -/* - * XpOidMediumSourceSize and related definitions - */ -typedef struct -{ - float minimum_x; - float maximum_x; - float minimum_y; - float maximum_y; -} XpOidArea; - -typedef struct -{ - float lower_bound; - float upper_bound; -} XpOidRealRange; - -typedef struct -{ - XpOidRealRange range_across_feed; - float increment_across_feed; - XpOidRealRange range_in_feed; - float increment_in_feed; - BOOL long_edge_feeds; - XpOidArea assured_reproduction_area; -} XpOidMediumContinuousSize; - -typedef struct -{ - XpOid page_size; - BOOL long_edge_feeds; - XpOidArea assured_reproduction_area; -} XpOidMediumDiscreteSize; - -typedef struct -{ - XpOidMediumDiscreteSize* list; - int count; -} XpOidMediumDiscreteSizeList; - -typedef struct -{ - XpOid input_tray; /* may be set to xpoid_none or xpoid_unspecified */ - enum { XpOidMediumSS_DISCRETE, XpOidMediumSS_CONTINUOUS } mstag; - union - { - XpOidMediumDiscreteSizeList* discrete; - XpOidMediumContinuousSize* continuous_size; - } ms; /* "ms" is short for medium-size */ - -} XpOidMediumSourceSize; - -typedef struct -{ - XpOidMediumSourceSize* mss; - int count; -} XpOidMediumSS; - - -typedef struct -{ - XpOid input_tray; /* may be set to xpoid_none */ - XpOid medium; -} XpOidTrayMedium; - -typedef struct -{ - XpOidTrayMedium* list; - int count; -} XpOidTrayMediumList; - -typedef enum { - XPOID_NOTIFY_UNSUPPORTED, - XPOID_NOTIFY_NONE, - XPOID_NOTIFY_EMAIL -} XpOidNotify; - -typedef struct -{ - unsigned long *list; - int count; -} XpOidCardList; - -typedef struct -{ - char* format; - char* variant; - char* version; -} XpOidDocFmt; - -typedef struct -{ - XpOidDocFmt* list; - int count; -} XpOidDocFmtList; - - -/* - * XpOid public methods - */ -const char* XpOidString(XpOid); -int XpOidStringLength(XpOid); -XpOid XpOidFromString(const char* value); -BOOL XpOidTrayMediumListHasTray(const XpOidTrayMediumList* list, XpOid tray); - -/* - * XpOidList public methods - */ -XpOidList* XpOidListNew(const char* value_string, - const XpOidList* valid_oids); -#define XpOidListInit(l, a, c) { (l)->list = (a); (l)->count = (c); } -void XpOidListDelete(XpOidList*); -#define XpOidListCount(l) ((l) ? (l)->count : 0) -#define XpOidListGetOid(l, i) ((l) ? (l)->list[(i)] : xpoid_none) -int XpOidListGetIndex(const XpOidList* list, XpOid oid); -BOOL XpOidListHasOid(const XpOidList* list, XpOid oid); -char* XpOidListString(const XpOidList*); - - -/* - * XpOidLinkedList public methods - */ -XpOidLinkedList* XpOidLinkedListNew(void); -void XpOidLinkedListDelete(XpOidLinkedList*); -#define XpOidLinkedListCount(l) ((l) ? (l)->count : 0) -XpOid XpOidLinkedListGetOid(XpOidLinkedList* list, int i); -void XpOidLinkedListAddOid(XpOidLinkedList* list, XpOid oid); -int XpOidLinkedListGetIndex(XpOidLinkedList* list, XpOid oid); -BOOL XpOidLinkedListHasOid(XpOidLinkedList* list, - XpOid oid); -XpOid XpOidLinkedListFirstOid(XpOidLinkedList* list); -XpOid XpOidLinkedListNextOid(XpOidLinkedList* list); - -/* - * XpOidMediumSourceSize public methods - */ -XpOidMediumSS* XpOidMediumSSNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes); -void XpOidMediumSSDelete(XpOidMediumSS*); -#define XpOidMediumSSCount(me) ((me) ? (me)->count : 0) -BOOL XpOidMediumSSHasSize(XpOidMediumSS*, XpOid medium_size); -char* XpOidMediumSSString(const XpOidMediumSS*); - -/* - * XpOidTrayMediumList public methods - */ -XpOidTrayMediumList* XpOidTrayMediumListNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidMediumSS* msss); -void XpOidTrayMediumListDelete(XpOidTrayMediumList* me); -#define XpOidTrayMediumListCount(me) ((me) ? (me)->count : 0) -#define XpOidTrayMediumListTray(me, i) \ - ((me) ? (me)->list[(i)].input_tray : xpoid_none) -#define XpOidTrayMediumListMedium(me, i) \ - ((me) ? (me)->list[(i)].medium : xpoid_none) -char* XpOidTrayMediumListString(const XpOidTrayMediumList*); - -/* - * XpOidNotify public methods - */ -XpOidNotify XpOidNotifyParse(const char* value_string); -const char* XpOidNotifyString(XpOidNotify notify); - -/* - * XpOidDocFmt public methods - */ -XpOidDocFmt* XpOidDocFmtNew(const char* value_string); -void XpOidDocFmtDelete(XpOidDocFmt*); -char* XpOidDocFmtString(XpOidDocFmt*); - -/* - * XpOidDocFmtList public methods - */ -XpOidDocFmtList* XpOidDocFmtListNew(const char* value_string, - const XpOidDocFmtList* valid_fmts); -void XpOidDocFmtListDelete(XpOidDocFmtList*); -char* XpOidDocFmtListString(const XpOidDocFmtList*); -#define XpOidDocFmtListCount(me) ((me) ? (me)->count : 0) -#define XpOidDocFmtListGetDocFmt(me, i) \ - ((me) ? &(me)->list[(i)] : (XpDocFmt*)NULL) -BOOL XpOidDocFmtListHasFmt(const XpOidDocFmtList* list, - const XpOidDocFmt* fmt); -/* - * XpOidCardList public methods - */ -XpOidCardList* XpOidCardListNew(const char* value_string, - const XpOidCardList* valid_cards); -#define XpOidCardListInit(l, a, c) { (l)->list = (a); (l)->count = (c); } -void XpOidCardListDelete(XpOidCardList*); -char* XpOidCardListString(const XpOidCardList*); -#define XpOidCardListCount(me) ((me) ? (me)->count : 0) -#define XpOidCardListGetCard(me, i) ((me) ? (me)->list[(i)] : 0) -BOOL XpOidCardListHasCard(const XpOidCardList*, unsigned long); - -/* - * misc parsing functions - */ -BOOL XpOidParseUnsignedValue(const char* value_string, - const char** ptr_return, - unsigned long* unsigned_return); - - -#endif /* _Xp_Oid_h - don't add anything after this line */ diff --git a/hw/xprint/OidDefs.h b/hw/xprint/OidDefs.h deleted file mode 100644 index a3b37eaaf..000000000 --- a/hw/xprint/OidDefs.h +++ /dev/null @@ -1,170 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/* This is an automatically-generated file. Do not edit. */ - -typedef enum { - xpoid_none, - xpoid_unspecified, - xpoid_att_descriptor, - xpoid_att_content_orientation, - xpoid_att_copy_count, - xpoid_att_default_printer_resolution, - xpoid_att_default_input_tray, - xpoid_att_default_medium, - xpoid_att_document_format, - xpoid_att_plex, - xpoid_att_xp_listfonts_modes, - xpoid_att_job_name, - xpoid_att_job_owner, - xpoid_att_notification_profile, - xpoid_att_xp_setup_state, - xpoid_att_xp_spooler_command_options, - xpoid_att_content_orientations_supported, - xpoid_att_document_formats_supported, - xpoid_att_dt_pdm_command, - xpoid_att_input_trays_medium, - xpoid_att_medium_source_sizes_supported, - xpoid_att_plexes_supported, - xpoid_att_printer_model, - xpoid_att_printer_name, - xpoid_att_printer_resolutions_supported, - xpoid_att_xp_embedded_formats_supported, - xpoid_att_xp_listfonts_modes_supported, - xpoid_att_xp_page_attributes_supported, - xpoid_att_xp_raw_formats_supported, - xpoid_att_xp_setup_proviso, - xpoid_att_document_attributes_supported, - xpoid_att_job_attributes_supported, - xpoid_att_locale, - xpoid_att_multiple_documents_supported, - xpoid_att_available_compression, - xpoid_att_available_compressions_supported, - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape, - xpoid_val_content_orientation_reverse_portrait, - xpoid_val_content_orientation_reverse_landscape, - xpoid_val_medium_size_iso_a0, - xpoid_val_medium_size_iso_a1, - xpoid_val_medium_size_iso_a2, - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_iso_a5, - xpoid_val_medium_size_iso_a6, - xpoid_val_medium_size_iso_a7, - xpoid_val_medium_size_iso_a8, - xpoid_val_medium_size_iso_a9, - xpoid_val_medium_size_iso_a10, - xpoid_val_medium_size_iso_b0, - xpoid_val_medium_size_iso_b1, - xpoid_val_medium_size_iso_b2, - xpoid_val_medium_size_iso_b3, - xpoid_val_medium_size_iso_b4, - xpoid_val_medium_size_iso_b5, - xpoid_val_medium_size_iso_b6, - xpoid_val_medium_size_iso_b7, - xpoid_val_medium_size_iso_b8, - xpoid_val_medium_size_iso_b9, - xpoid_val_medium_size_iso_b10, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_folio, - xpoid_val_medium_size_invoice, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_quarto, - xpoid_val_medium_size_iso_c3, - xpoid_val_medium_size_iso_c4, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_c6, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_10x13_envelope, - xpoid_val_medium_size_na_9x12_envelope, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_na_7x9_envelope, - xpoid_val_medium_size_na_9x11_envelope, - xpoid_val_medium_size_na_10x14_envelope, - xpoid_val_medium_size_na_number_9_envelope, - xpoid_val_medium_size_na_6x9_envelope, - xpoid_val_medium_size_na_10x15_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_a, - xpoid_val_medium_size_b, - xpoid_val_medium_size_c, - xpoid_val_medium_size_d, - xpoid_val_medium_size_e, - xpoid_val_medium_size_jis_b0, - xpoid_val_medium_size_jis_b1, - xpoid_val_medium_size_jis_b2, - xpoid_val_medium_size_jis_b3, - xpoid_val_medium_size_jis_b4, - xpoid_val_medium_size_jis_b5, - xpoid_val_medium_size_jis_b6, - xpoid_val_medium_size_jis_b7, - xpoid_val_medium_size_jis_b8, - xpoid_val_medium_size_jis_b9, - xpoid_val_medium_size_jis_b10, - xpoid_val_medium_size_hp_2x_postcard, - xpoid_val_medium_size_hp_european_edp, - xpoid_val_medium_size_hp_mini, - xpoid_val_medium_size_hp_postcard, - xpoid_val_medium_size_hp_tabloid, - xpoid_val_medium_size_hp_us_edp, - xpoid_val_medium_size_hp_us_government_legal, - xpoid_val_medium_size_hp_us_government_letter, - xpoid_val_plex_simplex, - xpoid_val_plex_duplex, - xpoid_val_plex_tumble, - xpoid_val_input_tray_top, - xpoid_val_input_tray_middle, - xpoid_val_input_tray_bottom, - xpoid_val_input_tray_envelope, - xpoid_val_input_tray_manual, - xpoid_val_input_tray_large_capacity, - xpoid_val_input_tray_main, - xpoid_val_input_tray_side, - xpoid_val_event_report_job_completed, - xpoid_val_delivery_method_electronic_mail, - xpoid_val_xp_setup_mandatory, - xpoid_val_xp_setup_optional, - xpoid_val_xp_setup_ok, - xpoid_val_xp_setup_incomplete, - xpoid_val_xp_list_glyph_fonts, - xpoid_val_xp_list_internal_printer_fonts, - xpoid_val_available_compressions_0, - xpoid_val_available_compressions_01, - xpoid_val_available_compressions_02, - xpoid_val_available_compressions_03, - xpoid_val_available_compressions_012, - xpoid_val_available_compressions_013, - xpoid_val_available_compressions_023, - xpoid_val_available_compressions_0123 -} XpOid; diff --git a/hw/xprint/OidStrs.h b/hw/xprint/OidStrs.h deleted file mode 100644 index 5ed2089e0..000000000 --- a/hw/xprint/OidStrs.h +++ /dev/null @@ -1,172 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/* This is an automatically-generated file. Do not edit. */ - -static int XpOidStringMapCount = 127; - -static const XpOidStringMapEntry XpOidStringMap[] = { - { "", 0 }, - { "", 0 }, - { "descriptor", 10 }, - { "content-orientation", 19 }, - { "copy-count", 10 }, - { "default-printer-resolution", 26 }, - { "default-input-tray", 18 }, - { "default-medium", 14 }, - { "document-format", 15 }, - { "plex", 4 }, - { "xp-listfonts-modes", 18 }, - { "job-name", 8 }, - { "job-owner", 9 }, - { "notification-profile", 20 }, - { "xp-setup-state", 14 }, - { "xp-spooler-command-options", 26 }, - { "content-orientations-supported", 30 }, - { "document-formats-supported", 26 }, - { "dt-pdm-command", 14 }, - { "input-trays-medium", 18 }, - { "medium-source-sizes-supported", 29 }, - { "plexes-supported", 16 }, - { "printer-model", 13 }, - { "printer-name", 12 }, - { "printer-resolutions-supported", 29 }, - { "xp-embedded-formats-supported", 29 }, - { "xp-listfonts-modes-supported", 28 }, - { "xp-page-attributes-supported", 28 }, - { "xp-raw-formats-supported", 24 }, - { "xp-setup-proviso", 16 }, - { "document-attributes-supported", 29 }, - { "job-attributes-supported", 24 }, - { "locale", 6 }, - { "multiple-documents-supported", 28 }, - { "available-compression", 21 }, - { "available-compressions-supported", 32 }, - { "portrait", 8 }, - { "landscape", 9 }, - { "reverse-portrait", 16 }, - { "reverse-landscape", 17 }, - { "iso-a0", 6 }, - { "iso-a1", 6 }, - { "iso-a2", 6 }, - { "iso-a3", 6 }, - { "iso-a4", 6 }, - { "iso-a5", 6 }, - { "iso-a6", 6 }, - { "iso-a7", 6 }, - { "iso-a8", 6 }, - { "iso-a9", 6 }, - { "iso-a10", 7 }, - { "iso-b0", 6 }, - { "iso-b1", 6 }, - { "iso-b2", 6 }, - { "iso-b3", 6 }, - { "iso-b4", 6 }, - { "iso-b5", 6 }, - { "iso-b6", 6 }, - { "iso-b7", 6 }, - { "iso-b8", 6 }, - { "iso-b9", 6 }, - { "iso-b10", 7 }, - { "na-letter", 9 }, - { "na-legal", 8 }, - { "executive", 9 }, - { "folio", 5 }, - { "invoice", 7 }, - { "ledger", 6 }, - { "quarto", 6 }, - { "iso-c3", 6 }, - { "iso-c4", 6 }, - { "iso-c5", 6 }, - { "iso-c6", 6 }, - { "iso-designated-long", 19 }, - { "na-10x13-envelope", 17 }, - { "na-9x12-envelope", 16 }, - { "na-number-10-envelope", 21 }, - { "na-7x9-envelope", 15 }, - { "na-9x11-envelope", 16 }, - { "na-10x14-envelope", 17 }, - { "na-number-9-envelope", 20 }, - { "na-6x9-envelope", 15 }, - { "na-10x15-envelope", 17 }, - { "monarch-envelope", 16 }, - { "a", 1 }, - { "b", 1 }, - { "c", 1 }, - { "d", 1 }, - { "e", 1 }, - { "jis-b0", 6 }, - { "jis-b1", 6 }, - { "jis-b2", 6 }, - { "jis-b3", 6 }, - { "jis-b4", 6 }, - { "jis-b5", 6 }, - { "jis-b6", 6 }, - { "jis-b7", 6 }, - { "jis-b8", 6 }, - { "jis-b9", 6 }, - { "jis-b10", 7 }, - { "hp-2x-postcard", 14 }, - { "hp-european-edp", 15 }, - { "hp-mini", 7 }, - { "hp-postcard", 11 }, - { "hp-tabloid", 10 }, - { "hp-us-edp", 9 }, - { "hp-us-government-legal", 22 }, - { "hp-us-government-letter", 23 }, - { "simplex", 7 }, - { "duplex", 6 }, - { "tumble", 6 }, - { "top", 3 }, - { "middle", 6 }, - { "bottom", 6 }, - { "envelope", 8 }, - { "manual", 6 }, - { "large-capacity", 14 }, - { "main", 4 }, - { "side", 4 }, - { "event-report-job-completed", 26 }, - { "electronic-mail", 15 }, - { "xp-setup-mandatory", 18 }, - { "xp-setup-optional", 17 }, - { "xp-setup-ok", 11 }, - { "xp-setup-incomplete", 19 }, - { "xp-list-glyph-fonts", 19 }, - { "xp-list-internal-printer-fonts", 30 }, - { "0", 1 }, - { "01", 2 }, - { "02", 2 }, - { "03", 2 }, - { "012", 3 }, - { "013", 3 }, - { "023", 3 }, - { "0123", 4 } -}; diff --git a/hw/xprint/Util.c b/hw/xprint/Util.c deleted file mode 100644 index eb7f839c9..000000000 --- a/hw/xprint/Util.c +++ /dev/null @@ -1,370 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -/* To get the tempnam() prototype in */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#if defined(linux) && defined(__STRICT_ANSI__) -#undef __STRICT_ANSI__ -#endif - -#include /* for unistd.h and string.h */ -#include -#include -#include -#include "misc.h" -#include "dixstruct.h" - -#include - -#include "attributes.h" - -#define IN_FILE_STRING "%(InFile)%" -#define OUT_FILE_STRING "%(OutFile)%" - -/* - * ReplaceAnyString returns a string combining the input strings. - * It replaces all occurances of 'target' with the supplied - * 'replacement'. - * The original input string will generally be freed, - * and the caller is responsible for freeing whatever string is returned. - */ -char * -ReplaceAnyString( - char *string, - char *target, - char *replacement) -{ - char *pKeyString; - - if(replacement != (char *)NULL) - { - while((pKeyString = strstr(string, target)) != (char *)NULL) - { - char *newString; - - newString = (char *)xalloc(strlen(string) + strlen(replacement) - - strlen(target) + 1); - strncpy(newString, string, pKeyString - string); - newString[pKeyString - string] = '\0'; - strcat(newString, replacement); - strcat(newString, pKeyString + strlen(target)); - xfree(string); - string = newString; - } - } - - return string; -} - -/* - * ReplaceFileString returns a string combining the input strings. - * It replaces all occurances of IN_FILE_STRING with the supplied - * inFileName, and all occurances of OUT_FILE_STRING with the - * supplied outFileName. The original input string will generally be freed, - * and the caller is responsible for freeing whatever string is returned. - */ -char * -ReplaceFileString( - char *string, - char *inFileName, - char *outFileName) -{ - char *pKeyString, - *pInFileString = IN_FILE_STRING, - *pOutFileString = OUT_FILE_STRING; - - if(inFileName != (char *)NULL) - { - while((pKeyString = strstr(string, pInFileString)) != - (char *)NULL) - { - char *newString; - - newString = (char *)xalloc(strlen(string) + - strlen(inFileName) + 1); - strncpy(newString, string, pKeyString - string); - newString[pKeyString - string] = '\0'; - strcat(newString, inFileName); - strcat(newString, pKeyString + strlen(pInFileString)); - xfree(string); - string = newString; - } - } - - if(outFileName != (char *)NULL) - { - while((pKeyString = strstr(string, pOutFileString)) != - (char *)NULL) - { - char *newString; - - newString = (char *)xalloc(strlen(string) + - strlen(outFileName) + 1); - strncpy(newString, string, pKeyString - string); - newString[pKeyString - string] = '\0'; - strcat(newString, outFileName); - strcat(newString, pKeyString + strlen(pOutFileString)); - xfree(string); - string = newString; - } - } - return string; -} - - -/* - * TransferBytes reads numBytes of data from pSrcFile and writes them - * to pDstFile. It returns the number of bytes actually transfered, - * which will be numBytes if it's successful. Neither pSrcFile nor - * pDstFile are rewound or their pointers otherwise modified prior to - * beginning the transfer. - */ -int -TransferBytes( - FILE *pSrcFile, - FILE *pDstFile, - int numBytes) -{ - char buf[10240]; -#define BUF_SIZE (sizeof(buf)*sizeof(char)) - int bytesWritten = 0; - unsigned bytesToXfer; - - for(bytesToXfer = min(BUF_SIZE, (unsigned)numBytes); - bytesToXfer > 0; - bytesToXfer = min(BUF_SIZE, (unsigned)(numBytes - bytesWritten))) - { - if(fread((void *)buf, (size_t) 1, bytesToXfer, pSrcFile) < bytesToXfer) - return bytesWritten; - if(fwrite((void *)buf, (size_t) 1, bytesToXfer, pDstFile) < bytesToXfer) - return bytesWritten; - bytesWritten += bytesToXfer; - } - return bytesWritten; -} - -/* - * CopyContentsAndDelete - does the work of copying and deleting the - * pre, no, and post raster files as well as the raster file itself. - */ -Bool -CopyContentsAndDelete( - FILE **ppSrcFile, - char **pSrcFileName, - FILE *pDstFile) -{ - struct stat statBuf; - - if(stat(*pSrcFileName, &statBuf) < 0) - return FALSE; - rewind(*ppSrcFile); - if(TransferBytes(*ppSrcFile, pDstFile, - (int)statBuf.st_size) != (int)statBuf.st_size) - return FALSE; - fclose(*ppSrcFile); - *ppSrcFile = (FILE *)NULL; - unlink(*pSrcFileName); - xfree(*pSrcFileName); - *pSrcFileName = (char *)NULL; - - return TRUE; -} - - -#define QUADPAD(x) ((((x)+3)>>2)<<2) - -int -XpSendDocumentData( - ClientPtr client, - FILE *fp, - int fileLen, - int maxBufSize) -{ - xPrintGetDocumentDataReply *pRep; - int bytesWritten; - unsigned bytesToWrite; - int result = Success; - - if(client->clientGone) - return Success; - - pRep = (xPrintGetDocumentDataReply *)xalloc(sz_xPrintGetDocumentDataReply+ - QUADPAD(maxBufSize)); - - for(bytesToWrite = min(maxBufSize, fileLen), - bytesWritten = 0; - bytesToWrite > 0; - bytesToWrite = min(maxBufSize, fileLen - bytesWritten)) - { - pRep->type = X_Reply; - pRep->sequenceNumber = client->sequence; - pRep->length = (QUADPAD(bytesToWrite)) >> 2; - pRep->dataLen = bytesToWrite; - - if(fread((void *)(pRep + 1), 1, bytesToWrite, fp) < bytesToWrite) - { - result = BadAlloc; /* XXX poor error choice? */ - pRep->statusCode = 2; /* XXX Is this the right value??? */ - } - else - pRep->statusCode = 0; /* XXX Ignored??? */ - - pRep->finishedFlag = FALSE; - - if (client->swapped) { - int n; - long l; - - swaps(&pRep->sequenceNumber, n); - swapl(&pRep->length, l); - swapl(&pRep->statusCode, l); /* XXX Why are these longs??? */ - swapl(&pRep->finishedFlag, l); /* XXX Why are these longs??? */ - swapl(&pRep->dataLen, l); - } - - (void)WriteToClient(client, - sz_xPrintGetDocumentDataReply + bytesToWrite, - (char *)pRep); - bytesWritten += bytesToWrite; - } - - xfree(pRep); - return result; -} - -/* - * XpFinishDocData - send a DocumentData reply with the "finishedFlag" - * field set to TRUE. This routine should be called from the EndJob - * function of a driver after the driver has sent all required - * document data (presumably via XpSendDocumentData). - */ -int -XpFinishDocData( - ClientPtr client) -{ - xPrintGetDocumentDataReply rep; - - if(client->clientGone) - return Success; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.dataLen = 0; - rep.finishedFlag = TRUE; - rep.statusCode = 0; - - if (client->swapped) { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.statusCode, l); /* XXX Why are these longs??? */ - swapl(&rep.finishedFlag, l); /* XXX Why are these longs??? */ - swapl(&rep.dataLen, l); - } - - (void)WriteToClient(client, sz_xPrintGetDocumentDataReply, (char *)&rep); - return Success; -} - -#ifndef HAVE_MKSTEMP -static -char *XpDirName(char *fname) -{ - char *fn, *ptr; - - fn = (char *)xalloc(strlen(fname) + 1); - if (fn) { - strcpy(fn, fname); - ptr = strrchr(fn, '/'); - if (!ptr) { - ptr = fn; - *ptr++ = '.'; - } else if (ptr == fn) - ptr++; - *ptr = '\0'; - } - return fn; -} -#endif - -Bool -XpOpenTmpFile( - char *mode, - char **fname, - FILE **stream) -{ -#ifndef HAVE_MKSTEMP - char *fn = NULL; - - /* note that there is a small race condition here... */ - if (!(*fname = tempnam(NULL, NULL)) || - !(fn = XpDirName(*fname)) || - access(fn, W_OK) || - !(*stream = fopen(*fname, mode))) - - { - xfree(fn); - xfree(*fname); - *fname = NULL; - *stream = NULL; - return FALSE; - } - xfree(fn); -#else - int fd; - - *stream = NULL; - *fname = (char *)xalloc(14); - if (*fname == NULL) - return FALSE; - strcpy(*fname, "/tmp/xpXXXXXX"); - fd = mkstemp(*fname); - if (fd < 0) { - xfree(*fname); - *fname = NULL; - return FALSE; - } - *stream = fdopen(fd, mode); - if (stream == NULL) { - xfree(*fname); - *fname = NULL; - return FALSE; - } -#endif - return TRUE; -} diff --git a/hw/xprint/ValTree.c b/hw/xprint/ValTree.c deleted file mode 100644 index 5f58de7ec..000000000 --- a/hw/xprint/ValTree.c +++ /dev/null @@ -1,191 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "scrnintstr.h" -#include "validate.h" -#include "windowstr.h" -#include "mi.h" -#include "regionstr.h" -#include "mivalidate.h" - -/* - * XpValidateTree - a validateTree routine which ignores overlapping - * top-level windows when computing the clip lists for such windows. - * This can be used by any driver which maintains a separate memory - * store for each top-level window (with its respective children). - * If the pParent is not the root window, then miValidateTree - * is used unmodified. - * - * The strategy if pParent is the root is to save off the - * current values of pParent->firstChild and pParent->lastChild, - * replacing both with the single child of interest. We save off - * pChild->prevSib and pChild->nextSib, and replace them with NullWindow. - * We save off pParent->clipList, and replace it with - * pParent->winSize - pChild->winSize. We then call miValidateTree - * to do the needed ComputeClips on the pChild's heirarchy. - * pParent's clipList is then recomputed based on the sizes - * of its children, and the saved pointers are restored. - * The trees associated with the siblings of pChild must be descended - * and cleaned of any marks (i.e. the valdata pointer freed, and set to NULL), - * and pParent' AfterValidate structure's exposed field must be updated. - */ -/*ARGSUSED*/ -int -XpValidateTree (pParent, pChild, kind) - WindowPtr pParent; /* Parent to validate */ - WindowPtr pChild; /* First child of pParent that was - * affected */ - VTKind kind; /* What kind of configuration caused call */ -{ - RegionRec origPrntClip; /* orig clipList for parent */ - RegionRec childClip; /* The new borderClip for the current - * child */ - RegionRec tmpPrntClip; /* parent clipList - child borderClip */ - RegionRec exposed; /* For intermediate calculations */ - register ScreenPtr pScreen; - register WindowPtr pWin; - Bool overlap; - int viewvals; - Bool forward; - - WindowPtr origFirstChild, origLastChild, origPrevSib, origNextSib; - - /* - * If we're validating something other than a top-level window, - * then just invoke miValidateTree. - */ - if(pParent->parent != NullWindow) - return miValidateTree(pParent, pChild, kind); - - /* - * If it's a stack change of top levels then it's a no-op for - * this scheme, so we just clean up any marks on windows and return. - */ - if(kind == VTStack) - { - CleanMarks(pParent); - return 1; - } - - pScreen = pParent->drawable.pScreen; - if (pChild == NullWindow) - pChild = pParent->firstChild; - - /* Save off the existing window heirarchy */ - origFirstChild = pParent->firstChild; - origLastChild = pParent->lastChild; - origPrevSib = pChild->prevSib; - origNextSib = pChild->nextSib; - pParent->firstChild = pChild; - pParent->lastChild = pChild; - pChild->prevSib = NullWindow; - pChild->nextSib = NullWindow; - - /* - * Set pParent's clipList to be its winSize minus the pChild's - * borderSize. - */ - origPrntClip = pParent->clipList; - REGION_NULL(pScreen, &tmpPrntClip); - REGION_SUBRACT(pScreen, &tmpPrntClip, &pParent->winSize, - &pChild->borderSize); - pParent->clipList = tmpPrntClip; - - /* - * Call miValidateTree on the pruned tree. - */ - (void) miValidateTree(pParent, pChild, kind); - - /* Restore the saved heirarchy */ - pChild->prevSib = origPrevSib; - pChild->nextSib = origNextSib; - pParent->firstChild = origFirstChild; - pParent->lastChild = origLastChild; - - /* - * Compute pParent's clipList by taking its winSize and subracting - * the borderSize of each of its children. - */ - for(pWin = pParent->firstChild, - REGION_COPY(pScreen, &pParent->clipList, &pParent->winSize); - pWin != NullWindow; - pWin = pWin->nextSib) - { - REGION_SUBTRACT(pScreen, &pParent->clipList, &pParent->clipList, - &pWin->borderSize); - } - - /* - * Compute pParent's AfterValidate structure by subracting the original - * clipList from the newly computed clipList. - */ - REGION_NULL(pScreen, &pParent->valdata->after.exposed); - REGION_SUBTRACT(pScreen, &pParent->valdata->after.exposed, - &pParent->clipList, &origPrntClip); - - /* - * Remove the marks from all but pParent and pChild's heirarchy. - * i.e. from all of pChild's siblings and their children. - */ - for(pWin = pParent->firstChild; pWin != NullWindow; pWin = pWin->nextSib) - { - WindowPtr pCurChild = pWin; - - if(pCurChild == pChild) - continue; - - while (1) - { - if(pCurChild->valdata) - { - xfree(pCurChild->valdata); - pCurChild->valdata = (ValidatePtr)NULL; - } - - if (pCurChild->firstChild) - { - pCurChild = pCurChild->firstChild; - continue; - } - while (!pCurChild->nextSib && (pCurChild != pWin)) - pCurChild = pCurChild->parent; - if (pCurChild == pWin) - break; - pCurChild = pCurChild->nextSib; - } - } -} diff --git a/hw/xprint/attributes.c b/hw/xprint/attributes.c deleted file mode 100644 index e79360496..000000000 --- a/hw/xprint/attributes.c +++ /dev/null @@ -1,1740 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: attributes.c -** * -** * Contents: -** * Implementation of the attribute store for Xp. -** * -** * Copyright: Copyright 1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (defined(sun) && defined(SVR4)) || defined(__SCO__) || defined(__UNIXWARE__) -#include -#endif -#include "scrnintstr.h" - -#include - -#include "attributes.h" - -#include -#include - -#include "spooler.h" - -#ifndef MIN -#define MIN(a,b) (((a)<(b))?(a):(b)) -#endif -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif - - -static XrmDatabase CopyDb(XrmDatabase inDb); - -extern XrmDatabase XpSpoolerGetServerAttributes(void); - -static int attrGeneration = 0; - -typedef struct { - XrmDatabase *pDb; - char *qualifier; - char *modelId; -} DbEnumStruct; - -typedef struct { - char *stringDb; - int nextPos; - int space; -} StringDbStruct; - -typedef struct _printerAttrs { - struct _printerAttrs *next; - char *name; - char *qualifier; - XrmDatabase printerAttrs; - XrmDatabase docAttrs; - XrmDatabase jobAttrs; -} PrAttrs, *PrAttrPtr; - -static PrAttrPtr attrList = (PrAttrPtr)NULL; - -typedef struct _systemAttrs { - XrmDatabase doc; - XrmDatabase job; - XrmDatabase printers; - XrmDatabase server; -} SysAttrs, *SysAttrsPtr; - -SysAttrs systemAttributes; - -/* - * attrCtxtPrivIndex hold the attribute store's context private index. - * This index is allocated at the time the attribute store is initialized. - */ -static DevPrivateKey attrCtxtPrivKey = &attrCtxtPrivKey; - -/* - * The ContextAttrs structure descibes the context private space reserved - * by the attribute store. - */ -typedef struct _contextAttrs { - XrmDatabase printerAttrs; - XrmDatabase docAttrs; - XrmDatabase jobAttrs; - XrmDatabase pageAttrs; -} ContextAttrs, *ContextAttrPtr; - -/* - * XPDIR is relative to (i.e. is a subdir of) XPRINTDIR/$LANG. - */ -static const char XPDIR[] = "/print"; -/* - * The following files/directories define or are within subdirectories of the - * above-defined XPDIR. - */ -static const char XPPRINTERATTRFILE[] = "/attributes/printer"; -static const char XPJOBATTRFILE[] = "/attributes/job"; -static const char XPDOCATTRFILE[] = "/attributes/document"; -static const char XPMODELDIR[] = "/models"; - -static char NULL_STRING[] = "\0"; - -/* - * XpGetConfigDirBase returns a string containing the path name of the base - * where the print server configuration directory is localed. - */ -static -char *XpGetConfigDirBase(void) -{ - char *configDir; - - /* - * If the XPCONFIGDIR environment variable is not set, then use the - * compile-time constant XPRINTDIR. XPRINTDIR is passed in on the - * compile command line, and is defined in $(TOP)/config/cf/Project.tmpl. - */ - if((configDir = getenv("XPCONFIGDIR")) == (char *)NULL) - configDir = XPRINTDIR; - - return configDir; -} - -/* - * XpGetConfigDir returns a string containing the path name of the print - * server configuration directory. If the useLocale parameter is False - * the it returns the path to the "/C" directory. If the useLocale - * parameter is True it returns the path to the directory associated with - * $LANG. It makes no attempt to ensure that the directory actually exists. - */ -char * -XpGetConfigDir(Bool useLocale) -{ - char *dirName, *langName, *langDir, *configDir; - Bool freeLangDir = False; - - if(useLocale == False) langDir = "/C"; - else - { - langName = getenv("LC_ALL"); - if (langName == NULL) { - langName = getenv("LANG"); - } - - if(langName == (char *)NULL) - return (char *)NULL; - else - { - if(strcmp(langName, "C") == 0) - return (char *)NULL; - langDir = (char *)xalloc(strlen(langName) + 2); - sprintf(langDir, "/%s", langName); - freeLangDir = True; - } - } - - configDir = XpGetConfigDirBase(); - - dirName = (char *)xalloc(strlen(configDir) + strlen(XPDIR) + - strlen(langDir) + 1); - sprintf(dirName, "%s%s%s", configDir, langDir, XPDIR); - - if(freeLangDir == True) - xfree(langDir); - - return dirName; -} - -/* - * GetMergedDatabase reads and merges xrmdb files from the top-level printer - * config directory, and from the directory associated with the current - * locale (if other than the top-level). - */ -static XrmDatabase -GetMergedDatabase(const char *attrName) -{ - char *dirName, *fileName; - XrmDatabase db; - - if((dirName = XpGetConfigDir(False)) == (char *)NULL) - return (XrmDatabase)NULL; - if((fileName = (char *)xalloc(strlen(dirName) + strlen(attrName) + 1)) == - (char *)NULL) - return (XrmDatabase)NULL; - sprintf(fileName, "%s%s", dirName, attrName); - db = XrmGetFileDatabase(fileName); - xfree(fileName); - xfree(dirName); - - if((dirName = XpGetConfigDir(True)) == (char *)NULL) - return db; - if((fileName = (char *)xalloc(strlen(dirName) + strlen(attrName) + 1)) == - (char *)NULL) - return db; - sprintf(fileName, "%s%s", dirName, attrName); - (void)XrmCombineFileDatabase(fileName, &db, True); - xfree(fileName); - xfree(dirName); - - return db; -} - -/* - * BuildSystemAttributes reads the on-disk configuration files for printers, - * initial job, and initial document attributes. The resulting xrm - * databases are then dissected as needed for each printer. - * It also allocates a contextPrivate space for the attributes, - * reserving space to store pointers to the attribute stores for - * the context. - */ -static void -BuildSystemAttributes(void) -{ - if(systemAttributes.printers != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.printers); - systemAttributes.printers = GetMergedDatabase(XPPRINTERATTRFILE); - if(systemAttributes.job != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.job); - systemAttributes.job = GetMergedDatabase(XPJOBATTRFILE); - if(systemAttributes.doc != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.doc); - systemAttributes.doc = GetMergedDatabase(XPDOCATTRFILE); - if(systemAttributes.server != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.server); - systemAttributes.server = XpSpoolerGetServerAttributes(); - return; -} - -/* - * AddDbEntry is called by XrmEnumerateDatabase, and adds the supplied - * database entry to the database pointed to within the "DbEnumStruct" - * passed as the client_data (aka "closure"). - */ -static Bool -AddDbEntry( - XrmDatabase *sourceDB, - XrmBindingList bindings, - XrmQuarkList quarks, - XrmRepresentation *type, - XrmValue *value, - XPointer client_data) -{ - DbEnumStruct *pEnumStruct = (DbEnumStruct *)client_data; - XrmName xrm_name[5]; - XrmClass xrm_class[5]; - XrmBinding xrm_bind[3]; - XrmValue realVal; - XrmRepresentation rep_type; - - xrm_name[0] = XrmStringToQuark (pEnumStruct->qualifier); - xrm_class[0] = XrmStringToQuark (pEnumStruct->modelId); - - for(;*quarks; quarks++) - xrm_name[1] = xrm_class[1] = *quarks; - - xrm_name[2] = (XrmQuark)NULL; - xrm_class[2] = (XrmQuark)NULL; - - if(XrmQGetResource (*sourceDB, xrm_name, xrm_class, &rep_type, &realVal)) - { - xrm_bind[0] = XrmBindLoosely; - - xrm_name[0] = xrm_name[1]; - xrm_name[1] = NULLQUARK; - - XrmQPutStringResource(pEnumStruct->pDb, xrm_bind, xrm_name, - (char *)realVal.addr); - } - - return FALSE; -} - -/* - * BuildPrinterAttrs - builds and returns an XrmDatabase for the printer - * of the specified name/qualifier, if we have enough information. - * If we don't have a model-config - * file, then just enumerate the systemAttributes->printers database, - * otherwise read in the model-config database and merge into it the - * systemAttributes->printers database. This database is then enumerated - * with the printer qualifier (and the model name as class if we have it), and - * the resulting elements are stored into the database for this particular - * printer. - */ -static XrmDatabase -BuildPrinterAttrs( - char *printerName, - char *qualifierName) -{ - XrmDatabase printerDB = (XrmDatabase)NULL; - - if(systemAttributes.printers != (XrmDatabase)NULL) - { - char *fileName; - XrmDatabase modelDB = (XrmDatabase)NULL; - XrmName xrm_name[5], xrm_class[2]; - XrmRepresentation rep_type; - XrmValue value; - DbEnumStruct enumStruct; - Bool freeModelDB = False; - /* - * Build the initial db based on the model-config files - */ - xrm_name[0] = XrmStringToQuark (qualifierName); - xrm_name[1] = XrmStringToQuark ("xp-model-identifier"); - xrm_name[2] = (XrmQuark)NULL; - XrmQGetResource (systemAttributes.printers, xrm_name, xrm_name, - &rep_type, &value); - - if(value.addr != (XPointer)NULL) - { - fileName = (char *)xalloc(strlen(XPMODELDIR) + - strlen((char *)value.addr) + - strlen("model-config") + 3); - sprintf(fileName, "%s/%s/%s", XPMODELDIR, value.addr, - "model-config"); - modelDB = GetMergedDatabase(fileName); - xfree(fileName); - if(modelDB != (XrmDatabase)NULL) - { - XrmDatabase tempDB = (XrmDatabase)NULL; - /* - * have to make a temp copy because MergeDatabase destroys - * the "source" database. Merge in the printers DB - */ - tempDB = CopyDb(systemAttributes.printers); - XrmMergeDatabases(tempDB, &modelDB); - freeModelDB = True; - } - } - - /* - * Check to see if we knew the name AND found a database file - */ - if(modelDB == (XrmDatabase)NULL) - modelDB = systemAttributes.printers; - - xrm_name[0] = XrmStringToQuark (qualifierName); - xrm_name[1] = (XrmQuark)NULL; - xrm_class[0] = XrmStringToQuark((char *)value.addr); - xrm_class[1] = (XrmQuark)NULL; - enumStruct.pDb = &printerDB; - enumStruct.qualifier = (char *)qualifierName; - enumStruct.modelId = (char *)value.addr; - XrmEnumerateDatabase(modelDB, xrm_name, xrm_class, XrmEnumAllLevels, - AddDbEntry, (XPointer) &enumStruct); - - if(freeModelDB == True) XrmDestroyDatabase(modelDB); - } - XrmPutStringResource(&printerDB, "*printer-name", printerName); - XrmPutStringResource(&printerDB, "*qualifier", qualifierName); - return printerDB; -} - -/* - * BuildABase - builds an XrmDatabase by enumerating the supplied sourceBase - * database for elements relevant for the printer named by printerName, - * and deriving a class for printerName from the model declared in the - * systemAttributes.printers database. If no model is defined for this - * printer then the printerName is used as the class as well. - * - * This is used to build the initial value document and initial value - * job attribute databases for each printer by searching the system - * level doc and job databases. - */ -static XrmDatabase -BuildABase( - char *printerName, - char *qualifierName, - XrmDatabase sourceBase) -{ - XrmDatabase builtDB = (XrmDatabase)NULL; - - if(sourceBase != (XrmDatabase)NULL) - { - XrmName xrm_name[5], xrm_class[2]; - XrmRepresentation rep_type; - XrmValue value; - DbEnumStruct enumStruct; - - /* - * Retrieve the model name for use as the class. - */ - xrm_name[0] = XrmStringToQuark (printerName); - xrm_name[1] = XrmStringToQuark ("xp-model-identifier"); - xrm_name[2] = (XrmQuark)NULL; - XrmQGetResource (systemAttributes.printers, xrm_name, xrm_name, - &rep_type, &value); - /* - * if we have a model name then use it as the class, otherwise - * just use the printer name as the class as well as the name. - */ - if(value.addr != (XPointer)NULL) - xrm_class[0] = XrmStringToQuark((char *)value.addr); - else - xrm_class[0] = xrm_name[0]; - xrm_class[1] = (XrmQuark)NULL; - - xrm_name[1] = (XrmQuark)NULL; - - enumStruct.pDb = &builtDB; - enumStruct.qualifier = (char *)qualifierName; - enumStruct.modelId = (char *)value.addr; - XrmEnumerateDatabase(sourceBase, xrm_name, xrm_class, XrmEnumAllLevels, - AddDbEntry, (XPointer) &enumStruct); - } - - XrmPutStringResource(&builtDB, "*qualifier", qualifierName); - - return builtDB; -} - -/* - * FreeAttrList is called upon server recycle, and frees the printer - * databases stored in the global attrList. - */ -static void -FreeAttrList(void) -{ - PrAttrPtr pAttr, pNext; - - for(pAttr = attrList, pNext = attrList; - pAttr != (PrAttrPtr)NULL; - pAttr = pNext) - { - pNext = pAttr->next; - if(pAttr->printerAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pAttr->printerAttrs); - if(pAttr->docAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pAttr->docAttrs); - if(pAttr->jobAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pAttr->jobAttrs); - xfree(pAttr->name); - xfree(pAttr->qualifier); - xfree(pAttr); - } - attrList = (PrAttrPtr)NULL; -} - -/* - * XpRehashAttributes - frees the per-printer attribute list and - * calls BuildSystemAttributes to rebuild the overall attribute - * store. It is expected that a caller of this will follow it - * by calling XpBuildAttributeStore for a new list of printers. - */ -int -XpRehashAttributes(void) -{ - if(attrList != (PrAttrPtr)NULL) - FreeAttrList(); - BuildSystemAttributes(); - return Success; -} - -/* - * XpBuildAttributeStore - creates the attribute database associated - * with the specified printer. The first time this is called it - * calls BuildSystemAttributes to create the system-level databases. - */ -void -XpBuildAttributeStore( - char *printerName, - char *qualifierName) -{ - PrAttrPtr pAttr; - - if((pAttr = (PrAttrPtr)xalloc(sizeof(PrAttrs))) == (PrAttrPtr)NULL) - return; - - if(attrGeneration != serverGeneration) - { - if(attrList != (PrAttrPtr)NULL) - FreeAttrList(); - dixRequestPrivate(attrCtxtPrivKey, sizeof(ContextAttrs)); - BuildSystemAttributes(); - - attrGeneration = serverGeneration; - } - - if(attrList == (PrAttrPtr)NULL) - { - pAttr->next = (PrAttrPtr)NULL; - attrList = pAttr; - } - else - { - pAttr->next = attrList; - attrList = pAttr; - } - - pAttr->name = strdup(printerName); - pAttr->qualifier = strdup(qualifierName); - pAttr->printerAttrs = BuildPrinterAttrs(printerName, qualifierName); - pAttr->docAttrs = BuildABase(printerName, qualifierName, - systemAttributes.doc); - pAttr->jobAttrs = BuildABase(printerName, qualifierName, - systemAttributes.job); -} - - -static Bool -StoreEntry( - XrmDatabase *sourceDB, - XrmBindingList bindings, - XrmQuarkList quarks, - XrmRepresentation *type, - XrmValue *value, - XPointer client_data) -{ - XrmDatabase *outDb = (XrmDatabase *)client_data; - - XrmQPutStringResource(outDb, bindings, quarks, (char *)value->addr); - - return FALSE; -} - -/* - * XpCopyDb - makes a copy of the specified XrmDatabase and returns - * the copy. - */ -static XrmDatabase -CopyDb(XrmDatabase inDb) -{ - XrmDatabase outDb = (XrmDatabase)NULL; - XrmQuark empty = NULLQUARK; - - (void)XrmEnumerateDatabase(inDb, &empty, &empty, XrmEnumAllLevels, - StoreEntry, (XPointer) &outDb); - return outDb; -} - -/* - * XpInitAttributes - initializes the attribute store for the specified - * context. It does this by making copies of the printer, doc, and job - * attributes databases for the printer associated with the context. - */ -void -XpInitAttributes(XpContextPtr pContext) -{ - ContextAttrPtr pCtxtAttrs; - PrAttrPtr pPrAttr = attrList; - - /* Initialize all the pointers to NULL */ - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - (void)memset((void *)pCtxtAttrs, 0, (size_t) sizeof(ContextAttrs)); - - for(pPrAttr = attrList; pPrAttr != (PrAttrPtr)NULL; pPrAttr = pPrAttr->next) - if(!strcmp(pPrAttr->name, pContext->printerName)) break; - - if(pPrAttr != (PrAttrPtr)NULL) - { - pCtxtAttrs->printerAttrs = CopyDb(pPrAttr->printerAttrs); - pCtxtAttrs->docAttrs = CopyDb(pPrAttr->docAttrs); - pCtxtAttrs->jobAttrs = CopyDb(pPrAttr->jobAttrs); - } -} - -void -XpDestroyAttributes( - XpContextPtr pContext) -{ - ContextAttrPtr pCtxtAttrs; - - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - if(pCtxtAttrs->printerAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->printerAttrs); - if(pCtxtAttrs->docAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->docAttrs); - if(pCtxtAttrs->jobAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->jobAttrs); - if(pCtxtAttrs->pageAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->pageAttrs); -} - -/* - * XpGetOneAttribute returns the string value of the specified attribute - * in the specified class for the specified print context. If the attribute - * doesn't exist in the database for this context, or if the class database - * doesn't exist for this context, then NULL is returned. The caller must - * not free the returned string, as the returned pointer points into the - * database. This function can also return a value from the server attributes, - * in which case the pContext parameter is ignored. - */ -char * -XpGetOneAttribute( - XpContextPtr pContext, - XPAttributes class, - char *attributeName) -{ - ContextAttrPtr pCtxtAttrs; - XrmDatabase db = (XrmDatabase)NULL; - XrmName xrm_name[3]; - XrmRepresentation rep_type; - XrmValue value; - - if(class == XPServerAttr) - { - if(systemAttributes.server == (XrmDatabase)NULL) - return NULL_STRING; - - xrm_name[0] = XrmStringToQuark (attributeName); - xrm_name[1] = (XrmQuark)NULL; - XrmQGetResource(systemAttributes.server, xrm_name, xrm_name, - &rep_type, &value); - - if(value.addr == (char *)NULL) - return NULL_STRING; - return (char *)value.addr; - } - else - { - pCtxtAttrs=(ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - db = pCtxtAttrs->printerAttrs; - break; - case XPDocAttr: - db = pCtxtAttrs->docAttrs; - break; - case XPJobAttr: - db = pCtxtAttrs->jobAttrs; - break; - case XPPageAttr: - db = pCtxtAttrs->pageAttrs; - break; - default: - break; - } - } - if(db == (XrmDatabase)NULL) - return NULL_STRING; - - xrm_name[0] = XrmStringToQuark ("qualifier"); - xrm_name[1] = (XrmQuark)NULL; - XrmQGetResource(db, xrm_name, xrm_name, &rep_type, &value); - - xrm_name[0] = XrmStringToQuark (value.addr); - xrm_name[1] = XrmStringToQuark (attributeName); - xrm_name[2] = (XrmQuark)NULL; - if(XrmQGetResource(db, xrm_name, xrm_name, &rep_type, &value)) - return (char *)value.addr; - else - return NULL_STRING; -} - -/* - * XpPutOneAttribute updates one attribute for the specified - * context and class. This function is intended for use by the attribute - * validation module which updates the XrmDatabases directly. This - * function does not recognize XPServerAttr. - */ -void -XpPutOneAttribute( - XpContextPtr pContext, - XPAttributes class, - const char* attributeName, - const char* value) -{ - ContextAttrPtr pCtxtAttrs; - XrmDatabase db; - XrmBinding bindings[1]; - XrmQuark quarks[2]; - - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - db = pCtxtAttrs->printerAttrs; - break; - case XPDocAttr: - db = pCtxtAttrs->docAttrs; - break; - case XPJobAttr: - db = pCtxtAttrs->jobAttrs; - break; - case XPPageAttr: - db = pCtxtAttrs->pageAttrs; - break; - default: - return; - } - bindings[0] = XrmBindLoosely; - quarks[0] = XrmStringToQuark(attributeName); - quarks[1] = (XrmQuark)NULL; - XrmQPutStringResource(&db, bindings, quarks, value ? value : ""); -} - - - -/******************************************************************************* - * - * The following routines: ExpandSpace, PutString, PutByte, and AppendEntry - * form the functional core of the GetAttributes routine. Xrm does not - * supply a routine to form a string database from an XrmDatabase, except - * by writing the database to a file. This code avoids the file system - * overhead, but is a bit clunky in its memory management. - * - ******************************************************************************/ - -/* - * ExpandSpace expands the memory allocated for the string database in - * the StringDbStruct passed in, and updates the "space" field of the - * struct to indicate the new amount of space available. - */ -static Bool -ExpandSpace( - StringDbStruct *pStr) -{ - char *newSpace; - - if((newSpace = (char *)xrealloc(pStr->stringDb, pStr->nextPos + pStr->space - + 1024)) == (char *)NULL) - return False; - pStr->space += 1024; - pStr->stringDb = newSpace; - return True; -} - -/* - * PutString puts the contents of a null-terminated string into the string - * database in the StringDbStruct passed in. If there is insufficient room - * for the string, ExpandSpace is called, and the nextPos and space fields - * are updated. - */ -static void -PutString( - StringDbStruct *pStr, - char *pString) -{ - int len = strlen(pString); - - if(len >= pStr->space) - if(!ExpandSpace(pStr)) - return; - strcpy(&pStr->stringDb[pStr->nextPos], pString); - pStr->nextPos += len; - pStr->space -= len; -} - -/* - * PutByte puts a single byte value in to the string database in the passed-in - * StringDbStruct. ExpandSpace is called if there is insufficient room for - * the byte, and the nextPos and space fields are updated. - */ -static void -PutByte( - StringDbStruct *pStr, - char byte) -{ - if(pStr->space <= 1) - if(!ExpandSpace(pStr)) - return; - pStr->stringDb[pStr->nextPos] = byte; - pStr->nextPos++; - pStr->space--; -} - -#define XrmQString XrmPermStringToQuark("String") - -/* - * AppendEntry is called by XrmEnumerateDatabase, and serves to append - * a database entry onto a string database. The passed-in "closure" - * struct contains a pointer to the string, and a count of the remaining - * bytes. If there are insufficient remaining bytes then the struct - * is realloced, and the count of the space remaining is updated. - * Database elements of types other than String are ignored! - * This code is based directly on that in "DumpEntry" in Xrm.c. - */ -static Bool -AppendEntry( - XrmDatabase *db, - XrmBindingList bindings, - XrmQuarkList quarks, - XrmRepresentation *type, - XrmValuePtr value, - XPointer data) -{ - StringDbStruct *pEnumStr = (StringDbStruct *)data; - Bool firstNameSeen; - unsigned int i; - char *s, c; - - if (*type != XrmQString) - return False; - - for (firstNameSeen = False; *quarks; bindings++, quarks++) { - if (*bindings == XrmBindLoosely) { - PutString(pEnumStr, "*"); - } else if (firstNameSeen) { - PutString(pEnumStr, "."); - } - firstNameSeen = True; - PutString(pEnumStr, XrmQuarkToString(*quarks)); - } - s = value->addr; - i = value->size; - PutString(pEnumStr, ":\t"); - if(i) i--; - - if (i && (*s == ' ' || *s == '\t')) - PutByte(pEnumStr, '\\'); /* preserve leading whitespace */ - - while (i--) { - c = *s++; - if (c == '\n') { - if (i) - PutString(pEnumStr, "\\n\\\n"); - else - PutString(pEnumStr, "\\n"); - } else if (c == '\\') - PutString(pEnumStr, "\\\\"); - else if ((c < ' ' && c != '\t') || - ((unsigned char)c >= 0x7f && (unsigned char)c < 0xa0)) - { - char temp[4]; - (void) sprintf(temp, "\\%03o", (unsigned char)c); - PutString(pEnumStr, temp); - } - else - PutByte(pEnumStr, c); - } - PutByte(pEnumStr, '\n'); - pEnumStr->stringDb[pEnumStr->nextPos] = (char)'\0'; - return False; -} - -/* - * XpGetAttributes returns a string database version of the Xrm database - * for the specified context and class. This function can also return the - * contents of the server attributes, in which case the pContext parameter - * is ignored. - * - * The caller is responsible for freeing the returned string, - * unlike XpGetOneAttribute, where the caller must not free the string. - */ -char * -XpGetAttributes( - XpContextPtr pContext, - XPAttributes class) -{ - ContextAttrPtr pCtxtAttrs; - XrmDatabase db = (XrmDatabase)NULL; - StringDbStruct enumStruct; - XrmQuark empty = NULLQUARK; - - if(class == XPServerAttr) - db = systemAttributes.server; - else - { - pCtxtAttrs=(ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPServerAttr: - db = systemAttributes.server; - break; - case XPPrinterAttr: - db = pCtxtAttrs->printerAttrs; - break; - case XPDocAttr: - db = pCtxtAttrs->docAttrs; - break; - case XPJobAttr: - db = pCtxtAttrs->jobAttrs; - break; - case XPPageAttr: - db = pCtxtAttrs->pageAttrs; - break; - default: - break; - } - } - if(db == (XrmDatabase)NULL) - { - char *retval = (char *)xalloc(1); - retval[0] = (char)'\0'; - return retval; - } - - if((enumStruct.stringDb = (char *)xalloc(1024)) == (char *)NULL) - return (char *)NULL; - enumStruct.stringDb[0] = (char)'\0'; - enumStruct.nextPos = 0; - enumStruct.space = 1024; - (void)XrmEnumerateDatabase(db, &empty, &empty, XrmEnumAllLevels, - AppendEntry, (XPointer) &enumStruct); - - return enumStruct.stringDb; -} - -int -XpAugmentAttributes( - XpContextPtr pContext, - XPAttributes class, - char *attributes) -{ - XrmDatabase db; - ContextAttrPtr pCtxtAttrs; - - db = XrmGetStringDatabase(attributes); - if(db == (XrmDatabase)NULL) return BadAlloc; - - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - XrmMergeDatabases(db, &pCtxtAttrs->printerAttrs); - break; - case XPDocAttr: - XrmMergeDatabases(db, &pCtxtAttrs->docAttrs); - break; - case XPJobAttr: - XrmMergeDatabases(db, &pCtxtAttrs->jobAttrs); - break; - case XPPageAttr: - XrmMergeDatabases(db, &pCtxtAttrs->pageAttrs); - break; - default: - break; - } - return Success; -} - -/* - * XpSetAttributes - sets the attribute stores for a specified context. - */ -int -XpSetAttributes( - XpContextPtr pContext, - XPAttributes class, - char *attributes) -{ - XrmDatabase db; - ContextAttrPtr pCtxtAttrs; - - db = XrmGetStringDatabase(attributes); - if(db == (XrmDatabase)NULL) return BadAlloc; - - pCtxtAttrs=(ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - if(pCtxtAttrs->printerAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->printerAttrs); - pCtxtAttrs->printerAttrs = db; - break; - case XPDocAttr: - if(pCtxtAttrs->docAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->docAttrs); - pCtxtAttrs->docAttrs = db; - break; - case XPJobAttr: - if(pCtxtAttrs->jobAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->jobAttrs); - pCtxtAttrs->jobAttrs = db; - break; - case XPPageAttr: - if(pCtxtAttrs->pageAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->pageAttrs); - pCtxtAttrs->pageAttrs = db; - break; - default: - break; - } - return Success; -} - -void -XpAddPrinterAttribute( - char *printerName, - char *printerQualifier, - char *attributeName, - char *attributeValue) -{ - PrAttrPtr pAttr; - - for(pAttr = attrList; pAttr != (PrAttrPtr)NULL; pAttr = pAttr->next) - { - if(!strcmp(printerQualifier, pAttr->qualifier)) - { - XrmPutStringResource(&pAttr->printerAttrs, attributeName, - attributeValue); - break; - } - } -} - -const char * -XpGetPrinterAttribute(const char *printerName, - const char *attribute) -{ - PrAttrPtr pAttr; - XrmValue value; - char *type; - - for(pAttr = attrList; pAttr != (PrAttrPtr)NULL; pAttr = pAttr->next) - { - if(!strcmp(printerName, pAttr->qualifier)) - { - char *attrStr; - - attrStr = (char *)xalloc(strlen(printerName) + strlen(attribute) + - 2); - sprintf(attrStr, "%s.%s", printerName, attribute); - XrmGetResource(pAttr->printerAttrs, attrStr, attrStr, - &type, &value); - xfree(attrStr); - break; - } - } - if(value.addr != (XPointer)NULL && strlen(value.addr) != 0) - return value.addr; - else - return ""; -} - -/******************************************************************************* - * - * The following routines are not attribute routines, but are rather - * spooler interface functions. They should presumably move to - * a SpoolerIf.c of some similarly named file. - * - ******************************************************************************/ -#include - -static char serverAttrStr[] = "*document-attributes-supported: copy-count\n\ -*job-attributes-supported: job-name job-owner\ - notification-profile xp-spooler-command-options\n\ -*multiple-documents-supported: False"; - -XrmDatabase -XpSpoolerGetServerAttributes(void) -{ - char *totalAttrs, *localeName; - XrmDatabase db; - - localeName = setlocale(LC_CTYPE, (char *)NULL); - if(!localeName || strlen(localeName) == 0) - localeName = "C"; - - if((totalAttrs = (char *)xalloc(strlen(serverAttrStr) + strlen(localeName) - + 11)) == (char *)NULL) - return (XrmDatabase)NULL; - sprintf(totalAttrs, "%s\n%s\t%s", serverAttrStr, "*locale:", localeName); - - db = XrmGetStringDatabase(totalAttrs); - xfree(totalAttrs); - return db; -} - -/* - * Tailf() works similar to "/bin/tail -f fd_in >fd_out" until - * the process |child| terminates (the child status is - * returned in |child_status|). - * This function is used to copy the stdout/stderr output of a - * child to fd_out until the child terminates. - */ -static -void Tailf(int fd_in, int fd_out, pid_t child, int *child_status) -{ - char b[256]; - ssize_t sz; - Bool childDone = FALSE; - struct timeval timeout; - long fpos = 0; /* XXX: this is not correct for largefile support */ - - timeout.tv_sec = 0; - timeout.tv_usec = 100000; - - for(;;) - { - /* Check whether the child is still alive or not */ - if (waitpid(child, child_status, WNOHANG) == child) - childDone = TRUE; - - /* Copy traffic from |fd_in| to |fd_out| - * (Note we have to use |pread()| here to avoid race conditions - * between a child process writing to the same file using the - * same file pointer (|dup(2)| and |fork(2)| just duplicate the - * file handle but not the pointer)). - */ - while ((sz = pread(fd_in, b, sizeof(b), fpos)) > 0) - { - fpos += sz; - write(fd_out, b, sz); - } - - if (childDone) - break; - - (void)select(0, NULL, NULL, NULL, &timeout); - } -} - -/* - * SendFileToCommand takes three character pointers - the file name, - * the command to execute, - * and the "argv" style NULL-terminated vector of arguments for the command. - * The command is exec'd, and the file contents are sent to the command - * via stdin. - * - * WARNING: This function will try to adopt the userId of the supplied - * user name prior to exec'ing the supplied command. - */ -static void -SendFileToCommand( - XpContextPtr pContext, - char *fileName, - char *pCommand, - char **argVector, - char *userName) -{ - pid_t childPid; - int pipefd[2]; - int status; - struct stat statBuf; - FILE *fp, *outPipe; - FILE *resFp; /* output from launched command */ - int resfd; - - resFp = tmpfile(); - if (resFp == NULL) - { - ErrorF("SendFileToCommand: Cannot open temporary file for command output\n"); - return; - } - resfd = fileno(resFp); - - if(pipe(pipefd)) - { - ErrorF("SendFileToCommand: Cannot open pipe\n"); - fclose(resFp); - return; - } - - if(stat(fileName, &statBuf) < 0 || (int)statBuf.st_size == 0) - { - close(pipefd[0]); - close(pipefd[1]); - fclose(resFp); - return; - } - - fp = fopen(fileName, "r"); - if(fp == (FILE *)NULL) - { - ErrorF("SendFileToCommand: Cannot open scratch spool file '%s'\n", fileName); - close(pipefd[0]); - close(pipefd[1]); - fclose(resFp); - return; - } - - if((childPid = fork()) == 0) - { - close(pipefd[1]); - - /* Replace current stdin with input from the pipe */ - close(STDIN_FILENO); - dup(pipefd[0]); - close(pipefd[0]); - - /* Close current stdout and redirect it to resfd */ - close(STDOUT_FILENO); - dup(resfd); - - /* Close current stderr and redirect it to resfd - * (valgrind may not like that, in this case simply start it using - * % valgrind 50>/dev/tty --logfile-fd=50 ./Xprt ... #) - */ - close(STDERR_FILENO); - dup(resfd); - - fclose(resFp); - - /* - * If a user name is specified, try to set our uid to match that - * user name. This is to allow e.g. a banner page to show the - * name of the printing user rather than the user who started - * the print server. - */ - if(userName) - { - uid_t myUid; - - if((myUid = geteuid()) == (uid_t)0) - { - struct passwd *pPasswd; - - if((pPasswd = getpwnam(userName))) - { - if (setgid((gid_t)pPasswd->pw_gid) != 0) - perror("SendFileToCommand: setgid() failure."); - - if (initgroups(userName, (gid_t)pPasswd->pw_gid) != 0) - perror("SendFileToCommand: initgroups() failure."); - - if (setuid((uid_t)pPasswd->pw_uid) != 0) - perror("SendFileToCommand: setuid() failure."); - } - } - } - /* return BadAlloc? */ - if (execv(pCommand, argVector) == -1) { - FatalError("unable to exec '%s'", pCommand); - } - } - else - { - (void) close(pipefd[0]); - - outPipe = fdopen(pipefd[1], "w"); - (void) TransferBytes(fp, outPipe, (int)statBuf.st_size); - - (void) fclose(outPipe); - (void) fclose(fp); - - /* Wait for spooler child (and send all it's output to stderr) */ - Tailf(resfd, STDERR_FILENO, childPid, &status); - - if (status != EXIT_SUCCESS) - { - ErrorF("SendFileToCommand: spooler command returned non-zero status %d.\n", status); - } - - /* Store "xp-spooler-command-results" XPJobAttr that the - * client can fetch it on demand */ - if ((fstat(resfd, &statBuf) >= 0) && (statBuf.st_size >= 0)) - { - long bufSize; - char *buf; - - bufSize = statBuf.st_size; - - /* Clamp buffer size to 4MB to prevent that we allocate giant - * buffers if the spooler goes mad and spams it's stdout/stderr - * channel. */ - bufSize = MIN(bufSize, 4*1024*1024); - - buf = xalloc(bufSize+1); - if (buf != NULL) - { - bufSize = pread(resfd, buf, bufSize, 0); - buf[bufSize]='\0'; - - /* XXX: This should be converted from local multibyte encoding to - * Compound Text encoding first */ - XpPutOneAttribute(pContext, XPJobAttr, "xp-spooler-command-results", buf); - - xfree(buf); - } - } - else - { - ErrorF("SendFileToCommand: fstat() failed.\n"); - } - - fclose(resFp); - } - return; -} - -/* - * ReplaceAllKeywords causes all the predefined keywords (e.g. %options%) - * to be replaced with the appropriate values derived from the attribute - * store for the supplied print context. The ReplaceAnyString utility - * routine is used to perform the actual replacements. - */ - -static char * -ReplaceAllKeywords( - XpContextPtr pContext, - char *command) -{ - char *cmdOpt; - - cmdOpt = XpGetOneAttribute(pContext, XPPrinterAttr, - "xp-spooler-printer-name"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%printer-name%", cmdOpt); - else - command = ReplaceAnyString(command, "%printer-name%", - pContext->printerName); - - cmdOpt = XpGetOneAttribute(pContext, XPDocAttr, "copy-count"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%copy-count%", cmdOpt); - else - command = ReplaceAnyString(command, "%copy-count%", "1"); - - cmdOpt = XpGetOneAttribute(pContext, XPJobAttr, "job-name"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%job-name%", cmdOpt); - else - command = ReplaceAnyString(command, "%job-name%", ""); - - cmdOpt = XpGetOneAttribute(pContext, XPJobAttr, "job-owner"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%job-owner%", cmdOpt); - else - command = ReplaceAnyString(command, "%job-owner%", ""); - - cmdOpt = XpGetOneAttribute(pContext, XPJobAttr, - "xp-spooler-command-options"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%options%", cmdOpt); - else - command = ReplaceAnyString(command, "%options%", ""); - - /* New in xprint.mozdev.org release 007 - replace "%xpconfigdir%" with - * location of $XPCONFIGDIR */ - command = ReplaceAnyString(command, "%xpconfigdir%", XpGetConfigDirBase()); - - return command; -} - -#ifdef __QNX__ -#define toascii( c ) ((unsigned)(c) & 0x007f) -#endif - -#if defined(CSRG_BASED) || \ - defined(linux) || \ - defined(__CYGWIN__) || \ - (defined(sun) && !defined(SVR4)) || \ - (defined(SVR4) && !defined(sun) && !defined(__UNIXWARE__)) || \ - defined(ISC) || \ - defined(Lynx) || \ - defined(__QNX__) || \ - defined(__APPLE__) -#define iswspace(c) (isascii(c) && isspace(toascii(c))) -#endif - -/* - * GetToken - takes in a string and returns a malloc'd copy of the - * first non-white-space sequence of characters in the string. - * It returns the number of _bytes_ (NOT characters) parsed through - * the inStr to get to the end of the returned token. - */ -static int -GetToken( - char *inStr, - char **outStr) -{ - size_t mbCurMax = MB_CUR_MAX; - wchar_t curChar; - int i, numBytes, byteLen = strlen(inStr); - char *tok; - - /* - * read through any leading white space. - */ - for(i = 0, numBytes = 0; i < byteLen; i += numBytes) - { - numBytes = mbtowc(&curChar, &inStr[i], mbCurMax); - if(!iswspace(curChar)) - break; - } - tok = inStr + i; - - /* - * find the end of the token. - */ - byteLen = strlen(tok); - for(i = 0, numBytes = 0; i < byteLen; i += numBytes) - { - numBytes = mbtowc(&curChar, &tok[i], mbCurMax); - if(iswspace(curChar)) - break; - } - - if((*outStr = (char *)xalloc(i + 1)) == (char *)NULL) - return 0; - strncpy(*outStr, tok, i); - (*outStr)[i] = (char)'\0'; - return (tok + i) - inStr; -} - -static void -FreeVector( - char **vector) -{ - int i; - - if(vector == (char **)NULL) return; - - for(i = 0; vector[i] != (char *)NULL; i++) - xfree(vector[i]); - xfree(vector); -} - - -/* - * AddVector appends the pAddition arg vector to the pTarget arg vector. - * If the pTarget cannot be realloc'd, then pTarget is set to NULL. - */ -static void -AddVector( - char ***pTarget, - char **pAddition) -{ - int numTarget, numAdd, i; - - for(numTarget = 0; (*pTarget)[numTarget] != (char *)NULL; numTarget++) - ; - for(numAdd = 0; pAddition[numAdd] != (char *)NULL; numAdd++) - ; - - *pTarget = (char **)xrealloc((void *)*pTarget, (numTarget + numAdd + 1) * - sizeof(char *)); - if(*pTarget == (char **)NULL) - return; - for(i = 0; i < numAdd; i++) - (*pTarget)[numTarget + i] = pAddition[i]; - - (*pTarget)[numTarget + numAdd] = (char *)NULL; -} - -static char ** -BuildArgVector( - char *argString, - XpContextPtr pContext) -{ - char **pVector; - char *curTok; - int numChars, i; - static int beenHere = 0; /* prevent recursion on embedded %options% - */ - - pVector = (char **)xalloc(sizeof(char *)); - pVector[0] = (char *)NULL; - for(i = 0; (numChars = GetToken(argString, &curTok)) != 0; - i++, argString += numChars) - { - if(beenHere || strcmp(curTok, "%options%")) - { - if(curTok[0] == (char)'\0') - { - xfree(curTok); - } - else - { - pVector = (char **)xrealloc((void *)pVector, - (i + 2)*sizeof(char *)); - if(pVector == (char **)NULL) - return (char **)NULL; - pVector[i] = curTok; - pVector[i + 1] = (char *)NULL; - } - } - else if(!beenHere) - { - char **optionsVec; - - curTok = ReplaceAllKeywords(pContext, curTok); - beenHere = 1; - optionsVec = BuildArgVector(curTok, pContext); - xfree(curTok); - beenHere = 0; - AddVector(&pVector, optionsVec); - xfree(optionsVec); - } - } - if(numChars == 0 && curTok != (char *)NULL) - xfree(curTok); - return pVector; -} - -/* - * VectorizeCommand takes a string and breaks it into a command name and - * an array of character pointers suitable for handing to execv. The - * array is NULL-terminated. - * The returned char * is the command name, and should be freed when no - * longer needed. The array elements returned in the pVector parameter - * should be individually freed, and the array itself should also be - * freed when no longer needed. - */ -static char * -VectorizeCommand( - char *command, - char ***pVector, - XpContextPtr pContext) -{ - char *cmdName; - int numChars; - - if(command == (char *)NULL) - return (char *)NULL; - - numChars = GetToken(command, &cmdName); - - if(cmdName == (char *)NULL) - return (char *)NULL; - - /* Mangle the command name, too... */ - cmdName = ReplaceAllKeywords(pContext, cmdName); - - if(cmdName == (char *)NULL) - return (char *)NULL; - - *pVector = BuildArgVector(command, pContext); - - return cmdName; -} - -int -XpSubmitJob(fileName, pContext) - char *fileName; - XpContextPtr pContext; -{ - char **vector, *cmdNam, *command, *userName; - int i; - - command = XpGetOneAttribute(pContext, XPPrinterAttr, "xp-spooler-command"); - if(command == (char *)NULL || strlen(command) == 0) - { - if( spooler_type ) - { - command = strdup(spooler_type->spool_command); - } - else - { - ErrorF("XpSubmitJob: No default spool command defined.\n"); - } - } - else - { - command = strdup(command); - } - if(command == (char *)NULL) - { - ErrorF("XpSubmitJob: No spooler command found, cannot submit job.\n"); - return BadAlloc; - } - - cmdNam = VectorizeCommand(command, &vector, pContext); - xfree(command); - - if(cmdNam == (char *)NULL) - return BadAlloc; - - for(i = 0; vector[i] != (char *)NULL; i++) - { - vector[i] = ReplaceAllKeywords(pContext, vector[i]); - if(vector[i] == (char *)NULL) - { - xfree(cmdNam); - for(i = 0; vector[i] != (char *)NULL; i++) - xfree(vector[i]); - xfree(vector); - return BadAlloc; - } - } - - userName = XpGetOneAttribute(pContext, XPJobAttr, "job-owner"); - if(userName != (char *)NULL && strlen(userName) == 0) - userName = (char *)NULL; - - SendFileToCommand(pContext, fileName, cmdNam, vector, userName); - - FreeVector(vector); - xfree(cmdNam); - - return Success; -} - -/* - * SearchInputTrays() - * - * Given a tray, return the medium in the tray. Conversely, given a - * medium, return a tray in which it can be found. In either case, - * return NULL if the given tray or medium cannot be found. - */ -#define TRAY 0 -#define MEDIUM 1 - -static char * -SearchInputTrays(XpContextPtr pCon, - int which, - char *val) -{ - char *inputTraysMedium, tray[80], medium[80], *copy; - char *pS, *pE, *pLast; - - inputTraysMedium = XpGetOneAttribute( pCon, XPPrinterAttr, - "input-trays-medium" ); - - copy = strdup( inputTraysMedium ); - pS = copy; - pLast = copy + strlen( copy ); - - while( pS < pLast ) - { - while( *pS && *pS != '{' ) - pS++; - - pE = ++pS; - while( *pE && *pE != '}' ) - pE++; - *pE = '\0'; - - sscanf( pS, "%s %s", tray, medium ); - - if( which == MEDIUM && !strcmp( val, medium ) ) - { - xfree( copy ); - return strdup( tray ); - } - - if( which == TRAY && !strcmp( val, tray ) ) - { - xfree( copy ); - return strdup( medium ); - } - - pS = pE + 1; - } - - xfree( copy ); - return strdup( NULL_STRING ); -} - -/* - * XpGetTrayMediumFromContext() - * - * Given a print context, hit the input-trays-medium, - * default-input-tray and default-medium attributes to find the - * appropriate tray to use, and the medium in that tray. - */ -void -XpGetTrayMediumFromContext(XpContextPtr pCon, - char **medium, - char **tray) -{ - char *defMedium, *defTray; - char *t, *m; - - defMedium = XpGetOneAttribute( pCon, XPPageAttr, - "default-medium" ); - if( *defMedium == '\0' ) - defMedium = XpGetOneAttribute( pCon, XPDocAttr, - "default-medium" ); - - defTray = XpGetOneAttribute( pCon, XPPageAttr, - "default-input-tray" ); - if( *defTray == '\0' ) - defTray = XpGetOneAttribute( pCon, XPDocAttr, - "default-input-tray" ); - - /* - * First, check to see if the default tray has the default medium - * installed. This is the ideal case. - */ - m = SearchInputTrays( pCon, TRAY, defTray ); - if( !strcmp( m, defMedium ) ) - { - xfree( m ); - *tray = strdup( defTray ); - *medium = strdup( defMedium ); - return; - } - - /* - * If the default tray doesn't have the default medium, search for - * a tray which has the default medium. - */ - t = SearchInputTrays( pCon, MEDIUM, defMedium ); - if( t ) - { - *tray = t; - *medium = strdup( defMedium ); - return; - } - - /* - * If all else fails, just return the default tray, and whatever - * medium happens to be there. Note that we simply return - * whatever is in the attribute store. Any further correction is - * left up to the DDX driver. - */ - *tray = strdup( defTray ); - *medium = m; - xfree( t ); -} diff --git a/hw/xprint/attributes.h b/hw/xprint/attributes.h deleted file mode 100644 index 26864a2f0..000000000 --- a/hw/xprint/attributes.h +++ /dev/null @@ -1,130 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _Xp_attributes_h -#define _Xp_attributes_h 1 - -#include "scrnintstr.h" -#include "AttrValid.h" - -#define BFuncArgs int ndx, ScreenPtr pScreen, int argc, char **argv -typedef Bool (*pBFunc)(BFuncArgs); - -#define VFuncArgs char *name, XpValidatePoolsRec *pValRec, float *width, float *height, int *res -typedef void (*pVFunc)(VFuncArgs); - -/* - * attributes.c - */ -void XpInitAttributes(XpContextPtr pContext); -void XpBuildAttributeStore(char *printerName, - char *qualifierName); -void XpAddPrinterAttribute(char *printerName, - char *printerQualifier, - char *attributeName, - char *attributeValue); -void XpDestroyAttributes(XpContextPtr pContext); -char *XpGetConfigDir(Bool useLocale); -char *XpGetOneAttribute(XpContextPtr pContext, - XPAttributes class, - char *attributeName); -void XpPutOneAttribute(XpContextPtr pContext, - XPAttributes class, - const char* attributeName, - const char* value); -int XpRehashAttributes(void); -char *XpGetAttributes(XpContextPtr pContext, - XPAttributes class); -int XpAugmentAttributes(XpContextPtr pContext, - XPAttributes class, - char *attributes); -int XpSetAttributes(XpContextPtr pContext, - XPAttributes class, - char *attributes); -const char *XpGetPrinterAttribute(const char *printerName, - const char *attribute); -void XpGetTrayMediumFromContext(XpContextPtr pCon, - char **medium, - char **tray); -int XpSubmitJob(char *fileName, XpContextPtr pContext); - -/* - * mediaSizes.c - */ -int XpGetResolution(XpContextPtr pContext); -XpOid XpGetContentOrientation(XpContextPtr pContext); -XpOid XpGetAvailableCompression(XpContextPtr pContext); -XpOid XpGetPlex(XpContextPtr pContext); -XpOid XpGetPageSize(XpContextPtr pContext, - XpOid* pTray, - const XpOidMediumSS* msss); -void XpGetMediumMillimeters(XpOid page_size, - float *width, - float *height); -void XpGetMediumDimensions(XpContextPtr pContext, - unsigned short *width, - unsigned short *height); -void XpGetReproductionArea(XpContextPtr pContext, - xRectangle *pRect); -void XpGetMaxWidthHeightRes(const char *printer_name, - const XpValidatePoolsRec* vpr, - float *width, - float *height, - int* resolution); - -/* Util.c */ -char *ReplaceAnyString(char *string, - char *target, - char *replacement); -char *ReplaceFileString(char *string, - char *inFileName, - char *outFileName); -int TransferBytes(FILE *pSrcFile, - FILE *pDstFile, - int numBytes); -Bool CopyContentsAndDelete(FILE **ppSrcFile, - char **pSrcFileName, - FILE *pDstFile); -int XpSendDocumentData(ClientPtr client, - FILE *fp, - int fileLen, - int maxBufSize); -int XpFinishDocData(ClientPtr client); -Bool XpOpenTmpFile(char *mode, - char **fname, - FILE **stream); - -#endif /* _Xp_attributes_h */ diff --git a/hw/xprint/config/C/Makefile.am b/hw/xprint/config/C/Makefile.am deleted file mode 100644 index 0390ed2d4..000000000 --- a/hw/xprint/config/C/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = print diff --git a/hw/xprint/config/C/print/Makefile.am b/hw/xprint/config/C/print/Makefile.am deleted file mode 100644 index e3c01da60..000000000 --- a/hw/xprint/config/C/print/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -SUBDIRS = attributes ddx-config models - -xpcdir = @xpconfigdir@/C/print - - -Xprinters.ghostscript: $(srcdir)/Xprinters - sed < $(srcdir)/Xprinters "s/#Printer xp_pdf_spooldir_tmp_Xprintjobs/Printer xp_pdf_spooldir_tmp_Xprintjobs/" > Xprinters.ghostscript - - - -dist_xpc_DATA = Xprinters -xpc_DATA = Xprinters.ghostscript - -CLEANFILES = Xprinters.ghostscript diff --git a/hw/xprint/config/C/print/Xprinters b/hw/xprint/config/C/print/Xprinters deleted file mode 100644 index a32c02dc2..000000000 --- a/hw/xprint/config/C/print/Xprinters +++ /dev/null @@ -1,49 +0,0 @@ -######################################################################## -# -# $Xorg: Xprinters,v 1.3 2000/08/17 19:48:02 cpqbld Exp $ -# -# X*printers sample configuration file -# -# -# This file belongs in /usr/lib/X11/X*printers, where the "*" is the -# display number of the server. For example, if the server is -# invoked using the command X :0, then the X0printers file is used. -######################################################################## - -######################################################################## -# Use lpstat to augment the list of printers managed by the -# server. (This is the default behavior if the X*printers file does -# not exist, or if an "Augment_Printer_List" line is not specified.) -######################################################################## -#Augment_Printer_List %(default)% - -######################################################################## -# Use the specified command pipeline to augment the list of printers -# managed by the server. -######################################################################## -#Augment_Printer_List lpstat -a | cut -d " " -f 1 # equivalent to default - -######################################################################## -# Do not augment the list of printers managed by the server. -######################################################################## -#Augment_Printer_List %none% - -######################################################################## -# Preconfigured entry for the PSspooldir model -# (which sends jobs to /tmp/Xprintjobs instead to a physical printer) -######################################################################## -#Printer xp_pdf_spooldir_tmp_Xprintjobs -Printer xp_ps_spooldir_tmp_Xprintjobs - -######################################################################## -# Add individual printers to the list of printers managed by the -# server. These are aliases, determined by driver name. -######################################################################## - - -# EXAMPLES -# -# Printer xppspr -# Printer xppclpr -# Printer xppclmonopr -# Printer xprasterpr diff --git a/hw/xprint/config/C/print/attributes/Makefile.am b/hw/xprint/config/C/print/attributes/Makefile.am deleted file mode 100644 index 0d2cceaff..000000000 --- a/hw/xprint/config/C/print/attributes/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/attributes - -dist_xpc_DATA = document job printer diff --git a/hw/xprint/config/C/print/attributes/document b/hw/xprint/config/C/print/attributes/document deleted file mode 100644 index b1651bd94..000000000 --- a/hw/xprint/config/C/print/attributes/document +++ /dev/null @@ -1,49 +0,0 @@ -# $Xorg: document,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# Document DPA-Object initial attribute values - -# Attribute IDs must be qualified by using one of the following -# (listed in order of precedence): -# -# printer-name -# Set this attribute for a specific printer. -# Example: "dj_1.plex: duplex" -# -# printer-model -# Set this attribute for all printers of a specific model. -# Example: "HPDJ1600C.plex: duplex" -# -# '*' -# Set this attribute for all printers. -# Example: "*.plex: duplex" - - -*content-orientation: portrait -*copy-count: 1 -*default-medium: iso-a4 -*default-printer-resolution: 600 - -# "PSspooldir" jobs should always be 300 DPI -# (to be compatible to DPS-based PostScript viewers such as sdtimage) -PSspooldir.default-printer-resolution: 300 - -# "PS2PDFspooldir-GS" jobs should always be 600 DPI -PS2PDFspooldir-GS.default-printer-resolution: 600 - -# Some resolution defaults to make applications happy which are too lazy -# to pick an own default in absence of "default-printer-resolution" -HPLJ4050-PS.default-printer-resolution: 600 -SPSPARC2.default-printer-resolution: 300 -CANONBJ10E-GS.default-printer-resolution: 360 -CANONC3200-PS.default-printer-resolution: 600 - -# EXAMPLES -# -# *content-orientation: landscape -# *copy-count: 3 -# *default-input-tray: main -# *default-medium: iso-a4 -# *default-printer-resolution: 600 -# *document-format: {PCL 5} -# *plex: simplex -# *xp-listfonts-modes: xp-list-internal-printer-fonts - diff --git a/hw/xprint/config/C/print/attributes/job b/hw/xprint/config/C/print/attributes/job deleted file mode 100644 index aa1911dcd..000000000 --- a/hw/xprint/config/C/print/attributes/job +++ /dev/null @@ -1,25 +0,0 @@ -# $Xorg: job,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# Job DPA-Object initial attribute values - -# Attribute IDs must be qualified by using one of the following -# (listed in order of precedence): -# -# printer-name -# Set this attribute for a specific printer. -# Example: "laser_1.job-priority: 1" -# -# printer-model -# Set this attribute for all printers of a specific model. -# Example: "HPDJ1600C.job-priority: 1" -# -# '*' -# Set this attribute for all printers. -# Example: "*.job-priority: 1" - -*notification-profile: {} - -# EXAMPLES -# -# *job-name: Example Job Name -# *notification-profile: {{event-report-job-completed} electronic-mail} -# *xp-spooler-command-options: -onb diff --git a/hw/xprint/config/C/print/attributes/printer b/hw/xprint/config/C/print/attributes/printer deleted file mode 100644 index 41e13b44b..000000000 --- a/hw/xprint/config/C/print/attributes/printer +++ /dev/null @@ -1,96 +0,0 @@ -# $Xorg: printer,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# Printer DPA-Object initial attribute values - -# Attribute IDs must be qualified by using one of the following -# (listed in order of precedence): -# -# printer-name -# Set this attribute for a specific printer. -# Example: "dj_1.document-formats-ready: {pcl 5}" -# -# printer-model -# Set this attribute for all printers of a specific model. -# Example: "HPDJ1600C.document-formats-ready: {pcl 5}" -# -# '*' -# Set this attribute for all printers. -# Example: "*.document-formats-ready: {pcl 5}" - -# Remove this line and replace them with per printer settings -# if you want to use more than one DDX!! -*xp-model-identifier: PSdefault - - -# Sample entry for the "PSspooldir" model -# Just add a printer called "xp_ps_spooldir_tmp_Xprintjobs" to "Xprinters" -# and you will get an extra printer which files the PostScript jobs -# in the "/tmp/Xprintjobs/" directory. -xp_ps_spooldir_tmp_Xprintjobs.xp-model-identifier: PSspooldir - -# Sample entry for the "PS2PDFspooldir-GS" model -# Just add a printer called "xp_pdf_spooldir_tmp_Xprintjobs" to "Xprinters" -# and you will get an extra printer which convertes the PostScript jobs -# to PDF using "ps2pdf" and files them into the "/tmp/Xprintjobs/" directory. -# NOTE: Future versions of Xprint will use the PDF DDX instead directly -# instead of relying on GhostScript/ps2pdf... -xp_pdf_spooldir_tmp_Xprintjobs.xp-model-identifier: PS2PDFspooldir-GS - - -# IMPORTANT EXAMPLES -# -# The following are examples of how a printer name is bound -# to a model-config file and ddx driver. -# -# Warning: most X-Servers have a hard limit on the number of ddx -# drivers (ie, screens) they can support at runtime (usually 3 or -# 4). Whatever the number of printers, they cannot create a -# dependency for more than the limit on ddx drivers. Assuming -# "Xprinters" listed all four xp*pr printers below, X-Servers -# with a limit of 3 would not work. -# -# xppspr.xp-model-identifier: HPDJ1600C -# xppspr.xp-ddx-identifier: XP-POSTSCRIPT -# xppspr.document-formats-ready: { PostScript 2 } -# -# xppclpr.xp-model-identifier: HPDJ1600C -# xppclpr.xp-ddx-identifier: XP-PCL-COLOR -# xppclpr.document-formats-ready: { PCL 5 } -# -# xppclmonopr.xp-model-identifier: HPDJ1600C -# xppclmonopr.xp-ddx-identifier: XP-PCL-MONO -# xppclmonopr.document-formats-ready: { PCL 5 } -# -# xprasterpr.xp-model-identifier: HPDJ1600C -# xprasterpr.xp-ddx-identifier: XP-RASTER - - -# MORE EXAMPLES of items often configured in this file -# -# *descriptor: This printer has not been given a name -# *dt-pdm-command: dtpdm -# *input-trays-medium: {top na-letter} {bottom iso-a4} -# *xp-model-identifier: HPDJ1600C -# *xp-spooler-command: /opt/mystuff/bin/mylp -p %printer-name% -c %copy-count% \ -# -j %job-name% -o %options% - - -# USUALLY SET BY THE ddx driver -# -# *content-orientations-supported: portrait landscape reverse-portrait reverse-landscape - - -# USUALLY SET BY THE model-config FILE -# -# *document-formats-supported: {PCL 5} -# *medium-source-sizes-supported: \ -# { top {iso-a4 FALSE {10 200 10 287}} {iso-a5 FALSE {10 138 10 200}} } \ -# { bottom {iso-a4 FALSE {10 200 10 287}} {iso-a5 FALSE {10 138 10 200}} } -# *plexes-supported: simplex duplex tumble -# *printer-model: Hewlett-Packard LaserJet IV -# *printer-resolutions-supported: 300 -# *xp-ddx-identifier: XP-PCL-COLOR -# *xp-embedded-formats-supported: {PCL 5} {HPGL 2} -# *xp-listfonts-modes-supported: xp-list-internal-printer-fonts -# *xp-raw-formats-supported: {PCL 5} -# *xp-setup-proviso: xp-setup-optional - diff --git a/hw/xprint/config/C/print/ddx-config/Makefile.am b/hw/xprint/config/C/print/ddx-config/Makefile.am deleted file mode 100644 index 907edca75..000000000 --- a/hw/xprint/config/C/print/ddx-config/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = raster diff --git a/hw/xprint/config/C/print/ddx-config/raster/Makefile.am b/hw/xprint/config/C/print/ddx-config/raster/Makefile.am deleted file mode 100644 index 79bfb59df..000000000 --- a/hw/xprint/config/C/print/ddx-config/raster/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/ddx-config/raster - -dist_xpc_DATA = pcl postscript diff --git a/hw/xprint/config/C/print/ddx-config/raster/pcl b/hw/xprint/config/C/print/ddx-config/raster/pcl deleted file mode 100644 index 15d33e7b3..000000000 --- a/hw/xprint/config/C/print/ddx-config/raster/pcl +++ /dev/null @@ -1,39 +0,0 @@ -# $Xorg: pcl,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# This is the file which you should customize to include the printers that -# will print through the raster driver. The early part of this file -# specifies some commn useful defaults. You can override them when -# you list your printers in the second part of this file. This file is -# an X Resource file. To learn more about this file format, consult -# the functional specification. - -# Note that the reference printer for CDEnext is the HP DeskJet 1600C. -# This driver may work for other printers, but the reference printer -# is the only officially supported printer. - - -# DEFAULTS -# ======== - -# The attributes below apply to all printers unless the section below -# specifies something different for the printer. - -# Default printer attributes -# -------------------------- -# Printer attributes control the choices that users will see in the -# setup dialog for those printers. - -# The attributes below apply to all printes unless the section below -# specifies something different for the printer. - -*.media-ready: na-letter-white -*.descriptor: Printer supported by CDEnext DtPrint System. -*.printer-model: HPDJ1600C - -# Printer Specifics - -# Use this section to override the defaults listed above or to override the -# printer attributes described in the model file. -# The lines describing "laser" are just a sample to help you get started. - -# laser.printer-name: laser -# laser.spooler-name: laser diff --git a/hw/xprint/config/C/print/ddx-config/raster/postscript b/hw/xprint/config/C/print/ddx-config/raster/postscript deleted file mode 100644 index e69de29bb..000000000 diff --git a/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am b/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am deleted file mode 100644 index 951b9af97..000000000 --- a/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/CANONBJ10E-GS - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config b/hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config deleted file mode 100644 index 97bfd8196..000000000 --- a/hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config +++ /dev/null @@ -1,23 +0,0 @@ -# $Xprint.org: CANONBJ10E-GS model-config,v 1.4 2003/02/10 14:48:04 gisburn Exp $ - -*content-orientations-supported: portrait landscape -*descriptor: Canon BJ-10e (GhostScript) -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ -} - -*plexes-supported: simplex -*printer-model: "Canon BJ-10e (GhostScript)" -*printer-resolutions-supported: 360 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional -# EOF. diff --git a/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am b/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am deleted file mode 100644 index 771b40864..000000000 --- a/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/CANONC3200-PS - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am b/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am deleted file mode 100644 index 7a7ecc31a..000000000 --- a/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/CANONC3200-PS/fonts - -parentdir = ../../PSdefault/fonts - -XPFONTS = \ - AvantGarde-Book.pmf \ - AvantGarde-BookOblique.pmf \ - AvantGarde-Demi.pmf \ - AvantGarde-DemiOblique.pmf \ - Courier-Bold.pmf \ - Courier-BoldOblique.pmf \ - Courier-Oblique.pmf \ - Courier.pmf \ - Helvetica-Bold.pmf \ - Helvetica-BoldOblique.pmf \ - Helvetica-Oblique.pmf \ - Helvetica.pmf \ - LubalinGraph-Book.pmf \ - LubalinGraph-BookOblique.pmf \ - LubalinGraph-Demi.pmf \ - LubalinGraph-DemiOblique.pmf \ - NewCentSchlbk-Bold.pmf \ - NewCentSchlbk-BoldItal.pmf \ - NewCentSchlbk-Ital.pmf \ - NewCentSchlbk-Roman.pmf \ - Souvenir-Demi.pmf \ - Souvenir-DemiItalic.pmf \ - Souvenir-Light.pmf \ - Souvenir-LightItalic.pmf \ - Symbol.pmf \ - Times-Bold.pmf \ - Times-BoldItalic.pmf \ - Times-Italic.pmf \ - Times-Roman.pmf \ - ZapfDingbats.pmf - -dest = $(DESTDIR)$(xpcdir) - -remove-stuff: - for x in $(XPFONTS) ; do \ - rm -f $(dest)/$$x ; \ - done - - @rm -f $(dest)/fonts.dir - -install-data-hook: remove-stuff - mkdir -p $(dest) ; \ - for x in $(XPFONTS) ; do \ - ln -s $(parentdir)/$$x $(dest)/$$x ; \ - done - - $(MKFONTSCALE) -b -s -l $(dest) - -uninstall-hook: remove-stuff diff --git a/hw/xprint/config/C/print/models/CANONC3200-PS/model-config b/hw/xprint/config/C/print/models/CANONC3200-PS/model-config deleted file mode 100644 index cdb3f4958..000000000 --- a/hw/xprint/config/C/print/models/CANONC3200-PS/model-config +++ /dev/null @@ -1,40 +0,0 @@ -# $Xprint.org: CANONC3200-PS model-config,v 1.1 2004/06/24 09:18:04 gisburn Exp $ -# model-config for the PostScript DDX -# -# automatically generated by xpppdtomodelconfig V0.1 -# -# DO NOT MODIFY THIS FILE!! -# -# Attributes supported for this printer model -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: Canon iR C3200 -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {iso-a4 FALSE {4.002 206 4.002 293}}\ - {na-letter FALSE {4.002 211.9 4.002 275.4}}\ - {na-legal FALSE {4.002 211.9 4.002 351.6}}\ - {iso-a3 FALSE {4.002 293 4.002 416}}\ - {iso-a5 FALSE {4.002 144 4.002 206}}\ - {iso-b4 FALSE {4.002 246 4.002 349}}\ - {iso-b5 FALSE {4.002 172 4.002 246}}\ - {executive FALSE {4.002 180.1 4.002 262.7}}\ - {invoice FALSE {4.002 135.7 4.002 211.9}}\ - {monarch-envelope FALSE {4.002 94.3 4.002 186.5}}\ - {na-number-10-envelop FALSE {4.002 100.8 4.002 237.3}}\ - {iso-c5 FALSE {4.002 158 4.002 225}}\ -} - -*plexes-supported: simplex duplex tumble -*printer-model: "Canon iR C3200" -*printer-resolutions-supported: 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/GSdefault/Makefile.am b/hw/xprint/config/C/print/models/GSdefault/Makefile.am deleted file mode 100644 index be0426c76..000000000 --- a/hw/xprint/config/C/print/models/GSdefault/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/GSdefault - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/GSdefault/model-config b/hw/xprint/config/C/print/models/GSdefault/model-config deleted file mode 100644 index 61dac18b8..000000000 --- a/hw/xprint/config/C/print/models/GSdefault/model-config +++ /dev/null @@ -1,137 +0,0 @@ -# $Xprint.org: GSdefault model-config,v 1.1 2003/02/10 14:48:04 gisburn Exp $ -# Generic default model-config for the PostScript DDX when using GhostScript -# as printer driver -# -# DO NOT MODIFY THIS FILE!! -# -# If you want to make customisations for your printer create a copy -# of this printer model. -# Example (for creating a model config "MYCOMPANYlaserxx"): -# 1. Create model config dir: -# % mkdir MYCOMPANYlaserxx -# 2. Link (or copy) the PMF (printer font metrics) for the -# printer buildin fonts: -# % ln -s GSdefault/fonts MYCOMPANYlaserxx/. -# 3. Copy the model config file: -# % cp GSdefault/model-config MYCOMPANYlaserxx/. -# 4. Customize MYCOMPANYlaserxx/model-config to match your needs. -# - -# Attributes supported for this printer model -# You may want to cut the lists here down to the attributes supported -# by your printer. -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: GhostScript default model -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ - {executive FALSE {6.35 177.80 6.35 260.35}}\ - {folio FALSE {6.35 204.47 6.35 323.85}}\ - {invoice FALSE {6.35 133.35 6.35 209.55}}\ - {ledger FALSE {6.35 273.05 6.35 425.45}}\ - {quarto FALSE {6.35 209.55 6.35 268.732}}\ - {a FALSE {6.35 209.55 6.35 273.05}}\ - {b FALSE {6.35 273.05 6.35 425.45}}\ - {c FALSE {6.35 425.45 6.35 552.45}}\ - {d FALSE {6.35 552.45 6.35 857.25}}\ - {e FALSE {6.35 857.25 6.35 1111.25}}\ - {na-6x9-envelope FALSE {6.35 146.05 6.35 222.25}}\ - {na-10x15-envelope FALSE {6.35 247.65 6.35 374.65}}\ - {monarch-envelope FALSE {6.35 91.948 6.35 184.15}}\ - {na-10x13-envelope FALSE {6.35 247.65 6.35 323.85}}\ - {na-9x12-envelope FALSE {6.35 222.25 6.35 298.45}}\ - {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}}\ - {na-7x9-envelope FALSE {6.35 171.45 6.35 222.25}}\ - {na-9x11-envelope FALSE {6.35 222.25 6.35 273.05}}\ - {na-10x14-envelope FALSE {6.35 247.65 6.35 349.25}}\ - {na-number-9-envelope FALSE {6.35 92.075 6.35 219.075}}\ - {iso-a0 FALSE {6.35 834.65 6.35 1182.65}}\ - {iso-a1 FALSE {6.35 587.65 6.35 834.65}}\ - {iso-a2 FALSE {6.35 413.65 6.35 587.65}}\ - {iso-a3 FALSE {6.35 290.65 6.35 413.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {iso-a5 FALSE {6.35 141.65 6.35 203.65}}\ - {iso-a6 FALSE {6.35 98.65 6.35 141.65}}\ - {iso-a7 FALSE {6.35 67.65 6.35 98.65}}\ - {iso-a8 FALSE {6.35 45.65 6.35 67.65}}\ - {iso-a9 FALSE {6.35 30.65 6.35 45.65}}\ - {iso-a10 FALSE {6.35 19.65 6.35 30.65}}\ - {iso-b1 FALSE {6.35 700.65 6.35 993.65}}\ - {iso-b2 FALSE {6.35 493.65 6.35 700.65}}\ - {iso-b3 FALSE {6.35 346.65 6.35 493.65}}\ - {iso-b4 FALSE {6.35 243.65 6.35 346.65}}\ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {iso-b6 FALSE {6.35 118.65 6.35 169.65}}\ - {iso-b7 FALSE {6.35 81.65 6.35 118.65}}\ - {iso-b8 FALSE {6.35 55.65 6.35 81.65}}\ - {iso-b9 FALSE {6.35 37.65 6.35 55.65}}\ - {iso-b10 FALSE {6.35 24.65 6.35 37.65}}\ - {jis-b1 FALSE {6.35 721.65 6.35 1023.65}}\ - {jis-b2 FALSE {6.35 508.65 6.35 721.65}}\ - {jis-b3 FALSE {6.35 357.65 6.35 508.65}}\ - {jis-b4 FALSE {6.35 250.65 6.35 357.65}}\ - {jis-b5 FALSE {6.35 175.65 6.35 250.65}}\ - {jis-b6 FALSE {6.35 121.65 6.35 175.65}}\ - {jis-b7 FALSE {6.35 84.65 6.35 121.65}}\ - {jis-b8 FALSE {6.35 57.65 6.35 84.65}}\ - {jis-b9 FALSE {6.35 38.65 6.35 57.65}}\ - {jis-b10 FALSE {6.35 25.65 6.35 38.65}}\ - {iso-c3 FALSE {6.35 317.65 6.35 451.65}}\ - {iso-c4 FALSE {6.35 222.65 6.35 317.65}}\ - {iso-c5 FALSE {6.35 155.65 6.35 222.65}}\ - {iso-c6 FALSE {6.35 107.65 6.35 155.65}}\ - {iso-designated-long FALSE {6.35 103.65 6.35 213.65}}\ - {hp-2x-postcard FALSE {6.35 141.65 6.35 193.65}}\ - {hp-european-edp FALSE {6.35 298.45 6.35 349.25}}\ - {hp-mini FALSE {6.35 133.35 6.35 209.55}}\ - {hp-postcard FALSE {6.35 93.65 6.35 141.65}}\ - {hp-tabloid FALSE {6.35 273.05 6.35 425.45}}\ - {hp-us-edp FALSE {6.35 273.05 6.35 349.25}}\ - {hp-us-government-legal FALSE {6.35 196.85 6.35 323.85}}\ - {hp-us-government-letter FALSE {6.35 196.85 6.35 247.65}}\ -} -# If you have more than one tray use the following example: -# 1. List the supported trays -#*input-trays-supported: main manual -# 2. Define each tray and it's paper sizes -#*medium-source-sizes-supported: \ -#{ main \ -# {na-letter FALSE {6.35 209.55 6.35 273.05}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {iso-a4 FALSE {6.35 203.65 6.35 290.65}} \ -#} \ -#{ manual \ -# {iso-a5 FALSE {6.35 141.65 6.35 203.65}} \ -# {iso-c5 FALSE {6.35 155.65 6.35 222.65}} \ -# {iso-designated-long FALSE {6.35 103.65 6.35 213.65}} \ -# {jis-b5 FALSE {6.35 175.65 6.35 250.65}} \ -# {monarch-envelope FALSE {6.35 91.948 6.35 184.15}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}} \ -# {executive FALSE {6.35 177.8 6.35 260.35}} \ -# {iso-a3 FALSE {6.35 290.65 6.35 413.65}} \ -# {iso-a0 FALSE {6.35 834.65 6.35 1182.65}} \ -#} -*plexes-supported: simplex duplex tumble -*printer-model: "GhostScript default model" -# 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, -# 940, 1200 and 2440 are supported DPI values, we limit it here -# to some common values: -*printer-resolutions-supported: 300 360 400 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional - -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -# xp-psddx-download-fonts defines which fonts should be downloaded as outlines -# (valid types are "pfa", "pfb", "ttf", "ttc", "otf", "otc") -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -# xp-psddx-download-font-type defines which font type is used to download outlines -# (valid values are "bitmap", "pstype1" and "pstype3") -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am b/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am deleted file mode 100644 index 1c8b3b5c6..000000000 --- a/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/HPDJ1600C - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00051.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00051.pmf deleted file mode 100644 index 09cc489a5e153c8c3e5fcf2fbbb021ecc2f1ba59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 zcmdUzd2kd}9>>2uxkDzC%tbOGFbStD6Os^O0<17(1~M2XVP--SL?WjkM<9TR3Lc<{ z2y%#WqaX-IM1*juC>G_e$GYlPt)3@Lg6mjtknuaqPqqN} z>i6&Pex{W-%qQxfKn6H9P1%Xawi9`Eh#+!EPa%qlSBRk`AVdurBgAwvgX9MJHJ>D% z;MZayzTnp?Lu{ciALZ9>QEDIAPj;N+*Kv{Z0r^;nv*b(S5{>>ytRaRae#u==VTP*y zV54v`1<4dSygHXt^kOEZfGiR}xhYnP6t=7!6oP>%?+ft>$J9k($|V)do6<~iGi&~F zIK@n+D90&8FXZT(Rt~AG4*EiMD61S^RXsH1tttqGvbfpCO9nKHYfq@-_Y+YkO=S*1^uEI^sJs=i!y1GR=2Qpqs9;W9saA+^u1 z-Dv&Ah-$A-Z%X_OPxMH6jM4F29uZHYN9(=EQ*wPtp{KBKem=j7^sg#UQDIR@zDEz! zQvjcTh_|{TQZIUfsR=*D#HQM79%&3B3x-V2L0hM2Ot~?1Z6C8|BBVAeR9|9o8r4mUvX3P z{K<3H0VKYjTb=t&?&3tTovz_y*2=slE@Fp>kEtkmSxPha<^<|LrhRRD(N%no8w(em zNzNA629d6ux1Vyhbm$pFZ^0+-mYgO%y}~`RQ;xH@$P-ha6cP1^vZl?JUg_Ok#c_MD z)Umf&C$Y}r@A?Aqe{!A9X|i`#F97QP7i;u&7gu*?L&S9Dh1%dT!7z>=E&Ax=!XarJuO8@yc}N zxMh3VVtw4|+-q~1vZlr?U_IGct6k4){W5iPuFL46_i=vvbs2xqW0;az)t0ByKHC0+ zo_~d{Ow5;PS6P#JjCr(}OEULneXr*k)h^9kqv_TU%p)uVIWGs;mqgc*%qe=FO50|m z9(A{S73WvhskXSzWS44MnVfyFQ;uH$2uF=`fSz9K?kv*ds#&KaGu#&cr|F%o)3p5R zK4*W&dcCcz%;hpRF@^=MKf6-&wzlN7wza#$^>|zQp!VmCdBF$HCk$txK?)nbIwyQg>m$&>gP5I4oru`PX6+J^M*)@^c~L~Iv0w)|(r&-t`a z+F~soAKK>IBTQ$^IG659e@jbO-!*?D_m0T_jcta_V%-*>%DG6k&6W9?tSCtxl6z+P zM3&Zjl4^w(`$EZbe91A<+PajKk=)bJ*@rtWWc{LSyls{}qG`Nq&$s`ewW~O6heW!l z2m5W+hE}YpucvO(^M7rANoq09e>1;t{@Ll1@weE9G5-y64QE*Y!I*ClZK++e24{`X z^-jlUj`f;ueZ$r)^2oMe*=aecrJD{}tYZ8V{s|=PPnwh7J@cp-Thnuv1S386jPpaFI*WsnF?DOoAw8nUrjs3;ejs0B}$A?1AThbFR z@YySIl7;J>FllkK$Vm+p0c!JX`j^ee5- zt81+uRr;0QmuR2Nb?lU$$+jRp$2CT@dv%@hW>lVGQTlVK@63F_m7;lq;a6hKXdb24 zFa7FQwX9RM2#;bOeiS7o+t96h+AV0)eNs%+!$cmr+@O#{Vfjr)MF&Jg=!H*$4 zk(DEWVYm?$7>*z+`Q$$WA%wxlUyS5Itrm3{g_|%MH)9Oy)&KE>TQC;mFrF)FA|~Nh zOvV)4hN+mwv)~LgU?yhqoHHA9Fc-ID9*?l|xijv<-B^HyxCi&*KHQH*JR?4U2eAYX zVJRNQGCYFiSb;~el846CScAu~7LVfztiyV2z(#DsW^BP$Jc*~U4cqZFc3>x-!7l8^ zvuMI|*n{V>7ccO1`65r32hfazIE2GEf}?l|FXI&)!>jsy0P}fk6=fIvRhAK2nYX}b+h|ve!L@C}HcrYxh+y(;@D=40Lh4XzeNT$xGyA@(MXdUL~)Q|Lc$Wis*m)ebB!E@$?Fi diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00052.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00052.pmf deleted file mode 100644 index b21a9a2a821b34c6a9e3a364dda834c8150391dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00054.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00054.pmf deleted file mode 100644 index 524934c71aacdb42ee6e1d669595f83249fcbe20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00055.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00055.pmf deleted file mode 100644 index 2ef9bc52ce15236fa7c95142da663926ef95a08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00057.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00057.pmf deleted file mode 100644 index 3833d4f54e3d235a53e6b04bcf88144f6132c889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 E8&*!g{r~^~ diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00061.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00061.pmf deleted file mode 100644 index fb2b5a433f16e5c49d6dfe4377230cde59a44654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5720 zcmeI0d2kcg9ml_tY>W-EEbYqJKvHof5RhXT8|**=LR#AbTQZVtW8%czM}XMa+>k&x z3<(hK`v~C%5$tw{i2AZD_~1We)87`-3HYg!z@pZb5(L|_JQ9MSuqGvQn&?5+RL z^kEAyD|&x{_mwu@&`;z)jC4%ZH06(o`s}8>+C?GSkWND6kf(&`P5KB?Ldu00K}M3c zex7Pc;`=e6|98Z( zkmYNFhK8FHC?r~tMA4F0IYQBa$qi4CiQ+E@#cW|&N_GozjGPzZBHOe%g;6HrF(SFq z$DF?{rl_RF@E%1Ch1&YY8To-yzc*L`PoTJ@v>@m%DfD@e?=JQgRaE)i#R@#t6Kh8g zuSL1yD<}+Wwm#Kkhaptt_J`RrAthYy^M(txzx>s;;|7m~+v}|gg)52_&59D=0HvrZ zUhEIW?+JKCN*6rtlBzFr&evJGq-zgmNP3SGn1$6=&9J5la=SnbVkePbiu3SyGx70 zRiX+g@f205&sUqfRmV(!tB!SpCPmGcPZUQopZ%sp1ZW0v?|id0jKJ zvs|v6tjz3Oc3nwDP;|~+<#6TYxiTD$OU#>KNg(JJt)1a;7Zo|wG$9AuT?v*c-V7!$ zE*7m3t(!yC&Ea(9bftCGURyW1`bCE;BP$~d>_a739te8%?%^;}f<->RQdJTN z`NUILX5AF#sOsleLLpW?6!!VmQmAuP3`sE>#Vm+UfK3hQV&vX(ULVWJb|tk?jED{zGo2+c$^a_F&o5@kZ-P+Bhp5^$e44*@`2Dd4{%2Gw*}=$s@w1}U|MNiL;YAB zr@!Hl?YJDVy9{0Ef#Dlk{v1~2P%V>9t{Ec&M?d3>|PvRJ3Ov9`N zEJLEOo3d@Gs%Bk`Q&Wz`bY;qV-N)##HjCL$SZm~nyg^Mn#hMZG86ncr&cjq-9iiJz z)2-RM*2-hPEYh;fESveVD6?^GBHECgQn<9+Di>7p1u||4S0{kNWJf-PE=5QK^fr4a4NNG5?FwXS&^# zU{(7?&Hs|DsCJgYkR<(B_c831y6YN=^6r?PB!3d~&z0)*{0-mPSjT92@}x1s9`|?V zIZL{(+l}*W#WDYW(qP?=W%4>b&xXIrr*(V7XY!}I#;+xg4K071lfKloae=L!t`o0V zo%*;kuC{fHjg4tZ=XJZO#yXbv!mq>&mm^-xBQba43sPRv?S`9DIs2$o?Uy{s%)ag` zv@uDHbIop;DTiYA&QdSkZu-!+T(yh7vr2yw_9g-9ZgNlEuC;%vc-_KyEqM~l)>QS` zDgE|dA3m2y!(=!Vtuu9d+~X;88FOvY^#rK zAG3WD@eSM4BaNhe^X+C#@Tn|vQs=4m+_cLHN1679wU+iIV>bJ@-ooD~6QSPW5+(WfRJG4g!Jch^75uNY^ zI-?7m$iS1xH7>H+4iRbVw1A{OaLok$E#o^rPjl?L7#tRsOu^7i5 zu0{>Ub8AzF37CjUn9S|!R7}Hk%-|02Wz57Zyn@-7gSnW8dd$ZHyvi-%LM*~!ypAPU zie*@i6b^ohjoW7zx2x2u4FN9%|p19K5z6 zZAm-Qo^W--_y|Twev%@c2*2boQgW3^oFs!hNivCxWRb3ft2*@q6<1S?pkNFIqbNUE zkshQcd73;!dXe75P5KZI@e+mPlLAsmd_=6d`;j72O#DQ=Ik+MdyE(>PF!J&f8xd>r zGEzI5|O1l2ha~d5649&XBX@9QmI<%v$LU+U3FDgZ>49 CSC+B> diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00062.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00062.pmf deleted file mode 100644 index f0e58c43548dfc2d2a7b436c9050ec4d22b2fbfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 zcmeI0dvH|M9ml`Bcb5%>kjLJ;yAWts6a;i*vLuk8BJ1vwtR%Z(cM}MpE3Zft3?w2V zJ`fR*H_Ag4MFAhUz7U@X2%}T`hqOLwwRKuMQ|p7Vb*xTA#irkL&pk`pnc6A+!|6=# zD@oKm3XYuNH0Q@t5&+82==Z)XGe}fs< zGUGV)JM&K~1eRL&uk(IZ32&HAls}70L}h>J-?h$Lwd zVh(8|gX271Lwdi;)6GJB#?x9Qwo?=w;AxM@^%!}A{6d@#ipVkYju0P_Pl&skr!Psr zk9j&t{H3g49=f}`_#B(T2>MVARRh-@a03Bjk^UK8R?_GuA? z-ABe++3g9Ie4>Go8I0JDQd~=6_P%}D_(W4Yl59aZ(a_jbn+!G9#ljdLYKYahWa6QQ zD8lUvJKAPH5GZ{T@T6)|d)ffuL;}YDH=+p z65&_`H6zO_gB2B36*X1We0_~AN%4YCDSt&xO|Z=0v(CIpHYSoG(cfkMP<_4M%#-r7 z=cCEyXrzqU8yZA^SgrHNu9-f!ZKglquNhfWRdK$*d3Hx}iin3r?5PXl(<`FO?I)k?1ZG z6X2V`pQi))8-3sE*@0v8IOAp*m0Qtv|69fcv_@)RO;XB*^*A7`@CFesJ!_b^_!V~j5dvFnhT;z zJHK_aO!tm&XnKz2?m9i&@9pj{0O!sEo1S$HcW~* zzem%vzI+D_!+C{!v7XiYh`6@5#AVi>ZLuG6-(tq8wGkzkFFjJ*D&N3S0DS-|xk9oxd$SA+)HoR$cU^o-O#Dczd#4 z`L>g^9!I3OTg6>N-CI;S+6~5b_S+!{FPotMUOm@#lYUfb?YQSbmEPtscB{DUxM!)- z_O#cL(_O}&a_J{~Z&YzDY>ZRd9`ydw)U3bldvB+T+dkAkQySxa9XWl}*Q&G@GdeY1+&Uooyy=^eG+{wnV1@Wo6m-d&fkO~thjeYtkodV9Sp z?%3-+sI>i6BcOEeZ;gp+T)B=F{aTF;E#8m)CdZy@qrQ#$#OLRUx60aZ9*Mc*+F1O# ziraU(nZB?|yi@$l=)99i z?0*^8rWPOLvlf_Xb`&%2SzxAl(#Yh}lovm*G|n-`nB|KMU+I-fYa{h{)N{K>>z}A+ z*}J{ToW9A!{$bsCXiM}VD!ub#_i^@Hwb`yUZq}Lqc18auym3=Az5R9Xn@ZyY�VU z?R5$*>a5+Y&s6ceezA^jxv-0$9^Ugv!~HwMh-`hMej zhQ8q~`B}S?TdQR!%RMf`1dN!vy zew6l{$@loWOd~vMfXHd(9Y}ZMakpomdKb#CM4hEa$#Q;J%QB@$$@J8@`cS{3>Lb(0 z^gaC$rbo$oN{?bWVr&Pka-^2!nA-EA*)ADpKeJ3~>phC^TiAzs7KwhwHpWfAl4bs| zw#qU6O18zm-&3mk$97E2Yw0c0b37-+bL~6j*s%0AF;1kGb4P07Q6BA-_O=Uc>k__X zd6DH;qW?A1qhvYM=GYVI|0zx%lV#GQOg|KD*QQ$OrIz(EwVYFCno5J?-21jD6JJ^N z6lqM4vYz`d^{IAQ>CJXIwz{YAf8}$3`xX1dXMDhRO*QLm`ju7YnjURgBfY&x8nYaj ze&snK{HnW1H+@@ZE3OG`eh2x{E!qMO*Vgr9I_<>y*zFwVqT7=ocV8^bUhBXADRMF3?u59R#y4q_xKxzrkk z(WpiZ#^8KhfD17e7hxPiTziEPK@{Uri#o(`2_~SPANz46(1?j#lBK|pUo>M9CZh#Y zFcs5qDK0~%`@cMJIi_OT+HSEH5k%AFx|Tgl05FXAF%8;CnhVvmJR2YQ{HM*Vo@t`a>D zbUo1bxLHGVA~t2XqeKS;JrHz3&<8;$1icV+L(mW9UX!2KGss|aCOL}?Aw$X8WEdGv zMv!v|cXsHOpkIQH$*n6=L4sr?;TM~^Q8kL!(M0SY)sQjdd~yM~kcjUR@wGXQgviAt zOd^E;8R@T}!-5_Qx-96k{GuWCq=Cdqg7Axst}C~~QoN>#_^xgylgMP!LZ*0rC<#NDh(1g#Qt6g#1q*1+w-wdHMJIL4OBAXu3oI diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00063.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00063.pmf deleted file mode 100644 index 8821ff155cf19791437784565ff2557b740a8121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 Av;Y7A diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00065.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00065.pmf deleted file mode 100644 index d9a151d7f9d87d1b05f698dcec0b50051d8e9798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 zcmdUzd2m!k9>>3LAjgEcb4+HE;3OP@z~mwrvK}xbLo$*~hM5T=3WOuvfnb6hx`+rG zK}10aA|OH(2#SCl3PD80wN`PpN>__2c6D{VYSnUA1yRZDxBJZuU={4@{4 zW)bs?Lnw6iLmEl+Ac002&&eBU^ks2n09hbzIcO{wp0#ARFrFu`3ga#Isey)ujn@oi zthSYgk2U{LMPo8O%1bn4J)-wD%SKe!c+32CD6OvY)s*{Pz6wt%M!2dxm38%ASCt#( z6PqW_Zkp48TDPaXBB(ltH#IgOQ0ejp(TspQSnDYZR;ahUP0h0>Ho{d_Rv!q~Rk~F# ze4a7x%KCukW;cA*9&b=J{q8_@Wlhji?X4e!OD^gzxj?|@D)o5F;e%_m+wUrO*UQJD zw8G`*v+Mota!(-0Hq2;g8Zu;XN%V%>TUuQvN*18h<*Tod4ZxU)F`}AjxB{hawnExv zZuLTKDMr<}%EFHlx8c0BkDQTyaf-fhHapdJJDo#{hZH&s2j}PWP!vA+oP&lG56X9j z6Lc1!%ss+YQyHumZGf+|vR)=2J3OslzBjF3OTpYexrI~b=eG=+R8&w>97K)RGpfez z3IwW4J!L2vlwVX>P*9XVIKPlD&sXOcZ|9=rC@3i@$aP$rGB5nTYQIZ#cdo-#S?Q2v z0uFY(+dtY}mdoN*RiZm0jdN5?Y@9T8%Dj0Fr=z4`a8dDfj?q(^TV^!PaTMeh<`#l) z((SLU_LoIo5=WEUU+M9>>wVP$k9ZUlkGO&yTqC{iK!EKJ1U+7vN_3ubJc_@}qVPm; zTsRKIe{$aW4^EP}16kfIucKY-kU_utAasF$C&WR_3h}3W8@F29n))>E7BfMYr2jGX z$Tu(Z#w#X|Iop~i{K~t=b>?i_T^b65vdI2fdRy4PJUuU?#JW>08(Sa$iCR{fl2DQG zrhR;TC+pd#eK=w(KN`O_XQ%c*%c&VN&uUL^Gp|4f>+Fb+(YD46jG@*jsqszPR_$NT zZ=roIZY}*bnZsF=!<=m&FN95LH_nUX)@`8vb7>dySuY!>MQlZ9Oo+rN9V>E9#$dyR9V{?W#Us4ep`u97h_XX7f7bL^*Sv$MQOLJ|=( z-L&EOXlM^fua}ji-~Vk~fB9a*~Ec?W(l6wC~h-{E#uB=bhmgyRMhMR<$o2?{Qjp z$a*^7!)KXo%WN~kF)>N6CY@7ljK8MVF_kvoJMK>3&i8v-=(jR1{icjF;d~59lae>8 z`6#vNi-kY-ea3%on;WgO!xXYKhVxmPGCk!3TLW?#)0ws{?YnUOPFt0X7ti`<=8`OL z*niTt(5|B`+B@9(S!(aF{rBWIWIdv<-b*M-c+? z@%3QV19P@H`@A!L9e-nQPgoT3D|X{9<42}}vb}T6UnCki#>AM)InH_hJw$(O3&Wrag z8)TiLjUQ{R2{~#!Ix}WvoMHW<&eX(}Nx`rkG!GN?%RE&7#(T}ETOX}RfTk(;L3m_beWKAv+q?tqr_(RNhyt)_?JaKztjmSF(r&Y7>avK}rX zvb<`HxVl__Oa`H8%7?~TjGu=@2DF*_MCM&+x_Om3JL$0tJ?L*W?W13g4fVOHr{fN? z>@4Fkp)Dd$&0h^wj9LBVH}oGe|B3nRJv)c~h584KA6fIh+fV;?!(P*J{aaln91qUa zHR)~o6BoEHxJ-X8DckK!eG>Iyn9yO(76bE1+4H@h^S#-cDs-&-c$Updn69%}^Ugj= z`-X&G(x!gLp3|L;j5l;z?1@H$DfSiCGt@Mbxvh!eLQvH@{n>LY+wDXTpE(W|vbs^&Pna!gA7xsrWN@x_>) zn=aapc43F!$!y7dN_`hfSg+!1`HrMUh3mYkt=6eXjZ)*UWTR7eN?#k!p(`yI)kCRK z%rmM{tVhgWsaIFB86S;dowQ?ST6^<7u0+0gcj+^!X_Mu=kb0%oqiWZcY_%R$uNcGr zQ4C3wr9Ka$-8V5qYJzyK)Es+<%;BoGRnAQ{-n#l?yzO0S4@#-CE>-7vM6bk{Q8h}f z|LV3{Cw>+h#dwjkUb`@2W3%>P#12hJcq<`?@ghcQQCKIXMlsKeezjd{%oXf#yJU=- zL(C#;GW&nF*rX_#QtPS}9or)HD%_T<+TpfHy|Q;mjg>mdb%@w)NWXQp@XK|O10j0l zR)Wvepc}VdF^EMR;-TfhG{6WG%&<_Cl8}rPSdj`F>_|g8*DgJ|vvP1Rm4#mD zjXvm$Z1h8a!pUE}JdUUW_Rb&_VK6sa#TbGT{0`UQdfb2;F%-kN^BRs)l);S= zC`Sc6xCtXsi7I$e%{Bih_z?h?zZi{Lj6of4#w{3&aTt&K(Es>{37CjUn9P;c6inrw zZ#rgRCT5`#voQxvn2TGv!)d`h+=lsBz-{Xy+>Sf&do1Q&a0$1dOF0^sVL9%>y=cXK zSb>$?9InCxSd9nq5Y}KV9>zMXM;kWa5p2Yx*o4j4g2%8Gk7FCQqa9D+N$kK*>_P{2 za~JtEcahIvFZN+Sp2Yzi#33BUb9f#{a1@<5h8J)gFGknSC&bIR<2SvGTiLv2Z1zy5 z{##zgy=*iW)XJmlB$%}$)V1Q2080L~P*&`L;@TbR+S8;G@rUDCE)xIWoG(7-K!>a! zJj0SF>`>^9`B3)w)H9!rAGtyjyk8mW+Vr!C3x$r12!)zC__r+zg?7Fp@(Xp9T11>U zi+iEa^#escvYd=P&>`v!b-lP%)-T&4+9=wjwpDHKg2kcG`gY*tL-MTjj17hA-a-lJWN={q z_G$SNr{!^ugj;|0NQk_bU*`79Yc5z9i#DiZPDa`2orlN-p5M11raMqFe#DJ5mZO*o#Y zupCr`yCCW;e;G(6sUqS-S2f|dm!HA>JO@aS)R56ctZ>GVI&w3)g^VTR2v>oqClkm- zGKowk4P*+LN~V$NWCjtx*0V?>nN7G#rQ(8`3l2a~chwJX^LW0E%qI&7SBz9)P=`Uu z1GN|&^y;^{B|P6nmXf>4GP0c9L+&N53tR(l7RpbG(nmkAzB5TN6@-SIP){{1} zfjmMsl1IrVvYBilkCCn9ak7nUC+*}3@+8?oc9LDBgX|_xk*CQX@(kHa_L2SMS#p3J lB!|dh@*H`d93e+ZCpku5Ajipz>3vb8^gdPmamVgy4W-fyjg;1PP)WCdnk3C7Fbogb+|7rv!n>Etdj@ z(~Br-KoAfCK?rgww}|Xg-Yjmh3$+$&T(1&bt3cQUN$>Y{Plr%iWvPGdR6f(c{>^*8 z{=Ms)_u4RS^h1#V48%lsgaQxq8WOx8!)t07z(4hOV-&EAH_qVwX;xgxiUalES^s_s zSP;DbfcN9$c*Alc{uq*N)ohx#5%t+dUK2$UT}YZR?j-jJBcFJL5g@~aQA;L}u0DRv zAW z{EYnHQW|6FF}zJYibhTy zIjL^)7*u(@Ma31Gvvlm3+8L7&C~^BL*i!*dMU}UpqFDRUS2uOi$cbsNAs)ZG$Wx;} z4*A7yKc8LW_Y`>p6>LTAw7Q&}zWv*O@c8n}3PjCJrFPPQRQiS61JQ41Q$?zsg;Gva@nB zT)`AwnJDlSx+_a6YD6ngo?lXMl$d z#HrQ^IN9|c{}4|>I;)qKiVo46=NvR+>a^OKPM5QPX5Z{P2RMg}<$c{`XJ&d3x8{U=Qkn8Pthjs%(C)x)&n&`iq{(VWilNQ=~YIUQpMlIFqVvXr5 zW1gedco?`o!+1is!>yJJa=oqR52@6;Yu34rCW{MIfU-6Gq%kk7B;3N7b0SlWc~Nr9 zz09sLY=to|^m7qkc_(q6rMqJU265%O$a%*?N0T-d%9xaYbBweytIVTf z>NNYud8QrFA10lPe12Ftt|FY7Ve8d7f4>!P^RT6=9U{?cS$^59_n=?RPC zrC^>fCf_Cek>?n*N8-Ked|+E}NIohxYvn`#Y%fo^X1gwO4n5y#vm=%<*{-mUQ@*#I z3fc|bKJ5~v*-C}uNn5J++|b3zA6hSHwqczWiL33iL_goCialh^OWGQ7fPH?++^Elu z>kZLYbbmyH6wi6P;yWSyuynU{Z*dt{vHa=SX8IR>H%j!mBumXwmOAcrmK3?(QKQ;% zrnK1onjcHzD%JSR8E0az>HgL|^1`U4juB#>D+8ol^I9oO*eI3$!8jw-IJ=@wMW@*k zh5h5*QDUtns%0LQ2erq%6g@=5QOkQAuP0v#=2IRQ8ZQOyD)Rw7&l`!-M5)=bz<7zz z8ZYma>-k*ThF<2;rYe@_NBLW{B|0rw_obMe=nvz1sPS{;Pb}{R{b`o>+U;!HCfg~^ zue>jf)}N)w=5120)-L6sdAoV7%-spc@mtH+Qm*|6BmZ4T?v0vm>25zH`nK)k*bj7n zc#AxNYw8`*&tfCd)u)vace?&44&z4S7t#iyX`zMES(g77{>TE|;Pb*0eZu>I0!BDc%jyo9w_ z=L;PRi(zi-Vy3Le8ZKv)Og7(M|xSN&C-+phH!2MLkC6P zW6U$nx%w^rmyPG;dggv7{exqM$JALbU){`S`OL@L^EbpU)$1WD z?a&n4QdO&&Purc zw*>8vSZ0oDUrhWeadmJl$7p&b=8UFMT1=dg46*xl+jIwQH9pRmj>hiSVj6Zu?T=2= z${2Q;j@-0kzND>|H|&aeH##j?zRG+-YIc-j64#5WQCgk`RilD&s&2N6{u6q;3{`S_ zy9`w~+ZA@f+Q|NIMl9##BbFjve+;T#1!Lw|p0K>9+d{{Jxv6D>{UghT)SpG7pKl}x zon)U=8x>g!k#enDgx|z2f)o4?tzOv(9tJ{r{0c_|B4I=n&mS?&!~`=aC9oh4@kl@- ztVn_lb~uoXPDnv#p01ocPj$uZNJTgN0o~C9J&}ex&X%P z{84#0yWC-{NR3!#3+pBv2iTM;Q@^2iDm*G#6*toWYpmyOuiFz~gv=hs3AwG*+Sk&)`|C!gF{YFQ5^tu?8<< zE!N>Btj7jy#LL)(SFjmduobUj8@A&$?BHp#iKofeu^W4^7yGauZ{STFz(E|sVI09x z9K&1fd*|afhh*+=8j>k&>{c$4Vi6ODo#jC5Xgz1`D%z^$ z55uhaYW~W>LeSTppJ{dz5S=-*Kuq)7R(uVaEmr3 zw~oCw9vmZeoY=1%6A`bypXtA~z8HTot~IAsT?38_S>wk*IKEUiZXHNC;d7~Q+A?m)C*BP4Y-SDIgwFNQwwwD^X=ZorO42Qfs+uCq7a}ILE2Fpzdm~#432@ z7*Ky9POQ{mP=)!bj0`8@w0a*IK{y_`pNu4<$Y?T#j3wj917tj@B@@VlWFnbFxJ#wt zf|?6XJy3T+Q3ADBdkHs_S8@K~j*%)1>M*FppcZrCl1Ip+WC2-77LmtDJy}eakfmf9 zSx#1v$H^1qN%9nVnye%ZkQd2XvW~n&){_lnBYBx@BCn9m zWDD6!UM1VecJdn8L3WZRvWvV;dAfz zKKJ=O_xJj6e^*mKXK@%2X@DN=4I;V~XRUHQ7w5EKBK-0Dx^SXc!zGv%Cr3W8y6M9GG9k;U7Q{aJU3U zcA$P?BuN+gAYx#l2nZX_u^S;qqqt@)xP{%aL$otXH`vLIo*i%4-&QecFO~C6cbyHDY zbKSzGMRTdz?I|j*kd0HD8t0O~#ObY|2J*Wrsy(iXV)>T0sd-^tBRO5JfWM-q#4TH? z+%v;n67YLwx~aU(^lq(58iNl3(8!qWEK@T%LB!{0W?Dug=MIQ(_i35E4X&K z=;DlaGr@Cxt_x20uzZD}o8i$`T-*SBT2OqiXMl|QM1D!rcRm2Ris zUsm98QT~L?ob0TuoXm-tc^JI%8Xp^-A!X0X&(F%R53e#VeC1_6C+qGEyR)Rk&dd1i z=yl$a*&ueY9JM8&cxjA{0?N#$|qiK;nDW2Dlo^UdEI_Ly1`%J@$wpBMzXa#^c&eB zFNn~XOOCOhv4=IDbtgFzS z4gb@{O^7dsw!_}Z;!|oXt*i>ass?Ali2X|A*3lOepKYN^fm7uAQ}5(8Yr zMY~=6WUyV`;tJI#s3kgW(7snJQSF*7;$l^6Mco?RS>p%1KJUt!)j9Mt+rngT3`>m^ z(q@iM=!xpSbo__*peVySeYNE}UbZ$dC7~zI6jDbd-DEx--+(@JLeGl5I(DP1wQpIg zxE*bj25cJZ9>wR4xNBoKn!n)w2jc?K`(z!IXj@~OE{}!OnRLMRjp`$q_0_Vz)Ms20 zWio%Ei$~1Yt#4aSDn9SW8q}BrwIjYt{7|ufn$%^RE^FCqW)9X)w%_D z+CJkxD65%a&W-!C9A`irqClp;s8k^|+X0gZ4DTF4f-O zAWXsBuGJkS8rUN?3+=) zIwL-aY*NaWMLrvGI=Y3&?-oxmf3ByQzK`Cg=tS#G>mFH4J)%K0G+ALb?wB$b;sIu~>s&^B0UvVK?+LR!_RlbeotOv-xr)d}?E$&Fcv3U4E|Rk6{PU z_P2x)Y`(F+4PD9dm3j3!31j_nY#-|L%!NfLyTn**=rxc3hKa&3=_!#1w z6MFQ=FTV`?u>3Q;Y?vTuQ6DSI!@(XQkL8MQeJI;(wy-=FT#G(g73Gg?GLOITD0E)b zSgwz;yv^pGGT)AxtkFh;5c&#yHVLo6et!sF2!qCkZPuODAN~&cJ~%1@d5Jy<&4c~* z$U7sO;?A>}!C{8wgY~c1x2g3HsoT6JVV620!!S2eb%&sN z&av0<9P(p*O14`%;~Pe781hN#7}9pU`6}#F#OFCmiT`6Q$LDq> z=0TRD6#s+5RYO|zL(BdLg)V)y>`xl&0MCcbcoxr5ay{i7g*ccqKcPT7D7z)0O3ih0zLI19gyu12yBtT(S8`j(9@DSp)k~EztJr$y`GM!0_+Iv0 z`jNIC8nRoWhO~LLqCXN(S?*(6W3eP!QiRJ~EBT7e84b@-a(qpi@vnwnRkPeB$A^6n z<`R#oNeVw7aa!?7()SJNsI3vF75^mtZzE1C{)NU3Lc5Z$c#e|mso^67cSlgdLV0d#Yr*f>LM{jiyveqjVZWV`&^YD1*jRCf>ob zX#(X?E;e10D39{#N}7z-`YW13S7XLGX(|ZlXq7NQ4u9w2YS1uW1GLgtuWUx(YLJHMLU*t)V;VE?P^S$l>?Uy|j+*qb|Ci zy6FL0PaCL*9;An8BRx!yP%mww&9sFcrN?M1ZKKC&J3T>9(o?j9c49ZV3%kiZ^bGB# zXK5eprvr454$)zHj-IC@bd+A87wH(iH2Cg(d}v6P|Dqwe8I4?x#$SyF{E{IdjdLf5 zPIO5FYu{v$CUc@R@X{7$mj?V7Wn}xHKffpYtL6UFd9WPq-@)P&JCkWVf0l%#NPTl8 zeohI<`fI%LtvEyUhZ5!|Nr87HDL#(h8z?aGdpu6x95sgg{Q7iOMvk?A2P?z1W_P*T zj-j(!|4*h$(uQrs`anJNc4tzkG4NjKz5jGvVf+F%#5rQS0>Y&aD0%*605+_HzHD?GkH0 z`jqz>n=fqsup8AHKiiSq=ZnaK;xR{&^_`XSQ=>pQG64Abe?J-&&CA z2)RyPMh2YmbqP5SFU$aQ1DTJI`|v#mV9p=|5^^9R3lj1mArlgEA@QAD63!!l9gGCY z;0lleMuE{F6{G>oE#yf;rX=J_Lbk*X4vYtxAPZ!J2_Ofsw|KM@85EzmKt8w>Lk^8x$1)&SUNshdC}SP1Zzii}Ih zxrC`l$h-0fxK^B(fHuIsgxw03f@NSi_%&DoR)X8W?O+wS1FQz^paZM{cY?dXTF?pZ z2KRt_!8&js=mPhHZtwtD4>o`v@E~{yYy=O3M?f#w1U7>$;8E}x*b26R$H8{+1b7lW z1$Ka);AyZ6>;`+lGhi=x7VHE2!2xg(90G^IbKrS!1RMn~fEU3r@Dex<{;z-fAJqQ8 He-HX6nYKK4 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00068.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00068.pmf deleted file mode 100644 index c20e39a219ac264dd9cbf72e7a44fc089d1b9f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5732 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 Va)cZu$H@QnpXsLT|NHl#e*+9n`xyWL diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00069.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00069.pmf deleted file mode 100644 index 4a4a352811b4f7f9e7516a20771eccd0ea5aaa46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 zcmeI0d2kd}9>>4k69|x_y8~)40s{(0Vd5kNVHAZS(!m+s1LSzE={s_U*6DweL62rDbu?|W~05=*wWbpNonYP<63 zeET==_`U1b@3l5{(ws~H8p$DzE?^=5>#66-{NE=7;Gg`xU3*|XAKaD?l2@bL zf}3?|*=TM)J&&R@e?kWeH~(8cir&nwdC78GK(n@1ShkZ!AzmkM3vq&dnoprKjXsQN zMRt7*OFmmkaSJWlF^W4WWbf;1heoQxfmk)lB9+mq@|Ztb5iG+{e`PRKoecXcZG@)G zn>VG-U0yqH`iw~!We3YE66%*BwX-H89`c71s6*UNj0y%473!yOZQbmeS?~t}$#|kV zWGgG8!O?ao84uoMBN_>Y6H3PHcqCMn2u8xm(P;Hh-Rc4HsJ|>2E=MK&Bkh>K+)m2s zP*&lOvF>EdE)T{NY{-oI+5rRl`O-hw;j&0TOr*>BdYv?R8`_G^QgvqJOla37qaUM3ccZi!g}wVo<${7r+e%BPAo0KuW$eUzU$p1r_|NYsJ+EqTvSq20*ls8m1po~q-h$R}2axY~BgDztq0P2eKQIGPg{`tymv`Ss+V}XNJF+0ii{Dd|@7TblYz`3~};ioXD9a>@EgB*YC1x9F4CmL!|j;AM@6k zzp#9rlIKp-hggRXEuZUc*BqeD!mMMKFKhN02AZ~29Zp)lj4MQ4`UE4+a_XhdGCWSb zE*Jx)W|7)VV|iL<7z>>=c-&l?wy!f9o%U+0&Gt?jy|+1D+F1@xnhD3QjWOPLwDQMX zEPSBP^vzr>eAbH0EX&vN@8>o$?{xDx?XfeAf359$dG41^Ir!Y#>FDMI);&(W+HT`) zT4x)-a?)tK%s!4??`kYd>qpGqj>ezNQR(#CjK>_i>yJ5;9Ib_nUQ*M4ZIPw=fiCMu z%xF5zFyr&Ie$$xkXq+&UPWk$1qakhIY(63EuB|NdLCbdRT07&nPI|=6kJI*tQoacv zdYO5S9dpcIJ6h{!x*U!7&9RQwCL8ZKI%8U{?6(Z|xxQA8yP6w~*?$mer2Rnd-#CZI zof2;z&Umqo#M;SNn*9dtE@9Wl8iy=j-V0((wKe7%`Yg-QzA#z-1?&q<&O>F_&sja0 z-Xluan#?9)Z?l(W9x_hLa%gvT%i2eO-W6%|21B&>U72R3)x}Ap@9yxrqp{BXjVxc3 z`GN6SS{IoeoO-nevq9+0?o884>+6j(PI`T?u_2v)ym^`ByW}0Yc8bk`w3o^DK5vGk zW?jvvtV%~?iM1rHYb?&myfWdl_JKLnvFo+D9Is2S&1@ENsr_yAze)6MYrDS9ETDbo zsez*PqW@JI^(5|GM>788HMHdpL)XlDrjfBln;>GHic7HbXz#S|yDVmCH6K*H`6n_P znYX=KFWMIN`7d+5%zN_Ff70i})>|xd!#68A?z?m3y8h|_+q=W!yv?g=9>Frzn*I7L z{cjzATIY2w$`xbxk%+^t{WpE|vNy%j}pl z#+h&D&x&zZ{i#>T_HJmyZI+5HxyMg)Q`6?-9QHH&^+T4qKI=NC%#0p6jFX)UrT<&3 z9clj;Sl@~?8RzIvz}n*I=B*aTMcMWFMmMJ4l*v7#iaBoXh%Tu2wAj0yZKVgdX!lg9 zKe6&zzSsnEAE)|1a}~!z#wb<(1+*+**}DxEc~y*3>8U>w?>J%C|D5|BwM_5YoO9mt zsr1d;O~(IJy)s5AKUIukUasW}=shiVrcb9~nL@8HxlTI`I(LeCx4Bo&!)c_ykS8=ITS1Pgie0IA zCFYDKW0WfY0$P@@?5a#xR}~LgB3xb7ToqbR#ZP5dYf5PCpxKUX*(!WsOpt3_+GUJN z)%!!O>Md$%7vGPJY03wTHQ#0bmz*nMnbO{Inl^|&$at0Ns~>9BSJIv;N5-oHmyEIV z&0X}fK9g}0(w=`(*yTRR4Mr|rZldu};Nmf?4ca0T?a-d9ISbiLmxC~v;m8UE>&s9BeIj%rY^um=W#8tQ&z0n6A6yX|pxdkslUzDOBu0?+g zfDhO42sRKm;6@C>VE8cvWeC9Ld8`~22x1t9Bg9RA7!gD<0x`tF4KR;sqc9rPxCvu0 z7UM7;$>#s^!UWV{A|~2tiVd#i&eM}tFZ?6V=dP4$hZL;u?Y`gGq&JCY{fP_gom*m zJMah|#bels$FU1fpaD-}H}>Eu?8Vb~2G8O-?Bm(;1)ePrpb;c5Qp#@ z4ukJ-XJ7l{2VpLobr+jEh%Wz>L0G}Yu4I#vJZkbfzv>*D z(uatBbP>6Rcu6tg+klZ1jGbWg1mhhj|0Jk?^g-mlLV$; zHDn^0L?)9dMC_ZUk?CXxnMrOY{1PU=y77(5h|AAOq+(TB7mE>Nsirhz5lQraivX-nP>&XVPk!&Ilkj-QZd5~-+ z+sH%YVX~dRPy3zP5aoZYheZtD=i$_B(y2Lva7tTJ{fXt9ELB z-Cv(M_x8EB?>%#GYcuNSWC74fF4>a?T+Op1b=|iRVnypILP z*uS&=ZUz0j1@7Cj2BT$5+bf3 zEo5MXhu@Lx7kRiz#1}lQw8c7#+`T+(lu}QT9c0t_JRB6u>*QS#QtAlldw_=@iF**k zl0NX1Q81MXKm4 z#U0aF^AD92tR3156gN{?z3=EKi`GO!u{s2!l~pz6u|Ui7xBQ5i0Pn(56D3pj- z*HxIximGs}S&@i`r{xMqNX|=jU;N(?V_&R1>#kKU^r5aN(3gEu|T<* zux^LoxIm2ePQ=XeaJ-sLX>M&PEgk0X`oW9@qai6-gkYd5G0tiNYHd*#Wf*~Y&}1tt z9WvF0YAYtz1VX7>$^~m_xBs(i}V}P>YFpDuy{sOajS27Ns+I(8a0vd#2PaY zk4J;y5d1@ZCB;QW!-`9MrF@iCbuoEN$CanZ?=LF!bdQ`Dv8re+AiZAb2~<>gtTJ&A z``?UBGDC$dURf!Gd4LI z3)zp0!^@0Sgd=96DjE;V-59%Vs^(~$5HaI%c0s&49I>LY=CBM^8Kp8i)Wk?z`Lk0- z^pD=pKH?-?+xun1?}_y2P+tG(QSt;o&&xq(iF`69+H3;W9_mT%UxfH-NCurT{~WO_YIV&f-uhz`=o8BxVE7$z2UA7*Pp-j+Kd1R<9pgEe&3YXBmP z>@nDuRM{oY^K6~;<@s&RXFbx^+Qr7)uKITwj$hi-9$-XsbdJwdTSgjdZ2z>5ybZQp zYj@AEwDe(_yV17el|1%ys%)0K-PY-Ey5F!h2D|x8Q!yXZzZISKXV$a37wb`D0|#Bl z?Jr5c6&yY+|2`b?GLK~LWWAp&V|c6BwGQWB4ZnN4Jk#W@uFvgyv`cl4C1uw}xn=xV zV^53eX|_E*CvP|HUh7%Z8aIhOVs?!G^)feAJe_a3IF{Vov(8{WmByAXeMo2D(uW@{-?hs2cN}qX zEcNXpZPXg{IkX2wr>7g!EG_<1-0#`C^QiuTt$%j9`-+yBlb`B;uuTGc{u6u`{W6Y|oz6kx^UWCExZM3XN5nhHiT0e;%a0yCG5>TgoB4*$T$H~^@^Hpr7vm`y z@-^3Ejvg`&^VTO9v+Qfm1B~sXZ&y>#%-v*Z#*;lrm;SNFTk=kQk=>t;(fUk@ErScg ztnE2`*3O!5-(VZdvkysr&isV;3iV9db!O&DyHxz0EA_wI@uNfEAwKEH*skfuIbHfw zqt4dahq;Zs?~Pf#fzBou`@!R;H?=YGxORu-|3%sJ*#D=?QjI=3V>qoqX~|b9pONx^ zl$wvJe3khXy{sIi>i>oAs$bbvohnBue@DmhcpM$a zt$bzcR6UkG<=^GQ7^oe!I@_B!{#Y-L^LcsY($AR3daQhvs^?#I#JZPdSM{iTrP_jB zIb69CLca&D+S!u~v$|vbH7V?=|xy#O1GGCaF4e%InIJ=_}Shn3wqU*?o(t;xkPkjl3^Q*nyj z%2BEN)_1#aeYgA8cWamBuVQfY)W2c>_xXq9>Pr16btArGomRd|)!ERk&W3JvT0W{C zm9Gl6O1|nmAAM1PQ_&CoF#xA=r{&?^Y9P+USr~-DI2%K74$j4I@LPCMi1Xm%BD@$w zQG#I@ju9w@ALnx$b|FS$6h>nV0vL-RLNHN=a_-B*7>^04;Ico0D5@|KF~q?IFeYI# zw`+Bnf{So5rs5JLlKGqn=yHM$EuvXyV3ZCN9S;%;rdG!5qxxOlUu^18zyd79BHW0@Si+s+QY^#GxCOW3Hr$Roa3_}IF0A0zu^k;)g}ZSN zR^wi*!CKsh`|$wQ;X$m&L)d_a@dzHpV|W}-U?ZNyCTzwQY{fQg=N|KE?lE^_7j|P0 zp21%1!+t!A=fLq|uWL`{G0bJd7PG;l8T83KhNW!oGBzr~4QH~mee?hM_4;6#Hh@F& z)n%WjUlL;lG|W zjhsAlRl}Ue1sjnyLLT9&f!Pnte_#gW3mqcsfm4aRyy;H{kkiQN#6!*?1Id|$FK3t? z!TbnjNH9l&SrW{XV5S6fC73P2e95;|#7BxqF&Roq$S^XTj3A|iDTV#AFhgOlnCT znL;ii7n7;v5|SX7l4)c*sV5Djk;o4EGSWnv$xL!NnMGz3u0*UiaC3N`OSl4Ig5s+_ zGM`*Yt|DA9G7GDhbl38H9l4&|Ko*dNWD&WMEGA3HO=KxqMs6mzkXy-Z zcaarjC21!eWEHua+(TBAd&wHImfT0~Cl8Qy2M^u23Bj<6;Ig|U3)u&|2@q6P9>GM3fh0ab z5m8WiNI(IffG-}35k*BreAMaGX~(MAsgK&}*s)WK!;CG8iqq})chBBUoYLu({^4|{ zck;RSdw=^o=lssO=lpWd)#lG#m=8cBMP#oXxPez&_I@6(=Q#lWnZNfh0M_xwlf8eJ z1vj(cCD!jO-=YJzX77K+`-R24p`X-0kBmD-Y0A@y*>-n*W`qG&%)yQI`}WG{L8LZ03f%OUcK2q|@hls?PT zccj?Euw)E8Qz=}?WWMgAD5nL56vKFR`zgFEu2m6f9UhAHV%bXeiTF7=B;r$!>1hX&Hqyw+>mkg5;F8qk4MxM6xE)KI5>jJ0>P&0c^& zD3ne$G}VWd6^Y1jFu(olb^pBdG>+z;VcFdmYUl?VnB={mCum|=-YafT5{ z1;gxxsY79Pqxy=eje$_MDft=RzC-2x(eQZHka#=1s{3B=*qX6b-l{P^A5YcUQ`B2s z?eqJ***LwG2!$sF8tWU<(iJ3v^=UH>bNI_g_+sTFI(-YzuBe*d;_LLysjl=@HJ~vT znc5f*q*C!)54(&7LP_{RDRS)kJsZLT~kwYk!M44IX(etB>b%i)=-76tqnE)BQ; zJMR}C0r>~q9d5rT*8g7R^`D-zZM-h!WQE9)_i^DYx4(41tb4~+=VsAIQb6XAd$!wO z{+hj#E2i7E&FwE6fh7!ZlRnqbHl#QxhrQs z>NJ$f={-=JTav%jTp zvFx_h#(T7T&G?&iuh{$TVx7xeYfXRtU@s};oGj%krd=xB{7M&M7RkG;TCT znDx_NJK{Q+)BEIEXXE^hzEgDm8T47Dr!8%-(c5$We{&7X`IpJFC>><3o$Gb3+2Wwt z-;CI)pr&I{g)r40U3YgqweHv<)7m2yiFXRW}V}cU3W?2&z8nb#=CC+zy-(OXAHabRjkvT zGpgOvkMj4j>;%^_@z-AG^F8F;?e-7eBkgMQBxja&f3uSI@lIWQ{(1=;j=G03qK`B3 z4q~ofqxRS_`t->^eaqV4E?UPr@0L7lpI7vt)bkbJ#jHG*Szx;**L{+ z=BRAD|EyKJroFUV;#dAE25pqV{|hC9zGqI>-jtkQQY*U!o0+dvohQ(0tV|zOkIGkN zJ!X#GEP1l5Q}U#;4>t3&`5xp!M*0E|(YPtFa~swVdB{h96rd0T;N(l03pxzAQH&A{ z#2}o4!6-!;PDMFR!w?MRF3ZDx)i9iivv4-f!ElVgNQ}a{I1gS_;C%S_0$zpDsKyvv zfEtX29~W{9HVzkKJSK2^7r;aW5keS~P|H181d}lZ^?c=zA&vy5B8e3E@{4Jh&aGM# zX5vy@hRZPv>CAt5;0nyf9L(kRu^IDmC0fvmt8g_Ipp8$d9SgCD+ni2x;aXgW>$!!! zksHIsd>gzOw_qu5#WLK6<+z=@#1&YHJ8>88#wx7F8mz@VSch(I8#iz@-G`0Xgw41g z58y#Ogop76wqPr^;ZZz>$MFQ7#CGh!PVB-{cpAI$40`Y^_HcjsJolF`;6=QIeRvuB z@d^&$RU8E8i}hZ+_@o}hB6e*#yF7tmpUi_;!49uvx6;V`eZ%hm^V5w%ImT#1I4Mtl zNxs1)d5|+<(MipOpZeKb>p;>P4~@uY7Wt3wApJ-lkxx?cNvMGEdkZrinCsLsa`DQy z8s$n_%Vyb0?TR!TbqkP%wvrSrp8p>SNY8UN0u& z$pmr<36O~-NJ1n`CXreq-@PJaGT{!Cxt4E5Bu3&SLHK6KybEStF!zGl7tFt423DWT zns}W_E+v@*+A|k_mPcc6WL7eCl8PZ$wTB}@(9^Nwvuh+QSumhoIF9EB-_ajvXks0Pm!m| zZt@K2A&@*-Ks^FOrwYKJqfzPhKGh$gAWad5yeI{-=*36}_e||NeW>KLB9| BO49%U diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00072.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00072.pmf deleted file mode 100644 index 5415c3f446e8210461d25880ffdc71b4231294b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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 X@hb5e@j7vY_`m+8{UH1QejfC1iyIH4 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00075.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00075.pmf deleted file mode 100644 index 1c7edf6536a12ea1a333c6140927356b64690c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00076.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00076.pmf deleted file mode 100644 index 2f077f40f62db0b74fffcb1069d4d316f74020b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 OUw_2AM*qX_gZ>4l11vEB diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00079.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00079.pmf deleted file mode 100644 index 45d6906baa9805ce4b02fdd662195268f965ddc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5656 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00082.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00082.pmf deleted file mode 100644 index 2000dc057a80f5d9733eeeb1cac8ea325e14c02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5660 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00086.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00086.pmf deleted file mode 100644 index b7586ca61afa1edfe38954ab63e661c67809b964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00087.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00087.pmf deleted file mode 100644 index 82f054999a47d3768a254b79fca8c6b31643224c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5752 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 TWIs7T{;z+wUu6HEzX$yj(_7ox diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00090.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00090.pmf deleted file mode 100644 index 895cfe26ae18ce74bdd96a13ee4d4141a47a9a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 zcmdUzdvH|M9ml_S6L$03o87zvg|0yeq8pMBAd%-L*^t$+3A-C0f&?L;JOhaZ6|Epq z1W`Z`0eJ+FmkKI~JR*XOR@*|cqjiQqI*d>i9bbcpf+pMVIp^L@tW(hH0t@;yQAJF#3_3g)xj23!{qMCXA_M8p-nW z@;egyCNB$w@i{M#o5p$?_9MJ(7p3-)7s)~^FGoerU&sf-_=J2)(zoz(i8vnQrIomL zF}_%Y!{5!I!N7qy8eN&Dd`F`fi)(H&Up#WrcvR%9A$x`K8u_Cz-s6}i(XezT<@B{R z)2Lz1-;bcd+M&HcV*w30`j%y7mDT>zKn+SNM^sf04|uA|eI+RKjPO;|)cQRmyr`Zv zb?)SbMvV6QhL?v_UUB`5Is_{`{ty}v^oBHiax$FbRm_}J8!|()4yzGdy zOTFqwbrvJ5J*7rd;xXJEN6BrBj9ZL`yTKjlx!YYhpfKN^-!C_pmjdHb>Dgz!d;5jZ&MTJY2 z3A#A+-oPktX%35z7$FA4=$=b-&lTyM%k3&EU_S=BMsZb4t)Jz}%gN8l2Pf1U7+o1C zHRp=U${VQg`MtGOl|i3qkI|c1A+EAp{oY`ZgAfe){4yT7cg4z7Ki4i}LyT(uQmo`F z?$5h3-Jj*p^1F7$tTz4rx74oOkBda?4)Kf9ZFODrRdnRGB{c8HguXBL#GRN1B zrt}M1GIz^EdX1wgV=Th-DNb!pJDX9j-9)=F<$UV8^oyt#WjkHAHLJ4Pa$AwGqk6N_ zx2+P9BnW*0HzkN0!aE&ayQ}FB1ORciTEdIuM$3%&iWr@K5gw=eZJ|Vbx!;$;*+d@AZ-!zC4EoC z=Uu(p^wB=lcSQ0((>F(K8IPlzj7P@o=qBQ^e%xhdmOn*EBce7W4@f(kaQuh#pXO_O z?Y$C*a;*5%l2iAjolXBFI*;~5=ljWtYWyvO9B(DfFy`Vr$4uv+)Yw`kIEO@hM(TmY zbB6yd_MNO#&Yh))<6HX3xv)%j9F6#AT0e>T$fz?@AIiRL6ys*8cfM)1Wx2~hI-vn6asLgGo*FQSCY%cboaz3CAwhuhxd{$Z}>I{zZ=W zWNeH97aiwJf1J;JtMgvvquuB{WyX(xINmpXw4VA2v+vq+>n3wuX%_2`k+tEn_A&FL zZ3%y6e@}n0P>i}W+nIgEE%r|IiuiG6z80`ICJuGHE!XgRdke>Nr?kf=yk);?SaDehGI8Bx2o#(q%LV`W=hSE-D1r_67)24jkq9X?|X30wNK>eaGN zI$5mNai)*9IJJ@c;%!;>Yu%Z6&ah={Mm$g34@KHqYd;*Z!*Ofl>ka?pgzwGxaVV}! z+^G~b7w7aS*4ZHY*h!zxvJIjwEJvg|wh&8E&+ zGW9VmdqMbybDbeaQ_7~+c;0Mx3}n9C@2cI5GqzV)cBTEC&=$PIJ-E%@jXo_xGqvu{ zJjS;2@?!eTj?bjNUHGOa^Ly*Di9_{iLSNOMwa@;cnfV>{r(@a6dW@qf?Nd>w<#YR1 z5!=OgS=P|8D86!N&&Mu`JCzZC=>^({V&_Twed<7J!iV&i>#+69lzAy3V?4ibWH_2K zS9anHq0%~g&E;0E&&_em9ZhXRtS8vk6x$rGvGbx%%ZB(sB>q0SZpLq!k}@Wu$yZZ~ zBlaP&mXuaodfJ;gj}vT9vMs4O-IR`9)9%V>O#iM2+HLXH#^2J+?vXuf=#{OMaY~I+ z^c}-i@qx8z?d$wa?M7zFs^rr@%k^4?+PWtKp z!Y=FJ)6#BdR!e()YFDWhj9)YKN~{@8YLrp`wQX5vc&T+1_2;yl-%ByaO*_0TW@f~$ ziup6`7U?6kD5H;zL26WbS$n?GuF_J~$DiA(Un*b55VbCOT-w>h?XBN1ewm-N!ot0y zNxd@aytXatfz+$?(^9XbPAa`M@>@i{d=GMow;BFiM1uuUJc4zC6*j~mmS>Q7B+yYu zA{=lc3CT!7D$uK@u&^|${!}+4ot)(9vvrR3hu;RJpWC@bj-j^%tAe8V-Alxjkudf z!MT{nDMMAkT#h@emfF2@m5DEXJc)f~9y2%Xm&VKtt@ z8a$1)Scmm^1{<&uo3I(p*n+LthG(%IJFpYGup7_edAz_A|W38+b(iDpNj}WoXM()Uo8GnGamgmBzaHOxF1?{gJ-1zakF8 zF;FSnXxme-;$tkh&{raTXp8YNVpKjNR%?wKLs8C%zwOxO_UDJoRC|n1#3bnrVM7=aAzi#!U6A+@ez9 zC)NkY#2i~Wc4GVl-K-tYcT&~(?~7>^i6)&0=YVs8(ru+|04Fy${AF#+kGKdT&Lv zjCe>fDIt6-p}KC$YSy+SwfbQ$H+4BIC+9B zCo9NG@+4VBR+Fd58uBz*OV*L~|+^ zWDnU(UL-G(m&rb|pS(g2kXOk;a)=xzM@S2KjT|MflVjvK`M>_ze-izF{vPyCa&zKc diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00091.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00091.pmf deleted file mode 100644 index 3bdcae4ba33d7453c1e4c6bba4cbd68958e11025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 zcmdUzdvFv*9>>3%gxw^Y-JN|U;UTU(1kueUA&>xSSdt~#BiV%PhKGWYrv?H60t5vV zLXd}`AOS%GL=g}bR33sL0wq;=9-N-&U5QmvhZn^Xd?1B~n4SA}&rTBS>h9|FuS?}K z^PQf4{JN+6yVGNsJYj|jfPq-Zp;%xZ&oR;Ki9Dyr0sNQu;}d`eUU;I{AFyB}3l7%r zvwW2eSQNcJ&Fk3?UNE1ieq{m4Ke29qH|l#+Xds3cQJ zw;&I5NWw`T771~Qht;}xhQe}~hwY-&Zt^NwY~@LAH@_kOfj6GSVjRc`Z4Q__?Z z%DIzf)nKGQP*51w(uP!5O+={37YuWlLjLf`Kz_JTyOmcxed46)HIpX7m!Dq|3Xd-G zYd26D809aj2nFu(qqHOt3~RE?A1Wy-4+lzu6{FDZVsyI;gi3vRfnWh2j&Fp&%va#A zkS!vw&{xLhE6V%@fl!#esH~~Z$>}$s^@cx~SCTJEW+2a3T2UzbfKj>_TEZ}Vp*%l3 zB6YrByU;p|;pM*kXj9@gyzNKH8yy+17!7Zwx3%Y9Z%%ejrZ=-+dO8nT(L<@XZ{PI3 z>E39F-VEgXhx*Ek!WE(yD9tOXkRixH@7y~**tvI2#*Ch6nUm-CujxBJD

jPhV$ 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 Rd6WEKUrE2J{eS*F=wIh*{{;X5 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00093.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00093.pmf deleted file mode 100644 index c85f3b4de9d69ff0d63e97fffd961a57fdb543df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00094.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00094.pmf deleted file mode 100644 index 875bf1df8f3dc2320416710123261876b146d890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00052.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00052.pmf deleted file mode 100644 index b21a9a2a821b34c6a9e3a364dda834c8150391dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00054.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00054.pmf deleted file mode 100644 index 524934c71aacdb42ee6e1d669595f83249fcbe20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 zcmdUzd2~}%9>>3Fo3<&?HpxrU5(*)LXf>rREwq9Iu?;lPCZS1zf*Q+GtP~1msfwso z5L~e=O0lvCD2u3o3n0jPWMmW-&N#=F;{wGqjvhQh1%_t6_bpxKoH?Fh{+f6C$@{+F zyZ64ke*5mzRZf~22S7);4bj`Mj!z97*DBtgeNRN z4h2Q-Qa(Fe>KWk;hS-#<*)@52x%q83JiY>dp~#tq0(T%>BsT%$G%?)IYPf?19=1Z( zg&yTXX)8vTxeL`tiQ8~>>?&8M?r|wy;;M2f&3C!-2IXbDvU4*t`IDpm1Y9`-vv{G_ z)0Krn&v18HaVRXBfXU*)JkzF}2dv@l;oUDO)A(Z*Nqsu(* zV9;OSEkyo+%$)43tO2=sxj7ulKzXScrgr7X%FoZraCEFWFG>UcQn%>!42Qe8*dgZ$ zI@tf7(lMUG3}!DW5xvr>jSlaeit4IK4woZ8D=%l@V8@s#wX>^gW;n7kvNN*5G4+&= z^_LcE!^P?4DJ}N;JmG*p=oL?6-L+7Nvu%{m6AZEof+4R@u8q8g#SB#r=S5{<#5G*m z1jL`Y;AB%FXZteC{Lb|<&{M_DBrKp?GQC}JJsng`P43_%HadB}@`c95B4Ms~{wKO`1 z^nw=G?Xe`t>6u2?YMHC0!C$0FS{xh97uxix`0)wp#zwha&G93J)~{n*&f2FteUdOc z#GbU*I(>=Bmj`r?N6$2EHdQNq742}?oId-+=;dtt0_m8oo_!^b-IfO|jf&PCu^f|H zl=S$@wlC$Fnx@f`A%#@ERcbcxRMR)x?y}XZ>93{^POVbYEHUK9pHXz{kI8+LzM~d> z@@Ly`Qj3~qXX1y+3srqI?PS_lsy>`rtCgcWni7+8OfCO}WxrO>sQ8qdL|iwDWgf6( zx0Sin>@+7S>7$NY>dZ+>nNhx!KuRBK)*eV^cU|wV1sl;`)w&u3@9%+@OQH?hw|246R>3Qf@S~uG2t>g4u zr}*9SpqyUZSY-Gj{)~OTkXJS(R2mlB=gVmhSq$bRB`=;aEMywF92|E1<~+~x#c|of zF;%qgkY%{_wDR1@-z;Bh&(hUcSvU2$uOyvLY*O=1NDe12RMJOP8cj*x*@L2uQL)zL zwtCB_vR-64F11kehUC7nt^cshG4E94xt5R=vV1D)9NA-9V?3_JqhphQNE+IG zVBC*D+%Cf$W53kBqHnJ@b-7=Q>kZO_?B}ZHU&RxgKBrGfBd*%~$84xbNVkrSnaMg# zld8Ga4&h}csI-LTbw?RB)wEviSc3jGS=rK zQyrgM(Y%iFI%yH>)^L$+*Sm}(M47*`#k%)R9~h6Drv0;=>$KS(cKVWXue5abpN@Is zmzkoakbRBtVf`rMC!(D5oL8|QiM4P3S}(DlQHc|}jqU#AZ*Q}l3yA^hvem8jW0=_*RH#sZ`a+HP%G&_?cj&9M=AAGJc{LTtf{A_9Bb3`t~PC=&QsHfxJ~HT zZ|qY!j>o`v#mJ!UMf5a3o@4*Zex>C711*=M_!ZNOW1nWewP;#+k*1}OsjHMUa=fBl_c|==U5-7yw<&8}r}~xXf1T`6N;&)=_p7B*)55zt zX}QeErTD+cpJ7}a3zJs0>#jF-&Fh~k5bD&WL;@J zt!d$1ZTbkc+%7e}TnFWSAbI1}C)ocl+9uNLW?~KdU-l~{FZEeIOYXOSi__CsH}+?g z>{mSw%6=vLq`imGYP>>d`8~*ih^R9hM8}OmG`C`U#3ByyFmNx@1znji5lKjf5hj=+ z!2&C6NI@#P!;T(ELr?Cs9Nb$uaUJ@gFRn*F+<+UAj+<~ZT*yFwWb!3E8v~GoTnxk@ zF??OHj; zV*+l+9k>(W$p3iYE>vJ5CUFZn1(leJyScHs2h&iE>D&?4U?ygv7PB!2b1@Hf+{WI= z&Eb4JfCYFE58+|d;}JZHh1@AV#xYoe$MFQ7#8Y@0&tNH@MFY2v%drA0xuTxODl}p> zUO*FG9DQA&)e4tRuYExt;(~mSGhx;>&4l@AAD7N!*WNcA3$>pjq77o) z(ZvN~?ATA@EasIwZ`8P&Uz-DB{5$UNWLKl@@f=NJh@Nm>(&4zJBnFZ|x{$6!WKSeX zB$*hAiI@rBZs>meHbcb!;1t5Kpbvsh2znvthM*rR-<}*i_a;tq9pPIL-4XOh&>=yO z1YHvJNzf@luLRu^^hI=| z_A#9m^j6SaL4O4umK{mFWF!$gmts;ve8f-0hosS@lmtnL@XeC`3p%j!$*i2`@nizI zo!mk0Bw=zFsUQ={Br=&yA(dn*xtmmxd&o3WO{S9>q=xWqn9~sSUC^NTsgKMh^GF@x z8zWs<`A8@B77q}vY5Fnf$jWEJdY&I4kCKIC5qXR(CQHcU&SZY64^jDl1=1g@(S5Zwver48+ny%C$Ev$ u$s1$`*-3VhH_2P%ZSoG;P4?iM$1LPq2zdpKks{J2-5Be9_@&q~n diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00055.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00055.pmf deleted file mode 100644 index 2ef9bc52ce15236fa7c95142da663926ef95a08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00057.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00057.pmf deleted file mode 100644 index 3833d4f54e3d235a53e6b04bcf88144f6132c889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 E8&*!g{r~^~ diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00061.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00061.pmf deleted file mode 100644 index fb2b5a433f16e5c49d6dfe4377230cde59a44654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5720 zcmeI0d2kcg9ml_tY>W-EEbYqJKvHof5RhXT8|**=LR#AbTQZVtW8%czM}XMa+>k&x z3<(hK`v~C%5$tw{i2AZD_~1We)87`-3HYg!z@pZb5(L|_JQ9MSuqGvQn&?5+RL z^kEAyD|&x{_mwu@&`;z)jC4%ZH06(o`s}8>+C?GSkWND6kf(&`P5KB?Ldu00K}M3c zex7Pc;`=e6|98Z( zkmYNFhK8FHC?r~tMA4F0IYQBa$qi4CiQ+E@#cW|&N_GozjGPzZBHOe%g;6HrF(SFq z$DF?{rl_RF@E%1Ch1&YY8To-yzc*L`PoTJ@v>@m%DfD@e?=JQgRaE)i#R@#t6Kh8g zuSL1yD<}+Wwm#Kkhaptt_J`RrAthYy^M(txzx>s;;|7m~+v}|gg)52_&59D=0HvrZ zUhEIW?+JKCN*6rtlBzFr&evJGq-zgmNP3SGn1$6=&9J5la=SnbVkePbiu3SyGx70 zRiX+g@f205&sUqfRmV(!tB!SpCPmGcPZUQopZ%sp1ZW0v?|id0jKJ zvs|v6tjz3Oc3nwDP;|~+<#6TYxiTD$OU#>KNg(JJt)1a;7Zo|wG$9AuT?v*c-V7!$ zE*7m3t(!yC&Ea(9bftCGURyW1`bCE;BP$~d>_a739te8%?%^;}f<->RQdJTN z`NUILX5AF#sOsleLLpW?6!!VmQmAuP3`sE>#Vm+UfK3hQV&vX(ULVWJb|tk?jED{zGo2+c$^a_F&o5@kZ-P+Bhp5^$e44*@`2Dd4{%2Gw*}=$s@w1}U|MNiL;YAB zr@!Hl?YJDVy9{0Ef#Dlk{v1~2P%V>9t{Ec&M?d3>|PvRJ3Ov9`N zEJLEOo3d@Gs%Bk`Q&Wz`bY;qV-N)##HjCL$SZm~nyg^Mn#hMZG86ncr&cjq-9iiJz z)2-RM*2-hPEYh;fESveVD6?^GBHECgQn<9+Di>7p1u||4S0{kNWJf-PE=5QK^fr4a4NNG5?FwXS&^# zU{(7?&Hs|DsCJgYkR<(B_c831y6YN=^6r?PB!3d~&z0)*{0-mPSjT92@}x1s9`|?V zIZL{(+l}*W#WDYW(qP?=W%4>b&xXIrr*(V7XY!}I#;+xg4K071lfKloae=L!t`o0V zo%*;kuC{fHjg4tZ=XJZO#yXbv!mq>&mm^-xBQba43sPRv?S`9DIs2$o?Uy{s%)ag` zv@uDHbIop;DTiYA&QdSkZu-!+T(yh7vr2yw_9g-9ZgNlEuC;%vc-_KyEqM~l)>QS` zDgE|dA3m2y!(=!Vtuu9d+~X;88FOvY^#rK zAG3WD@eSM4BaNhe^X+C#@Tn|vQs=4m+_cLHN1679wU+iIV>bJ@-ooD~6QSPW5+(WfRJG4g!Jch^75uNY^ zI-?7m$iS1xH7>H+4iRbVw1A{OaLok$E#o^rPjl?L7#tRsOu^7i5 zu0{>Ub8AzF37CjUn9S|!R7}Hk%-|02Wz57Zyn@-7gSnW8dd$ZHyvi-%LM*~!ypAPU zie*@i6b^ohjoW7zx2x2u4FN9%|p19K5z6 zZAm-Qo^W--_y|Twev%@c2*2boQgW3^oFs!hNivCxWRb3ft2*@q6<1S?pkNFIqbNUE zkshQcd73;!dXe75P5KZI@e+mPlLAsmd_=6d`;j72O#DQ=Ik+MdyE(>PF!J&f8xd>r zGEzI5|O1l2ha~d5649&XBX@9QmI<%v$LU+U3FDgZ>49 CSC+B> diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00062.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00062.pmf deleted file mode 100644 index f0e58c43548dfc2d2a7b436c9050ec4d22b2fbfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 zcmeI0dvH|M9ml`Bcb5%>kjLJ;yAWts6a;i*vLuk8BJ1vwtR%Z(cM}MpE3Zft3?w2V zJ`fR*H_Ag4MFAhUz7U@X2%}T`hqOLwwRKuMQ|p7Vb*xTA#irkL&pk`pnc6A+!|6=# zD@oKm3XYuNH0Q@t5&+82==Z)XGe}fs< zGUGV)JM&K~1eRL&uk(IZ32&HAls}70L}h>J-?h$Lwd zVh(8|gX271Lwdi;)6GJB#?x9Qwo?=w;AxM@^%!}A{6d@#ipVkYju0P_Pl&skr!Psr zk9j&t{H3g49=f}`_#B(T2>MVARRh-@a03Bjk^UK8R?_GuA? z-ABe++3g9Ie4>Go8I0JDQd~=6_P%}D_(W4Yl59aZ(a_jbn+!G9#ljdLYKYahWa6QQ zD8lUvJKAPH5GZ{T@T6)|d)ffuL;}YDH=+p z65&_`H6zO_gB2B36*X1We0_~AN%4YCDSt&xO|Z=0v(CIpHYSoG(cfkMP<_4M%#-r7 z=cCEyXrzqU8yZA^SgrHNu9-f!ZKglquNhfWRdK$*d3Hx}iin3r?5PXl(<`FO?I)k?1ZG z6X2V`pQi))8-3sE*@0v8IOAp*m0Qtv|69fcv_@)RO;XB*^*A7`@CFesJ!_b^_!V~j5dvFnhT;z zJHK_aO!tm&XnKz2?m9i&@9pj{0O!sEo1S$HcW~* zzem%vzI+D_!+C{!v7XiYh`6@5#AVi>ZLuG6-(tq8wGkzkFFjJ*D&N3S0DS-|xk9oxd$SA+)HoR$cU^o-O#Dczd#4 z`L>g^9!I3OTg6>N-CI;S+6~5b_S+!{FPotMUOm@#lYUfb?YQSbmEPtscB{DUxM!)- z_O#cL(_O}&a_J{~Z&YzDY>ZRd9`ydw)U3bldvB+T+dkAkQySxa9XWl}*Q&G@GdeY1+&Uooyy=^eG+{wnV1@Wo6m-d&fkO~thjeYtkodV9Sp z?%3-+sI>i6BcOEeZ;gp+T)B=F{aTF;E#8m)CdZy@qrQ#$#OLRUx60aZ9*Mc*+F1O# ziraU(nZB?|yi@$l=)99i z?0*^8rWPOLvlf_Xb`&%2SzxAl(#Yh}lovm*G|n-`nB|KMU+I-fYa{h{)N{K>>z}A+ z*}J{ToW9A!{$bsCXiM}VD!ub#_i^@Hwb`yUZq}Lqc18auym3=Az5R9Xn@ZyY�VU z?R5$*>a5+Y&s6ceezA^jxv-0$9^Ugv!~HwMh-`hMej zhQ8q~`B}S?TdQR!%RMf`1dN!vy zew6l{$@loWOd~vMfXHd(9Y}ZMakpomdKb#CM4hEa$#Q;J%QB@$$@J8@`cS{3>Lb(0 z^gaC$rbo$oN{?bWVr&Pka-^2!nA-EA*)ADpKeJ3~>phC^TiAzs7KwhwHpWfAl4bs| zw#qU6O18zm-&3mk$97E2Yw0c0b37-+bL~6j*s%0AF;1kGb4P07Q6BA-_O=Uc>k__X zd6DH;qW?A1qhvYM=GYVI|0zx%lV#GQOg|KD*QQ$OrIz(EwVYFCno5J?-21jD6JJ^N z6lqM4vYz`d^{IAQ>CJXIwz{YAf8}$3`xX1dXMDhRO*QLm`ju7YnjURgBfY&x8nYaj ze&snK{HnW1H+@@ZE3OG`eh2x{E!qMO*Vgr9I_<>y*zFwVqT7=ocV8^bUhBXADRMF3?u59R#y4q_xKxzrkk z(WpiZ#^8KhfD17e7hxPiTziEPK@{Uri#o(`2_~SPANz46(1?j#lBK|pUo>M9CZh#Y zFcs5qDK0~%`@cMJIi_OT+HSEH5k%AFx|Tgl05FXAF%8;CnhVvmJR2YQ{HM*Vo@t`a>D zbUo1bxLHGVA~t2XqeKS;JrHz3&<8;$1icV+L(mW9UX!2KGss|aCOL}?Aw$X8WEdGv zMv!v|cXsHOpkIQH$*n6=L4sr?;TM~^Q8kL!(M0SY)sQjdd~yM~kcjUR@wGXQgviAt zOd^E;8R@T}!-5_Qx-96k{GuWCq=Cdqg7Axst}C~~QoN>#_^xgylgMP!LZ*0rC<#NDh(1g#Qt6g#1q*1+w-wdHMJIL4OBAXu3oI diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00063.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00063.pmf deleted file mode 100644 index 8821ff155cf19791437784565ff2557b740a8121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 Av;Y7A diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00065.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00065.pmf deleted file mode 100644 index d9a151d7f9d87d1b05f698dcec0b50051d8e9798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 He-HX6nYKK4 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00068.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00068.pmf deleted file mode 100644 index c20e39a219ac264dd9cbf72e7a44fc089d1b9f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5732 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 Va)cZu$H@QnpXsLT|NHl#e*+9n`xyWL diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00069.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00069.pmf deleted file mode 100644 index 4a4a352811b4f7f9e7516a20771eccd0ea5aaa46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 zcmeI0d2kd}9>>4k69|x_y8~)40s{(0Vd5kNVHAZS(!m+s1LSzE={s_U*6DweL62rDbu?|W~05=*wWbpNonYP<63 zeET==_`U1b@3l5{(ws~H8p$DzE?^=5>#66-{NE=7;Gg`xU3*|XAKaD?l2@bL zf}3?|*=TM)J&&R@e?kWeH~(8cir&nwdC78GK(n@1ShkZ!AzmkM3vq&dnoprKjXsQN zMRt7*OFmmkaSJWlF^W4WWbf;1heoQxfmk)lB9+mq@|Ztb5iG+{e`PRKoecXcZG@)G zn>VG-U0yqH`iw~!We3YE66%*BwX-H89`c71s6*UNj0y%473!yOZQbmeS?~t}$#|kV zWGgG8!O?ao84uoMBN_>Y6H3PHcqCMn2u8xm(P;Hh-Rc4HsJ|>2E=MK&Bkh>K+)m2s zP*&lOvF>EdE)T{NY{-oI+5rRl`O-hw;j&0TOr*>BdYv?R8`_G^QgvqJOla37qaUM3ccZi!g}wVo<${7r+e%BPAo0KuW$eUzU$p1r_|NYsJ+EqTvSq20*ls8m1po~q-h$R}2axY~BgDztq0P2eKQIGPg{`tymv`Ss+V}XNJF+0ii{Dd|@7TblYz`3~};ioXD9a>@EgB*YC1x9F4CmL!|j;AM@6k zzp#9rlIKp-hggRXEuZUc*BqeD!mMMKFKhN02AZ~29Zp)lj4MQ4`UE4+a_XhdGCWSb zE*Jx)W|7)VV|iL<7z>>=c-&l?wy!f9o%U+0&Gt?jy|+1D+F1@xnhD3QjWOPLwDQMX zEPSBP^vzr>eAbH0EX&vN@8>o$?{xDx?XfeAf359$dG41^Ir!Y#>FDMI);&(W+HT`) zT4x)-a?)tK%s!4??`kYd>qpGqj>ezNQR(#CjK>_i>yJ5;9Ib_nUQ*M4ZIPw=fiCMu z%xF5zFyr&Ie$$xkXq+&UPWk$1qakhIY(63EuB|NdLCbdRT07&nPI|=6kJI*tQoacv zdYO5S9dpcIJ6h{!x*U!7&9RQwCL8ZKI%8U{?6(Z|xxQA8yP6w~*?$mer2Rnd-#CZI zof2;z&Umqo#M;SNn*9dtE@9Wl8iy=j-V0((wKe7%`Yg-QzA#z-1?&q<&O>F_&sja0 z-Xluan#?9)Z?l(W9x_hLa%gvT%i2eO-W6%|21B&>U72R3)x}Ap@9yxrqp{BXjVxc3 z`GN6SS{IoeoO-nevq9+0?o884>+6j(PI`T?u_2v)ym^`ByW}0Yc8bk`w3o^DK5vGk zW?jvvtV%~?iM1rHYb?&myfWdl_JKLnvFo+D9Is2S&1@ENsr_yAze)6MYrDS9ETDbo zsez*PqW@JI^(5|GM>788HMHdpL)XlDrjfBln;>GHic7HbXz#S|yDVmCH6K*H`6n_P znYX=KFWMIN`7d+5%zN_Ff70i})>|xd!#68A?z?m3y8h|_+q=W!yv?g=9>Frzn*I7L z{cjzATIY2w$`xbxk%+^t{WpE|vNy%j}pl z#+h&D&x&zZ{i#>T_HJmyZI+5HxyMg)Q`6?-9QHH&^+T4qKI=NC%#0p6jFX)UrT<&3 z9clj;Sl@~?8RzIvz}n*I=B*aTMcMWFMmMJ4l*v7#iaBoXh%Tu2wAj0yZKVgdX!lg9 zKe6&zzSsnEAE)|1a}~!z#wb<(1+*+**}DxEc~y*3>8U>w?>J%C|D5|BwM_5YoO9mt zsr1d;O~(IJy)s5AKUIukUasW}=shiVrcb9~nL@8HxlTI`I(LeCx4Bo&!)c_ykS8=ITS1Pgie0IA zCFYDKW0WfY0$P@@?5a#xR}~LgB3xb7ToqbR#ZP5dYf5PCpxKUX*(!WsOpt3_+GUJN z)%!!O>Md$%7vGPJY03wTHQ#0bmz*nMnbO{Inl^|&$at0Ns~>9BSJIv;N5-oHmyEIV z&0X}fK9g}0(w=`(*yTRR4Mr|rZldu};Nmf?4ca0T?a-d9ISbiLmxC~v;m8UE>&s9BeIj%rY^um=W#8tQ&z0n6A6yX|pxdkslUzDOBu0?+g zfDhO42sRKm;6@C>VE8cvWeC9Ld8`~22x1t9Bg9RA7!gD<0x`tF4KR;sqc9rPxCvu0 z7UM7;$>#s^!UWV{A|~2tiVd#i&eM}tFZ?6V=dP4$hZL;u?Y`gGq&JCY{fP_gom*m zJMah|#bels$FU1fpaD-}H}>Eu?8Vb~2G8O-?Bm(;1)ePrpb;c5Qp#@ z4ukJ-XJ7l{2VpLobr+jEh%Wz>L0G}Yu4I#vJZkbfzv>*D z(uatBbP>6Rcu6tg+klZ1jGbWg1mhhj|0Jk?^g-mlLV$; zHDn^0L?)9dMC_ZUk?CXxnMrOY{1PU=y77(5h|AAOq+(TB7mE>Nsirhz5lQraivX-nP>&XVPk!&Ilkj-QZd5~-+ z+sH%YVX~dRPy3zP5aoZYheZtD=i$_B(y2Lva7tTJ{fXt9ELB z-Cv(M_x8EB?>%#GYcuNSWC74fF4>a?T+Op1b=|iRVnypILP z*uS&=ZUz0j1@7Cj2BT$5+bf3 zEo5MXhu@Lx7kRiz#1}lQw8c7#+`T+(lu}QT9c0t_JRB6u>*QS#QtAlldw_=@iF**k zl0NX1Q81MXKm4 z#U0aF^AD92tR3156gN{?z3=EKi`GO!u{s2!l~pz6u|Ui7xBQ5i0Pn(56D3pj- z*HxIximGs}S&@i`r{xMqNX|=jU;N(?V_&R1>#kKU^r5aN(3gEu|T<* zux^LoxIm2ePQ=XeaJ-sLX>M&PEgk0X`oW9@qai6-gkYd5G0tiNYHd*#Wf*~Y&}1tt z9WvF0YAYtz1VX7>$^~m_xBs(i}V}P>YFpDuy{sOajS27Ns+I(8a0vd#2PaY zk4J;y5d1@ZCB;QW!-`9MrF@iCbuoEN$CanZ?=LF!bdQ`Dv8re+AiZAb2~<>gtTJ&A z``?UBGDC$dURf!Gd4LI z3)zp0!^@0Sgd=96DjE;V-59%Vs^(~$5HaI%c0s&49I>LY=CBM^8Kp8i)Wk?z`Lk0- z^pD=pKH?-?+xun1?}_y2P+tG(QSt;o&&xq(iF`69+H3;W9_mT%UxfH-NCurT{~WO_YIV&f-uhz`=o8BxVE7$z2UA7*Pp-j+Kd1R<9pgEe&3YXBmP z>@nDuRM{oY^K6~;<@s&RXFbx^+Qr7)uKITwj$hi-9$-XsbdJwdTSgjdZ2z>5ybZQp zYj@AEwDe(_yV17el|1%ys%)0K-PY-Ey5F!h2D|x8Q!yXZzZISKXV$a37wb`D0|#Bl z?Jr5c6&yY+|2`b?GLK~LWWAp&V|c6BwGQWB4ZnN4Jk#W@uFvgyv`cl4C1uw}xn=xV zV^53eX|_E*CvP|HUh7%Z8aIhOVs?!G^)feAJe_a3IF{Vov(8{WmByAXeMo2D(uW@{-?hs2cN}qX zEcNXpZPXg{IkX2wr>7g!EG_<1-0#`C^QiuTt$%j9`-+yBlb`B;uuTGc{u6u`{W6Y|oz6kx^UWCExZM3XN5nhHiT0e;%a0yCG5>TgoB4*$T$H~^@^Hpr7vm`y z@-^3Ejvg`&^VTO9v+Qfm1B~sXZ&y>#%-v*Z#*;lrm;SNFTk=kQk=>t;(fUk@ErScg ztnE2`*3O!5-(VZdvkysr&isV;3iV9db!O&DyHxz0EA_wI@uNfEAwKEH*skfuIbHfw zqt4dahq;Zs?~Pf#fzBou`@!R;H?=YGxORu-|3%sJ*#D=?QjI=3V>qoqX~|b9pONx^ zl$wvJe3khXy{sIi>i>oAs$bbvohnBue@DmhcpM$a zt$bzcR6UkG<=^GQ7^oe!I@_B!{#Y-L^LcsY($AR3daQhvs^?#I#JZPdSM{iTrP_jB zIb69CLca&D+S!u~v$|vbH7V?=|xy#O1GGCaF4e%InIJ=_}Shn3wqU*?o(t;xkPkjl3^Q*nyj z%2BEN)_1#aeYgA8cWamBuVQfY)W2c>_xXq9>Pr16btArGomRd|)!ERk&W3JvT0W{C zm9Gl6O1|nmAAM1PQ_&CoF#xA=r{&?^Y9P+USr~-DI2%K74$j4I@LPCMi1Xm%BD@$w zQG#I@ju9w@ALnx$b|FS$6h>nV0vL-RLNHN=a_-B*7>^04;Ico0D5@|KF~q?IFeYI# zw`+Bnf{So5rs5JLlKGqn=yHM$EuvXyV3ZCN9S;%;rdG!5qxxOlUu^18zyd79BHW0@Si+s+QY^#GxCOW3Hr$Roa3_}IF0A0zu^k;)g}ZSN zR^wi*!CKsh`|$wQ;X$m&L)d_a@dzHpV|W}-U?ZNyCTzwQY{fQg=N|KE?lE^_7j|P0 zp21%1!+t!A=fLq|uWL`{G0bJd7PG;l8T83KhNW!oGBzr~4QH~mee?hM_4;6#Hh@F& z)n%WjUlL;lG|W zjhsAlRl}Ue1sjnyLLT9&f!Pnte_#gW3mqcsfm4aRyy;H{kkiQN#6!*?1Id|$FK3t? z!TbnjNH9l&SrW{XV5S6fC73P2e95;|#7BxqF&Roq$S^XTj3A|iDTV#AFhgOlnCT znL;ii7n7;v5|SX7l4)c*sV5Djk;o4EGSWnv$xL!NnMGz3u0*UiaC3N`OSl4Ig5s+_ zGM`*Yt|DA9G7GDhbl38H9l4&|Ko*dNWD&WMEGA3HO=KxqMs6mzkXy-Z zcaarjC21!eWEHua+(TBAd&wHImfT0~Cl8Qy2M^u23Bj<6;Ig|U3)u&|2@q6P9>GM3fh0ab z5m8WiNI(IffG-}35k*BreAMaGX~(MAsgK&}*s)WK!;CG8iqq})chBBUoYLu({^4|{ zck;RSdw=^o=lssO=lpWd)#lG#m=8cBMP#oXxPez&_I@6(=Q#lWnZNfh0M_xwlf8eJ z1vj(cCD!jO-=YJzX77K+`-R24p`X-0kBmD-Y0A@y*>-n*W`qG&%)yQI`}WG{L8LZ03f%OUcK2q|@hls?PT zccj?Euw)E8Qz=}?WWMgAD5nL56vKFR`zgFEu2m6f9UhAHV%bXeiTF7=B;r$!>1hX&Hqyw+>mkg5;F8qk4MxM6xE)KI5>jJ0>P&0c^& zD3ne$G}VWd6^Y1jFu(olb^pBdG>+z;VcFdmYUl?VnB={mCum|=-YafT5{ z1;gxxsY79Pqxy=eje$_MDft=RzC-2x(eQZHka#=1s{3B=*qX6b-l{P^A5YcUQ`B2s z?eqJ***LwG2!$sF8tWU<(iJ3v^=UH>bNI_g_+sTFI(-YzuBe*d;_LLysjl=@HJ~vT znc5f*q*C!)54(&7LP_{RDRS)kJsZLT~kwYk!M44IX(etB>b%i)=-76tqnE)BQ; zJMR}C0r>~q9d5rT*8g7R^`D-zZM-h!WQE9)_i^DYx4(41tb4~+=VsAIQb6XAd$!wO z{+hj#E2i7E&FwE6fh7!ZlRnqbHl#QxhrQs z>NJ$f={-=JTav%jTp zvFx_h#(T7T&G?&iuh{$TVx7xeYfXRtU@s};oGj%krd=xB{7M&M7RkG;TCT znDx_NJK{Q+)BEIEXXE^hzEgDm8T47Dr!8%-(c5$We{&7X`IpJFC>><3o$Gb3+2Wwt z-;CI)pr&I{g)r40U3YgqweHv<)7m2yiFXRW}V}cU3W?2&z8nb#=CC+zy-(OXAHabRjkvT zGpgOvkMj4j>;%^_@z-AG^F8F;?e-7eBkgMQBxja&f3uSI@lIWQ{(1=;j=G03qK`B3 z4q~ofqxRS_`t->^eaqV4E?UPr@0L7lpI7vt)bkbJ#jHG*Szx;**L{+ z=BRAD|EyKJroFUV;#dAE25pqV{|hC9zGqI>-jtkQQY*U!o0+dvohQ(0tV|zOkIGkN zJ!X#GEP1l5Q}U#;4>t3&`5xp!M*0E|(YPtFa~swVdB{h96rd0T;N(l03pxzAQH&A{ z#2}o4!6-!;PDMFR!w?MRF3ZDx)i9iivv4-f!ElVgNQ}a{I1gS_;C%S_0$zpDsKyvv zfEtX29~W{9HVzkKJSK2^7r;aW5keS~P|H181d}lZ^?c=zA&vy5B8e3E@{4Jh&aGM# zX5vy@hRZPv>CAt5;0nyf9L(kRu^IDmC0fvmt8g_Ipp8$d9SgCD+ni2x;aXgW>$!!! zksHIsd>gzOw_qu5#WLK6<+z=@#1&YHJ8>88#wx7F8mz@VSch(I8#iz@-G`0Xgw41g z58y#Ogop76wqPr^;ZZz>$MFQ7#CGh!PVB-{cpAI$40`Y^_HcjsJolF`;6=QIeRvuB z@d^&$RU8E8i}hZ+_@o}hB6e*#yF7tmpUi_;!49uvx6;V`eZ%hm^V5w%ImT#1I4Mtl zNxs1)d5|+<(MipOpZeKb>p;>P4~@uY7Wt3wApJ-lkxx?cNvMGEdkZrinCsLsa`DQy z8s$n_%Vyb0?TR!TbqkP%wvrSrp8p>SNY8UN0u& z$pmr<36O~-NJ1n`CXreq-@PJaGT{!Cxt4E5Bu3&SLHK6KybEStF!zGl7tFt423DWT zns}W_E+v@*+A|k_mPcc6WL7eCl8PZ$wTB}@(9^Nwvuh+QSumhoIF9EB-_ajvXks0Pm!m| zZt@K2A&@*-Ks^FOrwYKJqfzPhKGh$gAWad5yeI{-=*36}_e||NeW>KLB9| BO49%U diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00072.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00072.pmf deleted file mode 100644 index 5415c3f446e8210461d25880ffdc71b4231294b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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
jPhV$ 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 Rd6WEKUrE2J{eS*F=wIh*{{;X5 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00093.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00093.pmf deleted file mode 100644 index c85f3b4de9d69ff0d63e97fffd961a57fdb543df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00094.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00094.pmf deleted file mode 100644 index 875bf1df8f3dc2320416710123261876b146d890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 - exit 1 -fi -if [ ! -w "$spooldir" ] ; then - echo "$0: Cannot write to spooldir \"$spooldir\"." >&2 - exit 1 -fi - -# Create first part of the output file name (prefix and an "unique" -# id(=date and time))... -filename="Xpjob_`date +%Y%m%d%H%M%S`" - -# ... then add options ... -if [ "${printername}" != "" ] ; then - filename="${filename}_${printername}" -fi -if [ "${num_job_copies}" != "" -a "${num_job_copies}" != "1" ] ; then - filename="${filename}_copies_${num_job_copies}" -fi -if [ "${job_title}" != "" ] ; then - filename="${filename}_title_${job_title}" -fi - -# ... mangle output file name and filter chars (like whitespaces) -# which may screw-up further processing by other shell scripts ... -filename="`echo \"${filename}\" | tr '[:blank:]' '_' | tr -c -d '[:alnum:]_.-'`" - -# ... add path and suffix ... -filename="${spooldir}/${filename}${filename_suffix}" - -verbose "# File name is \"$filename\"." - -# ... and finally capture stdin to the file (we are using "gs" directly to -# avoid the problem that "ps2pdf" is not available in all Linux -# distributions by default). -#ps2pdf - - | cat >"${filename}" -gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "-sOutputFile=-" -dCompatibilityLevel=1.2 -c .setpdfwrite -f - | cat >"${filename}" - -if ${verbose_msgs} ; then - printf "# File is " ; ls -l "${filename}" -fi - -verbose "# Done." - -exit 0 -# EOF. diff --git a/hw/xprint/config/C/print/models/PSdefault/Makefile.am b/hw/xprint/config/C/print/models/PSdefault/Makefile.am deleted file mode 100644 index 040f26077..000000000 --- a/hw/xprint/config/C/print/models/PSdefault/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/PSdefault - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Book.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Book.pmf deleted file mode 100644 index 331178985b79d55487cd9c0c1c3172c5023157a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6716 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-BookOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-BookOblique.pmf deleted file mode 100644 index 61bcb22b9f98b12c3453dc01d077702d55ff5277..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6728 zcmb`LeVklXdB>kKGm&6S2piD2q;Vu@0?Ec?NnjI_z+`5!J8ZJE*_}2%DdW9M5}^Us~@aV5b>q4Scp(CAEaprFCUOL)9*Rw&fU@0 z{=uh{{PzCtbD#5^=RD6j&pG$1v26J$5m8_kxFalb5!aA^pW`|=BEo<3{LplfOSp;p z_fOKWFjM3#|6XXn<`|JH{QF;Fd`%lS=xO^oFt^=u=n25|tx2bLVl_BRlZ{}jCRuR4 zCS_33$Czzs&XMm-+L}Ci#I@{xSH8mW=b~SuHsP-h`;5!3<4i zgDsluAOy$pID7zdB1GmvmTAeukTbO88AvzR_wpw+Osf#ChA!5R-VM2u>r7k-?a`9o zKyK0GB@nt}B$i08Pmc7b2Q!25fmDBHWJ9_y(-+&6l-Mq(RO@ysIk#iI=j}|77V;O= zUD=Qx>Prj^i<9$4xr=Q|Z5$pk4IJHITsM%d$y9ew#)^w>E?+Oo;Ko>AM)ES4%xq01 zGClTT$*UBdg2WPuk-^OH#-x=>e`;HD8K zV1F#0>gy&ou`S7gSa)*7^da${*Z>`l3?#c#gBiTeSG}&Tm8*gW$-a0xp<6CzVEETz zhSf1Oln(2DN4~?l+R?G1v$JD)=dzB@l`H%|<&Mr3%TDj`ZFek}c)EXhKu190UU{;T zAD^g27iCY5E??EPa*6(Xy7{|G|6R4r{9PW6>3~KDC#yBLSdFGiS+7#|Do)MKEsaKF zg+g>d+o?te+^SpIg*26kM@^EVCQH$7uQrj-M)TFE6Ro)8c??zDT(nkka&FP7?2LM2 zm_=A}YI(2Z6r!2QvODHv-DuqJ3-MAJh;1D)2{7?DcRB~bU2HI(BvkrAB00r>Kk^%5 zaX*=VWFFZm(vn8mHqv9Jjcgu@CHw^HwL0}vpM-A*w=|yRZ>F*T$ctP@)vM|N&-9ab z@bmllwrN@q3=GR9s>|Fhl-uMg)zwIHH(TD6mwfqb*$3Yu^N}x6an-HX$~3K`mZ>w< zI>Q&sWpXoZ+mW})w`8w6Q?`mU4#{4_w;*3856V~2Nx+Yl-?D;#0h7kt(kFFUsh7Mj zpKRQzpUBBZ4r#naE%`eBoWjkq@;m&o{jQW713yJxHFDi@w(JjdX2=_XPMf@Lxb`0( z0zO9$20F*c^KfhbBsl_Kt4;Dd8-J)!#%IrP?Q@$n7|SnpEtaF@RrsBaC(vog%Yl3m z_TTdDw5xMf$+s`+BdW`fv&gUIu+Q7od1|X4XHg5)>OkiOc`o4l`xE{NxWAVr4UF2^0UX!cK)HMO`418->=PR#iU*3}6`8w_N8uTmwsl=Dh zB8E@-`YVaqL%w{Dnx&3|YadprkE%t!e6@O1-QsgmOO*=brv`lqdDQ;v-!%Di=G$7c zZLMYwG>|hl8i&n1TxaBS^&DfqU55M(d0c+l*v~AZU-5#uI!Ap#MdjbMKaGZZkBOW1 zZH}5rgp3@%RDBTpRz6*|A%7P-C&}N*wSG>gs}s~b zZ05$(@-r((KhPmBWwi%8_V=PvKA)qGR>#4$pRZ^?;n=}9>%ZnAH^}9_{tUTK?zH;y zVR=Aq^!u7EZ(#E`W-N=N`9xP%hia_g>~_m&ljkWJO{V-pOCNk@;P#^j-mA9 z&zmx==D~IRUy@apS1w^5Xgl+;@se8H&^2ua_VrrRzoXPl{CT}` z5I$c;k(*q%+UHQSPessQgHEUX6}2UP``Yl zu7;l|cNu;ie5HI^Zd1KS-ZtYsVB$<$Ia$454lQXUY74si>!W|{GiDjFUV_ftFQ2X#P{I@wLxuCtBea7bzR`+Hg%9%bd#CG z8TP~`->iNC-)-bu)IRvthHqAf;ny2JO`a!@k5Lae6stOQ_#9aPA646_OV;M7ss?;O z^}(&p?J5tqcH-&=>XIFcu+EzGP|uO(-qEWrrJnSfe!JC`0Z%9w9yjuo8iU)pr}NU3 z_fUnSYRKr!QO~La^zknIY}O?m{}evAVPDIWDjV=PacjfAmak`B_?-3jAhoC$DJNyt zh0i%-JP(g+F?+F=8%|#{7_arMOUl5i#%-JN(NcI%D0(T{Q*y^#c*qL6DN-*U!yiLuX;@_HT97BscTD@N+6GGK1=%= zm4?2UpW-zu%&XNjB6E~XXRm&@%#imGi&?D8*_;R3WDb?#czG{td@l8(9pC23pU8aq z0G2+;YF|Lr{}2^*p)BHba*8aLCDOsl{s^a=?h~Sd9uCn|L~I$ z*&&XMN|x6`SH@&qCU{XfUv^4Cic(@%EXxJdp{mrVQM=?qUhgL5V)+=A`%?DR%Xt&L zQm&G#e<7cgo8=Z>7C$AoQlURBpWzJnSHNe2Vy62X;~8-e9k5s3*2Mg5Uq)=yjZ-p(T=5oS z`t5`hXV$G4xy~Q$wJ%NRIGUL2xc>pd|B9Z@13tGx=b#ngHrrO`;18jF4e#K&&O`G%2~Ywx@G)>DAn&YV&SyZMLhyrCEUaQ-6$`7F z_fPN{a2H^Xu|9=0De_(LeW1tokKjjuIWA9tC&5$TXF$K-?F0V;eg&QZ`@wU7`5-TX z1K=g_GB^kh0p>Vo0)5`+ixG1n0vNtJ0W1W1zHm0w^Ife0>%duHJxG8Jpa+}{m^Z2q z^n(GA0b9T}KztN&SKGl3z`Rg7Fb0U3Iv*6kE^sj*UV6`0#6;ZzShu>KsIP(V0Ait@ z0*sX%TNM7QBjj!xm<`?s=7U9G1;F1>59kF$fWAZY7rF>s1;|5aFSrxXPw4LfF%LZs zehK!2-va7hh$^y8(TLi9>i8>;Uu^u7bJf6d@-O>P&=jM$QGy z%Lws}5ZlP5;CjG#Be#Ov!QFr{N4^EV4}JuGUM=$(N8F3D1*a$%)IGi$jTWR-FOIsE zYJR*VIj>M~DpGbUS+`UZrwFS$rJOiruUe~kL%9 zdR4MsvFJ!KUxH&H@8zUgaHn@-53SLR7ZZU6J!L3%sy`b(CWW3_?Wvha#ZdHGb z5~uc#jsc?;C%e%R79utLAm2 z{V#{&RdQp*u#_+1bv<7wxJA#7xa8GLawjH9UrDAu`bp8rR)}iOCD0_6)Y+WXF7&E( zlemi1CU_RyIoW#6m114z-XS>U2|vNwfBhkmf#m4i5wA4Ws_0a+bq3brnT-WXB)Xz= z44rTaW41qESPe37VidF4h*>9MHd|u__aceec*dpz6RYSr#*z|mI+V1nleTrTrFC+u zS;{J-?DcK%9tM6HTuf?e6D@--Z<#*+)dOdq~CDv`*x@}u;XGBxdv~wZ_7A`Ax4%2T zd+wPtXU@!-nR``#B0CCzBC3c>gTNA&0rx)1a<>q`zkdGiZa|thVfTI$D=rud%yRF+ z`Zaq3=eqYV(|FC^yrG`hPZGP0H=J|=q1zU6xHxen(I6yBv5*+MQM zRuXD0FIN-V_cbhcf18&(Jo1nzZy+{`wvk*QL>vpO?2R;-u8-Y>l*aA&1Ur*SuI$SBrU+adJae8j+@^-p;O`)~J!9JvKku z+S?gBIg0jptgXw?j%a7RwYw`8Z|j{8-%SrX+ary!wq|4zIVsu^X^!^lHqh7->0pDs z9nt1kXBT}=<(>Na=?&!v(YD5TlhmBbZqdJ5-KpA2M{33S+FY%1w6=CyU0v*?qp$B|1j=`j&c-MMB@ddS75?eC&yF;@L;0VR$IJ`g=wW_ui=Hbuu{+Y_j$1h& zWrFgjZsX-NB2{{YSG%-z=Q}J9R2$SrK9eV3;3xUd-$VL3tgmvZ$FQn*@0Q~#RbP_S z2cE{;YN9KDfc!LkP3}~yTBK%TSItMOgFSBSlq4a60HE#_^j|eeST5aUjD@YyY#r>Q}TzkO|7CPsd`m|UF1g9k!$}; zB|L%cUSHI76*E3i{!ca0ljA15ROYMkgvZrf)mQfUb&iV{lcRm(d#l!G-)VEJ+O@26 zHOIyELCscYdK^1E-{@zv&;CX)R;7|^^T{_?{AXWYD*Lkzca+=Os;bD%{5ho3FSVr7 zu9{HsUybtl`D<)0+gX5Rxem#|&) z+r+u#@sE7|Y}aiWJ0JS^A}lNG--7$g{ugmh*@vfTbDQh`U$`B*^I5g14v)hp$KSA> za?{qGc(kmu46D>JI8i%VulsA_@0b6EZCzek@9IeI7&|h5CYNMQ1MN$$nco)r^M2_y zeY4%0W4!a*H+kKtbuQz4XxjOKaCJQA>TxEg@NKSRGfK@`XBBr&aE!TYuJUj7s0amJGOBZOqT=Qj`53_Fn&W|_f#oTm9K+NpPKivKe|>%ZEUx#rF*RpaAx$j#~raGhbhU9=fc zD;N{Ak_Oc^Xta+BPwOXBl*Ji{C}_7A{o znroh_wp_$hgl$oc!2b!TWFs_`%O%g9HoV=4FgHJ9A< zYc%Ji*Y0RlOK$o#M*C^F*&knl9PY(_wNe;IHjbmR!?ih%d*cq*<~ZH1iPbp1ABYdK zJ_l8ldriN)o^U;M*VT|ZnDQo(S4j(Dl%&u<#n-AJU!`{8Oc+HgyYoF^4EDfSs_u!s z@FnbxeXuWm*$>s&9|v%TPvDEkft(=+)6!RP2)@cw(4qJ`CSno}<7wn@)SwoVaRjFD zP+iCOr)k_{zKNr_W;Nhw9K%!1ahQRbd_{}!MAV2TzFN&jGg=VC37CUc%%!(+v~w-( zKqoV|8z*5N=A#EE;}pJseG8|S{trK%lorB59}-ByMn7NZ29e_Gvj}MnAp?gm6sPl@ zCC~F)k*m~VzRrzcDbB!|I16Xv9Gr{ua6VVR3%SBx#Jy%YzJu>#1?SQwScz4*6qn(0 zT*2J_K7N2JaTVVRe~2I98vGd7Vl}SA^|%2)!5Z9%wVY`;;bz=|pW#;g9P4l!bN>$9 ziC^F@+>Lv1FYd!Hxr;r32f;l=kEcGrs{NR|0?y??twFGd<&Cal58elusp3cQJaX34&uK%Ktgq|c z!164DcC;S*q3dz)m-B@@)1~x9WYV82Tu43PqT|V_$9+}y9R%2h@Zinl(hpCcb;PFl z#(Xo+#4oOfIwq_qu~OXOb?m%S+HhlDF2yco;+ynQ#zn_j{FT0mjHOydF0!}_c_#f6 z8SP42`k7l_V&p-$MLXr#`?$nRj|0a*;_1N~Kd%hDX6k!3{iXOI_c}fjBM%%u-8P?> zWA4S?Eko0N`d&Sj5_dneO|j$CDRa-hlzwm=bi2n_=0B~%>~bs_H?B%gIO$R7%+>$EC#a}%wqFFhhxMn2D2E6R$Tj`W)m&M2}CQ=Mzj+h1W!ilBw{|n z_^1WMsl-B}k4O^S7Zqd1cV4J8F-$Ba7%z1x!I-G)2KgnA?6S==4?B__5w?Y^9hba;2L5L!FB=<6O4J_N#aFf zEAbZbcY^T>?BE;@5n~9p6+DDEjF>_&PQhk^Z3P(zSucYN3APu^6K5042=*^{C2=ir z3voB`An_>iTVfOOJi%NFa@>O3iBAajGc=0eIEBU$oRgs%;z)wy6ylhKnBO7xGqix< zybLkEA;vbud0%xUXK2X6P%1-C3n?dweA>zne(o-xaMDf&d44%FEN$oWuum`YOW#1w=0~j@UA6P_ z9STVVks4=Qsn>x-DwRm(62&1DGf8%vAJuGnU=7<}XxkU-w%cM3 z`p(xpYF~=Y$MlfP$Sl3x(XZkoUc{`!QkW5+pUYAcv zq}`8(aB|6h#xRr0(CcCVgOeR}2Uz@3GRz6W=$9$fdSWt-r zos%&p9kkN@raf1fFOR&AQN)Z!#5fT#qt&0bmmp%|8L0#&l9M<_qG{rm5~0Yb`K(f|Me diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf deleted file mode 100644 index 45cc8857bb72604b00a693866baf9364e8a889c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6724 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∈D#+>dExPk4~W7t~!?K#OB$B9OkF`dpi0CVC3u}6Z7LoC%Xp*m0DJ- zVPPWK*_F|{)Z_4-!4?sSas5oqb|_G1a4(-;0=xJm$o7l(E>%wzk;xw$@nNteO5#nS4fT z%y%1`j`mdVK%eY76ILE^tR?wMbZYj%==3?W=S<`8oL2QaeOfdwa~DmIxD~VLMw6wi z?UZfDsF=A!qVYl@s%+h;W4flZoI<|KQY?2dfUk!bMG zW@mo9-B0*uimOW(NH7)+cByh=L4Ul%Ppz6a95ftY@)CXgIf+>6eahcaZ;N*j|64>J zqkJZxe2GiWO`B;Vw{qqsw!#5e2mbG%y=Urc$I@-H~kN5wcqmHh5N z4D`cz^tJZCxbD}6fcya&gCFy~0Y9{*TwnJEc_1{$5U@jZ{W%8}yTFmRMfc(V(-xA>O2K3(u$kzq9_M?5iACSwo zYB6{LzD;qp+~IZdT0GCzbUY8QD*0h5&VSbAynCAb1B_R4X^~2azHO$yV2y!RomQ9`Kz1J1r zN?sc?(*HgNd0Ct$0vyy0nT-m{^c4q zN#%K*;yVA$DrB91&G(Y=Q(s3yskkZal>24-Rw4#l@H8*^|N z4(H1GZLWIX#azVs!qbipBrqSHJl7<-q8-IG;Ar$9gie!|KP$PPUNmRge+gtOblZQ^02sSFGT@GlwkA7zl?7cE-I*EIZo!Q)(B3)sW=U% z;|zR{YyO!y3uogToQogu)odls#}BazKf(q0F)qYKxEMd-TiPYK6qn(0T!Aa`GhBtM z@pJBd*Wx<-0@vf0SdANSBYuUOa5LAdTk&h$hTHKQ+=1WXPM)yt#yz+f_hAiJ(EIT_ ztmBGSJ0m~9cdP!d@Kp}}-^Rda-rt~hgC;I*@@&~cOeN%(6?qa*5GmqVB1`0n5>X*e zCC((yCe9_~2bS}RRm26vg~Y{#{MK?QaTRd`A>YXEAl48M5)To7Bpx9)5q~1&ThC_V z3F6Ph)5NpH^TZ3pUx_V*JdM3Vyh^-A{DXLdc#Dv4gzpjW6Y{jh4=(ckPO$repOC~9 zqK%kMu&?rLA$Y3f*?`}5hz?>t(M23dbQ3*9FTwK+&o$uQ4Y7z|e#CLa3B-xS5RoH> z3Fb_kL==eS#3=;xB`zYE6LB5E&qv};;$C6{!CZ(Z2=-O5UxM+AZ5*d#h#d*;x1q_z zRAMHIo?Sy!e4l(DU$B5^MEyU}@y9DzU;%PD* zA-H3Q*;aU8;y|L6V4lLA1ltNT58(mgM1t*wUE&PlJc9iTUrt;@+(O(#tRprOj}n`S zXNZ>x)-Al1_!q%`M#d7XQ)E|yV=^+0;ORWVIz?EM$O59DIF8`Bj4;0u<~DLVv65ha zBUcbSSx0Up*yjjW{>VebCgLf#Y-CNCE3yTnh-FoqA9#ieC{>F?rsG;mO32xTg5jWS zI$5(+fl(xLjZzLq*>)?AUCx^*8;)5jn8Ov#)VCoR{B-14?oyNsRTo*iSTsQ|FQ?$$qh4yC9A}!t5%_4 z7H!?*l3h{7&5y8rB{=31OEzTYP&Bd*vzjxRXcm^G(>1G{Y`axeI0uzHpVjY-Y_(#d zSe3Omn4EInFR+YX`OKO*Hg3Q!HLQw;o2{~Afyi_&sKi1$vc{x&qcE)7^M!7`@+wDh zU5&U7BCe}7TrgK4uJajhBqr|2JjVI4xE4@CTPL)2B4C|pm?gDRQY$3`O38*&BGZK) z-C|1Xr?h@5pr7&;8fL|6p<PJSv(9q2q4SPdn!Z4AoWrF3F)~2>L1J>i@7-J* Jzxey_zX6G0lF9%8 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-BoldOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-BoldOblique.pmf deleted file mode 100644 index 8db974018eb4769e3b86d98f0bd9120117f7a8b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6636 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Oblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Oblique.pmf deleted file mode 100644 index 87aee16cce34df1dc92957cadd6a5ecd31893099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6608 zcmeHLeV9~L8ULM~0bCVwmE9EuTp(o;24PtUOp#%C*d2wPWp|dZ%;oOPg&mohJKUK; zRR7xXLDkJkN^OMlT$3ndQ-gEAJ=wpB6(|>uN=Qr~^ z?|sjE-t(Sw-gE9zYZAE;02DEbXbu1y`CsFgll;GqvY=nywGTN9O@4VBE55luu)r^a zx|?a}^L}{;jc=}FfqG(J+Z$szi-!`rZ6Q;|iCM%vArWGUkd?%0A!~?1AsdL(g?x#) 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 DTFZjv diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Bold.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Bold.pmf deleted file mode 100644 index 30d462d9557c088ccf1b2b97199aa6908745efaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6680 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 TxeWUH>*3vP$>i_bzyJOZ0>4$+ diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Oblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Oblique.pmf deleted file mode 100644 index 2a0de8afc048917610bdbe10f50df24285645692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6688 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 OpMLM|CHdCxzyAUHXlJJY diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica.pmf deleted file mode 100644 index b1fd475bba133f24cd5c0b65f60625f9f2cdefed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6672 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 Va8-`VyDgbK)OU9u$!Grm{SRgFGYkL# diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Book.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Book.pmf deleted file mode 100644 index aff4b494946697f5d1e21f580382898bfeefbd1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6628 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-BookOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-BookOblique.pmf deleted file mode 100644 index b5b77f353374d2e4de6f476992d60668b18de509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6640 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Demi.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Demi.pmf deleted file mode 100644 index 100339854962d18d2fc7f9db79477970a0dd47e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6624 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 VRgTKDEt&k(TK;ig{O{j?{|)0|C}02p diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-DemiOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-DemiOblique.pmf deleted file mode 100644 index a8550e70d0c1bed34d67fcbf8f7baeeda1279d43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6636 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am b/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am deleted file mode 100644 index 40f1e3da5..000000000 --- a/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/PSdefault/fonts - -dist_xpc_DATA = \ - AvantGarde-BookOblique.pmf \ - AvantGarde-Book.pmf \ - AvantGarde-DemiOblique.pmf \ - AvantGarde-Demi.pmf \ - Courier-BoldOblique.pmf \ - Courier-Bold.pmf \ - Courier-Oblique.pmf \ - Courier.pmf \ - Helvetica-BoldOblique.pmf \ - Helvetica-Bold.pmf \ - Helvetica-Oblique.pmf \ - Helvetica.pmf \ - LubalinGraph-BookOblique.pmf \ - LubalinGraph-Book.pmf \ - LubalinGraph-DemiOblique.pmf \ - LubalinGraph-Demi.pmf \ - NewCentSchlbk-Bold.pmf \ - NewCentSchlbk-BoldItal.pmf \ - NewCentSchlbk-Ital.pmf \ - NewCentSchlbk-Roman.pmf \ - Souvenir-DemiItalic.pmf \ - Souvenir-Demi.pmf \ - Souvenir-LightItalic.pmf \ - Souvenir-Light.pmf \ - Symbol.pmf \ - Times-BoldItalic.pmf \ - Times-Bold.pmf \ - Times-Italic.pmf \ - Times-Roman.pmf \ - ZapfDingbats.pmf - - -dest = $(DESTDIR)$(xpcdir) - -remove-stuff: - @rm -f $(dest)/fonts.dir - -install-data-hook: remove-stuff - $(MKFONTSCALE) -b -s -l $(dest) - -uninstall-hook: remove-stuff diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Bold.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Bold.pmf deleted file mode 100644 index ab22aabf5ba537eb6ba21e711af104927415cda4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6644 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-BoldItal.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-BoldItal.pmf deleted file mode 100644 index e68811eb72786d818a63d0e0ae05849a24160868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 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 V{;C|6XInD)>Gy8-#?Sx$`yUjV8&CiM diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Demi.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Demi.pmf deleted file mode 100644 index 5e786ec4208042ce71f6ae59604209a6d7bc2623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6680 zcmb_g3y>7m6+LfuP*FgmQR0`;Xn?>PKvtGtVAvhlk#%R?nH3g4Ywt`iJ2Epp_RJvb z|A*iQ@vjk7{E=vkzeG)l#7|kNgs8DJYND2f-&l&4NklY?lXKtep6Q@gs;umF|y9RZK z?GBvdUB61>!}jC_^~Aomx3A&6+@H{W3mGd;OeCfVX(8H$EF?}4k|t~+CE_$87ZDc| zYCZq1A++!7cpkcif4}g_22p;3c#_yv+<8tUZxZhd`GWY8MA3T{6Otf4ptRv#lFvzS z0E04AB(IQsmqgL$P=sXUYb2A{Dl~&QiW2NfatzPIH;^1Jl0T8yJgZUs3l)2#t%*6Y z-p)iam2ByXccyyhCOT3b(W7HXI+dk%A?r4_+W9QzCb~OXyLw<{oIV?KqesWvdwR8A z$IYe7qdy}c2_Lz~PGrlm^-kXds zilH+R??@Ti6-y@CyHoK*NAE%eE_#scjJCu(=Anq_v9Ye`yjZX911)XQE_T@46`L1N zrs#3DsWlNu*Zn$S3@X|nfM zB%jjU=-F+Yh?YcWPnV1xElzRJ%`P4&N5-VbMkY>eZW=HDQ{;c@#waYNpXw zi&S5&Z4xWg>?)TSk1|$M-t!fHA?{R@tG!zOiW-T(SGQ`O#A^JQKRI5Yd{uRg=ABw@ ze0vN}s3uRRN`Gc}K5x`qtK)+J|1hBQc|iU?`82QXXXJV;jPtAHP1=mY7g}HXRrs{V z0rBTiudVp}sOQgn^m!YG=+-i>d#jIV9+YpwTWYo!x0z~*A2;=5)vTJeHq>F{#s{d; zDq7Q-#Yp?|UDQaQ<72gx&(&lVuj#ke^>G?=;kCuv*g~%3sb*5&mv6&%pQ|&}1vP#o zeQ1(BgMml{eBP@TE2s`FpQd#t2K?WZI^MjZ$9`;~#%r6#hv{11@VnG{_7#-tpwLf0 zCW>Bq<7K`UbG|j9Lo3~?MliPK7zoI>ORTC7>Ko7F`RZnv5zAbiC3BT_-o{q^*~{r? zv_H$^&)^k2+n?duVNFg>$Ul!=3E!JvMQApfwqe4WrG@}>n$rU>(z|v9IYR$S2y5p z%Foqu!;Fux4Rv9Fud8#g&M?k;kI=QntMp&t*LrrO{;Uk}ivwIohw+hpr%68u`gKYBtfUtC z_IKoKJv$=5(s0IewXcu!0(>pGr_Y?OR+oBhkE_=)CADZ}pcbw6=B?DFAYc0p^2>}I zCXXLW54v{EhdeEsy5!rD8WrTeO_6(cbY1etKD0hpRhZ+|^V!rEHCp=p8m?=dCm$Qo z85iJQE#k~BF{ftjo4RD?3~Q0G&jIYny;`c}+9q|%tTUr!v^t;cC9^U5o2j z@qdCFum)>!BW}XYti-qAR@}xleh1d$r}!D}#9jC~?&iDTJ-8S5;eI@TU*cDI5D(#D z{2IUEj`mwTf{nFzQa-;bzPqW#d{1L#4&7nUz>3KFma%Z{Xqk+i_d`RxGyBppVP7Iw;|-*5;ktj(7to&8d6@Ua-k>L! zv2phjzeD8uo{S?HLy5cZvwxQONWaovav*larq`|}^Yg*IM+v-sC1!rCwcKmpu#NUS zi0xX;{n&eF(b4e}KLV)PK}a7mPO&R7{~9#pD3?4)+yd}( z;GeY(KLmxt4KDzV_4g4B-6NhwKK!iG7HJi7~_kVj2-662u}RO$-nPqD-7l zoJ*WfEGJeF7ZH~bs|eZCt{~`-{$?X@VjMr$DY!ntH3>XUJW2eX_ye(tc#3$2c$RpM z_zUqOAx~Z}6R#4l5u1rO2+ni7L%d78M{FTJBt9ZIC-E`CJm6F2E=+Lv@=1p^A8HcO zOmM8+Yt5RU%`p=HE*1oIGDOWaPdpU|TOV;*{%_#3gAc%S$O!FYwXa}I}z-3a#8a0oG$ zm_RU24f6>0)xbFDxz91n+-)ckXAvt1j<4Z5;wIuQ;z8mO;tAr9#IwXp#G3^3*07cM zoZvXaI}^-PcyEGpGCZC*f?%G)%t@GQFwAj=k0&@U!;Ej3u?=&6hgT9DZ}@uRW@0_T zF^4x2PZFDm7fMBby@9drQ+}tQC|*)O1{r_OWDN*WSm^ia#6J1v|T8}%9E9> zLIzgRDV1HPIAEh_xppCE_m>URAEsc**Q0D{35vN&327&vw~)^k$Y~+#WKhakrGc;A z<4CM>{#M(*Shu|%UFfSoPvvYb<7Xn{oLYd6w*)blEi6X5 z;xfqTK@8djwsn@+g+At`WT$l)GFgk?>PlIOwD)Ncj+^Oc3=7!;y{=?)IXmx|5f_}Y zPVT@U(^o+KTOaaP+GSKTHUrJXGIb_rC97u+pTW|{XR(Y$Gu5e%h&rB?+#6-K2W6}XD*Khjsgr!>Mb&R4W8&Ts#)MTqa zXD>t4#4}nCOw^S)Mq_C49g3OOG1EF0XdSCJiyNi5QHlqY;&r81stp~c$Ar;O82v;* zKjA6Vo8>FHa<-ToM8fIIWjUwOZCZDm*4=^D-SuWY=5DGj(ba)cX~1%ekkHG#G`Flk zLw>83nPt`6TRIY!jkF&LrdwLurnMbt&D{AjD{GXpM#)!}M=gG8t?lx!)oN+AEq+$(Z*`#+KdZ%bpL^d+o+ztpxtg_h-hStu zbMCq4-h1wSPxYn>y8=+e5MpHjSix(9d!Od@Bg%sA{np)pMZ5{Q_boKqew>FNzzEAhS|gdO0YZ0Nxbg4iKI^?&yy_URUOQ~hLzos=EUq+ z_xwahvLo6apP%fWlW0q}MNWvJ!>KH{^O<6}+0JF+WhRWBNOrZxj1=?Z zi(;+a9r496%umGIl7_a&Iufm&$#|lzdl7s$UFet}iN@RJqJYSPSbJn{tXsE%XiKD> z4R*K3=Eggcj5t$r8XG51t38OdMH9_pIf0#Gd|}SgdWa>O_<^Eq=^&56DE!i zPnXAtFXnenBC7npyVm^t7ZDJ<%4(enZ)c1D`rF_Lvy|EU|uD@1Fx%Kx*g zTdKS8s?=}Q?R+LrzQ)gO;}LBt%hdeN!aCIi@ei!VHq}&}CsYkm2UD(pN|EPqtd^go zR(kp>qe>n}2UgMcIBl>RtJN&DXnrO6OqZ{tpJ~;lTK=jUj(=3QX}*AEV+vxLzfAeX zRb4qSpYr3}*xtci^f_1Sd`>?zMb7*@=!g7rutNLqvo{Es`pK4O^ zS`5P7aZxt)z1WUYN7VRXYDkSo)ne-F7}N@mi>r@YvBBeNZ)_(weNXz@+D8qq>0Ga_ ztnnqPy~dNin5V1pHTeQP2O`n|74`WX?#tmJKL1VHr-`9S`!W1p&TTKYF4b7`ANBEZ zY8OwAjku&X$8MzmSvrOIf_%HQTivLiyo8skTVS%1^v%`x)DZ3jW=ub1KJ~n!#S3@~ z&$+qUg?;hluVb4h$9B%inP?aP+^4qFkLLKur|&S%F|Pkjnj4+191G9qa=k`O9&&1J zEuIg!HJR8HK4zR=Ji|E0o=2PR*JnC@!#CnF%FXXdyz1%Wa>hB-je+yLCV#fx7d2h= zcycv}axW);!TXeVXs65}o_77OVPCv;J(_u*fm8Jpzx)%%xvqM#XG!yCs6WN^ z^I3hK;6LQUs(+U!>QHiT4vYT-alDqxSTvzqTW{c+8dKd@%V(<|Z@u7RY+@~H);hN^ zCy!O%)cg&-Heb>FbexULtLua-zwLE+T8-58mX()lr>Pp%`m(Oyt$wQcy||6?^EAIx z^9wXDa9)k79;ErFI?rZq%#nG>Y9>FaY1dXaXnsED7_eCLvwS|U_^SA;Rkez1WTv~u zukrD<9%mh6onf9U;*;m5h`LC7|1w{*6S=!HXj|EbSYx^GtoO!3*Qh2Fvyxim`QMRy z{zdNXHd2dRecb2czae+^Im0%1`d_GfQj5H{q!wM|uFW0!nw`imap%9;cRrGyDSu6q zy5#xXk$XNx?)qV^YplgH-d7LzWeu6(w#C|_4&MoPYaK*qluyU26(XN*fn7S;Uk$UXmWQOEOH;+pm1xzNY2BKPz+kQ;ra_FxQNjbbfwQ+2>Dc+Ggyfx$M7QY&&uylzUWSpi3ZlQdP$cKpA5aa}9 zeu}S90lqd3Vpey>ZWxT+u?N0^J*hgBQS6Oh8*;b@HK@p&SS!6fc6Q!o{cn1<%xiLJvxv?Cl+8K7NLu)>^oS3lW=nN|L|kYJOvhd zc#28GMlY74kMAOv0Qyh7CNQ{2aI87q}gF;7;6yyLqa*m%I3VxE~MTm)L{{@em%ay`S>@s!k;M z#;ITKZswH;oJ(XW=LuBtgeeet!{y}E_pa(jSMJ(rot<#)%e57IjX`Xui~M6=`EIHq z_YV+f@_qs#aj@n!beiX47vPC7z@0(cKF2F{#MX;Zo;8U46JB3;!5!5fyY2(mj>IKx zX&k_-#LpL9-8Z%=_c})sJMSeIf!`aswvoQjUOmMt`%}vaeFV5`>b!<2m$uyg*RGOx zv6nVIc=z-r_Ue8@d{eH*y0X8KOHM>~l?&;I_z;=2!@lTeuD#^KgTyI0|0)Eyi|Sm; z82BLV`60RY#z1qqcOfy(O7QJets{7fQ+E^h5swngg?f=-UlseM7{B_QV>gJ{ix^HEL>x&>A{cK& z3o(z7b<4IJ*j~d5;yi-m&~P1b6Tx;Genl|n4bKvPBDN6k5g!oDSHpJB+aR$A!L|a2 z5~GRn1oIS_OR%i~^PuNC`>g9wiPy7;RRsGNxSCi?+)8XD9wHtio+Mr%{z$w@aNGjh zh<_98XK+`7;}qPF;G7JOC5|CDPC<@IkZU~1eg>BioR>l7H^|%uxgLTS66|kqHNkUd za6Q332OlOLC!Qi+E*1C<2lk3o*2-a7#o>pdo-Fc}T#sEWWtQfVcCuNkh=N^A+4(Z8 z99hZAr(qSGQn~09`fL=eqMgs$y=BAn=P6k74JlLVMd6f8-%&@FoD#2b>;WxddMVlY9iVW2*$(JZt<*#)N=qXyMe!HxL?jbe7 zxKghJsZ1u7DW)npRPt$dn;+9`Mqn+szt*-d-fg$VBJ`cFrE(^l_C_M@oR){qw`EEQwEKY&PBGof9Og55MqSBdvv$rg zJQblGpZ8OmvSPq>Tv+`+9siFt2h;kpF)$XiRrEDWtk+HX! zoI;;Fz!JZFMPx_PY}|sAuUqA;QmVp^`64s9pb`hVC}T|8XJva$d#;Mu@Pd39jjZS0TX{y zyflw2pCP~4%FMFr_Lk0sWh3Qfg2OG=wz0N-)*L%;W@U_0#wfW73yZ`%<@c0*0W<)V#U~2jBUkdTd5ljn5X4FrmP~&C`}^;I E0WU%+%m4rY diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Light.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Light.pmf deleted file mode 100644 index 0bb62bde6dc6f4d13b8b774e3c7aa7716b945332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6684 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Times-Bold.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Times-Bold.pmf deleted file mode 100644 index cf46ca03fcfc117be4d0cce279ec6f9ca0b83222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6660 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/ZapfDingbats.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/ZapfDingbats.pmf deleted file mode 100644 index 1ae9a7688e64e62b3e65be398c18a96eb3d3e286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6676 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/model-config b/hw/xprint/config/C/print/models/PSdefault/model-config deleted file mode 100644 index 05a19d859..000000000 --- a/hw/xprint/config/C/print/models/PSdefault/model-config +++ /dev/null @@ -1,136 +0,0 @@ -# $Xprint.org: PSdefault model-config,v 1.2 2002/11/07 19:48:04 gisburn Exp $ -# Generic default model-config for the PostScript DDX -# -# DO NOT MODIFY THIS FILE!! -# -# If you want to make customisations for your printer create a copy -# of this printer model. -# Example (for creating a model config "MYCOMPANYlaserxx"): -# 1. Create model config dir: -# % mkdir MYCOMPANYlaserxx -# 2. Link (or copy) the PMF (printer font metrics) for the -# printer buildin fonts: -# % ln -s PSdefault/fonts MYCOMPANYlaserxx/. -# 3. Copy the model config file: -# % cp PSdefault/model-config MYCOMPANYlaserxx/. -# 4. Customize MYCOMPANYlaserxx/model-config to match your needs. -# - -# Attributes supported for this printer model -# You may want to cut the lists here down to the attributes supported -# by your printer. -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: PostScript default model -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ - {executive FALSE {6.35 177.80 6.35 260.35}}\ - {folio FALSE {6.35 204.47 6.35 323.85}}\ - {invoice FALSE {6.35 133.35 6.35 209.55}}\ - {ledger FALSE {6.35 273.05 6.35 425.45}}\ - {quarto FALSE {6.35 209.55 6.35 268.732}}\ - {a FALSE {6.35 209.55 6.35 273.05}}\ - {b FALSE {6.35 273.05 6.35 425.45}}\ - {c FALSE {6.35 425.45 6.35 552.45}}\ - {d FALSE {6.35 552.45 6.35 857.25}}\ - {e FALSE {6.35 857.25 6.35 1111.25}}\ - {na-6x9-envelope FALSE {6.35 146.05 6.35 222.25}}\ - {na-10x15-envelope FALSE {6.35 247.65 6.35 374.65}}\ - {monarch-envelope FALSE {6.35 91.948 6.35 184.15}}\ - {na-10x13-envelope FALSE {6.35 247.65 6.35 323.85}}\ - {na-9x12-envelope FALSE {6.35 222.25 6.35 298.45}}\ - {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}}\ - {na-7x9-envelope FALSE {6.35 171.45 6.35 222.25}}\ - {na-9x11-envelope FALSE {6.35 222.25 6.35 273.05}}\ - {na-10x14-envelope FALSE {6.35 247.65 6.35 349.25}}\ - {na-number-9-envelope FALSE {6.35 92.075 6.35 219.075}}\ - {iso-a0 FALSE {6.35 834.65 6.35 1182.65}}\ - {iso-a1 FALSE {6.35 587.65 6.35 834.65}}\ - {iso-a2 FALSE {6.35 413.65 6.35 587.65}}\ - {iso-a3 FALSE {6.35 290.65 6.35 413.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {iso-a5 FALSE {6.35 141.65 6.35 203.65}}\ - {iso-a6 FALSE {6.35 98.65 6.35 141.65}}\ - {iso-a7 FALSE {6.35 67.65 6.35 98.65}}\ - {iso-a8 FALSE {6.35 45.65 6.35 67.65}}\ - {iso-a9 FALSE {6.35 30.65 6.35 45.65}}\ - {iso-a10 FALSE {6.35 19.65 6.35 30.65}}\ - {iso-b1 FALSE {6.35 700.65 6.35 993.65}}\ - {iso-b2 FALSE {6.35 493.65 6.35 700.65}}\ - {iso-b3 FALSE {6.35 346.65 6.35 493.65}}\ - {iso-b4 FALSE {6.35 243.65 6.35 346.65}}\ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {iso-b6 FALSE {6.35 118.65 6.35 169.65}}\ - {iso-b7 FALSE {6.35 81.65 6.35 118.65}}\ - {iso-b8 FALSE {6.35 55.65 6.35 81.65}}\ - {iso-b9 FALSE {6.35 37.65 6.35 55.65}}\ - {iso-b10 FALSE {6.35 24.65 6.35 37.65}}\ - {jis-b1 FALSE {6.35 721.65 6.35 1023.65}}\ - {jis-b2 FALSE {6.35 508.65 6.35 721.65}}\ - {jis-b3 FALSE {6.35 357.65 6.35 508.65}}\ - {jis-b4 FALSE {6.35 250.65 6.35 357.65}}\ - {jis-b5 FALSE {6.35 175.65 6.35 250.65}}\ - {jis-b6 FALSE {6.35 121.65 6.35 175.65}}\ - {jis-b7 FALSE {6.35 84.65 6.35 121.65}}\ - {jis-b8 FALSE {6.35 57.65 6.35 84.65}}\ - {jis-b9 FALSE {6.35 38.65 6.35 57.65}}\ - {jis-b10 FALSE {6.35 25.65 6.35 38.65}}\ - {iso-c3 FALSE {6.35 317.65 6.35 451.65}}\ - {iso-c4 FALSE {6.35 222.65 6.35 317.65}}\ - {iso-c5 FALSE {6.35 155.65 6.35 222.65}}\ - {iso-c6 FALSE {6.35 107.65 6.35 155.65}}\ - {iso-designated-long FALSE {6.35 103.65 6.35 213.65}}\ - {hp-2x-postcard FALSE {6.35 141.65 6.35 193.65}}\ - {hp-european-edp FALSE {6.35 298.45 6.35 349.25}}\ - {hp-mini FALSE {6.35 133.35 6.35 209.55}}\ - {hp-postcard FALSE {6.35 93.65 6.35 141.65}}\ - {hp-tabloid FALSE {6.35 273.05 6.35 425.45}}\ - {hp-us-edp FALSE {6.35 273.05 6.35 349.25}}\ - {hp-us-government-legal FALSE {6.35 196.85 6.35 323.85}}\ - {hp-us-government-letter FALSE {6.35 196.85 6.35 247.65}}\ -} -# If you have more than one tray use the following example: -# 1. List the supported trays -#*input-trays-supported: main manual -# 2. Define each tray and it's paper sizes -#*medium-source-sizes-supported: \ -#{ main \ -# {na-letter FALSE {6.35 209.55 6.35 273.05}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {iso-a4 FALSE {6.35 203.65 6.35 290.65}} \ -#} \ -#{ manual \ -# {iso-a5 FALSE {6.35 141.65 6.35 203.65}} \ -# {iso-c5 FALSE {6.35 155.65 6.35 222.65}} \ -# {iso-designated-long FALSE {6.35 103.65 6.35 213.65}} \ -# {jis-b5 FALSE {6.35 175.65 6.35 250.65}} \ -# {monarch-envelope FALSE {6.35 91.948 6.35 184.15}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}} \ -# {executive FALSE {6.35 177.8 6.35 260.35}} \ -# {iso-a3 FALSE {6.35 290.65 6.35 413.65}} \ -# {iso-a0 FALSE {6.35 834.65 6.35 1182.65}} \ -#} -*plexes-supported: simplex duplex tumble -*printer-model: "PostScript default model" -# 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, -# 940, 1200 and 2440 are supported DPI values, we limit it here -# to some common values: -*printer-resolutions-supported: 300 360 400 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional - -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -# xp-psddx-download-fonts defines which fonts should be downloaded as outlines -# (valid types are "pfa", "pfb", "ttf", "ttc", "otf", "otc") -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -# xp-psddx-download-font-type defines which font type is used to download outlines -# (valid values are "bitmap", "pstype1" and "pstype3") -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/PSspooldir/Makefile.am b/hw/xprint/config/C/print/models/PSspooldir/Makefile.am deleted file mode 100644 index 717cd2c36..000000000 --- a/hw/xprint/config/C/print/models/PSspooldir/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/PSspooldir - -dist_xpc_DATA = model-config -dist_xpc_SCRIPTS = spooltodir.sh diff --git a/hw/xprint/config/C/print/models/PSspooldir/model-config b/hw/xprint/config/C/print/models/PSspooldir/model-config deleted file mode 100644 index 6bb477767..000000000 --- a/hw/xprint/config/C/print/models/PSspooldir/model-config +++ /dev/null @@ -1,71 +0,0 @@ -# $Xprint.org: PSspooldir model-config,v 1.1 2002/11/25 19:48:04 gisburn Exp $ -# PostScript DDX model-config which sends jobs to a spool dir instead to a print queue -# -# This model is basically a cut-down PSdefault model with a custom *xp-spooler-command -# -# DO NOT MODIFY THIS FILE!! -# -# If you want to make customisations for your printer create a copy -# of this printer model. -# Example (for creating a model config "MYCOMPANYlaserxx"): -# 1. Create model config dir: -# % mkdir MYCOMPANYlaserxx -# 2. Link (or copy) the PMF (printer font metrics) for the -# printer buildin fonts: -# % ln -s PSspooldir/fonts MYCOMPANYlaserxx/. -# 3. Copy the model config file: -# % cp PSspooldir/model-config MYCOMPANYlaserxx/. -# 4. Customize MYCOMPANYlaserxx/model-config to match your needs. -# -# Attributes supported for this printer model -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: PostScript job spool dir /tmp/Xprintjobs -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ - {executive FALSE {6.35 177.80 6.35 260.35}}\ - {ledger FALSE {6.35 273.05 6.35 425.45}}\ - {quarto FALSE {6.35 209.55 6.35 268.732}}\ - {iso-a3 FALSE {6.35 290.65 6.35 413.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {iso-a5 FALSE {6.35 141.65 6.35 203.65}}\ - {iso-b3 FALSE {6.35 346.65 6.35 493.65}}\ - {iso-b4 FALSE {6.35 243.65 6.35 346.65}}\ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {jis-b3 FALSE {6.35 357.65 6.35 508.65}}\ - {jis-b4 FALSE {6.35 250.65 6.35 357.65}}\ - {jis-b5 FALSE {6.35 175.65 6.35 250.65}}\ - {iso-c3 FALSE {6.35 317.65 6.35 451.65}}\ - {iso-c4 FALSE {6.35 222.65 6.35 317.65}}\ - {iso-c5 FALSE {6.35 155.65 6.35 222.65}}\ -} - -*plexes-supported: simplex duplex tumble -*printer-model: "PostScript job spool dir /tmp/Xprintjobs" -# 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, -# 940, 1200 and 2440 are supported DPI values, we limit it here -# to some common values: -*printer-resolutions-supported: 300 360 400 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional - -# Use custom spooler script which sends the output to a dir instead to a printer queue -# Note that "%xpconfigdir%" is currently only supported in Xprt servers build -# from xprint.mozdev.org sources, other platforms have replace it with the -# absolute path name to the script -*xp-spooler-command: %xpconfigdir%/C/print/models/PSspooldir/spooltodir.sh -d /tmp/Xprintjobs -s .ps -u 077 -p %printer-name% -c %copy-count% -t %job-name% -o "%options%" - -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -# xp-psddx-download-fonts defines which fonts should be downloaded as outlines -# (valid types are "pfa", "pfb", "ttf", "ttc", "otf", "otc") -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -# xp-psddx-download-font-type defines which font type is used to download outlines -# (valid values are "bitmap", "pstype1" and "pstype3") -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh b/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh deleted file mode 100755 index aba14e1b3..000000000 --- a/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/sh -PATH=/usr/bin:/usr/sbin:/bin:/sbin -export PATH - -verbose_msgs="false" -DEFAULT_SPOOLDIR=/tmp/Xprintjobs - -usage() -{ - printf "Usage: ${0}: [options]\n" - printf "-v\tbe verbose\n" - printf "-d dirname\tdefine spool dir\n" - printf "-p string\tname of printer selected by user\n" - printf "-c integer\tnumber of copies\n" - printf "-t string\tjob title\n" - printf "-s string\tfile name suffix\n" - printf "-o string\tspooler options\n" - printf "-u mask\tpermission mask for new files (see umask)\n" - exit 2 -} - -verbose() -{ - if ${verbose_msgs} ; then - echo "$1" - fi -} - -spooldir="${DEFAULT_SPOOLDIR}" -printername= -num_job_copies= -job_title= -filename_suffix= -spooler_options= -permmask= -while getopts va:b:d:p:c:t:s:o:u: i -do - case $i in - v) - verbose_msgs="true" - ;; - d) - spooldir="$OPTARG" - ;; - p) - printername="$OPTARG" - ;; - c) - num_job_copies="$OPTARG" - ;; - t) - job_title="$OPTARG" - ;; - s) - filename_suffix="$OPTARG" - ;; - o) - spooler_options="$OPTARG" - ;; - u) - permmask="$OPTARG" - ;; - ?) usage - ;; - esac -done - -verbose "# spooldir=\"$spooldir\"" -verbose "# printername=\"$printername\"" -verbose "# num_job_copies=\"$num_job_copies\"" -verbose "# job_title=\"$job_title\"" -verbose "# spooler_options=\"$spooler_options\"" -verbose "# umask=\"$permmask\"" - -if [ ! -d "${DEFAULT_SPOOLDIR}" ] ; then - mkdir "${DEFAULT_SPOOLDIR}" - chmod a+rwxt "${DEFAULT_SPOOLDIR}" -fi - -if [ "${permmask}" != "" ] ; then - umask ${permmask} -fi - -if [ ! -d "$spooldir" ] ; then - echo "$0: spooldir \"$spooldir\" does not exits." >&2 - exit 1 -fi -if [ ! -w "$spooldir" ] ; then - echo "$0: Cannot write to spooldir \"$spooldir\"." >&2 - exit 1 -fi - -# Create first part of the output file name (prefix and an "unique" -# id(=date and time))... -filename="Xpjob_`date +%Y%m%d%H%M%S`" - -# ... then add options ... -if [ "${printername}" != "" ] ; then - filename="${filename}_${printername}" -fi -if [ "${num_job_copies}" != "" -a "${num_job_copies}" != "1" ] ; then - filename="${filename}_copies_${num_job_copies}" -fi -if [ "${job_title}" != "" ] ; then - filename="${filename}_title_${job_title}" -fi - -# ... mangle output file name and filter chars (like whitespaces) -# which may screw-up further processing by other shell scripts ... -filename="`echo \"${filename}\" | tr '[:blank:]' '_' | tr -c -d '[:alnum:]_.-'`" - -# ... add path and suffix ... -filename="${spooldir}/${filename}${filename_suffix}" - -verbose "# File name is \"$filename\"." - -# ... and finally capture stdin to the file. -cat >"${filename}" - -if ${verbose_msgs} ; then - printf "# File is " ; ls -l "${filename}" -fi - -verbose "# Done." - -exit 0 -# EOF. diff --git a/hw/xprint/config/C/print/models/SPSPARC2/Makefile.am b/hw/xprint/config/C/print/models/SPSPARC2/Makefile.am deleted file mode 100644 index 5a56f90fb..000000000 --- a/hw/xprint/config/C/print/models/SPSPARC2/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/SPSPARC2 - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am b/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am deleted file mode 100644 index d1ee6cf42..000000000 --- a/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/SPSPARC2/fonts - -parentdir = ../../PSdefault/fonts - -XPFONTS = \ - Courier-Bold.pmf \ - Courier-BoldOblique.pmf \ - Courier-Oblique.pmf \ - Courier.pmf \ - Helvetica-Bold.pmf \ - Helvetica-BoldOblique.pmf \ - Helvetica-Oblique.pmf \ - Helvetica.pmf \ - Symbol.pmf \ - Times-Bold.pmf \ - Times-BoldItalic.pmf \ - Times-Italic.pmf \ - Times-Roman.pmf - -dest = $(DESTDIR)$(xpcdir) - -remove-stuff: - for x in $(XPFONTS) ; do \ - rm -f $(dest)/$$x ; \ - done - - rm -f $(dest)/fonts.dir - -install-data-hook: remove-stuff - mkdir -p $(dest) ; \ - for x in $(XPFONTS) ; do \ - ln -s $(parentdir)/$$x $(dest)/$$x ; \ - done - - $(MKFONTSCALE) -b -s -l $(dest) - -uninstall-hook: remove-stuff diff --git a/hw/xprint/config/C/print/models/SPSPARC2/model-config b/hw/xprint/config/C/print/models/SPSPARC2/model-config deleted file mode 100644 index 9f29b9992..000000000 --- a/hw/xprint/config/C/print/models/SPSPARC2/model-config +++ /dev/null @@ -1,18 +0,0 @@ -# $Xprint.org: SPSPARC2 model-config,v 1.4 2002/11/07 19:48:04 gisburn Exp $ -*content-orientations-supported: portrait landscape -*descriptor: SunPics SPARCprinter II -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ - { '' {na-letter FALSE {6.35 209.55 6.35 273.05}} \ - {na-legal FALSE {6.35 209.55 6.35 349.25}} \ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}} -*plexes-supported: simplex -*printer-model: "SunPics SPARCprinter II" -*printer-resolutions-supported: 300 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional -# EOF. diff --git a/hw/xprint/config/Makefile.am b/hw/xprint/config/Makefile.am deleted file mode 100644 index 197d19de0..000000000 --- a/hw/xprint/config/Makefile.am +++ /dev/null @@ -1,712 +0,0 @@ -## Locale mappings -## Notes: -## - only ASCII chars are allowed -## - "C" and "en_US" should not be used, they are real directories - -# List of locales which should be linked to the "C" locale - -SUBDIRS = C en_US - -xpconfigdir = @xpconfigdir@ - -C_LOCALES= \ - POSIX \ - af_ZA \ - af_ZA.iso88591 \ - ar \ - ar_AE \ - ar_AE.iso88596 \ - ar_AE.utf8 \ - ar_BH \ - ar_BH.iso88596 \ - ar_BH.utf8 \ - ar_DZ \ - ar_DZ.iso88596 \ - ar_DZ.utf8 \ - ar_EG \ - ar_EG.ISO8859-6 \ - ar_EG.UTF-8 \ - ar_EG.iso88596 \ - ar_EG.utf8 \ - ar_IN.utf8 \ - ar_IQ \ - ar_IQ.iso88596 \ - ar_IQ.utf8 \ - ar_JO \ - ar_JO.iso88596 \ - ar_JO.utf8 \ - ar_KW \ - ar_KW.iso88596 \ - ar_KW.utf8 \ - ar_LB \ - ar_LB.iso88596 \ - ar_LB.utf8 \ - ar_LY \ - ar_LY.iso88596 \ - ar_LY.utf8 \ - ar_MA \ - ar_MA.iso88596 \ - ar_MA.utf8 \ - ar_OM \ - ar_OM.iso88596 \ - ar_OM.utf8 \ - ar_QA \ - ar_QA.iso88596 \ - ar_QA.utf8 \ - ar_SA \ - ar_SA.iso88596 \ - ar_SA.utf8 \ - ar_SD \ - ar_SD.iso88596 \ - ar_SD.utf8 \ - ar_SY \ - ar_SY.iso88596 \ - ar_SY.utf8 \ - ar_TN \ - ar_TN.iso88596 \ - ar_TN.utf8 \ - ar_YE \ - ar_YE.iso88596 \ - ar_YE.utf8 \ - be_BY \ - be_BY.cp1251 \ - be_BY.utf8 \ - bg_BG \ - bg_BG.ISO8859-5 \ - bg_BG.cp1251 \ - bg_BG.utf8 \ - bn_IN.UTF-8 \ - bn_IN.utf8 \ - br_FR \ - br_FR.iso88591 \ - bs \ - bs_BA \ - bs_BA.iso88592 \ - bs_BA.ISO8859-2 \ - bs_BA.ISO-8859-2 \ - bs_BA.ISO_8859-2 \ - bs_BA.UTF-8 \ - bokmal \ - ca \ - ca.ISO8859-1 \ - ca.ISO8859-15 \ - ca_ES \ - ca_ES.ISO8859-1 \ - ca_ES.ISO8859-15 \ - ca_ES.iso88591 \ - ca_ES.iso885915@euro \ - ca_ES.utf8 \ - ca_ES@euro \ - catalan \ - croatian \ - cs_CZ \ - cs_CZ.ISO8859-2 \ - cs_CZ.iso88592 \ - cs_CZ.utf8 \ - cy_GB \ - cy_GB.iso885914 \ - cz \ - cz.ISO8859-2 \ - czech \ - da \ - da.ISO8859-1 \ - da.ISO8859-15 \ - danish \ - dansk \ - da_DK \ - da_DK.ISO8859-1 \ - da_DK.ISO8859-15 \ - da_DK.iso88591 \ - da_DK.iso885915 \ - da_DK.utf8 \ - de \ - de.ISO8859-1 \ - de.ISO8859-15 \ - de.UTF-8 \ - deutsch \ - de_AT \ - de_AT.ISO8859-1 \ - de_AT.ISO8859-15 \ - de_AT.iso88591 \ - de_AT.iso885915@euro \ - de_AT.utf8 \ - de_AT@euro \ - de_BE \ - de_BE.iso88591 \ - de_BE.iso885915@euro \ - de_BE@euro \ - de_CH \ - de_CH.ISO8859-1 \ - de_CH.iso88591 \ - de_CH.utf8 \ - de_DE \ - de_DE.ISO8859-1 \ - de_DE.ISO8859-15 \ - de_DE.UTF-8 \ - de_DE.iso88591 \ - de_DE.iso885915@euro \ - de_DE.utf8 \ - de_DE@euro \ - de_LU \ - de_LU.iso88591 \ - de_LU.iso885915@euro \ - de_LU.utf8 \ - de_LU@euro \ - el_GR \ - el_GR.ISO8859-7 \ - el_GR.ISO8859-7@euro \ - el_GR.iso88597 \ - el_GR.utf8 \ - en_AU \ - en_AU.ISO8859-1 \ - en_AU.iso88591 \ - en_AU.utf8 \ - en_BW \ - en_BW.iso88591 \ - en_DK \ - en_DK.iso88591 \ - en_GB \ - en_GB.ISO8859-1 \ - en_GB.ISO8859-15 \ - en_GB.iso88591 \ - en_GB.iso885915 \ - en_GB.utf8 \ - en_HK \ - en_HK.iso88591 \ - en_IE \ - en_IE.ISO8859-1 \ - en_IE.ISO8859-15 \ - en_IE.iso88591 \ - en_IE.iso885915@euro \ - en_IE.utf8 \ - en_IE@euro \ - en_IN \ - en_IN.utf8 \ - en_NZ \ - en_NZ.ISO8859-1 \ - en_NZ.iso88591 \ - en_NZ.utf8 \ - en_PH \ - en_PH.iso88591 \ - en_SG \ - en_SG.iso88591 \ - en_ZA \ - en_ZA.iso88591 \ - en_ZA.utf8 \ - en_ZW \ - en_ZW.iso88591 \ - es_AR \ - es_AR.ISO8859-1 \ - es_AR.iso88591 \ - es_AR.utf8 \ - es_BO \ - es_BO.ISO8859-1 \ - es_BO.iso88591 \ - es_BO.utf8 \ - es_CL \ - es_CL.ISO8859-1 \ - es_CL.iso88591 \ - es_CL.utf8 \ - es_CO \ - es_CO.ISO8859-1 \ - es_CO.iso88591 \ - es_CO.utf8 \ - es_CR \ - es_CR.ISO8859-1 \ - es_CR.iso88591 \ - es_CR.utf8 \ - es_DO \ - es_DO.iso88591 \ - es_DO.utf8 \ - es_EC \ - es_EC.ISO8859-1 \ - es_EC.iso88591 \ - es_EC.utf8 \ - es_ES \ - es_ES.ISO8859-1 \ - es_ES.ISO8859-15 \ - es_ES.UTF-8 \ - es_ES.iso88591 \ - es_ES.iso885915@euro \ - es_ES.utf8 \ - es_ES@euro \ - es_GT \ - es_GT.ISO8859-1 \ - es_GT.iso88591 \ - es_GT.utf8 \ - es_HN \ - es_HN.iso88591 \ - es_HN.utf8 \ - es_MX \ - es_MX.ISO8859-1 \ - es_MX.iso88591 \ - es_MX.utf8 \ - es_NI \ - es_NI.ISO8859-1 \ - es_NI.iso88591 \ - es_NI.utf8 \ - es_PA \ - es_PA.ISO8859-1 \ - es_PA.iso88591 \ - es_PA.utf8 \ - es_PE \ - es_PE.ISO8859-1 \ - es_PE.iso88591 \ - es_PE.utf8 \ - es_PY \ - es_PY.ISO8859-1 \ - es_PY.iso88591 \ - es_PY.utf8 \ - es_SV \ - es_SV.ISO8859-1 \ - es_SV.iso88591 \ - es_SV.utf8 \ - es_UY \ - es_UY.ISO8859-1 \ - es_UY.iso88591 \ - es_UY.utf8 \ - es_VE \ - es_VE.ISO8859-1 \ - es_VE.iso88591 \ - es_VE.utf8 \ - et_EE \ - et_EE.ISO8859-15 \ - et_EE.iso88591 \ - et_EE.utf8 \ - eu_ES \ - eu_ES.iso88591 \ - eu_ES.iso885915@euro \ - eu_ES@euro \ - fa_IR.utf8 \ - fi_FI \ - fi_FI.ISO8859-1 \ - fi_FI.ISO8859-15 \ - fi_FI.UTF-8 \ - fi_FI.iso88591 \ - fi_FI.iso885915@euro \ - fi_FI.utf8 \ - fi_FI@euro \ - fo_FO \ - fo_FO.iso88591 \ - fo_FO.utf8 \ - fr_BE \ - fr_BE.ISO8859-1 \ - fr_BE.ISO8859-15 \ - fr_BE.UTF-8 \ - fr_BE.iso88591 \ - fr_BE.iso885915@euro \ - fr_BE.utf8 \ - fr_BE@euro \ - fr_CH \ - fr_CH.ISO8859-1 \ - fr_CH.iso88591 \ - fr_CH.utf8 \ - fr_FR \ - fr_FR.ISO8859-1 \ - fr_FR.ISO8859-15 \ - fr_FR.UTF-8 \ - fr_FR.iso88591 \ - fr_FR.iso885915@euro \ - fr_FR.utf8 \ - fr_FR@euro \ - fr_LU \ - fr_LU.iso88591 \ - fr_LU.iso885915@euro \ - fr_LU.utf8 \ - fr_LU@euro \ - ga_IE \ - ga_IE.iso88591 \ - ga_IE.iso885915@euro \ - ga_IE.utf8 \ - ga_IE@euro \ - gl_ES \ - gl_ES.iso88591 \ - gl_ES.iso885915@euro \ - gl_ES.utf8 \ - gl_ES@euro \ - gu_IN.UTF-8 \ - gu_IN.utf8 \ - gv_GB \ - gv_GB.iso88591 \ - hebrew \ - he \ - he_IL \ - he_IL.ISO8859-8 \ - he_IL.UTF-8 \ - he_IL.iso88598 \ - he_IL.utf8 \ - hi_IN.UTF-8 \ - hi_IN.utf8 \ - hr_HR \ - hr_HR.ISO8859-2 \ - hr_HR.iso88592 \ - hr_HR.utf8 \ - hu_HU \ - hu_HU.ISO8859-2 \ - hu_HU.iso88592 \ - hu_HU.utf8 \ - id_ID \ - id_ID.iso88591 \ - id_ID.utf8 \ - is_IS \ - is_IS.ISO8859-1 \ - is_IS.iso88591 \ - is_IS.utf8 \ - it \ - it.ISO8859-1 \ - it.ISO8859-15 \ - it.UTF-8 \ - italian \ - it_CH \ - it_CH.iso88591 \ - it_CH.utf8 \ - it_IT \ - it_IT.ISO8859-1 \ - it_IT.ISO8859-15 \ - it_IT.UTF-8 \ - it_IT.iso88591 \ - it_IT.iso885915@euro \ - it_IT.utf8 \ - it_IT@euro \ - iw_IL \ - iw_IL.iso88598 \ - ja \ - japan \ - japanese \ - japanese.euc \ - japanese.sjis \ - ja_JP \ - ja_JP.EUC \ - ja_JP.PCK \ - ja_JP.UTF-8 \ - ja_JP.eucJP \ - ja_JP.eucjp \ - ja_JP.sjis \ - ja_JP.ujis \ - ja_JP.utf8 \ - ka_GE \ - ka_GE.georgianps \ - kl_GL \ - kl_GL.iso88591 \ - kl_GL.utf8 \ - ko \ - ko.UTF-8 \ - korean \ - korean.euc \ - ko_KR \ - ko_KR.EUC \ - ko_KR.EUC@dict \ - ko_KR.UTF-8 \ - ko_KR.UTF-8@dict \ - ko_KR.euckr \ - ko_KR.utf8 \ - kw_GB \ - kw_GB.iso88591 \ - lt_LT \ - lt_LT.ISO8859-13 \ - lt_LT.iso885913 \ - lt_LT.utf8 \ - lithuanian \ - lt \ - lt.ISO8859-13 \ - lv \ - lv.ISO8859-13 \ - lv_LV \ - lv_LV.ISO8859-13 \ - lv_LV.iso885913 \ - lv_LV.utf8 \ - mi_NZ \ - mi_NZ.iso885913 \ - mk_MK \ - mk_MK.ISO8859-5 \ - mk_MK.iso88595 \ - mk_MK.utf8 \ - mr_IN.utf8 \ - ms_MY \ - ms_MY.iso88591 \ - mt_MT \ - mt_MT.iso88593 \ - nb_NO \ - nb_NO.ISO-8859-1 \ - nl \ - nl.ISO8859-1 \ - nl.ISO8859-15 \ - nl_BE \ - nl_BE.ISO8859-1 \ - nl_BE.ISO8859-15 \ - nl_BE.iso88591 \ - nl_BE.iso885915@euro \ - nl_BE.utf8 \ - nl_BE@euro \ - nl_NL \ - nl_NL.ISO8859-1 \ - nl_NL.ISO8859-15 \ - nl_NL.iso88591 \ - nl_NL.iso885915@euro \ - nl_NL.utf8 \ - nl_NL@euro \ - nn_NO \ - nn_NO.iso88591 \ - no \ - no.ISO8859-1 \ - no_NO \ - no_NO.ISO8859-1@bokmal \ - no_NO.ISO8859-1@nynorsk \ - no_NO.iso88591 \ - no_NO.utf8 \ - norwegian \ - oc_FR \ - oc_FR.iso88591 \ - pa_IN.UTF-8 \ - pa_IN.utf8 \ - polish \ - pl_PL \ - pl_PL.ISO8859-2 \ - pl_PL.UTF-8 \ - pl_PL.iso88592 \ - pl_PL.utf8 \ - portuguese \ - pt \ - pt.ISO8859-1 \ - pt.ISO8859-15 \ - pt_BR \ - pt_BR.ISO8859-1 \ - pt_BR.ISO-8859-1 \ - pt_BR.ISO_8859-1 \ - pt_BR.iso88591 \ - pt_BR.iso885915 \ - pt_BR.88591 \ - pt_BR.88591.en \ - pt_BR.utf8 \ - pt_BR.UTF-8 \ - pt_PT \ - pt_PT.ISO8859-1 \ - pt_PT.ISO8859-15 \ - pt_PT.iso88591 \ - pt_PT.iso885915@euro \ - pt_PT.utf8 \ - pt_PT@euro \ - ro_RO \ - ro_RO.ISO8859-2 \ - ro_RO.iso88592 \ - ro_RO.utf8 \ - ru \ - ru.ISO8859-5 \ - ru.UTF-8 \ - ru.ansi1251 \ - ru.koi8-r \ - ru_SU \ - russian \ - ru_RU \ - ru_RU.ANSI1251 \ - ru_RU.ISO8859-5 \ - ru_RU.KOI8-R \ - ru_RU.UTF-8 \ - ru_RU.iso88595 \ - ru_RU.koi8r \ - ru_RU.utf8 \ - ru_UA \ - ru_UA.koi8u \ - romanian \ - se_NO \ - se_NO.utf8 \ - si \ - sinhala \ - si_LK \ - si_LK.UTF8 \ - sk \ - sk.ISO8859-2 \ - slovak \ - slovene \ - slovenian \ - spanish \ - sk_SK \ - sk_SK.ISO8859-2 \ - sk_SK.iso88592 \ - sk_SK.utf8 \ - sh \ - sh.ISO8859-2 \ - sh_BA.ISO8859-2@bosnia \ - sh_YU \ - sh_YU.iso88592 \ - sh_YU.utf8 \ - sl_SI \ - sl_SI.ISO8859-2 \ - sl_SI.iso88592 \ - sl_SI.utf8 \ - su \ - su.ISO8859-1 \ - sq_AL \ - sq_AL.ISO8859-2 \ - sq_AL.iso88591 \ - sq_AL.utf8 \ - sr_SP \ - sr_SP.ISO8859-5 \ - sr_YU \ - sr_YU.ISO8859-5 \ - sr_YU.iso88592 \ - sr_YU.iso88595@cyrillic \ - sr_YU.utf8 \ - sr_YU@cyrillic \ - sv \ - sv.ISO8859-1 \ - sv.ISO8859-15 \ - sv.UTF-8 \ - sv_FI \ - sv_FI.iso88591 \ - sv_FI.iso885915@euro \ - sv_FI.utf8 \ - sv_FI@euro \ - sv_SE \ - sv_SE.ISO8859-1 \ - sv_SE.ISO8859-15 \ - sv_SE.UTF-8 \ - sv_SE.iso88591 \ - sv_SE.iso885915 \ - sv_SE.utf8 \ - swedish \ - ta_IN \ - ta_IN.utf8 \ - te_IN \ - te_IN.utf8 \ - tg_TJ \ - tg_TJ.koi8t \ - th \ - thai \ - th_TH \ - th_TH.ISO8859-11 \ - th_TH.TIS620 \ - th_TH.UTF-8 \ - th_TH.tis620 \ - th_TH.utf8 \ - tl_PH \ - tl_PH.iso88591 \ - tr \ - tr.ISO8859-9 \ - turkish \ - tr_TR \ - tr_TR.ISO8859-9 \ - tr_TR.UTF-8 \ - tr_TR.iso88599 \ - tr_TR.utf8 \ - uk_UA \ - uk_UA.koi8u \ - uk_UA.utf8 \ - ur_PK \ - ur_PK.utf8 \ - uz_UZ \ - uz_UZ.iso88591 \ - vi_VN \ - vi_VN.tcvn \ - vi_VN.utf8 \ - wa_BE \ - wa_BE.iso88591 \ - wa_BE.iso885915@euro \ - wa_BE@euro \ - zh \ - zh.GBK \ - zh.UTF-8 \ - zh_CN \ - zh_CN.EUC \ - zh_CN.EUC@pinyin \ - zh_CN.EUC@radical \ - zh_CN.EUC@stroke \ - zh_CN.GB18030 \ - zh_CN.GB18030@pinyin \ - zh_CN.GB18030@radical \ - zh_CN.GB18030@stroke \ - zh_CN.GBK \ - zh_CN.GBK@pinyin \ - zh_CN.GBK@radical \ - zh_CN.GBK@stroke \ - zh_CN.UTF-8 \ - zh_CN.UTF-8@pinyin \ - zh_CN.UTF-8@radical \ - zh_CN.UTF-8@stroke \ - zh_CN.gb18030 \ - zh_CN.gb2312 \ - zh_CN.gbk \ - zh_CN.utf8 \ - zh_HK \ - zh_HK.BIG5HK \ - zh_HK.BIG5HK@radical \ - zh_HK.BIG5HK@stroke \ - zh_HK.UTF-8 \ - zh_HK.UTF-8@radical \ - zh_HK.UTF-8@stroke \ - zh_HK.big5hkscs \ - zh_HK.utf8 \ - zh_TW \ - zh_TW.BIG5 \ - zh_TW.BIG5@pinyin \ - zh_TW.BIG5@radical \ - zh_TW.BIG5@stroke \ - zh_TW.BIG5@zhuyin \ - zh_TW.EUC \ - zh_TW.EUC@pinyin \ - zh_TW.EUC@radical \ - zh_TW.EUC@stroke \ - zh_TW.EUC@zhuyin \ - zh_TW.UTF-8 \ - zh_TW.UTF-8@pinyin \ - zh_TW.UTF-8@radical \ - zh_TW.UTF-8@stroke \ - zh_TW.UTF-8@zhuyin \ - zh_TW.big5 \ - zh_TW.euctw \ - zh_TW.utf8 - - -# List of locales which should be linked to the "en_US" locale, -# e.g. these locales should get the defaults (for example that -# US-Letter is used as default papersize) mainly used in the USA -US_LOCALES= \ - en_CA \ - en_CA.ISO8859-1 \ - en_CA.iso88591 \ - en_CA.utf8 \ - en_US.ISO8859-1 \ - en_US.ISO8859-15 \ - en_US.UTF-8 \ - en_US.iso88591 \ - en_US.iso885915 \ - en_US.utf8 \ - es_PR \ - es_PR.iso88591 \ - es_PR.utf8 \ - es_US \ - es_US.iso88591 \ - fr_CA \ - fr_CA.ISO8859-1 \ - fr_CA.iso88591 \ - fr_CA.utf8 \ - yi_US \ - yi_US.cp1255 - -dest = $(DESTDIR)$(xpconfigdir) - -remove-links: - for dir in $(US_LOCALES) ; do \ - rm -f $(dest)/$${dir} ; \ - done ; \ - \ - for dir in $(C_LOCALES) ; do \ - rm -f $(dest)/$${dir} ; \ - done ; - -install-data-local: remove-links - mkdir -p $(dest) ; \ - mkdir -p $(dest)/C; \ - mkdir -p $(dest)/en_US; \ - \ - for dir in $(US_LOCALES) ; do \ - ln -s en_US $(dest)/$${dir} ; \ - done ; \ - \ - for dir in $(C_LOCALES) ; do \ - ln -s C $(dest)/$${dir} ; \ - done ; - -uninstall-hook: remove-links - -dist_xpconfig_DATA = README diff --git a/hw/xprint/config/README b/hw/xprint/config/README deleted file mode 100644 index d7447815d..000000000 --- a/hw/xprint/config/README +++ /dev/null @@ -1,318 +0,0 @@ - - -------------------------------------- - The X Print Service - The Basics - -------------------------------------- - -Index - - 1.0 X Print Service Overview - - - 2.0 How the X Print Service Works - - - 3.0 Using the X Print Service - - 3.1 X Print Server Configuration - - 3.2 Starting the X Print Service - - 3.3 Configuring the environment - - 3.4 General End-User Sequence - - -1.0 X Print Service Overview -============================= - -The "X Print Service" technology allows X rendering to devices such as -printers and fax. Most of the service is available in the X11 -technology stack as Xp, with the remainder in the CDE technology stack -as DtPrint. Modifications have also been made to the Motif technology -stack to support Xp and DtPrint. - -The Xp portion consists of: - * Xp Extension for the X-Server (included in the X-Server Xprt) - * Xp Extension API for the client side (libXp) - * PCL ddx driver that converts core X to native PCL - * Postscript ddx driver that converts core X to native Postscript - * Raster ddx driver that generates xwd rasters which can be - converted to PCL or Postscript rasters - -The DtPrint portion consists of: - * A collection of print GUIs (libDtPrint) - * A Print Dialog Manager that can assist a client in - setting printing options (dtpdm, dtpdmd) - -From an X clients perspective, it can attach to one of two nearly -identical X-Servers, a "Video" X-Server, and a "Print" X-Server -which has the additional Xp capability but otherwise looks and -behaves the same. - - - -2.0 How the X Print Service Works -================================== - -The X Print Service expands on the traditional X-Server and Xlib world -in four ways. - -1. Most obvious is the use of "print ddx drivers" instead of - "video ddx drivers". While a video ddx driver modifies pixels - in a video frame buffer, a print ddx driver generates "page - description language (PDL)" output such as PCL or Postscript. - - Once a print ddx driver generates PDL output, it can be sent to - a spooler such as lp(1) or retrieved by the client. - - Though not currently done, a single X-Server can support both - print and video ddx drivers. - -2. Since printers support "paged" output, unlike video, a portion - of the Xp Extension supports APIs to delineate printed output. - For example, XpStartPage and XpEndPage tell the X-Server where - a physical page starts and ends in an otherwise continuous - stream of X rendering primitives. Likewise, XpStartJob and - XpEndJob determine when a collection of pages starts and ends. - XpEndJob typically causes the generated PDL to be submitted to - a spooler, such as lp(1). - -3. Since printers have extensive capabilities, another portion of - the Xp Extension supports APIs to manipulate "print contexts". - - Once a printer is selected using the Xp Extension API, a print - context to represent it can be created. A print context - embodies the printer selected - it contains the printer's - default capabilities, selectable range of capabilities, - printer state, and generated output. Some "attributes" within - the print context can be modified by the user, and the - X-Server and print ddx driver will react accordingly. For - example, the attribute "content-orientation" can be set to - "landscape" or "portrait". - -4. Since printers can have "built in" fonts, the Xp Extension in - the X-Server works with the print ddx drivers to make - available (for printing only) additional fonts on a per print - context basis. - - When a print context is created and set for a given printer, - the X font calls may be able to access additional printer - fonts. To do this (typically), the X-Server must have access - to "printer metric files" (.pmf) that describe at minimum the - metrics of the built in fonts. - - - -3.0 Using the X Print Service -============================== - -There are three tasks to start the X Print Service: 1) configuring the -X Print Server, 2) starting the X Print Service, 3) configuring the user -session so that clients can find the running X Print Service. - -The tasks are described in detail below. - - -3.1 X Print Server Configuration ---------------------------------- - -The X Print Server (Xprt) can read a number of configuration files which -control its behavior and support for printers. Each vendor platform has -a default location for this information. Xprt can also read the -environment variable XPCONFIGDIR to locate alternate configuration -directories. Common settings include: - - * export XPCONFIGDIR=/X11/lib/X11/XpConfig/ - - * export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/ - -Xprt has many built-in defaults, and lacking any configuration files, -will immediately try to support all printers visible via lpstat(1). - -In order of importance for configuration by a system administrator, the -configuration files for a "C" locale are as follows. - - ${XPCONFIGDIR}/C/print/Xprinters - - `Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat(1) or other commands - should be used to automatically supplement the list of - printers. - - ${XPCONFIGDIR}/C/print/attributes/printer - - The `printer' file maps printer names to model - configurations (see `model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat(1) in the Xprinters - file, setting up defaults in `printer' becomes all the - more important. - - ${XPCONFIGDIR}/C/print/attributes/document - - The `document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. - - ${XPCONFIGDIR}/C/print/attributes/job - - The `job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. - - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/model-config - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/fonts/fonts.dir - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/fonts/9nb00051.pmf - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/fonts/9nb00093.pmf - - The `model-config' file has attributes that describe the - printer model's capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. - - ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl - ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript - - The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. - - -3.2 Starting the X Print Service ---------------------------------- - -The summary checklist for starting the X Print Service is as follows: - -1. Choose an execution model for the X Print Service. The X - Print Service can be run on a per-user session basis, per - machine basis, or can be run on a few machines globally - available to a number of users. - -2. If print jobs are to be submitted to a spooler (almost always - the case), make sure all needed printers are available to the - spooler subsystem (most often lp(1)) on the same machine - running the X Print Service. - -3. Configure the X Print Server. See ``X Print Server - Configuration''. - -4. Depending on #1, start the X Print Server process "Xprt", and - then the Print Dialog Manager Daemon process "dtpdmd" at the - appropriate times. - -The details are described below. - -Because the X Print Service is based on X, it can be easily distributed. -The most significant factors in which execution model to choose will be -driven by: - - * how many printers will be accessable through the printer - subsystem on any given machine. A system administrator may - choose to cluster printers on a few given machines, or - scatter them across an organization and possibly make - extensive use of remote spoolers to make them globally - available. - - * how many machines will need a copy of the X Print Server - configuration files. The files have been architected so - that one super-set version of them can be maintained and - distributed (e.g. via NFS), and a per-machine or per-user - version of the `Xprinters' is all that is needed to have the - appropriate information in them utilized or ignored. - - * how many users can demand services from a given X Print - Service. - -With the above in mind, some obvious execution models include: - - * Global - in this model, the system administrator is choosing - to run the X Print Service on a *few* select machines with - appropriate printers configured, and allow clients access to - the global resource. This can centralize the administration - of printers and configuration files, but may have to be - monitored for performance loading. - - Startup would likely be done by boot-up scripts. - - * Per-machine - every machine with potential X Print Service - users would run the service. Printer and configuration file - administration is decentralized, and usage would be limited - to the users on the machine. - - Startup would likely be done by boot-up scripts. - - * Per-user session - every user would run an entire X Print - Service for themselves. In the future, the Video X Server - normally started may contain Print X Server capability, so - this model becomes very natural. - - Startup would likely be done at session login or by - launching actions or processes manually once the user - logs in. Note: the dtpdmd must be started after Xprt. - -Starting of the processes is straight forward. In strict order: - - [machineA] % Xprt [-XpFile ] [:dispNum] & - - Note that Xprt will look for configuration files in either - a default location or where XPCONFIGDIR points. - - -XpFile specifies an alternate `Xprinters' file, rather - than the default one or `${XPCONFIGDIR}/C/print/Xprinters'. - - [machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] & - - The dtpdmd will maintain an X-Selection on the X-Server, - and will start dtpdm's as required to service requests. - -In all but the per-user session model, the machine running the dtpdmd -(thus dtpdm's) will need display authorization to the users video -display. - - - -3.3 Configuring the environment --------------------------------- - -Once a X Print Server and dtpdmd have been started -- many of them -in some cases -- clients will need to find and use them. There are -two mechanisms that allow clients to discover X Print Servers and -printers. - - * "X Print Specifier" - assuming usage of the DtPrint print - dialogs, the following notation is understood: - - printer_name@machine[:dispNum] - - For example: - - colorlj7@printhub:2 - - In the above example, the X Print Server running at `printhub:2' - is assumed to support the printer named `colorlj7'. - - * "XPSERVERLIST" - assuming usage of the DtPrint print dialogs, - the environment variable "XPSERVERLIST" can contain a list - of X Print Servers. For example: - - XPSERVERLIST="printhub:2 printhub:3 otherdept:0" - - Then in the dialogs, only a printer name needs to be entered. - The dialog will then search the X Print Servers in XPSERVERLIST - for a server than supports the printer, and then establish - contact. - -3.4 General End-User Sequence ------------------------------- - -From most CDEnext applications, printing is accomplished by bringing -down the menu and selecting . This will result in -the DtPrintSetupBox dialog, which will request the name of a printer, -and offer limited capability to configure print options (e.g. number -of copies). If the user wishes, they can select , which -will start a dtpdm capable of modifying additional print options. -Finally, the user should select . - - - -$Xorg: README,v 1.3 2000/08/17 19:48:02 cpqbld Exp $ diff --git a/hw/xprint/config/en_US/Makefile.am b/hw/xprint/config/en_US/Makefile.am deleted file mode 100644 index 0390ed2d4..000000000 --- a/hw/xprint/config/en_US/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = print diff --git a/hw/xprint/config/en_US/print/Makefile.am b/hw/xprint/config/en_US/print/Makefile.am deleted file mode 100644 index 025003339..000000000 --- a/hw/xprint/config/en_US/print/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = attributes diff --git a/hw/xprint/config/en_US/print/attributes/Makefile.am b/hw/xprint/config/en_US/print/attributes/Makefile.am deleted file mode 100644 index 8a05004d1..000000000 --- a/hw/xprint/config/en_US/print/attributes/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/en_US/print/attributes - -dist_xpc_DATA = document diff --git a/hw/xprint/config/en_US/print/attributes/document b/hw/xprint/config/en_US/print/attributes/document deleted file mode 100644 index 253c46bce..000000000 --- a/hw/xprint/config/en_US/print/attributes/document +++ /dev/null @@ -1,13 +0,0 @@ -# $Xorg: document,v 1.2 2002/11/30 22:10:03 gisburn Exp $ -# Document DPA-Object initial attribute values for en_US(-like) locales -# -# Note that the defaults (for all locales) are set in -# ${XPCONFIGDIR}/C/print/attributes/document -# Values in ${XPCONFIGDIR}/${LANG}/print/attributes/document are used to -# set/override these defaults for a specific locale on demand - -# US and some other countries use US-Letter as default paper size -# ("C"-locale default is "ISO-A4") -*default-medium: na-letter - -# EOF. diff --git a/hw/xprint/ddxInit.c b/hw/xprint/ddxInit.c deleted file mode 100644 index 795052120..000000000 --- a/hw/xprint/ddxInit.c +++ /dev/null @@ -1,390 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "windowstr.h" -#include "servermd.h" -#include "DiPrint.h" - -/*- - *----------------------------------------------------------------------- - * InitOutput -- - * If this is built as a print-only server, then we must supply - * an InitOutput routine. If a normal server's real ddx InitOutput - * is used, then it should call PrinterInitOutput if it so desires. - * The ddx-level hook is needed to allow the printer stuff to - * create additional screens. An extension can't reliably do - * this for two reasons: - * - * 1) If InitOutput doesn't create any screens, then main() - * exits before calling InitExtensions(). - * - * 2) Other extensions may rely on knowing about all screens - * when they initialize, and we can't guarantee the order - * of extension initialization. - * - * Results: - * ScreenInfo filled in, and PrinterInitOutput is called to create - * the screens associated with printers. - * - * Side Effects: - * None - * - *----------------------------------------------------------------------- - */ - -void -InitOutput( - ScreenInfo *pScreenInfo, - int argc, - char **argv) - -{ - pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER; - pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT; - pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD; - pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER; - - pScreenInfo->numPixmapFormats = 0; /* get them in PrinterInitOutput */ - screenInfo.numVideoScreens = 0; - -#ifdef PRINT_ONLY_SERVER - PrinterInitOutput(pScreenInfo, argc, argv); -#endif - -} - -void -DDXRingBell(int volume, int pitch, int duration) -{ - /* dummy func; link fails without */ -} - -static void -BellProc( - int volume, - DeviceIntPtr pDev) -{ - return; -} - -static void -KeyControlProc( - DeviceIntPtr pDev, - KeybdCtrl *ctrl) -{ - return; -} - -static KeySym printKeyMap[256]; -static CARD8 printModMap[256]; - -static int -KeyboardProc( - DevicePtr pKbd, - int what, - int argc, - char *argv[]) -{ - KeySymsRec keySyms; - - keySyms.minKeyCode = 8; - keySyms.maxKeyCode = 8; - keySyms.mapWidth = 1; - keySyms.map = printKeyMap; - - switch(what) - { - case DEVICE_INIT: - InitKeyboardDeviceStruct(pKbd, &keySyms, printModMap, - (BellProcPtr)BellProc, - KeyControlProc); - break; - case DEVICE_ON: - break; - case DEVICE_OFF: - break; - case DEVICE_CLOSE: - break; - } - return Success; -} - -#include "../mi/mipointer.h" -static int -PointerProc( - DevicePtr pPtr, - int what, - int argc, - char *argv[]) -{ -#define NUM_BUTTONS 1 - CARD8 map[NUM_BUTTONS]; - - switch(what) - { - case DEVICE_INIT: - { - map[0] = 0; - InitPointerDeviceStruct(pPtr, map, NUM_BUTTONS, - GetMotionHistory, - (PtrCtrlProcPtr)_XpVoidNoop, - GetMotionHistorySize(), 2); - break; - } - case DEVICE_ON: - break; - case DEVICE_OFF: - break; - case DEVICE_CLOSE: - break; - } - return Success; -} - -void -InitInput( - int argc, - char **argv) -{ - DeviceIntPtr ptr, kbd; - - ptr = AddInputDevice((DeviceProc)PointerProc, TRUE); - kbd = AddInputDevice((DeviceProc)KeyboardProc, TRUE); - RegisterPointerDevice(ptr); - RegisterKeyboardDevice(kbd); - return; -} - - -Bool -LegalModifier( - unsigned int key, - DeviceIntPtr dev) -{ - return TRUE; -} - -void -ProcessInputEvents(void) -{ -} - -#ifdef __APPLE__ -#include "micmap.h" - -void GlxExtensionInit(void); -void GlxWrapInitVisuals(miInitVisualsProcPtr *procPtr); - -void -DarwinHandleGUI(int argc, char *argv[]) -{ -} - -void DarwinGlxExtensionInit(void) -{ - GlxExtensionInit(); -} - -void DarwinGlxWrapInitVisuals( - miInitVisualsProcPtr *procPtr) -{ - GlxWrapInitVisuals(procPtr); -} -#endif - -#ifdef DDXOSINIT -void -OsVendorInit(void) -{ -} -#endif - -#ifdef DDXOSFATALERROR -void -OsVendorFatalError(void) -{ -} -#endif - -#ifdef DDXBEFORERESET -void -ddxBeforeReset(void) -{ - return; -} -#endif - -/* ddxInitGlobals - called by |InitGlobals| from os/util.c */ -void ddxInitGlobals(void) -{ - PrinterInitGlobals(); -} - -/**************************************** -* ddxUseMsg() -* -* Called my usemsg from os/utils/c -* -*****************************************/ - -void ddxUseMsg(void) -{ -} - -void AbortDDX (void) -{ -} - -void ddxGiveUp(void) /* Called by GiveUp() */ -{ -} - -int -ddxProcessArgument ( - int argc, - char *argv[], - int i) -{ - return(0); -} - -#ifdef XINPUT - -#include -#include -#include "XIstubs.h" -#include "exglobals.h" - -/* Place dummy config functions here instead of config/config.c, - since Xprint does not use D-BUS */ -void config_init() { } -void config_fini() { } - - -int -ChangePointerDevice ( - DeviceIntPtr old_dev, - DeviceIntPtr new_dev, - unsigned char x, - unsigned char y) -{ - return (BadDevice); -} - -int -ChangeDeviceControl ( - register ClientPtr client, - DeviceIntPtr dev, - xDeviceCtl *control) -{ - return BadMatch; -} - -int -NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev) -{ - return BadValue; -} - -void -DeleteInputDeviceRequest(DeviceIntPtr dev) -{ -} - -void -OpenInputDevice ( - DeviceIntPtr dev, - ClientPtr client, - int *status) -{ - return; -} - -void -AddOtherInputDevices (void) -{ - return; -} - -void -CloseInputDevice ( - DeviceIntPtr dev, - ClientPtr client) -{ - return; -} - -int -ChangeKeyboardDevice ( - DeviceIntPtr old_dev, - DeviceIntPtr new_dev) -{ - return (Success); -} - -int -SetDeviceMode ( - register ClientPtr client, - DeviceIntPtr dev, - int mode) -{ - return BadMatch; -} - -int -SetDeviceValuators ( - register ClientPtr client, - DeviceIntPtr dev, - int *valuators, - int first_valuator, - int num_valuators) -{ - return BadMatch; -} - - -#endif /* XINPUT */ - -#ifdef AIXV3 -/* - * This is just to get the server to link on AIX, where some bits - * that should be in os/ are instead in hw/ibm. - */ -int SelectWaitTime = 10000; /* usec */ -#endif diff --git a/hw/xprint/doc/Makefile.am b/hw/xprint/doc/Makefile.am deleted file mode 100644 index c0cb9d3d9..000000000 --- a/hw/xprint/doc/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -MAN_SRCS = Xprt.man.pre - -appmandir = $(APP_MAN_DIR) - -appman_PRE = Xprt.man -appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) - -include $(top_srcdir)/cpprules.in - -BUILT_SOURCES = $(appman_PRE) -CLEANFILES = $(appman_PRE) $(appman_DATA) - -SUFFIXES += .$(APP_MAN_SUFFIX) .man - -.man.$(APP_MAN_SUFFIX): - -rm -f $@ - $(LN_S) $< $@ - -EXTRA_DIST = $(MAN_SRCS) Xprt.html Xprt.sgml diff --git a/hw/xprint/doc/Xprt.html b/hw/xprint/doc/Xprt.html deleted file mode 100644 index 2aa0c9e3c..000000000 --- a/hw/xprint/doc/Xprt.html +++ /dev/null @@ -1,115 +0,0 @@ -Xprt diff --git a/hw/xprint/doc/Xprt.man.pre b/hw/xprint/doc/Xprt.man.pre deleted file mode 100644 index 837619cb2..000000000 --- a/hw/xprint/doc/Xprt.man.pre +++ /dev/null @@ -1,196 +0,0 @@ -.\" -*- coding: us-ascii -*- -.TH Xprt __appmansuffix__ "25 November 2004" -.SH NAME -Xprt \- Print server for X Version 11 -.SH SYNOPSIS -.ad l -\fBXprt\fR \kx -.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5) -'in \n(.iu+\nxu -[\fB\-ac\fR] [\fB\-audit \fBlevel\fR\fR] [\fB\-pn\fR] [\fB\-fp \fBfontpath\fR\fR] [\fB\-XpFile \fBfile\fR\fR] [\fB\-XpSpoolerType \fBspoolername\fR\fR] [\fB:\fBdisplay\fR\fR] -'in \n(.iu-\nxu -.ad b -.SH DESCRIPTION -Xprt is the Xprint print server -for version 11 of the X Window system for non display devices -such as printers and fax machines. -.PP -Xprint is an advanced printing system which enables X11 -applications to use devices like printers, FAX or create -documents in formats like PostScript, PCL or PDF. It may be used by -clients such as mozilla. -.PP -Xprint is a very flexible, extensible, scalable, client/server -print system based on ISO 10175 (and some other specs) and the X11 -rendering protocol. -Using Xprint an application can search, query and use devices like -printers, FAX machines or create documents in formats like PDF. -In particular, an application can seek a printer, query supported -attributes (like paper size, trays, fonts etc.), configure the printer -device to match it's needs and print on it like on any other X device -reusing parts of the code which is used for the video card Xserver. -.SH USAGE -Although Xprt may be invoked from the command line, it is -preferable to run it as a daemon via the init script -\fB/etc/init.d/xprint\fR (where this script exists). -.PP -Client programs such as mozilla will require environment -variable \fB${XPSERVERLIST}\fR to be set, identifying the -"display" on which Xprt is running. This variable may be set -for all users via \fB/etc/profile\fR (or similar), using -\fB/etc/init.d/xprint get_xpserverlist\fR: - -.nf -export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist` -.fi - -.SH OPTIONS -Many of Xprt's command line options are shared in common -with the usual X servers (see \fBXserver\fR(__appmansuffix__)). -Commonly used options include: -.TP -\fB:\fIdisplay\fB\fR -The X server runs on the given display. If multiple X -servers are to run simultaneously on a host, each must -have a unique display number. Note that the standard X -server (for video displays) typically runs on display -:0. If \fB/etc/init.d/xprint\fR is used -to invoke Xprt, it may be configured to automatically assign an available -display number. -.TP -\fB\-ac\fR -disables host-based access control mechanisms. Enables access -by any host, and permits any host to modify the access control -list. Use with extreme caution. This option exists primarily -for running test suites remotely. -.TP -\fB\-audit \fIlevel\fB\fR -sets the audit trail level. The default level is 1, meaning -only connection rejections are reported. Level 2 additionally -reports all successful connections and disconnects. Level 4 -enables messages from the SECURITY extension, if present, -including generation and revocation of authorizations and -violations of the security policy. Level 0 turns off the audit -trail. Audit lines are sent as standard error output. -.TP -\fB\-fp \fIfontpath\fB\fR -sets the search path for fonts. This path is a comma -separated list of directories which Xprt searches for -font databases. -.TP -\fB\-pn\fR -permits the server to continue running if it fails to -establish all of its well-known sockets (connection -points for clients), but establishes at least -one. -.TP -\fB\-XpFile \fIfile\fB\fR -Sets an alternate Xprinters file (see section FILES). -.TP -\fB\-XpSpoolerType \fIspoolername\fB\fR -Defines the spooler system to be used for print job spooling. -Supported values in xprint.mozdev.org release 009 are: - -aix - -aix4 - -bsd - -osf - -solaris - -sysv - -uxp - -cups - -lprng - -other - -none - -(multiple values can be specified, separated by ':', the first active spooler will be chosen). -The default value is platform-specific and can be obtained via - -.nf -Xprt \-h -.fi - -\&. -.SH ENVIRONMENT -The following environment variables are recognized by the X print server -(environment variables recognized by Xprint clients are described in -\fBXprint\fR(__miscmansuffix__)): -.TP -\fB${XPCONFIGDIR}\fR -This environment variable points to the root -of the Xprint server configuration directory hierarchy. -If the variable is not defined, the default -path is be assumed. The default path may be -\fB/usr/X11R6/lib/X11/xserver/\fR, -\fB/usr/lib/X11/xserver/\fR, -\fB/usr/share/Xprint/xserver/\fR or -\fB/usr/openwin/server/etc/XpConfig\fR, depending on the -system, and may be configured in \fB/etc/init.d/xprint\fR. -.TP -\fB${LANG}\fR -This environment variable selects the locale settings used by the Xprint server. -Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR) -which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR). -If \fB${LANG}\fR is not set "C" is assumed. -.PP -.SH FILES -.TP -\fB${XPCONFIGDIR}/${LANG}/print/Xprinters\fR, \fB${XPCONFIGDIR}/C/print/Xprinters\fR -`Xprinters' is the top most configuration file. It tells -Xprt which specific printer names (e.g. mylaser) should -be supported, and whether \fBlpstat\fR(1) or other commands -should be used to automatically supplement the list of -printers. -.TP -\fB${XPCONFIGDIR}/${LANG}/print/attributes/printer\fR, \fB${XPCONFIGDIR}/C/print/attributes/printer\fR -The `printer' file maps printer names to model -configurations (see `model-config' below). For example, -"mylaser" could be mapped to a "HPDJ1600C", and all other -arbitrary printers could be mapped to a default, such as -"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters -file, setting up defaults in `printer' becomes all the -more important. -.TP -\fB${XPCONFIGDIR}/${LANG}/print/attributes/document\fR, \fB${XPCONFIGDIR}/C/print/attributes/document\fR -The `document' file specifies the initial document values -for any print jobs. For example, which paper tray to -use, what default resolution, etc. -.TP -\fB${XPCONFIGDIR}/${LANG}/print/attributes/job\fR, \fB${XPCONFIGDIR}/C/print/attributes/job\fR -The `job' file specifies the initial job values for any -print jobs. For example, "notification-profile" can be -set so that when a print job is successfully sent to a -printer, e-mail is sent to the user. -.TP -\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR -The `model-config' file has attributes that describe the -printer model's capabilities and default settings. -Printer model fonts may also be present. The model-config -file also identifies the print ddx driver to be used. -For each printer model supported, a complete hierarchy of -files should exist. In most cases, these files do not -need to be modified. -.TP -\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR -The print ddx drivers can have highly specific -configuration files to control their behavior. In most -cases, these files do not need to be modified. -.SH "SEE ALSO" -\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/) -.SH AUTHORS -This manual page was written by -Drew Parsons and -Roland Mainz , -with some help from the man page at -http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86 -man page for \fBXserver\fR(1). diff --git a/hw/xprint/doc/Xprt.sgml b/hw/xprint/doc/Xprt.sgml deleted file mode 100644 index a62499263..000000000 --- a/hw/xprint/doc/Xprt.sgml +++ /dev/null @@ -1,371 +0,0 @@ - - - - - - - Xprt - __appmansuffix__ - - - Xprt - - Print server for X Version 11 - - - - Xprt - - - - - - - - - - - - - - - - - - - DESCRIPTION - - Xprt is the Xprint print server - for version 11 of the X Window system for non display devices - such as printers and fax machines. - - Xprint is an advanced printing system which enables X11 - applications to use devices like printers, FAX or create - documents in formats like PostScript, PCL or PDF. It may be used by - clients such as mozilla. - - - Xprint is a very flexible, extensible, scalable, client/server - print system based on ISO 10175 (and some other specs) and the X11 - rendering protocol. - Using Xprint an application can search, query and use devices like - printers, FAX machines or create documents in formats like PDF. - In particular, an application can seek a printer, query supported - attributes (like paper size, trays, fonts etc.), configure the printer - device to match it's needs and print on it like on any other X device - reusing parts of the code which is used for the video card Xserver. - - - - - USAGE - - - Although Xprt may be invoked from the command line, it is - preferable to run it as a daemon via the init script - /etc/init.d/xprint (where this script exists). - - - Client programs such as mozilla will require environment - variable ${XPSERVERLIST} to be set, identifying the - "display" on which Xprt is running. This variable may be set - for all users via /etc/profile (or similar), using - /etc/init.d/xprint get_xpserverlist: - - export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist` - - - - - - OPTIONS - - Many of Xprt's command line options are shared in common - with the usual X servers (see Xserver__appmansuffix__). - Commonly used options include: - - - - - - - The X server runs on the given display. If multiple X - servers are to run simultaneously on a host, each must - have a unique display number. Note that the standard X - server (for video displays) typically runs on display - :0. If /etc/init.d/xprint is used - to invoke Xprt, it may be configured to automatically assign an available - display number. - - - - - - - disables host-based access control mechanisms. Enables access - by any host, and permits any host to modify the access control - list. Use with extreme caution. This option exists primarily - for running test suites remotely. - - - - - - - sets the audit trail level. The default level is 1, meaning - only connection rejections are reported. Level 2 additionally - reports all successful connections and disconnects. Level 4 - enables messages from the SECURITY extension, if present, - including generation and revocation of authorizations and - violations of the security policy. Level 0 turns off the audit - trail. Audit lines are sent as standard error output. - - - - - - - sets the search path for fonts. This path is a comma - separated list of directories which Xprt searches for - font databases. - - - - - - - permits the server to continue running if it fails to - establish all of its well-known sockets (connection - points for clients), but establishes at least - one. - - - - - - - - Sets an alternate Xprinters file (see section FILES). - - - - - - - - Defines the spooler system to be used for print job spooling. - Supported values in xprint.mozdev.org release 009 are: - - aix - aix4 - bsd - osf - solaris - sysv - uxp - cups - lprng - other - none - - (multiple values can be specified, separated by ':', the first active spooler will be chosen). - The default value is platform-specific and can be obtained via - Xprt -h. - - - - - - - - ENVIRONMENT - - The following environment variables are recognized by the X print server - (environment variables recognized by Xprint clients are described in - Xprint__miscmansuffix__): - - - - ${XPCONFIGDIR} - - This environment variable points to the root - of the Xprint server configuration directory hierarchy. - If the variable is not defined, the default - path is be assumed. The default path may be - /usr/X11R6/lib/X11/xserver/, - /usr/lib/X11/xserver/, - /usr/share/Xprint/xserver/ or - /usr/openwin/server/etc/XpConfig, depending on the - system, and may be configured in /etc/init.d/xprint. - - - - - ${LANG} - - - This environment variable selects the locale settings used by the Xprint server. - Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) - which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). - If ${LANG} is not set "C" is assumed. - - - - - - - - - FILES - - - - ${XPCONFIGDIR}/${LANG}/print/Xprinters - ${XPCONFIGDIR}/C/print/Xprinters - - - `Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat1 or other commands - should be used to automatically supplement the list of - printers. - - - - - - ${XPCONFIGDIR}/${LANG}/print/attributes/printer - ${XPCONFIGDIR}/C/print/attributes/printer - - - The `printer' file maps printer names to model - configurations (see `model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat1 in the Xprinters - file, setting up defaults in `printer' becomes all the - more important. - - - - - - ${XPCONFIGDIR}/${LANG}/print/attributes/document - ${XPCONFIGDIR}/C/print/attributes/document - - - The `document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. - - - - - - ${XPCONFIGDIR}/${LANG}/print/attributes/job - ${XPCONFIGDIR}/C/print/attributes/job - - - The `job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. - - - - - - ${XPCONFIGDIR}/C/print/models/PSdefault/model-config - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf - - - - The `model-config' file has attributes that describe the - printer model's capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. - - - - - - ${XPCONFIGDIR}/C/print/ddx-config/raster/pdf - ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl - ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript - - - - The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. - - - - - - - - - SEE ALSO - - - - - - - Xprint__miscmansuffix__ - X11__miscmansuffix__ - xplsprinters__appmansuffix__ - xprehashprinterlist__appmansuffix__ - xphelloworld__appmansuffix__ - xpxmhelloworld__appmansuffix__ - xpawhelloworld__appmansuffix__ - xpxthelloworld__appmansuffix__ - xpsimplehelloworld__appmansuffix__ - Xserver__appmansuffix__ - - - libXp__libmansuffix__ - libXprintUtils__libmansuffix__ - libXprintAppUtils__libmansuffix__ - XmPrintShell__libmansuffix__ - XawPrintShell__libmansuffix__ - Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html) - Xprint main site (http://xprint.mozdev.org/) - - - - - - AUTHORS - - This manual page was written by - Drew Parsons dparsons@debian.org and - Roland Mainz roland.mainz@nrubsig.org, - with some help from the man page at - http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86 - man page for Xserver1. - - - - - - diff --git a/hw/xprint/etc/Makefile.am b/hw/xprint/etc/Makefile.am deleted file mode 100644 index 0a960cd1b..000000000 --- a/hw/xprint/etc/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = init.d profile.d Xsession.d diff --git a/hw/xprint/etc/Xsession.d/92xprint-xpserverlist b/hw/xprint/etc/Xsession.d/92xprint-xpserverlist deleted file mode 100644 index 60d964a34..000000000 --- a/hw/xprint/etc/Xsession.d/92xprint-xpserverlist +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -##################################################################### -### File: 92xprint-xpserverlist -### -### Default Location: /etc/X11/Xsession.d/ -### -### Purpose: Setup Xprint env vars -### -### Description: This script is invoked by means of the Xsession file -### at user login. -### -### Invoked by: /etc/X11/Xsession -### -### (c) Copyright 2003-2004 Roland Mainz -### -### please send bugfixes or comments to https://bugs.freedesktop.org -### -##################################################################### - - -# -# Obtain list of Xprint servers -# - -if [ -x "/etc/init.d/xprint" ] ; then - XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" - export XPSERVERLIST -fi - -########################## eof ##################### diff --git a/hw/xprint/etc/Xsession.d/Makefile.am b/hw/xprint/etc/Xsession.d/Makefile.am deleted file mode 100644 index 96a5ee73b..000000000 --- a/hw/xprint/etc/Xsession.d/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -xpcdir = $(sysconfdir)/X11/Xsession.d -dist_xpc_DATA = 92xprint-xpserverlist diff --git a/hw/xprint/etc/init.d/Makefile.am b/hw/xprint/etc/init.d/Makefile.am deleted file mode 100644 index 0cf1adc92..000000000 --- a/hw/xprint/etc/init.d/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -include $(top_srcdir)/cpprules.in - -noinst_PRE = xprint -BUILT_SOURCES = $(noinst_PRE) -CLEANFILES = $(noinst_PRE) xprint.pre - -CPP_FILES_FLAGS = -DProjectRoot='"$(PROJECTROOT)"' -DOS_LINUX - -xprint.pre: xprint.cpp - $(SED) -e 's/^\(\s\+\)#/\1XCOMM/' ${srcdir}/xprint.cpp > $@ - -EXTRA_DIST = xprint.cpp diff --git a/hw/xprint/etc/init.d/xprint.cpp b/hw/xprint/etc/init.d/xprint.cpp deleted file mode 100644 index dbfd1e139..000000000 --- a/hw/xprint/etc/init.d/xprint.cpp +++ /dev/null @@ -1,1277 +0,0 @@ -XCOMM!/bin/sh -XCOMM -XCOMM Copyright 2002-2004 by Roland Mainz . -XCOMM -XCOMM This script manages the Xprint server side - -XCOMM Basic support for IRIX-style "chkconfig" -XCOMM chkconfig: 2345 61 61 -XCOMM description: Startup/shutdown script for Xprint server(s) - -XCOMM Basic support for the Linux Standard Base Specification 1.0.0 -XCOMM (Note: The Should-Start/Stop lines are there so that this works in the -XCOMM future, when the LSB adopts these. The X-UnitedLinux lines are there -XCOMM so that it works right now.) -XCOMM## BEGIN INIT INFO -XCOMM Provides: xprint -XCOMM Required-Start: $local_fs $remote_fs $syslog $network -XCOMM Required-Stop: $local_fs $remote_fs $syslog -XCOMM Should-Start: cups lpd xfs -XCOMM Should-Stop: cups lpd xfs -XCOMM X-UnitedLinux-Should-Start: cups lpd xfs -XCOMM X-UnitedLinux-Should-Stop: cups lpd xfs -XCOMM Default-Start: 3 5 -XCOMM Default-Stop: 0 1 2 6 -XCOMM Description: Startup/shutdown script for Xprint server(s) -XCOMM## END INIT INFO - -#undef sun -#undef unix - -XCOMM########################################################################### -XCOMM -XCOMM This script has three main tasks: -XCOMM 1. Start Xprint servers ("Xprt") at boot time. -XCOMM 2. Shutdown Xprint servers when the machine is being shut down. -XCOMM 3. Query the list of available printers. -XCOMM -XCOMM Additional tasks are: -XCOMM 4. Restart ('restart'|'force-reload') and conditional restart -XCOMM ('condrestart'/'try-restart') for Linux support -XCOMM 5. Wrapping of application call with setting XPSERVERLIST ('wrapper') -XCOMM -XCOMM Usage: -XCOMM - Start Xprint server(s) manually: -XCOMM % /etc/init.d/xprint start -XCOMM -XCOMM - Stop Xprint server(s) manually: -XCOMM % /etc/init.d/xprint stop -XCOMM -XCOMM - Populate $XPSERVERLIST env var (for example as part of a global -XCOMM login script like /etc/profile or per-user login scripts like -XCOMM $HOME/.profile (sh/ksh/bash)) -XCOMM % XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" -XCOMM % export XPSERVERLIST -XCOMM -XCOMM Installation: -XCOMM Copy this script to /etc/init.d/xprint and make sure that it is -XCOMM executable. If your installation is LSB-compliant, then run -XCOMM % /usr/lib/lsb/install_initd /etc/init.d/xprint -XCOMM to start the service on startup. Otherwise, manually create links -XCOMM to the matching run levels. -XCOMM Examples: -XCOMM - Solaris 2.7/2.8/2.9: -XCOMM % cp xprint /etc/init.d/xprint -XCOMM % chmod a+rx /etc/init.d/xprint -XCOMM % ln /etc/init.d/xprint /etc/rc0.d/K38xprint -XCOMM % ln /etc/init.d/xprint /etc/rc1.d/K38xprint -XCOMM % ln /etc/init.d/xprint /etc/rc2.d/S81xprint -XCOMM % ln /etc/init.d/xprint /etc/rcS.d/K38xprint -XCOMM -XCOMM - SuSE Linux 7.3 -XCOMM % cp xprint /etc/init.d/xprint -XCOMM % chmod a+rx /etc/init.d/xprint -XCOMM % ln -s ../xprint /etc/init.d/rc3.d/K13xprint -XCOMM % ln -s ../xprint /etc/init.d/rc3.d/S12xprint -XCOMM % ln -s ../xprint /etc/init.d/rc5.d/K13xprint -XCOMM % ln -s ../xprint /etc/init.d/rc5.d/S12xprint -XCOMM % ln -s ../xprint /etc/init.d/rc2.d/K13xprint -XCOMM % ln -s ../xprint /etc/init.d/rc2.d/S12xprint -XCOMM -XCOMM - SuSE Linux 6.4: -XCOMM % cp xprint /sbin/init.d/xprint -XCOMM % chmod a+rx /sbin/init.d/xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc2.d/K20xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc2.d/S20xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc3.d/K20xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc3.d/S20xprint -XCOMM -XCOMM Notes: -XCOMM - The Xprint servers must be started _after_ the print -XCOMM spooler or the server(s) may refuse to start -XCOMM - The script should be readable by all users to ensure that they -XCOMM can use the "get_xpserverlist"-option -XCOMM -XCOMM Custom configuration: -XCOMM - Edit the function setup_config() in this script to match your needs -XCOMM -XCOMM Known bugs/ToDo/Notes: -XCOMM - The shell script assumes that a Xserver can be reached via -XCOMM "hostname:displaynum" where "hostname" is obtained from -XCOMM "/usr/bin/hostname". It may happen that a kernel firewall -XCOMM blocks an X connection on the same host (e.g. client && Xserver -XCOMM are running on the same host). -XCOMM Suggested fix: Fix the firewall config. -XCOMM Suggested workaround: Edit this script and replace the use of -XCOMM /usr/bin/hostname with "echo 'localhost'". -XCOMM -XCOMM########################################################################### -XCOMM - - -XCOMM########################################################################### - -fatal_error() -{ - echo "${0}: ## FATAL ERROR: ${1}" 1>&2 - exit 1 -} - -error_echo() -{ - echo "${0}: ## ERROR: ${1}" 1>&2 -} - -warning_echo() -{ - echo "${0}: ## WARNING: ${1}" 1>&2 -} - -verbose_echo() -{ - echo "${0}: ${1}" -} - -msg() -{ - echo "${1}" -} - -XCOMM########################################################################### - -#ifndef OS_LINUX -XCOMM Force use of a POSIX conformant sh -XCOMM (Solaris /sbin/sh is plain Bourne shell) -[ "$1" != "posix_sh_forced" -a -x /bin/ksh ] && exec /bin/ksh "$0" posix_sh_forced "$@" -[ "$1" != "posix_sh_forced" -a -x /bin/bash ] && exec /bin/bash --norc --noprofile "$0" posix_sh_forced "$@" -[ "$1" != "posix_sh_forced" -a -x /usr/local/bin/ksh ] && exec /usr/local/bin/ksh "$0" posix_sh_forced "$@" -[ "$1" != "posix_sh_forced" -a -x /usr/local/bin/bash ] && exec /usr/local/bin/bash --norc --noprofile "$0" posix_sh_forced "$@" -if [ "$1" != "posix_sh_forced" ] ; then - echo "${0}: ## FATAL ERROR: No POSIX-shell found." 1>&2 - exit 1 -fi - -shift # Drop "posix_sh_forced" -#endif /* !OS_LINUX */ - -XCOMM#debug -XCOMM set -x - -XCOMM Change current dir to a location which is writeable by everyone -cd /tmp - -XCOMM Clear some environment variables -unset TEMP TMPDIR SCREENDIR - -XCOMM Set search path for commands -export PATH=/usr/bin:/bin:/usr/sbin:/sbin -#ifdef OS_SOLARIS -export PATH=/usr/xpg4/bin:${PATH} -#endif - -XCOMM# Try to figure-out where X11 was installed -#if defined(OS_SOLARIS) -XPROJECTROOT=/usr/openwin -export OPENWINHOME=/usr/openwin -#elif defined(OS_AIX) -XPROJECTROOT=/usr/lpp/X11 -#else -#if defined(ProjectRoot) -[ -d ProjectRoot/bin ] && XPROJECTROOT=ProjectRoot -#endif -[ -d /usr/X11/bin ] && XPROJECTROOT=/usr/X11 -[ -d /usr/X11R6/bin ] && XPROJECTROOT=/usr/X11R6 -#endif -XPCUSTOMGLUE=DEF_XPCUSTOMGLUE # This is used for customizing this script -export XPROJECTROOT XPCUSTOMGLUE - -if [ -z "${XPROJECTROOT}" ] ; then - fatal_error "Unknown XProjectRoot." -fi - -XCOMM Set the location of the Xprt binary we want to use. -XPRT_BIN="${XPROJECTROOT}/bin/Xprt" - -XCOMM Set the location of the global file where we store the locations -XCOMM of the system-wide servers -if [ -d /var/run ] ; then - XP_GLOBAL_SERVERS=/var/run/Xprint_servers -else - XP_GLOBAL_SERVERS=/tmp/.Xprint_servers -fi - -XCOMM ${LOGNAME} will not work if user su'ed into another account -export CURRLOGNAME="$(id -u -n)" - -XCOMM Set location where we want to store the list of Xprint servers managed -XCOMM by this user -XCOMM - If we start as "root" use the global file -XCOMM - If we start as normal user use a per-user file - -if [ "${CURRLOGNAME}" != "root" -a "${CURRLOGNAME}" != "" ] ; then - XP_PER_USER_SERVERS="/tmp/.Xprint_servers_${CURRLOGNAME}" - XP_SERVERS="${XP_PER_USER_SERVERS}" -else - XP_SERVERS="${XP_GLOBAL_SERVERS}" -fi - -XCOMM Set umask that owner can r/w all files and everyone else can read them -umask 022 - -XCOMM Bump limit for per-process open files to ensure that Xprt can open many many fonts -ulimit -n 1024 - -XCOMM########################################################################### - -XCOMM Get list of fonts for a given display -get_fontlist_from_display() -{ - ${XPROJECTROOT}/bin/xset -display "${1}" q | - awk "/Font Path:/ { i=1 ; next } i==1 { print \$0 ; i=0 }" | - fontpath2fontlist -} - -XCOMM Get list from a fontserver config -get_fontlist_from_xfs_config() -{ - if [ ! -r "${1}" ] ; then - return 0 - fi - - ( - cat "${1}" | - while read -r i ; do - for val in $i; do - case $val in - \#*) break ;; - ?*=*) key="${val%%=*}" ;; - =*) key="${tok}" ;; - *) [ "${key}" = "catalogue" -a "${tok}" != "" ] && echo "${tok}" ;; - esac - tok="${val#*=}" - done - done - ) | tr "," "\n" | fontpath2fontlist -} - -get_fontlist_from_all_xfs_configs() -{ - get_fontlist_from_xfs_config "/etc/openwin/fs/fontserver.cfg" - get_fontlist_from_xfs_config "/usr/openwin/lib/X11/fontserver.cfg" - get_fontlist_from_xfs_config "/etc/X11/fs-xtt/config" - get_fontlist_from_xfs_config "/etc/X11/fs/config" - get_fontlist_from_xfs_config "/etc/X11/xfs/config" - get_fontlist_from_xfs_config "${XPROJECTROOT}/lib/X11/fs/config" -} - -get_fontlist_from_xf86config() -{ - srcxconf="" - - XCOMM see xorg.conf(5x) manual page for the list of locations used here - [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf" ] && srcxconf="/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf-4" ] && srcxconf="/etc/X11/xorg.conf-4" - [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf" ] && srcxconf="/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/etc/xorg.conf" ] && srcxconf="/etc/xorg.conf" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf.${hostname}" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf.${hostname}" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf-4" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf-4" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf.${hostname}" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf.${hostname}" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf-4" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf-4" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf" - - XCOMM Xfree86 locations - [ "${srcxconf}" = "" -a -f "/etc/X11/XF86Config-4" ] && srcxconf="/etc/X11/XF86Config-4" - [ "${srcxconf}" = "" -a -f "/etc/X11/XF86Config" ] && srcxconf="/etc/X11/XF86Config" - - - if [ "${srcxconf}" = "" ] ; then - return 0 - fi - - currsection="" - cat "${srcxconf}" | - while read i1 i2 i3 i4 ; do - # Strip "\"" from I2 - i2="${i2#\"}" ; i2="${i2%\"}" - - case "${i1}" in - \#*) - continue - ;; - 'Section') - currsection="${i2}" - ;; - 'EndSection') - currsection="" - ;; - 'FontPath') - [ "$currsection" = "Files" ] && echo "${i2%:unscaled}" - ;; - esac - done | egrep -v -i "tcp/|tcp4/|tcp6/|unix/" - - return 0 -} - -get_fontlist_from_defoma() -{ - # Include Debian defoma font directory where relevant - if [ -d "/var/lib/defoma/x-ttcidfont-conf.d/dirs" ] ; then - find "/var/lib/defoma/x-ttcidfont-conf.d/dirs" -name fonts.dir | - while read i ; do echo "${i%/fonts.dir}" ; done - fi -} - -XCOMM Get list of system fonts -get_system_fontlist() -{ -#if defined(OS_SOLARIS) - ## List the standard X11 fonts - # echo "${XPROJECTROOT}/lib/X11/fonts/F3/" - # echo "${XPROJECTROOT}/lib/X11/fonts/F3bitmaps/" - echo "${XPROJECTROOT}/lib/X11/fonts/Type1/" - echo "${XPROJECTROOT}/lib/X11/fonts/Type1/outline/" - # We cannot use /usr/openwin/lib/X11/fonts/Type1/sun/ - see - # http://xprint.mozdev.org/bugs/show_bug.cgi?id=5726 - # ("Xprint doesn't start under Solaris 2.9 due *.ps files in /usr/openwin/lib/X11/fonts/Type1/sun/fonts.dir") - #echo "${XPROJECTROOT}/lib/X11/fonts/Type1/sun/" - echo "${XPROJECTROOT}/lib/X11/fonts/TrueType/" - echo "${XPROJECTROOT}/lib/X11/fonts/Speedo/" - echo "${XPROJECTROOT}/lib/X11/fonts/misc/" - echo "${XPROJECTROOT}/lib/X11/fonts/75dpi/" - echo "${XPROJECTROOT}/lib/X11/fonts/100dpi/" - - ## List all fonts in all locales installed on this machine - cat /usr/openwin/lib/locale/''*/OWfontpath | tr "," "\n" | sort -u -#elif defined(OS_LINUX) - ( - get_fontlist_from_defoma - - get_fontlist_from_xf86config - - # Getting font paths from XFS is mainly required for compatibilty to RedHat - get_fontlist_from_all_xfs_configs - - ## List all fonts in all locales installed on this machine - ( - [ -d "/usr/share/fonts" ] && find /usr/share/fonts -name fonts.dir - find "${XPROJECTROOT}/lib/X11/fonts" -name fonts.dir - ) | - while read i ; do echo "${i%/fonts.dir}" ; done - ) | sort -u -#else - ## List the standard X11 fonts - # (AIX should be handled like Solaris but I did not found a way to - # enumerate all fonts in all installed locales without scanning the - # dirs manually) - echo "${XPROJECTROOT}/lib/X11/fonts/Type1/" - echo "${XPROJECTROOT}/lib/X11/fonts/TrueType/" - echo "${XPROJECTROOT}/lib/X11/fonts/TTF/" - echo "${XPROJECTROOT}/lib/X11/fonts/Speedo/" - echo "${XPROJECTROOT}/lib/X11/fonts/misc/" - echo "${XPROJECTROOT}/lib/X11/fonts/75dpi/" - echo "${XPROJECTROOT}/lib/X11/fonts/100dpi/" - echo "${XPROJECTROOT}/lib/X11/fonts/" -#endif -} - -XCOMM Filter fonts per given extended regular expressions -XCOMM (and make sure we filter any model-config fonts - they are managed by Xprt internally) -filter_fontlist() -{ - egrep -- "${1}" | fgrep -v "/models/" | egrep -v -- "${2}" -} - -XCOMM Filter font paths with unsupported font types -XCOMM (such as CID fonts) -filter_unsupported_fonts() -{ - egrep -v -i "/cid(/$|$)|/csl(/$|$)" -} - -XCOMM Validate fontpath -XCOMM Only return valid font path entries (note that these entries may -XCOMM include non-file stuff like font server references) -validate_fontlist() -{ - while read i ; do - case "${i}" in - # Check if font path entry is a font server... - tcp/''*|tcp4/''*|tcp6/''*|unix/''*) - echo "${i}" - ;; - # ... if not check if the path is accessible - # and has a valid "fonts.dir" index - *) - [ -f "${i}/fonts.dir" ] && echo "${i}" - ;; - esac - done -} - -XCOMM Build a comma-seperated list of fonts (font path) from a list of fonts -fontlist2fontpath() -{ - fp="" - read fp; - while read i ; do - fp="${fp},${i}" - done - - echo "$fp" -} - -XCOMM Build a list (one item per line) of fonts from a font path -fontpath2fontlist() -{ - while read i ; do - echo "${i}" | tr "," "\n" - done -} - -XCOMM Sort scaleable fonts (PS Type1 and TrueType) first in a font list -sort_scaleable_fonts_first() -{ - i="$(fontlist2fontpath)" - # First list PS Type1 fonts... - echo "${i}" | fontpath2fontlist | fgrep "/Type1" - # ... then TrueType fonts ... - echo "${i}" | fontpath2fontlist | egrep -i "/TrueType|/TT(/$|$)|/TTF(/$|$)" - # ... then all others - echo "${i}" | fontpath2fontlist | egrep -v -i "/Type1|/TrueType|/TT(/$|$)|/TTF(/$|$)" -} - -XCOMM Check if a X display is used by a Xserver or not -XCOMM Known bugs: -XCOMM - there is no way in plain bourne shell or bash (see comment about ksh93 -XCOMM below) to test if a Xserver sits only on a socket and not on a pipe -XCOMM - some Xserver's don't cleanup their stuff in /tmp on exit which may end -XCOMM in the problem that we don't detect possible free display numbers -XCOMM (one problem is that only ksh93 can do stuff like -XCOMM "cat "${lastdisplaynumreturned_store}" - return 0 - fi - done - - # Using "magic" value of 189 here due lack of a better solution - echo "189" - echo "189" >"${lastdisplaynumreturned_store}" - return 0 -} - -XCOMM Check if a process exists or not -pexists() -{ - [ "$1" = "" ] && return 1; - - # Use of /proc would be better but not all platforms (like AIX) have procfs - [ "$(ps -p $1 | fgrep $1)" != "" ] && return 0; - return 1 -} - -XCOMM Check if there is a spooler running... -is_spooler_running() -{ - # This covers Linux lpd, CUPS, Solaris and AIX 4.x - but what about - # AIX 5.x, HP-UX and IRIX ? - - [ "$(ps -A | egrep 'lpd|lpsched|cupsd|qdaemon' | fgrep -v 'grep')" != "" ] && return 0; - return 1 -} - -XCOMM Wait until the spooler system has been started (but not more than 30secs) -wait_for_print_spooler() -{ - for i in 1 2 3 4 5 6 7 8 9 10 ; do - is_spooler_running && return 0; - sleep 3 - done - - return 0 -} - -lock_server_registry() -{ - lock_counter=0 # counts in 1/100s - waiting_for_lock_msg_send="false" - while ! mkdir "${XP_SERVERS}.lock" 2>/dev/null ; do - # print notice after 2 seconds - if [ ${lock_counter} -gt 200 -a "${waiting_for_lock_msg_send}" != "true" ] ; then - echo "${0}: waiting for lock(=${XP_SERVERS}.lock)..." - waiting_for_lock_msg_send="true" - fi - - # tread the lock as "broken" after 20 seconds - if [ ${lock_counter} -gt 2000 ] ; then - echo "${0}: WARNING: lock timeout for lock(=${XP_SERVERS}.lock)." - return 0 - fi - - if [ -x /bin/usleep ] ; then - /bin/usleep 200000 - lock_counter=$((${lock_counter} + 20)) # 20/100s - else - sleep 1 - lock_counter=$((${lock_counter} + 100)) # 100/100s - fi - done -} - -unlock_server_registry() -{ - rmdir "${XP_SERVERS}.lock" -} - -XCOMM Kill dead registry locks (silently!) -kill_dead_registry_locks() -{ - rm -Rf "${XP_SERVERS}.lock" -} - -XCOMM Start Xprint servers -start_servers() -{ - # Write registry "intro" ... - lock_server_registry - echo "# Xprint server list" >>"${XP_SERVERS}" - echo "# File is for private use for ${0}." >>"${XP_SERVERS}" - echo "# Do not edit, rely on the content or file format." >>"${XP_SERVERS}" - unlock_server_registry - - hostname="$(hostname)" - - default_fontpath="$(get_system_fontlist | fontlist2fontpath)" - default_fontpath_acceptpattern=".*"; - default_fontpath_rejectpattern="_No_Match_"; # Match nothing - - curr=0 - while [ $curr -lt $num_xpstart ] ; do - if [ "${xpstart_remote_server[$curr]}" != "" ] ; then - # Remote Xprt, just put the entry into the registry - lock_server_registry - echo "display=${xpstart_remote_server[$curr]}" >>"${XP_SERVERS}" - unlock_server_registry - else - # Run block in seperate process to avoid that changes to the - # xpstart_* variables affect the next cycle - ( - # Use defaults if there are no special options - [ "${xpstart_fontpath[$curr]}" = "" ] && xpstart_fontpath[$curr]="${default_fontpath}"; - [ "${xpstart_fontpath_acceptpattern[$curr]}" = "" ] && xpstart_fontpath_acceptpattern[$curr]="$default_fontpath_acceptpattern"; - [ "${xpstart_fontpath_rejectpattern[$curr]}" = "" ] && xpstart_fontpath_rejectpattern[$curr]="$default_fontpath_rejectpattern"; - [ "${xpstart_displayid[$curr]}" = "" ] && xpstart_displayid[$curr]="$(FindFreeXDisplayNum)" - [ "${xpstart_logger[$curr]}" = "" ] && xpstart_logger[$curr]="logger -p lpr.notice -t Xprt_${xpstart_displayid[$curr]}"; - [ "${xpstart_logfile[$curr]}" = "" ] && xpstart_logfile[$curr]="/dev/null"; - [ "${xpstart_xprt_binary[$curr]}" = "" ] && xpstart_xprt_binary[$curr]="${XPRT_BIN}"; - if [ "${xpstart_xprt_binary[$curr]}" = "/usr/openwin/bin/Xprt" -o "$(uname -s)" = "SunOS" ] ; then - # Solaris /usr/openwin/bin/Xprt does not support "-nolisten tcp" - # yet nor is it possible to run a Xserver on a unix socket only - # in Solaris since access to the unix domain sockets in - # /tmp/.X11-pipe and /tmp/.X11-unix is restricted to applications - # with group-id "root" (e.g. the Xprt server would need to be - # setgid "root" that plain users can start it listening on a unix - # socket only) - [ "${xpstart_options[$curr]}" = "" ] && xpstart_options[$curr]="-ac -pn" - else - [ "${xpstart_options[$curr]}" = "" ] && xpstart_options[$curr]="-ac -pn -nolisten tcp" - fi - - # Check if the Xprt binary is available - if [ ! -x "${xpstart_xprt_binary[$curr]}" ] ; then - error_echo "Can't find \"${xpstart_xprt_binary[$curr]}\"." - exit 1 # exit block - fi - - # Verify and set location of font encodings directory file - if [ "${xpstart_font_encodings_dir[$curr]}" = "" ] ; then - if [ -f "${XPROJECTROOT}/lib/X11/fonts/xf86encodings/encodings.dir" ] ; then - xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/lib/X11/fonts/xf86encodings/encodings.dir" - else - xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/lib/X11/fonts/encodings/encodings.dir"; - fi - fi - - unset FONT_ENCODINGS_DIRECTORY - if [ ! -f "${xpstart_font_encodings_dir[$curr]}" ] ; then - warning_echo "Can't find \"${xpstart_font_encodings_dir[$curr]}\", TrueType font support may not work." - fi - - export FONT_ENCODINGS_DIRECTORY="${xpstart_font_encodings_dir[$curr]}" - - # Generate font path (containing only valid font path elements) - # from input font path and filter expressions - curr_fp=$(echo "${xpstart_fontpath[$curr]}" | - fontpath2fontlist | - filter_fontlist "${xpstart_fontpath_acceptpattern[$curr]}" "${xpstart_fontpath_rejectpattern[$curr]}" | - filter_unsupported_fonts | - sort_scaleable_fonts_first | - validate_fontlist | - fontlist2fontpath) - - # Set Xserver auditing level option - unset curr_audit - if [ "${xpstart_auditlevel[$curr]}" != "" ] ; then - curr_audit="-audit ${xpstart_auditlevel[$curr]}" - fi - - # Set Xprt -XpFile option - unset curr_xpfile - if [ "${xpstart_xpfile[$curr]}" != "" ] ; then - curr_xpfile="-XpFile ${xpstart_xpfile[$curr]}" - fi - - # Set custom XPCONFIGDIR (if there is one) - unset XPCONFIGDIR - if [ "${xpstart_xpconfigdir[$curr]}" != "" ] ; then - export XPCONFIGDIR="${xpstart_xpconfigdir[$curr]}" - fi - - # If someone uses "-nolisten tcp" make sure we do not add a hostname to force local transport - if [ "$(echo "${xpstart_options[$curr]}" | egrep "nolisten.*tcp")" != "" ] ; then - xp_display=":${xpstart_displayid[$curr]}" - else - xp_display="${hostname}:${xpstart_displayid[$curr]}" - fi - - ( - ( - "${xpstart_xprt_binary[$curr]}" \ - ${xpstart_options[$curr]} \ - ${curr_xpfile} ${curr_audit} \ - -fp ${curr_fp} \ - :${xpstart_displayid[$curr]} & - server_pid="$!" - - # Append the new server to the registry - lock_server_registry - echo "display=${xp_display} display_id=${xpstart_displayid[$curr]} pid=${server_pid}" >>"${XP_SERVERS}" - unlock_server_registry - - wait - echo "Xprint server pid=${server_pid} done, exitcode=$?." - - # Remove the dead server from the registry - # (only if the registry still exists - if /etc/init.d/xprint stop" gets called the registry - # will be removed - and we should not re-create it afterwards...) - lock_server_registry - if [ -f "${XP_SERVERS}" ] ; then - x="$(cat "${XP_SERVERS}")" # Store content of file "${XP_SERVERS}" in var "x" - echo "${x}" | fgrep -v "display_id=${xpstart_displayid[$curr]} pid=${server_pid}" >"${XP_SERVERS}" - fi - unlock_server_registry - ) 2>&1 | while read i ; do echo "$i" | tee -a "${xpstart_logfile[$curr]}" | ${xpstart_logger[$curr]} ; done - ) & - ) - fi - - curr=$(($curr + 1)) - done - - # Remove tmp. file created by |FindFreeXDisplayNum()| - rm -f "${lastdisplaynumreturned_store}" - - # Done. - lock_server_registry - echo "# EOF." >>"${XP_SERVERS}" - unlock_server_registry - return 0 -} - - -XCOMM Convenience function to check setup and start Xprt server(s) -do_start() -{ - if [ -f "${XP_SERVERS}" ] ; then - numservers="$(do_get_xpserverlist | wc -l)" - if [ ${numservers} -gt 0 ] ; then - verbose_echo "Xprint servers are already running." - return 0 - else - verbose_echo "Old server registry found, cleaning-up..." - do_stop - fi - fi - - # Check if we can write the registry file - touch "${XP_SERVERS}" 2>/dev/null - if [ ! -f "${XP_SERVERS}" ] ; then - error_echo "Cannot create \"${XP_SERVERS}\"." - # exit code 4 = user had insufficient privilege (LSB) - exit 4 - fi - - if ! setup_config ; then - error_echo "setup_config failed." - exit 1 - fi - - # Provide two paths here - one which simply starts the Xprt servers, - # assuming that there is a print spooler already running (or that - # ${XPCONFIG}/C/print/Xprinters provides static print queue entries - # (like for the PSspooldir print model)) and a 2nd path which - # explicitly checks if the print queue daemons are running - if true ; then - msg "Starting Xprint servers: Xprt." - start_servers - else - # Continue in the background if there is no spooler running yet (that - # we don't hold off the boot process nor run in a possible race-condition - # when /etc/init.d/lpd was not called yet but the runlevel script waits - # for us to finish first ... - if is_spooler_running ; then - msg "Starting Xprint servers: Xprt." - start_servers - else - msg "Starting Xprint servers (in the background): Xprt." - (wait_for_print_spooler ; start_servers) & - sleep 5 - fi - fi - - if [ "${CURRLOGNAME}" = "root" -a -d /var/lock/subsys/ ] ; then - touch /var/lock/subsys/xprint - fi -} - -XCOMM Convenience function to stop Xprt server(s) -do_stop() -{ - msg "Stopping Xprint servers: Xprt." - - lock_server_registry - if [ -f "${XP_SERVERS}" ] ; then - reglist="$(cat "${XP_SERVERS}")" - rm -f "${XP_SERVERS}" - fi - unlock_server_registry - - if [ "${reglist}" != "" ] ; then - echo "${reglist}" | - grep "^display=.*:.* pid=[0-9]*$" | - while read i ; do - ( - eval ${i} - if pexists ${pid} ; then - kill ${pid} - fi - - # Remove the X sockets/pipes which are not in use anymore - # (It would be better if the Xservers would cleanup this - # automatically, but most Xservers do not do that... ;-( - # Note that this will not work on Solaris where applications - # must run with groupid="root" if they want to write into - # /tmp/.X11-unix/ and/or /tmp/.X11-pipe/) - if [ "${display_id}" != "" ] ; then - rm -f "/tmp/.X${display_id}-lock" 2>/dev/null - rm -f "/tmp/.X11-unix/X${display_id}" 2>/dev/null - rm -f "/tmp/.X11-pipe/X${display_id}" 2>/dev/null - fi - ) - done - fi - - if [ "${CURRLOGNAME}" = "root" -a -d /var/lock/subsys/ ] ; then - rm -f /var/lock/subsys/xprint - fi - - # Remove any outstanding (dead) locks and cleanup - rm -f "${XP_SERVERS}" - kill_dead_registry_locks -} - -XCOMM Convenience function to obtain a list of available Xprint servers -do_get_xpserverlist() -{ - if [ -f "${XP_PER_USER_SERVERS}" -o -f "${XP_GLOBAL_SERVERS}" ] ; then - xpserverlist=$( - # Enumerate both per-user and global servers (in that order) - ( - [ -f "${XP_PER_USER_SERVERS}" ] && cat "${XP_PER_USER_SERVERS}" - [ -f "${XP_GLOBAL_SERVERS}" ] && cat "${XP_GLOBAL_SERVERS}" - ) | - egrep "^display=.*:.* pid=[0-9]*$|^display=.*:[0-9]*$" | - while read i ; do - ( - pid="none" - eval ${i} - # Check if the Xprt process exists (if possible) - if [ "$pid" != "none" ] ; then - if pexists ${pid} ; then - echo ${display} - fi - else - echo ${display} - fi - ) - done | tr "\n" " " - ) - # Only produce output if we have some entries... - [ "${xpserverlist}" != "" ] && echo "${xpserverlist}" - fi -} - -do_restart() -{ - msg "Restarting Xprint server(s): Xprt." - do_stop - sleep 1 - do_start -} - -do_diag() -{ - echo "##### Diag start $(date)." - - # General info - echo "## General info start." - ( - echo "PATH=\"${PATH}\"" - echo "TZ=\"${TZ}\"" - echo "LANG=\"${LANG}\"" - echo "uname -a=\"$(uname -a)\"" - echo "uname -s=\"$(uname -s)\"" - echo "uname -p=\"$(uname -p)\"" - echo "uname -i=\"$(uname -i)\"" - echo "uname -m=\"$(uname -m)\"" - echo "has /etc/SuSE-release ... $([ -f "/etc/SuSE-release" ] && echo "yes" || echo "no")" - echo "has /etc/redhat-release ... $([ -f "/etc/redhat-release" ] && echo "yes" || echo "no")" - echo "has /etc/debian_version ... $([ -f "/etc/debian_version" ] && echo "yes" || echo "no")" - echo "how many Xprt servers are running ...$(ps -ef | fgrep Xprt | fgrep -v "grep" | wc -l)" - ) 2>&1 | while read i ; do echo " $i" ; done - echo "## General info end." - - # Testing font paths - echo "## Testing font paths start." - ( - get_system_fontlist | - filter_unsupported_fonts | - sort_scaleable_fonts_first | - validate_fontlist | while read d ; do - echo "#### Testing \"${d}\" ..." - if [ ! -d "$d" ] ; then - echo "# Error: $d does not exists." - continue - fi - if [ ! -r "$d" ] ; then - echo "# Error: $d not readable." - continue - fi - if [ ! -f "${d}/fonts.dir" ] ; then - echo "# Error: ${d}/fonts.dir not found." - continue - else - if [ ! -r "${d}/fonts.dir" ] ; then - echo "# Error: ${d}/fonts.dir not readable." - continue - fi - fi - if [ -f "${d}/fonts.alias" ] ; then - if [ ! -r "${d}/fonts.alias" ] ; then - echo "# Error: ${d}/fonts.alias not readable." - fi - fi - - if [ "$(cat "${d}/fonts.dir" | fgrep 'cursor')" != "" ] ; then - echo "${d}/fonts.dir has cursor font." - fi - if [ "$(cat "${d}/fonts.dir" | fgrep 'fixed')" != "" ] ; then - echo "${d}/fonts.dir has fixed font." - fi - - if [ -r "${d}/fonts.alias" ] ; then - if [ "$(cat "${d}/fonts.alias" | fgrep 'cursor')" != "" ] ; then - echo "${d}/fonts.alias has cursor font." - fi - if [ "$(cat "${d}/fonts.alias" | fgrep 'fixed')" != "" ] ; then - echo "${d}/fonts.alias has fixed font." - fi - fi - - linenum=0 - cat "${d}/fonts.dir" | while read i1 i2 i3 i4 ; do - linenum=$((${linenum} + 1)) - [ ${linenum} -eq 1 ] && continue - - if [ ! -f "${d}/${i1}" ] ; then - echo "ERROR: ${d}/fonts.dir line ${linenum} has non-exististant font \"${i1}\" (=\"${i1} ${i2} ${i3} ${i4}\")" - fi - done - done - ) 2>&1 | while read i ; do echo " $i" ; done - echo "## Testing font paths end." - - echo "##### Diag End $(date)." -} - -XCOMM Set platform-defaults for setup_config() -setup_config_defaults() -{ - curr_num_xpstart="${1}" - - #### Defaults for Linux/Solaris - # Start Xprt using builtin XPCONFIGDIR at a free display numer - # (Solaris(=SunOS5.x)'s /usr/openwin/bin/Xprt supports TrueType fonts, - # therefore we don't need to filter them) - xpstart_fontpath[${curr_num_xpstart}]=""; - xpstart_fontpath_acceptpattern[${curr_num_xpstart}]=".*"; - xpstart_fontpath_rejectpattern[${curr_num_xpstart}]="/Speedo|/F3bitmaps|/F3"; - xpstart_displayid[${curr_num_xpstart}]=""; - xpstart_xpconfigdir[${curr_num_xpstart}]=""; - xpstart_xpfile[${curr_num_xpstart}]=""; - xpstart_auditlevel[${curr_num_xpstart}]="4"; - xpstart_options[${curr_num_xpstart}]=""; - xpstart_logger[${curr_num_xpstart}]=""; - # Check whether we have /dev/stderr (needed for old AIX + old Debian) - if [ -w "/dev/stderr" ] ; then - xpstart_logfile[${curr_num_xpstart}]="/dev/stderr"; - else - xpstart_logfile[${curr_num_xpstart}]="/dev/tty"; - fi - xpstart_xprt_binary[${curr_num_xpstart}]=""; - - # Custom rules for the GISWxprintglue package on Solaris - # (which uses Solaris's /usr/openwin/bin/Xprt but a custom config) - if [ "${XPCUSTOMGLUE}" = "GISWxprintglue" ] ; then - xpstart_xpconfigdir[${curr_num_xpstart}]="/opt/GISWxprintglue/server/etc/XpConfig" - xpstart_xprt_binary[${curr_num_xpstart}]="/usr/openwin/bin/Xprt" - fi - # Custom rules for the GISWxprint package on Solaris - # (which uses both it's own Xprt and a custom config) - if [ "${XPCUSTOMGLUE}" = "GISWxprint" ] ; then - xpstart_xpconfigdir[${curr_num_xpstart}]="/opt/GISWxprint/server/etc/XpConfig" - xpstart_xprt_binary[${curr_num_xpstart}]="/opt/GISWxprint/bin/Xprt" - xpstart_font_encodings_dir[${curr_num_xpstart}]="/opt/GISWxprint/lib/X11/fonts/encodings/encodings.dir" - fi - - ####################################################### - ### - ### Debian Xprint package default configuration - ### - if [ "${XPCUSTOMGLUE}" = "DebianGlue" ] ; then - # Set XPCONFIGDIR=/usr/share/Xprint/xserver - xpstart_xpconfigdir[${curr_num_xpstart}]="/usr/share/Xprint/xserver"; - - # Use fixed display ID (":64"), or else all client programs will have to be - # restarted simply to update XPSERVERLIST to the latest ID when upgrading, - # which would be a nightmare. - xpstart_displayid[${curr_num_xpstart}]=64; - - # Do not send any messages to console - xpstart_logfile[${curr_num_xpstart}]="/dev/null"; - - # By default use binary provided by Debian's "xprt-xprintorg" package - # (=/usr/bin/Xprt), otherwise leave blank (e.g. use script's default - # (=/usr/X11R6/bin/Xprt)) - if [ -x "/usr/bin/Xprt" ] ; then - xpstart_xprt_binary[${curr_num_xpstart}]="/usr/bin/Xprt"; - fi - fi - ### - ### End Debian default configuration - ### - ####################################################### -} - -fetch_etc_initd_xprint_envvars() -{ - curr_num_xpstart="${1}" - - ## Process some $ETC_INITD_XPRINT_* vars after all which may be used by - # a user to override the hardcoded values here when starting Xprt per-user - # (a more flexible way is to provide an own setup config script in - # "~./Xprint_per_user_startup" - see above) - if [ "${ETC_INITD_XPRINT_XPRT_PATH}" != "" ] ; then - xpstart_xprt_binary[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPRT_PATH}" - fi - if [ "${ETC_INITD_XPRINT_XPCONFIGDIR}" != "" ] ; then - xpstart_xpconfigdir[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPCONFIGDIR}" - fi - if [ "${ETC_INITD_XPRINT_XPFILE}" != "" ] ; then - xpstart_xpfile[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPFILE}" - fi - if [ "${ETC_INITD_XPRINT_LOGFILE}" != "" ] ; then - xpstart_logfile[${curr_num_xpstart}]="${ETC_INITD_XPRINT_LOGFILE}" - fi - if [ "${ETC_INITD_XPRINT_DISPLAYID}" != "" ] ; then - xpstart_displayid[${curr_num_xpstart}]="${ETC_INITD_XPRINT_DISPLAYID}" - fi - if [ "${ETC_INITD_XPRINT_FONTPATH}" != "" ] ; then - xpstart_fontpath[${curr_num_xpstart}]="${ETC_INITD_XPRINT_FONTPATH}" - fi - if [ "${ETC_INITD_XPRINT_XPRT_OPTIONS}" != "" ] ; then - xpstart_options[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPRT_OPTIONS}" - fi - if [ "${ETC_INITD_XPRINT_AUDITLEVEL}" != "" ] ; then - xpstart_auditlevel[${curr_num_xpstart}]="${ETC_INITD_XPRINT_AUDITLEVEL}" - fi - if [ "${ETC_INITD_XPRINT_XF86ENCODINGSDIR}" != "" ] ; then - xpstart_font_encodings_dir[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XF86ENCODINGSDIR}" - fi -} - -XCOMM########################################################################### -XCOMM setup_config() sets the configuration parameters used to start one -XCOMM or more Xprint servers ("Xprt"). -XCOMM The following variables are used: -XCOMM - "num_xpstart" - number of servers to start -XCOMM - "xpstart_fontpath[index]" - custom font path. Leave blank if you want -XCOMM the platform-specific default -XCOMM - "xpstart_fontpath_acceptpattern[index]" - extended regular expression -XCOMM (see egrep(1)) used to filter the font path - items only pass this -XCOMM filter if they match the pattern (leave blank if you want to filter -XCOMM nothing) -XCOMM - "xpstart_fontpath_rejectpattern[index]" - extended regular expression -XCOMM (see egrep(1)) used to filter the font path - items only pass this -XCOMM filter if they do not match the pattern (leave blank if you want to -XCOMM filter nothing) -XCOMM - "xpstart_font_encodings_dir[index]" - location of "encodings.dir". -XCOMM Leave blank to use the default. -XCOMM - "xpstart_displayid[index]" - display id to use for the Xprint server -XCOMM (leave blank to choose the next available free display id) -XCOMM - "xpstart_xpconfigdir[index]" - value for custom XPCONFIGDIR (leave blank -XCOMM if you don not want that that XPCONFIGDIR is set at Xprt startup) -XCOMM - "xpstart_xpfile[index]" - value used for Xprt's "-XpFile" option (leave -XCOMM blank if you do not want to set this option) -XCOMM - "xpstart_auditlevel[index]" - set Xserver auditing level (leave blank to -XCOMM use no auditing) -XCOMM - "xpstart_options[index]" - set further Xprt options (leave blank to set -XCOMM no further options) -XCOMM - "xpstart_logger[index]" - utility which gets stderr/stdout messages from -XCOMM Xprt and sends them to a logging daemon. Leave blank to use /usr/bin/logger -XCOMM to send such messages to the lpr.notice syslog) -XCOMM - "xpstart_logfile[index]" - log file to append stderr/stdout messages from -XCOMM Xprt to. Leave blank to send messages to /dev/null -XCOMM - "xpstart_xprt_binary[index]" - set custom Xprt binary (leave blank to use -XCOMM the platform-specifc default) -setup_config() -{ - num_xpstart=0; - - if [ "${ETC_INITD_XPRINT_CUSTOM_SETUP_CONFIG}" != "" ] ; then - user_cfg="${ETC_INITD_XPRINT_CUSTOM_SETUP_CONFIG}" - else - user_cfg="${HOME}/.Xprint_per_user_startup" - fi - - # Source per-user ~/.Xprint_per_user_startup file if there is one - # (and do not use the script's defaults below) - if [ -r "${user_cfg}" ] ; then - # Define API version which should be checked by ${HOME}/.Xprint_per_user_startup - # ${HOME}/.Xprint_per_user_startup should bail-out if the version differ - etc_initd_xprint_api_version=2 - - # Source per-user settings script - . "${user_cfg}" - - # done with setting the config for per-user Xprt instances - return 0; - else - # Use /etc/init.d/xprint's builtin config - # Each entry should start with |setup_config_defaults| to pull the - # platform defaults and finish with |num_xpstart=$(($num_xpstart + 1))| - # to end the entry - - # Set platform-defaults - setup_config_defaults "${num_xpstart}" - - ## -- snip -- - - # Admins can put their stuff "in" here... - - ## -- snip -- - - # Override script's builtin values with those a user may set via the - # $ETC_INIITD_XPRINT_* env vars - fetch_etc_initd_xprint_envvars "${num_xpstart}" - - num_xpstart=$((${num_xpstart} + 1)) - - return 0; - fi - - #### Sample 1: - # # Start Xprt on a free display ID with custom XPCONFIGDIR and without - # # Speedo and TrueType fonts - # xpstart_fontpath_rejectpattern[$num_xpstart]="/Speedo|/TrueType|/TT(/$|$)|/TTF(/$|$)"; - # xpstart_xpconfigdir[$num_xpstart]="/home/gisburn/cwork/Xprint/Xprt_config/XpConfig"; - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - #num_xpstart=$(($num_xpstart + 1)) - - - #### Sample 2: - # # Start Xprt without TrueType fonts on a display 55 with custom - # # XPCONFIGDIR - # xpstart_fontpath_rejectpattern[$num_xpstart]="/TrueType|/TT(/$|$)|/TTF(/$|$)"; - # xpstart_displayid[$num_xpstart]=55; - # xpstart_xpconfigdir[$num_xpstart]="/home/gisburn/cwork/Xprint/Xprt_config/XpConfig"; - # xpstart_auditlevel[$num_xpstart]=4; - # xpstart_options[$num_xpstart]="-ac -pn"; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 3: - # # Start Xprt without TrueType fonts on a display 56 with custom - # # XPCONFIGDIR and alternate "Xprinters" file - # xpstart_fontpath_rejectpattern[$num_xpstart]="/TrueType|/TT(/$|$)|/TTF(/$|$)"; - # xpstart_displayid[$num_xpstart]=56; - # xpstart_xpconfigdir[$num_xpstart]="/etc/XpConfig/default"; - # xpstart_xpfile[$num_xpstart]="/etc/XpConfig/default/Xprinters_test2" - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - # xpstart_xprt_binary[$num_xpstart]=""; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 4: - # # Start Xprt with Solaris ISO-8859-7 (greek(="el") locale) fonts on - # # display 57 - # xpstart_fontpath[$num_xpstart]="/usr/openwin/lib/locale/iso_8859_7/X11/fonts/75dpi,/usr/openwin/lib/locale/iso_8859_7/X11/fonts/Type1,/usr/openwin/lib/X11/fonts/misc/"; - # xpstart_fontpath_acceptpattern[$num_xpstart]=""; - # xpstart_fontpath_rejectpattern[$num_xpstart]="_No_Match_"; - # xpstart_displayid[$num_xpstart]="57"; - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 5: - # # Start Xprt with the font list of an existing Xserver (excluding Speedo fonts) on - # # display 58 - # # Note that this only works within a X session. At system boot time - # # there will be no $DISPLAY to fetch the information from!! - # xpstart_fontpath[$num_xpstart]="$(get_fontlist_from_display ${DISPLAY} | fontlist2fontpath)"; - # xpstart_fontpath_acceptpattern[$num_xpstart]=""; - # xpstart_fontpath_rejectpattern[$num_xpstart]=""; - # xpstart_displayid[$num_xpstart]="58"; - # xpstart_xpconfigdir[$num_xpstart]=""; - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - # xpstart_xprt_binary[$num_xpstart]=""; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 6: - # # List remote Xprt's here - # # (note that there is no test to check whether these DISPLAYs are valid!) - # xpstart_remote_server[$num_xpstart]="sera:12" ; num_xpstart=$(($num_xpstart + 1)) - # xpstart_remote_server[$num_xpstart]="gandalf:19" ; num_xpstart=$(($num_xpstart + 1)) -} - -XCOMM########################################################################### - -XCOMM Main -case "$1" in - ## Start Xprint servers - 'start') - do_start - ;; - - ## Stop Xprint servers - # Note that this does _not_ kill Xprt instances started using this script - # by non-root users - 'stop') - do_stop - ;; - - ## Restart Xprint servers - 'restart'|'force-reload') - do_restart - ;; - - ## Reload configuration without stopping and restarting - 'reload') - # not supported - msg "reload not supported, use 'restart' or 'force-reload'" - exit 3 - ;; - - ## Restart Xprint only if it is already running - 'condrestart'|'try-restart') - # only restart if it is already running - [ -f /var/lock/subsys/xprint ] && do_restart || : - ;; - - ## Get list of all Xprint servers for this user - # (incl. per-user and system-wide instances) - 'get_xpserverlist') - do_get_xpserverlist - ;; - - ## Get status of Xprint servers, RedHat-style - 'status') - x="$(do_get_xpserverlist)" - if [ "${x}" != "" ] ; then - msg "Xprint (${x}) is running..." - exit 0 - else - msg "Xprint is stopped" - exit 3 - fi - ;; - - ## Wrapper - 'wrapper') - cmd="${2}" - [ "${cmd}" = "" ] && fatal_error "No command given." - shift ; shift - export XPSERVERLIST="$(do_get_xpserverlist)" - [ "${XPSERVERLIST}" = "" ] && fatal_error "No Xprint servers found." - exec "${cmd}" "$@" - ;; - - ## Wrapper for "xplsprinters" - 'lsprinters') - [ "${ETC_INITD_XPRINT_XPLSPRINTERS_PATH}" != "" ] && cmd="${ETC_INITD_XPRINT_XPLSPRINTERS_PATH}" - [ "${cmd}" = "" -a "${XPCUSTOMGLUE}" = "GISWxprintglue" ] && cmd="/opt/GISWxprintglue/bin/xplsprinters" - [ "${cmd}" = "" -a "${XPCUSTOMGLUE}" = "GISWxprint" ] && cmd="/opt/GISWxprint/bin/xplsprinters" - [ "${cmd}" = "" -a "${XPROJECTROOT}" != "" ] && cmd="${XPROJECTROOT}/bin/xplsprinters" - [ "${cmd}" = "" ] && cmd="xplsprinters" - - shift - export XPSERVERLIST="$(do_get_xpserverlist)" - [ "${XPSERVERLIST}" = "" ] && fatal_error "No Xprint servers found." - exec "${cmd}" "$@" - ;; - - ## Diagnostics - 'diag') - do_diag - ;; - - ## Print usage - *) - msg "Usage: $0 { start | stop | restart | reload | force-reload | status | condrestart | try-restart | wrapper | lsprinters | get_xpserverlist | diag }" - exit 2 -esac -exit 0 - -XCOMM EOF. diff --git a/hw/xprint/etc/profile.d/Makefile.am b/hw/xprint/etc/profile.d/Makefile.am deleted file mode 100644 index b91a9115a..000000000 --- a/hw/xprint/etc/profile.d/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = xprint.csh xprint.sh diff --git a/hw/xprint/etc/profile.d/xprint.csh b/hw/xprint/etc/profile.d/xprint.csh deleted file mode 100644 index 7cc675840..000000000 --- a/hw/xprint/etc/profile.d/xprint.csh +++ /dev/null @@ -1,16 +0,0 @@ -# -# /etc/profile.d/xprint.csh -# -# Copyright (c) 2002-2004 by Roland Mainz -# please send bugfixes or comments to http://xprint.mozdev.org/ - - -# -# Obtain list of Xprint servers -# - -if ( -f /etc/init.d/xprint ) then - setenv XPSERVERLIST "`/bin/sh /etc/init.d/xprint get_xpserverlist`" -endif - -# /etc/profile.d/xprint.csh ends here. diff --git a/hw/xprint/etc/profile.d/xprint.sh b/hw/xprint/etc/profile.d/xprint.sh deleted file mode 100644 index b5b46c1e7..000000000 --- a/hw/xprint/etc/profile.d/xprint.sh +++ /dev/null @@ -1,16 +0,0 @@ -# -# /etc/profile.d/xprint.sh -# -# Copyright (c) 2002-2004 by Roland Mainz -# please send bugfixes or comments to http://xprint.mozdev.org/ - -# -# Obtain list of Xprint servers -# - -if [ -f "/etc/init.d/xprint" ] ; then - XPSERVERLIST="`/bin/sh /etc/init.d/xprint get_xpserverlist`" - export XPSERVERLIST -fi - -# /etc/profile.d/xprint.sh ends here. diff --git a/hw/xprint/mediaSizes.c b/hw/xprint/mediaSizes.c deleted file mode 100644 index 7acc70679..000000000 --- a/hw/xprint/mediaSizes.c +++ /dev/null @@ -1,782 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: mediaSizes.c -** * -** * Contents: -** * Routines to return the sizes associated -** * with particular media and particular printers. -** * -** * Created: 2/19/96 -** * -** * Copyright: Copyright 1993,1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include -#include "dixstruct.h" -#include "screenint.h" -#include "misc.h" -#include "scrnintstr.h" -#include - -#include "DiPrint.h" -#include "attributes.h" - -typedef struct { - XpOid page_size; - float width; - float height; -} PageDimensionsRec; - -static PageDimensionsRec PageDimensions[] = -{ - {xpoid_val_medium_size_na_letter, 215.9, 279.4}, - {xpoid_val_medium_size_na_legal, 215.9, 355.6}, - {xpoid_val_medium_size_executive, 184.15, 266.7}, - {xpoid_val_medium_size_folio, 210.82, 330.2}, - {xpoid_val_medium_size_invoice, 139.7, 215.9}, - {xpoid_val_medium_size_ledger, 279.4, 431.8}, - {xpoid_val_medium_size_quarto, 215.9, 275.082}, - {xpoid_val_medium_size_a, 215.9, 279.4}, - {xpoid_val_medium_size_b, 279.4, 431.8}, - {xpoid_val_medium_size_c, 431.8, 558.8}, - {xpoid_val_medium_size_d, 558.8, 863.6}, - {xpoid_val_medium_size_e, 863.6, 1117.6}, - {xpoid_val_medium_size_na_6x9_envelope, 152.4, 228.6}, - {xpoid_val_medium_size_na_10x15_envelope, 254, 381}, - {xpoid_val_medium_size_monarch_envelope, 98.298, 190.5}, - {xpoid_val_medium_size_na_10x13_envelope, 254, 330.2}, - {xpoid_val_medium_size_na_9x12_envelope, 228.6, 304.8}, - {xpoid_val_medium_size_na_number_10_envelope, 104.775, 241.3}, - {xpoid_val_medium_size_na_7x9_envelope, 177.8, 228.6}, - {xpoid_val_medium_size_na_9x11_envelope, 228.6, 279.4}, - {xpoid_val_medium_size_na_10x14_envelope, 254, 355.6}, - {xpoid_val_medium_size_na_number_9_envelope, 98.425, 225.425}, - {xpoid_val_medium_size_iso_a0, 841, 1189}, - {xpoid_val_medium_size_iso_a1, 594, 841}, - {xpoid_val_medium_size_iso_a2, 420, 594}, - {xpoid_val_medium_size_iso_a3, 297, 420}, - {xpoid_val_medium_size_iso_a4, 210, 297}, - {xpoid_val_medium_size_iso_a5, 148, 210}, - {xpoid_val_medium_size_iso_a6, 105, 148}, - {xpoid_val_medium_size_iso_a7, 74, 105}, - {xpoid_val_medium_size_iso_a8, 52, 74}, - {xpoid_val_medium_size_iso_a9, 37, 52}, - {xpoid_val_medium_size_iso_a10, 26, 37}, - {xpoid_val_medium_size_iso_b0, 1000, 1414}, - {xpoid_val_medium_size_iso_b1, 707, 1000}, - {xpoid_val_medium_size_iso_b2, 500, 707}, - {xpoid_val_medium_size_iso_b3, 353, 500}, - {xpoid_val_medium_size_iso_b4, 250, 353}, - {xpoid_val_medium_size_iso_b5, 176, 250}, - {xpoid_val_medium_size_iso_b6, 125, 176}, - {xpoid_val_medium_size_iso_b7, 88, 125}, - {xpoid_val_medium_size_iso_b8, 62, 88}, - {xpoid_val_medium_size_iso_b9, 44, 62}, - {xpoid_val_medium_size_iso_b10, 31, 44}, - {xpoid_val_medium_size_jis_b0, 1030, 1456}, - {xpoid_val_medium_size_jis_b1, 728, 1030}, - {xpoid_val_medium_size_jis_b2, 515, 728}, - {xpoid_val_medium_size_jis_b3, 364, 515}, - {xpoid_val_medium_size_jis_b4, 257, 364}, - {xpoid_val_medium_size_jis_b5, 182, 257}, - {xpoid_val_medium_size_jis_b6, 128, 182}, - {xpoid_val_medium_size_jis_b7, 91, 128}, - {xpoid_val_medium_size_jis_b8, 64, 91}, - {xpoid_val_medium_size_jis_b9, 45, 64}, - {xpoid_val_medium_size_jis_b10, 32, 45}, - {xpoid_val_medium_size_hp_2x_postcard, 148, 200}, - {xpoid_val_medium_size_hp_european_edp, 304.8, 355.6}, - {xpoid_val_medium_size_hp_mini, 139.7, 215.9}, - {xpoid_val_medium_size_hp_postcard, 100, 148}, - {xpoid_val_medium_size_hp_tabloid, 279.4, 431.8}, - {xpoid_val_medium_size_hp_us_edp, 279.4, 355.6}, - {xpoid_val_medium_size_hp_us_government_legal, 203.2, 330.2}, - {xpoid_val_medium_size_hp_us_government_letter, 203.2, 254}, - {xpoid_val_medium_size_iso_c3, 324, 458}, - {xpoid_val_medium_size_iso_c4, 229, 324}, - {xpoid_val_medium_size_iso_c5, 162, 229}, - {xpoid_val_medium_size_iso_c6, 114, 162}, - {xpoid_val_medium_size_iso_designated_long, 110, 220} -}; - -/* - * XpGetResolution returns an integer representing the printer resolution - * in dots-per-inch for the specified print context. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -int -XpGetResolution( - XpContextPtr pContext) -{ - unsigned long resolution; - - resolution = XpGetCardAttr(pContext, XPPageAttr, - xpoid_att_default_printer_resolution, - (XpOidCardList*)NULL); - if(0 == resolution) - resolution = XpGetCardAttr(pContext, XPDocAttr, - xpoid_att_default_printer_resolution, - (XpOidCardList*)NULL); - if(0 == resolution) - { - XpOidCardList* resolutions_supported; - /* - * default-printer-resolution not specified; default to 1st entry - * in printer-resolutions-supported. - */ - resolutions_supported = - XpGetCardListAttr(pContext, XPPrinterAttr, - xpoid_att_printer_resolutions_supported, - (XpOidCardList*)NULL); - resolution = XpOidCardListGetCard(resolutions_supported, 0); - XpOidCardListDelete(resolutions_supported); - } - return (int)resolution; -} - -/* - * XpGetContentOrientation determines the content-orientation as - * determined by the passed context. The page and document pools are - * queried in turn for a specified content-orientation attribute. If none - * is found the first content-orientation in the - * content-orientations-supported printer attribute is taken as the - * default. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetContentOrientation( - XpContextPtr pContext) -{ - XpOid orientation; - - orientation = XpGetOidAttr(pContext, XPPageAttr, - xpoid_att_content_orientation, - (XpOidList*)NULL); - if(xpoid_none == orientation) - orientation = XpGetOidAttr(pContext, XPDocAttr, - xpoid_att_content_orientation, - (XpOidList*)NULL); - if(xpoid_none == orientation) - { - XpOidList* content_orientations_supported; - - content_orientations_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_content_orientations_supported, - (XpOidList*)NULL); - orientation = XpOidListGetOid(content_orientations_supported, 0); - XpOidListDelete(content_orientations_supported); - } - return orientation; -} - -/* - * XpGetAvailableCompression determines the available-compression as - * determined by the passed context. The page and document pools are - * queried in turn for a specified content-orientation attribute. If none - * is found the first available-compression in the - * avaiable-compressions-supported printer attribute is taken as the - * default. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetAvailableCompression( - XpContextPtr pContext) -{ - XpOid compression; - - compression = XpGetOidAttr(pContext, XPPageAttr, - xpoid_att_available_compression, - (XpOidList*)NULL); - if(xpoid_none == compression) - compression = XpGetOidAttr(pContext, XPDocAttr, - xpoid_att_available_compression, - (XpOidList*)NULL); - if(xpoid_none == compression) - { - XpOidList* available_compressions_supported; - - available_compressions_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_available_compressions_supported, - (XpOidList*)NULL); - compression = XpOidListGetOid(available_compressions_supported, 0); - XpOidListDelete(available_compressions_supported); - } - return compression; -} - -/* - * XpGetPlex determines the plex as determined by the passed context. The page - * and document pools are queried in turn for a specified plex attribute. If - * none is found the first plex in the plexes-supported printer attribute is - * taken as the default. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetPlex( - XpContextPtr pContext) -{ - XpOid plex; - - plex = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_plex, - (XpOidList*)NULL); - if(xpoid_none == plex) - plex = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_plex, - (XpOidList*)NULL); - if(xpoid_none == plex) - { - XpOidList* plexes_supported; - - plexes_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_plexes_supported, - (XpOidList*)NULL); - plex = XpOidListGetOid(plexes_supported, 0); - XpOidListDelete(plexes_supported); - } - return plex; -} - -/* - * XpGetPageSize returns the XpOid of the current page size (medium names - * are page sizes in this implementation) as indicated by the passed - * context. - * - * The relevant input-tray is returned in pTray. This parm must not be - * NULL. If the input-tray is not indicated or irrelevant, xpoid_none - * will be returned. - * - * This function optionally takes a XpOidMediumSS representation of the - * medium-source-sizes-supported attribute in order to avoid parsing the - * string value twice for calling functions that need to parse m-s-s-s - * anyway (e.g. XpGetReproductionArea). If the caller has no other reason - * to parse medium-source-sizes-supported, it is recommended that NULL be - * passed. This function will obtain medium-source-sizes-supported if it - * needs to. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetPageSize(XpContextPtr pContext, - XpOid* pTray, - const XpOidMediumSS* msss) -{ - XpOid medium; - /* - * check to see if default-medium is specified - */ - medium = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_default_medium, - (const XpOidList*)NULL); - if(medium == xpoid_none) - { - /* - * default-medium not in page pool; try the document pool - */ - medium = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_default_medium, - (const XpOidList*)NULL); - } - if(medium == xpoid_none) - { - /* - * default-medium not specified; try default-input-tray - */ - *pTray = XpGetOidAttr(pContext, XPPageAttr, - xpoid_att_default_input_tray, - (const XpOidList*)NULL); - if(*pTray == xpoid_none) - { - /* - * default-input-tray not in page pool; try the document pool - */ - *pTray = XpGetOidAttr(pContext, XPDocAttr, - xpoid_att_default_input_tray, - (const XpOidList*)NULL); - } - if(*pTray != xpoid_none) - { - /* - * default-input-tray found; get corresponding medium from - * input-trays-medium - */ - XpOidTrayMediumList* input_trays_medium; - int i; - - input_trays_medium = - XpGetTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, - (const XpOidList*)NULL, - (const XpOidMediumSS*)NULL); - for(i = 0; i < XpOidTrayMediumListCount(input_trays_medium); i++) - { - if(*pTray == XpOidTrayMediumListTray(input_trays_medium, i)) - { - medium = XpOidTrayMediumListMedium(input_trays_medium, i); - break; - } - } - XpOidTrayMediumListDelete(input_trays_medium); - } - } - else - *pTray = xpoid_none; - - if(medium == xpoid_none) - { - XpOidMediumSS* local_msss = (XpOidMediumSS*)NULL; - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - /* - * no medium specified; use 1st page size found in - * medium-source-sizes-supported - */ - if((XpOidMediumSS*)NULL == msss) - msss = local_msss = - XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*)NULL, - (const XpOidList*)NULL); - for(i_mss = 0; - i_mss < XpOidMediumSSCount(msss) && xpoid_none == medium; - i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(xpoid_none != (ds_list->list)[i_ds].page_size) - { - medium = (ds_list->list)[i_ds].page_size; - break; - } - } - } - } - XpOidMediumSSDelete(local_msss); - } - return medium; -} - -/* - * XpGetMediumMillimeters returns into the supplied float pointers the - * width and height in millimeters of the passed page size identifier. - */ -void -XpGetMediumMillimeters( - XpOid page_size, - float *width, /* return */ - float *height) /* return */ -{ - int i; - - *width = *height = 0; - for(i = 0; i < XpNumber(PageDimensions); i++) - { - if(page_size == PageDimensions[i].page_size) - { - *width = PageDimensions[i].width; - *height = PageDimensions[i].height; - return; - } - } -} - -/* - * Converts a millimeter specification into pixels given a resolution in - * DPI. - */ -static float -MmToPixels(float mm, int resolution) -{ - float f; - - f = mm * resolution; - f /= 25.4; - return f; -} - -/* - * XpGetMediumDimensions returns into the supplied short pointers the - * width and height in pixels of the medium associated with the specified - * print context. It obtains the page size associated with the current - * medium by calling XpGetPageSize. It passes XpGetMediumMillimeters the - * page size, and converts the returned millimeter dimensions into pixels - * using the resolution returned by XpGetResolution. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -void -XpGetMediumDimensions( - XpContextPtr pContext, - unsigned short *width, /* return */ - unsigned short *height) /* return */ -{ - XpOid page_size; - XpOid tray; - XpOid orientation; - - int resolution; - float w_mm, h_mm; - - page_size = XpGetPageSize(pContext, &tray, (XpOidMediumSS*)NULL); - if(page_size == xpoid_none) - { - /* - * fail-safe: if the pools have been validated, this defaulting logic - * isn't needed. - */ - page_size = xpoid_val_medium_size_na_letter; - } - XpGetMediumMillimeters(page_size, &w_mm, &h_mm); - resolution = XpGetResolution(pContext); - orientation = XpGetContentOrientation(pContext); - switch(orientation) - { - case xpoid_val_content_orientation_landscape: - case xpoid_val_content_orientation_reverse_landscape: - /* - * transpose width and height - */ - *height = MmToPixels(w_mm, resolution); - *width = MmToPixels(h_mm, resolution); - break; - - default: - *width = MmToPixels(w_mm, resolution); - *height = MmToPixels(h_mm, resolution); - break; - } -} - -/* - * XRectangleFromXpOidArea converts an XpOidArea area specification - * into an XRectangle. The passed resolution is used to convert from - * millimeters (XpOidArea) into pixels (XRectangle). - */ -static void -XRectangleFromXpOidArea( - xRectangle *pRect, - const XpOidArea* repro, - int resolution, - XpOid orientation) -{ - switch(orientation) - { - case xpoid_val_content_orientation_landscape: - case xpoid_val_content_orientation_reverse_landscape: - /* - * transpose x and y, width and height - */ - pRect->y = MmToPixels(repro->minimum_x, resolution); - pRect->x = MmToPixels(repro->minimum_y, resolution); - pRect->height = - MmToPixels(repro->maximum_x - repro->minimum_x, resolution); - pRect->width = - MmToPixels(repro->maximum_y - repro->minimum_y, resolution); - break; - - default: - pRect->x = MmToPixels(repro->minimum_x, resolution); - pRect->y = MmToPixels(repro->minimum_y, resolution); - pRect->width = - MmToPixels(repro->maximum_x - repro->minimum_x, resolution); - pRect->height = - MmToPixels(repro->maximum_y - repro->minimum_y, resolution); - break; - } -} - -/* - * XpGetReproductionArea queries the current pool attribute values in - * order to determine the reproduction area for the currently selected - * medium. - * - * First the current page size (equivalent to current medium) and tray - * (if specified) is retrieved via XpGetPageSize. The value of the - * medium-source-sizes-supported attribute is interrogated until a matching - * entry for the current page size and tray is found. The reproduction - * area defined for the current entry is converted into an XRectangle - * using XRectangleFromXpOidArea and returned to the caller. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -void -XpGetReproductionArea(XpContextPtr pContext, - xRectangle *pRect) -{ - XpOid page_size; - XpOid tray; - XpOidMediumSS* msss; - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - XpOidArea* repro; - BOOL done; - int resolution; - XpOid orientation; - /* - * find the appropriate assured reproduction area for the current - * tray and page size in the medium-source-sizes-supported attribute. - */ - msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*)NULL, - (const XpOidList*)NULL); - page_size = XpGetPageSize(pContext, &tray, msss); - resolution = XpGetResolution(pContext); - orientation = XpGetContentOrientation(pContext); - - memset(pRect, 0, sizeof(xRectangle)); - - if(xpoid_none == tray) - { - /* - * no tray specified; use 1st matching page size - */ - for(i_mss = 0, done = xFalse; - i_mss < XpOidMediumSSCount(msss) && !done; - i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(page_size == (ds_list->list)[i_ds].page_size) - { - repro = - &(ds_list->list)[i_ds].assured_reproduction_area; - XRectangleFromXpOidArea(pRect, repro, - resolution, orientation); - done = xTrue; - break; - } - } - } - } - } - else - { - /* - * tray && page size specified; find matching entry - */ - for(i_mss = 0, done = xFalse; - i_mss < XpOidMediumSSCount(msss) && !done; - i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray - && - (tray == (msss->mss)[i_mss].input_tray - || - xpoid_unspecified == (msss->mss)[i_mss].input_tray) - ) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(page_size == (ds_list->list)[i_ds].page_size) - { - repro = - &(ds_list->list)[i_ds].assured_reproduction_area; - XRectangleFromXpOidArea(pRect, repro, - resolution, orientation); - if(xpoid_unspecified != (msss->mss)[i_mss].input_tray) - { - /* - * exact match on tray takes precendence over - * unspecified tray entry in m-s-s-s - */ - done = xTrue; - } - break; - } - } - } - } - } - XpOidMediumSSDelete(msss); -} - -/* - * XpGetMaxWidthHeightRes returns into the supplied width and height - * unsigned short pointers the dimensions in millimeters of the largest - * supported media for a specific printer. It looks at the - * medium-source-sizes-supported attribute (if it exists) to determine - * the list of possible media, and calls XpGetMediumMillimeters to get the - * dimensions for each medium. If the m-s-s-s attribute is not defined, - * then the dimensions for the na-letter medium is returned. - * - * This function also returns the largest resolution in DPI defined in - * printer-resolutions-supported. If printer-resolutions-supported is not - * specified, the default is obtained from the passed XpValidatePoolsRec. - * - * The passed XpValidatePoolsRec is also used to determine valid values - * when parsing attribute values. - */ -void -XpGetMaxWidthHeightRes( - const char *printer_name, - const XpValidatePoolsRec* vpr, - float *width, - float *height, - int* resolution) -{ - const char* value; - const char* attr_str; - XpOidMediumSS* pool_msss; - const XpOidMediumSS* msss; - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - float w, h; - XpOidCardList* pool_resolutions_supported; - const XpOidCardList* resolutions_supported; - int i; - int res; - /* - * get the max medium width and height - */ - attr_str = XpOidString(xpoid_att_medium_source_sizes_supported); - value = XpGetPrinterAttribute(printer_name, attr_str); - pool_msss = XpOidMediumSSNew(value, - vpr->valid_input_trays, - vpr->valid_medium_sizes); - if(0 == XpOidMediumSSCount(pool_msss)) - msss = XpGetDefaultMediumSS(); - else - msss = pool_msss; - *width = *height = 0; - for(i_mss = 0; i_mss < XpOidMediumSSCount(msss); i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(xpoid_none != (ds_list->list)[i_ds].page_size) - { - XpGetMediumMillimeters((ds_list->list)[i_ds].page_size, - &w, &h); - if(w > *width) *width = w; - if(h > *height) *height = h; - } - } - } - } - XpOidMediumSSDelete(pool_msss); - /* - * get the maximum resolution - */ - attr_str = XpOidString(xpoid_att_printer_resolutions_supported); - value = XpGetPrinterAttribute(printer_name, attr_str); - pool_resolutions_supported = - XpOidCardListNew(value, vpr->valid_printer_resolutions_supported); - if(0 == XpOidCardListCount(pool_resolutions_supported)) - resolutions_supported = vpr->default_printer_resolutions_supported; - else - resolutions_supported = pool_resolutions_supported; - *resolution = 0; - for(i = 0; i < XpOidCardListCount(resolutions_supported); i++) - { - res = XpOidCardListGetCard(resolutions_supported, i); - if(res > *resolution) *resolution = res; - } - XpOidCardListDelete(pool_resolutions_supported); -} - -FontResolutionPtr -XpGetClientResolutions(client, num) - ClientPtr client; - int *num; -{ - static struct _FontResolution res; - int resolution = XpGetResolution(XpContextOfClient(client)); - - res.x_resolution = resolution; - res.y_resolution = resolution; - - res.point_size = 120; - - *num = 1; - - return &res; -} - - -void XpSetFontResFunc(client) - ClientPtr client; -{ - client->fontResFunc = XpGetClientResolutions; -} - - -void XpUnsetFontResFunc(client) - ClientPtr client; -{ - client->fontResFunc = NULL; -} diff --git a/hw/xprint/pcl-mono/Makefile.am b/hw/xprint/pcl-mono/Makefile.am deleted file mode 100644 index 4d8dfc682..000000000 --- a/hw/xprint/pcl-mono/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_LTLIBRARIES = libpcl.la - -PCL_DRIVER = -DXP_PCL_MONO - -include ../pcl/Makefile.am.inc diff --git a/hw/xprint/pcl/Makefile.am b/hw/xprint/pcl/Makefile.am deleted file mode 100644 index 90133e8e2..000000000 --- a/hw/xprint/pcl/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -noinst_LTLIBRARIES = libpcl.la - -PCL_DRIVER = -DXP_PCL_COLOR - -include ../pcl/Makefile.am.inc - diff --git a/hw/xprint/pcl/Makefile.am.inc b/hw/xprint/pcl/Makefile.am.inc deleted file mode 100644 index c3af606ee..000000000 --- a/hw/xprint/pcl/Makefile.am.inc +++ /dev/null @@ -1,27 +0,0 @@ -INCLUDES = -I$(top_srcdir)/hw/xprint - -AM_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ -D_XP_PRINT_SERVER_ $(PCL_DRIVER) - -libpcl_la_SOURCES = \ - $(srcdir)/../pcl/PclArc.c \ - $(srcdir)/../pcl/PclArea.c \ - $(srcdir)/../pcl/PclAttr.c \ - $(srcdir)/../pcl/PclAttVal.c \ - $(srcdir)/../pcl/PclColor.c \ - $(srcdir)/../pcl/PclCursor.c \ - $(srcdir)/../pcl/PclDef.h \ - $(srcdir)/../pcl/PclFonts.c \ - $(srcdir)/../pcl/PclGC.c \ - $(srcdir)/../pcl/Pcl.h \ - $(srcdir)/../pcl/PclInit.c \ - $(srcdir)/../pcl/PclLine.c \ - $(srcdir)/../pcl/Pclmap.h \ - $(srcdir)/../pcl/PclMisc.c \ - $(srcdir)/../pcl/PclPixel.c \ - $(srcdir)/../pcl/PclPolygon.c \ - $(srcdir)/../pcl/PclPrint.c \ - $(srcdir)/../pcl/PclSFonts.c \ - $(srcdir)/../pcl/PclSFonts.h \ - $(srcdir)/../pcl/PclSpans.c \ - $(srcdir)/../pcl/PclText.c \ - $(srcdir)/../pcl/PclWindow.c diff --git a/hw/xprint/pcl/Pcl.h b/hw/xprint/pcl/Pcl.h deleted file mode 100644 index d46a03401..000000000 --- a/hw/xprint/pcl/Pcl.h +++ /dev/null @@ -1,619 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: Pcl.h -** * -** * Contents: defines and includes for the Pcl driver -** * for a printing X server. -** * -** * Created: 1/30/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCL_H_ -#define _PCL_H_ - -#include -#include "scrnintstr.h" - -#include "PclDef.h" -#include "Pclmap.h" -#include "PclSFonts.h" - -#include -#include - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" - -/* - * Some sleazes to force the XrmDB stuff into the server - */ -#ifndef HAVE_XPointer -typedef char *XPointer; -#endif -#define Status int -#define True 1 -#define False 0 -#include "misc.h" -#include -#include -#include "attributes.h" - -/****** - * externally visible variables from PclInit.c - ******/ -extern DevPrivateKey PclScreenPrivateKey, PclWindowPrivateKey; -extern DevPrivateKey PclContextPrivateKey; -extern DevPrivateKey PclPixmapPrivateKey; -extern DevPrivateKey PclGCPrivateKey; - -/****** - * externally visible variables from PclAttVal.c - ******/ -extern XpValidatePoolsRec PclValidatePoolsRec; - -/* - * This structure defines a mapping from an X colormap ID to a list of - * print contexts which use the colormap. - */ -typedef struct _pclcontextlist { - XpContextPtr context; - struct _pclcontextlist *next; -} PclContextList, *PclContextListPtr; - -typedef struct _pclcmaptocontexts { - long colormapId; - PclContextListPtr contexts; - struct _pclcmaptocontexts *next; -} PclCmapToContexts; - -typedef struct { - PclCmapToContexts *colormaps; - CloseScreenProcPtr CloseScreen; -} PclScreenPrivRec, *PclScreenPrivPtr; - -/* - * This structure defines a mapping from an X colormap ID to a PCL - * palette ID. - */ -typedef struct _palettemap { - long colormapId; - int paletteId; - int downloaded; - struct _palettemap *next; -} PclPaletteMap, *PclPaletteMapPtr; - -typedef struct { - char *jobFileName; - FILE *pJobFile; - char *pageFileName; - FILE *pPageFile; - GC lastGC; - unsigned char *dash; - int validGC; - ClientPtr getDocClient; - int getDocBufSize; - PclSoftFontInfoPtr pSoftFontInfo; - PclPaletteMapPtr palettes; - int currentPalette; - int nextPaletteId; - PclPaletteMap staticGrayPalette; - PclPaletteMap trueColorPalette; - PclPaletteMap specialTrueColorPalette; - unsigned char *ctbl; - int ctbldim; - int isRaw; -#ifdef XP_PCL_LJ3 - unsigned int fcount; - unsigned int fcount_max; - char *figures; -#endif /* XP_PCL_LJ3 */ -} PclContextPrivRec, *PclContextPrivPtr; - -typedef struct { - int validContext; - XpContextPtr context; -} PclWindowPrivRec, *PclWindowPrivPtr; - -typedef struct { - unsigned long stippleFg, stippleBg; -} PclGCPrivRec, *PclGCPrivPtr; - -typedef struct { - XpContextPtr context; - char *tempFileName; - FILE *tempFile; - GC lastGC; - int validGC; -} PclPixmapPrivRec, *PclPixmapPrivPtr; - -/****** - * Defined functions - ******/ -#define SEND_PCL(f,c) fwrite( c, sizeof( char ), strlen( c ), f ) -#define SEND_PCL_COUNT(f,c,n) fwrite( c, sizeof( char ), n, f ) - -#ifndef XP_PCL_LJ3 -#define SAVE_PCL(f,p,c) SEND_PCL(f,c) -#define SAVE_PCL_COUNT(f,p,c,n) SEND_PCL_COUNT(f,c,n) -#define MACRO_START(f,p) SEND_PCL(f, "\033&f1Y\033&f0X") -#define MACRO_END(f) SEND_PCL(f, "\033&f1X") -#else -#define SAVE_PCL(f,p,c) PclSpoolFigs(p, c, strlen(c)) -#define SAVE_PCL_COUNT(f,p,c,n) PclSpoolFigs(p, c, n) -#define MACRO_START(f,p) p->fcount = 0 -#define MACRO_END(f) /* do nothing */ -#endif /* XP_PCL_LJ3 */ - -#define MIN(a,b) (((a)<(b))?(a):(b)) -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif - -/****** - * Functions in PclArc.c - ******/ -extern void PclPolyArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs); -extern void PclPolyFillArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs); - -/****** - * Functions in PclArea.c - ******/ -extern void PclPutImage( - DrawablePtr pDrawable, - GCPtr pGC, - int depth, - int x, - int y, - int w, - int h, - int leftPad, - int format, - char *pImage); -extern RegionPtr PclCopyArea( - DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty); -RegionPtr PclCopyPlane( - DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty, - unsigned long plane); - - -/****** - * Functions in PclAttr.c - ******/ -extern char *PclGetAttributes( - XpContextPtr pCon, - XPAttributes pool ); -extern char *PclGetOneAttribute( - XpContextPtr pCon, - XPAttributes pool, - char *attr ); -extern int PclAugmentAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ); -extern int PclSetAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ); - -/****** - * Functions in PclColor.c - ******/ -extern Bool PclCreateDefColormap(ScreenPtr pScreen); -extern Bool PclCreateColormap(ColormapPtr pColor); -extern void PclDestroyColormap(ColormapPtr pColor); -extern void PclInstallColormap(ColormapPtr pColor); -extern void PclUninstallColormap(ColormapPtr pColor); -extern int PclListInstalledColormaps(ScreenPtr pScreen, - XID *pCmapList); -extern void PclStoreColors(ColormapPtr pColor, - int ndef, - xColorItem *pdefs); -extern void PclResolveColor(unsigned short *pRed, - unsigned short *pGreen, - unsigned short *pBlue, - VisualPtr pVisual); -extern int PclUpdateColormap(DrawablePtr pDrawable, - XpContextPtr pCon, - GCPtr gc, - FILE *outFile); -extern void PclLookUp(ColormapPtr cmap, - PclContextPrivPtr cPriv, - unsigned short *r, - unsigned short *g, - unsigned short *b); -extern PclPaletteMapPtr PclFindPaletteMap(PclContextPrivPtr cPriv, - ColormapPtr cmap, - GCPtr gc); -extern unsigned char *PclReadMap(char *, int *); - - -/****** - * Functions in PclCursor.c - ******/ -extern void PclConstrainCursor( - ScreenPtr pScreen, - BoxPtr pBox); -extern void PclCursorLimits( - ScreenPtr pScreen, - CursorPtr pCursor, - BoxPtr pHotBox, - BoxPtr pTopLeftbox); -extern Bool PclDisplayCursor( - ScreenPtr pScreen, - CursorPtr pCursor); -extern Bool PclRealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor); -extern Bool PclUnrealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor); -extern void PclRecolorCursor( - ScreenPtr pScreen, - CursorPtr pCursor, - Bool displayed); -extern Bool PclSetCursorPosition( - ScreenPtr pScreen, - int x, - int y, - Bool generateEvent); - -/****** - * Functions in PclSFonts.c - ******/ -extern void -PclDownloadSoftFont8( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead8Ptr pfh, - PclCharDataPtr pcd, - unsigned char *code); -extern void PclDownloadSoftFont16( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead16Ptr pfh, - PclCharDataPtr pcd, - unsigned char row, - unsigned char col); -extern PclSoftFontInfoPtr PclCreateSoftFontInfo(void); -extern void PclDestroySoftFontInfo( - PclSoftFontInfoPtr pSoftFontInfo ); - -/****** - * Functions in PclGC.c - ******/ -extern Bool PclCreateGC(GCPtr pGC); -extern void PclDestroyGC(GCPtr pGC); -extern int PclUpdateDrawableGC( - GCPtr pGC, - DrawablePtr pDrawable, - FILE **outFile); -extern void PclValidateGC( - GCPtr pGC, - unsigned long changes, - DrawablePtr pDrawable); -extern void PclSetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC gc ); -extern int PclGetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC *gc, - unsigned long *valid, - FILE **file ); -extern void PclSetDrawablePrivateGC( - DrawablePtr pDrawable, - GC gc); -extern void PclComputeCompositeClip( - GCPtr pGC, - DrawablePtr pDrawable); - -/****** - * Functions in PclInit.c - ******/ -extern Bool PclCloseScreen( - int index, - ScreenPtr pScreen); -extern Bool InitializeColorPclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv); -extern Bool InitializeMonoPclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv); -extern Bool InitializeLj3PclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv); -extern XpContextPtr PclGetContextFromWindow( WindowPtr win ); - -/****** - * Functions in PclLine.c - ******/ -extern void PclPolyLine( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints); -extern void PclPolySegment( - DrawablePtr pDrawable, - GCPtr pGC, - int nSegments, - xSegment *pSegments); - -/****** - * Functions in PclMisc.c - ******/ -extern void PclQueryBestSize( - int class, - short *pwidth, - short *pheight, - ScreenPtr pScreen); -extern char *GetPropString(WindowPtr pWin, char *propName); -extern int SystemCmd(char *cmdStr); -extern int PclGetMediumDimensions( - XpContextPtr pCon, - CARD16 *pWidth, - CARD16 *pHeight); -extern int PclGetReproducibleArea( - XpContextPtr pCon, - xRectangle *pRect); -extern void PclSendData( - FILE *outFile, - PclContextPrivPtr pConPriv, - BoxPtr pbox, - int nbox, - double ratio); - -/****** - * Functions in PclPixel.c - ******/ -extern void PclPolyPoint( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints); -extern void PclPushPixels( - GCPtr pGC, - PixmapPtr pBitmap, - DrawablePtr pDrawable, - int width, - int height, - int x, - int y); - -/****** - * Functions in PclPixmap.c - ******/ -extern PixmapPtr PclCreatePixmap( - ScreenPtr pScreen, - int width, - int height, - int depth); -extern Bool PclDestroyPixmap(PixmapPtr pPixmap); - -/****** - * Functions in PclPolygon.c - ******/ -extern void PclPolyRectangle( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects); -extern void PclFillPolygon( - DrawablePtr pDrawable, - GCPtr pGC, - int shape, - int mode, - int nPoints, - DDXPointPtr pPoints); -extern void PclPolyFillRect( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects); - -/****** - * Functions in PclSpans.c - ******/ -extern void PclFillSpans( - DrawablePtr pDrawable, - GCPtr pGC, - int nSpans, - DDXPointPtr pPoints, - int *pWidths, - int fSorted); -extern void PclSetSpans( - DrawablePtr pDrawable, - GCPtr pGC, - char *pSrc, - DDXPointPtr pPoints, - int *pWidths, - int nSpans, - int fSorted); - -/****** - * Functions in PclText.c - ******/ -extern int PclPolyText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string); -extern int PclPolyText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string); -extern void PclImageText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string); -extern void PclImageText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string); -extern void PclImageGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase); -extern void PclPolyGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase); - -/****** - * Functions in PclWindow.c - ******/ -extern Bool PclCreateWindow(register WindowPtr pWin); -extern Bool PclDestroyWindow(WindowPtr pWin); -extern Bool PclMapWindow(WindowPtr pWindow); -extern Bool PclPositionWindow( - register WindowPtr pWin, - int x, - int y); -extern Bool PclUnmapWindow(WindowPtr pWindow); -extern void PclCopyWindow( - WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc); -extern Bool PclChangeWindowAttributes( - register WindowPtr pWin, - register unsigned long mask); - -/****** - * Functions in PclFonts.c - ******/ -extern Bool PclRealizeFont( - ScreenPtr pscr, - FontPtr pFont); -extern Bool PclUnrealizeFont( - ScreenPtr pscr, - FontPtr pFont); - -/****** - * Functions in PclPrint.c - ******/ -extern int PclStartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client); -extern int PclEndJob( - XpContextPtr pCon, - Bool cancel); -extern int PclStartPage( - XpContextPtr pCon, - WindowPtr pWin); -extern int PclEndPage( - XpContextPtr pCon, - WindowPtr pWin); -extern int PclStartDoc(XpContextPtr pCon, - XPDocumentType type); -extern int PclEndDoc( - XpContextPtr pCon, - Bool cancel); -extern int PclDocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pFmt, - int len_fmt, - char *pOpt, - int len_opt, - ClientPtr client); -extern int PclGetDocumentData( - XpContextPtr pCon, - ClientPtr client, - int maxBufferSize); - - -#endif /* _PCL_H_ */ diff --git a/hw/xprint/pcl/PclArc.c b/hw/xprint/pcl/PclArc.c deleted file mode 100644 index 20d3f723d..000000000 --- a/hw/xprint/pcl/PclArc.c +++ /dev/null @@ -1,268 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclArc.c -** * -** * Contents: -** * Arc-drawing code for the PCL DDX driver -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "attributes.h" - -static void -PclDoArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs, - void (*DoIt)(FILE *, PclContextPrivPtr, double, double, xArc)) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - BoxRec r; - RegionPtr drawRegion, region, transClip; - short fudge; - int xoffset, yoffset; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - xRectangle repro; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - fudge = 3 * pGC->lineWidth; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - XpGetReproductionArea( pCon, &repro ); - - /* - * Generate the PCL code to draw the collection of arcs, by - * defining it as a macro which uses the HP-GL/2 arc drawing - * function. - */ - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0; i < nArcs; i++ ) - { - xArc Arc = pArcs[i]; - double b, X, Y, ratio; - double angle1; - - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - /* Calculate the start of the arc */ - if( ( Arc.angle1 / 64 ) % 360 == 90 ) - { - X = 0; - Y = -Arc.height / 2.0; - } - else if( ( Arc.angle1 / 64 ) % 360 == 270 ) - { - X = 0; - Y = Arc.height / 2.0; - } - else - { - /* Convert the angle to radians */ - angle1 = ( Arc.angle1 / 64.0 ) * 3.141592654 / 180.0; - - b = (Arc.height / 2.0); - X = b * cos( angle1 ); - Y = -b * sin( angle1 ); - } - - /* Change the coordinate system to scale the ellipse */ - ratio = (double)Arc.height / (double)Arc.width; - - sprintf( t, "SC%.2f,%.2f,%d,%d;", - (repro.x - Arc.width / 2 - xoffset - Arc.x) * ratio, - (repro.x - Arc.width / 2 - xoffset - Arc.x + - repro.width) * ratio, - repro.y - Arc.height / 2 - yoffset - Arc.y + repro.height, - repro.y - Arc.height / 2 - yoffset - Arc.y); - SAVE_PCL( outFile, pConPriv, t ); - - DoIt( outFile, pConPriv, X, Y, Arc ); - - /* Build the bounding box */ - r.x1 = -Arc.width / 2 - fudge; - r.y1 = -Arc.height / 2 - fudge; - r.x2 = Arc.width / 2 + fudge; - r.y2 = Arc.height / 2 + fudge; - drawRegion = REGION_CREATE( pGC->pScreen, &r, 0 ); - - SAVE_PCL( outFile, pConPriv, "\033%0A" ); - MACRO_END( outFile ); - - /* - * Intersect the bounding box with the clip region. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - transClip = REGION_CREATE( pGC->pScreen, NULL, 0 ); - REGION_COPY( pGC->pScreen, transClip, pGC->pCompositeClip ); - REGION_TRANSLATE( pGC->pScreen, transClip, - -(xoffset + Arc.x + Arc.width / 2), - -(yoffset + Arc.y + Arc.height / 2) ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, transClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the collection of arcs to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, ratio); - - /* - * Restore the coordinate system - */ - sprintf( t, "\033%%0BSC%d,%d,%d,%d;\033%%0A", repro.x, - repro.x + repro.width, repro.y + repro.height, - repro.y ); - SEND_PCL( outFile, t ); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - REGION_DESTROY( pGC->pScreen, transClip ); - } -} - -/* - * Draw a simple non-filled arc, centered on the origin and starting - * at the given point. - */ -static void -DrawArc(FILE *outFile, - PclContextPrivPtr pConPriv, - double X, - double Y, - xArc A) -{ - char t[80]; - - sprintf( t, "PU%d,%d;PD;AA0,0,%.2f;", (int)X, (int)Y, - (float)A.angle2 / -64.0 ); - SAVE_PCL(outFile, pConPriv, t); -} - -void -PclPolyArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs) -{ - PclDoArc( pDrawable, pGC, nArcs, pArcs, DrawArc ); -} - -/* - * Draw a filled wedge, from the origin, to the given point, through - * the appropriate angle, and back to the origin. - */ -static void -DoWedge(FILE *outFile, - PclContextPrivPtr pConPriv, - double X, - double Y, - xArc A) -{ - char t[80]; - - sprintf( t, "PU0,0;WG%.2f,%.2f,%.2f;", sqrt( X * X + Y * Y ), - (float)A.angle1 / -64.0, - (float)A.angle2 / -64.0 ); - SAVE_PCL(outFile, pConPriv, t); -} - -static void -DoChord(FILE *outFile, - PclContextPrivPtr pConPriv, - double X, - double Y, - xArc A) -{ - char t[80]; - - sprintf( t, "PU%d,%d;PM0;AA0,0,%.2f;PA%d,%d;PM2;FP;", (int)X, (int)Y, - (float)A.angle2 / -64.0 , (int)X, (int)Y ); - SAVE_PCL(outFile, pConPriv, t); -} - - -void -PclPolyFillArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs) -{ - switch( pGC->arcMode ) - { - case ArcChord: - PclDoArc( pDrawable, pGC, nArcs, pArcs, DoChord ); - break; - case ArcPieSlice: - PclDoArc( pDrawable, pGC, nArcs, pArcs, DoWedge ); - break; - } -} diff --git a/hw/xprint/pcl/PclArea.c b/hw/xprint/pcl/PclArea.c deleted file mode 100644 index a4e53dad6..000000000 --- a/hw/xprint/pcl/PclArea.c +++ /dev/null @@ -1,436 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclArea.c -** * -** * Contents: -** * Image and Area functions for the PCL DDX driver -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "Pcl.h" -#include "pixmapstr.h" -#include "region.h" - -#include "fb.h" - -void -PclPutImage(DrawablePtr pDrawable, - GCPtr pGC, - int depth, - int x, - int y, - int w, - int h, - int leftPad, - int format, - char *pImage) -{ - PixmapPtr pPixmap; - unsigned long oldFg, oldBg; - XID gcv[3]; - unsigned long oldPlanemask; - unsigned long i; - long bytesPer; - - if( ( w == 0 ) || ( h == 0 ) ) - return; - - if( format != XYPixmap ) - { - pPixmap = GetScratchPixmapHeader( pDrawable->pScreen, - w+leftPad, h, depth, - BitsPerPixel( depth ), - PixmapBytePad( w + leftPad, - depth ), (pointer)pImage ); - if( !pPixmap ) - return; - - if( format == ZPixmap ) - (void)(*pGC->ops->CopyArea)( (DrawablePtr)pPixmap, pDrawable, pGC, - leftPad, 0, w, h, x, y ); - else - (void)(*pGC->ops->CopyPlane)( (DrawablePtr)pPixmap, pDrawable, pGC, - leftPad, 0, w, h, x, y, 1 ); - FreeScratchPixmapHeader( pPixmap ); - } - else - { - pPixmap = GetScratchPixmapHeader( pDrawable->pScreen, - w+leftPad, h, depth, - BitsPerPixel( depth ), - PixmapBytePad( w + leftPad, - depth ), (pointer)pImage ); - - if( !pPixmap ) - return; - - depth = pGC->depth; - oldPlanemask = pGC->planemask; - oldFg = pGC->fgPixel; - oldBg = pGC->bgPixel; - gcv[0] = ~0L; - gcv[1] = 0; - DoChangeGC( pGC, GCForeground | GCBackground, gcv, 0 ); - bytesPer = (long)h * BitmapBytePad( w + leftPad ); - - for( i = 1 << (depth-1); i != 0; i >>= 1, pImage += bytesPer ) - { - if( i & oldPlanemask ) - { - gcv[0] = i; - DoChangeGC( pGC, GCPlaneMask, gcv, 0 ); - ValidateGC( pDrawable, pGC ); - fbPutImage( (DrawablePtr)pPixmap, pGC, 1, x, y, w, h, - leftPad, XYBitmap, pImage ); - } - } - gcv[0] = oldPlanemask; - gcv[1] = oldFg; - gcv[2] = oldBg; - DoChangeGC( pGC, GCPlaneMask | GCForeground | GCBackground, - gcv, 0 ); - - PclCopyArea( (DrawablePtr)pPixmap, pDrawable, pGC, leftPad, - 0, w, h, x, y ); - FreeScratchPixmapHeader( pPixmap ); - } -} - -/* - * PclMonoPixmapFragment() - * - * Given a 1-bit-deep pixmap, send the appropriate part of it to the - * output file as a PCL raster graphics command. - */ -static void -PclMonoPixmapFragment(FILE *outFile, - PixmapPtr pix, - short x1, - short y1, - short x2, - short y2, - short dstx, - short dsty) -{ - char *bits, t[80], *row; - int h, w, i; - - /* - * Create a storage area large enough to hold the entire pixmap, - * then use fbGetImage to get the appropriate bits. - */ - h = y2 - y1; - w = BitmapBytePad( x2 - x1 ); - - bits = (char *)xalloc( h * w ); - fbGetImage( (DrawablePtr)pix, x1, y1, x2 - x1, h, - XYPixmap, ~0, bits ); - - /* - * Move the cursor to the appropriate place on the page. We have - * to jump into HP-GL/2 to do this correctly, then go back to PCL - * for the actual drawing. - */ - sprintf( t, "\033%%0BPU%d,%d;\033%%1A", dstx, dsty ); - SEND_PCL( outFile, t ); - - /* - * Now, wrap the raster in the appropriate PCL code. Right now, - * it's going to go down the wire without any compression. That - * will have to be good enough for the sample implementation. - */ - sprintf( t, "\033*t300R\033*r%dT\033*r%dS\033*r1A\033*b0M", - h, x2 - x1 ); - SEND_PCL( outFile, t ); - - sprintf( t, "\033*b%dW", w ); - for( row = bits, i = 0; i <= h; i++, row += w ) - { - SEND_PCL( outFile, t ); - SEND_PCL_COUNT( outFile, row, w ); - } - - SEND_PCL( outFile, "\033*rC" ); - - /* - * Clean things up a bit - */ - xfree( bits ); -} - -static void -PclColorPixmapFragment(FILE *outFile, - PixmapPtr pix, - short x1, - short y1, - short x2, - short y2, - short dstx, - short dsty) -{ - char *bits, t[80], *row; - int h, w, i; - - /* - * Create a storage area large enough to hold the entire pixmap, - * then use fbGetImage to get the appropriate bits. - */ - h = y2 - y1; - w = PixmapBytePad( x2 - x1, pix->drawable.depth ); - - bits = (char *)xalloc( h * w ); - fbGetImage( (DrawablePtr)pix, x1, y1, x2 - x1, h, ZPixmap, ~0, bits ); - - /* - * Move the cursor to the appropriate place on the page. We have - * to jump into HP-GL/2 to do this correctly, then go back to PCL - * for the actual drawing. - */ - sprintf( t, "\033%%0BPU%d,%d;\033%%1A", dstx, dsty ); - SEND_PCL( outFile, t ); - - /* - * Now, wrap the raster in the appropriate PCL code. Right now, - * it's going to go down the wire without any compression. That - * will have to be good enough for the sample implementation. - */ - sprintf( t, "\033*t300R\033*r%dt%ds1A\033*b0M", - h, x2 - x1 ); - SEND_PCL( outFile, t ); - - sprintf( t, "\033*b%dW", w ); - for( row = bits, i = 0; i < h; i++, row += w ) - { - SEND_PCL( outFile, t ); - SEND_PCL_COUNT( outFile, row, w ); - } - - SEND_PCL( outFile, "\033*rC" ); - - /* - * Clean things up a bit - */ - xfree( bits ); -} - -RegionPtr -PclCopyArea(DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty) -{ - PixmapPtr pixSrc = (PixmapPtr)pSrc; -/* - FILE *srcFile; - GC srcGC; -*/ - FILE *dstFile; - GC dstGC; - unsigned long valid; - RegionPtr drawRegion, region, whole, ret; - BoxRec box; - BoxPtr prect; - int nrect; - void (*doFragment)(FILE *, PixmapPtr, short, short, short, short, - short, short ); - - /* - * Since we don't store any information on a per-window basis, we - * can't copy from a window. - */ - if( pSrc->type == DRAWABLE_WINDOW ) - return NULL; - - /* - * If we're copying from a pixmap to a pixmap, we just use the - * fb code to do the work. - */ - if( pDst->type == DRAWABLE_PIXMAP ) - fbCopyArea( pSrc, pDst, pGC, srcx, srcy, width, height, dstx, dsty ); - -/* - PclGetDrawablePrivateStuff( pSrc, &srcGC, &valid, &srcFile ); -*/ - PclGetDrawablePrivateStuff( pDst, &dstGC, &valid, &dstFile ); - - /* - * If we're copying to a window, we have to do some actual - * drawing, instead of just handing it off to fb. Start - * by determining the region that will be drawn. - */ - box.x1 = srcx; - box.y1 = srcy; - box.x2 = srcx + width; - box.y2 = srcy + height; - drawRegion = REGION_CREATE( pGC->pScreen, &box, 0 ); - REGION_TRANSLATE( pGC->pScreen, drawRegion, dstx, dsty ); - - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * Now select the operation to be performed on each box in the - * region. - */ - if( pSrc->depth == 1 ) - doFragment = PclMonoPixmapFragment; - else - doFragment = PclColorPixmapFragment; - - /* - * Actually draw each section of the bitmap. - */ - nrect = REGION_NUM_RECTS( region ); - prect = REGION_RECTS( region ); - - while( nrect ) - { - (*doFragment)( dstFile, (PixmapPtr)pSrc, prect->x1 - dstx, - prect->y1 - dsty, prect->x2 - dstx, - prect->y2 - dsty, prect->x1, prect->y1 ); - - nrect--; - prect++; - } - - /* - * Update the destination's GC to the source's GC. - */ -/* - PclSetDrawablePrivateGC( pDst, srcGC ); -*/ - - /* - * Determine the region that needs to be returned. This is the - * region of the source that falls outside the boundary of the - * pixmap. - */ - box.x1 = 0; - box.y1 = 0; - box.x2 = pixSrc->drawable.width; - box.y2 = pixSrc->drawable.height; - whole = REGION_CREATE( pGC->pScreen, &box, 0 ); - ret = REGION_CREATE( pGC->pScreen, NULL, 0 ); - - REGION_TRANSLATE( pGC->pScreen, drawRegion, -dstx, -dsty ); - REGION_SUBTRACT( pGC->pScreen, ret, drawRegion, whole ); - - /* - * Clean up the regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - REGION_DESTROY( pGC->pScreen, whole ); - - if( REGION_NOTEMPTY( pGC->pScreen, ret ) ) - return ret; - else - { - REGION_DESTROY( pGC->pScreen, ret ); - return NULL; - } -} - -RegionPtr -PclCopyPlane(DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty, - unsigned long plane) -{ - RegionPtr reg; - GCPtr scratchGC; - PixmapPtr scratchPix; - - /* - * Since we don't store PCL on a per-window basis, there's no good - * way to copy from a window. - */ - if( pSrc->type == DRAWABLE_WINDOW ) - return NULL; - - /* Copying from a pixmap to a pixmap is already implemented by fb. */ - if( pSrc->type == DRAWABLE_PIXMAP && - pDst->type == DRAWABLE_PIXMAP ) - fbCopyPlane( pSrc, pDst, pGC, srcx, srcy, width, height, - dstx, dsty, plane ); - - /* - * We can use fbCopyPlane to do the work of grabbing the plane and - * converting it to the desired visual. Once that's done, we already - * know how to do a CopyArea. - */ - scratchPix = (*pDst->pScreen->CreatePixmap)( pDst->pScreen, width, - height, pDst->depth, - CREATE_PIXMAP_USAGE_SCRATCH ); - - scratchGC = GetScratchGC( pDst->depth, pDst->pScreen ); - CopyGC( pGC, scratchGC, ~0L ); - - fbValidateGC( scratchGC, ~0L, (DrawablePtr)scratchPix ); - fbCopyPlane( pSrc, (DrawablePtr)scratchPix, scratchGC, - srcx, srcy, width, height, 0, 0, plane ); - - reg = PclCopyArea( (DrawablePtr)scratchPix, pDst, pGC, 0, 0, width, - height, dstx, dsty ); - - FreeScratchGC( scratchGC ); - - (*pDst->pScreen->DestroyPixmap)( scratchPix ); - - return reg; -} diff --git a/hw/xprint/pcl/PclAttVal.c b/hw/xprint/pcl/PclAttVal.c deleted file mode 100644 index f0f204764..000000000 --- a/hw/xprint/pcl/PclAttVal.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - */ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "AttrValid.h" - -/* - * define valid values and defaults for Printer pool - */ -static XpOid ValidContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape, - xpoid_val_content_orientation_reverse_portrait, - xpoid_val_content_orientation_reverse_landscape -}; -static XpOidList ValidContentOrientations = { - ValidContentOrientationsOids, XpNumber(ValidContentOrientationsOids) -}; - -static XpOid DefaultContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList DefaultContentOrientations = { - DefaultContentOrientationsOids, XpNumber(DefaultContentOrientationsOids) -}; - -static XpOid ValidPlexesOids[] = { - xpoid_val_plex_simplex, xpoid_val_plex_duplex, xpoid_val_plex_tumble -}; -static XpOidList ValidPlexes = { - ValidPlexesOids, XpNumber(ValidPlexesOids) -}; - -static XpOid DefaultPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList DefaultPlexes = { - DefaultPlexesOids, XpNumber(DefaultPlexesOids) -}; - -static unsigned long ValidPrinterResolutionsCards[] = { - 300 -}; -static XpOidCardList ValidPrinterResolutions = { - ValidPrinterResolutionsCards, XpNumber(ValidPrinterResolutionsCards) -}; - -static unsigned long DefaultPrinterResolutionsCards[] = { - 300 -}; -static XpOidCardList DefaultPrinterResolutions = { - DefaultPrinterResolutionsCards, XpNumber(DefaultPrinterResolutionsCards) -}; - -static XpOid ValidListfontsModesOids[] = { - xpoid_val_xp_list_internal_printer_fonts, xpoid_val_xp_list_glyph_fonts -}; -static XpOidList ValidListfontsModes = { - ValidListfontsModesOids, XpNumber(ValidListfontsModesOids) -}; - -static XpOid DefaultListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList DefaultListfontsModes = { - DefaultListfontsModesOids, XpNumber(DefaultListfontsModesOids) -}; - -static XpOid ValidSetupProvisoOids[] = { - xpoid_val_xp_setup_mandatory, xpoid_val_xp_setup_optional -}; -static XpOidList ValidSetupProviso = { - - - ValidSetupProvisoOids, XpNumber(ValidSetupProvisoOids) -}; - -static XpOidDocFmt ValidDocFormatsSupportedFmts[] = { - { "PCL", "5", NULL }, -}; -static XpOidDocFmtList ValidDocFormatsSupported = { - ValidDocFormatsSupportedFmts, XpNumber(ValidDocFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultDocFormatsSupportedFmts[] = { - { "PCL", "5", NULL } -}; -static XpOidDocFmtList DefaultDocFormatsSupported = { - DefaultDocFormatsSupportedFmts, XpNumber(DefaultDocFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidEmbeddedFormatsSupportedFmts[] = { - { "HPGL", "2", NULL }, -}; -static XpOidDocFmtList ValidEmbeddedFormatsSupported = { - ValidEmbeddedFormatsSupportedFmts, XpNumber(ValidEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultEmbeddedFormatsSupportedFmts[] = { - { "HPGL", "2", NULL } -}; -static XpOidDocFmtList DefaultEmbeddedFormatsSupported = { - DefaultEmbeddedFormatsSupportedFmts, XpNumber(DefaultEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidRawFormatsSupportedFmts[] = { - { "PCL", "5", NULL }, - { "Postscript", "2", NULL }, - { "ASCII", NULL, NULL } - -}; -static XpOidDocFmtList ValidRawFormatsSupported = { - ValidRawFormatsSupportedFmts, XpNumber(ValidRawFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultRawFormatsSupportedFmts[] = { - { "PCL", "5", NULL } -}; -static XpOidDocFmtList DefaultRawFormatsSupported = { - DefaultRawFormatsSupportedFmts, XpNumber(DefaultRawFormatsSupportedFmts) -}; - -static XpOid ValidInputTraysOids[] = { - xpoid_val_input_tray_manual, - xpoid_val_input_tray_main, - xpoid_val_input_tray_envelope, - xpoid_val_input_tray_large_capacity, - xpoid_val_input_tray_bottom -}; -static XpOidList ValidInputTrays = { - ValidInputTraysOids, XpNumber(ValidInputTraysOids) -}; - -static XpOid ValidMediumSizesOids[] = { - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_jis_b5, -}; -static XpOidList ValidMediumSizes = { - ValidMediumSizesOids, XpNumber(ValidMediumSizesOids) -}; - -static XpOidDocFmt DefaultDocumentFormat = { - "PCL", "5", NULL -}; - - -/* - * init struct for XpValidate*Pool - */ -XpValidatePoolsRec PclValidatePoolsRec = { - &ValidContentOrientations, &DefaultContentOrientations, - &ValidDocFormatsSupported, &DefaultDocFormatsSupported, - &ValidInputTrays, &ValidMediumSizes, - &ValidPlexes, &DefaultPlexes, - &ValidPrinterResolutions, &DefaultPrinterResolutions, - &ValidEmbeddedFormatsSupported, &DefaultEmbeddedFormatsSupported, - &ValidListfontsModes, &DefaultListfontsModes, - &ValidRawFormatsSupported, &DefaultRawFormatsSupported, - &ValidSetupProviso, - &DefaultDocumentFormat -}; diff --git a/hw/xprint/pcl/PclAttr.c b/hw/xprint/pcl/PclAttr.c deleted file mode 100644 index b27bf4fce..000000000 --- a/hw/xprint/pcl/PclAttr.c +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclAttr.c -** * -** * Contents: -** * Attribute-handling functions for the PCL driver -** * -** * Created: 2/2/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "attributes.h" - -char * -PclGetAttributes( - XpContextPtr pCon, - XPAttributes pool ) -{ - return XpGetAttributes( pCon, pool ); -} - -char * -PclGetOneAttribute( - XpContextPtr pCon, - XPAttributes pool, - char *attr ) -{ - return XpGetOneAttribute( pCon, pool, attr ); -} -int -PclAugmentAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ) -{ - return XpAugmentAttributes( pCon, pool, attrs ); -} - -int -PclSetAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ) -{ - return XpSetAttributes( pCon, pool, attrs ); -} diff --git a/hw/xprint/pcl/PclColor.c b/hw/xprint/pcl/PclColor.c deleted file mode 100644 index 5e8ffa63c..000000000 --- a/hw/xprint/pcl/PclColor.c +++ /dev/null @@ -1,851 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclColorInit.c -** * -** * Contents: -** * Colormap handing code of Pcl driver for the -** * print server. -** * -** * Created: 4/8/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "colormapst.h" -#include "windowstr.h" -#include "resource.h" - -#include "Pcl.h" -#include "fb.h" - -static void lookup(unsigned char *src, - unsigned char *dst, - int num, - unsigned char *map, - int dim); -static void trilinear(unsigned char *p, - unsigned char *out, - unsigned char *d, - int dim, - unsigned char def); - - -/* - * This seems to be (and is) a duplication of effort; one would think - * that fbCreateDefColormap would be sufficient. It almost is. The - * only change made in this function is that the black and white pixels - * are allocated with three separate variables for red, green and blue - * values, instead of the single variable in fbCreateDefColormap. The - * single variable leads to the one value being corrected by - * ResolveColor three times, which leads to incorrect colors. - */ - -Bool -PclCreateDefColormap(ScreenPtr pScreen) -{ - unsigned short wp_red = ~0, wp_green = ~0, wp_blue = ~0; - unsigned short bp_red = 0, bp_green = 0, bp_blue = 0; - VisualPtr pVisual; - ColormapPtr cmap; - Pixel wp, bp; - - for (pVisual = pScreen->visuals; - pVisual->vid != pScreen->rootVisual; - pVisual++) - ; - - if (CreateColormap(pScreen->defColormap, pScreen, pVisual, &cmap, - (pVisual->class & DynamicClass) ? AllocNone : AllocAll, - 0) - != Success) - return FALSE; - wp = pScreen->whitePixel; - bp = pScreen->blackPixel; - if ((AllocColor(cmap, &wp_red, &wp_green, &wp_blue, &wp, 0) != - Success) || - (AllocColor(cmap, &bp_red, &bp_green, &bp_blue, &bp, 0) != - Success)) - return FALSE; - - pScreen->whitePixel = wp; - pScreen->blackPixel = bp; - - (*pScreen->InstallColormap)(cmap); - return TRUE; -} - -/* - * Add colormap to list of colormaps on screen - */ -Bool -PclCreateColormap(ColormapPtr pColor) -{ - PclCmapToContexts *new; - PclScreenPrivPtr sPriv; - - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pColor->pScreen->devPrivates, PclScreenPrivateKey); - - /* - * Use existing code to initialize the values in the colormap - */ - fbInitializeColormap( pColor ); - - /* - * Set up the mapping between the color map and the context - */ - new = (PclCmapToContexts *)xalloc( sizeof( PclCmapToContexts ) ); - - if( new ) - { - new->colormapId = pColor->mid; - new->contexts = NULL; - new->next = sPriv->colormaps; - sPriv->colormaps = new; - - return TRUE; - } - else - return FALSE; -} - -void -PclDestroyColormap(ColormapPtr pColor) -{ - PclScreenPrivPtr sPriv; - PclCmapToContexts *pCmap, *tCmap = 0; - PclContextListPtr con, tCon; - PclContextPrivPtr cPriv; - PclPaletteMapPtr pPal; - char t[80]; - - /* - * At DestroyContext time, colormaps may be destroyed twice, so if the - * pointer is NULL, just crash out. - */ - if( !pColor ) - return; - - /* - * Find the colormap <-> contexts mapping - */ - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pColor->pScreen->devPrivates, PclScreenPrivateKey); - pCmap = sPriv->colormaps; - while( pCmap ) - { - if( pCmap->colormapId == pColor->mid ) - break; - tCmap = pCmap; - pCmap = pCmap->next; - } - - /* - * For each context, delete the palette in the printer and - * free the mapping. - */ - if( pCmap ) - { - con = pCmap->contexts; - while( con ) - { - cPriv = dixLookupPrivate(&con->context->devPrivates, - PclContextPrivateKey); - pPal = cPriv->palettes; - while( pPal ) - { - if( pPal->colormapId == pColor->mid ) - break; - pPal = pPal->next; - } - - if( cPriv->pPageFile ) - { - sprintf( t, "\033&p%dI\033*p2C", pPal->paletteId ); - SEND_PCL( cPriv->pPageFile, t ); - } - - tCon = con; - con = con->next; - xfree( tCon ); - } - - /* - * Delete the colormap<->contexts mapping - */ - if( sPriv->colormaps == pCmap ) - /* Delete from the front */ - sPriv->colormaps = pCmap->next; - else - /* Delete from the middle */ - tCmap->next = pCmap->next; - free( pCmap ); - } -} - -void -PclInstallColormap(ColormapPtr pColor) -{ -} - -void -PclUninstallColormap(ColormapPtr pColor) -{ -} - -int -PclListInstalledColormaps(ScreenPtr pScreen, - XID *pCmapList) -{ - return 0; -} - -void -PclStoreColors(ColormapPtr pColor, - int ndef, - xColorItem *pdefs) -{ - PclCmapToContexts *p; - PclScreenPrivPtr sPriv; - PclContextListPtr con; - PclContextPrivPtr cPriv; - PclPaletteMapPtr pMap; - char t[80]; - int i; - - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pColor->pScreen->devPrivates, PclScreenPrivateKey); - p = sPriv->colormaps; - while( p ) - { - if( p->colormapId == pColor->mid ) - break; - p = p->next; - } - - if( p ) - { - con = p->contexts; - while( con ) - { - /* - * For each context, get the palette ID and update the - * appropriate palette. - */ - cPriv = dixLookupPrivate(&con->context->devPrivates, - PclContextPrivateKey); - pMap = PclFindPaletteMap( cPriv, pColor, NULL ); - - /* - * Update the palette - */ - sprintf( t, "\033&p%dS", pMap->paletteId ); - SEND_PCL( cPriv->pPageFile, t ); - - if( pColor->class == PseudoColor ) - { - unsigned short r, g, b; - unsigned int pID; - for( i = 0; i < ndef; i++ ) - { - pID = pdefs[i].pixel; - if ( pColor->red[i].fShared ) - { - r = pColor->red[pID].co.shco.red->color; - g = pColor->red[pID].co.shco.green->color; - b = pColor->red[pID].co.shco.blue->color; - } - else - { - r = pColor->red[pID].co.local.red; - g = pColor->red[pID].co.local.green; - b = pColor->red[pID].co.local.blue; - } - - if( pdefs[i].flags & DoRed ) - r = pdefs[i].red; - if( pdefs[i].flags & DoGreen ) - g = pdefs[i].green; - if( pdefs[i].flags & DoBlue ) - b = pdefs[i].blue; - PclLookUp(pColor, cPriv, &r, &g, &b); - sprintf( t, "\033*v%ua%ub%uc%dI", r, g, b, pID); - SEND_PCL( cPriv->pPageFile, t ); - } - } - - sprintf( t, "\033&p%dS", cPriv->currentPalette ); - SEND_PCL( cPriv->pPageFile, t ); - - con = con->next; - } - } -} - -void -PclResolveColor(unsigned short *pRed, - unsigned short *pGreen, - unsigned short *pBlue, - VisualPtr pVisual) -{ - /* - * We need to map the X color range of [0,65535] to the PCL color - * range of [0,32767]. - */ - *pRed >>= 1; - *pGreen >>= 1; - *pBlue >>= 1; -} - -PclPaletteMapPtr -PclFindPaletteMap(PclContextPrivPtr cPriv, - ColormapPtr cmap, - GCPtr gc) -{ - PclPaletteMapPtr p = cPriv->palettes, new; - - /* - * If the colormap is static, grab one of the special palettes. If we come - * into this from StoreColors, there will be no GC, but by definition we're - * looking at a dynamic color map, so the special colors will not be - * needed. - */ - if( gc ) - { - if( cmap->pVisual->class == StaticGray ) - return &( cPriv->staticGrayPalette ); - else if( cmap->pVisual->class == TrueColor ) - { - if( gc->fillStyle == FillTiled && !( gc->tileIsPixel ) ) - return &( cPriv->specialTrueColorPalette ); - else - return &( cPriv->trueColorPalette ); - } - } - - - /* Look for the colormap ID <-> palette ID mapping */ - while( p ) - { - if( p->colormapId == cmap->mid ) - return p; - p = p->next; - } - - /* If the colormap isn't already there, make an entry for it */ - new = (PclPaletteMapPtr)xalloc( sizeof( PclPaletteMap ) ); - new->colormapId = cmap->mid; - new->paletteId = cPriv->nextPaletteId++; - new->downloaded = 0; - new->next = cPriv->palettes; - cPriv->palettes = new; - return new; -} - -int -PclUpdateColormap(DrawablePtr pDrawable, - XpContextPtr pCon, - GCPtr gc, - FILE *outFile) -{ - PclScreenPrivPtr sPriv; - - PclContextPrivPtr cPriv; - PclPaletteMapPtr pMap; - PclCmapToContexts *pCmap; - PclContextListPtr new; - char t[80]; - Colormap c; - ColormapPtr cmap; - WindowPtr win = (WindowPtr)pDrawable; - unsigned short r, g, b, rr, gg, bb; - int i; - - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - c = wColormap( win ); - cmap = (ColormapPtr)LookupIDByType( c, RT_COLORMAP ); - pMap = PclFindPaletteMap( cPriv, cmap, gc ); - - if( cPriv->currentPalette == pMap->paletteId ) - /* - * If the requested colormap is already active, nothing needs to - * be done. - */ - return FALSE; - - /* - * Now we activate the palette in the printer - */ - sprintf( t, "\033&p%dS", pMap->paletteId ); - SEND_PCL( outFile, t ); - cPriv->currentPalette = pMap->paletteId; - - if( pMap->downloaded == 0 ) - /* - * If the requested colormap has not been downloaded to the - * printer, we need to do that before activating it. - */ - { - /* - * Add the colormap to the screen-level colormap<->context mapping. - */ - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&cmap->pScreen->devPrivates, - PclScreenPrivateKey); - pCmap = sPriv->colormaps; - while( pCmap && ( pCmap->colormapId != cmap->mid ) ) - pCmap = pCmap->next; - new = (PclContextListPtr)xalloc( sizeof( PclContextList ) ); - new->context = pCon; - new->next = pCmap->contexts; - pCmap->contexts = new; - - /* - * XXX Download the colormap - */ - if( cmap->class == StaticGray ) - { -#ifdef XP_PCL_COLOR - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 1, 1, 1, 1, 1 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", 0x7f, 0xff, 0x7f, 0xff, - 0x7f, 0xff ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* Now program the two colors */ - sprintf( t, "\033*v0a0b0c%ldI", (long) cmap->pScreen->blackPixel ); - SEND_PCL( cPriv->pPageFile, t ); - sprintf( t, "\033*v32767a32767b32767c%ldI", - (long) cmap->pScreen->whitePixel ); - SEND_PCL( cPriv->pPageFile, t ); -#endif /* XP_PCL_COLOR */ - } - else if( cmap->class == PseudoColor ) - { - sprintf( t, - "\033*v18W%c%c%c%c%c%c", - 0, 1, cmap->pVisual->nplanes, 16, 16, 16 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - if ( cPriv->ctbl != NULL ) - sprintf( t, "%c%c%c%c%c%c", 0x00, 0xff, 0x00, 0xff, - 0x00, 0xff ); - else - sprintf( t, "%c%c%c%c%c%c", 0x7f, 0xff, 0x7f, 0xff, - 0x7f, 0xff ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - for(i = 0; i < cmap->pVisual->ColormapEntries; i++ ) - { - if( cmap->red[i].fShared ) - { - r = cmap->red[i].co.shco.red->color; - g = cmap->red[i].co.shco.green->color; - b = cmap->red[i].co.shco.blue->color; - } - else - { - r = cmap->red[i].co.local.red; - g = cmap->red[i].co.local.green; - b = cmap->red[i].co.local.blue; - } - PclLookUp(cmap, cPriv, &r, &g, &b); - sprintf( t, "\033*v%ua%ub%uc%dI", r, g, b, i ); - SEND_PCL( outFile, t ); - } - } - else if( cmap->class == TrueColor ) - { - unsigned short lim; - - if( gc->fillStyle == FillTiled && !( gc->tileIsPixel ) ) - { - if( cPriv->ctbl != NULL ) - { - /* Send the "special" colormap for 24-bit fills */ - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 1, - 8, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* Now send the color entries, RRRGGGBB */ - i=0; - for( r = 0; r < 8; r++ ) - for( g = 0; g < 8; g ++ ) - for( b = 0; b < 4; b++ ) - { - rr = (r * 0xff)/7; - gg = (g * 0xff)/7; - bb = (b * 0xff)/3; - PclLookUp(cmap, cPriv, &rr, &gg, &bb); - sprintf( t, "\033*v%ua%ub%uc%dI", - rr, gg, bb, i ); - SEND_PCL( outFile, t ); - i++; - } - } - else - { - /* Send the "special" colormap for 24-bit fills */ - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 1, - 8, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0x07, - 0x00, 0x07, - 0x00, 0x03 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* Now send the color entries, RRRGGGBB */ - i=0; - for( r = 0; r < 8; r++ ) - for( g = 0; g < 8; g ++ ) - for( b = 0; b < 4; b++ ) - { - sprintf( t, "\033*v%ua%ub%uc%dI", - r, g, b, i ); - SEND_PCL( outFile, t ); - i++; - } - } - - } - else - { - lim = (1 << cmap->pVisual->bitsPerRGBValue) - 1; - - /* Send the "special" colormap for 24-bit fills */ - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 3, - cmap->pVisual->nplanes, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", - (lim >> 8) & 0xff, lim & 0xff, - (lim >> 8) & 0xff, lim & 0xff, - (lim >> 8) & 0xff, lim & 0xff); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - } - - } - pMap->downloaded = 1; - } - return TRUE; - -} - -void PclLookUp( - ColormapPtr cmap, - PclContextPrivPtr cPriv, - unsigned short *r, - unsigned short *g, - unsigned short *b -) -{ - unsigned char cdata[3]; - - if( cmap->class == PseudoColor ) - { - if( cPriv->ctbl != NULL ) - { - cdata[0] = *r >> 8; - cdata[1] = *g >> 8; - cdata[2] = *b >> 8; - lookup(cdata, cdata, 1, cPriv->ctbl, cPriv->ctbldim); - *r = cdata[0]; - *g = cdata[1]; - *b = cdata[2]; - } - else - { - *r >>= 1; - *g >>= 1; - *b >>= 1; - } - } - else if( cmap->class == TrueColor ) - { - if( cPriv->ctbl != NULL ) - { - cdata[0] = *r; - cdata[1] = *g; - cdata[2] = *b; - lookup(cdata, cdata, 1, cPriv->ctbl, cPriv->ctbldim); - *r = cdata[0]; - *g = cdata[1]; - *b = cdata[2]; - } - } - return; -} - -unsigned char *PclReadMap(char *name, int *dim) -{ - FILE *fp; - unsigned char *data; - long size; - - if ((fp=fopen(name, "r")) == NULL) { - return(NULL); - } - - fseek(fp, 0, SEEK_END); - size = ftell(fp); - - /* Could do this with a lookup table, if the constraint is that the - 3 map dimensions must be equal. */ - switch (size) { - case 8*8*8*3: - *dim = 8; - break; - case 16*16*16*3: - *dim = 16; - break; - case 17*17*17*3: - *dim = 17; - break; - case 65*65*65*3: - *dim = 65; - break; - default: - fclose(fp); - return(NULL); - } - - if ((data = (unsigned char *) xalloc(sizeof(char) * size)) == NULL) { - fclose(fp); - return(NULL); - } - - fseek(fp, 0, SEEK_SET); - - if (fread(data, sizeof(char), size, fp) != (unsigned) size) { - fclose(fp); - free(data); - return(NULL); - } - - fclose(fp); - return(data); -} - -/************************************************************************ - * - * Here is the mapper. - * - ************************************************************************/ - -#define SCL(x) ((x)*(dim-1)/255) -/* Interleaved-map lookup */ -static void lookup(unsigned char *src, unsigned char *dst, int num, unsigned char *map, int dim) -{ - int i; - -#define _INTERPOLATE -#ifndef _INTERPOLATE - unsigned char *p1, *p2, *p3; - - for (i=0; i>8)) - -static void trilinear(unsigned char *p, unsigned char *out, unsigned char *d, int dim, unsigned char def) -{ -#define DENS(X, Y, Z, ch) d[((X*dim+Y)*dim+Z)*3+ch] - - int x0, y0, z0, - x1, y1, z1, - i; - unsigned char *dp, - fx, fy, fz, - d000, d001, d010, d011, - d100, d101, d110, d111, - dx00, dx01, dx10, dx11, - dxy0, dxy1; - float scale; - - scale = 255.0 / (dim-1); - - x0 = p[0] / scale; - y0 = p[1] / scale; - z0 = p[2] / scale; - - /* Fractions should range from 0-1.0 (fixed point 8-256) */ - fx = (((int) (p[0] - x0 * scale)) << 8) / 255; - fy = (((int) (p[1] - y0 * scale)) << 8) / 255; - fz = (((int) (p[2] - z0 * scale)) << 8) / 255; - - x1 = x0 + 1; - y1 = y0 + 1; - z1 = z0 + 1; - - for (i=0; i<3; i++) { - - if (x0 >= 0 && x1 < dim && - y0 >= 0 && y1 < dim && - z0 >= 0 && z1 < dim) { - dp = &DENS(x0, y0, z0, i); - d000 = dp[0]; - d100 = dp[3]; - dp += dim*3; - d010 = dp[0]; - d110 = dp[3]; - dp += dim*dim*3; - d011 = dp[0]; - d111 = dp[3]; - dp -= dim*3; - d001 = dp[0]; - d101 = dp[3]; - } else { -# define INRANGE(X, Y, Z) \ - ((X) >= 0 && (X) < dim && \ - (Y) >= 0 && (Y) < dim && \ - (Z) >= 0 && (Z) < dim) - - d000 = INRANGE(x0, y0, z0) ? DENS(x0, y0, z0, i) : def; - d001 = INRANGE(x0, y0, z1) ? DENS(x0, y0, z1, i) : def; - d010 = INRANGE(x0, y1, z0) ? DENS(x0, y1, z0, i) : def; - d011 = INRANGE(x0, y1, z1) ? DENS(x0, y1, z1, i) : def; - - d100 = INRANGE(x1, y0, z0) ? DENS(x1, y0, z0, i) : def; - d101 = INRANGE(x1, y0, z1) ? DENS(x1, y0, z1, i) : def; - d110 = INRANGE(x1, y1, z0) ? DENS(x1, y1, z0, i) : def; - d111 = INRANGE(x1, y1, z1) ? DENS(x1, y1, z1, i) : def; - } - - dx00 = LERP(fx, d000, d100); - dx01 = LERP(fx, d001, d101); - dx10 = LERP(fx, d010, d110); - dx11 = LERP(fx, d011, d111); - - dxy0 = LERP(fy, dx00, dx10); - dxy1 = LERP(fy, dx01, dx11); - - out[i] = LERP(fz, dxy0, dxy1); - } -} - diff --git a/hw/xprint/pcl/PclCursor.c b/hw/xprint/pcl/PclCursor.c deleted file mode 100644 index a3eeb1610..000000000 --- a/hw/xprint/pcl/PclCursor.c +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclCursor.c -** * -** * Contents: -** * Cursor-handling code for the PCL DDX driver -** * -** * Created: 1/18/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PclConstrainCursor( - ScreenPtr pScreen, - BoxPtr pBox) -{ -} - -void -PclCursorLimits( - ScreenPtr pScreen, - CursorPtr pCursor, - BoxPtr pHotBox, - BoxPtr pTopLeftBox) -{ -} - -Bool -PclDisplayCursor( - ScreenPtr pScreen, - CursorPtr pCursor) -{ - return True; -} - -Bool -PclRealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor) -{ - return True; -} - -Bool -PclUnrealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor) -{ - return True; -} - -void -PclRecolorCursor( - ScreenPtr pScreen, - CursorPtr pCursor, - Bool displayed) -{ -} - -Bool -PclSetCursorPosition( - ScreenPtr pScreen, - int x, - int y, - Bool generateEvent) -{ - return True; -} diff --git a/hw/xprint/pcl/PclDef.h b/hw/xprint/pcl/PclDef.h deleted file mode 100644 index dcd54c4fe..000000000 --- a/hw/xprint/pcl/PclDef.h +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclDef.h -** * -** * Contents: extran defines and includes for the Pcl driver -** * for a printing X server. -** * -** * Created: 7/31/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCLDEF_H_ -#define _PCLDEF_H_ - -#define DT_PRINT_JOB_HEADER "DT_PRINT_JOB_HEADER" -#define DT_PRINT_JOB_TRAILER "DT_PRINT_JOB_TRAILER" -#define DT_PRINT_JOB_COMMAND "DT_PRINT_JOB_COMMAND" -#define DT_PRINT_JOB_EXEC_COMMAND "DT_PRINT_JOB_EXEC_COMMAND" -#define DT_PRINT_JOB_EXEC_OPTIONS "DT_PRINT_JOB_EXEC_OPTION" -#define DT_PRINT_PAGE_HEADER "DT_PRINT_PAGE_HEADER" -#define DT_PRINT_PAGE_TRAILER "DT_PRINT_PAGE_TRAILER" -#define DT_PRINT_PAGE_COMMAND "DT_PRINT_PAGE_COMMAND" - -#define DT_IN_FILE_STRING "%(InFile)%" -#define DT_OUT_FILE_STRING "%(OutFile)%" -#define DT_ALLOWED_COMMANDS_FILE "printCommands" - -#endif /* _PCLDEF_H_ */ diff --git a/hw/xprint/pcl/PclFonts.c b/hw/xprint/pcl/PclFonts.c deleted file mode 100644 index 9e993f79c..000000000 --- a/hw/xprint/pcl/PclFonts.c +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclFonts.c -** * -** * Contents: -** * Font code for Pcl driver. -** * -** * Created: 2/03/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "scrnintstr.h" - -#include "Pcl.h" - -Bool -PclRealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} - -Bool -PclUnrealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} diff --git a/hw/xprint/pcl/PclGC.c b/hw/xprint/pcl/PclGC.c deleted file mode 100644 index fbadf5d5d..000000000 --- a/hw/xprint/pcl/PclGC.c +++ /dev/null @@ -1,971 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclGC.c -** * -** * Contents: -** * Graphics Context handling for the PCL driver -** * -** * Created: 10/11/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "gcstruct.h" - -#include "Pcl.h" -#include "pixmapstr.h" -#include "colormapst.h" -#include "windowstr.h" -#include "fb.h" -#include "scrnintstr.h" -#include "resource.h" - -static GCOps PclGCOps = -{ - PclFillSpans, - PclSetSpans, - PclPutImage, - PclCopyArea, - PclCopyPlane, - PclPolyPoint, - PclPolyLine, - PclPolySegment, - PclPolyRectangle, - PclPolyArc, - PclFillPolygon, - PclPolyFillRect, - PclPolyFillArc, - PclPolyText8, - PclPolyText16, - PclImageText8, - PclImageText16, - PclImageGlyphBlt, - PclPolyGlyphBlt, - PclPushPixels -} -; - - -static GCFuncs PclGCFuncs = -{ - PclValidateGC, - miChangeGC, - miCopyGC, - PclDestroyGC, - miChangeClip, - miDestroyClip, - miCopyClip, -} -; - -Bool -PclCreateGC(GCPtr pGC) -{ - if (fbCreateGC(pGC) == FALSE) - return FALSE; - - pGC->clientClip = NULL; - pGC->clientClipType = CT_NONE; - - pGC->ops = &PclGCOps; - pGC->funcs = &PclGCFuncs; - - return TRUE; -} - -void -PclDestroyGC(GCPtr pGC) -{ - /* fb doesn't specialize DestroyGC */ - miDestroyGC( pGC ); -} - - -int -PclGetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC *gc, - unsigned long *valid, - FILE **file) -{ - XpContextPtr pCon; - PclContextPrivPtr cPriv; - - switch( pDrawable->type ) - { - case DRAWABLE_PIXMAP: - /* - * If we ever get here, something is wrong. - */ - return FALSE; - - case DRAWABLE_WINDOW: - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - - if( pCon == NULL ) - return FALSE; - else - { - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - *gc = cPriv->lastGC; - *valid = cPriv->validGC; - *file = cPriv->pPageFile; - return TRUE; - } - - default: - return FALSE; - } -} - -void -PclSetDrawablePrivateGC( - DrawablePtr pDrawable, - GC gc) -{ - PixmapPtr pix; - XpContextPtr pCon; - PclPixmapPrivPtr pixPriv; - PclContextPrivPtr pPriv; - int i; - - switch( pDrawable->type ) - { - case DRAWABLE_PIXMAP: - pix = (PixmapPtr)pDrawable; - pixPriv = (PclPixmapPrivPtr) - dixLookupPrivate(&pix->devPrivates, PclPixmapPrivateKey); - - pixPriv->lastGC = gc; - pixPriv->validGC = 1; - break; - - case DRAWABLE_WINDOW: - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - pPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - pPriv->validGC = 1; - pPriv->lastGC = gc; - - /* - * Store the dash list separately, to avoid having it freed - * out from under us. - */ - if( pPriv->dash != NULL ) - xfree( pPriv->dash ); - if( gc.numInDashList != 0 ) - { - pPriv->dash = (unsigned char *)xalloc( sizeof( unsigned char ) - * gc.numInDashList ); - for( i = 0; i < gc.numInDashList; i++ ) - pPriv->dash[i] = gc.dash[i]; - } - else - pPriv->dash = NULL; - - - /* - * Store the dash list separately, to avoid having it freed - * out from under us. - */ - if( pPriv->dash != NULL ) - xfree( pPriv->dash ); - if( gc.numInDashList != 0 ) - { - pPriv->dash = (unsigned char *)xalloc( sizeof( unsigned char ) - * gc.numInDashList ); - for( i = 0; i < gc.numInDashList; i++ ) - pPriv->dash[i] = gc.dash[i]; - } - else - pPriv->dash = NULL; - - break; - } -} - -static void -PclSendPattern(char *bits, - int sz, - int depth, - int h, - int w, - int patNum, - FILE *outFile) -{ - char t[80], *row, *mod; - int w2; - int i, j; - - SEND_PCL( outFile, "\033%0A" ); - - if( depth == 1 ) - { - /* Each row must be word-aligned */ - w2 = ( w / 8 ) + ( ( w%8 ) ? 1 : 0 ); -/* - if( w2 % 2 ) - w2++; -*/ - - sprintf( t, "\033*c%dg%dW", patNum, h * w2 + 8 ); - SEND_PCL( outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 0, 0, 1, 0, h>>8, h&0xff, w>>8, - w&0xff ); - SEND_PCL_COUNT( outFile, t, 8 ); - - for( row = bits, i = 0; i < h; i++, row += BitmapBytePad( w ) ) - SEND_PCL_COUNT( outFile, row, w2 ); - } - else if( depth == 8 ) - { - w2 = ( w % 2 ) ? w + 1 : w; - - sprintf( t, "\033*c%dg%dW", patNum, h * w2 + 8 ); - SEND_PCL( outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 1, 0, 8, 0, h>>8, h&0xff, - w>>8, w&0xff ); - SEND_PCL_COUNT( outFile, t, 8 ); - - for( row = bits, i = 0; i < h; i++, - row += PixmapBytePad( w, 8 ) ) - SEND_PCL_COUNT( outFile, row, w2 ); - } - else - { - w2 = ( w % 2 ) ? w + 1 : w; - - sprintf( t, "\033*c%dg%dW", patNum, h * w2 + 8 ); - SEND_PCL( outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 1, 0, 8, 0, h>>8, h&0xff, - w>>8, w&0xff ); - SEND_PCL_COUNT( outFile, t, 8 ); - - mod = (char *)xalloc( w2 ); - - for( row = bits, i = 0; i < h; i++, - row += PixmapBytePad( w, 24 ) ) - { - char r, g, b; - for( j = 0; j < w2; j++ ) { - r = ((row[j*4+1] >> 5) & 0x7) << 5; - g = ((row[j*4+2] >> 5) & 0x7) << 2; - b = ((row[j*4+3] >> 6) & 0x3); - mod[j] = r | g | b; - } - SEND_PCL_COUNT( outFile, mod, w2 ); - } - - xfree( mod ); - } - - SEND_PCL( outFile, "\033%0B" ); -} - -int -PclUpdateDrawableGC( - GCPtr pGC, - DrawablePtr pDrawable, - FILE **outFile) -{ - Mask changeMask = 0; - GC dGC; - unsigned long valid; - int i; - XpContextPtr pCon; - PclContextPrivPtr cPriv; - PclGCPrivPtr gcPriv = (PclGCPrivPtr) - dixLookupPrivate(&pGC->devPrivates, PclGCPrivateKey); - - if( !PclGetDrawablePrivateStuff( pDrawable, &dGC, &valid, outFile ) ) - return FALSE; - - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Here's where we update the colormap. Since there can be - * different colormaps installed on each window, we need to check - * before each drawing request that the correct palette is active in - * the printer. This is as good a place as any. - */ - if( !PclUpdateColormap( pDrawable, pCon, pGC, *outFile ) ) - return FALSE; - - /* - * If the drawable's last GC is NULL, this means that this is - * the first time the drawable is being used. Therefore, we need - * to emit PCL for all the GC fields. - */ - if( valid == 0 ) - changeMask = ~0; - - /* - * If we have two different GC structures, there is no alternative - * but to scan through them both to determine the changeMask. - */ - else - { - if( dGC.alu != pGC->alu ) - changeMask |= GCFunction; - if( dGC.fgPixel != pGC->fgPixel ) - changeMask |= GCForeground; - if( dGC.bgPixel != pGC->bgPixel ) - changeMask |= GCBackground; - if( dGC.lineWidth != pGC->lineWidth ) - changeMask |= GCLineWidth; - if( dGC.lineStyle != pGC->lineStyle ) - changeMask |= GCLineStyle; - if( dGC.capStyle != pGC->capStyle ) - changeMask |= GCCapStyle; - if( dGC.joinStyle != pGC->joinStyle ) - changeMask |= GCJoinStyle; - if( dGC.fillStyle != pGC->fillStyle ) - changeMask |= GCFillStyle; - if( dGC.tile.pixmap != pGC->tile.pixmap ) - changeMask |= GCTile; - if( dGC.stipple != pGC->stipple ) - changeMask |= GCStipple; - if( dGC.patOrg.x != pGC->patOrg.x ) - changeMask |= GCTileStipXOrigin; - if( dGC.patOrg.y != pGC->patOrg.y ) - changeMask |= GCTileStipYOrigin; - - if( dGC.numInDashList == pGC->numInDashList ) - { - for( i = 0; i < dGC.numInDashList; i++ ) - if( cPriv->dash[i] != pGC->dash[i] ) - { - changeMask |= GCDashList; - break; - } - } - else - changeMask |= GCDashList; - } - - /* - * Once the changeMask has been determined, we scan it and emit - * the appropriate PCL code to set the drawing attributes. - */ - - /* Must be in HP-GL/2 mode to set attributes */ - SEND_PCL( *outFile, "\033%0B" ); - - if( changeMask & GCFunction ) - { -#ifdef XP_PCL_COLOR - - if( pGC->alu == GXclear ) - SEND_PCL( *outFile, "SP0;" ); - else - SEND_PCL( *outFile, "SP1;" ); -#else - if( pGC->alu == GXclear ) - SEND_PCL( *outFile, "SP0;" ); - else - SEND_PCL( *outFile, "SP1;" ); -#endif /* XP_PCL_COLOR */ - } - -#if 0 - if( changeMask & GCFunction ) - { - int rop = -1; - char t[10]; - - switch( pGC->alu ) - { - case GXclear: - rop = 1; - break; - case GXand: - rop = 136; - break; - case GXandReverse: - rop = 68; - break; - case GXcopy: - rop = 204; - break; - case GXandInverted: - rop = 34; - break; - case GXnoop: - rop = 170; - break; - case GXxor: - rop = 238; - break; - case GXor: - rop = 238; - break; - case GXnor: - rop = 17; - break; - case GXequiv: - rop = 153; - break; - case GXinvert: - rop = 85; - break; - case GXorReverse: - rop = 221; - break; - case GXcopyInverted: - rop = 51; - break; - case GXorInverted: - rop = 187; - break; - case GXnand: - rop = 119; - break; - case GXset: - rop = 0; - break; - } - if( rop != -1 ) - { - sprintf( t, "MC1,%d;", rop ); - SEND_PCL( *outFile, t ); -#endif - - if( changeMask & GCForeground ) - switch( pGC->fgPixel ) - { - case 1: - SEND_PCL( *outFile, "SP1;" ); - break; - default: - SEND_PCL( *outFile, "SP0;" ); - break; - } - - if( changeMask & GCForeground ) - { -#ifdef XP_PCL_COLOR - ColormapPtr cmap; - Colormap c; - char t[40]; - - c = wColormap( ((WindowPtr)pDrawable) ); - cmap = (ColormapPtr)LookupIDByType( c, RT_COLORMAP ); - - if( cmap->class == TrueColor ) - { - if( pGC->fillStyle != FillTiled || pGC->tileIsPixel ) { - unsigned short r, g, b; - - r = (pGC->fgPixel & cmap->pVisual->redMask) - >> (cmap->pVisual->offsetRed ); - g = (pGC->fgPixel & cmap->pVisual->greenMask) - >> (cmap->pVisual->offsetGreen); - b = (pGC->fgPixel & cmap->pVisual->blueMask) - >> (cmap->pVisual->offsetBlue); - - PclLookUp(cmap, cPriv, &r, &g, &b); - sprintf( t, "\033%%0A\033*v%ua%ub%uc0I\033%%0B", r, g, b); - SEND_PCL( *outFile, t ); - } - } - else /* PseudoColor or StaticGray */ - { - sprintf( t, "SP%ld;", (long) pGC->fgPixel ); - SEND_PCL( *outFile, t ); - } -#else - ScreenPtr screen; - screen = pDrawable->pScreen; - if ( pGC->fgPixel == screen->whitePixel ) - SEND_PCL( *outFile, "SP0;"); - else - SEND_PCL( *outFile, "SP1;"); -#endif /* XP_PCL_COLOR */ - } - - if( changeMask & GCJoinStyle ) - switch( pGC->joinStyle ) - { - case JoinMiter: - SEND_PCL( *outFile, "LA2,1;" ); - break; - case JoinRound: - SEND_PCL( *outFile, "LA2,4;" ); - break; - case JoinBevel: - SEND_PCL( *outFile, "LA2,5;" ); - break; - } - - if( changeMask & GCCapStyle ) - switch( pGC->capStyle ) - { - case CapNotLast: - case CapButt: - SEND_PCL( *outFile, "LA1,1;" ); - break; - case CapRound: - SEND_PCL( *outFile, "LA1,4;" ); - break; - case CapProjecting: - SEND_PCL( *outFile, "LA1,2;" ); - break; - } - - if( changeMask & GCLineWidth ) - { - float penWidth, pixelsPerMM; - ScreenPtr screen; - char temp[30]; - - if( pGC->lineWidth == 0 || pGC->lineWidth == 1 ) - /* A pen width of 0.0 mm gives a one-pixel-wide line */ - penWidth = 0.0; - else - { - screen = pDrawable->pScreen; - pixelsPerMM = (float)screen->width / (float)screen->mmWidth; - - penWidth = pGC->lineWidth / pixelsPerMM; - } - sprintf( temp, "PW%g;", penWidth ); - SEND_PCL( *outFile, temp ); - } - - if( changeMask & GCLineStyle ) - { - int i, num = pGC->numInDashList; - double total; - char t[30]; - - switch( pGC->lineStyle ) - { - case LineSolid: - SEND_PCL( *outFile, "LT;" ); - break; - case LineOnOffDash: - /* - * Calculate the pattern length of the dashes, in pixels, - * then convert to mm - */ - for( i = 0, total = 0.0; i < 20 && i < num; i++ ) - total += pGC->dash[i]; - if( num % 2 ) - for( i = num; i < 20 && i < num + num; i++ ) - total += pGC->dash[i-num]; - - total *= ( (double)pDrawable->pScreen->mmWidth / - (double)pDrawable->pScreen->width ); - - sprintf( t, "LT8,%f,1;", total ); - SEND_PCL( *outFile, t ); - break; - } - } - - - if( changeMask & GCFillStyle ) - switch( pGC->fillStyle ) - { - case FillSolid: - SEND_PCL( *outFile, "FT1;TR0;CF;" ); - break; - case FillTiled: - SEND_PCL( *outFile, "FT22,100;TR0;CF2,0;" ); - break; - case FillOpaqueStippled: - SEND_PCL( *outFile, "FT22,101;TR0;CF2,0;" ); - if( pGC->fgPixel != gcPriv->stippleFg || - pGC->bgPixel != gcPriv->stippleBg ) - changeMask |= GCStipple; - break; - case FillStippled: - SEND_PCL( *outFile, "FT22,102;TR1;CF2,0;" ); - break; - } - - if( changeMask & GCTile && !pGC->tileIsPixel ) - { - char *bits; - int h, w, sz; - - h = pGC->tile.pixmap->drawable.height; - w = pGC->tile.pixmap->drawable.width; - - sz = h * PixmapBytePad(w, pGC->tile.pixmap->drawable.depth); - bits = (char *)xalloc(sz); - fbGetImage(&(pGC->tile.pixmap->drawable), 0, 0, w, h, XYPixmap, ~0, - bits); - PclSendPattern( bits, sz, 1, h, w, 100, *outFile ); - xfree( bits ); - } - - if( changeMask & ( GCTileStipXOrigin | GCTileStipYOrigin ) ) - { - char t[30]; - - sprintf( t, "AC%d,%d;", pGC->patOrg.x, pGC->patOrg.y ); - SEND_PCL( *outFile, t ); - } - - /* - * We have to resend the stipple pattern either when the stipple itself - * changes, or if we're in FillOpaqueStippled mode and either the - * foreground or the background color changes. - */ - if( changeMask & GCStipple || - ( pGC->fillStyle == FillOpaqueStippled && - ( pGC->fgPixel != gcPriv->stippleFg || - pGC->bgPixel != gcPriv->stippleBg ) ) ) - { - int h, w, i, sz, w2; - char *bits, *row, t[30]; - PixmapPtr scratchPix; - GCPtr scratchGC; - - if( pGC->stipple != NULL ) - { - SEND_PCL( *outFile, "\033%0A" ); - - h = pGC->stipple->drawable.height; - w = pGC->stipple->drawable.width; - sz = h * BitmapBytePad( w ); - - bits = (char *)xalloc( sz ); - fbGetImage( &(pGC->stipple->drawable), 0, 0, w, h, XYPixmap, ~0, bits ); - - w2 = ( w / 8 ) + ( ( w%8 ) ? 1 : 0 ); - /* - * XXX The PCL docs say that I need to word-align each - * XXX row, but I get garbage when I do... - */ - /* - if( w2 % 2 ) - w2++; - */ - - sprintf( t, "\033*c102g%dW", h * w2 + 8 ); - SEND_PCL( *outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 0, 0, 1, 0, h>>8, h&0xff, w>>8, - w&0xff ); - SEND_PCL_COUNT( *outFile, t, 8 ); - - for( row = bits, i = 0; i < h; i++, row += BitmapBytePad( w ) ) - SEND_PCL_COUNT( *outFile, row, w2 ); - - SEND_PCL( *outFile, "\033%0B" ); - - xfree( bits ); - - /* - * Also do the opaque stipple, as a tile - */ - if( pGC->depth != 1 ) - sz = h * PixmapBytePad( w, pGC->depth ); - bits = (char *)xalloc( sz ); - - scratchPix = - (*pGC->pScreen->CreatePixmap)( pGC->pScreen, - w, h, pGC->depth, - CREATE_PIXMAP_USAGE_SCRATCH ); - scratchGC = GetScratchGC( pGC->depth, pGC->pScreen ); - CopyGC( pGC, scratchGC, ~0L ); - - fbValidateGC(scratchGC, ~0L, (DrawablePtr)scratchPix); - fbCopyPlane(&(pGC->stipple->drawable), (DrawablePtr)scratchPix, - scratchGC, 0, 0, w, h, 0, 0, 1); - fbGetImage(&(scratchPix->drawable), 0, 0, w, h, XYPixmap, ~0, - bits); - PclSendPattern( bits, sz, pGC->depth, h, w, 101, *outFile ); - FreeScratchGC( scratchGC ); - (*pGC->pScreen->DestroyPixmap)( scratchPix ); - xfree( bits ); - } - } - - if( changeMask & ( GCTileStipXOrigin | GCTileStipYOrigin ) ) - { - char t[30]; - - sprintf( t, "AC%d,%d;", pGC->patOrg.x, pGC->patOrg.y ); - SEND_PCL( *outFile, t ); - } - - if( changeMask & GCDashList ) - { - int num = pGC->numInDashList; - double total; - char dashes[20]; - char t[100], t2[20]; - - /* Make up the doubled dash list, if necessary */ - for( i = 0; i < 20 && i < num; i++ ) - dashes[i] = pGC->dash[i]; - - if( num % 2 ) - { - for( i = num; i < 20 && i < num + num; i++ ) - dashes[i] = dashes[i-num]; - if( ( num *= 2 ) > 20 ) - num = 20; - } - - /* Add up dash lengths to get percentage */ - for( i = 0, total = 0; i < num; i++ ) - total += dashes[i]; - - /* Build up the HP-GL/2 for the dash list */ - strcpy( t, "UL8" ); - for( i = 0; i < num; i++ ) - { - sprintf( t2, ",%d", - (int)( ( (double)dashes[i] / total * 100.0 ) + 0.5 ) ); - strcat( t, t2 ); - } - strcat( t, ";" ); - SEND_PCL( *outFile, t ); - } - - - /* Go back to PCL mode */ - SEND_PCL( *outFile, "\033%0A" ); - - /* - * Update the drawable's private information, which includes - * erasing the drawable's private changeMask, since all the - * changes have been made. - */ - if( changeMask ) - PclSetDrawablePrivateGC( pDrawable, *pGC ); - - return TRUE; -} - -/* - * PclComputeCompositeClip() - * - * I'd like to use the miComputeCompositeClip function, but it sticks - * things into the mi GC privates, where the PCL driver can't get at - * it. So, rather than mess around with the mi code, I ripped it out - * and made the appropriate changes here. - */ - - -void -PclComputeCompositeClip( - GCPtr pGC, - DrawablePtr pDrawable) -{ - if (pDrawable->type == DRAWABLE_WINDOW) - { - WindowPtr pWin = (WindowPtr) pDrawable; - RegionPtr pregWin; - Bool freeTmpClip, freeCompClip; - - if (pGC->subWindowMode == IncludeInferiors) - { - pregWin = NotClippedByChildren(pWin); - freeTmpClip = TRUE; - } - else - { - pregWin = &pWin->clipList; - freeTmpClip = FALSE; - } - freeCompClip = pGC->freeCompClip; - - /* - * if there is no client clip, we can get by with just keeping the - * pointer we got, and remembering whether or not should destroy (or - * maybe re-use) it later. this way, we avoid unnecessary copying of - * regions. (this wins especially if many clients clip by children - * and have no client clip.) - */ - if (pGC->clientClipType == CT_NONE) - { - if (freeCompClip) - REGION_DESTROY(pGC->pScreen, pGC->pCompositeClip); - pGC->pCompositeClip = pregWin; - pGC->freeCompClip = freeTmpClip; - } - else - { - /* - * we need one 'real' region to put into the composite clip. if - * pregWin the current composite clip are real, we can get rid of - * one. if pregWin is real and the current composite clip isn't, - * use pregWin for the composite clip. if the current composite - * clip is real and pregWin isn't, use the current composite - * clip. if neither is real, create a new region. - */ - - REGION_TRANSLATE(pGC->pScreen, pGC->clientClip, - pDrawable->x + pGC->clipOrg.x, - pDrawable->y + pGC->clipOrg.y); - - if (freeCompClip) - { - REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip, - pregWin, pGC->clientClip); - if (freeTmpClip) - REGION_DESTROY(pGC->pScreen, pregWin); - } - else if (freeTmpClip) - { - REGION_INTERSECT(pGC->pScreen, pregWin, pregWin, - pGC->clientClip); - pGC->pCompositeClip = pregWin; - } - else - { - pGC->pCompositeClip = REGION_CREATE(pGC->pScreen, NullBox, 0); - REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip, - pregWin, pGC->clientClip); - } - pGC->freeCompClip = TRUE; - REGION_TRANSLATE(pGC->pScreen, pGC->clientClip, - -(pDrawable->x + pGC->clipOrg.x), - -(pDrawable->y + pGC->clipOrg.y)); - } - } /* end of composite clip for a window */ - else - { - BoxRec pixbounds; - - /* XXX should we translate by drawable.x/y here ? */ - pixbounds.x1 = 0; - pixbounds.y1 = 0; - pixbounds.x2 = pDrawable->width; - pixbounds.y2 = pDrawable->height; - - if (pGC->freeCompClip) - { - REGION_RESET(pGC->pScreen, pGC->pCompositeClip, &pixbounds); - } - else - { - pGC->freeCompClip = TRUE; - pGC->pCompositeClip = REGION_CREATE(pGC->pScreen, &pixbounds, 1); - } - - if (pGC->clientClipType == CT_REGION) - { - REGION_TRANSLATE(pGC->pScreen, pGC->pCompositeClip, - -pGC->clipOrg.x, -pGC->clipOrg.y); - REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip, - pGC->pCompositeClip, pGC->clientClip); - REGION_TRANSLATE(pGC->pScreen, pGC->pCompositeClip, - pGC->clipOrg.x, pGC->clipOrg.y); - } - } /* end of composite clip for pixmap */ -} - -/* - * PclValidateGC() - * - * Unlike many screen GCValidate routines, this function should not need - * to mess with setting the drawing functions. Different drawing - * functions are usually needed to optimize such things as drawing - * wide or dashed lines; this functionality will be handled primarily - * by the printer itself, while the necessary PCL code to set the - * attributes will be done in PclUpdateDrawableGC(). - */ - -/*ARGSUSED*/ -void -PclValidateGC( - GCPtr pGC, - unsigned long changes, - DrawablePtr pDrawable) -{ - /* - * Pixmaps should be handled by their respective validation - * functions. - */ - if( pDrawable->type == DRAWABLE_PIXMAP ) - { - fbValidateGC(pGC, ~0, pDrawable); - return; - } - - /* - * Reset the drawing operations - */ - pGC->ops = &PclGCOps; - - /* - * Validate the information, and correct it if necessary. - */ - - /* - * If necessary, compute the composite clip region. (Code ripped - * from migc.c) - */ - if ((changes & (GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode)) || - (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)) - ) - { - PclComputeCompositeClip(pGC, pDrawable); - } - - /* - * PCL does not directly support the DoubleDash line style, nor is - * there an easy way to simulate it, so we'll just change it to a - * LineOnOffDash, which is supported by PCL. - */ - if( ( changes & GCLineStyle ) && ( pGC->lineStyle == LineDoubleDash ) ) - pGC->lineStyle = LineOnOffDash; - - /* - * Update the drawable's changeMask to reflect the changes made to the GC. - */ -/* - PclSetDrawablePrivateGC( pDrawable, *pGC, changes ); -*/ -} diff --git a/hw/xprint/pcl/PclInit.c b/hw/xprint/pcl/PclInit.c deleted file mode 100644 index e738e3e54..000000000 --- a/hw/xprint/pcl/PclInit.c +++ /dev/null @@ -1,575 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclInit.c -** * -** * Contents: -** * Initialization code of Pcl driver for the print server. -** * -** * Created: 1/30/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "Pcl.h" - -#include "fb.h" -#include /* for unlink() */ - -#include "attributes.h" -#include "DiPrint.h" - -#define MODELDIRNAME "/models" - -static void AllocatePclPrivates(ScreenPtr pScreen); -static int PclInitContext(XpContextPtr pCon); -static Bool PclDestroyContext(XpContextPtr pCon); - -DevPrivateKey PclScreenPrivateKey = &PclScreenPrivateKey; -DevPrivateKey PclContextPrivateKey = &PclContextPrivateKey; -DevPrivateKey PclPixmapPrivateKey = &PclPixmapPrivateKey; -DevPrivateKey PclWindowPrivateKey = &PclWindowPrivateKey; -DevPrivateKey PclGCPrivateKey = &PclGCPrivateKey; - -#ifdef XP_PCL_COLOR -/* - * The supported visuals on this screen - */ -static VisualRec Visuals[] = -{ - { 1, StaticGray, 1, 2, 1, 0, 0, 0, 0, 0, 0 }, - { 2, PseudoColor, 8, 256, 8, 0, 0, 0, 0, 0, 0 }, - { 3, TrueColor, 8, 256, 24, 0xFF0000, 0xFF00, 0xFF, 16, 8, 0 } -}; - -/* - * The supported depths on this screen - */ -static DepthRec Depths[] = -{ - { 1, 1, NULL }, - { 8, 1, NULL }, - { 24, 1, NULL } -}; -#else -/* - * The supported visuals on this screen - */ -static VisualRec Visuals[] = -{ - { 1, StaticGray, 1, 2, 1, 0, 0, 0, 0, 0, 0} -}; - -/* - * The supported depths on this screen - */ -static DepthRec Depths[] = -{ - { 1, 1, NULL } -}; -#endif /* XP_PCL_COLOR */ - - -#define NUM_VISUALS(visuals) (sizeof(visuals) / sizeof(VisualRec)) -#define NUM_DEPTHS(depths) (sizeof(depths) / sizeof(DepthRec)) - -Bool -PclCloseScreen(int index, - ScreenPtr pScreen) -{ - PclScreenPrivPtr pPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PclScreenPrivateKey); - - pScreen->CloseScreen = pPriv->CloseScreen; - xfree( pPriv ); - - return (*pScreen->CloseScreen)(index, pScreen); -} - -Bool -InitializePclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv) -{ - int maxRes, xRes, yRes, maxDim; - unsigned i; - PclScreenPrivPtr pPriv; - - /* - * Register this driver's InitContext function with the print - * extension. This is a bit sleazy, as the extension hasn't yet - * been initialized, but the extensionneeds to know this, and this - * seems the best time to provide the information. - */ -#ifdef XP_PCL_COLOR - XpRegisterInitFunc( pScreen, "XP-PCL-COLOR", PclInitContext ); -#elif XP_PCL_MONO - XpRegisterInitFunc( pScreen, "XP-PCL-MONO", PclInitContext ); -#else - XpRegisterInitFunc( pScreen, "XP-PCL-LJ3", PclInitContext ); -#endif /* XP_PCL_MONO */ - - /* - * Create and fill in the devPrivate for the PCL driver. - */ - AllocatePclPrivates(pScreen); - - pPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PclScreenPrivateKey); - - maxDim = MAX( pScreen->height, pScreen->width ); - xRes = pScreen->width / ( pScreen->mmWidth / 25.4 ); - yRes = pScreen->height / ( pScreen->mmHeight / 25.4 ); - maxRes = MAX( xRes, yRes ); - -#ifdef XP_PCL_COLOR - fbScreenInit( pScreen, NULL, maxDim, maxDim, maxRes, maxRes, - maxRes, 8 ); /* XXX what's the depth here? */ - /* Clean up the fields that we stomp (code taken from fbCloseScreen) */ - for( i = 0; (int) i < pScreen->numDepths; i++ ) - xfree( pScreen->allowedDepths[i].vids ); - xfree( pScreen->allowedDepths ); - xfree( pScreen->visuals ); -#else - fbScreenInit( pScreen, NULL, maxDim, maxDim, maxRes, maxRes, - maxRes, 1 ); -#endif /* XP_PCL_COLOR */ - - miInitializeBackingStore ( pScreen ); - - pScreen->defColormap = FakeClientID(0); - pScreen->blackPixel = 1; - pScreen->whitePixel = 0; - - pPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = PclCloseScreen; - - pScreen->QueryBestSize = (QueryBestSizeProcPtr)PclQueryBestSize; - pScreen->SaveScreen = (SaveScreenProcPtr)_XpBoolNoop; - pScreen->GetImage = (GetImageProcPtr)_XpVoidNoop; - pScreen->GetSpans = (GetSpansProcPtr)_XpVoidNoop; - pScreen->CreateWindow = PclCreateWindow; - pScreen->DestroyWindow = PclDestroyWindow; -/* - pScreen->PositionWindow = PclPositionWindow; -*/ - pScreen->ChangeWindowAttributes = PclChangeWindowAttributes; -/* - pScreen->RealizeWindow = PclMapWindow; - pScreen->UnrealizeWindow = PclUnmapWindow; -*/ - pScreen->CopyWindow = PclCopyWindow; /* XXX Hard routine to write! */ - - pScreen->CreatePixmap = fbCreatePixmap; - pScreen->DestroyPixmap = fbDestroyPixmap; - pScreen->RealizeFont = PclRealizeFont; - pScreen->UnrealizeFont = PclUnrealizeFont; - pScreen->CreateGC = PclCreateGC; - - pScreen->CreateColormap = PclCreateColormap; - pScreen->DestroyColormap = PclDestroyColormap; - pScreen->InstallColormap = (InstallColormapProcPtr)NoopDDA; - pScreen->UninstallColormap = (UninstallColormapProcPtr)NoopDDA; - pScreen->ListInstalledColormaps = PclListInstalledColormaps; - pScreen->StoreColors = PclStoreColors; -/* - pScreen->ResolveColor = PclResolveColor; -*/ - - pScreen->BitmapToRegion = fbPixmapToRegion; - - pScreen->ConstrainCursor = PclConstrainCursor; - pScreen->CursorLimits = PclCursorLimits; - pScreen->DisplayCursor = PclDisplayCursor; - pScreen->RealizeCursor = PclRealizeCursor; - pScreen->UnrealizeCursor = PclUnrealizeCursor; - pScreen->RecolorCursor = PclRecolorCursor; - pScreen->SetCursorPosition = PclSetCursorPosition; - - pScreen->visuals = Visuals; - pScreen->numVisuals = NUM_VISUALS( Visuals ); - pScreen->allowedDepths = Depths; - pScreen->numDepths = NUM_DEPTHS( Depths ); - - for( i = 0; i < NUM_DEPTHS( Depths ); i++ ) - { - pScreen->allowedDepths[i].vids = - (VisualID *)xalloc( sizeof(VisualID ) ); - pScreen->allowedDepths[i].vids[0] = i + 1; - } - -#ifdef XP_PCL_COLOR - pScreen->rootVisual = 2; - pScreen->rootDepth = 8; -#else - pScreen->rootVisual = 1; - pScreen->rootDepth = 1; -#endif /* XP_PCL_COLOR */ - - pPriv->colormaps = NULL; - PclCreateDefColormap( pScreen ); - - return TRUE; -} - -static void -AllocatePclPrivates(ScreenPtr pScreen) -{ - dixRequestPrivate(PclWindowPrivateKey, sizeof( PclWindowPrivRec ) ); - dixRequestPrivate(PclContextPrivateKey, sizeof( PclContextPrivRec ) ); - dixRequestPrivate(PclGCPrivateKey, sizeof( PclGCPrivRec ) ); - dixRequestPrivate(PclPixmapPrivateKey, sizeof( PclPixmapPrivRec ) ); - - dixSetPrivate(&pScreen->devPrivates, PclScreenPrivateKey, - xalloc(sizeof(PclScreenPrivRec))); -} - -/* - * PclInitContext - * - * Establish the appropriate values for a PrintContext used with the PCL - * driver. - */ - -static char DOC_ATT_SUPP[]="document-attributes-supported"; -static char DOC_ATT_VAL[]="document-format xp-listfonts-modes"; -static char JOB_ATT_SUPP[]="job-attributes-supported"; -static char JOB_ATT_VAL[]=""; -static char PAGE_ATT_SUPP[]="xp-page-attributes-supported"; -static char PAGE_ATT_VAL[]="content-orientation default-printer-resolution \ -default-input-tray default-medium plex xp-listfonts-modes"; - -static int -PclInitContext(XpContextPtr pCon) -{ - XpDriverFuncsPtr pFuncs; - PclContextPrivPtr pConPriv; - char *server, *attrStr; - char *modelID; - char *configDir; - char *pathName; - int i, j; - float width, height; - XpOidMediumDiscreteSizeList* ds_list; - XpOidArea* repro; - XpOid page_size; - XpOidMediumSS* m; - - /* - * Initialize the attribute store for this printer. - */ - XpInitAttributes( pCon ); - - /* - * Initialize the function pointers - */ - pFuncs = &( pCon->funcs ); - pFuncs->StartJob = PclStartJob; - pFuncs->EndJob = PclEndJob; - pFuncs->StartDoc = PclStartDoc; - pFuncs->EndDoc = PclEndDoc; - pFuncs->StartPage = PclStartPage; - pFuncs->EndPage = PclEndPage; - pFuncs->PutDocumentData = PclDocumentData; - pFuncs->GetDocumentData = PclGetDocumentData; - pFuncs->GetAttributes = PclGetAttributes; - pFuncs->SetAttributes = PclSetAttributes; - pFuncs->AugmentAttributes = PclAugmentAttributes; - pFuncs->GetOneAttribute = PclGetOneAttribute; - pFuncs->DestroyContext = PclDestroyContext; - pFuncs->GetMediumDimensions = PclGetMediumDimensions; - pFuncs->GetReproducibleArea = PclGetReproducibleArea; - - - /* - * Set up the context privates - */ - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - pConPriv->jobFileName = (char *)NULL; - pConPriv->pageFileName = (char *)NULL; - pConPriv->pJobFile = (FILE *)NULL; - pConPriv->pPageFile = (FILE *)NULL; - pConPriv->dash = NULL; - pConPriv->validGC = 0; - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - modelID = XpGetOneAttribute(pCon, XPPrinterAttr, "xp-model-identifier"); - if ( (configDir = XpGetConfigDir(False)) != (char *) NULL ) { - pathName = (char *)xalloc(strlen(configDir) + strlen(MODELDIRNAME) + - strlen(modelID) + strlen("color.map") + 4); - if (pathName) { - sprintf(pathName, "%s/%s/%s/%s", configDir, MODELDIRNAME, modelID, - "color.map"); - pConPriv->ctbl = PclReadMap(pathName, &pConPriv->ctbldim); - xfree(pathName); - - } else - pConPriv->ctbl = NULL; - } else - pConPriv->ctbl = NULL; - -#ifdef XP_PCL_LJ3 - /* - * Initialize the spooling buffer for saving the figures temporary - * (LaserJet IIIs printers don't support the macro function which - * includes some HP-GL/2 commands.) - */ - pConPriv->fcount = 0; - if ( !(pConPriv->figures = (char *)xalloc(1024)) ) - pConPriv->fcount_max = 0; - else - pConPriv->fcount_max = 1024; -#endif /* XP_PCL_LJ3 */ - - /* - * document-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, DOC_ATT_SUPP ); - if( ( attrStr = (char *)xalloc(strlen(server) + strlen(DOC_ATT_SUPP) - + strlen(DOC_ATT_VAL) + - strlen(PAGE_ATT_VAL) + 8 ) ) - == (char *)NULL ) - return BadAlloc; - sprintf( attrStr, "*%s:\t%s %s %s", DOC_ATT_SUPP, server, - DOC_ATT_VAL, PAGE_ATT_VAL ); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr ); - xfree( attrStr ); - - /* - * job-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP ); - if( ( attrStr = (char *)xalloc(strlen(server) + strlen(JOB_ATT_SUPP) - + strlen(JOB_ATT_VAL) + 8 ) ) - == (char *)NULL ) - return BadAlloc; - sprintf( attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL ); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr ); - xfree( attrStr ); - - /* - * xp-page-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP ); - if( ( attrStr = (char *)xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) - + strlen(PAGE_ATT_VAL) + 8 ) ) - == (char *)NULL ) - return BadAlloc; - sprintf( attrStr, "*%s:\t%s %s", PAGE_ATT_SUPP, server, PAGE_ATT_VAL ); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr ); - xfree( attrStr ); - - /* - * Validate the attribute pools - */ - XpValidateAttributePool( pCon, XPPrinterAttr, &PclValidatePoolsRec ); - - /* - * Munge the reproducible areas to reflect the fact that PCL will not let - * me move the right or left margins closer than .25" to the edge of the - * paper. - */ - m = XpGetMediumSSAttr( pCon, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*) NULL, - (const XpOidList*) NULL ); - for( i = 0; i < XpOidMediumSSCount( m ); i++ ) - { - if( XpOidMediumSS_DISCRETE == (m->mss)[i].mstag ) - { - ds_list = (m->mss)[i].ms.discrete; - for( j = 0; j < ds_list->count; j++ ) - { - repro = &(ds_list->list)[j].assured_reproduction_area; - page_size = (ds_list->list)[j].page_size; - XpGetMediumMillimeters( page_size, &width, &height ); - - if( repro->minimum_x < 6.35 ) - repro->minimum_x = 6.35; - if( width - repro->maximum_x < 6.35 ) - repro->maximum_x = width - 6.35; - } - } - } - XpPutMediumSSAttr( pCon, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, m ); - XpOidMediumSSDelete( m ); - - /* - * Finish validating the attribute pools - */ - - XpValidateAttributePool( pCon, XPDocAttr, &PclValidatePoolsRec ); - XpValidateAttributePool( pCon, XPJobAttr, &PclValidatePoolsRec ); - XpValidateAttributePool( pCon, XPPageAttr, &PclValidatePoolsRec ); - - /* - * Clear out the colormap storage - */ - pConPriv->palettes = NULL; - - return Success; -} - -static Bool -PclDestroyContext(XpContextPtr pCon) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - PclPaletteMapPtr p, t; - PclCmapToContexts *pCmap; - ScreenPtr screen; - PclScreenPrivPtr sPriv; - PclContextListPtr con, prevCon, temp; - - - /* - * Clean up the temporary files - */ - if( pConPriv->pPageFile != (FILE *)NULL ) - { - fclose( pConPriv->pPageFile ); - pConPriv->pPageFile = (FILE *)NULL; - } - if( pConPriv->pageFileName != (char *)NULL ) - { - unlink( pConPriv->pageFileName ); - xfree( pConPriv->pageFileName ); - pConPriv->pageFileName = (char *)NULL; - } - - if( pConPriv->pJobFile != (FILE *)NULL ) - { - fclose( pConPriv->pJobFile ); - pConPriv->pJobFile = NULL; - } - if( pConPriv->jobFileName != (char *)NULL ) - { - unlink( pConPriv->jobFileName ); - xfree( pConPriv->jobFileName ); - pConPriv->jobFileName = (char *)NULL; - } - - xfree( pConPriv->dash ); - xfree(pConPriv->ctbl); - pConPriv->ctbl = NULL; -#ifdef XP_PCL_LJ3 - xfree( pConPriv->figures ); -#endif /* XP_PCL_LJ3 */ - - /* - * Destroy the colormap<->palette mappings - */ - p = pConPriv->palettes; - while( p ) - { - t = p; - p = p->next; - xfree( t ); - } - pConPriv->palettes = NULL; - - /* - * Remove the context from the screen-level colormap<->contexts mappings - */ - screen = screenInfo.screens[pCon->screenNum]; - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&screen->devPrivates, PclScreenPrivateKey); - pCmap = sPriv->colormaps; - while( pCmap ) - { - con = pCmap->contexts; - prevCon = NULL; - - while( con ) - { - if( con->context->contextID == pCon->contextID ) - { - if( prevCon ) - { - temp = con; - prevCon->next = con = con->next; - } - else - { - temp = pCmap->contexts; - pCmap->contexts = con = con->next; - } - xfree( temp ); - } - else - con = con->next; - } - - pCmap = pCmap->next; - } - - XpDestroyAttributes(pCon); - - return Success; -} - -XpContextPtr -PclGetContextFromWindow(WindowPtr win) -{ - PclWindowPrivPtr pPriv; - - while( win ) - { - pPriv = (PclWindowPrivPtr) - dixLookupPrivate(&win->devPrivates, PclWindowPrivateKey); - if( pPriv->validContext ) - return pPriv->context; - - win = win->parent; - } - - return NULL; -} diff --git a/hw/xprint/pcl/PclLine.c b/hw/xprint/pcl/PclLine.c deleted file mode 100644 index 68d55a525..000000000 --- a/hw/xprint/pcl/PclLine.c +++ /dev/null @@ -1,314 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclLine.c -** * -** * Contents: -** * Line drawing routines for the PCL driver -** * -** * Created: 10/11/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -/* - * PclPolyLine() - * PclPolySegment() - * - * Generates PCL code to draw a polyline, or a collection of distinct - * line segments, clipped by the current clip region. Since PCL - * supports clipping to a rectangle, and the clip region is - * represented as a collection of visible rectangles, we can draw and - * clip the line by repeatedly drawing the complete line, clipped to - * each rectangle in the clip region. - * - * Since each box in the clipping region generates approximately 30 - * bytes of PCL code, we have to have a way to avoid having a large - * number of boxes. The worst problem the case where the clipping - * region is a collection of one-pixel-high boxes, perhaps arising - * from a bitmap clip mask, or a region defined by a non-rectangular - * polygon. - * - * To alleviate this problem, we create a second clipping region, - * which consists of the union of the bounding boxes of each line - * segment. (Each bounding box is also increased by some amount - * related to the current line width to allow for non-zero-width - * lines, and for the various end and join styles.) This region is - * intersected with the "real" clipping region to get the region used - * to actually clip the polyline. This should result in a significant - * reduction in the number of clip rectangles, as the region-handling - * code should consolidate many of the fragments of one-pixel-high - * rectangles into larger rectangles. - */ - -void -PclPolyLine( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints) -{ - char t[80]; - FILE *outFile; - int xoffset = 0, yoffset = 0; - int nbox; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - short fudge; - int i; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage required to deal with the clipping - * regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *) - xalloc( ( nPoints - 1 ) * sizeof( xRectangle ) ); - - /* - * Calculate the "fudge factor" based on the line width. - * Multiplying by three seems to be a good first guess. - * XXX I need to think of a way to test this. - */ - fudge = 3 * pGC->lineWidth + 1; - - /* - * Generate the PCL code to draw the polyline, by defining it as a - * macro which uses the HP-GL/2 line drawing function. - */ - - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - sprintf( t, "PU%d,%dPD\n", pPoints[0].x + pDrawable->x, - pPoints[0].y + pDrawable->y ); - SAVE_PCL( outFile, pConPriv, t ); /* Move to the start of the polyline */ - - switch( mode ) - { - case CoordModeOrigin: - xoffset = pDrawable->x; - yoffset = pDrawable->y; - SAVE_PCL( outFile, pConPriv, "PA" ); - break; - case CoordModePrevious: - xoffset = yoffset = 0; - SAVE_PCL( outFile, pConPriv, "PR" ); - break; - } - - /* - * Build the "drawing region" as we build the PCL to draw the - * line. - */ - for(i = 1, r = drawRects; i < nPoints; i++, r++ ) - { - if( i != 1 ) - SAVE_PCL( outFile, pConPriv, "," ); - - sprintf( t, "%d,%d", pPoints[i].x + xoffset, - pPoints[i].y + yoffset ); - SAVE_PCL( outFile, pConPriv, t ); - - r->x = MIN( pPoints[i-1].x, pPoints[i].x ) + xoffset - fudge; - r->y = MIN( pPoints[i-1].y, pPoints[i].y ) + yoffset - fudge; - r->width = abs( pPoints[i-1].x - pPoints[i].x ) + 2 * fudge; - r->height = abs( pPoints[i-1].y - pPoints[i].y ) + 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, ";\033%0A" ); /* End the macro */ - MACRO_END( outFile ); - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nPoints - 1, - drawRects, CT_UNSORTED ); - if( mode == CoordModePrevious ) - REGION_TRANSLATE( pGC->pScreen, drawRegion, pPoints[0].x, pPoints[0].y ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire polyline to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} - -void -PclPolySegment( - DrawablePtr pDrawable, - GCPtr pGC, - int nSegments, - xSegment *pSegments) -{ - FILE *outFile, *dummy; - char t[80]; - int xoffset, yoffset; - int nbox, i; - unsigned long valid; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - short fudge; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - GC cacheGC; - - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage for the temporary regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *) - xalloc( nSegments * sizeof( xRectangle ) ); - - /* - * Calculate the fudge factor, based on the line width - */ - fudge = pGC->lineWidth * 3 + 1; - - /* - * Turn off line joining. - */ - SEND_PCL( outFile, "\033%0BLA2,6;\033%0A" ); - - /* - * Generate the PCL code to draw the segments, by defining them as - * a macro which uses the HP-GL/2 line drawing function. - * - * XXX I wonder if this should be implemented using the Encoded - * XXX Polyline function. Since I'm only sending it once, it's not - * XXX necessarily too important. - */ - - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = drawRects; i < nSegments; i++, r++ ) - { - r->x = MIN( pSegments[i].x1, pSegments[i].x2 ) + xoffset; - r->y = MIN( pSegments[i].y1, pSegments[i].y2 ) + yoffset; - r->width = abs( pSegments[i].x1 - pSegments[i].x2 ); - r->height = abs( pSegments[i].y1 - pSegments[i].y2 ); - - sprintf( t, "PU%d,%d;PD%d,%d;", pSegments[i].x1 + xoffset, - pSegments[i].y1 + yoffset, pSegments[i].x2 + - xoffset, pSegments[i].y2 + yoffset ); - SAVE_PCL( outFile, pConPriv, t ); - - r->x -= fudge; - r->y -= fudge; - r->width += 2 * fudge; - r->height += 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, "\033%0A" ); - MACRO_END ( outFile ); - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nSegments, - drawRects, CT_UNSORTED ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire set of segments to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Now we need to reset the line join mode to whatever it was at before. - * The easiest way is to force the cached GC's joinstyle to be different - * from the current GC's joinstyle, then re-update the GC. This way, we - * don't have to duplicate code unnecessarily. - */ - PclGetDrawablePrivateStuff( pDrawable, &cacheGC, &valid, &dummy ); - cacheGC.joinStyle = !cacheGC.joinStyle; - PclSetDrawablePrivateGC( pDrawable, cacheGC ); - PclUpdateDrawableGC( pGC, pDrawable, &outFile ); - - /* - * Clean up - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} diff --git a/hw/xprint/pcl/PclMisc.c b/hw/xprint/pcl/PclMisc.c deleted file mode 100644 index 0b37836e9..000000000 --- a/hw/xprint/pcl/PclMisc.c +++ /dev/null @@ -1,301 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclMisc.c -** * -** * Contents: -** * Miscellaneous code for Pcl driver. -** * -** * Created: 2/01/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include /* for SIGCLD on pre-POSIX systems */ -#include "Pcl.h" - -#include "cursor.h" -#include "resource.h" - -#include "windowstr.h" -#include "propertyst.h" -#include "attributes.h" - - -/*ARGSUSED*/ -void -PclQueryBestSize( - int type, - short *pwidth, - short *pheight, - ScreenPtr pScreen) -{ - unsigned width, highBit; - - switch(type) - { - case CursorShape: - *pwidth = 0; - *pheight = 0; - break; - case TileShape: - case StippleShape: - width = *pwidth; - if (!width) break; - /* Return the nearest power of two >= what they gave us */ - highBit = 0x80000000; - /* Find the highest 1 bit in the given width */ - while(!(highBit & width)) - highBit >>= 1; - /* If greater than that then return the next power of two */ - if((highBit - 1) & width) - highBit <<= 1; - *pwidth = highBit; - /* height is a don't-care */ - break; - } -} - -/* - * GetPropString searches the window heirarchy from pWin up looking for - * a property by the name of propName. If found, returns the property's - * value. If not, it returns NULL. - */ -char * -GetPropString( - WindowPtr pWin, - char *propName) -{ - Atom atom; - PropertyPtr pProp = (PropertyPtr)NULL; - char *retVal; - - atom = MakeAtom(propName, strlen(propName), FALSE); - if(atom != BAD_RESOURCE) - { - WindowPtr pPropWin; - int rc, n; - - /* - * The atom has been defined, but it might only exist as a - * property on an unrelated window. - */ - for(pPropWin = pWin; pPropWin != (WindowPtr)NULL; - pPropWin = pPropWin->parent) - { - rc = dixLookupProperty(&pProp, pPropWin, atom, - serverClient, DixReadAccess); - if (rc == Success) - break; - else - pProp = NULL; - } - if(pProp == (PropertyPtr)NULL) - return (char *)NULL; - - n = (pProp->format/8) * pProp->size; /* size (bytes) of prop */ - retVal = (char *)xalloc(n + 1); - (void)memcpy((void *)retVal, (void *)pProp->data, n); - retVal[n] = '\0'; - - return retVal; - } - - return (char *)NULL; -} - -#include -#include - -/* ARGSUSED */ -static void SigchldHndlr ( - int dummy) -{ - int status; - int olderrno = errno; - struct sigaction act; - sigfillset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = SigchldHndlr; - - (void) wait (&status); - - /* - * Is this really necessary? - */ - sigaction(SIGCHLD, &act, (struct sigaction *)NULL); - errno = olderrno; -} - -/* - * SystemCmd provides a wrapper for the 'system' library call. The call - * appears to be sensitive to the handling of SIGCHLD, so this wrapper - * sets the status to SIG_DFL, and then resets the established handler - * after system returns. - */ -int -SystemCmd(char *cmdStr) -{ - int status; - struct sigaction newAct, oldAct; - sigfillset(&newAct.sa_mask); - newAct.sa_flags = 0; - newAct.sa_handler = SIG_DFL; - sigfillset(&oldAct.sa_mask); - oldAct.sa_flags = 0; - oldAct.sa_handler = SigchldHndlr; - - /* - * get the old handler, and set the action to IGN - */ - sigaction(SIGCHLD, &newAct, &oldAct); - - status = system (cmdStr); - - sigaction(SIGCHLD, &oldAct, (struct sigaction *)NULL); - return status; -} - - -/* - * PclGetMediumDimensions is installed in the GetMediumDimensions field - * of each Pcl-initialized context. - */ -int -PclGetMediumDimensions(XpContextPtr pCon, - CARD16 *width, - CARD16 *height) -{ - XpGetMediumDimensions(pCon, width, height); - return Success; -} - -/* - * PclGetReproducibleArea is installed in the GetReproducibleArea field - * of each Pcl-initialized context. - */ -int -PclGetReproducibleArea(XpContextPtr pCon, - xRectangle *pRect) -{ - XpGetReproductionArea(pCon, pRect); - return Success; -} - -#ifdef XP_PCL_LJ3 -/* - * PclSpoolFigs spooled the rendering PCL/HP-GL2 commands into the - * temporary buffer pointed by figures pointer in pcl private context. - * LaserJet IIIs printers don't support the macro function which - * includes some HP-GL/2 commands. - */ -void -PclSpoolFigs(PclContextPrivPtr pConPriv, char *t, int n) -{ -char *ptr; - - ptr = pConPriv->figures; - while ( ( pConPriv->fcount + n) > pConPriv->fcount_max ) { - ptr = (char *)xrealloc(ptr, 1024 + pConPriv->fcount_max); - if ( !ptr ) - return; - pConPriv->figures = ptr; - pConPriv->fcount_max += 1024; - } - ptr += pConPriv->fcount; - pConPriv->fcount += n; - memcpy(ptr, t, n); -} -#endif /* XP_PCL_LJ3 */ - -/* - * PclSendData: - * For XP-PCL-COLOR/XP-PCL-MONO, it executes the macro stored before - * in the clipped area. - * For XP-PCL-LJ3, it draws the spooled figures in the clipped area. - */ -void -PclSendData( - FILE *outFile, - PclContextPrivPtr pConPriv, - BoxPtr pbox, - int nbox, - double ratio -) -{ -char *ptr; -int n; -char t[80]; - -#ifdef XP_PCL_LJ3 - ptr = pConPriv->figures; - n = pConPriv->fcount; -#else - ptr = "\033&f3X"; - n = 5; -#endif /* XP_PCL_LJ3 */ - - while( nbox ) - { - /* - * Set the HP-GL/2 input window to the current - * rectangle in the clip region, then send the code to - * execute the macro defined above. - */ - if (ratio == 1.0) - sprintf( t, "\033%%0BIW%d,%d,%d,%d;\033%%0A", - pbox->x1, pbox->y1, - pbox->x2, pbox->y2 ); - else - sprintf( t, "\033%%0BIW%g,%d,%g,%d;\033%%0A", - ratio * pbox->x1, pbox->y1, - ratio * pbox->x2, pbox->y2 ); - - SEND_PCL( outFile, t ); - SEND_PCL_COUNT( outFile, ptr, n); - - nbox--; - pbox++; - } -} diff --git a/hw/xprint/pcl/PclPixel.c b/hw/xprint/pcl/PclPixel.c deleted file mode 100644 index d219838f0..000000000 --- a/hw/xprint/pcl/PclPixel.c +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclPixel.c -** * -** * Contents: -** * Pixel-drawing code for the PCL DDX driver -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "windowstr.h" -#include "gcstruct.h" - -#include "Pcl.h" - -void -PclPolyPoint( pDrawable, pGC, mode, nPoints, pPoints ) - DrawablePtr pDrawable; - GCPtr pGC; - int mode; - int nPoints; - xPoint *pPoints; -{ - char t[80]; - FILE *outFile; - int xoffset, yoffset; - BoxRec box; - int xloc, yloc, i; -#if 0 - XpContextPtr pCon; - PclContextPrivPtr cPriv; - PclPixmapPrivPtr pPriv; -#endif - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - /* - * Enter HP-GL/2 and change the line style to one in which only - * the vertices of the specified polyline are drawn. We must also - * temporarily change the line width so that only a single pixel - * is drawn. Then move to the first possible location. - */ - xloc = pPoints[0].x + pDrawable->x; - yloc = pPoints[0].y + pDrawable->y; - - sprintf( t, "\27%%0BPW0,0;LT0;PU;PA%d,%d", xloc, yloc ); - SEND_PCL( outFile, t ); - - /* - * Check each point against the clip region. If it is outside the - * region, don't send the PCL to the printer. - */ - - for( i = 0; i < nPoints; i++ ) - { - if( POINT_IN_REGION( pGC->pScreen, pGC->clientClip, xloc, yloc, &box ) ) - { - sprintf( t, ",%d,%d", xloc, yloc ); - SEND_PCL( outFile, t ); - } - - if( mode == CoordModeOrigin ) - { - xloc = pPoints[i+1].x + xoffset; - yloc = pPoints[i+1].y + yoffset; - } - else - { - xloc += pPoints[i+1].x; - yloc += pPoints[i+1].y; - } - } - -#if 0 - /* - * Change the line style and width back to what they were before - * this routine was called. No, this isn't pretty... - */ - if( pDrawable->type == DRAWABLE_WINDOW ) - { - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - cPriv->changeMask = GCLineWidth | GCLineStyle; - } - else - { - pPriv = (PclPixmapPrivPtr) - dixLookupPrivate(&((PixmapPtr)pDrawable)->devPrivates, - PclPixmapPrivateKey); - pPriv->changeMask = GCLineWidth | GCLineStyle; - } -#endif - - PclUpdateDrawableGC( pGC, pDrawable, &outFile ); - - /* - * Go back to PCL - */ - SEND_PCL( outFile, "\27%0A" ); -} - -void -PclPushPixels( pGC, pBitmap, pDrawable, width, height, x, y ) - GCPtr pGC; - PixmapPtr pBitmap; - DrawablePtr pDrawable; - int width; - int height; - int x; - int y; -{ -} diff --git a/hw/xprint/pcl/PclPolygon.c b/hw/xprint/pcl/PclPolygon.c deleted file mode 100644 index 7d95d6484..000000000 --- a/hw/xprint/pcl/PclPolygon.c +++ /dev/null @@ -1,351 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclPolygon.c -** * -** * Contents: -** * Draws Polygons and Rectangles for the PCL DDX -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PclPolyRectangle( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - short fudge; - int xoffset, yoffset; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage required to deal with the clipping - * regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *)xalloc( nRects * sizeof( xRectangle ) ); - - fudge = 3 * pGC->lineWidth + 1; - - /* - * Generate the PCL code to draw the rectangles, by defining them - * as a macro which uses the HP-GL/2 rectangle drawing function. - */ - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = drawRects; i < nRects; i++, r++ ) - { - xRectangle rect = pRects[i]; - - /* Draw the rectangle */ - sprintf( t, "PU%d,%d;ER%d,%d;", rect.x + xoffset, - rect.y + yoffset, rect.width, rect.height ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Build the bounding box */ - r->x = MIN( rect.x, rect.x + rect.width ) + xoffset - - fudge; - r->y = MIN( rect.y, rect.y + rect.height ) + yoffset - - fudge; - r->width = rect.width + 2 * fudge; - r->height = rect.height + 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, ";\033%0A" ); /* End the macro */ - MACRO_END( outFile ); - - /* - * Convert the collection of rectangles to a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nRects, - drawRects, CT_UNSORTED ); - - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the set of rectangles to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} - -void -PclFillPolygon( - DrawablePtr pDrawable, - GCPtr pGC, - int shape, - int mode, - int nPoints, - DDXPointPtr pPoints) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - BoxRec box; - RegionPtr drawRegion, region; - int xoffset, yoffset; - int xtop, xbottom, yleft, yright; - int fillRule; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - char *command; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Generate the PCL code to draw the filled polygon, by defining - * it as a macro which uses the HP-GL/2 polygon drawing function. - */ - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - if( mode == CoordModeOrigin ) - { - xoffset = pDrawable->x; - yoffset = pDrawable->y; - command = "PA"; - } - else - { - xoffset = yoffset = 0; - command = "PR"; - } - - /* Begin the polygon */ - sprintf( t, "PU%d,%d;PM0;%s", pPoints[0].x + xoffset, pPoints[0].y - + yoffset, command ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Seed the bounding box */ - xtop = xbottom = pPoints[0].x + xoffset; - yleft = yright = pPoints[0].y + yoffset; - - /* Add the rest of the points to the polygon */ - for( i = 1; i < nPoints; i++ ) - { - if( i != 1 ) - SAVE_PCL( outFile, pConPriv, "," ); - - sprintf( t, "%d,%d", pPoints[i].x + xoffset, pPoints[i].y + - yoffset ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Update the bounding box */ - xtop = MIN( xtop, pPoints[i].x + xoffset ); - xbottom = MAX( xbottom, pPoints[i].x + xoffset ); - yleft = MIN( yleft, pPoints[i].y + yoffset ); - yright = MAX( yright, pPoints[i].y + yoffset ); - } - - /* Close the polygon and the macro */ - - if( pGC->fillRule == EvenOddRule ) - fillRule = 0; - else - fillRule = 1; - - sprintf( t, ";PM2;FP%d;\033%%0A", fillRule ); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END ( outFile ); - - /* - * Build the bounding region from the bounding box of the polygon - */ - box.x1 = xtop; - box.y1 = yleft; - box.x2 = xbottom; - box.y2 = yright; - drawRegion = REGION_CREATE( pGC->pScreen, &box, 0 ); - - if( mode == CoordModePrevious ) - REGION_TRANSLATE( pGC->pScreen, drawRegion, pPoints[0].x, pPoints[0].y ); - - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the polygon to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); -} - -void -PclPolyFillRect( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - int xoffset, yoffset; - short fudge; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage required to deal with the clipping - * regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *)xalloc( nRects * sizeof( xRectangle ) ); - - - fudge = 3 * pGC->lineWidth + 1; - - /* - * Generate the PCL code to draw the filled rectangles, by - * defining them as a macro which uses the HP-GL/2 rectangle - * drawing function. - */ - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = drawRects; i < nRects; i++, r++ ) - { - xRectangle rect = pRects[i]; - - /* Draw the rectangle */ - sprintf( t, "PU%d,%d;RR%d,%d;", rect.x + xoffset, rect.y + - yoffset, rect.width, rect.height ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Build the bounding box */ - r->x = MIN( rect.x, rect.x + rect.width ) + xoffset - fudge; - r->y = MIN( rect.y, rect.y + rect.height ) + yoffset - - fudge; - r->width = rect.width + 2 * fudge; - r->height = rect.height + 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, ";\033%0A" ); /* End the macro */ - MACRO_END( outFile ); - - /* - * Convert the collection of rectangles to a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nRects, - drawRects, CT_UNSORTED ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the set of rectangles to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} diff --git a/hw/xprint/pcl/PclPrint.c b/hw/xprint/pcl/PclPrint.c deleted file mode 100644 index ac8ea1537..000000000 --- a/hw/xprint/pcl/PclPrint.c +++ /dev/null @@ -1,709 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclPrint.c -** * -** * Contents: Print extension code of Pcl driver -** * -** * Created: 2/03/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#define NEED_EVENTS -#include -#undef NEED_EVENTS - -#include "Pcl.h" - -#include "windowstr.h" -#include "attributes.h" -#include "AttrValid.h" -#include "Oid.h" - -int -PclStartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - PclPaletteMap *pal; - - /* - * Check for existing page file, and delete it if it exists. - */ - if(pConPriv->pageFileName != (char *)NULL) - { - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - unlink(pConPriv->pageFileName); - xfree(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w+", &pConPriv->jobFileName, &pConPriv->pJobFile)) - return BadAlloc; - - /* - * Create/Initialize the SoftFontInfo structure - */ - pConPriv->pSoftFontInfo = PclCreateSoftFontInfo(); - - /* - * Set up the colormap handling - */ - pConPriv->palettes = NULL; - pConPriv->nextPaletteId = 4; - pConPriv->currentPalette = 0; - - pal = &( pConPriv->staticGrayPalette ); - pal->paletteId = 1; - pal->downloaded = 0; - - pal = &( pConPriv->trueColorPalette ); - pal->paletteId = 2; - pal->downloaded = 0; - - pal = &( pConPriv->specialTrueColorPalette ); - pal->paletteId = 3; - pal->downloaded = 0; - - return Success; -} - -int -PclEndJob( - XpContextPtr pCon, - Bool cancel) -{ - PclContextPrivPtr priv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - -#ifdef CCP_DEBUG - FILE *xpoutput; -#endif - FILE *fp; - int retVal; - char *fileName, *trailer; - struct stat statBuf; - PclPaletteMapPtr p; - - trailer = "\033%-12345X@PJL RESET\n"; - - if( cancel == True ) - { - if( priv->getDocClient != (ClientPtr)NULL ) { - XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - return Success; - } - - if( priv->getDocClient != (ClientPtr)NULL && priv->getDocBufSize > 0 ) - { - /* - * We need to stash the trailer information somewhere... - */ - if (!XpOpenTmpFile("w+", &fileName, &fp)) - return BadAlloc; - -#ifndef XP_PCL_LJ3 - SEND_PCL( fp, trailer ); - rewind( fp ); - - retVal = XpSendDocumentData( priv->getDocClient, fp, - strlen( trailer ), - priv->getDocBufSize ); -#endif /* XP_PCL_LJ3 */ - - fclose( fp ); - unlink( fileName ); - xfree( fileName ); - - if( priv->getDocClient != (ClientPtr)NULL ) { - XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - return retVal; - } - -#ifndef XP_PCL_LJ3 - SEND_PCL( priv->pJobFile, trailer ); -#endif /* XP_PCL_LJ3 */ - - /* - * Submit the job to the spooler - */ - fflush( priv->pJobFile ); - - /* - * Dump the job file to another output file, for testing - * purposes. - */ - rewind( priv->pJobFile ); - stat( priv->jobFileName, &statBuf ); - -#ifdef CCP_DEBUG - unlink( "/users/prince/XpOutput" ); - xpoutput = fopen( "/users/prince/XpOutput", "w" ); - - rewind( priv->pJobFile ); - TransferBytes( priv->pJobFile, xpoutput, - (int)statBuf.st_size ); - fclose( xpoutput ); -#endif - - XpSubmitJob( priv->jobFileName, pCon ); - fclose( priv->pJobFile ); - unlink( priv->jobFileName ); - xfree( priv->jobFileName ); - priv->jobFileName = NULL; - - PclDestroySoftFontInfo(priv->pSoftFontInfo); - priv->pSoftFontInfo = (PclSoftFontInfoPtr) NULL; - - /* - * Clear out the colormap cache - */ - p = priv->palettes; - while( p ) - { - p->downloaded = 0; - p = p->next; - } - - return Success; -} - -/* StartPage - * - * If page file exists - * close page file - * set page file pointer = NULL - * unlink page file - * Create a new page file - * Send the page header information to the page file - * ClearArea the window and all descendant windows - */ -int -PclStartPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - PclWindowPrivPtr pWinPriv = (PclWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PclWindowPrivateKey); - xRectangle repro; - char t[80]; - XpOid orient, plex, tray, medium; - int dir, plexNum, num; - - /* - * Put a pointer to the context in the window private structure - */ - pWinPriv->validContext = 1; - pWinPriv->context = pCon; - - /* - * Clear out the old page file, if necessary - */ - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - if(pConPriv->pageFileName != (char *)NULL) - { - unlink(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - /* - * Make up a new page file. - */ - if (!XpOpenTmpFile("w+", &pConPriv->pageFileName, &pConPriv->pPageFile)) - return BadAlloc; - - /* - * Reset the GC cached in the context private struct. - */ - pConPriv->validGC = 0; - - /* - * Set the page orientation - */ - orient = XpGetContentOrientation( pCon ); - switch( orient ) - { - case xpoid_val_content_orientation_landscape: - dir = 1; - break; - case xpoid_val_content_orientation_reverse_portrait: - dir = 2; - break; - case xpoid_val_content_orientation_reverse_landscape: - dir = 3; - break; - case xpoid_val_content_orientation_portrait: - default: - dir = 0; - break; - } - sprintf( t, "\033&l%dO", dir ); - SEND_PCL( pConPriv->pPageFile, t ); - - /* - * Set the duplexing method. Since PCL wants to think of it in - * terms of the "binding edge," and the attribute store thinks in - * "duplex/tumble," this is a little complicated. - * - * Actually, this has no bearing on the output, since the HP1600C - * will only print on one side of the paper, and ignore all - * requests to enable duplexing. But, in an attempt to keep this - * driver somewhat generic, we'll enable it anyway. - */ - plex = XpGetPlex( pCon ); - - if( plex == xpoid_val_plex_duplex ) - { - if( dir == 0 || dir == 2 ) - plexNum = 1; - else - plexNum = 2; - } - else if( plex == xpoid_val_plex_tumble ) - { - if( dir == 0 || dir == 2 ) - plexNum = 2; - else - plexNum = 1; - } - else - plexNum = 0; - sprintf( t, "\033&l%dS", plexNum ); - SEND_PCL( pConPriv->pPageFile, t ); - - /* - * Set the input tray or medium. If XpGetPageSize gives us a valid medium, - * we can just send that to the printer, and let the printer handle the - * details. Otherwise, we select the tray returned from XpGetPageSize, - * which will be either a tray that should contain the correct medium - * (possibly with operator intervention), or the default tray from the - * config files. - */ - medium = XpGetPageSize( pCon, &tray, NULL ); - if( medium != xpoid_none ) - { - switch( medium ) - { - case xpoid_val_medium_size_na_legal: - num = 3; - break; - case xpoid_val_medium_size_iso_a3: - num = 27; - break; - case xpoid_val_medium_size_iso_a4: - num = 26; - break; - case xpoid_val_medium_size_executive: - num = 1; - break; - case xpoid_val_medium_size_ledger: - num = 6; - break; - case xpoid_val_medium_size_monarch_envelope: - num = 80; - break; - case xpoid_val_medium_size_na_number_10_envelope: - num = 81; - break; - case xpoid_val_medium_size_iso_designated_long: - num = 90; - break; - case xpoid_val_medium_size_iso_c5: - num = 91; - break; - case xpoid_val_medium_size_iso_b5: - num = 100; - break; - case xpoid_val_medium_size_jis_b5: - num = 45; - break; - case xpoid_val_medium_size_na_letter: - default: - num = 2; - break; - } - sprintf( t, "\033&l%dA", num ); - SEND_PCL( pConPriv->pPageFile, t ); - } - else - { - switch( tray ) - { - case xpoid_val_input_tray_manual: - num = 2; - break; - case xpoid_val_input_tray_envelope: - num = 3; - break; - case xpoid_val_input_tray_large_capacity: - num = 5; - break; - case xpoid_val_input_tray_bottom: - num = 4; - break; - case xpoid_val_input_tray_main: - default: - num = 1; - break; - } - sprintf( t, "\033&l%dH", num ); - SEND_PCL( pConPriv->pPageFile, t ); - } - - /* - * Set the scaling factors so that the HP-GL/2 coordinate system - * matches the X coordinate system, both in axis orientation and - * in unit<->pixel conversion. - */ - XpGetReproductionArea( pCon, &repro ); - - sprintf( t, "\033&l0E\033*p%dx%dY", repro.x - 75, repro.y ); - SEND_PCL( pConPriv->pPageFile, t ); - - sprintf( t, "\033*c%dx%dY\033*c0T", (int)(repro.width / 300.0 * 720.0), - (int)(repro.height / 300.0 * 720.0) ); - SEND_PCL( pConPriv->pPageFile, t ); - - sprintf( t, "\033%%0BSC%d,%d,%d,%d;\033%%0A", repro.x, repro.x + - repro.width, repro.y + repro.height, repro.y ); - SEND_PCL( pConPriv->pPageFile, t ); - - return Success; -} - -/* - * When sending the generated PCL code back to the client, we send everything - * that we have generated so far for the job. After sending the data, we clean - * out the job file, to avoid repeatedly sending the same data. - */ - -static int -SendDocData( PclContextPrivPtr pPriv ) -{ - struct stat statBuf; - int ret; - - rewind( pPriv->pJobFile ); - if( stat( pPriv->jobFileName, &statBuf ) < 0 ) - return BadAlloc; - - ret = XpSendDocumentData( pPriv->getDocClient, pPriv->pJobFile, - (int)statBuf.st_size, pPriv->getDocBufSize ); - - /* - * Clean out the job file - */ - fclose( pPriv->pJobFile ); - unlink( pPriv->jobFileName ); - - xfree(pPriv->jobFileName); - - if (!XpOpenTmpFile("w+", &pPriv->jobFileName, &pPriv->pJobFile)) - return BadAlloc; - - return ret; -} - -/* - * EndPage: - * - * Write page trailer to page file - * Write page file to job file - */ -int -PclEndPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - struct stat statBuf; - - /* - * Send the page trailer to the page file. - */ - SEND_PCL( pConPriv->pPageFile, "\014" ); - fflush( pConPriv->pPageFile ); - - /* - * Write the page file contents to the job file, or to the - * whatever client has called GetDocumentData. - * - * pWinPriv->pPageFile must first be set to the start of the page file. - */ - rewind(pConPriv->pPageFile); - if(stat(pConPriv->pageFileName, &statBuf) < 0) - return BadAlloc; - - if(TransferBytes(pConPriv->pPageFile, pConPriv->pJobFile, - (int)statBuf.st_size) != (int)statBuf.st_size) - return BadAlloc; - - if( pConPriv->getDocClient != (ClientPtr)NULL && - pConPriv->getDocBufSize > 0 ) - { - return SendDocData( pConPriv ); - } - - return Success; -} - -/* - * The PclStartDoc() and PclEndDoc() functions serve basically as NOOP - * placeholders. This driver doesn't deal with the notion of multiple - * documents per page. - */ - -int -PclStartDoc(XpContextPtr pCon, - XPDocumentType type) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - -#ifndef XP_PCL_LJ3 - /* - * Set the printer resolution for the page. Since we can only - * render color at 300dpi, we just hard-code this. - */ - SEND_PCL( pConPriv->pJobFile, - "\033%-12345X@PJL SET RESOLUTION = 300\r\n" ); -#endif /* XP_PCL_LJ3 */ - - /* - * Initialize HP-GL/2 - */ - SEND_PCL( pConPriv->pJobFile, "\033E\033%0BIN,SP1,TR0;\033%0A" ); - - /* - * Stash the type of the document (used by PutDocumentData operation) - */ - pConPriv->isRaw = (type == XPDocRaw); - - return Success; -} - -int -PclEndDoc( - XpContextPtr pCon, - Bool cancel) -{ - /* - * XXX What should I do if I get cancel == TRUE? - */ - return Success; -} - -/* - * PclDocumentData() - * - * Hand any pre-generated PDL down to the spool files, formatting it - * as necessary to fit the given window. - * - */ - -#define DOC_PCL 1 -#define DOC_HPGL 2 - -int -PclDocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pFmt, - int len_fmt, - char *pOpt, - int len_opt, - ClientPtr client) -{ - int type = 0; - PclContextPrivPtr pPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - XpOidDocFmtList *formats; - XpOidDocFmt *f; - char t[80]; - xRectangle repro; - - /* - * Verify the input format - */ - formats = XpGetDocFmtListAttr( pCon, XPPrinterAttr, - (pPriv->isRaw) ? - xpoid_att_xp_raw_formats_supported : - xpoid_att_xp_embedded_formats_supported, - NULL ); - f = XpOidDocFmtNew( pFmt ); - if( !XpOidDocFmtListHasFmt( formats, f ) ) - { - XpOidDocFmtListDelete( formats ); - XpOidDocFmtDelete( f ); - return BadMatch; - } - XpOidDocFmtListDelete( formats ); - - if( !(pPriv->isRaw) ) - { - if( !strcmp( f->format, "PCL" ) ) - type = DOC_PCL; - else if( !strcmp( f->format, "HPGL" ) ) - type = DOC_HPGL; - else - { - XpOidDocFmtDelete( f ); - return BadMatch; - } - - switch( type ) - { - case DOC_HPGL: - /* - * Move the picture frame to the appropriate place on the page, - * then assume that the embedded code will scale it properly. - */ - sprintf( t, "\033&l0E\033*p%dx%dY", - pDraw->x - 75, - pDraw->y ); - SEND_PCL( pPriv->pPageFile, t ); - - sprintf( t, "\033*c%dx%dY\033*coT", - (int)( pDraw->width / 300.0 * 720.0 ), - (int)( pDraw->height / 300.0 * 720.0 ) ); - SEND_PCL( pPriv->pPageFile, t ); - break; - } - } - - - /* - * Send the data down the pipe - */ - SEND_PCL_COUNT( pPriv->pPageFile, pData, len_data ); - - /* - * If it's not a raw document, clean up the embedding - */ - if( !(pPriv->isRaw) ) - switch( type ) - { - case DOC_HPGL: - /* - * Reset the picture frame - */ - XpGetReproductionArea( pCon, &repro ); - - sprintf( t, "\033&l0E\033*p%dx%dY", repro.x - 75, repro.y ); - SEND_PCL( pPriv->pPageFile, t ); - - sprintf( t, "\033*c%dx%dY\033*c0T", - (int)(repro.width / 300.0 * 720.0), - (int)(repro.height / 300.0 * 720.0) ); - SEND_PCL( pPriv->pPageFile, t ); - - sprintf( t, "\033%%0BSC%d,%d,%d,%d;\033%%0A", repro.x, repro.x + - repro.width, repro.y + repro.height, repro.y ); - SEND_PCL( pPriv->pPageFile, t ); - break; - } - - XpOidDocFmtDelete( f ); - return Success; -} - -/* - * - * PclGetDocumentData() - * - * This function allows the driver to send the generated PCL back to - * the client. - * - * XXX This function is barely spec'ed, much less implemented! - */ - -int -PclGetDocumentData( - XpContextPtr pCon, - ClientPtr client, - int maxBufferSize) -{ - PclContextPrivPtr pPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - pPriv->getDocClient = client; - pPriv->getDocBufSize = maxBufferSize; - - return Success; -} diff --git a/hw/xprint/pcl/PclSFonts.c b/hw/xprint/pcl/PclSFonts.c deleted file mode 100644 index 2474d90d7..000000000 --- a/hw/xprint/pcl/PclSFonts.c +++ /dev/null @@ -1,427 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclSFonts.c -** * -** * Contents: -** * Send Soft Font Download data to the specified -** * file pointer. -** * -** * Created: 3/4/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "Pcl.h" - -static char tmp1; -static short tmp2; -#define Put1byte(fp, x) tmp1=x; fwrite((char *)&tmp1, 1, 1, fp) -#define Put2bytes(fp, x) tmp2=x; fwrite((char *)&tmp2, 2, 1, fp) - -#define ESC 0x1b -#define SYMBOL_SET 277 - -static unsigned int PclDownloadChar(FILE *,PclCharDataPtr,unsigned short,unsigned char); -static unsigned int PclDownloadHeader(FILE *, PclFontDescPtr, unsigned short); - -#ifdef PCL_FONT_COMPRESS -static unsigned char *compress_bitmap_data(PclCharDataPtr, unsigned int *); -#endif /* PCL_FONT_COMPRESS */ - -/* -*- PclDownloadSoftFont8 -*- - * Send the Character Definition Command for 8-bit font - * **************************************************************************/ -void -PclDownloadSoftFont8( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead8Ptr pfh, - PclCharDataPtr pcd, - unsigned char *code -) -{ - /* - * Check whether the font header has already been downloaded. - * If not, download it. - */ - - if ( !pfh->fid ) { - pfh->fid = pSoftFontInfo->cur_max_fid++; - PclDownloadHeader(fp, &(pfh->fd), pfh->fid); - } - pfh->index[*code] = *code; - PclDownloadChar(fp, pcd, pfh->fid, pfh->index[*code]); - -} - -/* -*- PclDownloadSoftFont16 -*- - * Send the Character Definition Command for 16 bit font - * **************************************************************************/ -void -PclDownloadSoftFont16( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead16Ptr pfh, - PclCharDataPtr pcd, - unsigned char row, - unsigned char col -) -{ - /* - * Check whether the font header is already downloaded. - * If not, download it. - */ - - if ( !pfh->cur_cindex ) { - pfh->cur_fid = pSoftFontInfo->cur_max_fid++; - PclDownloadHeader(fp, &(pfh->fd), pfh->cur_fid); - } - pfh->index[row][col].fid = pfh->cur_fid; - pfh->index[row][col].cindex = pfh->cur_cindex++; - - PclDownloadChar(fp, pcd, pfh->index[row][col].fid, pfh->index[row][col].cindex); -} - -/* -*- PclCreateSoftFontInfo -*- - * Create and Initialize the structure for storing the information - * of the downloaded soft font. - * **************************************************************************/ -PclSoftFontInfoPtr -PclCreateSoftFontInfo(void) -{ -PclSoftFontInfoPtr pSoftFontInfo; - - pSoftFontInfo = (PclSoftFontInfoPtr)xalloc(sizeof(PclSoftFontInfoRec)); - if ( pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclSoftFontInfoPtr) NULL; - pSoftFontInfo->phead8 = (PclFontHead8Ptr)NULL; - pSoftFontInfo->phead16 = (PclFontHead16Ptr)NULL; - pSoftFontInfo->pinfont = (PclInternalFontPtr)NULL; - pSoftFontInfo->cur_max_fid = 1; - return pSoftFontInfo; -} - -/* -*- PclDestroySoftFontInfo -*- - * Destroy the soft font information structure - * **************************************************************************/ -void -PclDestroySoftFontInfo( PclSoftFontInfoPtr pSoftFontInfo ) -{ -PclFontHead8Ptr pfh8, pfh8_next; -PclFontHead16Ptr pfh16, pfh16_next; -PclInternalFontPtr pin, pin_next; -unsigned char nindex_row; -int i; - - if ( pSoftFontInfo == (PclSoftFontInfoPtr) NULL ) - return; - - pfh8 = pSoftFontInfo->phead8; - while (pfh8 != (PclFontHead8Ptr) NULL) { - xfree(pfh8->fontname); - xfree(pfh8->index); - pfh8_next = pfh8->next; - xfree(pfh8); - pfh8 = pfh8_next; - } - - pfh16 = pSoftFontInfo->phead16; - while (pfh16 != (PclFontHead16Ptr) NULL) { - xfree(pfh16->fontname); - nindex_row = pfh16->lastRow - pfh16->firstRow + 1; - for (i=0; iindex[i]); - xfree(pfh16->index); - pfh16_next = pfh16->next; - xfree(pfh16); - pfh16 = pfh16_next; - } - - pin = pSoftFontInfo->pinfont; - while (pin != (PclInternalFontPtr) NULL) { - xfree(pin->fontname); - pin_next = pin->next; - xfree(pin); - pin = pin_next; - } - - xfree(pSoftFontInfo); -} - -/* -*- PclDownloadHeader -*- - * Send the Font Header Commnad. - * Format 0 : Font Header for Pcl Bitmapped Fonts - * Format 20 : Font Header for Resolution Specified Bitmapped Fonts - * **************************************************************************/ -static unsigned int -PclDownloadHeader( - FILE *fp, - PclFontDescPtr fd, - unsigned short fid -) -{ -int nbytes; - -#ifdef XP_PCL_LJ3 - nbytes = 64; -#else - nbytes = 68; -#endif /* XP_PCL_LJ3 */ - /* - * Font ID Command : Esc *c#D - * (Default = 0, Range = 0 - 32767) - */ - fprintf(fp, "%c*c%dD", ESC, fid); - - /* - * Font Header Commnad : Esc )s#W[font header data] - * (Default = 0, Range = 0 - 32767) - */ - fprintf(fp, "%c)s%dW", ESC, nbytes); - - Put2bytes(fp, nbytes); /* Font Description Size */ -#ifdef XP_PCL_LJ3 - Put1byte(fp, 0); /* Header Format */ -#else - Put1byte(fp, 20); /* Header Format */ -#endif /* XP_PCL_LJ3 */ - Put1byte(fp, 2); /* Font Type */ - Put2bytes(fp, 0); /* Style MSB */ - Put2bytes(fp, fd->ascent); /* BaseLine Position */ - Put2bytes(fp, fd->cellwidth); /* Cell Width */ - Put2bytes(fp, fd->cellheight); /* Cell Height */ - Put1byte(fp, 0); /* Orienation */ - Put1byte(fp, fd->spacing); /* Spacing */ - Put2bytes(fp, SYMBOL_SET); /* Symbol Set */ - Put2bytes(fp, fd->pitch*4); /* font pitch */ - Put2bytes(fp, fd->cellheight * 4); /* Height */ - Put2bytes(fp, 0); /* x-Height */ - Put1byte(fp, 0); /* width type (normal) */ - Put1byte(fp, 0); /* Style LSB */ - Put1byte(fp, 0); /* Stroke Weight */ - Put1byte(fp, 5); /* Typeface LSB */ - Put1byte(fp, 0); /* Typeface MSB */ - Put1byte(fp, 0); /* Serif Style */ - Put1byte(fp, 0); /* Quality */ - Put1byte(fp, 0); /* Placement */ - Put1byte(fp, 0); /* Underline Position */ - Put1byte(fp, 0); /* Underline Thickness */ - Put2bytes(fp, fd->cellheight*1.2); /* Text Height */ - Put2bytes(fp, fd->cellwidth * 4); /* Text Width */ - Put2bytes(fp, 0); /* First Code */ - Put2bytes(fp, 255); /* Last Code */ - Put1byte(fp, 0); /* Pitch Extend */ - Put1byte(fp, 0); /* Height Extend */ - Put2bytes(fp, 0); /* Cap Height */ - Put2bytes(fp, 0); /* Font Number 1 */ - Put2bytes(fp, 0); /* Font Number 2 */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - -#ifdef XP_PCL_LJ3 - return 64; -#else - Put2bytes(fp, 300); /* X Resolution */ - Put2bytes(fp, 300); /* Y Resolution */ - return 68; -#endif /* XP_PCL_LJ3 */ - -} - -/* -*- PclDownloadCharacter -*- - * Send the Character Definition Command. - * **************************************************************************/ -static unsigned int -PclDownloadChar( - FILE *fp, - PclCharDataPtr cd, - unsigned short fid, - unsigned char code -) -{ -unsigned int nbytes, n; -unsigned char *raster; - - /* - * Font ID Command : Esc *c#D - * (Default = 0, Range = 0 - 32767) - * Character Code Command : Esc *c#E - * (Default = 0, Range = 0 - 65535) - */ - fprintf(fp, "%c*c%dd%dE", ESC, fid, code); - - /* - * Character Definition Command : Esc (s#W[character descriptor and data] - * (Default = N/A, Range = 0 - 32767) - */ - - nbytes = n = cd->height * ((cd->width + 7) / 8); -#ifdef PCL_FONT_COMPRESS - raster = compress_bitmap_data(cd, &nbytes); -#else - raster = (unsigned char *)NULL; -#endif /* PCL_FONT_COMPRESS */ - fprintf(fp, "%c(s%dW", ESC, nbytes + 16); - - Put1byte(fp, 4); /* Format */ - Put1byte(fp, 0); /* Continuation */ - Put1byte(fp, 14); /* Descriptor Size */ - if (raster) { /* Class */ - Put1byte(fp, 2); - } else { - Put1byte(fp, 1); /* Class */ - } - Put2bytes(fp, 0); /* Orientation */ - Put2bytes(fp, cd->h_offset); /* left offset */ - Put2bytes(fp, cd->v_offset); /* top offset */ - Put2bytes(fp, cd->width); /* character width */ - Put2bytes(fp, cd->height); /* character height */ - Put2bytes(fp, cd->font_pitch*4); /* delta X */ - - /* - * Raster Character Data - */ - if (raster) { - fwrite(raster, nbytes, 1, fp); - xfree(raster); - } else - fwrite(cd->raster_top, nbytes, 1, fp); - - return n + 16; -} - - -#ifdef PCL_FONT_COMPRESS -/* -*- compress_bitmap_data -*- - * Compress Bitmap data - * **************************************************************************/ -static unsigned char * -compress_bitmap_data( - PclCharDataPtr cd, - unsigned int *nbytes -) -{ -unsigned int byte_width; -unsigned char *raster, *rptr_s, *rptr_e, *rptr_end; -unsigned char *tmp_s, *tmp_ptr; -unsigned char *p; -unsigned char cur, pixel; -unsigned int num; - -int i, j, k, w; - - byte_width = (cd->width + 7) / 8; - *nbytes = cd->height * byte_width; - - /* Create buffer for storing compress bitmap glyph */ - raster = (unsigned char *)xalloc(*nbytes); - rptr_s = raster; - rptr_e = raster; - rptr_end = raster + *nbytes; - - tmp_s = (unsigned char *)xalloc(cd->width * 8 + 2); - - p = cd->raster_top; - for (i=0; iheight; i++) { - tmp_ptr = tmp_s; - *tmp_ptr++ = 0; - if ( (*p>>7)&0x1 == 1 ) { - *tmp_ptr++ = 0; - cur = 1; - } else { - cur = 0; - } - num = 0; - for (j=0, w=0; jwidth; k++, w++) { - pixel = (*p>>(7-k))&0x1; - if ( pixel == cur ) { - num++; - } else { - cur = pixel; - while (num > 255) { - *tmp_ptr++ = 255; - *tmp_ptr++ = 0; - num -= 255; - } - *tmp_ptr++ = num; - num = 1; - } - } - } - if ( pixel == cur ) { - while (num > 255) { - *tmp_ptr++ = 255; - *tmp_ptr++ = 0; - num -= 255; - } - *tmp_ptr++ = num&0xff; - } else - *tmp_ptr++ = num; - - if ( ((rptr_e - rptr_s) == (tmp_ptr - tmp_s)) && - !memcmp(rptr_s+1, tmp_s+1, (tmp_ptr - tmp_s) - 1) ) - *rptr_s += 1; - else { - if ( rptr_e + (tmp_ptr - tmp_s) > rptr_end ) { - xfree(raster); - xfree(tmp_s); - return (unsigned char *)NULL; - } - memcpy (rptr_e, tmp_s, tmp_ptr - tmp_s); - rptr_s = rptr_e; - rptr_e = rptr_s + (tmp_ptr - tmp_s); - } - } - xfree(tmp_s); - *nbytes = rptr_e - raster; - - return raster; -} -#endif /* PCL_FONT_COMPRESS */ diff --git a/hw/xprint/pcl/PclSFonts.h b/hw/xprint/pcl/PclSFonts.h deleted file mode 100644 index c991263df..000000000 --- a/hw/xprint/pcl/PclSFonts.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCLFONTS_H -#define _PCLFONTS_H - -/* -*-H-*- -****************************************************************************** -****************************************************************************** -* -* File: PclFonts.h -* Description: Send Soft Font Download data to the specified file pointer. -* -* -****************************************************************************** -****************************************************************************** -*/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -typedef struct { - unsigned char fid; /* sfont font ID */ - unsigned char cindex; /* character indext */ -} PclFontMapRec, PclFontMapPtr; - -typedef struct { - int h_offset; - int v_offset; - unsigned int width; - unsigned int height; - int font_pitch; - unsigned char *raster_top; -} PclCharDataRec, *PclCharDataPtr; - -typedef struct { - unsigned char spacing; - unsigned int pitch; - unsigned int cellheight; - unsigned int cellwidth; - int ascent; - int descent; -} PclFontDescRec, *PclFontDescPtr; - -typedef struct _PclFontHead8Rec { - char *fontname; - PclFontDescRec fd; - unsigned short fid; - unsigned char *index; - struct _PclFontHead8Rec *next; -} PclFontHead8Rec, *PclFontHead8Ptr; - -typedef struct _PclFontHead16Rec { - char *fontname; - PclFontDescRec fd; - unsigned short cur_fid; - unsigned char cur_cindex; - PclFontMapRec **index; - unsigned short firstCol; - unsigned short lastCol; - unsigned short firstRow; - unsigned short lastRow; - struct _PclFontHead16Rec *next; -} PclFontHead16Rec, *PclFontHead16Ptr; - -typedef struct _PclInternalFontRec { - char *fontname; - float pitch; - float height; - char *pcl_font_name; - char *spacing; - struct _PclInternalFontRec *next; -} PclInternalFontRec, *PclInternalFontPtr; - -typedef struct { - PclFontHead8Ptr phead8; - PclFontHead16Ptr phead16; - PclInternalFontPtr pinfont; - unsigned char cur_max_fid; -} PclSoftFontInfoRec, *PclSoftFontInfoPtr; - -#define MONOSPACE 0 -#define PROPSPACE 1 - -#endif /* _PCLFONTS_H */ diff --git a/hw/xprint/pcl/PclSpans.c b/hw/xprint/pcl/PclSpans.c deleted file mode 100644 index 4951899ab..000000000 --- a/hw/xprint/pcl/PclSpans.c +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclSpans.c -** * -** * Contents: -** * Code to set and fill spans in the PCL DDX -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PclFillSpans( - DrawablePtr pDrawable, - GCPtr pGC, - int nSpans, - DDXPointPtr pPoints, - int *pWidths, - int fSorted) -{ - char t[80]; - FILE *outFile; - int xoffset, yoffset; - xRectangle *rects, *r; - RegionPtr fillRegion, region = 0; - int i; - int nbox; - BoxPtr pbox; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - /* - * Build a region out of the spans - */ - rects = (xRectangle *)xalloc( nSpans * sizeof( xRectangle ) ); - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = rects; i < nSpans; i++, r++ ) - { - r->x = pPoints[i].x + xoffset; - r->y = pPoints[i].y + yoffset; - r->width = pWidths[i]; - r->height = 1; - } - fillRegion = RECTS_TO_REGION( pGC->pScreen, nSpans, rects, ( fSorted ) ? - CT_YSORTED : CT_UNSORTED ); - - /* - * Intersect this region with the clip region. Whatever's left, - * should be filled. - */ - REGION_INTERSECT( pGC->pScreen, region, fillRegion, pGC->clientClip ); - - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - /* Enter HP-GL/2 */ - SEND_PCL( outFile, "\27%0B" ); - - while( nbox ) - { - sprintf( t, "PU%d,%d;RR%d,%d;", pbox->x1, pbox->y1, - pbox->x2, pbox->y2 ); - SEND_PCL( outFile, t ); - - nbox--; - pbox++; - } - - /* Go back to PCL */ - SEND_PCL( outFile, "\27%0A" ); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, fillRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( rects ); -} - -void -PclSetSpans( - DrawablePtr pDrawable, - GCPtr pGC, - char *pSrc, - DDXPointPtr pPoints, - int *pWidths, - int nSpans, - int fSorted) -{ -} diff --git a/hw/xprint/pcl/PclText.c b/hw/xprint/pcl/PclText.c deleted file mode 100644 index 324de3014..000000000 --- a/hw/xprint/pcl/PclText.c +++ /dev/null @@ -1,934 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclText.c -** * -** * Contents: -** * Character-drawing routines for the PCL DDX -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifdef DO_TWO_BYTE_PCL -#include "iconv.h" -#endif /* DO_TWO_BYTE_PCL */ -#include "gcstruct.h" -#include "windowstr.h" - -#include "Pcl.h" -#include "migc.h" -#include - -#include "PclSFonts.h" - -static PclFontHead8Ptr makeFontHeader8 (FontPtr, PclSoftFontInfoPtr); -static PclFontHead16Ptr makeFontHeader16(FontPtr, PclSoftFontInfoPtr); -static PclInternalFontPtr makeInternalFont(FontPtr, PclSoftFontInfoPtr); -static void fillFontDescData(FontPtr, PclFontDescPtr, unsigned int); -static PclCharDataPtr fillCharDescData(PclCharDataPtr, CharInfoPtr); -static void output_text(FILE *, PclContextPrivPtr, unsigned char); -static char * getFontName(FontPtr); -static char isInternal(FontPtr); -static void selectInternalFont(FILE *, PclInternalFontPtr, int); -static void selectSize(FILE *, PclContextPrivPtr, PclInternalFontPtr); -static char t[80]; - -#ifdef DO_TWO_BYTE_PCL -static void code_conv(PclSoftFontInfoPtr, FontPtr, char *, char *); -#endif /* DO_TWO_BYTE_PCL */ - -#define ESC 0x1b -#define PER 0x25 -#define ETX 0x3 -#define ETX_ALT 0x2a -#define DOWNLOAD_FONT 0 -#define INTERNAL_FONT 1 - -int -PclPolyText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string) -{ -XpContextPtr pCon; -PclContextPrivPtr pConPriv; -unsigned long n, i; -int w; -CharInfoPtr charinfo[255], *chinfo; - -FILE *outFile; -PclSoftFontInfoPtr pSoftFontInfo; -PclFontHead8Ptr pfh8 = (PclFontHead8Ptr)NULL; -PclInternalFontPtr pin = (PclInternalFontPtr)NULL; -PclCharDataRec cd; -unsigned char *p; -unsigned char last_fid; -int max_ascent, max_descent; - -int nbox; -BoxPtr pbox; -BoxRec box; -RegionPtr drawRegion, region; -char font_type; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return x; - - GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)string, - Linear8Bit, &n, charinfo); - if ( n == 0 ) - return x; - - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - pSoftFontInfo = pConPriv->pSoftFontInfo; - font_type = isInternal(pGC->font); - if ( font_type == DOWNLOAD_FONT ) { - /* - * Create Soft Font Header Information - */ - pfh8 = makeFontHeader8(pGC->font, pSoftFontInfo); - if (!pfh8) - return x; - - /* - * exec Soft Font Downloading - */ - p = (unsigned char *)string; - for (i=0, chinfo=charinfo; iindex[*p] ) { - fillCharDescData(&cd, *chinfo); - PclDownloadSoftFont8(pConPriv->pJobFile, pSoftFontInfo, - pfh8, &cd, p); - xfree(cd.raster_top); - } - } - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - SAVE_PCL_COUNT( outFile, pConPriv, "FI0;SS;LB", 9 ); - - last_fid = 0; - w = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - p = (unsigned char *)string; - for (i=0, chinfo=charinfo; ifid ) { - sprintf(t, "%c;FI%d;SS;LB", ETX, pfh8->fid); - SAVE_PCL( outFile, pConPriv, t ); - - last_fid = pfh8->fid; - } - - output_text(outFile, pConPriv, pfh8->index[*p]); - - w += (*chinfo)->metrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - - sprintf(t, "%c", ETX); - SAVE_PCL_COUNT( outFile, pConPriv, t, 1 ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END( outFile ); - - } else { - int fid = 0; - - pin = makeInternalFont(pGC->font, pSoftFontInfo); - if (!pin) - return x; - - selectInternalFont(outFile, pin, fid); - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - selectSize(outFile, pConPriv, pin); - SAVE_PCL_COUNT( outFile, pConPriv, "FI0;SS;LB", 9 ); - - w = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - p = (unsigned char *)string; - for (i=0, chinfo=charinfo; imetrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - sprintf(t, "%c", ETX); - SAVE_PCL_COUNT( outFile, pConPriv, t, 1 ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END( outFile ); - } - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - box.x1 = x + pDrawable->x; - box.y1 = y - max_ascent + pDrawable->y + pGC->font->info.fontAscent; - box.x2 = x + w + pDrawable->x; - box.y2 = y + max_descent + pDrawable->y + pGC->font->info.fontAscent; - - drawRegion = miRegionCreate( &box, 0 ); - region = miRegionCreate( NULL, 0 ); - miIntersect( region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire polyline to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - - return x+w; -} - -int -PclPolyText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ -XpContextPtr pCon; -PclContextPrivPtr pConPriv; -unsigned long n, i; -int w; -CharInfoPtr charinfo[255], *chinfo; - -FILE *outFile; -PclSoftFontInfoPtr pSoftFontInfo; -PclFontHead16Ptr pfh16 = (PclFontHead16Ptr)NULL; -PclCharDataRec cd; -FontInfoPtr pfi; -unsigned char row, col; -char *p; -unsigned char last_fid; -int max_ascent, max_descent; -unsigned short def; - -int nbox; -BoxPtr pbox; -BoxRec box; -RegionPtr drawRegion, region; -char font_type; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return x; - - GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)string, - (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit, - &n, charinfo); - - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - pSoftFontInfo = pConPriv->pSoftFontInfo; - - font_type = isInternal(pGC->font); - if ( font_type == DOWNLOAD_FONT ) { - /* - * Create Soft Font Header Information - */ - pfh16 = makeFontHeader16(pGC->font, pSoftFontInfo); - if (!pfh16) - return x; - - /* - * exec Soft Font Downloading - */ - pfi = (FontInfoRec *)&pGC->font->info; - p = (char *)string; - for (i=0, p=(char *)string, chinfo=charinfo; ifirstRow <= row) && (row <= pfi->lastRow) - && (pfi->firstCol <= col) && (col <= pfi->lastCol) ) { - row = row - pfi->firstRow; - col = col - pfi->firstCol; - } else { - def = pfi->defaultCh; - row = ((def>>8)&0xff) - pfi->firstRow; - col = (def&0xff) - pfi->firstCol; - } - if ( !pfh16->index[row][col].fid ) { - fillCharDescData(&cd, *chinfo); - PclDownloadSoftFont16(pConPriv->pJobFile, pSoftFontInfo, - pfh16, &cd, row, col); - xfree(cd.raster_top); - } - } - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - SAVE_PCL_COUNT( outFile, pConPriv, "FI0;SS;LB", 9 ); - - last_fid = 0; - - w = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - for (i=0, p=(char *)string, chinfo=charinfo; ifirstRow <= row) && (row <= pfi->lastRow) - && (pfi->firstCol <= col) && (col <= pfi->lastCol) ) { - row = row - pfi->firstRow; - col = col - pfi->firstCol; - } else { - def = pfi->defaultCh; - row = ((def>>8)&0xff) - pfi->firstRow; - col = (def&0xff) - pfi->firstCol; - } - if ( last_fid != pfh16->index[row][col].fid ) { - sprintf(t, "%cFI%d;SS;LB", - ETX, pfh16->index[row][col].fid); - SAVE_PCL( outFile, pConPriv, t ); - last_fid = pfh16->index[row][col].fid; - } - - output_text(outFile, pConPriv, pfh16->index[row][col].cindex); - - w += (*chinfo)->metrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - sprintf(t, "%c", ETX); - SAVE_PCL_COUNT( outFile, pConPriv, t, 1 ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END( outFile ); - - } else { -#ifdef DO_TWO_BYTE_PCL - PclInternalFontPtr pin; - int fid = 0; - - pin = makeInternalFont(pGC->font, pSoftFontInfo); - if (!pin) - return x; - - selectInternalFont(outFile, pin, fid); - fprintf(outFile, "%c&t31P", ESC); - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - - w = 0; - last_fid = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - for (i=0, p=(char *)string, chinfo=charinfo; ifont, (char *)p, tobuf); - fprintf(outFile, "%c%c", tobuf[0], tobuf[1]); - - w += (*chinfo)->metrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - MACRO_END( outFile ); -#else - return x; -#endif /* DO_TWO_BYTE_PCL */ - } - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - box.x1 = x + pDrawable->x; - box.y1 = y - max_ascent + pDrawable->y + pGC->font->info.fontAscent; - box.x2 = x + w + pDrawable->x; - box.y2 = y + max_descent + pDrawable->y + pGC->font->info.fontAscent; - - drawRegion = miRegionCreate( &box, 0 ); - region = miRegionCreate( NULL, 0 ); - miIntersect( region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire polyline to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - - return x+w; -} - -void -PclImageText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, int y, - int count, - char *string) -{ -} - -void -PclImageText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ -} - -void -PclImageGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase) -{ -} - -void -PclPolyGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase) -{ -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -static PclFontHead8Ptr -makeFontHeader8(FontPtr pfont, PclSoftFontInfoPtr pSoftFontInfo) -{ -PclFontHead8Ptr phead8 = pSoftFontInfo->phead8; -PclFontHead8Ptr pfh8 = phead8; -PclFontHead8Ptr prev = (PclFontHead8Ptr)NULL; -FontInfoPtr pfi; -char *fontname; -unsigned char nindex; -int i; -unsigned long n; -CharInfoPtr charinfo[1]; -unsigned int space_width; - - if (pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclFontHead8Ptr)NULL; - - /* - * Verify it has already been created, if so, return it. - */ - if ( (fontname = getFontName(pfont)) == (char *)NULL) - return (PclFontHead8Ptr)NULL; - - while (pfh8 != (PclFontHead8Ptr) NULL) { - if (!strcmp(pfh8->fontname, fontname)) - return pfh8; - prev = pfh8; - pfh8 = pfh8->next; - } - - /* - * Create Font Header Information - */ - pfh8 = (PclFontHead8Ptr)xalloc(sizeof(PclFontHead8Rec)); - if (pfh8 == (PclFontHead8Ptr)NULL) - return (PclFontHead8Ptr)NULL; - - pfi = (FontInfoRec *)&pfont->info; - GetGlyphs(pfont, 1, (unsigned char *)&pfi->defaultCh, - Linear8Bit, &n, charinfo); - if ( n ) - space_width = charinfo[0]->metrics.characterWidth; - else - space_width = FONTMAXBOUNDS(pfont,characterWidth); - - fillFontDescData(pfont, &(pfh8->fd), space_width); - pfh8->fid = 0; - pfh8->fontname = (char *)xalloc(strlen(fontname) + 1); - if (pfh8->fontname == (char *)NULL) { - xfree(pfh8); - return (PclFontHead8Ptr) NULL; - } - strcpy(pfh8->fontname, fontname); - - nindex = 0xff; - pfh8->index = (unsigned char *)xalloc(nindex); - if ( pfh8->index == (unsigned char *) NULL ) { - xfree(pfh8->fontname); - xfree(pfh8); - return (PclFontHead8Ptr) NULL; - } - - for (i=0; i<=nindex; i++) - pfh8->index[i] = 0x0; - - pfh8->next = (PclFontHead8Ptr)NULL; - - if ( prev == (PclFontHead8Ptr) NULL) - pSoftFontInfo->phead8 = pfh8; - else - prev->next = pfh8; - - return pfh8; -} - -static PclFontHead16Ptr -makeFontHeader16(FontPtr pfont, PclSoftFontInfoPtr pSoftFontInfo) -{ -PclFontHead16Ptr phead16 = pSoftFontInfo->phead16; -PclFontHead16Ptr pfh16 = phead16; -PclFontHead16Ptr prev = (PclFontHead16Ptr)NULL; -PclFontMapRec ** index; -FontInfoPtr pfi; -char *fontname; -unsigned char nindex_row, nindex_col; -int i, j; -unsigned long n; -CharInfoPtr charinfo[1]; -unsigned int space_width; - - if (pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclFontHead16Ptr)NULL; - - /* - * Verify it has already been created, if so, return it. - */ - if ( (fontname = getFontName(pfont)) == (char *)NULL) - return (PclFontHead16Ptr)NULL; - - while (pfh16 != (PclFontHead16Ptr) NULL) { - if (!strcmp(pfh16->fontname, fontname)) - return pfh16; - prev = pfh16; - pfh16 = pfh16->next; - } - - /* - * Create Font Header Information - */ - pfh16 = (PclFontHead16Ptr)xalloc(sizeof(PclFontHead16Rec)); - if (pfh16 == (PclFontHead16Ptr)NULL) - return (PclFontHead16Ptr)NULL; - - pfi = (FontInfoRec *)&pfont->info; - GetGlyphs(pfont, 1, (unsigned char *)&pfi->defaultCh, - (FONTLASTROW(pfont) == 0) ? Linear16Bit : TwoD16Bit, - &n, charinfo); - - if ( n ) - space_width = charinfo[0]->metrics.characterWidth; - else - space_width = FONTMAXBOUNDS(pfont,characterWidth); - - fillFontDescData(pfont, &(pfh16->fd), space_width); - pfh16->cur_fid = 0; - pfh16->cur_cindex = 0; - pfh16->fontname = (char *)xalloc(strlen(fontname) + 1); - if (pfh16->fontname == (char *)NULL) { - xfree(pfh16); - return (PclFontHead16Ptr) NULL; - } - strcpy(pfh16->fontname, fontname); - - pfi = (FontInfoRec *)&pfont->info; - nindex_col = pfi->lastCol - pfi->firstCol + 1; - nindex_row = pfi->lastRow - pfi->firstRow + 1; - index = (PclFontMapRec **)xalloc(sizeof(PclFontMapRec *)*nindex_row); - if (index == (PclFontMapRec **)NULL) { - xfree(pfh16->fontname); - xfree(pfh16); - return (PclFontHead16Ptr) NULL; - } - for (i=0; ifontname); - xfree(pfh16); - return (PclFontHead16Ptr) NULL; - } - for (j=0; j<=nindex_col; j++) - index[i][j].fid = 0x0; - } - - pfh16->index = index; - pfh16->firstCol = pfi->firstCol; - pfh16->lastCol = pfi->lastCol; - pfh16->firstRow = pfi->firstRow; - pfh16->lastRow = pfi->lastRow; - pfh16->next = (PclFontHead16Ptr)NULL; - - if ( prev == (PclFontHead16Ptr) NULL) - pSoftFontInfo->phead16 = pfh16; - else - prev->next = pfh16; - - return pfh16; -} - -static PclInternalFontPtr -makeInternalFont(FontPtr pfont, PclSoftFontInfoPtr pSoftFontInfo) -{ -PclInternalFontPtr pinfont = pSoftFontInfo->pinfont; -PclInternalFontPtr pin = pinfont; -PclInternalFontPtr prev = (PclInternalFontPtr)NULL; -FontPropPtr props; -FontInfoPtr pfi; -char *fontname; -Atom xa_pcl_font_name, xa_res, xa_ave_width, xa_spacing; -int width = 1; -int mask; -int i; - - if (pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclInternalFontPtr)NULL; - - /* - * Verify it has already been created, if so, return it. - */ - if ( (fontname = getFontName(pfont)) == (char *)NULL) - return (PclInternalFontPtr)NULL; - - while (pin != (PclInternalFontPtr) NULL) { - if (!strcmp(pin->fontname, fontname)) - return pin; - prev = pin; - pin = pin->next; - } - - /* - * Create Internal Font Information - */ - pin = (PclInternalFontPtr)xalloc(sizeof(PclInternalFontRec)); - if (pin == (PclInternalFontPtr)NULL) - return (PclInternalFontPtr)NULL; - - pin->fontname = (char *)xalloc(strlen(fontname) + 1); - if (pin->fontname == (char *)NULL) { - xfree(pin); - return (PclInternalFontPtr) NULL; - } - strcpy(pin->fontname, fontname); - - xa_pcl_font_name = MakeAtom("PCL_FONT_NAME", strlen("PCL_FONT_NAME"), TRUE); - xa_res = MakeAtom("RESOLUTION_X", strlen("RESOLUTION_X"), TRUE); - xa_ave_width = MakeAtom("AVERAGE_WIDTH", strlen("AVERAGE_WIDTH"), TRUE); - xa_spacing = MakeAtom("SPACING", strlen("SPACING"), TRUE); - pfi = (FontInfoRec *)&pfont->info; - props = pfi->props; - - mask = 0; - for (i=0; inprops; i++, props++) { - if ( (Atom) props->name == xa_pcl_font_name ) { - pin->pcl_font_name = NameForAtom(props->value); - mask |= 0x1; - } else if ( props->name == XA_POINT_SIZE ) { - pin->height = (float) props->value / 10.0; - mask |= 0x2; - } else if ( (Atom) props->name == xa_res ) { - mask |= 0x4; - } else if ( (Atom) props->name == xa_ave_width ) { - width = (int) props->value / 10; - mask |= 0x8; - } else if ( (Atom) props->name == xa_spacing ) { - pin->spacing = NameForAtom(props->value); - mask |= 0x10; - } - } - if ( mask != 0x1f ) { - xfree(pin->fontname); - xfree(pin); - return (PclInternalFontPtr) NULL; - } - - if ( *pin->spacing != 'P' || *pin->spacing != 'p' ) { - if (width == 0) - width = 1; - pin->pitch = (float) 300.0 / width; /* Hard-Code: Resolution is 300 */ - } - - pin->next = (PclInternalFontPtr)NULL; - if ( prev == (PclInternalFontPtr) NULL) - pSoftFontInfo->pinfont = pin; - else - prev->next = pin; - - return pin; -} - -static void -fillFontDescData(FontPtr pfont, PclFontDescPtr pfd, unsigned int space) -{ -FontInfoPtr pfi; - - pfi = (FontInfoRec *)&pfont->info; - - if ( (pfi->maxbounds.leftSideBearing == pfi->minbounds.leftSideBearing) - && (pfi->maxbounds.rightSideBearing == pfi->minbounds.rightSideBearing) - && (pfi->maxbounds.characterWidth == pfi->minbounds.characterWidth) - && (pfi->maxbounds.ascent == pfi->minbounds.ascent) - && (pfi->maxbounds.descent == pfi->minbounds.descent) - ) - pfd->spacing = MONOSPACE; - else - pfd->spacing = PROPSPACE; - - pfd->pitch = space; - pfd->cellheight = FONTMAXBOUNDS(pfont,ascent) - + FONTMAXBOUNDS(pfont,descent); - pfd->cellwidth = FONTMAXBOUNDS(pfont,rightSideBearing) - - FONTMINBOUNDS(pfont,leftSideBearing); - pfd->ascent = FONTMAXBOUNDS(pfont,ascent); /*FONTASCENT(pfont);*/ - pfd->descent = FONTMAXBOUNDS(pfont,descent); /*FONTDESCENT(pfont);*/ -} - -static PclCharDataPtr -fillCharDescData(PclCharDataPtr pcd, CharInfoPtr pci) -{ -unsigned int byte_width; -unsigned char *p; -register int nbyGlyphWidth; -unsigned char *pglyph, *pg; -unsigned int i, j; - - pcd->h_offset = pci->metrics.leftSideBearing; - pcd->v_offset = pci->metrics.ascent; - pcd->width = pci->metrics.rightSideBearing - - pci->metrics.leftSideBearing; - pcd->height = pci->metrics.ascent + pci->metrics.descent; - pcd->font_pitch = pci->metrics.characterWidth; - - byte_width = (pcd->width + 7)/8; - pcd->raster_top = (unsigned char *)xalloc(byte_width * pcd->height); - if (pcd->raster_top == (unsigned char *)NULL) - return (PclCharDataPtr)NULL; - - p = pcd->raster_top; - nbyGlyphWidth = GLYPHWIDTHBYTESPADDED(pci); - pglyph = FONTGLYPHBITS(pglyphBase, pci); - for (i=0; iheight; i++) { - pg = pglyph + nbyGlyphWidth * i; - for (j=0; jinfo; - props = pfi->props; - fontname = (char *) NULL; - for (i=0; inprops; i++, props++) { - if ( props->name == XA_FONT ) { - fontname = (char *)NameForAtom(props->value); - break; - } - } - return fontname; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Internal Font Selection */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -static char -isInternal(FontPtr pfont) -{ -int i; -FontInfoPtr pfi; -FontPropPtr props; -Atom dest; - - dest = MakeAtom("PRINTER_RESIDENT_FONT", strlen("PRINTER_RESIDENT_FONT"), TRUE); - - pfi = (FontInfoRec *)&pfont->info; - props = pfi->props; - for (i=0; inprops; i++, props++) { - if ( (Atom) props->name == dest && props->value == 2 ) - return INTERNAL_FONT; - } - return DOWNLOAD_FONT; -} - -static void -selectInternalFont(FILE *outFile, PclInternalFontPtr pin, int fid) -{ - fprintf(outFile, "%c*c%dD", ESC, fid); - if ( *pin->spacing == 'P' || *pin->spacing == 'p' ) - fprintf(outFile, pin->pcl_font_name, pin->height); - else - fprintf(outFile, pin->pcl_font_name, pin->pitch); - fprintf(outFile, "%c*c6F", ESC); -} - -static void -selectSize(FILE *outFile, - PclContextPrivPtr pConPriv, - PclInternalFontPtr pin) -{ - if ( *pin->spacing == 'P' || *pin->spacing == 'p' ) { - sprintf(t, "SD4,%f;", pin->height); - SAVE_PCL( outFile, pConPriv, t ); - } else { - sprintf(t, "SD3,%f;", pin->pitch); - SAVE_PCL( outFile, pConPriv, t ); - } - return; -} - -#ifdef DO_TWO_BYTE_PCL -static void -code_conv( - PclSoftFontInfoPtr pSoftFontInfo, - FontPtr pfont, - char *from, - char *to -) -{ -iconv_t cd; -char frombuf[9], *fromptr; -size_t inbyte = 5, outbyte=2; - - fromptr = frombuf; - frombuf[0] = 0x1b; /* Esc */ - frombuf[1] = 0x24; /* $ */ - frombuf[2] = 0x42; /* B */ - frombuf[3] = *from; - frombuf[4] = *(from+1); - frombuf[5] = 0x1b; /* Esc */ - frombuf[6] = 0x28; /* ( */ - frombuf[7] = 0x4a; /* J */ - frombuf[8] = 0x0; - if ((cd = iconv_open("sjis", "jis")) == (iconv_t)(-1)) { - *to = (unsigned char)NULL; - return; - } - - if ( iconv(cd, &fromptr, &inbyte, &to, &outbyte) == -1 ) - *to = (unsigned char)NULL; - - iconv_close(cd); - return; -} -#endif /* DO_TWO_BYTE_PCL */ diff --git a/hw/xprint/pcl/PclWindow.c b/hw/xprint/pcl/PclWindow.c deleted file mode 100644 index 950933e49..000000000 --- a/hw/xprint/pcl/PclWindow.c +++ /dev/null @@ -1,209 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclWindow.c -** * -** * Contents: -** * Window code for Pcl driver. -** * -** * Created: 2/02/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "mistruct.h" -#include "regionstr.h" -#include "windowstr.h" -#include "gcstruct.h" - -#include "Pcl.h" - -#if 0 -/* - * The following list of strings defines the properties which will be - * placed on the screen's root window if the property was defined in - * the start-up configuration resource database. - */ -static /* const */ char *propStrings[] = { - DT_PRINT_JOB_HEADER, - DT_PRINT_JOB_TRAILER, - DT_PRINT_JOB_COMMAND, /* old-obsolete */ - DT_PRINT_JOB_EXEC_COMMAND, - DT_PRINT_JOB_EXEC_OPTIONS, - DT_PRINT_PAGE_HEADER, - DT_PRINT_PAGE_TRAILER, - DT_PRINT_PAGE_COMMAND, - (char *)NULL -}; -#endif - -/* - * PclCreateWindow - watch for the creation of the root window. - * When it's created, register the screen with the print extension, - * and put the default command/header properties on it. - */ -/*ARGSUSED*/ - -Bool -PclCreateWindow( - register WindowPtr pWin) -{ - PclWindowPrivPtr pPriv; - -#if 0 - Bool status = Success; - ScreenPtr pScreen = pWin->drawable.pScreen; - PclScreenPrivPtr pScreenPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PclScreenPrivateKey); - PclWindowPrivPtr pWinPriv = (PclWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PclWindowPrivateKey); - - /* - * Initialize this window's private struct. - */ - pWinPriv->jobFileName = (char *)NULL; - pWinPriv->pJobFile = (FILE *)NULL; - pWinPriv->pageFileName = (char *)NULL; - pWinPriv->pPageFile = (FILE *)NULL; - - if(pWin->parent == (WindowPtr)NULL) /* root window? */ - { - Atom propName; /* type = XA_STRING */ - char *propVal; - int i; - XrmDatabase rmdb = pScreenPriv->resDB; - - /* - * Put the defaults spec'd in the config files in properties on this - * screen's root window. - */ - for(i = 0; propStrings[i] != (char *)NULL; i++) - { - if((propVal = _DtPrintGetPrinterResource(pWin, rmdb, - propStrings[i])) != - (char *)NULL) - { - propName = MakeAtom(propStrings[i], strlen(propStrings[i]), - TRUE); - dixChangeWindowProperty(serverClient, pWin, propName, XA_STRING, - 8, PropModeReplace, strlen(propVal), - (pointer)propVal, FALSE); - xfree(propVal); - } - } - } - - return status; -#endif - - /* - * Invalidate the window's private print context. - */ - pPriv = (PclWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PclWindowPrivateKey); - pPriv->validContext = 0; - - return TRUE; -} - - -/*ARGSUSED*/ -Bool PclMapWindow( - WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PclPositionWindow( - register WindowPtr pWin, - int x, - int y) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PclUnmapWindow( - WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -void -PclCopyWindow( - WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc) -{ -} - -/*ARGSUSED*/ -Bool -PclChangeWindowAttributes( - register WindowPtr pWin, - register unsigned long mask) -{ - if( pWin->backingStore != NotUseful ) - { - pWin->backingStore = NotUseful; - mask |= CWBackingStore; - } - - return TRUE; -} - -/*ARGSUSED*/ -Bool -PclDestroyWindow( - WindowPtr pWin) -{ - return TRUE; -} - diff --git a/hw/xprint/pcl/Pclmap.h b/hw/xprint/pcl/Pclmap.h deleted file mode 100644 index 18ac31d90..000000000 --- a/hw/xprint/pcl/Pclmap.h +++ /dev/null @@ -1,210 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCLMAP_H_ -#define _PCLMAP_H_ - -#ifdef XP_PCL_COLOR -#ifdef CATNAME -#undef CATNAME -#endif -#if !defined(UNIXCPP) || defined(ANSICPP) -#define PCLNAME(subname) PclCr##subname -#define CATNAME(prefix,subname) prefix##Color##subname -#else -#define PCLNAME(subname) PclCr/**/subname -#define CATNAME(prefix,subname) prefix/**/Color/**/subname -#endif -#endif /* XP_PCL_COLOR */ - -#ifdef XP_PCL_MONO -#ifdef CATNAME -#undef CATNAME -#endif -#if !defined(UNIXCPP) || defined(ANSICPP) -#define PCLNAME(subname) PclMn##subname -#define CATNAME(prefix,subname) prefix##Mono##subname -#else -#define PCLNAME(subname) PclMn/**/subname -#define CATNAME(prefix,subname) prefix/**/Mono/**/subname -#endif -#endif /* XP_PCL_MONO */ - -#ifdef XP_PCL_LJ3 -#ifdef CATNAME -#undef CATNAME -#endif -#if !defined(UNIXCPP) || defined(ANSICPP) -#define PCLNAME(subname) PclLj3##subname -#define CATNAME(prefix,subname) prefix##Lj3##subname -#else -#define PCLNAME(subname) PclLj3/**/subname -#define CATNAME(prefix,subname) prefix/**/Lj3/**/subname -#endif -#endif /* XP_PCL_LJ3 */ - -#ifdef PCLNAME - -/* PclInit.c */ -#define InitializePclDriver CATNAME(Initialize, PclDriver) -#define PclCloseScreen PCLNAME(CloseScreen) -#define PclGetContextFromWindow PCLNAME(GetContextFromWindow) -#define PclScreenPrivateKey PCLNAME(ScreenPrivateKey) -#define PclWindowPrivateKey PCLNAME(WindowPrivateKey) -#define PclContextPrivateKey PCLNAME(ContextPrivateKey) -#define PclPixmapPrivateKey PCLNAME(PixmapPrivateKey) -#define PclGCPrivateKey PCLNAME(GCPrivateKey) - -/* PclPrint.c */ -#define PclStartJob PCLNAME(StartJob) -#define PclEndJob PCLNAME(EndJob) -#define PclStartPage PCLNAME(StartPage) -#define PclEndPage PCLNAME(EndPage) -#define PclStartDoc PCLNAME(StartDoc) -#define PclEndDoc PCLNAME(EndDoc) -#define PclDocumentData PCLNAME(DocumentData) -#define PclGetDocumentData PCLNAME(GetDocumentData) - -/* PclWindow.c */ -#define PclCreateWindow PCLNAME(CreateWindow) -#define PclMapWindow PCLNAME(MapWindow) -#define PclPositionWindow PCLNAME(PositionWindow) -#define PclUnmapWindow PCLNAME(UnmapWindow) -#define PclCopyWindow PCLNAME(CopyWindow) -#define PclChangeWindowAttributes PCLNAME(ChangeWindowAttributes) -#define PclDestroyWindow PCLNAME(DestroyWindow) - -/* PclGC.c */ -#define PclCreateGC PCLNAME(CreateGC) -#define PclDestroyGC PCLNAME(DestroyGC) -#define PclGetDrawablePrivateStuff PCLNAME(GetDrawablePrivateStuff) -#define PclSetDrawablePrivateGC PCLNAME(SetDrawablePrivateGC) -#define PclSendPattern PCLNAME(SendPattern) -#define PclUpdateDrawableGC PCLNAME(UpdateDrawableGC) -#define PclComputeCompositeClip PCLNAME(ComputeCompositeClip) -#define PclValidateGC PCLNAME(ValidateGC) - -/* PclAttr.c */ -#define PclGetAttributes PCLNAME(GetAttributes) -#define PclGetOneAttribute PCLNAME(GetOneAttribute) -#define PclAugmentAttributes PCLNAME(AugmentAttributes) -#define PclSetAttributes PCLNAME(SetAttributes) - -/* PclColor.c */ -#define PclLookUp PCLNAME(LookUp) -#define PclCreateDefColormap PCLNAME(CreateDefColormap) -#define PclCreateColormap PCLNAME(CreateColormap) -#define PclDestroyColormap PCLNAME(DestroyColormap) -#define PclInstallColormap PCLNAME(InstallColormap) -#define PclUninstallColormap PCLNAME(UninstallColormap) -#define PclListInstalledColormaps PCLNAME(ListInstalledColormaps) -#define PclStoreColors PCLNAME(StoreColors) -#define PclResolveColor PCLNAME(ResolveColor) -#define PclFindPaletteMap PCLNAME(FindPaletteMap) -#define PclUpdateColormap PCLNAME(UpdateColormap) -#define PclReadMap PCLNAME(ReadMap) - -/* PclPixmap.c */ -#define PclCreatePixmap PCLNAME(CreatePixmap) -#define PclDestroyPixmap PCLNAME(DestroyPixmap) - -/* PclArc.c */ -#define PclDoArc PCLNAME(DoArc) -#define PclPolyArc PCLNAME(PolyArc) -#define PclPolyFillArc PCLNAME(PolyFillArc) - -/* PclArea.c */ -#define PclPutImage PCLNAME(PutImage) -#define PclCopyArea PCLNAME(CopyArea) -#define PclCopyPlane PCLNAME(CopyPlane) - -/* PclLine */ -#define PclPolyLine PCLNAME(PolyLine) -#define PclPolySegment PCLNAME(PolySegment) - -/* PclPixel.c */ -#define PclPolyPoint PCLNAME(PolyPoint) -#define PclPushPixels PCLNAME(PushPixels) - -/* PclPolygon.c */ -#define PclPolyRectangle PCLNAME(PolyRectangle) -#define PclFillPolygon PCLNAME(FillPolygon) -#define PclPolyFillRect PCLNAME(PolyFillRect) - -/* PclSpans.c */ -#define PclFillSpans PCLNAME(FillSpans) -#define PclSetSpans PCLNAME(SetSpans) - -/* PclText.c */ -#define PclPolyText8 PCLNAME(PolyText8) -#define PclPolyText16 PCLNAME(PolyText16) -#define PclImageText8 PCLNAME(ImageText8) -#define PclImageText16 PCLNAME(ImageText16) -#define PclImageGlyphBlt PCLNAME(ImageGlyphBlt) -#define PclPolyGlyphBlt PCLNAME(PolyGlyphBlt) -#define PclPolyGlyphBlt PCLNAME(PolyGlyphBlt) - -/* PclFonts.c */ -#define PclRealizeFont PCLNAME(RealizeFont) -#define PclUnrealizeFont PCLNAME(UnrealizeFont) - -/* PclSFonts.c */ -#define PclDownloadSoftFont8 PCLNAME(DownloadSoftFont8) -#define PclDownloadSoftFont16 PCLNAME(DownloadSoftFont16) -#define PclCreateSoftFontInfo PCLNAME(CreateSoftFontInfo) -#define PclDestroySoftFontInfo PCLNAME(DestroySoftFontInfo) - -/* PclMisc.c */ -#define PclQueryBestSize PCLNAME(QueryBestSize) -#define GetPropString PCLNAME(GetPropString) -#define SystemCmd PCLNAME(SystemCmd) -#define PclGetMediumDimensions PCLNAME(GetMediumDimensions) -#define PclGetReproducibleArea PCLNAME(GetReproducibleArea) -#define PclSpoolFigs PCLNAME(SpoolFigs) -#define PclSendData PCLNAME(SendData) - -/* PclCursor.c */ -#define PclConstrainCursor PCLNAME(ConstrainCursor) -#define PclCursorLimits PCLNAME(CursorLimits) -#define PclDisplayCursor PCLNAME(DisplayCursor) -#define PclRealizeCursor PCLNAME(RealizeCursor) -#define PclUnrealizeCursor PCLNAME(UnrealizeCursor) -#define PclRecolorCursor PCLNAME(RecolorCursor) -#define PclSetCursorPosition PCLNAME(SetCursorPosition) - -#endif - -#endif /* _PCLMAP_H_ */ diff --git a/hw/xprint/ps/Makefile.am b/hw/xprint/ps/Makefile.am deleted file mode 100644 index 08638b19d..000000000 --- a/hw/xprint/ps/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -noinst_LTLIBRARIES = libps.la - -INCLUDES = -I$(top_srcdir)/hw/xprint - -AM_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ @FREETYPE_CFLAGS@ \ - -D_XP_PRINT_SERVER_ -DXP_PSTEXT - -libps_la_SOURCES = \ - PsArc.c \ - PsArea.c \ - PsAttr.c \ - PsAttVal.c \ - PsCache.c \ - PsColor.c \ - PsDef.h \ - PsFonts.c \ - PsGC.c \ - Ps.h \ - PsImageUtil.c \ - PsInit.c \ - PsLine.c \ - PsMisc.c \ - psout.c \ - psout.h \ - PsPixel.c \ - PsPixmap.c \ - PsPolygon.c \ - PsPrint.c \ - PsSpans.c \ - PsText.c \ - PsWindow.c - -EXTRA_DIST = PsFTFonts.c \ - psout_ft.c \ - psout_ftpstype1.c \ - psout_ftpstype3.c \ - ttf2pt1wrap.c - -if XP_USE_FREETYPE - AM_CFLAGS += -DXP_USE_FREETYPE - libps_la_SOURCES += $(EXTRA_DIST) -endif diff --git a/hw/xprint/ps/Ps.h b/hw/xprint/ps/Ps.h deleted file mode 100644 index a25e9891a..000000000 --- a/hw/xprint/ps/Ps.h +++ /dev/null @@ -1,600 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: Ps.h -** * -** * Contents: defines and includes for the Ps driver -** * for a printing X server. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PS_H_ -#define _PS_H_ - -#include - -#ifdef abs -#undef abs /* this is because of a non-Spec1170ness in misc.h */ -#endif -#include -#include "scrnintstr.h" -#include "dix.h" - -#include "PsDef.h" -#include "psout.h" - -#include -#include - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" - -/* - * Some sleazes to force the XrmDB stuff into the server - */ -#ifndef HAVE_XPointer -typedef char *XPointer; -#define Status int -#define True 1 -#define False 0 -#endif - -#include "misc.h" -#include -#include -#include "attributes.h" - - -/* - * Public index variables from PsInit.c - */ - -extern DevPrivateKey PsScreenPrivateKey; -extern DevPrivateKey PsWindowPrivateKey; -extern DevPrivateKey PsContextPrivateKey; -extern DevPrivateKey PsPixmapPrivateKey; -extern XpValidatePoolsRec PsValidatePoolsRec; - -/* - * Display list structures - */ - -#define DPY_BLOCKSIZE 4096 - -typedef struct -{ - int mode; - int nPoints; - xPoint *pPoints; -} PsPolyPointsRec; - -typedef struct -{ - int nSegments; - xSegment *pSegments; -} PsSegmentsRec; - -typedef struct -{ - int nRects; - xRectangle *pRects; -} PsRectanglesRec; - -typedef struct -{ - int nArcs; - xArc *pArcs; -} PsArcsRec; - -typedef struct -{ - int x; - int y; - int count; - char *string; -} PsText8Rec; - -typedef struct -{ - int x; - int y; - int count; - unsigned short *string; -} PsText16Rec; - -typedef struct -{ - int depth; - int x; - int y; - int w; - int h; - int leftPad; - int format; - int res; /* image resolution */ - char *pData; -} PsImageRec; - -typedef struct -{ - int x; - int y; - int w; - int h; -} PsFrameRec; - -typedef enum -{ - PolyPointCmd, - PolyLineCmd, - PolySegmentCmd, - PolyRectangleCmd, - FillPolygonCmd, - PolyFillRectCmd, - PolyArcCmd, - PolyFillArcCmd, - Text8Cmd, - Text16Cmd, - TextI8Cmd, - TextI16Cmd, - PutImageCmd, - BeginFrameCmd, - EndFrameCmd -} DisplayElmType; - -typedef struct _DisplayElmRec -{ - DisplayElmType type; - GCPtr gc; - union - { - PsPolyPointsRec polyPts; - PsSegmentsRec segments; - PsRectanglesRec rects; - PsArcsRec arcs; - PsText8Rec text8; - PsText16Rec text16; - PsImageRec image; - PsFrameRec frame; - } c; -} DisplayElmRec; - -typedef DisplayElmRec *DisplayElmPtr; - -typedef struct _DisplayListRec -{ - struct _DisplayListRec *next; - int nelms; - DisplayElmRec elms[DPY_BLOCKSIZE]; -} DisplayListRec; - -typedef DisplayListRec *DisplayListPtr; - -/* - * Private structures - */ - -typedef struct -{ - XrmDatabase resDB; - Bool (*DestroyWindow)(WindowPtr); -} PsScreenPrivRec, *PsScreenPrivPtr; - -typedef struct PsFontTypeInfoRec PsFontTypeInfoRec; - -/* Structure to hold information about one font on disk - * Notes: - * - multiple XLFD names can refer to the same |PsFontTypeInfoRec| (if - * they all use the same font on the disk) - * - the FreeType font download code uses multiple |PsFontTypeInfoRec| - * records for one font on disk if they differ in the encoding being - * used (this is an exception from the - * 'one-|PsFontTypeInfoRec|-per-font-on-disk'-design; maybe it it is better - * to rework that in a later step and add a new per-encoding structure). - */ -struct PsFontTypeInfoRec -{ - PsFontTypeInfoRec *next; /* Next record in list... */ - char *adobe_ps_name; /* PostScript font name (from the - * "_ADOBE_POSTSCRIPT_FONTNAME" atom) */ - char *download_ps_name; /* PostScript font name used for font download */ - char *filename; /* File name of font */ -#ifdef XP_USE_FREETYPE - char *ft_download_encoding; /* encoding used for download */ - PsFTDownloadFontType ft_download_font_type; /* PS font type used for download (e.g. Type1/Type3/CID/etc.) */ -#endif /* XP_USE_FREETYPE */ - int is_iso_encoding; /* Is this font encoded in ISO Latin 1 ? */ - int font_type; /* See PSFTI_FONT_TYPE_* below... */ - Bool downloadableFont; /* Font can be downloaded */ - Bool alreadyDownloaded[256]; /* Font has been downloaded (for 256 8bit "sub"-font) */ -}; - -#define PSFTI_FONT_TYPE_OTHER (0) -#define PSFTI_FONT_TYPE_PMF (1) -#define PSFTI_FONT_TYPE_PS_TYPE1_PFA (2) -#define PSFTI_FONT_TYPE_PS_TYPE1_PFB (3) -#define PSFTI_FONT_TYPE_TRUETYPE (4) -/* PSFTI_FONT_TYPE_FREETYPE is means the font is handled by the freetype engine */ -#define PSFTI_FONT_TYPE_FREETYPE (5) - -typedef struct PsFontInfoRec PsFontInfoRec; - -/* Structure which represents our context info for a single XLFD font - * Note that multiple |PsFontInfoRec| records can share the same - * |PsFontTypeInfoRec| record - the |PsFontInfoRec| records represent - * different appearances of the same font on disk(=|PsFontTypeInfoRec|)). - */ -struct PsFontInfoRec -{ - PsFontInfoRec *next; /* Next record in list... */ - /* |font| and |font_fontPrivate| are used by |PsFindFontInfoRec()| to - * identify a font */ - FontPtr font; /* The font this record is for */ - pointer font_fontPrivate; - PsFontTypeInfoRec *ftir; /* Record about the font file on disk */ - const char *dfl_name; /* XLFD for this font */ - int size; /* Font size. Use |mtx| if |size==0| */ - float mtx[4]; /* Transformation matrix (see |size|) */ -}; - -typedef struct -{ - char *jobFileName; - FILE *pJobFile; - GC lastGC; - unsigned char *dash; - int validGC; - ClientPtr getDocClient; - int getDocBufSize; - PsOutPtr pPsOut; - PsFontTypeInfoRec *fontTypeInfoRecords; - PsFontInfoRec *fontInfoRecords; -} PsContextPrivRec, *PsContextPrivPtr; - -typedef struct -{ - int validContext; - XpContextPtr context; -} PsWindowPrivRec, *PsWindowPrivPtr; - -typedef struct -{ - XpContextPtr context; - GC lastGC; - int validGC; - DisplayListPtr dispList; -} PsPixmapPrivRec, *PsPixmapPrivPtr; - -/* - * Macro functions - */ - -#define SEND_PS(f,c) fwrite( c, sizeof( char ), strlen( c ), f ) -#define MIN(a,b) (((a)<(b))?(a):(b)) -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif - -/* - * Functions in PsInit.c - */ - -extern Bool InitializePsDriver(int ndx, ScreenPtr pScreen, int argc, - char **argv); -extern XpContextPtr PsGetContextFromWindow(WindowPtr win); - -/* - * Functions in PsCache.c - */ - -extern int PsBmIsImageCached(int gWidth, int gHeight, char *pBuffer); -extern int PsBmPutImageInCache(int gWidth, int gHeight, char *pBuffer); -extern void PsBmClearImageCache(void); - -/* - * Functions in PsPrint.c - */ - -extern int PsStartJob(XpContextPtr pCon, Bool sendClientData, ClientPtr client); -extern int PsEndJob(XpContextPtr pCon, Bool cancel); -extern int PsStartPage(XpContextPtr pCon, WindowPtr pWin); -extern int PsEndPage(XpContextPtr pCon, WindowPtr pWin); -extern int PsStartDoc(XpContextPtr pCon, XPDocumentType type); -extern int PsEndDoc(XpContextPtr pCon, Bool cancel); -extern int PsDocumentData(XpContextPtr pCon, DrawablePtr pDraw, char *pData, - int len_data, char *pFmt, int len_fmt, char *pOpt, int len_opt, - ClientPtr client); -extern int PsGetDocumentData(XpContextPtr pCon, ClientPtr client, - int maxBufferSize); - -/* - * Functions in PsGC.c - */ - -extern Bool PsCreateGC(GCPtr pGC); -extern PsContextPrivPtr PsGetPsContextPriv( DrawablePtr pDrawable ); -extern int PsUpdateDrawableGC(GCPtr pGC, DrawablePtr pDrawable, - PsOutPtr *psOut, ColormapPtr *cMap); -extern void PsValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); -extern void PsChangeGC(GCPtr pGC, unsigned long changes); -extern void PsCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst); -extern void PsDestroyGC(GCPtr pGC); -extern void PsChangeClip(GCPtr pGC, int type, pointer pValue, int nrects); -extern void PsDestroyClip(GCPtr pGC); -extern void PsCopyClip(GCPtr pgcDst, GCPtr pgcSrc); - -extern GCPtr PsCreateAndCopyGC(DrawablePtr pDrawable, GCPtr pSrc); - -/* - * Functions in PsMisc.c - */ - -extern void PsQueryBestSize(int type, short *pwidth, short *pheight, - ScreenPtr pScreen); -extern Bool PsCloseScreen(int index, ScreenPtr pScreen); -extern void PsLineAttrs(PsOutPtr psOut, GCPtr pGC, ColormapPtr cMap); -extern int PsGetMediumDimensions( - XpContextPtr pCon, - CARD16 *pWidth, - CARD16 *pHeight); -extern int PsGetReproducibleArea( - XpContextPtr pCon, - xRectangle *pRect); -extern int PsSetImageResolution( - XpContextPtr pCon, - int imageRes, - Bool *status); - -/* - * Functions in PsSpans.c - */ - -extern void PsFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nSpans, - DDXPointPtr pPoints, int *pWidths, int fSorted); -extern void PsSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *pSrc, - DDXPointPtr pPoints, int *pWidths, int nSpans, - int fSorted); - -/* - * Functions in PsArea.c - */ - -extern void PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, - int x, int y, int w, int h, int leftPad, int format, - int imageRes, char *pImage); -extern void PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, - int x, int y, int w, int h, int leftPad, - int format, int imageRes, char *pImage); -extern void PsPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, - int x, int y, int w, int h, int leftPad, int format, - char *pImage); -extern void PsPutImageMask(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, char *pImage); -extern RegionPtr PsCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int width, int height, - int dstx, int dsty); -extern RegionPtr PsCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int width, int height, - int dstx, int dsty, unsigned long plane); - -/* - * Functions in PsPixel.c - */ - -extern void PsPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, - int nPoints, xPoint *pPoints); -extern void PsPushPixels(GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable, - int width, int height, int x, int y); - -/* - * Functions in PsLine.c - */ - -extern void PsPolyLine(DrawablePtr pDrawable, GCPtr pGC, int mode, - int nPoints, xPoint *pPoints); -extern void PsPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nSegments, - xSegment *pSegments); - -/* - * Functions in PsPolygon.c - */ - -extern void PsPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nRects, - xRectangle *pRects); -extern void PsFillPolygon(DrawablePtr pDrawable, GCPtr pGC, int shape, - int mode, int nPoints, DDXPointPtr pPoints); -extern void PsPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nRects, - xRectangle *pRects); - -/* - * Functions in PsPolygon.c - */ - -extern void PsPolyArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, - xArc *pArcs); -extern void PsPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, - xArc *pArcs); - -/* - * Functions in PsText.c - */ - -extern int PsPolyText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, char *string); -extern int PsPolyText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, unsigned short *string); -extern void PsImageText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, char *string); -extern void PsImageText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, unsigned short *string); -extern void PsImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - unsigned int nGlyphs, CharInfoPtr *pCharInfo, - pointer pGlyphBase); -extern void PsPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - unsigned int nGlyphs, CharInfoPtr *pCharInfo, - pointer pGlyphBase); - -/* - * Functions in PsWindow.c - */ - -extern Bool PsCreateWindow(WindowPtr pWin); -extern Bool PsMapWindow(WindowPtr pWin); -extern Bool PsPositionWindow(WindowPtr pWin, int x, int y); -extern Bool PsUnmapWindow(WindowPtr pWin); -extern void PsCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, - RegionPtr prgnSrc); -extern Bool PsChangeWindowAttributes(WindowPtr pWin, unsigned long mask); -extern Bool PsDestroyWindow(WindowPtr pWin); - -/* - * Functions in PsFonts.c - */ - -extern Bool PsRealizeFont(ScreenPtr pscr, FontPtr pFont); -extern Bool PsUnrealizeFont(ScreenPtr pscr, FontPtr pFont); -extern char *PsGetFontName(FontPtr pFont); -extern int PsGetFontSize(FontPtr pFont, float *mtx); -extern char *PsGetPSFontName(FontPtr pFont); -extern char *PsGetPSFaceOrFontName(FontPtr pFont); -extern int PsIsISOLatin1Encoding(FontPtr pFont); -extern char *PsGetEncodingName(FontPtr pFont); -extern PsFontInfoRec *PsGetFontInfoRec(DrawablePtr pDrawable, FontPtr pFont); -extern void PsFreeFontInfoRecords(PsContextPrivPtr priv); -extern PsFTDownloadFontType PsGetFTDownloadFontType(void); - -/* - * Functions in PsFTFonts.c - */ - -extern char *PsGetFTFontFileName(FontPtr pFont); -extern Bool PsIsFreeTypeFont(FontPtr pFont); - -/* - * Functions in PsAttr.c - */ - -extern char *PsGetAttributes(XpContextPtr pCon, XPAttributes pool); -extern char *PsGetOneAttribute(XpContextPtr pCon, XPAttributes pool, - char *attr); -extern int PsAugmentAttributes(XpContextPtr pCon, XPAttributes pool, - char *attrs); -extern int PsSetAttributes(XpContextPtr pCon, XPAttributes pool, char *attrs); - -/* - * Functions in PsColor.c - */ - -extern Bool PsCreateColormap(ColormapPtr pColor); -extern void PsDestroyColormap(ColormapPtr pColor); -extern void PsInstallColormap(ColormapPtr pColor); -extern void PsUninstallColormap(ColormapPtr pColor); -extern int PsListInstalledColormaps(ScreenPtr pScreen, XID *pCmapList); -extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs); -extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen, - unsigned short *pBlue, VisualPtr pVisual); -extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval); -extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut, - ColormapPtr cMap); - -/* - * Functions in PsPixmap.c - */ - -extern PixmapPtr PsCreatePixmap(ScreenPtr pScreen, int width, int height, - int depth, unsigned usage_hint); -extern void PsScrubPixmap(PixmapPtr pPixmap); -extern Bool PsDestroyPixmap(PixmapPtr pPixmap); -extern DisplayListPtr PsGetFreeDisplayBlock(PsPixmapPrivPtr priv); -extern void PsReplay(DisplayElmPtr elm, DrawablePtr pDrawable); -extern void PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable); -extern int PsCloneDisplayElm(PixmapPtr dst, - DisplayElmPtr elm, DisplayElmPtr newElm, - int xoff, int yoff); -extern void PsCopyDisplayList(PixmapPtr src, PixmapPtr dst, int xoff, - int yoff, int x, int y, int w, int h); -extern PsElmPtr PsCreateFillElementList(PixmapPtr pix, int *nElms); -extern PsElmPtr PsCloneFillElementList(int nElms, PsElmPtr elms); -extern void PsDestroyFillElementList(int nElms, PsElmPtr elms); - -/* - * Functions in PsImageUtil.c - */ - -extern unsigned long -PsGetImagePixel(char *pImage, int depth, int w, int h, int leftPad, int format, - int px, int py); - -#endif /* _PS_H_ */ diff --git a/hw/xprint/ps/PsArc.c b/hw/xprint/ps/PsArc.c deleted file mode 100644 index 0684307dd..000000000 --- a/hw/xprint/ps/PsArc.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsArc.c -** * -** * Contents: Arc-drawing code for the PS DDX driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsPolyArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyArcCmd; - elm->gc = gc; - elm->c.arcs.nArcs = nArcs; - elm->c.arcs.pArcs = (xArc *)xalloc(nArcs*sizeof(xArc)); - memcpy(elm->c.arcs.pArcs, pArcs, nArcs*sizeof(xArc)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyFillArcCmd; - elm->gc = gc; - elm->c.arcs.nArcs = nArcs; - elm->c.arcs.pArcs = (xArc *)xalloc(nArcs*sizeof(xArc)); - memcpy(elm->c.arcs.pArcs, pArcs, nArcs*sizeof(xArc)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsArcEnum styl; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsSetFillColor(pDrawable, pGC, psOut, cMap); - PsLineAttrs(psOut, pGC, cMap); - if( pGC->arcMode==ArcChord ) styl = PsChord; - else styl = PsPieSlice; - for( i=0 ; i -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - - -void -PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, int imageRes, char *pImage) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - int size = PixmapBytePad(w, depth)*h; - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - elm = &disp->elms[disp->nelms]; - elm->type = PutImageCmd; - elm->gc = gc; - elm->c.image.depth = depth; - elm->c.image.x = x; - elm->c.image.y = y; - elm->c.image.w = w; - elm->c.image.h = h; - elm->c.image.leftPad = leftPad; - elm->c.image.format = format; - elm->c.image.res = imageRes; - elm->c.image.pData = (char *)xalloc(size); - memcpy(elm->c.image.pData, pImage, size); - disp->nelms += 1; - } - else - { - int i, j; - int r, c; - PsOutPtr psOut; - ColormapPtr cMap; - int pageRes, sw, sh; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - if (!imageRes) { - sw = w; - sh = h; - } else { - pageRes = XpGetResolution(XpGetPrintContext(requestingClient)); - sw = (float)w * (float)pageRes / (float)imageRes + 0.5; - sh = (float)h * (float)pageRes / (float)imageRes + 0.5; - } - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - - if( depth!=1 ) - { - PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3); - - for( r=0 ; rbgPixel), - PsGetPixelColor(cMap, pGC->fgPixel), - x, y, w, h, sw, sh, 1); - for( r=0 ; r>j)&1)<<(7-j)); } -#elif IMAGE_BYTE_ORDER == MSBFirst - iv_ = iv; -#else -#error Unsupported byte order -#endif - c = iv_; - PsOut_OutImageBytes(psOut, 1, &c); - } - } - PsOut_EndImage(psOut); - } - } -} - -void -PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, int imageRes, char *pImage) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - int size = PixmapBytePad(w, depth)*h; - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - elm = &disp->elms[disp->nelms]; - elm->type = PutImageCmd; - elm->gc = gc; - elm->c.image.depth = depth; - elm->c.image.x = x; - elm->c.image.y = y; - elm->c.image.w = w; - elm->c.image.h = h; - elm->c.image.leftPad = leftPad; - elm->c.image.format = format; - elm->c.image.res = imageRes; - elm->c.image.pData = (char *)xalloc(size); - memcpy(elm->c.image.pData, pImage, size); - disp->nelms += 1; - } - else - { - int i, j; - int r, c; - PsOutPtr psOut; - ColormapPtr cMap; - int pageRes, sw, sh; -#ifdef BM_CACHE - long cache_id = 0; -#endif - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - if (!imageRes) { - sw = w; - sh = h; - } else { - pageRes = XpGetResolution(XpGetPrintContext(requestingClient)); - sw = (float)w * (float)pageRes / (float)imageRes + 0.5; - sh = (float)h * (float)pageRes / (float)imageRes + 0.5; - } - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - -#ifdef BM_CACHE - cache_id = PsBmIsImageCached(w, h, pImage); - - if(!cache_id) - { - cache_id = PsBmPutImageInCache(w, h, pImage); - - if(!cache_id) - return; - - PsOut_BeginImageCache(psOut, cache_id); -#endif - if( depth!=1 ) - { - PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3); - - for( r=0 ; rbgPixel), - PsGetPixelColor(cMap, pGC->fgPixel), - x, y, w, h, sw, sh, 1); - for( r=0 ; r>j)&1)<<(7-j)); } -#elif IMAGE_BYTE_ORDER == MSBFirst - iv_ = iv; -#else -#error Unsupported byte order -#endif - c = iv_; - PsOut_OutImageBytes(psOut, 1, &c); - } - } - PsOut_EndImage(psOut); - } -#ifdef BM_CACHE - PsOut_EndImageCache(psOut); - } - PsOut_ImageCache(psOut, x, y, cache_id, PsGetPixelColor(cMap, pGC->bgPixel), - PsGetPixelColor(cMap, pGC->fgPixel)); -#endif - } -} -void -PsPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, char *pImage) -{ - XpContextPtr pcon; - if (requestingClient && (pcon = XpGetPrintContext(requestingClient))) - PsPutScaledImage(pDrawable, pGC, depth, x, y, w, h, leftPad, format, - pcon->imageRes, pImage); -} -void -PsPutImageMask(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, char *pImage) -{ - XpContextPtr pcon; - if (requestingClient && (pcon = XpGetPrintContext(requestingClient))) - PsPutScaledImageIM(pDrawable, pGC, depth, x, y, w, h, leftPad, format, - pcon->imageRes, pImage); -} - -RegionPtr -PsCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, - int width, int height, int dstx, int dsty) -{ - PixmapPtr src = (PixmapPtr)pSrc; - PixmapPtr dst = (PixmapPtr)pDst; - - if( pSrc->type!=DRAWABLE_PIXMAP ) return NULL; - if( pDst->type!=DRAWABLE_PIXMAP ) - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(pGC, pDst, &psOut, &cMap)==FALSE ) return NULL; - PsOut_Offset(psOut, pDst->x, pDst->y); - PsOut_BeginFrame(psOut, dstx-srcx, dsty-srcy, dstx, dsty, width, height); - PsReplayPixmap(src, pDst); - PsOut_EndFrame(psOut); - } - else PsCopyDisplayList(src, dst, dstx-srcx, dsty-srcy, dstx, dsty, - width, height); - return NULL; -} - -RegionPtr -PsCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, - int width, int height, int dstx, int dsty, unsigned long plane) -{ - PixmapPtr src = (PixmapPtr)pSrc; - PixmapPtr dst = (PixmapPtr)pDst; - - if( pSrc->type!=DRAWABLE_PIXMAP ) return NULL; - if( pDst->type!=DRAWABLE_PIXMAP ) - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(pGC, pDst, &psOut, &cMap)==FALSE ) return NULL; - PsOut_Offset(psOut, pDst->x, pDst->y); - PsOut_BeginFrame(psOut, dstx-srcx, dsty-srcy, dstx, dsty, width, height); - PsReplayPixmap(src, pDst); - PsOut_EndFrame(psOut); - } - else PsCopyDisplayList(src, dst, dstx-srcx, dsty-srcy, dstx, dsty, - width, height); - return NULL; -} diff --git a/hw/xprint/ps/PsAttVal.c b/hw/xprint/ps/PsAttVal.c deleted file mode 100644 index de2e6c8e4..000000000 --- a/hw/xprint/ps/PsAttVal.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - */ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "AttrValid.h" - -/* - * define valid values and defaults for Printer pool - */ -static XpOid ValidContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape, - xpoid_val_content_orientation_reverse_portrait, - xpoid_val_content_orientation_reverse_landscape -}; -static XpOidList ValidContentOrientations = { - ValidContentOrientationsOids, XpNumber(ValidContentOrientationsOids) -}; - -static XpOid DefaultContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList DefaultContentOrientations = { - DefaultContentOrientationsOids, XpNumber(DefaultContentOrientationsOids) -}; - -static XpOid ValidPlexesOids[] = { - xpoid_val_plex_simplex, xpoid_val_plex_duplex, xpoid_val_plex_tumble -}; -static XpOidList ValidPlexes = { - ValidPlexesOids, XpNumber(ValidPlexesOids) -}; - -static XpOid DefaultPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList DefaultPlexes = { - DefaultPlexesOids, XpNumber(DefaultPlexesOids) -}; - -static unsigned long ValidPrinterResolutionsCards[] = { - 75, - 100, - 120, - 150, - 180, - 200, - 240, - 300, - 360, - 400, - 600, - 720, - 940, - 1200, - 1440, - 2400 -}; -static XpOidCardList ValidPrinterResolutions = { - ValidPrinterResolutionsCards, XpNumber(ValidPrinterResolutionsCards) -}; - -static unsigned long DefaultPrinterResolutionsCards[] = { - 75, - 100, - 120, - 150, - 180, - 200, - 240, - 300, - 360, - 400, - 600, - 720, - 940, - 1200 -}; -static XpOidCardList DefaultPrinterResolutions = { - DefaultPrinterResolutionsCards, XpNumber(DefaultPrinterResolutionsCards) -}; - -static XpOid ValidListfontsModesOids[] = { - xpoid_val_xp_list_internal_printer_fonts, xpoid_val_xp_list_glyph_fonts -}; -static XpOidList ValidListfontsModes = { - ValidListfontsModesOids, XpNumber(ValidListfontsModesOids) -}; - -static XpOid DefaultListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList DefaultListfontsModes = { - DefaultListfontsModesOids, XpNumber(DefaultListfontsModesOids) -}; - -static XpOid ValidSetupProvisoOids[] = { - xpoid_val_xp_setup_mandatory, xpoid_val_xp_setup_optional -}; -static XpOidList ValidSetupProviso = { - - - ValidSetupProvisoOids, XpNumber(ValidSetupProvisoOids) -}; - -static XpOidDocFmt ValidDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList ValidDocFormatsSupported = { - ValidDocFormatsSupportedFmts, XpNumber(ValidDocFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultDocFormatsSupported = { - DefaultDocFormatsSupportedFmts, XpNumber(DefaultDocFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidEmbeddedFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList ValidEmbeddedFormatsSupported = { - ValidEmbeddedFormatsSupportedFmts, XpNumber(ValidEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultEmbeddedFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultEmbeddedFormatsSupported = { - DefaultEmbeddedFormatsSupportedFmts, XpNumber(DefaultEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } - -}; -static XpOidDocFmtList ValidRawFormatsSupported = { - ValidRawFormatsSupportedFmts, XpNumber(ValidRawFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultRawFormatsSupported = { - DefaultRawFormatsSupportedFmts, XpNumber(DefaultRawFormatsSupportedFmts) -}; - -static XpOid ValidInputTraysOids[] = { - xpoid_val_input_tray_manual, - xpoid_val_input_tray_main, - xpoid_val_input_tray_envelope, - xpoid_val_input_tray_large_capacity, - xpoid_val_input_tray_bottom -}; -static XpOidList ValidInputTrays = { - ValidInputTraysOids, XpNumber(ValidInputTraysOids) -}; - -static XpOid ValidMediumSizesOids[] = { - xpoid_val_medium_size_iso_a0, - xpoid_val_medium_size_iso_a1, - xpoid_val_medium_size_iso_a2, - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_iso_a5, - xpoid_val_medium_size_iso_a6, - xpoid_val_medium_size_iso_a7, - xpoid_val_medium_size_iso_a8, - xpoid_val_medium_size_iso_a9, - xpoid_val_medium_size_iso_a10, - xpoid_val_medium_size_iso_b0, - xpoid_val_medium_size_iso_b1, - xpoid_val_medium_size_iso_b2, - xpoid_val_medium_size_iso_b3, - xpoid_val_medium_size_iso_b4, - xpoid_val_medium_size_iso_b5, - xpoid_val_medium_size_iso_b6, - xpoid_val_medium_size_iso_b7, - xpoid_val_medium_size_iso_b8, - xpoid_val_medium_size_iso_b9, - xpoid_val_medium_size_iso_b10, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_folio, - xpoid_val_medium_size_invoice, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_quarto, - xpoid_val_medium_size_iso_c3, - xpoid_val_medium_size_iso_c4, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_c6, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_10x13_envelope, - xpoid_val_medium_size_na_9x12_envelope, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_na_7x9_envelope, - xpoid_val_medium_size_na_9x11_envelope, - xpoid_val_medium_size_na_10x14_envelope, - xpoid_val_medium_size_na_number_9_envelope, - xpoid_val_medium_size_na_6x9_envelope, - xpoid_val_medium_size_na_10x15_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_a, - xpoid_val_medium_size_b, - xpoid_val_medium_size_c, - xpoid_val_medium_size_d, - xpoid_val_medium_size_e, - xpoid_val_medium_size_jis_b0, - xpoid_val_medium_size_jis_b1, - xpoid_val_medium_size_jis_b2, - xpoid_val_medium_size_jis_b3, - xpoid_val_medium_size_jis_b4, - xpoid_val_medium_size_jis_b5, - xpoid_val_medium_size_jis_b6, - xpoid_val_medium_size_jis_b7, - xpoid_val_medium_size_jis_b8, - xpoid_val_medium_size_jis_b9, - xpoid_val_medium_size_jis_b10, - xpoid_val_medium_size_hp_2x_postcard, - xpoid_val_medium_size_hp_european_edp, - xpoid_val_medium_size_hp_mini, - xpoid_val_medium_size_hp_postcard, - xpoid_val_medium_size_hp_tabloid, - xpoid_val_medium_size_hp_us_edp, - xpoid_val_medium_size_hp_us_government_legal, - xpoid_val_medium_size_hp_us_government_letter, -}; -static XpOidList ValidMediumSizes = { - ValidMediumSizesOids, XpNumber(ValidMediumSizesOids) -}; - -static XpOidDocFmt DefaultDocumentFormat = { - "Postscript", "2", NULL -}; - - -/* - * init struct for XpValidate*Pool - */ -XpValidatePoolsRec PsValidatePoolsRec = { - &ValidContentOrientations, &DefaultContentOrientations, - &ValidDocFormatsSupported, &DefaultDocFormatsSupported, - &ValidInputTrays, &ValidMediumSizes, - &ValidPlexes, &DefaultPlexes, - &ValidPrinterResolutions, &DefaultPrinterResolutions, - &ValidEmbeddedFormatsSupported, &DefaultEmbeddedFormatsSupported, - &ValidListfontsModes, &DefaultListfontsModes, - &ValidRawFormatsSupported, &DefaultRawFormatsSupported, - &ValidSetupProviso, - &DefaultDocumentFormat -}; diff --git a/hw/xprint/ps/PsAttr.c b/hw/xprint/ps/PsAttr.c deleted file mode 100644 index 0925716f5..000000000 --- a/hw/xprint/ps/PsAttr.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsAttr.c -** * -** * Contents: Attribute-handling functions for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "attributes.h" - -char * -PsGetAttributes( - XpContextPtr pCon, - XPAttributes pool) -{ - return XpGetAttributes(pCon, pool); -} - -char * -PsGetOneAttribute( - XpContextPtr pCon, - XPAttributes pool, - char *attr) -{ - return XpGetOneAttribute(pCon, pool, attr); -} - -int -PsAugmentAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs) -{ - return XpAugmentAttributes(pCon, pool, attrs); -} - -int -PsSetAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs) -{ - return XpSetAttributes(pCon, pool, attrs); -} diff --git a/hw/xprint/ps/PsCache.c b/hw/xprint/ps/PsCache.c deleted file mode 100644 index 5c823a13e..000000000 --- a/hw/xprint/ps/PsCache.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996, 2000 Sun Microsystems, Inc. All Rights Reserved. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsCache.c -** * -** * Contents: Character-caching routines -** * -** * Created By: Jay Hobson (Sun MicroSystems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" -#include -#include - -#define GET 0 -#define RESET 1 - -struct bm_cache_list { - struct bm_cache_list *next; - struct bm_cache_list *prev; - int height; - long id; - char *pBuffer; -}; - -struct bm_cache_head { - struct bm_cache_list *head; - int width; - struct bm_cache_head *next; - struct bm_cache_head *prev; -}; - -static struct bm_cache_head *bm_cache = NULL; - -static long -PsBmUniqueId(int func) -{ - static long unique_id = 0; - - if(func == RESET) - { - unique_id = 0; - return 0; - } - else - return ++unique_id; -} - -int -PsBmIsImageCached( - int gWidth, - int gHeight, - char *pBuffer) -{ - int return_val = 0; - struct bm_cache_head *pList = bm_cache; - - while(pList != NULL && !return_val) - { - if(pList->width == gWidth) - { - struct bm_cache_list *pItem = pList->head; - - while(pItem != NULL) - { - if(pItem->height == gHeight) - { - int length = 4*(gWidth/32+(gWidth%32!=0))*gHeight; - - if(!memcmp(pItem->pBuffer, pBuffer, sizeof(char)*length)) - { - return_val = pItem->id; - break; - } - } - else if(pItem->height > gHeight) - break; - - pItem = pItem->next; - } - } - else if(pList->width > gWidth) - break; - - pList = pList->next; - } - return return_val; -} - -int -PsBmPutImageInCache( - int gWidth, - int gHeight, - char *pBuffer) -{ - int return_val = 0; - struct bm_cache_head *pList = bm_cache; - struct bm_cache_list *pNew; - int length = 4*(gWidth/32+(gWidth%32!=0))*gHeight; - - if(gWidth == 1 && gHeight == 1 && pBuffer[0] == 0) - return return_val; - - pNew = (struct bm_cache_list *)malloc(sizeof(struct bm_cache_list)); - pNew->next = NULL; - pNew->prev = NULL; - pNew->height = gHeight; - pNew->id = PsBmUniqueId(GET); - pNew->pBuffer = (char *)malloc(sizeof(char)*length); - - memcpy(pNew->pBuffer, pBuffer, length); - - while(pList != NULL) - { - if(pList->width == gWidth) - { - struct bm_cache_list *pItem = pList->head; - - while(pItem != NULL) - { - if(pItem->height >= gHeight) - { - pNew->next = pItem; - pNew->prev = pItem->prev; - if(pItem->prev != NULL) - pItem->prev->next = pNew; - else - pList->head = pNew; - pItem->prev = pNew; - - return_val = pNew->id; - - break; - } - else if(pItem->next == NULL) - { - pNew->prev = pItem; - pItem->next = pNew; - - return_val = pNew->id; - - break; - } - - pItem = pItem->next; - } - - break; - } - - pList = pList->next; - } - - if(pList == NULL) - { - struct bm_cache_head *pNewList; - - pNewList = (struct bm_cache_head *)malloc(sizeof(struct bm_cache_head)); - - pNewList->next = NULL; - pNewList->prev = NULL; - pNewList->width = gWidth; - pNewList->head = pNew; - - if(bm_cache == NULL) - { - bm_cache = pNewList; - return_val = pNew->id; - } - else - { - pList = bm_cache; - - while(pList != NULL) - { - if(pList->width > gWidth) - { - pNewList->next = pList; - pNewList->prev = pList->prev; - - if(pList->prev != NULL) - pList->prev->next = pNewList; - else - bm_cache = pNewList; - pList->prev = pNewList; - - return_val = pNew->id; - - break; - } - else if(pList->next == NULL) - { - pNewList->prev = pList; - pList->next = pNewList; - - return_val = pNew->id; - - break; - } - - pList = pList->next; - } - } - } - - return return_val; -} - - -static void -PsBmClearImageCacheItem( - struct bm_cache_list *pItem) -{ - if(pItem != NULL) - { - if(pItem->pBuffer != NULL) - free(pItem->pBuffer); - pItem->pBuffer = NULL; - - if(pItem->next) - PsBmClearImageCacheItem(pItem->next); - pItem->next = NULL; - - free(pItem); - pItem = NULL; - } -} - -static void -PsBmClearImageCacheList( - struct bm_cache_head *pList) -{ - if(pList != NULL) - { - if(pList->head) - PsBmClearImageCacheItem(pList->head); - pList->head = NULL; - - if(pList->next) - PsBmClearImageCacheList(pList->next); - pList->next = NULL; - - free(pList); - pList = NULL; - } -} - -void -PsBmClearImageCache(void) -{ - PsBmClearImageCacheList(bm_cache); - - bm_cache = NULL; - - PsBmUniqueId(RESET); -} - diff --git a/hw/xprint/ps/PsColor.c b/hw/xprint/ps/PsColor.c deleted file mode 100644 index a91272db0..000000000 --- a/hw/xprint/ps/PsColor.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsColor.c -** * -** * Contents: Color routines for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "mi.h" -#include "micmap.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "colormapst.h" - -Bool -PsCreateColormap(ColormapPtr pColor) -{ - return miInitializeColormap(pColor); -} - -void -PsDestroyColormap(ColormapPtr pColor) -{ - /* NO-OP */ -} - -void -PsInstallColormap(ColormapPtr pColor) -{ - miInstallColormap(pColor); -} - -void -PsUninstallColormap(ColormapPtr pColor) -{ - miUninstallColormap(pColor); -} - -int -PsListInstalledColormaps( - ScreenPtr pScreen, - XID *pCmapList) -{ - return miListInstalledColormaps(pScreen, pCmapList); -} - -void -PsStoreColors( - ColormapPtr pColor, - int ndef, - xColorItem *pdefs) -{ - int i; - for( i=0 ; ired[pdefs[i].pixel].co.local.red = pdefs[i].red; - if( pdefs[i].flags&DoGreen ) - pColor->red[pdefs[i].pixel].co.local.green = pdefs[i].green; - if( pdefs[i].flags&DoBlue ) - pColor->red[pdefs[i].pixel].co.local.blue = pdefs[i].blue; - } -} - -void -PsResolveColor( - unsigned short *pRed, - unsigned short *pGreen, - unsigned short *pBlue, - VisualPtr pVisual) -{ - miResolveColor(pRed, pGreen, pBlue, pVisual); -} - -PsOutColor -PsGetPixelColor(ColormapPtr cMap, int pixval) -{ - VisualPtr v = cMap->pVisual; - switch( v->class ) - { - case TrueColor: - { - PsOutColor p = pixval; - PsOutColor r, g, b; - - r = (p & v->redMask) >> v->offsetRed; - g = (p & v->greenMask) >> v->offsetGreen; - b = (p & v->blueMask) >> v->offsetBlue; - - r = cMap->red[r].co.local.red; - g = cMap->green[g].co.local.green; - b = cMap->blue[b].co.local.blue; - -#ifdef PSOUT_USE_DEEPCOLOR - return((r<<32)|(g<<16)|b); -#else - r >>= 8; - g >>= 8; - b >>= 8; - - return((r<<16)|(g<<8)|b); -#endif /* PSOUT_USE_DEEPCOLOR */ - } - case PseudoColor: - case GrayScale: - case StaticGray: - { - PsOutColor r, g, b; - - if( pixval < 0 || pixval > v->ColormapEntries) - return(0); - - r = cMap->red[pixval].co.local.red; - g = cMap->red[pixval].co.local.green; - b = cMap->red[pixval].co.local.blue; - - if ((v->class | DynamicClass) == GrayScale) - { - /* rescale to gray (see |miResolveColor()|) */ - r = g = b = (30L*r + 59L*g + 11L*b) / 100L; - } - -#ifdef PSOUT_USE_DEEPCOLOR - return((r<<32)|(g<<16)|b); -#else - r >>= 8; - g >>= 8; - b >>= 8; - - return((r<<16)|(g<<8)|b); -#endif /* PSOUT_USE_DEEPCOLOR */ - } - default: - FatalError("PsGetPixelColor: Unsupported visual %x\n", - (int)cMap->pVisual->class); - break; - } - - return 0; /* NO-OP*/ -} - -void -PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut, - ColormapPtr cMap) -{ - switch(pGC->fillStyle) - { - case FillSolid: - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - break; - case FillTiled: - if( !PsOut_BeginPattern(psOut, pGC->tile.pixmap, - pGC->tile.pixmap->drawable.width, - pGC->tile.pixmap->drawable.height, PsTile, 0, 0) ) - { - PsReplayPixmap(pGC->tile.pixmap, pDrawable); - PsOut_EndPattern(psOut); - } - PsOut_SetPattern(psOut, pGC->tile.pixmap, PsTile); - break; - case FillStippled: - if( !PsOut_BeginPattern(psOut, pGC->stipple, - pGC->stipple->drawable.width, - pGC->stipple->drawable.height, PsStip, 0, - PsGetPixelColor(cMap, pGC->fgPixel)) ) - { - PsReplayPixmap(pGC->stipple, pDrawable); - PsOut_EndPattern(psOut); - } - PsOut_SetPattern(psOut, pGC->stipple, PsStip); - break; - case FillOpaqueStippled: - if( !PsOut_BeginPattern(psOut, pGC->stipple, - pGC->stipple->drawable.width, - pGC->stipple->drawable.height, PsOpStip, - PsGetPixelColor(cMap, pGC->bgPixel), - PsGetPixelColor(cMap, pGC->fgPixel)) ) - { - PsReplayPixmap(pGC->stipple, pDrawable); - PsOut_EndPattern(psOut); - } - PsOut_SetPattern(psOut, pGC->stipple, PsOpStip); - break; - } -} diff --git a/hw/xprint/ps/PsDef.h b/hw/xprint/ps/PsDef.h deleted file mode 100644 index 5af274dec..000000000 --- a/hw/xprint/ps/PsDef.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsDef.h -** * -** * Contents: extran defines and includes for the Ps driver -** * for a printing X server. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PSDEF_H_ -#define _PSDEF_H_ - -#define DT_PRINT_JOB_HEADER "DT_PRINT_JOB_HEADER" -#define DT_PRINT_JOB_TRAILER "DT_PRINT_JOB_TRAILER" -#define DT_PRINT_JOB_COMMAND "DT_PRINT_JOB_COMMAND" -#define DT_PRINT_JOB_EXEC_COMMAND "DT_PRINT_JOB_EXEC_COMMAND" -#define DT_PRINT_JOB_EXEC_OPTIONS "DT_PRINT_JOB_EXEC_OPTION" -#define DT_PRINT_PAGE_HEADER "DT_PRINT_PAGE_HEADER" -#define DT_PRINT_PAGE_TRAILER "DT_PRINT_PAGE_TRAILER" -#define DT_PRINT_PAGE_COMMAND "DT_PRINT_PAGE_COMMAND" - -#define DT_IN_FILE_STRING "%(InFile)%" -#define DT_OUT_FILE_STRING "%(OutFile)%" -#define DT_ALLOWED_COMMANDS_FILE "printCommands" - -#endif /* _PSDEF_H_ */ diff --git a/hw/xprint/ps/PsFTFonts.c b/hw/xprint/ps/PsFTFonts.c deleted file mode 100644 index 8857ae43e..000000000 --- a/hw/xprint/ps/PsFTFonts.c +++ /dev/null @@ -1,85 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "scrnintstr.h" -#include -#include -#include - -#include "Ps.h" - -#include -#include FT_FREETYPE_H - -#include -#define NOT_IN_FTFUNCS -#include - -char * -PsGetFTFontFileName(FontPtr pFont) -{ - FTFontPtr tf = (FTFontPtr)pFont->fontPrivate; - return tf->instance->face->filename; -} - -Bool -PsIsFreeTypeFont(FontPtr pFont) -{ - int i; - int nprops = pFont->info.nprops; - FontPropPtr props = pFont->info.props; - /* "RASTERIZER_NAME" must match the rasterizer name set in - * xc/lib/font/FreeType/ftfuncs.c */ - Atom name = MakeAtom("RASTERIZER_NAME", 15, True); - Atom value = (Atom)0; - char *rv; - - for( i=0 ; i -#endif - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "scrnintstr.h" -#include -#include -#include - -#include "Ps.h" - -#include -#include -#include - -Bool -PsRealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} - -Bool -PsUnrealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} - -char * -PsGetFontName(FontPtr pFont) -{ - int i; - int nprops = pFont->info.nprops; - FontPropPtr props = pFont->info.props; - Atom name = MakeAtom("FONT", 4, True); - Atom value = (Atom)0; - - for( i=0 ; iinfo.nprops; - FontPropPtr props = pFont->info.props; - /* "_ADOBE_POSTSCRIPT_FONTNAME" maps directly to a PMF OBJ_NAME attribute - * name - changing the name will break printer-builtin fonts. */ - Atom name = MakeAtom("_ADOBE_POSTSCRIPT_FONTNAME", 26, True); - Atom value = (Atom)0; - - for( i=0 ; iinfo.nprops; - FontPropPtr props = pFont->info.props; - Atom reg = MakeAtom("CHARSET_REGISTRY", 16, True); - Atom enc = MakeAtom("CHARSET_ENCODING", 16, True); - Atom rv = 0, ev = 0; - char *rp = 0; - char *ep = 0; - - for( i=0 ; iinfo.nprops; - FontPropPtr props = pFont->info.props; - Atom fnt = MakeAtom("FONT", 4, True); - Atom reg = MakeAtom("CHARSET_REGISTRY", 16, True); - Atom enc = MakeAtom("CHARSET_ENCODING", 16, True); - Atom fv = 0, rv = 0, ev = 0; - char *fp = 0; - char *rp = 0; - char *ep = 0; - char *encname; - - for( i=0 ; ifpe->name == "tcp/:7100")) - */ -static -Bool IsFPEaReadableDir(FontPtr pFont) -{ - const char *fpe_name = pFont->fpe->name; - if (!fpe_name) - return False; - -#define MODEL_FONTPATH_PREFIX "PRINTER:" -#define MODEL_FONTPATH_PREFIX_LEN 8 - /* Strip model-specific font path prefix if there is one... */ - if (!strncmp(fpe_name, MODEL_FONTPATH_PREFIX, MODEL_FONTPATH_PREFIX_LEN)) - fpe_name += MODEL_FONTPATH_PREFIX_LEN; - - if (access(fpe_name, F_OK) == 0) - { - return True; - } - - return False; -} - -static -char *getFontFilename(FontPtr pFont) -{ - FontDirectoryPtr dir; - const char *dlfnam; - FILE *file; - struct stat statb; - char buf[512]; - char *front, *fn; - char font_dir_fname[PATH_MAX], /* Full path of fonts.dir */ - font_file_fname[PATH_MAX]; /* Name of font file (excluding path) */ - -#ifdef XP_USE_FREETYPE - if( PsIsFreeTypeFont(pFont) ) - { - const char *fontname = PsGetFTFontFileName(pFont); - -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFilename: freetype font, file='%s'\n", fontname?fontname:""); -#endif /* DEBUG_gisburn */ - - if( !fontname ) - return NULL; - - return strdup(fontname); - } -#endif /* XP_USE_FREETYPE */ - - if (!IsFPEaReadableDir(pFont)) - { -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFilename: '%s' no valid font path on disk\n", pFont->fpe->name); -#endif /* DEBUG_gisburn */ - return NULL; - } - - dir = pFont->fpe->private; - sprintf(font_dir_fname, "%s%s", dir->directory, "fonts.dir"); - - if (!(dlfnam = PsGetFontName(pFont))) - return NULL; - - file = fopen(font_dir_fname, "r"); - if (file) - { - if (fstat (fileno(file), &statb) == -1) - return NULL; - - while( fgets(buf, sizeof(buf)-1, file) ) - { - if ((fn = strstr(buf, " -"))) - { - strcpy(font_file_fname, buf); - font_file_fname[fn - buf] = '\0'; - fn++; - if ((front = str_case_str(fn, "normal-"))) - { - fn[front - fn] = '\0'; - if (str_case_str(dlfnam, fn)) - { - char full_font_file_path[PATH_MAX]; - - fclose(file); - - sprintf(full_font_file_path, "%s%s", dir->directory, font_file_fname); - -#ifdef xDEBUG_gisburn - fprintf(stderr, "getFontFilename: returning '%s'\n", full_font_file_path); -#endif /* DEBUG_gisburn */ - return strdup(full_font_file_path); - } - } - } - } - } - font_file_fname[0] = '\0'; - fclose(file); - -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFilename: returning NULL\n"); -#endif /* DEBUG_gisburn */ - - return NULL; -} - -static -PsFontTypeInfoRec *PsFindFontTypeInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - PsFontTypeInfoRec *rec; - const char *psname; - char *font_filename; - char *encname; -#ifdef XP_USE_FREETYPE - Bool is_freetypefont; -#endif /* XP_USE_FREETYPE */ - -#ifdef XP_USE_FREETYPE - is_freetypefont = PsIsFreeTypeFont(pFont); -#endif /* XP_USE_FREETYPE */ - encname = PsGetEncodingName(pFont); - - /* First try: Search by PostScript font name */ - psname = PsGetPSFontName(pFont); - if (psname) - { - for( rec = cPriv->fontTypeInfoRecords ; rec != NULL ; rec = rec->next ) - { -#ifdef XP_USE_FREETYPE - if (is_freetypefont) - { - if (rec->adobe_ps_name) - { - if ((rec->font_type == PSFTI_FONT_TYPE_FREETYPE) && - (!strcmp(rec->adobe_ps_name, psname)) && - (!strcmp(rec->ft_download_encoding, encname))) - { - return rec; - } - } - } - else -#endif /* XP_USE_FREETYPE */ - { - if (rec->adobe_ps_name) - { - if ((rec->font_type != PSFTI_FONT_TYPE_FREETYPE) && - (!strcmp(rec->adobe_ps_name, psname))) - { - return rec; - } - } - } - } - } - - /* Last attempt: Search by filename */ - font_filename = getFontFilename(pFont); - if (font_filename) - { - for( rec = cPriv->fontTypeInfoRecords ; rec != NULL ; rec = rec->next ) - { - if (rec->filename) - { -#ifdef XP_USE_FREETYPE - if (is_freetypefont) - { - if ( (rec->font_type == PSFTI_FONT_TYPE_FREETYPE) && - (!strcasecmp(rec->filename, font_filename)) && - (!strcasecmp(rec->ft_download_encoding, encname)) ) - { - free(font_filename); - return rec; - } - } - else -#endif /* XP_USE_FREETYPE */ - { - if ( (rec->font_type != PSFTI_FONT_TYPE_FREETYPE) && - (!strcasecmp(rec->filename, font_filename)) ) - { - free(font_filename); - return rec; - } - } - } - } - - free(font_filename); - } - - return NULL; -} - -static -void PsAddFontTypeInfoRec(DrawablePtr pDrawable, PsFontTypeInfoRec *add_rec) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - - /* ToDO: Always move the last used entry to the top that the list get's - * sorted in an efficient order... :-) */ - add_rec->next = cPriv->fontTypeInfoRecords; - cPriv->fontTypeInfoRecords = add_rec; -} - -static -Bool strcaseendswith(const char *str, const char *suffix) -{ - const char *s; - - s = str + strlen(str) - strlen(suffix); - - if (!strcasecmp(s, suffix)) - return True; - - return False; -} - - -static -int getFontFileType( const char *filename ) -{ - int type; - - /* Is this a Adobe PostScript Type 1 binary font (PFB) ? */ - if( strcaseendswith(filename, ".pfb") ) - { - type = PSFTI_FONT_TYPE_PS_TYPE1_PFB; - } - /* Is this a Adobe PostScript ASCII font (PFA) ? */ - else if( strcaseendswith(filename, ".pfa") ) - { - type = PSFTI_FONT_TYPE_PS_TYPE1_PFA; - } - /* Is this a PMF(=Printer Metrics File) ? */ - else if( strcaseendswith(filename, ".pmf") ) - { - type = PSFTI_FONT_TYPE_PMF; - } - /* Is this a TrueType font file ? */ - else if( strcaseendswith(filename, ".ttf") || - strcaseendswith(filename, ".ttc") || - strcaseendswith(filename, ".otf") || - strcaseendswith(filename, ".otc") ) - { - type = PSFTI_FONT_TYPE_TRUETYPE; - } - else - { - type = PSFTI_FONT_TYPE_OTHER; - } - -#ifdef XP_USE_FREETYPE - { - XpContextPtr pCon; - char *downloadfonts; - pCon = XpGetPrintContext(requestingClient); - downloadfonts = XpGetOneAttribute(pCon, XPPrinterAttr, "xp-psddx-download-fonts"); - if( downloadfonts ) - { - /* Should we download PS Type1 fonts as PS Type1||Type3 ? */ - if( (type == PSFTI_FONT_TYPE_PS_TYPE1_PFA) && - (strstr(downloadfonts, "pfa") != NULL) ) - { - type = PSFTI_FONT_TYPE_FREETYPE; - } - - if( (type == PSFTI_FONT_TYPE_PS_TYPE1_PFB) && - (strstr(downloadfonts, "pfb") != NULL) ) - { - type = PSFTI_FONT_TYPE_FREETYPE; - } - - /* Should we download TrueType fonts as PS Type1||Type3 ? */ - if( (type == PSFTI_FONT_TYPE_TRUETYPE) && - ((strstr(downloadfonts, "ttf") != NULL) || - (strstr(downloadfonts, "ttc") != NULL) || - (strstr(downloadfonts, "otf") != NULL) || - (strstr(downloadfonts, "otc") != NULL)) ) - { - type = PSFTI_FONT_TYPE_FREETYPE; - } - } - } -#endif /* XP_USE_FREETYPE */ - -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFileType: '%s' is %d\n", filename, (int)type); -#endif /* DEBUG_gisburn */ - return type; -} - -PsFTDownloadFontType PsGetFTDownloadFontType(void) -{ - PsFTDownloadFontType downloadfonttype; - XpContextPtr pCon; - char *psfonttype; - - pCon = XpGetPrintContext(requestingClient); - psfonttype = XpGetOneAttribute(pCon, XPPrinterAttr, "xp-psddx-download-font-type"); - - if( !psfonttype || !strlen(psfonttype) ) - { - return PsFontType1; /* Default download font type is PS Type1 */ - } - - if( !strcmp(psfonttype, "bitmap") ) - { - downloadfonttype = PsFontBitmap; - } - else if( !strcmp(psfonttype, "pstype3") ) - { - downloadfonttype = PsFontType3; - } - else if( !strcmp(psfonttype, "pstype1") ) - { - downloadfonttype = PsFontType1; - } - else - { - FatalError("PS DDX: XPPrinterAttr/xp-psddx-download-freetype-font-type='%s' not implemented\n", psfonttype); - return 0; /* NO-OP, FatalError() will call |exit()| */ - } - - return downloadfonttype; -} - -static -PsFontTypeInfoRec *PsCreateFontTypeInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - char *dlfnam; - PsFontTypeInfoRec *rec; - - if (!(dlfnam = PsGetFontName(pFont))) - return NULL; - - if (!(rec = (PsFontTypeInfoRec *)xalloc(sizeof(PsFontTypeInfoRec)))) - return NULL; - memset(rec, 0, sizeof(PsFontTypeInfoRec)); - - rec->next = NULL; - - if ((rec->filename = getFontFilename(pFont))) - { - rec->font_type = getFontFileType(rec->filename); - } - else - { - rec->filename = NULL; - rec->font_type = PSFTI_FONT_TYPE_OTHER; - } - - rec->adobe_ps_name = PsGetPSFontName(pFont); -#ifdef XP_USE_FREETYPE - rec->ft_download_encoding = PsGetEncodingName(pFont); - rec->ft_download_font_type = PsGetFTDownloadFontType(); -#endif /* XP_USE_FREETYPE */ - rec->download_ps_name = NULL; - -#define SET_FONT_DOWNLOAD_STATUS(rec, downloaded) { int i; for (i = 0 ; i < 256 ; i++) { (rec)->alreadyDownloaded[i]=(downloaded); } } - - /* Set some flags based on the font type */ - switch( rec->font_type ) - { - case PSFTI_FONT_TYPE_PS_TYPE1_PFA: - case PSFTI_FONT_TYPE_PS_TYPE1_PFB: - rec->downloadableFont = True; - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - - case PSFTI_FONT_TYPE_PMF: - rec->downloadableFont = True; /* This font is in printer's ROM */ - SET_FONT_DOWNLOAD_STATUS(rec, True); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - - case PSFTI_FONT_TYPE_TRUETYPE: - /* Note: TrueType font download not implemented */ - rec->downloadableFont = False; - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - -#ifdef XP_USE_FREETYPE - case PSFTI_FONT_TYPE_FREETYPE: - if( rec->ft_download_font_type == PsFontType1 || - rec->ft_download_font_type == PsFontType3 ) - { - rec->downloadableFont = True; - } - else - { - rec->downloadableFont = False; - } - - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = False; /* Freetype--->PS Type1/Type3 uses always non-iso PS encoding for now */ - break; -#endif /* XP_USE_FREETYPE */ - - case PSFTI_FONT_TYPE_OTHER: - default: - rec->downloadableFont = False; - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - } - -#ifdef XP_USE_FREETYPE - if( (rec->font_type == PSFTI_FONT_TYPE_FREETYPE) ) - { - char *s; - register int c; - - if( rec->adobe_ps_name ) - { - rec->download_ps_name = malloc(strlen(rec->adobe_ps_name) + strlen(rec->ft_download_encoding) + 2); - sprintf(rec->download_ps_name, "%s_%s", rec->adobe_ps_name, rec->ft_download_encoding); - } - else - { - /* Unfortunately not all TTF fonts have a PostScript font name (like - * Solaris TTF fonts in /usr/openwin/lib/locale/ko.UTF-8/X11/fonts/TrueType, - * /usr/openwin/lib/locale/ko/X11/fonts/TrueType) - in this case we - * have to generate a font name - */ - char ftfontname[64]; - static long myfontindex = 0L; - sprintf(ftfontname, "psfont_%lx", myfontindex++); - - rec->download_ps_name = malloc(strlen(ftfontname) + strlen(rec->ft_download_encoding) + 2); - sprintf(rec->download_ps_name, "%s_%s", ftfontname, rec->ft_download_encoding); - - fprintf(stderr, "PsCreateFontTypeInfoRec: Note: '%s' has no PS font name, using '%s' for now.\n", dlfnam, rec->download_ps_name); - } - - /* Make sure the font name we use for download is a valid PS font name */ - for( s = rec->download_ps_name ; *s != '\0'; s++ ) - { - c = *s; - - /* Check for allowed chars, invalid ones are replaced with a '_' - * (and check that the first char is not a digit) */ - if( !(isalnum(c) || c == '.' || c == '_' || c == '-') || (s==rec->download_ps_name && isdigit(c)) ) - { - *s = '_'; - } - } - } - else -#endif /* XP_USE_FREETYPE */ - { - if( rec->adobe_ps_name ) - { - rec->download_ps_name = strdup(rec->adobe_ps_name); - } - else - { - rec->download_ps_name = NULL; - } - } - - /* Safeguard - only treat font as downloadable when we have a PS font name!! */ - if (!rec->download_ps_name && rec->downloadableFont) - { - /* XXX: Log this message to the log when the logging service has been hook'ed up */ - fprintf(stderr, "PsCreateFontTypeInfoRec: Safeguard: No PS font name for '%s'!\n", dlfnam); - rec->downloadableFont = False; - } - -#ifdef DEBUG_gisburn - fprintf(stderr, "PsCreateFontTypeInfoRec: Created PsFontTypeInfoRec '%s' ('%s'/'%s')\n", - ((rec->filename) ?(rec->filename) :("")), - ((rec->adobe_ps_name) ?(rec->adobe_ps_name):("")), - ((rec->download_ps_name)?(rec->download_ps_name):(""))); -#endif /* DEBUG_gisburn */ - - return rec; -} - -static -PsFontTypeInfoRec *PsGetFontTypeInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsFontTypeInfoRec *rec; - char *dlfnam; - - if(!(dlfnam = PsGetFontName(pFont))) - return NULL; - - rec = PsFindFontTypeInfoRec(pDrawable, pFont); - if (rec) - return rec; - - rec = PsCreateFontTypeInfoRec(pDrawable, pFont); - if (!rec) - return NULL; - - PsAddFontTypeInfoRec(pDrawable, rec); - - return rec; -} - -static -void PsFreeFontTypeInfoRecords( PsContextPrivPtr priv ) -{ - PsFontTypeInfoRec *curr, *next; - curr = priv->fontTypeInfoRecords; - while( curr != NULL ) - { - if (curr->filename) - free(curr->filename); /* Free memory allocated by |strdup()| */ - - if (curr->download_ps_name) - free(curr->download_ps_name); - - next = curr->next; - xfree(curr); - curr = next; - } -} - -static -PsFontInfoRec *PsFindFontInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - PsFontInfoRec *rec; - - if (!pFont) - return NULL; - - for( rec = cPriv->fontInfoRecords ; rec != NULL ; rec = rec->next ) - { - if ((rec->font == pFont) && - (rec->font_fontPrivate == pFont->fontPrivate)) - return rec; - } - - return NULL; -} - -static -void PsAddFontInfoRec(DrawablePtr pDrawable, PsFontInfoRec *add_rec) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - - /* ToDO: Always move the last used entry to the top that the list get's - * sorted in an efficient order... :-) */ - add_rec->next = cPriv->fontInfoRecords; - cPriv->fontInfoRecords = add_rec; -} - -static -PsFontInfoRec *PsCreateFontInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsFontInfoRec *rec; - PsFontTypeInfoRec *ftir; - - if (!(ftir = PsGetFontTypeInfoRec(pDrawable, pFont))) - return NULL; - - if (!(rec = (PsFontInfoRec *)xalloc(sizeof(PsFontInfoRec)))) - return NULL; - memset(rec, 0, sizeof(PsFontInfoRec)); - - rec->font = pFont; - rec->font_fontPrivate = pFont->fontPrivate; - rec->ftir = ftir; - rec->next = NULL; - rec->dfl_name = PsGetFontName(pFont); - rec->size = PsGetFontSize(pFont, rec->mtx); - -#ifdef DEBUG_gisburn - fprintf(stderr, "PsCreateFontInfoRec: Created PsFontInfoRec '%s'\n", - ((rec->dfl_name)?(rec->dfl_name):(""))); -#endif /* DEBUG_gisburn */ - - return rec; -} - -PsFontInfoRec *PsGetFontInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsFontInfoRec *rec; - - rec = PsFindFontInfoRec(pDrawable, pFont); - if (rec) - return rec; - - rec = PsCreateFontInfoRec(pDrawable, pFont); - if (!rec) - return NULL; - - PsAddFontInfoRec(pDrawable, rec); - - return rec; -} - -void PsFreeFontInfoRecords( PsContextPrivPtr priv ) -{ - PsFontInfoRec *curr, *next; - curr = priv->fontInfoRecords; - while( curr != NULL ) - { - next = curr->next; - xfree(curr); - curr = next; - } - - PsFreeFontTypeInfoRecords(priv); - - priv->fontTypeInfoRecords = NULL; - priv->fontInfoRecords = NULL; -} diff --git a/hw/xprint/ps/PsGC.c b/hw/xprint/ps/PsGC.c deleted file mode 100644 index 19898c90e..000000000 --- a/hw/xprint/ps/PsGC.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsGC.c -** * -** * Contents: Graphics Context handling for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "pixmapstr.h" -#include "windowstr.h" -#include "migc.h" -#include "scrnintstr.h" - -static GCOps PsGCOps = -{ - PsFillSpans, - PsSetSpans, - PsPutImage, - PsCopyArea, - PsCopyPlane, - PsPolyPoint, - PsPolyLine, - PsPolySegment, - PsPolyRectangle, - PsPolyArc, - PsFillPolygon, - PsPolyFillRect, - PsPolyFillArc, - PsPolyText8, - PsPolyText16, - PsImageText8, - PsImageText16, - PsImageGlyphBlt, - PsPolyGlyphBlt, - PsPushPixels -}; - - -static GCFuncs PsGCFuncs = -{ - PsValidateGC, - PsChangeGC, - PsCopyGC, - PsDestroyGC, - PsChangeClip, - PsDestroyClip, - PsCopyClip -}; - -Bool -PsCreateGC(pGC) - GCPtr pGC; -{ - pGC->clientClip = NULL; - pGC->clientClipType = CT_NONE; - - pGC->ops = &PsGCOps; - pGC->funcs = &PsGCFuncs; - - pGC->clientClip = (pointer)xalloc(sizeof(PsClipRec)); - memset(pGC->clientClip, 0, sizeof(PsClipRec)); - return TRUE; -} - -static int -PsGetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC *gc, - unsigned long *valid, - PsOutPtr *psOut, - ColormapPtr *cMap) -{ - XpContextPtr pCon; - PsContextPrivPtr cPriv; - PsScreenPrivPtr sPriv; - - switch(pDrawable->type) - { - case DRAWABLE_PIXMAP: - return FALSE; - case DRAWABLE_WINDOW: - pCon = PsGetContextFromWindow((WindowPtr)pDrawable); - if( pCon==NULL ) return FALSE; - else - { - Colormap c; - ColormapPtr cmap; - - c = wColormap((WindowPtr)pDrawable); - cmap = (ColormapPtr)LookupIDByType(c, RT_COLORMAP); - - cPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - sPriv = (PsScreenPrivPtr) - dixLookupPrivate(&pDrawable->pScreen->devPrivates, - PsScreenPrivateKey); - *gc = cPriv->lastGC; - *valid = cPriv->validGC; - *psOut = cPriv->pPsOut; - *cMap = cmap; - return TRUE; - } - default: - return FALSE; - } -} - -PsContextPrivPtr -PsGetPsContextPriv( DrawablePtr pDrawable ) -{ - XpContextPtr pCon; - - switch(pDrawable->type) - { - case DRAWABLE_PIXMAP: - return FALSE; - case DRAWABLE_WINDOW: - pCon = PsGetContextFromWindow((WindowPtr)pDrawable); - if (pCon != NULL) - { - return (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - } - } - return NULL; -} - -int -PsUpdateDrawableGC( - GCPtr pGC, - DrawablePtr pDrawable, - PsOutPtr *psOut, - ColormapPtr *cMap) -{ - GC dGC; - unsigned long valid; - int i; - PsContextPrivPtr cPriv; - BoxPtr boxes; - - if (!PsGetDrawablePrivateStuff(pDrawable, &dGC, &valid, psOut, cMap)) - return FALSE; - - switch (pDrawable->type) { - - case DRAWABLE_PIXMAP: - /* we don't support pixmaps yet! */ - return FALSE; - break; - case DRAWABLE_WINDOW: - if( pGC ) - { - RegionPtr pReg; - WindowPtr pWin = (WindowPtr)pDrawable; - Bool freeClip; - PsClipPtr clp = (PsClipPtr)pGC->clientClip; - if( clp->outterClips ) - { xfree(clp->outterClips); clp->outterClips = 0; } - clp->nOutterClips = 0; - if( pGC->subWindowMode==IncludeInferiors ) - { - pReg = NotClippedByChildren(pWin); - freeClip = TRUE; - } - else - { - pReg = &pWin->clipList; - freeClip = FALSE; - } - - if( pReg->data ) - { - boxes = (BoxPtr)((char *)pReg->data+sizeof(long)*2); - clp->nOutterClips = pReg->data->numRects; - clp->outterClips = - (PsRectPtr)xalloc(clp->nOutterClips*sizeof(PsRectRec)); - for( i=0 ; inOutterClips ; i++ ) - { - clp->outterClips[i].x = boxes[i].x1; - clp->outterClips[i].y = boxes[i].y1; - clp->outterClips[i].w = (boxes[i].x2-boxes[i].x1)+1; - clp->outterClips[i].h = (boxes[i].y2-boxes[i].y1)+1; - } - } - - if( freeClip ) REGION_DESTROY(pGC->pScreen, pReg); - PsOut_Offset(*psOut, pDrawable->x, pDrawable->y); - PsOut_Clip(*psOut, pGC->clientClipType, (PsClipPtr)pGC->clientClip); - } - cPriv = (PsContextPrivPtr)dixLookupPrivate( - &PsGetContextFromWindow((WindowPtr)pDrawable)->devPrivates, - PsContextPrivateKey); - break; - } - return TRUE; -} - -void -PsValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) -{ - pGC->ops = &PsGCOps; -} - -void -PsChangeGC(GCPtr pGC, unsigned long changes) -{ -} - -void -PsCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst) -{ -} - -void -PsDestroyGC(GCPtr pGC) -{ - PsDestroyClip(pGC); - xfree(pGC->clientClip); -} - -void -PsChangeClip(GCPtr pGC, int type, pointer pValue, int nrects) -{ - int i; - PsClipPtr clp = (PsClipPtr)pGC->clientClip; - RegionPtr rgn; - BoxPtr boxes; - xRectangle *rects; - - PsDestroyClip(pGC); - pGC->clientClipType = type; - switch(type) - { - case CT_NONE: break; - case CT_PIXMAP: - clp->elms = PsCreateFillElementList((PixmapPtr)pValue, &clp->nElms); - (*pGC->pScreen->DestroyPixmap)((PixmapPtr)pValue); - break; - case CT_REGION: - rgn = (RegionPtr)pValue; - boxes = (BoxPtr)((char *)rgn->data+sizeof(long)*2); - clp->nRects = rgn->data->numRects; - clp->rects = (PsRectPtr)xalloc(clp->nRects*sizeof(PsRectRec)); - for( i=0 ; inRects ; i++ ) - { - clp->rects[i].x = boxes[i].x1; - clp->rects[i].y = boxes[i].y1; - clp->rects[i].w = (boxes[i].x2-boxes[i].x1)+1; - clp->rects[i].h = (boxes[i].y2-boxes[i].y1)+1; - } - REGION_DESTROY(pGC->pScreen, (RegionPtr)pValue); - break; - case CT_UNSORTED: - case CT_YSORTED: - case CT_YXSORTED: - case CT_YXBANDED: - rects = (xRectangle *)pValue; - clp->nRects = nrects; - clp->rects = (PsRectPtr)xalloc(clp->nRects*sizeof(PsRectRec)); - for( i=0 ; inRects ; i++ ) - { - clp->rects[i].x = rects[i].x; - clp->rects[i].y = rects[i].y; - clp->rects[i].w = rects[i].width; - clp->rects[i].h = rects[i].height; - } - xfree(pValue); - break; - } -} - -void -PsDestroyClip(GCPtr pGC) -{ - PsClipPtr clp = (PsClipPtr)pGC->clientClip; - - if( clp->rects ) xfree(clp->rects); - if( clp->outterClips ) xfree(clp->outterClips); - clp->rects = (PsRectPtr)0; - clp->outterClips = (PsRectPtr)0; - clp->nRects = 0; - clp->nOutterClips = 0; - if( clp->elms ) PsDestroyFillElementList(clp->nElms, clp->elms); - clp->elms = (PsElmPtr)0; - clp->nElms = 0; - pGC->clientClipType = CT_NONE; -} - -void -PsCopyClip(GCPtr pDst, GCPtr pSrc) -{ - PsClipPtr src = (PsClipPtr)pSrc->clientClip; - PsClipPtr dst = (PsClipPtr)pDst->clientClip; - - PsDestroyClip(pDst); - pDst->clientClipType = pSrc->clientClipType; - *dst = *src; - if( src->rects ) - { - dst->rects = (PsRectPtr)xalloc(src->nRects*sizeof(PsRectRec)); - memcpy(dst->rects, src->rects, src->nRects*sizeof(PsRectRec)); - } - if( src->elms ) - dst->elms = PsCloneFillElementList(src->nElms, src->elms); -} - - -GCPtr -PsCreateAndCopyGC(DrawablePtr pDrawable, GCPtr pSrc) -{ - GCPtr pDst; - - if (pSrc == NULL) { - /* https://freedesktop.org/bugzilla/show_bug.cgi?id=1416 ("'x11perf - * -copypixpix500' crashes Xprt's PostScript DDX [PsCreateAndCopyGC"): - * I have no clue whether this is the real fix or just wallpapering - * over the crash (that's why we warn here loudly when this - * happens) ... */ - fprintf(stderr, "PsCreateAndCopyGC: pSrc == NULL\n"); - return NULL; - } - - if ((pDst = - CreateScratchGC(pDrawable->pScreen, pDrawable->depth)) == NULL) - { - return NULL; - } - - if (CopyGC(pSrc, pDst, - GCFunction | GCPlaneMask | GCForeground | GCBackground | - GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle | - GCFillStyle | GCFillRule | GCTile | GCStipple | - GCTileStipXOrigin | GCTileStipYOrigin | GCFont | - GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin | - GCClipYOrigin | GCClipMask | GCDashOffset | GCDashList | - GCArcMode) != Success) - { - (void)FreeGC(pDst, (GContext)0); - - return NULL; - } - - return pDst; -} - diff --git a/hw/xprint/ps/PsImageUtil.c b/hw/xprint/ps/PsImageUtil.c deleted file mode 100644 index 668a23f65..000000000 --- a/hw/xprint/ps/PsImageUtil.c +++ /dev/null @@ -1,329 +0,0 @@ - -/* -Copyright (c) 2005 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -/* Please do not beat me for this ugly code - most of it has been stolen from - * xc/lib/X11/ImUtil.c */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "servermd.h" -#include "attributes.h" - -static unsigned char const _reverse_byte[0x100] = { - 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 -}; - -static -int XReverse_Bytes( - register unsigned char *bpt, - register int nb) -{ - do { - *bpt = _reverse_byte[*bpt]; - bpt++; - } while (--nb > 0); - return 0; -} - -/* - * Data structure for "image" data, used by image manipulation routines. - */ -typedef struct { - int width, height; /* size of image */ - int xoffset; /* number of pixels offset in X direction */ - int format; /* XYBitmap, XYPixmap, ZPixmap */ - char *data; /* pointer to image data */ - int byte_order; /* data byte order, LSBFirst, MSBFirst */ - int bitmap_unit; /* quant. of scanline 8, 16, 32 */ - int bitmap_bit_order; /* LSBFirst, MSBFirst */ - int depth; /* depth of image */ - int bytes_per_line; /* accelarator to next line */ - int bits_per_pixel; /* bits per pixel (ZPixmap) */ -} TmpImage; - - -static void xynormalizeimagebits ( - register unsigned char *bp, - register TmpImage *img) -{ - register unsigned char c; - - if (img->byte_order != img->bitmap_bit_order) { - switch (img->bitmap_unit) { - - case 16: - c = *bp; - *bp = *(bp + 1); - *(bp + 1) = c; - break; - - case 32: - c = *(bp + 3); - *(bp + 3) = *bp; - *bp = c; - c = *(bp + 2); - *(bp + 2) = *(bp + 1); - *(bp + 1) = c; - break; - } - } - if (img->bitmap_bit_order == MSBFirst) - XReverse_Bytes (bp, img->bitmap_unit >> 3); -} - -static void znormalizeimagebits ( - register unsigned char *bp, - register TmpImage *img) -{ - register unsigned char c; - switch (img->bits_per_pixel) { - - case 4: - *bp = ((*bp >> 4) & 0xF) | ((*bp << 4) & ~0xF); - break; - - case 16: - c = *bp; - *bp = *(bp + 1); - *(bp + 1) = c; - break; - - case 24: - c = *(bp + 2); - *(bp + 2) = *bp; - *bp = c; - break; - - case 32: - c = *(bp + 3); - *(bp + 3) = *bp; - *bp = c; - c = *(bp + 2); - *(bp + 2) = *(bp + 1); - *(bp + 1) = c; - break; - } -} - -/* - * Macros - * - * The ROUNDUP macro rounds up a quantity to the specified boundary, - * then truncates to bytes. - * - * The XYNORMALIZE macro determines whether XY format data requires - * normalization and calls a routine to do so if needed. The logic in - * this module is designed for LSBFirst byte and bit order, so - * normalization is done as required to present the data in this order. - * - * The ZNORMALIZE macro performs byte and nibble order normalization if - * required for Z format data. - * - * The XYINDEX macro computes the index to the starting byte (char) boundary - * for a bitmap_unit containing a pixel with coordinates x and y for image - * data in XY format. - * - * The ZINDEX macro computes the index to the starting byte (char) boundary - * for a pixel with coordinates x and y for image data in ZPixmap format. - * - */ - -#if defined(Lynx) && defined(ROUNDUP) -#undef ROUNDUP -#endif - -#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3)) - -#define XYNORMALIZE(bp, img) \ - if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \ - xynormalizeimagebits((unsigned char *)(bp), img) - -#define ZNORMALIZE(bp, img) \ - if (img->byte_order == MSBFirst) \ - znormalizeimagebits((unsigned char *)(bp), img) - -#define XYINDEX(x, y, img) \ - ((y) * img->bytes_per_line) + \ - (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3) - -#define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \ - (((x) * img->bits_per_pixel) >> 3) - -/* - * GetPixel - * - * Returns the specified pixel. The X and Y coordinates are relative to - * the origin (upper left [0,0]) of the image. The pixel value is returned - * in normalized format, i.e. the LSB of the long is the LSB of the pixel. - * The algorithm used is: - * - * copy the source bitmap_unit or Zpixel into temp - * normalize temp if needed - * extract the pixel bits into return value - * - */ - -static unsigned long const low_bits_table[] = { - 0x00000000, 0x00000001, 0x00000003, 0x00000007, - 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, - 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, - 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, - 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, - 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, - 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, - 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, - 0xffffffff -}; - -static unsigned long XGetPixel (TmpImage *ximage, int x, int y) -{ - unsigned long pixel, px; - register char *src; - register char *dst; - register int i, j; - int bits, nbytes; - long plane; - - if ((ximage->bits_per_pixel | ximage->depth) == 1) { - src = &ximage->data[XYINDEX(x, y, ximage)]; - dst = (char *)&pixel; - pixel = 0; - for (i = ximage->bitmap_unit >> 3; --i >= 0; ) *dst++ = *src++; - XYNORMALIZE(&pixel, ximage); - bits = (x + ximage->xoffset) % ximage->bitmap_unit; - pixel = ((((char *)&pixel)[bits>>3])>>(bits&7)) & 1; - } else if (ximage->format == XYPixmap) { - pixel = 0; - plane = 0; - nbytes = ximage->bitmap_unit >> 3; - for (i = ximage->depth; --i >= 0; ) { - src = &ximage->data[XYINDEX(x, y, ximage)+ plane]; - dst = (char *)&px; - px = 0; - for (j = nbytes; --j >= 0; ) *dst++ = *src++; - XYNORMALIZE(&px, ximage); - bits = (x + ximage->xoffset) % ximage->bitmap_unit; - pixel = (pixel << 1) | - (((((char *)&px)[bits>>3])>>(bits&7)) & 1); - plane = plane + (ximage->bytes_per_line * ximage->height); - } - } else if (ximage->format == ZPixmap) { - src = &ximage->data[ZINDEX(x, y, ximage)]; - dst = (char *)&px; - px = 0; - for (i = (ximage->bits_per_pixel + 7) >> 3; --i >= 0; ) - *dst++ = *src++; - ZNORMALIZE(&px, ximage); - pixel = 0; - for (i=sizeof(unsigned long); --i >= 0; ) - pixel = (pixel << 8) | ((unsigned char *)&px)[i]; - if (ximage->bits_per_pixel == 4) { - if (x & 1) - pixel >>= 4; - else - pixel &= 0xf; - } - } else { - return 0; /* bad image */ - } - if (ximage->bits_per_pixel == ximage->depth) - return pixel; - else - return (pixel & low_bits_table[ximage->depth]); -} - -unsigned long -PsGetImagePixel(char *pImage, int depth, int w, int h, int leftPad, int format, - int px, int py) -{ - TmpImage xi = {0}; - - xi.width = w; - xi.height = h; - xi.xoffset = 0/*leftPad*/; - xi.format = format; - xi.data = pImage; - xi.byte_order = IMAGE_BYTE_ORDER; - xi.bitmap_bit_order = BITMAP_BIT_ORDER; - xi.bitmap_unit = ((depth > 16)?(32): - ((depth > 8)?(16): - ((depth > 1)? (8): - (1)))); - xi.depth = depth; - xi.bits_per_pixel = xi.bitmap_unit; - - /* - * compute per line accelerator. - */ - if (format == ZPixmap) - xi.bytes_per_line = - ROUNDUP((xi.bits_per_pixel * xi.width), 32); - else - xi.bytes_per_line = - ROUNDUP((xi.width + xi.xoffset), 32); - - return XGetPixel(&xi, px, py); -} - - - diff --git a/hw/xprint/ps/PsInit.c b/hw/xprint/ps/PsInit.c deleted file mode 100644 index 72bd7bd7c..000000000 --- a/hw/xprint/ps/PsInit.c +++ /dev/null @@ -1,648 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsInit.c -** * -** * Contents: Initialization code of Ps driver for the print server. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include "Ps.h" -#include "mi.h" -#include "micmap.h" -#include "AttrValid.h" -#include "fb.h" - -#include "windowstr.h" -#include "DiPrint.h" - -static void AllocatePsPrivates(ScreenPtr pScreen); -static int PsInitContext(XpContextPtr pCon); -static int PsDestroyContext(XpContextPtr pCon); - -DevPrivateKey PsScreenPrivateKey = &PsScreenPrivateKey; -DevPrivateKey PsContextPrivateKey = &PsContextPrivateKey; -DevPrivateKey PsPixmapPrivateKey = &PsPixmapPrivateKey; -DevPrivateKey PsWindowPrivateKey = &PsWindowPrivateKey; - -#ifdef GLXEXT -extern void GlxWrapInitVisuals(miInitVisualsProcPtr *); -#endif /* GLXEXT */ - -Bool -InitializePsDriver(ndx, pScreen, argc, argv) - int ndx; - ScreenPtr pScreen; - int argc; - char **argv; -{ -#if 0 - int maxXres, maxYres, maxWidth, maxHeight; - int maxRes, maxDim, numBytes; - PsScreenPrivPtr pPriv; -#endif - int nv, /* total number of visuals */ - nv_1bit, /* number of 8bit visuals */ - nv_8bit, /* number of 8bit visuals */ - nv_12bit, /* number of 12bit visuals */ - nv_14bit, /* number of 14bit visuals */ - nv_16bit, /* number of 16bit visuals */ - nv_24bit, /* number of 24bit visuals*/ - nv_30bit; /* number of 30bit visuals*/ - int nd; /* number of depths */ - int defaultVisualIndex = -1; - VisualID *vids_1bit, - *vids_8bit, - *vids_12bit, - *vids_14bit, - *vids_16bit, - *vids_24bit, - *vids_30bit; - VisualPtr visuals; - DepthPtr depths; - VisualID defaultVisual; - int rootDepth; - -/* - * Register this driver's InitContext function with the print - * extension. - */ - XpRegisterInitFunc(pScreen, "XP-POSTSCRIPT", PsInitContext); - -/* - * Create and fill in the devPrivate for the PS driver. - */ - AllocatePsPrivates(pScreen); - -#if 0 - pPriv = (PsScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PsScreenPrivateKey); - pPriv->resDB = rmdb; -#endif - - pScreen->defColormap = (Colormap) FakeClientID(0); - pScreen->blackPixel = 1; - pScreen->whitePixel = 0; - pScreen->QueryBestSize = (QueryBestSizeProcPtr)PsQueryBestSize; - pScreen->SaveScreen = (SaveScreenProcPtr)_XpBoolNoop; - pScreen->GetImage = (GetImageProcPtr)_XpVoidNoop; - pScreen->GetSpans = (GetSpansProcPtr)_XpVoidNoop; - pScreen->CreateWindow = PsCreateWindow; - pScreen->DestroyWindow = PsDestroyWindow; - pScreen->PositionWindow = PsPositionWindow; - pScreen->ChangeWindowAttributes = PsChangeWindowAttributes; - pScreen->RealizeWindow = PsMapWindow; - pScreen->UnrealizeWindow = PsUnmapWindow; - pScreen->CloseScreen = PsCloseScreen; - pScreen->CopyWindow = PsCopyWindow; - /* XXX Hard routine to write! */ - -/* - * These two are going to be VERY different... - */ - pScreen->CreatePixmap = PsCreatePixmap; - pScreen->DestroyPixmap = PsDestroyPixmap; - pScreen->RealizeFont = PsRealizeFont; - pScreen->UnrealizeFont = PsUnrealizeFont; - pScreen->CreateGC = PsCreateGC; - pScreen->CreateColormap = PsCreateColormap; - pScreen->DestroyColormap = PsDestroyColormap; - pScreen->InstallColormap = PsInstallColormap; - pScreen->UninstallColormap = PsUninstallColormap; - pScreen->ListInstalledColormaps = PsListInstalledColormaps; - pScreen->StoreColors = PsStoreColors; - pScreen->ResolveColor = PsResolveColor; - /* Will BitmapToRegion make any difference at all? */ - pScreen->BitmapToRegion = fbPixmapToRegion; - - visuals = (VisualPtr) xalloc(16*sizeof(VisualRec)); - depths = (DepthPtr) xalloc(16*sizeof(DepthRec)); - vids_1bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_8bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_12bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_14bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_16bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_24bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_30bit = (VisualID *)xalloc(16*sizeof(VisualID)); - - nv = nv_1bit = nv_8bit = nv_12bit = nv_14bit = nv_16bit = nv_24bit = nv_30bit = nd = 0; - -#ifdef PSOUT_USE_DEEPCOLOR -/* gisburn: 30bit TrueColor has been disabled for now since it causes problems - * with GLX - see https://bugs.freedesktop.org/show_bug.cgi?id=2868 ("Mesa - * seems to be unable to handle 30bit TrueColor visuals") for details... - */ -#ifdef DISABLED_FOR_NOW - /* TrueColor, 30bit, 10bit per R-,G-,B-gun */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = TrueColor; - visuals[nv].bitsPerRGBValue = 10; - visuals[nv].ColormapEntries = 1024; - visuals[nv].nplanes = 30; - visuals[nv].redMask = 0X3FF00000; - visuals[nv].greenMask = 0X000FFC00; - visuals[nv].blueMask = 0X000003FF; - visuals[nv].offsetRed = 20; - visuals[nv].offsetGreen = 10; - visuals[nv].offsetBlue = 0; - vids_30bit[nv_30bit] = visuals[nv].vid; - nv++; nv_30bit++; -#endif /* DISABLED_FOR_NOW */ -#endif /* PSOUT_USE_DEEPCOLOR */ - - /* TrueColor, 24bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = TrueColor; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 24; - visuals[nv].redMask = 0X00FF0000; - visuals[nv].greenMask = 0X0000FF00; - visuals[nv].blueMask = 0X000000FF; - visuals[nv].offsetRed = 16; - visuals[nv].offsetGreen = 8; - visuals[nv].offsetBlue = 0; - vids_24bit[nv_24bit] = visuals[nv].vid; - nv++; nv_24bit++; - - /* TrueColor, 16bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = TrueColor; - visuals[nv].bitsPerRGBValue = 6; - visuals[nv].ColormapEntries = 64; - visuals[nv].nplanes = 16; - visuals[nv].redMask = 0x0000f800; - visuals[nv].greenMask = 0x000007e0; - visuals[nv].blueMask = 0x0000001f; - visuals[nv].offsetRed = 11; - visuals[nv].offsetGreen = 5; - visuals[nv].offsetBlue = 0; - vids_16bit[nv_16bit] = visuals[nv].vid; - nv++; nv_16bit++; - -#ifdef PSOUT_USE_DEEPCOLOR - /* PostScript Level 2 and above, colors can have 12 bits per component - * (36 bit for RGB) */ - - /* PseudoColor, 14bit (15bit won't work as |ColormapEntries==32768| - * is too large for a |signed short|... xx@@!!!... ;-( ) */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = PseudoColor; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 16384; - visuals[nv].nplanes = 14; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_14bit[nv_14bit] = visuals[nv].vid; - nv++; nv_14bit++; - - /* PseudoColor, 12bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = PseudoColor; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 4096; - visuals[nv].nplanes = 12; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_12bit[nv_12bit] = visuals[nv].vid; - defaultVisualIndex = nv; - nv++; nv_12bit++; - - /* GrayScale, 12bit, 12bit per R-,G-,B-gun */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = GrayScale; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 4096; - visuals[nv].nplanes = 12; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_12bit[nv_12bit] = visuals[nv].vid; - nv++; nv_12bit++; - - /* StaticGray, 12bit, 12bit per R-,G-,B-gun */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = StaticGray; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 4096; - visuals[nv].nplanes = 12; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_12bit[nv_12bit] = visuals[nv].vid; - nv++; nv_12bit++; -#endif /* PSOUT_USE_DEEPCOLOR */ - - /* PseudoColor, 8bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = PseudoColor; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 8; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_8bit[nv_8bit] = visuals[nv].vid; -#ifndef PSOUT_USE_DEEPCOLOR - defaultVisualIndex = nv; -#endif /* !PSOUT_USE_DEEPCOLOR */ - nv++; nv_8bit++; - - /* GrayScale, 8bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = GrayScale; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 8; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_8bit[nv_8bit] = visuals[nv].vid; - nv++; nv_8bit++; - - /* StaticGray, 8bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = StaticGray; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 8; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_8bit[nv_8bit] = visuals[nv].vid; - nv++; nv_8bit++; - - /* StaticGray, 1bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = StaticGray; - visuals[nv].bitsPerRGBValue = 1; - visuals[nv].ColormapEntries = 2; - visuals[nv].nplanes = 1; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_1bit[nv_1bit] = visuals[nv].vid; - nv++; nv_1bit++; - - if( nv_30bit > 0 ) - { - depths[nd].depth = 30; - depths[nd].numVids = nv_30bit; - depths[nd].vids = vids_30bit; - nd++; - } - - if( nv_24bit > 0 ) - { - depths[nd].depth = 24; - depths[nd].numVids = nv_24bit; - depths[nd].vids = vids_24bit; - nd++; - } - - if( nv_16bit > 0 ) - { - depths[nd].depth = 16; - depths[nd].numVids = nv_16bit; - depths[nd].vids = vids_16bit; - nd++; - } - - if( nv_14bit > 0 ) - { - depths[nd].depth = 14; - depths[nd].numVids = nv_14bit; - depths[nd].vids = vids_14bit; - nd++; - } - - if( nv_12bit > 0 ) - { - depths[nd].depth = 12; - depths[nd].numVids = nv_12bit; - depths[nd].vids = vids_12bit; - nd++; - } - - if( nv_8bit > 0 ) - { - depths[nd].depth = 8; - depths[nd].numVids = nv_8bit; - depths[nd].vids = vids_8bit; - nd++; - } - - if( nv_1bit > 0 ) - { - depths[nd].depth = 1; - depths[nd].numVids = nv_1bit; - depths[nd].vids = vids_1bit; - nd++; - } - - /* Defaul visual is 12bit PseudoColor */ - defaultVisual = visuals[defaultVisualIndex].vid; - rootDepth = visuals[defaultVisualIndex].nplanes; - -#ifdef GLXEXT - { - miInitVisualsProcPtr proc = NULL; - - GlxWrapInitVisuals(&proc); - /* GlxInitVisuals ignores the last three arguments. */ - proc(&visuals, &depths, &nv, &nd, - &rootDepth, &defaultVisual, 0, 0, 0); - } -#endif /* GLXEXT */ - - miScreenInit(pScreen, (pointer)0, - pScreen->width, pScreen->height, - (int) (pScreen->width / (pScreen->mmWidth / 25.40)), - (int) (pScreen->height / (pScreen->mmHeight / 25.40)), - 0, rootDepth, nd, - depths, defaultVisual, nv, visuals); - - if( miCreateDefColormap(pScreen)==FALSE ) return FALSE; - -/*scalingScreenInit(pScreen);*/ - - return TRUE; -} - -static void -AllocatePsPrivates(ScreenPtr pScreen) -{ - dixRequestPrivate(PsWindowPrivateKey, sizeof(PsWindowPrivRec)); - dixRequestPrivate(PsContextPrivateKey, sizeof(PsContextPrivRec)); - dixRequestPrivate(PsPixmapPrivateKey, sizeof(PsPixmapPrivRec)); - - dixSetPrivate(&pScreen->devPrivates, PsScreenPrivateKey, - xalloc(sizeof(PsScreenPrivRec))); -} - -/* - * PsInitContext - * - * Establish the appropriate values for a PrintContext used with the PS - * driver. - */ - -static char DOC_ATT_SUPP[]="document-attributes-supported"; -static char DOC_ATT_VAL[]="document-format xp-listfonts-modes"; -static char JOB_ATT_SUPP[]="job-attributes-supported"; -static char JOB_ATT_VAL[]=""; -static char PAGE_ATT_SUPP[]="xp-page-attributes-supported"; -static char PAGE_ATT_VAL[]="content-orientation default-printer-resolution \ -default-input-tray default-medium plex xp-listfonts-modes"; - -static int -PsInitContext(pCon) - XpContextPtr pCon; -{ - XpDriverFuncsPtr pFuncs; - PsContextPrivPtr pConPriv; - char *server, *attrStr; - - /* - * Initialize the attribute store for this printer. - */ - XpInitAttributes(pCon); - - /* - * Initialize the function pointers - */ - pFuncs = &(pCon->funcs); - pFuncs->StartJob = PsStartJob; - pFuncs->EndJob = PsEndJob; - pFuncs->StartDoc = PsStartDoc; - pFuncs->EndDoc = PsEndDoc; - pFuncs->StartPage = PsStartPage; - pFuncs->EndPage = PsEndPage; - pFuncs->PutDocumentData = PsDocumentData; - pFuncs->GetDocumentData = PsGetDocumentData; - pFuncs->GetAttributes = PsGetAttributes; - pFuncs->SetAttributes = PsSetAttributes; - pFuncs->AugmentAttributes = PsAugmentAttributes; - pFuncs->GetOneAttribute = PsGetOneAttribute; - pFuncs->DestroyContext = PsDestroyContext; - pFuncs->GetMediumDimensions = PsGetMediumDimensions; - pFuncs->GetReproducibleArea = PsGetReproducibleArea; - pFuncs->SetImageResolution = PsSetImageResolution; - - /* - * Set up the context privates - */ - pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - memset(pConPriv, 0, sizeof(PsContextPrivRec)); - pConPriv->jobFileName = (char *)NULL; - pConPriv->pJobFile = (FILE *)NULL; - pConPriv->dash = (unsigned char *)NULL; - pConPriv->validGC = 0; - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - pConPriv->pPsOut = NULL; - pConPriv->fontInfoRecords = NULL; - pConPriv->fontTypeInfoRecords = NULL; - - /* - * document-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, DOC_ATT_SUPP ); - if ((attrStr = (char *) xalloc(strlen(server) + - strlen(DOC_ATT_SUPP) + strlen(DOC_ATT_VAL) - + strlen(PAGE_ATT_VAL) + 8)) == NULL) - { - return BadAlloc; - } - sprintf(attrStr, "*%s:\t%s %s %s", - DOC_ATT_SUPP, server, DOC_ATT_VAL, PAGE_ATT_VAL); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * job-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP ); - if ((attrStr = (char *) xalloc(strlen(server) + strlen(JOB_ATT_SUPP) + - strlen(JOB_ATT_VAL) + 8)) == NULL) - { - return BadAlloc; - } - sprintf(attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * xp-page-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP ); - if ((attrStr = (char *) xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) + - strlen(PAGE_ATT_VAL) + 8)) == NULL) - { - return BadAlloc; - } - sprintf(attrStr, "*%s:\t%s %s", PAGE_ATT_SUPP, server, PAGE_ATT_VAL); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * Validate the attribute pools - */ - XpValidateAttributePool(pCon, XPPrinterAttr, &PsValidatePoolsRec); - XpValidateAttributePool(pCon, XPDocAttr, &PsValidatePoolsRec); - XpValidateAttributePool(pCon, XPJobAttr, &PsValidatePoolsRec); - XpValidateAttributePool(pCon, XPPageAttr, &PsValidatePoolsRec); - - return Success; -} - -static Bool -PsDestroyContext(pCon) - XpContextPtr pCon; -{ - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - if( pConPriv->pJobFile!=(FILE *)NULL ) - { - fclose(pConPriv->pJobFile); - pConPriv->pJobFile = NULL; - } - if( pConPriv->jobFileName!=(char *)NULL ) - { - unlink(pConPriv->jobFileName); - xfree(pConPriv->jobFileName); - pConPriv->jobFileName = (char *)NULL; - } - - PsFreeFontInfoRecords(pConPriv); - - /* Reset context to make sure we do not use any stale/invalid/obsolete data */ - memset(pConPriv, 0, sizeof(PsContextPrivRec)); - -/*### free up visuals/depths ###*/ - - return Success; -} - -XpContextPtr -PsGetContextFromWindow(win) - WindowPtr win; -{ - PsWindowPrivPtr pPriv; - - while( win ) - { - pPriv = (PsWindowPrivPtr) - dixLookupPrivate(&win->devPrivates, PsWindowPrivateKey); - if( pPriv->validContext ) return pPriv->context; - win = win->parent; - } - - return NULL; -} diff --git a/hw/xprint/ps/PsLine.c b/hw/xprint/ps/PsLine.c deleted file mode 100644 index aca186642..000000000 --- a/hw/xprint/ps/PsLine.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsLine.c -** * -** * Contents: Line drawing routines for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsPolyLine( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyLineCmd; - elm->gc = gc; - elm->c.polyPts.mode = mode; - elm->c.polyPts.nPoints = nPoints; - elm->c.polyPts.pPoints = (xPoint *)xalloc(nPoints*sizeof(xPoint)); - memcpy(elm->c.polyPts.pPoints, pPoints, nPoints*sizeof(xPoint)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointPtr pts; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - pts = (PsPointPtr)xalloc(sizeof(PsPointRec)*nPoints); - if( mode==CoordModeOrigin ) - { - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolySegmentCmd; - elm->gc = gc; - elm->c.segments.nSegments = nSegments; - elm->c.segments.pSegments = (xSegment *)xalloc(nSegments*sizeof(xSegment)); - memcpy(elm->c.segments.pSegments, pSegments, nSegments*sizeof(xSegment)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointRec pts[2]; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - for( i=0 ; i -#endif - -#include /* for SIGCLD on pre-POSIX systems */ -#include -#include "Ps.h" - -#include "cursor.h" -#include "resource.h" - -#include "windowstr.h" -#include "propertyst.h" - - -/*ARGSUSED*/ -void -PsQueryBestSize( - int type, - short *pwidth, - short *pheight, - ScreenPtr pScreen) -{ - unsigned width, highBit; - - switch(type) - { - case CursorShape: - *pwidth = 0; - *pheight = 0; - break; - case TileShape: - case StippleShape: - width = *pwidth; - if (!width) break; - /* Return the nearest power of two >= what they gave us */ - highBit = 0x80000000; - /* Find the highest 1 bit in the given width */ - while(!(highBit & width)) - highBit >>= 1; - /* If greater than that then return the next power of two */ - if((highBit - 1) & width) - highBit <<= 1; - *pwidth = highBit; - /* height is a don't-care */ - break; - } -} - -/* - * PsGetMediumDimensions is installed in the GetMediumDimensions field - * of each Ps-initialized context. - */ -int -PsGetMediumDimensions(XpContextPtr pCon, CARD16 *width, CARD16 *height) -{ - XpGetMediumDimensions(pCon, width, height); - return Success; -} - -/* - * PsGetReproducibleArea is installed in the GetReproducibleArea field - * of each Ps-initialized context. - */ -int -PsGetReproducibleArea(XpContextPtr pCon, xRectangle *pRect) -{ - XpGetReproductionArea(pCon, pRect); - return Success; -} - -/* - * PsSetImageResolution is installed in the SetImageResolution field - * of each Ps-initialized context. - */ -int -PsSetImageResolution(XpContextPtr pCon, int imageRes, Bool *status) -{ - pCon->imageRes = imageRes; - *status = True; - return Success; -} - -/* - * GetPropString searches the window heirarchy from pWin up looking for - * a property by the name of propName. If found, returns the property's - * value. If not, it returns NULL. - */ -/* -char * -GetPropString( - WindowPtr pWin, - char *propName) -{ - Atom atom; - PropertyPtr pProp = (PropertyPtr)NULL; - char *retVal; - - atom = MakeAtom(propName, strlen(propName), FALSE); - if(atom != BAD_RESOURCE) - { - WindowPtr pPropWin; - int rc, n; -*/ - - /* - * The atom has been defined, but it might only exist as a - * property on an unrelated window. - */ -/* - for(pPropWin = pWin; pPropWin != (WindowPtr)NULL; - pPropWin = pPropWin->parent) - { - rc = dixLookupProperty(&pProp, pPropWin, atom, - serverClient, DixReadAccess); - if (rc == Success) - break; - else - pProp = NULL; - } - if(pProp == (PropertyPtr)NULL) - return (char *)NULL; - - n = (pProp->format/8) * pProp->size; *//* size (bytes) of prop */ -/* - retVal = (char *)xalloc(n + 1); - (void)memcpy((void *)retVal, (void *)pProp->data, n); - retVal[n] = '\0'; - - return retVal; - } - - return (char *)NULL; -} - -#include - -*/ -/* ARGSUSED */ -/* -static void SigchldHndlr (int dummy) -{ - int status, w; - struct sigaction act; - sigfillset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = SigchldHndlr; - - w = wait (&status); - -*/ - /* - * Is this really necessary? - */ -/* - sigaction(SIGCHLD, &act, (struct sigaction *)NULL); -} -*/ - -/* - * SystemCmd provides a wrapper for the 'system' library call. The call - * appears to be sensitive to the handling of SIGCHLD, so this wrapper - * sets the status to SIG_DFL, and then resets the established handler - * after system returns. - */ -/* -int -SystemCmd(char *cmdStr) -{ - int status; - struct sigaction newAct, oldAct; - sigfillset(&newAct.sa_mask); - newAct.sa_flags = 0; - newAct.sa_handler = SIG_DFL; - sigfillset(&oldAct.sa_mask); - oldAct.sa_flags = 0; - oldAct.sa_handler = SigchldHndlr; - -*/ - /* - * get the old handler, and set the action to IGN - */ -/* - sigaction(SIGCHLD, &newAct, &oldAct); - - status = system (cmdStr); - - sigaction(SIGCHLD, &oldAct, (struct sigaction *)NULL); - return status; -} -*/ - -Bool -PsCloseScreen( - int index, - ScreenPtr pScreen) -{ - return TRUE; -} - -void -PsLineAttrs( - PsOutPtr psOut, - GCPtr pGC, - ColormapPtr cMap) -{ - int i; - int nDsh; - int dshOff; - int *dsh; - PsCapEnum cap; - PsJoinEnum join; - - switch(pGC->capStyle) { - case CapButt: cap = PsCButt; break; - case CapRound: cap = PsCRound; break; - case CapProjecting: cap = PsCSquare; break; - default: cap = PsCButt; break; } - switch(pGC->joinStyle) { - case JoinMiter: join = PsJMiter; break; - case JoinRound: join = PsJRound; break; - case JoinBevel: join = PsJBevel; break; - default: join = PsJBevel; break; } - if( pGC->lineStyle==LineSolid ) { nDsh = dshOff = 0; dsh = (int *)0; } - else - { - nDsh = pGC->numInDashList; - dshOff = pGC->dashOffset; - if( !nDsh ) dsh = (int *)0; - else - { - dsh = (int *)xalloc(sizeof(int)*nDsh); - for( i=0 ; idash[i]&0xFF; - } - } - - if( pGC->lineStyle!=LineDoubleDash ) - PsOut_LineAttrs(psOut, (int)pGC->lineWidth, - cap, join, nDsh, dsh, dshOff, -1); - else - PsOut_LineAttrs(psOut, (int)pGC->lineWidth, - cap, join, nDsh, dsh, dshOff, - PsGetPixelColor(cMap, pGC->bgPixel)); - if( nDsh && dsh ) xfree(dsh); -} diff --git a/hw/xprint/ps/PsPixel.c b/hw/xprint/ps/PsPixel.c deleted file mode 100644 index d51cb6ecf..000000000 --- a/hw/xprint/ps/PsPixel.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsPixel.c -** * -** * Contents: Pixel-drawing code for the PS DDX driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1995 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "windowstr.h" -#include "gcstruct.h" - -#include "Ps.h" - -void -PsPolyPoint( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyPointCmd; - elm->gc = gc; - elm->c.polyPts.mode = mode; - elm->c.polyPts.nPoints = nPoints; - elm->c.polyPts.pPoints = (xPoint *)xalloc(nPoints*sizeof(xPoint)); - memcpy(elm->c.polyPts.pPoints, pPoints, nPoints*sizeof(xPoint)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointPtr pts; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - pts = (PsPointPtr)xalloc(sizeof(PsPointRec)*nPoints); - if( mode==CoordModeOrigin ) - { - for( i=0 ; i -#endif - -#include "windowstr.h" -#include "gcstruct.h" -#include "privates.h" - -#include "Ps.h" - -#define _BitsPerPixel(d) (\ - (1 << PixmapWidthPaddingInfo[d].padBytesLog2) * 8 / \ - (PixmapWidthPaddingInfo[d].padRoundUp+1)) - -PixmapPtr -PsCreatePixmap( - ScreenPtr pScreen, - int width, - int height, - int depth, - unsigned usage_hint) -{ - PixmapPtr pPixmap; - - pPixmap = (PixmapPtr)xcalloc(1, sizeof(PixmapRec)); - if( !pPixmap) return NullPixmap; - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = depth; - pPixmap->drawable.bitsPerPixel = _BitsPerPixel(depth); - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - pPixmap->devKind = 0; - pPixmap->refcnt = 1; - pPixmap->devPrivates = NULL; - - pPixmap->devPrivate.ptr = (PsPixmapPrivPtr)xcalloc(1, sizeof(PsPixmapPrivRec)); - if( !pPixmap->devPrivate.ptr ) - { xfree(pPixmap); return NullPixmap; } - return pPixmap; -} - -/* PsScrubPixmap: Remove all content from a pixmap (used by - * |PsPolyFillRect()| when the "solid fill" operation covers - * the whole pixmap) */ -void -PsScrubPixmap(PixmapPtr pPixmap) -{ - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr; - DisplayListPtr disp = priv->dispList; - - while( disp ) - { - int i; - DisplayListPtr oldDisp = disp; - disp = disp->next; - for( i=0 ; inelms ; i++ ) - { - DisplayElmPtr elm = &oldDisp->elms[i]; - - switch(elm->type) - { - case PolyPointCmd: - case PolyLineCmd: - if( elm->c.polyPts.pPoints ) xfree(elm->c.polyPts.pPoints); - break; - case PolySegmentCmd: - if( elm->c.segments.pSegments ) xfree(elm->c.segments.pSegments); - break; - case PolyRectangleCmd: - if( elm->c.rects.pRects ) xfree(elm->c.rects.pRects); - break; - case FillPolygonCmd: - if( elm->c.polyPts.pPoints ) xfree(elm->c.polyPts.pPoints); - break; - case PolyFillRectCmd: - if( elm->c.rects.pRects ) xfree(elm->c.rects.pRects); - break; - case PolyArcCmd: - if( elm->c.arcs.pArcs ) xfree(elm->c.arcs.pArcs); - break; - case PolyFillArcCmd: - if( elm->c.arcs.pArcs ) xfree(elm->c.arcs.pArcs); - break; - case Text8Cmd: - case TextI8Cmd: - if( elm->c.text8.string ) xfree(elm->c.text8.string); - break; - case Text16Cmd: - case TextI16Cmd: - if( elm->c.text16.string ) xfree(elm->c.text16.string); - break; - case PutImageCmd: - if( elm->c.image.pData ) xfree(elm->c.image.pData); - break; - case BeginFrameCmd: - break; - case EndFrameCmd: - break; - } - - if (elm->type != BeginFrameCmd && elm->type != EndFrameCmd) { - (void) FreeGC(elm->gc, (GContext) 0); - } - } - xfree(oldDisp); - } - - priv->dispList = NULL; -} - -Bool -PsDestroyPixmap(PixmapPtr pPixmap) -{ - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr; - - if( --pPixmap->refcnt ) return TRUE; - - PsScrubPixmap(pPixmap); - - xfree(priv); - dixFreePrivates(pPixmap->devPrivates); - xfree(pPixmap); - return TRUE; -} - -DisplayListPtr -PsGetFreeDisplayBlock(PsPixmapPrivPtr priv) -{ - DisplayListPtr disp = priv->dispList; - - for(; disp ; disp=disp->next ) - { - if( disp->nelms>=DPY_BLOCKSIZE && disp->next ) continue; - if( disp->nelmsnext = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec)); - disp->next->next = (DisplayListPtr)0; - disp->next->nelms = 0; - } - disp = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec)); - disp->next = (DisplayListPtr)0; - disp->nelms = 0; - priv->dispList = disp; - return(disp); -} - -void -PsReplay(DisplayElmPtr elm, DrawablePtr pDrawable) -{ - switch(elm->type) - { - case PolyPointCmd: - PsPolyPoint(pDrawable, elm->gc, elm->c.polyPts.mode, - elm->c.polyPts.nPoints, elm->c.polyPts.pPoints); - break; - case PolyLineCmd: - PsPolyLine(pDrawable, elm->gc, elm->c.polyPts.mode, - elm->c.polyPts.nPoints, elm->c.polyPts.pPoints); - break; - case PolySegmentCmd: - PsPolySegment(pDrawable, elm->gc, elm->c.segments.nSegments, - elm->c.segments.pSegments); - break; - case PolyRectangleCmd: - PsPolyRectangle(pDrawable, elm->gc, elm->c.rects.nRects, - elm->c.rects.pRects); - break; - case FillPolygonCmd: - PsFillPolygon(pDrawable, elm->gc, 0, elm->c.polyPts.mode, - elm->c.polyPts.nPoints, elm->c.polyPts.pPoints); - break; - case PolyFillRectCmd: - PsPolyFillRect(pDrawable, elm->gc, elm->c.rects.nRects, - elm->c.rects.pRects); - break; - case PolyArcCmd: - PsPolyArc(pDrawable, elm->gc, elm->c.arcs.nArcs, elm->c.arcs.pArcs); - break; - case PolyFillArcCmd: - PsPolyFillArc(pDrawable, elm->gc, elm->c.arcs.nArcs, elm->c.arcs.pArcs); - break; - case Text8Cmd: - PsPolyText8(pDrawable, elm->gc, elm->c.text8.x, elm->c.text8.y, - elm->c.text8.count, elm->c.text8.string); - break; - case Text16Cmd: - PsPolyText16(pDrawable, elm->gc, elm->c.text16.x, elm->c.text16.y, - elm->c.text16.count, elm->c.text16.string); - break; - case TextI8Cmd: - PsImageText8(pDrawable, elm->gc, elm->c.text8.x, elm->c.text8.y, - elm->c.text8.count, elm->c.text8.string); - break; - case TextI16Cmd: - PsImageText16(pDrawable, elm->gc, elm->c.text16.x, elm->c.text16.y, - elm->c.text16.count, elm->c.text16.string); - break; - case PutImageCmd: - PsPutScaledImage(pDrawable, elm->gc, elm->c.image.depth, - elm->c.image.x, elm->c.image.y, - elm->c.image.w, elm->c.image.h, elm->c.image.leftPad, - elm->c.image.format, elm->c.image.res, - elm->c.image.pData); - break; - case BeginFrameCmd: - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(NULL, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_BeginFrame(psOut, 0, 0, elm->c.frame.x, elm->c.frame.y, - elm->c.frame.w, elm->c.frame.h); - } - break; - case EndFrameCmd: - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(NULL, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_EndFrame(psOut); - } - break; - } -} - -void -PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable) -{ - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp = priv->dispList; - DisplayElmPtr elm; - - for(; disp ; disp=disp->next ) - { - int i; - for( i=0,elm=disp->elms ; inelms ; i++,elm++ ) - PsReplay(elm, pDrawable); - } -} - -int -PsCloneDisplayElm(PixmapPtr dst, DisplayElmPtr elm, DisplayElmPtr newElm, - int xoff, int yoff) -{ - int i; - int size; - int status = 0; - - *newElm = *elm; - - /* I think this is the correct return value */ - if ((newElm->gc = PsCreateAndCopyGC(&dst->drawable, elm->gc)) == NULL) { - return 1; - } - - switch(elm->type) - { - case PolyPointCmd: - case PolyLineCmd: - newElm->c.polyPts.pPoints = - (xPoint *)xalloc(elm->c.polyPts.nPoints*sizeof(xPoint)); - for( i=0 ; ic.polyPts.nPoints ; i++ ) - { - newElm->c.polyPts.pPoints[i].x = elm->c.polyPts.pPoints[i].x+xoff; - newElm->c.polyPts.pPoints[i].y = elm->c.polyPts.pPoints[i].y+yoff; - } - break; - case PolySegmentCmd: - newElm->c.segments.pSegments = - (xSegment *)xalloc(elm->c.segments.nSegments*sizeof(xSegment)); - for( i=0 ; ic.segments.nSegments ; i++ ) - { - newElm->c.segments.pSegments[i].x1 = - elm->c.segments.pSegments[i].x1+xoff; - newElm->c.segments.pSegments[i].y1 = - elm->c.segments.pSegments[i].y1+yoff; - newElm->c.segments.pSegments[i].x2 = - elm->c.segments.pSegments[i].x2+xoff; - newElm->c.segments.pSegments[i].y2 = - elm->c.segments.pSegments[i].y2+yoff; - } - break; - case PolyRectangleCmd: - newElm->c.rects.pRects = - (xRectangle *)xalloc(elm->c.rects.nRects*sizeof(xRectangle)); - for( i=0 ; ic.rects.nRects ; i++ ) - { - newElm->c.rects.pRects[i].x = elm->c.rects.pRects[i].x+xoff; - newElm->c.rects.pRects[i].y = elm->c.rects.pRects[i].y+yoff; - newElm->c.rects.pRects[i].width = elm->c.rects.pRects[i].width; - newElm->c.rects.pRects[i].height = elm->c.rects.pRects[i].height; - } - break; - case FillPolygonCmd: - newElm->c.polyPts.pPoints = - (xPoint *)xalloc(elm->c.polyPts.nPoints*sizeof(xPoint)); - for( i=0 ; ic.polyPts.nPoints ; i++ ) - { - newElm->c.polyPts.pPoints[i].x = elm->c.polyPts.pPoints[i].x+xoff; - newElm->c.polyPts.pPoints[i].y = elm->c.polyPts.pPoints[i].y+yoff; - } - break; - case PolyFillRectCmd: - newElm->c.rects.pRects = - (xRectangle *)xalloc(elm->c.rects.nRects*sizeof(xRectangle)); - for( i=0 ; ic.rects.nRects ; i++ ) - { - newElm->c.rects.pRects[i].x = elm->c.rects.pRects[i].x+xoff; - newElm->c.rects.pRects[i].y = elm->c.rects.pRects[i].y+yoff; - newElm->c.rects.pRects[i].width = elm->c.rects.pRects[i].width; - newElm->c.rects.pRects[i].height = elm->c.rects.pRects[i].height; - } - break; - case PolyArcCmd: - newElm->c.arcs.pArcs = - (xArc *)xalloc(elm->c.arcs.nArcs*sizeof(xArc)); - for( i=0 ; ic.arcs.nArcs ; i++ ) - { - newElm->c.arcs.pArcs[i].x = elm->c.arcs.pArcs[i].x+xoff; - newElm->c.arcs.pArcs[i].y = elm->c.arcs.pArcs[i].y+yoff; - newElm->c.arcs.pArcs[i].width = elm->c.arcs.pArcs[i].width; - newElm->c.arcs.pArcs[i].height = elm->c.arcs.pArcs[i].height; - newElm->c.arcs.pArcs[i].angle1 = elm->c.arcs.pArcs[i].angle1; - newElm->c.arcs.pArcs[i].angle2 = elm->c.arcs.pArcs[i].angle2; - } - break; - case PolyFillArcCmd: - newElm->c.arcs.pArcs = - (xArc *)xalloc(elm->c.arcs.nArcs*sizeof(xArc)); - for( i=0 ; ic.arcs.nArcs ; i++ ) - { - newElm->c.arcs.pArcs[i].x = elm->c.arcs.pArcs[i].x+xoff; - newElm->c.arcs.pArcs[i].y = elm->c.arcs.pArcs[i].y+yoff; - newElm->c.arcs.pArcs[i].width = elm->c.arcs.pArcs[i].width; - newElm->c.arcs.pArcs[i].height = elm->c.arcs.pArcs[i].height; - newElm->c.arcs.pArcs[i].angle1 = elm->c.arcs.pArcs[i].angle1; - newElm->c.arcs.pArcs[i].angle2 = elm->c.arcs.pArcs[i].angle2; - } - break; - case Text8Cmd: - case TextI8Cmd: - newElm->c.text8.string = (char *)xalloc(elm->c.text8.count); - memcpy(newElm->c.text8.string, elm->c.text8.string, elm->c.text8.count); - newElm->c.text8.x += xoff; - newElm->c.text8.y += yoff; - break; - case Text16Cmd: - case TextI16Cmd: - newElm->c.text16.string = - (unsigned short *)xalloc(elm->c.text16.count*sizeof(unsigned short)); - memcpy(newElm->c.text16.string, elm->c.text16.string, - elm->c.text16.count*sizeof(unsigned short)); - newElm->c.text16.x += xoff; - newElm->c.text16.y += yoff; - break; - case PutImageCmd: - size = PixmapBytePad(elm->c.image.w, elm->c.image.depth)*elm->c.image.h; - newElm->c.image.pData = (char *)xalloc(size); - memcpy(newElm->c.image.pData, elm->c.image.pData, size); - newElm->c.image.x += xoff; - newElm->c.image.y += yoff; - break; - case BeginFrameCmd: - case EndFrameCmd: - status = 1; - break; - } - return(status); -} - -void -PsCopyDisplayList(PixmapPtr src, PixmapPtr dst, int xoff, int yoff, - int x, int y, int w, int h) -{ - PsPixmapPrivPtr sPriv = (PsPixmapPrivPtr)src->devPrivate.ptr; - PsPixmapPrivPtr dPriv = (PsPixmapPrivPtr)dst->devPrivate.ptr; - DisplayListPtr sDisp; - DisplayListPtr dDisp = PsGetFreeDisplayBlock(dPriv); - DisplayElmPtr elm = &dDisp->elms[dDisp->nelms]; - - elm->type = BeginFrameCmd; - elm->c.frame.x = x; - elm->c.frame.y = y; - elm->c.frame.w = w; - elm->c.frame.h = h; - dDisp->nelms += 1; - - sDisp = sPriv->dispList; - for(; sDisp ; sDisp=sDisp->next ) - { - int i; - for( i=0,elm=sDisp->elms ; inelms ; i++,elm++ ) - { - dDisp = PsGetFreeDisplayBlock(dPriv); - if (PsCloneDisplayElm(dst, elm, &dDisp->elms[dDisp->nelms], - xoff, yoff)==0) - { - dDisp->nelms += 1; - } - } - } - - dDisp = PsGetFreeDisplayBlock(dPriv); - elm = &dDisp->elms[dDisp->nelms]; - elm->type = EndFrameCmd; - dDisp->nelms += 1; -} - -PsElmPtr -PsCreateFillElementList(PixmapPtr pix, int *nElms) -{ - PsElmPtr elms = (PsElmPtr)0; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp = priv->dispList; - PsArcEnum styl; - - *nElms = 0; - for(; disp ; disp=disp->next ) - { - int i; - DisplayElmPtr elm = disp->elms; - - for( i=0 ; inelms ; i++,elm++ ) - { - if( !elm->gc ) continue; /* workaround for https://freedesktop.org/bugzilla/show_bug.cgi?id=1416 */ - if( !elm->gc->fgPixel ) continue; - switch(elm->type) - { - case FillPolygonCmd: - *nElms += 1; - break; - case PolyFillRectCmd: - *nElms += elm->c.rects.nRects; - break; - case PolyFillArcCmd: - *nElms += elm->c.arcs.nArcs; - break; - default: /* keep the compiler happy with unhandled enums */ - break; - } - } - } - - if( (*nElms) ) - { - elms = (PsElmPtr)xcalloc(1, (*nElms)*sizeof(PsElmRec)); - if( elms ) - { - disp = priv->dispList; - *nElms = 0; - for(; disp ; disp=disp->next ) - { - int i, k; - DisplayElmPtr elm = disp->elms; - - for( i=0 ; inelms ; i++,elm++ ) - { - if( !elm->gc->fgPixel ) continue; - switch(elm->type) - { - case FillPolygonCmd: - elms[*nElms].type = PSOUT_POINTS; - elms[*nElms].nPoints = elm->c.polyPts.nPoints; - elms[*nElms].c.points = - (PsPointPtr)xalloc(elms[*nElms].nPoints*sizeof(PsPointRec)); - for( k=0 ; kc.polyPts.pPoints[k].x; - elms[*nElms].c.points[k].y = elm->c.polyPts.pPoints[k].y; - } - *nElms += 1; - break; - case PolyFillRectCmd: - for( k=0 ; kc.rects.nRects ; k++ ) - { - elms[*nElms].type = PSOUT_RECT; - elms[*nElms].nPoints = 0; - elms[*nElms].c.rect.x = elm->c.rects.pRects[k].x; - elms[*nElms].c.rect.y = elm->c.rects.pRects[k].y; - elms[*nElms].c.rect.w = elm->c.rects.pRects[k].width; - elms[*nElms].c.rect.h = elm->c.rects.pRects[k].height; - *nElms += 1; - } - break; - case PolyFillArcCmd: - if( elm->gc->arcMode==ArcChord ) styl = PsChord; - else styl = PsPieSlice; - for( k=0 ; kc.rects.nRects ; k++ ) - { - elms[*nElms].type = PSOUT_ARC; - elms[*nElms].nPoints = 0; - elms[*nElms].c.arc.x = elm->c.arcs.pArcs[k].x; - elms[*nElms].c.arc.y = elm->c.arcs.pArcs[k].y; - elms[*nElms].c.arc.w = elm->c.arcs.pArcs[k].width; - elms[*nElms].c.arc.h = elm->c.arcs.pArcs[k].height; - elms[*nElms].c.arc.a1 = elm->c.arcs.pArcs[k].angle1; - elms[*nElms].c.arc.a2 = elm->c.arcs.pArcs[k].angle2; - elms[*nElms].c.arc.style = styl; - *nElms += 1; - } - break; - default: /* keep the compiler happy with unhandled enums */ - break; - } - } - } - } - } - return(elms); -} - -PsElmPtr -PsCloneFillElementList(int nElms, PsElmPtr elms) -{ - int i; - PsElmPtr newElms; - - newElms = (PsElmPtr)xcalloc(1, nElms*sizeof(PsElmRec)); - if( !newElms ) return(newElms); - for( i=0 ; i -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsPolyRectangle( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyRectangleCmd; - elm->gc = gc; - elm->c.rects.nRects = nRects; - elm->c.rects.pRects = (xRectangle *)xalloc(nRects*sizeof(xRectangle)); - memcpy(elm->c.rects.pRects, pRects, nRects*sizeof(xRectangle)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = FillPolygonCmd; - elm->gc = gc; - elm->c.polyPts.mode = mode; - elm->c.polyPts.nPoints = nPoints; - elm->c.polyPts.pPoints = (xPoint *)xalloc(nPoints*sizeof(xPoint)); - memcpy(elm->c.polyPts.pPoints, pPoints, nPoints*sizeof(xPoint)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointPtr pts; - PsRuleEnum rule; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsSetFillColor(pDrawable, pGC, psOut, cMap); - if( pGC->fillRule==EvenOddRule ) rule = PsEvenOdd; - else rule = PsNZWinding; - PsOut_FillRule(psOut, rule); - pts = (PsPointPtr)xalloc(sizeof(PsPointRec)*nPoints); - if( mode==CoordModeOrigin ) - { - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - -#ifdef DBE - /* Remove previous pixmap content if we render one single rect which - * covers the whole pixmap surface (this optimisation was added for - * the double-buffer extension ("DBE") which uses |PolyFillRect()| - * to clear the buffer - but it makes sense in other cases, too). - */ - if (nRects == 1) - { - if ( (pRects[0].x==0) && (pRects[0].y==0) && - (pRects[0].width==pDrawable->width) && (pRects[0].height==pDrawable->height) && - (pGC->fillStyle == FillSolid) && - (noDbeExtension == False)) - { -#ifdef DEBUG_gismobile - ErrorF("PsPolyFillRect: scrubbing pixmap...\n"); -#endif /* DEBUG_gismobile */ - /* Remove all content from the pixmap as it would be covered - * by the whole rect anyway */ - PsScrubPixmap((PixmapPtr)pDrawable); - } - } -#endif /* DBE */ - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyFillRectCmd; - elm->gc = gc; - elm->c.rects.nRects = nRects; - elm->c.rects.pRects = (xRectangle *)xalloc(nRects*sizeof(xRectangle)); - memcpy(elm->c.rects.pRects, pRects, nRects*sizeof(xRectangle)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsSetFillColor(pDrawable, pGC, psOut, cMap); - for( i=0 ; i -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#define NEED_EVENTS -#include -#undef NEED_EVENTS - -#include "Ps.h" - -#include "windowstr.h" -#include "attributes.h" -#include "Oid.h" - -/* static utility function to get document/page attributes */ -static void -S_GetPageAttributes(XpContextPtr pCon,int *iorient,int *icount, int *iplex, - int *ires, unsigned short *iwd, unsigned short *iht) -{ - char *count; - XpOid orient, plex; - /* - * Get the orientation - */ - orient = XpGetContentOrientation(pCon); - switch (orient) { - case xpoid_val_content_orientation_landscape: - *iorient = 1; - break; - case xpoid_val_content_orientation_reverse_portrait: - *iorient = 2; - break; - case xpoid_val_content_orientation_reverse_landscape: - *iorient = 3; - break; - case xpoid_val_content_orientation_portrait: - default: - *iorient = 0; - break; - } - - /* - * Get the count - */ - count = XpGetOneAttribute(pCon, XPDocAttr, "copy-count"); - if( count ) - { - int ii = sscanf(count, "%d", icount); - if( ii!=1 ) *icount = 1; - } - else *icount = 1; - - /* - * Get the plex - */ - plex = XpGetPlex(pCon); - switch(plex) - { - case xpoid_val_plex_duplex: - *iplex = 1; - break; - case xpoid_val_plex_tumble: - *iplex = 2; - break; - default: - *iplex = 0; - break; - } - - /* - * Get the resolution and media size - */ - *ires = XpGetResolution(pCon); - XpGetMediumDimensions(pCon, iwd, iht); -} - - -int -PsStartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client) -{ - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w", &pConPriv->jobFileName, &pConPriv->pJobFile)) - return BadAlloc; - - return Success; -} - - - -/* I thought about making this following code into a set of routines - or using a goto, or something, but in the end decided not to, - because the plain old listing here makes the logic clearer. */ -int -PsEndJob( - XpContextPtr pCon, - Bool cancel) -{ - int r; - struct stat buffer; - int error; - - PsContextPrivPtr priv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - if (cancel == True) { - if (priv->getDocClient != (ClientPtr) NULL) { - (void) XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - /* job is cancelled - do we really care if we're out of space? */ - (void) fclose(priv->pJobFile); - priv->pJobFile = NULL; - - unlink(priv->jobFileName); - xfree(priv->jobFileName); - priv->jobFileName = (char *)NULL; - - PsFreeFontInfoRecords(priv); - - return Success; - } - - /* - * Append any trailing information here - */ - PsOut_EndFile(priv->pPsOut, 0); - priv->pPsOut = NULL; - - /* this is where we find out if we're out of space */ - error = (fclose(priv->pJobFile) == EOF); - priv->pJobFile = NULL; - - /* status to the client if we have ran out of space on the disk or - some other resource problem with the temporary file... */ - if (error) { - if (priv->getDocClient != (ClientPtr) NULL) { - (void) XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - unlink(priv->jobFileName); - xfree(priv->jobFileName); - priv->jobFileName = (char *)NULL; - - PsFreeFontInfoRecords(priv); - - return BadAlloc; - } - - /* we have finished without incident & no cancel */ - - if (priv->getDocClient != NULL && priv->getDocBufSize > 0) { - FILE *file; - - file = fopen(priv->jobFileName, "r"); - if (!file || (fstat(fileno(file), &buffer) < 0)) - r = BadAlloc; - else - r = XpSendDocumentData(priv->getDocClient, file, buffer.st_size, - priv->getDocBufSize); - if (file) - fclose(file); - - (void) XpFinishDocData(priv->getDocClient); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - else { - XpSubmitJob(priv->jobFileName, pCon); - - r = Success; - } - - unlink(priv->jobFileName); - xfree(priv->jobFileName); - priv->jobFileName = (char *)NULL; - - PsFreeFontInfoRecords(priv); - -#ifdef BM_CACHE - PsBmClearImageCache(); -#endif - - return r; -} - -/* StartPage - */ -int -PsStartPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - int iorient, iplex, icount, ires; - unsigned short iwd, iht; - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - PsWindowPrivPtr pWinPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - -/* - * Put a pointer to the context in the window private structure - */ - pWinPriv->validContext = 1; - pWinPriv->context = pCon; - - /* get page level attributes */ - S_GetPageAttributes(pCon,&iorient,&icount,&iplex,&ires,&iwd,&iht); - /* - * Start the page - */ - if (pConPriv->pPsOut == NULL) { - char *title; - - /* get job level attributes */ - title = XpGetOneAttribute(pCon, XPJobAttr, "job-name"); - - pConPriv->pPsOut = PsOut_BeginFile(pConPriv->pJobFile, - title, iorient, icount, iplex, ires, - (int)iwd, (int)iht, False); - pConPriv->fontInfoRecords = NULL; - pConPriv->fontTypeInfoRecords = NULL; - } - PsOut_BeginPage(pConPriv->pPsOut, iorient, icount, iplex, ires, - (int)iwd, (int)iht); - - return Success; -} - - -/* - * EndPage: - * - * Write page trailer to page file - * Write page file to job file - */ -int -PsEndPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - PsWindowPrivPtr pWinPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - PsOut_EndPage(pConPriv->pPsOut); - - pWinPriv->validContext = 0; - pWinPriv->context = NULL; - - /* status to the client if we have ran out of space on the disk or - some other resource problem with the temporary file... */ -/* if (ferror(pConPriv->pJobFile)) return BadAlloc; */ - - return Success; -} - -/* - * The PsStartDoc() and PsEndDoc() functions serve basically as NOOP - * placeholders. This driver doesn't deal with the notion of multiple - * documents per page. - */ - -int -PsStartDoc(XpContextPtr pCon, XPDocumentType type) -{ - int iorient, iplex, icount, ires; - unsigned short iwd, iht; - char *title; - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - /* get job level attributes */ - title = XpGetOneAttribute(pCon, XPJobAttr, "job-name"); - - /* get document level attributes */ - S_GetPageAttributes(pCon,&iorient,&icount,&iplex,&ires,&iwd,&iht); - - pConPriv->pPsOut = PsOut_BeginFile(pConPriv->pJobFile, - title, iorient, icount, iplex, ires, - (int)iwd, (int)iht, (Bool)(type == XPDocRaw)); - - pConPriv->fontInfoRecords = NULL; - pConPriv->fontTypeInfoRecords = NULL; - - return Success; -} - -int -PsEndDoc( - XpContextPtr pCon, - Bool cancel) -{ - return Success; -} - -/* - * PsDocumentData() - * - * Hand any pre-generated PDL down to the spool files, formatting it - * as necessary to fit the given window. - */ - -int -PsDocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pFmt, - int len_fmt, - char *pOpt, - int len_opt, - ClientPtr client) -{ - PsContextPrivPtr cPriv; - PsOutPtr psOut; - - if (len_fmt != 12 || - strncasecmp(pFmt, "PostScript 2", len_fmt) != 0 || - len_opt) - return BadValue; - - cPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - psOut = cPriv->pPsOut; - - if (pDraw) - PsOut_BeginFrame(psOut, 0, 0, pDraw->x, pDraw->y, - pDraw->width, pDraw->height); - PsOut_RawData(psOut, pData, len_data); - if (pDraw) - PsOut_EndFrame(psOut); - - return Success; -} - -/* - * - * PsGetDocumentData() - * - * This function allows the driver to send the generated PS back to - * the client. - */ - -int -PsGetDocumentData( - XpContextPtr pCon, - ClientPtr client, - int maxBufferSize) -{ - PsContextPrivPtr pPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - pPriv->getDocClient = client; - pPriv->getDocBufSize = maxBufferSize; - - return Success; -} - diff --git a/hw/xprint/ps/PsSpans.c b/hw/xprint/ps/PsSpans.c deleted file mode 100644 index c0e66ee7a..000000000 --- a/hw/xprint/ps/PsSpans.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsSpans.c -** * -** * Contents: Code to set and fill spans in the PS DDX -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsFillSpans( - DrawablePtr pDrawable, - GCPtr pGC, - int nSpans, - DDXPointPtr pPoints, - int *pWidths, - int fSorted) -{ - PsOutPtr psOut; - int xoffset, yoffset; - xRectangle *rects, *r; - RegionPtr fillRegion, region = 0; - int i; - int nbox; - BoxPtr pbox; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - - /* - * Build a region out of the spans - */ - rects = (xRectangle *)xalloc(nSpans*sizeof(xRectangle)); - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = rects; i < nSpans; i++, r++ ) - { - r->x = pPoints[i].x + xoffset; - r->y = pPoints[i].y + yoffset; - r->width = pWidths[i]; - r->height = 1; - } - fillRegion = RECTS_TO_REGION(pGC->pScreen, nSpans, rects, - (fSorted)?CT_YSORTED:CT_UNSORTED); - - /* - * Intersect this region with the clip region. Whatever's left, - * should be filled. - */ -/*REGION_INTERSECT(pGC->pScreen, region, fillRegion, pGC->clientClip);*/ - - pbox = REGION_RECTS(region); - nbox = REGION_NUM_RECTS(region); - - /* Enter HP-GL/2 */ - /*###SEND_PCL( outFile, "\27%0B" );*/ - - while( nbox ) - { -/*### - sprintf( t, "PU%d,%d;RR%d,%d;", pbox->x1, pbox->y1, pbox->x2, pbox->y2); - SEND_PCL( outFile, t ); -*/ - nbox--; - pbox++; - } - - /* Go back to PCL */ - /*###SEND_PCL( outFile, "\27%0A" );*/ - - /* - * Clean up the temporary regions - */ - REGION_DESTROY(pGC->pScreen, fillRegion); - REGION_DESTROY(pGC->pScreen, region); - xfree(rects); -} - -void -PsSetSpans( - DrawablePtr pDrawable, - GCPtr pGC, - char *pSrc, - DDXPointPtr pPoints, - int *pWidths, - int nSpans, - int fSorted) -{ -} diff --git a/hw/xprint/ps/PsText.c b/hw/xprint/ps/PsText.c deleted file mode 100644 index 872c0f427..000000000 --- a/hw/xprint/ps/PsText.c +++ /dev/null @@ -1,581 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsText.c -** * -** * Contents: Character-drawing routines for the PS DDX -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" -#include -#include -#include - -int -PsPolyText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return x; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = Text8Cmd; - elm->gc = gc; - elm->c.text8.x = x; - elm->c.text8.y = y; - elm->c.text8.count = count; - elm->c.text8.string = (char *)xalloc(count); - memcpy(elm->c.text8.string, string, count); - disp->nelms += 1; - - return x; - } - else - { - PsFontInfoRec *firec; - - /* We need a context for rendering... */ - if (PsGetPsContextPriv(pDrawable) == NULL) - return x; - - firec = PsGetFontInfoRec(pDrawable, pGC->font); - if (!firec) - return x; - -#ifdef XP_USE_FREETYPE - if (firec->ftir->downloadableFont && - (firec->ftir->font_type == PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - if (firec->ftir->alreadyDownloaded[0] == False) - { - PsOut_DownloadFreeType(psOut, - firec->ftir->ft_download_font_type, - firec->ftir->download_ps_name, pGC->font, 0); - firec->ftir->alreadyDownloaded[0] = True; - } - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_TextAttrsMtx(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_TextAttrs(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_FreeType_Text(pGC->font, psOut, x, y, string, count); - - return x; - } - else -#endif /* XP_USE_FREETYPE */ - if (firec->ftir->downloadableFont && - (firec->ftir->font_type != PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - if (firec->ftir->alreadyDownloaded[0] == False) - { - PsOut_DownloadType1(psOut, "PsPolyText8", - firec->ftir->download_ps_name, firec->ftir->filename); - firec->ftir->alreadyDownloaded[0] = True; - } - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_TextAttrsMtx(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_TextAttrs(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_Text(psOut, x, y, string, count, -1); - - return x; - } - - /* Render glyphs as bitmaps */ - { - unsigned long n, i; - int w; - CharInfoPtr charinfo[255]; - - GetGlyphs(pGC->font, (unsigned long)count, - (unsigned char *)string, Linear8Bit, &n, charinfo); - w = 0; - for (i=0; i < n; i++) - w += charinfo[i]->metrics.characterWidth; - - if (n != 0) - PsPolyGlyphBlt(pDrawable, pGC, x, y, n, - charinfo, FONTGLYPHS(pGC->font)); - x += w; - - return x; - } - } - return x; -} - -int -PsPolyText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return x; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = Text16Cmd; - elm->gc = gc; - elm->c.text16.x = x; - elm->c.text16.y = y; - elm->c.text16.count = count; - elm->c.text16.string = - (unsigned short *)xalloc(count*sizeof(unsigned short)); - memcpy(elm->c.text16.string, string, count*sizeof(unsigned short)); - disp->nelms += 1; - - return x; - } - else - { - PsFontInfoRec *firec; - - /* We need a context for rendering... */ - if (PsGetPsContextPriv(pDrawable) == NULL) - return x; - - firec = PsGetFontInfoRec(pDrawable, pGC->font); - if (!firec) - return x; - -#ifdef XP_USE_FREETYPE - if (firec->ftir->downloadableFont && - (firec->ftir->font_type == PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - unsigned short c, - c_hiByte, - c_lowByte, - fontPage; - int i; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - /* Scan the string we want to render and download all neccesary parts - * of the font (one part(="font page") has 256 glyphs) - */ - for( i = 0 ; i < count ; i++ ) - { - c = string[i]; -#if IMAGE_BYTE_ORDER == LSBFirst - c_hiByte = c & 0x00FF; - c_lowByte = (c >> 8) & 0x00FF; -#elif IMAGE_BYTE_ORDER == MSBFirst - c_hiByte = (c >> 8) & 0x00FF; - c_lowByte = c & 0x00FF; -#else -#error Unsupported byte order -#endif - fontPage = c_hiByte; - - if (firec->ftir->alreadyDownloaded[fontPage] == False) - { - char buffer[256]; - const char *ps_name; - - if (fontPage > 0) - { - sprintf(buffer, "%s_%x", firec->ftir->download_ps_name, (int)fontPage); - ps_name = buffer; - } - else - { - ps_name = firec->ftir->download_ps_name; - } - - PsOut_DownloadFreeType(psOut, - firec->ftir->ft_download_font_type, - ps_name, pGC->font, (fontPage * 0x100)); /* same as (fontPage << 8) */ - - firec->ftir->alreadyDownloaded[fontPage] = True; - } - } - - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_FreeType_TextAttrsMtx16(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_FreeType_TextAttrs16(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_FreeType_Text16(pGC->font, psOut, x, y, string, count); - - return x; - } - else -#endif /* XP_USE_FREETYPE */ - if (firec->ftir->downloadableFont && - (firec->ftir->font_type != PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - unsigned short fontPage; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - PsOut_DownloadType1(psOut, "PsPolyText16", - firec->ftir->download_ps_name, firec->ftir->filename); - firec->ftir->alreadyDownloaded[fontPage] = True; - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_TextAttrsMtx(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_TextAttrs(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_Text16(psOut, x, y, string, count, -1); - - return x; - } - - /* Render glyphs as bitmaps */ - { - unsigned long n, i; - int w; - CharInfoPtr charinfo[255]; /* encoding only has 1 byte for count */ - - GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)string, - (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit, - &n, charinfo); - w = 0; - for (i=0; i < n; i++) - w += charinfo[i]->metrics.characterWidth; - if (n != 0) - PsPolyGlyphBlt(pDrawable, pGC, x, y, n, charinfo, FONTGLYPHS(pGC->font)); - x += w; - - return x; - } - } - return x; -} - -void -PsImageText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = TextI8Cmd; - elm->gc = gc; - elm->c.text8.x = x; - elm->c.text8.y = y; - elm->c.text8.count = count; - elm->c.text8.string = (char *)xalloc(count); - memcpy(elm->c.text8.string, string, count); - disp->nelms += 1; - } - else - { - int iso; - int siz; - float mtx[4]; - char *fnam; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - fnam = PsGetPSFontName(pGC->font); - if( !fnam ) fnam = "Times-Roman"; - siz = PsGetFontSize(pGC->font, mtx); - iso = PsIsISOLatin1Encoding(pGC->font); - if( !siz ) PsOut_TextAttrsMtx(psOut, fnam, mtx, iso); - else PsOut_TextAttrs(psOut, fnam, siz, iso); - PsOut_Text(psOut, x, y, string, count, PsGetPixelColor(cMap, pGC->bgPixel)); - } -} - -void -PsImageText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = TextI16Cmd; - elm->gc = gc; - elm->c.text16.x = x; - elm->c.text16.y = y; - elm->c.text16.count = count; - elm->c.text16.string = - (unsigned short *)xalloc(count*sizeof(unsigned short)); - memcpy(elm->c.text16.string, string, count*sizeof(unsigned short)); - disp->nelms += 1; - } - else - { - int i; - char *str; - if( !count ) return; - str = (char *)xalloc(count); - for( i=0 ; ifont; - width = FONTMAXBOUNDS(pfont,rightSideBearing) - - FONTMINBOUNDS(pfont,leftSideBearing); - height = FONTMAXBOUNDS(pfont,ascent) + - FONTMAXBOUNDS(pfont,descent); - - if ((width == 0) || (height == 0) ) - return; - { - int i; - w = 0; - for (i=0; i < nGlyphs; i++) w += pCharInfo[i]->metrics.characterWidth; - } - pGCtmp = GetScratchGC(1, pDrawable->pScreen); - if (!pGCtmp) - { - (*pDrawable->pScreen->DestroyPixmap)(pPixmap); - return; - } - - gcvals[0] = GXcopy; - gcvals[1] = pGC->fgPixel; - gcvals[2] = pGC->bgPixel; - - DoChangeGC(pGCtmp, GCFunction|GCForeground|GCBackground, gcvals, 0); - - - nbyLine = BitmapBytePad(width); - pbits = (unsigned char *)xalloc(height*nbyLine); - if (!pbits){ - PsDestroyPixmap(pPixmap); - return; - } - tmpx = 0; - while(nGlyphs--) - { - pci = *pCharInfo++; - pglyph = FONTGLYPHBITS(pGlyphBase, pci); - gWidth = GLYPHWIDTHPIXELS(pci); - gHeight = GLYPHHEIGHTPIXELS(pci); - if (gWidth && gHeight) - { - nbyGlyphWidth = GLYPHWIDTHBYTESPADDED(pci); - nbyPadGlyph = BitmapBytePad(gWidth); - - if (nbyGlyphWidth == nbyPadGlyph -#if GLYPHPADBYTES != 4 - && (((int) pglyph) & 3) == 0 -#endif - ) - { - pb = pglyph; - } - else - { - for (i=0, pb = pbits; imetrics.leftSideBearing, - y - pci->metrics.ascent, gWidth, gHeight, - 0, XYBitmap, (char *)pb); - } - - x += pci->metrics.characterWidth; - } - xfree(pbits); - FreeScratchGC(pGCtmp); -} diff --git a/hw/xprint/ps/PsWindow.c b/hw/xprint/ps/PsWindow.c deleted file mode 100644 index 8bfde4b0d..000000000 --- a/hw/xprint/ps/PsWindow.c +++ /dev/null @@ -1,222 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsWindow.c -** * -** * Contents: Window code for PS driver. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "mistruct.h" -#include "regionstr.h" -#include "windowstr.h" -#include "gcstruct.h" - -#include "Ps.h" - -/* - * The following list of strings defines the properties which will be - * placed on the screen's root window if the property was defined in - * the start-up configuration resource database. - */ -#if 0 -static char *propStrings[] = { - DT_PRINT_JOB_HEADER, - DT_PRINT_JOB_TRAILER, - DT_PRINT_JOB_COMMAND, - DT_PRINT_JOB_EXEC_COMMAND, - DT_PRINT_JOB_EXEC_OPTIONS, - DT_PRINT_PAGE_HEADER, - DT_PRINT_PAGE_TRAILER, - DT_PRINT_PAGE_COMMAND, - (char *)NULL -}; -#endif - -/* - * PsCreateWindow - watch for the creation of the root window. - * When it's created, register the screen with the print extension, - * and put the default command/header properties on it. - */ -/*ARGSUSED*/ - -Bool -PsCreateWindow(WindowPtr pWin) -{ - PsWindowPrivPtr pPriv; - -#if 0 - Bool status = Success; - ScreenPtr pScreen = pWin->drawable.pScreen; - PsScreenPrivPtr pScreenPriv = (PsScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PsScreenPrivateKey); - PsWindowPrivPtr pWinPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - - /* - * Initialize this window's private struct. - */ - pWinPriv->jobFileName = (char *)NULL; - pWinPriv->pJobFile = (FILE *)NULL; - pWinPriv->pageFileName = (char *)NULL; - pWinPriv->pPageFile = (FILE *)NULL; - - if(pWin->parent == (WindowPtr)NULL) /* root window? */ - { - Atom propName; /* type = XA_STRING */ - char *propVal; - int i; - XrmDatabase rmdb = pScreenPriv->resDB; - - /* - * Put the defaults spec'd in the config files in properties on this - * screen's root window. - */ - for(i = 0; propStrings[i] != (char *)NULL; i++) - { - if((propVal = _DtPrintGetPrinterResource(pWin, rmdb, - propStrings[i])) != - (char *)NULL) - { - propName = MakeAtom(propStrings[i], strlen(propStrings[i]), - TRUE); - dixChangeWindowProperty(serverClient, pWin, propName, XA_STRING, - 8, PropModeReplace, strlen(propVal), - (pointer)propVal, FALSE); - xfree(propVal); - } - } - } - - return status; -#endif - - pPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - pPriv->validContext = 0; - - return TRUE; -} - - -/*ARGSUSED*/ -Bool PsMapWindow(WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PsPositionWindow( - WindowPtr pWin, - int x, - int y) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PsUnmapWindow(WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -void -PsCopyWindow( - WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc) -{ -} - -/*ARGSUSED*/ -Bool -PsChangeWindowAttributes( - WindowPtr pWin, - unsigned long mask) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PsDestroyWindow(WindowPtr pWin) -{ - return TRUE; -} diff --git a/hw/xprint/ps/psout.c b/hw/xprint/ps/psout.c deleted file mode 100644 index c24f88b3d..000000000 --- a/hw/xprint/ps/psout.c +++ /dev/null @@ -1,1789 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996, 2000 Sun Microsystems, Inc. All Rights Reserved. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: psout.c -** * -** * Contents: Code to output PostScript to file -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "Ps.h" -#include "psout.h" -#ifdef XP_USE_FREETYPE -#include -#include FT_FREETYPE_H -#endif /* XP_USE_FREETYPE */ -/* For VENDOR_STRING and VENDOR_RELEASE */ -#include "site.h" - -/* - * Standard definitions - */ - -static char *S_StandardDefs = "\ -/d{def}bind def\ -/b{bind}bind d\ -/bd{b d}b d\ -/x{exch}bd\ -/xd{x d}bd\ -/dp{dup}bd\ -/t{true}bd\ -/f{false}bd\ -/p{pop}bd\ -/r{roll}bd\ -/c{copy}bd\ -/i{index}bd\ -/rp{repeat}bd\ -/n{newpath}bd\ -/w{setlinewidth}bd\ -/lc{setlinecap}bd\ -/lj{setlinejoin}bd\ -/sml{setmiterlimit}bd\ -/ds{setdash}bd\ -/ie{ifelse}bd\ -/len{length}bd\ -/m{moveto}bd\ -/rm{rmoveto}bd\ -/l{lineto}bd\ -/rl{rlineto}bd\ -/a{arc}bd\ -/an{arcn}bd\ -/st{stroke}bd\ -/fl{fill}bd\ -/ef{eofill}bd\ -/sp{showpage}bd\ -/cp{closepath}bd\ -/clp{clippath}bd\ -/cl{clip}bd\ -/pb{pathbbox}bd\ -/tr{translate}bd\ -/rt{rotate}bd\ -/dv{div}bd\ -/ml{mul}bd\ -/ad{add}bd\ -/ng{neg}bd\ -/scl{scale}bd\ -/sc{setrgbcolor}bd\ -/g{setgray}bd\ -/gs{gsave}bd\ -/gr{grestore}bd\ -/sv{save}bd\ -/rs{restore}bd\ -/mx{matrix}bd\ -/cm{currentmatrix}bd\ -/sm{setmatrix}bd\ -/ccm{concatmatrix}bd\ -/cc{concat}bd\ -/ff{findfont}bd\ -/mf{makefont}bd\ -/sf{setfont}bd\ -/cft{currentfont}bd\ -/fd{FontDirectory}bd\ -/sh{show}bd\ -/stw{stringwidth}bd\ -/ci{colorimage}bd\ -/ig{image}bd\ -/im{imagemask}bd\ -/cf{currentfile}bd\ -/rh{readhexstring}bd\ -/str{string}bd\ -/al{aload}bd\ -/wh{where}bd\ -/kn{known}bd\ -/stp{stopped}bd\ -/bg{begin}bd\ -/ed{end}bd\ -/fa{forall}bd\ -/pi{putinterval}bd\ -/mk{mark}bd\ -/ctm{cleartomark}bd\ -/df{definefont}bd\ -/cd{currentdict}bd\ -/db{20 dict dp bg}bd\ -/de{ed}bd\ -/languagelevel wh{p languagelevel}{1}ie\ - 1 eq{/makepattern{p}bd/setpattern{p}bd/setpagedevice{p}bd}if\ -/mp{makepattern}bd\ -/spt{setpattern}bd\ -/spd{setpagedevice}bd\ -" -#ifdef XP_USE_FREETYPE -"/trmoveto{currentfont /FontMatrix get transform rm}d" -#endif /* XP_USE_FREETYPE */ -; - -/* - * Composite definitions - * - * - * XYr - Return X/Y dpi for device - * - * XYr - * - * Cs - Coordinate setup (for origin upper left) - * - * Cs - * - * P - Draw a point - * - * P - * - * R - Add rectangle to path - * - * R - * - * Ac - Add arc to path - * - * Ac - * - * An - Add arc to path (counterclockwise) - * - * An - * - * Tf - Set font - * - * Tf - * - * Tfm - Set font with matrix - * - * Tfm - * - * T - Draw text - * - * T - * - * Tb - Draw text with background color - * - * Tb - * - * Im1 - Image 1 bit monochrome imagemask - * - * Im1 - * - * Im24 - Image 24 bit RGB color - * - * Im24 - * - * Im1t - Image 1 bit monochrome imagemask (in tile) - * - * Im1t - * - * Im24t - Image 24 bit RGB color (in tile) - * - * Im24t - */ - -static char *S_CompositeDefs = "\ -/XYr{/currentpagedevice wh\ - {p currentpagedevice dp /HWResolution kn\ - {/HWResolution get al p}{p 300 300}ie}{300 300}ie}bd\ -/Cs{dp 0 eq{0 pHt tr XYr -1 x dv 72 ml x 1 x dv 72 ml x scl}if\ - dp 1 eq{90 rt XYr -1 x dv 72 ml x 1 x dv 72 ml x scl}if\ - dp 2 eq{pWd 0 tr XYr 1 x dv 72 ml x -1 x dv 72 ml x scl}if\ - 3 eq{pHt pWd tr 90 rt XYr 1 x dv 72 ml x -1 x dv 72 ml x scl}if}bd\ -/P{gs 1 w [] 0 ds 2 c m .1 ad x .1 ad x l st gr}bd\ -/R{4 2 r m 1 i 0 rl 0 x rl ng 0 rl cp}bd\ -/Ac{mx_ cm p 6 -2 r tr 4 2 r ng scl 0 0 .5 5 3 r a mx_ sm}bd\ -/An{mx_ cm p 6 -2 r tr 4 2 r ng scl 0 0 .5 5 3 r an mx_ sm}bd\ -/ISO{dp len dict bg{1 i/FID ne{d}{p p}ie}fa\ - /Encoding ISOLatin1Encoding d cd ed df}bd\ -/iN{dp len str cvs dp len x 1 i 3 ad str 2 c c p x p dp 3 -1 r(ISO)pi}bd\ -/Tp{{x dp iN dp fd x kn{x p dp/f_ x d ff}{dp/f_ x d x ff ISO}ie x}\ - {x dp/f_ x d ff x}ie}bd\ -/Tf{Tp[x 0 0 2 i ng 0 0] dp/fm_ x d mf sf}bd\ -/Tfm{Tp 1 -1 tm1_ scl tm2_ ccm dp/fm_ x d mf sf}bd\ -/T{m sh}bd\ -/Tb{gs sc f_ ff sf cft/FontMatrix get 3 get\ - cft/FontBBox get dp 1 get x 3 get 2 i ml 3 1 r ml\ - 0 0 m 4 i stw p 4 i 4 i m fm_ cc\ - 0 2 i rl dp 0 rl 0 2 i ng rl 0 3 i rl ng 0 rl cp fl p p\ - gr T}bd\ -/Im1{6 4 r tr scl t [3 i 0 0 5 i 0 0]{cf str1 rh p} im}bd\ -/Im1rev{6 4 r tr scl f [3 i 0 0 5 i 0 0]{cf str1 rh p} im}bd\ -/Im24{gs 6 4 r tr scl 8 [3 i 0 0 5 i 0 0]{cf str3 rh p} f 3 ci}bd\ -/Im1t{6 4 r tr scl t [3 i 0 0 5 i 0 0]{} im}bd\ -/Im24t{gs 6 4 r tr scl 8 [3 i 0 0 5 i 0 0]{} f 3 ci}bd\ -/ck2{/currentpagedevice wh \ -{p dp currentpagedevice dp 3 -1 r kn \ -{x get al p 3 -1 r eq 3 1 r eq and } \ -{p p p p t}ie} \ -{p p p t}ie}bd \ -/ck1{/currentpagedevice wh \ -{p dp currentpagedevice dp 3 -1 r kn \ -{x get eq} {p p p t}ie} \ -{p p t}ie}bd \ -/mtx{scl t [3 i 0 0 5 i 0 0]}bd \ -"; - -char *pg_orient[] = {"Portrait","Landscape","Reverse Portrait","Reverse Landscape"}; -/* - * Setup definitions - */ - -static char *S_SetupDefs = "\ - /mx_ mx d\ - /im_ mx d\ - /tm1_ mx d\ - /tm2_ mx d\ - /str3 3 str d\ - /str1 1 str d\ -"; - -/******************************************************************* - * PRIVATE FUNCTIONS * - *******************************************************************/ - -void -S_Flush(PsOutPtr self) -{ - int len; - - if( self->Buf[0] == '\0' ) - return; - - len = strlen(self->Buf); - - /* Append a newline char ('\n') if there isn't one there already */ - if( self->Buf[len-1] != '\n' ) - { - self->Buf[len++] = '\n'; - self->Buf[len] = '\0'; - } - - (void)fwrite(self->Buf, len, 1, self->Fp); - - self->Buf[0] = '\0'; -} - -static void -S_Comment(PsOutPtr self, char *comment) -{ - S_Flush(self); - strcpy(self->Buf, comment); - S_Flush(self); -} - -static void -S_OutDefs(PsOutPtr self, char *defs) -{ - int i, k=0; - S_Flush(self); - memset(self->Buf, 0, sizeof(self->Buf)); - for( i=0 ; defs[i]!='\0' ;) - { - if( k>70 && (i==0 || (i && defs[i-1]!='/')) && - (defs[i]==' ' || defs[i]=='/' || defs[i]=='{') ) - { - S_Flush(self); - k = 0; - memset(self->Buf, 0, sizeof(self->Buf)); - } - if( k && self->Buf[k-1]==' ' && defs[i]==' ' ) { i++; continue; } - self->Buf[k] = defs[i]; - k++; i++; - } - S_Flush(self); -} - -void -S_OutNum(PsOutPtr self, float num) -{ - int i; - char buf[64]; - int len; - - sprintf(buf, "%.3f", num); - - /* Remove any zeros at the end */ - for( i=strlen(buf)-1 ; buf[i]=='0' ; i-- ); buf[i+1] = '\0'; - /* Remove '.' if it is the last character */ - i = strlen(buf)-1; if( buf[i]=='.' ) buf[i] = '\0'; - - len = strlen(self->Buf); - if( len > 0 ) - { - self->Buf[len++] = ' '; - self->Buf[len] = '\0'; - } - strcpy(&self->Buf[len], buf); - if( (len+i)>70 ) S_Flush(self); -} - -static void -S_OutStr(PsOutPtr self, char *txt, int txtl) -{ - int i, k; - char buf[1024]; - for( i=0,k=0 ; i=' ' && txt[i]<='~') && - txt[i]!='(' && txt[i]!=')' && txt[i]!='\\' ) - { buf[k] = txt[i]; k++; continue; } - buf[k] = '\\'; k++; - sprintf(&buf[k], "%03o", txt[i]&0xFF); - /* Skip to the end of the buffer */ - while( buf[k] != '\0' ) - k++; - } - strcat(self->Buf, "("); - i = strlen(self->Buf); - memcpy(&self->Buf[i], buf, k); - self->Buf[i+k] = '\0'; - strcat(self->Buf, ")"); - if( strlen(self->Buf)>70 ) S_Flush(self); -} - -/* Same as S_OutStr() but takes |short *| instead of |char *| */ -static void -S_OutStr16(PsOutPtr self, unsigned short *txt, int txtl) -{ - int i, k; - char buf[2048]; - for( i=0,k=0 ; i=' ' && txt[i]<='~') && - txt[i]!='(' && txt[i]!=')' && txt[i]!='\\' ) - { buf[k] = txt[i]; k++; continue; } - buf[k] = '\\'; k++; - sprintf(&buf[k], "%03o", txt[i]&0xFFFF); - /* Skip to the end of the buffer */ - while( buf[k] != '\0' ) - k++; - } - strcat(self->Buf, "("); - i = strlen(self->Buf); - memcpy(&self->Buf[i], buf, k); - self->Buf[i+k] = '\0'; - strcat(self->Buf, ")"); - if( strlen(self->Buf)>70 ) S_Flush(self); -} - -void -S_OutTok(PsOutPtr self, char *tok, int cr) -{ - int len = strlen(self->Buf); - if( len > 0 ) - { - self->Buf[len++] = ' '; - self->Buf[len] = '\0'; - } - strcpy(&self->Buf[len], tok); - if( cr ) S_Flush(self); -} - -static void -S_Color(PsOutPtr self, PsOutColor clr) -{ - int ir, ig, ib; - ir = PSOUTCOLOR_TO_REDBITS(clr); - ig = PSOUTCOLOR_TO_GREENBITS(clr); - ib = PSOUTCOLOR_TO_BLUEBITS(clr); - if( ir==ig && ig==ib ) - { S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); S_OutTok(self, "g", 1); } - else - { - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib)); - S_OutTok(self, "sc", 1); - } -} - -static void -S_SetPageDevice(PsOutPtr self, int orient, int count, int plex, int res, - int wd, int ht, int isPage) -{ - float fwd = ((float)wd/(float)res)*72.; - float fht = ((float)ht/(float)res)*72.; - -#define USE_WORKAROUND_COPY_COUNT_BUG 1 - -#ifdef USE_WORKAROUND_COPY_COUNT_BUG - /* Workaround (see http://xprint.mozdev.org/bugs/show_bug.cgi?id=1861 - - * 'Need workaround for bug 1378 ...') to avoid that we print n^2 copies - * instead of n copies. - * The problem is that we use both /NumCopies here but pass the - * %copy-count% to the spooler, too. - * But we only have to use _one_ way... - * - * The final fix for bug 1378 (http://xprint.mozdev.org/bugs/show_bug.cgi?id=1378 - - * "PS DDX creates n^2 copies of a job instead of n copies") will back this - * workaround out and replace it with a better solution. - * (see mozilla.org bug 140030 - * (http://bugzilla.mozilla.org/show_bug.cgi?id=140030 - "Setting number - * of copies causes too many copies to print") for the initial report for - * this issue...) - */ - count = 1; -#endif /* USE_WORKAROUND_COPY_COUNT_BUG */ - - S_OutTok(self, "/pWd", 0); - S_OutNum(self, fwd); - S_OutTok(self, "d /pHt", 0); - S_OutNum(self, fht); - S_OutTok(self, "d", 1); - - /* - * if these are page attributes, have PostScript check to see if they - * have changed. If not, don't do setpagedevice, since it will cause - * a page flush and screw up duplex printing. Having PostScript check - * means we don't have to keep track ourselves. - */ - if(isPage) { - S_OutNum(self, (float) orient); - S_OutTok(self, "/Orientation ck1", 0); - S_OutTok(self, "pWd pHt /PageSize ck2 and not {", 1); - } - S_OutTok(self, "{db", 0); - - S_OutTok(self, "/Orientation", 0); - S_OutNum(self, (float) orient); - S_OutTok(self, " d ", 0); - S_OutTok(self, "/PageSize [pWd pHt] d", 0); - - S_OutTok(self, " de spd", 0); - /* - * save a flag to show if we failed to set orientation... determined - * by both/either Orientation and/or PageSize, use this - * later to set/not set orientation using Cs command. - */ - S_OutTok(self,"}stp /orientationFailed x d", 1); - /* - * if these are page attributes, have PostScript check to see if they - * have changed. If not, don't do setpagedevice, since it will cause - * a page flush and screw up duplex printing. Having PostScript check - * means we don't have to keep track ourselves. - */ - if(isPage) - { - S_OutTok(self,"}if",1); - - S_OutTok(self, (plex==0)?"f":"t", 0); - S_OutTok(self, "/Duplex ck1 ", 0); - - S_OutTok(self, (plex==2)?"t":"f", 0); - S_OutTok(self, "/Tumble ck1 and ", 0); - - - S_OutNum(self, (float)res); - S_OutNum(self, (float)res); - S_OutTok(self, " /HWResolution ck2 and", 0); - - if( count>1 ) - { - S_OutNum(self, (float)count); - S_OutTok(self, " /NumCopies", 0); - S_OutTok(self, " ck1 and ", 0); - } - S_OutTok(self," not {",1); - } - S_OutTok(self, "{db", 0); - - S_OutTok(self, "/Duplex ", 0); - S_OutTok(self, (plex==0)?"f":"t", 0); - S_OutTok(self, " d ", 0); - - S_OutTok(self, "/Tumble ", 0); - S_OutTok(self, (plex==2)?"t":"f", 0); - S_OutTok(self, " d ", 0); - - S_OutTok(self, " /HWResolution [", 0); - S_OutNum(self, (float)res); - S_OutNum(self, (float)res); - S_OutTok(self, "] d ", 0); - - if( count>1 ) - { - S_OutTok(self, " /NumCopies", 0); - S_OutNum(self, (float)count); - S_OutTok(self, " d ", 0); - } - S_OutTok(self, " de spd}stp p", 1); - - if(isPage) - { - S_OutTok(self, "}if", 1); - } -} - -/******************************************************************* - * PUBLIC FUNCTIONS * - *******************************************************************/ - -FILE * -PsOut_ChangeFile(PsOutPtr self, FILE *fp) -{ - FILE *nfp; - - nfp = self->Fp; - - self->Fp = fp; - - return nfp; -} - -PsOutPtr -PsOut_BeginFile(FILE *fp, char *title, int orient, int count, int plex, int res, - int wd, int ht, Bool raw) -{ - int i; - char buffer[256+32]; /* enougth space for a title with 256 chars... */ -/* - * Get ready to output PostScript header - */ - PsOutPtr psout; - psout = (PsOutPtr)xalloc(sizeof(PsOutRec)); - memset(psout, 0, sizeof(PsOutRec)); - psout->Fp = fp; - psout->isRaw = raw; - psout->pagenum = 0; - - if (!raw) { -/* - * Output PostScript header - */ - /* GhostScript will rant about the missing BoundingBox if we use - * "%!PS-Adobe-3.0 EPSF-3.0" here... */ - S_Comment(psout, "%!PS-Adobe-3.0"); -#ifdef XP_USE_FREETYPE - { - FT_Int ftmajor = 0, - ftminor = 0, - ftpatch = 0; - extern FT_Library ftypeLibrary; /* defined in xc/lib/font/FreeType/ftfuncs.c */ - - FT_Library_Version(ftypeLibrary, &ftmajor, &ftminor, &ftpatch); - sprintf(buffer, - "%%%%Creator: The X Print Server's PostScript DDX " - "(%s, release %d, FreeType version %d.%d.%d)", - VENDOR_STRING, VENDOR_RELEASE, - (int)ftmajor, (int)ftminor, (int)ftpatch); - } -#else - sprintf(buffer, - "%%%%Creator: The X Print Server's PostScript DDX (%s, release %d)", - VENDOR_STRING, VENDOR_RELEASE); -#endif /* XP_USE_FREETYPE */ - S_Comment(psout, buffer); - - if (title) - { - sprintf(buffer, "%%%%Title: %.256s", title); - S_Comment(psout, buffer); - } - S_Comment(psout, "%%EndComments"); - S_Comment(psout, "%%BeginProlog"); - S_Comment(psout, "%%BeginProcSet: XServer_PS_Functions"); - S_OutDefs(psout, S_StandardDefs); - S_OutDefs(psout, S_CompositeDefs); - S_Comment(psout, "%%EndProcSet"); - S_Comment(psout, "%%EndProlog"); - S_Comment(psout, "%%BeginSetup"); - /* set document level page attributes */ - S_SetPageDevice(psout, orient, count, plex, res, wd, ht, 0); - S_Comment(psout, "%%Pages: atend"); - S_OutDefs(psout, S_SetupDefs); - S_Comment(psout, "%%EndSetup"); - } -/* - * Initialize the structure - */ - psout->CurColor = PSOUTCOLOR_NOCOLOR; - psout->LineWidth = 1; - psout->LineCap = PsCButt; - psout->LineJoin = PsJMiter; - psout->NDashes = 0; - psout->Dashes = (int *)0; - psout->FontName = (char *)0; - psout->FontSize = 0; - psout->start_image = 0; - for( i=0 ; i<4 ; i++ ) psout->FontMtx[i] = 0.; - psout->ImageFormat = 0; - return(psout); -} - -void -PsOut_EndFile(PsOutPtr self, int closeFile) -{ - char coms[50]; - - if (!self) - return; - - if (!self->isRaw) { - S_Comment(self,"%%Trailer"); - sprintf(coms,"%%%%Pages: %d", self->pagenum); - S_Comment(self, coms); - S_Comment(self, "%%EOF"); - } - if( self->NDashes && self->Dashes ) xfree(self->Dashes); - if( self->FontName ) xfree(self->FontName); - if( self->Patterns ) xfree(self->Patterns); - if( self->Clip.rects ) xfree(self->Clip.rects); - if( closeFile ) fclose(self->Fp); - xfree(self); -} - -void -PsOut_BeginPage(PsOutPtr self, int orient, int count, int plex, int res, - int wd, int ht) -{ - char coms[50]; - -/*** comment for pagenumbers *****/ - - S_Comment(self,"%%PageHeader"); - self->pagenum++; - sprintf(coms,"%%%%Page: %d %d", self->pagenum, self->pagenum); - S_Comment(self, coms); - sprintf(coms,"%%%%PageOrientation: %s",pg_orient[orient]); - S_Comment(self, coms); - -/*** end comment *****************/ - - /* set page level page attributes */ - S_SetPageDevice(self, orient, count, plex, res, wd, ht, 1); - - S_OutTok(self, "gs ", 0); - /* - * check to see if we set orientation already; if it wasn't set, - * use Cs to set orientation here. - */ - S_OutNum(self, (float)orient); - S_OutTok(self, "orientationFailed { ", 0); - S_OutNum(self, (float)orient); - S_OutTok(self, " } { 0 }ie Cs 100 sml gs", 1); -} - -void -PsOut_EndPage(PsOutPtr self) -{ - S_OutTok(self, "gr gr sp", 1); - - /* did grestore: mark attributes 'dirty' so they will be re-sent */ - PsOut_DirtyAttributes(self); - -/*** comment for pagenumbers *****/ - - S_Comment(self,"%%PageTrailer"); - -/*** end comment *****************/ -} - -void -PsOut_DirtyAttributes(PsOutPtr self) -{ - int i; - self->CurColor = PSOUTCOLOR_NOCOLOR; - self->LineWidth = -1; - self->LineCap = (PsCapEnum)-1; - self->LineJoin = (PsJoinEnum)-1; - self->NDashes = -1; - self->FontSize = -1; - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = -1.; - if( self->Dashes ) { xfree(self->Dashes); self->Dashes = (int *)0; } - if( self->FontName ) { xfree(self->FontName); self->FontName = (char *)0; } -} - -void -PsOut_Comment(PsOutPtr self, char *comment) -{ - S_Comment(self, comment); -} - -void -PsOut_Offset(PsOutPtr self, int x, int y) -{ - self->XOff = x; - self->YOff = y; -} - -void -PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf) -{ - int i, k; - int changed = 0; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InTile ) return; - if( self->InFrame ) xo = yo = 0; - if( clpTyp!=self->ClipType ) changed = 1; - else - { - if( clpinf->nRects!=self->Clip.nRects ) changed = 1; - else - { - if( clpinf->nOutterClips!=self->Clip.nOutterClips ) changed = 1; - else - { - for( i=0 ; inOutterClips ; i++ ) - { - if( memcmp(&clpinf->outterClips[i], &self->Clip.outterClips[i], - sizeof(PsRectRec))!=0 ) break; - } - if( inOutterClips ) changed = 1; - else - { - for( i=0 ; inRects ; i++ ) - { - if( memcmp(&clpinf->rects[i], &self->Clip.rects[i], - sizeof(PsRectRec))!=0 ) { changed = 1; break; } - } - } - } - } - if( clpinf->nElms!=self->Clip.nElms ) changed = 1; - else - { - for( i=0 ; inElms ; i++ ) - { - if( clpinf->elms[i].type!=PSOUT_POINTS ) - { - if( memcmp(&clpinf->elms[i], &self->Clip.elms[i], - sizeof(PsElmRec))!=0 ) { changed = 1; break; } - } - else - { - if( clpinf->elms[i].type!=self->Clip.elms[i].type || - clpinf->elms[i].nPoints!=self->Clip.elms[i].nPoints ) - { changed = 1; break; } - else - { - for( k=0 ; kelms[i].nPoints ; k++ ) - { - if( memcmp(&clpinf->elms[i].c.points[k], - &self->Clip.elms[i].c.points[k], sizeof(PsPointRec)) ) - { changed = 1; break; } - } - if( changed ) break; - } - } - } - } - } - - if( self->Clip.rects ) xfree(self->Clip.rects); - if( self->Clip.outterClips ) xfree(self->Clip.outterClips); - if( self->Clip.elms ) - PsDestroyFillElementList(self->Clip.nElms, self->Clip.elms); - self->ClipType = clpTyp; - self->Clip.nRects = clpinf->nRects; - self->Clip.nElms = clpinf->nElms; - self->Clip.nOutterClips = clpinf->nOutterClips; - if( clpinf->nRects ) - { - self->Clip.rects = (PsRectPtr)xalloc(clpinf->nRects*sizeof(PsRectRec)); - memcpy(self->Clip.rects, clpinf->rects, clpinf->nRects*sizeof(PsRectRec)); - } - else self->Clip.rects = 0; - if( clpinf->nOutterClips ) - { - self->Clip.outterClips = (PsRectPtr)xalloc(clpinf->nOutterClips* - sizeof(PsRectRec)); - memcpy(self->Clip.outterClips, clpinf->outterClips, - clpinf->nOutterClips*sizeof(PsRectRec)); - } - else self->Clip.outterClips = 0; - if( clpinf->nElms ) - self->Clip.elms = PsCloneFillElementList(clpinf->nElms, clpinf->elms); - else self->Clip.elms = 0; - - PsOut_DirtyAttributes(self); - S_OutTok(self, "gr gs", 1); - if( self->Clip.nOutterClips ) - { - for( i=0 ; iClip.nOutterClips ; i++ ) - { - S_OutNum(self, (float)(self->Clip.outterClips[i].x)); - S_OutNum(self, (float)(self->Clip.outterClips[i].y)); - S_OutNum(self, (float)self->Clip.outterClips[i].w); - S_OutNum(self, (float)self->Clip.outterClips[i].h); - S_OutTok(self, "R", 1); - } - S_OutTok(self, "cl n", 1); - } - if( self->Clip.nRects ) - { - for( i=0 ; iClip.nRects ; i++ ) - { - S_OutNum(self, (float)(self->Clip.rects[i].x+xo)); - S_OutNum(self, (float)(self->Clip.rects[i].y+yo)); - S_OutNum(self, (float)self->Clip.rects[i].w); - S_OutNum(self, (float)self->Clip.rects[i].h); - S_OutTok(self, "R", 1); - } - S_OutTok(self, "cl n", 1); - } - if( self->Clip.nElms ) - { - PsElmPtr elm = self->Clip.elms; - for( i=0 ; iClip.nElms ; i++,elm++ ) - { - switch(elm->type) - { - case PSOUT_POINTS: - for( k=0 ; knPoints ; k++ ) - { - S_OutNum(self, (float)elm->c.points[k].x+xo); - S_OutNum(self, (float)elm->c.points[k].y+yo); - if( k==0 ) S_OutTok(self, "m", 0); - else S_OutTok(self, "l", 0); - } - S_OutTok(self, "cp", 1); - break; - case PSOUT_RECT: - S_OutNum(self, (float)elm->c.rect.x+xo); - S_OutNum(self, (float)elm->c.rect.y+yo); - S_OutNum(self, (float)elm->c.rect.w); - S_OutNum(self, (float)elm->c.rect.h); - S_OutTok(self, "R", 1); - break; - case PSOUT_ARC: - if( elm->c.arc.style==PsPieSlice ) - { - S_OutNum(self, (float)elm->c.arc.x+xo+(float)elm->c.arc.w/2.); - S_OutNum(self, (float)elm->c.arc.y+yo+(float)elm->c.arc.h/2.); - S_OutTok(self, "m", 0); - } - S_OutNum(self, (float)elm->c.arc.x+xo+(float)elm->c.arc.w/2.); - S_OutNum(self, (float)elm->c.arc.y+yo+(float)elm->c.arc.h/2.); - S_OutNum(self, (float)elm->c.arc.w); - S_OutNum(self, (float)elm->c.arc.h); - S_OutNum(self, (float)elm->c.arc.a1/64.); - S_OutNum(self, (float)elm->c.arc.a1/64.+(float)elm->c.arc.a2/64.); - if( elm->c.arc.a2<0 ) S_OutTok(self, "An cp", 1); - else S_OutTok(self, "Ac cp", 1); - break; - } - } - S_OutTok(self, "cl n", 1); - } -} - -void -PsOut_Color(PsOutPtr self, PsOutColor clr) -{ - if( clr==self->CurColor || self->InTile>=PsStip ) return; - self->CurColor = clr; - S_Color(self, clr); -} - -void -PsOut_FillRule(PsOutPtr self, PsRuleEnum rule) -{ - self->FillRule = rule; -} - -void -PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join, - int nDsh, int *dsh, int dshOff, PsOutColor bclr) -{ - int i; - int same = 1; - - if( wd!=self->LineWidth && wd>=0 ) - { - if( wd==0 ) wd = 1; - self->LineWidth = wd; - S_OutNum(self, (float)wd); S_OutTok(self, "w", 1); - } - if( cap!=self->LineCap ) - { - self->LineCap = cap; - S_OutNum(self, (float)cap); S_OutTok(self, "lc", 1); - } - if( join!=self->LineJoin ) - { - self->LineJoin = join; - S_OutNum(self, (float)join); S_OutTok(self, "lj", 1); - } - if( nDsh!=self->NDashes ) same = 0; - else if( dshOff!=self->DashOffset ) same = 0; - else if( nDsh ) - { - for( i=0 ; iDashes[i] ) break; } - if( iNDashes && self->Dashes ) - { xfree(self->Dashes); self->Dashes = (int *)0; } - self->NDashes = nDsh; - self->DashOffset = dshOff; - if( nDsh ) self->Dashes = (int *)xalloc(sizeof(int)*nDsh); - S_OutTok(self, "[", 0); - for( i=0 ; iDashes[i] = dsh[i]; - S_OutNum(self, (float)dsh[i]); - } - S_OutTok(self, "]", 0); - S_OutNum(self, (float)dshOff); - S_OutTok(self, "ds", 1); - } - - if( nDsh ) - self->LineBClr = bclr; - else - bclr = PSOUTCOLOR_NOCOLOR; -} - -void -PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso) -{ - int i; - char buf[256]; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - siz==self->FontSize ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - self->FontSize = siz; - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = -1.; - strcpy(buf, "/"); strcat(buf, fnam); - S_OutTok(self, buf, 0); - S_OutNum(self, (float)siz); - if( iso ) S_OutTok(self, "t", 0); - else S_OutTok(self, "f", 0); - S_OutTok(self, "Tf", 1); -} - -void -PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso) -{ - int i; - char buf[256]; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - mtx[0]==self->FontMtx[0] && mtx[1]==self->FontMtx[1] && - mtx[2]==self->FontMtx[2] && mtx[3]==self->FontMtx[3] ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = mtx[i]; - self->FontSize = -1; - strcpy(buf, "/"); strcat(buf, fnam); strcat(buf, " ["); - S_OutTok(self, buf, 0); - for( i=0 ; i<4 ; i++ ) S_OutNum(self, mtx[i]); - S_OutTok(self, "0 0]", 0); - if( iso ) S_OutTok(self, "t", 0); - else S_OutTok(self, "f", 0); - S_OutTok(self, "Tfm", 1); -} - -void -PsOut_Polygon(PsOutPtr self, int nPts, PsPointPtr pts) -{ - int i; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - if( nPts<=2 ) return; - for( i=0 ; iFillRule==PsEvenOdd ) S_OutTok(self, "cp ef", 1); - else S_OutTok(self, "cp fl", 1); -} - -void -PsOut_FillRect(PsOutPtr self, int x, int y, int w, int h) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R fl", 1); -} - -void -PsOut_FillArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2, PsArcEnum style) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - if( style==PsPieSlice ) - { - S_OutNum(self, (float)x+(float)w/2.); - S_OutNum(self, (float)y+(float)h/2.); - S_OutTok(self, "m", 0); - } - S_OutNum(self, (float)x+(float)w/2.); - S_OutNum(self, (float)y+(float)h/2.); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, ang1); - S_OutNum(self, ang1+ang2); - if( ang2<0 ) S_OutTok(self, "An cp fl", 1); - else S_OutTok(self, "Ac cp fl", 1); -} - -void -PsOut_Lines(PsOutPtr self, int nPts, PsPointPtr pts) -{ - int i; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - if( nPts<1 ) return; - for( i=0 ; iLineBClr != PSOUTCOLOR_NOCOLOR ) - { - S_OutTok(self, "gs", 0); - S_Color(self, self->LineBClr); - S_OutTok(self, "[] 0 ds st gr", 0); - } - S_OutTok(self, "st", 1); -} - -void -PsOut_Points(PsOutPtr self, int nPts, PsPointPtr pts) -{ - int i; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - if( nPts<1 ) return; - for( i=0 ; iXOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R", 0); - if( self->LineBClr != PSOUTCOLOR_NOCOLOR ) - { - S_OutTok(self, "gs", 0); - S_Color(self, self->LineBClr); - S_OutTok(self, "[] 0 ds st gr", 0); - } - S_OutTok(self, "st", 1); -} - -void -PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutNum(self, (float)x+(float)w/2.); - S_OutNum(self, (float)y+(float)h/2.); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, ang1); - S_OutNum(self, ang1+ang2); - if( ang2<0 ) S_OutTok(self, "An", 0); - else S_OutTok(self, "Ac", 0); - if( self->LineBClr != PSOUTCOLOR_NOCOLOR ) - { - S_OutTok(self, "gs", 0); - S_Color(self, self->LineBClr); - S_OutTok(self, "[] 0 ds st gr", 0); - } - S_OutTok(self, "st", 1); -} - -void -PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, PsOutColor bclr) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutStr(self, text, textl); - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - if( bclr == PSOUTCOLOR_NOCOLOR ) - S_OutTok(self, "T", 1); - else - { - int ir = PSOUTCOLOR_TO_REDBITS(bclr); - int ig = PSOUTCOLOR_TO_GREENBITS(bclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(bclr); - - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib)); - S_OutTok(self, "Tb", 1); - } -} - -void -PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutStr16(self, text, textl); - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - if( bclr == PSOUTCOLOR_NOCOLOR ) - S_OutTok(self, "T", 1); - else - { - int ir = PSOUTCOLOR_TO_REDBITS(bclr); - int ig = PSOUTCOLOR_TO_GREENBITS(bclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(bclr); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib)); - S_OutTok(self, "Tb", 1); - } -} - -#ifdef BM_CACHE -void /* new */ -PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, PsOutColor bclr, PsOutColor fclr) -{ - char cacheID[10]; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - sprintf(cacheID, "c%di", cache_id); - - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - - if( fclr==PSOUTCOLOR_WHITE ) - { - int ir = PSOUTCOLOR_TO_REDBITS(bclr); - int ig = PSOUTCOLOR_TO_GREENBITS(bclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(bclr); - - if( ir==ig && ig==ib ) - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - else - S_OutNum(self, (float)0); - self->RevImage = 1; - } - else - { - int ir = PSOUTCOLOR_TO_REDBITS(fclr); - int ig = PSOUTCOLOR_TO_GREENBITS(fclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(fclr); - - if( ir==ig && ig==ib ) - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - else - S_OutNum(self, (float)0); - } - - S_OutTok(self, cacheID, 1); -} /* new */ - -void /* new */ -PsOut_BeginImageCache(PsOutPtr self, long cache_id) -{ - char cacheID[10]; - - sprintf(cacheID, "/c%di {", cache_id); - - S_OutTok(self, cacheID, 0); -} /* new */ - -void /* new */ -PsOut_EndImageCache(PsOutPtr self) -{ - S_OutTok(self, "}bd", 1); -} /* new */ -#endif - -void -PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format) -{ - PsOutColor savClr = self->CurColor; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - if( self->InTile ) - { - if( self->InTile>=PsStip && format!=1 ) { self->ImgSkip = 1; return; } - self->ImgBClr = bclr; self->ImgFClr = fclr; - self->ImgX = x; self->ImgY = y; - self->ImgW = w; self->ImgH = h; - self->SclW = sw; self->SclH = sh; - S_OutTok(self, "<", 0); - self->ImageFormat = format; - self->RevImage = 0; - if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE ) - self->RevImage = 1; - return; - } - - self->RevImage = 0; - if( format==1 ) - { - S_OutTok(self, "gs", 0); - if( fclr==PSOUTCOLOR_WHITE ) - { - PsOut_Color(self, fclr); - PsOut_FillRect(self, x, y, sw, sh); - PsOut_Color(self, bclr); - self->RevImage = 1; - } - else - { - PsOut_Color(self, bclr); - PsOut_FillRect(self, x, y, sw, sh); - PsOut_Color(self, fclr); - } - } - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, (float)sw); - S_OutNum(self, (float)sh); - if( format==1 ) { - if(self->RevImage) - S_OutTok(self, "Im1rev", 1); - else - S_OutTok(self, "Im1", 1); - } - else S_OutTok(self, "Im24", 1); - self->ImageFormat = format; - self->CurColor = savClr; -} - -void -PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format) -{ - PsOutColor savClr = self->CurColor; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - if( self->InTile ) - { - if( self->InTile>=PsStip && format!=1 ) { self->ImgSkip = 1; return; } - self->ImgBClr = bclr; self->ImgFClr = fclr; - self->ImgX = x; self->ImgY = y; - self->ImgW = w; self->ImgH = h; - self->SclW = sw; self->SclH = sh; - S_OutTok(self, "<", 0); - self->ImageFormat = format; - self->RevImage = 0; - if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE ) - self->RevImage = 1; - return; - } - - self->RevImage = 0; - if( format==1 ) - { - S_OutTok(self, "gs", 0); -#ifdef BM_CACHE - S_OutTok(self, "g", 1); -#else - if( fclr==PSOUTCOLOR_WHITE ) - { - PsOut_Color(self, bclr); - self->RevImage = 1; - } - else - { - PsOut_Color(self, fclr); - } -#endif - } - -#ifdef BM_CACHE - S_OutTok(self, "tr", 0); /* new */ -#else - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); -#endif - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, (float)sw); - S_OutNum(self, (float)sh); -#ifdef BM_CACHE - S_OutTok(self, "mtx", 1); /* new */ - S_OutTok(self, "<", 0); /* new */ - self->start_image = 1; -#else - if( format==1 ){ - if(self->RevImage) - S_OutTok(self, "Im1rev", 1); - else - S_OutTok(self, "Im1", 1); - } - else S_OutTok(self, "Im24", 1); -#endif - self->ImageFormat = format; - self->CurColor = savClr; -} - -void -PsOut_EndImage(PsOutPtr self) -{ - if( self->ImgSkip ) { self->ImgSkip = 0; return; } - if( self->InTile ) - { - S_OutTok(self, ">", 1); - if( self->ImageFormat==1 && self->InTile==PsTile ) - { - if( self->ImgFClr==PSOUTCOLOR_WHITE ) - { - PsOut_Color(self, self->ImgFClr); - PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH); - PsOut_Color(self, self->ImgBClr); - } - else - { - PsOut_Color(self, self->ImgBClr); - PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH); - PsOut_Color(self, self->ImgFClr); - } - } - S_OutNum(self, (float)self->ImgX); - S_OutNum(self, (float)self->ImgY); - S_OutNum(self, (float)self->ImgW); - S_OutNum(self, (float)self->ImgH); - S_OutNum(self, (float)self->SclW); - S_OutNum(self, (float)self->SclH); - if( self->ImageFormat==1 ) S_OutTok(self, "Im1t", 1); - else S_OutTok(self, "Im24t", 1); - self->ImageFormat = 0; - self->RevImage = 0; - return; - } - /* - * Bug 4639307: Move flush before "> im" to get all of bitmap into ps file. - */ - S_Flush(self); -#ifdef BM_CACHE - if(self->start_image) - S_OutTok(self, "> im", 1); /* new */ -#endif - self->ImageFormat = 0; - self->RevImage = 0; -#ifdef BM_CACHE - if(self->start_image) - { - self->start_image = 0; - S_OutTok(self, "gr", 0); - } - else - S_OutTok(self, "gr", 1); -#else - S_OutTok(self, "gr", 1); -#endif -} - -void -PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes) -{ - int i; - int b; - int len; - const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - - if( (!self->ImageFormat) || self->ImgSkip ) return; - - len = strlen(self->Buf); - - for( i=0 ; iRevImage ) b = (int)((bytes[i]^0xFF)&0xFF); - else b = (int)(bytes[i]&0xFF); - - self->Buf[len++] = hex[(b&0xF0) >> 4]; - self->Buf[len++] = hex[(b&0x0F)]; - self->Buf[len] = '\0'; - - if( len>70 ) - { - S_Flush(self); - len = 0; - } - } -} - -void -PsOut_BeginFrame(PsOutPtr self, int xoff, int yoff, int x, int y, - int w, int h) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame ) xo = yo = 0; - S_OutTok(self, "gs", 0); - S_OutNum(self, (float)(x+xo)); - S_OutNum(self, (float)(y+yo)); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R cl n", 0); - xoff += xo; yoff += yo; - if( xoff || yoff ) - { - S_OutNum(self, (float)xoff); - S_OutNum(self, (float)yoff); - S_OutTok(self, "tr", 0); - } - S_OutTok(self, "gs", 1); - self->InFrame += 1; -} - -void -PsOut_EndFrame(PsOutPtr self) -{ - self->InFrame -= 1; - if( self->InFrame<0 ) self->InFrame = 0; - S_OutTok(self, "gr gr", 1); - PsOut_DirtyAttributes(self); -} - -int -PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type, - PsOutColor bclr, PsOutColor fclr) -{ - int i; - char key[64]; - - for( i=0 ; iNPatterns ; i++ ) - { if( self->Patterns[i].tag==tag && self->Patterns[i].type==type ) break; } - if( iNPatterns ) return(1); - if( (self->NPatterns+1)>self->MxPatterns ) - { - if( self->Patterns ) - { - self->MxPatterns *= 2; - self->Patterns = - (PsPatPtr)xrealloc(self->Patterns, sizeof(PsPatRec)*self->MxPatterns); - } - else - { - self->MxPatterns = 64; - self->Patterns = (PsPatPtr)xalloc(sizeof(PsPatRec)*self->MxPatterns); - } - } - self->Patterns[self->NPatterns].tag = tag; - self->Patterns[self->NPatterns].type = type; - sprintf(key, "/ %d", (int)tag); - switch(type) { - case PsTile: key[1] = 't'; break; - case PsStip: key[1] = 's'; break; - case PsOpStip: key[1] = 'o'; break; - default: break; } - S_OutTok(self, key, 0); - S_OutTok(self, "db/PatternType 1 d/PaintType 1 d", 0); - S_OutTok(self, "/TilingType 1 d/BBox[0 0", 0); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "]d/XStep", 0); - S_OutNum(self, (float)w); - S_OutTok(self, "d/YStep", 0); - S_OutNum(self, (float)h); - S_OutTok(self, "d/PaintProc{bg sv", 1); - if( type==PsOpStip ) - { - S_Color(self, bclr); - S_OutTok(self, "0 0", 0); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R fl", 1); - } - if( type!=PsTile ) S_Color(self, fclr); - self->NPatterns += 1; - self->InTile = type; - return(0); -} - -void -PsOut_EndPattern(PsOutPtr self) -{ - self->InTile = PsSolid; - S_OutTok(self, "rs ed}d de im_ mp d", 1); -} - -void -PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type) -{ - int i; - char key[64]; - - for( i=0 ; iNPatterns ; i++ ) - { if( tag==self->Patterns[i].tag && type==self->Patterns[i].type ) break; } - if( i>=self->NPatterns ) return; - sprintf(key, " %d", (int)tag); - switch(type) { - case PsTile: key[0] = 't'; break; - case PsStip: key[0] = 's'; break; - case PsOpStip: key[0] = 'o'; break; - default: break; } - S_OutTok(self, key, 0); - S_OutTok(self, "spt", 1); - self->CurColor = PSOUTCOLOR_NOCOLOR; -} - -void -PsOut_RawData(PsOutPtr self, char *data, int len) -{ - S_Flush(self); - if (!ferror(self->Fp)) { - (void) fwrite(data, 1, len, self->Fp); - } -} - -typedef enum PsDownfontFontType_ -{ - PsDFT_Type1PFA=0, - PsDFT_Type1PFB, - PsDFT_TrueType /* not implemented yet */ -} PsDownfontFontType; - -/* Download a PS Type1 font */ -int -PsOut_DownloadType1(PsOutPtr self, const char *auditmsg, const char *name, const char *fname) -{ - int stt; - char buf[256]; - FILE *fp; - PsDownfontFontType type; - - fp = fopen(fname, "r"); - if( !fp ) - return 0; - -#ifdef DEBUG_gisburn - /* This should be log-able! */ - fprintf(stderr, "PsOut_DownloadType1: %s: Downloading '%s' from '%s'\n", auditmsg, name, fname); -#endif /* DEBUG_gisburn */ - - fread(buf, 32, 1, fp); - fseek(fp, (long)0, 0); - - /* Is this a Adobe PostScript Type 1 binary font (PFB) ? */ - if( (buf[0]&0xFF)==0x80 && (buf[1]&0xFF)==0x01 ) - { - type = PsDFT_Type1PFB; - } - /* Is this a Adobe PostScript ASCII font (PFA) ? */ - else if (!strncmp(buf, "%!PS-AdobeFont", 14)) - { - type = PsDFT_Type1PFA; - } - else - { - /* This should be log-able! */ - fprintf(stderr, "PsOut_DownloadType1: Unknown font type for '%s'\n", fname); - return 0; - } - - S_Flush(self); - sprintf(buf, "%%%%BeginFont: %s", name); - S_Comment(self, buf); - - if( type == PsDFT_Type1PFB ) - { - char *buf, - *pt; - int len, - ch, - stype; - - ch = fgetc(fp); - /* Strip out the binary headers and de-binary it */ - while( (ch&0xFF) == 0x80 ) - { - stype = fgetc(fp); - if( stype==3 ) /* eof mark */ - break; - len = fgetc(fp); - len |= fgetc(fp)<<8; - len |= fgetc(fp)<<16; - len |= fgetc(fp)<<24; - buf = (char *)xalloc(len+1); - if( stype==1 ) - { - /* Process ASCII section */ - len = fread(buf, 1, len, fp); - /* convert any lone CRs (ie Mac eol) to LFs */ - for( pt = buf ; (pt = memchr(pt, '\r', len-(pt-buf))) != NULL ; pt++ ) - { - if ( pt[1]!='\n' ) - *pt = '\n'; - } - fwrite(buf, 1, len, self->Fp); - } - else if( stype==2 ) - { - int i; - - /* Process binary section */ - len = fread(buf, 1, len, fp); - for( i=0 ; i>4)&0xf) <= 9 ) - fputc('0'+((ch>>4)&0xf), self->Fp); - else - fputc('A'-10+((ch>>4)&0xf), self->Fp); - - if( (ch&0xf) <= 9 ) - fputc('0'+(ch&0xf), self->Fp); - else - fputc('A'-10+(ch&0xf), self->Fp); - - if( (i&0x1f)==0x1f ) - fputc('\n', self->Fp); - } - } - xfree(buf); - - /* Next block... */ - ch = fgetc(fp); - } - } - /* Is this a Adobe PostScript ASCII font (PFA) ? */ - else if (type == PsDFT_Type1PFA) - { - for(;;) - { - stt = fread(buf, 1, 256, fp); - if( stt<=0 ) break; - if (!ferror(self->Fp)) { - (void) fwrite(buf, 1, stt, self->Fp); - } - if( stt<256 ) - break; - } - } - fclose(fp); - S_Flush(self); - S_Comment(self, "%%EndFont"); - - /* Success... */ - return 1; -} - - - - - - diff --git a/hw/xprint/ps/psout.h b/hw/xprint/ps/psout.h deleted file mode 100644 index 1138e4afe..000000000 --- a/hw/xprint/ps/psout.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * 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: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: psout.h -** * -** * Contents: Include file for psout.c -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _psout_ -#define _psout_ - -#include - -typedef enum PsCapEnum_ { PsCButt=0, PsCRound, PsCSquare } PsCapEnum; -typedef enum PsJoinEnum_ { PsJMiter=0, PsJRound, PsJBevel } PsJoinEnum; -typedef enum PsArcEnum_ { PsChord, PsPieSlice } PsArcEnum; -typedef enum PsRuleEnum_ { PsEvenOdd, PsNZWinding } PsRuleEnum; -typedef enum PsFillEnum_ { PsSolid=0, PsTile, PsStip, PsOpStip } PsFillEnum; - -typedef struct PsPointRec_ -{ - int x; - int y; -} PsPointRec; - -typedef PsPointRec *PsPointPtr; - -typedef struct PsRectRec_ -{ - int x; - int y; - int w; - int h; -} PsRectRec; - -typedef PsRectRec *PsRectPtr; - -typedef struct PsArcRec_ -{ - int x; - int y; - int w; - int h; - int a1; - int a2; - PsArcEnum style; -} PsArcRec; - -typedef PsArcRec *PsArcPtr; - -#define PSOUT_RECT 0 -#define PSOUT_ARC 1 -#define PSOUT_POINTS 2 - -typedef struct PsElmRec_ -{ - int type; - int nPoints; - union - { - PsRectRec rect; - PsArcRec arc; - PsPointPtr points; - } c; -} PsElmRec; - -typedef PsElmRec *PsElmPtr; - -typedef struct PsClipRec_ -{ - int nRects; - PsRectPtr rects; - int nElms; - PsElmPtr elms; - int nOutterClips; - PsRectPtr outterClips; -} PsClipRec; - -typedef PsClipRec *PsClipPtr; - -typedef enum PsFTDownloadFontType_ -{ - PsFontBitmap=0, - PsFontType1, - PsFontType3 -} PsFTDownloadFontType; - -/* Define |PsOutColor| color type which can hold one RGB value - * (note: this needs to be |signed| long/long long to represent - * special values such as |PSOUTCOLOR_NOCOLOR|) - */ -#ifdef PSOUT_USE_DEEPCOLOR -/* 64bit |PsOutColor| which can hold 16bit R-,G-,B-values */ -#ifdef WIN32 -typedef signed __int64 PsOutColor; -#else -# if defined(__alpha__) || defined(__alpha) || \ - defined(ia64) || defined(__ia64__) || \ - defined(__sparc64__) || defined(_LP64) || \ - defined(__s390x__) || \ - defined(amd64) || defined (__amd64__) || defined(__x86_64__) || \ - defined (__powerpc64__) || \ - (defined(sgi) && (_MIPS_SZLONG == 64)) -typedef signed long PsOutColor; -# else -typedef signed long long PsOutColor; -# endif /* native 64bit platform */ -#endif /* WIN32 */ - -#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 32) -#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 16) & 0xFFFF) -#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFFFF) -#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 65535.) -#define PSOUTCOLOR_WHITE (0xFFFFFFFFFFFFLL) -#define PSOUTCOLOR_NOCOLOR (-1LL) -#define PSOUTCOLOR_TO_RGB24BIT(clr) (((PSOUTCOLOR_TO_REDBITS(clr) >> 8) << 16) | \ - ((PSOUTCOLOR_TO_GREENBITS(clr) >> 8) << 8) | \ - ((PSOUTCOLOR_TO_BLUEBITS(clr) >> 8) << 0)) -#else -/* 32bit |PsOutColor| which can hold 8bit R-,G-,B-values */ -typedef signed long PsOutColor; -#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 16) -#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 8) & 0xFF) -#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFF) -#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 255.) -#define PSOUTCOLOR_WHITE (0xFFFFFF) -#define PSOUTCOLOR_NOCOLOR (-1) -#define PSOUTCOLOR_TO_RGB24BIT(clr) ((PSOUTCOLOR_TO_REDBITS(clr) << 16) | \ - (PSOUTCOLOR_TO_GREENBITS(clr) << 8) | \ - (PSOUTCOLOR_TO_BLUEBITS(clr) << 0)) -#endif /* PSOUT_USE_DEEPCOLOR */ - -#ifdef USE_PSOUT_PRIVATE -typedef void *voidPtr; - -typedef struct PsPatRec_ -{ - PsFillEnum type; - voidPtr tag; -} PsPatRec; - -typedef PsPatRec *PsPatPtr; - -typedef struct PsOutRec_ -{ - FILE *Fp; - char Buf[16384]; - PsOutColor CurColor; - int LineWidth; - PsCapEnum LineCap; - PsJoinEnum LineJoin; - int NDashes; - int *Dashes; - int DashOffset; - PsOutColor LineBClr; - PsRuleEnum FillRule; - char *FontName; - int FontSize; - float FontMtx[4]; - int ImageFormat; - int RevImage; - int NPatterns; - int MxPatterns; - PsPatPtr Patterns; - int ClipType; - PsClipRec Clip; - int InFrame; - int XOff; - int YOff; - - PsFillEnum InTile; - int ImgSkip; - PsOutColor ImgBClr; - PsOutColor ImgFClr; - int ImgX; - int ImgY; - int ImgW; - int ImgH; - int SclW; - int SclH; - - Bool isRaw; - - int pagenum; - - int start_image; -} PsOutRec; - -typedef struct PsOutRec_ *PsOutPtr; - -extern void S_Flush(PsOutPtr self); -extern void S_OutNum(PsOutPtr self, float num); -extern void S_OutTok(PsOutPtr self, char *tok, int cr); -#else -typedef struct PsOutRec_ *PsOutPtr; -#endif /* USE_PSOUT_PRIVATE */ - -extern FILE * PsOut_ChangeFile(PsOutPtr self, FILE *fp); -extern PsOutPtr PsOut_BeginFile(FILE *fp, char *title, int orient, int count, int plex, - int res, int wd, int ht, Bool raw); -extern void PsOut_EndFile(PsOutPtr self, int closeFile); -extern void PsOut_BeginPage(PsOutPtr self, int orient, int count, int plex, - int res, int wd, int ht); -extern void PsOut_EndPage(PsOutPtr self); -extern void PsOut_DirtyAttributes(PsOutPtr self); -extern void PsOut_Comment(PsOutPtr self, char *comment); -extern void PsOut_Offset(PsOutPtr self, int x, int y); - -extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf); - -extern void PsOut_Color(PsOutPtr self, PsOutColor clr); -extern void PsOut_FillRule(PsOutPtr self, PsRuleEnum rule); -extern void PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, - PsJoinEnum join, int nDsh, int *dsh, int dshOff, - PsOutColor bclr); -extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso); -extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso); - -extern void PsOut_Polygon(PsOutPtr self, int nPts, PsPointPtr pts); -extern void PsOut_FillRect(PsOutPtr self, int x, int y, int w, int h); -extern void PsOut_FillArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2, PsArcEnum style); - -extern void PsOut_Lines(PsOutPtr self, int nPts, PsPointPtr pts); -extern void PsOut_Points(PsOutPtr self, int nPts, PsPointPtr pts); -extern void PsOut_DrawRect(PsOutPtr self, int x, int y, int w, int h); -extern void PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2); - -extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, - PsOutColor bclr); -extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr); - -extern void PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format); -extern void PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format); -extern void PsOut_EndImage(PsOutPtr self); -extern void PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes); - -extern void PsOut_BeginFrame(PsOutPtr self, int xoff, int yoff, int x, int y, - int w, int h); -extern void PsOut_EndFrame(PsOutPtr self); - -extern int PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, - PsFillEnum type, PsOutColor bclr, PsOutColor fclr); -extern void PsOut_EndPattern(PsOutPtr self); -extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type); - -extern void PsOut_RawData(PsOutPtr self, char *data, int len); - -extern int PsOut_DownloadType1(PsOutPtr self, const char *auditmsg, const char *name, const char *fname); - -extern int PsOut_DownloadFreeType1(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset); -extern int PsOut_DownloadFreeType3(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset); - -extern int PsOut_DownloadFreeType(PsOutPtr self, PsFTDownloadFontType downloadfonttype, const char *psfontname, FontPtr pFont, long block_offset); -extern void PsOut_Get_FreeType_Glyph_Name( char *destbuf, FontPtr pFont, unsigned long x11fontindex); -extern void PsOut_FreeType_Text(FontPtr pFont, PsOutPtr self, int x, int y, char *text, int textl); -extern void PsOut_FreeType_Text16(FontPtr pFont, PsOutPtr self, int x, int y, unsigned short *text, int textl); - -extern void PsOut_FreeType_TextAttrs16(PsOutPtr self, char *fnam, int siz, int iso); -extern void PsOut_FreeType_TextAttrsMtx16(PsOutPtr self, char *fnam, float *mtx, int iso); -#endif diff --git a/hw/xprint/ps/psout_ft.c b/hw/xprint/ps/psout_ft.c deleted file mode 100644 index 30939f972..000000000 --- a/hw/xprint/ps/psout_ft.c +++ /dev/null @@ -1,337 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "psout.h" - -#include -#include FT_FREETYPE_H -#include FT_TYPE1_TABLES_H - -#include -#include -#include -#include -#include -#include -#include -#define NOT_IN_FTFUNCS -#include -#include "servermd.h" /* needed for endian test (IMAGE_BYTE_ORDER) */ - -#define USE_FT_PS_NAMES 1 - -#ifdef USE_FT_PS_NAMES -void PsOut_Get_FreeType_Glyph_Name( char *destbuf, FontPtr pFont, unsigned long x11fontindex) -{ - FTFontPtr tf = (FTFontPtr)pFont->fontPrivate; - FT_Face ttface = tf->instance->face->face; - FT_Error error; - char buf[256]; - unsigned long ftindex; - - /* Remap X11 font index to FreeType font index */ - ftindex = FTRemap(ttface, &tf->mapping, x11fontindex); - - if( FT_Has_PS_Glyph_Names(ttface) ) - { - error = FT_Get_Glyph_Name(ttface, ftindex, buf, 64); - } - else - { - error = 1; - } - - if( error ) - { - /* Check for unicode mapping - * See Adobe document "Unicode and Glyph Names" - * (http://partners.adobe.com/asn/tech/type/unicodegn.jsp) - */ - if( (tf->mapping.mapping->type == FONT_ENCODING_UNICODE) && - (ftindex < 0xFFFE) ) - { - sprintf(buf, "uni%04lx", ftindex); - } - else - { - sprintf(buf, "ch%02lx", ftindex); - } - } - - strcpy(destbuf, buf); -} -#endif /* USE_FT_PS_NAMES */ - -int PsOut_DownloadFreeType(PsOutPtr self, PsFTDownloadFontType downloadfonttype, const char *psfontname, FontPtr pFont, long block_offset) -{ - switch(downloadfonttype) - { - case PsFontType3: - return PsOut_DownloadFreeType3(self, psfontname, pFont, block_offset); - case PsFontType1: - return PsOut_DownloadFreeType1(self, psfontname, pFont, block_offset); - default: - FatalError("PS DDX: PsOut_DownloadFreeType(downloadfonttype='%d' not implemented\n", - (int)downloadfonttype); - return 0; /* NO-OP, FatalError() will call |exit()| */ - } -} - -/* cloned from |PsOut_TextAttrs16| */ -void -PsOut_FreeType_TextAttrs16(PsOutPtr self, char *fnam, int siz, int iso) -{ - int i; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - siz==self->FontSize ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - self->FontSize = siz; - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = -1.; -} - -/* cloned from |PsOut_TextAttrsMtx16| */ -void -PsOut_FreeType_TextAttrsMtx16(PsOutPtr self, char *fnam, float *mtx, int iso) -{ - int i; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - mtx[0]==self->FontMtx[0] && mtx[1]==self->FontMtx[1] && - mtx[2]==self->FontMtx[2] && mtx[3]==self->FontMtx[3] ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = mtx[i]; - self->FontSize = -1; -} - -static -int FT_Get_CharcellMetricsCharacterHeight(FontPtr pFont) -{ - FTFontPtr ftfont = (FTFontPtr)pFont->fontPrivate; - - return ftfont->instance->charcellMetrics->ascent + - ftfont->instance->charcellMetrics->descent; -} - -static -int FT_Get_CharcellMetricsCharacterWidth(FontPtr pFont) -{ - FTFontPtr ftfont = (FTFontPtr)pFont->fontPrivate; - - if( ftfont->instance->spacing != FT_PROPORTIONAL ) - { - int width = ftfont->instance->charcellMetrics->characterWidth; - - /* If the font uses a matrix make sure we transform the |characterWidth| - * back to it's original value since we download the untransformed font - * and use a PostScript transformation matrix to transform the font when - * rendering the text - */ - if( ftfont->instance->transformation.nonIdentity ) - { - FT_Vector v; - - FT_Matrix m = ftfont->instance->transformation.matrix; - (void)FT_Matrix_Invert(&m); /* FixMe: We should check the return code */ - v.x = width; - v.y = FT_Get_CharcellMetricsCharacterHeight(pFont); - FT_Vector_Transform(&v, &m); - width = v.x; - } - - return width; - } - - return 0; -} - -void -PsOut_FreeType_Text(FontPtr pFont, PsOutPtr self, int x, int y, char *text, int textl) -{ - int i; - int xo = self->XOff, - yo = self->YOff; - char buf[256]; - int cwidth = FT_Get_CharcellMetricsCharacterWidth(pFont); - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutTok(self, "moveto", 1); - - S_OutTok(self, "[ ", 0); - - for( i = 0 ; i < textl ; i++ ) - { -#ifdef USE_FT_PS_NAMES - char namebuf[256]; - unsigned int ch = text[i]&0xFF; - unsigned long block_offset = 0; - PsOut_Get_FreeType_Glyph_Name(namebuf, pFont, ch+block_offset); - - sprintf(buf, "/%s ", namebuf); -#else - sprintf(buf, "/ch%02x ", text[i]&0xFF); -#endif /* USE_FT_PS_NAMES */ - S_OutTok(self, buf, 0); - } - - /* Check whether we have any special spacing requirements (e.g. non-proportional fonts) ... */ - if( cwidth != 0 ) - { - /* If the we use a matrix to render the font (instead of using |self->FontSize|) - * we must apply the matrix to the "rmoveto" which is used to force the exact - * character width. The "trmoveto" macro will do that for us... - */ - if( self->FontSize == -1 ) - { - sprintf(buf, "]{gs glyphshow gr %d 0 trmoveto}fa", cwidth); - } - else - { - sprintf(buf, "]{gs glyphshow gr %d 0 rm}fa", cwidth); - } - } - else - { - sprintf(buf, "]{glyphshow}fa"); - } - S_OutTok(self, buf, 0); -} - -/* XXX: |PsOut_FreeType_Text16| should be rewritten - currently it uses lame, - * slow hacks and makes some risky assumtions about how |PsOut_Text16| - * allocates memory */ -void -PsOut_FreeType_Text16(FontPtr pFont, PsOutPtr self, int x, int y, unsigned short *text, int textl) -{ - int i; - int xo = self->XOff, - yo = self->YOff; - unsigned short c, - c_hiByte, - c_lowByte, - fontPage; - long lastFontPage = -1; - char baseFontName[256]; - char buf[256]; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - - strcpy(baseFontName, self->FontName); - - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutTok(self, "moveto", 1); - - for( i = 0 ; i < textl ; i++ ) - { - c = text[i]; -#if IMAGE_BYTE_ORDER == LSBFirst - c_hiByte = c & 0x00FF; - c_lowByte = (c >> 8) & 0x00FF; -#elif IMAGE_BYTE_ORDER == MSBFirst - c_hiByte = (c >> 8) & 0x00FF; - c_lowByte = c & 0x00FF; -#else -#error Unsupported byte order -#endif - fontPage = c_hiByte; - - if( fontPage != lastFontPage ) - { - if( fontPage > 0 ) - { - sprintf(buf, "%s_%x", baseFontName, fontPage); - } - else - { - sprintf(buf, "%s", baseFontName); - xfree(self->FontName); - self->FontName = NULL; - } - - if( self->FontSize == -1 ) - { - PsOut_TextAttrsMtx(self, buf, self->FontMtx, FALSE); - } - else - { - PsOut_TextAttrs(self, buf, self->FontSize, FALSE); - } - lastFontPage = fontPage; - } - -#ifdef USE_FT_PS_NAMES - { - char namebuf[256]; - unsigned int ch = c_lowByte; - unsigned long block_offset = c_hiByte * 0x100 /* same as c_hiByte << 8 */; - int cwidth = FT_Get_CharcellMetricsCharacterWidth(pFont); - PsOut_Get_FreeType_Glyph_Name(namebuf, pFont, ch+block_offset); - - /* Check whether we have any special spacing requirements (e.g. non-proportional fonts) ... */ - if( cwidth != 0 ) - { - /* If the we use a matrix to render the font (instead of using |self->FontSize|) - * we must apply the matrix to the "rmoveto" which is used to force the exact - * character width. The "trmoveto" macro will do that for us... - */ - if( self->FontSize == -1 ) - { - sprintf(buf, "gs /%s glyphshow gr %d 0 trmoveto", namebuf, cwidth); - } - else - { - sprintf(buf, "gs /%s glyphshow gr %d 0 rm", namebuf, cwidth); - } - } - else - { - sprintf(buf, "/%s glyphshow", namebuf); - } - } -#else - sprintf(buf, "/ch%02x glyphshow", c_lowByte); -#endif /* USE_FT_PS_NAMES */ - S_OutTok(self, buf, 1); - } - - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(baseFontName)+1); - strcpy(self->FontName, baseFontName); -} - diff --git a/hw/xprint/ps/psout_ftpstype1.c b/hw/xprint/ps/psout_ftpstype1.c deleted file mode 100644 index 572e13601..000000000 --- a/hw/xprint/ps/psout_ftpstype1.c +++ /dev/null @@ -1,185 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "psout.h" - -#include -#include FT_FREETYPE_H - -#include -#include -#include -#include -#include -#include -#include -#define NOT_IN_FTFUNCS -#include - -int do_debug_ft2pt1 = FALSE; -int do_enable_ft2pt1_optimizer = FALSE; - -/* Defined in ttf2pt1.c */ -int ft2pt1_main(int argc, char **argv, - FTFontPtr tf, const char *download_psfontname, unsigned long download_font_block_offset); - -/* Download FreeType outlines as PS Type1 font */ -int PsOut_DownloadFreeType1(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset) -{ - FTFontPtr tf; - FT_Face face; - int ft2pt1_numargs = 0; - char *ft2pt1_args[40]; - char *pstype1filename_prefix; - char pstype1filename[PATH_MAX+1]; - int ft2pt1_main_retval; - pid_t childpid; - - tf = (FTFontPtr)pFont->fontPrivate; - face = tf->instance->face->face; - - /* Set debugging flags */ - do_debug_ft2pt1 = (getenv("XPRT_PSDDX_DO_DEBUG_FT2PT1") != NULL); - do_enable_ft2pt1_optimizer = (getenv("XPRT_PSDDX_DO_ENABLE_FT2PT1_OPTIMIZER") != NULL); - - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "# Converting FT2 font to PS Type1 filename='%s', ttface=%lx\n", tf->instance->face->filename, (long)face); - } - - pstype1filename_prefix = tempnam(NULL, "Xprt_"); - - ft2pt1_args[ft2pt1_numargs] = "ft2pt1"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Ob"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-e"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-a"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Ga"; ft2pt1_numargs++; - if( do_enable_ft2pt1_optimizer ) - { - /* Scale fonts to a 1000x1000 matrix */ - ft2pt1_args[ft2pt1_numargs] = "-Ot"; ft2pt1_numargs++; - } - else - { - /* Disable the ttf2pt1 optimisations */ - ft2pt1_args[ft2pt1_numargs] = "-Ou"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Oo"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Os"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Oh"; ft2pt1_numargs++; - } - - if( !do_debug_ft2pt1 ) - { - ft2pt1_args[ft2pt1_numargs] = "-W 0"; ft2pt1_numargs++; - } - ft2pt1_args[ft2pt1_numargs] = tf->instance->face->filename; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = pstype1filename_prefix; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = NULL; - -/* XXX: ttf2pt1 has lots of leaks and global vars which are not cleaned-up - * As long this problem exists we will simply fork() and call the converter - * from the child process (all resources are free'ed when the child process - * exists) as a workaround. - */ -#define FT2PT1_NEEDS_SEPERATE_PROCESS 1 - -#ifdef FT2PT1_NEEDS_SEPERATE_PROCESS - /* Flush internal buffer and then the stdio stream before fork()! */ - S_Flush(self); - fflush(self->Fp); - - childpid = fork(); - switch(childpid) - { - case -1: - FatalError("PS DDX internal error: Cannot fork() converter child process, %s\n", strerror(errno)); - break; - case 0: /* child */ - fclose(self->Fp); - self->Fp = NULL; - - ft2pt1_main_retval = ft2pt1_main(ft2pt1_numargs, ft2pt1_args, tf, psfontname, block_offset); - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "## ft2pt1_main returned %d (child)\n", ft2pt1_main_retval); - } - exit(ft2pt1_main_retval); - break; - default: /* parent */ - waitpid(childpid, &ft2pt1_main_retval, 0); - break; - } - - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "## ft2pt1_main returned %d (parent)\n", ft2pt1_main_retval); - } -#else - S_Flush(self); - - ft2pt1_main_retval = ft2pt1_main(ft2pt1_numargs, ft2pt1_args, tf, psfontname, block_offset); - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "## ft2pt1_main returned %d (child)\n", ft2pt1_main_retval); - } -#endif /* FT2PT1_NEEDS_SEPERATE_PROCESS */ - - if( ft2pt1_main_retval != EXIT_SUCCESS ) - { - FatalError("PS DDX internal error while converting FreeType font '%s' to PS Type1, error=%d\n", - tf->instance->face->filename, ft2pt1_main_retval); - } - - sprintf(pstype1filename, "%s.pfa", pstype1filename_prefix); - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "# Downloading converted FT2/PS Type1 filename='%s'\n", pstype1filename); - } - - PsOut_DownloadType1(self, "PsOut_DownloadFreeType1", psfontname, pstype1filename); - - if( !do_debug_ft2pt1 ) - { - unlink(pstype1filename); - } - - free(pstype1filename_prefix); - - S_Flush(self); - - return 0; -} - - diff --git a/hw/xprint/ps/psout_ftpstype3.c b/hw/xprint/ps/psout_ftpstype3.c deleted file mode 100644 index 733b5386b..000000000 --- a/hw/xprint/ps/psout_ftpstype3.c +++ /dev/null @@ -1,439 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "psout.h" - -#include -#include FT_FREETYPE_H -#include FT_TRUETYPE_TABLES_H -#include FT_BBOX_H -#include FT_GLYPH_H - -#include FT_CONFIG_CONFIG_H -#include FT_CONFIG_OPTIONS_H -#include FT_ERRORS_H -#include FT_SYSTEM_H -#include FT_IMAGE_H -#include FT_TYPES_H -#include FT_OUTLINE_H -#include FT_MODULE_H -#include FT_RENDER_H -#include FT_TYPE1_TABLES_H -#include FT_TRUETYPE_IDS_H -#include FT_TRUETYPE_TAGS_H -#include FT_CACHE_H -#include FT_CACHE_IMAGE_H -#include FT_CACHE_SMALL_BITMAPS_H -#include FT_MULTIPLE_MASTERS_H -#include FT_SFNT_NAMES_H - -#include -#include -#include -#include -#include -#include -#include -#define NOT_IN_FTFUNCS -#include - -struct ft2info -{ - FontPtr pFont; - FTFontPtr tf; - FT_Face ttface; - struct - { - char *full_name; - char *copyright; - char *family; - char *subfamily; - char *version; - } nameid; - TT_Postscript *ttpostscript; - TT_Header *ttheader; -}; - -/* Local prototypes */ -static FT_Error PSType3_createOutlineGlyphs(FILE *out, struct ft2info *ti, unsigned long unicode, const char *psglyphname); -static int PSType3_generateOutlineFont(FILE *out, const char *psfontname, struct ft2info *ti, long block_offset); - -extern FT_Library ftypeLibrary; /* defined in xc/lib/font/FreeType/ftfuncs.c */ - -#define USE_FT_PS_NAMES 1 - -static -FT_Error PSType3_createOutlineGlyphs( FILE *out, struct ft2info *ti, unsigned long x11fontindex, const char *psglyphname ) -{ - unsigned long ftindex; - FT_BBox bbox; - FT_Error error; - FT_Outline outline; - - /* Remap X11 font index to FreeType font index */ - ftindex = FTRemap(ti->ttface, &ti->tf->mapping, x11fontindex); - - error = FT_Load_Glyph(ti->ttface, ftindex, (FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING)); - if( error ) - { - fprintf(stderr, "PSType3_createOutlineGlyphs: FT_Load_Glyph() failure, error=%d\n", (int)error); - return error; - } - - outline = ti->ttface->glyph->outline; - - FT_Outline_Get_CBox(&outline, &bbox); - - fprintf(out, "/%s {\n", psglyphname); - fprintf(out, "%ld 0 %ld %ld %ld %ld setcachedevice\n", - (signed long)ti->ttface->glyph->metrics.horiAdvance, - (long)bbox.xMin, - (long)bbox.yMin, - (long)bbox.xMax, - (long)bbox.yMax); - - if( outline.n_contours > 0 ) - { - long i, - j, - k, k1, - cs, ce, - nguide, - contour_start, - contour_end, - last_point; - Bool first; - FT_Vector *vec; - - contour_start = ce = 0; - - vec = outline.points; - last_point = outline.n_points; - - i = j = k = 0; - first = TRUE; - - while( i <= outline.contours[outline.n_contours - 1] ) - { - contour_end = outline.contours[j]; - - if( first ) - { - fprintf(out, "%ld %ld moveto\n", vec[i].x, vec[i].y); - contour_start = i; - first = FALSE; - } - else if( outline.tags[i] & FT_CURVE_TAG_ON ) - { - fprintf(out, "%ld %ld lineto\n", vec[i].x, vec[i].y); - } - else - { - Bool finished = FALSE; - - cs = i-1; - nguide = 0; - while( !finished ) - { - if( i == contour_end+1 ) - { - ce = contour_start; - finished = TRUE; - } - else if( outline.tags[i] & FT_CURVE_TAG_ON ) - { - ce = i; - finished = TRUE; - } - else - { - i++; - nguide++; - } - } - - switch( nguide ) - { - case 0: - fprintf(out, "%ld %ld lineto\n", vec[ce].x, vec[ce].y); - break; - - case 1: - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs].x+2*vec[cs+1].x)/3, - (vec[cs].y+2*vec[cs+1].y)/3, - (2*vec[cs+1].x+vec[ce].x)/3, - (2*vec[cs+1].y+vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - - case 2: - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (-vec[cs].x+4*vec[cs+1].x)/3, - (-vec[cs].y+4*vec[cs+1].y)/3, - (4*vec[cs+2].x-vec[ce].x)/3, - (4*vec[cs+2].y-vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - - case 3: - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs].x+2*vec[cs+1].x)/3, - (vec[cs].y+2*vec[cs+1].y)/3, - (5*vec[cs+1].x+vec[cs+2].x)/6, - (5*vec[cs+1].y+vec[cs+2].y)/6, - (vec[cs+1].x+vec[cs+2].x)/2, - (vec[cs+1].y+vec[cs+2].y)/2); - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs+1].x+5*vec[cs+2].x)/6, - (vec[cs+1].y+5*vec[cs+2].y)/6, - (5*vec[cs+2].x+vec[cs+3].x)/6, - (5*vec[cs+2].y+vec[cs+3].y)/6, - (vec[cs+3].x+vec[cs+2].x)/2, - (vec[cs+3].y+vec[cs+2].y)/2); - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs+2].x+5*vec[cs+3].x)/6, - (vec[cs+2].y+5*vec[cs+3].y)/6, - (2*vec[cs+3].x+vec[ce].x)/3, - (2*vec[cs+3].y+vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - - default: /* anything |nguide > 3| */ - k1 = cs + nguide; - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs].x+2*vec[cs+1].x)/3, - (vec[cs].y+2*vec[cs+1].y)/3, - (5*vec[cs+1].x+vec[cs+2].x)/6, - (5*vec[cs+1].y+vec[cs+2].y)/6, - (vec[cs+1].x+vec[cs+2].x)/2, - (vec[cs+1].y+vec[cs+2].y)/2); - - for( k = cs+2 ; k <= k1-1 ; k++ ) - { - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[k-1].x+5*vec[k].x)/6, - (vec[k-1].y+5*vec[k].y)/6, - (5*vec[k].x+vec[k+1].x)/6, - (5*vec[k].y+vec[k+1].y)/6, - (vec[k].x+vec[k+1].x)/2, - (vec[k].y+vec[k+1].y)/2); - } - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[k1-1].x+5*vec[k1].x)/6, - (vec[k1-1].y+5*vec[k1].y)/6, - (2*vec[k1].x+vec[ce].x)/3, - (2*vec[k1].y+vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - } - } - - if( i >= contour_end ) - { - fprintf(out, "closepath\n"); - first = TRUE; - i = contour_end + 1; - j++; - } - else - { - i++; - } - } - } - - fprintf(out, "fill } bind def\n"); - - return 0; -} - -static -int PSType3_generateOutlineFont(FILE *out, const char *psfontname, struct ft2info *ti, long block_offset) -{ - long i; - double scaler; - const int numchars = 256; -#ifdef USE_FT_PS_NAMES - int linewidth = 0; -#endif /* USE_FT_PS_NAMES */ - - fprintf(out, "%%%%BeginFont: %s\n", psfontname); - fprintf(out, "22 dict begin\n"); - fprintf(out, "/FontType 3 def\n"); - fprintf(out, "/StrokeWidth 0 def\n"); - fprintf(out, "/PaintType 0 def\n"); - fprintf(out, "/FontName (%s) def\n", psfontname); - fprintf(out, "/FontInfo 9 dict dup begin\n"); - fprintf(out, " /FullName (%s) def\n", ti->nameid.full_name?ti->nameid.full_name:psfontname); - fprintf(out, " /Notice (%s) def\n", ti->nameid.copyright?ti->nameid.copyright:"nothing here"); - fprintf(out, " /FamilyName (%s) def\n", ti->nameid.family?ti->nameid.family:psfontname); - fprintf(out, " /Weight (%s) def\n", ti->nameid.subfamily?ti->nameid.subfamily:"Regular"); - fprintf(out, " /version (%s) def\n", ti->nameid.version?ti->nameid.version:"0.1"); - - if( ti->ttpostscript ) - { - fprintf(out, " /italicAngle %.9g def\n", (double)ti->ttpostscript->italicAngle); - fprintf(out, " /underlineThickness %d def\n", (int)ti->ttpostscript->underlineThickness); - fprintf(out, " /underlinePosition %d def\n", (int)ti->ttpostscript->underlinePosition); - fprintf(out, " /isFixedPitch %s def\n", ((ti->ttpostscript->isFixedPitch)?("true"):("false"))); - } - else - { - fprintf(out, " /italicAngle %.9g def\n", 0.0); - fprintf(out, " /underlineThickness %d def\n", 100); - fprintf(out, " /underlinePosition %d def\n", 0); - fprintf(out, " /isFixedPitch false def\n"); - } - - fprintf(out, "end def\n"); - - scaler = (1000.0 / (double)ti->ttface->units_per_EM) / 1000.0; - fprintf(out, "/FontMatrix [%.9g 0 0 %.9g 0 0] def\n", scaler, scaler); - - if( ti->ttheader ) - { - fprintf(out, "/FontBBox [%d %d %d %d] def\n", - (int)ti->ttheader->xMin, - (int)ti->ttheader->yMin, - (int)ti->ttheader->xMax, - (int)ti->ttheader->yMax); - } - else - { - fprintf(out, "/FontBBox [%ld %ld %ld %ld] def\n", - ti->ttface->bbox.xMin, - ti->ttface->bbox.yMin, - ti->ttface->bbox.xMax, - ti->ttface->bbox.yMax); - - } - - fprintf(out, "/Encoding [\n"); - for( i = 0 ; i < 256 ; i++ ) - { -#ifdef USE_FT_PS_NAMES - char namebuf[256]; - PsOut_Get_FreeType_Glyph_Name(namebuf, ti->pFont, i+block_offset); - linewidth += strlen(namebuf) + 2; - fprintf(out, "/%s%s", namebuf, (linewidth > 70)?(linewidth = 0, "\n"):(" ")); -#else - fprintf(out, "/ch%02x%s", i, (((i % 10) == 9)?("\n"):(" "))); -#endif /* USE_FT_PS_NAMES */ - } - fprintf(out, "] def\n"); - - fprintf(out, "/CharProcs %d dict def CharProcs begin\n", (int)(numchars + 1)); - fprintf(out, "/.notdef {\n" - "1000 0 0 0 0 0 setcachedevice\n" - "fill } bind def\n"); - for( i = 0 ; i < numchars ; i++ ) - { - char buf[32]; -#ifdef USE_FT_PS_NAMES - char namebuf[256]; - PsOut_Get_FreeType_Glyph_Name(namebuf, ti->pFont, i+block_offset); - sprintf(buf, "%s ", namebuf); -#else - sprintf(buf, "ch%02lx ", i); -#endif /* USE_FT_PS_NAMES */ - PSType3_createOutlineGlyphs(out, ti, i+block_offset, buf); - } - fprintf(out, "end\n" - "/BuildGlyph {\n" - " exch /CharProcs get exch\n" - " 2 copy known not {pop /.notdef} if get exec } bind def\n" - "/BuildChar { 1 index /Encoding get exch get\n" - " 1 index /Encoding get exec } bind def\n"); - fprintf(out, "currentdict end /%s exch definefont pop\n", psfontname); - fprintf(out, "%%EndFont\n"); - - return 0; -} - -static -char *FT_Get_TT_NAME_ID(FT_Face ttface, int index) -{ - FT_SfntName name; - char *s; - - if( index >= FT_Get_Sfnt_Name_Count(ttface) ) - return NULL; - - FT_Get_Sfnt_Name(ttface, index, &name); - s = (char *)malloc(name.string_len+2); - if( !s ) - return NULL; - memcpy(s, (char *)name.string, name.string_len); - s[name.string_len] = '\0'; - return s; -} - -int PsOut_DownloadFreeType3(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset) -{ - struct ft2info cft2info = { 0 }; - struct ft2info *ti = &cft2info; - - S_Flush(self); - - ti->tf = (FTFontPtr)pFont->fontPrivate; - ti->ttface = ti->tf->instance->face->face; - ti->pFont = pFont; -#ifdef DEBUG_gisburn - fprintf(stderr, "# Downloading FT2 font filename='%s', ttface=%lx\n", ti->tf->instance->face->filename, (long)ti->ttface); -#endif /* DEBUG_gisburn */ - - ti->nameid.full_name = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_FULL_NAME); - ti->nameid.copyright = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_COPYRIGHT); - ti->nameid.family = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_FONT_FAMILY); - ti->nameid.subfamily = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_FONT_SUBFAMILY); - ti->nameid.version = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_VERSION_STRING); - - ti->ttheader = (TT_Header *)FT_Get_Sfnt_Table(ti->ttface, ft_sfnt_head); - ti->ttpostscript = (TT_Postscript *)FT_Get_Sfnt_Table(ti->ttface, ft_sfnt_post); - - PSType3_generateOutlineFont(self->Fp, psfontname, ti, block_offset); - - free(ti->nameid.full_name); - free(ti->nameid.copyright); - free(ti->nameid.family); - free(ti->nameid.subfamily); - free(ti->nameid.version); - - S_Flush(self); - - return 0; -} - diff --git a/hw/xprint/ps/ttf2pt1wrap.c b/hw/xprint/ps/ttf2pt1wrap.c deleted file mode 100644 index 57bb777d2..000000000 --- a/hw/xprint/ps/ttf2pt1wrap.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Wrapper to add missing symbol to externally supplied code - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifdef Lynx -extern int optind; -extern char *optarg; -#endif - -#include "ttf2pt1.c" diff --git a/hw/xprint/raster/Makefile.am b/hw/xprint/raster/Makefile.am deleted file mode 100644 index 1ee1122f2..000000000 --- a/hw/xprint/raster/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -noinst_LTLIBRARIES = libraster.la - -INCLUDES = -I$(top_srcdir)/hw/xprint - -AM_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ -D_XP_PRINT_SERVER_ - -libraster_la_SOURCES = \ - RasterAttVal.c \ - Raster.c \ - Raster.h diff --git a/hw/xprint/raster/Raster.c b/hw/xprint/raster/Raster.c deleted file mode 100644 index dccef613c..000000000 --- a/hw/xprint/raster/Raster.c +++ /dev/null @@ -1,1563 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -/******************************************************************* -** -** ********************************************************* -** * -** * File: printer/Raster.c -** * -** * Contents: -** * Raster driver for the print server. -** * -** * Copyright: Copyright 1993, 1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include /* for SIGCLD on pre-POSIX systems */ -#define NEED_EVENTS -#include -#undef NEED_EVENTS -#include -#include "misc.h" -#include "dixstruct.h" -#include "scrnintstr.h" -#include "screenint.h" -#include "colormapst.h" -#include "windowstr.h" -#include "propertyst.h" -#include "servermd.h" /* needed for IMAGE_BUFSIZE */ -#include "fb.h" -#include "mi.h" - -#include -#include "Raster.h" - -#include "attributes.h" -#include "AttrValid.h" -#include "DiPrint.h" - -static void AllocateRasterPrivates( - ScreenPtr pScreen); -static Bool RasterChangeWindowAttributes( - WindowPtr pWin, - unsigned long mask); -static int StartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client); -static int StartPage( - XpContextPtr pCon, - WindowPtr pWin); -static int StartDoc( - XpContextPtr pCon, - XPDocumentType type); -static int EndDoc( - XpContextPtr pCon, - Bool cancel); -static int EndJob( - XpContextPtr pCon, - Bool cancel); -static int EndPage( - XpContextPtr pCon, - WindowPtr pWin); -static int DocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pDoc_fmt, - int len_fmt, - char *pOptions, - int len_options, - ClientPtr client); -static int GetDocumentData( - XpContextPtr pContext, - ClientPtr client, - int maxBufferSize); -static void FreePageFiles( - RasterContextPrivPtr pWinPriv); -static int SystemCmd( - char *pCommand); -static Bool RasterCloseScreen( - int index, - ScreenPtr pScreen); -static int RasterInitContext(XpContextPtr pCon); -static Bool RasterDestroyContext(XpContextPtr pCon); -static char *RasterGetAttributes( - XpContextPtr pContext, - XPAttributes class); -static char *RasterGetOneAttribute(XpContextPtr pCon, - XPAttributes class, - char *attribute); -static int RasterSetAttributes(XpContextPtr pCon, - XPAttributes class, - char *attributes); -static int RasterAugmentAttributes(XpContextPtr pCon, - XPAttributes class, - char *attributes); -static int RasterMediumDimensions(XpContextPtr pCon, - CARD16 *width, - CARD16 *height); -static int RasterReproducibleArea(XpContextPtr pCon, - xRectangle *pRect); - -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) -#define DOC_PCL 1 -#define DOC_RASTER 2 - -static DevPrivateKey RasterScreenPrivateKey = &RasterScreenPrivateKey; -static DevPrivateKey RasterContextPrivateKey = &RasterContextPrivateKey; -static char RASTER_DRIV_NAME[] = "XP-RASTER"; -static int doc_type = DOC_RASTER; - -#define ABSOLUTE_PCLCOMP_PATH1 "/usr/openwin/bin/pclcomp" -#define ABSOLUTE_PCLCOMP_PATH2 "/usr/X11/bin/pclcomp" - -static char *pcl3_output_cmds[] = { - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -0 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -01 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -02 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -03 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -012 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -013 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -023 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -0123 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -0 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -01 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -02 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -03 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -012 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -013 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -023 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -0123 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% > %(OutFile)%"}; - -Bool -InitializeRasterDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv) -{ - int xRes, yRes; - int maxRes, maxDim, numBytes; - RasterScreenPrivPtr pPriv; - - /* - * Register this driver's InitContext function with the print extension. - * This is a bit - * sleazy, as the extension hasn't yet been initialized, but the - * extension needs to know this, and this seems the best time to - * provide the information. - */ - XpRegisterInitFunc( pScreen, RASTER_DRIV_NAME, RasterInitContext ); - - /* - * Create and load the devPrivate for the printer layer. - */ - AllocateRasterPrivates(pScreen); - - pPriv = (RasterScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, RasterScreenPrivateKey); - - maxDim = MAX( pScreen->height, pScreen->width ); - numBytes = maxDim + BITMAP_SCANLINE_PAD - 1; /* pixels per row */ - numBytes *= maxDim; - numBytes /= 8; /* bytes per row */ - xRes = pScreen->width / (pScreen->mmWidth / 25.4); - yRes = pScreen->height / (pScreen->mmHeight / 25.4); - maxRes = MAX( xRes, yRes ); - - pPriv->pBits = (char *)xalloc(numBytes); - - /* - * Have to allocate maxDim X maxDim to allow for landscape mode. - */ - fbScreenInit(pScreen, pPriv->pBits, maxDim, maxDim, maxRes, - maxRes, maxDim, 1); - miInitializeBackingStore(pScreen); - pScreen->blackPixel = 1; - pScreen->whitePixel = 0; - if(fbCreateDefColormap(pScreen) == FALSE) - ; /* XXX what do I do if it fails? */ - - pScreen->SaveScreen = (SaveScreenProcPtr)_XpBoolNoop; - pPriv->ChangeWindowAttributes = pScreen->ChangeWindowAttributes; - pScreen->ChangeWindowAttributes = RasterChangeWindowAttributes; - pPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = RasterCloseScreen; - - return TRUE; -} - -/* - * GetPropString searches the context's config database for a property - * by the name of propName. If found, it returns the property's - * value, otherwise it returns NULL unless the requested attribute - * is RASTER_PRINT_PAGE_COMMAND, in which case it returns a hard-coded - * default string to invoke xpr to produce a PostScript(tm) formatted - * raster. - */ - -static char * -GetPropString( - XpContextPtr pCon, - char *propName) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - char *type; - XrmValue val; - struct stat status; - int pclcomp_exists = 0; - - if( XrmGetResource(pConPriv->config, propName, propName, &type, &val) == - True ) - return (char *)val.addr; - - if( !strcmp( propName, RASTER_PRINT_PAGE_COMMAND ) ) - if( doc_type == DOC_RASTER ) - return "xpr -device ps %(InFile)% > %(OutFile)%"; - else - { - XpOid orientation; - XpOid compression; - int pcl3_output_index = 0; - - orientation = XpGetContentOrientation(pCon); - compression = XpGetAvailableCompression(pCon); - - switch(orientation) { - case xpoid_val_content_orientation_landscape: - pcl3_output_index = 0; - break; - default: - pcl3_output_index += 9; - break; - } - - if(stat(ABSOLUTE_PCLCOMP_PATH1, &status) != -1) - pclcomp_exists = 1; - else if(stat(ABSOLUTE_PCLCOMP_PATH2, &status) != -1) - pclcomp_exists = 1; - - if(pclcomp_exists) - switch(compression) { - case xpoid_val_available_compressions_0: - pcl3_output_index += 0; - break; - case xpoid_val_available_compressions_01: - pcl3_output_index += 1; - break; - case xpoid_val_available_compressions_02: - pcl3_output_index += 2; - break; - case xpoid_val_available_compressions_03: - pcl3_output_index += 3; - break; - case xpoid_val_available_compressions_012: - pcl3_output_index += 4; - break; - case xpoid_val_available_compressions_013: - pcl3_output_index += 5; - break; - case xpoid_val_available_compressions_023: - pcl3_output_index += 6; - break; - default: - pcl3_output_index += 7; - break; - } - else - pcl3_output_index += 8; - - return pcl3_output_cmds[pcl3_output_index]; - } - else - return NULL; -} - -static void -SetDocumentType( - XpContextPtr pCon) -{ - XpOidList* attrs_supported; - - /* - * only validate attributes found in document-attributes-supported - */ - attrs_supported = - XpGetListAttr(pCon, XPPrinterAttr, - xpoid_att_document_attributes_supported, - (const XpOidList*)NULL); - - if(XpOidListHasOid(attrs_supported, xpoid_att_document_format)) - { - const char* value_in; - XpOidDocFmt *f; - - value_in = XpGetStringAttr(pCon, XPDocAttr, xpoid_att_document_format); - - f = XpOidDocFmtNew( value_in ); - - if( f != NULL ) - { - if( !strcmp( f->format, "PCL" ) ) - doc_type = DOC_PCL; - else - doc_type = DOC_RASTER; - - XpOidDocFmtDelete( f ); - } - } - - /* - * clean up - */ - XpOidListDelete(attrs_supported); -} - -static int -StartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - SetDocumentType( pCon ); - - /* - * Check for existing page file, and delete it if it exists. - */ - if(pConPriv->pageFileName != (char *)NULL) - { - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - unlink(pConPriv->pageFileName); - Xfree(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - /* - * Create a temporary file to store the printer output. - */ - if(!sendClientData) - { - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w", &pConPriv->jobFileName, &pConPriv->pJobFile)) - return BadAlloc; - } - - return Success; -} - -/* - * StartDoc and EndDoc are just no-ops in this implementation, since - * our view of the spooler really doesn't recognize documents. - */ - -static int -StartDoc( - XpContextPtr pCon, - XPDocumentType type) -{ - return Success; -} - -static int EndDoc( - XpContextPtr pCon, - Bool cancel) -{ - return Success; -} - -#if 0 - -/* XXX Not used. */ - -/* - * BuidArgVector takes a pointer to a comma-separated list of command - * options and splits it out into an array of argument pointers. The - * caller must not free the optionList after calling this function until - * the returned arg vector is no longer needed, at which time the arg - * vector should also be freed. - */ - -#define SEPARATOR_CHAR (char)',' - -static char ** -BuildArgVector( - char *optionList, - char **argVector, - int argCount) -{ - char *curArg, *lastChar, *endArg; - - curArg = optionList; - lastChar = optionList + strlen(optionList); /* includes final NULL */ - - while(curArg != (char *)NULL && curArg < lastChar) - { - /* strip leading white space */ - while(curArg < lastChar && isascii((int)*curArg) && - isspace((int)*curArg)) - curArg++; - - if(curArg < lastChar) - { - argVector = (char **)Xrealloc(argVector, - sizeof(char *) * (argCount + 2)); - argVector[argCount] = curArg; - argVector[++argCount] = (char *)NULL; - - endArg = strchr(curArg, SEPARATOR_CHAR); - - /* Should I strip trailing white space ??? */ - - if(endArg != (char *)NULL) - { - *endArg = (char)'\0'; - curArg = endArg + 1; - } - else - curArg = (char *)NULL; - } - } - - return argVector; -} -#endif - -static int -EndJob( - XpContextPtr pCon, - Bool cancel) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - if( cancel == True ) - { - if(pConPriv->getDocClient != (ClientPtr)NULL) { - XpFinishDocData(pConPriv->getDocClient); - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - } - - if(pConPriv->jobFileName != (char *)NULL) - { - unlink(pConPriv->jobFileName); - Xfree(pConPriv->jobFileName); - pConPriv->jobFileName = (char *)NULL; - } - - return Success; - } - - if(pConPriv->getDocClient != (ClientPtr)NULL&&pConPriv->getDocBufSize > 0) - { - XpFinishDocData(pConPriv->getDocClient); - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - - return Success; - } - - if(pConPriv->pJobFile != (FILE *)NULL) - { - fclose(pConPriv->pJobFile); - pConPriv->pJobFile = (FILE *)NULL; - - if(pConPriv->jobFileName != (char *)NULL) - { - XpSubmitJob( pConPriv->jobFileName, pCon ); - unlink(pConPriv->jobFileName); - Xfree(pConPriv->jobFileName); - pConPriv->jobFileName = (char *)NULL; - } - } - - return Success; -} - -/* StartPage - * - * If page file exists - * close page file - * set page file pointer = NULL - * unlink page file - */ -static int -StartPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - if(pConPriv->pageFileName != (char *)NULL) - { - unlink(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - return Success; -} - -#include "X11/XWDFile.h" - - -#define lowbit(x) ((x) & (~(x) + 1)) - -/* - * Get the XWDColors of all pixels in colormap - returns # of colors - */ -static XWDColor * -Get_XWDColors( - ColormapPtr pCmap) -{ - int i, ncolors; - xrgb *prgbList; - Pixel *pPixels; - XWDColor *colors; - - ncolors = pCmap->pVisual->ColormapEntries; - if (!(colors = (XWDColor *) malloc (sizeof(XWDColor) * ncolors))) - return (XWDColor *) NULL; - if (!(prgbList = (xrgb*) malloc(sizeof(xrgb) * ncolors))) - { - Xfree(colors); - return (XWDColor *) NULL; - } - if (!(pPixels = (Pixel*) malloc(sizeof(Pixel) * ncolors))) - { - Xfree(colors); - Xfree(prgbList); - return (XWDColor *) NULL; - } - - if (pCmap->pVisual->class == DirectColor || - pCmap->pVisual->class == TrueColor) { - Pixel red, green, blue, red1, green1, blue1; - - red = green = blue = 0; - red1 = lowbit(pCmap->pVisual->redMask); - green1 = lowbit(pCmap->pVisual->greenMask); - blue1 = lowbit(pCmap->pVisual->blueMask); - for (i=0; i pCmap->pVisual->redMask) - red = 0; - green += green1; - if (green > pCmap->pVisual->greenMask) - green = 0; - blue += blue1; - if (blue > pCmap->pVisual->blueMask) - blue = 0; - } - } else { - for (i=0; idrawable; - XWDFileHeader header; - int win_name_size; - int header_size; - int ncolors, i; - char *win_name; - VisualPtr pVisual; - ColormapPtr pCmap; - XWDColor *pColors; - unsigned long swaptest = 1; - - widthBytesLine = PixmapBytePad(pWin->drawable.width, pWin->drawable.depth); - length = widthBytesLine * pWin->drawable.height; - height = pWin->drawable.height; - - if(length <= 0) - return Success; - - if (widthBytesLine >= IMAGE_BUFSIZE) - linesPerBuf = 1; - else - { - linesPerBuf = IMAGE_BUFSIZE / widthBytesLine; - if (linesPerBuf > height) - linesPerBuf = height; - } - length = linesPerBuf * widthBytesLine; - if (linesPerBuf < height) - { - /* we have to make sure intermediate buffers don't need padding */ - while ((linesPerBuf > 1) && (length & 3)) - { - linesPerBuf--; - length -= widthBytesLine; - } - while (length & 3) - { - linesPerBuf++; - length += widthBytesLine; - } - } - if(!(pBuf = (char *) Xalloc(length))) - return (BadAlloc); - - /* - * Start of Xwd header code. - */ - - /* - * XXX - Should we use the real window name??? - */ - win_name = "xwdump"; - /* sizeof(char) is included for the null string terminator. */ - win_name_size = strlen(win_name) + sizeof(char); - - pCmap = (ColormapPtr)LookupIDByType(wColormap (pWin), RT_COLORMAP); - pVisual = pCmap->pVisual; - if((pColors = Get_XWDColors(pCmap)) == (XWDColor *)NULL) - { - Xfree(pBuf); - return (BadAlloc); - } - - /* - * Write out header information. - */ - header_size = sizeof(header) + win_name_size; - header.header_size = (CARD32) header_size; - header.file_version = (CARD32) XWD_FILE_VERSION; - header.pixmap_format = (CARD32) ZPixmap; /* Must match GetImage below */ - header.pixmap_depth = (CARD32) pDraw->depth; - header.pixmap_width = (CARD32) pDraw->width; - header.pixmap_height = (CARD32) pDraw->height; - header.xoffset = (CARD32) 0; - header.byte_order = (CARD32) screenInfo.imageByteOrder; - header.bitmap_unit = (CARD32) screenInfo.bitmapScanlineUnit; - header.bitmap_bit_order = (CARD32) screenInfo.bitmapBitOrder; - header.bitmap_pad = (CARD32) screenInfo.bitmapScanlinePad; - header.bits_per_pixel = (CARD32) pDraw->bitsPerPixel; - header.bytes_per_line = (CARD32) widthBytesLine; - header.visual_class = (CARD32) pVisual->class; - header.red_mask = (CARD32) pVisual->redMask; - header.green_mask = (CARD32) pVisual->greenMask; - header.blue_mask = (CARD32) pVisual->blueMask; - header.bits_per_rgb = (CARD32) pVisual->bitsPerRGBValue; - header.colormap_entries = (CARD32) pVisual->ColormapEntries; - header.ncolors = ncolors = (CARD32) pVisual->ColormapEntries; - header.window_width = (CARD32) pDraw->width; - header.window_height = (CARD32) pDraw->height; - header.window_x = 0; - header.window_y = 0; - header.window_bdrwidth = (CARD32) 0; - - if (*(char *) &swaptest) { - _swaplong((char *) &header, sizeof(header)); - for (i = 0; i < ncolors; i++) { - _swaplong((char *) &pColors[i].pixel, sizeof(long)); - _swapshort((char *) &pColors[i].red, 3 * sizeof(short)); - } - } - - (void) fwrite((char *)&header, sizeof(header), 1, pRasterFile); - (void) fwrite(win_name, win_name_size, 1, pRasterFile); - (void) fwrite((char *) pColors, sizeof(XWDColor), ncolors, pRasterFile); - - Xfree(pColors); - - /* - * End of Xwd header code. - */ - - linesDone = 0; - while(height - linesDone > 0) - { - nlines = min(linesPerBuf, height - linesDone); - (*pDraw->pScreen->GetImage) (pDraw, - 0, - linesDone, - pWin->drawable.width, - nlines, - ZPixmap, - ~0, - pBuf); - - if(fwrite(pBuf, sizeof(char), (size_t)(nlines * widthBytesLine), - pRasterFile) != - (size_t)(nlines * widthBytesLine)) - { - Xfree(pBuf); - return BadAlloc; - } - linesDone += nlines; - } - Xfree(pBuf); - return Success; -} - - -static int -SendPage( XpContextPtr pCon ) -{ - struct stat statBuf; - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - if(stat(pConPriv->pageFileName, &statBuf) < 0) - return BadAlloc; - - return XpSendDocumentData(pConPriv->getDocClient, - pConPriv->pPageFile, (int)statBuf.st_size, - pConPriv->getDocBufSize); -} - -/* - * EndPage: - * - * If page file doesn't exist: - * { - * Create page file - * Open page file - * Write page header to page file - * if(preRasterFile exists) - * copy preRasterFile contents to page file - * if(noRasterFile exists) - * write noRasterFile contents to page file - * else - * Create raster image file - * Open raster image file - * GetImage data - * Write Image data to raster image file - * invoke page_command on raster image file - * Write raster image file contents to page file - * Unlink tempPage file - * if(postRasterFile exists) - * write postRasterFile contents to page file - * Write page trailer to page file - * } - * Write page file to job file - */ -static int -EndPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - struct stat statBuf; - char *rasterFileName = (char *)NULL, *pCommand = (char *)NULL; - FILE *pRasterFile = (FILE *)NULL; - - if(pConPriv->pageFileName == (char *)NULL) - { - /* - * Open the page file. - */ - if (!XpOpenTmpFile("w+", &pConPriv->pageFileName, - &pConPriv->pPageFile)) - goto BAD_PAGE_ALLOC; - - /* - * Copy any pre-raster document data to the page file. - */ - if(pConPriv->pPreRasterFile != (FILE *)NULL) - { - if(CopyContentsAndDelete(&pConPriv->pPreRasterFile, - &pConPriv->preRasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - - /* - * Copy either the no-raster document data, or the raster - * data itself to the page file. - * If the no-raster file exists, then we don't process the - * actual window raster bits. - */ - if(pConPriv->pNoRasterFile != (FILE *)NULL) - { - if(CopyContentsAndDelete(&pConPriv->pNoRasterFile, - &pConPriv->noRasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - else - { - /* - * Open the raster image file. - */ - if (!XpOpenTmpFile("w", &rasterFileName, &pRasterFile)) - goto BAD_PAGE_ALLOC; - - /* - * Write the page image data to the raster image file. - */ - if(WriteWindowRaster(pWin, pRasterFile) != Success) - goto BAD_PAGE_ALLOC; - - /* - * Invoke the page_command on the raster image file. - */ - if((pCommand = GetPropString(pCon, RASTER_PRINT_PAGE_COMMAND)) != - (char *)NULL) - { - char *outFileName; - FILE *pOutFile; - - if (!XpOpenTmpFile("w", &outFileName, &pOutFile)) - goto BAD_PAGE_ALLOC; - fclose(pOutFile); - - pCommand = ReplaceFileString(strdup(pCommand), rasterFileName, - outFileName); - fclose(pRasterFile); - SystemCmd(pCommand); - free(pCommand); - /* - * Delete the unprocessed raster file. - */ - unlink(rasterFileName); - Xfree(rasterFileName); - rasterFileName = outFileName; - if((pRasterFile = fopen(rasterFileName, "r")) == (FILE *)NULL) - goto BAD_PAGE_ALLOC; - } - else - { - fclose(pRasterFile); - if((pRasterFile = fopen(rasterFileName, "r")) == (FILE *)NULL) - goto BAD_PAGE_ALLOC; - } - - /* - * Copy the raster image file contents to the page file. - * Note that pRasterFile must be set to the start of the - * raster file. - */ - if(CopyContentsAndDelete(&pRasterFile, - &rasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - - /* - * Copy any post-raster document data to the page file. - */ - if(pConPriv->pPostRasterFile != (FILE *)NULL) - { - if(CopyContentsAndDelete(&pConPriv->pPostRasterFile, - &pConPriv->postRasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - - } - - /* - * Write the page file contents to the job file or to the client - * performing GetDocumentData. - * pConPriv->pPageFile must first be set to the start of the page file. - */ - rewind(pConPriv->pPageFile); - if(stat(pConPriv->pageFileName, &statBuf) < 0) - goto BAD_PAGE_ALLOC; - - /* - * Send the page data to whatever client has called GetDocumentData. - */ - if(pConPriv->getDocClient != (ClientPtr)NULL&&pConPriv->getDocBufSize > 0) - { - int retval; - /* - * We should do something like the following: suspend the - * caller until we can gracefully write all the data in small - * chunks to the receiver, but for now we'll just call WriteToClient - * on the huge chunk - */ - retval = SendPage(pCon); - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - unlink(pConPriv->pageFileName); - free(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - return retval; - } - - if(pConPriv->pJobFile == (FILE *)NULL) - { - /* - * This shouldn't be necessary. I believe we only get here if - * someone calls "EndPage" prior to "StartJob". This error - * condition should probably be trapped at a higher level. - */ - - if(pConPriv->jobFileName != (char *)NULL) - Xfree(pConPriv->jobFileName); - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w", &pConPriv->jobFileName, &pConPriv->pJobFile)) - goto BAD_PAGE_ALLOC; - } - - if(TransferBytes(pConPriv->pPageFile, pConPriv->pJobFile, - (int)statBuf.st_size) != (int)statBuf.st_size) - goto BAD_PAGE_ALLOC; - - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - unlink(pConPriv->pageFileName); - free(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - - return Success; - - BAD_PAGE_ALLOC: - - FreePageFiles(pConPriv); - - if(pRasterFile != (FILE *)NULL) - fclose(pRasterFile); - if(rasterFileName != (char *)NULL) - { - unlink(rasterFileName); - Xfree(rasterFileName); - } - return BadAlloc; -} - -static int -DocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pDoc_fmt, - int len_fmt, - char *pOptions, - int len_options, - ClientPtr client) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - char *preRasterStr = PRE_RASTER, *postRasterStr = POST_RASTER, - *noRasterStr = NO_RASTER; - - /* - * Check that options equals either PRE_RASTER or POST_RASTER. - */ - if(len_options == strlen(preRasterStr) && - strncmp(pOptions, preRasterStr, strlen(preRasterStr)) == 0) - { - if(pConPriv->pPreRasterFile == (FILE *)NULL) - { - if (!XpOpenTmpFile("w+", &pConPriv->preRasterFileName, - &pConPriv->pPreRasterFile)) - return BadAlloc; - } - if(fwrite(pData, sizeof(char), (size_t)len_data, - pConPriv->pPreRasterFile) != (size_t)len_data) - return BadAlloc; - fflush(pConPriv->pPreRasterFile); - } - else if(len_options == strlen(postRasterStr) && - strncmp(pOptions, postRasterStr, strlen(postRasterStr)) == 0) - { - if(pConPriv->pPostRasterFile == (FILE *)NULL) - { - if (!XpOpenTmpFile("w+", &pConPriv->postRasterFileName, - &pConPriv->pPostRasterFile)) - return BadAlloc; - } - if(fwrite(pData, sizeof(char), (size_t)len_data, - pConPriv->pPostRasterFile) != (size_t)len_data) - return BadAlloc; - fflush(pConPriv->pPostRasterFile); - } - else if(len_options == strlen(noRasterStr) && - strncmp(pOptions, noRasterStr, strlen(noRasterStr)) == 0) - { - if(pConPriv->pNoRasterFile == (FILE *)NULL) - { - if (!XpOpenTmpFile("w+", &pConPriv->noRasterFileName, - &pConPriv->pNoRasterFile)) - return BadAlloc; - } - if(fwrite(pData, sizeof(char), (size_t)len_data, - pConPriv->pNoRasterFile) != (size_t)len_data) - return BadAlloc; - fflush(pConPriv->pNoRasterFile); - } - else - return BadValue; - - return Success; -} - -/* - * GetDocumentData notes which client is requesting the document data for - * a particular context. The Raster driver's EndPage function causes the - * data to be written to the proper client. - */ -static int -GetDocumentData( - XpContextPtr pContext, - ClientPtr client, - int maxBufferSize) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pContext->devPrivates, RasterContextPrivateKey); - - pConPriv->getDocClient = client; - pConPriv->getDocBufSize = maxBufferSize; - return Success; -} - -static void -AllocateRasterPrivates( - ScreenPtr pScreen) -{ - dixRequestPrivate(RasterContextPrivateKey, sizeof( RasterContextPrivRec ) ); - dixSetPrivate(&pScreen->devPrivates, RasterScreenPrivateKey, - Xalloc(sizeof(RasterScreenPrivRec))); -} - -/* - * RasterChangeWindowAttributes - Make sure that the window's backing - * store is turned on. - */ -static Bool -RasterChangeWindowAttributes( - WindowPtr pWin, - unsigned long mask) -{ - Bool status = Success; - ScreenPtr pScreen = pWin->drawable.pScreen; - RasterScreenPrivPtr pScreenPriv = (RasterScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, RasterScreenPrivateKey); - - if(pWin->backingStore == NotUseful) - { - pWin->backingStore = WhenMapped; - mask |= CWBackingStore; - } - - if(pScreenPriv->ChangeWindowAttributes != NULL) - { - pScreen->ChangeWindowAttributes = pScreenPriv->ChangeWindowAttributes; - status = pScreen->ChangeWindowAttributes(pWin, mask); - pScreen->ChangeWindowAttributes = RasterChangeWindowAttributes; - } - return status; -} - -/* - * RasterValidateDocFormats - Inspects the files available in the - * ddx-config/XP-RASTER directory to find the names of PDLs for which - * we have processing commands. These names are then intersected with - * the contents of the printer's document-formats-supported attribute, - * and the result is stored back into document-formats-supported. - * We have hard-coded knowledge of how to produce PS, so we always - * leave that in, if it's listed in document-formats-supported, - * even if we don't have a configuration file. If there is a - * configuration file for PS, then its contents will override our default. - */ -static void -RasterValidateDocFormats( - XpContextPtr pCon) -{ -} - -/* - * RasterValidateAttrs - Inspects and Corrects the attribute values - * in the specified context. - */ -static void -RasterValidateAttrs( - XpContextPtr pCon) -{ - RasterValidateDocFormats(pCon); - XpValidatePrinterPool(pCon, &RasterValidatePoolsRec); - XpValidateJobPool(pCon, &RasterValidatePoolsRec); - XpValidateDocumentPool(pCon, &RasterValidatePoolsRec); -} - -/* - * RasterInitContext - Establish the appropriate values for a - * PrintContext used with the Raster Driver. - */ -static char DOC_ATT_SUPP[]="document-attributes-supported:\tdefault-medium document-format"; -static char JOB_ATT_SUPP[]="job-attributes-supported:\t"; -static char DDX_DIR[]="ddx-config"; - -static int -RasterInitContext( - XpContextPtr pCon) -{ - char *configFileName, *val, *attrStr; - RasterContextPrivPtr pConPriv; - XpDriverFuncsPtr pFuncs; - - /* - * Initialize the attribute store for this printer. - */ - XpInitAttributes( pCon ); - - /* - * Validate the attributes - */ - RasterValidateAttrs( pCon ); - - - /* - * Initialize the function pointers - */ - pFuncs = &( pCon->funcs ); - pFuncs->StartJob = StartJob; - pFuncs->EndJob = EndJob; - pFuncs->StartDoc = StartDoc; - pFuncs->EndDoc = EndDoc; - pFuncs->StartPage = StartPage; - pFuncs->EndPage = EndPage; - pFuncs->PutDocumentData = DocumentData; - pFuncs->GetDocumentData = GetDocumentData; - pFuncs->DestroyContext = RasterDestroyContext; - pFuncs->GetAttributes = RasterGetAttributes; - pFuncs->GetOneAttribute = RasterGetOneAttribute; - pFuncs->SetAttributes = RasterSetAttributes; - pFuncs->AugmentAttributes = RasterAugmentAttributes; - pFuncs->GetMediumDimensions = RasterMediumDimensions; - pFuncs->GetReproducibleArea = RasterReproducibleArea; - - /* - * Set up the context privates - */ - pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - pConPriv->jobFileName = (char *)NULL; - pConPriv->pageFileName = (char *)NULL; - pConPriv->preRasterFileName = (char *)NULL; - pConPriv->postRasterFileName = (char *)NULL; - pConPriv->noRasterFileName = (char *)NULL; - pConPriv->pJobFile = (FILE *)NULL; - pConPriv->pPageFile = (FILE *)NULL; - pConPriv->pPreRasterFile = (FILE *)NULL; - pConPriv->pPostRasterFile = (FILE *)NULL; - pConPriv->pNoRasterFile = (FILE *)NULL; - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - - /* - * Get the configuration information for the context's printer - */ - configFileName = XpGetOneAttribute( pCon, XPPrinterAttr, - "xp-ddx-config-file-name" ); - if(configFileName && strlen(configFileName)) - { - if( configFileName[0] == '/' ) - pConPriv->config = XrmGetFileDatabase( configFileName ); - else - { - char *configDir, *configFilePath; - - configDir = XpGetConfigDir(FALSE); - configFilePath = (char *)malloc((strlen(configDir) + - strlen(DDX_DIR) + - strlen(RASTER_DRIV_NAME) + - strlen(configFileName) + - 4)* sizeof(char)); - sprintf(configFilePath, "%s/%s/%s/%s", configDir, DDX_DIR, - RASTER_DRIV_NAME, configFileName); - pConPriv->config = XrmGetFileDatabase(configFilePath); - free(configDir); - free(configFilePath); - } - } - else - pConPriv->config = (XrmDatabase)NULL; - - /* - * Add our own attribute initialization - */ - /* - * document-attributes-supported - */ - val = XpGetOneAttribute(pCon, XPServerAttr, "document-attributes-supported"); - if((attrStr = (char *)xalloc(strlen(val) + strlen(DOC_ATT_SUPP) + 4)) == - (char *)NULL) - return BadAlloc; - sprintf(attrStr, "*%s %s", DOC_ATT_SUPP, val); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * job-attributes-supported - */ - val = XpGetOneAttribute(pCon, XPServerAttr, "job-attributes-supported"); - if((attrStr = (char *)xalloc(strlen(val) + strlen(JOB_ATT_SUPP) + 4)) == - (char *)NULL) - return BadAlloc; - sprintf(attrStr, "*%s %s", JOB_ATT_SUPP, val); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * PageAttributesSupported - */ - XpAugmentAttributes(pCon, XPPrinterAttr, "*xp-page-attributes-supported:"); - - return Success; -} - - - -static Bool -RasterDestroyContext( - XpContextPtr pCon) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - /* - * Clean up the temporary files - */ - FreePageFiles( pConPriv ); - - if( pConPriv->pJobFile != (FILE *)NULL ) - { - fclose( pConPriv->pJobFile ); - pConPriv->pJobFile = (FILE *)NULL; - } - if( pConPriv->jobFileName != (char *)NULL ) - { - unlink( pConPriv->jobFileName ); - Xfree( pConPriv->jobFileName ); - } - if(pConPriv->config) - { - XrmDestroyDatabase(pConPriv->config); - pConPriv->config = (XrmDatabase)NULL; - } - - XpDestroyAttributes( pCon ); - return Success; -} - -static char * -RasterGetAttributes( - XpContextPtr pContext, - XPAttributes class) -{ - return XpGetAttributes( pContext, class ); -} - -static char * -RasterGetOneAttribute( - XpContextPtr pContext, - XPAttributes class, - char *attr) -{ - return XpGetOneAttribute( pContext, class, attr ); -} - -static int -RasterSetAttributes(XpContextPtr pCon, - XPAttributes class, - char *attributes) -{ - return XpSetAttributes( pCon, class, attributes ); -} - -static int -RasterAugmentAttributes( - XpContextPtr pCon, - XPAttributes class, - char *attributes) -{ - return XpAugmentAttributes( pCon, class, attributes ); -} - -static void -FreePageFiles( - RasterContextPrivPtr pConPriv) -{ - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - if(pConPriv->pageFileName != (char *)NULL) - { - unlink(pConPriv->pageFileName); - Xfree(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - if(pConPriv->pPreRasterFile != (FILE *)NULL) - { - fclose(pConPriv->pPreRasterFile); - pConPriv->pPreRasterFile = (FILE *)NULL; - } - if(pConPriv->preRasterFileName != (char *)NULL) - { - unlink(pConPriv->preRasterFileName); - Xfree(pConPriv->preRasterFileName); - pConPriv->preRasterFileName = (char *)NULL; - } - if(pConPriv->pPostRasterFile != (FILE *)NULL) - { - fclose(pConPriv->pPostRasterFile); - pConPriv->pPostRasterFile = (FILE *)NULL; - } - if(pConPriv->postRasterFileName != (char *)NULL) - { - unlink(pConPriv->postRasterFileName); - Xfree(pConPriv->postRasterFileName); - pConPriv->postRasterFileName = (char *)NULL; - } - if(pConPriv->pNoRasterFile != (FILE *)NULL) - { - fclose(pConPriv->pNoRasterFile); - pConPriv->pNoRasterFile = (FILE *)NULL; - } - if(pConPriv->noRasterFileName != (char *)NULL) - { - unlink(pConPriv->noRasterFileName); - Xfree(pConPriv->noRasterFileName); - pConPriv->noRasterFileName = (char *)NULL; - } -} - -/* - * RasterCloseScreen - Call any wrapped CloseScreen function, - * and free the screen memory. - */ -static Bool -RasterCloseScreen( - int index, - ScreenPtr pScreen) -{ - Bool status = Success; - RasterScreenPrivPtr pScreenPriv = (RasterScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, RasterScreenPrivateKey); - - /* - * Call any wrapped CloseScreen proc. - */ - if(pScreenPriv->CloseScreen != NULL) - { - pScreen->CloseScreen = pScreenPriv->CloseScreen; - status = pScreen->CloseScreen(index, pScreen); - pScreen->CloseScreen = RasterCloseScreen; - } - - Xfree(pScreenPriv->pBits); - Xfree(pScreenPriv); - - return status; -} - -#include - -/* ARGSUSED */ -static void SigchldHndlr (int dummy) -{ - int status; - int olderrno = errno; - struct sigaction act; - sigfillset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = SigchldHndlr; - - (void) wait (&status); - - /* - * Is this really necessary? - */ - sigaction(SIGCHLD, &act, (struct sigaction *)NULL); - errno = olderrno; -} - -/* - * SystemCmd provides a wrapper for the 'system' library call. The call - * appears to be sensitive to the handling of SIGCHLD, so this wrapper - * sets the status to SIG_DFL, and then resets the established handler - * after system returns. - */ -static int -SystemCmd(char *cmdStr) -{ - int status; - struct sigaction newAct, oldAct; - sigfillset(&newAct.sa_mask); - newAct.sa_flags = 0; - newAct.sa_handler = SIG_DFL; - sigfillset(&oldAct.sa_mask); - oldAct.sa_flags = 0; - oldAct.sa_handler = SigchldHndlr; - - /* - * get the old handler, and set the action to IGN - */ - sigaction(SIGCHLD, &newAct, &oldAct); - - status = system (cmdStr); - - sigaction(SIGCHLD, &oldAct, (struct sigaction *)NULL); - return status; -} - -/* - * RasterMediumDimensions is installed in the GetMediumDimensions field - * of each raster-initialized context. - */ -static int -RasterMediumDimensions(XpContextPtr pCon, - CARD16 *width, - CARD16 *height) -{ - XpGetMediumDimensions(pCon, width, height); - return Success; -} - -/* - * RasterReproducibleArea is installed in the GetReproducibleArea field - * of each raster-initialized context. - */ -static int -RasterReproducibleArea(XpContextPtr pCon, - xRectangle *pRect) -{ - XpGetReproductionArea(pCon, pRect); - return Success; -} diff --git a/hw/xprint/raster/Raster.h b/hw/xprint/raster/Raster.h deleted file mode 100644 index 7a613f0b0..000000000 --- a/hw/xprint/raster/Raster.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: printer/Raster.h -** * -** * Contents: defines and includes for the raster layer -** * for a printing X server. -** * -** * Copyright: Copyright 1993 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _RASTER_H_ -#define _RASTER_H_ - -/* - * Some sleazes to force the XrmDB stuff into the server - */ -#ifndef HAVE_XPointer -#define HAVE_XPointer 1 -typedef char *XPointer; -#endif -#define Status int -#define True 1 -#define False 0 -#include "misc.h" -#include -#include -#include "attributes.h" - -#include - -#define MAX_TOKEN_LEN 512 - -#define RASTER_PRINT_PAGE_COMMAND "_XP_RASTER_PAGE_PROC_COMMAND" - -#define RASTER_IN_FILE_STRING "%(InFile)%" -#define RASTER_OUT_FILE_STRING "%(OutFile)%" - -#define RASTER_ALLOWED_COMMANDS_FILE "printCommands" - -/* - * Defines for the "options" in DtPrintDocumentData. - */ -#define PRE_RASTER "PRE-RASTER" -#define POST_RASTER "POST-RASTER" -#define NO_RASTER "NO-RASTER" - - -typedef struct { - char *pBits; - CreateWindowProcPtr CreateWindow; - ChangeWindowAttributesProcPtr ChangeWindowAttributes; - DestroyWindowProcPtr DestroyWindow; - CloseScreenProcPtr CloseScreen; -} RasterScreenPrivRec, *RasterScreenPrivPtr; - -typedef struct { - XrmDatabase config; - char *jobFileName; - FILE *pJobFile; - char *pageFileName; - FILE *pPageFile; - char *preRasterFileName; /* Pre-raster document data */ - FILE *pPreRasterFile; - char *noRasterFileName; /* Raster replacement document data */ - FILE *pNoRasterFile; - char *postRasterFileName; /* Post-raster document data */ - FILE *pPostRasterFile; - ClientPtr getDocClient; - int getDocBufSize; -} RasterContextPrivRec, *RasterContextPrivPtr; - - -extern XpValidatePoolsRec RasterValidatePoolsRec; - -extern Bool InitializeRasterDriver(int ndx, ScreenPtr pScreen, int argc, - char **argv); - -#endif /* _RASTER_H_ */ diff --git a/hw/xprint/raster/RasterAttVal.c b/hw/xprint/raster/RasterAttVal.c deleted file mode 100644 index 8189be47c..000000000 --- a/hw/xprint/raster/RasterAttVal.c +++ /dev/null @@ -1,267 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "misc.h" -#include "dixstruct.h" -#include "scrnintstr.h" -#include "screenint.h" -#include -#include "Raster.h" - -#include "attributes.h" -#include "AttrValid.h" - -/* - * define valid values and defaults for Printer pool - */ -static XpOid ValidContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList ValidContentOrientations = { - ValidContentOrientationsOids, XpNumber(ValidContentOrientationsOids) -}; - -static XpOid DefaultContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList DefaultContentOrientations = { - DefaultContentOrientationsOids, XpNumber(DefaultContentOrientationsOids) -}; - -static XpOid ValidPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList ValidPlexes = { - ValidPlexesOids, XpNumber(ValidPlexesOids) -}; - -static XpOid DefaultPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList DefaultPlexes = { - DefaultPlexesOids, XpNumber(DefaultPlexesOids) -}; - -static unsigned long ValidPrinterResolutionsCards[] = { - 150, 300, 600 -}; -static XpOidCardList ValidPrinterResolutions = { - ValidPrinterResolutionsCards, XpNumber(ValidPrinterResolutionsCards) -}; - -static unsigned long DefaultPrinterResolutionsCards[] = { - 300 -}; -static XpOidCardList DefaultPrinterResolutions = { - DefaultPrinterResolutionsCards, XpNumber(DefaultPrinterResolutionsCards) -}; - -static XpOid ValidListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList ValidListfontsModes = { - ValidListfontsModesOids, XpNumber(ValidListfontsModesOids) -}; - -static XpOid DefaultListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList DefaultListfontsModes = { - DefaultListfontsModesOids, XpNumber(DefaultListfontsModesOids) -}; - -static XpOid ValidSetupProvisoOids[] = { - xpoid_val_xp_setup_mandatory, xpoid_val_xp_setup_optional -}; -static XpOidList ValidSetupProviso = { - ValidSetupProvisoOids, XpNumber(ValidSetupProvisoOids) -}; - -static XpOidDocFmt ValidDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL }, - { "PCL", "3", NULL } -}; -static XpOidDocFmtList ValidDocFormatsSupported = { - ValidDocFormatsSupportedFmts, XpNumber(ValidDocFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultDocFormatsSupported = { - DefaultDocFormatsSupportedFmts, XpNumber(DefaultDocFormatsSupportedFmts) -}; - -static XpOidDocFmtList ValidEmbeddedFormatsSupported = { - (XpOidDocFmt *)NULL, 0 -}; - -static XpOidDocFmtList DefaultEmbeddedFormatsSupported = { - (XpOidDocFmt *)NULL, 0 -}; - -static XpOidDocFmt ValidRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL }, - { "PCL", "3", NULL } -}; -static XpOidDocFmtList ValidRawFormatsSupported = { - ValidRawFormatsSupportedFmts, XpNumber(ValidRawFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultRawFormatsSupported = { - DefaultRawFormatsSupportedFmts, XpNumber(DefaultRawFormatsSupportedFmts) -}; - -static XpOidList ValidInputTrays = { - (XpOid *)NULL, 0 -}; - -static XpOid ValidMediumSizesOids[] = { - xpoid_val_medium_size_iso_a0, - xpoid_val_medium_size_iso_a1, - xpoid_val_medium_size_iso_a2, - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_iso_a5, - xpoid_val_medium_size_iso_a6, - xpoid_val_medium_size_iso_a7, - xpoid_val_medium_size_iso_a8, - xpoid_val_medium_size_iso_a9, - xpoid_val_medium_size_iso_a10, - xpoid_val_medium_size_iso_b0, - xpoid_val_medium_size_iso_b1, - xpoid_val_medium_size_iso_b2, - xpoid_val_medium_size_iso_b3, - xpoid_val_medium_size_iso_b4, - xpoid_val_medium_size_iso_b5, - xpoid_val_medium_size_iso_b6, - xpoid_val_medium_size_iso_b7, - xpoid_val_medium_size_iso_b8, - xpoid_val_medium_size_iso_b9, - xpoid_val_medium_size_iso_b10, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_folio, - xpoid_val_medium_size_invoice, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_quarto, - xpoid_val_medium_size_iso_c3, - xpoid_val_medium_size_iso_c4, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_c6, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_10x13_envelope, - xpoid_val_medium_size_na_9x12_envelope, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_na_7x9_envelope, - xpoid_val_medium_size_na_9x11_envelope, - xpoid_val_medium_size_na_10x14_envelope, - xpoid_val_medium_size_na_number_9_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_a, - xpoid_val_medium_size_b, - xpoid_val_medium_size_c, - xpoid_val_medium_size_d, - xpoid_val_medium_size_e, - xpoid_val_medium_size_jis_b0, - xpoid_val_medium_size_jis_b1, - xpoid_val_medium_size_jis_b2, - xpoid_val_medium_size_jis_b3, - xpoid_val_medium_size_jis_b4, - xpoid_val_medium_size_jis_b5, - xpoid_val_medium_size_jis_b6, - xpoid_val_medium_size_jis_b7, - xpoid_val_medium_size_jis_b8, - xpoid_val_medium_size_jis_b9, - xpoid_val_medium_size_jis_b10 -}; -static XpOidList ValidMediumSizes = { - ValidMediumSizesOids, XpNumber(ValidMediumSizesOids) -}; - -static XpOidDocFmt DefaultDocumentFormat = { - "Postscript", "2", NULL -}; - -static XpOid ValidAvailableCompressionsOids[] = { - xpoid_val_available_compressions_0, - xpoid_val_available_compressions_01, - xpoid_val_available_compressions_02, - xpoid_val_available_compressions_03, - xpoid_val_available_compressions_012, - xpoid_val_available_compressions_013, - xpoid_val_available_compressions_023, - xpoid_val_available_compressions_0123 -}; - -static XpOidList ValidAvailableCompressions = { - ValidAvailableCompressionsOids, XpNumber(ValidAvailableCompressionsOids) -}; - -static XpOid DefaultAvailableCompressionsOids[] = { - xpoid_val_available_compressions_0123, - xpoid_val_available_compressions_0 -}; - -static XpOidList DefaultAvailableCompressions = { - DefaultAvailableCompressionsOids, XpNumber(DefaultAvailableCompressionsOids) -}; - - -/* - * init struct for XpValidate*Pool - */ -XpValidatePoolsRec RasterValidatePoolsRec = { - &ValidContentOrientations, &DefaultContentOrientations, - &ValidDocFormatsSupported, &DefaultDocFormatsSupported, - &ValidInputTrays, &ValidMediumSizes, - &ValidPlexes, &DefaultPlexes, - &ValidPrinterResolutions, &DefaultPrinterResolutions, - &ValidEmbeddedFormatsSupported, &DefaultEmbeddedFormatsSupported, - &ValidListfontsModes, &DefaultListfontsModes, - &ValidRawFormatsSupported, &DefaultRawFormatsSupported, - &ValidSetupProviso, - &DefaultDocumentFormat, - &ValidAvailableCompressions, &DefaultAvailableCompressions -}; diff --git a/hw/xprint/spooler.c b/hw/xprint/spooler.c deleted file mode 100644 index 69b5eed0e..000000000 --- a/hw/xprint/spooler.c +++ /dev/null @@ -1,202 +0,0 @@ -/* -Copyright (c) 2003-2004 Roland Mainz -Copyright (c) 2004 Sun Microsystems, Inc. - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __hpux -#include -#endif - -#include "spooler.h" - -/* - * The string LIST_QUEUES_* is fed to a shell to generate an ordered - * list of available printers on the system. These string definitions - * are taken from the file PrintSubSys.C within the code for the - * dtprintinfo program. - */ -#define LIST_QUEUES_AIX4 \ - "lsallq | grep -v '^bsh$' | sort | uniq" - -#define LIST_QUEUES_HPUX \ - "LANG=C lpstat -v | " \ - "awk '" \ - " $2 == \"for\" " \ - " { " \ - " x = match($3, /:/); " \ - " print substr($3, 1, x-1)" \ - " }' | sort | uniq" - -#define LIST_QUEUES_OSF \ - "LANG=C lpstat -v | " \ - "nawk '" \ - " $2 == \"for\" " \ - " { print $4 }' " \ - " | sort | uniq" - -#define LIST_QUEUES_UXP \ - "LANG=C lpstat -v |" \ - "nawk '" \ - " $4 == \"for\" " \ - " { " \ - " x = match($5, /:/); " \ - " print substr($5, 1, x-1)" \ - " }' | sort | uniq" - -/* Support both normal and LPRng output of "lpc status" */ -#define LIST_QUEUES_BSD \ - "PATH=\"${PATH}:/usr/bin:/usr/sbin:/bin:/sbin\"\n" \ - "export PATH\n" \ - \ - "which_tool()\n" \ - "{\n" \ - " echo \"${PATH}\" | tr \":\" \"\n\" | while read i ; do ls -1ad \"${i}/${1}\" 2>/dev/null ; done\n" \ - "}\n" \ - \ - "(\n" \ - "WHICH_LPC=\"`which_tool lpc`\"\n" \ - \ - "if [ \"`which_tool nawk`\" != \"\" ] ; then\n" \ - " NAWK=\"nawk\"\n" \ - "else\n" \ - " NAWK=\"awk\"\n" \ - "fi\n" \ - \ - "[ \"${WHICH_LPC}\" != \"\" ] && (LANG=C lpc status | ${NAWK} '/^[^ ]*:$/ && !/@/ && !/ / { print $1 }' | sed -e /:/s///)\n" \ - "[ \"${WHICH_LPC}\" != \"\" ] && (LANG=C lpc -a status | ${NAWK} '/^[^ ]*@[^ ]/ && !/:$/ { split( $1, name, \"@\" ); print name[1]; }')\n" \ - ") | egrep -v -i \" |^all$\" | sort | uniq" - -#define LIST_QUEUES_SYSV \ - "PATH=\"${PATH}:/usr/bin:/usr/sbin:/bin:/sbin\"\n" \ - "export PATH\n" \ - \ - "which_tool()\n" \ - "{\n" \ - " echo \"${PATH}\" | tr \":\" \"\n\" | while read i ; do ls -1ad \"${i}/${1}\" 2>/dev/null ; done\n" \ - "}\n" \ - \ - "(\n" \ - "WHICH_LPSTAT=\"`which_tool lpstat`\"\n" \ - \ - "if [ \"`which_tool nawk`\" != \"\" ] ; then\n" \ - " NAWK=\"nawk\"\n" \ - "else\n" \ - " NAWK=\"awk\"\n" \ - "fi\n" \ - \ - "[ \"${WHICH_LPSTAT}\" != \"\" ] && (LANG=C lpstat -v | ${NAWK} ' $2 == \"for\" { x = match($3, /:/); print substr($3, 1, x-1) }')\n" \ - ") | egrep -v -i \" |^all$\" | sort | uniq" - -#define LIST_QUEUES_SOLARIS "LANG=C lpget -k description " \ - "`lpstat -v " \ - "| nawk '$2 == \"for\" { x = match($3, /:/); print substr($3, 1,x-1) }' " \ - "| sort -u` " \ - "| nawk -F: ' NF == 2 { name=$1 } " \ - " NF == 1 { sub(\"^.*description\\( - undefined|=\\)\",\"\"); " \ - " printf \"%s\txp-printerattr.descriptor=%s\\n\", name, $1 } '" - -#define LIST_QUEUES_OTHER \ - "LANG=C lpstat -v | " \ - "nawk '" \ - " $2 == \"for\" " \ - " { " \ - " x = match($3, /:/); " \ - " print substr($3, 1, x-1)" \ - " }' | sort | uniq" - -#define DEFAULT_SPOOL_COMMAND_HPUX "/usr/bin/lp -d %printer-name% -o raw -n %copy-count% -t %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_BSD "/usr/bin/lpr -P %printer-name% -#%copy-count% -T %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_SYSV "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_SOLARIS "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_OTHER "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%" - - -/* List of spooler types and the commands used to enumerate - * print queues and submit print jobs */ -XpSpoolerType xpstm[] = -{ - /* OS-specific spoolers */ - { "aix", LIST_QUEUES_AIX4, DEFAULT_SPOOL_COMMAND_OTHER }, - { "aix4", LIST_QUEUES_AIX4, DEFAULT_SPOOL_COMMAND_OTHER }, - { "bsd", LIST_QUEUES_BSD, DEFAULT_SPOOL_COMMAND_BSD }, - { "osf", LIST_QUEUES_OSF, DEFAULT_SPOOL_COMMAND_OTHER }, - { "solaris", LIST_QUEUES_SOLARIS, DEFAULT_SPOOL_COMMAND_SOLARIS }, - { "sysv", LIST_QUEUES_SYSV, DEFAULT_SPOOL_COMMAND_SYSV }, - { "uxp", LIST_QUEUES_UXP, DEFAULT_SPOOL_COMMAND_OTHER }, - /* crossplatform spoolers */ - { "cups", LIST_QUEUES_SYSV, DEFAULT_SPOOL_COMMAND_SYSV }, - { "lprng", LIST_QUEUES_BSD, DEFAULT_SPOOL_COMMAND_BSD }, - /* misc */ - { "other", LIST_QUEUES_OTHER, DEFAULT_SPOOL_COMMAND_OTHER }, - { "none", NULL, NULL }, - { NULL, NULL, NULL } -}; - -/* Used by Init.c and attributes.c */ -XpSpoolerTypePtr spooler_type = NULL; - -XpSpoolerTypePtr XpSpoolerNameToXpSpoolerType(char *name) -{ - XpSpoolerTypePtr curr = xpstm; - - while( curr->name != NULL ) - { - if( !strcasecmp(name, curr->name) ) - return curr; - - curr++; - } - - return NULL; -} - -static char *spooler_namelist = NULL; - -char *XpGetSpoolerTypeNameList(void) -{ - if( spooler_namelist ) - return spooler_namelist; - - return XPDEFAULTSPOOLERNAMELIST; -} - -void XpSetSpoolerTypeNameList(char *namelist) -{ - spooler_namelist = namelist; -} - - diff --git a/hw/xprint/spooler.h b/hw/xprint/spooler.h deleted file mode 100644 index 4e056ceeb..000000000 --- a/hw/xprint/spooler.h +++ /dev/null @@ -1,75 +0,0 @@ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef SPOOLER_H -#define SPOOLER_H 1 - -/* -Copyright (c) 2003-2004 Roland Mainz - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -/* - * Define platform-specific default spooler type - */ -#if defined(sun) -#define XPDEFAULTSPOOLERNAMELIST "solaris" -#elif defined(AIXV4) -#define XPDEFAULTSPOOLERNAMELIST "aix4" -#elif defined(hpux) -#define XPDEFAULTSPOOLERNAMELIST "hpux" -#elif defined(__osf__) -#define XPDEFAULTSPOOLERNAMELIST "osf" -#elif defined(__uxp__) -#define XPDEFAULTSPOOLERNAMELIST "uxp" -#elif defined(CSRG_BASED) || defined(linux) -/* ToDo: This should be "cups:bsd" in the future, but for now - * the search order first-bsd-then-cups is better for backwards - * compatibility. - */ -#define XPDEFAULTSPOOLERNAMELIST "bsd:cups" -#else -#define XPDEFAULTSPOOLERNAMELIST "other" -#endif - -typedef struct -{ - const char *name; - const char *list_queues_command; - const char *spool_command; -} XpSpoolerType, *XpSpoolerTypePtr; - -/* prototypes */ -extern XpSpoolerTypePtr XpSpoolerNameToXpSpoolerType(char *name); -extern void XpSetSpoolerTypeNameList(char *namelist); -extern char *XpGetSpoolerTypeNameList(void); - -/* global vars */ -extern XpSpoolerTypePtr spooler_type; -extern XpSpoolerType xpstm[]; - -#endif /* !SPOOLER_H */ - diff --git a/include/dix.h b/include/dix.h index 64035fec7..c26b90767 100644 --- a/include/dix.h +++ b/include/dix.h @@ -116,9 +116,6 @@ typedef struct _Client *ClientPtr; /* also in misc.h */ typedef struct _WorkQueue *WorkQueuePtr; -#ifdef XPRINT -extern ClientPtr requestingClient; -#endif extern ClientPtr *clients; extern ClientPtr serverClient; extern int currentMaxClients; diff --git a/mi/miinitext.c b/mi/miinitext.c index e31ee2ca4..5e0c22953 100644 --- a/mi/miinitext.c +++ b/mi/miinitext.c @@ -88,34 +88,6 @@ SOFTWARE. #undef GLXEXT #endif -/* Make sure Xprt only announces extensions it supports */ -#ifdef PRINT_ONLY_SERVER -#undef MITSHM /* this is incompatible to the vector-based Xprint DDX */ -#undef XKB -#undef PANORAMIX -#undef RES -#undef XINPUT -#undef XV -#undef SCREENSAVER -#undef XIDLE -#undef XRECORD -#undef XF86VIDMODE -#undef XF86MISC -#undef XFreeXDGA -#undef XF86DRI -#undef DPMSExtension -#undef FONTCACHE -#undef COMPOSITE -#undef DAMAGE -#undef XFIXES -#undef XEVIE -#else -#ifndef LOADABLEPRINTDDX -#undef XPRINT -#endif /* LOADABLEPRINTDDX */ -#endif /* PRINT_ONLY_SERVER */ - - extern Bool noTestExtensions; #ifdef BIGREQS @@ -237,9 +209,6 @@ typedef void (*InitExtension)(INITARGS); #ifdef XKB #include #endif -#ifdef XPRINT -#include -#endif #ifdef XCSECURITY #include "securitysrv.h" #include @@ -319,9 +288,6 @@ extern void SecurityExtensionInit(INITARGS); #ifdef XSELINUX extern void SELinuxExtensionInit(INITARGS); #endif -#ifdef XPRINT -extern void XpExtensionInit(INITARGS); -#endif #ifdef XF86BIGFONT extern void XFree86BigfontExtensionInit(INITARGS); #endif @@ -522,7 +488,7 @@ InitExtensions(argc, argv) char *argv[]; { #ifdef PANORAMIX -# if !defined(PRINT_ONLY_SERVER) && !defined(NO_PANORAMIX) +# if !defined(NO_PANORAMIX) if (!noPanoramiXExtension) PanoramiXExtensionInit(); # endif #endif @@ -559,7 +525,7 @@ InitExtensions(argc, argv) #ifdef XTRAP if (!noTestExtensions) DEC_XTRAPInit(); #endif -#if defined(SCREENSAVER) && !defined(PRINT_ONLY_SERVER) +#if defined(SCREENSAVER) if (!noScreenSaverExtension) ScreenSaverExtensionInit (); #endif #ifdef XV @@ -571,7 +537,7 @@ InitExtensions(argc, argv) #ifdef XSYNC if (!noSyncExtension) SyncExtensionInit(); #endif -#if defined(XKB) && !defined(PRINT_ONLY_SERVER) +#if defined(XKB) if (!noXkbExtension) XkbExtensionInit(); #endif #ifdef XCMISC @@ -589,9 +555,6 @@ InitExtensions(argc, argv) #ifdef XSELINUX if (!noSELinuxExtension) SELinuxExtensionInit(); #endif -#ifdef XPRINT - XpExtensionInit(); /* server-specific extension, cannot be disabled */ -#endif #ifdef TOGCUP if (!noXcupExtension) XcupExtensionInit(); #endif @@ -604,7 +567,7 @@ InitExtensions(argc, argv) #ifdef XF86BIGFONT if (!noXFree86BigfontExtension) XFree86BigfontExtensionInit(); #endif -#if !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS) +#if !defined(NO_HW_ONLY_EXTS) #if defined(XF86VIDMODE) if (!noXFree86VidModeExtension) XFree86VidModeExtensionInit(); #endif @@ -678,9 +641,6 @@ static ExtensionModule staticExtensions[] = { #ifdef XCSECURITY { SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL, NULL }, #endif -#ifdef XPRINT - { XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL }, -#endif #ifdef PANORAMIX { PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension, NULL, NULL }, #endif diff --git a/os/utils.c b/os/utils.c index f27434291..9da8fcd94 100644 --- a/os/utils.c +++ b/os/utils.c @@ -128,10 +128,6 @@ OR PERFORMANCE OF THIS SOFTWARE. #include "picture.h" #endif -#ifdef XPRINT -#include "DiPrint.h" -#endif - _X_EXPORT Bool noTestExtensions; #ifdef BIGREQS _X_EXPORT Bool noBigReqExtension = FALSE; @@ -622,9 +618,6 @@ void UseMsg(void) ErrorF("-render [default|mono|gray|color] set render color alloc policy\n"); #endif ErrorF("-s # screen-saver timeout (minutes)\n"); -#ifdef XPRINT - PrinterUseMsg(); -#endif ErrorF("-su disable any save under support\n"); ErrorF("-t # mouse threshold (pixels)\n"); ErrorF("-terminate terminate at server reset\n"); @@ -1036,12 +1029,6 @@ ProcessCommandLine(int argc, char *argv[]) i = skip - 1; } #endif -#ifdef XPRINT - else if ((skip = PrinterOptions(argc, argv, i)) != i) - { - i = skip - 1; - } -#endif #ifdef AIXV3 else if ( strcmp( argv[i], "-timeout") == 0) {

Name

Xprt — Print server for X Version 11

Synopsis

Xprt [-ac] [-audit level] [-pn] [-fp fontpath] [-XpFile file] [-XpSpoolerType spoolername] [:display]

DESCRIPTION

Xprt is the Xprint print server - for version 11 of the X Window system for non display devices - such as printers and fax machines.

Xprint is an advanced printing system which enables X11 - applications to use devices like printers, FAX or create - documents in formats like PostScript, PCL or PDF. It may be used by - clients such as mozilla. -

Xprint is a very flexible, extensible, scalable, client/server - print system based on ISO 10175 (and some other specs) and the X11 - rendering protocol. - Using Xprint an application can search, query and use devices like - printers, FAX machines or create documents in formats like PDF. - In particular, an application can seek a printer, query supported - attributes (like paper size, trays, fonts etc.), configure the printer - device to match it's needs and print on it like on any other X device - reusing parts of the code which is used for the video card Xserver. -

USAGE

- Although Xprt may be invoked from the command line, it is - preferable to run it as a daemon via the init script - /etc/init.d/xprint (where this script exists). -

Client programs such as mozilla will require environment - variable ${XPSERVERLIST} to be set, identifying the - "display" on which Xprt is running. This variable may be set - for all users via /etc/profile (or similar), using - /etc/init.d/xprint get_xpserverlist: -

export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`

OPTIONS

Many of Xprt's command line options are shared in common - with the usual X servers (see Xserver(1x)). - Commonly used options include:

:display

The X server runs on the given display. If multiple X - servers are to run simultaneously on a host, each must - have a unique display number. Note that the standard X - server (for video displays) typically runs on display - :0. If /etc/init.d/xprint is used - to invoke Xprt, it may be configured to automatically assign an available - display number.

-ac

disables host-based access control mechanisms. Enables access - by any host, and permits any host to modify the access control - list. Use with extreme caution. This option exists primarily - for running test suites remotely.

-audit level

sets the audit trail level. The default level is 1, meaning - only connection rejections are reported. Level 2 additionally - reports all successful connections and disconnects. Level 4 - enables messages from the SECURITY extension, if present, - including generation and revocation of authorizations and - violations of the security policy. Level 0 turns off the audit - trail. Audit lines are sent as standard error output.

-fp fontpath

sets the search path for fonts. This path is a comma - separated list of directories which Xprt searches for - font databases.

-pn

permits the server to continue running if it fails to - establish all of its well-known sockets (connection - points for clients), but establishes at least - one.

-XpFile file

Sets an alternate Xprinters file (see section FILES).

-XpSpoolerType spoolername

- Defines the spooler system to be used for print job spooling. - Supported values in xprint.mozdev.org release 009 are: -

aix
aix4
bsd
osf
solaris
sysv
uxp
cups
lprng
other
none

- (multiple values can be specified, separated by ':', the first active spooler will be chosen). - The default value is platform-specific and can be obtained via -

Xprt -h

. -

ENVIRONMENT

- The following environment variables are recognized by the X print server - (environment variables recognized by Xprint clients are described in - Xprint(7)): - -

${XPCONFIGDIR}

This environment variable points to the root - of the Xprint server configuration directory hierarchy. - If the variable is not defined, the default - path is be assumed. The default path may be - /usr/X11R6/lib/X11/xserver/, - /usr/lib/X11/xserver/, - /usr/share/Xprint/xserver/ or - /usr/openwin/server/etc/XpConfig, depending on the - system, and may be configured in /etc/init.d/xprint.

${LANG}

- This environment variable selects the locale settings used by the Xprint server. - Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) - which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). - If ${LANG} is not set "C" is assumed. -

FILES

${XPCONFIGDIR}/${LANG}/print/Xprinters, ${XPCONFIGDIR}/C/print/Xprinters

- `Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat(1) or other commands - should be used to automatically supplement the list of - printers. -

${XPCONFIGDIR}/${LANG}/print/attributes/printer, ${XPCONFIGDIR}/C/print/attributes/printer

- The `printer' file maps printer names to model - configurations (see `model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat(1) in the Xprinters - file, setting up defaults in `printer' becomes all the - more important. -

${XPCONFIGDIR}/${LANG}/print/attributes/document, ${XPCONFIGDIR}/C/print/attributes/document

- The `document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. -

${XPCONFIGDIR}/${LANG}/print/attributes/job, ${XPCONFIGDIR}/C/print/attributes/job

- The `job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. -

${XPCONFIGDIR}/C/print/models/PSdefault/model-config, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf

- The `model-config' file has attributes that describe the - printer model's capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. -

${XPCONFIGDIR}/C/print/ddx-config/raster/pdf, ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl, ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript

- The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. -

SEE ALSO

Xprint(7), X11(7), xplsprinters(1x), xprehashprinterlist(1x), xphelloworld(1x), xpxmhelloworld(1x), xpawhelloworld(1x), xpxthelloworld(1x), xpsimplehelloworld(1x), Xserver(1x), libXp(3x), libXprintUtils(3x), libXprintAppUtils(3x), XmPrintShell(3x), XawPrintShell(3x), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)

AUTHORS

- This manual page was written by - Drew Parsons and - Roland Mainz , - with some help from the man page at - http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86 - man page for Xserver(1). -

R_qv!peue%7|+Pb%oh%u9HKaYj2ok$uQ|4Fm1pI?rcyiaZTtveIZjBl9fD zZp_)E?AmeLAN8WF{Sa;Zv+bnh!hb_{d3HnBIb$wyEwio2TS%28AtTh(A-UV8=~=tI5;1oK3C>07xqN{BhyYh zmuGBNc5Jb2U~V#hV{hk1`tKL*GCq?1Nj&D>%;WJK{$4o6HA|I^oObq&$8XJ88RJ;y zTuXo1cFauqgl*Yxn$MW~lFDLp<8r=bRm^UB%LbP1I>UYj^di0JqFbyTb64sL+P{?c zZ>&4@BHJ!G$4=@8InR#@t~J?OZOfEhJK}W2?bq7MWB%Iq)E%t%8PP7R(>Kw6+RT5h zTBV*S{l&OsC7owJp9-JIzNB-4OP?9~LcNG}(XO4alrxUv?wnb98*D*oZ_*PSR^}jl z#_C^5F6Lgl{)FIWt}pE^duyCePT89>Tlr%_>cF(dX#P`^&B=qD(?q)rSL(l|e^9pZ zdwn%?R&|}rU6Hd#@yG+#4D0Bq{cU}-@DX+4SGGIIJH$LOHt0d?=wwh~d^63+z{|o(ve&r*cV)}#6%=;{zw&muDjG3VSf&KPIS4+RGhQXY0Q{WP8tM*kkiS)!Xa1`2gE>-c~?+WkMI%-74EL*4rlPHNNfm zJ#$<0E%na$MS3acdFnZSnP?MIvr`YIkGQmx+O<6=ub?CC^GnsNw}<}pENfb48|koS zEEPJOIK);cay$E1)|H<1vCy#uCv!NIx{_-=_1l-p-%PEOoH<*L+1lxUM$ETMr|j>s z|K}z03&}WHzlZHzBi4?w(;T*RrVst*DSrQzrM%;?Vup$9G~uh{cueE_)+Mq0abrsV zSpEsm=3K`$dkvna|DqgQj2q|Xj*4;YNoGE(pOxnH_RBdb^{02Bn-_f1&GQfR;2(7J z-W7shYRuGus<4Z2Ii}97cK`+YxKyYf**5pAdA4785 zgXA(F^6QfaseH(Pmpq96tQQNr_0S+Sih0I0igCJmpqn#J+}_ilF=;n#>$RBUn2TeK ze>U&2nAR!1QZb`k##CIzR9wX|NWF^YKiDq*-$^aiQf#N}t<(yxK}gNX`mzT<(}Q<) z^UTRn{=Qz6+172(YL@)toPJ!hQoCY$CFYDKHA=;gav49$Wqid|OoKBinY#3)=v#v` z<$3Zmk|(5$BJUDhdpjj!>7>8lQj4;eh#WMjQOq-LkJc-F7)SUhuIiOswM*Gm4yJc{ ztu5$CUwr8Z`=`IdCNvHAFdwN`DrS_+m{BfcDz4&aQm?Yk2)&BT*0%{AmO3fznQem0 z?;sZ9A+ zxQ{ACAM`~(^hXf}U?2wJN(_b@#TbGTet4I0i&c(cxC+BD0u{I#BQXj;!!;O8<%hY#1{I@F*Re$?@Ue*%ICfgit^h(=686DH$&+<>3sMua2(;}26X71J=C z+r^pO?KR^jZf0)AEog<9akDW8bGh+r$9&v|+p&OK);sV^+=;umZaT1#+t0;V!tc0c z9It!PiRD{4`MaeU@g}1OY$LXz(#DsW^BR3cm$8)F+9#Mx+k#}+prx^ zVF#YZPVD0T@mcO4cViDVZ7=rW1?_svL#Sg1c4uzF}x3SBd(?oxAbrstli5 zM#PImp8hD7pNij|yJ`>X5&4Sx$(l_2-Q=wdvE$U`eI z$vCpC;?gGaW*_uioWrzyPS2mdIFE91zQ&m__eacxc-!Lbh|Pg$pU8d@?PkA64vkae z)!jF$tztawLuC7V#F2d{+sSu5%8M9k4DCaD?(aC*VmDJpWspb>n)a!O)0l}{xtj^>*cwa~?A{G-%h^53b;vV8& zqLWxotRU_qRucCU4-l(}2Z`0h8e%Q6j#y7TL~I~75}Sz4#1`UV;t}Fe;xXcJ;tAqO zVk@zY*iJk}>>!>db`raYXNYHs=ZM|J9^!doFR_n!f!I$RAPy2Q5-$-i6NiYyL>KW2 X@hb5e@j7vY_`m+8{UH1QejfC1iyIH4 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00075.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00075.pmf deleted file mode 100644 index 1c7edf6536a12ea1a333c6140927356b64690c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00076.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00076.pmf deleted file mode 100644 index 2f077f40f62db0b74fffcb1069d4d316f74020b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 OUw_2AM*qX_gZ>4l11vEB diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00079.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00079.pmf deleted file mode 100644 index 45d6906baa9805ce4b02fdd662195268f965ddc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5656 zcmdUzd2keU7RSGR&7g8$9tch(Mh++D0uoSg$V`$6lbOlP1QLiw41pk!K!PB+t_X6- zjmRN~cyMS?K~NMFtWs;y+O@QHJ!;)$EmwEfJ=C>!x7HHK?Dze;X9!x#Zu!?v)o1$K zuix+W`~CXYulv{9)cV$Z%<8k)iVZ#s`-sJ3? z^u4khu*lhegZrMI+@YVumw2D`u{GsYM4g*q(L<8xPrM?E$Y>FMQX(QjCW*M6%plST z^Txdm>IT%g*$b5!U-l zqLpxAw7UNu(<5kJX@}xv6>Xg4qoy@l^yvHFaTMMF5HEvl?1G;fDF1So5sO zO_&e}mX;;#V`H0VPC-263n$Qmcpxz$=uec{hr-P*vnJ1k&+o5`Cu%|g+lpwgIuNRh z2PXy)jReC9TgC$MNT@0ijD+i|(P5{i!w%w6UvV&8iYR>J12JD|piZ3*#bv%2&s`S_ zlm_Doc4K;Lb7A4IqV$14xH#gMmbobQMeE8`2T+|7B@w3Kix&sj3#I)5d&ll6Dyw{c z=TveS-qbL8zcn;o84hoY*Y3L4o0n5i=*=6Jlj9v$Sfq%03r7^>c%1~jx$p-{d{v=D zo%8|G;!vGRK#hC9K{?@mgIaTEUz43TbzV+u{%yI#i*j-ks0s%ws{+1wJW?F=qbM(@ zFmFWe@ciNVg(!|hYhrSFFqpccLb~*=Bt4R($LlGWl9SgkykPh!&-jLx*6Gbnp4{xb z>^$(A1Y#2+F@I{fIW+>YP%s>*i$>x>xkk(&WlEF6 zJ*lxZc~Z;JUTc5z^dTPo)cr*#xXZM!&w2hY$~ng?oahxgtQqLX)(5mRdYhvU8pq5z z){L{)(>}=fz=YL^E2$&KE7Wtal6tMXrIWOk5)gA$x}>dCiq+a-y@+jjzageSAThOV z)R*fuY29M1Wt>y-gq8zJYq8wvYA#Tu!a) zVQ~5kRoSJF0psnoz07!# zx?cH=FP_wV>t7iC9o^UXr|P3zuWVN|?UQA7Nyi-QZgj74{QFy5)Op1}YW zp7eR6)>mTJTIiEy{W_iJ?PiAAN`DXSrgs=Pnp|1ubiu^bu=BP zry3u-FBw)|I?nrgBj;5}lSfR)xlydWm$vuOw@`09{Z}CQx!KD^`Y4Ph`xtWF;cDY~=@ z6E@4!dYsXua+9`|`nyJd$3IKothbqGRUgNgx%A(s`qj($f-!B~L#~CRuQxtYc8Sx& z_*}HgxsNfE@#XOg?9tybu4P|#QSXu(<@9TkzKr%++QYQ>*0;026HlLz2G%}nzf-&H z`{*qdbCI#0bJDLZpvyqxed^gNw?2}axiTsD5sY>VY50m(3`-9$w&e~$?a=mvtW})7q?`Hm-!^kpD@mkpVmsuaUq&|A@+IroYRF4! zsr8a|k}*9O(u^ZMJ*)%DpOW)xXSz0yG`sK~pCNChcAc>ns(Vn?ob&X?4))p(x~7BP zsq{o^HSbfqE;%(yjlZf(jA=iwS)yOgOQ+gfsMlmNp z(d(&eL_^gd_C?~Wx@6TVd(b$-d(b}bceQ<9+g_{M+FIp+?z|VKn6*h+EBKA$oU5ml zkE&5l%%d-$*MMc&}j$$|@Ru2wGM zRk{S7>DU$B&>cO{6TQ$Ieb5(|;xaz-ui*RAm0SZ2;9T<{16N}pGI0&Ea4iP$?QsZ( z;yQSdjq8!a7w0_WqX5G&93xQ3_ob1%S8u?L7>zNw2|kQPG1pH4l%N!42%;S05aRp` zBf=NF#*-6!9+|#EpEmws7wCnA8y5D+=hBC`Wm>lnTAG8=h|%sW?~ka z(2Uub!v#t!=Hd=6iFXAYU;U&C`@B>`Q`|hI!4sW4t-(`}KLWWqRh$&SYtfjmGqk_X8qvYBilTggLY8`(~Fke%dVvWq-I9wm>F$H{K8hwLT$ z$P?sA(nj`^r^wUf8FGLeB+rsVhO8u;kllm?(GWsH!Xp8KM&gTy zBCqfeLTFWW59<>L^^n35jY!=&dJRbk*p7YuH z&ToGAcYk;0&Tr<9R$V#A13)94$z1}tgInF%pT_Oiv>DF+xr=~O?s%R3_t`MYhGU(5 zgT4bU0~R{_Z*qUg72Khpj4$Jz>1J!nK1B7+u((_%kw|<}WRS5^?Pho{5vKsACTWm@i+2!V&?JhTO#J#X~EN% zq7y8uJxI}$hww8BFSo{Wifh?iV;9;zw18%9rL=4&d!;x=ekH|k$;VQhVwPR$E6=b# zP(~g}k58D9($P%Tb^(E3aIopw4}-A^vc$Aq`1$1`bcIzCF3YKQ$>W!=DsIaX2)gI2edT z3bI1k$Vm35Cyz=>OG!&fM^-^$S&_U%sGdKRd-?ftSl>(38=7A+tG3eX^NyV6Pp(Q! zsT|`ishZbNTVLl*8lF5n8N4#VqKO4X+3rc_6bTmPg~Gw|!h%RhUMXhbnxeU(tnuMs zB*M`|qM>j=9hdiE$IsK(ncS<|w`g6o{p~GhGdWE+dzw9yJ-OO<9iBf%IeomsNN04I zGtrl=Tl5urtF5&`Vw;$3&OG-C?dy$@A$_i`ou~Xm z;x{q9$QT*(`P}fw>|r%tJN_7PI_A@)_taa(3jCaX4bZQqUZ!&1XuQR-Y_M34@TOsz z)uN$&Aa%U`4bjFp>Rh41Gt4uY=jSlTwbhtnoT8mS>jUEuwW>B)VeT+XY=7%jbEkRS zwp$;Xm$^RHyJnfIvD$oxJ~QEEoVOD0j`<%Gxjg?WrghkuBATgry{r@FM~rXVj~XM4 z21g(9Oyl*n?Z*>(C?EMmXfltg__FPL#&@xPE6gL(uJM{O|HoqXOO2A)c-NT8ZhV|f zSfX;1a|Y%K66>)PA5h}UJm>N=hTrv+@ZK^GUPKsam_yfnjNyXo2 zyvzHvu6+pY@iiyD?Kff`^Us#G7axf+9M_C<=c!YTS;jQGcA;Kx)2q#z^D}6_Pv4|; zBlFp;|5?p3)>7+3W00{`%+(IjXO@v@j4<=m*w<FPHJN5cl z%)f|%`khYx1J!)6^WR}^PLStH*5MuIqL^MBXAg(GA`C{?P+HaTR*;Z731FId{B#cj|}!7=VEo zguxhsp|}RuViQJ*@g7a*(rGltAQRW&dfdRJSpYX83)u*AEj5m_ zE`*yf9(l+|7zKQ7pMWAnz}HtUu_mGvWtfDUF&VeuR+L*m`G+Z}z*JOn@mIw)&UDmp zQ8EKFxsIESI@Dth=3*WiFdw(!b~JKHw*XDJ6L;Zm+=F|$m|TR#T;JV?`>~X7hRd)V zE3gu)(2Uhs!v)_uJc#w!fQPUV4`UNHqXk>A6^~#W9>sR-z+>2n$MFPq;YmD&r_qWw z?8Y;A7JIlde4Z=AeRu&cVm}VxAP(U$Uc$>bf}^pu>MK9_L@+>pMP+T>{Q8C(BqiU( z#ov$l0RcV_Cl2G{_cXAW3rWezF2LK{fKlh{WAeDPKewyHU$)ET%yirQ&{oEf$QUlN z&6)RsM?bT9wgouSsbgPiiEKCD56I)|Hrn~c`?_spJbB#Rm*bGJrA<=xCp%}kb;smx zWn0;YyNw^4)Dn4IZe@Jw7mtkT#&=`L9Az7cJXW&@82636mHi%ST&x|%cgWBx(O(;& zt=BeaiP~tbht^B;YKu4}7jjZQ;7rPuYC>ApIyDtH;X^(GJesZv&CpD(5f^C*nx++I z`O=4Zv+Ac+c?&D1S9wRKj6#yXnDb(pwp?4It<_d*&025mer<`iR9mIKEy&#B$0D`N zQ*LFRZ*ZHNZtu%$=i1~}j%iIB5Wdq!+BSX!Ec>)$uE=8(uCd#{Rt(s5tmjl!ldC8B z0Yeajm?VLCi2N#ZF_F*zOGqaon_o)!Wr+0-taxC}gIe9lk0Jab#M%eB`chTDC%0FT zUPP`66G?BX}(vS2f1BhG!4I+bye9Ib2I0jZpuuk&Ll?*2%2(K?ICRj7UstMLj zzGaa#BHwU$?$pPp(cF$9@{Q~|ay_|$j3ohbBgrD!BuH||I3l0w^2u@&8Bg*^J_(Zo zQb;C{A`&4{!t<;?Z%yR3l$4Q4joeNe$sJ??X(F5ptioLRl6%O#WFc8Z7Lz69K5{=>^K+r^wT!m9&xF6 zB!st59*P166?{by2wHqV@u)}ZY4z0B9?@ERJk{FvP=Rc}zdO5|;2-t0{?*O-WWMv8 z-~G++-nsLexns0~GqyjS+jF#8vHf!$fLpoaj_tqChEv$^rr5qk z-$9oGOJe&cxS!gUJM@$I67NhmM^j!!^tl-pT_lNQ;t`QUMv2HJc_NC*WD&QMSwtG) zPSWuW{=1);1^l-zE*_;&sr5QewZU*sL*FVm-kFW+0l zbC(tQ#{?q9>_$~xZFct1oWuct$XA#vEz{uhhRgDG2QVQn@(P)TH{$cN7h31~ogJsA z7+2!Wjh#vk!xJAS&yR-2Bg5gT@;F`hc+yidvpwlUQ&T-dvvV|IPj+TzswbA9Ck?s& zJa0*`xJ>$hurFAq6VT({dthp)_rSWeIoAwMpK)h;UB+!`Svjd`#V82{#+CTJkw~F0 zkc*u3)a>+OX;~Rr8QJg^h9?%u<-xRhwRN>K=BLn9P#`_~QLb*u)g72$KD%m~+vCoh zo|;~fH8gdEyR>3nT~%$3J8f|K;B@c``HRLE7UjkVpA*Gj6byv?W#Pg|K&}|`iJOY^ z1HPL>{z!!ViWCPzUVS`q56Xn&FR5>Al2^3uGWr_FTTh-n%IUhXgO${flyAsQ^FRFL zp6Blv=X99~dlr7dy}9Q5D%sJ-IBTIb*PeBL2<>4NwP06jpF*vlfZW5Mx<r%zi1suG#WntEb!E(1=Os?q+F~_YC!#EH(YK6B z6Goa5puMxX*=#aXTKCZYg)x}+L6Spsk{ZYOmAXpJRp%4ArK(1)*%TerrwQFt{W9Ux z-?9=qWObkp>e{y0>PB6s`}mzzqwO*#LG?|-f4usRdY<+#GQ(z*+NS*tvy^(f&N*yt zW?$Au$FObK+G;hbRjppF+w3o^_ZVlE#EG79edgNB@p+ZH-g?I_rJcX%J9Y}S)IDH@ z{f4%4Y@^NgHv4VI9zAH!N%+7%kJP%ar@f1KkY4YUZaWjV|H>P=7-ik ztIo*>yX>_I|JPi1>6pv`-@CH3zvy$E+j3sXZJDcgJPumyBk{J;6Lw8Pzo}|CuY$%x zw%uv$jL(f|viVlR{-EkAbMNe*88fKnS!g{eV~)R@%eDPm>VfJb3u=eHrkAVN^fi(> zkfrWc4KaI)bxXqTQOo1@)`Qli5=URht=82NN5}7Jxpdzj|ptba6fO)T(V{OuX%(MFIm}1XSYvO%DjvcZ~WAS%cT@vTI$??&B{EPB1=2HFi z9uH~DY^S|h4Uubc_E*%f_t^VlwQHccl5yVE<4~<$ucKe9KPUOr>&7PhC0q6mBn-U&c4k!HJsZ&#O7YT z`B$^AU3u;!+9T?3>{p|_HSk=G*2ijvzE9iLoD16SRSjm7^`+Eayre2shFy7Hvgl(? z=bx@!s4!nMXV6|rd#!mu>jhG))kr3{~(iffcqsD0yDs=uV z+g@yZVDcU^4xp1yYV z)_J=$=`wn==Gb4_r7k(E=*6`2Wk~D2w0|DcZ&J%!8KMogkNR~-C+$mWh+T_Vjgp+5 zx)h7AYg8=0*0K1G-HEB|QrzDfs*>aW>X=H7`>WHmJN_+pldc<*kFHCuBS_RG#&Pq2 zu2D%n+O+GdcKS#=-K_Nq>pISY2~n93CHDJL$FyD7D8`h!6WF2Q4-Zl@2n)1Og0{+T)-C+F^#Vtos? z)uq^Z(=9X6FI}(VcGcFe^mhG9w-)d|ni7?@!&T~!@tT9tmRr|PsZsw~>)fKbszv&% z=ee$pF`cW{Nq@zz-+kPOGNN7@z~GC$0@H;HNnE{jWL3DBJ?e~0IIk{47j(ttxB}hK z9ao|UdZHJ4^9m%R53ji!eQ`DVp+By{wHSbbNWpcu9)sY)U<^SjU!>EKflLfV7KS04 zOQ_)(fg3Oqqi`daXkLtl54rFo4`Yyz0LJ2G1W|wx3i$#*4n>G?nN@;PjK>5_#3W3{ z6x@QTD2x8=A8tiCZo@P#0xP)InTbj+Pj2T*ZZ@h>gIdhNT+Blq=Hm`7>lSb!x)6)7 z786LgloJ9uoTO%94oLAtFRhtuom@b;G(Y)>#+eFu?d^81zYhT9>T+Tgl~|K zVH>t%2X^9dJb_(!5>H___FylbMicho89dA9%YLp7pT`S$5ij9oG~*Q<#38(j!#IMY zXi2;;AN#ojQBXdus%Cy|T_w`e$MUK9-~IsaT%h6)z=jgw0oG386V};Nd;;ck=8YfZ zAoeZSIsRgkc5*!4=BKvtI1(d{wE6g5E~g)9<7lS~wd5iBiLdzW_!HOI#{uyZWIx_! z!`2J;#V_7Q{3M4T_epH=+~=n{TDEb!#FRGizRFf|5_`OzY$ZoQj>|ELA?KE3qUG4+ ztNGIMl(UuihZdYcjxi1WjQ++ZW3!QL3^#fhy$!c_Ki{?eq$FxO`@XJ2PV#(o#z}FIE|=jYea=vCe2P z`WVZNrN#=Q-dJmFFg6-(S&?K|6Sa;$Pc(6|o>Ep`yw)?Yim zGDl=TeoW%M!FlG;ww}{fjd|#g6^dJn*u+JWh*a2)M4oi=X4#2Ib9wuer|4y*3z4rw zmy;_kW-;Lbd_9eVNtcqY=1S=z08~OH029gxQxyvfa z&r-xgWVJYi@cOc1@-3HS5PpVX<>Xs98Ah^+e1sZKMvxoGNHU7tNNyrtGMe~EF7cB* zGKS=n02xbeCP7j_LZpy{$v7fkd?KWnaGY6tc>%}-GLcLolgSiv3z7;_pATvoNsUo+NS!6b;CN-p%%pttithiv!<%B19kUI(ACiQ1PS?MeyoF}ZpU>yc4 zF>oJQLhdIIkfmf9Sx#1vm1GrJP1caLq@Fa8b)=E3CmYB{vWaXaTgX=OAbE&9OdcVR zlE=t4vYqT8JIUkZ39^ekNuDCR$sV$oJWZO&KJpBCmOMxHlLO>=@&b90yhL6m&Eyqw ckQ^eflEdT(IZ9f{G4g-?>wH1>KmG0J-?9|HrT_o{ diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00082.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00082.pmf deleted file mode 100644 index 2000dc057a80f5d9733eeeb1cac8ea325e14c02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5660 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00086.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00086.pmf deleted file mode 100644 index b7586ca61afa1edfe38954ab63e661c67809b964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00087.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00087.pmf deleted file mode 100644 index 82f054999a47d3768a254b79fca8c6b31643224c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5752 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 TWIs7T{;z+wUu6HEzX$yj(_7ox diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00090.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00090.pmf deleted file mode 100644 index 895cfe26ae18ce74bdd96a13ee4d4141a47a9a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00091.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00091.pmf deleted file mode 100644 index 3bdcae4ba33d7453c1e4c6bba4cbd68958e11025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 zcmdUzdvFv*9>>3%gxw^Y-JN|U;UTU(1kueUA&>xSSdt~#BiV%PhKGWYrv?H60t5vV zLXd}`AOS%GL=g}bR33sL0wq;=9-N-&U5QmvhZn^Xd?1B~n4SA}&rTBS>h9|FuS?}K z^PQf4{JN+6yVGNsJYj|jfPq-Zp;%xZ&oR;Ki9Dyr0sNQu;}d`eUU;I{AFyB}3l7%r zvwW2eSQNcJ&Fk3?UNE1ieq{m4Ke29qH|l#+Xds3cQJ zw;&I5NWw`T771~Qht;}xhQe}~hwY-&Zt^NwY~@LAH@_kOfj6GSVjRc`Z4Q__?Z z%DIzf)nKGQP*51w(uP!5O+={37YuWlLjLf`Kz_JTyOmcxed46)HIpX7m!Dq|3Xd-G zYd26D809aj2nFu(qqHOt3~RE?A1Wy-4+lzu6{FDZVsyI;gi3vRfnWh2j&Fp&%va#A zkS!vw&{xLhE6V%@fl!#esH~~Z$>}$s^@cx~SCTJEW+2a3T2UzbfKj>_TEZ}Vp*%l3 zB6YrByU;p|;pM*kXj9@gyzNKH8yy+17!7Zwx3%Y9Z%%ejrZ=-+dO8nT(L<@XZ{PI3 z>E39F-VEgXhx*Ek!WE(yD9tOXkRixH@7y~**tvI2#*Ch6nUm-CujxBJD