From dfae5860833782af557deb35e286d7e186fe3cf5 Mon Sep 17 00:00:00 2001 From: Roger Leigh Date: Sun, 26 Oct 2008 16:11:41 +0000 Subject: Imported Upstream version 4.3.99+cvs20050702 --- doc/FAQ.html | 10 +- doc/Makefile.am | 189 +- doc/Makefile.in | 998 +- doc/README.maintaining | 814 +- doc/appendices.texi | 15 - doc/copying.texi | 28 - doc/developer/Makefile.am | 191 + doc/developer/Makefile.in | 636 + doc/developer/copying.xml | 40 + doc/developer/dither.xml | 679 + doc/developer/escp2.xml | 1843 +++ doc/developer/gpl-appendix.xml | 502 + doc/developer/gutenprint.pdf | Bin 0 -> 426243 bytes doc/developer/gutenprint.xml | 59 + doc/developer/html-stamp | 0 doc/developer/introduction.xml | 62 + doc/developer/new-printer.xml | 883 ++ doc/developer/problems.xml | 22 + doc/developer/reference-html/a2122.html | 220 + doc/developer/reference-html/c1717.html | 278 + doc/developer/reference-html/c194.html | 167 + doc/developer/reference-html/c1968.html | 953 ++ doc/developer/reference-html/c200.html | 396 + doc/developer/reference-html/c39.html | 182 + doc/developer/reference-html/c464.html | 1702 +++ doc/developer/reference-html/c48.html | 213 + doc/developer/reference-html/f14.html | 229 + doc/developer/reference-html/index.html | 481 + doc/developer/reference-html/x1669.html | 348 + doc/developer/reference-html/x1734.html | 1922 +++ doc/developer/reference-html/x2153.html | 616 + doc/developer/reference-html/x271.html | 1230 ++ doc/developer/reference-html/x67.html | 182 + doc/developer/reference-html/x79.html | 612 + doc/developer/reference-html/x955.html | 2297 +++ doc/developer/using.xml | 238 + doc/developer/weave.xml | 1409 ++ doc/dither.texi | 504 - doc/escp2.texi | 919 -- doc/functions.texi | 744 - doc/gimpprint.dvi | Bin 350616 -> 0 bytes doc/gimpprint.info | 94 - doc/gimpprint.info-1 | 1100 -- doc/gimpprint.info-2 | 1080 -- doc/gimpprint.info-3 | 1007 -- doc/gimpprint.info-4 | 1151 -- doc/gimpprint.info-5 | 872 -- doc/gimpprint.ps | 11226 -------------- doc/gimpprint.texi | 130 - doc/gpl.texi | 396 - doc/gutenprint-stamp | 0 doc/gutenprint.dox.in | 1078 ++ doc/gutenprint/gutenprint.tag | 8996 +++++++++++ doc/gutenprint/html/annotated.html | 47 + doc/gutenprint/html/array_8h.html | 61 + doc/gutenprint/html/bit-ops_8h.html | 555 + doc/gutenprint/html/channel_8h.html | 885 ++ doc/gutenprint/html/classes.html | 17 + doc/gutenprint/html/color_8h.html | 60 + doc/gutenprint/html/curve-cache_8h.html | 447 + doc/gutenprint/html/curve_8h.html | 193 + doc/gutenprint/html/deprecated.html | 21 + doc/gutenprint/html/dir_000000.html | 20 + doc/gutenprint/html/dir_000001.html | 143 + doc/gutenprint/html/dirs.html | 18 + doc/gutenprint/html/dither_8h.html | 1822 +++ doc/gutenprint/html/doxygen.css | 309 + doc/gutenprint/html/doxygen.png | Bin 0 -> 1281 bytes doc/gutenprint/html/files.html | 39 + doc/gutenprint/html/functions.html | 177 + doc/gutenprint/html/functions_vars.html | 177 + doc/gutenprint/html/globals.html | 21 + doc/gutenprint/html/globals_0x62.html | 21 + doc/gutenprint/html/globals_0x63.html | 24 + doc/gutenprint/html/globals_0x64.html | 22 + doc/gutenprint/html/globals_0x67.html | 21 + doc/gutenprint/html/globals_0x6e.html | 21 + doc/gutenprint/html/globals_0x70.html | 27 + doc/gutenprint/html/globals_0x73.html | 644 + doc/gutenprint/html/globals_0x74.html | 21 + doc/gutenprint/html/globals_defs.html | 95 + doc/gutenprint/html/globals_enum.html | 31 + doc/gutenprint/html/globals_eval.html | 83 + doc/gutenprint/html/globals_func.html | 474 + doc/gutenprint/html/globals_type.html | 62 + doc/gutenprint/html/globals_vars.html | 29 + doc/gutenprint/html/group__array.html | 607 + doc/gutenprint/html/group__color.html | 504 + doc/gutenprint/html/group__curve.html | 2470 +++ doc/gutenprint/html/group__image.html | 353 + doc/gutenprint/html/group__intl.html | 243 + doc/gutenprint/html/group__intl__internal.html | 243 + doc/gutenprint/html/group__list.html | 1312 ++ doc/gutenprint/html/group__papersize.html | 277 + doc/gutenprint/html/group__printer.html | 997 ++ doc/gutenprint/html/group__sequence.html | 1484 ++ doc/gutenprint/html/group__util.html | 1835 +++ doc/gutenprint/html/group__vars.html | 6594 ++++++++ doc/gutenprint/html/group__version.html | 441 + .../html/gutenprint-intl-internal_8h.html | 38 + doc/gutenprint/html/gutenprint-intl_8h.html | 38 + doc/gutenprint/html/gutenprint-module_8h.html | 59 + doc/gutenprint/html/gutenprint-version_8h.html | 60 + doc/gutenprint/html/gutenprint_8h.html | 34 + doc/gutenprint/html/image_8h.html | 54 + doc/gutenprint/html/index.html | 14 + doc/gutenprint/html/list_8h.html | 120 + doc/gutenprint/html/module_8h.html | 311 + doc/gutenprint/html/modules.html | 27 + doc/gutenprint/html/mxml_8h.html | 1367 ++ doc/gutenprint/html/pages.html | 16 + doc/gutenprint/html/paper_8h.html | 50 + doc/gutenprint/html/path_8h.html | 102 + doc/gutenprint/html/printers_8h.html | 100 + doc/gutenprint/html/sequence_8h.html | 111 + doc/gutenprint/html/string-list_8h.html | 418 + .../html/structdither__matrix__impl.html | 396 + .../html/structstp__cached__curve__t.html | 121 + doc/gutenprint/html/structstp__color.html | 99 + doc/gutenprint/html/structstp__colorfuncs__t.html | 124 + .../html/structstp__curve__point__t.html | 86 + .../html/structstp__dither__matrix__generic.html | 146 + .../html/structstp__dither__matrix__normal.html | 146 + .../html/structstp__dither__matrix__short.html | 146 + doc/gutenprint/html/structstp__dotsize.html | 71 + .../html/structstp__double__bound__t.html | 80 + doc/gutenprint/html/structstp__family.html | 74 + doc/gutenprint/html/structstp__image.html | 285 + doc/gutenprint/html/structstp__int__bound__t.html | 80 + doc/gutenprint/html/structstp__lineactive__t.html | 71 + doc/gutenprint/html/structstp__linebounds__t.html | 96 + doc/gutenprint/html/structstp__linebufs__t.html | 71 + doc/gutenprint/html/structstp__linecount__t.html | 71 + doc/gutenprint/html/structstp__lineoff__t.html | 71 + doc/gutenprint/html/structstp__module.html | 221 + .../html/structstp__module__version.html | 71 + doc/gutenprint/html/structstp__mxml__attr__s.html | 71 + doc/gutenprint/html/structstp__mxml__node__s.html | 196 + doc/gutenprint/html/structstp__mxml__text__s.html | 71 + doc/gutenprint/html/structstp__mxml__value__s.html | 96 + doc/gutenprint/html/structstp__papersize__t.html | 310 + .../html/structstp__param__string__t.html | 79 + doc/gutenprint/html/structstp__parameter__t.html | 709 + doc/gutenprint/html/structstp__pass__t.html | 171 + doc/gutenprint/html/structstp__printfuncs__t.html | 299 + doc/gutenprint/html/structstp__raw__t.html | 80 + doc/gutenprint/html/structstp__shade.html | 96 + doc/gutenprint/html/structstp__weave__t.html | 196 + doc/gutenprint/html/unionstp__mxml__value__u.html | 146 + doc/gutenprint/html/util_8h.html | 140 + doc/gutenprint/html/vars_8h.html | 477 + doc/gutenprint/html/weave_8h.html | 822 + doc/gutenprint/html/xml_8h.html | 700 + doc/gutenprintui2-stamp | 0 doc/gutenprintui2.dox.in | 1078 ++ doc/gutenprintui2/gutenprintui2.tag | 1121 ++ doc/gutenprintui2/html/annotated.html | 20 + doc/gutenprintui2/html/classes.html | 17 + doc/gutenprintui2/html/curve_8h.html | 610 + doc/gutenprintui2/html/dir_000000.html | 20 + doc/gutenprintui2/html/dir_000001.html | 26 + doc/gutenprintui2/html/dirs.html | 18 + doc/gutenprintui2/html/doxygen.css | 309 + doc/gutenprintui2/html/doxygen.png | Bin 0 -> 1281 bytes doc/gutenprintui2/html/files.html | 18 + doc/gutenprintui2/html/functions.html | 105 + doc/gutenprintui2/html/functions_vars.html | 105 + doc/gutenprintui2/html/gammacurve_8h.html | 315 + doc/gutenprintui2/html/globals.html | 126 + doc/gutenprintui2/html/globals_defs.html | 32 + doc/gutenprintui2/html/globals_enum.html | 20 + doc/gutenprintui2/html/globals_eval.html | 28 + doc/gutenprintui2/html/globals_func.html | 89 + doc/gutenprintui2/html/globals_type.html | 23 + doc/gutenprintui2/html/gutenprintui_8h.html | 1953 +++ doc/gutenprintui2/html/index.html | 14 + doc/gutenprintui2/html/struct__StpuiCurve.html | 396 + .../html/struct__StpuiCurveClass.html | 171 + .../html/struct__StpuiGammaCurve.html | 196 + .../html/struct__StpuiGammaCurveClass.html | 146 + doc/gutenprintui2/html/structstpui__image.html | 221 + doc/gutenprintui2/html/structstpui__plist__t.html | 346 + doc/gutenprintui2/html/typebuiltins_8h.html | 187 + doc/html-stamp | 0 doc/indices.texi | 14 - doc/integrating.texi | 192 - doc/introduction.texi | 38 - doc/manual-html/gimpprint_1.html | 63 - doc/manual-html/gimpprint_10.html | 53 - doc/manual-html/gimpprint_11.html | 86 - doc/manual-html/gimpprint_12.html | 558 - doc/manual-html/gimpprint_13.html | 45 - doc/manual-html/gimpprint_14.html | 102 - doc/manual-html/gimpprint_15.html | 141 - doc/manual-html/gimpprint_16.html | 184 - doc/manual-html/gimpprint_17.html | 61 - doc/manual-html/gimpprint_18.html | 156 - doc/manual-html/gimpprint_19.html | 38 - doc/manual-html/gimpprint_2.html | 495 - doc/manual-html/gimpprint_20.html | 315 - doc/manual-html/gimpprint_21.html | 22 - doc/manual-html/gimpprint_22.html | 22 - doc/manual-html/gimpprint_23.html | 37 - doc/manual-html/gimpprint_24.html | 29 - doc/manual-html/gimpprint_25.html | 611 - doc/manual-html/gimpprint_26.html | 31 - doc/manual-html/gimpprint_27.html | 152 - doc/manual-html/gimpprint_28.html | 77 - doc/manual-html/gimpprint_29.html | 111 - doc/manual-html/gimpprint_3.html | 41 - doc/manual-html/gimpprint_30.html | 246 - doc/manual-html/gimpprint_31.html | 87 - doc/manual-html/gimpprint_32.html | 723 - doc/manual-html/gimpprint_33.html | 247 - doc/manual-html/gimpprint_34.html | 29 - doc/manual-html/gimpprint_35.html | 52 - doc/manual-html/gimpprint_36.html | 560 - doc/manual-html/gimpprint_37.html | 663 - doc/manual-html/gimpprint_38.html | 115 - doc/manual-html/gimpprint_39.html | 59 - doc/manual-html/gimpprint_4.html | 82 - doc/manual-html/gimpprint_40.html | 115 - doc/manual-html/gimpprint_41.html | 52 - doc/manual-html/gimpprint_42.html | 457 - doc/manual-html/gimpprint_43.html | 189 - doc/manual-html/gimpprint_44.html | 117 - doc/manual-html/gimpprint_45.html | 49 - doc/manual-html/gimpprint_46.html | 249 - doc/manual-html/gimpprint_47.html | 124 - doc/manual-html/gimpprint_5.html | 36 - doc/manual-html/gimpprint_6.html | 106 - doc/manual-html/gimpprint_7.html | 39 - doc/manual-html/gimpprint_8.html | 66 - doc/manual-html/gimpprint_9.html | 79 - doc/manual-html/gimpprint_foot.html | 33 - doc/manual-html/gimpprint_toc.html | 108 - doc/manual-html/print-color.png | Bin 11217 -> 0 bytes doc/manual-html/print-main.png | Bin 17787 -> 0 bytes doc/manual-html/print-setup.png | Bin 3539 -> 0 bytes doc/new-printer.texi | 707 - doc/overview.texi | 19 - doc/print-color.eps | 788 - doc/print-color.png | Bin 11217 -> 0 bytes doc/print-color.txt | 1 - doc/print-main.eps | 551 - doc/print-main.png | Bin 17787 -> 0 bytes doc/print-main.txt | 1 - doc/print-setup.eps | 225 - doc/print-setup.png | Bin 3539 -> 0 bytes doc/print-setup.txt | 1 - doc/problems.texi | 17 - doc/programs.texi | 278 - doc/stamp-vti | 3 - doc/users_guide/Makefile.am | 318 +- doc/users_guide/Makefile.in | 875 +- doc/users_guide/README | 2 +- doc/users_guide/cups-edition.sgml | 58 + doc/users_guide/cups.sgml | 30 +- doc/users_guide/figures/CVS/Entries | 19 - doc/users_guide/figures/CVS/Repository | 1 - doc/users_guide/figures/CVS/Root | 1 - doc/users_guide/figures/CVS/Tag | 1 - doc/users_guide/figures/README | 24 - doc/users_guide/figures/cups_admin.eps | 594 - doc/users_guide/figures/cups_admin_device.eps | 581 - doc/users_guide/figures/cups_admin_make.eps | 599 - doc/users_guide/figures/cups_admin_model.eps | 620 - doc/users_guide/figures/cups_admin_success.eps | 573 - doc/users_guide/figures/cups_config_printer.eps | 675 - doc/users_guide/figures/cups_my_printer.eps | 647 - doc/users_guide/figures/cups_printers.eps | 572 - doc/users_guide/figures/cups_startup.eps | 596 - doc/users_guide/figures/gimp-print-gui-1.eps | 825 - doc/users_guide/figures/gimp-print-gui.eps | 851 -- doc/users_guide/figures/gimp-print-new-printer.eps | 440 - .../figures/gimp-print-print-color-adjust.eps | 605 - doc/users_guide/figures/gimp-print-setup.eps | 463 - doc/users_guide/figures/gimp_image.eps | 1024 -- doc/users_guide/figures/gimp_startup.eps | 483 - doc/users_guide/gimp-edition.sgml | 58 + doc/users_guide/gimp.sgml | 22 +- doc/users_guide/history.sgml | 10 +- doc/users_guide/html/HTML.manifest | 21 - doc/users_guide/html/a630.html | 181 + doc/users_guide/html/book1.html | 483 - doc/users_guide/html/c29.html | 58 +- doc/users_guide/html/c443.html | 180 + doc/users_guide/html/c447.html | 185 - doc/users_guide/html/c568.html | 709 + doc/users_guide/html/c570.html | 721 - doc/users_guide/html/c61.html | 220 + doc/users_guide/html/ch-gimp-and-gimp-print.html | 242 - doc/users_guide/html/docbook.css | 20 - doc/users_guide/html/figures/cups_admin.png | Bin 11105 -> 0 bytes doc/users_guide/html/figures/cups_admin_device.png | Bin 10515 -> 0 bytes doc/users_guide/html/figures/cups_admin_make.png | Bin 11540 -> 0 bytes doc/users_guide/html/figures/cups_admin_model.png | Bin 12445 -> 0 bytes .../html/figures/cups_admin_success.png | Bin 10441 -> 0 bytes .../html/figures/cups_config_printer.png | Bin 15395 -> 0 bytes doc/users_guide/html/figures/cups_my_printer.png | Bin 14544 -> 0 bytes doc/users_guide/html/figures/cups_printers.png | Bin 10008 -> 0 bytes doc/users_guide/html/figures/cups_startup.png | Bin 11252 -> 0 bytes doc/users_guide/html/figures/gimp-print-gui-1.png | Bin 24241 -> 0 bytes doc/users_guide/html/figures/gimp-print-gui.png | Bin 26080 -> 0 bytes .../html/figures/gimp-print-new-printer.png | Bin 1438 -> 0 bytes .../html/figures/gimp-print-print-color-adjust.png | Bin 11402 -> 0 bytes doc/users_guide/html/figures/gimp-print-setup.png | Bin 2973 -> 0 bytes doc/users_guide/html/figures/gimp_image.png | Bin 35648 -> 0 bytes doc/users_guide/html/figures/gimp_startup.png | Bin 3890 -> 0 bytes doc/users_guide/html/gfdl.html | 238 - doc/users_guide/html/index.html | 511 + doc/users_guide/html/ln12.html | 88 - doc/users_guide/html/stylesheet-images/caution.gif | Bin 1039 -> 0 bytes doc/users_guide/html/stylesheet-images/home.gif | Bin 995 -> 0 bytes .../html/stylesheet-images/important.gif | Bin 1081 -> 0 bytes doc/users_guide/html/stylesheet-images/next.gif | Bin 964 -> 0 bytes doc/users_guide/html/stylesheet-images/note.gif | Bin 1070 -> 0 bytes doc/users_guide/html/stylesheet-images/prev.gif | Bin 944 -> 0 bytes doc/users_guide/html/stylesheet-images/tip.gif | Bin 1029 -> 0 bytes .../html/stylesheet-images/toc-blank.gif | Bin 95 -> 0 bytes .../html/stylesheet-images/toc-minus.gif | Bin 843 -> 0 bytes .../html/stylesheet-images/toc-plus.gif | Bin 846 -> 0 bytes doc/users_guide/html/stylesheet-images/up.gif | Bin 922 -> 0 bytes doc/users_guide/html/stylesheet-images/warning.gif | Bin 1052 -> 0 bytes doc/users_guide/html/x452.html | 471 + doc/users_guide/html/x456.html | 461 - doc/users_guide/html/x544.html | 196 + doc/users_guide/html/x548.html | 175 - doc/users_guide/html/x559.html | 218 + doc/users_guide/html/x562.html | 212 - doc/users_guide/html/x640.html | 208 + doc/users_guide/html/x642.html | 195 - doc/users_guide/html/x650.html | 158 + doc/users_guide/html/x652.html | 145 - doc/users_guide/html/x654.html | 182 + doc/users_guide/html/x656.html | 169 - doc/users_guide/html/x660.html | 288 + doc/users_guide/html/x662.html | 275 - doc/users_guide/html/x696.html | 167 + doc/users_guide/html/x698.html | 154 - doc/users_guide/html/x701.html | 157 + doc/users_guide/html/x703.html | 144 - doc/users_guide/html/x705.html | 161 + doc/users_guide/html/x707.html | 148 - doc/users_guide/html/x709.html | 156 + doc/users_guide/html/x711.html | 143 - doc/users_guide/html/x712.html | 153 + doc/users_guide/html/x714.html | 140 - doc/users_guide/html/x715.html | 164 + doc/users_guide/html/x717.html | 151 - doc/users_guide/html/x720.html | 163 + doc/users_guide/html/x722.html | 152 - doc/users_guide/html/x85.html | 373 +- doc/users_guide/title.sgml | 32 +- doc/users_guide/users-guide.pdf | Bin 393572 -> 217286 bytes doc/users_guide/users-guide.ps | 14972 ------------------- doc/users_guide/users-guide.sgml | 18 + doc/users_guide/util-edition.sgml | 57 + doc/users_guide/utils.sgml | 8 +- doc/using.texi | 46 - doc/version.texi | 3 - doc/weave.texi | 1290 -- 362 files changed, 77486 insertions(+), 62894 deletions(-) delete mode 100644 doc/appendices.texi delete mode 100644 doc/copying.texi create mode 100644 doc/developer/Makefile.am create mode 100644 doc/developer/Makefile.in create mode 100644 doc/developer/copying.xml create mode 100644 doc/developer/dither.xml create mode 100644 doc/developer/escp2.xml create mode 100644 doc/developer/gpl-appendix.xml create mode 100644 doc/developer/gutenprint.pdf create mode 100644 doc/developer/gutenprint.xml create mode 100644 doc/developer/html-stamp create mode 100644 doc/developer/introduction.xml create mode 100644 doc/developer/new-printer.xml create mode 100644 doc/developer/problems.xml create mode 100644 doc/developer/reference-html/a2122.html create mode 100644 doc/developer/reference-html/c1717.html create mode 100644 doc/developer/reference-html/c194.html create mode 100644 doc/developer/reference-html/c1968.html create mode 100644 doc/developer/reference-html/c200.html create mode 100644 doc/developer/reference-html/c39.html create mode 100644 doc/developer/reference-html/c464.html create mode 100644 doc/developer/reference-html/c48.html create mode 100644 doc/developer/reference-html/f14.html create mode 100644 doc/developer/reference-html/index.html create mode 100644 doc/developer/reference-html/x1669.html create mode 100644 doc/developer/reference-html/x1734.html create mode 100644 doc/developer/reference-html/x2153.html create mode 100644 doc/developer/reference-html/x271.html create mode 100644 doc/developer/reference-html/x67.html create mode 100644 doc/developer/reference-html/x79.html create mode 100644 doc/developer/reference-html/x955.html create mode 100644 doc/developer/using.xml create mode 100644 doc/developer/weave.xml delete mode 100644 doc/dither.texi delete mode 100644 doc/escp2.texi delete mode 100644 doc/functions.texi delete mode 100644 doc/gimpprint.dvi delete mode 100644 doc/gimpprint.info delete mode 100644 doc/gimpprint.info-1 delete mode 100644 doc/gimpprint.info-2 delete mode 100644 doc/gimpprint.info-3 delete mode 100644 doc/gimpprint.info-4 delete mode 100644 doc/gimpprint.info-5 delete mode 100644 doc/gimpprint.ps delete mode 100644 doc/gimpprint.texi delete mode 100644 doc/gpl.texi create mode 100644 doc/gutenprint-stamp create mode 100644 doc/gutenprint.dox.in create mode 100644 doc/gutenprint/gutenprint.tag create mode 100644 doc/gutenprint/html/annotated.html create mode 100644 doc/gutenprint/html/array_8h.html create mode 100644 doc/gutenprint/html/bit-ops_8h.html create mode 100644 doc/gutenprint/html/channel_8h.html create mode 100644 doc/gutenprint/html/classes.html create mode 100644 doc/gutenprint/html/color_8h.html create mode 100644 doc/gutenprint/html/curve-cache_8h.html create mode 100644 doc/gutenprint/html/curve_8h.html create mode 100644 doc/gutenprint/html/deprecated.html create mode 100644 doc/gutenprint/html/dir_000000.html create mode 100644 doc/gutenprint/html/dir_000001.html create mode 100644 doc/gutenprint/html/dirs.html create mode 100644 doc/gutenprint/html/dither_8h.html create mode 100644 doc/gutenprint/html/doxygen.css create mode 100644 doc/gutenprint/html/doxygen.png create mode 100644 doc/gutenprint/html/files.html create mode 100644 doc/gutenprint/html/functions.html create mode 100644 doc/gutenprint/html/functions_vars.html create mode 100644 doc/gutenprint/html/globals.html create mode 100644 doc/gutenprint/html/globals_0x62.html create mode 100644 doc/gutenprint/html/globals_0x63.html create mode 100644 doc/gutenprint/html/globals_0x64.html create mode 100644 doc/gutenprint/html/globals_0x67.html create mode 100644 doc/gutenprint/html/globals_0x6e.html create mode 100644 doc/gutenprint/html/globals_0x70.html create mode 100644 doc/gutenprint/html/globals_0x73.html create mode 100644 doc/gutenprint/html/globals_0x74.html create mode 100644 doc/gutenprint/html/globals_defs.html create mode 100644 doc/gutenprint/html/globals_enum.html create mode 100644 doc/gutenprint/html/globals_eval.html create mode 100644 doc/gutenprint/html/globals_func.html create mode 100644 doc/gutenprint/html/globals_type.html create mode 100644 doc/gutenprint/html/globals_vars.html create mode 100644 doc/gutenprint/html/group__array.html create mode 100644 doc/gutenprint/html/group__color.html create mode 100644 doc/gutenprint/html/group__curve.html create mode 100644 doc/gutenprint/html/group__image.html create mode 100644 doc/gutenprint/html/group__intl.html create mode 100644 doc/gutenprint/html/group__intl__internal.html create mode 100644 doc/gutenprint/html/group__list.html create mode 100644 doc/gutenprint/html/group__papersize.html create mode 100644 doc/gutenprint/html/group__printer.html create mode 100644 doc/gutenprint/html/group__sequence.html create mode 100644 doc/gutenprint/html/group__util.html create mode 100644 doc/gutenprint/html/group__vars.html create mode 100644 doc/gutenprint/html/group__version.html create mode 100644 doc/gutenprint/html/gutenprint-intl-internal_8h.html create mode 100644 doc/gutenprint/html/gutenprint-intl_8h.html create mode 100644 doc/gutenprint/html/gutenprint-module_8h.html create mode 100644 doc/gutenprint/html/gutenprint-version_8h.html create mode 100644 doc/gutenprint/html/gutenprint_8h.html create mode 100644 doc/gutenprint/html/image_8h.html create mode 100644 doc/gutenprint/html/index.html create mode 100644 doc/gutenprint/html/list_8h.html create mode 100644 doc/gutenprint/html/module_8h.html create mode 100644 doc/gutenprint/html/modules.html create mode 100644 doc/gutenprint/html/mxml_8h.html create mode 100644 doc/gutenprint/html/pages.html create mode 100644 doc/gutenprint/html/paper_8h.html create mode 100644 doc/gutenprint/html/path_8h.html create mode 100644 doc/gutenprint/html/printers_8h.html create mode 100644 doc/gutenprint/html/sequence_8h.html create mode 100644 doc/gutenprint/html/string-list_8h.html create mode 100644 doc/gutenprint/html/structdither__matrix__impl.html create mode 100644 doc/gutenprint/html/structstp__cached__curve__t.html create mode 100644 doc/gutenprint/html/structstp__color.html create mode 100644 doc/gutenprint/html/structstp__colorfuncs__t.html create mode 100644 doc/gutenprint/html/structstp__curve__point__t.html create mode 100644 doc/gutenprint/html/structstp__dither__matrix__generic.html create mode 100644 doc/gutenprint/html/structstp__dither__matrix__normal.html create mode 100644 doc/gutenprint/html/structstp__dither__matrix__short.html create mode 100644 doc/gutenprint/html/structstp__dotsize.html create mode 100644 doc/gutenprint/html/structstp__double__bound__t.html create mode 100644 doc/gutenprint/html/structstp__family.html create mode 100644 doc/gutenprint/html/structstp__image.html create mode 100644 doc/gutenprint/html/structstp__int__bound__t.html create mode 100644 doc/gutenprint/html/structstp__lineactive__t.html create mode 100644 doc/gutenprint/html/structstp__linebounds__t.html create mode 100644 doc/gutenprint/html/structstp__linebufs__t.html create mode 100644 doc/gutenprint/html/structstp__linecount__t.html create mode 100644 doc/gutenprint/html/structstp__lineoff__t.html create mode 100644 doc/gutenprint/html/structstp__module.html create mode 100644 doc/gutenprint/html/structstp__module__version.html create mode 100644 doc/gutenprint/html/structstp__mxml__attr__s.html create mode 100644 doc/gutenprint/html/structstp__mxml__node__s.html create mode 100644 doc/gutenprint/html/structstp__mxml__text__s.html create mode 100644 doc/gutenprint/html/structstp__mxml__value__s.html create mode 100644 doc/gutenprint/html/structstp__papersize__t.html create mode 100644 doc/gutenprint/html/structstp__param__string__t.html create mode 100644 doc/gutenprint/html/structstp__parameter__t.html create mode 100644 doc/gutenprint/html/structstp__pass__t.html create mode 100644 doc/gutenprint/html/structstp__printfuncs__t.html create mode 100644 doc/gutenprint/html/structstp__raw__t.html create mode 100644 doc/gutenprint/html/structstp__shade.html create mode 100644 doc/gutenprint/html/structstp__weave__t.html create mode 100644 doc/gutenprint/html/unionstp__mxml__value__u.html create mode 100644 doc/gutenprint/html/util_8h.html create mode 100644 doc/gutenprint/html/vars_8h.html create mode 100644 doc/gutenprint/html/weave_8h.html create mode 100644 doc/gutenprint/html/xml_8h.html create mode 100644 doc/gutenprintui2-stamp create mode 100644 doc/gutenprintui2.dox.in create mode 100644 doc/gutenprintui2/gutenprintui2.tag create mode 100644 doc/gutenprintui2/html/annotated.html create mode 100644 doc/gutenprintui2/html/classes.html create mode 100644 doc/gutenprintui2/html/curve_8h.html create mode 100644 doc/gutenprintui2/html/dir_000000.html create mode 100644 doc/gutenprintui2/html/dir_000001.html create mode 100644 doc/gutenprintui2/html/dirs.html create mode 100644 doc/gutenprintui2/html/doxygen.css create mode 100644 doc/gutenprintui2/html/doxygen.png create mode 100644 doc/gutenprintui2/html/files.html create mode 100644 doc/gutenprintui2/html/functions.html create mode 100644 doc/gutenprintui2/html/functions_vars.html create mode 100644 doc/gutenprintui2/html/gammacurve_8h.html create mode 100644 doc/gutenprintui2/html/globals.html create mode 100644 doc/gutenprintui2/html/globals_defs.html create mode 100644 doc/gutenprintui2/html/globals_enum.html create mode 100644 doc/gutenprintui2/html/globals_eval.html create mode 100644 doc/gutenprintui2/html/globals_func.html create mode 100644 doc/gutenprintui2/html/globals_type.html create mode 100644 doc/gutenprintui2/html/gutenprintui_8h.html create mode 100644 doc/gutenprintui2/html/index.html create mode 100644 doc/gutenprintui2/html/struct__StpuiCurve.html create mode 100644 doc/gutenprintui2/html/struct__StpuiCurveClass.html create mode 100644 doc/gutenprintui2/html/struct__StpuiGammaCurve.html create mode 100644 doc/gutenprintui2/html/struct__StpuiGammaCurveClass.html create mode 100644 doc/gutenprintui2/html/structstpui__image.html create mode 100644 doc/gutenprintui2/html/structstpui__plist__t.html create mode 100644 doc/gutenprintui2/html/typebuiltins_8h.html delete mode 100644 doc/html-stamp delete mode 100644 doc/indices.texi delete mode 100644 doc/integrating.texi delete mode 100644 doc/introduction.texi delete mode 100644 doc/manual-html/gimpprint_1.html delete mode 100644 doc/manual-html/gimpprint_10.html delete mode 100644 doc/manual-html/gimpprint_11.html delete mode 100644 doc/manual-html/gimpprint_12.html delete mode 100644 doc/manual-html/gimpprint_13.html delete mode 100644 doc/manual-html/gimpprint_14.html delete mode 100644 doc/manual-html/gimpprint_15.html delete mode 100644 doc/manual-html/gimpprint_16.html delete mode 100644 doc/manual-html/gimpprint_17.html delete mode 100644 doc/manual-html/gimpprint_18.html delete mode 100644 doc/manual-html/gimpprint_19.html delete mode 100644 doc/manual-html/gimpprint_2.html delete mode 100644 doc/manual-html/gimpprint_20.html delete mode 100644 doc/manual-html/gimpprint_21.html delete mode 100644 doc/manual-html/gimpprint_22.html delete mode 100644 doc/manual-html/gimpprint_23.html delete mode 100644 doc/manual-html/gimpprint_24.html delete mode 100644 doc/manual-html/gimpprint_25.html delete mode 100644 doc/manual-html/gimpprint_26.html delete mode 100644 doc/manual-html/gimpprint_27.html delete mode 100644 doc/manual-html/gimpprint_28.html delete mode 100644 doc/manual-html/gimpprint_29.html delete mode 100644 doc/manual-html/gimpprint_3.html delete mode 100644 doc/manual-html/gimpprint_30.html delete mode 100644 doc/manual-html/gimpprint_31.html delete mode 100644 doc/manual-html/gimpprint_32.html delete mode 100644 doc/manual-html/gimpprint_33.html delete mode 100644 doc/manual-html/gimpprint_34.html delete mode 100644 doc/manual-html/gimpprint_35.html delete mode 100644 doc/manual-html/gimpprint_36.html delete mode 100644 doc/manual-html/gimpprint_37.html delete mode 100644 doc/manual-html/gimpprint_38.html delete mode 100644 doc/manual-html/gimpprint_39.html delete mode 100644 doc/manual-html/gimpprint_4.html delete mode 100644 doc/manual-html/gimpprint_40.html delete mode 100644 doc/manual-html/gimpprint_41.html delete mode 100644 doc/manual-html/gimpprint_42.html delete mode 100644 doc/manual-html/gimpprint_43.html delete mode 100644 doc/manual-html/gimpprint_44.html delete mode 100644 doc/manual-html/gimpprint_45.html delete mode 100644 doc/manual-html/gimpprint_46.html delete mode 100644 doc/manual-html/gimpprint_47.html delete mode 100644 doc/manual-html/gimpprint_5.html delete mode 100644 doc/manual-html/gimpprint_6.html delete mode 100644 doc/manual-html/gimpprint_7.html delete mode 100644 doc/manual-html/gimpprint_8.html delete mode 100644 doc/manual-html/gimpprint_9.html delete mode 100644 doc/manual-html/gimpprint_foot.html delete mode 100644 doc/manual-html/gimpprint_toc.html delete mode 100644 doc/manual-html/print-color.png delete mode 100644 doc/manual-html/print-main.png delete mode 100644 doc/manual-html/print-setup.png delete mode 100644 doc/new-printer.texi delete mode 100644 doc/overview.texi delete mode 100644 doc/print-color.eps delete mode 100644 doc/print-color.png delete mode 100644 doc/print-color.txt delete mode 100644 doc/print-main.eps delete mode 100644 doc/print-main.png delete mode 100644 doc/print-main.txt delete mode 100644 doc/print-setup.eps delete mode 100644 doc/print-setup.png delete mode 100644 doc/print-setup.txt delete mode 100644 doc/problems.texi delete mode 100644 doc/programs.texi delete mode 100644 doc/stamp-vti create mode 100644 doc/users_guide/cups-edition.sgml delete mode 100644 doc/users_guide/figures/CVS/Entries delete mode 100644 doc/users_guide/figures/CVS/Repository delete mode 100644 doc/users_guide/figures/CVS/Root delete mode 100644 doc/users_guide/figures/CVS/Tag delete mode 100644 doc/users_guide/figures/README delete mode 100644 doc/users_guide/figures/cups_admin.eps delete mode 100644 doc/users_guide/figures/cups_admin_device.eps delete mode 100644 doc/users_guide/figures/cups_admin_make.eps delete mode 100644 doc/users_guide/figures/cups_admin_model.eps delete mode 100644 doc/users_guide/figures/cups_admin_success.eps delete mode 100644 doc/users_guide/figures/cups_config_printer.eps delete mode 100644 doc/users_guide/figures/cups_my_printer.eps delete mode 100644 doc/users_guide/figures/cups_printers.eps delete mode 100644 doc/users_guide/figures/cups_startup.eps delete mode 100644 doc/users_guide/figures/gimp-print-gui-1.eps delete mode 100644 doc/users_guide/figures/gimp-print-gui.eps delete mode 100644 doc/users_guide/figures/gimp-print-new-printer.eps delete mode 100644 doc/users_guide/figures/gimp-print-print-color-adjust.eps delete mode 100644 doc/users_guide/figures/gimp-print-setup.eps delete mode 100644 doc/users_guide/figures/gimp_image.eps delete mode 100644 doc/users_guide/figures/gimp_startup.eps create mode 100644 doc/users_guide/gimp-edition.sgml delete mode 100644 doc/users_guide/html/HTML.manifest create mode 100644 doc/users_guide/html/a630.html delete mode 100644 doc/users_guide/html/book1.html create mode 100644 doc/users_guide/html/c443.html delete mode 100644 doc/users_guide/html/c447.html create mode 100644 doc/users_guide/html/c568.html delete mode 100644 doc/users_guide/html/c570.html create mode 100644 doc/users_guide/html/c61.html delete mode 100644 doc/users_guide/html/ch-gimp-and-gimp-print.html delete mode 100644 doc/users_guide/html/docbook.css delete mode 100644 doc/users_guide/html/figures/cups_admin.png delete mode 100644 doc/users_guide/html/figures/cups_admin_device.png delete mode 100644 doc/users_guide/html/figures/cups_admin_make.png delete mode 100644 doc/users_guide/html/figures/cups_admin_model.png delete mode 100644 doc/users_guide/html/figures/cups_admin_success.png delete mode 100644 doc/users_guide/html/figures/cups_config_printer.png delete mode 100644 doc/users_guide/html/figures/cups_my_printer.png delete mode 100644 doc/users_guide/html/figures/cups_printers.png delete mode 100644 doc/users_guide/html/figures/cups_startup.png delete mode 100644 doc/users_guide/html/figures/gimp-print-gui-1.png delete mode 100644 doc/users_guide/html/figures/gimp-print-gui.png delete mode 100644 doc/users_guide/html/figures/gimp-print-new-printer.png delete mode 100644 doc/users_guide/html/figures/gimp-print-print-color-adjust.png delete mode 100644 doc/users_guide/html/figures/gimp-print-setup.png delete mode 100644 doc/users_guide/html/figures/gimp_image.png delete mode 100644 doc/users_guide/html/figures/gimp_startup.png delete mode 100644 doc/users_guide/html/gfdl.html create mode 100644 doc/users_guide/html/index.html delete mode 100644 doc/users_guide/html/ln12.html delete mode 100644 doc/users_guide/html/stylesheet-images/caution.gif delete mode 100644 doc/users_guide/html/stylesheet-images/home.gif delete mode 100644 doc/users_guide/html/stylesheet-images/important.gif delete mode 100644 doc/users_guide/html/stylesheet-images/next.gif delete mode 100644 doc/users_guide/html/stylesheet-images/note.gif delete mode 100644 doc/users_guide/html/stylesheet-images/prev.gif delete mode 100644 doc/users_guide/html/stylesheet-images/tip.gif delete mode 100644 doc/users_guide/html/stylesheet-images/toc-blank.gif delete mode 100644 doc/users_guide/html/stylesheet-images/toc-minus.gif delete mode 100644 doc/users_guide/html/stylesheet-images/toc-plus.gif delete mode 100644 doc/users_guide/html/stylesheet-images/up.gif delete mode 100644 doc/users_guide/html/stylesheet-images/warning.gif create mode 100644 doc/users_guide/html/x452.html delete mode 100644 doc/users_guide/html/x456.html create mode 100644 doc/users_guide/html/x544.html delete mode 100644 doc/users_guide/html/x548.html create mode 100644 doc/users_guide/html/x559.html delete mode 100644 doc/users_guide/html/x562.html create mode 100644 doc/users_guide/html/x640.html delete mode 100644 doc/users_guide/html/x642.html create mode 100644 doc/users_guide/html/x650.html delete mode 100644 doc/users_guide/html/x652.html create mode 100644 doc/users_guide/html/x654.html delete mode 100644 doc/users_guide/html/x656.html create mode 100644 doc/users_guide/html/x660.html delete mode 100644 doc/users_guide/html/x662.html create mode 100644 doc/users_guide/html/x696.html delete mode 100644 doc/users_guide/html/x698.html create mode 100644 doc/users_guide/html/x701.html delete mode 100644 doc/users_guide/html/x703.html create mode 100644 doc/users_guide/html/x705.html delete mode 100644 doc/users_guide/html/x707.html create mode 100644 doc/users_guide/html/x709.html delete mode 100644 doc/users_guide/html/x711.html create mode 100644 doc/users_guide/html/x712.html delete mode 100644 doc/users_guide/html/x714.html create mode 100644 doc/users_guide/html/x715.html delete mode 100644 doc/users_guide/html/x717.html create mode 100644 doc/users_guide/html/x720.html delete mode 100644 doc/users_guide/html/x722.html delete mode 100644 doc/users_guide/users-guide.ps create mode 100644 doc/users_guide/util-edition.sgml delete mode 100644 doc/using.texi delete mode 100644 doc/version.texi delete mode 100644 doc/weave.texi (limited to 'doc') diff --git a/doc/FAQ.html b/doc/FAQ.html index d3dcdc9..a9599ff 100644 --- a/doc/FAQ.html +++ b/doc/FAQ.html @@ -1,10 +1,10 @@ -The Gimp-Print FAQ +The Gutenprint FAQ -

Gimp-Print FAQ

+

Gutenprint FAQ

    @@ -37,7 +37,7 @@ understand this, don't worry; just do it. If you're nervous about doing that, reboot.

  1. If you don't have the Gimp installed on your system, and just -want to compile Gimp-Print for CUPS (for example), you need to pass +want to compile Gutenprint for CUPS (for example), you need to pass configure the option --with-gimp=no, so it won't try to look for the Gimp and fail. @@ -63,7 +63,7 @@ printing

    Many Epson printers (in particular) do this if they encounter an error in the command stream. This usually indicates a bug in -Gimp-Print; please report it to gimp-print-devel@sourceforge.net or via the bug tracking system at http://gimp-print.sourceforge.net. @@ -187,7 +187,7 @@ it. Of course, as soon as you've read back status from the printer, you know it's working (although if you're unable to read status out of the printer, you might have a different problem; see above). -

    Printing to your printer from Gimp-Print, whether you use the Print +

    Printing to your printer from Gutenprint, whether you use the Print plugin, the CUPS driver, or the Ghostscript driver, will also take the printer out of packet mode. But then again, if you successfully print to your printer, you know it's working, so why worry? If you're diff --git a/doc/Makefile.am b/doc/Makefile.am index 053a189..dde0386 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,4 +1,4 @@ -## $Id: Makefile.am,v 1.27.2.3 2002/05/11 23:07:16 rleigh Exp $ +## $Id: Makefile.am,v 1.41 2005/04/19 01:31:03 rlk Exp $ ## Copyright (C) 2000 Roger Leigh ## ## This program is free software; you can redistribute it and/or modify @@ -23,171 +23,70 @@ AUTOMAKE_OPTIONS = 1.4 gnu MAINT_CHARSET = latin1 -SUBDIRS = users_guide +SUBDIRS = developer users_guide +include $(top_srcdir)/scripts/global.mk -## Variables - -MANUAL = gimpprint -HTMLDIR = manual-html -DOCS = $(MANUAL).dvi $(MANUAL).ps html-stamp - -IMAGES = \ - print-color.png \ - print-main.png \ - print-setup.png - -EPS_IMAGES = $(addsuffix .eps,$(basename $(IMAGES))) -TEXT_IMAGES = $(addsuffix .txt,$(basename $(IMAGES))) - -if MAINTAINER_MODE -MAINT_MODE = true -else -MAINT_MODE = false -endif - -USER_GUIDE = $(MANUAL).ps html +## Variables -STANDARD_TARGETS=@USER_GUIDE@ +docdir = $(datadir)/doc/$(PACKAGE) +## Rules if MAINTAINER_MODE -ALL_LOCAL_TARGETS = docs +all-local: gutenprint-stamp gutenprintui2-stamp else -ALL_LOCAL_TARGETS = $(STANDARD_TARGETS) +all-local: endif +# Rerun doxygen whenever autogen is run +gutenprintui2: gutenprintui2-stamp +gutenprintui2-stamp: gutenprintui2.dox $(top_srcdir)/configure + $(RM) -rf gutenprintui2/html + $(DOXYGEN) gutenprintui2.dox + touch $@ -## Data - -info_TEXINFOS = gimpprint.texi - -gimpprint_TEXINFOS = overview.texi copying.texi gpl.texi introduction.texi using.texi functions.texi programs.texi problems.texi appendices.texi dither.texi weave.texi escp2.texi new-printer.texi indices.texi integrating.texi version.texi +gutenprint: gutenprint-stamp +gutenprint-stamp: gutenprint.dox $(top_srcdir)/configure + $(RM) -rf gutenprint/html + $(DOXYGEN) gutenprint.dox + touch $@ - -## Rules - -all-local: $(DOCS) - -docs: $(DOCS) - cd users_guide; $(MAKE) docs +docs: gutenprint-stamp + cd developer; $(MAKE) + cd users_guide; $(MAKE) ps: $(MANUAL).ps + cd developer; $(MAKE) ps cd users_guide; $(MAKE) ps pdf: $(MANUAL).pdf + cd developer; $(MAKE) pdf cd users_guide; $(MAKE) pdf - -TEXI2DVIFLAGS = -I $(srcdir) -gimpprint.dvi: $(EPS_IMAGES) $(addprefix $(srcdir)/,$(gimpprint_TEXINFOS) $(info_TEXINFOS)) - $(TEXI2DVI) $(TEXI2DVIFLAGS) $(srcdir)/gimpprint.texi - -%.eps: %.png - $(CONVERT) $< EPS2:$@ - -html: html-stamp +html: + cd developer; $(MAKE) html cd users_guide; $(MAKE) html -## Note the rather weird way of setting the exit status; this is because -## texi2html doesn't set the exit status. -html-stamp: $(addprefix $(srcdir)/,$(gimpprint_TEXINFOS) $(info_TEXINFOS)) - $(RM) -rf $(HTMLDIR)-tmp - mkdir $(HTMLDIR)-tmp - images="$(addprefix $(srcdir)/, $(IMAGES))"; \ - for image in $$images ; do \ - cp -p $$image $(HTMLDIR)-tmp ; \ - done - cd $(HTMLDIR)-tmp ; \ - $(TEXI2HTML) -menu -split_node -number -expandinfo \ - -I ../$(srcdir) ../$(srcdir)/$(MANUAL).texi 2>&1 - $(RM) -rf $(HTMLDIR) - mv $(HTMLDIR)-tmp $(HTMLDIR) - touch html-stamp - -$(MANUAL).ps: $(MANUAL).dvi - TEXPICTS=$(srcdir):. $(DVIPS) $< -o $@ - -$(MANUAL).pdf: $(MANUAL).dvi - TEXPICTS=$(srcdir):. $(DVIPDF) $< $@ - -install-data-local: $(STANDARD_TARGETS) - if test -n '$(STANDARD_TARGETS)' ; then \ - $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ - $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ - if test -f $(MANUAL).ps ; then \ - $(INSTALL_DATA) $(MANUAL).ps $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ - elif test -f $(srcdir)/$(MANUAL).ps ; then \ - $(INSTALL_DATA) $(srcdir)/$(MANUAL).ps $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ - fi ; \ - if test -d $(HTMLDIR) ; then \ - HTMLSRCDIR="$(HTMLDIR)" ; \ - elif test -d $(srcdir)/$(HTMLDIR) ; then \ - HTMLSRCDIR="$(srcdir)/$(HTMLDIR)" ; \ - fi ; \ - for file in $$HTMLSRCDIR/* ; do \ - if test -f $$file ; then \ - $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ - fi ; \ - done ; \ - fi - -dist-hook: html - for dir in $(HTMLDIR) ; do \ - if test -d $(srcdir)/$$dir ; then \ - mkdir $(distdir)/$$dir; \ - for dirfile in $(srcdir)/$$dir/*; do \ - if test -f $$dirfile ; then \ - cp -p $$dirfile $(distdir)/$$dir; \ - fi \ - done \ - fi \ - done - -CLEAN_MANUALS = \ - $(RM) -rf html-stamp $(HTMLDIR) ; \ - $(RM) -f $(MANUAL).pdf $(MANUAL).ps $(MANUAL).dvi ; \ - $(RM) -f $(EPS_IMAGES) - -clean-local: - if test $(srcdir) = '.' -a $(MAINT_MODE) = false ; then \ - echo 'clean-local: Not removing $(HTMLDIR)' ; \ - echo 'clean-local: Not removing $(MANUAL).pdf' ; \ - echo 'clean-local: Not removing $(MANUAL).ps' ; \ - echo 'clean-local: Not removing $(MANUAL).dvi' ; \ - echo 'clean-local: Not removing EPS figures' ; \ - else \ - $(CLEAN_MANUALS) ; \ - fi - -$(RM) -rf *.tex *.log *.aux *.gz *.out *.junk *.fot - -$(RM) -rf *.ky *.pg *.toc *.tp *.vr *.vrs - -$(RM) -rf $(HTMLDIR)-tmp - -veryclean: - $(MAKE) MAINT_MODE=true clean - -maintainer-clean-local: - $(CLEAN_MANUALS) - -# We duplicate mostlyclean-aminfo here because we do not want to remove -# the .dvi and .ps files that mostlyclean-aminfo wants to remove. The -# reason why is that we do not want make clean to force a rebuild of the -# doc, since users may not have the texinfo tools required to do so. -# Unfortunately, this generates a warning about overriding commands for -# mostlyclean-aminfo. -mostlyclean-aminfo: - -$(RM) -f gimpprint.aux gimpprint.cp gimpprint.cps \ - gimpprint.fn gimpprint.fns gimpprint.ky gimpprint.kys \ - gimpprint.log gimpprint.pg gimpprint.toc \ - gimpprint.tp gimpprint.tps gimpprint.vr gimpprint.vrs \ - gimpprint.op gimpprint.tr gimpprint.cv gimpprint.cn - ## Clean -MAINTAINERCLEANFILES = Makefile.in html-stamp - -EXTRA_DIST = $(DOCS) $(IMAGES) $(EPS_IMAGES) $(TEXT_IMAGES) FAQ.html README.maintaining - -.PHONY: html ps pdf docs clean-manuals +maintainer-clean-local: + $(RM) -r gutenprint + +MAINTAINERCLEANFILES = \ + Makefile.in \ + gutenprint-stamp + +EXTRA_DIST = \ + FAQ.html \ + README.maintaining \ + gutenprint.dox.in \ + gutenprintui2.dox.in \ + gutenprint \ + gutenprintui2 \ + gutenprint-stamp \ + gutenprintui2-stamp + +.PHONY: html ps pdf docs diff --git a/doc/Makefile.in b/doc/Makefile.in index 01dcff8..4d3a468 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,6 +1,8 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated by automake 1.9.5 from Makefile.am. +# @configure_input@ -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -10,385 +12,374 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +@SET_MAKE@ -SHELL = @SHELL@ - +# Variables srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ - top_builddir = .. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : -host_alias = @host_alias@ +build_triplet = @build@ host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gutenprint.dox.in $(srcdir)/gutenprintui2.dox.in \ + $(top_srcdir)/scripts/global.mk +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gimp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/stp.m4 $(top_srcdir)/m4/stp_cups.m4 \ + $(top_srcdir)/m4/stp_gimp.m4 $(top_srcdir)/m4/stp_option.m4 \ + $(top_srcdir)/m4/stp_release.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gutenprint.dox gutenprintui2.dox +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ -AS = @AS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BISON_PROG = @BISON_PROG@ -BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ +BUILD_CUPS_FALSE = @BUILD_CUPS_FALSE@ +BUILD_CUPS_PPDS_FALSE = @BUILD_CUPS_PPDS_FALSE@ +BUILD_CUPS_PPDS_TRUE = @BUILD_CUPS_PPDS_TRUE@ +BUILD_CUPS_TRUE = @BUILD_CUPS_TRUE@ +BUILD_ESCPUTIL_FALSE = @BUILD_ESCPUTIL_FALSE@ +BUILD_ESCPUTIL_TRUE = @BUILD_ESCPUTIL_TRUE@ +BUILD_FOOMATIC_3_FALSE = @BUILD_FOOMATIC_3_FALSE@ +BUILD_FOOMATIC_3_TRUE = @BUILD_FOOMATIC_3_TRUE@ +BUILD_FOOMATIC_FALSE = @BUILD_FOOMATIC_FALSE@ +BUILD_FOOMATIC_TRUE = @BUILD_FOOMATIC_TRUE@ +BUILD_GENPPD_STATIC_FALSE = @BUILD_GENPPD_STATIC_FALSE@ +BUILD_GENPPD_STATIC_TRUE = @BUILD_GENPPD_STATIC_TRUE@ +BUILD_GHOSTSCRIPT_FALSE = @BUILD_GHOSTSCRIPT_FALSE@ +BUILD_GHOSTSCRIPT_TRUE = @BUILD_GHOSTSCRIPT_TRUE@ +BUILD_GIMP2_FALSE = @BUILD_GIMP2_FALSE@ +BUILD_GIMP2_TRUE = @BUILD_GIMP2_TRUE@ +BUILD_GIMP_FALSE = @BUILD_GIMP_FALSE@ +BUILD_GIMP_TRUE = @BUILD_GIMP_TRUE@ +BUILD_LIBGUTENPRINTUI2_FALSE = @BUILD_LIBGUTENPRINTUI2_FALSE@ +BUILD_LIBGUTENPRINTUI2_TRUE = @BUILD_LIBGUTENPRINTUI2_TRUE@ +BUILD_LIBGUTENPRINTUI_FALSE = @BUILD_LIBGUTENPRINTUI_FALSE@ +BUILD_LIBGUTENPRINTUI_TRUE = @BUILD_LIBGUTENPRINTUI_TRUE@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +BUILD_TESTPATTERN_FALSE = @BUILD_TESTPATTERN_FALSE@ +BUILD_TESTPATTERN_TRUE = @BUILD_TESTPATTERN_TRUE@ +BUILD_TEST_FALSE = @BUILD_TEST_FALSE@ +BUILD_TEST_TRUE = @BUILD_TEST_TRUE@ +BUILD_TRANSLATED_CUPS_PPDS_FALSE = @BUILD_TRANSLATED_CUPS_PPDS_FALSE@ +BUILD_TRANSLATED_CUPS_PPDS_TRUE = @BUILD_TRANSLATED_CUPS_PPDS_TRUE@ CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ -CUPS_BACKEND_BIN = @CUPS_BACKEND_BIN@ -CUPS_BIN = @CUPS_BIN@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ CUPS_CFLAGS = @CUPS_CFLAGS@ -CUPS_CONF = @CUPS_CONF@ CUPS_CONFIG = @CUPS_CONFIG@ -CUPS_FILTER_BIN = @CUPS_FILTER_BIN@ -CUPS_INSTALL = @CUPS_INSTALL@ CUPS_LIBS = @CUPS_LIBS@ -CUPS_MAN = @CUPS_MAN@ -CUPS_NOINST_BIN = @CUPS_NOINST_BIN@ -CUPS_PKG = @CUPS_PKG@ +CUPS_PPDS_AT_TOP_LEVEL_FALSE = @CUPS_PPDS_AT_TOP_LEVEL_FALSE@ +CUPS_PPDS_AT_TOP_LEVEL_TRUE = @CUPS_PPDS_AT_TOP_LEVEL_TRUE@ CUPS_PPD_PS_LEVEL = @CUPS_PPD_PS_LEVEL@ -DATADIRNAME = @DATADIRNAME@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ DB2HTML = @DB2HTML@ DB2PDF = @DB2PDF@ DB2PS = @DB2PS@ -DLLTOOL = @DLLTOOL@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIALOG = @DIALOG@ +DOXYGEN = @DOXYGEN@ DVIPDF = @DVIPDF@ DVIPS = @DVIPS@ ECHO = @ECHO@ -ESCPUTIL_BIN = @ESCPUTIL_BIN@ -ESCPUTIL_MAN = @ESCPUTIL_MAN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ -FOOMATIC_3_NOINST_BIN = @FOOMATIC_3_NOINST_BIN@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FIND = @FIND@ FOOMATIC_CONFIGURE = @FOOMATIC_CONFIGURE@ -FOOMATIC_INSTALL = @FOOMATIC_INSTALL@ FOOMATIC_KITLOAD = @FOOMATIC_KITLOAD@ -FOOMATIC_NOINST_BIN = @FOOMATIC_NOINST_BIN@ -FOOMATIC_OLDIDS_NOINST_BIN = @FOOMATIC_OLDIDS_NOINST_BIN@ FOOMATIC_PPDFILE = @FOOMATIC_PPDFILE@ -GENCAT = @GENCAT@ -GIMPPRINT_BINARY_AGE = @GIMPPRINT_BINARY_AGE@ -GIMPPRINT_CFLAGS = @GIMPPRINT_CFLAGS@ -GIMPPRINT_CURRENT_INTERFACE = @GIMPPRINT_CURRENT_INTERFACE@ -GIMPPRINT_DEPLIBS = @GIMPPRINT_DEPLIBS@ -GIMPPRINT_INTERFACE_AGE = @GIMPPRINT_INTERFACE_AGE@ -GIMPPRINT_LIBS = @GIMPPRINT_LIBS@ -GIMPPRINT_MAJOR_VERSION = @GIMPPRINT_MAJOR_VERSION@ -GIMPPRINT_MICRO_VERSION = @GIMPPRINT_MICRO_VERSION@ -GIMPPRINT_MINOR_VERSION = @GIMPPRINT_MINOR_VERSION@ -GIMPPRINT_VERSION = @GIMPPRINT_VERSION@ +GENPPD_LIBS = @GENPPD_LIBS@ +GIMP2_CFLAGS = @GIMP2_CFLAGS@ +GIMP2_LIBS = @GIMP2_LIBS@ GIMPTOOL = @GIMPTOOL@ +GIMPTOOL2_CHECK = @GIMPTOOL2_CHECK@ GIMPTOOL_CHECK = @GIMPTOOL_CHECK@ -GIMP_BIN = @GIMP_BIN@ GIMP_CFLAGS = @GIMP_CFLAGS@ GIMP_CFLAGS_NOUI = @GIMP_CFLAGS_NOUI@ GIMP_DATA_DIR = @GIMP_DATA_DIR@ GIMP_LIBS = @GIMP_LIBS@ GIMP_LIBS_NOUI = @GIMP_LIBS_NOUI@ GIMP_PLUGIN_DIR = @GIMP_PLUGIN_DIR@ -GLIBC21 = @GLIBC21@ -GMOFILES = @GMOFILES@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ GMSGFMT = @GMSGFMT@ GNUCFLAGS = @GNUCFLAGS@ -IJS_BIN = @IJS_BIN@ +GTK2_CFLAGS = @GTK2_CFLAGS@ +GTK2_LIBS = @GTK2_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GUTENPRINTUI2_BINARY_AGE = @GUTENPRINTUI2_BINARY_AGE@ +GUTENPRINTUI2_CFLAGS = @GUTENPRINTUI2_CFLAGS@ +GUTENPRINTUI2_CURRENT_INTERFACE = @GUTENPRINTUI2_CURRENT_INTERFACE@ +GUTENPRINTUI2_INTERFACE_AGE = @GUTENPRINTUI2_INTERFACE_AGE@ +GUTENPRINTUI2_LIBDEPS = @GUTENPRINTUI2_LIBDEPS@ +GUTENPRINTUI2_LIBS = $(top_builddir)/src/gutenprintui2/libgutenprintui2.la +GUTENPRINTUI2_VERSION = @GUTENPRINTUI2_VERSION@ +GUTENPRINTUI_BINARY_AGE = @GUTENPRINTUI_BINARY_AGE@ +GUTENPRINTUI_CFLAGS = @GUTENPRINTUI_CFLAGS@ +GUTENPRINTUI_CURRENT_INTERFACE = @GUTENPRINTUI_CURRENT_INTERFACE@ +GUTENPRINTUI_INTERFACE_AGE = @GUTENPRINTUI_INTERFACE_AGE@ +GUTENPRINTUI_LIBDEPS = @GUTENPRINTUI_LIBDEPS@ +GUTENPRINTUI_LIBS = $(top_builddir)/src/gutenprintui/libgutenprintui.la +GUTENPRINTUI_VERSION = @GUTENPRINTUI_VERSION@ +GUTENPRINT_BINARY_AGE = @GUTENPRINT_BINARY_AGE@ +GUTENPRINT_CFLAGS = @GUTENPRINT_CFLAGS@ +GUTENPRINT_CURRENT_INTERFACE = @GUTENPRINT_CURRENT_INTERFACE@ +GUTENPRINT_INTERFACE_AGE = @GUTENPRINT_INTERFACE_AGE@ +GUTENPRINT_LIBDEPS = @GUTENPRINT_LIBDEPS@ + +# Libraries +GUTENPRINT_LIBS = $(top_builddir)/src/main/libgutenprint.la +GUTENPRINT_MAJOR_VERSION = @GUTENPRINT_MAJOR_VERSION@ +GUTENPRINT_MICRO_VERSION = @GUTENPRINT_MICRO_VERSION@ +GUTENPRINT_MINOR_VERSION = @GUTENPRINT_MINOR_VERSION@ +GUTENPRINT_VERSION = @GUTENPRINT_VERSION@ IJS_CFLAGS = @IJS_CFLAGS@ IJS_CONFIG = @IJS_CONFIG@ -IJS_INSTALL = @IJS_INSTALL@ IJS_LIBS = @IJS_LIBS@ -INCLUDES = @INCLUDES@ -INSTOBJEXT = @INSTOBJEXT@ -INTLBISON = @INTLBISON@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SAMPLES_FALSE = @INSTALL_SAMPLES_FALSE@ +INSTALL_SAMPLES_TRUE = @INSTALL_SAMPLES_TRUE@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTALL_USER_GUIDE_FALSE = @INSTALL_USER_GUIDE_FALSE@ +INSTALL_USER_GUIDE_TRUE = @INSTALL_USER_GUIDE_TRUE@ INTLLIBS = @INTLLIBS@ -INTLOBJS = @INTLOBJS@ -INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +LDFLAGS = @LDFLAGS@ LEX = @LEX@ -LIBGIMPPRINT_LIBS = @LIBGIMPPRINT_LIBS@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ -LIBM = @LIBM@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ LIBREADLINE_DEPS = @LIBREADLINE_DEPS@ +LIBS = $(INTLLIBS) @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LN_S = @LN_S@ LTALLOCA = @LTALLOCA@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ -LT_AGE = @LT_AGE@ -LT_CURRENT = @LT_CURRENT@ -LT_RELEASE = @LT_RELEASE@ -LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAINTAINER_CFLAGS = @MAINTAINER_CFLAGS@ -MAIN_BIN = @MAIN_BIN@ -MAIN_DAT = @MAIN_DAT@ -MAIN_MAN = @MAIN_MAN@ -MAIN_SCR = @MAIN_SCR@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ -OBJDUMP = @OBJDUMP@ +MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ PLUG_IN_PATH = @PLUG_IN_PATH@ -POFILES = @POFILES@ POSUB = @POSUB@ -PRINT_VASPRINTF = @PRINT_VASPRINTF@ RANLIB = @RANLIB@ RELEASE_DATE = @RELEASE_DATE@ RM = @RM@ -SAMPLE_IMAGES = @SAMPLE_IMAGES@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ STRIP = @STRIP@ -TESTPATTERN_BIN = @TESTPATTERN_BIN@ -TEST_BIN = @TEST_BIN@ TEXI2HTML = @TEXI2HTML@ -USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_LEVEL3_PS_FALSE = @USE_LEVEL3_PS_FALSE@ +USE_LEVEL3_PS_TRUE = @USE_LEVEL3_PS_TRUE@ USE_NLS = @USE_NLS@ +USE_NLS_FALSE = @USE_NLS_FALSE@ +USE_NLS_TRUE = @USE_NLS_TRUE@ VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ YACC = @YACC@ -YACC_PROG = @YACC_PROG@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ cups_bindir = @cups_bindir@ cups_conf_datadir = @cups_conf_datadir@ cups_conf_serverbin = @cups_conf_serverbin@ cups_conf_serverroot = @cups_conf_serverroot@ cups_exec_prefix = @cups_exec_prefix@ cups_prefix = @cups_prefix@ +cups_sbindir = @cups_sbindir@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +gimp2_plug_indir = @gimp2_plug_indir@ gimp_plug_indir = @gimp_plug_indir@ -gimpprint_cflags = @gimpprint_cflags@ -gimpprint_libs = @gimpprint_libs@ - +gutenprint_cflags = @gutenprint_cflags@ +gutenprint_libs = @gutenprint_libs@ +gutenprintui2_cflags = @gutenprintui2_cflags@ +gutenprintui2_libs = @gutenprintui2_libs@ +gutenprintui_cflags = @gutenprintui_cflags@ +gutenprintui_libs = @gutenprintui_libs@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ AUTOMAKE_OPTIONS = 1.4 gnu - MAINT_CHARSET = latin1 +SUBDIRS = developer users_guide +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(LOCAL_CPPFLAGS) $(GNUCFLAGS) +docdir = $(datadir)/doc/$(PACKAGE) +MAINTAINERCLEANFILES = \ + Makefile.in \ + gutenprint-stamp + +EXTRA_DIST = \ + FAQ.html \ + README.maintaining \ + gutenprint.dox.in \ + gutenprintui2.dox.in \ + gutenprint \ + gutenprintui2 \ + gutenprint-stamp \ + gutenprintui2-stamp + +all: all-recursive -SUBDIRS = users_guide - -MANUAL = gimpprint -HTMLDIR = manual-html -DOCS = $(MANUAL).dvi $(MANUAL).ps html-stamp - -IMAGES = print-color.png print-main.png print-setup.png - - -EPS_IMAGES = $(addsuffix .eps,$(basename $(IMAGES))) - -TEXT_IMAGES = $(addsuffix .txt,$(basename $(IMAGES))) -@MAINTAINER_MODE_TRUE@MAINT_MODE = true -@MAINTAINER_MODE_FALSE@MAINT_MODE = false - -USER_GUIDE = $(MANUAL).ps html - -STANDARD_TARGETS = @USER_GUIDE@ -@MAINTAINER_MODE_TRUE@ALL_LOCAL_TARGETS = docs -@MAINTAINER_MODE_FALSE@ALL_LOCAL_TARGETS = $(STANDARD_TARGETS) - -info_TEXINFOS = gimpprint.texi - -gimpprint_TEXINFOS = overview.texi copying.texi gpl.texi introduction.texi using.texi functions.texi programs.texi problems.texi appendices.texi dither.texi weave.texi escp2.texi new-printer.texi indices.texi integrating.texi version.texi - -TEXI2DVIFLAGS = -I $(srcdir) - -CLEAN_MANUALS = $(RM) -rf html-stamp $(HTMLDIR) ; $(RM) -f $(MANUAL).pdf $(MANUAL).ps $(MANUAL).dvi ; $(RM) -f $(EPS_IMAGES) - - -MAINTAINERCLEANFILES = Makefile.in html-stamp - -EXTRA_DIST = $(DOCS) $(IMAGES) $(EPS_IMAGES) $(TEXT_IMAGES) FAQ.html README.maintaining -mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -TEXI2DVI = texi2dvi -TEXINFO_TEX = $(top_srcdir)/scripts/texinfo.tex -INFO_DEPS = gimpprint.info -DVIS = gimpprint.dvi -TEXINFOS = gimpprint.texi -DIST_COMMON = $(gimpprint_TEXINFOS) Makefile.am Makefile.in stamp-vti \ -version.texi - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP_ENV = --best -all: all-redirect .SUFFIXES: -.SUFFIXES: .dvi .info .ps .texi .texinfo .txi -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@stamp-vti - @: - -$(srcdir)/stamp-vti: gimpprint.texi $(top_srcdir)/configure.in - @echo "@set UPDATED `$(SHELL) $(top_srcdir)/scripts/mdate-sh $(srcdir)/gimpprint.texi`" > vti.tmp - @echo "@set EDITION $(VERSION)" >> vti.tmp - @echo "@set VERSION $(VERSION)" >> vti.tmp - @cmp -s vti.tmp $(srcdir)/version.texi \ - || (echo "Updating $(srcdir)/version.texi"; \ - cp vti.tmp $(srcdir)/version.texi) - -@rm -f vti.tmp - @cp $(srcdir)/version.texi $@ - -mostlyclean-vti: - -rm -f vti.tmp - -clean-vti: - -distclean-vti: - -maintainer-clean-vti: - -@MAINTAINER_MODE_TRUE@rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi - -gimpprint.info: gimpprint.texi version.texi $(gimpprint_TEXINFOS) -gimpprint.dvi: gimpprint.texi version.texi $(gimpprint_TEXINFOS) - - -.texi.info: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texi.dvi: - TEXINPUTS=$(top_srcdir)/scripts/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.texi: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texinfo.info: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texinfo: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texinfo.dvi: - TEXINPUTS=$(top_srcdir)/scripts/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi.info: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.txi.dvi: - TEXINPUTS=$(top_srcdir)/scripts/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` -.dvi.ps: - $(DVIPS) $< -o $@ - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(infodir) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - d=$(srcdir); \ - for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ - if test -f $$d/$$ifile; then \ - echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ - $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ - else : ; fi; \ - done; \ - done - @$(POST_INSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ - install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ - done; \ - else : ; fi - -uninstall-info: - $(PRE_UNINSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - ii=yes; \ - else ii=; fi; \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - test -z "$ii" \ - || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ - done - @$(NORMAL_UNINSTALL) - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ - done - -dist-info: $(INFO_DEPS) - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - d=$(srcdir); \ - for file in `cd $$d && eval echo $$base*`; do \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done; \ - done - -mostlyclean-aminfo: - -rm -f gimpprint.aux gimpprint.cp gimpprint.cps gimpprint.dvi \ - gimpprint.fn gimpprint.fns gimpprint.ky gimpprint.kys \ - gimpprint.ps gimpprint.log gimpprint.pg gimpprint.toc \ - gimpprint.tp gimpprint.tps gimpprint.vr gimpprint.vrs \ - gimpprint.op gimpprint.tr gimpprint.cv gimpprint.cn - -clean-aminfo: - -distclean-aminfo: - -maintainer-clean-aminfo: - cd $(srcdir) && for i in $(INFO_DEPS); do \ - rm -f $$i; \ - if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ - rm -f $$i-[0-9]*; \ - fi; \ - done +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/scripts/global.mk $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gutenprint.dox: $(top_builddir)/config.status $(srcdir)/gutenprint.dox.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +gutenprintui2.dox: $(top_builddir)/config.status $(srcdir)/gutenprintui2.dox.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -396,13 +387,14 @@ maintainer-clean-aminfo: # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. - -@SET_MAKE@ - -all-recursive install-data-recursive install-exec-recursive \ -installdirs-recursive install-recursive uninstall-recursive \ -check-recursive installcheck-recursive info-recursive dvi-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ @@ -414,7 +406,7 @@ check-recursive installcheck-recursive info-recursive dvi-recursive: local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ @@ -422,13 +414,24 @@ check-recursive installcheck-recursive info-recursive dvi-recursive: mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ - rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ - rev="$$subdir $$rev"; \ - test "$$subdir" = "." && dot_seen=yes; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ + rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ @@ -438,262 +441,265 @@ maintainer-clean-recursive: local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ - here=`pwd` && cd $(srcdir) \ - && mkid -f$$here/ID $$unique $(LISP) + mkid -fID $$unique +tags: TAGS -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ - fi; \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ done; \ - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ - || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) - -mostlyclean-tags: + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique -clean-tags: +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = doc + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @for file in $(DISTFILES); do \ - d=$(srcdir); \ + $(mkdir_p) $(distdir)/../scripts + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ fi; \ done - for subdir in $(SUBDIRS); do \ + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ - chmod 777 $(distdir)/$$subdir; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ || exit 1; \ fi; \ done - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook -info-am: $(INFO_DEPS) -info: info-recursive -dvi-am: $(DVIS) -dvi: dvi-recursive check-am: all-am check: check-recursive -installcheck-am: -installcheck: installcheck-recursive -install-exec-am: +all-am: Makefile all-local +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive install-exec: install-exec-recursive - -install-data-am: install-info-am install-data-local install-data: install-data-recursive +uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-recursive -uninstall-am: uninstall-info -uninstall: uninstall-recursive -all-am: Makefile $(INFO_DEPS) all-local -all-redirect: all-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: installdirs-recursive -installdirs-am: - $(mkinstalldirs) $(DESTDIR)$(infodir) - +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -mostlyclean-am: mostlyclean-vti mostlyclean-aminfo mostlyclean-tags \ - mostlyclean-generic +clean: clean-recursive -mostlyclean: mostlyclean-recursive +clean-am: clean-generic clean-libtool mostlyclean-am -clean-am: clean-vti clean-aminfo clean-tags clean-generic \ - mostlyclean-am clean-local +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags -clean: clean-recursive +dvi: dvi-recursive -distclean-am: distclean-vti distclean-aminfo distclean-tags \ - distclean-generic clean-am - -rm -f libtool +dvi-am: -distclean: distclean-recursive +info: info-recursive -maintainer-clean-am: maintainer-clean-vti maintainer-clean-aminfo \ - maintainer-clean-tags maintainer-clean-generic \ - distclean-am maintainer-clean-local - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool -.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \ -install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \ -clean-aminfo maintainer-clean-aminfo install-data-recursive \ -uninstall-data-recursive install-exec-recursive \ -uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ -all-recursive check-recursive installcheck-recursive info-recursive \ -dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ -maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ -dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ -install-exec install-data-local install-data-am install-data install-am \ -install uninstall-am uninstall all-local all-redirect all-am all \ -installdirs-am installdirs mostlyclean-generic distclean-generic \ -clean-generic maintainer-clean-generic clean mostlyclean distclean \ -maintainer-clean +pdf-am: + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local check \ + check-am clean clean-generic clean-libtool clean-recursive \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-recursive distclean-tags distdir \ + dvi dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-local maintainer-clean-recursive mostlyclean \ + mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-info-am @SET_MAKE@ -all-local: $(DOCS) +export STP_MODULE_PATH = $(top_builddir)/src/main/.libs:$(top_builddir)/src/main +export STP_DATA_PATH = $(top_srcdir)/src/main -docs: $(DOCS) - cd users_guide; $(MAKE) docs +# Rules -ps: $(MANUAL).ps - cd users_guide; $(MAKE) ps +$(top_builddir)/src/main/libgutenprint.la: + cd $(top_builddir)/src/main; \ + $(MAKE) -pdf: $(MANUAL).pdf - cd users_guide; $(MAKE) pdf -gimpprint.dvi: $(EPS_IMAGES) $(addprefix $(srcdir)/,$(gimpprint_TEXINFOS) $(info_TEXINFOS)) - $(TEXI2DVI) $(TEXI2DVIFLAGS) $(srcdir)/gimpprint.texi +$(top_builddir)/src/gutenprintui/libgutenprintui.la: + cd $(top_builddir)/src/gutenprintui; \ + $(MAKE) -%.eps: %.png - $(CONVERT) $< EPS2:$@ +$(top_builddir)/src/gutenprintui2/libgutenprintui2.la: + cd $(top_builddir)/src/gutenprintui2; \ + $(MAKE) -html: html-stamp - cd users_guide; $(MAKE) html +@MAINTAINER_MODE_TRUE@all-local: gutenprint-stamp gutenprintui2-stamp +@MAINTAINER_MODE_FALSE@all-local: -html-stamp: $(addprefix $(srcdir)/,$(gimpprint_TEXINFOS) $(info_TEXINFOS)) - $(RM) -rf $(HTMLDIR)-tmp - mkdir $(HTMLDIR)-tmp - images="$(addprefix $(srcdir)/, $(IMAGES))"; \ - for image in $$images ; do \ - cp -p $$image $(HTMLDIR)-tmp ; \ - done - cd $(HTMLDIR)-tmp ; \ - $(TEXI2HTML) -menu -split_node -number -expandinfo \ - -I ../$(srcdir) ../$(srcdir)/$(MANUAL).texi 2>&1 - $(RM) -rf $(HTMLDIR) - mv $(HTMLDIR)-tmp $(HTMLDIR) - touch html-stamp - -$(MANUAL).ps: $(MANUAL).dvi - TEXPICTS=$(srcdir):. $(DVIPS) $< -o $@ - -$(MANUAL).pdf: $(MANUAL).dvi - TEXPICTS=$(srcdir):. $(DVIPDF) $< $@ - -install-data-local: $(STANDARD_TARGETS) - if test -n '$(STANDARD_TARGETS)' ; then \ - $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ - $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ - if test -f $(MANUAL).ps ; then \ - $(INSTALL_DATA) $(MANUAL).ps $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ - elif test -f $(srcdir)/$(MANUAL).ps ; then \ - $(INSTALL_DATA) $(srcdir)/$(MANUAL).ps $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ - fi ; \ - if test -d $(HTMLDIR) ; then \ - HTMLSRCDIR="$(HTMLDIR)" ; \ - elif test -d $(srcdir)/$(HTMLDIR) ; then \ - HTMLSRCDIR="$(srcdir)/$(HTMLDIR)" ; \ - fi ; \ - for file in $$HTMLSRCDIR/* ; do \ - if test -f $$file ; then \ - $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ - fi ; \ - done ; \ - fi +# Rerun doxygen whenever autogen is run +gutenprintui2: gutenprintui2-stamp +gutenprintui2-stamp: gutenprintui2.dox $(top_srcdir)/configure + $(RM) -rf gutenprintui2/html + $(DOXYGEN) gutenprintui2.dox + touch $@ -dist-hook: html - for dir in $(HTMLDIR) ; do \ - if test -d $(srcdir)/$$dir ; then \ - mkdir $(distdir)/$$dir; \ - for dirfile in $(srcdir)/$$dir/*; do \ - if test -f $$dirfile ; then \ - cp -p $$dirfile $(distdir)/$$dir; \ - fi \ - done \ - fi \ - done +gutenprint: gutenprint-stamp +gutenprint-stamp: gutenprint.dox $(top_srcdir)/configure + $(RM) -rf gutenprint/html + $(DOXYGEN) gutenprint.dox + touch $@ -clean-local: - if test $(srcdir) = '.' -a $(MAINT_MODE) = false ; then \ - echo 'clean-local: Not removing $(HTMLDIR)' ; \ - echo 'clean-local: Not removing $(MANUAL).pdf' ; \ - echo 'clean-local: Not removing $(MANUAL).ps' ; \ - echo 'clean-local: Not removing $(MANUAL).dvi' ; \ - echo 'clean-local: Not removing EPS figures' ; \ - else \ - $(CLEAN_MANUALS) ; \ - fi - -$(RM) -rf *.tex *.log *.aux *.gz *.out *.junk *.fot - -$(RM) -rf *.ky *.pg *.toc *.tp *.vr *.vrs - -$(RM) -rf $(HTMLDIR)-tmp +docs: gutenprint-stamp + cd developer; $(MAKE) + cd users_guide; $(MAKE) + +ps: $(MANUAL).ps + cd developer; $(MAKE) ps + cd users_guide; $(MAKE) ps -veryclean: - $(MAKE) MAINT_MODE=true clean +pdf: $(MANUAL).pdf + cd developer; $(MAKE) pdf + cd users_guide; $(MAKE) pdf + +html: + cd developer; $(MAKE) html + cd users_guide; $(MAKE) html maintainer-clean-local: - $(CLEAN_MANUALS) - -# We duplicate mostlyclean-aminfo here because we do not want to remove -# the .dvi and .ps files that mostlyclean-aminfo wants to remove. The -# reason why is that we do not want make clean to force a rebuild of the -# doc, since users may not have the texinfo tools required to do so. -# Unfortunately, this generates a warning about overriding commands for -# mostlyclean-aminfo. -mostlyclean-aminfo: - -$(RM) -f gimpprint.aux gimpprint.cp gimpprint.cps \ - gimpprint.fn gimpprint.fns gimpprint.ky gimpprint.kys \ - gimpprint.log gimpprint.pg gimpprint.toc \ - gimpprint.tp gimpprint.tps gimpprint.vr gimpprint.vrs \ - gimpprint.op gimpprint.tr gimpprint.cv gimpprint.cn - -.PHONY: html ps pdf docs clean-manuals + $(RM) -r gutenprint +.PHONY: html ps pdf docs # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/doc/README.maintaining b/doc/README.maintaining index cbcbd77..642a123 100644 --- a/doc/README.maintaining +++ b/doc/README.maintaining @@ -1,220 +1,288 @@ BUILD SCRIPTS: how they work and how to modify them =================================================== -A guide to the GIMP-Print build system. +A guide to the Gutenprint build system. Introduction ------------ -GIMP-Print uses GNU autoconf and automake to generate the scripts that build -the software. It also uses libtool to create shared libraries. This file -describes how they work together. It also discusses the thinking behind how -they are used in GIMP-Print, and how to modify the GIMP-Print build scripts -without breaking other things. If you have used autoconf and automake before, -there will be little that is new in this file, but you should note the -conventions used in GIMP-Print. +Gutenprint uses GNU autoconf and automake to generate the scripts that +build the software. It also uses libtool to create shared libraries. +This file describes how they work together. It also discusses the +thinking behind how they are used in Gutenprint, and how to modify the +Gutenprint build scripts without breaking other things. If you have +used autoconf and automake before, there will be little that is new in +this file, but you should note the conventions used in Gutenprint. This file is split into the following sections: - o Integration of the autotools - o Normal use of the tools - - Using CVS - - Setting up the build scripts from CVS - - Building the package - o configure.in.in - - Layout - - AC_SUBST - - AC_DEFINE and AC_DEFINE_UNQUOTED - - AM_CONDITIONAL - o Makefile.am - - Automake basics - - Make and subdirectories - - Conditional compilation - - When automake is not enough... - + Rule syntax - + Correctly referencing files - o aclocal - o config.h - o libgimpprint and libprintut - o automake subtleties - o libtool tricks - o Testing changes to the build scripts - o Further information - o Known problems - -I hope you find this useful. If any part was not clear, or there was something -that you would like covering, please let me know! - - -- Roger Leigh - - $Id: README.maintaining,v 1.8.2.1 2004/04/19 00:01:48 rlk Exp $ - - -1. Integration of the autotools + o Setting up the autotools + o Integration of the autotools + o Normal use of the tools + - Using CVS + - Setting up the build scripts from CVS + - Building the package + o configure.ac + - Layout + - AC_SUBST + - AC_DEFINE and AC_DEFINE_UNQUOTED + - AM_CONDITIONAL + o Makefile.am + - Automake basics + - Make and subdirectories + - Conditional compilation + - When automake is not enough... + + Rule syntax + + Correctly referencing files + o aclocal + o config.h + o libgutenprint + o automake subtleties + o libtool tricks + o Testing changes to the build scripts + o Further information + o Known problems + +I hope you find this useful. If any part was not clear, or there was +something that you would like covering, please let me know! + + -- Roger Leigh + + $Id: README.maintaining,v 1.19 2004/09/17 18:37:42 rleigh Exp $ + + +1. Setting up the autotools +--------------------------- + +To build Gutenprint from CVS, or to regenerate the build scripts after +modifying them, you need to install a number of GNU tools: + +i. GNU autoconf (at least 2.54) +ii. GNU automake (at least 1.5; 1.7 recommended) +iii. GNU libtool (at least 1.4.3; 1.5 recommended) +iv. GNU gettext (at least 0.11.x) +v. GNU make (any recent version) + +and also + +vi. pkg-config (at least 0.15.0) + +GNU autoconf made some incompatible changes between the 2.13 and 2.50 +stable releases. You cannot use a configure.in written for 2.13 with +2.5x releases. This means that to build the 4.2-branch and the +mainline on the same machine, you need to install multiple versions of +the autotools. You can do this by running configure with the same +--prefix, but also use --program-suffix=VERSION where VERSION is the +autoconf version you are building. + +Debian GNU/Linux has an autoconf2.13 package with a wrapper script +which can correctly invoke the right autoconf version. This makes +using the old and new versions together very easy. To get it, + +1. download the Debian (.deb) package from + ftp://ftp.debian.org/debian/pool/main/a/autoconf2.13/ +2. extract the file with + ar -xv autoconf2.13_2.13-43_all.deb data.tar.gz + ==> x - data.tar.gz + tar -xzf data.tar.gz ./usr/bin +3. copy ./usr/bin/autoconf-wrapper to /usr/bin +4. symlink `autoconf', `autoreconf' and `autoheader' to + `autoconf-wrapper' (your real autoconf versions are named + autoconfVERSION). +5. You may have to edit the wrapper to get in to invoke the right 2.5x + version. + +Similar problems may be seen with GNU automake, but you can again +configure with a program suffix. You will, however, need to update a +symlink manually, perhaps using one in your home bindir. automake 1.4 +works with autoconf2.13; automake1.5 works with autoconf2.13 and 2.5x +but is old; automake1.6+ will only work with new 2.5x autoconf +versions but are the current releases. I suggest using 1.4 and 1.7 +together. Different versions of autoconf need separate aclocal +directories, to prevent m4 macros clashing. + +GNU gettext 0.11.x (current) releases will not work properly with +current CVS Gutenprint because of changes to gettextize. We need to +use autopoint, but this will break backward compatibility with 0.10.x +releases (due to a new autoconf macro being required). The change +will need to be made at some point in the near future. + +Hopefully these compatibility problems will not be as bad in the +future... + + +2. Integration of the autotools ------------------------------- -Each directory has a Makefile.am file which is processed by automake to produce -a Makefile.in. In the root directory there is a configure.in.in which is -processed by autogen.sh to produce configure.in. configure.in is processed by -autoconf to make a script called configure. When run, configure does various -tests and checks, and then reads each Makefile.in to make a Makefile, and also -generates a header called config.h from config.h.in. config.h.in is produced -with autoheader from configure.in and acconfig.h. autoconf also requires a +Each directory has a Makefile.am file which is processed by automake +to produce a Makefile.in. In the root directory there is a +configure.ac.in which is processed by autoconf to make a script called +configure. When run, configure does various tests and checks, and +then reads each Makefile.in to make a Makefile, and also generates a +header called config.h from config.h.in. config.h.in is produced with +autoheader from configure.ac and acconfig.h. autoconf also requires a file aclocal.m4 which is generated by aclocal. -All these files are generated simply by running `./autogen.sh' in the top -directory. If you are using a distributed version of GIMP-Print, as opposed to -CVS, then they will already be present and the following will not be necessary. +All these files are generated simply by running `./autogen.sh' in the +top directory. If you are using a distributed version of Gutenprint, +as opposed to CVS, then they will already be present and the following +will not be necessary. -This is probably best demonstrated graphically. The relationships between the -files are as follows: +This is probably best demonstrated graphically. The relationships +between the files are as follows: During package setup (from CVS), running autogen.sh: - autogen.sh - configure.in.in ------------> configure.in + autogen.sh + m4extra/stp_release.m4.in ------------> m4/stp_release.m4 - gettext files added - libtool files added - aclocal - configure.in ------------> aclocal.m4 + gettext files added + libtool files added + aclocal + m4/* + m4local/* + configure.ac ------------> aclocal.m4 - autoheader - acconfig.h + configure.in ------------> config.h.in + autoheader + acconfig.h + configure.ac ------------> config.h.in - automake - Makefile.am ------------> Makefile.in + automake + Makefile.am ------------> Makefile.in - autoconf - aclocal.m4 + configure.in ------------> configure + autoconf + aclocal.m4 + configure.ac ------------> configure Running configure: - configure - Makefile.in ------------> Makefile - config.h.in ------------> config.h - headers.h.in ------------> headers.h - manpage.n.in ------------> manpage.n + configure (->config.status) + Makefile.in ------------> Makefile + config.h.in ------------> config.h + headers.h.in ------------> headers.h + manpage.n.in ------------> manpage.n -2. Normal use of the tools +3. Normal use of the tools -------------------------- -This section describes how to use the scripts for basic day-to-day working. +This section describes how to use the scripts for basic day-to-day +working. -2.1 Using CVS +3.1 Using CVS ------------- -The latest working copy of GIMP-Print (HEAD) and all prior releases are -available from CVS either anonymously (read-only with CVS pserver) or -authenticated (read-write with SSH). The modulename for GIMP-Print is 'print'. +The latest working copy of Gutenprint (HEAD) and all prior releases +are available from CVS either anonymously (read-only with CVS pserver) +or authenticated (read-write with SSH). The modulename for Gutenprint +is 'print'. Anonymous CVS access: -The module you wish to check out must be specified as the modulename. When -prompted for a password for anonymous, simply press the Enter key. +The module you wish to check out must be specified as the modulename. +When prompted for a password for anonymous, simply press the Enter +key. - $ cvs -d:pserver:anonymous@cvs.gimp-print.sourceforge.net:/cvsroot/gimp- - print login - $ cvs -z3 - -d:pserver:anonymous@cvs.gimp-print.sourceforge.net:/cvsroot/gimp-print - co modulename + $ cvs -d:pserver:anonymous@cvs.gimp-print.sourceforge.net:/cvsroot/gimp- + print login + $ cvs -z3 + -d:pserver:anonymous@cvs.gimp-print.sourceforge.net:/cvsroot/gimp-print + co modulename Developer CVS access via SSH: -Only project developers can access the CVS tree via this method. SSH1 must be -installed on your client machine. Substitute modulename and developername with -the proper values. Enter your site password when prompted. See the sourceforge -documentation for more details, including how to use RSA keys for -authentication. +Only project developers can access the CVS tree via this method. SSH1 +must be installed on your client machine. Substitute modulename and +developername with the proper values. Enter your site password when +prompted. See the sourceforge documentation for more details, +including how to use RSA keys for authentication. - $ export CVS_RSH=ssh - $ cvs -z3 - -ddevelopername@cvs.gimp-print.sourceforge.net:/cvsroot/gimp-print - co modulename + $ export CVS_RSH=ssh + $ cvs -z3 + -ddevelopername@cvs.gimp-print.sourceforge.net:/cvsroot/gimp-print + co modulename -The CVS info documentation has very detailed explanations of everything that -can be done with CVS. +The CVS info documentation has very detailed explanations of +everything that can be done with CVS. -2.2 Setting up the build scripts from CVS +3.2 Setting up the build scripts from CVS ----------------------------------------- -After initially getting a copy of GIMP-Print from CVS, or if any of the scripts -have changed, simply run autogen.sh: +After initially getting a copy of Gutenprint from CVS, or if any of +the scripts have changed, simply run autogen.sh: - $ ./autogen.sh [options] + $ ./autogen.sh [options] -Note that one can pass any options to autogen.sh that one would normally pass -to configure. './configure --help' will give a complete list of options one -can use. +Note that one can pass any options to autogen.sh that one would +normally pass to configure. './configure --help' will give a complete +list of options one can use. -2.3 Building the package +3.3 Building the package ------------------------ -The normal method is to run the `configure' script, and then `make'. The -package can then be installed with 'make install': +The normal method is to run the `configure' script, and then `make'. +The package can then be installed with 'make install': - $ ./configure - $ make - $ make [DESTDIR=... VAR1=val1 VARn=valn] install + $ ./configure + $ make + $ make [DESTDIR=... VAR1=val1 VARn=valn] install -If the build scripts have been modified, it will not normally be necessary to -re-run autogen.sh: the Makefiles will notice and regenerate themselves, running -autoconf, automake, aclocal and configure again if needed. If configure.in.in -has been modified, re-run autogen.sh manually to regenerate configure.in. +If the build scripts have been modified, it will not normally be +necessary to re-run autogen.sh: the Makefiles will notice and +regenerate themselves, running autoconf, automake, aclocal and +configure again if needed. -The build is only guaranteed to work if make is run from the top level. It -should be possible to make individual subdirectories, but sometimes this will -cause problems e.g. if it depends on some other directory that should have -been built first. +The build is only guaranteed to work if make is run from the top +level. It should be possible to make individual subdirectories, but +sometimes this will cause problems e.g. if it depends on some other +directory that should have been built first. A common problem is getting errors about a non-existent file called -`doc/version.texi'. This file is automatically generated. It will -be generated if you run make after running './autogen.sh' or -'./configure --enable-maintainer-mode'. It is only generated if -`maintainer-mode' is enabled. - -Other packages (including the extra development packages on some systems) must -be installed on your system to build correctly. These include: autoconf, -automake, libtool, gtk, gdk, gimp 1.2, cups, foomatic, makeinfo, readline -texi2html. Not all these need to be installed, depending on the configure -options used. It might be necessary to get the latest releases of some of -these packages, as critical bugs present in easrlier releases have been fixed. -The latest gettext and texi2html are strongly suggested. - -2.4 Extra make targets +`doc/version.texi'. This file is automatically generated. It will be +generated if you run make after running './autogen.sh' or './configure +--enable-maintainer-mode'. It is only generated if `maintainer-mode' +is enabled, and should be present in the release tarball. + +Other packages (including the extra development packages on some +systems) must be installed on your system to build correctly. These +include: autoconf, automake, libtool, gtk, gdk, gimp 1.2, gimp 2.0, +cups, foomatic, makeinfo, jade/jadetex, readline, SGML tools, +texi2html. Not all these need to be installed, depending on the +configure options used. It might be necessary to get the latest +releases of some of these packages, as critical bugs present in +earlier releases have been fixed. The latest gettext and texi2html +are strongly suggested. + +3.4 Extra make targets ---------------------- -The Makefiles can do much more than build the package. `targets' can be -given to make, which do various things. They are used as follows: +The Makefiles can do much more than build the package. `targets' can +be given to make, which do various things. They are used as follows: - $ make target1 target2 ... + $ make target1 target2 ... Some of the targets available are: - all same as make with no targets - clean remove everything generated by 'make all' - distclean as clean, and everything generated by configure - maintainer-clean as distclean, and everything generated by - autogen.sh - install install the package - uninstall uninstall the package - tags make tags tables - dist make a distribution - distcheck as dist, but test it as well - gimp-dist package the for inclusion in the GIMP tree + all same as make with no targets + clean remove everything generated by 'make all' + distclean as clean, and everything generated by configure + maintainer-clean as distclean, and everything generated by + autogen.sh + install install the package + uninstall uninstall the package + tags make tags tables + dist make a distribution + distcheck as dist, but test it as well Other targets are available. See Makefile.in for details. -3. configure.in.in ------------------- +4. configure.ac +--------------- -This file is a Bourne shell script with m4 macros embedded in it. It is parsed -with sed to produce configure.in, which has hard-coded release dates in it. -autoconf expands the m4 macros to produce configure. +This file is a Bourne shell script with m4 macros embedded in it. +autoconf expands the m4 macros to produce configure. The configure +script includes macros from the m4 and m4local directories, including +ones to hard-code the release date into configure. -3.1 Layout +4.1 Layout ---------- The file is split into mostly discrete sections: + i. Versioning details (including library versioning) ii. autoconf and automake initialisation iii. libtool setup -iv. Default settings +iv. Default settings (now part of v) v. configure --with and --enable options vi. Checks for programs vii. Compiler flags @@ -226,64 +294,65 @@ xii. CUPS path settings xiii. Definitions and substitutions xiv. Parse and output files -The ordering of sections is based solely on that some checks depend on checks -being performed previously. There is sometimes some overlap between sections, -but any additions should go into the appropriate section, if at all possible. -A new section may be created if there is no suitable section. +The ordering of sections is based solely on that some checks depend on +checks being performed previously. There is sometimes some overlap +between sections, but any additions should go into the appropriate +section, if at all possible. A new section may be created if there is +no suitable section. -3.2 AC_SUBST +4.2 AC_SUBST ------------ -The main use of the configure script is to produce customised Makefiles, and -other files too. This is done through the use of AC_SUBST, which makes a -variable get substituted in a file: +The main use of the configure script is to produce customised +Makefiles, and other files too. This is done through the use of +AC_SUBST, which makes a variable get substituted in a file: - ESCPUTIL_BIN="escputil" - AC_SUBST(ESCPUTIL_BIN) + ESCPUTIL_BIN="escputil" + AC_SUBST(ESCPUTIL_BIN) -will replace any instance of @ESCPUTIL_BIN@ in a template file (ending in -.in'). E.g. +will replace any instance of @ESCPUTIL_BIN@ in a template file (ending +in .in'). E.g. - bin_PROGRAMS = @ESCPUTIL_BIN@ + bin_PROGRAMS = @ESCPUTIL_BIN@ -3.3 AC_DEFINE and AC_DEFINE_UNQUOTED +4.3 AC_DEFINE and AC_DEFINE_UNQUOTED ------------------------------------ These macros are used to insert a #define in config.h. - AC_DEFINE(MACRO) + AC_DEFINE(MACRO) -will cause '#define MACRO 1' to appear in config.h (this will be of the form -'#undef MACRO' in config.h.in) +will cause '#define MACRO 1' to appear in config.h (this will be of +the form '#undef MACRO' in config.h.in) -AC_DEFINE_UNQUOTED is the same as AC_DEFINE, except that a second option -can be used to define a string literal. +AC_DEFINE_UNQUOTED is the same as AC_DEFINE, except that a second +option can be used to define a string literal. -3.4 AM_CONDITIONAL +4.4 AM_CONDITIONAL ------------------ -This is used to make certain parts of a Makefile conditional depending on -what happens in configure. It is used in the form: +This is used to make certain parts of a Makefile conditional depending +on what happens in configure. It is used in the form: - AM_CONDITIONAL(NAME, test) - where name is the name of the conditional you define, and test - is a check that must return true for the conditional to be - defined. + AM_CONDITIONAL(NAME, test) + where name is the name of the conditional you define, and test + is a check that must return true for the conditional to be + defined. This is used in a Makefile.am as follows: - if NAME - [do stuff] - endif + if NAME + [do stuff] + endif -Not that only one line can be made conditional, and that you cannot also use -normal make conditionals. Its main use is to define macros, or to make a -rule conditional. +Note that you cannot also use normal make conditionals. Its main use +is to define macros, or to make a rule conditional. -4. Makefile.am +5. Makefile.am -------------- -There is a Makefile.am in each directory, apart from a few where the Makefile -the next level up handles things. Each Makefile.am is split into several -sections: +There is a Makefile.am in each directory, apart from a few where the +Makefile the next level up handles things. Each Makefile.am is split +into several sections: + i. Macros common to every Makefile.am ii. Path macros iii. Compiler macros @@ -296,262 +365,245 @@ v. Rules vi. Cleaning macros vii. EXTRA_DIST -Keeping everything in this logical order keeps them neat and readable. Not -every Makefile.am will have all these sections, but those that are present -should be ordered in this way. +Keeping everything in this logical order keeps them neat and readable. +Not every Makefile.am will have all these sections, but those that are +present should be ordered in this way. -4.1 Automake basics +5.1 Automake basics ------------------- -Automake parses Makefile.am, and generates rules in Makefile.in depending on -what it finds. There are `primary' variables, such as PROGRAMS, SCRIPTS, -MANS, HEADERS and DATA that describe the type of source one is defining. These -are coupled with a location to install into. For example, these are a few -standard locations: bindir, sbindir, mandir, datadir, pkgdatadir. You can -define your own quite easily. They are used together as follows: - - bin_PROGRAMS = myprog [where bindir=$(prefix)/bin] - pkgdata_DATA = datafile1 datafile2 - [where pkgdatadir=$(prefix)/share/$(PACKAGE)] - -Note! the 'dir' postfix is stripped off the location. I.e. bindir -> bin. -That is all there is to it! You can use these simple variables to describe -everything in your source, and where is gets installed to. - In the case of PROGRAMS, one also has to specify the SOURCES as well. -E.g. in the example above, a binary called `myprog' was defined. The sources -for this program are defined as follows: - - myprog_SOURCES = myprog.c myprog.h - -automake will create all of the rules needed to build and install everything. -An extra point is that suppose one doesn't want to install something? For this -there is a 'noinst' macro, so that noinst_PROGRAMS will not ever be installed. -One might also want noinst_HEADERS. If one wanted to install headers, one would -define - - includedir=$(prefix)/include +Automake parses Makefile.am, and generates rules in Makefile.in +depending on what it finds. There are `primary' variables, such as +PROGRAMS, SCRIPTS, MANS, HEADERS and DATA that describe the type of +source one is defining. These are coupled with a location to install +into. For example, these are a few standard locations: bindir, +sbindir, mandir, datadir, pkgdatadir. You can define your own quite +easily. They are used together as follows: + + bin_PROGRAMS = myprog [where bindir=$(prefix)/bin] + pkgdata_DATA = datafile1 datafile2 + [where pkgdatadir=$(prefix)/share/$(PACKAGE)] + +Note! the 'dir' postfix is stripped off the location. I.e. bindir -> +bin. That is all there is to it! You can use these simple variables +to describe everything in your source, and where is gets installed to. + +In the case of PROGRAMS, one also has to specify the SOURCES as well. +E.g. in the example above, a binary called `myprog' was defined. The +sources for this program are defined as follows: + + myprog_SOURCES = myprog.c myprog.h + +automake will create all of the rules needed to build and install +everything. An extra point is that suppose one doesn't want to +install something? For this there is a 'noinst' macro, so that +noinst_PROGRAMS will not ever be installed. One might also want +noinst_HEADERS. If one wanted to install headers, one would define + + includedir=$(prefix)/include and then - pkgincludedir=$(includedir)/$(PACKAGE). + pkgincludedir=$(includedir)/$(PACKAGE). Now - pkginclude_HEADERS = myheader.h - -will install the header into the correct location. Some of the locations in the -above examples are defined by default. The others must be defined by hand. - There are also some macros with specific functions. Any file that is not -mentioned in a macro, and also and MANS, will have to be put in an EXTRA_DIST -macro, so that automake knows to distribute them. - Also, some files might not be automatically cleaned. There are CLEANFILES, -DISTCLEANFILES and MAINTAINERCLEANFILES macros for use with the 'clean', -'distclean' and 'maintainer-clean' make targets respectively. Use with caution! -One does not want to clean things that cannot be recreated! CLEANFILES should -be regenerated with 'make' as part of the build process, DISTCLEANFILES by -configure (e.g. Makefiles) and MAINTAINERCLEANFILES should be created by -'autogen.sh' and the programs it calls (e.g. Makefile.in's which are created by -automake). - -4.2 Make and subdirectories + pkginclude_HEADERS = myheader.h + +will install the header into the correct location. Some of the +locations in the above examples are defined by default. The others +must be defined by hand. + +There are also some macros with specific functions. Any file that is +not mentioned in a macro, and also and MANS, will have to be put in an +EXTRA_DIST macro, so that automake knows to distribute them. + +Also, some files might not be automatically cleaned. There are +CLEANFILES, DISTCLEANFILES and MAINTAINERCLEANFILES macros for use +with the 'clean', 'distclean' and 'maintainer-clean' make targets +respectively. Use with caution! One does not want to clean things +that cannot be recreated! CLEANFILES should be regenerated with +'make' as part of the build process, DISTCLEANFILES by configure +(e.g. Makefiles) and MAINTAINERCLEANFILES should be created by +'autogen.sh' and the programs it calls (e.g. Makefile.in's which are +created by automake). + +5.2 Make and subdirectories --------------------------- If a Makefile.am has a SUBDIRS macro, make will recurse through these -subdirectories, running make in each one. e.g. in the top-level Makefile.am: +subdirectories, running make in each one. e.g. in the top-level +Makefile.am: - SUBDIRS = intl lib man src test po + SUBDIRS = intl lib man src test po -In this case the order of directories is critical: lib, src and test depend on -intl being built and src and test depend on lib being built. Also, test depends -on libgimpprint in src and po must be run after all the source has been built -(as it parses all C source, possibly including dynamically generated code). The -same applies in src/Makefile.am: most directories require libgimpprint for -linking with, and libgimpprint requires printdef. - Therefore the order of building is critical! It should be technically +In this case the order of directories is critical: lib, src and test +depend on intl being built and src and test depend on lib being built. +Also, test depends on libgutenprint in src and po must be run after all +the source has been built (as it parses all C source, possibly +including dynamically generated code). The same applies in +src/Makefile.am: most directories require libgutenprint for linking +with, and libgutenprint requires printdef. + +Therefore the order of building is critical! It should be technically possible to run make in any subdirectory and have all the dependencies -satisfied by rules in that Makefile. Unfortunately, this requires complex rules -in each directory, and this cannot be done as the source tree gets bigger and -more complex. As a result, one should only run make from the top level, as -only this is certain to satisfy all dependencies. +satisfied by rules in that Makefile. Unfortunately, this requires +complex rules in each directory, and this cannot be done as the source +tree gets bigger and more complex. As a result, one should only run +make from the top level, as only this is certain to satisfy all +dependencies. -4.3 Conditional compilation +5.3 Conditional compilation --------------------------- -Most of the source is conditionally compiled according to the defaults in -configure.in.in, which may be overridden by passing options to configure, -or possibly by the results of configure checks. Depending on the result, -configure may substitute what to build into the generated Makefile, e.g.: +Most of the source is conditionally compiled according to the defaults +in configure.ac, which may be overridden by passing options to +configure, or possibly by the results of configure checks. Depending +on the result, configure may substitute what to build into the +generated Makefile, e.g.: - bin_PROGRAMS = @ESCPUTIL_BIN@ - EXTRA_PROGRAMS = escputil + if BUILD_ESCPUTIL + bin_PROGRAMS = escputil + endif -It is important to have the EXTRA_ macro, as otherwise the source will -not get distributed. +If you use @@ substitutions, make sure that you use the EXTRA_ prefix +(e.g. EXTRA_PROGRAMS), so that automake knows what is to be built. -4.4 When automake is not enough... +5.4 When automake is not enough... ---------------------------------- -When one wants to do something that is not within the scope of the facilities -automake provides, one can write one's own rules, just like in any other -Makefile. +When one wants to do something that is not within the scope of the +facilities automake provides, one can write one's own rules, just like +in any other Makefile. 4.4.1 Rule syntax Make rules take the following form: - target ... : prerequisites ... - commands - ... - ... + target ... : prerequisites ... + commands + ... + ... where - target is the name of a file (or files) to create - prerequisites are files that are needed to make the target - commands are commands to make the target + target is the name of a file (or files) to create + prerequisites are files that are needed to make the target + commands are commands to make the target + +The target will only be made if it does not exist or the timestamp on +any of the prerequisites is newer, indicating that it is out of date. -The target will only be made if it does not exist or the timestamp on any of the -prerequisites is newer, indicating that it is out of date. - make is a complex program, and this is just the bare basic operation. See -the GNU make info documentation for a detailed explanation. +make is a complex program, and this is just the bare basic +operation. See the GNU make info documentation for a detailed +explanation. 4.4.2 Correctly referencing files -A file may be present either in the _source_ or _build_ directory, which may or -may not be the same. The source directory contains the unchanging source files, -whereas the build directory contains all the generated files, such as -Makefiles, object code, libraries and executables and also generated headers, C -source and manual pages. The macros to use are: +A file may be present either in the _source_ or _build_ directory, +which may or may not be the same. The source directory contains the +unchanging source files, whereas the build directory contains all the +generated files, such as Makefiles, object code, libraries and +executables and also generated headers, C source and manual pages. +The macros to use are: - $(srcdir) The equivalent directory in the source tree - . The build directory (which is the current directory) - $(top_srcdir) The highest level of the source tree - $(top_builddir) The highest level of the build tree + $(srcdir) The equivalent directory in the source tree + . The build directory (current directory) + $(top_srcdir) The highest level of the source tree + $(top_builddir) The highest level of the build tree -5. aclocal +6. aclocal ---------- -aclocal contains all the macros that are needed by autoconf to generate -configure from configure.in. It is created by running 'aclocal'. If any of the -macros are not present on your system, you can point out where the macros -distributed with GIMP-Print are by using '-I macrodir' with aclocal. E.g. if -AM_PATH_GIMPPRINT is missing, you can make it use src/main/gimpprint.m4 with -'aclocal -I src/main'. +aclocal contains all the macros that are needed by autoconf to +generate configure from configure.ac. It is created by running +'aclocal'. If any of the macros are not present on your system, you +can point out where the macros distributed with Gutenprint are by +using '-I macrodir' with aclocal. -6. config.h +7. config.h ----------- -config.h is created by configure and included by all of the C source files in -the distribution. It is created from config.h.in by 'configure'. config.h.in -is created from configure.in and acconfig.h by 'autoheader'. If you add any -AC_DEFINE, or AC_DEFINE_UNQUOTED macros to configure.in.in, you may be required -to add entries to acconfig.h. If you defined 'HAVE_FOO_H' you would add -something like: - /* Define if foo.h is present */ - #undef HAVE_FOO_H -to acconfig.h +config.h is created by configure and should beincluded by all of the C +source files in the distribution. It is created from config.h.in by +'configure'. config.h.in is created from configure.ac by +'autoheader'. -7. libgimpprint and libprintut +8. libgutenprint +---------------- -Any source that is to link with libgimpprint should include the gimp-print.h +Any source that is to link with libgutenprint should include the gutenprint.h header. The right way to do this is as follows: - #ifdef INCLUDE_GIMP_PRINT_H - # include INCLUDE_GIMP_PRINT_H - #else - # include - #endif + #include -This is so that an installed version of libgimpprint can be linked against. - To ensure proper linking, the Makefile.am should have the following: +To ensure proper linking, the Makefile.am should have the following: - program_LDADD = $(LIBGIMPPRINT_LIBS) + program_LDADD = $(LIBGUTENPRINT_LIBS) The Makefile.am should also include any necessary CFLAGS with: - INCLUDES = @INCLUDES@ $(LIBGIMPPRINT_CFLAGS) - -It is used with INCLUDES and not CFLAGS because is usually is used to specify -header locations. - If a program uses the utility library libprintut, it must include -libprintut.h: - - #include "../../lib/libprintut.h" + LOCAL_CPPFLAGS = $(LIBGUTENPRINT_CFLAGS) -To link, the library must be specified in the same way as for libgimpprint: - program_LDADD = ../../lib/libprintut.la $(INTLLIBS) ../../lib/libprintut.la - -Note that if it is using gettext, then you have to specify it _twice_. If every -binary is to link with it, then use LIBS instead: - - LIBS = @LIBS@ ../../lib/libprintut.la $(INTLLIBS) ../../lib/libprintut.la - - -8. automake subtleties +9. automake subtleties ---------------------- -Automake parses Makefile.am to produce Makefile.in. Makefile.am looks much like -a normal Makefile, e.g. you can write your own rules in it. However, it is not -entirely like a normal Makefile. In particular, automake conditionals are not -the same as make conditionals in that they only work for single lines, not -whole blocks of lines. Therefore if you want to make a rule conditional, just -surround the 'target: dependencies' line: - - if BUILD_CUPS - install-data-local: ppd - endif - $(mkinstalldirs) $(DESTDIR)$(cups_modeldir) - cd ppd ; \ - for ppdfile in * ; do \ - $(INSTALL_DATA) $$ppdfile $(DESTDIR)$(cups_modeldir) ; \ - done +Automake parses Makefile.am to produce Makefile.in. Makefile.am looks +much like a normal Makefile, e.g. you can write your own rules in it. +However, it is not entirely like a normal Makefile. In particular, +automake conditionals are not the same as make conditionals (which are +not available). Another gotcha is that automake adds rules of its own, so you must make sure -that the names do not clash, or you may get obscure problems occurring. +that the names do not clash, or you may get obscure problems occuring +when you override an automake rule. -9. libtool tricks ------------------ - -libtool is used to create shared libraries. One gotcha with libtool is that if -a program is linked with a libtool shared library in the build tree, then it is -actually created in '.libs/program', and not 'program'. However, if it is -statically linked (e.g. the platform does not support shared libraries, or you -used --disable-shared with configure, perhaps to make the build faster), then -it will be created as 'program'. This is so that you can run the program -before you install it. If it is linked with shared libraries, a wrapper script -does some magic with LD_LIBRARY_PATH. However, this means that your install -rules must take this into account by checking that '.libs/program exists', and -installing it if it is present, but otherwise installing 'program'. Automake -install rules do this automatically, but it you write your own, you must take -this into consideration. - +10. libtool tricks +------------------ -10. Testing changes to the build scripts +libtool is used to create shared libraries. One gotcha with libtool +is that if a program is linked with a libtool shared library in the +build tree, then it is actually created in '.libs/program', and not +'program'. However, if it is statically linked (e.g. the platform +does not support shared libraries, or you used --disable-shared with +configure, perhaps to make the build faster), then it will be created +as 'program'. This is so that you can run the program before you +install it. If it is linked with shared libraries, a wrapper script +does some magic with LD_LIBRARY_PATH. However, this means that your +install rules must take this into account by checking that +'.libs/program exists', and installing it if it is present, but +otherwise installing 'program'. Automake install rules do this +automatically, but it you write your own, you must take this into +consideration. The best option is to not use custom install rules for +binaries. + + +11. Testing changes to the build scripts --------------------------------------- -If you make a change to one of the scripts, simply running autogen.sh and -seeing if 'make' and 'make install' work is not enough. In particular, you -must check that it does not break 'VPATH' builds where the source and build -directories are not the same. -To do this: +If you make a change to one of the scripts, simply running autogen.sh +and seeing if 'make' and 'make install' work is not enough. In +particular, you must check that it does not break 'VPATH' builds where +the source and build directories are not the same. To do this: - $ mkdir /var/tmp/tmp-build - $ cd /var/tmp/tmp-build - $ ~roger/gimp-print/current/configure --with-cups - $ make - $ make DESTDIR=/var/tmp/tmp-inst install + $ mkdir /var/tmp/tmp-build + $ cd /var/tmp/tmp-build + $ ~roger/gutenprint/current/configure [options] + $ make + $ make DESTDIR=/var/tmp/tmp-inst install -You should also test that 'make install' works with and without DESTDIR set. -Note that the current stable gettext release does not support DESTDIR, but the -CVS version does. The current gettext also breaks in VPATH due to -MKINSTALLDIRS being wrongly defined. This is also fixed in CVS. +You should also test that 'make install' works with and without +DESTDIR set. Note that old gettext releases do not support DESTDIR, +but the current 0.10.x versions do. The old gettext also breaks in +VPATH builds due to MKINSTALLDIRS being wrongly defined. This is also +fixed in the current version. -11. Further information +12. Further information ----------------------- autoconf: autoconf.info automake: automake.info CVS: cvs.info -gettext: gettext.info (but it's not very comprehensive) +gettext: gettext.info libtool: libtool.info make: make.info -12. Known problems +13. Known problems ------------------ If you have a version of the Gimp older than about 1.1.27, your @@ -561,6 +613,8 @@ This should only be a problem when building from CVS; the configure script included in released versions will not have this problem. -13. Updating PO files -wget -r -np -nH --cut-dirs=3 --accept '.po' --cache=off http://www.iro.umontreal.ca/translation/maint/gimp-print/ \ No newline at end of file + +Local Variables: +mode: text +End: \ No newline at end of file diff --git a/doc/appendices.texi b/doc/appendices.texi deleted file mode 100644 index 0170e74..0000000 --- a/doc/appendices.texi +++ /dev/null @@ -1,15 +0,0 @@ -@node Appendices, Data Type and Variable Index, Problems, Top -@chapter Appendices -@cindex Appendices - -@menu -* Dithering:: Dither algorithms. -* Weaving:: Weaving algorithms. -* ESC/P2:: Epson ESC/P2 printer control language. -* New Printer:: Adding a new printer to libgimpprint. -@end menu - -@include dither.texi -@include weave.texi -@include escp2.texi -@include new-printer.texi diff --git a/doc/copying.texi b/doc/copying.texi deleted file mode 100644 index 2422223..0000000 --- a/doc/copying.texi +++ /dev/null @@ -1,28 +0,0 @@ -@node Copying, Overview, Instructions, Top -@include gpl.texi - -@unnumbered Copying summary -GIMP-Print is @dfn{free}; this means that everyone is free to use it and -free to redistribute it on a free basis. GIMP-Print is not in the public -domain; it is copyrighted and there are restrictions on its -distribution, but these restrictions are designed to permit everything -that a good cooperating citizen would want to do. What is not allowed is -to try to prevent others from further sharing any version of GIMP-Print -that they might get from you. - -Specifically, we want to make sure that you have the right to give away -copies of GIMP-Print, that you receive source code or else can get it if -you want it, that you can change GIMP-Print or use pieces of it in new -free programs, and that you know you can do these things. - -To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of GIMP-Print, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - -Also, for our own protection, we must make certain that everyone finds -out that there is no warranty for GIMP-Print. If GIMP-Print is modified -by someone else and passed on, we want their recipients to know that -what they have is not what we distributed, so that any problems -introduced by others will no reflect on our reputation. diff --git a/doc/developer/Makefile.am b/doc/developer/Makefile.am new file mode 100644 index 0000000..e59d4da --- /dev/null +++ b/doc/developer/Makefile.am @@ -0,0 +1,191 @@ +## $Id: Makefile.am,v 1.16 2005/01/30 16:01:52 rleigh Exp $ +## Copyright (C) 2001 Andy Stewart and Roger Leigh +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.4 gnu + +@SET_MAKE@ + +MAINT_CHARSET = latin1 + +include $(top_srcdir)/scripts/global.mk + + +## Variables + +MANUAL_SRC_FILES = \ + copying.xml \ + dither.xml \ + escp2.xml \ + gutenprint.xml \ + gpl-appendix.xml \ + introduction.xml \ + new-printer.xml \ + problems.xml \ + using.xml \ + weave.xml + +HTMLDIR = reference-html + +if INSTALL_USER_GUIDE +STANDARD_TARGETS = html +endif + +DISTHOOKDIRS = $(HTMLDIR) + + +if MAINTAINER_MODE +MAINT_MODE = true +else +MAINT_MODE = false +endif + +if MAINTAINER_MODE +ALL_LOCAL_TARGETS = docs +else +ALL_LOCAL_TARGETS = $(STANDARD_TARGETS) +endif + +all-local: $(ALL_LOCAL_TARGETS) + + +## Rules + +dist-hook: html-stamp + for dir in $(DISTHOOKDIRS) ; do \ + if test -d $(srcdir)/$$dir ; then \ + mkdir $(distdir)/$$dir; \ + for dirfile in $(srcdir)/$$dir/*; do \ + if test -f $$dirfile ; then \ + cp -p $$dirfile $(distdir)/$$dir ; \ + fi ; \ + if test -d $$dirfile ; then \ + cp -pR $$dirfile $(distdir)/$$dir ; \ + fi ; \ + done \ + fi \ + done + for file in $(DISTHOOKFILES) ; do \ + if test -f $$file ; then \ + cp -p $$file $(distdir) ; \ + fi ; \ + done + +docs: html pdf + +pdf: gutenprint.pdf + +gutenprint.pdf: $(MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + for file in $(MANUAL_SRC_FILES) ; do \ + if test -L $$file ; then \ + $(RM) -f $$file ; \ + fi ; \ + $(LN_S) -f $(srcdir)/$$file $$file ; \ + done ; \ + fi ; \ + $(DB2PDF) gutenprint.xml + +html: html-stamp + +# This ugly workaround with SOURCE is because db2html doesn't seem to like +# "./users-guide.sgml". Note that db2ps does not have the same limitation. +# html-stamp should *only* be called by html--it's just a timestamp! + +html-stamp: $(MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + for file in $(MANUAL_SRC_FILES) ; do \ + if test -L $$file ; then \ + $(RM) -f $$file ; \ + fi ; \ + $(LN_S) -f $(srcdir)/$$file $$file ; \ + done ; \ + fi + $(DB2HTML) gutenprint.xml + -$(RM) -rf $(HTMLDIR) + mv gutenprint $(HTMLDIR) + chmod a+rx $(HTMLDIR) + touch html-stamp + +install-data-local: $(STANDARD_TARGETS) + if test -n '$(STANDARD_TARGETS)' ; then \ + $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ + if test -f gutenprint.pdf ; then \ + $(INSTALL_DATA) gutenprint.pdf $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ + elif test -f $(srcdir)/gutenprint.pdf ; then \ + $(INSTALL_DATA) $(srcdir)/gutenprint.pdf $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ + fi ; \ + if test -d $(HTMLDIR) ; then \ + HTMLGENDIR="$(HTMLDIR)" ; \ + elif test -d $(srcdir)/$(HTMLDIR) ; then \ + HTMLGENDIR="$(srcdir)/$(HTMLDIR)" ; \ + else \ + exit 1 ; \ + fi ; \ + for file in $$HTMLGENDIR/*.html $$HTMLGENDIR/*.css ; do \ + if test -f $$file ; then \ + $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ + fi ; \ + done ; \ + fi + +uninstall-local: + -$(RM) -r $(DESTDIR)$(datadir)/$(PACKAGE)/doc + +CLEAN_MANUALS = \ + $(RM) -f gutenprint.pdf gutenprint.ps; \ + $(RM) -rf *html-stamp $(HTMLDIR) + +clean-local: + if test $(srcdir) = "." -a $(MAINT_MODE) = false ; then \ + echo "clean-local: Not removing $(HTMLDIR)" ; \ + echo 'clean-local: Not removing gutenprint.pdf' ; \ + echo 'clean-local: Not removing gutenprint.ps' ; \ + else \ + $(CLEAN_MANUALS) ; \ + fi + if test $(srcdir) = "." ; then \ + : ; \ + else \ + $(RM) -f $(MANUAL_SRC_FILES) ; \ + fi + -$(RM) -rf *.tex *.log *.aux *.dvi *.gz *.out *.junk *.out *.fot + -$(RM) -rf db2html* DB2HTML* + +veryclean: + $(MAKE) MAINT_MODE=true clean + +maintainer-clean-local: + $(CLEAN_MANUALS) + + +## Clean + +MAINTAINERCLEANFILES = Makefile.in *html-stamp + + +EXTRA_DIST = \ + $(MANUAL_SRC_FILES) \ + gutenprint.pdf \ + html-stamp + +.PHONY: docs html ps pdf diff --git a/doc/developer/Makefile.in b/doc/developer/Makefile.in new file mode 100644 index 0000000..6674208 --- /dev/null +++ b/doc/developer/Makefile.in @@ -0,0 +1,636 @@ +# Makefile.in generated by automake 1.9.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Variables +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/scripts/global.mk +subdir = doc/developer +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gimp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/stp.m4 $(top_srcdir)/m4/stp_cups.m4 \ + $(top_srcdir)/m4/stp_gimp.m4 $(top_srcdir)/m4/stp_option.m4 \ + $(top_srcdir)/m4/stp_release.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_CUPS_FALSE = @BUILD_CUPS_FALSE@ +BUILD_CUPS_PPDS_FALSE = @BUILD_CUPS_PPDS_FALSE@ +BUILD_CUPS_PPDS_TRUE = @BUILD_CUPS_PPDS_TRUE@ +BUILD_CUPS_TRUE = @BUILD_CUPS_TRUE@ +BUILD_ESCPUTIL_FALSE = @BUILD_ESCPUTIL_FALSE@ +BUILD_ESCPUTIL_TRUE = @BUILD_ESCPUTIL_TRUE@ +BUILD_FOOMATIC_3_FALSE = @BUILD_FOOMATIC_3_FALSE@ +BUILD_FOOMATIC_3_TRUE = @BUILD_FOOMATIC_3_TRUE@ +BUILD_FOOMATIC_FALSE = @BUILD_FOOMATIC_FALSE@ +BUILD_FOOMATIC_TRUE = @BUILD_FOOMATIC_TRUE@ +BUILD_GENPPD_STATIC_FALSE = @BUILD_GENPPD_STATIC_FALSE@ +BUILD_GENPPD_STATIC_TRUE = @BUILD_GENPPD_STATIC_TRUE@ +BUILD_GHOSTSCRIPT_FALSE = @BUILD_GHOSTSCRIPT_FALSE@ +BUILD_GHOSTSCRIPT_TRUE = @BUILD_GHOSTSCRIPT_TRUE@ +BUILD_GIMP2_FALSE = @BUILD_GIMP2_FALSE@ +BUILD_GIMP2_TRUE = @BUILD_GIMP2_TRUE@ +BUILD_GIMP_FALSE = @BUILD_GIMP_FALSE@ +BUILD_GIMP_TRUE = @BUILD_GIMP_TRUE@ +BUILD_LIBGUTENPRINTUI2_FALSE = @BUILD_LIBGUTENPRINTUI2_FALSE@ +BUILD_LIBGUTENPRINTUI2_TRUE = @BUILD_LIBGUTENPRINTUI2_TRUE@ +BUILD_LIBGUTENPRINTUI_FALSE = @BUILD_LIBGUTENPRINTUI_FALSE@ +BUILD_LIBGUTENPRINTUI_TRUE = @BUILD_LIBGUTENPRINTUI_TRUE@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +BUILD_TESTPATTERN_FALSE = @BUILD_TESTPATTERN_FALSE@ +BUILD_TESTPATTERN_TRUE = @BUILD_TESTPATTERN_TRUE@ +BUILD_TEST_FALSE = @BUILD_TEST_FALSE@ +BUILD_TEST_TRUE = @BUILD_TEST_TRUE@ +BUILD_TRANSLATED_CUPS_PPDS_FALSE = @BUILD_TRANSLATED_CUPS_PPDS_FALSE@ +BUILD_TRANSLATED_CUPS_PPDS_TRUE = @BUILD_TRANSLATED_CUPS_PPDS_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONVERT = @CONVERT@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CUPS_CFLAGS = @CUPS_CFLAGS@ +CUPS_CONFIG = @CUPS_CONFIG@ +CUPS_LIBS = @CUPS_LIBS@ +CUPS_PPDS_AT_TOP_LEVEL_FALSE = @CUPS_PPDS_AT_TOP_LEVEL_FALSE@ +CUPS_PPDS_AT_TOP_LEVEL_TRUE = @CUPS_PPDS_AT_TOP_LEVEL_TRUE@ +CUPS_PPD_PS_LEVEL = @CUPS_PPD_PS_LEVEL@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DB2HTML = @DB2HTML@ +DB2PDF = @DB2PDF@ +DB2PS = @DB2PS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIALOG = @DIALOG@ +DOXYGEN = @DOXYGEN@ +DVIPDF = @DVIPDF@ +DVIPS = @DVIPS@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FIND = @FIND@ +FOOMATIC_CONFIGURE = @FOOMATIC_CONFIGURE@ +FOOMATIC_KITLOAD = @FOOMATIC_KITLOAD@ +FOOMATIC_PPDFILE = @FOOMATIC_PPDFILE@ +GENPPD_LIBS = @GENPPD_LIBS@ +GIMP2_CFLAGS = @GIMP2_CFLAGS@ +GIMP2_LIBS = @GIMP2_LIBS@ +GIMPTOOL = @GIMPTOOL@ +GIMPTOOL2_CHECK = @GIMPTOOL2_CHECK@ +GIMPTOOL_CHECK = @GIMPTOOL_CHECK@ +GIMP_CFLAGS = @GIMP_CFLAGS@ +GIMP_CFLAGS_NOUI = @GIMP_CFLAGS_NOUI@ +GIMP_DATA_DIR = @GIMP_DATA_DIR@ +GIMP_LIBS = @GIMP_LIBS@ +GIMP_LIBS_NOUI = @GIMP_LIBS_NOUI@ +GIMP_PLUGIN_DIR = @GIMP_PLUGIN_DIR@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMSGFMT = @GMSGFMT@ +GNUCFLAGS = @GNUCFLAGS@ +GTK2_CFLAGS = @GTK2_CFLAGS@ +GTK2_LIBS = @GTK2_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GUTENPRINTUI2_BINARY_AGE = @GUTENPRINTUI2_BINARY_AGE@ +GUTENPRINTUI2_CFLAGS = @GUTENPRINTUI2_CFLAGS@ +GUTENPRINTUI2_CURRENT_INTERFACE = @GUTENPRINTUI2_CURRENT_INTERFACE@ +GUTENPRINTUI2_INTERFACE_AGE = @GUTENPRINTUI2_INTERFACE_AGE@ +GUTENPRINTUI2_LIBDEPS = @GUTENPRINTUI2_LIBDEPS@ +GUTENPRINTUI2_LIBS = $(top_builddir)/src/gutenprintui2/libgutenprintui2.la +GUTENPRINTUI2_VERSION = @GUTENPRINTUI2_VERSION@ +GUTENPRINTUI_BINARY_AGE = @GUTENPRINTUI_BINARY_AGE@ +GUTENPRINTUI_CFLAGS = @GUTENPRINTUI_CFLAGS@ +GUTENPRINTUI_CURRENT_INTERFACE = @GUTENPRINTUI_CURRENT_INTERFACE@ +GUTENPRINTUI_INTERFACE_AGE = @GUTENPRINTUI_INTERFACE_AGE@ +GUTENPRINTUI_LIBDEPS = @GUTENPRINTUI_LIBDEPS@ +GUTENPRINTUI_LIBS = $(top_builddir)/src/gutenprintui/libgutenprintui.la +GUTENPRINTUI_VERSION = @GUTENPRINTUI_VERSION@ +GUTENPRINT_BINARY_AGE = @GUTENPRINT_BINARY_AGE@ +GUTENPRINT_CFLAGS = @GUTENPRINT_CFLAGS@ +GUTENPRINT_CURRENT_INTERFACE = @GUTENPRINT_CURRENT_INTERFACE@ +GUTENPRINT_INTERFACE_AGE = @GUTENPRINT_INTERFACE_AGE@ +GUTENPRINT_LIBDEPS = @GUTENPRINT_LIBDEPS@ + +# Libraries +GUTENPRINT_LIBS = $(top_builddir)/src/main/libgutenprint.la +GUTENPRINT_MAJOR_VERSION = @GUTENPRINT_MAJOR_VERSION@ +GUTENPRINT_MICRO_VERSION = @GUTENPRINT_MICRO_VERSION@ +GUTENPRINT_MINOR_VERSION = @GUTENPRINT_MINOR_VERSION@ +GUTENPRINT_VERSION = @GUTENPRINT_VERSION@ +IJS_CFLAGS = @IJS_CFLAGS@ +IJS_CONFIG = @IJS_CONFIG@ +IJS_LIBS = @IJS_LIBS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SAMPLES_FALSE = @INSTALL_SAMPLES_FALSE@ +INSTALL_SAMPLES_TRUE = @INSTALL_SAMPLES_TRUE@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTALL_USER_GUIDE_FALSE = @INSTALL_USER_GUIDE_FALSE@ +INSTALL_USER_GUIDE_TRUE = @INSTALL_USER_GUIDE_TRUE@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBREADLINE_DEPS = @LIBREADLINE_DEPS@ +LIBS = $(INTLLIBS) @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LN_S = @LN_S@ +LTALLOCA = @LTALLOCA@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_CFLAGS = @MAINTAINER_CFLAGS@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PLUG_IN_PATH = @PLUG_IN_PATH@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +RELEASE_DATE = @RELEASE_DATE@ +RM = @RM@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TEXI2HTML = @TEXI2HTML@ +USE_LEVEL3_PS_FALSE = @USE_LEVEL3_PS_FALSE@ +USE_LEVEL3_PS_TRUE = @USE_LEVEL3_PS_TRUE@ +USE_NLS = @USE_NLS@ +USE_NLS_FALSE = @USE_NLS_FALSE@ +USE_NLS_TRUE = @USE_NLS_TRUE@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +cups_bindir = @cups_bindir@ +cups_conf_datadir = @cups_conf_datadir@ +cups_conf_serverbin = @cups_conf_serverbin@ +cups_conf_serverroot = @cups_conf_serverroot@ +cups_exec_prefix = @cups_exec_prefix@ +cups_prefix = @cups_prefix@ +cups_sbindir = @cups_sbindir@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +gimp2_plug_indir = @gimp2_plug_indir@ +gimp_plug_indir = @gimp_plug_indir@ +gutenprint_cflags = @gutenprint_cflags@ +gutenprint_libs = @gutenprint_libs@ +gutenprintui2_cflags = @gutenprintui2_cflags@ +gutenprintui2_libs = @gutenprintui2_libs@ +gutenprintui_cflags = @gutenprintui_cflags@ +gutenprintui_libs = @gutenprintui_libs@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +AUTOMAKE_OPTIONS = 1.4 gnu +MAINT_CHARSET = latin1 +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(LOCAL_CPPFLAGS) $(GNUCFLAGS) +MANUAL_SRC_FILES = \ + copying.xml \ + dither.xml \ + escp2.xml \ + gutenprint.xml \ + gpl-appendix.xml \ + introduction.xml \ + new-printer.xml \ + problems.xml \ + using.xml \ + weave.xml + +HTMLDIR = reference-html +@INSTALL_USER_GUIDE_TRUE@STANDARD_TARGETS = html +DISTHOOKDIRS = $(HTMLDIR) +@MAINTAINER_MODE_FALSE@MAINT_MODE = false +@MAINTAINER_MODE_TRUE@MAINT_MODE = true +@MAINTAINER_MODE_FALSE@ALL_LOCAL_TARGETS = $(STANDARD_TARGETS) +@MAINTAINER_MODE_TRUE@ALL_LOCAL_TARGETS = docs +CLEAN_MANUALS = \ + $(RM) -f gutenprint.pdf gutenprint.ps; \ + $(RM) -rf *html-stamp $(HTMLDIR) + +MAINTAINERCLEANFILES = Makefile.in *html-stamp +EXTRA_DIST = \ + $(MANUAL_SRC_FILES) \ + gutenprint.pdf \ + html-stamp + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/scripts/global.mk $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/developer/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/developer/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../../scripts + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-local + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local dist-hook distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-local install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-local mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am uninstall-local + + +@SET_MAKE@ + +export STP_MODULE_PATH = $(top_builddir)/src/main/.libs:$(top_builddir)/src/main +export STP_DATA_PATH = $(top_srcdir)/src/main + +# Rules + +$(top_builddir)/src/main/libgutenprint.la: + cd $(top_builddir)/src/main; \ + $(MAKE) + +$(top_builddir)/src/gutenprintui/libgutenprintui.la: + cd $(top_builddir)/src/gutenprintui; \ + $(MAKE) + +$(top_builddir)/src/gutenprintui2/libgutenprintui2.la: + cd $(top_builddir)/src/gutenprintui2; \ + $(MAKE) + +all-local: $(ALL_LOCAL_TARGETS) + +dist-hook: html-stamp + for dir in $(DISTHOOKDIRS) ; do \ + if test -d $(srcdir)/$$dir ; then \ + mkdir $(distdir)/$$dir; \ + for dirfile in $(srcdir)/$$dir/*; do \ + if test -f $$dirfile ; then \ + cp -p $$dirfile $(distdir)/$$dir ; \ + fi ; \ + if test -d $$dirfile ; then \ + cp -pR $$dirfile $(distdir)/$$dir ; \ + fi ; \ + done \ + fi \ + done + for file in $(DISTHOOKFILES) ; do \ + if test -f $$file ; then \ + cp -p $$file $(distdir) ; \ + fi ; \ + done + +docs: html pdf + +pdf: gutenprint.pdf + +gutenprint.pdf: $(MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + for file in $(MANUAL_SRC_FILES) ; do \ + if test -L $$file ; then \ + $(RM) -f $$file ; \ + fi ; \ + $(LN_S) -f $(srcdir)/$$file $$file ; \ + done ; \ + fi ; \ + $(DB2PDF) gutenprint.xml + +html: html-stamp + +# This ugly workaround with SOURCE is because db2html doesn't seem to like +# "./users-guide.sgml". Note that db2ps does not have the same limitation. +# html-stamp should *only* be called by html--it's just a timestamp! + +html-stamp: $(MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + for file in $(MANUAL_SRC_FILES) ; do \ + if test -L $$file ; then \ + $(RM) -f $$file ; \ + fi ; \ + $(LN_S) -f $(srcdir)/$$file $$file ; \ + done ; \ + fi + $(DB2HTML) gutenprint.xml + -$(RM) -rf $(HTMLDIR) + mv gutenprint $(HTMLDIR) + chmod a+rx $(HTMLDIR) + touch html-stamp + +install-data-local: $(STANDARD_TARGETS) + if test -n '$(STANDARD_TARGETS)' ; then \ + $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ + if test -f gutenprint.pdf ; then \ + $(INSTALL_DATA) gutenprint.pdf $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ + elif test -f $(srcdir)/gutenprint.pdf ; then \ + $(INSTALL_DATA) $(srcdir)/gutenprint.pdf $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ + fi ; \ + if test -d $(HTMLDIR) ; then \ + HTMLGENDIR="$(HTMLDIR)" ; \ + elif test -d $(srcdir)/$(HTMLDIR) ; then \ + HTMLGENDIR="$(srcdir)/$(HTMLDIR)" ; \ + else \ + exit 1 ; \ + fi ; \ + for file in $$HTMLGENDIR/*.html $$HTMLGENDIR/*.css ; do \ + if test -f $$file ; then \ + $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/$(HTMLDIR) ; \ + fi ; \ + done ; \ + fi + +uninstall-local: + -$(RM) -r $(DESTDIR)$(datadir)/$(PACKAGE)/doc + +clean-local: + if test $(srcdir) = "." -a $(MAINT_MODE) = false ; then \ + echo "clean-local: Not removing $(HTMLDIR)" ; \ + echo 'clean-local: Not removing gutenprint.pdf' ; \ + echo 'clean-local: Not removing gutenprint.ps' ; \ + else \ + $(CLEAN_MANUALS) ; \ + fi + if test $(srcdir) = "." ; then \ + : ; \ + else \ + $(RM) -f $(MANUAL_SRC_FILES) ; \ + fi + -$(RM) -rf *.tex *.log *.aux *.dvi *.gz *.out *.junk *.out *.fot + -$(RM) -rf db2html* DB2HTML* + +veryclean: + $(MAKE) MAINT_MODE=true clean + +maintainer-clean-local: + $(CLEAN_MANUALS) + +.PHONY: docs html ps pdf +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/developer/copying.xml b/doc/developer/copying.xml new file mode 100644 index 0000000..858c18b --- /dev/null +++ b/doc/developer/copying.xml @@ -0,0 +1,40 @@ + + Copying, modification and redistribution + + Gutenprint is free; this means that everyone + is free to use it and free to redistribute it on a free basis. + Gutenprint is not in the public domain; it is copyrighted and + there are restrictions on its distribution, but these restrictions + are designed to permit everything that a good cooperating citizen + would want to do. What is not allowed is to try to prevent others + from further sharing any version of Gutenprint that they might get + from you. + + + Specifically, we want to make sure that you have the right to give + away copies of Gutenprint, that you receive source code or else + can get it if you want it, that you can change Gutenprint or use + pieces of it in new free programs, and that you know you can do + these things. + + + To make sure that everyone has such rights, we have to forbid you + to deprive anyone else of these rights. For example, if you + distribute copies of Gutenprint, you must give the recipients all + the rights that you have. You must make sure that they, too, + receive or can get the source code, and you must tell them their + rights. + + + Also, for our own protection, we must make certain that everyone + finds out that there is no warranty for Gutenprint. If Gutenprint + is modified by someone else and passed on, we want their + recipients to know that what they have is not what we distributed, + so that any problems introduced by others will no reflect on our + reputation. + + + Gutenprint is licensed under the terms of the GNU General Public + License (GPL), reproduced in . + + diff --git a/doc/developer/dither.xml b/doc/developer/dither.xml new file mode 100644 index 0000000..030fdbd --- /dev/null +++ b/doc/developer/dither.xml @@ -0,0 +1,679 @@ + + Dithering + + The dithering code in + src/main/print-dither.c attempts to + reproduce various shades of gray (or all colors) from only a few + different inks (black, cyan, magenta, yellow, and sometimes + light cyan and light magenta). The dots can't vary in darkness + or size (except for certain special printers), and so we need to + lay down a certain fraction of dots to represent each distinct + level. + + + This sounds straightforward; in practice, it isn't. Completely + random distribution of dots (simple probabilistic dithering) + would create grainy clumps and light spots. The smoothest + pattern results from an equidistant spacing of dots. + Approximating this requires sophisticated algorithms. We have + two dithering algorithms, an ordered dither algorithm that uses + a grid (matrix) to decide whether to print, and a modified + Floyd-Steinberg error diffusion algorithm that uses a grid in a + slightly different way. + + + We currently have three dithering functions: + + + + dither_fastblack + + + This produces pure black or white from a pre-dithered + input. This is used for two purposes: for printing pure + black and white very quickly (e.g. text), and for printing + pre-screened monochrome output that was rasterized + externally. + + + + + dither_black + + + This produces black from grayscale input. The new + dither_black can produce either a single or multiple + levels of black, for printers supporting variable dot + size. + + + + + dither_cmyk + + + This produces 3, 4, 5, 6, or 7 color output (CMY, CMYK, + CcMmYK, CcMmYy, CcMmYyK, or any variants). The new + routine can handle single or multiple levels of each + color. + + + + + + There is a choice of dithering algorithms. Four of them are + based on a basic error diffusion, with a few tweaks of my own. + The other one is ‘ordered’. However, they all share + the basic operation in common. First, the algorithm picks what + kind of dot (if there are multiple dot sizes and/or tones that + may be picked) is the candidate to be printed. This decision is + made based on the darkness at the point being dithered. Then, + it decides whether the dot will be printed at all. What this is + based on depends upon which algorithm family we use. This is + all described in more detail below. + + + Ordered dithering works by comparing the value at a given point + with the value of a tiled matrix. If the value at the point is + greater than the value in the matrix, the dot is printed. The + matrix should consist of a set of evenly spaced points between 0 + and the upper limit. The choice of matrix is very important for + print quality. A good dither matrix will emphasize high + frequency components, which distributes dots evenly with a + minimum of clumping. The matrices used here are all simple + matrices that are expanded recursively to create larger matrices + with the same kind of even point distribution. This is + described below. + + + Note that it is important to use different matrices for the two + sub-operations, because otherwise the choice about whether to + print and the choice of dot size will be correlated. The usual + result is that the print is either too dark or too light, but + there can be other problems. + + + Ordered dithering works quite well on single dot size, four + color printers. It has not been well tested on four color, + variable dot size printers. It should be avoided on six color + printers. + + + Error diffusion works by taking the output error at a given + pixel and “diffusing” it into surrounding pixels. + Output error is the difference between the amount of ink output + and the input level at each pixel. For simple printers, with + one or four ink colors and only one dot size, the amount of ink + output is either 65536 (i. e. full output) or 0 (no output). + The difference between this and the input level is the error. + Normal error diffusion adds part of this error to the adjoining + pixels in the next column and the next row (the algorithm simply + scans each row in turn, never backing up). The error adds up + until it reaches a threshold (half of the full output level, or + 32768), at which point a dot is output, the output is subtracted + from the current value, and the (now negative) error is diffused + similarly. + + + Error diffusion works quite well in general, but it tends to + generate artifacts which usually appear as worm-like lines or + areas of anomalous density. I have devised some ways, as + described below, of ameliorating these artifacts. + + + There are two sub-classes of error diffusion that we use here, + ‘random’ and ‘hybrid’. One of the + techniques that we use to ameliorate the artifacts is to use a + fuzzy threshold rather than the hard threshold of half of the + output level. Random error diffusion uses a pseudo-random + number to perturb the threshold, while hybrid error diffusion + uses a matrix. Hybrid error diffusion worked very poorly in + 3.1.3, and I couldn't figure out why until I found a bug. It + now works very well. + + + There is one additional variant (on both sub-classes), called + ‘adaptive hybrid’ and ‘adaptive random’. + The adaptive variant takes advantage of the fact that the + patterns that ordered dithering create are less visible at very + low densities, while the artifacts created by error diffusion + are more objectionable at low densities. At low densities, + therefore, it uses ordered dithering; at higher densities it + uses error diffusion. + + + Handling multiple output levels makes life a bit more + complicated. In principle, it shouldn't be much harder: simply + figure out what the ratio between the available output levels is + and have multiple thresholds. In practice, getting these right + involves a lot of trial and error. The other thing that's + important is to maximize the number of dots that have some ink. + This will reduce the amount of speckling. More on this later. + + + The next question: how do we handle black when printing in + color? Black ink is much darker than colored inks. It's + possible to produce black by adding some mixture of cyan, + magenta, and yellow—in principle. In practice, the black + really isn't very black, and different inks and different papers + will produce different color casts. However, by using CMY to + produce gray, we can output a lot more dots! This makes for a + much smoother image. What's more, one cyan, one magenta, and + one yellow dot produce less darkness than one black dot, so + we're outputting that many more dots. Better yet, with 6 or 7 + color printers, we have to output even more light ink dots. So + Epson Stylus Photo printers can produce really smooth grays---if + we do everything right. The right idea is to use CMY at lower + black levels, and gradually mix in black as the overall amount + of ink increases, so the black dots don't really become visible + within the ink mass. + + + Variable dot sizes are handled by dividing the range between 0 + and 65536 into segments. Each segment can either represent a + range in which all of one kind of ink (color and/or dot size) is + used, with varying amounts of ink, or a transition region + between inks, in which equal numbers of dots are printed but the + amount of each ink will be adjusted throughout the range. Each + range is represented by four numbers: + + + + + Bottom of the range. + + + + + Top of the range. + + + + + Value of the lighter ink. + + + + Value of the darker ink. + + + + + In addition, the bit patterns and which type of ink are also + represented, but they don't affect the actual algorithm. + + + As mentioned above, the basic algorithm is the same whether we + use ordered dither or error diffusion. We perform the following + steps on each color of each pixel: + + + + + Compute the value of the particular color we're printing. + This isn't usually the pure CMY value; it's adjusted to + improve saturation and to limit the use of black in light + toned regions (to avoid speckling). + + + + + Find the range containing this value. + + + + + Compute where this value lies within the range. We scale + the endpoints between 0 and 65536 for this purpose. So for + example, if the bottom of the range is 10,000 and the top of + the range is 20,000, and the value is 12,500, we're 1/4 of + the way between the bottom and the top of the range, so our + scale point is 16384. + + + + + Compute the “virtual value”. The virtual value + is the distance between the value of the lighter and the + value of the darker ink. So if the value of the light ink + is 32768 and the dark ink is 65536, we compute a virtual + value scaled appropriately between these two values, which + is 40960 in this case. + + + + + Using either error diffusion or ordered dither, the standard + threshold is 1/2 of the value (20480 in this case). Using + ordered dither, we want to compute a value between 0 and + 40960 that we will compare the input value against to decide + whether to print. Using pure error diffusion, we would + compare the accumulated error against 20480 to decide + whether to print. In practice, we use the same matrix + method to decide whether to print. The correct amount of + ink will be printed this way, but we minimize the squiggly + lines characteristic of error diffusion by dithering the + threshold in this fashion. A future enhancement will allow + us to control the amount of dithering applied to the + threshold. + + + + + The matrices were generated by Thomas Tonino + ttonino@bio.vu.nl with an algorithm of his + devising. The algorithm is designed to maximize the spacing + between dots at any given density by searching the matrix for + holes and placing a dot in the largest available hole. It + requires careful selection of initial points to achieve good + results, and is very time consuming. For best results, a + different matrix must be used for modes with 2:1 aspect ratio + (e.g. 1440×720) than for 1:1 (e. g. 720×720). It is + essential with any of these matrices that every point be used. + Skipping points generates low-frequency noise. + + + It's essential to use different matrices for deciding whether to + print and for deciding what color (dark or light) to print. + This should be obvious; the decision about whether to print at + all should be as independent as possible from the decision about + what color to print, because any bias will result in excess + light or dark ink being printed, shifting the tonal balance. We + actually use the same matrices, but we shift them vertically and + horizontally. Assuming that the matrices are not + self-correlated, this will yield good results. + + + The ranges are computed from a list of ink values (between 0 and + 1 for each possible combination of dot size and ink tone, where + the value represents the darkness of the ink) and the desired + maximum density of the ink. This is done in dither_set_ranges, + and needs more documentation. + + + I stated earlier that I've tweaked the basic error diffusion + algorithm. Here's what I've done to improve it: + + + + + We use a variable threshold to decide when to print, as + discussed above. This does two things for us: it reduces + the slightly squiggly diagonal lines that are the mark of + error diffusion; and it allows us to lay down some ink even + in very light areas near the edge of the image. The + squiggly lines that error diffusion algorithms tend to + generate are caused by the gradual accumulation of error. + This error is partially added horizontally and partially + vertically. The horizontal accumulation results in a dot + eventually being printed. The vertical accumulation results + in a dot getting laid down in roughly the same horizontal + position in the next row. The diagonal squigglies result + from the error being added to pixels one forward and one + below the current pixel; these lines slope from the top + right to the bottom left of the image. + + + Error diffusion also results in pale areas being completely + white near the top left of the image (the origin of the + printing coordinates). This is because enough error has to + accumulate for anything at all to get printed. In very pale + areas it takes quite a long time to build up anything + printable at all; this results in the bare spots. + + + Randomizing the threshold somewhat breaks up the diagonals + to some degree by randomizing the exact location that the + accumulated output crosses the threshold. It reduces the + false white areas by allowing some dots to be printed even + when the accumulated output level is very low. It doesn't + result in excess ink because the full output level is still + subtracted and diffused. + + + Excessive randomization leads to blobs at high densities. + Therefore, as the density increases, the degree of + randomization decreases. + + + + + Alternating scan direction between rows (first row is + scanned left to right, second is scanned right to left, and + so on). This also helps break up white areas, and it also + seems to break up squigglies a bit. Furthermore, it + eliminates directional biases in the horizontal direction. + This isn't necessary for ordered dither, but it doesn't hurt + either. + + + + + Diffusing the error into more pixels. Instead of diffusing + the entire error into (X+1, Y) and (X, Y+1), we diffuse it + into (X+1, Y), (X+K, Y+1), (X, Y+1), (X-K, Y+1) where K + depends upon the output level (it never exceeds about 10 + dots, and is greater at higher output levels). This really + reduces squigglies and graininess. The amount of this + spread can be controlled; for line art, it should be less + than for photographs (of course, line art doesn't usually + contain much light color, but the error + value can be small in places!) In addition to requiring + more computation, a wide ink spread results in patterning at + high dot densities (note that the dot density can be high + even in fairly pale regions if multiple dot sizes are in + use). + + + + + Don't lay down any colored ink if we're laying down black + ink. There's no point; the colored ink won't show. We + still pretend that we did for purposes of error diffusion + (otherwise excessive error will build up, and will take a + long time to clear, resulting in heavy bleeding of ink into + surrounding areas, which is very ugly indeed), but we don't + bother wasting the ink. How well this will do with variable + dot size remains to be seen. + + + + + Oversampling. This is how to print 1440×720 with Epson + Stylus printers. Printing full density at 1440×720 will + result in excess ink being laid down. The trick is to print + only every other dot. We still compute the error as though we + printed every dot. It turns out that randomizing which dots + are printed results in very speckled output. This can be + taken too far; oversampling at 1440×1440 or + 1440×2880 virtual resolution results in other problems. + However, at present 1440×1440 (which is more accurately + called "1440×720 enhanced", as the Epson printers cannot + print 1440 rows per inch) does quite well, although it's slow. + + + + + What about multiple output levels? For 6 and 7 color printers, + simply using different threshold levels has a problem: the pale + inks have trouble being seen when a lot of darker ink is being + printed. So rather than just using the output level of the + particular color to decide which ink to print, we look at the + total density (sum of all output levels). If the density's high + enough, we prefer to use the dark ink. Speckling is less + visible when there's a lot of ink, anyway. I haven't yet + figured out what to do for multiple levels of one color. + + + You'll note that I haven't quoted a single source on color or + printing theory. I simply did all of this empirically. + + + There are various other tricks to reduce speckling. One that + I've seen is to reduce the amount of ink printed in regions + where one color (particularly cyan, which is perceived as the + darkest) is very pale. This does reduce speckling all right, + but it also results in strange tonal curves and weird (to my + eye) colors. + + + Before any dither routine is used, + init_dither must be called. This takes + three arguments: the input width (number of pixels in the + input), the output width (number of pixels in the output), and a + stp_vars_t structure containing the parameters for + the print job. + + + init_dither returns a pointer to an opaque + object representing the dither. This object is passed as the first + argument to all of the dither-related routines. + + + After a page is fully dithered, free_dither + must be called to free the dither object and perform any + cleanup. In the future, this may do more (such as flush + output). This arrangement permits using these routines with + programs that create multiple output pages, such as GhostScript. + + + The dithering routines themselves have a number of control knobs + that control internal aspects of the dithering process. These + knobs are accessible via a number of functions that can be + called after init_dither. + + + + + dither_set_density takes a double + between 0 and 1 representing the desired ink density for + printing solid colors. This is used in a number of places + in the dithering routine to make decisions. + + + + + dither_set_black_density takes a double + between 0 and 1 representing the desired ink density for + printing black ink in color printing. This is used to + balance black against color ink. By default, this is equal + to the density set by + dither_set_density. By setting it + higher, more black ink will be printed. For example, if the + base density is .4 and the black density is .8, twice as + much black ink will be printed as would otherwise be called + for. + + + This is not used when printing in monochrome. When printing + monochrome, the base density + (dither_set_density) should be adjusted + appropriately. + + + + + dither_set_ink_budget takes an unsigned + number representing the most ink that may be deposited at a + given point. This number is arbitrary; the limit is + computed by summing the size of each ink dot, which is + supplied as a parameter in + dither_set_X_ranges. By default, there + is no limit. + + + + + dither_set_black_lower takes a double + that should be between 0 and 1 that represents the lowest + density level at which black ink will start to mix in with + colored ink to generate grays. The lower this is, the less + density is required to use black ink. Setting this too low + will result in speckling from black dots, particularly on 6 + and 7 color printers. Setting this too high will make it + hard to get satisfactory black or may result in sharp + transition between blended colors and black. Default: + 0.0468. + + + It is important to note that since the density scale is + never linear (and since this value is adjusted via other + things happening during the dithering process) that this + does not mean that 95% gray will use any black ink. At this + setting, there will be no black ink used until about 50% + gray. + + + This only applies to color mode. + + + This value should be set lower for printers capable of + variable dot size, since more dots can be laid down close to + each other. + + + + + dither_set_black_upper takes a double + that should be between 0 and 1 that represents the highest + density level at which colored inks will be mixed to create + gray. Setting this too low will result in speckly dark + grays because there is not enough ink to fill all the holes, + or sharp transition between blended colors and black if it + is too close to the value of + dither_set_black_upper Setting this too + high will result in poor black and dark tone quality. + Default: 0.5. This results in 10% and darker grays being + printed with essentially all black. + + + This only applies to color mode. + + + + + dither_set_black_levels takes three + doubles that represent the amount of cyan, magenta, and + yellow respectively that are blended to create gray. The + defaults are 1.0 for each, which is probably too low for + most printers. These values are adjusted to create a good + gray balance. Setting these too low will result in pale + light and midtone grays, with a sharp transition to darker + tones as black mixes in. Setting them too high will result + in overly dark grays and use of too much ink, possibly + creating bleed-through. + + + This only applies to color mode. + + + + + dither_set_randomizers takes four + integer values representing the degree of randomness used + for cyan, magenta, yellow, and black. This is used to allow + some printing to take place in pale areas. Zero is the most + random; greater than 8 or so gives very little randomness at + all. Defaults are 0 for cyan, magenta, and yellow, and 4 + for black. Setting the value for black too low will result + in black speckling in pale areas. Setting values too high + will result in pale areas getting no ink at all. + + + This currently only applies to single dot size in color and + black. It should be extended to operate in variable dot + size mode, although actually applying it correctly will be + tricky. + + + + + dither_set_ink_darkness takes three + doubles representing the contribution to perceived darkness + of cyan, magenta, and yellow. This is used to help decide + when to switch between light and dark inks in 6 and 7 color + printers (with light cyan, light magenta, and possibly light + yellow). Setting these too low will result in too much + light ink being laid down, creating flat spots in the + darkness curves and bleed-through. Setting them too high + will result in dark ink being used in pale areas, creating + speckle. The defaults are .4 for cyan, .3 for magenta, and + .2 for yellow. Dark cyan will show against yellow much more + than dark magenta will show against cyan, since the cyan + appears much darker than the yellow. + + + + + dither_set_light_inks takes three + doubles between 0 and 1 representing the ratio in darkness + between the light and dark versions of the inks. Setting + these too low will result in too much dark ink being used in + pale areas, creating speckling, while setting them too high + will result in very smooth texture but too much use of light + ink, resulting in flat spots in the density curves and ink + bleed-through. There are no defaults. Any light ink + specified as zero indicates that there is no light ink for + that color. + + + This only applies to 6 and 7 color printers in single dot + size color mode, and only to those inks which have light + versions (usually cyan and magenta). + + + + + dither_set_ink_spread takes a small + integer representing the amount of ink spread in the dither. + Larger numbers mean less spread. Larger values are + appropriate for line art and solid tones; they will yield + sharper transitions but more dither artifacts. Smaller + values are more appropriate for photos. They will reduce + resolution and sharpness but reduce dither artifacts up to a + point. A value of 16 or higher implies minimum ink spread + at any resolution no matter what the overdensity. A value + of 14 is typical for photos on single dot size, 6 color + printers. For 4 color printers, subtract 1 (more spread; + the dots are farther apart). For variable dot size + printers, add 1 (more small dots are printed; less spread is + desirable). + + + + + dither_set_adaptive_divisor takes a + float representing the transition point between error + diffusion and ordered dither if adaptive dithering is used. + The float is a fraction of the printing density. For + example, if you wish the transition to be at 1/4 of the + maximum density (which works well on simple 4-color + printers), you would pass .25 here. With six colors and/or + with multiple dot sizes, the values should be set lower. + + + + + dither_set_transition takes a float + representing the exponent of the transition curve between + light and dark inks/dot sizes. A value less than 1 (typical + when using error diffusion) mixes in less dark ink/small + dots at lower ends of the range, to reduce speckling. When + using ordered dithering, this must be set to 1. + + + + + dither_set_X_ranges_simple + (X = c, + m, y or + k) describes the ink choices available + for each color. This is useful in typical cases where a + four color printer with variable dot sizes is in use. It is + passed an array of doubles between (0, 1] representing the + relative darkness of each dot size. The dot sizes are + assigned bit patterns (and ink quantities, see + dither_set_ink_budget above) from 1 to + the number of levels. This also requires a density, which + is the desired density for this color. This density need + not equal the density specified in + dither_set_density. Setting it lower + will tend to print more dark ink (because the curves are + calculated for this color assuming a lower density than is + actually supplied). + + + + + dither_set_X_ranges + (X = c, + m, y or + k) describes in a more general way the + ink choices available for each color. For each possible ink + choice, a bit pattern, dot size, value (i. e. relative + darkness), and whether the ink is the dark or light variant + ink is specified. + + + + diff --git a/doc/developer/escp2.xml b/doc/developer/escp2.xml new file mode 100644 index 0000000..5e4749d --- /dev/null +++ b/doc/developer/escp2.xml @@ -0,0 +1,1843 @@ + + ESC/P2 + + This is a description of the ESC/P2 raster commands used by the + Gutenprint printer driver, which is a subset of the complete + command set. The full documents are found on + http://www.ercipd.com/isv/edr_docs.htm. + Note that these are not always correct, and + are certainly not complete. + + + All ESCP/2 raster commands begin with the ESC + character (0x1b), followed by either one or two command characters + and arguments where applicable. Older commands generally have one + command character. Newer commands usually have a + ‘(’ (left parenthesis) followed by + a command character and a byte count for the arguments that + follow. The byte count is a 16-bit (2 byte) binary integer, in + little endian order. + + + All arguments listed here are of the form + name[bytes] where [bytes] is + the number of bytes that comprise the argument. The arguments + themselves are usually one, two, or four byte integers, always + little endian (the least significant bits come first). Presumably + this is to match Intel processors. + + + In some cases, the same command sequence identifies different + versions of the same command, depending upon the number of bytes + of arguments. + + + Standard commands + + ESC/P2 Commands + + ESC @ + + + Reset the printer. Discards any output, ejects the + existing page, returns all settings to their default. + Always use this before printing a page. + + + + + ESC (G BC=1 + ON1 + + + Turn on graphics mode. ON should be + 1 (turn on graphics mode). + + + + + ESC (U BC=1 + UNIT1 + + + Set basic unit of measurement used by printer. This is + expressed in multiples of 1/3600". At 720 DPI, + UNIT is 5; at + 360 DPI, UNIT is + 10. + + + + + ESC (U BC=5 + PAGEUNITS1 VUNIT1 + HUNIT1 + BASEUNIT2 + + + Set basic units of measurement used by the printer. + PAGEUNIT is the unit of page + measurement (for commands that set page dimensions and + the like). VUNIT is the unit of + vertical measurement (for vertical movement commands). + HUNIT is the unit of horizontal + movement (for horizontal positioning commands). All of + these units are expressed in + BASEUNIT, which is in reciprocal + inches. Typically, BASEUNIT is + 1440. In 720 DPI mode, + PAGEUNIT, VUNIT, + and HUNIT are all + 2; in 1440×720 DPI mode, + PAGEUNIT and VUNIT + are normally set to 2; + HUNIT is set to + 1. + + + + + ESC (K BC=2 + ZERO1 + GRAYMODE1 + + + Set color or grayscale mode, on printers supporting an + explicit grayscale mode. These printers can be + identified because they are advertised as having more + black nozzles than nozzles of individual colors. + Setting grayscale mode allows use of these extra nozzles + for faster printing. GRAYMODE should + be 0 or 2 for + color, 1 for grayscale. + ZERO should always be + 0. + + + + + ESC (i BC=1 + MICROWEAVE1 + + + If MICROWEAVE is + 1, use microweave mode. On older + printers, this is used to turn on microweave; on newer + printers, it prints one row at a time. All printers + support this mode. It should only be used at 720 (or + 1440×720) DPI. The Epson Stylus Pro series + indicates additional modes: + + + + 2 + + + “Full-overlap” + + + + + 3 + + + “Four-pass” + + + + + 4 + + + “Full-overlap 2” + + + + + + Any of these commands can be used with the high four + bits set to either 3 or + 0. + + + + + ESC U + DIRECTION1 + + + If DIRECTION is + 1, print unidirectionally; if + 0, print bidirectionally. + + + + + ESC (s BC=1 + SPEED1 + + + On some older printers, this controls the print head + speed. SPEED of + 2 is 10 inches/sec; + SPEED of 0 or 1 + is 20. + + + + + ESC (e BC=2 + ZERO1 + DOTSIZE1 + + + Choose print dotsize. DOTSIZE can + take on various values, depending upon the printer. + Almost all printers support 0 and + 2. Variable dot size printers + allow a value of 16. Other than the + value of 16, this appears to be + ignored at resolutions of 720 DPI and above. + + + + + ESC (C BC=2 + PAGELENGTH2 + ESC (C BC=4 + PAGELENGTH4 + + + Set the length of the page in “pageunits” + (see ESC (U above). The second form + of the command allows setting of longer page lengths on + new printers (these happen to be the printers that + support variable dot size). + + + + + ESC (c BC=4 + TOP2 + LENGTH2 + ESC (c BC=8 + TOP4 + LENGTH4 + + + Set the vertical page margins of the page in + “pageunits” (see ESC (U + above). The margins are specified as the top of the + page and the length of the page. The second form of the + command allows setting of longer page lengths on new + printers (these happen to be the printers that support + variable dot size). + + + + + ESC (S BC=8 + WIDTH4 + LENGTH4 + + + Set the width and length of the printed page region in + “pageunits” (see ESC (U + above). + + + + + ESC (v BC=2 + ADVANCE2 + ESC (v BC=4 + ADVANCE4 + + + Feed vertically ADVANCE + “vertical units” (see ESC + (U above) from the current print head + position. + + + + + ESC (V BC=2 + ADVANCE2 + ESC (V BC=4 + ADVANCE4 + + + Feed vertically ADVANCE + “vertical units” (see ESC + (U above) from the top margin. + + + + + ESC ($ BC=4 + OFFSET4 + + + Set horizontal position to OFFSET + from the left margin. This command operates on printers + of the 740 class and newer (all printers with variable + dot size). + + + + + ESC $ + OFFSET2 + + + Set horizontal position to OFFSET + from the left margin. This command operates on printers + of the 740 class and newer (all printers with variable + dot size). + + + + + ESC (\ BC=4 + UNITS2 + OFFSET2 + + + Set horizontal position to OFFSET + from the previous print head position, measured in + UNITS. UNITS is + measured in inverse inches, and should be set to 1440 in + all cases. This operates on all 1440 dpi printers that + do not support variable dot size. + + + + + ESC (/ BC=4 + OFFSET4 + + + Set horizontal position to OFFSET + from the previous print head position, measured in + “horizontal units” (see ESC + (U above). This operates on all variable dot + size printers. + + + + + ESC \ + OFFSET2 + + + Set horizontal position to OFFSET + from the previous print head position, measured in basic + unit of measurement (see ESC (U + above). This is used on all 720 dpi printers, and can + also be used on 1440 dpi printers in lower resolutions + to save a few bytes. Note that + OFFSET may be negative. The range of + values for this command is between + -16384 and + 16383. + + + + + ESC r + COLOR1 + ESC (r BC=2 + DENSITY1 + COLOR1 + + + Set the ink color. The first form is used on four-color + printers; the second on six-color printers. + DENSITY is 0 for + dark inks, 1 for light. + COLOR is + + + Colors + + + + + + COLOR + Color name + + + + + 0 + Black + + + 1 + Magenta + + + 2 + Cyan + + + 4 + Yellow + + + +
    + + This command is not used on variable dot size printers + in softweave mode. + +
    +
    + + ESC . COMPRESS1 + VSEP1 HSEP1 + LINES1 WIDTH2 + data... + + + Print data. COMPRESS signifies the + compression mode. + + + Compression modes + + + + + + COMPRESS + Compression mode + + + + + 0 + No compression + + + 1 + + TIFF compression (incorrectly documented as + “run length encoded”) + + + + 2 + + TIFF compression with a special command set. + + + + +
    + + VSEP depends upon resolution and + printer type. At 360 DPI, it is always + 10. At 720 DPI, it is normally + 55. On the ESC 600, it is + 40 (8 × 5}). On some other + printers, it varies. + + + HSEP1 is 10 at + 360 DPI and 5 at 720 or 1440 DPI + (1440 DPI cannot be printed in one pass; it is printed + in two passes, with the dots separated in each pass by + 1/720"). + + + LINES is the number of lines to be + printed. It should be 1 in + microweave and 360 DPI. At 720 DPI softweave, it should + be the number of lines to be actually printed. + + + WIDTH is the number of pixels to be + printed in each row. Following this command, a carriage + return (13 decimal, + 0A hex) should be output to return + the print head position to the left margin. + + + The basic data format is a string of bytes, with data + from left to right on the page. Within each byte, the + highest bit is first. + + + The TIFF compression is implemented as one count byte + followed by one or more data bytes. There are two + cases: + + + + + If the count byte is 128 or + less, it is followed by ([count] + 1) data bytes. + So if the count byte is 0, it + is followed by 1 data byte; if it is + 128, it is followed by 129 data + bytes. + + + + + If the count byte is greater than 128, it is + followed by one byte. This byte is repeated (257 - + [count]) times. So if [count] is 129, the next byte + is treated as though it were repeated 128 times; if + [count] is 255, it is treated as though it were + repeated twice. + + + +
    +
    + + ESC i COLOR1 + COMPRESS1 BITS1 + BYTES2 LINES2 + data... + + + Print data in the newer printers (that support variable + dot size), and Stylus Pro models. + COLOR is the color. + + + Extended Colors + + + + + + COLOR + Color name + + + + + 0 + Black + + + 1 + Magenta + + + 2 + Cyan + + + 4 + Yellow + + + 5 + Alternate black (Stylus C70/C80) + + + 6 + Alternate black (Stylus C70/C80) + + + 16 + Gray (“light black”) + + + 17 + Light magenta + + + 18 + Light cyan + + + +
    + + COMPRESS signifies the compression + mode: + + + Compression modes + + + + + + COMPRESS + Compression mode + + + + + 0 + No compression + + + 1 + + TIFF compression (incorrectly documented as + “run length encoded”) + + + + 2 + + TIFF compression with a special command set, or + “run length encoding 2” on some + printers. + + + + +
    + + BITS is the number of bits per pixel. + + + BYTES is the number of bytes wide for + each row (ceiling(BITS × width_of_row, 8)}). Note + that this is different from the ESC . + command above. + + + LINES is the number of lines to be + printed. This command is the only way to get variable + dot size printing. In variable dot mode, the size of + the dots increases as the value (1, + 2, or 3) + increases. + +
    +
    + + ESC (D BC=4 + BASE2 VERTICAL1 + HORIZONTAL1 + + + Set printer horizontal and vertical spacing. It only + applies to variable dot size printers in softweave mode + (and possibly other high end printers). + + + BASE is the base unit for this + command; it must be 14400. + + + VERTICAL is the distance in these + units between printed rows; it should be + ((separation_in_nozzles × BASE + ÷ 720). + + + HORIZONTAL is the horizontal + separation between dots in a row. Depending upon the + printer, this should be either (14400 ÷ 720) or + (14400 ÷ 360). The Stylus Pro 9000 manual + suggests that the settings should match the chosen + resolution, but that is apparently not the case (or not + always the case) on other printers. + + + + + ESC (R BC=8 00 R E M O T E + 1 + + + Enters “remote mode”. This is a special, + undocumented command set that is used to set up various + printer options, such as paper feed tray, and perform + utility functions such as head cleaning and alignment. + It does not appear that anything here is actually + required to make the printer print. Our best + understanding of what is in a remote command sequence is + described in a separate section below. + + + + + ESC 01 @EJL [sp] ID\r\n + + + Return the printer ID. This is considered a remote mode + command, although the syntax is that of a conventional + command. This returns the following information: + + + @EJL ID\r +MFG:EPSON; +CMD:ESCPL2,BDC; +MDL:[printer model]; +CLS:PRINTER; +DES:EPSON [printer model]; +\f + + + After all data has been sent, a form feed byte should be + sent. + + + +
    + + All newer Epson printers (STC 440, STP 750) require the + following command to be sent at least once to enable printing + at all. This command specifically takes the printer out of the + 1284.4 packet mode communication protocol and enables normal + data transfer. Sending it multiple times is is not harmful, so + it is normally sent at the beginning of each job: + + + ESC 01@EJL[space]1284.4[newline]@EJL[space][space][space][space] +[space][newline]ESC@ + + + The proper sequence of initialization commands is: + + + magic command +ESC @ +remote mode if needed +ESC (G +ESC (U +ESC (K (if appropriate) +ESC (i +ESC U (if needed) +ESC (s (if appropriate) +ESC (e +ESC (C +ESC (c +ESC (S +ESC (D (if needed) +ESC (V (optional -- this can be accomplished with ESC (v) + + + For printing, the proper sequence is: + + + ESC (v + + + and repeat for each color: + + + + ESC ($ or ESC (\ or ESC \ +ESC (r or ESC r (if needed---not used with "ESC i" and not needed if the color +has not changed from the previous printed line) +ESC . or ESC i ...data... [return] (0A hex) + + + To terminate a page: + + + [formfeed] (0C hex) +ESC @ + +
    + + Remote Mode Commands + + The following description of remote commands comes out of an + examination of the sequences used by the printer utilities + bundled with the Windows drivers for the ESC740, and from other + sources (some Epson manuals, experimentation, analysis of print + files). It is largely speculative as these commands are not all + documented in the Epson documentation we have access to. + Generally, newer manuals provide more thorough documentation. + + + Remote command mode is entered when the printer is sent the + following sequence: + + + ESC (R BC=8 00 R E M O T E 1 + + + Remote mode commands are then sent, and terminated with the + following sequence: + + + ESC 00 00 00 + + + All remote mode commands must be sent before the initial + ESC (G command is sent. + + + This introductory sequence is then followed by a sequence of + commands. Each command is constructed as follows: + + + + + Two ASCII bytes indicating the function + + + + + A byte count (two bytes, little-endian) for the parameters + + + + + Binary parameters, if any + + + + + This is a list of all remote commands we have seen: + + + ESC/P2 Remote Mode Commands + + NC BC=2 00 + 00 + + + Print a nozzle check pattern. + + + + + VI BC=2 00 + 00 + + + On my 740, prints the following, probably “version + information”: + + + W01286 I02382\r\n + + + + + * AI BC=3 00 00 00 + + + Prints a “printer ID”. On one 870, prints the + following: + + + 51-51-50-51-49-48\r\n + + + The Windows driver has a text entry field where this + number can be entered, but its purpose is unknown. + + + + + * LD BC=0 + + + Load printer defaults from NVRAM, DIP switches, and/or + ROM. This apparently does not load factory defaults per + se, but any settings that are saved. This is commonly + used right at the end of each print job after the + ESC @ printer reset command. + + + + + * CH BC=2 00 + xx + + + Perform a head cleaning cycle. The heads to clean are + determined by parameter xx: + + + Head cleaning parameters + + + + + + xx + Description + + + + + 00 + Clean all heads + + + 01 + Clean black head + + + 02 + Clean color heads + + + +
    + + While xx = 00 is + likely supported by all printers, xx + = 01 and 02 + are not. + +
    +
    + + * DT BC=3 00 + xx 00 + + + Print an alignment pattern. There are three patterns, + which are picked via the choice of + xx. Pattern 0 + is coarse, pattern 1 is medium, and + pattern 2 is fine. + + + + + * DA BC=4 00 + xx 00 + yy + + + Set results for the alignment pattern. + xx is the pattern + (1--3); + yy is the best choice from the set + (1--7 or + 1--15). This + does not save to NVRAM, so when the printer is powered + off, the setting will be lost. + + + + + * SV BC=0 + + + Save the current settings to NVRAM. + + + + + * RS BC=1 + 01 + + + Reset the printer. + + + + + * IQ BC=1 + 01 + + + Get ink quantity. This requires direct access to the + printer port. The return looks like + + + IQ:KKCCMMYY + + + or + + + IQ:KKCCMMYYccmm + + + (for 4-color and 6-color printers respectively), where + each pair of digits are hexadecimal representations of + percent. + + + +
    + + The following two commands have been observed on an STP 870. + + + + * IR BC=2 00 + xx + + + Function unknown. This command has + been observed on an STP 870 with + xx=03 at the start + of a job and xx=02 + at the end of a job (where it is followed by an + LD command). When in roll mode, the + values change to + xx=01 at the start + of a job and xx=00 + at the end of a job. + + + + + * FP BC=3 00 + pos[2] + + + Specify the horizontal left margin in units of 1/360 inch. + The default value for pos is + 0. For borderless printing on + printers that support it, a value of + -80 (FFB0h) + should be used. + + + + + + The commands below are partially documented in the Stylus Pro + 9000 manual. Much of this information is interpreted; none is + tested. + + + + * SN BC=3 00 + xx yy + + + Select Mechanism Sequence. xx + controls which sub-operation is performed. + xx=00 selects + the “Feed paper sequence setting”. + yy can take on the following values + (on the STP 870, at any rate): + + + Media types + + + + + + yy + Media type + + + + + 0 + Default + + + 1 + Plain paper + + + 2 + Postcards + + + 3 + + Film (photo quality glossy film, transparencies) + + + + 4 + Envelopes + + + 5 + Plain paper (fast load) + + + 6 + + Back light film (although this has been observed + with heavyweight matte paper) + + + + 7 + + Matte paper (observed with 360 dpi inkjet paper, + and photo quality inkjet paper) + + + + 8 + Photo paper + + + +
    + + Experimentation suggests that this setting changes + details of how the printers' cut sheet feeder works, + presumably to tune it for different types of paper. + + + xx=01 controls + the platen gap setting; + yy=00 is the + default, yy=1 or + 2 are higher settings. + + + xx=02 controls + paper loading speed + (yy=0 is normal, + 1 is fast, 2 + is slow). It appears that 1 is + used when printing on “plain paper”, + “360dpi ink jet paper” or “ink jet + transparencies”, and + yy=00 for all + other paper type settings. + + + xx=07 controls + duplex printing for printers with that capability + (yy=0 is default, + for non-duplex printing; 1 is front + side of the paper, and 2 is back + side). + + + xx=09 controls + zero margin printing on the printers with the capability + of printing zero-margin on all sides (Stylus Photo + 780/790, 890, and 1280/1290). + yy=0 is the + default; 1 enables zero margin + printing. + +
    +
    + + * PP BC=3 00 + xx + yy + + + Set Paper Path. + xx=2 indicates + manual feed, + xx=3 is for roll + paper. yy selects “paper path + number”. + + + + + * AC BC=2 00 + xx + + + Set Auto Cutting State. + xx=0 selects + auto cutting off, + xx=1 selects + auto cutting on, and + xx=2 indicates + horizontal print page line on. It appears that with + auto cutting on, roll paper is cut automatically at the + point a formfeed character is sent. The formfeed + character is normally used to eject a page; with this + turned on, it also cuts the roll paper. Horizontal + print page line on prints a narrow line of black dots at + the position the paper should be cut manually. + + + + + * DR BC=4 00 xx + DT2 + + + Set Drying Time. + xx=00 sets the + drying time “per scan” (per pass?); + xx=01 sets the + drying time per page. DT indicates + the drying time, which is in seconds if page mode is + used and in milliseconds if scan mode is used. + DT must not exceed 3600 seconds in + per-page mode and 10000 milliseconds in per-scan mode. + + + + + * IK BC=2 00 + xx + + + Select Ink Type. + xx=00 selects + dye ink. Pigment ink is apparently selected by + xx=01. This + probably does not apply to the consumer-grade printers. + + + + + * PZ BC=2 00 xx + + + Set Pause After Printing. + xx=00 selects no + pause after printing; + xx=01 selects + pause after printing. If turned on, the printer is + paused after the page is ejected (by the FF byte). If + cutting is turned on, the printer is paused + after the cutting or printing of + the horizontal cut line. + + + + + * EX BC=6 00 00 00 00 0x14 + xx + + + Set Vertical Print Page Line Mode. + xx=00 is off, + xx=01 is on. If + turned on, this prints vertical trim lines at the left + and right margins. + + + + + * EX BC=6 00 00 00 00 0x05 + xx + + + Set Roll Paper Mode. If xx is + 0, roll paper mode is off; if + xx is 1, roll + paper mode is on. + + + + + * EX BC=3 00 + xx yy + + + Appears to be a synonym for the SN + command described above. + + + + + * PH BC=2 00 + xx + + + Select Paper Thickness. Set the paper thickness + xx in .1 mm units. This must not + exceed 0x10 (1.6 mm). If the + thickness is set “more than” .6 mm (which + probably means “at least” 0.6 mm, since the + other case reads “less than 0.5 mm”), the + platen gap is set high irrespective of the + SN command. + + + + + * PM BC=2 00 + 00 + + + Function unknown. Used on the STC + 3000 at least when using roll feed, and on the STP 870 + in all print files analysed to date. + + + + + * ST BC=2 00 + xx + + + Epson's STP 750/1200 programming guide refers to the + ST command as “Set printer + state reply”. If xx is + 0 or 2, the + printer will not send status replies. If + xx is 1 or + 3, the printer will send status + replies. The status replies consist of state, error + codes, ink leve, firmware version, and warning status. + + + The actual reply is documented as + + + @BDC ST\r +ST: xx; +[ER: yy;] +IQ: n1n2n3n4; +[WR: w1,w2...;] +RV: zz; +AI:CW:02kkccmmyy, MI:mm +[TC:tttt;] +INK:...; +\f + + + (\r is carriage return; + \n is newline; \f + is formfeed.) + + + ST is the printer status: + + + Printer status codes + + + + + + Status code + Description + + + + + 00 + Error + + + 01 + Self-test + + + 02 + Busy + + + 03 + Waiting while printing + + + 04 + Idle + + + 07 + Cleaning/filling ink heads + + + 08 + Not yet initialized/filling heads + + + +
    + + ER, if provided, is the error status: + + + Printer error codes + + + + + + Error code + Description + + + + + 00 + Fatal Error + + + 01 + Interface not selected + + + 04 + Paper jam + + + 05 + Out of ink + + + 06 + Paper out + + + 0D + Paper gap error + + + 10 + Maintenance request + + + 11 + Tear-off mode selected + + + 12 + Double feed error + + + 1C + Cutter position error + + + 1D + Cutter jam + + + 1E + Ink color error + + + 23 + Ink combination error + + + +
    + + IQ is the amount of ink left, as a + (decimal!) percentage expressed in hexadecimal. The + values are black, cyan, magenta, and yellow. 6 and 7 + color printers usually specify two or three additional + values for light cyan, light magenta, and gray. + However, some low end 6-color printers specify only four + values. + + + For printers with different ink cartridge options, the + following additional values may appear: + + + Printer additional ink codes + + + + + + Ink code + Description + + + + + NA + Ink cartridge is not inserted + + + RE + + Ink cartridge information cannot be read + + + + WE + + Ink cartridge information cannot be written + + + + CI + + Ink cartridge is inserted, but has not been read + + + + +
    + + WR, if provided, is the warning status: + + + Printer warning codes + + + + + + Warning code + Description + + + + + 10 + + Black ink low (Photo black on printers using + UltraChrome® ink) + + + + 11 + Cyan + + + 12 + Magenta + + + 13 + Yellow + + + 14 + Light cyan (presumably) + + + 15 + Light magenta (presumably) + + + 17 + + Gray (with UltraChrome-compatible printers) + + + + 18 + Matte black 1 (UltraChrome) + + + 19 + Matte black 2 (UltraChrome) + + + +
    + + RV is the firmware revision (one byte + ASCII). + + + AI is actuator information. These + are two byte ASCII codes that indicate ``ink weight rank + ID'' of KCMY, respectively. + + + TC, if provided, is the total time of + cleaning or ink filling (?). + + + RC, if provided, is the firmware + revision. + + + INK: and MI are + not documented. + +
    +
    + + * SM BC=2 00 + xx + + + Set Status Reply Rate. xx is the + repeat interval in seconds. If xx is + 0, the status is returned only when + the printer's state changes. + + + + + * ST BC=1 + 01 + + + Reply Printer Status. The reply is formatted as follows: + + + @BDC PS\r\nST:xx;\f + + + \r is carriage return; + \n is newline; \f is + formfeed). If xx (the reply value) is + 0 or 2, + automatic status update is disabled; if + 1 or 3, it is + enabled. + + + + + * SM BC=1 + 01 + + + Reply Printer Status Rate. The reply is formatted as + follows: + + + @BDC PS\r\nST:xx;\f + + + \r is carriage return; + \n is newline; \f is + formfeed). See SM + BC=2 above for the meaning of + the return value. + + + + + * ?? + BC=xx + y[1] … + y[xx] + + + Echo Parameters (perhaps better described as Echo + Commands). The command string is executed (it would + appear from the documentation), and the string sent is + returned using a sequence similar to that described in + the ST BC=1 and + SM BC=1 commands. + Note that in this case the number of bytes is variable! + + + + + * SM BC=2 00 + 02 + + + Function unknown. Used on the STC + 3000 at least when using roll feed. + + + + + * JE BC=1 + 00 + + + Function unknown. On new printers + (STC 740 or newer), this command should be sent after + all data has been sent. If this command is not sent, + and the printer is connected to a Windows system, the + last page of the job will not print completely. The + most likely explanation for for this is that the Windows + driver typically puts the printer in 1284.4 packet mode, + and this command has the effect of flushing the buffer + in the printer. + + + + + * CO BC=8 00 + cutter[1] page[1] + unit[1] + position[4] + + + Specify paper cutting on Stylus Photo 2200 (and perhaps + some other printers). cutter must be + 0. page should be one of the + following: + + + Paper cutting codes + + + + + + Code + Description + + + + + 0 + All pages + + + 1 + First page only + + + 2 + Last page only + + + +
    + + unit should be one of the following: + + + Paper cutting units + + + + + + Code + Description + + + + + 0 + 1/360 in. + + + 1 + 1/720 in. + + + 2 + 1/1440 in. + + + +
    + + This command should be used twice. The first + CO command specifies where the page + will be cut at the top, and the second specifies where + the page will be cut at the bottom. This permits + cutting both the top and the bottom of the page. + +
    +
    +
    +
    + + Appropriate Remote Commands + + + All of the remote commands described above are wrapped up with + the usual boilerplate. The files always start with + 00 00 00 and the “magic” + command described above, then two ESC @s to + reset the printer. The remote command sequences come next; if + they print anything that is usually followed by a + FF (0C hex) character to + feed the page, then the file ends with another two + ESC @s to get back to the ground state. + + + An alignment sequence goes like this: + + + + + Host uses DT to print an alignment + sheet. + + + + + User eyeballs the sheet to see which is the best aligned + pattern. + + + + + Host sends a DA command indicating + which pattern the user chose. + + + + + If the user said “realign”, meaning he isn't + done yet, go to step 1. + + + + + We are done: host sends a SV command + and exits. + + + + + + The sequence used (by the STC 3000, at least) to print from + the roll feed is (with byte count omitted): + + + PM 00 00 +SN 00 00 00 +EX 00 00 00 00 05 01 +ST 00 01 +SM 00 02 + + + The sequence used by the STP 870 to print on plain paper is + + + PM 00 00 +IR 00 03 +SN 00 00 01 +SN 00 01 00 +SN 00 02 01 +EX 00 00 00 00 05 00 +FP 00 00 00 + + + and the job finishes with + + + IR 00 02 +LD + + + For different paper type settings on the STP 870, the + arguments to SN vary. The arguments to the + first and third SN commands are as outlined + in the description of the SN command above; + the arguments to the second (“platen gap”) are + 00 01 01 for thick papers (“matte + paper—heavyweight”, “photo paper” and + “premium glossy photo paper”) and 00 01 + 00 for all others. + + + For roll-mode printing, the STP 870's sequence changes as + follows. IR's arguments become 00 + 01 in the header, and 00 00 after + the job, and EX's last argument changes + from 00 to 01. + + + For zero-margin printing on the STP 870, the arguments to + FP become 00 0xb0 0xff. + This moves the origin about 5.5mm to the left, to a point one + tenth of an inch to the left of the left-hand edge of the + paper, allowing printing right up to (and beyond) the edge of + the paper. Some printers (at least the STP 870) include white + absorbent pads at the left margin position and other positions + (89mm and 100mm on the STP 870) to soak up ink which misses + the edge of the paper. Printing off the edge of paper of a + width not aligned with a pad could result in making a mess of + the inside of the printer and ink getting on the reverse of + the paper. + + +
    diff --git a/doc/developer/gpl-appendix.xml b/doc/developer/gpl-appendix.xml new file mode 100644 index 0000000..0119611 --- /dev/null +++ b/doc/developer/gpl-appendix.xml @@ -0,0 +1,502 @@ + + + + + + Version 2, June 1991 + + + 2000Free Software Foundation, Inc. + + + +

    Free Software Foundation, Inc. + 59 Temple Place, Suite 330, + Boston, + MA + 02111-1307 + USA +
    + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + + GNU General Public License + + + Preamble + + + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General + Public License is intended to guarantee your freedom to share + and change free software - to make sure the software is free for + all its users. This General Public License applies to most of + the Free Software Foundation's software and to any other program + whose authors commit to using it. (Some other Free Software + Foundation software is covered by the GNU Library General Public + License instead.) You can apply it to your programs, too. + + + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure + that you have the freedom to distribute copies of free software + (and charge for this service if you wish), that you receive + source code or can get it if you want it, that you can change + the software or use pieces of it in new free programs; and that + you know you can do these things. + + + + To protect your rights, we need to make restrictions that forbid + anyone to deny you these rights or to ask you to surrender the + rights. These restrictions translate to certain responsibilities + for you if you distribute copies of the software, or if you + modify it. + + + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must give the recipients all the rights + that you have. You must make sure that they, too, receive or can + get the source code. And you must show them these terms so they + know their rights. + + + + We protect your rights with two steps: + + + + + copyright the software, and + + + + + offer you this license which gives you legal permission to + copy, distribute and/or modify the software. + + + + + + + Also, for each author's protection and ours, we want to make + certain that everyone understands that there is no warranty for + this free software. If the software is modified by someone else + and passed on, we want its recipients to know that what they + have is not the original, so that any problems introduced by + others will not reflect on the original authors' reputations. + + + + Finally, any free program is threatened constantly by software + patents. We wish to avoid the danger that redistributors of a + free program will individually obtain patent licenses, in effect + making the program proprietary. To prevent this, we have made it + clear that any patent must be licensed for everyone's free use + or not licensed at all. + + + + The precise terms and conditions for copying, distribution and + modification follow. + + + + + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + + Section 0 + + This License applies to any program or other work which + contains a notice placed by the copyright holder saying it may + be distributed under the terms of this General Public + License. The "Program", below, refers to any such program or + work, and a work based on the Program means + either the Program or any derivative work under copyright law: + that is to say, a work containing the Program or a portion of + it, either verbatim or with modifications and/or translated + into another language. (Hereinafter, translation is included + without limitation in the term modification.) + Each licensee is addressed as you. + + + + Activities other than copying, distribution and modification + are not covered by this License; they are outside its + scope. The act of running the Program is not restricted, and + the output from the Program is covered only if its contents + constitute a work based on the Program (independent of having + been made by running the Program). Whether that is true + depends on what the Program does. + + + + + Section 1 + + You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that + you conspicuously and appropriately publish on each copy an + appropriate copyright notice and disclaimer of warranty; keep + intact all the notices that refer to this License and to the + absence of any warranty; and give any other recipients of the + Program a copy of this License along with the Program. + + + + You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + + + + + Section 2 + + You may modify your copy or copies of the Program or any + portion of it, thus forming a work based on the Program, and + copy and distribute such modifications or work under the terms + of Section 1 above, provided + that you also meet all of these conditions: + + + + + You must cause the modified files to carry prominent + notices stating that you changed the files and the date + of any change. + + + + + You must cause any work that you distribute or publish, + that in whole or in part contains or is derived from the + Program or any part thereof, to be licensed as a whole + at no charge to all third parties under the terms of + this License. + + + + + If the modified program normally reads commands + interactively when run, you must cause it, when started + running for such interactive use in the most ordinary + way, to print or display an announcement including an + appropriate copyright notice and a notice that there is + no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program + under these conditions, and telling the user how to view + a copy of this License. + + + Exception: + + If the Program itself is interactive but does not + normally print such an announcement, your work based + on the Program is not required to print an + announcement.) + + + + + + + + + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Program, and can be reasonably considered independent and + separate works in themselves, then this License, and its + terms, do not apply to those sections when you distribute them + as separate works. But when you distribute the same sections + as part of a whole which is a work based on the Program, the + distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the + entire whole, and thus to each and every part regardless of + who wrote it. + + + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, + the intent is to exercise the right to control the + distribution of derivative or collective works based on the + Program. + + + + In addition, mere aggregation of another work not based on the + Program with the Program (or with a work based on the Program) + on a volume of a storage or distribution medium does not bring + the other work under the scope of this License. + + + + + Section 3 + + + You may copy and distribute the Program (or a work based on + it, under Section 2 in object + code or executable form under the terms of Sections 1 and 2 above provided that you also do + one of the following: + + + + + Accompany it with the complete corresponding + machine-readable source code, which must be distributed + under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + + + + Accompany it with a written offer, valid for at least + three years, to give any third party, for a charge no + more than your cost of physically performing source + distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the + terms of Sections 1 and 2 above on a medium customarily + used for software interchange; or, + + + + + Accompany it with the information you received as to the + offer to distribute corresponding source code. (This + alternative is allowed only for noncommercial + distribution and only if you received the program in + object code or executable form with such an offer, in + accord with Subsection b above.) + + + + + + + The source code for a work means the preferred form of the + work for making modifications to it. For an executable work, + complete source code means all the source code for all modules + it contains, plus any associated interface definition files, + plus the scripts used to control compilation and installation + of the executable. However, as a special exception, the source + code distributed need not include anything that is normally + distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating + system on which the executable runs, unless that component + itself accompanies the executable. + + + + If distribution of executable or object code is made by + offering access to copy from a designated place, then offering + equivalent access to copy the source code from the same place + counts as distribution of the source code, even though third + parties are not compelled to copy the source along with the + object code. + + + + + Section 4 + + + You may not copy, modify, sublicense, or distribute the + Program except as expressly provided under this License. Any + attempt otherwise to copy, modify, sublicense or distribute + the Program is void, and will automatically terminate your + rights under this License. However, parties who have received + copies, or rights, from you under this License will not have + their licenses terminated so long as such parties remain in + full compliance. + + + + + Section 5 + + + You are not required to accept this License, since you have + not signed it. However, nothing else grants you permission to + modify or distribute the Program or its derivative works. + These actions are prohibited by law if you do not accept this + License. Therefore, by modifying or distributing the Program + (or any work based on the Program), you indicate your + acceptance of this License to do so, and all its terms and + conditions for copying, distributing or modifying the Program + or works based on it. + + + + + Section 6 + + + Each time you redistribute the Program (or any work based on + the Program), the recipient automatically receives a license + from the original licensor to copy, distribute or modify the + Program subject to these terms and conditions. You may not + impose any further restrictions on the recipients' exercise of + the rights granted herein. You are not responsible for + enforcing compliance by third parties to this License. + + + + + Section 7 + + + If, as a consequence of a court judgment or allegation of + patent infringement or for any other reason (not limited to + patent issues), conditions are imposed on you (whether by + court order, agreement or otherwise) that contradict the + conditions of this License, they do not excuse you from the + conditions of this License. If you cannot distribute so as to + satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may + not distribute the Program at all. For example, if a patent + license would not permit royalty-free redistribution of the + Program by all those who receive copies directly or indirectly + through you, then the only way you could satisfy both it and + this License would be to refrain entirely from distribution of + the Program. + + + + If any portion of this section is held invalid or + unenforceable under any particular circumstance, the balance + of the section is intended to apply and the section as a whole + is intended to apply in other circumstances. + + + + It is not the purpose of this section to induce you to + infringe any patents or other property right claims or to + contest validity of any such claims; this section has the sole + purpose of protecting the integrity of the free software + distribution system, which is implemented by public license + practices. Many people have made generous contributions to the + wide range of software distributed through that system in + reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to + distribute software through any other system and a licensee + cannot impose that choice. + + + + This section is intended to make thoroughly clear what is + believed to be a consequence of the rest of this License. + + + + + Section 8 + + + If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted + interfaces, the original copyright holder who places the + Program under this License may add an explicit geographical + distribution limitation excluding those countries, so that + distribution is permitted only in or among countries not thus + excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + + + + Section 9 + + + The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such + new versions will be similar in spirit to the present version, + but may differ in detail to address new problems or concerns. + + + + Each version is given a distinguishing version number. If the + Program specifies a version number of this License which + applies to it and "any later version", you have the option of + following the terms and conditions either of that version or + of any later version published by the Free Software + Foundation. If the Program does not specify a version number + of this License, you may choose any version ever published by + the Free Software Foundation. + + + + + Section 10 + + + If you wish to incorporate parts of the Program into other + free programs whose distribution conditions are different, + write to the author to ask for permission. For software which + is copyrighted by the Free Software Foundation, write to the + Free Software Foundation; we sometimes make exceptions for + this. Our decision will be guided by the two goals of + preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software + generally. + + + + + NO WARRANTY + Section 11 + + + BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS + IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME + THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + + + + Section 12 + + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO + LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES + SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM + TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + + + + + diff --git a/doc/developer/gutenprint.pdf b/doc/developer/gutenprint.pdf new file mode 100644 index 0000000..ec324b0 Binary files /dev/null and b/doc/developer/gutenprint.pdf differ diff --git a/doc/developer/gutenprint.xml b/doc/developer/gutenprint.xml new file mode 100644 index 0000000..fe7f9a5 --- /dev/null +++ b/doc/developer/gutenprint.xml @@ -0,0 +1,59 @@ + + + + + + + + + + +]> + + + + The Developer's Guide to Gutenprint + 7th Nov, 2003 + 7th Nov, 2003 + + The Gutenprint Project + + + 2003 + The Gutenprint Project + + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + + + +&introduction; +©ing; +&using; +&problems; +&new-printer; +&escp2; +&weave; +&dither; +&gpl; + + diff --git a/doc/developer/html-stamp b/doc/developer/html-stamp new file mode 100644 index 0000000..e69de29 diff --git a/doc/developer/introduction.xml b/doc/developer/introduction.xml new file mode 100644 index 0000000..7fad264 --- /dev/null +++ b/doc/developer/introduction.xml @@ -0,0 +1,62 @@ + + Preface + reading + manual, how to read + + Gutenprint is the print facility of the GNU Image Manipulation + Program (GIMP). It is in addition a suite of drivers that may be + used with common UNIX spooling systems using Ghostscript or CUPS. + These drivers provide printing quality for Linux, MacOS X and UNIX + on a par with proprietary vendor-supplied drivers in many cases, + and can be used for many of the most demanding printing tasks, + especially for high quality printing on modern inkjets, including + “photographic quality” models which offer very high + resolutions and several inks. The core of Gutenprint is a shared + library (libgutenprint) which may be used by any program that + wishes to produce high-quality printed output. + + + This manual documents the use of the + Gutenprint package, focusing mainly on + the libgutenprint library that is the core of + Gutenprint. Parts of the manual which + describe the use of libgutenprint are aimed primarily at + programmers, and do assume that the reader is familiar with C + programming, and using standard programming tools on GNU or UNIX + systems. + + + For the end-user, there is a separate manual documenting + programs that come with Gutenprint, including the + GIMP print plugin, + and the CUPS and + Ghostscript drivers. + + + To learn how to use libgutenprint in your own programs is to look + at the source of the testpattern, located in + src/testpattern, as well as + the source of the other programs that use libgutenprint, and + libgutenprint itself. Most importantly, please consult the API + reference and libgutenprint headers. + + + The manual is split into several parts for the programmer. It + starts with a simple usage example of how to link a program with + libgutenprint, then how to integrate this into package build + scripts, using make, + autoconf and automake. The + appendices cover the detail of the inner workings of some parts of + libgutenprint. + + + The following sections detail the dither and weave algorithms used + in libgutenprint, the ESC/P2 printer control language used in Epson + printers and how to add support for a new printer to libgutenprint. + + + We hope you enjoy using Gutenprint! +—The Gutenprint project + + + diff --git a/doc/developer/new-printer.xml b/doc/developer/new-printer.xml new file mode 100644 index 0000000..ec83d61 --- /dev/null +++ b/doc/developer/new-printer.xml @@ -0,0 +1,883 @@ + + Adding a new printer + + This chapter covers adding a new ESCP/2, PCL, or Canon printer. + Writing a new driver module is not covered. + + + The three steps to adding a printer are: + + + + Add an entry to printers.xml. + + + + + Add the appropriate code and data to the appropriate + driver module. + + + + + Tune the printer. + + + + + + Printer information is stored in two places: in + printers.xml (which contains the list of + printer models available to the the upper-level application), + and in the appropriate driver file + (print-escp2.c, + print-pcl.c, or + print-canon.c). + + + <filename>printers.xml</filename> + + printers.xml is an XML file that contains + very simple printer definitions. A schema may be used to + validate the XML (src/main/gutenprint.xsd). + This is an example definition: + + + <printer name="EPSON Stylus Color 1500" driver="escp2-1500"> +<color value="true"/> +<model value="2"/> +<gamma value="0.597"/> +<density value="1.0"/> +</printer> + + + There are other tags that may be present. The only ones that + are mandatory are <printer>, + <color> and + <model>. The other optional parameters + (<gamma> and + <density> in this case) can be used to + adjust control settings. This is probably not the right place + for them; the printer drivers themselves should contain this + information. There's probably no good reason for anything but + gamma and density to be in here. Gamma refers to the printer's + gamma factor; density is the desired base ink density for the + printer. The Epson driver contains the density information for + each printer at each resolution internally. An even better + driver would adjust density and possibly even gamma for paper + type. All the more reason not to have that information here. + + + If you really are curious about what tags are permitted, please + see the schema. These are the definitions of the tags that do + matter: + + + printdef XML elements + + <family> + + + This defines what driver module this printer uses. The + attribute name is the name of the + family driver to associate the printers with, for example + escp2, pcl, + canon, ps or + raw. This tag may only contain + <printer> elements. + + + + + <printer> + + + This starts the definition of a printer. It must contain + the attributes name and + driver. name should + be is the full name of the printer, and must be human + readable. driver should consist of + alphanumerics and hyphens, and be fairly short. + name is what will appear in the + user-visible listing of printers, and may be translated + into the user's language, while driver + is what is actually used to key into the list of printers. + It is legal to have multiple printers with the same driver + name. + + + + + <color> + + + This tag may not contain any content, but the + value attribute may be set to + true or false. This + indicates that this printer is capable of color, or is not + capable of color respectively. + + + + + <model> + + + This defines a model number. This tag may not contain any + content, but the value attribute may be + set to a positive integer. This is passed into the + driver, which may do whatever it cares to with + it—index into a table, compute on, or whatever. + This need not be unique. + + + + + + + The driver file + + Adding a new printer to a driver module + print-canon.c, + print-escp2.c, + print-lexmark.c, or + print-pcl.c or + (print-ps.c is really ad hoc) requires a + bit more planning. Each driver is somewhat different, but they + all generally have a vector of printer definitions, and the code + does some special casing based on particular printer + capabilities. The PCL and Canon drivers are quite similar; the + Canon driver was actually cribbed from the PCL driver, but it + then returned the favor. + + + The Epson driver is a little bit different. Canon and PCL + printers have some amount of intelligence; a lot of them have + specific ink options, and know about specific paper sizes and + types, and must be told the right thing. Epson printers have + somewhat less intelligence and will more or less do exactly what + the host tells it to do in a fairly regular fashion. I actually + prefer this; it isn't materially more work for the host to + compute things like exact paper sizes and such, it allows a lot + more tweaking, and it may be why Epson has been more open with + information—the communication protocol doesn't really + contain very much IP, so they have less reason to keep it + secret. + + + The sections about PCL and Canon printers need completing. + + + Epson inkjet printers + + The model_capabilities vector in + print-escp2.c contains one entry for each + defined printer model. The model parameter + in printers.xml is an index into this + table. + + + In general, the new printers have fewer eccentricities than + the older printers. That doesn't mean they're simpler, just + that they're more consistent. + + + escp2_printer_t is a C struct defined as follows: + + + typedef struct escp2_printer +{ +model_cap_t flags; /* Bitmask of flags, see below */ +/*****************************************************************************/ +int nozzles; /* Number of nozzles per color */ +int min_nozzles; /* Minimum number of nozzles per color */ +int nozzle_separation; /* Separation between rows, in 1/360" */ +int black_nozzles; /* Number of black nozzles (may be extra) */ +int min_black_nozzles; /* # of black nozzles (may be extra) */ +int black_nozzle_separation; /* Separation between rows */ +/*****************************************************************************/ +int xres; /* Normal distance between dots in */ + /* softweave mode (inverse inches) */ +int enhanced_xres; /* Distance between dots in highest */ + /* quality modes */ +int base_separation; /* Basic unit of row separation */ +int base_resolution; /* Base hardware spacing (above this */ + /* always requires multiple passes) */ +int enhanced_resolution;/* Above this we use the */ + /* enhanced_xres rather than xres */ +int resolution_scale; /* Scaling factor for ESC(D command */ +int max_black_resolution; /* Above this resolution, we */ + /* must use color parameters */ + /* rather than (faster) black */ + /* only parameters*/ +int max_hres; +int max_vres; +int min_hres; +int min_vres; +/*****************************************************************************/ +int max_paper_width; /* Maximum paper width, in points */ +int max_paper_height; /* Maximum paper height, in points */ +int min_paper_width; /* Maximum paper width, in points */ +int min_paper_height; /* Maximum paper height, in points */ + /* Softweave: */ +int left_margin; /* Left margin, points */ +int right_margin; /* Right margin, points */ +int top_margin; /* Absolute top margin, points */ +int bottom_margin; /* Absolute bottom margin, points */ + /* "Micro"weave: */ +int m_left_margin; /* Left margin, points */ +int m_right_margin; /* Right margin, points */ +int m_top_margin; /* Absolute top margin, points */ +int m_bottom_margin; /* Absolute bottom margin, points */ +/*****************************************************************************/ +int extra_feed; /* Extra distance the paper can be spaced */ + /* beyond the bottom margin, in 1/360". */ + /* (maximum useful value is */ + /* nozzles * nozzle_separation) */ +int separation_rows; /* Some printers require funky spacing */ + /* arguments in microweave mode. */ +int pseudo_separation_rows;/* Some printers require funky */ + /* spacing arguments in softweave mode */ + +int zero_margin_offset; /* Offset to use to achieve */ + /* zero-margin printing */ +/*****************************************************************************/ + /* The stylus 480 and 580 have an unusual arrangement of + color jets that need special handling */ +const int *head_offset; +int initial_vertical_offset; +int black_initial_vertical_offset; + +/*****************************************************************************/ +const int *dot_sizes; /* Vector of dot sizes for resolutions */ +const double *densities; /* List of densities for each printer */ +const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */ +/*****************************************************************************/ +const double *lum_adjustment; +const double *hue_adjustment; +const double *sat_adjustment; +const paperlist_t *paperlist; +} escp2_printer_t; + + + The printer definition block is divided into 8 sections. + The first section is a set of miscellaneous printer options. + These are described in the code, and will not be discussed + further here. + + + The second section describes the number of nozzles and the + separation between nozzles in base units. The base unit is + 1/360" for all currently supported printers, but future + printers may support a smaller base unit. + + + Many printers have more black nozzles than nozzles of other + colors, and when used in black and white mode, it's possible + to use these extra nozzles, which speeds up printing. As an + example, a printer that is specified to have 48 cyan, magenta, + and yellow nozzles, and 144 black nozzles, can use all 144 + black nozzles when printing black ink only. When printing in + color, only 48 nozzles of each color (including black) can be + used. + + + Most printers can print using either the number of nozzles + available or any smaller number. Some printers require that + all of the nozzles be used. Those printers will set + min_nozzles and/or + min_black_nozzles to the same value as + nozzles and/or + black_nozzles. + + + The third section defines basic units of measure for the + printer, including the standard separation between dots, the + base nozzle separation, and the minimum and maximum printing + resolutions the printer supports. Most of these are fairly + self-explanatory, but some are not obvious. + + + Most Epson printers, other than the high-end Stylus Pro + models, cannot print dots spaced more closely than 1/360" or + 1/720" apart (this is the setting for xres. + This is true even for printers that support resolutions of + 1440 or 2880 DPI. In these cases, the data must be printed in + 2, 4, or 8 passes. While the printer can position the head to + a resolution of 1/1440" or 1/2880", the head cannot deposit + ink that frequently. + + + Some printers can only print in their very best quality (using + the smallest dots available) printing at a lower resolution. + For example, the Stylus Photo EX can normally print with a dot + spacing of 1/720". The smallest dot size cannot be printed + with a dot spacing of less than 1/360", however. In this + case, we use enhanced_xres to specify the + resolution to be used in this enhanced mode, and + enhanced_resolution to specify the printing + resolution above which we use the + enhanced_xres. + + + The resolution_scale command is used to + specify scaling factors for the dot separation on newer + printers. It should always be 14400 with current printers. + + + The fourth section specifies the minimum and maximum paper + sizes, and the margins. Some printers allow use of narrower + margins when softweave is used; both sets of margins are + specified. + + + There is a convenient INCH macro defined + to make specification of the + max_paper_width and + max_paper_height more legible. It + multiplies 72 by the provided expression + to get the appropriate number of points. For example, to + specify 8.5", INCH(17/2) expands to + (72 * 17/2), which is evaluated left to + right, and hence generates the correct value. + + + The fifth section specifies some miscellaneous values that are + required for certain printers. For most printers, the correct + values are 1 for + separation_rows and 0 + for the others. Very, very few printers require (or allow) + separation_rows to be anything but + 1 and + pseudo_separation_rows other than + 0. The Stylus Color 1520, Stylus Color + 800, Stylus Color 850, and (strangely enough to my mind, since + it's a newer printer) Stylus Color 660 seem to be the only + exceptions. + + + zero_margin_offset is used to specify an + additional negative horizontal offset required to print to the + edges of the paper on newer Stylus Photo printers. These must + be determined empirically; good starting values are + 100 for 1440 DPI and + 50 for 2880 DPI printers. The goal is to + print to the edge of the page, but not over it. + + + The sixth section specifies head offsets for printers that do + not have the color jets aligned. Certain printers, such as + the Stylus Color 480, have an unusual head arrangement whereby + instead of all of the colors being aligned vertically, the + nozzles are configured in groups. These printers are easy to + determine; if the normal head offset of zero for each color is + used, the printing will be vertically out of alignment. Most + of these printers require specification of a negative offset + for printing to the top edge of the paper; typically these + printers do not require such an offset when printing black + only. + + + The seventh section specifies the most difficult values to + tune, the dot sizes, printing densities, and ink values (for + variable dot size enabled printers). These will be described + in detail below. + + + The last section specifies luminosity, hue, and saturation + adjustment vectors for the printer, and the paper definitions. + These are used to adjust the color in + Photograph and Solid + Colors output modes. These are each vectors of 48 + (actually 49, as the first value must be duplicated) doubles + that remap the luminosity, hue, and saturation respectively. + The hue is calculated, and the value used to interpolate + between the two closest points in each vector. + + + The paper definitions is a set of paper definitions. The + paper definition contains the name of the paper type, special + settings that are required for printers to process the paper + correctly, and a set of adjustment values. These are not + currently discussed here. + + + The lists of dot sizes and densities contain values for 13 + printing modes: 120/180 DPI using printer weaving (single row; + incorrectly referred to as “microweave”) and + “soft” weaving (the driver determines the exact + pattern of dot layout), 360 DPI microweave and softweave, + 720×360 DPI microweave and softweave, 720 DPI microweave + and softweave, 1440×720 microweave and softweave, + 2880×720 microweave and softweave, and 2880×1440 + softweave only. Printer weaving is referred to as + “microweave” for historical reasons. + + + For the dot sizes, the value for each element in the vector + selects the dot size to be used when printing at this (or + similar) resolution. The dot sizes are determined by + consulting the programming manual for the printer and + experimenting as described below. Current Epson printers + always use dot sizes less than 16 + (0x10), to indicate single dot size (each + dot is represented by 1 bit, and it's either printed or not), + and dot sizes of 16 or greater to + indicate variable dot size (each dot is represented by 2 bits, + and it can either be not printed or take on 2 or 3 values, + representing the relative size of the printed dot). Variable + dot sizes permit the use of very small dots (which would be + too small to fill the page and produce solid black) in light + areas, while allowing the page to be filled with larger dots + in darker areas. + + + Even single dot size printers can usually produce dots of + different sizes; it's just illegal to actually try to switch + dot size during a page. These dots are also much bigger than + those used in true variable dot size printing. + + + A dot size of -1 indicates that this + resolution is illegal for the printer in question. Any + resolutions that would use this dot size will not be presented + to the user. A dot size of -2 indicates + that this resolution is legal, but that the driver is not to + attempt to set any dot size. Some very old printers do not + support the command to set the dot size. + + + Most printers support a dot size of 0 as + a mode-specific default, but it's often a bigger dot than + necessary. Printers usually also support some dot sizes + between 1 and 3. + Usually 1 is the right dot size for 720 + and 1440 DPI printing, and 3 works best + at 360 DPI. + + + Variable dot size printers usually support 2 or 3 sets of + variable dot sizes. Older printers based on a 6 picolitre + drop (the 480, 720, 740, 750, 900, and 1200) support two: mode + 16 (0x10 in hexadecimal) for normal variable dots at 1440 or + 720 DPI, and mode 17 (0x10) for special larger dots at 360 + DPI. Newer printers based on 4 picolitre drops normally + support three sizes: 0x10 for 4 pl base + drops, 0x11 for 6 pl base drops, and + 0x12 for special large drops. On these + printers, 0x10 usually works best at + 1440×720 and 0x11 works best at + 720×720. Unfortunately, 0x10 + doesn't seem to generate quite enough density at + 720×720, because if it did the output would be very + smooth. Perhaps it's possible to tweak things… + + + The list of densities is a list of base density values for all + of the above listed modes. “Density” refers to + the amount of ink deposited when a solid color (or solid + black) is printed. So if the density is + 0.5, solid black actually prints only + half the possible dots. “Base density” refers to + the fact that the density value can be scaled in the GUI or on + the Ghostscript command line. The density value specified + (which is not made visible to the user) is multiplied by the + base density to obtain the effective density value. All other + things (such as ink drop size) remaining the same, doubling + the resolution requires halving the base density. The base + density in the density vector may exceed + 1, as many paper types require lower + density than the base driver. The driver ensures that the + actual density never exceeds 1. + + + Tuning the density should be done on high quality paper + (usually glossy photo paper). The goal is to find the lowest + density value that results in solid black (no visible gaps + under a fairly high power magnifying glass or loupe). If an + appropriate density value is found for 720 DPI, it could be + divided by 2 for 1440×720, by 4 for 2880×720, and + by 8 for 2880×1440. + + + However, for printers that offer a choice of dot size, this + may not be the best strategy. The best choice for dot size is + the smallest dot size that allows choosing a density value not + greater than 1 that gives full coverage. + This dot size may be different for different resolutions. + Tuning variable dot size printers is more complicated; the + process is described below. + + + The last member is a pointer to a structure containing a list + of ink values for variable dot size (or 6 color) inks. We + model variable dot size inks as producing a certain + “value” of ink for each available dot size, where + the largest dot size has a value of 1. + 6-color inks are handled similarly; the light cyan and light + magenta inks are treated as a fractional ink value. The + combination of variable dot size and 6 color inks, of course, + just creates that many more different ink choices. + + + This structure is actually rather complicated; it contains + entries for each combination of physical printer resolution + (180, 360, 720, and 1440 DPI), ink colors (4, 6, and 7), and + single and variable dot sizes (since some printer modes can't + handle variable dot size inks). Since there's so much data, + it's actually a somewhat deeply nested structure. + + + + + An escp2_printer_t contains a pointer + (essentially, a reference rather than a copy) to an + escp2_variable_inklist_t. + + + + + An escp2_variable_inklist_t contains pointers + to escp2_variable_inkset_t structures. There + is one such pointer for each combination of resolution, + dot type, and ink colors as described above. Yes, this is + rather inflexible. + + + + + An escp2_variable_inkset_t contains pointers + to escp2_variable_ink_t structures. There is + one such pointer for each of the four colors (C, M, Y, and + K). + + + + + An escp2_variable_ink_t contains a pointer to + the actual list of ink values + (simple_dither_range_t), the number of ink + values, and a density value to be used for computing the + transitions. This density value is actually a scaling + value; it is multiplied by the effective density to + compute the density to be used for computing the + transitions. Normally, this value is + 1, but in some cases it may be + possible to get smoother results with a different value + (in particular, the single dot size 6-color inks work best + with the effective density scaled to + .75 for this purpose). A lower + density lowers the transition points, which results in + more ink being deposited. + + + + + A simple_dither_range_t is a structure containing four values: + + + + The value of the particular ink + + + + + The bit pattern used to represent the ink + + + + + Whether the ink is light (0) or dark (1), for inks + with light and dark variants + + + + + The relative amount of ink actually deposited by + this dot (not currently used for much; it can be + used for ink reduction purposes, to reduce the + amount of ink deposited on the paper). + + + + + + These things are interesting as arrays. From an array of + simple_dither_range_t's, the dither code + computes transition values that it looks up at run time to + decide what ink to print, as well as whether to print at + all. + + + + + Really confused now? Yup. You'll + probably find it easier to simply read the code. + + + + Tuning the printer + + Now, how do you use all this to tune a printer? There are a + number of ways to do it; this one is my personal favorite. + + + There's a file named test/cyan-sweep.tif. + This consists of a thin bar of cyan sweeping from white to + almost pure cyan, and from pure cyan to black. The first + thing to do is to pick the appropriate + simple_dither_range_t (or create a whole new + escp2_variable_inklist_t) and comment out all but + the darkest ink (this means you'll be using the largest dots + of dark ink). At 8.5" width (the width of a letter-size piece + of paper), the bar will be 1/8" high. Printing it on wider or + narrower paper will change the height accordingly. Print it + width-wise across a piece of photo quality paper in line art + mode using ordered or adaptive hybrid dither. Do not use + photographic mode; the colors in photographic mode vary + non-linearly depending upon the presence of the three color + components, while in line art mode the colors are much purer. + Make sure that all the color adjustments are set to defaults + (1.0). Use the highest quality version of the print mode + you're testing to reduce banding and other artifacts. This is + much easier to do with the Gimp than with Ghostscript. + + + At this stage, you want to look for four things: + + + + The black near the center of the line is solid, but not + more so than that. + + + + + The cyan immediately to the left of the black is + almost solid. + + + + + The dark cyan at the far right of the page is solid, but + not more so. You can try tuning the density so that it + isn't quite solid, then nudging up the density until it + is. + + + + + Both sweeps sweep smoothly from light to dark. In + particular, the dark half of the bar shouldn't visibly + change color; it should go smoothly from cyan to black. + + + + + + Repeat this stage until you have everything just right. Use + the positioning entry boxes in the dialog to position each bar + exactly 1/8" further down the page. Adjacent bars will be + touching. + + + The next step is to uncomment out the second darkest dot size. + If you're using variable dots, use the second largest dot size + of the dark ink rather than the largest dot size of the light + ink. This will give you two inks. + + + When you recompile the plugin, you simply need to copy the new + executable into the correct place. You do not need to exit + and restart the Gimp. + + + Print another bar adjacent to the first one. Your goal is to + match the bar using a single dot size as closely as possible. + You'll find that the dark region of the bar shouldn't change + to any great degree, but the light half probably will. If the + lighter part of the light half is too dark, you need to + increase the value of the smaller dot; if it's too light, you + need to decrease the value. The reasoning is that if the + value is too low, the ink isn't being given enough credit for + its contribution to the darkness of the ink, and vice versa. + Repeat until you have a good match. Make sure you let the ink + dry fully, which will take a few minutes. Wet ink will look + too dark. Don't look at the paper too closely; hold it at a + distance. The extra graininess of the largest dot size will + probably make it look lighter than it should; if you hold it + far enough away so that you can't see the dots, you'll get a + more accurate picture of what's going on. + + + After you have what looks like a good match, print another bar + using only the largest dot size (or dark ink, for single dot + size 6-color printers). You want to ensure that the bars + touching each other look identical, or as close as possible to + it; your eye won't give you a good reading if the bars are + separated from each other. You'll probably have to repeat the + procedure. + + + The next step is to comment out all but the largest and + third-largest dot size, and repeat the procedure. When they + match, use all three dot sizes of dark ink. Again, the goal + is to match the single dot size. + + + You'll probably find the match is imperfect. Now you have to + figure out what region isn't right, which takes some + experimentation. Even small adjustments can make a noticeable + difference in what you see. At this stage, it's very + important to hold the page far enough from your eye; when you + use all three dot sizes, the texture will be much more even, + which sometimes makes it look darker and sometimes lighter. + + + After this is calibrated, it's time to calibrate the light ink + against the dark ink. To do this, comment out all but the + large dot version of the two inks, and repeat the procedure. + This is trickier, because the hues of the inks might not be + quite identical. Look at the dark half of the bar as well as + the light half to see that the hue really doesn't change as + you sweep from cyan to black. Sometimes it's easier to judge + that way. You may find that it looks blotchy, in which case + you should switch from ordered dither to adaptive hybrid. + + + After you have the light and dark inks calibrated against each + other, it's time to add everything back in. Usually you don't + want to use the largest dot size of light ink. These dots + will be much larger than the small dots of dark ink, but + they'll still be lighter. This will cause problems when + printing mixed colors, since you'll be depositing more ink on + lighter regions of the page, and you'll probably get strange + color casts that you can't get rid of in neutral tones. I + normally use only the smallest one or two dot sizes of light + ink. + + + After you've tweaked everything, print the color bar with + saturation set to zero. This will print neutral tones using + color inks. Your goal here is to look for neutral tonality. + If you're using a 6-color printer and get a yellow cast, it + means that the values for your light inks are too high + (remember, that means they're getting too much credit, so + you're not depositing enough cyan and magenta ink, and the + yellow dominates). If you get a bluish or bluish-purple cast, + your light inks are too low (you're not giving them enough + credit, so too much cyan and magenta is deposited, which + overwhelms the yellow). Make sure you do this on very white, + very high grade inkjet paper that's designed for + 1440×720 DPI or higher; otherwise the ink will spread on + contact and you'll get values that aren't really true for high + grade paper. You can, of course, calibrate for low grade + paper if that's what you're going to use, but that shouldn't + be put into the distribution. + + + You can also fully desaturate this bar inside the Gimp and + print it as monochrome (don't print the cyan as monochrome; + the driver does funny things with luminance), for comparison. + You'll find it very hard to get rid of all color casts. + + + There are other ways of tuning printers, but this one works + pretty well for me. + + + + Canon inkjet printers + + Basically, a new Canon printer can be added to + print-canon.c in a similar way as + described above for the epson inkjet printers. The main + differences are noted here. + + + In general, Canon printers have more “built-in + intelligence“ than Epson printers which results in the + fact that the driver only has to tell the printing conditions + like resolutions, dot sizes, etc. to the printer and + afterwards transfer the raster data line by line for each + color used. + + + canon_cap_t is a C struct defined as follows: + + + typedef struct canon_caps { +int model; /* model number as used in printers.xml */ +int max_width; /* maximum printable paper size */ +int max_height; +int base_res; /* base resolution - shall be 150 or 180 */ +int max_xdpi; /* maximum horizontal resolution */ +int max_ydpi; /* maximum vertical resolution */ +int max_quality; +int border_left; /* left margin, points */ +int border_right; /* right margin, points */ +int border_top; /* absolute top margin, points */ +int border_bottom; /* absolute bottom margin, points */ +int inks; /* installable cartridges (CANON_INK_*) */ +int slots; /* available paperslots */ +int features; /* special bjl settings */ +canon_dot_size_t dot_sizes; /* Vector of dot sizes for resolutions */ +canon_densities_t densities; /* List of densities for each printer */ +canon_variable_inklist_t *inxs; /* Choices of inks for this printer */ +} canon_cap_t; + + + Since there are Canon printers which print in resolutions of + 2n × 150 DPI (e.g. 300, 600, + 1200) and others which support resolutions of + 2n × 180 DPI (e.g. 360, 720, + 1440), there's a base resolution (150 or 180, respectively) + given in the canon_cap_t. The structs + canon_dot_size_t, canon_densities_t + and canon_variable_inklist_t refer to resolutions + being multiples of the base resolution. + + + For the Canon driver, the struct canon_dot_size_t + holds values for a model's capabilities at a given resolution, + or -1 if the resolution is not supported. + 0 if it can be used and + 1 if the resolution can be used for + variable dot size printing. + + + In canon_densities_t the base densities for each + resolution can be specified like for an epson printer. The + same holds true for canon_variable_inklist_t. + See the descriptions above to learn about how to adjust your + model's output to yield nice results. + + + There's a slight difference though in the way the Canon driver + and the escp2 driver define their variable inklists: In the + Canon driver, you need to define an inklist like this: + + + static const canon_variable_inklist_t canon_ink_myinks[] = +{ +{ + 1,4, /* 1bit/pixel, 4 colors */ + &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, + &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, +}, +{ + 3,4, /* 3bit/pixel, 4 colors */ + &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, + &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, +}, +}; + + + where the &ci_CMYK_1 and + &ci_CMYK_3 entries are references to a + previously defined const of type + canon_variable_inkset_t. + + + + \ No newline at end of file diff --git a/doc/developer/problems.xml b/doc/developer/problems.xml new file mode 100644 index 0000000..d60a83a --- /dev/null +++ b/doc/developer/problems.xml @@ -0,0 +1,22 @@ + + Reporting Bugs + + If you find a bug in Gutenprint or have any suggestions for + modification or improvement, please send electronic mail to the + Gutenprint bug reporting address, + gimp-print-devel@lists.sourceforge.net. Please + include the version number, which you can find at the bottom of + each manual page. Also include in your message the output that + the program produced and the output you expected, if applicable, + otherwise the best description of the problem that you can + provide. + + + If you have other questions, comments or suggestions about + Gutenprint, contact the developers via electronic mail to the + Gutenprint mailing list + gimp-print-devel@lists.sourceforge.net. They + will try to help you out, although they may not have time to fix + your problems. + + \ No newline at end of file diff --git a/doc/developer/reference-html/a2122.html b/doc/developer/reference-html/a2122.html new file mode 100644 index 0000000..df22a8b --- /dev/null +++ b/doc/developer/reference-html/a2122.html @@ -0,0 +1,220 @@ + +GNU General Public License
    The Developer's Guide to Gutenprint
    PrevNext

    Appendix A. GNU General Public License

    A.1. Preamble

    The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General + Public License is intended to guarantee your freedom to share + and change free software - to make sure the software is free for + all its users. This General Public License applies to most of + the Free Software Foundation's software and to any other program + whose authors commit to using it. (Some other Free Software + Foundation software is covered by the GNU Library General Public + License instead.) You can apply it to your programs, too. +

    When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure + that you have the freedom to distribute copies of free software + (and charge for this service if you wish), that you receive + source code or can get it if you want it, that you can change + the software or use pieces of it in new free programs; and that + you know you can do these things. +

    To protect your rights, we need to make restrictions that forbid + anyone to deny you these rights or to ask you to surrender the + rights. These restrictions translate to certain responsibilities + for you if you distribute copies of the software, or if you + modify it. +

    For example, if you distribute copies of such a program, whether + gratis or for a fee, you must give the recipients all the rights + that you have. You must make sure that they, too, receive or can + get the source code. And you must show them these terms so they + know their rights. +

    We protect your rights with two steps: + +

    1. copyright the software, and +

    2. offer you this license which gives you legal permission to + copy, distribute and/or modify the software. +

    +

    Also, for each author's protection and ours, we want to make + certain that everyone understands that there is no warranty for + this free software. If the software is modified by someone else + and passed on, we want its recipients to know that what they + have is not the original, so that any problems introduced by + others will not reflect on the original authors' reputations. +

    Finally, any free program is threatened constantly by software + patents. We wish to avoid the danger that redistributors of a + free program will individually obtain patent licenses, in effect + making the program proprietary. To prevent this, we have made it + clear that any patent must be licensed for everyone's free use + or not licensed at all. +

    The precise terms and conditions for copying, distribution and + modification follow. +


    PrevHomeNext
    Dithering TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    \ No newline at end of file diff --git a/doc/developer/reference-html/c1717.html b/doc/developer/reference-html/c1717.html new file mode 100644 index 0000000..8e09502 --- /dev/null +++ b/doc/developer/reference-html/c1717.html @@ -0,0 +1,278 @@ + +Weaving for inkjet printers
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 6. Weaving for inkjet printers

    6.1. Introduction

    The Epson Stylus Color/Photo printers don't have memory to print + using all of the nozzles in the print head. For example, the + Stylus Photo 700/EX has 32 nozzles. At 720 dpi, with an 8" wide + image, a single line requires ((8 × 720 × 6) / 8) + bytes, or 4320 bytes (because the Stylus Photo printers have 6 + ink colors). To use 32 nozzles per color would require 138240 + bytes. It's actually worse than that, though, because the + nozzles are spaced 8 rows apart. Therefore, in order to store + enough data to permit sending the page as a simple raster, the + printer would require enough memory to store 256 rows, or + 1105920 bytes. Considering that the Photo EX can print 11" + wide, we're looking at more like 1.5 MB. In fact, these + printers are capable of 1440 dpi horizontal resolution. This + would require 3 MB. The printers actually have 64K-256K. +

    With the newer (740/750 and later) printers it's even worse, + since these printers support multiple dot sizes; of course, the + even newer 2880×720 printers don't help either. +

    Older Epson printers had a mode called + MicroWeave. In this mode, the + host fed the printer individual rows of dots, and the printer + bundled them up and sent them to the print head in the correct + order to achieve high quality. This MicroWeave mode still works + in new printers, but in some cases the implementation is very + minimal: the printer uses exactly one nozzle of each color (the + first one). This makes printing extremely slow (more than 30 + minutes for one 8.5×11" page), although the quality is + extremely high with no visible banding whatsoever. It's not + good for the print head, though, since no ink is flowing through + the other nozzles. This leads to drying of ink and possible + permanent damage to the print head. +

    By the way, although the Epson manual says that microweave mode + should be used at 720 dpi, 360 dpi continues to work in much the + same way. At 360 dpi, data is fed to the printer one row at a + time on all Epson printers. The pattern that the printer uses + to print is very prone to banding. However, 360 dpi is + inherently a low quality mode; if you're using it, presumably + you don't much care about quality. It is possible to do + microweave at 360 DPI, with significantly improved quality. +

    Except for the Stylus Pro printers (5000, 5500, 7000, 7500, + 9000, 9500, and when it's released the 10000), which can do + microweave at any resolution, printers from roughly the Stylus + Color 600 and later do not have the capability to do MicroWeave + correctly in many cases (some printers can do MicroWeave + correctly at 720 DPI). Instead, the host must arrange the + output in the order that it will be sent to the print head. + This is a very complex process; the jets in the print head are + spaced more than one row (1/720") apart, so we can't simply send + consecutive rows of dots to the printer. Instead, we have to + pass e. g. the first, ninth, 17th, 25th... rows in order for + them to print in the correct position on the paper. This + interleaving process is called "soft" weaving. +

    This decision was probably made to save money on memory in the + printer. It certainly makes the driver code far more + complicated than it would be if the printer could arrange the + output. Is that a bad thing? Usually this takes far less CPU + time than the dithering process, and it does allow us more + control over the printing process, e.g. to reduce banding. + Conceivably, we could even use this ability to map out bad jets. +

    Interestingly, apparently the Windows (and presumably Macintosh) + drivers for most or all Epson printers still list a + “microweave” mode. Experiments have demonstrated + that this does not in fact use the “microweave” mode + of the printer. Possibly it does nothing, or it uses a + different weave pattern from what the + “non-microweave” mode does. This is unnecessarily + confusing, at least for people who write drivers who try to + explain them to people who don't. +

    What makes this interesting is that there are many different + ways of of accomplishing this goal. The naive way would be to + divide the image up into groups of 256 rows (for a printer with + 32 jets and a separation of 8 rows), and print all the mod8=0 + rows in the first pass, mod8=1 rows in the second, and so forth. + The problem with this approach is that the individual ink jets + are not perfectly uniform; some emit slightly bigger or smaller + drops than others. Since each group of 8 adjacent rows is + printed with the same nozzle, that means that there will be + distinct streaks of lighter and darker bands within the image (8 + rows is 1/90", which is visible; 1/720" is not). Possibly worse + is that these patterns will repeat every 256 rows. This creates + banding patterns that are about 1/3" wide. +

    So we have to do something to break up this patterning. +

    Epson do not publish the weaving algorithms that they use in + their bundled drivers. Indeed, their developer web site + (http://www.ercipd.com/isv/edr_docs.htm) does not even describe + how to do this weaving at all; it says that the only way to + achieve 720 dpi is to use MicroWeave. It does note (correctly) + that 1440 dpi horizontal can only be achieved by the driver + (i. e. in software). The manual actually makes it fairly clear + how to do this (it requires two passes with horizontal head + movement between passes), and it is presumably possible to do + this with MicroWeave. +

    The information about how to do this is apparently available + under non-disclosure agreement (NDA). It's actually easy enough + to reverse engineer what's inside a print file with a simple + Perl script, which is supplied with the Gutenprint distribution + as tests/parse-escp2. In any event, we weren't particularly + interested in the weaving patterns Epson used. There are many + factors that go into choosing a good weaving pattern; we're + learning them as we go along. Issues such as drying time + (giving the ink a few seconds more or less to dry can have + highly visible effects) affect the quality of the output. +

    The Uniprint GhostScript driver has been able to do weaving for + a long time. It uses patterns that must be specified for each + choice of resolution and printer. We preferred an algorithmic + approach that computes a weave pattern for any given choice of + inputs. This obviously requires extensive testing; we developed + a test suite specifically for this purpose. +


    PrevHomeNext
    Appropriate Remote Commands Weaving algorithms
    \ No newline at end of file diff --git a/doc/developer/reference-html/c194.html b/doc/developer/reference-html/c194.html new file mode 100644 index 0000000..5ed6bd7 --- /dev/null +++ b/doc/developer/reference-html/c194.html @@ -0,0 +1,167 @@ + +Reporting Bugs
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 3. Reporting Bugs

    If you find a bug in Gutenprint or have any suggestions for + modification or improvement, please send electronic mail to the + Gutenprint bug reporting address, + <gimp-print-devel@lists.sourceforge.net>. Please + include the version number, which you can find at the bottom of + each manual page. Also include in your message the output that + the program produced and the output you expected, if applicable, + otherwise the best description of the problem that you can + provide. +

    If you have other questions, comments or suggestions about + Gutenprint, contact the developers via electronic mail to the + Gutenprint mailing list + <gimp-print-devel@lists.sourceforge.net>. They + will try to help you out, although they may not have time to fix + your problems. +


    PrevHomeNext
    Integrating libgutenprint Adding a new printer
    \ No newline at end of file diff --git a/doc/developer/reference-html/c1968.html b/doc/developer/reference-html/c1968.html new file mode 100644 index 0000000..e03ce26 --- /dev/null +++ b/doc/developer/reference-html/c1968.html @@ -0,0 +1,953 @@ + +Dithering
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 7. Dithering

    The dithering code in + src/main/print-dither.c attempts to + reproduce various shades of gray (or all colors) from only a few + different inks (black, cyan, magenta, yellow, and sometimes + light cyan and light magenta). The dots can't vary in darkness + or size (except for certain special printers), and so we need to + lay down a certain fraction of dots to represent each distinct + level. +

    This sounds straightforward; in practice, it isn't. Completely + random distribution of dots (simple probabilistic dithering) + would create grainy clumps and light spots. The smoothest + pattern results from an equidistant spacing of dots. + Approximating this requires sophisticated algorithms. We have + two dithering algorithms, an ordered dither algorithm that uses + a grid (matrix) to decide whether to print, and a modified + Floyd-Steinberg error diffusion algorithm that uses a grid in a + slightly different way. +

    We currently have three dithering functions: +

    dither_fastblack

    This produces pure black or white from a pre-dithered + input. This is used for two purposes: for printing pure + black and white very quickly (e.g. text), and for printing + pre-screened monochrome output that was rasterized + externally. +

    dither_black

    This produces black from grayscale input. The new + dither_black can produce either a single or multiple + levels of black, for printers supporting variable dot + size. +

    dither_cmyk

    This produces 3, 4, 5, 6, or 7 color output (CMY, CMYK, + CcMmYK, CcMmYy, CcMmYyK, or any variants). The new + routine can handle single or multiple levels of each + color. +

    There is a choice of dithering algorithms. Four of them are + based on a basic error diffusion, with a few tweaks of my own. + The other one is ‘ordered’. However, they all share + the basic operation in common. First, the algorithm picks what + kind of dot (if there are multiple dot sizes and/or tones that + may be picked) is the candidate to be printed. This decision is + made based on the darkness at the point being dithered. Then, + it decides whether the dot will be printed at all. What this is + based on depends upon which algorithm family we use. This is + all described in more detail below. +

    Ordered dithering works by comparing the value at a given point + with the value of a tiled matrix. If the value at the point is + greater than the value in the matrix, the dot is printed. The + matrix should consist of a set of evenly spaced points between 0 + and the upper limit. The choice of matrix is very important for + print quality. A good dither matrix will emphasize high + frequency components, which distributes dots evenly with a + minimum of clumping. The matrices used here are all simple + matrices that are expanded recursively to create larger matrices + with the same kind of even point distribution. This is + described below. +

    Note that it is important to use different matrices for the two + sub-operations, because otherwise the choice about whether to + print and the choice of dot size will be correlated. The usual + result is that the print is either too dark or too light, but + there can be other problems. +

    Ordered dithering works quite well on single dot size, four + color printers. It has not been well tested on four color, + variable dot size printers. It should be avoided on six color + printers. +

    Error diffusion works by taking the output error at a given + pixel and “diffusing” it into surrounding pixels. + Output error is the difference between the amount of ink output + and the input level at each pixel. For simple printers, with + one or four ink colors and only one dot size, the amount of ink + output is either 65536 (i. e. full output) or 0 (no output). + The difference between this and the input level is the error. + Normal error diffusion adds part of this error to the adjoining + pixels in the next column and the next row (the algorithm simply + scans each row in turn, never backing up). The error adds up + until it reaches a threshold (half of the full output level, or + 32768), at which point a dot is output, the output is subtracted + from the current value, and the (now negative) error is diffused + similarly. +

    Error diffusion works quite well in general, but it tends to + generate artifacts which usually appear as worm-like lines or + areas of anomalous density. I have devised some ways, as + described below, of ameliorating these artifacts. +

    There are two sub-classes of error diffusion that we use here, + ‘random’ and ‘hybrid’. One of the + techniques that we use to ameliorate the artifacts is to use a + fuzzy threshold rather than the hard threshold of half of the + output level. Random error diffusion uses a pseudo-random + number to perturb the threshold, while hybrid error diffusion + uses a matrix. Hybrid error diffusion worked very poorly in + 3.1.3, and I couldn't figure out why until I found a bug. It + now works very well. +

    There is one additional variant (on both sub-classes), called + ‘adaptive hybrid’ and ‘adaptive random’. + The adaptive variant takes advantage of the fact that the + patterns that ordered dithering create are less visible at very + low densities, while the artifacts created by error diffusion + are more objectionable at low densities. At low densities, + therefore, it uses ordered dithering; at higher densities it + uses error diffusion. +

    Handling multiple output levels makes life a bit more + complicated. In principle, it shouldn't be much harder: simply + figure out what the ratio between the available output levels is + and have multiple thresholds. In practice, getting these right + involves a lot of trial and error. The other thing that's + important is to maximize the number of dots that have some ink. + This will reduce the amount of speckling. More on this later. +

    The next question: how do we handle black when printing in + color? Black ink is much darker than colored inks. It's + possible to produce black by adding some mixture of cyan, + magenta, and yellow—in principle. In practice, the black + really isn't very black, and different inks and different papers + will produce different color casts. However, by using CMY to + produce gray, we can output a lot more dots! This makes for a + much smoother image. What's more, one cyan, one magenta, and + one yellow dot produce less darkness than one black dot, so + we're outputting that many more dots. Better yet, with 6 or 7 + color printers, we have to output even more light ink dots. So + Epson Stylus Photo printers can produce really smooth grays---if + we do everything right. The right idea is to use CMY at lower + black levels, and gradually mix in black as the overall amount + of ink increases, so the black dots don't really become visible + within the ink mass. +

    Variable dot sizes are handled by dividing the range between 0 + and 65536 into segments. Each segment can either represent a + range in which all of one kind of ink (color and/or dot size) is + used, with varying amounts of ink, or a transition region + between inks, in which equal numbers of dots are printed but the + amount of each ink will be adjusted throughout the range. Each + range is represented by four numbers: +

    • Bottom of the range. +

    • Top of the range. +

    • Value of the lighter ink. +

    • Value of the darker ink. +

    In addition, the bit patterns and which type of ink are also + represented, but they don't affect the actual algorithm. +

    As mentioned above, the basic algorithm is the same whether we + use ordered dither or error diffusion. We perform the following + steps on each color of each pixel: +

    1. Compute the value of the particular color we're printing. + This isn't usually the pure CMY value; it's adjusted to + improve saturation and to limit the use of black in light + toned regions (to avoid speckling). +

    2. Find the range containing this value. +

    3. Compute where this value lies within the range. We scale + the endpoints between 0 and 65536 for this purpose. So for + example, if the bottom of the range is 10,000 and the top of + the range is 20,000, and the value is 12,500, we're 1/4 of + the way between the bottom and the top of the range, so our + scale point is 16384. +

    4. Compute the “virtual value”. The virtual value + is the distance between the value of the lighter and the + value of the darker ink. So if the value of the light ink + is 32768 and the dark ink is 65536, we compute a virtual + value scaled appropriately between these two values, which + is 40960 in this case. +

    5. Using either error diffusion or ordered dither, the standard + threshold is 1/2 of the value (20480 in this case). Using + ordered dither, we want to compute a value between 0 and + 40960 that we will compare the input value against to decide + whether to print. Using pure error diffusion, we would + compare the accumulated error against 20480 to decide + whether to print. In practice, we use the same matrix + method to decide whether to print. The correct amount of + ink will be printed this way, but we minimize the squiggly + lines characteristic of error diffusion by dithering the + threshold in this fashion. A future enhancement will allow + us to control the amount of dithering applied to the + threshold. +

    The matrices were generated by Thomas Tonino + <ttonino@bio.vu.nl> with an algorithm of his + devising. The algorithm is designed to maximize the spacing + between dots at any given density by searching the matrix for + holes and placing a dot in the largest available hole. It + requires careful selection of initial points to achieve good + results, and is very time consuming. For best results, a + different matrix must be used for modes with 2:1 aspect ratio + (e.g. 1440×720) than for 1:1 (e. g. 720×720). It is + essential with any of these matrices that every point be used. + Skipping points generates low-frequency noise. +

    It's essential to use different matrices for deciding whether to + print and for deciding what color (dark or light) to print. + This should be obvious; the decision about whether to print at + all should be as independent as possible from the decision about + what color to print, because any bias will result in excess + light or dark ink being printed, shifting the tonal balance. We + actually use the same matrices, but we shift them vertically and + horizontally. Assuming that the matrices are not + self-correlated, this will yield good results. +

    The ranges are computed from a list of ink values (between 0 and + 1 for each possible combination of dot size and ink tone, where + the value represents the darkness of the ink) and the desired + maximum density of the ink. This is done in dither_set_ranges, + and needs more documentation. +

    I stated earlier that I've tweaked the basic error diffusion + algorithm. Here's what I've done to improve it: +

    • We use a variable threshold to decide when to print, as + discussed above. This does two things for us: it reduces + the slightly squiggly diagonal lines that are the mark of + error diffusion; and it allows us to lay down some ink even + in very light areas near the edge of the image. The + squiggly lines that error diffusion algorithms tend to + generate are caused by the gradual accumulation of error. + This error is partially added horizontally and partially + vertically. The horizontal accumulation results in a dot + eventually being printed. The vertical accumulation results + in a dot getting laid down in roughly the same horizontal + position in the next row. The diagonal squigglies result + from the error being added to pixels one forward and one + below the current pixel; these lines slope from the top + right to the bottom left of the image. +

      Error diffusion also results in pale areas being completely + white near the top left of the image (the origin of the + printing coordinates). This is because enough error has to + accumulate for anything at all to get printed. In very pale + areas it takes quite a long time to build up anything + printable at all; this results in the bare spots. +

      Randomizing the threshold somewhat breaks up the diagonals + to some degree by randomizing the exact location that the + accumulated output crosses the threshold. It reduces the + false white areas by allowing some dots to be printed even + when the accumulated output level is very low. It doesn't + result in excess ink because the full output level is still + subtracted and diffused. +

      Excessive randomization leads to blobs at high densities. + Therefore, as the density increases, the degree of + randomization decreases. +

    • Alternating scan direction between rows (first row is + scanned left to right, second is scanned right to left, and + so on). This also helps break up white areas, and it also + seems to break up squigglies a bit. Furthermore, it + eliminates directional biases in the horizontal direction. + This isn't necessary for ordered dither, but it doesn't hurt + either. +

    • Diffusing the error into more pixels. Instead of diffusing + the entire error into (X+1, Y) and (X, Y+1), we diffuse it + into (X+1, Y), (X+K, Y+1), (X, Y+1), (X-K, Y+1) where K + depends upon the output level (it never exceeds about 10 + dots, and is greater at higher output levels). This really + reduces squigglies and graininess. The amount of this + spread can be controlled; for line art, it should be less + than for photographs (of course, line art doesn't usually + contain much light color, but the error + value can be small in places!) In addition to requiring + more computation, a wide ink spread results in patterning at + high dot densities (note that the dot density can be high + even in fairly pale regions if multiple dot sizes are in + use). +

    • Don't lay down any colored ink if we're laying down black + ink. There's no point; the colored ink won't show. We + still pretend that we did for purposes of error diffusion + (otherwise excessive error will build up, and will take a + long time to clear, resulting in heavy bleeding of ink into + surrounding areas, which is very ugly indeed), but we don't + bother wasting the ink. How well this will do with variable + dot size remains to be seen. +

    • Oversampling. This is how to print 1440×720 with Epson + Stylus printers. Printing full density at 1440×720 will + result in excess ink being laid down. The trick is to print + only every other dot. We still compute the error as though we + printed every dot. It turns out that randomizing which dots + are printed results in very speckled output. This can be + taken too far; oversampling at 1440×1440 or + 1440×2880 virtual resolution results in other problems. + However, at present 1440×1440 (which is more accurately + called "1440×720 enhanced", as the Epson printers cannot + print 1440 rows per inch) does quite well, although it's slow. +

    What about multiple output levels? For 6 and 7 color printers, + simply using different threshold levels has a problem: the pale + inks have trouble being seen when a lot of darker ink is being + printed. So rather than just using the output level of the + particular color to decide which ink to print, we look at the + total density (sum of all output levels). If the density's high + enough, we prefer to use the dark ink. Speckling is less + visible when there's a lot of ink, anyway. I haven't yet + figured out what to do for multiple levels of one color. +

    You'll note that I haven't quoted a single source on color or + printing theory. I simply did all of this empirically. +

    There are various other tricks to reduce speckling. One that + I've seen is to reduce the amount of ink printed in regions + where one color (particularly cyan, which is perceived as the + darkest) is very pale. This does reduce speckling all right, + but it also results in strange tonal curves and weird (to my + eye) colors. +

    Before any dither routine is used, + init_dither must be called. This takes + three arguments: the input width (number of pixels in the + input), the output width (number of pixels in the output), and a + stp_vars_t structure containing the parameters for + the print job. +

    init_dither returns a pointer to an opaque + object representing the dither. This object is passed as the first + argument to all of the dither-related routines. +

    After a page is fully dithered, free_dither + must be called to free the dither object and perform any + cleanup. In the future, this may do more (such as flush + output). This arrangement permits using these routines with + programs that create multiple output pages, such as GhostScript. +

    The dithering routines themselves have a number of control knobs + that control internal aspects of the dithering process. These + knobs are accessible via a number of functions that can be + called after init_dither. +

    • dither_set_density takes a double + between 0 and 1 representing the desired ink density for + printing solid colors. This is used in a number of places + in the dithering routine to make decisions. +

    • dither_set_black_density takes a double + between 0 and 1 representing the desired ink density for + printing black ink in color printing. This is used to + balance black against color ink. By default, this is equal + to the density set by + dither_set_density. By setting it + higher, more black ink will be printed. For example, if the + base density is .4 and the black density is .8, twice as + much black ink will be printed as would otherwise be called + for. +

      This is not used when printing in monochrome. When printing + monochrome, the base density + (dither_set_density) should be adjusted + appropriately. +

    • dither_set_ink_budget takes an unsigned + number representing the most ink that may be deposited at a + given point. This number is arbitrary; the limit is + computed by summing the size of each ink dot, which is + supplied as a parameter in + dither_set_X_ranges. By default, there + is no limit. +

    • dither_set_black_lower takes a double + that should be between 0 and 1 that represents the lowest + density level at which black ink will start to mix in with + colored ink to generate grays. The lower this is, the less + density is required to use black ink. Setting this too low + will result in speckling from black dots, particularly on 6 + and 7 color printers. Setting this too high will make it + hard to get satisfactory black or may result in sharp + transition between blended colors and black. Default: + 0.0468. +

      It is important to note that since the density scale is + never linear (and since this value is adjusted via other + things happening during the dithering process) that this + does not mean that 95% gray will use any black ink. At this + setting, there will be no black ink used until about 50% + gray. +

      This only applies to color mode. +

      This value should be set lower for printers capable of + variable dot size, since more dots can be laid down close to + each other. +

    • dither_set_black_upper takes a double + that should be between 0 and 1 that represents the highest + density level at which colored inks will be mixed to create + gray. Setting this too low will result in speckly dark + grays because there is not enough ink to fill all the holes, + or sharp transition between blended colors and black if it + is too close to the value of + dither_set_black_upper Setting this too + high will result in poor black and dark tone quality. + Default: 0.5. This results in 10% and darker grays being + printed with essentially all black. +

      This only applies to color mode. +

    • dither_set_black_levels takes three + doubles that represent the amount of cyan, magenta, and + yellow respectively that are blended to create gray. The + defaults are 1.0 for each, which is probably too low for + most printers. These values are adjusted to create a good + gray balance. Setting these too low will result in pale + light and midtone grays, with a sharp transition to darker + tones as black mixes in. Setting them too high will result + in overly dark grays and use of too much ink, possibly + creating bleed-through. +

      This only applies to color mode. +

    • dither_set_randomizers takes four + integer values representing the degree of randomness used + for cyan, magenta, yellow, and black. This is used to allow + some printing to take place in pale areas. Zero is the most + random; greater than 8 or so gives very little randomness at + all. Defaults are 0 for cyan, magenta, and yellow, and 4 + for black. Setting the value for black too low will result + in black speckling in pale areas. Setting values too high + will result in pale areas getting no ink at all. +

      This currently only applies to single dot size in color and + black. It should be extended to operate in variable dot + size mode, although actually applying it correctly will be + tricky. +

    • dither_set_ink_darkness takes three + doubles representing the contribution to perceived darkness + of cyan, magenta, and yellow. This is used to help decide + when to switch between light and dark inks in 6 and 7 color + printers (with light cyan, light magenta, and possibly light + yellow). Setting these too low will result in too much + light ink being laid down, creating flat spots in the + darkness curves and bleed-through. Setting them too high + will result in dark ink being used in pale areas, creating + speckle. The defaults are .4 for cyan, .3 for magenta, and + .2 for yellow. Dark cyan will show against yellow much more + than dark magenta will show against cyan, since the cyan + appears much darker than the yellow. +

    • dither_set_light_inks takes three + doubles between 0 and 1 representing the ratio in darkness + between the light and dark versions of the inks. Setting + these too low will result in too much dark ink being used in + pale areas, creating speckling, while setting them too high + will result in very smooth texture but too much use of light + ink, resulting in flat spots in the density curves and ink + bleed-through. There are no defaults. Any light ink + specified as zero indicates that there is no light ink for + that color. +

      This only applies to 6 and 7 color printers in single dot + size color mode, and only to those inks which have light + versions (usually cyan and magenta). +

    • dither_set_ink_spread takes a small + integer representing the amount of ink spread in the dither. + Larger numbers mean less spread. Larger values are + appropriate for line art and solid tones; they will yield + sharper transitions but more dither artifacts. Smaller + values are more appropriate for photos. They will reduce + resolution and sharpness but reduce dither artifacts up to a + point. A value of 16 or higher implies minimum ink spread + at any resolution no matter what the overdensity. A value + of 14 is typical for photos on single dot size, 6 color + printers. For 4 color printers, subtract 1 (more spread; + the dots are farther apart). For variable dot size + printers, add 1 (more small dots are printed; less spread is + desirable). +

    • dither_set_adaptive_divisor takes a + float representing the transition point between error + diffusion and ordered dither if adaptive dithering is used. + The float is a fraction of the printing density. For + example, if you wish the transition to be at 1/4 of the + maximum density (which works well on simple 4-color + printers), you would pass .25 here. With six colors and/or + with multiple dot sizes, the values should be set lower. +

    • dither_set_transition takes a float + representing the exponent of the transition curve between + light and dark inks/dot sizes. A value less than 1 (typical + when using error diffusion) mixes in less dark ink/small + dots at lower ends of the range, to reduce speckling. When + using ordered dithering, this must be set to 1. +

    • dither_set_X_ranges_simple + (X = c, + m, y or + k) describes the ink choices available + for each color. This is useful in typical cases where a + four color printer with variable dot sizes is in use. It is + passed an array of doubles between (0, 1] representing the + relative darkness of each dot size. The dot sizes are + assigned bit patterns (and ink quantities, see + dither_set_ink_budget above) from 1 to + the number of levels. This also requires a density, which + is the desired density for this color. This density need + not equal the density specified in + dither_set_density. Setting it lower + will tend to print more dark ink (because the curves are + calculated for this color assuming a lower density than is + actually supplied). +

    • dither_set_X_ranges + (X = c, + m, y or + k) describes in a more general way the + ink choices available for each color. For each possible ink + choice, a bit pattern, dot size, value (i. e. relative + darkness), and whether the ink is the dark or light variant + ink is specified. +


    PrevHomeNext
    Weaving algorithms GNU General Public License
    \ No newline at end of file diff --git a/doc/developer/reference-html/c200.html b/doc/developer/reference-html/c200.html new file mode 100644 index 0000000..cd26eae --- /dev/null +++ b/doc/developer/reference-html/c200.html @@ -0,0 +1,396 @@ + +Adding a new printer
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 4. Adding a new printer

    This chapter covers adding a new ESCP/2, PCL, or Canon printer. + Writing a new driver module is not covered. +

    The three steps to adding a printer are: +

    1. Add an entry to printers.xml. +

    2. Add the appropriate code and data to the appropriate + driver module. +

    3. Tune the printer. +

    +

    Printer information is stored in two places: in + printers.xml (which contains the list of + printer models available to the the upper-level application), + and in the appropriate driver file + (print-escp2.c, + print-pcl.c, or + print-canon.c). +

    4.1. printers.xml

    printers.xml is an XML file that contains + very simple printer definitions. A schema may be used to + validate the XML (src/main/gutenprint.xsd). + This is an example definition: +

    <printer name="EPSON Stylus Color 1500" driver="escp2-1500">
    +<color value="true"/>
    +<model value="2"/>
    +<gamma value="0.597"/>
    +<density value="1.0"/>
    +</printer>

    There are other tags that may be present. The only ones that + are mandatory are <printer>, + <color> and + <model>. The other optional parameters + (<gamma> and + <density> in this case) can be used to + adjust control settings. This is probably not the right place + for them; the printer drivers themselves should contain this + information. There's probably no good reason for anything but + gamma and density to be in here. Gamma refers to the printer's + gamma factor; density is the desired base ink density for the + printer. The Epson driver contains the density information for + each printer at each resolution internally. An even better + driver would adjust density and possibly even gamma for paper + type. All the more reason not to have that information here. +

    If you really are curious about what tags are permitted, please + see the schema. These are the definitions of the tags that do + matter: +

    printdef XML elements

    <family>

    This defines what driver module this printer uses. The + attribute name is the name of the + family driver to associate the printers with, for example + escp2, pcl, + canon, ps or + raw. This tag may only contain + <printer> elements. +

    <printer>

    This starts the definition of a printer. It must contain + the attributes name and + driver. name should + be is the full name of the printer, and must be human + readable. driver should consist of + alphanumerics and hyphens, and be fairly short. + name is what will appear in the + user-visible listing of printers, and may be translated + into the user's language, while driver + is what is actually used to key into the list of printers. + It is legal to have multiple printers with the same driver + name. +

    <color>

    This tag may not contain any content, but the + value attribute may be set to + true or false. This + indicates that this printer is capable of color, or is not + capable of color respectively. +

    <model>

    This defines a model number. This tag may not contain any + content, but the value attribute may be + set to a positive integer. This is passed into the + driver, which may do whatever it cares to with + it—index into a table, compute on, or whatever. + This need not be unique. +


    PrevHomeNext
    Reporting Bugs The driver file
    \ No newline at end of file diff --git a/doc/developer/reference-html/c39.html b/doc/developer/reference-html/c39.html new file mode 100644 index 0000000..3021576 --- /dev/null +++ b/doc/developer/reference-html/c39.html @@ -0,0 +1,182 @@ + +Copying, modification and redistribution
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 1. Copying, modification and redistribution

    Gutenprint is free; this means that everyone + is free to use it and free to redistribute it on a free basis. + Gutenprint is not in the public domain; it is copyrighted and + there are restrictions on its distribution, but these restrictions + are designed to permit everything that a good cooperating citizen + would want to do. What is not allowed is to try to prevent others + from further sharing any version of Gutenprint that they might get + from you. +

    Specifically, we want to make sure that you have the right to give + away copies of Gutenprint, that you receive source code or else + can get it if you want it, that you can change Gutenprint or use + pieces of it in new free programs, and that you know you can do + these things. +

    To make sure that everyone has such rights, we have to forbid you + to deprive anyone else of these rights. For example, if you + distribute copies of Gutenprint, you must give the recipients all + the rights that you have. You must make sure that they, too, + receive or can get the source code, and you must tell them their + rights. +

    Also, for our own protection, we must make certain that everyone + finds out that there is no warranty for Gutenprint. If Gutenprint + is modified by someone else and passed on, we want their + recipients to know that what they have is not what we distributed, + so that any problems introduced by others will no reflect on our + reputation. +

    Gutenprint is licensed under the terms of the GNU General Public + License (GPL), reproduced in Appendix A. +


    PrevHomeNext
    Preface Using libgutenprint
    \ No newline at end of file diff --git a/doc/developer/reference-html/c464.html b/doc/developer/reference-html/c464.html new file mode 100644 index 0000000..cb3bede --- /dev/null +++ b/doc/developer/reference-html/c464.html @@ -0,0 +1,1702 @@ + +ESC/P2
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 5. ESC/P2

    This is a description of the ESC/P2 raster commands used by the + Gutenprint printer driver, which is a subset of the complete + command set. The full documents are found on http://www.ercipd.com/isv/edr_docs.htm. + Note that these are not always correct, and + are certainly not complete. +

    All ESCP/2 raster commands begin with the ESC + character (0x1b), followed by either one or two command characters + and arguments where applicable. Older commands generally have one + command character. Newer commands usually have a + ‘(’ (left parenthesis) followed by + a command character and a byte count for the arguments that + follow. The byte count is a 16-bit (2 byte) binary integer, in + little endian order. +

    All arguments listed here are of the form + name[bytes] where [bytes] is + the number of bytes that comprise the argument. The arguments + themselves are usually one, two, or four byte integers, always + little endian (the least significant bits come first). Presumably + this is to match Intel processors. +

    In some cases, the same command sequence identifies different + versions of the same command, depending upon the number of bytes + of arguments. +

    5.1. Standard commands

    ESC/P2 Commands

    ESC @

    Reset the printer. Discards any output, ejects the + existing page, returns all settings to their default. + Always use this before printing a page. +

    ESC (G BC=1 + ON1

    Turn on graphics mode. ON should be + 1 (turn on graphics mode). +

    ESC (U BC=1 + UNIT1

    Set basic unit of measurement used by printer. This is + expressed in multiples of 1/3600". At 720 DPI, + UNIT is 5; at + 360 DPI, UNIT is + 10. +

    ESC (U BC=5 + PAGEUNITS1 VUNIT1 + HUNIT1 + BASEUNIT2

    Set basic units of measurement used by the printer. + PAGEUNIT is the unit of page + measurement (for commands that set page dimensions and + the like). VUNIT is the unit of + vertical measurement (for vertical movement commands). + HUNIT is the unit of horizontal + movement (for horizontal positioning commands). All of + these units are expressed in + BASEUNIT, which is in reciprocal + inches. Typically, BASEUNIT is + 1440. In 720 DPI mode, + PAGEUNIT, VUNIT, + and HUNIT are all + 2; in 1440×720 DPI mode, + PAGEUNIT and VUNIT + are normally set to 2; + HUNIT is set to + 1. +

    ESC (K BC=2 + ZERO1 + GRAYMODE1

    Set color or grayscale mode, on printers supporting an + explicit grayscale mode. These printers can be + identified because they are advertised as having more + black nozzles than nozzles of individual colors. + Setting grayscale mode allows use of these extra nozzles + for faster printing. GRAYMODE should + be 0 or 2 for + color, 1 for grayscale. + ZERO should always be + 0. +

    ESC (i BC=1 + MICROWEAVE1

    If MICROWEAVE is + 1, use microweave mode. On older + printers, this is used to turn on microweave; on newer + printers, it prints one row at a time. All printers + support this mode. It should only be used at 720 (or + 1440×720) DPI. The Epson Stylus Pro series + indicates additional modes: +

    2

    “Full-overlap” +

    3

    “Four-pass” +

    4

    “Full-overlap 2” +

    Any of these commands can be used with the high four + bits set to either 3 or + 0. +

    ESC U + DIRECTION1

    If DIRECTION is + 1, print unidirectionally; if + 0, print bidirectionally. +

    ESC (s BC=1 + SPEED1

    On some older printers, this controls the print head + speed. SPEED of + 2 is 10 inches/sec; + SPEED of 0 or 1 + is 20. +

    ESC (e BC=2 + ZERO1 + DOTSIZE1

    Choose print dotsize. DOTSIZE can + take on various values, depending upon the printer. + Almost all printers support 0 and + 2. Variable dot size printers + allow a value of 16. Other than the + value of 16, this appears to be + ignored at resolutions of 720 DPI and above. +

    ESC (C BC=2 + PAGELENGTH2, ESC (C BC=4 + PAGELENGTH4

    Set the length of the page in “pageunits” + (see ESC (U above). The second form + of the command allows setting of longer page lengths on + new printers (these happen to be the printers that + support variable dot size). +

    ESC (c BC=4 + TOP2 + LENGTH2, ESC (c BC=8 + TOP4 + LENGTH4

    Set the vertical page margins of the page in + “pageunits” (see ESC (U + above). The margins are specified as the top of the + page and the length of the page. The second form of the + command allows setting of longer page lengths on new + printers (these happen to be the printers that support + variable dot size). +

    ESC (S BC=8 + WIDTH4 + LENGTH4

    Set the width and length of the printed page region in + “pageunits” (see ESC (U + above). +

    ESC (v BC=2 + ADVANCE2, ESC (v BC=4 + ADVANCE4

    Feed vertically ADVANCE + “vertical units” (see ESC + (U above) from the current print head + position. +

    ESC (V BC=2 + ADVANCE2, ESC (V BC=4 + ADVANCE4

    Feed vertically ADVANCE + “vertical units” (see ESC + (U above) from the top margin. +

    ESC ($ BC=4 + OFFSET4

    Set horizontal position to OFFSET + from the left margin. This command operates on printers + of the 740 class and newer (all printers with variable + dot size). +

    ESC $ + OFFSET2

    Set horizontal position to OFFSET + from the left margin. This command operates on printers + of the 740 class and newer (all printers with variable + dot size). +

    ESC (\ BC=4 + UNITS2 + OFFSET2

    Set horizontal position to OFFSET + from the previous print head position, measured in + UNITS. UNITS is + measured in inverse inches, and should be set to 1440 in + all cases. This operates on all 1440 dpi printers that + do not support variable dot size. +

    ESC (/ BC=4 + OFFSET4

    Set horizontal position to OFFSET + from the previous print head position, measured in + “horizontal units” (see ESC + (U above). This operates on all variable dot + size printers. +

    ESC \ + OFFSET2

    Set horizontal position to OFFSET + from the previous print head position, measured in basic + unit of measurement (see ESC (U + above). This is used on all 720 dpi printers, and can + also be used on 1440 dpi printers in lower resolutions + to save a few bytes. Note that + OFFSET may be negative. The range of + values for this command is between + -16384 and + 16383. +

    ESC r + COLOR1, ESC (r BC=2 + DENSITY1 + COLOR1

    Set the ink color. The first form is used on four-color + printers; the second on six-color printers. + DENSITY is 0 for + dark inks, 1 for light. + COLOR is +

    Table 5-1. Colors

    COLORColor name
    0Black
    1Magenta
    2Cyan
    4Yellow

    This command is not used on variable dot size printers + in softweave mode. +

    ESC . COMPRESS1 + VSEP1 HSEP1 + LINES1 WIDTH2 + data...

    Print data. COMPRESS signifies the + compression mode. +

    Table 5-2. Compression modes

    COMPRESSCompression mode
    0No compression
    1 TIFF compression (incorrectly documented as + “run length encoded”) +
    2 TIFF compression with a special command set. +

    VSEP depends upon resolution and + printer type. At 360 DPI, it is always + 10. At 720 DPI, it is normally + 55. On the ESC 600, it is + 40 (8 × 5}). On some other + printers, it varies. +

    HSEP1 is 10 at + 360 DPI and 5 at 720 or 1440 DPI + (1440 DPI cannot be printed in one pass; it is printed + in two passes, with the dots separated in each pass by + 1/720"). +

    LINES is the number of lines to be + printed. It should be 1 in + microweave and 360 DPI. At 720 DPI softweave, it should + be the number of lines to be actually printed. +

    WIDTH is the number of pixels to be + printed in each row. Following this command, a carriage + return (13 decimal, + 0A hex) should be output to return + the print head position to the left margin. +

    The basic data format is a string of bytes, with data + from left to right on the page. Within each byte, the + highest bit is first. +

    The TIFF compression is implemented as one count byte + followed by one or more data bytes. There are two + cases: +

    1. If the count byte is 128 or + less, it is followed by ([count] + 1) data bytes. + So if the count byte is 0, it + is followed by 1 data byte; if it is + 128, it is followed by 129 data + bytes. +

    2. If the count byte is greater than 128, it is + followed by one byte. This byte is repeated (257 - + [count]) times. So if [count] is 129, the next byte + is treated as though it were repeated 128 times; if + [count] is 255, it is treated as though it were + repeated twice. +

    ESC i COLOR1 + COMPRESS1 BITS1 + BYTES2 LINES2 + data...

    Print data in the newer printers (that support variable + dot size), and Stylus Pro models. + COLOR is the color. +

    Table 5-3. Extended Colors

    COLORColor name
    0Black
    1Magenta
    2Cyan
    4Yellow
    5Alternate black (Stylus C70/C80)
    6Alternate black (Stylus C70/C80)
    16Gray (“light black”)
    17Light magenta
    18Light cyan

    COMPRESS signifies the compression + mode: +

    Table 5-4. Compression modes

    COMPRESSCompression mode
    0No compression
    1 TIFF compression (incorrectly documented as + “run length encoded”) +
    2 TIFF compression with a special command set, or + “run length encoding 2” on some + printers. +

    BITS is the number of bits per pixel. +

    BYTES is the number of bytes wide for + each row (ceiling(BITS × width_of_row, 8)}). Note + that this is different from the ESC . + command above. +

    LINES is the number of lines to be + printed. This command is the only way to get variable + dot size printing. In variable dot mode, the size of + the dots increases as the value (1, + 2, or 3) + increases. +

    ESC (D BC=4 + BASE2 VERTICAL1 + HORIZONTAL1

    Set printer horizontal and vertical spacing. It only + applies to variable dot size printers in softweave mode + (and possibly other high end printers). +

    BASE is the base unit for this + command; it must be 14400. +

    VERTICAL is the distance in these + units between printed rows; it should be + ((separation_in_nozzles × BASE + ÷ 720). +

    HORIZONTAL is the horizontal + separation between dots in a row. Depending upon the + printer, this should be either (14400 ÷ 720) or + (14400 ÷ 360). The Stylus Pro 9000 manual + suggests that the settings should match the chosen + resolution, but that is apparently not the case (or not + always the case) on other printers. +

    ESC (R BC=8 00 R E M O T E + 1

    Enters “remote mode”. This is a special, + undocumented command set that is used to set up various + printer options, such as paper feed tray, and perform + utility functions such as head cleaning and alignment. + It does not appear that anything here is actually + required to make the printer print. Our best + understanding of what is in a remote command sequence is + described in a separate section below. +

    ESC 01 @EJL [sp] ID\r\n

    Return the printer ID. This is considered a remote mode + command, although the syntax is that of a conventional + command. This returns the following information: +

    @EJL ID\r
    +MFG:EPSON;
    +CMD:ESCPL2,BDC;
    +MDL:[printer model];
    +CLS:PRINTER;
    +DES:EPSON [printer model];
    +\f

    After all data has been sent, a form feed byte should be + sent. +

    All newer Epson printers (STC 440, STP 750) require the + following command to be sent at least once to enable printing + at all. This command specifically takes the printer out of the + 1284.4 packet mode communication protocol and enables normal + data transfer. Sending it multiple times is is not harmful, so + it is normally sent at the beginning of each job: +

    ESC 01@EJL[space]1284.4[newline]@EJL[space][space][space][space]
    +[space][newline]ESC@

    The proper sequence of initialization commands is: +

    magic command
    +ESC @
    +remote mode if needed
    +ESC (G
    +ESC (U
    +ESC (K (if appropriate)
    +ESC (i
    +ESC U (if needed)
    +ESC (s (if appropriate)
    +ESC (e
    +ESC (C
    +ESC (c
    +ESC (S
    +ESC (D (if needed)
    +ESC (V (optional -- this can be accomplished with ESC (v)

    For printing, the proper sequence is: +

    ESC (v

    and repeat for each color: +

    ESC ($ or ESC (\ or ESC \
    +ESC (r or ESC r (if needed---not used with "ESC i" and not needed if the color
    +has not changed from the previous printed line)
    +ESC . or ESC i  ...data... [return] (0A hex)

    To terminate a page: +

    [formfeed] (0C hex)
    +ESC @


    PrevHomeNext
    The driver file Remote Mode Commands
    \ No newline at end of file diff --git a/doc/developer/reference-html/c48.html b/doc/developer/reference-html/c48.html new file mode 100644 index 0000000..3e4767b --- /dev/null +++ b/doc/developer/reference-html/c48.html @@ -0,0 +1,213 @@ + +Using libgutenprint
    The Developer's Guide to Gutenprint
    PrevNext

    Chapter 2. Using libgutenprint

    This chapter describes how to write programs that use + libgutenprint. +

    2.1. Code prerequisites

    To use libgutenprint with a program, several steps must be taken: +

    • Include the master libgutenprint header: +

      <gimp-print/gimp-print.h>

      +

    • Call stp_init. +

    • Link with the libgutenprint library. +

    The following is a short example program. It does not do + anything useful, but it does everything required to link with + libgutenprint and call other functions from libgutenprint. +

    #include <gimp-print/gimp-print.h>
    +int
    +main (int argc, char *argv[])
    +{
    +  stp_init();
    +  return 0;
    +}
    +      


    PrevHomeNext
    Copying, modification and redistribution Linking with libgutenprint
    \ No newline at end of file diff --git a/doc/developer/reference-html/f14.html b/doc/developer/reference-html/f14.html new file mode 100644 index 0000000..203891e --- /dev/null +++ b/doc/developer/reference-html/f14.html @@ -0,0 +1,229 @@ + +Preface
    The Developer's Guide to Gutenprint
    PrevNext

    Preface

    Gutenprint is the print facility of the GNU Image Manipulation + Program (GIMP). It is in addition a suite of drivers that may be + used with common UNIX spooling systems using Ghostscript or CUPS. + These drivers provide printing quality for Linux, MacOS X and UNIX + on a par with proprietary vendor-supplied drivers in many cases, + and can be used for many of the most demanding printing tasks, + especially for high quality printing on modern inkjets, including + “photographic quality” models which offer very high + resolutions and several inks. The core of Gutenprint is a shared + library (libgutenprint) which may be used by any program that + wishes to produce high-quality printed output. +

    This manual documents the use of the + Gutenprint package, focusing mainly on + the libgutenprint library that is the core of + Gutenprint. Parts of the manual which + describe the use of libgutenprint are aimed primarily at + programmers, and do assume that the reader is familiar with C + programming, and using standard programming tools on GNU or UNIX + systems. +

    For the end-user, there is a separate manual documenting + programs that come with Gutenprint, including the + GIMP print plugin, + and the CUPS and + Ghostscript drivers. +

    To learn how to use libgutenprint in your own programs is to look + at the source of the testpattern, located in + src/testpattern, as well as + the source of the other programs that use libgutenprint, and + libgutenprint itself. Most importantly, please consult the API + reference and libgutenprint headers. +

    The manual is split into several parts for the programmer. It + starts with a simple usage example of how to link a program with + libgutenprint, then how to integrate this into package build + scripts, using make, + autoconf and automake. The + appendices cover the detail of the inner workings of some parts of + libgutenprint. +

    The following sections detail the dither and weave algorithms used + in libgutenprint, the ESC/P2 printer control language used in Epson + printers and how to add support for a new printer to libgutenprint. +

    We hope you enjoy using Gutenprint!
    +—The Gutenprint project
    +    

    +


    PrevHomeNext
    The Developer's Guide to Gutenprint Copying, modification and redistribution
    \ No newline at end of file diff --git a/doc/developer/reference-html/index.html b/doc/developer/reference-html/index.html new file mode 100644 index 0000000..0c894e7 --- /dev/null +++ b/doc/developer/reference-html/index.html @@ -0,0 +1,481 @@ + +The Developer's Guide to Gutenprint

    The Developer's Guide to Gutenprint

    The Gutenprint Project +

    Copyright © 2003 The Gutenprint Project

    This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. +

    This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +

    You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. +


    Table of Contents
    Preface
    1. Copying, modification and redistribution
    2. Using libgutenprint
    2.1. Code prerequisites
    2.2. Linking with libgutenprint
    2.3. Integrating libgutenprint
    2.3.1. pkg-config
    2.3.2. make
    2.3.3. autoconf
    2.3.4. automake
    3. Reporting Bugs
    4. Adding a new printer
    4.1. printers.xml
    4.2. The driver file
    4.2.1. Epson inkjet printers
    4.2.2. Tuning the printer
    4.2.3. Canon inkjet printers
    5. ESC/P2
    5.1. Standard commands
    5.2. Remote Mode Commands
    5.3. Appropriate Remote Commands
    6. Weaving for inkjet printers
    6.1. Introduction
    6.2. Weaving algorithms
    6.2.1. Simple weaving algorithms
    6.2.2. Perfect weaving
    6.2.3. Weaving collisions
    6.2.4. What makes a “perfect” weave?
    6.2.5. Oversampling
    7. Dithering
    A. GNU General Public License
    A.1. Preamble
    A.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    A.2.1. Section 0
    A.2.2. Section 1
    A.2.3. Section 2
    A.2.4. Section 3
    A.2.5. Section 4
    A.2.6. Section 5
    A.2.7. Section 6
    A.2.8. Section 7
    A.2.9. Section 8
    A.2.10. Section 9
    A.2.11. Section 10
    A.2.12. NO WARRANTY
    A.2.13. Section 12
    List of Tables
    5-1. Colors
    5-2. Compression modes
    5-3. Extended Colors
    5-4. Compression modes
    5-5. Head cleaning parameters
    5-6. Media types
    5-7. Printer status codes
    5-8. Printer error codes
    5-9. Printer additional ink codes
    5-10. Printer warning codes
    5-11. Paper cutting codes
    5-12. Paper cutting units

      Next
      Preface
    \ No newline at end of file diff --git a/doc/developer/reference-html/x1669.html b/doc/developer/reference-html/x1669.html new file mode 100644 index 0000000..1080dee --- /dev/null +++ b/doc/developer/reference-html/x1669.html @@ -0,0 +1,348 @@ + +Appropriate Remote Commands
    The Developer's Guide to Gutenprint
    PrevChapter 5. ESC/P2Next

    5.3. Appropriate Remote Commands

    All of the remote commands described above are wrapped up with + the usual boilerplate. The files always start with + 00 00 00 and the “magic” + command described above, then two ESC @s to + reset the printer. The remote command sequences come next; if + they print anything that is usually followed by a + FF (0C hex) character to + feed the page, then the file ends with another two + ESC @s to get back to the ground state. +

    An alignment sequence goes like this: +

    1. Host uses DT to print an alignment + sheet. +

    2. User eyeballs the sheet to see which is the best aligned + pattern. +

    3. Host sends a DA command indicating + which pattern the user chose. +

    4. If the user said “realign”, meaning he isn't + done yet, go to step 1. +

    5. We are done: host sends a SV command + and exits. +

    The sequence used (by the STC 3000, at least) to print from + the roll feed is (with byte count omitted): +

    PM 00 00
    +SN 00 00 00
    +EX 00 00 00 00 05 01
    +ST 00 01
    +SM 00 02

    The sequence used by the STP 870 to print on plain paper is +

    PM 00 00
    +IR 00 03
    +SN 00 00 01
    +SN 00 01 00
    +SN 00 02 01
    +EX 00 00 00 00 05 00
    +FP 00 00 00

    and the job finishes with +

    IR 00 02
    +LD

    For different paper type settings on the STP 870, the + arguments to SN vary. The arguments to the + first and third SN commands are as outlined + in the description of the SN command above; + the arguments to the second (“platen gap”) are + 00 01 01 for thick papers (“matte + paper—heavyweight”, “photo paper” and + “premium glossy photo paper”) and 00 01 + 00 for all others. +

    For roll-mode printing, the STP 870's sequence changes as + follows. IR's arguments become 00 + 01 in the header, and 00 00 after + the job, and EX's last argument changes + from 00 to 01. +

    For zero-margin printing on the STP 870, the arguments to + FP become 00 0xb0 0xff. + This moves the origin about 5.5mm to the left, to a point one + tenth of an inch to the left of the left-hand edge of the + paper, allowing printing right up to (and beyond) the edge of + the paper. Some printers (at least the STP 870) include white + absorbent pads at the left margin position and other positions + (89mm and 100mm on the STP 870) to soak up ink which misses + the edge of the paper. Printing off the edge of paper of a + width not aligned with a pad could result in making a mess of + the inside of the printer and ink getting on the reverse of + the paper. +


    PrevHomeNext
    Remote Mode CommandsUpWeaving for inkjet printers
    \ No newline at end of file diff --git a/doc/developer/reference-html/x1734.html b/doc/developer/reference-html/x1734.html new file mode 100644 index 0000000..8c52bfd --- /dev/null +++ b/doc/developer/reference-html/x1734.html @@ -0,0 +1,1922 @@ + +Weaving algorithms
    The Developer's Guide to Gutenprint
    PrevChapter 6. Weaving for inkjet printersNext

    6.2. Weaving algorithms

    I considered a few algorithms to perform the weave. The first + one I devised let me use only (jets − + distance_between_jets + 1) nozzles, or 25. This is OK in + principle, but it's slower than using all nozzles. By playing + around with it some more, I came up with an algorithm that lets + me use all of the nozzles, except near the top and bottom of the + page. +

    This still produces some banding, though. Even better quality + can be achieved by using multiple nozzles on the same line. How + do we do this? In 1440×720 mode, we're printing two + output lines at the same vertical position. However, if we want + four passes, we have to effectively print each line twice. + Actually doing this would increase the density, so what we do is + print half the dots on each pass. This produces near-perfect + output, and it's far faster than using (pseudo) + “MicroWeave”. +

    Yet another complication is how to get near the top and bottom + of the page. This algorithm lets us print to within one head + width of the top of the page, and a bit more than one head width + from the bottom. That leaves a lot of blank space. Doing the + weave properly outside of this region is increasingly difficult + as we get closer to the edge of the paper; in the interior + region, any nozzle can print any line, but near the top and + bottom edges, only some nozzles can print. We originally + handled this by using the naive way mentioned above near the + borders, and switching over to the high quality method in the + interior. Unfortunately, this meant that the quality is quite + visibly degraded near the top and bottom of the page. We have + since devised better algorithms that allow printing to the + extreme top and bottom of the region that can physically be + printed, with only minimal loss of quality. +

    Epson does not advertise that the printers can print at the very + top of the page, although in practice most of them can. The + quality is degraded to some degree, and we have observed that in + some cases not all of the dots get printed. Epson may have + decided that the degradation in quality is sufficient that + printing in that region should not be allowed. That is a valid + decision, although we have taken another approach. +

    6.2.1. Simple weaving algorithms

    The initial problem is to calculate the starting position of + each pass; the row number of the printer's top jet when + printing that pass. Since we assume the paper cannot be + reverse-fed, the print head must, for each pass, start + either further down the page than the previous pass or at + the same position. Each pass's start point is therefore at + a non-negative offset from the previous pass's start point. +

    Once we have a formula for the starting row of each pass, we + then turn that “inside out” to get a formula for + the pass number containing each row. +

    First, let's define how our printer works. We measure + vertical position on the paper in “rows”; the + resolution with which the printer can position the paper + vertically. The print head contains J ink jets, which are + spaced S rows apart. +

    Consider a very simple case: we want to print a page as + quickly as possible, and we mostly don't care how sparse the + printing is, so long as it's fairly even. +

    It's pretty obvious how to do this. We make one pass with + the print head, printing J lines of data, each line S rows + after the previous one. We then advance the paper by S + × J rows and print the next row. For example, if J = + 7 and S = 4, this method can be illustrated like this: +

    pass number
    +| row number------->
    +| |         111111111122222222223333333333444444444455555555556666666666
    +| 0123456789012345678901234567890123456789012345678901234567890123456789
    +0 *---*---*---*---*---*---*
    +1                             *---*---*---*---*---*---*
    +2 \-----------------------/                               *---*---*---*---*---*-
    +        7 jets              \---/
    +                            4 rows offset from one jet to the next
    +\---------------------------/
    +   7*4=28 rows offset from one pass to the next

    In these examples, the vertical axis can be thought of as the + time axis, with the pass number shown at the left margin, + while the row number runs horizontally. A + * shows each row printed by a + pass, and a row of - is used + to link together the rows printed by one pass of the print + head. The first pass is numbered + 0 and starts at row 0. Each + subsequent pass p starts at row p × S × J. Each + pass prints J lines, each line being S rows after the previous + one. (For ease of viewing this file on a standard terminal, + I'm clipping the examples at column 80.) +

    This method covers the whole page with lines printed evenly + S rows apart. However, we want to fill in all the other + rows with printing to get a full-density page (we're + ignoring oversampling at this stage). Where we have + previously printed a single pass, we'll now print a + “pass block”: we print extra passes to fill in + the empty rows. A naive implementation might look like + this: +

    0 *---*---*---*---*---*---*
    +1  *---*---*---*---*---*---*
    +2   *---*---*---*---*---*---*
    +3    *---*---*---*---*---*---*
    +4                             *---*---*---*---*---*---*
    +5                              *---*---*---*---*---*---*
    +6                               *---*---*---*---*---*---*
    +7                                *---*---*---*---*---*---*
    +8                                                         *---*---*---*---*---*-
    +9                                                          *---*---*---*---*---*
    +10                                                          *---*---*---*---*---
    +11                                                           *---*---*---*---*--

    (Now you can see why this process is called + “weaving”!) +

    6.2.2. Perfect weaving

    This simple weave pattern prints every row, but will give + conspicuous banding patterns for the reasons discussed + above. +

    Let's start improving this for our simple case. We can + reduce banding by making sure that any given jet never + prints a row too close to another row printed by the same + jet. This means we want to space the rows printed by a + given jet evenly down the page. In turn, this implies we + want to advance the paper by as nearly an equal amount after + each pass as possible. +

    Each pass block prints S × J lines in S passes. The + first line printed in each pass block is S × J rows + lower on the page than the first line printed in the + previous pass block. Therefore, if we advance the paper by + J rows between each pass, we can print the right number of + passes in each block and advance the paper perfectly evenly. +

    Here's what this “perfect” weave looks like: +

                        start of full weave
    +                    |
    +0 *---*---*---*---*---*---*
    +1        *---*---*---*---*---*---*
    +2               *---*---*---*---*---*---*
    +3                      *---*---*---*---*---*---*
    +4                             *---*---*---*---*---*---*
    +5                                    *---*---*---*---*---*---*
    +6                                           *---*---*---*---*---*---*
    +7                                                  *---*---*---*---*---*---*
    +8                                                         *---*---*---*---*---*-
    +9                                                                *---*---*---*--
    +10                                                                      *---*---
    +11                                                                             *

    You'll notice that, for the first few rows, this weave is + too sparse. It is not until the row marked “start of + full weave” that every subsequent row is printed. We + can calculate this start position as follows: +

    start = (S − 1) × (J − 1)

    For the moment, we will ignore this problem with the weave. + We'll consider later how to fill in the missing rows. +

    Let's look at a few more examples of perfect weaves: +

    S = 2, J = 7, start = (2−1) × (7−1) = 6: +

            starting row of full weave
    +        |
    +0 *-*-*-*-*-*-*
    +1        *-*-*-*-*-*-*
    +2               *-*-*-*-*-*-*
    +3                      *-*-*-*-*-*-*
    +4                             *-*-*-*-*-*-*
    +5                                    *-*-*-*-*-*-*
    +6                                           *-*-*-*-*-*-*
    +7                                                  *-*-*-*-*-*-*

    S = 7, J = 2, start = 6: +

            start
    +        |
    +0 *------*
    +1   *------*
    +2     *------*
    +3       *------*
    +4         *------*
    +5           *------*
    +6             *------*
    +7               *------*
    +8                 *------*
    +9                   *------*

    S = 4, J = 13, start = 36: +

                                          start
    +                                      |
    +0 *---*---*---*---*---*---*---*---*---*---*---*---*
    +1              *---*---*---*---*---*---*---*---*---*---*---*---*
    +2                           *---*---*---*---*---*---*---*---*---*---*---*---*
    +3                                        *---*---*---*---*---*---*---*---*---*--
    +4                                                     *---*---*---*---*---*---*-
    +5                                                                  *---*---*---*

    S = 13, J = 4, start = 36: +

                                          start
    +                                      |
    +0 *------------*------------*------------*
    +1     *------------*------------*------------*
    +2         *------------*------------*------------*
    +3             *------------*------------*------------*
    +4                 *------------*------------*------------*
    +5                     *------------*------------*------------*
    +6                         *------------*------------*------------*
    +7                             *------------*------------*------------*
    +8                                 *------------*------------*------------*
    +9                                     *------------*------------*------------*
    +10                                        *------------*------------*-----------
    +11                                            *------------*------------*-------
    +12                                                *------------*------------*---
    +13                                                    *------------*------------
    +14                                                        *------------*--------
    +15                                                            *------------*----
    +16                                                                *------------*
    +17                                                                    *---------
    +18                                                                        *-----
    +19                                                                            *-

    S = 8, J = 5, start = 28: +

                                  start
    +                              |
    +0 *-------*-------*-------*-------*
    +1      *-------*-------*-------*-------*
    +2           *-------*-------*-------*-------*
    +3                *-------*-------*-------*-------*
    +4                     *-------*-------*-------*-------*
    +5                          *-------*-------*-------*-------*
    +6                               *-------*-------*-------*-------*
    +7                                    *-------*-------*-------*-------*
    +8                                         *-------*-------*-------*-------*
    +9                                              *-------*-------*-------*-------*
    +10                                                  *-------*-------*-------*---
    +11                                                       *-------*-------*------
    +12                                                            *-------*-------*-
    +13                                                                 *-------*----
    +14                                                                      *-------
    +15                                                                           *--

    S = 9, J = 5, start = 32: +

                                      start
    +                                  |
    +0 *--------*--------*--------*--------*
    +1      *--------*--------*--------*--------*
    +2           *--------*--------*--------*--------*
    +3                *--------*--------*--------*--------*
    +4                     *--------*--------*--------*--------*
    +5                          *--------*--------*--------*--------*
    +6                               *--------*--------*--------*--------*
    +7                                    *--------*--------*--------*--------*
    +8                                         *--------*--------*--------*--------*
    +9                                              *--------*--------*--------*-----
    +10                                                  *--------*--------*--------*
    +11                                                       *--------*--------*----
    +12                                                            *--------*--------
    +13                                                                 *--------*---
    +14                                                                      *-------
    +15                                                                           *--

    S = 6, J = 7, start = 30: +

                                    start
    +                                |
    +0 *-----*-----*-----*-----*-----*-----*
    +1        *-----*-----*-----*-----*-----*-----*
    +2               *-----*-----*-----*-----*-----*-----*
    +3                      *-----*-----*-----*-----*-----*-----*
    +4                             *-----*-----*-----*-----*-----*-----*
    +5                                    *-----*-----*-----*-----*-----*-----*
    +6                                           *-----*-----*-----*-----*-----*-----
    +7                                                  *-----*-----*-----*-----*----
    +8                                                         *-----*-----*-----*---
    +9                                                                *-----*-----*--
    +10                                                                      *-----*-
    +11                                                                             *

    6.2.3. Weaving collisions

    A perfect weave is not possible in all cases. Let's look at + another example: +

    S = 6, J = 4: +

    0 *-----*-----*-----*
    +1     *-----*-----*-----*
    +2         *-----*-----*-----*
    +3             *-----*-----*-----*
    +4             ^   *-^---*-----*-----*
    +5             |   ^ | *-^---*-----*-----*
    +              OUCH!   ^ |   ^
    +                      |     |

    Here we have a collision. Some lines printed in later + passes overprint lines printed by earlier passes. We can + see why by considering which row number is printed by a + given jet number j (numbered from 0) of a given pass, p: +

    row(p, j) = (p × J) + (j × S)

    Because J = 4 and S = 6 have a common factor of 2, jet 2 of + pass 0 prints the same row as jet 0 of pass 3: +

    row(0, 2) = (0 × 4) + (2 × 6) = 12
    +row(3, 0) = (3 × 4) + (0 × 6) = 12

    In fact, with this particular weave pattern, jets 0 and 1 of + pass p + 3 always overprint jets 2 and 3 of pass p. We'll + represent overprinting rows by a + ^ in our diagrams, and + correct rows by *: +

    S = 6, J = 4: +

    0 *-----*-----*-----*
    +1     *-----*-----*-----*
    +2         *-----*-----*-----*
    +3             ^-----^-----*-----*
    +4                 ^-----^-----*-----*
    +5                     ^-----^-----*-----*

    6.2.4. What makes a “perfect” weave?

    So what causes the perfect weave cases to be perfect, and + the other cases not to be? In all the perfect cases above, + S and J are relatively prime (i.e. their greatest common + divisor (GCD) is 1). As we mentioned above, S = 6 and J = 4 + have a common factor, which causes the overprinting. Where + S and J have a GCD of 1, they have no common factor other + than 1 and, as a result, no overprinting occurs. If S and J + are not relatively prime, their common factor will cause + overprinting. +

    We can work out the greatest common divisor of a pair of + natural numbers using Euler's algorithm: +

    1. Start with the two numbers: (e.g.) 9, 24 +

    2. Swap them if necessary so that the larger one comes + first: 24, 9 +

    3. Subtract the second number from the first: 15, 9 +

    4. Repeat until the first number becomes smaller: 6, 9 +

    5. Swap the numbers again, so the larger one comes first: + 9, 6 +

    6. Subtract again: 3, 6 +

    7. Swap: 6, 3 +

    8. Subtract: 3, 3 +

    9. And again: 0, 3 +

    10. When one of the numbers becomes 0, the other number is + the GCD of the two numbers you started with. +

    These repeated subtractions can be done with C's % + operator, so we can write this in C as follows: +

    unsigned int
    +gcd(unsigned int x, unsigned int y)
    +{
    +  if (y == 0)
    +      return x;
    +  while (x != 0) {
    +      if (y > x)
    +          swap (&x, &y);
    +      x %= y;
    +  }
    +  return y;
    +}

    gcd(S,J) will feature quite prominently in our + weaving algorithm. +

    If 0 ≤ j < J, there should only be a single pair (p, j) + for any given row number. If S and J are not relatively + prime, this assumption breaks down. (For conciseness, let G + = GCD(S,J).) +

    S = 8, J = 6, G = 2: +

    0 *-------*-------*-------*-------*-------*
    +1       *-------*-------*-------*-------*-------*
    +2             *-------*-------*-------*-------*-------*
    +3                   *-------*-------*-------*-------*-------*
    +4                         ^-------^-------^-------*-------*-------*
    +5                               ^-------^-------^-------*-------*-------*

    In this case, jets 0, 1 and 2 of pass p + 4 collide with + jets 3, 4 and 5 of pass p. +

    How can we calculate these numbers? Suppose we were to + print using fewer jets, say J / G jets. The greatest common + divisor of J / G and S is 1, enabling a perfect weave. But + to get a perfect weave, we also have to advance the paper by + a factor of G less: +

    0 *-------*-------*       -       -       -
    +1    *-------*-------*       -       -       -
    +2       *-------*-------*       -       -       -
    +3          *-------*-------*       -       -       -
    +4             *-------*-------*       -       -       -
    +5                *-------*-------*       -       -       -

    If we left the paper advance alone, we'd get a sparse weave; + only one row can be printed every G rows: +

    0 *-------*-------*       -       -       -
    +1       *-------*-------*       -       -       -
    +2             *-------*-------*       -       -       -
    +3                   *-------*-------*       -       -       -
    +4                         *-------*-------*       -       -       -
    +5                               *-------*-------*       -       -       -
    +             ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
    +            These rows need filling in.

    The rows that would have been printed by the jets we've now + omitted (shown as -) are + printed by other jets on later passes. +

    Let's analyse this. Consider how a pass p could collide + with pass 0. Pass p starts at offset p × J. Pass 0 + prints at rows which are multiples of S. If p × J is + exactly divisible by S, a collision has occurred, unless (p + ×J) ≥ J × S (which will happen when we + finish a pass block). +

    So, we want to find p and q such that p × J = q + × S and p is minimised. Then p is the number of rows + before a collision, and q is the number of jets in pass 0 + which are not involved in the collision. To do this, we + find the lowest common multiple of J and S, which is L = (J + × S) / G. L / J is the number of rows before a + collision, and L / S is the number of jets in the first pass + not involved in the collision. +

    Thus, we see that the first J / G rows printed by a given + pass are not overprinted by any later pass. However, the + rest of the rows printed by pass p are overprinted by the + first J − (J / G) jets of pass p + (S / G). We will + use C to refer to S / G, the number of rows after which a + collision occurs. +

    Another example: +

    S = 6, J = 9, G = 3, C = S / G = 2: +

    0 *-----*-----*-----*-----*-----*-----*-----*-----*
    +1          *-----*-----*-----*-----*-----*-----*-----*-----*
    +2                   ^-----^-----^-----^-----^-----^-----*-----*-----*
    +3                            ^-----^-----^-----^-----^-----^-----*-----*-----*
    +4                                     ^-----^-----^-----^-----^-----^-----*-----
    +5                                              ^-----^-----^-----^-----^-----^--
    +       ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
    +            These rows need filling in.

    In this case, the first J − (J / G) = 9 − (9 / + 3) = 6 jets of pass p + (6 / 3) = p + 2 collide with the + last 6 jets of pass p. Only one row in every G = 2 rows is + printed by this weave. +

    S = 9, J = 6, G = 3, C = 3: +

    
0 *--------*--------*--------*--------*--------*
    +1       *--------*--------*--------*--------*--------*
    +2             *--------*--------*--------*--------*--------*
    +3                   ^--------^--------^--------^--------*--------*
    +4                         ^--------^--------^--------^--------*--------*
    +5                               ^--------^--------^--------^--------*--------*

    Here, the first J - (J / G) = 6 - (6 / 3) = 4 jets of pass + p + (9 / 3) = p + 3 collide with the last 4 jets of pass + p. +

    Note that, in these overprinting cases, only rows + divisible by G are ever printed. The other rows, those + not divisible by G, are not touched by this weave. +

    We can modify our weave pattern to avoid overprinting any + rows and simultaneously fill in the missing rows. Instead + of using J alone to determine the start of each pass from + the previous pass, we adjust the starting position of some + passes. As mentioned before, we will divide the page into + pass blocks, with S passes in each block. This ensures + that the first jet of the first pass in a block prints the + row which the Jth jet of the first pass of the previous + block would have printed, if the print head had one extra + jet. +

    Looking back at an example of a perfect weave, we can + divide it into pass blocks: +

    S = 7, J = 2, G = 1: +

                  imaginary extra jet
    +                |
    +0 *------*      *      <--start of pass block 0
    +1   *------*    |
    +2     *------*  |
    +3       *------*|
    +4         *-----|*
    +5           *---|--*
    +6             *-|----*
    +                |
    +7               *------*  <--start of pass block 1
    +8                 *------*
    +9                   *------*

    We can now calculate the start of a given pass by + reference to its pass block. The first pass of pass block + b always starts at row (b × S × J). The start + row of each of the other passes in the block are + calculated using offsets from this row. +

    For the example above, there are 7 passes in each pass + block, and their offsets are 0, 2, 4, 6, 8, 10 and 12. + The next pass block is offset S × J = 14 rows from + the start of the current pass block. +

    The simplest way to modify the “perfect” weave + pattern to give a correct weave in cases where G ≠ 1 + is to simply change any offsets which would result in a + collision, until the collision disappears. Every printed + row in the weave, as we have shown it up to now, is + separated from each of its neighbouring printed rows by G + blank rows. We will add an extra offset to each colliding + pass in such a way that we push the pass onto these + otherwise blank rows. +

    We have seen that, unless G = 1, the plain weave pattern + results in each pass colliding with the pass S / G passes + before. We will now subdivide our pass block into + subblocks, each consisting of B = S / G passes. There are + therefore G subblocks in a pass block. +

    For each subblock, the passes in that subblock have a + constant offset added to them. The offset is different + for each subblock in a block. There are many ways we can + choose the offsets, but the simplest is to make the offset + equal to the subblock number (starting from 0). +

    Thus, the passes in the first subblock in each pass block + remain at the offsets we've already calculated from J. + The passes in the second subblock each have 1 added to + their offset, the passes in the third subblock have 2 + added, and so on. Thus, the offset of pass p (numbered + relative to the start of its pass block) is p × J + + floor(p / B). +

    This gives us a weave pattern looking like this: +

    S = 6, J = 9, G = 3, B = 2: +

    0 *-----*-----*-----*-----*-----*-----*-----*-----*
    +1 ^        *-----*-----*-----*-----*-----*-----*-----*-----*
    +2 |              +-> *-----*-----*-----*-----*-----*-----*-----*-----*
    +3 |              |            *-----*-----*-----*-----*-----*-----*-----*-----*
    +4 |              |                  +-> *-----*-----*-----*-----*-----*-----*---
    +5 |              |                  |            *-----*-----*-----*-----*-----*
    +6 |              |                  |               +-> *-----*-----*-----*-----
    +7 |              |                  |               |            *-----*-----*--
    +  |              |                  |             start of pass block 1
    +  |              |                  |             (offset returns to 0)
    +  |              |                  start of subblock 2 (offset 2 rows)
    +  |              start of subblock 1 (following passes offset by 1 row)
    +start of passblock 0, subblock 0 (pass start calculated as p*J)

    S = 9, J = 6, G = 3, B = 3: +

    0 *--------*--------*--------*--------*--------*
    +1       *--------*--------*--------*--------*--------*
    +2             *--------*--------*--------*--------*--------*
    +3                    *--------*--------*--------*--------*--------*
    +4                          *--------*--------*--------*--------*--------*
    +5                                *--------*--------*--------*--------*--------*
    +6                                       *--------*--------*--------*--------*---
    +7                                             *--------*--------*--------*------
    +8                                                   *--------*--------*--------*
    +9                                                       *--------*--------*-----
    +10                                                  \---/     *--------*--------
    +11                                               small offset       *--------*--
    +12                                                                         *----

    This method of choosing offsets for subblocks can result + in an occasional small offset (as shown above) between one + pass and the next, particularly when G is large compared + to J. For example: +

    S = 8, J = 4, G = 4, B = 2: +

    0 *-------*-------*-------*
    +1     *-------*-------*-------*
    +2          *-------*-------*-------*
    +3              *-------*-------*-------*
    +4                   *-------*-------*-------*
    +5                       *-------*-------*-------*
    +6                            *-------*-------*-------*
    +7                                *-------*-------*-------*
    +8                                 *-------*-------*-------*
    +9                                \/   *-------*-------*-------*
    +                            very small offset!

    We can plot the offset against the subblock number as + follows: +

    subblock number
    +| offset
    +| |
    +| 0123
    +0 *
    +1  *
    +2   *
    +3    *
    +0 *
    +1  *
    +2   *
    +3    *

    The discontinuity in this plot results in the small offset + between passes. +

    As we said at the beginning, we want the offsets from each + pass to the next to be as similar as possible. We can fix + this by calculating the offset for a given subblock b as + follows: +

    offset(b) = 2*b             , if b < ceiling(G/2)
    +          = 2*(G-b)-1       , otherwise

    We can visualise this as follows, for G = 10: +

    0123456789
    +0 *
    +1   *
    +2     *
    +3       *
    +4         *
    +5          *
    +6        *
    +7      *
    +8    *
    +9  *
    +0 *
    +1   *
    +2     *
    +3       *
    +4         *
    +5          *
    +6        *
    +7      *
    +8    *
    +9  *

    and for G = 11: +

               1
    + 01234567890
    + 0 *
    + 1   *
    + 2     *
    + 3       *
    + 4         *
    + 5           *
    + 6          *
    + 7        *
    + 8      *
    + 9    *
    +10  *
    + 0 *
    + 1   *
    + 2     *
    + 3       *
    + 4         *
    + 5           *
    + 6          *
    + 7        *
    + 8      *
    + 9    *
    +10  *

    This gives a weave looking like this: +

    S = 12, J = 6, G = 6, B = 2: +

    0 *-----------*-----------*-----------*-----------*-----------*
    +1       *-----------*-----------*-----------*-----------*-----------*
    +2               *-----------*-----------*-----------*-----------*-----------*
    +3                     *-----------*-----------*-----------*-----------*---------
    +4                             *-----------*-----------*-----------*-----------*-
    +5                                   *-----------*-----------*-----------*-------
    +6                                          *-----------*-----------*-----------*
    +7                                                *-----------*-----------*------
    +8                                                    *-----------*-----------*--
    +9                                                          *-----------*--------
    +10                                                             *-----------*----
    +11                                                                   *----------
    +12                                                                        *-----

    This method ensures that the offset between passes is + always in the range [J - 2, J + 2]. +

    (This might seem odd, but it occurs to me that a good + weave pattern might also make a good score for bell + ringers. When church bells are rung, a list of + “changes” are used. For example, if 8 bells + are being used, they will, at first, be rung in order: + 12345678. If the first change is for bells 5 and 6, the + bells will then be rung in the order 12346578. If the + second change is 1 and 2, the next notes are 21346578. + After a long list of changes, the order the bells are rung + in can become quite complex. +

    For a group of bell-ringers to change the order of the + notes, they must each either delay their bell's next ring, + hasten it, or keep it the same as the time it takes to + ring all the bells once. The length of time between each + ring of a given bell can only be changed a little each + time, though; with an ink-jet weave pattern, we want the + same to apply to the distance between passes.) +

    Finally, knowing the number of jets J and their separation + S, we can calculate the starting row of any given pass p + as follows: +

    passesperblock = S
    +passblock = floor(p / passesperblock)
    +offsetinpassblock = p - passblock * passesperblock
    +subblocksperblock = gcd(S, J)
    +passespersubblock = S / subblocksperblock
    +subpassblock = floor(offsetinpassblock / passespersubblock)
    +if subpassblock < ceiling(subblocksperblock/2)
    +  subblockoffset = 2*subpassblock
    +else
    +  subblockoffset = 2*(subblocksperblock-subpassblock)-1
    +startingrow = passblock * S * J + offsetinpassblock * J + subblockoffset

    +

    We can simplify this down to the following: +

    subblocksperblock = gcd(S, J)
    +subpassblock = floor((p % S) * subblocksperblock / S)
    +if subpassblock * 2 < subblocksperblock
    +  subblockoffset = 2*subpassblock
    +else
    +  subblockoffset = 2*(subblocksperblock-subpassblock)-1
    +startingrow = p * J + subblockoffset

    So the row number of jet j of pass p is +

    subblocksperblock = gcd(S, J)
    +
    +subblockoffset(p)
    +  = 2*subpassblock       , if subpassblock * 2 < subblocksperblock
    +  = 2*(subblocksperblock-subpassblock)-1      , otherwise
    +    where
    +    subpassblock = floor((p % S) * subblocksperblock / S)
    +
    +row(j, p) = p * J + subblockoffset(p) + j * S

    Together with the inequality 0 ≤ j < J, we can use + this definition in reverse to calculate the pass number + containing a given row, r. Working out the inverse + definition involves a little guesswork, but one possible + result is as follows. Given a row, r, which is known to + be the first row of a pass, we can calculate the pass + number as follows: +

    subblocksperblock = gcd(S, J)
    +subblockoffset = r % subblocksperblock
    +pass = (r - subblockoffset) / J

    If G = 1, we can determine the pass number with this + algorithm: +

    offset = r % J
    +pass = (r - offset) / J
    +while (offset % S != 0)
    +{
    +pass--
    +offset += J
    +}
    +jet = offset / S

    Generalising, we come up with this algorithm. Given r, S + and J: +

    G = gcd(S, J)
    +passespersubblock = S/G
    +subblockoffset = r % G
    +subpassblock = subblockoffset / 2  , if subblockoffset % 2 == 0
    +           = G - (subblockoffset+1)/2    , otherwise
    +baserow = r - subblockoffset - (subpassblock * passespersubblock * J)
    +offset = baserow % J
    +pass = (baserow - offset) / J
    +while (offset % S != 0)
    +{
    +offset += J
    +pass -= 1
    +}
    +subblockretreat = floor(pass / passespersubblock) % G
    +pass -= subblockretreat * passespersubblock
    +pass += subpassblock * passespersubblock
    +jet = (r - subblockoffset - pass * J) / S

    Let's look at some examples of imperfect but correct weave + patterns: +

    S = 6, J = 4, GCD = 2, + passesperblock = S = 6, + passespersubblock = S / G = 6 / 2 = 3: +

    0 *-----*-----*-----*
    +1     *-----*-----*-----*
    +2         *-----*-----*-----*
    +3              *-----*-----*-----*
    +4                  *-----*-----*-----*
    +5                      *-----*-----*-----*
    +6                         *-----*-----*-----*
    +7                             *-----*-----*-----*
    +8                                 *-----*-----*-----*
    +9                                      *-----*-----*-----*
    +10                                         *-----*-----*-----*
    +11                                             *-----*-----*-----*
    +12                                                *-----*-----*-----*
    +13                                                    *-----*-----*-----*
    +14                                                        *-----*-----*-----*
    +15                                                             *-----*-----*----
    +16                                                                 *-----*-----*
    +17                                                                     *-----*--
    +18                                                                        *-----
    +19                                                                            *-

    S = 8, J = 6, G = 2, + passesperblock = S = 8, + passespersubblock= S / G = 8 / 2 = 4: +

    0 *-------*-------*-------*-------*-------*
    +1       *-------*-------*-------*-------*-------*
    +2             *-------*-------*-------*-------*-------*
    +3                   *-------*-------*-------*-------*-------*
    +4                          *-------*-------*-------*-------*-------*
    +5                                *-------*-------*-------*-------*-------*
    +6                                      *-------*-------*-------*-------*-------*
    +7                                            *-------*-------*-------*-------*--
    +8                                                 *-------*-------*-------*-----
    +9                                                       *-------*-------*-------
    +10                                                            *-------*-------*-
    +11                                                                  *-------*---
    +12                                                                         *----

    S = 6, J = 12, G = 6, + passesperblock = S = 6, + passespersubblock= S / G = 6 / 6 = 1: +

    0 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*
    +1               *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*---
    +2                             *-----*-----*-----*-----*-----*-----*-----*-----*-
    +3                                          *-----*-----*-----*-----*-----*-----*
    +4                                                    *-----*-----*-----*-----*--
    +5                                                              *-----*-----*----
    +6                                                                         *-----

    We have now solved the basic weaving problem. There are + two further refinements we need to consider: oversampling, + and filling in the missing rows at the start of the weave. +

    6.2.5. Oversampling

    By oversampling, we mean printing on the same row more than + once. There are two reasons for oversampling: to increase + the horizontal resolution of the printout and to reduce + banding. +

    Oversampling to increase horizontal resolution is necessary + because, although the printer might be able to position an + ink drop to, for example, 1/1440" horizontally, it may not + be able to lay down two such drops 1/1440" apart. If it can + print two drops 1/720" apart, 2x oversampling will be + necessary to get a 1/1440" horizontal resolution. If it can + only print two drops 1/360" apart, 4x oversampling will be + necessary for a 1/1440" horizontal resolution. The printer + enforces this “drop spacing” by only accepting + raster passes with a horizontal resolution matching the + spacing with which it can print dots, so we must print + passes at different horizontal positions if we are to obtain + a higher horizontal resolution. (Another reason it does + this may be to reduce the amount of memory needed in the + printer.) +

    Oversampling can also be done to decrease the banding + apparent in an image. By splitting a row into two or more + sets of dots (“lines”) and printing each line on + the same row, but with a different nozzle for each line, we + can get a smoother print. +

    To quantify these two kinds of oversampling, we'll introduce + two new constants: H shows how many different horizontal + offsets we want to print at (the “horizontal + oversampling”) while O shows how many times we want to + print each row, over and above the number of times necessary + for horizontal oversampling (the “extra + oversampling”). +

    It is necessary for all the lines printed by a given pass to + have the same horizontal offset, but there need not be any + relation between them in terms of extra oversampling. For + the moment, however, we will treat all oversampling as + potentially requiring this alignment; all lines in one pass + must be derived from the original row data in the same way. + Thus, we'll assume O = 1 for now. +

    So, how do we do this oversampling? In fact, it can be done + easily: advance the paper by a factor of H less between each + pass. We'll define a new variable, A, to show how much we + advance the paper between passes. Previously, we'd have + defined A = J; we now let A = J / H. This also affects our + pass blocks. Printing one pass block used to involve + advancing the paper S × J rows; it now advances the + paper (S×J) / H rows. We therefore name a group of H + pass blocks a “band”. Printing one band + involves advancing the paper S×J rows, as a pass + block did before. +

    To keep our weave pattern working correctly, so that + overprinting does not occur within a pass block, we also + have to redefine G as GCD(S,A). Here's an example of an + oversampled weave pattern: +

    S = 4, J = 10, H = 2, A = J/H = 10/2 = 5, + G= GCD(4,5) = 1, + passesperblock = S = 4, + passespersubblock = S/G = 4/1 = 4: +

    0 *---*---*---*---*---*---*---*---*---*
    +1      *---*---*---*---*---*---*---*---*---*
    +2           *---*---*---*---*---*---*---*---*---*
    +3                *---*---*---*---*---*---*---*---*---*
    +4                     *---*---*---*---*---*---*---*---*---*
    +5                          *---*---*---*---*---*---*---*---*---*
    +6                               *---*---*---*---*---*---*---*---*---*
    +7                                    *---*---*---*---*---*---*---*---*---*
    +8                                         *---*---*---*---*---*---*---*---*---*
    +9                                              *---*---*---*---*---*---*---*---*
    +10                                                  *---*---*---*---*---*---*---
    +11                                                       *---*---*---*---*---*--
    +12                                                            *---*---*---*---*-
    +13                                                                 *---*---*---*
    +14                                                                      *---*---
    +15                                                                           *--

    Now we have to determine which line is printed by each jet on + each pass. If we number each line generated as we split up a + row, we can use these numbers. We'll number the lines in our + diagram by replacing the *s + with integers in the range [0…H−1]. +

    Overprinting occurs once per pass block, so we can simply + print pass block 0 with line 0, pass block 1 with line 1, + pass block 2 with line 2, etc, wrapping to 0 when we've run + out of lines: +

    0 0---0---0---0---0---0---0---0---0---0
    +1      0---0---0---0---0---0---0---0---0---0
    +2           0---0---0---0---0---0---0---0---0---0
    +3                0---0---0---0---0---0---0---0---0---0
    +4                     1---1---1---1---1---1---1---1---1---1
    +5                          1---1---1---1---1---1---1---1---1---1
    +6                               1---1---1---1---1---1---1---1---1---1
    +7                                    1---1---1---1---1---1---1---1---1---1
    +8                                         0---0---0---0---0---0---0---0---0---0
    +9                                              0---0---0---0---0---0---0---0---0
    +10                                                  0---0---0---0---0---0---0---
    +11                                                       0---0---0---0---0---0--
    +12                                                            1---1---1---1---1-
    +13                                                                 1---1---1---1
    +14                                                                      1---1---
    +15                                                                           1--

    S = 4, J = 12, H = 2, A = J/H = 12/2 = 6, + G= GCD(4,6) = 2, + passesperblock= S = 4, + passespersubblock= S/G = 4/2 = 2: +

    0 0---0---0---0---0---0---0---0---0---0---0---0
    +1       0---0---0---0---0---0---0---0---0---0---0---0
    +2              0---0---0---0---0---0---0---0---0---0---0---0
    +3                    0---0---0---0---0---0---0---0---0---0---0---0
    +4                         1---1---1---1---1---1---1---1---1---1---1---1
    +5                               1---1---1---1---1---1---1---1---1---1---1---1
    +6                                      1---1---1---1---1---1---1---1---1---1---1
    +7                                            1---1---1---1---1---1---1---1---1--
    +8                                                 0---0---0---0---0---0---0---0-
    +9                                                       0---0---0---0---0---0---
    +10                                                             0---0---0---0---0
    +11                                                                   0---0---0--
    +12                                                                        1---1-

    But what do we do if J is not an exact multiple of H? This + is a difficult problem, which I struggled with for quite a + few days before giving in and taking the easy (but less + elegant) way out. The easy solution is to round J / H down, + then add on the accumulated error at the end of each band. +

    S = 4, J = 11, H = 2, A = floor(J/H) = floor(11/2) = 5, + G = GCD(4,5) = 1, + passesperblock = S = 4, + passespersubblock = S/G = 4/1 = 4 +

    Band 0:
    +0 0---0---0---0---0---0---0---0---0---0---0
    +1      0---0---0---0---0---0---0---0---0---0---0
    +2           0---0---0---0---0---0---0---0---0---0---0
    +3                0---0---0---0---0---0---0---0---0---0---0
    +4                     1---1---1---1---1---1---1---1---1---1---1
    +5                          1---1---1---1---1---1---1---1---1---1---1
    +6                               1---1---1---1---1---1---1---1---1---1---1
    +7                                    1---1---1---1---1---1---1---1---1---1---
    +
    +Band 1:
    +8 |                                           0---0---0---0---0---0---0---0---0-
    +9  \-----------------------------------------/     0---0---0---0---0---0---0---0
    +10                   S*J rows                           0---0---0---0---0---0---
    +11                                                           0---0---0---0---0--
    +12                                                                1---1---1---1-
    +13                                                                     1---1---1
    +14                                                                          1---

    We can calculate the starting row and subpass number of a + given pass in this scheme as follows: +

    A = floor(J / H)
    +subblocksperblock = gcd(S, A)
    +subpassblock = floor((p % S) * subblocksperblock / S)
    +if subpassblock * 2 < subblocksperblock
    +  subblockoffset = 2*subpassblock
    +else
    +  subblockoffset = 2*(subblocksperblock-subpassblock)-1
    +band = floor(P / (S * H))
    +passinband = P % (S * H)
    +startingrow = band * S * J + passinband * A + subblockoffset
    +subpass = passinband / S

    So the row number of jet j of pass p is +

    A = floor(J / H)
    +subblocksperblock = gcd(S, A)
    +
    +subblockoffset(p)
    +  = 2*subpassblock       , if subpassblock * 2 < subblocksperblock
    +  = 2*(subblocksperblock-subpassblock)-1      , otherwise
    +    where
    +    subpassblock = floor((p % S) * subblocksperblock / S)
    +
    +band(p) = floor(p / (S * H))
    +passinband(p) = p % (S * H)
    +
    +row(j, p) = band(p) * S * J + passinband(p) * A + subblockoffset(p) + j * S
    +row(j, p) = p * J + subblockoffset(p) + j * S

    To be continued… +

    +


    PrevHomeNext
    Weaving for inkjet printersUpDithering
    \ No newline at end of file diff --git a/doc/developer/reference-html/x2153.html b/doc/developer/reference-html/x2153.html new file mode 100644 index 0000000..4ccc109 --- /dev/null +++ b/doc/developer/reference-html/x2153.html @@ -0,0 +1,616 @@ + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    The Developer's Guide to Gutenprint
    PrevAppendix A. GNU General Public License 

    A.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

    A.2.1. Section 0

    This License applies to any program or other work which + contains a notice placed by the copyright holder saying it may + be distributed under the terms of this General Public + License. The "Program", below, refers to any such program or + work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: + that is to say, a work containing the Program or a portion of + it, either verbatim or with modifications and/or translated + into another language. (Hereinafter, translation is included + without limitation in the term "modification".) + Each licensee is addressed as "you". +

    Activities other than copying, distribution and modification + are not covered by this License; they are outside its + scope. The act of running the Program is not restricted, and + the output from the Program is covered only if its contents + constitute a work based on the Program (independent of having + been made by running the Program). Whether that is true + depends on what the Program does. +

    A.2.2. Section 1

    You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that + you conspicuously and appropriately publish on each copy an + appropriate copyright notice and disclaimer of warranty; keep + intact all the notices that refer to this License and to the + absence of any warranty; and give any other recipients of the + Program a copy of this License along with the Program. +

    You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. +

    A.2.3. Section 2

    You may modify your copy or copies of the Program or any + portion of it, thus forming a work based on the Program, and + copy and distribute such modifications or work under the terms + of Section 1 above, provided + that you also meet all of these conditions: + +

    1. You must cause the modified files to carry prominent + notices stating that you changed the files and the date + of any change. +

    2. You must cause any work that you distribute or publish, + that in whole or in part contains or is derived from the + Program or any part thereof, to be licensed as a whole + at no charge to all third parties under the terms of + this License. +

    3. If the modified program normally reads commands + interactively when run, you must cause it, when started + running for such interactive use in the most ordinary + way, to print or display an announcement including an + appropriate copyright notice and a notice that there is + no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program + under these conditions, and telling the user how to view + a copy of this License. + +

      Exception:
       

      If the Program itself is interactive but does not + normally print such an announcement, your work based + on the Program is not required to print an + announcement.) +

      + +

    +

    These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Program, and can be reasonably considered independent and + separate works in themselves, then this License, and its + terms, do not apply to those sections when you distribute them + as separate works. But when you distribute the same sections + as part of a whole which is a work based on the Program, the + distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the + entire whole, and thus to each and every part regardless of + who wrote it. +

    Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, + the intent is to exercise the right to control the + distribution of derivative or collective works based on the + Program. +

    In addition, mere aggregation of another work not based on the + Program with the Program (or with a work based on the Program) + on a volume of a storage or distribution medium does not bring + the other work under the scope of this License. +

    A.2.4. Section 3

    You may copy and distribute the Program (or a work based on + it, under Section 2 in object + code or executable form under the terms of Sections 1 and 2 above provided that you also do + one of the following: + +

    1. Accompany it with the complete corresponding + machine-readable source code, which must be distributed + under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, +

    2. Accompany it with a written offer, valid for at least + three years, to give any third party, for a charge no + more than your cost of physically performing source + distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the + terms of Sections 1 and 2 above on a medium customarily + used for software interchange; or, +

    3. Accompany it with the information you received as to the + offer to distribute corresponding source code. (This + alternative is allowed only for noncommercial + distribution and only if you received the program in + object code or executable form with such an offer, in + accord with Subsection b above.) +

    +

    The source code for a work means the preferred form of the + work for making modifications to it. For an executable work, + complete source code means all the source code for all modules + it contains, plus any associated interface definition files, + plus the scripts used to control compilation and installation + of the executable. However, as a special exception, the source + code distributed need not include anything that is normally + distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating + system on which the executable runs, unless that component + itself accompanies the executable. +

    If distribution of executable or object code is made by + offering access to copy from a designated place, then offering + equivalent access to copy the source code from the same place + counts as distribution of the source code, even though third + parties are not compelled to copy the source along with the + object code. +

    A.2.5. Section 4

    You may not copy, modify, sublicense, or distribute the + Program except as expressly provided under this License. Any + attempt otherwise to copy, modify, sublicense or distribute + the Program is void, and will automatically terminate your + rights under this License. However, parties who have received + copies, or rights, from you under this License will not have + their licenses terminated so long as such parties remain in + full compliance. +

    A.2.6. Section 5

    You are not required to accept this License, since you have + not signed it. However, nothing else grants you permission to + modify or distribute the Program or its derivative works. + These actions are prohibited by law if you do not accept this + License. Therefore, by modifying or distributing the Program + (or any work based on the Program), you indicate your + acceptance of this License to do so, and all its terms and + conditions for copying, distributing or modifying the Program + or works based on it. +

    A.2.7. Section 6

    Each time you redistribute the Program (or any work based on + the Program), the recipient automatically receives a license + from the original licensor to copy, distribute or modify the + Program subject to these terms and conditions. You may not + impose any further restrictions on the recipients' exercise of + the rights granted herein. You are not responsible for + enforcing compliance by third parties to this License. +

    A.2.8. Section 7

    If, as a consequence of a court judgment or allegation of + patent infringement or for any other reason (not limited to + patent issues), conditions are imposed on you (whether by + court order, agreement or otherwise) that contradict the + conditions of this License, they do not excuse you from the + conditions of this License. If you cannot distribute so as to + satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may + not distribute the Program at all. For example, if a patent + license would not permit royalty-free redistribution of the + Program by all those who receive copies directly or indirectly + through you, then the only way you could satisfy both it and + this License would be to refrain entirely from distribution of + the Program. +

    If any portion of this section is held invalid or + unenforceable under any particular circumstance, the balance + of the section is intended to apply and the section as a whole + is intended to apply in other circumstances. +

    It is not the purpose of this section to induce you to + infringe any patents or other property right claims or to + contest validity of any such claims; this section has the sole + purpose of protecting the integrity of the free software + distribution system, which is implemented by public license + practices. Many people have made generous contributions to the + wide range of software distributed through that system in + reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to + distribute software through any other system and a licensee + cannot impose that choice. +

    This section is intended to make thoroughly clear what is + believed to be a consequence of the rest of this License. +

    A.2.9. Section 8

    If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted + interfaces, the original copyright holder who places the + Program under this License may add an explicit geographical + distribution limitation excluding those countries, so that + distribution is permitted only in or among countries not thus + excluded. In such case, this License incorporates the + limitation as if written in the body of this License. +

    A.2.10. Section 9

    The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such + new versions will be similar in spirit to the present version, + but may differ in detail to address new problems or concerns. +

    Each version is given a distinguishing version number. If the + Program specifies a version number of this License which + applies to it and "any later version", you have the option of + following the terms and conditions either of that version or + of any later version published by the Free Software + Foundation. If the Program does not specify a version number + of this License, you may choose any version ever published by + the Free Software Foundation. +

    A.2.11. Section 10

    If you wish to incorporate parts of the Program into other + free programs whose distribution conditions are different, + write to the author to ask for permission. For software which + is copyrighted by the Free Software Foundation, write to the + Free Software Foundation; we sometimes make exceptions for + this. Our decision will be guided by the two goals of + preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software + generally. +

    A.2.12. NO WARRANTY

    Section 11

    BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS + IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME + THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +

    A.2.13. Section 12

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO + LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES + SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM + TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. +


    PrevHome 
    GNU General Public LicenseUp 
    \ No newline at end of file diff --git a/doc/developer/reference-html/x271.html b/doc/developer/reference-html/x271.html new file mode 100644 index 0000000..9337d74 --- /dev/null +++ b/doc/developer/reference-html/x271.html @@ -0,0 +1,1230 @@ + +The driver file
    The Developer's Guide to Gutenprint
    PrevChapter 4. Adding a new printerNext

    4.2. The driver file

    Adding a new printer to a driver module + print-canon.c, + print-escp2.c, + print-lexmark.c, or + print-pcl.c or + (print-ps.c is really ad hoc) requires a + bit more planning. Each driver is somewhat different, but they + all generally have a vector of printer definitions, and the code + does some special casing based on particular printer + capabilities. The PCL and Canon drivers are quite similar; the + Canon driver was actually cribbed from the PCL driver, but it + then returned the favor. +

    The Epson driver is a little bit different. Canon and PCL + printers have some amount of intelligence; a lot of them have + specific ink options, and know about specific paper sizes and + types, and must be told the right thing. Epson printers have + somewhat less intelligence and will more or less do exactly what + the host tells it to do in a fairly regular fashion. I actually + prefer this; it isn't materially more work for the host to + compute things like exact paper sizes and such, it allows a lot + more tweaking, and it may be why Epson has been more open with + information—the communication protocol doesn't really + contain very much IP, so they have less reason to keep it + secret. +

    The sections about PCL and Canon printers need completing. +

    4.2.1. Epson inkjet printers

    The model_capabilities vector in + print-escp2.c contains one entry for each + defined printer model. The model parameter + in printers.xml is an index into this + table. +

    In general, the new printers have fewer eccentricities than + the older printers. That doesn't mean they're simpler, just + that they're more consistent. +

    escp2_printer_t is a C struct defined as follows: +

    typedef struct escp2_printer
    +{
    +model_cap_t   flags;          /* Bitmask of flags, see below */
    +/*****************************************************************************/
    +int           nozzles;        /* Number of nozzles per color */
    +int           min_nozzles;    /* Minimum number of nozzles per color */
    +int           nozzle_separation; /* Separation between rows, in 1/360" */
    +int           black_nozzles;  /* Number of black nozzles (may be extra) */
    +int           min_black_nozzles;      /* # of black nozzles (may be extra) */
    +int           black_nozzle_separation; /* Separation between rows */
    +/*****************************************************************************/
    +int           xres;           /* Normal distance between dots in */
    +                              /* softweave mode (inverse inches) */
    +int           enhanced_xres;  /* Distance between dots in highest */
    +                              /* quality modes */
    +int           base_separation; /* Basic unit of row separation */
    +int           base_resolution; /* Base hardware spacing (above this */
    +                              /* always requires multiple passes) */
    +int           enhanced_resolution;/* Above this we use the */
    +                                  /* enhanced_xres rather than xres */
    +int           resolution_scale;   /* Scaling factor for ESC(D command */
    +int           max_black_resolution; /* Above this resolution, we */
    +                                    /* must use color parameters */
    +                                    /* rather than (faster) black */
    +                                    /* only parameters*/
    +int           max_hres;
    +int           max_vres;
    +int           min_hres;
    +int           min_vres;
    +/*****************************************************************************/
    +int           max_paper_width; /* Maximum paper width, in points */
    +int           max_paper_height; /* Maximum paper height, in points */
    +int           min_paper_width; /* Maximum paper width, in points */
    +int           min_paper_height; /* Maximum paper height, in points */
    +                              /* Softweave: */
    +int           left_margin;    /* Left margin, points */
    +int           right_margin;   /* Right margin, points */
    +int           top_margin;     /* Absolute top margin, points */
    +int           bottom_margin;  /* Absolute bottom margin, points */
    +                              /* "Micro"weave: */
    +int           m_left_margin;  /* Left margin, points */
    +int           m_right_margin; /* Right margin, points */
    +int           m_top_margin;   /* Absolute top margin, points */
    +int           m_bottom_margin;        /* Absolute bottom margin, points */
    +/*****************************************************************************/
    +int           extra_feed;     /* Extra distance the paper can be spaced */
    +                              /* beyond the bottom margin, in 1/360". */
    +                              /* (maximum useful value is */
    +                              /* nozzles * nozzle_separation) */
    +int           separation_rows; /* Some printers require funky spacing */
    +                              /* arguments in microweave mode. */
    +int           pseudo_separation_rows;/* Some printers require funky */
    +                              /* spacing arguments in softweave mode */
    +
    +int           zero_margin_offset;   /* Offset to use to achieve */
    +                                    /* zero-margin printing */
    +/*****************************************************************************/
    +               /* The stylus 480 and 580 have an unusual arrangement of
    +                                color jets that need special handling */
    +const int *head_offset;
    +int           initial_vertical_offset;
    +int           black_initial_vertical_offset;
    +
    +/*****************************************************************************/
    +const int *dot_sizes;         /* Vector of dot sizes for resolutions */
    +const double *densities;      /* List of densities for each printer */
    +const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */
    +/*****************************************************************************/
    +const double *lum_adjustment;
    +const double *hue_adjustment;
    +const double *sat_adjustment;
    +const paperlist_t *paperlist;
    +} escp2_printer_t;

    The printer definition block is divided into 8 sections. + The first section is a set of miscellaneous printer options. + These are described in the code, and will not be discussed + further here. +

    The second section describes the number of nozzles and the + separation between nozzles in base units. The base unit is + 1/360" for all currently supported printers, but future + printers may support a smaller base unit. +

    Many printers have more black nozzles than nozzles of other + colors, and when used in black and white mode, it's possible + to use these extra nozzles, which speeds up printing. As an + example, a printer that is specified to have 48 cyan, magenta, + and yellow nozzles, and 144 black nozzles, can use all 144 + black nozzles when printing black ink only. When printing in + color, only 48 nozzles of each color (including black) can be + used. +

    Most printers can print using either the number of nozzles + available or any smaller number. Some printers require that + all of the nozzles be used. Those printers will set + min_nozzles and/or + min_black_nozzles to the same value as + nozzles and/or + black_nozzles. +

    The third section defines basic units of measure for the + printer, including the standard separation between dots, the + base nozzle separation, and the minimum and maximum printing + resolutions the printer supports. Most of these are fairly + self-explanatory, but some are not obvious. +

    Most Epson printers, other than the high-end Stylus Pro + models, cannot print dots spaced more closely than 1/360" or + 1/720" apart (this is the setting for xres. + This is true even for printers that support resolutions of + 1440 or 2880 DPI. In these cases, the data must be printed in + 2, 4, or 8 passes. While the printer can position the head to + a resolution of 1/1440" or 1/2880", the head cannot deposit + ink that frequently. +

    Some printers can only print in their very best quality (using + the smallest dots available) printing at a lower resolution. + For example, the Stylus Photo EX can normally print with a dot + spacing of 1/720". The smallest dot size cannot be printed + with a dot spacing of less than 1/360", however. In this + case, we use enhanced_xres to specify the + resolution to be used in this enhanced mode, and + enhanced_resolution to specify the printing + resolution above which we use the + enhanced_xres. +

    The resolution_scale command is used to + specify scaling factors for the dot separation on newer + printers. It should always be 14400 with current printers. +

    The fourth section specifies the minimum and maximum paper + sizes, and the margins. Some printers allow use of narrower + margins when softweave is used; both sets of margins are + specified. +

    There is a convenient INCH macro defined + to make specification of the + max_paper_width and + max_paper_height more legible. It + multiplies 72 by the provided expression + to get the appropriate number of points. For example, to + specify 8.5", INCH(17/2) expands to + (72 * 17/2), which is evaluated left to + right, and hence generates the correct value. +

    The fifth section specifies some miscellaneous values that are + required for certain printers. For most printers, the correct + values are 1 for + separation_rows and 0 + for the others. Very, very few printers require (or allow) + separation_rows to be anything but + 1 and + pseudo_separation_rows other than + 0. The Stylus Color 1520, Stylus Color + 800, Stylus Color 850, and (strangely enough to my mind, since + it's a newer printer) Stylus Color 660 seem to be the only + exceptions. +

    zero_margin_offset is used to specify an + additional negative horizontal offset required to print to the + edges of the paper on newer Stylus Photo printers. These must + be determined empirically; good starting values are + 100 for 1440 DPI and + 50 for 2880 DPI printers. The goal is to + print to the edge of the page, but not over it. +

    The sixth section specifies head offsets for printers that do + not have the color jets aligned. Certain printers, such as + the Stylus Color 480, have an unusual head arrangement whereby + instead of all of the colors being aligned vertically, the + nozzles are configured in groups. These printers are easy to + determine; if the normal head offset of zero for each color is + used, the printing will be vertically out of alignment. Most + of these printers require specification of a negative offset + for printing to the top edge of the paper; typically these + printers do not require such an offset when printing black + only. +

    The seventh section specifies the most difficult values to + tune, the dot sizes, printing densities, and ink values (for + variable dot size enabled printers). These will be described + in detail below. +

    The last section specifies luminosity, hue, and saturation + adjustment vectors for the printer, and the paper definitions. + These are used to adjust the color in + Photograph and Solid + Colors output modes. These are each vectors of 48 + (actually 49, as the first value must be duplicated) doubles + that remap the luminosity, hue, and saturation respectively. + The hue is calculated, and the value used to interpolate + between the two closest points in each vector. +

    The paper definitions is a set of paper definitions. The + paper definition contains the name of the paper type, special + settings that are required for printers to process the paper + correctly, and a set of adjustment values. These are not + currently discussed here. +

    The lists of dot sizes and densities contain values for 13 + printing modes: 120/180 DPI using printer weaving (single row; + incorrectly referred to as “microweave”) and + “soft” weaving (the driver determines the exact + pattern of dot layout), 360 DPI microweave and softweave, + 720×360 DPI microweave and softweave, 720 DPI microweave + and softweave, 1440×720 microweave and softweave, + 2880×720 microweave and softweave, and 2880×1440 + softweave only. Printer weaving is referred to as + “microweave” for historical reasons. +

    For the dot sizes, the value for each element in the vector + selects the dot size to be used when printing at this (or + similar) resolution. The dot sizes are determined by + consulting the programming manual for the printer and + experimenting as described below. Current Epson printers + always use dot sizes less than 16 + (0x10), to indicate single dot size (each + dot is represented by 1 bit, and it's either printed or not), + and dot sizes of 16 or greater to + indicate variable dot size (each dot is represented by 2 bits, + and it can either be not printed or take on 2 or 3 values, + representing the relative size of the printed dot). Variable + dot sizes permit the use of very small dots (which would be + too small to fill the page and produce solid black) in light + areas, while allowing the page to be filled with larger dots + in darker areas. +

    Even single dot size printers can usually produce dots of + different sizes; it's just illegal to actually try to switch + dot size during a page. These dots are also much bigger than + those used in true variable dot size printing. +

    A dot size of -1 indicates that this + resolution is illegal for the printer in question. Any + resolutions that would use this dot size will not be presented + to the user. A dot size of -2 indicates + that this resolution is legal, but that the driver is not to + attempt to set any dot size. Some very old printers do not + support the command to set the dot size. +

    Most printers support a dot size of 0 as + a mode-specific default, but it's often a bigger dot than + necessary. Printers usually also support some dot sizes + between 1 and 3. + Usually 1 is the right dot size for 720 + and 1440 DPI printing, and 3 works best + at 360 DPI. +

    Variable dot size printers usually support 2 or 3 sets of + variable dot sizes. Older printers based on a 6 picolitre + drop (the 480, 720, 740, 750, 900, and 1200) support two: mode + 16 (0x10 in hexadecimal) for normal variable dots at 1440 or + 720 DPI, and mode 17 (0x10) for special larger dots at 360 + DPI. Newer printers based on 4 picolitre drops normally + support three sizes: 0x10 for 4 pl base + drops, 0x11 for 6 pl base drops, and + 0x12 for special large drops. On these + printers, 0x10 usually works best at + 1440×720 and 0x11 works best at + 720×720. Unfortunately, 0x10 + doesn't seem to generate quite enough density at + 720×720, because if it did the output would be very + smooth. Perhaps it's possible to tweak things… +

    The list of densities is a list of base density values for all + of the above listed modes. “Density” refers to + the amount of ink deposited when a solid color (or solid + black) is printed. So if the density is + 0.5, solid black actually prints only + half the possible dots. “Base density” refers to + the fact that the density value can be scaled in the GUI or on + the Ghostscript command line. The density value specified + (which is not made visible to the user) is multiplied by the + base density to obtain the effective density value. All other + things (such as ink drop size) remaining the same, doubling + the resolution requires halving the base density. The base + density in the density vector may exceed + 1, as many paper types require lower + density than the base driver. The driver ensures that the + actual density never exceeds 1. +

    Tuning the density should be done on high quality paper + (usually glossy photo paper). The goal is to find the lowest + density value that results in solid black (no visible gaps + under a fairly high power magnifying glass or loupe). If an + appropriate density value is found for 720 DPI, it could be + divided by 2 for 1440×720, by 4 for 2880×720, and + by 8 for 2880×1440. +

    However, for printers that offer a choice of dot size, this + may not be the best strategy. The best choice for dot size is + the smallest dot size that allows choosing a density value not + greater than 1 that gives full coverage. + This dot size may be different for different resolutions. + Tuning variable dot size printers is more complicated; the + process is described below. +

    The last member is a pointer to a structure containing a list + of ink values for variable dot size (or 6 color) inks. We + model variable dot size inks as producing a certain + “value” of ink for each available dot size, where + the largest dot size has a value of 1. + 6-color inks are handled similarly; the light cyan and light + magenta inks are treated as a fractional ink value. The + combination of variable dot size and 6 color inks, of course, + just creates that many more different ink choices. +

    This structure is actually rather complicated; it contains + entries for each combination of physical printer resolution + (180, 360, 720, and 1440 DPI), ink colors (4, 6, and 7), and + single and variable dot sizes (since some printer modes can't + handle variable dot size inks). Since there's so much data, + it's actually a somewhat deeply nested structure. +

    • An escp2_printer_t contains a pointer + (essentially, a reference rather than a copy) to an + escp2_variable_inklist_t. +

    • An escp2_variable_inklist_t contains pointers + to escp2_variable_inkset_t structures. There + is one such pointer for each combination of resolution, + dot type, and ink colors as described above. Yes, this is + rather inflexible. +

    • An escp2_variable_inkset_t contains pointers + to escp2_variable_ink_t structures. There is + one such pointer for each of the four colors (C, M, Y, and + K). +

    • An escp2_variable_ink_t contains a pointer to + the actual list of ink values + (simple_dither_range_t), the number of ink + values, and a density value to be used for computing the + transitions. This density value is actually a scaling + value; it is multiplied by the effective density to + compute the density to be used for computing the + transitions. Normally, this value is + 1, but in some cases it may be + possible to get smoother results with a different value + (in particular, the single dot size 6-color inks work best + with the effective density scaled to + .75 for this purpose). A lower + density lowers the transition points, which results in + more ink being deposited. +

    • A simple_dither_range_t is a structure containing four values: +

      • The value of the particular ink +

      • The bit pattern used to represent the ink +

      • Whether the ink is light (0) or dark (1), for inks + with light and dark variants +

      • The relative amount of ink actually deposited by + this dot (not currently used for much; it can be + used for ink reduction purposes, to reduce the + amount of ink deposited on the paper). +

      +

      These things are interesting as arrays. From an array of + simple_dither_range_t's, the dither code + computes transition values that it looks up at run time to + decide what ink to print, as well as whether to print at + all. +

    Really confused now? Yup. You'll + probably find it easier to simply read the code. +

    4.2.2. Tuning the printer

    Now, how do you use all this to tune a printer? There are a + number of ways to do it; this one is my personal favorite. +

    There's a file named test/cyan-sweep.tif. + This consists of a thin bar of cyan sweeping from white to + almost pure cyan, and from pure cyan to black. The first + thing to do is to pick the appropriate + simple_dither_range_t (or create a whole new + escp2_variable_inklist_t) and comment out all but + the darkest ink (this means you'll be using the largest dots + of dark ink). At 8.5" width (the width of a letter-size piece + of paper), the bar will be 1/8" high. Printing it on wider or + narrower paper will change the height accordingly. Print it + width-wise across a piece of photo quality paper in line art + mode using ordered or adaptive hybrid dither. Do not use + photographic mode; the colors in photographic mode vary + non-linearly depending upon the presence of the three color + components, while in line art mode the colors are much purer. + Make sure that all the color adjustments are set to defaults + (1.0). Use the highest quality version of the print mode + you're testing to reduce banding and other artifacts. This is + much easier to do with the Gimp than with Ghostscript. +

    At this stage, you want to look for four things: +

    1. The black near the center of the line is solid, but not + more so than that. +

    2. The cyan immediately to the left of the black is + almost solid. +

    3. The dark cyan at the far right of the page is solid, but + not more so. You can try tuning the density so that it + isn't quite solid, then nudging up the density until it + is. +

    4. Both sweeps sweep smoothly from light to dark. In + particular, the dark half of the bar shouldn't visibly + change color; it should go smoothly from cyan to black. +

    +

    Repeat this stage until you have everything just right. Use + the positioning entry boxes in the dialog to position each bar + exactly 1/8" further down the page. Adjacent bars will be + touching. +

    The next step is to uncomment out the second darkest dot size. + If you're using variable dots, use the second largest dot size + of the dark ink rather than the largest dot size of the light + ink. This will give you two inks. +

    When you recompile the plugin, you simply need to copy the new + executable into the correct place. You do not need to exit + and restart the Gimp. +

    Print another bar adjacent to the first one. Your goal is to + match the bar using a single dot size as closely as possible. + You'll find that the dark region of the bar shouldn't change + to any great degree, but the light half probably will. If the + lighter part of the light half is too dark, you need to + increase the value of the smaller dot; if it's too light, you + need to decrease the value. The reasoning is that if the + value is too low, the ink isn't being given enough credit for + its contribution to the darkness of the ink, and vice versa. + Repeat until you have a good match. Make sure you let the ink + dry fully, which will take a few minutes. Wet ink will look + too dark. Don't look at the paper too closely; hold it at a + distance. The extra graininess of the largest dot size will + probably make it look lighter than it should; if you hold it + far enough away so that you can't see the dots, you'll get a + more accurate picture of what's going on. +

    After you have what looks like a good match, print another bar + using only the largest dot size (or dark ink, for single dot + size 6-color printers). You want to ensure that the bars + touching each other look identical, or as close as possible to + it; your eye won't give you a good reading if the bars are + separated from each other. You'll probably have to repeat the + procedure. +

    The next step is to comment out all but the largest and + third-largest dot size, and repeat the procedure. When they + match, use all three dot sizes of dark ink. Again, the goal + is to match the single dot size. +

    You'll probably find the match is imperfect. Now you have to + figure out what region isn't right, which takes some + experimentation. Even small adjustments can make a noticeable + difference in what you see. At this stage, it's very + important to hold the page far enough from your eye; when you + use all three dot sizes, the texture will be much more even, + which sometimes makes it look darker and sometimes lighter. +

    After this is calibrated, it's time to calibrate the light ink + against the dark ink. To do this, comment out all but the + large dot version of the two inks, and repeat the procedure. + This is trickier, because the hues of the inks might not be + quite identical. Look at the dark half of the bar as well as + the light half to see that the hue really doesn't change as + you sweep from cyan to black. Sometimes it's easier to judge + that way. You may find that it looks blotchy, in which case + you should switch from ordered dither to adaptive hybrid. +

    After you have the light and dark inks calibrated against each + other, it's time to add everything back in. Usually you don't + want to use the largest dot size of light ink. These dots + will be much larger than the small dots of dark ink, but + they'll still be lighter. This will cause problems when + printing mixed colors, since you'll be depositing more ink on + lighter regions of the page, and you'll probably get strange + color casts that you can't get rid of in neutral tones. I + normally use only the smallest one or two dot sizes of light + ink. +

    After you've tweaked everything, print the color bar with + saturation set to zero. This will print neutral tones using + color inks. Your goal here is to look for neutral tonality. + If you're using a 6-color printer and get a yellow cast, it + means that the values for your light inks are too high + (remember, that means they're getting too much credit, so + you're not depositing enough cyan and magenta ink, and the + yellow dominates). If you get a bluish or bluish-purple cast, + your light inks are too low (you're not giving them enough + credit, so too much cyan and magenta is deposited, which + overwhelms the yellow). Make sure you do this on very white, + very high grade inkjet paper that's designed for + 1440×720 DPI or higher; otherwise the ink will spread on + contact and you'll get values that aren't really true for high + grade paper. You can, of course, calibrate for low grade + paper if that's what you're going to use, but that shouldn't + be put into the distribution. +

    You can also fully desaturate this bar inside the Gimp and + print it as monochrome (don't print the cyan as monochrome; + the driver does funny things with luminance), for comparison. + You'll find it very hard to get rid of all color casts. +

    There are other ways of tuning printers, but this one works + pretty well for me. +

    4.2.3. Canon inkjet printers

    Basically, a new Canon printer can be added to + print-canon.c in a similar way as + described above for the epson inkjet printers. The main + differences are noted here. +

    In general, Canon printers have more “built-in + intelligence“ than Epson printers which results in the + fact that the driver only has to tell the printing conditions + like resolutions, dot sizes, etc. to the printer and + afterwards transfer the raster data line by line for each + color used. +

    canon_cap_t is a C struct defined as follows: +

    typedef struct canon_caps {
    +int model;          /* model number as used in printers.xml */
    +int max_width;      /* maximum printable paper size */
    +int max_height;
    +int base_res;       /* base resolution - shall be 150 or 180 */
    +int max_xdpi;       /* maximum horizontal resolution */
    +int max_ydpi;       /* maximum vertical resolution */
    +int max_quality;
    +int border_left;    /* left margin, points */
    +int border_right;   /* right margin, points */
    +int border_top;     /* absolute top margin, points */
    +int border_bottom;  /* absolute bottom margin, points */
    +int inks;           /* installable cartridges (CANON_INK_*) */
    +int slots;          /* available paperslots */
    +int features;       /* special bjl settings */
    +canon_dot_size_t dot_sizes;   /* Vector of dot sizes for resolutions */
    +canon_densities_t densities;  /* List of densities for each printer */
    +canon_variable_inklist_t *inxs; /* Choices of inks for this printer */
    +} canon_cap_t;

    Since there are Canon printers which print in resolutions of + 2n × 150 DPI (e.g. 300, 600, + 1200) and others which support resolutions of + 2n × 180 DPI (e.g. 360, 720, + 1440), there's a base resolution (150 or 180, respectively) + given in the canon_cap_t. The structs + canon_dot_size_t, canon_densities_t + and canon_variable_inklist_t refer to resolutions + being multiples of the base resolution. +

    For the Canon driver, the struct canon_dot_size_t + holds values for a model's capabilities at a given resolution, + or -1 if the resolution is not supported. + 0 if it can be used and + 1 if the resolution can be used for + variable dot size printing. +

    In canon_densities_t the base densities for each + resolution can be specified like for an epson printer. The + same holds true for canon_variable_inklist_t. + See the descriptions above to learn about how to adjust your + model's output to yield nice results. +

    There's a slight difference though in the way the Canon driver + and the escp2 driver define their variable inklists: In the + Canon driver, you need to define an inklist like this: +

    static const canon_variable_inklist_t canon_ink_myinks[] =
    +{
    +{
    +  1,4, /* 1bit/pixel, 4 colors */
    +  &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1,
    +  &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1,
    +},
    +{
    +  3,4, /* 3bit/pixel, 4 colors */
    +  &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3,
    +  &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3,
    +},
    +};

    where the &ci_CMYK_1 and + &ci_CMYK_3 entries are references to a + previously defined const of type + canon_variable_inkset_t. +


    PrevHomeNext
    Adding a new printerUpESC/P2
    \ No newline at end of file diff --git a/doc/developer/reference-html/x67.html b/doc/developer/reference-html/x67.html new file mode 100644 index 0000000..425a70b --- /dev/null +++ b/doc/developer/reference-html/x67.html @@ -0,0 +1,182 @@ + +Linking with libgutenprint
    The Developer's Guide to Gutenprint
    PrevChapter 2. Using libgutenprintNext

    2.2. Linking with libgutenprint

    To link a program with libgutenprint, the option + -lgutenprint needs to be passed to the compiler + when linking. For example, to compile and link + stpimage.c the following commands would be + used: +

    $ gcc -c stpimage.c
    +$ gcc -o stpimage -lgutenprint stpimage.o

    The compiler and linker flags needed may vary depending on the + options Gutenprint was configured with when it was built. The + pkg-config script will give the correct + parameters for the local installation. +


    PrevHomeNext
    Using libgutenprintUpIntegrating libgutenprint
    \ No newline at end of file diff --git a/doc/developer/reference-html/x79.html b/doc/developer/reference-html/x79.html new file mode 100644 index 0000000..93af949 --- /dev/null +++ b/doc/developer/reference-html/x79.html @@ -0,0 +1,612 @@ + +Integrating libgutenprint
    The Developer's Guide to Gutenprint
    PrevChapter 2. Using libgutenprintNext

    2.3. Integrating libgutenprint

    This section describes how to integrate the compiling and + linking of programs using libgutenprint with build + scripts. Commonly used systems include make, + but often Makefile files are generated by + using tools such as autoconf and + automake. +

    2.3.1. pkg-config

    Depending on the nature of the computer system Gutenprint was + installed on, as well as the options passed to + configure when configuring the package when + it was built, the CFLAGS and + LIBS parameters needed to compile and link + programs with libgutenprint may vary. To make it simple to + determine what these are on any given system, a + pkg-config datafile was created when + Gutenprint was built. pkg-config will + output the correct parameters for the setup on your system. + See the + pkg-config(1) manual page for a compete synopsis. +

    The correct CFLAGS to use can be obtained + with the --cflags option: +

    $ pkg-config --cflags gutenprint
    +-I/usr/local/include

    The correct LIBS to use can the obtained + with the --libs option: +

    $ pkg-config --libs gutenprint
    +-L/usr/local/lib -lgutenprint -lm -ldl

    Lastly, the installed version of Gutenprint can be obtained with the + --version option: +

    $ pkg-config --modversion gutenprint
    +4.3.23

    The command can be used from the shell by enclosing it in + backquotes ‘`’: +

    $ gcc `pkg-config --cflags gutenprint` -c stpimage.c
    +$ gcc `pkg-config --libs gutenprint` -o
    +  stpimage stpimage.o

    However, this is not the way it it typically used. Normally + it is used in a Makefile or by an m4 + macro in a configure script. +

    2.3.2. make

    If you use make with your own + Makefile files, then you are on your + own. This manual offers no assistance with doing this. Only + the following suggestion is offered, for use with GNU + make: +

    GUTENPRINT_VERSION = $(shell pkg-config --version gutenprint)
    +GUTENPRINT_CFLAGS = $(shell pkg-config --cflags gutenprint)
    +GUTENPRINT_LIBS = $(shell pkg-config --libs gutenprint)

    How you choose to use these variables is entirely up to + you. See the GNU make manual for more + information. +

    2.3.3. autoconf

    The autoconf program produces a Bourne + shell script called configure from a + template file called configure.ac. + configure.ac contains both Bourne shell + script, and m4 macros. autoconf expands + the m4 macros into ‘real’ shell script. The + resulting configure script performs various + checks for installed programs, compiler characteristics and + other system information such as available headers and + libraries. See the GNU autoconf manual for + more information. +

    pkg-config provides an m4 macro, + PKG_CHECK_MODULES, suitable for use in a + configure.ac script. It defines the + environment variables required for building libgutenprint-based + programs. For example, to set GUTENPRINT_CFLAGS and + GUTENPRINT_LIBS: +

    PKG_CHECK_MODULES(GUTENPRINT, gutenprint)

    2.3.4. automake

    The automake program can be used to + generate Makefile.in files suitable for + use with a configure script generated by + autoconf. As automake + requires autoconf, + this section will assume the use of a + configure.ac script which uses the + PKG_CHECK_MODULES macro described above + (there is little point in not using it!). +

    It is highly recommended that you use GNU + autoconf and + automake. They will allow you to make your + software build on most platforms with most compilers. + automake makes writing complex + Makefile's very easy, by expressing how + to build your packages in terms of what files are required to + build a project and the installation locations of the files. + It imposes a few limitations over using plain + Makefile's, such as in the use of + conditionals, but these problems are vastly outweighed by the + benefits it brings. It also creates many extra targets in the + generated Makefile.in files such as + dist, distcheck, + clean, distclean, + maintainer-clean and tags, + and there are many more more available. See the GNU + automake manual for more information. +

    Because PKG_CHECK_MODULES calls + AC_SUBST to substitute + GUTENPRINT_CFLAGS and + GUTENPRINT_LIBS, automake + will automatically set these variables in the + Makefile.in files it generates, requiring + no additional effort on your part! +

    As in previous examples, we will make a program + stpimage from + stpimage.c. This is how one might build + write a Makefile.am to do this: +

    AUTOMAKE_OPTIONS = 1.7 gnu
    +MAINT_CHARSET = latin1
    +
    +@SET_MAKE@
    +
    +AM_CFLAGS = $(GUTENPRINT_CFLAGS)
    +
    +bin_PROGRAMS = stpimage
    +stpimage_SOURCES = stpimage.c
    +stpimage_LDADD = $(GUTENPRINT_LIBS)
    +
    +MAINTAINERCLEANFILES = Makefile.in

    That's all there is to it! Please note that this example also + requires the macro AC_PROG_MAKE_SET to be + used in configure.ac. +


    PrevHomeNext
    Linking with libgutenprintUpReporting Bugs
    \ No newline at end of file diff --git a/doc/developer/reference-html/x955.html b/doc/developer/reference-html/x955.html new file mode 100644 index 0000000..bc3f395 --- /dev/null +++ b/doc/developer/reference-html/x955.html @@ -0,0 +1,2297 @@ + +Remote Mode Commands
    The Developer's Guide to Gutenprint
    PrevChapter 5. ESC/P2Next

    5.2. Remote Mode Commands

    The following description of remote commands comes out of an + examination of the sequences used by the printer utilities + bundled with the Windows drivers for the ESC740, and from other + sources (some Epson manuals, experimentation, analysis of print + files). It is largely speculative as these commands are not all + documented in the Epson documentation we have access to. + Generally, newer manuals provide more thorough documentation. +

    Remote command mode is entered when the printer is sent the + following sequence: +

    ESC (R BC=8 00 R E M O T E 1

    Remote mode commands are then sent, and terminated with the + following sequence: +

    ESC 00 00 00

    All remote mode commands must be sent before the initial + ESC (G command is sent. +

    This introductory sequence is then followed by a sequence of + commands. Each command is constructed as follows: +

    1. Two ASCII bytes indicating the function +

    2. A byte count (two bytes, little-endian) for the parameters +

    3. Binary parameters, if any +

    This is a list of all remote commands we have seen: +

    ESC/P2 Remote Mode Commands

    NC BC=2 00 + 00

    Print a nozzle check pattern. +

    VI BC=2 00 + 00

    On my 740, prints the following, probably “version + information”: +

    W01286 I02382\r\n

    * AI BC=3 00 00 00

    Prints a “printer ID”. On one 870, prints the + following: +

    51-51-50-51-49-48\r\n

    The Windows driver has a text entry field where this + number can be entered, but its purpose is unknown. +

    * LD BC=0

    Load printer defaults from NVRAM, DIP switches, and/or + ROM. This apparently does not load factory defaults per + se, but any settings that are saved. This is commonly + used right at the end of each print job after the + ESC @ printer reset command. +

    * CH BC=2 00 + xx

    Perform a head cleaning cycle. The heads to clean are + determined by parameter xx: +

    Table 5-5. Head cleaning parameters

    xxDescription
    00Clean all heads
    01Clean black head
    02Clean color heads

    While xx = 00 is + likely supported by all printers, xx + = 01 and 02 + are not. +

    * DT BC=3 00 + xx 00

    Print an alignment pattern. There are three patterns, + which are picked via the choice of + xx. Pattern 0 + is coarse, pattern 1 is medium, and + pattern 2 is fine. +

    * DA BC=4 00 + xx 00 + yy

    Set results for the alignment pattern. + xx is the pattern + (1--3); + yy is the best choice from the set + (1--7 or + 1--15). This + does not save to NVRAM, so when the printer is powered + off, the setting will be lost. +

    * SV BC=0

    Save the current settings to NVRAM. +

    * RS BC=1 + 01

    Reset the printer. +

    * IQ BC=1 + 01

    Get ink quantity. This requires direct access to the + printer port. The return looks like +

    IQ:KKCCMMYY

    or +

    IQ:KKCCMMYYccmm

    (for 4-color and 6-color printers respectively), where + each pair of digits are hexadecimal representations of + percent. +

    The following two commands have been observed on an STP 870. +

    * IR BC=2 00 + xx

    Function unknown. This command has + been observed on an STP 870 with + xx=03 at the start + of a job and xx=02 + at the end of a job (where it is followed by an + LD command). When in roll mode, the + values change to + xx=01 at the start + of a job and xx=00 + at the end of a job. +

    * FP BC=3 00 + pos[2]

    Specify the horizontal left margin in units of 1/360 inch. + The default value for pos is + 0. For borderless printing on + printers that support it, a value of + -80 (FFB0h) + should be used. +

    The commands below are partially documented in the Stylus Pro + 9000 manual. Much of this information is interpreted; none is + tested. +

    * SN BC=3 00 + xx yy

    Select Mechanism Sequence. xx + controls which sub-operation is performed. + xx=00 selects + the “Feed paper sequence setting”. + yy can take on the following values + (on the STP 870, at any rate): +

    Table 5-6. Media types

    yyMedia type
    0Default
    1Plain paper
    2Postcards
    3 Film (photo quality glossy film, transparencies) +
    4Envelopes
    5Plain paper (fast load)
    6 Back light film (although this has been observed + with heavyweight matte paper) +
    7 Matte paper (observed with 360 dpi inkjet paper, + and photo quality inkjet paper) +
    8Photo paper

    Experimentation suggests that this setting changes + details of how the printers' cut sheet feeder works, + presumably to tune it for different types of paper. +

    xx=01 controls + the platen gap setting; + yy=00 is the + default, yy=1 or + 2 are higher settings. +

    xx=02 controls + paper loading speed + (yy=0 is normal, + 1 is fast, 2 + is slow). It appears that 1 is + used when printing on “plain paper”, + “360dpi ink jet paper” or “ink jet + transparencies”, and + yy=00 for all + other paper type settings. +

    xx=07 controls + duplex printing for printers with that capability + (yy=0 is default, + for non-duplex printing; 1 is front + side of the paper, and 2 is back + side). +

    xx=09 controls + zero margin printing on the printers with the capability + of printing zero-margin on all sides (Stylus Photo + 780/790, 890, and 1280/1290). + yy=0 is the + default; 1 enables zero margin + printing. +

    * PP BC=3 00 + xx + yy

    Set Paper Path. + xx=2 indicates + manual feed, + xx=3 is for roll + paper. yy selects “paper path + number”. +

    * AC BC=2 00 + xx

    Set Auto Cutting State. + xx=0 selects + auto cutting off, + xx=1 selects + auto cutting on, and + xx=2 indicates + horizontal print page line on. It appears that with + auto cutting on, roll paper is cut automatically at the + point a formfeed character is sent. The formfeed + character is normally used to eject a page; with this + turned on, it also cuts the roll paper. Horizontal + print page line on prints a narrow line of black dots at + the position the paper should be cut manually. +

    * DR BC=4 00 xx + DT2

    Set Drying Time. + xx=00 sets the + drying time “per scan” (per pass?); + xx=01 sets the + drying time per page. DT indicates + the drying time, which is in seconds if page mode is + used and in milliseconds if scan mode is used. + DT must not exceed 3600 seconds in + per-page mode and 10000 milliseconds in per-scan mode. +

    * IK BC=2 00 + xx

    Select Ink Type. + xx=00 selects + dye ink. Pigment ink is apparently selected by + xx=01. This + probably does not apply to the consumer-grade printers. +

    * PZ BC=2 00 xx

    Set Pause After Printing. + xx=00 selects no + pause after printing; + xx=01 selects + pause after printing. If turned on, the printer is + paused after the page is ejected (by the FF byte). If + cutting is turned on, the printer is paused + after the cutting or printing of + the horizontal cut line. +

    * EX BC=6 00 00 00 00 0x14 + xx

    Set Vertical Print Page Line Mode. + xx=00 is off, + xx=01 is on. If + turned on, this prints vertical trim lines at the left + and right margins. +

    * EX BC=6 00 00 00 00 0x05 + xx

    Set Roll Paper Mode. If xx is + 0, roll paper mode is off; if + xx is 1, roll + paper mode is on. +

    * EX BC=3 00 + xx yy

    Appears to be a synonym for the SN + command described above. +

    * PH BC=2 00 + xx

    Select Paper Thickness. Set the paper thickness + xx in .1 mm units. This must not + exceed 0x10 (1.6 mm). If the + thickness is set “more than” .6 mm (which + probably means “at least” 0.6 mm, since the + other case reads “less than 0.5 mm”), the + platen gap is set high irrespective of the + SN command. +

    * PM BC=2 00 + 00

    Function unknown. Used on the STC + 3000 at least when using roll feed, and on the STP 870 + in all print files analysed to date. +

    * ST BC=2 00 + xx

    Epson's STP 750/1200 programming guide refers to the + ST command as “Set printer + state reply”. If xx is + 0 or 2, the + printer will not send status replies. If + xx is 1 or + 3, the printer will send status + replies. The status replies consist of state, error + codes, ink leve, firmware version, and warning status. +

    The actual reply is documented as +

    @BDC ST\r
    +ST: xx;
    +[ER: yy;]
    +IQ: n1n2n3n4;
    +[WR: w1,w2...;]
    +RV: zz;
    +AI:CW:02kkccmmyy, MI:mm
    +[TC:tttt;]
    +INK:...;
    +\f

    (\r is carriage return; + \n is newline; \f + is formfeed.) +

    ST is the printer status: +

    Table 5-7. Printer status codes

    Status codeDescription
    00Error
    01Self-test
    02Busy
    03Waiting while printing
    04Idle
    07Cleaning/filling ink heads
    08Not yet initialized/filling heads

    ER, if provided, is the error status: +

    Table 5-8. Printer error codes

    Error codeDescription
    00Fatal Error
    01Interface not selected
    04Paper jam
    05Out of ink
    06Paper out
    0DPaper gap error
    10Maintenance request
    11Tear-off mode selected
    12Double feed error
    1CCutter position error
    1DCutter jam
    1EInk color error
    23Ink combination error

    IQ is the amount of ink left, as a + (decimal!) percentage expressed in hexadecimal. The + values are black, cyan, magenta, and yellow. 6 and 7 + color printers usually specify two or three additional + values for light cyan, light magenta, and gray. + However, some low end 6-color printers specify only four + values. +

    For printers with different ink cartridge options, the + following additional values may appear: +

    Table 5-9. Printer additional ink codes

    Ink codeDescription
    NAInk cartridge is not inserted
    RE Ink cartridge information cannot be read +
    WE Ink cartridge information cannot be written +
    CI Ink cartridge is inserted, but has not been read +

    WR, if provided, is the warning status: +

    Table 5-10. Printer warning codes

    Warning codeDescription
    10 Black ink low (Photo black on printers using + UltraChrome® ink) +
    11Cyan
    12Magenta
    13Yellow
    14Light cyan (presumably)
    15Light magenta (presumably)
    17 Gray (with UltraChrome-compatible printers) +
    18Matte black 1 (UltraChrome)
    19Matte black 2 (UltraChrome)

    RV is the firmware revision (one byte + ASCII). +

    AI is actuator information. These + are two byte ASCII codes that indicate ``ink weight rank + ID'' of KCMY, respectively. +

    TC, if provided, is the total time of + cleaning or ink filling (?). +

    RC, if provided, is the firmware + revision. +

    INK: and MI are + not documented. +

    * SM BC=2 00 + xx

    Set Status Reply Rate. xx is the + repeat interval in seconds. If xx is + 0, the status is returned only when + the printer's state changes. +

    * ST BC=1 + 01

    Reply Printer Status. The reply is formatted as follows: +

    @BDC PS\r\nST:xx;\f

    \r is carriage return; + \n is newline; \f is + formfeed). If xx (the reply value) is + 0 or 2, + automatic status update is disabled; if + 1 or 3, it is + enabled. +

    * SM BC=1 + 01

    Reply Printer Status Rate. The reply is formatted as + follows: +

    @BDC PS\r\nST:xx;\f

    \r is carriage return; + \n is newline; \f is + formfeed). See SM + BC=2 above for the meaning of + the return value. +

    * ?? + BC=xx + y[1] … + y[xx]

    Echo Parameters (perhaps better described as Echo + Commands). The command string is executed (it would + appear from the documentation), and the string sent is + returned using a sequence similar to that described in + the ST BC=1 and + SM BC=1 commands. + Note that in this case the number of bytes is variable! +

    * SM BC=2 00 + 02

    Function unknown. Used on the STC + 3000 at least when using roll feed. +

    * JE BC=1 + 00

    Function unknown. On new printers + (STC 740 or newer), this command should be sent after + all data has been sent. If this command is not sent, + and the printer is connected to a Windows system, the + last page of the job will not print completely. The + most likely explanation for for this is that the Windows + driver typically puts the printer in 1284.4 packet mode, + and this command has the effect of flushing the buffer + in the printer. +

    * CO BC=8 00 + cutter[1] page[1] + unit[1] + position[4]

    Specify paper cutting on Stylus Photo 2200 (and perhaps + some other printers). cutter must be + 0. page should be one of the + following: +

    Table 5-11. Paper cutting codes

    CodeDescription
    0All pages
    1First page only
    2Last page only

    unit should be one of the following: +

    Table 5-12. Paper cutting units

    CodeDescription
    01/360 in.
    11/720 in.
    21/1440 in.

    This command should be used twice. The first + CO command specifies where the page + will be cut at the top, and the second specifies where + the page will be cut at the bottom. This permits + cutting both the top and the bottom of the page. +


    PrevHomeNext
    ESC/P2UpAppropriate Remote Commands
    \ No newline at end of file diff --git a/doc/developer/using.xml b/doc/developer/using.xml new file mode 100644 index 0000000..c63ca7a --- /dev/null +++ b/doc/developer/using.xml @@ -0,0 +1,238 @@ + + Using libgutenprint + + This chapter describes how to write programs that use + libgutenprint. + + + Code prerequisites + + To use libgutenprint with a program, several steps must be taken: + + + + + Include the master libgutenprint header: + + <gimp-print/gimp-print.h> + + + + + + Call stp_init. + + + + + Link with the libgutenprint library. + + + + + The following is a short example program. It does not do + anything useful, but it does everything required to link with + libgutenprint and call other functions from libgutenprint. + + + #include <gimp-print/gimp-print.h> +int +main (int argc, char *argv[]) +{ + stp_init(); + return 0; +} + + + + + Linking with libgutenprint + + To link a program with libgutenprint, the option + needs to be passed to the compiler + when linking. For example, to compile and link + stpimage.c the following commands would be + used: + + $ gcc -c stpimage.c +$ gcc -o stpimage -lgutenprint stpimage.o + + The compiler and linker flags needed may vary depending on the + options Gutenprint was configured with when it was built. The + pkg-config script will give the correct + parameters for the local installation. + + + + Integrating libgutenprint + + This section describes how to integrate the compiling and + linking of programs using libgutenprint with build + scripts. Commonly used systems include make, + but often Makefile files are generated by + using tools such as autoconf and + automake. + + + <command>pkg-config</command> + + Depending on the nature of the computer system Gutenprint was + installed on, as well as the options passed to + configure when configuring the package when + it was built, the CFLAGS and + LIBS parameters needed to compile and link + programs with libgutenprint may vary. To make it simple to + determine what these are on any given system, a + pkg-config datafile was created when + Gutenprint was built. pkg-config will + output the correct parameters for the setup on your system. + See the + pkg-config(1) + manual page for a compete synopsis. + + + The correct CFLAGS to use can be obtained + with the option: + + $ pkg-config --cflags gutenprint +-I/usr/local/include + + The correct LIBS to use can the obtained + with the option: + + $ pkg-config --libs gutenprint +-L/usr/local/lib -lgutenprint -lm -ldl + + Lastly, the installed version of Gutenprint can be obtained with the + --version option: + + $ pkg-config --modversion gutenprint +4.3.23 + + The command can be used from the shell by enclosing it in + backquotes ‘`’: + + $ gcc `pkg-config --cflags gutenprint` -c stpimage.c +$ gcc `pkg-config --libs gutenprint` -o + stpimage stpimage.o + + However, this is not the way it it typically used. Normally + it is used in a Makefile or by an m4 + macro in a configure script. + + + + <command>make</command> + + If you use make with your own + Makefile files, then you are on your + own. This manual offers no assistance with doing this. Only + the following suggestion is offered, for use with GNU + make: + + GUTENPRINT_VERSION = $(shell pkg-config --version gutenprint) +GUTENPRINT_CFLAGS = $(shell pkg-config --cflags gutenprint) +GUTENPRINT_LIBS = $(shell pkg-config --libs gutenprint) + + How you choose to use these variables is entirely up to + you. See the GNU make manual for more + information. + + + + <command>autoconf</command> + + The autoconf program produces a Bourne + shell script called configure from a + template file called configure.ac. + configure.ac contains both Bourne shell + script, and m4 macros. autoconf expands + the m4 macros into ‘real’ shell script. The + resulting configure script performs various + checks for installed programs, compiler characteristics and + other system information such as available headers and + libraries. See the GNU autoconf manual for + more information. + + + pkg-config provides an m4 macro, + PKG_CHECK_MODULES, suitable for use in a + configure.ac script. It defines the + environment variables required for building libgutenprint-based + programs. For example, to set GUTENPRINT_CFLAGS and + GUTENPRINT_LIBS: + + + PKG_CHECK_MODULES(GUTENPRINT, gutenprint) + + + + <command>automake</command> + + The automake program can be used to + generate Makefile.in files suitable for + use with a configure script generated by + autoconf. As automake + requires autoconf, + this section will assume the use of a + configure.ac script which uses the + PKG_CHECK_MODULES macro described above + (there is little point in not using it!). + + + It is highly recommended that you use GNU + autoconf and + automake. They will allow you to make your + software build on most platforms with most compilers. + automake makes writing complex + Makefile's very easy, by expressing how + to build your packages in terms of what files are required to + build a project and the installation locations of the files. + It imposes a few limitations over using plain + Makefile's, such as in the use of + conditionals, but these problems are vastly outweighed by the + benefits it brings. It also creates many extra targets in the + generated Makefile.in files such as + , , + , , + and , + and there are many more more available. See the GNU + automake manual for more information. + + + Because PKG_CHECK_MODULES calls + AC_SUBST to substitute + GUTENPRINT_CFLAGS and + GUTENPRINT_LIBS, automake + will automatically set these variables in the + Makefile.in files it generates, requiring + no additional effort on your part! + + + As in previous examples, we will make a program + stpimage from + stpimage.c. This is how one might build + write a Makefile.am to do this: + + + AUTOMAKE_OPTIONS = 1.7 gnu +MAINT_CHARSET = latin1 + +@SET_MAKE@ + +AM_CFLAGS = $(GUTENPRINT_CFLAGS) + +bin_PROGRAMS = stpimage +stpimage_SOURCES = stpimage.c +stpimage_LDADD = $(GUTENPRINT_LIBS) + +MAINTAINERCLEANFILES = Makefile.in + + + That's all there is to it! Please note that this example also + requires the macro AC_PROG_MAKE_SET to be + used in configure.ac. + + + + diff --git a/doc/developer/weave.xml b/doc/developer/weave.xml new file mode 100644 index 0000000..e2a1ec4 --- /dev/null +++ b/doc/developer/weave.xml @@ -0,0 +1,1409 @@ + + Weaving for inkjet printers + + + + Introduction + + The Epson Stylus Color/Photo printers don't have memory to print + using all of the nozzles in the print head. For example, the + Stylus Photo 700/EX has 32 nozzles. At 720 dpi, with an 8" wide + image, a single line requires ((8 × 720 × 6) / 8) + bytes, or 4320 bytes (because the Stylus Photo printers have 6 + ink colors). To use 32 nozzles per color would require 138240 + bytes. It's actually worse than that, though, because the + nozzles are spaced 8 rows apart. Therefore, in order to store + enough data to permit sending the page as a simple raster, the + printer would require enough memory to store 256 rows, or + 1105920 bytes. Considering that the Photo EX can print 11" + wide, we're looking at more like 1.5 MB. In fact, these + printers are capable of 1440 dpi horizontal resolution. This + would require 3 MB. The printers actually have 64K-256K. + + + With the newer (740/750 and later) printers it's even worse, + since these printers support multiple dot sizes; of course, the + even newer 2880×720 printers don't help either. + + + Older Epson printers had a mode called + MicroWeave. In this mode, the + host fed the printer individual rows of dots, and the printer + bundled them up and sent them to the print head in the correct + order to achieve high quality. This MicroWeave mode still works + in new printers, but in some cases the implementation is very + minimal: the printer uses exactly one nozzle of each color (the + first one). This makes printing extremely slow (more than 30 + minutes for one 8.5×11" page), although the quality is + extremely high with no visible banding whatsoever. It's not + good for the print head, though, since no ink is flowing through + the other nozzles. This leads to drying of ink and possible + permanent damage to the print head. + + + By the way, although the Epson manual says that microweave mode + should be used at 720 dpi, 360 dpi continues to work in much the + same way. At 360 dpi, data is fed to the printer one row at a + time on all Epson printers. The pattern that the printer uses + to print is very prone to banding. However, 360 dpi is + inherently a low quality mode; if you're using it, presumably + you don't much care about quality. It is possible to do + microweave at 360 DPI, with significantly improved quality. + + + Except for the Stylus Pro printers (5000, 5500, 7000, 7500, + 9000, 9500, and when it's released the 10000), which can do + microweave at any resolution, printers from roughly the Stylus + Color 600 and later do not have the capability to do MicroWeave + correctly in many cases (some printers can do MicroWeave + correctly at 720 DPI). Instead, the host must arrange the + output in the order that it will be sent to the print head. + This is a very complex process; the jets in the print head are + spaced more than one row (1/720") apart, so we can't simply send + consecutive rows of dots to the printer. Instead, we have to + pass e. g. the first, ninth, 17th, 25th... rows in order for + them to print in the correct position on the paper. This + interleaving process is called "soft" weaving. + + + This decision was probably made to save money on memory in the + printer. It certainly makes the driver code far more + complicated than it would be if the printer could arrange the + output. Is that a bad thing? Usually this takes far less CPU + time than the dithering process, and it does allow us more + control over the printing process, e.g. to reduce banding. + Conceivably, we could even use this ability to map out bad jets. + + + Interestingly, apparently the Windows (and presumably Macintosh) + drivers for most or all Epson printers still list a + “microweave” mode. Experiments have demonstrated + that this does not in fact use the “microweave” mode + of the printer. Possibly it does nothing, or it uses a + different weave pattern from what the + “non-microweave” mode does. This is unnecessarily + confusing, at least for people who write drivers who try to + explain them to people who don't. + + + What makes this interesting is that there are many different + ways of of accomplishing this goal. The naive way would be to + divide the image up into groups of 256 rows (for a printer with + 32 jets and a separation of 8 rows), and print all the mod8=0 + rows in the first pass, mod8=1 rows in the second, and so forth. + The problem with this approach is that the individual ink jets + are not perfectly uniform; some emit slightly bigger or smaller + drops than others. Since each group of 8 adjacent rows is + printed with the same nozzle, that means that there will be + distinct streaks of lighter and darker bands within the image (8 + rows is 1/90", which is visible; 1/720" is not). Possibly worse + is that these patterns will repeat every 256 rows. This creates + banding patterns that are about 1/3" wide. + + + So we have to do something to break up this patterning. + + + Epson do not publish the weaving algorithms that they use in + their bundled drivers. Indeed, their developer web site + (http://www.ercipd.com/isv/edr_docs.htm) does not even describe + how to do this weaving at all; it says that the only way to + achieve 720 dpi is to use MicroWeave. It does note (correctly) + that 1440 dpi horizontal can only be achieved by the driver + (i. e. in software). The manual actually makes it fairly clear + how to do this (it requires two passes with horizontal head + movement between passes), and it is presumably possible to do + this with MicroWeave. + + + The information about how to do this is apparently available + under non-disclosure agreement (NDA). It's actually easy enough + to reverse engineer what's inside a print file with a simple + Perl script, which is supplied with the Gutenprint distribution + as tests/parse-escp2. In any event, we weren't particularly + interested in the weaving patterns Epson used. There are many + factors that go into choosing a good weaving pattern; we're + learning them as we go along. Issues such as drying time + (giving the ink a few seconds more or less to dry can have + highly visible effects) affect the quality of the output. + + + The Uniprint GhostScript driver has been able to do weaving for + a long time. It uses patterns that must be specified for each + choice of resolution and printer. We preferred an algorithmic + approach that computes a weave pattern for any given choice of + inputs. This obviously requires extensive testing; we developed + a test suite specifically for this purpose. + + + + Weaving algorithms + + I considered a few algorithms to perform the weave. The first + one I devised let me use only (jets − + distance_between_jets + 1) nozzles, or 25. This is OK in + principle, but it's slower than using all nozzles. By playing + around with it some more, I came up with an algorithm that lets + me use all of the nozzles, except near the top and bottom of the + page. + + + This still produces some banding, though. Even better quality + can be achieved by using multiple nozzles on the same line. How + do we do this? In 1440×720 mode, we're printing two + output lines at the same vertical position. However, if we want + four passes, we have to effectively print each line twice. + Actually doing this would increase the density, so what we do is + print half the dots on each pass. This produces near-perfect + output, and it's far faster than using (pseudo) + “MicroWeave”. + + + Yet another complication is how to get near the top and bottom + of the page. This algorithm lets us print to within one head + width of the top of the page, and a bit more than one head width + from the bottom. That leaves a lot of blank space. Doing the + weave properly outside of this region is increasingly difficult + as we get closer to the edge of the paper; in the interior + region, any nozzle can print any line, but near the top and + bottom edges, only some nozzles can print. We originally + handled this by using the naive way mentioned above near the + borders, and switching over to the high quality method in the + interior. Unfortunately, this meant that the quality is quite + visibly degraded near the top and bottom of the page. We have + since devised better algorithms that allow printing to the + extreme top and bottom of the region that can physically be + printed, with only minimal loss of quality. + + + Epson does not advertise that the printers can print at the very + top of the page, although in practice most of them can. The + quality is degraded to some degree, and we have observed that in + some cases not all of the dots get printed. Epson may have + decided that the degradation in quality is sufficient that + printing in that region should not be allowed. That is a valid + decision, although we have taken another approach. + + + Simple weaving algorithms + + The initial problem is to calculate the starting position of + each pass; the row number of the printer's top jet when + printing that pass. Since we assume the paper cannot be + reverse-fed, the print head must, for each pass, start + either further down the page than the previous pass or at + the same position. Each pass's start point is therefore at + a non-negative offset from the previous pass's start point. + + + Once we have a formula for the starting row of each pass, we + then turn that “inside out” to get a formula for + the pass number containing each row. + + + First, let's define how our printer works. We measure + vertical position on the paper in “rows”; the + resolution with which the printer can position the paper + vertically. The print head contains J ink jets, which are + spaced S rows apart. + + + Consider a very simple case: we want to print a page as + quickly as possible, and we mostly don't care how sparse the + printing is, so long as it's fairly even. + + + It's pretty obvious how to do this. We make one pass with + the print head, printing J lines of data, each line S rows + after the previous one. We then advance the paper by S + × J rows and print the next row. For example, if J = + 7 and S = 4, this method can be illustrated like this: + + +pass number +| row number-------> +| | 111111111122222222223333333333444444444455555555556666666666 +| 0123456789012345678901234567890123456789012345678901234567890123456789 +0 *---*---*---*---*---*---* +1 *---*---*---*---*---*---* +2 \-----------------------/ *---*---*---*---*---*- + 7 jets \---/ + 4 rows offset from one jet to the next +\---------------------------/ + 7*4=28 rows offset from one pass to the next + + + In these examples, the vertical axis can be thought of as the + time axis, with the pass number shown at the left margin, + while the row number runs horizontally. A + * shows each row printed by a + pass, and a row of - is used + to link together the rows printed by one pass of the print + head. The first pass is numbered + 0 and starts at row 0. Each + subsequent pass p starts at row p × S × J. Each + pass prints J lines, each line being S rows after the previous + one. (For ease of viewing this file on a standard terminal, + I'm clipping the examples at column 80.) + + + This method covers the whole page with lines printed evenly + S rows apart. However, we want to fill in all the other + rows with printing to get a full-density page (we're + ignoring oversampling at this stage). Where we have + previously printed a single pass, we'll now print a + “pass block”: we print extra passes to fill in + the empty rows. A naive implementation might look like + this: + + +0 *---*---*---*---*---*---* +1 *---*---*---*---*---*---* +2 *---*---*---*---*---*---* +3 *---*---*---*---*---*---* +4 *---*---*---*---*---*---* +5 *---*---*---*---*---*---* +6 *---*---*---*---*---*---* +7 *---*---*---*---*---*---* +8 *---*---*---*---*---*- +9 *---*---*---*---*---* +10 *---*---*---*---*--- +11 *---*---*---*---*-- + + + (Now you can see why this process is called + “weaving”!) + + + + Perfect weaving + + This simple weave pattern prints every row, but will give + conspicuous banding patterns for the reasons discussed + above. + + + Let's start improving this for our simple case. We can + reduce banding by making sure that any given jet never + prints a row too close to another row printed by the same + jet. This means we want to space the rows printed by a + given jet evenly down the page. In turn, this implies we + want to advance the paper by as nearly an equal amount after + each pass as possible. + + + Each pass block prints S × J lines in S passes. The + first line printed in each pass block is S × J rows + lower on the page than the first line printed in the + previous pass block. Therefore, if we advance the paper by + J rows between each pass, we can print the right number of + passes in each block and advance the paper perfectly evenly. + + + Here's what this “perfect” weave looks like: + + + start of full weave + | +0 *---*---*---*---*---*---* +1 *---*---*---*---*---*---* +2 *---*---*---*---*---*---* +3 *---*---*---*---*---*---* +4 *---*---*---*---*---*---* +5 *---*---*---*---*---*---* +6 *---*---*---*---*---*---* +7 *---*---*---*---*---*---* +8 *---*---*---*---*---*- +9 *---*---*---*-- +10 *---*--- +11 * + + + You'll notice that, for the first few rows, this weave is + too sparse. It is not until the row marked “start of + full weave” that every subsequent row is printed. We + can calculate this start position as follows: + + +start = (S − 1) × (J − 1) + + + For the moment, we will ignore this problem with the weave. + We'll consider later how to fill in the missing rows. + + + Let's look at a few more examples of perfect weaves: + + + + S = 2, J = 7, start = (2−1) × (7−1) = 6: + + starting row of full weave + | +0 *-*-*-*-*-*-* +1 *-*-*-*-*-*-* +2 *-*-*-*-*-*-* +3 *-*-*-*-*-*-* +4 *-*-*-*-*-*-* +5 *-*-*-*-*-*-* +6 *-*-*-*-*-*-* +7 *-*-*-*-*-*-* + + + + S = 7, J = 2, start = 6: + + start + | +0 *------* +1 *------* +2 *------* +3 *------* +4 *------* +5 *------* +6 *------* +7 *------* +8 *------* +9 *------* + + + + S = 4, J = 13, start = 36: + + start + | +0 *---*---*---*---*---*---*---*---*---*---*---*---* +1 *---*---*---*---*---*---*---*---*---*---*---*---* +2 *---*---*---*---*---*---*---*---*---*---*---*---* +3 *---*---*---*---*---*---*---*---*---*-- +4 *---*---*---*---*---*---*- +5 *---*---*---* + + + + S = 13, J = 4, start = 36: + + start + | +0 *------------*------------*------------* +1 *------------*------------*------------* +2 *------------*------------*------------* +3 *------------*------------*------------* +4 *------------*------------*------------* +5 *------------*------------*------------* +6 *------------*------------*------------* +7 *------------*------------*------------* +8 *------------*------------*------------* +9 *------------*------------*------------* +10 *------------*------------*----------- +11 *------------*------------*------- +12 *------------*------------*--- +13 *------------*------------ +14 *------------*-------- +15 *------------*---- +16 *------------* +17 *--------- +18 *----- +19 *- + + + + S = 8, J = 5, start = 28: + + start + | +0 *-------*-------*-------*-------* +1 *-------*-------*-------*-------* +2 *-------*-------*-------*-------* +3 *-------*-------*-------*-------* +4 *-------*-------*-------*-------* +5 *-------*-------*-------*-------* +6 *-------*-------*-------*-------* +7 *-------*-------*-------*-------* +8 *-------*-------*-------*-------* +9 *-------*-------*-------*-------* +10 *-------*-------*-------*--- +11 *-------*-------*------ +12 *-------*-------*- +13 *-------*---- +14 *------- +15 *-- + + + + S = 9, J = 5, start = 32: + + start + | +0 *--------*--------*--------*--------* +1 *--------*--------*--------*--------* +2 *--------*--------*--------*--------* +3 *--------*--------*--------*--------* +4 *--------*--------*--------*--------* +5 *--------*--------*--------*--------* +6 *--------*--------*--------*--------* +7 *--------*--------*--------*--------* +8 *--------*--------*--------*--------* +9 *--------*--------*--------*----- +10 *--------*--------*--------* +11 *--------*--------*---- +12 *--------*-------- +13 *--------*--- +14 *------- +15 *-- + + + + S = 6, J = 7, start = 30: + + start + | +0 *-----*-----*-----*-----*-----*-----* +1 *-----*-----*-----*-----*-----*-----* +2 *-----*-----*-----*-----*-----*-----* +3 *-----*-----*-----*-----*-----*-----* +4 *-----*-----*-----*-----*-----*-----* +5 *-----*-----*-----*-----*-----*-----* +6 *-----*-----*-----*-----*-----*----- +7 *-----*-----*-----*-----*---- +8 *-----*-----*-----*--- +9 *-----*-----*-- +10 *-----*- +11 * + + + + Weaving collisions + + A perfect weave is not possible in all cases. Let's look at + another example: + + + + S = 6, J = 4: + +0 *-----*-----*-----* +1 *-----*-----*-----* +2 *-----*-----*-----* +3 *-----*-----*-----* +4 ^ *-^---*-----*-----* +5 | ^ | *-^---*-----*-----* + OUCH! ^ | ^ + | | + + + Here we have a collision. Some lines printed in later + passes overprint lines printed by earlier passes. We can + see why by considering which row number is printed by a + given jet number j (numbered from 0) of a given pass, p: + + +row(p, j) = (p × J) + (j × S) + + + Because J = 4 and S = 6 have a common factor of 2, jet 2 of + pass 0 prints the same row as jet 0 of pass 3: + + +row(0, 2) = (0 × 4) + (2 × 6) = 12 +row(3, 0) = (3 × 4) + (0 × 6) = 12 + + + In fact, with this particular weave pattern, jets 0 and 1 of + pass p + 3 always overprint jets 2 and 3 of pass p. We'll + represent overprinting rows by a + ^ in our diagrams, and + correct rows by *: + + + + S = 6, J = 4: + +0 *-----*-----*-----* +1 *-----*-----*-----* +2 *-----*-----*-----* +3 ^-----^-----*-----* +4 ^-----^-----*-----* +5 ^-----^-----*-----* + + + + What makes a “perfect” weave? + + So what causes the perfect weave cases to be perfect, and + the other cases not to be? In all the perfect cases above, + S and J are relatively prime (i.e. their greatest common + divisor (GCD) is 1). As we mentioned above, S = 6 and J = 4 + have a common factor, which causes the overprinting. Where + S and J have a GCD of 1, they have no common factor other + than 1 and, as a result, no overprinting occurs. If S and J + are not relatively prime, their common factor will cause + overprinting. + + + We can work out the greatest common divisor of a pair of + natural numbers using Euler's algorithm: + + + + + Start with the two numbers: (e.g.) 9, 24 + + + + + Swap them if necessary so that the larger one comes + first: 24, 9 + + + + + Subtract the second number from the first: 15, 9 + + + + + Repeat until the first number becomes smaller: 6, 9 + + + + + Swap the numbers again, so the larger one comes first: + 9, 6 + + + + + Subtract again: 3, 6 + + + + + Swap: 6, 3 + + + + + Subtract: 3, 3 + + + + + And again: 0, 3 + + + + + When one of the numbers becomes 0, the other number is + the GCD of the two numbers you started with. + + + + + These repeated subtractions can be done with C's % + operator, so we can write this in C as follows: + + +unsigned int +gcd(unsigned int x, unsigned int y) +{ + if (y == 0) + return x; + while (x != 0) { + if (y > x) + swap (&x, &y); + x %= y; + } + return y; +} + + + gcd(S,J) will feature quite prominently in our + weaving algorithm. + + + If 0 ≤ j < J, there should only be a single pair (p, j) + for any given row number. If S and J are not relatively + prime, this assumption breaks down. (For conciseness, let G + = GCD(S,J).) + + + + S = 8, J = 6, G = 2: + +0 *-------*-------*-------*-------*-------* +1 *-------*-------*-------*-------*-------* +2 *-------*-------*-------*-------*-------* +3 *-------*-------*-------*-------*-------* +4 ^-------^-------^-------*-------*-------* +5 ^-------^-------^-------*-------*-------* + + + In this case, jets 0, 1 and 2 of pass p + 4 collide with + jets 3, 4 and 5 of pass p. + + + How can we calculate these numbers? Suppose we were to + print using fewer jets, say J / G jets. The greatest common + divisor of J / G and S is 1, enabling a perfect weave. But + to get a perfect weave, we also have to advance the paper by + a factor of G less: + + +0 *-------*-------* - - - +1 *-------*-------* - - - +2 *-------*-------* - - - +3 *-------*-------* - - - +4 *-------*-------* - - - +5 *-------*-------* - - - + + + If we left the paper advance alone, we'd get a sparse weave; + only one row can be printed every G rows: + + +0 *-------*-------* - - - +1 *-------*-------* - - - +2 *-------*-------* - - - +3 *-------*-------* - - - +4 *-------*-------* - - - +5 *-------*-------* - - - + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + These rows need filling in. + + + The rows that would have been printed by the jets we've now + omitted (shown as -) are + printed by other jets on later passes. + + + Let's analyse this. Consider how a pass p could collide + with pass 0. Pass p starts at offset p × J. Pass 0 + prints at rows which are multiples of S. If p × J is + exactly divisible by S, a collision has occurred, unless (p + ×J) ≥ J × S (which will happen when we + finish a pass block). + + + So, we want to find p and q such that p × J = q + × S and p is minimised. Then p is the number of rows + before a collision, and q is the number of jets in pass 0 + which are not involved in the collision. To do this, we + find the lowest common multiple of J and S, which is L = (J + × S) / G. L / J is the number of rows before a + collision, and L / S is the number of jets in the first pass + not involved in the collision. + + + Thus, we see that the first J / G rows printed by a given + pass are not overprinted by any later pass. However, the + rest of the rows printed by pass p are overprinted by the + first J − (J / G) jets of pass p + (S / G). We will + use C to refer to S / G, the number of rows after which a + collision occurs. + + + Another example: + + + + S = 6, J = 9, G = 3, C = S / G = 2: + +0 *-----*-----*-----*-----*-----*-----*-----*-----* +1 *-----*-----*-----*-----*-----*-----*-----*-----* +2 ^-----^-----^-----^-----^-----^-----*-----*-----* +3 ^-----^-----^-----^-----^-----^-----*-----*-----* +4 ^-----^-----^-----^-----^-----^-----*----- +5 ^-----^-----^-----^-----^-----^-- + ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ + These rows need filling in. + + + In this case, the first J − (J / G) = 9 − (9 / + 3) = 6 jets of pass p + (6 / 3) = p + 2 collide with the + last 6 jets of pass p. Only one row in every G = 2 rows is + printed by this weave. + + + + S = 9, J = 6, G = 3, C = 3: + + +0 *--------*--------*--------*--------*--------* +1 *--------*--------*--------*--------*--------* +2 *--------*--------*--------*--------*--------* +3 ^--------^--------^--------^--------*--------* +4 ^--------^--------^--------^--------*--------* +5 ^--------^--------^--------^--------*--------* + + Here, the first J - (J / G) = 6 - (6 / 3) = 4 jets of pass + p + (9 / 3) = p + 3 collide with the last 4 jets of pass + p. + + + Note that, in these overprinting cases, only rows + divisible by G are ever printed. The other rows, those + not divisible by G, are not touched by this weave. + + + We can modify our weave pattern to avoid overprinting any + rows and simultaneously fill in the missing rows. Instead + of using J alone to determine the start of each pass from + the previous pass, we adjust the starting position of some + passes. As mentioned before, we will divide the page into + pass blocks, with S passes in each block. This ensures + that the first jet of the first pass in a block prints the + row which the Jth jet of the first pass of the previous + block would have printed, if the print head had one extra + jet. + + + Looking back at an example of a perfect weave, we can + divide it into pass blocks: + + + + S = 7, J = 2, G = 1: + + imaginary extra jet + | +0 *------* * <--start of pass block 0 +1 *------* | +2 *------* | +3 *------*| +4 *-----|* +5 *---|--* +6 *-|----* + | +7 *------* <--start of pass block 1 +8 *------* +9 *------* + + + We can now calculate the start of a given pass by + reference to its pass block. The first pass of pass block + b always starts at row (b × S × J). The start + row of each of the other passes in the block are + calculated using offsets from this row. + + + For the example above, there are 7 passes in each pass + block, and their offsets are 0, 2, 4, 6, 8, 10 and 12. + The next pass block is offset S × J = 14 rows from + the start of the current pass block. + + + The simplest way to modify the “perfect” weave + pattern to give a correct weave in cases where G ≠ 1 + is to simply change any offsets which would result in a + collision, until the collision disappears. Every printed + row in the weave, as we have shown it up to now, is + separated from each of its neighbouring printed rows by G + blank rows. We will add an extra offset to each colliding + pass in such a way that we push the pass onto these + otherwise blank rows. + + + We have seen that, unless G = 1, the plain weave pattern + results in each pass colliding with the pass S / G passes + before. We will now subdivide our pass block into + subblocks, each consisting of B = S / G passes. There are + therefore G subblocks in a pass block. + + + For each subblock, the passes in that subblock have a + constant offset added to them. The offset is different + for each subblock in a block. There are many ways we can + choose the offsets, but the simplest is to make the offset + equal to the subblock number (starting from 0). + + + Thus, the passes in the first subblock in each pass block + remain at the offsets we've already calculated from J. + The passes in the second subblock each have 1 added to + their offset, the passes in the third subblock have 2 + added, and so on. Thus, the offset of pass p (numbered + relative to the start of its pass block) is p × J + + floor(p / B). + + + This gives us a weave pattern looking like this: + + + + S = 6, J = 9, G = 3, B = 2: + +0 *-----*-----*-----*-----*-----*-----*-----*-----* +1 ^ *-----*-----*-----*-----*-----*-----*-----*-----* +2 | +-> *-----*-----*-----*-----*-----*-----*-----*-----* +3 | | *-----*-----*-----*-----*-----*-----*-----*-----* +4 | | +-> *-----*-----*-----*-----*-----*-----*--- +5 | | | *-----*-----*-----*-----*-----* +6 | | | +-> *-----*-----*-----*----- +7 | | | | *-----*-----*-- + | | | start of pass block 1 + | | | (offset returns to 0) + | | start of subblock 2 (offset 2 rows) + | start of subblock 1 (following passes offset by 1 row) +start of passblock 0, subblock 0 (pass start calculated as p*J) + + + + S = 9, J = 6, G = 3, B = 3: + +0 *--------*--------*--------*--------*--------* +1 *--------*--------*--------*--------*--------* +2 *--------*--------*--------*--------*--------* +3 *--------*--------*--------*--------*--------* +4 *--------*--------*--------*--------*--------* +5 *--------*--------*--------*--------*--------* +6 *--------*--------*--------*--------*--- +7 *--------*--------*--------*------ +8 *--------*--------*--------* +9 *--------*--------*----- +10 \---/ *--------*-------- +11 small offset *--------*-- +12 *---- + + + This method of choosing offsets for subblocks can result + in an occasional small offset (as shown above) between one + pass and the next, particularly when G is large compared + to J. For example: + + + + S = 8, J = 4, G = 4, B = 2: + +0 *-------*-------*-------* +1 *-------*-------*-------* +2 *-------*-------*-------* +3 *-------*-------*-------* +4 *-------*-------*-------* +5 *-------*-------*-------* +6 *-------*-------*-------* +7 *-------*-------*-------* +8 *-------*-------*-------* +9 \/ *-------*-------*-------* + very small offset! + + + We can plot the offset against the subblock number as + follows: + + +subblock number +| offset +| | +| 0123 +0 * +1 * +2 * +3 * +0 * +1 * +2 * +3 * + + + The discontinuity in this plot results in the small offset + between passes. + + + As we said at the beginning, we want the offsets from each + pass to the next to be as similar as possible. We can fix + this by calculating the offset for a given subblock b as + follows: + + +offset(b) = 2*b , if b < ceiling(G/2) + = 2*(G-b)-1 , otherwise + + + We can visualise this as follows, for G = 10: + + +0123456789 +0 * +1 * +2 * +3 * +4 * +5 * +6 * +7 * +8 * +9 * +0 * +1 * +2 * +3 * +4 * +5 * +6 * +7 * +8 * +9 * + + + and for G = 11: + + + 1 + 01234567890 + 0 * + 1 * + 2 * + 3 * + 4 * + 5 * + 6 * + 7 * + 8 * + 9 * +10 * + 0 * + 1 * + 2 * + 3 * + 4 * + 5 * + 6 * + 7 * + 8 * + 9 * +10 * + + + This gives a weave looking like this: + + + + S = 12, J = 6, G = 6, B = 2: + +0 *-----------*-----------*-----------*-----------*-----------* +1 *-----------*-----------*-----------*-----------*-----------* +2 *-----------*-----------*-----------*-----------*-----------* +3 *-----------*-----------*-----------*-----------*--------- +4 *-----------*-----------*-----------*-----------*- +5 *-----------*-----------*-----------*------- +6 *-----------*-----------*-----------* +7 *-----------*-----------*------ +8 *-----------*-----------*-- +9 *-----------*-------- +10 *-----------*---- +11 *---------- +12 *----- + + + This method ensures that the offset between passes is + always in the range [J - 2, J + 2]. + + + (This might seem odd, but it occurs to me that a good + weave pattern might also make a good score for bell + ringers. When church bells are rung, a list of + “changes” are used. For example, if 8 bells + are being used, they will, at first, be rung in order: + 12345678. If the first change is for bells 5 and 6, the + bells will then be rung in the order 12346578. If the + second change is 1 and 2, the next notes are 21346578. + After a long list of changes, the order the bells are rung + in can become quite complex. + + + For a group of bell-ringers to change the order of the + notes, they must each either delay their bell's next ring, + hasten it, or keep it the same as the time it takes to + ring all the bells once. The length of time between each + ring of a given bell can only be changed a little each + time, though; with an ink-jet weave pattern, we want the + same to apply to the distance between passes.) + + + Finally, knowing the number of jets J and their separation + S, we can calculate the starting row of any given pass p + as follows: + +passesperblock = S +passblock = floor(p / passesperblock) +offsetinpassblock = p - passblock * passesperblock +subblocksperblock = gcd(S, J) +passespersubblock = S / subblocksperblock +subpassblock = floor(offsetinpassblock / passespersubblock) +if subpassblock < ceiling(subblocksperblock/2) + subblockoffset = 2*subpassblock +else + subblockoffset = 2*(subblocksperblock-subpassblock)-1 +startingrow = passblock * S * J + offsetinpassblock * J + subblockoffset + + + + We can simplify this down to the following: + + +subblocksperblock = gcd(S, J) +subpassblock = floor((p % S) * subblocksperblock / S) +if subpassblock * 2 < subblocksperblock + subblockoffset = 2*subpassblock +else + subblockoffset = 2*(subblocksperblock-subpassblock)-1 +startingrow = p * J + subblockoffset + + + So the row number of jet j of pass p is + + +subblocksperblock = gcd(S, J) + +subblockoffset(p) + = 2*subpassblock , if subpassblock * 2 < subblocksperblock + = 2*(subblocksperblock-subpassblock)-1 , otherwise + where + subpassblock = floor((p % S) * subblocksperblock / S) + +row(j, p) = p * J + subblockoffset(p) + j * S + + + Together with the inequality 0 ≤ j < J, we can use + this definition in reverse to calculate the pass number + containing a given row, r. Working out the inverse + definition involves a little guesswork, but one possible + result is as follows. Given a row, r, which is known to + be the first row of a pass, we can calculate the pass + number as follows: + + +subblocksperblock = gcd(S, J) +subblockoffset = r % subblocksperblock +pass = (r - subblockoffset) / J + + + If G = 1, we can determine the pass number with this + algorithm: + + +offset = r % J +pass = (r - offset) / J +while (offset % S != 0) +{ +pass-- +offset += J +} +jet = offset / S + + + Generalising, we come up with this algorithm. Given r, S + and J: + + +G = gcd(S, J) +passespersubblock = S/G +subblockoffset = r % G +subpassblock = subblockoffset / 2 , if subblockoffset % 2 == 0 + = G - (subblockoffset+1)/2 , otherwise +baserow = r - subblockoffset - (subpassblock * passespersubblock * J) +offset = baserow % J +pass = (baserow - offset) / J +while (offset % S != 0) +{ +offset += J +pass -= 1 +} +subblockretreat = floor(pass / passespersubblock) % G +pass -= subblockretreat * passespersubblock +pass += subpassblock * passespersubblock +jet = (r - subblockoffset - pass * J) / S + + + Let's look at some examples of imperfect but correct weave + patterns: + + + + S = 6, J = 4, GCD = 2, + passesperblock = S = 6, + passespersubblock = S / G = 6 / 2 = 3: + +0 *-----*-----*-----* +1 *-----*-----*-----* +2 *-----*-----*-----* +3 *-----*-----*-----* +4 *-----*-----*-----* +5 *-----*-----*-----* +6 *-----*-----*-----* +7 *-----*-----*-----* +8 *-----*-----*-----* +9 *-----*-----*-----* +10 *-----*-----*-----* +11 *-----*-----*-----* +12 *-----*-----*-----* +13 *-----*-----*-----* +14 *-----*-----*-----* +15 *-----*-----*---- +16 *-----*-----* +17 *-----*-- +18 *----- +19 *- + + + + S = 8, J = 6, G = 2, + passesperblock = S = 8, + passespersubblock= S / G = 8 / 2 = 4: + +0 *-------*-------*-------*-------*-------* +1 *-------*-------*-------*-------*-------* +2 *-------*-------*-------*-------*-------* +3 *-------*-------*-------*-------*-------* +4 *-------*-------*-------*-------*-------* +5 *-------*-------*-------*-------*-------* +6 *-------*-------*-------*-------*-------* +7 *-------*-------*-------*-------*-- +8 *-------*-------*-------*----- +9 *-------*-------*------- +10 *-------*-------*- +11 *-------*--- +12 *---- + + + + S = 6, J = 12, G = 6, + passesperblock = S = 6, + passespersubblock= S / G = 6 / 6 = 1: + +0 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*-----* +1 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*--- +2 *-----*-----*-----*-----*-----*-----*-----*-----*- +3 *-----*-----*-----*-----*-----*-----* +4 *-----*-----*-----*-----*-- +5 *-----*-----*---- +6 *----- + + + We have now solved the basic weaving problem. There are + two further refinements we need to consider: oversampling, + and filling in the missing rows at the start of the weave. + + + + + Oversampling + + By oversampling, we mean printing on the same row more than + once. There are two reasons for oversampling: to increase + the horizontal resolution of the printout and to reduce + banding. + + + Oversampling to increase horizontal resolution is necessary + because, although the printer might be able to position an + ink drop to, for example, 1/1440" horizontally, it may not + be able to lay down two such drops 1/1440" apart. If it can + print two drops 1/720" apart, 2x oversampling will be + necessary to get a 1/1440" horizontal resolution. If it can + only print two drops 1/360" apart, 4x oversampling will be + necessary for a 1/1440" horizontal resolution. The printer + enforces this “drop spacing” by only accepting + raster passes with a horizontal resolution matching the + spacing with which it can print dots, so we must print + passes at different horizontal positions if we are to obtain + a higher horizontal resolution. (Another reason it does + this may be to reduce the amount of memory needed in the + printer.) + + + Oversampling can also be done to decrease the banding + apparent in an image. By splitting a row into two or more + sets of dots (“lines”) and printing each line on + the same row, but with a different nozzle for each line, we + can get a smoother print. + + + To quantify these two kinds of oversampling, we'll introduce + two new constants: H shows how many different horizontal + offsets we want to print at (the “horizontal + oversampling”) while O shows how many times we want to + print each row, over and above the number of times necessary + for horizontal oversampling (the “extra + oversampling”). + + + It is necessary for all the lines printed by a given pass to + have the same horizontal offset, but there need not be any + relation between them in terms of extra oversampling. For + the moment, however, we will treat all oversampling as + potentially requiring this alignment; all lines in one pass + must be derived from the original row data in the same way. + Thus, we'll assume O = 1 for now. + + + So, how do we do this oversampling? In fact, it can be done + easily: advance the paper by a factor of H less between each + pass. We'll define a new variable, A, to show how much we + advance the paper between passes. Previously, we'd have + defined A = J; we now let A = J / H. This also affects our + pass blocks. Printing one pass block used to involve + advancing the paper S × J rows; it now advances the + paper (S×J) / H rows. We therefore name a group of H + pass blocks a “band”. Printing one band + involves advancing the paper S×J rows, as a pass + block did before. + + + To keep our weave pattern working correctly, so that + overprinting does not occur within a pass block, we also + have to redefine G as GCD(S,A). Here's an example of an + oversampled weave pattern: + + + + S = 4, J = 10, H = 2, A = J/H = 10/2 = 5, + G= GCD(4,5) = 1, + passesperblock = S = 4, + passespersubblock = S/G = 4/1 = 4: + +0 *---*---*---*---*---*---*---*---*---* +1 *---*---*---*---*---*---*---*---*---* +2 *---*---*---*---*---*---*---*---*---* +3 *---*---*---*---*---*---*---*---*---* +4 *---*---*---*---*---*---*---*---*---* +5 *---*---*---*---*---*---*---*---*---* +6 *---*---*---*---*---*---*---*---*---* +7 *---*---*---*---*---*---*---*---*---* +8 *---*---*---*---*---*---*---*---*---* +9 *---*---*---*---*---*---*---*---* +10 *---*---*---*---*---*---*--- +11 *---*---*---*---*---*-- +12 *---*---*---*---*- +13 *---*---*---* +14 *---*--- +15 *-- + + + Now we have to determine which line is printed by each jet on + each pass. If we number each line generated as we split up a + row, we can use these numbers. We'll number the lines in our + diagram by replacing the *s + with integers in the range [0…H−1]. + + + Overprinting occurs once per pass block, so we can simply + print pass block 0 with line 0, pass block 1 with line 1, + pass block 2 with line 2, etc, wrapping to 0 when we've run + out of lines: + + +0 0---0---0---0---0---0---0---0---0---0 +1 0---0---0---0---0---0---0---0---0---0 +2 0---0---0---0---0---0---0---0---0---0 +3 0---0---0---0---0---0---0---0---0---0 +4 1---1---1---1---1---1---1---1---1---1 +5 1---1---1---1---1---1---1---1---1---1 +6 1---1---1---1---1---1---1---1---1---1 +7 1---1---1---1---1---1---1---1---1---1 +8 0---0---0---0---0---0---0---0---0---0 +9 0---0---0---0---0---0---0---0---0 +10 0---0---0---0---0---0---0--- +11 0---0---0---0---0---0-- +12 1---1---1---1---1- +13 1---1---1---1 +14 1---1--- +15 1-- + + + + S = 4, J = 12, H = 2, A = J/H = 12/2 = 6, + G= GCD(4,6) = 2, + passesperblock= S = 4, + passespersubblock= S/G = 4/2 = 2: + +0 0---0---0---0---0---0---0---0---0---0---0---0 +1 0---0---0---0---0---0---0---0---0---0---0---0 +2 0---0---0---0---0---0---0---0---0---0---0---0 +3 0---0---0---0---0---0---0---0---0---0---0---0 +4 1---1---1---1---1---1---1---1---1---1---1---1 +5 1---1---1---1---1---1---1---1---1---1---1---1 +6 1---1---1---1---1---1---1---1---1---1---1 +7 1---1---1---1---1---1---1---1---1-- +8 0---0---0---0---0---0---0---0- +9 0---0---0---0---0---0--- +10 0---0---0---0---0 +11 0---0---0-- +12 1---1- + + + But what do we do if J is not an exact multiple of H? This + is a difficult problem, which I struggled with for quite a + few days before giving in and taking the easy (but less + elegant) way out. The easy solution is to round J / H down, + then add on the accumulated error at the end of each band. + + + + S = 4, J = 11, H = 2, A = floor(J/H) = floor(11/2) = 5, + G = GCD(4,5) = 1, + passesperblock = S = 4, + passespersubblock = S/G = 4/1 = 4 + +Band 0: +0 0---0---0---0---0---0---0---0---0---0---0 +1 0---0---0---0---0---0---0---0---0---0---0 +2 0---0---0---0---0---0---0---0---0---0---0 +3 0---0---0---0---0---0---0---0---0---0---0 +4 1---1---1---1---1---1---1---1---1---1---1 +5 1---1---1---1---1---1---1---1---1---1---1 +6 1---1---1---1---1---1---1---1---1---1---1 +7 1---1---1---1---1---1---1---1---1---1--- + +Band 1: +8 | 0---0---0---0---0---0---0---0---0- +9 \-----------------------------------------/ 0---0---0---0---0---0---0---0 +10 S*J rows 0---0---0---0---0---0--- +11 0---0---0---0---0-- +12 1---1---1---1- +13 1---1---1 +14 1--- + + + We can calculate the starting row and subpass number of a + given pass in this scheme as follows: + + +A = floor(J / H) +subblocksperblock = gcd(S, A) +subpassblock = floor((p % S) * subblocksperblock / S) +if subpassblock * 2 < subblocksperblock + subblockoffset = 2*subpassblock +else + subblockoffset = 2*(subblocksperblock-subpassblock)-1 +band = floor(P / (S * H)) +passinband = P % (S * H) +startingrow = band * S * J + passinband * A + subblockoffset +subpass = passinband / S + + + So the row number of jet j of pass p is + +A = floor(J / H) +subblocksperblock = gcd(S, A) + +subblockoffset(p) + = 2*subpassblock , if subpassblock * 2 < subblocksperblock + = 2*(subblocksperblock-subpassblock)-1 , otherwise + where + subpassblock = floor((p % S) * subblocksperblock / S) + +band(p) = floor(p / (S * H)) +passinband(p) = p % (S * H) + +row(j, p) = band(p) * S * J + passinband(p) * A + subblockoffset(p) + j * S +row(j, p) = p * J + subblockoffset(p) + j * S + + To be continued… + + + + + + diff --git a/doc/dither.texi b/doc/dither.texi deleted file mode 100644 index f0b363e..0000000 --- a/doc/dither.texi +++ /dev/null @@ -1,504 +0,0 @@ -@node Dithering, Weaving, Appendices, Appendices -@appendix Dithering -@cindex dithering - -The dithering code in @file{print-dither.c} attempts to reproduce -various shades of gray (or all colors) from only a few different inks -(black, cyan, magenta, yellow, and sometimes light cyan and light -magenta). The dots can't vary in darkness or size (except for certain -special printers), and so we need to lay down a certain fraction of dots -to represent each distinct level. - -This sounds straightforward; in practice, it isn't. Completely random -distribution of dots (simple probabilistic dithering) would create -grainy clumps and light spots. The smoothest pattern results from an -equidistant spacing of dots. Approximating this requires sophisticated -algorithms. We have two dithering algorithms, an ordered dither -algorithm that uses a grid (matrix) to decide whether to print, and a -modified Floyd-Steinberg error diffusion algorithm that uses a grid in a -slightly different way. - - -We currently have three dithering functions: - -@enumerate -@item -@code{dither_fastblack} produces pure black or white from a pre-dithered -input. This is used for two purposes: for printing pure black and white -very quickly (e. g. text), and for printing pre-screened monochrome -output that was rasterized externally. - -@item -@code{dither_black} produces black from grayscale input. The new -dither_black can produce either a single or multiple levels of black, -for printers supporting variable dot size. - -@item -@code{dither_cmyk} produces 3, 4, 5, 6, or 7 color output (CMY, CMYK, -CcMmYK, CcMmYy, CcMmYyK, or any variants). The new routine can handle -single or multiple levels of each color. -@end enumerate - -There is a choice of dithering algorithms. Four of them are based on a -basic error diffusion, with a few tweaks of my own. The other one is -`ordered'. However, they all share the basic operation in common. -First, the algorithm picks what kind of dot (if there are multiple dot -sizes and/or tones that may be picked) is the candidate to be printed. -This decision is made based on the darkness at the point being dithered. -Then, it decides whether the dot will be printed at all. What this is -based on depends upon which algorithm family we use. This is all -described in more detail below. - - -Ordered dithering works by comparing the value at a given point with the -value of a tiled matrix. If the value at the point is greater than the -value in the matrix, the dot is printed. The matrix should consist of a -set of evenly spaced points between 0 and the upper limit. The choice -of matrix is very important for print quality. A good dither matrix -will emphasize high frequency components, which distributes dots evenly -with a minimum of clumping. The matrices used here are all simple -matrices that are expanded recursively to create larger matrices with -the same kind of even point distribution. This is described below. - -Note that it is important to use different matrices for the two -sub-operations, because otherwise the choice about whether to print and -the choice of dot size will be correlated. The usual result is that the -print is either too dark or too light, but there can be other problems. - -Ordered dithering works quite well on single dot size, four color -printers. It has not been well tested on four color, variable dot size -printers. It should be avoided on six color printers. - - -Error diffusion works by taking the output error at a given pixel and -``diffusing'' it into surrounding pixels. Output error is the -difference between the amount of ink output and the input level at each -pixel. For simple printers, with one or four ink colors and only one -dot size, the amount of ink output is either 65536 (i. e. full output) -or 0 (no output). The difference between this and the input level is -the error. Normal error diffusion adds part of this error to the -adjoining pixels in the next column and the next row (the algorithm -simply scans each row in turn, never backing up). The error adds up -until it reaches a threshold (half of the full output level, or 32768), -at which point a dot is output, the output is subtracted from the -current value, and the (now negative) error is diffused similarly. - -Error diffusion works quite well in general, but it tends to generate -artifacts which usually appear as worm-like lines or areas of anomalous -density. I have devised some ways, as described below, of ameliorating -these artifacts. - -There are two sub-classes of error diffusion that we use here, `random' -and `hybrid'. One of the techniques that we use to ameliorate the -artifacts is to use a fuzzy threshold rather than the hard threshold of -half of the output level. Random error diffusion uses a pseudo-random -number to perturb the threshold, while hybrid error diffusion uses a -matrix. Hybrid error diffusion worked very poorly in 3.1.3, and I -couldn't figure out why until I found a bug. It now works very well. - -There is one additional variant (on both sub-classes), called `adaptive -hybrid' and `adaptive random'. The adaptive variant takes advantage of -the fact that the patterns that ordered dithering create are less -visible at very low densities, while the artifacts created by error -diffusion are more objectionable at low densities. At low densities, -therefore, it uses ordered dithering; at higher densities it uses error -diffusion. - - -Handling multiple output levels makes life a bit more complicated. In -principle, it shouldn't be much harder: simply figure out what the ratio -between the available output levels is and have multiple thresholds. In -practice, getting these right involves a lot of trial and error. The -other thing that's important is to maximize the number of dots that have -some ink. This will reduce the amount of speckling. More on this -later. - -The next question: how do we handle black when printing in color? Black -ink is much darker than colored inks. It's possible to produce black by -adding some mixture of cyan, magenta, and yellow---in principle. In -practice, the black really isn't very black, and different inks and -different papers will produce different color casts. However, by using -CMY to produce gray, we can output a lot more dots! This makes for a much -smoother image. What's more, one cyan, one magenta, and one yellow dot -produce less darkness than one black dot, so we're outputting that many -more dots. Better yet, with 6 or 7 color printers, we have to output even -more light ink dots. So Epson Stylus Photo printers can produce really -smooth grays---if we do everything right. The right idea is to use -CMY at lower black levels, and gradually mix in black as the overall -amount of ink increases, so the black dots don't really become visible -within the ink mass. - -Variable dot sizes are handled by dividing the range between 0 and -65536 into segments. Each segment can either represent a range in -which all of one kind of ink (color and/or dot size) is used, with -varying amounts of ink, or a transition region between inks, in which -equal numbers of dots are printed but the amount of each ink will be -adjusted throughout the range. Each range is represented by four -numbers: - -@enumerate -@item -bottom of the range -@item -top of the range -@item -value of the lighter ink -@item -value of the darker ink -@end enumerate - -In addition, the bit patterns and which type of ink are also -represented, but they don't affect the actual algorithm. - - -As mentioned above, the basic algorithm is the same whether we use -ordered dither or error diffusion. We perform the following steps on -each color of each pixel: - -@enumerate -@item -Compute the value of the particular color we're printing. This isn't -usually the pure CMY value; it's adjusted to improve saturation and to -limit the use of black in light toned regions (to avoid speckling). - -@item -Find the range containing this value. - -@item -Compute where this value lies within the range. We scale the endpoints -between 0 and 65536 for this purpose. So for example, if the bottom of -the range is 10,000 and the top of the range is 20,000, and the value is -12,500, we're 1/4 of the way between the bottom and the top of the -range, so our scale point is 16384. - -@item -Compute the ``virtual value''. The virtual value is the distance between -the value of the lighter and the value of the darker ink. So if the -value of the light ink is 32768 and the dark ink is 65536, we compute a -virtual value scaled appropriately between these two values, which is -40960 in this case. - -@item -Using either error diffusion or ordered dither, the standard threshold -is 1/2 of the value (20480 in this case). Using ordered dither, we want -to compute a value between 0 and 40960 that we will compare the input -value against to decide whether to print. Using pure error diffusion, -we would compare the accumulated error against 20480 to decide whether -to print. In practice, we use the same matrix method to decide whether -to print. The correct amount of ink will be printed this way, but we -minimize the squiggly lines characteristic of error diffusion by -dithering the threshold in this fashion. A future enhancement will -allow us to control the amount of dithering applied to the threshold. -@end enumerate - -The matrices were generated by Thomas Tonino -@email{} with an algorithm of his devising. The -algorithm is designed to maximize the spacing between dots at any given -density by searching the matrix for holes and placing a dot in the -largest available hole. It requires careful selection of initial points -to achieve good results, and is very time consuming. For best results, -a different matrix must be used for modes with 2:1 aspect ratio -(e.g. 1440x720) than for 1:1 (e. g. 720x720). It is essential with any -of these matrices that every point be used. Skipping points generates -low-frequency noise. - -It's essential to use different matrices for deciding whether to print -and for deciding what color (dark or light) to print. This should be -obvious; the decision about whether to print at all should be as -independent as possible from the decision about what color to print, -because any bias will result in excess light or dark ink being -printed, shifting the tonal balance. We actually use the same -matrices, but we shift them vertically and horizontally. Assuming -that the matrices are not self-correlated, this will yield good -results. - -The ranges are computed from a list of ink values (between 0 and 1 for -each possible combination of dot size and ink tone, where the value -represents the darkness of the ink) and the desired maximum density of -the ink. This is done in dither_set_ranges, and needs more -documentation. - - -I stated earlier that I've tweaked the basic error diffusion algorithm. -Here's what I've done to improve it: - -@enumerate -@item -We use a variable threshold to decide when to print, as discussed above. -This does two things for us: it reduces the slightly squiggly diagonal -lines that are the mark of error diffusion; and it allows us to lay down -some ink even in very light areas near the edge of the image. The -squiggly lines that error diffusion algorithms tend to generate are -caused by the gradual accumulation of error. This error is partially -added horizontally and partially vertically. The horizontal -accumulation results in a dot eventually being printed. The vertical -accumulation results in a dot getting laid down in roughly the same -horizontal position in the next row. The diagonal squigglies result -from the error being added to pixels one forward and one below the -current pixel; these lines slope from the top right to the bottom left -of the image. - -Error diffusion also results in pale areas being completely white near -the top left of the image (the origin of the printing coordinates). -This is because enough error has to accumulate for anything at all to -get printed. In very pale areas it takes quite a long time to build up -anything printable at all; this results in the bare spots. - -Randomizing the threshold somewhat breaks up the diagonals to some -degree by randomizing the exact location that the accumulated output -crosses the threshold. It reduces the false white areas by allowing -some dots to be printed even when the accumulated output level is very -low. It doesn't result in excess ink because the full output level is -still subtracted and diffused. - -Excessive randomization leads to blobs at high densities. Therefore, as -the density increases, the degree of randomization decreases. - -@item -Alternating scan direction between rows (first row is scanned left to -right, second is scanned right to left, and so on). This also helps -break up white areas, and it also seems to break up squigglies a bit. -Furthermore, it eliminates directional biases in the horizontal -direction. This isn't necessary for ordered dither, but it doesn't hurt -either. - -@item -Diffusing the error into more pixels. Instead of diffusing the entire -error into @math{(X+1, Y)} and @math{(X, Y+1)}, we diffuse it into -@math{(X+1, Y)}, @math{(X+K, Y+1)}, @math{(X, Y+1)}, @math{(X-K, Y+1)} -where @math{K} depends upon the output level (it never exceeds about 10 -dots, and is greater at higher output levels). This really reduces -squigglies and graininess. The amount of this spread can be controlled; -for line art, it should be less than for photographs (of course, line -art doesn't usually contain much light color, but the @strong{error} -value can be small in places!) In addition to requiring more -computation, a wide ink spread results in patterning at high dot -densities (note that the dot density can be high even in fairly pale -regions if multiple dot sizes are in use). - -@item -Don't lay down any colored ink if we're laying down black ink. There's -no point; the colored ink won't show. We still pretend that we did for -purposes of error diffusion (otherwise excessive error will build up, -and will take a long time to clear, resulting in heavy bleeding of ink -into surrounding areas, which is very ugly indeed), but we don't bother -wasting the ink. How well this will do with variable dot size remains -to be seen. - -@item -Oversampling. This is how to print 1440x720 with Epson Stylus printers. -Printing full density at 1440x720 will result in excess ink being laid -down. The trick is to print only every other dot. We still compute the -error as though we printed every dot. It turns out that randomizing -which dots are printed results in very speckled output. This can be -taken too far; oversampling at 1440x1440 or 1440x2880 virtual resolution -results in other problems. However, at present 1440x1440 (which is more -accurately called "1440x720 enhanced", as the Epson printers cannot -print 1440 rows per inch) does quite well, although it's slow. -@end enumerate - -What about multiple output levels? For 6 and 7 color printers, simply -using different threshold levels has a problem: the pale inks have trouble -being seen when a lot of darker ink is being printed. So rather than -just using the output level of the particular color to decide which ink -to print, we look at the total density (sum of all output levels). -If the density's high enough, we prefer to use the dark ink. Speckling -is less visible when there's a lot of ink, anyway. I haven't yet figured -out what to do for multiple levels of one color. - -You'll note that I haven't quoted a single source on color or printing -theory. I simply did all of this empirically. - -There are various other tricks to reduce speckling. One that I've seen -is to reduce the amount of ink printed in regions where one color -(particularly cyan, which is perceived as the darkest) is very pale. -This does reduce speckling all right, but it also results in strange -tonal curves and weird (to my eye) colors. - - - -Before any dither routine is used, @code{init_dither()} must be called. -This takes three arguments: the input width (number of pixels in the -input), the output width (number of pixels in the output), and a -@code{vars_t} structure containing the parameters for the print job. - -@code{init_dither()} returns a pointer to an opaque object representing -the dither. This object is passed as the first argument to all of the -dither-related routines. - -After a page is fully dithered, @code{free_dither()} must be called to -free the dither object and perform any cleanup. In the future, this may -do more (such as flush output). This arrangement permits using these -routines with programs that create multiple output pages, such as -GhostScript. - -The dithering routines themselves have a number of control knobs that -control internal aspects of the dithering process. These knobs are -accessible via a number of functions that can be called after -@code{init_dither()}. - -@itemize @bullet -@item -@code{dither_set_density()} takes a double between 0 and 1 representing -the desired ink density for printing solid colors. This is used in a -number of places in the dithering routine to make decisions. - -@item -@code{dither_set_black_density()} takes a double between 0 and 1 -representing the desired ink density for printing black ink in color -printing. This is used to balance black against color ink. By default, -this is equal to the density set by @code{dither_set_density()}. By -setting it higher, more black ink will be printed. For example, if the -base density is .4 and the black density is .8, twice as much black ink -will be printed as would otherwise be called for. - -This is not used when printing in monochrome. When printing monochrome, -the base density (@code{dither_set_density}) should be adjusted -appropriately. - -@item -@code{dither_set_ink_budget()} takes an unsigned number representing the -most ink that may be deposited at a given point. This number is -arbitrary; the limit is computed by summing the size of each ink dot, -which is supplied as a parameter in @code{dither_set_@var{X}_ranges}. -By default, there is no limit. - -@item -@code{dither_set_black_lower()} takes a double that should be between 0 -and 1 that represents the lowest density level at which black ink will -start to mix in with colored ink to generate grays. The lower this is, -the less density is required to use black ink. Setting this too low -will result in speckling from black dots, particularly on 6 and 7 color -printers. Setting this too high will make it hard to get satisfactory -black or may result in sharp transition between blended colors and -black. Default: 0.0468. - -It is important to note that since the density scale is never linear -(and since this value is adjusted via other things happening during the -dithering process) that this does not mean that 95% gray will use any -black ink. At this setting, there will be no black ink used until about -50% gray. - -This only applies to color mode. - -This value should be set lower for printers capable of variable dot -size, since more dots can be laid down close to each other. - -@item -@code{dither_set_black_upper()} takes a double that should be between 0 -and 1 that represents the highest density level at which colored inks -will be mixed to create gray. Setting this too low will result in -speckly dark grays because there is not enough ink to fill all the -holes, or sharp transition between blended colors and black if it is too -close to the value of dither_set_black_upper(). Setting this too high -will result in poor black and dark tone quality. Default: 0.5. This -results in 10% and darker grays being printed with essentially all -black. - -This only applies to color mode. - -@item -@code{dither_set_black_levels()} takes three doubles that represent the -amount of cyan, magenta, and yellow respectively that are blended to -create gray. The defaults are 1.0 for each, which is probably too low -for most printers. These values are adjusted to create a good gray -balance. Setting these too low will result in pale light and midtone -grays, with a sharp transition to darker tones as black mixes in. -Setting them too high will result in overly dark grays and use of too -much ink, possibly creating bleed-through. - -This only applies to color mode. - -@item -@code{dither_set_randomizers()} takes four integer values representing -the degree of randomness used for cyan, magenta, yellow, and black. -This is used to allow some printing to take place in pale areas. Zero -is the most random; greater than 8 or so gives very little randomness at -all. Defaults are 0 for cyan, magenta, and yellow, and 4 for black. -Setting the value for black too low will result in black speckling in -pale areas. Setting values too high will result in pale areas getting -no ink at all. - -This currently only applies to single dot size in color and black. It -should be extended to operate in variable dot size mode, although -actually applying it correctly will be tricky. - -@item -@code{dither_set_ink_darkness()} takes three doubles representing the -contribution to perceived darkness of cyan, magenta, and yellow. This -is used to help decide when to switch between light and dark inks in 6 -and 7 color printers (with light cyan, light magenta, and possibly light -yellow). Setting these too low will result in too much light ink being -laid down, creating flat spots in the darkness curves and bleed-through. -Setting them too high will result in dark ink being used in pale areas, -creating speckle. The defaults are .4 for cyan, .3 for magenta, and .2 -for yellow. Dark cyan will show against yellow much more than dark -magenta will show against cyan, since the cyan appears much darker than -the yellow. - -@item -@code{dither_set_light_inks()} takes three doubles between 0 and 1 -representing the ratio in darkness between the light and dark versions -of the inks. Setting these too low will result in too much dark ink -being used in pale areas, creating speckling, while setting them too -high will result in very smooth texture but too much use of light ink, -resulting in flat spots in the density curves and ink bleed-through. -There are no defaults. Any light ink specified as zero indicates that -there is no light ink for that color. - -This only applies to 6 and 7 color printers in single dot size color -mode, and only to those inks which have light versions (usually cyan and -magenta). - -@item -@code{dither_set_ink_spread()} takes a small integer representing the -amount of ink spread in the dither. Larger numbers mean less spread. -Larger values are appropriate for line art and solid tones; they will -yield sharper transitions but more dither artifacts. Smaller values are -more appropriate for photos. They will reduce resolution and sharpness -but reduce dither artifacts up to a point. A value of 16 or higher -implies minimum ink spread at any resolution no matter what the -overdensity. A value of 14 is typical for photos on single dot size, 6 -color printers. For 4 color printers, subtract 1 (more spread; the dots -are farther apart). For variable dot size printers, add 1 (more small -dots are printed; less spread is desirable). - -@item -@code{dither_set_adaptive_divisor()} takes a float representing the -transition point between error diffusion and ordered dither if adaptive -dithering is used. The float is a fraction of the printing density. -For example, if you wish the transition to be at 1/4 of the maximum -density (which works well on simple 4-color printers), you would pass -.25 here. With six colors and/or with multiple dot sizes, the values -should be set lower. - -@item -@code{dither_set_transition()} takes a float representing the exponent -of the transition curve between light and dark inks/dot sizes. A value -less than 1 (typical when using error diffusion) mixes in less dark -ink/small dots at lower ends of the range, to reduce speckling. When -using ordered dithering, this must be set to 1. - -@item -@code{dither_set_@var{X}_ranges_simple} (@var{X}=@samp{c}, @samp{m}, -@samp{y}, or @samp{k}) describes the ink choices available for each -color. This is useful in typical cases where a four color printer with -variable dot sizes is in use. It is passed an array of doubles between -(0, 1] representing the relative darkness of each dot size. The dot -sizes are assigned bit patterns (and ink quantities, see -@code{dither_set_ink_budget()} above) from 1 to the number of levels. -This also requires a density, which is the desired density for this -color. This density need not equal the density specified in -@code{dither_set_density()}. Setting it lower will tend to print more -dark ink (because the curves are calculated for this color assuming a -lower density than is actually supplied). - -@item -@code{dither_set_@var{X}_ranges} (@var{X}=@samp{c}, @samp{m}, @samp{y}, -or @samp{k}) describes in a more general way the ink choices available -for each color. For each possible ink choice, a bit pattern, dot size, -value (i. e. relative darkness), and whether the ink is the dark or -light variant ink is specified. -@end itemize - ----Robert Krawitz @email{} May 8, 2000 diff --git a/doc/escp2.texi b/doc/escp2.texi deleted file mode 100644 index db6f057..0000000 --- a/doc/escp2.texi +++ /dev/null @@ -1,919 +0,0 @@ -@node ESC/P2, New Printer, Weaving, Appendices -@appendix ESC/P2 -@cindex ESC/P2 - -@menu -* ESC/P2 Introduction:: What is ESC/P2 -* ESC/P2 Standard Commands:: Normal ESC/P2 commands -* ESC/P2 Remote Mode Commands:: Exotic ESC/P2 commands -* ESC/P2 Appropriate Remote Commands:: Useful remote command sequences -@end menu - -@node ESC/P2 Introduction, ESC/P2 Standard Commands, , ESC/P2 -@appendixsection Introduction to ESC/P2 -@cindex ESC/P2 introduction - -This is a description of the ESC/P2 raster commands used by the -gimp-print plugin and Ghostscript driver, which is a subset of the -complete command set. The full documents are found on -@url{http://www.ercipd.com/isv/edr_docs.htm}. Note that these are -@strong{not} always correct, and are certainly not complete. - -All ESCP/2 raster commands begin with the @samp{ESC} character (1b hex), -followed by either one or two command characters and arguments where -applicable. Older commands generally have one command character. Newer -commands usually have a @samp{(} (left parenthesis) followed by a -command character and a byte count for the arguments that follow. The -byte count is a 16-bit (2 byte) binary integer, in little endian order. - -All arguments listed here are of the form @samp{name[bytes]} where -@samp{[bytes]} is the number of bytes that comprise the argument. The -arguments themselves are usually one, two, or four byte integers, always -little endian (the least significant bits come first). Presumably this -is to match Intel processors. - -In some cases, the same command sequence identifies different versions -of the same command, depending upon the number of bytes of arguments. - - -@node ESC/P2 Standard Commands, ESC/P2 Remote Mode Commands, ESC/P2 Introduction, ESC/P2 -@appendixsection Standard commands - -@deffn {ESC/P2 command} @code{ESC @@} -Reset the printer. Discards any output, ejects the existing page, -returns all settings to their default. Always use this before printing -a page. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (G @var{BC}=1 @var{ON1}} -Turn on graphics mode. @var{ON} should be @samp{1} (turn on graphics -mode). -@end deffn - -@deffn {ESC/P2 command} @code{ESC (U @var{BC}=1 @var{UNIT1}} -Set basic unit of measurement used by printer. This is expressed in -multiples of 1/3600". At 720 DPI, @var{UNIT} is @samp{5}; at 360 DPI, -@var{UNIT} is @samp{10}. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (U @var{BC}=5 @var{PAGEUNITS1} @var{VUNIT1} @var{HUNIT1} @var{BASEUNIT2}} -Set basic units of measurement used by the printer. @var{PAGEUNIT} is -the unit of page measurement (for commands that set page dimensions and -the like). @var{VUNIT} is the unit of vertical measurement (for -vertical movement commands). @var{HUNIT} is the unit of horizontal -movement (for horizontal positioning commands). All of these units are -expressed in @var{BASEUNIT}, which is in reciprocal inches. Typically, -@var{BASEUNIT} is @samp{1440}. In 720 DPI mode, @var{PAGEUNIT}, -@var{VUNIT}, and @var{HUNIT} are all @samp{2}; in 1440x720 DPI mode, -@var{PAGEUNIT} and @var{VUNIT} are normally set to @samp{2}; @var{HUNIT} -is set to @samp{1}. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (K @var{BC}=2 @var{ZERO1} @var{GRAYMODE1}} -Set color or grayscale mode, on printers supporting an explicit -grayscale mode. These printers can be identified because they are -advertised as having more black nozzles than nozzles of individual -colors. Setting grayscale mode allows use of these extra nozzles for -faster printing. @var{GRAYMODE} should be @samp{0} or @samp{2} for -color, @samp{1} for grayscale. @var{ZERO} should always be @samp{0}. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (i @var{BC}=1 @var{MICROWEAVE1}} -If @var{MICROWEAVE} is @samp{1}, use microweave mode. On older -printers, this is used to turn on microweave; on newer printers, it -prints one row at a time. All printers support this mode. It should -only be used at 720 (or 1440x720) DPI. The Epson Stylus Pro series -indicates additional modes: - -@table @samp -@item 2 -``Full-overlap'' -@item 3 -``Four-pass'' -@item 4 -``Full-overlap 2'' -@end table - -Any of these commands can be used with the high four bits set to either -@samp{3} or @samp{0}. -@end deffn - -@deffn {ESC/P2 command} @code{ESC U @var{DIRECTION1}} -If @var{DIRECTION} is @samp{1}, print unidirectionally; if @samp{0}, -print bidirectionally. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (s @var{BC}=1 @var{SPEED1}} -On some older printers, this controls the print head speed. @var{SPEED} -of @samp{2} is 10 inches/sec; SPEED of @samp{0} or 1 is 20. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (e @var{BC}=2 @var{ZERO1} @var{DOTSIZE1}} -Choose print dotsize. @var{DOTSIZE} can take on various values, -depending upon the printer. Almost all printers support @samp{0} and -@samp{2}. Variable dot size printers allow a value of @var{16}. Other -than the value of @var{16}, this appears to be ignored at resolutions of -720 DPI and above. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (C @var{BC}=2 @var{PAGELENGTH2}} -@deffnx {ESC/P2 command} @code{ESC (C @var{BC}=4 @var{PAGELENGTH4}} -Set the length of the page in "pageunits" (see @samp{ESC (U} above). -The second form of the command allows setting of longer page lengths on -new printers (these happen to be the printers that support variable dot -size). -@end deffn - -@deffn {ESC/P2 command} @code{ESC (c @var{BC}=4 @var{TOP2} @var{LENGTH2}} -@deffnx {ESC/P2 command} @code{ESC (c @var{BC}=8 @var{TOP4} @var{LENGTH4}} -Set the vertical page margins of the page in "pageunits" (see @samp{ESC -(U} above). The margins are specified as the top of the page and the -length of the page. The second form of the command allows setting of -longer page lengths on new printers (these happen to be the printers -that support variable dot size). -@end deffn - -@deffn {ESC/P2 command} @code{ESC (S @var{BC}=8 @var{WIDTH4} @var{LENGTH4}} -Set the width and length of the printed page region in "pageunits" (see -@samp{ESC (U} above). -@end deffn - -@deffn {ESC/P2 command} @code{ESC (v @var{BC}=2 @var{ADVANCE2}} -@deffnx {ESC/P2 command} @code{ESC (v @var{BC}=4 @var{ADVANCE4}} -Feed vertically @var{ADVANCE} "vertical units" (see @samp{ESC (U} above) -from the current print head position. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (V @var{BC}=2 @var{ADVANCE2}} -@deffnx {ESC/P2 command} @code{ESC (V @var{BC}=4 @var{ADVANCE4}} -Feed vertically @var{ADVANCE} "vertical units" (see @samp{ESC (U} above) -from the top margin. -@end deffn - -@deffn {ESC/P2 command} @code{ESC ($ @var{BC}=4 @var{OFFSET4}} -Set horizontal position to @var{OFFSET} from the left margin. This -command operates on printers of the 740 class and newer (all printers -with variable dot size). -@end deffn - -@deffn {ESC/P2 command} @code{ESC $ @var{OFFSET2}} -Set horizontal position to @var{OFFSET} from the left margin. This -command operates on printers of the 740 class and newer (all printers -with variable dot size). -@end deffn - -@deffn {ESC/P2 command} @code{ESC (\ @var{BC}=4 @var{UNITS2} @var{OFFSET2}} -Set horizontal position to @var{OFFSET} from the previous print head -position, measured in @var{UNITS}. @var{UNITS} is measured in inverse -inches, and should be set to 1440 in all cases. This operates on all -1440 dpi printers that do not support variable dot size. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (/ @var{BC}=4 @var{OFFSET4}} -Set horizontal position to @var{OFFSET} from the previous print head -position, measured in "horizontal units" (see @samp{ESC (U} above). -This operates on all variable dot size printers. -@end deffn - -@deffn {ESC/P2 command} @code{ESC \ @var{OFFSET2}} -Set horizontal position to @var{OFFSET} from the previous print head -position, measured in basic unit of measurement (see @samp{ESC (U} -above). This is used on all 720 dpi printers, and can also be used on -1440 dpi printers in lower resolutions to save a few bytes. Note that -@var{OFFSET} may be negative. The range of values for this command is -between @samp{-16384} and @samp{16383}. -@end deffn - -@deffn {ESC/P2 command} @code{ESC r @var{COLOR1}} -@deffnx {ESC/P2 command} @code{ESC (r @var{BC}=2 @var{DENSITY1} @var{COLOR1}} -Set the ink color. The first form is used on four-color printers; the -second on six-color printers. @var{DENSITY} is @samp{0} for dark inks, -@samp{1} for light. @var{COLOR} is - -@table @samp -@item 0 -black -@item 1 -magenta -@item 2 -cyan -@item 4 -yellow -@end table - -This command is not used on variable dot size printers in softweave -mode. -@end deffn - -@deffn {ESC/P2 command} @code{ESC . @var{COMPRESS1} @var{VSEP1} @var{HSEP1} @var{LINES1} @var{WIDTH2} @var{data...}} - Print data. @var{COMPRESS} signifies the compression mode: - -@table @samp -@item 0 -no compression -@item 1 -TIFF compression (incorrectly documented as "run length encoded") -@item 2 -TIFF compression with a special command set. -@end table - -@var{VSEP} depends upon resolution and printer type. At 360 DPI, it is -always @samp{10}. At 720 DPI, it is normally @samp{5}5. On the ESC -600, it is @samp{40} (@math{8 * 5}). On some other printers, it varies. - -@var{HSEP1} is @samp{10} at 360 DPI and @samp{5} at 720 or 1440 DPI -(1440 DPI cannot be printed in one pass; it is printed in two passes, -with the dots separated in each pass by 1/720"). - -@var{LINES} is the number of lines to be printed. It should be @samp{1} -in microweave and 360 DPI. At 720 DPI softweave, it should be the -number of lines to be actually printed. - -@var{WIDTH} is the number of pixels to be printed in each row. -Following this command, a carriage return (@samp{13} decimal, @samp{0A} -hex) should be output to return the print head position to the left -margin. - -The basic data format is a string of bytes, with data from left to right -on the page. Within each byte, the highest bit is first. - -The TIFF compression is implemented as one count byte followed by one or -more data bytes. There are two cases: - -@enumerate -@item -If the count byte is @samp{128} or less, it is followed by @math{[count] -+ 1} data bytes. So if the count byte is @samp{0}, it is followed by 1 -data byte; if it is @samp{128}, it is followed by 129 data bytes. - -@item -If the count byte is greater than 128, it is followed by one byte. This -byte is repeated (257 - [count]) times. So if [count] is 129, the next -byte is treated as though it were repeated 128 times; if [count] is 255, -it is treated as though it were repeated twice. -@end enumerate -@end deffn - -@deffn {ESC/P2 command} @code{ESC i @var{COLOR1} @var{COMPRESS1} @var{BITS1} @var{BYTES2} @var{LINES2} @var{data...}} -Print data in the newer printers (that support variable dot size), and -Stylus Pro models. - -@var{COLOR} is the color: - -@table @samp -@item 0 -black -@item 1 -magenta -@item 2 -cyan -@item 4 -yellow -@item 17 -light magenta -@item 18 -light cyan -@end table - -@var{COMPRESS} signifies the -compression mode: - -@table @samp -@item 0 -no compression -@item 1 -TIFF compression (incorrectly documented as "run length encoded") -@item 2 -TIFF compression with a special command set. -@end table - -@var{BITS} is the number of bits per pixel. - -@var{BYTES} is the number of bytes wide for each row (@math{ceiling(BITS -* width_of_row, 8)}). Note that this is different from the @samp{ESC .} -command above. - -@var{LINES} is the number of lines to be printed. This command is the -only way to get variable dot size printing. In variable dot mode, the -size of the dots increases as the value (@samp{1}, @samp{2}, or -@samp{3}) increases. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (D @var{BC}=4 @var{BASE2} @var{VERTICAL1} @var{HORIZONTAL1}} -Set printer horizontal and vertical spacing. It only applies to -variable dot size printers in softweave mode (and possibly other high -end printers). - -@var{BASE} is the base unit for this command; it must be @samp{14400}. - -@var{VERTICAL} is the distance in these units between printed rows; it -should be (@math{separation_in_nozzles * BASE / 720}). - -@var{HORIZONTAL} is the horizontal separation between dots in a row. -Depending upon the printer, this should be either (@math{14400 / 720}) -or (@math{14400 / 360}). The Stylus Pro 9000 manual suggests that the -settings should match the chosen resolution, but that is apparently not -the case (or not always the case) on other printers. -@end deffn - -@deffn {ESC/P2 command} @code{ESC (R @var{BC}=8 00 R E M O T E 1} -Enters ``remote mode''. This is a special, undocumented command set that -is used to set up various printer options, such as paper feed tray, and -perform utility functions such as head cleaning and alignment. It does -not appear that anything here is actually required to make the printer -print. Our best understanding of what is in a remote command sequence -is described in a separate section below. -@end deffn - -@deffn {ESC/P2 command} @code{ESC 01 @@EJL [sp] ID\r\n} -Return the printer ID. This is considered a remote mode command, -although the syntax is that of a conventional command. This returns the -following information: - -@example -@@EJL ID\r -MFG:EPSON; -CMD:ESCPL2,BDC; -MDL:[printer model]; -CLS:PRINTER; -DES:EPSON [printer model]; -\f -@end example -@end deffn - -After all data has been sent, a form feed byte should be sent. - -All newer Epson printers (STC 440, STP 750) require the following -command to be sent at least once to enable printing at all. This -command specifically takes the printer out of the Epson packet mode -communication protocol (whatever that is) and enables normal data -transfer. Sending it multiple times is is not harmful, so it is -normally sent at the beginning of each job: - -@example -ESC 01@@EJL[space]1284.4[newline]@@EJL[space][space][space][space] -[space][newline]ESC@@ -@end example - -The proper sequence of initialization commands is: - -@example -magic command -ESC @ -remote mode if needed -ESC (G -ESC (U -ESC (K (if appropriate) -ESC (i -ESC U (if needed) -ESC (s (if appropriate) -ESC (e -ESC (C -ESC (c -ESC (S -ESC (D (if needed) -ESC (V (optional -- this can be accomplished with ESC (v) -@end example - -For printing, the proper sequence is: - -@example -ESC (v -@end example - -@noindent -and repeat for each color: - -@example -ESC ($ @r{or} ESC (\ @r{or} ESC \ -ESC (r @r{or} ESC r @r{(if needed---not used with @samp{ESC i} and not needed if the color -has not changed from the previous printed line)} -ESC . @r{or} ESC i ...data... [return] (0A hex) -@end example - -To terminate a page: - -@example -[formfeed] (0C hex) -ESC @@ -@end example - - -@node ESC/P2 Remote Mode Commands, ESC/P2 Appropriate Remote Commands, ESC/P2 Standard Commands, ESC/P2 -@appendixsection Remote Mode Commands - -The following description of remote commands comes out of an -examination of the sequences used by the printer utilities bundled -with the Windows drivers for the ESC740, and from other sources (some -Epson manuals, experimentation, analysis of print files). It is -largely speculative as these commands are not all documented in the -Epson documentation we have access to. Generally, newer manuals -provide more thorough documentation. - -Remote command mode is entered when the printer is sent the following -sequence: - -@example -ESC (R BC=8 00 R E M O T E 1 -@end example - -Remote mode commands are then sent, and terminated with the following -sequence: - -@example -ESC 00 00 00 -@end example - -All remote mode commands must be sent before the initial @samp{ESC (G} -command is sent. - -This introductory sequence is then followed by a sequence of commands. -Each command is constructed as follows: - -@itemize -@item Two ASCII bytes indicating the function -@item A byte count (two bytes, little-endian) for the parameters -@item Binary parameters, if any -@end itemize - -This is a list of all remote commands we have seen: - -@deffn {ESC/P2 remote command} @code{NC @var{BC}=2 00 00} -Print a nozzle check pattern -@end deffn - -@deffn {ESC/P2 remote command} @code{VI @var{BC}=2 00 00} -on my 740, prints the following: - -@example -W01286 I02382\r\n -@end example - -@noindent -probably ``version information'' -@end deffn - -@deffn {ESC/P2 remote command} @code{* AI @var{BC}=3 00 00 00} -Prints a ``printer ID''. On one 870, prints the following: -@example -51-51-50-51-49-48\r\n -@end example - -The Windows driver has a text entry field where this number can be -entered, but its purpose is unknown. -@end deffn - -@deffn {ESC/P2 remote command} @code{* LD @var{BC}=0} -Load printer defaults from NVRAM, DIP switches, and/or ROM. This -apparently does not load factory defaults per se, but any settings that -are saved. This is commonly used right at the end of each print job -after the @samp{ESC @@} printer reset command. -@end deffn - -@deffn {ESC/P2 remote command} @code{* CH @var{BC}=2 00 @var{xx}} -Perform a head cleaning cycle. The heads to clean are determined by -parameter @var{xx}: - -@table @samp -@item 00 -clean all heads -@item 01 -clean black head -@item 02 -clean color heads -@end table - -While @var{xx} = @samp{00} is probably supported by all printers, @var{xx} = -@samp{01} and @samp{02} may well not be. -@end deffn - -@deffn {ESC/P2 remote command} @code{* DT @var{BC}=3 00 @var{xx} 00} -Print an alignment pattern. There are three patterns, which are picked -via the choice of @var{xx}. Pattern @samp{0} is coarse, pattern -@samp{1} is medium, and pattern @samp{2} is fine. -@end deffn - -@deffn {ESC/P2 remote command} @code{* DU @var{BC}=6 00 @var{xx} 00 09 00 @var{yy}} -Print another alignment pattern. It isn't entirely clear what @var{xx} -and @var{yy} are, but it appears that @var{xx} takes on the values -@samp{1} and @samp{2} , and @var{yy} takes on the values @samp{0} and -@var{1}. This may only work on the 580 and/or 480. -@end deffn - -@deffn {ESC/P2 remote command} @code{* DA @var{BC}=4 00 @var{xx} 00 @var{yy}} -Set results for the first alignment pattern. @var{xx} is the pattern -(@samp{1}--@samp{3}); @var{yy} is the best choice from the set -(@samp{1}--@samp{7} or @samp{1}--@samp{15}). This does not save to -NVRAM, so when the printer is powered off, the setting will be lost. -@end deffn - -@deffn {ESC/P2 remote command} @code{* DA @var{BC}=6 00 @var{xx} 00 @var{yy} 09 00} -Set results for alternate alignment pattern. @var{xx} appears to be the -pass, and @var{yy} appears to be the optimum pattern. This does not -save to NVRAM, so when the printer is powered off, the setting will be -lost. -@end deffn - -@deffn {ESC/P2 remote command} @code{* SV @var{BC}=0} -Save the current settings to NVRAM. -@end deffn - -@deffn {ESC/P2 remote command} @code{* RS @var{BC}=1 01} -Reset the printer. -@end deffn - -@deffn {ESC/P2 remote command} @code{* IQ @var{BC}=1 01} -Get ink quantity. This requires direct access to the printer port. The -return looks like - -@example -IQ:KKCCMMYY -@end example - -@noindent -or - -@example -IQ:KKCCMMYYccmm -@end example - -@noindent -(for 4-color and 6-color printers respectively), where each pair of -digits are hexadecimal representations of percent. -@end deffn - -The following two commands have been observed on an STP 870. - -@deffn {ESC/P2 remote command} @code{* IR @var{BC}=2 00 @var{xx}} -@strong{Function unknown}. This command has been observed on an STP 870 -with @var{xx}=@samp{03} at the start of a job and @var{xx}=@samp{02} at -the end of a job (where it is followed by an @samp{LD} command). When -in roll mode, the values change to @var{xx}=@samp{01} at the start of a -job and @var{xx}=@samp{00} at the end of a job. -@end deffn - -@deffn {ESC/P2 remote command} @code{* FP @var{BC}=3 00 @var{xx} @var{yy}} -@var{xx}=@samp{00} and @var{yy}=@samp{00} selects the printer's normal -left margin (about 3mm). @var{xx}=@samp{0xb0} and @var{yy}=@samp{0xff} -selects zero-margin mode, where the left-most print position is shifted -to a point about 0.1" to the left of the left-hand edge of the paper, -allowing printing up to (and off) the left-hand edge of the paper. -@end deffn - -The commands below are partially documented in the Stylus Pro 9000 -manual. Much of this information is interpreted; none is tested. - -@deffn {ESC/P2 remote command} @code{* SN @var{BC}=3 00 @var{xx} @var{yy}} -Select Mechanism Sequence. @var{xx} controls which sub-operation is -performed. @var{xx}=@samp{00} selects the ``Feed paper sequence -setting''. @var{yy} can take on the following values (on the STP 870, -at any rate): - -@table @samp -@item 0 -default -@item 1 -plain paper -@item 2 -postcards -@item 3 -film (photo quality glossy film, transparencies) -@item 4 -envelopes -@item 5 -plain paper (fast load) -@item 6 -back light film (although this has been observed with heavyweight matte -paper) -@item 7 -matte paper (observed with 360 dpi inkjet paper, and photo quality -inkjet paper) -@item 8 -photo paper -@end table - -Experimentation suggests that this setting changes details of how the -printers' cut sheet feeder works, presumably to tune it for different -types of paper. - -@var{xx}=@samp{01} controls the platen gap setting; @var{yy}=@samp{00} -is the default, @var{yy}=@samp{1} or @samp{2} are higher settings. - -@var{xx}=@samp{02} controls paper loading speed (@var{yy}=@samp{0} is -normal, @samp{1} is fast, @samp{2} is slow). It appears that @samp{1} -is used when printing on ``plain paper'', ``360dpi ink jet paper'' or -``ink jet transparencies'', and @var{yy}=@samp{00} for all other paper -type settings. - -@var{xx}=@samp{07} controls duplex printing for printers with that -capability (@var{yy}=@var{0} is default, for non-duplex printing; -@samp{1} is front side of the paper, and @var{2} is back side). - -@var{xx}=@samp{09} controls zero margin printing on the printers with -the capability of printing zero-margin on all sides (Stylus Photo -780/790, 890, and 1280/1290). @var{yy}=@samp{0} is the default; -@samp{1} enables zero margin printing. -@end deffn - -@deffn {ESC/P2 remote command} @code{* PP @var{BC}=3 00 @var{xx} @var{yy}} -Set Paper Path. @var{xx}=@samp{2} indicates manual feed, -@var{xx}=@samp{3} is for roll paper. @var{yy} selects ``paper path -number''. -@end deffn - -@deffn {ESC/P2 remote command} @code{* AC @var{BC}=2 00 @var{xx}} -Set Auto Cutting State. @var{xx}=@samp{0} selects auto cutting off, -@var{xx}=@samp{1} selects auto cutting on, and @var{xx}=@samp{2} -indicates horizontal print page line on. It appears that with auto -cutting on, roll paper is cut automatically at the point a formfeed -character is sent. The formfeed character is normally used to eject a -page; with this turned on, it also cuts the roll paper. Horizontal -print page line on prints a narrow line of black dots at the position -the paper should be cut manually. -@end deffn - -@deffn {ESC/P2 remote command} @code{* DR @var{BC}=4 00 xx @var{DT2}} -Set Drying Time. @var{xx}=@samp{00} sets the drying time ``per scan'' -(per pass?); @var{xx}=@samp{01} sets the drying time per page. @var{DT} -indicates the drying time, which is in seconds if page mode is used and -in milliseconds if scan mode is used. @var{DT} must not exceed 3600 -seconds in per-page mode and 10000 milliseconds in per-scan mode. -@end deffn - -@deffn {ESC/P2 remote command} @code{* IK @var{BC}=2 00 @var{xx}} -Select Ink Type. @var{xx}=@samp{00} selects dye ink. Pigment ink is -apparently selected by @var{xx}=@samp{01}. This probably does not apply -to the consumer-grade printers. -@end deffn - -@deffn {ESC/P2 remote command} @code{* PZ BC=2 00 xx} -Set Pause After Printing. @var{xx}=@samp{00} selects no pause after -printing; @var{xx}=@samp{01} selects pause after printing. If turned -on, the printer is paused after the page is ejected (by the FF -byte). If cutting is turned on, the printer is paused @strong{after} -the cutting or printing of the horizontal cut line. -@end deffn - -@deffn {ESC/P2 remote command} @code{* EX @var{BC}=6 00 00 00 00 0x14 @var{xx}} -Set Vertical Print Page Line Mode. @var{xx}=@samp{00} is off, -@var{xx}=@samp{01} is on. If turned on, this prints vertical trim lines -at the left and right margins. -@end deffn - -@deffn {ESC/P2 remote command} @code{* EX @var{BC}=6 00 00 00 00 0x05 @var{xx}} -Set Roll Paper Mode. If @var{xx} is @samp{0}, roll paper mode is off; -if @var{xx} is @samp{1}, roll paper mode is on. -@end deffn - -@deffn {ESC/P2 remote command} @code{* EX @var{BC}=3 00 @var{xx} @var{yy}} -Appears to be a synonym for the @samp{SN} command described above. -@end deffn - -@deffn {ESC/P2 remote command} @code{* PH @var{BC}=2 00 @var{xx}} -Select Paper Thickness. Set the paper thickness @var{xx} in .1 mm -units. This must not exceed 0x10 (1.6 mm). If the thickness is set -"more than" .6 mm (which probably means "at least" .6 mm, since the -other case reads "less than 0.5 mm"), the platen gap is set high -irrespective of the @samp{SN} command. -@end deffn - -@deffn {ESC/P2 remote command} @code{* PM @var{BC}=2 00 00} -@strong{Function unknown}. Used on the STC 3000 at least when using roll -feed, and on the STP 870 in all print files analysed to date. -@end deffn - -@deffn {ESC/P2 remote command} @code{* ST @var{BC}=2 00 @var{xx}} -Epson's STP 750/1200 programming guide refers to the @samp{ST} command -as ``Set printer state reply''. If @var{xx} is @samp{0} or @samp{2}, -the printer will not send status replies. If @var{xx} is @samp{1} or -@samp{3}, the printer will send status replies. The status replies -consist of state, error codes, ink leve, firmware version, and warning -status. - -The actual reply is documented as - -@example -@@BDC ST\r -ST: xx; -[ER: yy;] -IQ: n1n2n3n4; -[WR: w1,w2...;] -RV: zz; -AI:CW:02kkccmmyy, MI:mm -[TC:tttt;] -INK:...; -\f -@end example - -@noindent -(@samp{\r} is carriage return; @samp{\n} is newline; @samp{\f} is -formfeed.) - -@samp{ST} is the printer status: - -@table @samp -@item 00 -Error -@item 01 -Self-test -@item 02 -Busy -@item 03 -Waiting while printing -@item 04 -Idle -@item 07 -Cleaning/filling ink heads -@item 08 -Not yet initialized/filling heads -@end table - -@samp{ER}, if provided, is the error status: - -@table @samp -@item 00 -Fatal error -@item 01 -Interface not selected -@item 04 -Paper jam -@item 05 -Out of ink -@item 06 -Paper out -@end table - -@samp{IQ} is the amount of ink left, as a (decimal!) percentage -expressed in hexadecimal. The values are black, cyan, magenta, and -yellow (presumably 6-color printers supply light cyan and light magenta -inks as additional parameters). - -@samp{WR}, if provided, is the warning status: - -@table @samp -@item 10 -Black ink low -@item 11 -Cyan -@item 12 -Magenta -@item 13 -Yellow -@item 14 -Light cyan (presumably) -@item 15 -Light magenta (presumably) -@end table - -@samp{RV} is the firmware revision (one byte ASCII). - -@samp{AI} is actuator information. These are two byte ASCII codes that -indicate ``ink weight rank ID'' of KCMY, respectively. - -@samp{TC}, if provided, is the total time of cleaning or ink filling (?). - -@samp{INK:} and @samp{MI} are @strong{not documented}. -@end deffn - -@deffn {ESC/P2 remote command} @code{* SM @var{BC}=2 00 @var{xx}} -Set Status Reply Rate. @var{xx} is the repeat interval in seconds. If -@var{xx} is @samp{0}, the status is returned only when the printer's -state changes. -@end deffn - -@deffn {ESC/P2 remote command} @code{* ST @var{BC}=1 01} -Reply Printer Status. The reply is formatted as - -@example -@@BDC PS\r\nST:@var{xx};\f -@end example - -(@samp{\r} is carriage return; @samp{\n} is newline; @samp{\f} is -formfeed). If @var{xx} (the reply value) is @samp{0} or @samp{2}, -automatic status update is disabled; if @samp{1} or @samp{3}, it is -enabled. -@end deffn - -@deffn {ESC/P2 remote command} @code{* SM @var{BC}=1 01} -Reply Printer Status Rate. The reply is formatted as - -@example -@@BDC PS\r\nST:xx;\f -@end example - -(@samp{\r} is carriage return; @samp{\n} is newline; @samp{\f} is -formfeed). See @samp{SM @var{BC}=2} above for the meaning of the return -value. -@end deffn - -@deffn {ESC/P2 remote command} @code{* ?? @var{BC}=@var{xx} @var{y}[1] @dots{} @var{y}[xx]} -Echo Parameters (perhaps better described as Echo Commands). The -command string is executed (it would appear from the documentation), and -the string sent is returned using a sequence similar to that described -in the @samp{ST @var{BC}=1} and @samp{SM @var{BC}=1} commands. Note -that in this case the number of bytes is variable! -@end deffn - -@deffn {ESC/P2 remote command} @code{* SM @var{BC}=2 00 02} -@strong{Function unknown}. Used on the STC 3000 at least when using -roll feed. -@end deffn - - -@node ESC/P2 Appropriate Remote Commands, , ESC/P2 Remote Mode Commands, ESC/P2 -@appendixsection Appropriate Remote Commands - -All of the remote commands described above are wrapped up with the usual -boilerplate. The files always start with @samp{00 00 00} and the -``magic'' command described above, then two @samp{ESC @@}s to reset the -printer. The remote command sequences come next; if they print anything -that is usually followed by a @samp{FF} (0C hex) character to feed the -page, then the file ends with another two @samp{ESC @@}s to get back to -the ground state. - -An alignment sequence goes like this: - -@enumerate -@item Host uses @samp{DT} to print an alignment sheet -@item User eyeballs the sheet to see which is the best aligned pattern. -@item Host sends a @samp{DA} command indicating which pattern the user chose -@item If the user said "realign", meaning he isn't done yet, go to step 1 -@item We are done: host sends a @samp{SV} command and exits -@end enumerate - -The sequence used (by the STC 3000, at least) to print from the roll -feed is (with byte count omitted) - -@example - PM 00 00 - SN 00 00 00 - EX 00 00 00 00 05 01 - ST 00 01 - SM 00 02 -@end example - -The sequence used by the STP 870 to print on plain paper is - -@example - PM 00 00 - IR 00 03 - SN 00 00 01 - SN 00 01 00 - SN 00 02 01 - EX 00 00 00 00 05 00 - FP 00 00 00 -@end example - -@noindent -and the job finishes with - -@example - IR 00 02 - LD -@end example - -For different paper type settings on the STP 870, the arguments to -@samp{SN} vary. The arguments to the first and third @samp{SN} commands -are as outlined in the description of the @samp{SN} command above; the -arguments to the second (``platen gap'') are @samp{00 01 01} for thick -papers (``matte paper---heavyweight'', ``photo paper'' and ``premium -glossy photo paper'') and @samp{00 01 00} for all others. - -For roll-mode printing, the STP 870's sequence changes as follows. -@samp{IR}'s arguments become @samp{00 01} in the header, and @samp{00 -00} after the job, and @samp{EX}'s last argument changes from @samp{00} -to @samp{01}. - -For zero-margin printing on the STP 870, the arguments to @samp{FP} become -@samp{00 0xb0 0xff}. This moves the origin about 5.5mm to the left, to a -point one tenth of an inch to the left of the left-hand edge of the -paper, allowing printing right up to (and beyond) the edge of the -paper. Some printers (at least the STP 870) include white absorbent -pads at the left margin position and other positions (89mm and 100mm -on the STP 870) to soak up ink which misses the edge of the paper. -Printing off the edge of paper of a width not aligned with a pad could -result in making a mess of the inside of the printer and ink getting -on the reverse of the paper. - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/functions.texi b/doc/functions.texi deleted file mode 100644 index 773d4fd..0000000 --- a/doc/functions.texi +++ /dev/null @@ -1,744 +0,0 @@ -@node Functions, Programs, Integrating libgimpprint, Top -@chapter Functions -@cindex functions - -This section of the manual is a complete reference to all of the functions -comprising libgimpprint, with examples. - -All of the libgimpprint functions can be declared by including the master -libgimpprint header, @file{}. This should be done in -every source file that uses gimpprint functions by putting - -@example -#include -@end example - -@noindent -at the top of each file. - -@menu -* Main functions:: Essential functions every program must call. -* stp_vars_t functions:: Using stp_vars_t. -* Dither functions:: Dither algorithms. -* Options functions:: Options. -* Paper functions:: Paper size and orientation. -* Printer functions:: Printer selection. -* Settings functions:: Getting and changing settings. -* Version functions:: Getting libgimpprint version information. -@end menu - -@node Main functions, stp_vars_t functions, , Functions -@section Main functions -@cindex main functions - -These functions are essential to the correct functioning of -libgimpprint. All or most other functions in the library depend -absolutely upon them. In the case of @code{stp_init}, this function -@emph{must} be called before any of the other functions in the library. - - -@cindex initialising libgimpprint -@deftypefun int stp_init (void) - -This function initialises the libgimpprint library. It must be called before -any of the other libgimpprint functions are called. It is responsible for -setting up message catalogues (for internationalisation). This function -may be called more than once, at any stage during the execution of a -program. - -It returns zero on success, nonzero on failure. -@end deftypefun - -@code{stp_init} might be used as follows: - -@example -int -main (int argc, char **argv) -@{ - stp_init(); - - @dots{} - -@} -@end example - -@cindex memory allocation -@deftypefun {void *} stp_malloc (size_t @var{size}) - -Where @var{size} is the amount of memory to allocate (in bytes). - -This function allocates memory. It will always return a pointer to the -allocated memory. It will not return on failure. - -It returns a pointer to the allocated memory. -@end deftypefun - -@node stp_vars_t functions, Dither functions, Main functions, Functions -@section @code{stp_vars_t} functions -@cindex @code{stp_vars_t} functions - -@deftypevr {Data type} {void *} stp_vars_t -This is an opaque data type, whose structure is not visible to the -user. This object contains all of the information about settings for -a given printer, such as color (contrast, brightness), the type of -printer, the dithering algorithm in use, and so forth. Please see the -@code{stp_set_*} and @code{stp_get_*} functions below for the -accessors and mutators for this data type. -@end deftypevr - - -@deftypefun stp_vars_t stp_allocate_vars (void) -Allocate a new @code{stp_vars_t} with default settings for all members. -@end deftypefun - -@deftypefun void stp_copy_vars (stp_vars_t @var{vd}, const stp_vars_t @var{vs}) -Copy the settings from @var{vs} to @var{vd}. -@end deftypefun - -@deftypefun stp_vars_t stp_allocate_copy (const stp_vars_t @var{vs}) -Allocate a new @code{stp_vars_t}, copying settings from @var{vs}. -@end deftypefun - -@deftypefun void stp_free_vars (stp_vars_t @var{vv}) -Free all resources associated with @var{vv}. @var{vv} must not be -used in any way following this call. -@end deftypefun - -@deftypefun {const char *} stp_get_output_to (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_output_to (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_output_to_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the command that this job will be printed to. -This is used by front ends; the driver library always prints to a -stream provided by the front end and never uses this directly. -@end deftypefun - -@deftypefun {const char *} stp_get_driver (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_driver (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_driver_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the driver (the type of printer). -@end deftypefun - -@deftypefun {const char *} stp_get_ppd_file (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_ppd_file (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_ppd_file_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the PPD file used by this print job. Normally, -only PostScript printers use PPD files. -@end deftypefun - -@deftypefun {const char *} stp_get_resolution (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_resolution (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_resolution_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the resolution to be used in this print job. Different -drivers support different resolutions, and many drivers support -multiple quality settings for a given DPI resolution. -@end deftypefun - -@deftypefun {const char *} stp_get_media_size (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_media_size (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_media_size_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the media size (e. g. A3, letter, legal) to be -used in this print job. -@end deftypefun - -@deftypefun {const char *} stp_get_media_type (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_media_type (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_media_type_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the media type (e. g. plain paper, photo -quality inkjet paper) to be used in this print job. -@end deftypefun - -@deftypefun {const char *} stp_get_media_source (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_media_source (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_media_source_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the media source (e. g. manual feed, tray A) to -be used in this print job. -@end deftypefun - -@deftypefun {const char *} stp_get_ink_type (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_ink_type (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_ink_type_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the name of the ink type (e. g. four color standard, six -color photo) to be used in this print job. -@end deftypefun - -@deftypefun {const char *} stp_get_dither_algorithm (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_dither_algorithm (stp_vars_t @var{vv}, const char *@var{val}) -@deftypefunx void stp_set_dither_algorithm_n (stp_vars_t @var{vv}, const char *@var{val}, int @var{bytes}) -Get or set the dither algorithm to be used in this print job. -@end deftypefun - -@deftypefun int stp_get_output_type (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_output_type (stp_vars_t @var{vv}, int @var{val}) -Get or set the output type (color, grayscale, black and white) for -this print job. -@end deftypefun - -@deftypefun int stp_get_orientation (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_orientation (stp_vars_t @var{vv}, int @var{val}) -Get or set the paper orientation for this print job. -@end deftypefun - -@deftypefun int stp_get_left (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_left (stp_vars_t @var{vv}, int @var{val}) -Get or set the left margin (in 1/72 inch units, or "points") for this -print job. -@end deftypefun - -@deftypefun int stp_get_top (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_top (stp_vars_t @var{vv}, int @var{val}) -Get or set the top margin (in 1/72 inch units, or "points") for this -print job. -@end deftypefun - -@deftypefun int stp_get_image_type (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_image_type (stp_vars_t @var{vv}, int @var{val}) -Get or set the image type (line art, continuous tone, solid colors) -for this print job. -@end deftypefun - -@deftypefun int stp_get_unit (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_unit (stp_vars_t @var{vv}, int @var{val}) -Get or set the base unit (inches or centimeters) for this print job. -This is provided for front ends; the package itself uses points as its -unit of measurement. -@end deftypefun - -@deftypefun int stp_get_page_width (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_page_width (stp_vars_t @var{vv}, int @var{val}) -Get or set the width of the printed region of the page. -@end deftypefun - -@deftypefun int stp_get_page_height (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_page_height (stp_vars_t @var{vv}, int @var{val}) -Get or set the height of the printed region of the page. -@end deftypefun - -@deftypefun int stp_get_input_color_model (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_input_color_model (stp_vars_t @var{vv}, int @var{val}) -Get or set the color model (currently RGB or CMY) of the input to the -driver. Most front ends will use RGB input. -@end deftypefun - -@deftypefun int stp_get_output_color_model (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_output_color_model (stp_vars_t @var{vv}, int @var{val}) -Get or set the color model (currently RGB or CMY) of the output of the -driver. Most printers will use CMY. -@end deftypefun - -@deftypefun float stp_get_scaling (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_scaling (stp_vars_t @var{vv}, float @var{val}) -Get or set the scaling factor of the image. If the scaling factor is -greater than 0, it is interpreted as a percent (5.0-100.0 is the valid -range) of the printable page region, using the more restrictive axis. -For example, if the image to be printed should be 3" (wide) x 2" -(high), and the printable page region is 8"x10.5", the scale factor -should be 37.5 (3"/8"). - -If the scaling is less than zero, it is interpreted as pixels per -inch. - -It is likely that in the future this will be migrated into the front -end. There is no particular reason why the driver needs to know about -this. -@end deftypefun - -@deftypefun float stp_get_gamma (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_gamma (stp_vars_t @var{vv}, float @var{val}) -Get or set the gamma of the print job (valid range: 0.1-4.0; default -1.0). Note that this is not the absolute gamma used by the print job; -it is scaled by the gamma appropriate for the printer. This is true -for all of the numerical parameters. -@end deftypefun - -@deftypefun float stp_get_brightness (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_brightness (stp_vars_t @var{vv}, float @var{val}) -Get or set the brightness of the print job (valid range: 0.0-2.0; -default: 1.0). Any value other than 1.0 will result in some possible -values not being used; if brightness is less than 1.0, no output point -will be pure white, and if brightness is greater than 1.0, no output -point will be pure black (or cyan, or magenta, or yellow). -@end deftypefun - -@deftypefun float stp_get_contrast (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_contrast (stp_vars_t @var{vv}, float @var{val}) -Get or set the contrast of the print job (valid range: 0.0-4.0; -default: 1.0). Values less than 1.0 will result in pure white or -black not being used (0.0 will make the entire image 50% gray). -Values greater than 1.0 do not hard clip; while the contrast in the -midtones increases, it only asymptotically approaches the limits. -@end deftypefun - -@deftypefun float stp_get_cyan (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_cyan (stp_vars_t @var{vv}, float @var{val}) -Get or set the cyan adjustment of the print job (range: 0.0-4.0; default: -1.0). This currently adjusts the gamma of the cyan curve. It is -scaled by the cyan adjustment for the printer model in question. -@end deftypefun - -@deftypefun float stp_get_magenta (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_magenta (stp_vars_t @var{vv}, float @var{val}) -Get or set the magenta adjustment of the print job (range: 0.0-4.0; default: -1.0). This currently adjusts the gamma of the magenta curve. It is -scaled by the magenta adjustment for the printer model in question. -@end deftypefun - -@deftypefun float stp_get_yellow (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_yellow (stp_vars_t @var{vv}, float @var{val}) -Get or set the yellow adjustment of the print job (range: 0.0-4.0; default: -1.0). This currently adjusts the gamma of the yellow curve. It is -scaled by the yellow adjustment for the printer model in question. -@end deftypefun - -@deftypefun float stp_get_saturation (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_saturation (stp_vars_t @var{vv}, float @var{val}) -Get or set the saturation of the print job (range: 0.0-9.0; default: 1.0). -Saturation of 0.0 produces grayscale output using composite (CMY or -CMYK, as appropriate for the printer) color. -@end deftypefun - -@deftypefun float stp_get_density (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_density (stp_vars_t @var{vv}, float @var{val}) -Get or set the density of the print job (range: 0.0-2.0; default: -1.0). This adjusts the amount of ink deposited in a linear fashion -for all channels. It is scaled by the density appropriate for the -choice of printer, resolution, paper type, and other factors that the -driver may deem appropriate. -@end deftypefun - -@deftypefun float stp_get_app_gamma (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_app_gamma (stp_vars_t @var{vv}, float @var{val}) -Get or set the gamma of the input (i. e. what the driving application -uses). -@end deftypefun - -@deftypefun {void *} stp_get_lut (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_lut (stp_vars_t @var{vv}, void *@var{val}) -Get or set the color lookup table for the print job. This is useful -outside of the library for computing a preview of the printed result. -The lookup table itself should be treated as an opaque handle. -@end deftypefun - -@deftypefun {unsigned char *} stp_get_cmap (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_cmap (stp_vars_t @var{vv}, unsigned char *@var{val}) -Get or set the color map for the print job. This is a table of R,G,B -values for 8-bit indexed input. This may be moved outside of the -library in the future; in this case, the front end would be required -to do its own mapping and supply true-color RGB to the driver. -@end deftypefun - -The following methods are used to perform output and error reporting -by the driver. The driver supplies a stream of output bytes; the -front end is responsible for providing methods that accept this output -and handle it appropriately. - -@deftypefun stp_outfunc_t stp_get_outfunc (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_outfunc (const stp_vars_t @var{vv}, stp_outfunc_t @var{val}) -@deftypefunx {void *} stp_get_outdata (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_outdata (stp_vars_t @var{vv}, void *@var{val}) - -@deftypevr {Data type} {} stp_outfunc_t -@example -typedef void (*stp_outfunc_t) (void *data, - const char *buffer, size_t bytes); -@end example -@end deftypevr -Get or set the output function the driver will use. The front end -must supply a suitable function for accepting the output data. The -@code{stp_set_outdata} method provides a way of passing an appropriate -object to the output function. -@end deftypefun - -@deftypefun stp_outfunc_t stp_get_errfunc (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_errfunc (const stp_vars_t @var{vv}, stp_outfunc_t @var{val}) -@deftypefunx {void *} stp_get_errdata (const stp_vars_t @var{vv}) -@deftypefunx void stp_set_errdata (stp_vars_t @var{vv}, void *@var{val}) -Get or set the error reporting function that the driver will use. -This is used to report errors or debugging information, and must be -supplied. A typical errfunc will simply print whatever it's passed to -stderr. -@end deftypefun - -/* - * hue_map is an array of 49 doubles representing the mapping of hue - * from (0..6) to (0..6) in increments of .125. The hue_map is in CMY space, - * so hue=0 is cyan. - */ -typedef void (*stp_convert_t)(const stp_vars_t vars, const unsigned char *in, - unsigned short *out, int *zero_mask, - int width, int bpp, const unsigned char *cmap, - const double *hue_map, const double *lum_map, - const double *sat_map); - -@deftypefun void stp_merge_printvars (stp_vars_t @var{user}, const stp_vars_t @var{print}) - -@end deftypefun - -@deftypefun void stp_allocate_lut (stp_vars_t @var{v}, size_t @var{steps}) - -@end deftypefun - -@deftypefun void stp_free_lut (stp_vars_t @var{v}) - -@end deftypefun - -@deftypefun void stp_compute_lut (stp_vars_t @var{v}, size_t @var{steps}) - -@end deftypefun - - -@node Dither functions, Options functions, stp_vars_t functions, Functions -@section Dither functions -@cindex dither functions - -@deftypefun size_t stp_dither_algorithm_count (void) - -@end deftypefun - -@deftypefun {const char *} stp_dither_algorithm_name (int @var{id}) - -@end deftypefun - -@deftypefun {const char *} stp_default_dither_algorithm (void) - -@end deftypefun - - - -@node Options functions, Paper functions, Dither functions, Functions -@section Options functions -@cindex options functions - -@deftypevr {Data type} {void *} stp_option_t -This is an opaque data type, whose structure is not visible to the -user. -@end deftypevr - -@deftypefun void stp_set_option(stp_vars_t @var{v}, const char *@var{name}, const char *@var{data}, int @var{bytes}) - -@end deftypefun - -@deftypefun void stp_clear_option (stp_vars_t @var{v}, const char *@var{name}) - -@end deftypefun - -@deftypefun void stp_clear_all_options (stp_vars_t @var{v}) - -@end deftypefun - -@deftypefun size_t stp_option_count (const stp_vars_t @var{v}) - -@end deftypefun - -@deftypefun {const stp_option_t} stp_get_option_by_index (const stp_vars_t @var{v}, size_t @var{idx}) - -@end deftypefun - -@deftypefun {const stp_option_t} stp_get_option_by_name (const stp_vars_t @var{v}, const char *@var{name}) - -@end deftypefun - -@deftypefun {const char *} stp_option_data (const stp_option_t @var{option}) -@strong{Note}: not null delimited! -@end deftypefun - -@deftypefun {const char *} stp_option_name (const stp_option_t @var{option}) - -@end deftypefun - -@deftypefun size_t stp_option_length (const stp_option_t @var{option}) - -@end deftypefun - - -@node Paper functions, Printer functions, Options functions, Functions -@section Paper functions -@cindex paper functions - -@deftypevr {Data type} {void *} stp_papersize_t -This is an opaque data type, whose structure is not visible to the -user. -@end deftypevr - -@deftypevr {Data type} {} stp_papersize_unit_t -@example -typedef enum papersize_unit -@{ - PAPERSIZE_ENGLISH, - PAPERSIZE_METRIC -@} stp_papersize_unit_t; -@end example -@end deftypevr - -@deftypefun int stp_known_papersizes (void) - -@end deftypefun - -@deftypefun {const stp_papersize_t} stp_get_papersize_by_name (const char *@var{name}) - -@end deftypefun - -@deftypefun {const stp_papersize_t} stp_get_papersize_by_size (int @var{l}, int @var{w}) - -@end deftypefun - -@deftypefun {const stp_papersize_t} stp_get_papersize_by_index (int @var{index}) - -@end deftypefun - -@deftypefun {const char *} stp_papersize_get_name (const stp_papersize_t @var{pt}) - -@end deftypefun - -@deftypefun unsigned stp_papersize_get_width (const stp_papersize_t @var{pt}) - -@end deftypefun - -@deftypefun unsigned stp_papersize_get_height (const stp_papersize_t @var{pt}) - -@end deftypefun - -@deftypefun unsigned stp_papersize_get_top (const stp_papersize_t @var{pt}) - -@end deftypefun - -@deftypefun unsigned stp_papersize_get_left (const stp_papersize_t @var{pt}) - -@end deftypefun - -@deftypefun unsigned stp_papersize_get_bottom (const stp_papersize_t @var{pt}) - -@end deftypefun - -@deftypefun unsigned stp_papersize_get_right (const stp_papersize_t @var{pt}) - -@end deftypefun - - -@deftypefun stp_papersize_unit_t stp_papersize_get_unit (const stp_papersize_t @var{pt}) - -@end deftypefun - - -@node Printer functions, Settings functions, Paper functions, Functions -@section Printer functions -@cindex printer functions - -@deftypevr {Data type} {void *} stp_printer_t -This is an opaque data type, whose structure is not visible to the -user. -@end deftypevr - -@deftypefun int stp_known_printers (void) - -@end deftypefun - - -@deftypefun {const stp_printer_t} stp_get_printer_by_index (int @var{idx}) - -@end deftypefun - - -@deftypefun {const char *} stp_printer_get_long_name (const stp_printer_t @var{p}) - -@end deftypefun - - -@deftypefun {const stp_printer_t} stp_get_printer_by_long_name (const char *@var{long_name}) - -@end deftypefun - - -@deftypefun {const stp_printer_t} stp_get_printer_by_driver (const char *@var{driver}) - -@end deftypefun - - -@deftypefun int stp_get_printer_index_by_driver (const char *@var{driver}) - -@end deftypefun - - -@deftypefun {const char *} stp_printer_get_driver (const stp_printer_t @var{p}) - -@end deftypefun - - -@deftypefun int stp_printer_get_model (const stp_printer_t @var{p}) - -@end deftypefun - - -@deftypefun {const stp_printfuncs_t *} stp_printer_get_printfuncs (const stp_printer_t @var{p}) - -@end deftypefun - -@deftypevr {Data type} {} stp_printfuncs_t -@example -typedef struct -@{ - char **(*parameters)(const stp_printer_t printer, - const char *ppd_file, - const char *name, int *count); - void (*media_size)(const stp_printer_t printer, - const stp_vars_t v, int *width, - int *height); - void (*imageable_area)(const stp_printer_t printer, - const stp_vars_t v, - int *left, int *right, - int *bottom, int *top); - void (*limit)(const stp_printer_t printer, - const stp_vars_t v, - int *width, int *height); - void (*print)(const stp_printer_t printer, - stp_image_t *image, const stp_vars_t v); - const char *(*default_parameters)(const stp_printer_t printer, - const char *ppd_file, - const char *name); - void (*describe_resolution)(const stp_printer_t printer, - const char *resolution, - int *x, int *y); - int (*verify)(const stp_printer_t p, const stp_vars_t v); -@} stp_printfuncs_t; -@end example -@end deftypevr - -@deftypevr {Data type} {} stp_image_t -@example -typedef struct stp_image -@{ - void (*init)(struct stp_image *image); - void (*reset)(struct stp_image *image); - void (*transpose)(struct stp_image *image); - void (*hflip)(struct stp_image *image); - void (*vflip)(struct stp_image *image); - void (*crop)(struct stp_image *image, - int left, int top, int right, - int bottom); - void (*rotate_ccw)(struct stp_image *image); - void (*rotate_cw)(struct stp_image *image); - void (*rotate_180)(struct stp_image *image); - int (*bpp)(struct stp_image *image); - int (*width)(struct stp_image *image); - int (*height)(struct stp_image *image); - void (*get_row)(struct stp_image *image, - unsigned char *data, int row); - const char *(*get_appname)(struct stp_image *image); - void (*progress_init)(struct stp_image *image); - void (*note_progress)(struct stp_image *image, - double current, double total); - void (*progress_conclude)(struct stp_image *image); - void *rep; -@} stp_image_t; -@end example -This is an abstract data type for interfacing with the program which -created the image. -@end deftypevr - -@deftypefun {const stp_vars_t} stp_printer_get_printvars (const stp_printer_t @var{p}) - -@end deftypefun - - -@node Settings functions, Version functions, Printer functions, Functions -@section Settings functions -@cindex settings functions - -@deftypefun stp_convert_t stp_choose_colorfunc (int @var{output_type}, int @var{image_bpp}, const unsigned char *@var{cmap}, int *@var{out_bpp}, const stp_vars_t @var{v}) - -@end deftypefun - - -@deftypefun void stp_compute_page_parameters (int @var{page_right}, int @var{page_left}, int @var{page_top}, int @var{page_bottom}, double @var{scaling}, int @var{image_width}, int @var{image_height}, stp_image_t *@var{image}, int *@var{orientation}, int *{page_width}, int *@var{page_height}, int *@var{out_width}, int *@var{out_height}, int *@var{left}, int *@var{top}) - -@end deftypefun - - -@deftypefun {const stp_vars_t} stp_default_settings (void) - -@end deftypefun - - -@deftypefun {const stp_vars_t} stp_maximum_settings (void) - -@end deftypefun - - -@deftypefun {const stp_vars_t} stp_minimum_settings (void) - -@end deftypefun - - - - -@node Version functions, , Settings functions, Functions -@section Version functions -@cindex version functions - -@deftypefun {const char *} stp_check_version (unsigned int @var{required_major}, -unsigned int @var{required_minor}, unsigned int @var{required_micro}) - -This function checks whether the version of libgimpprint that the program -is linked with is equal to the version number passed to it. If the version -is the same, the function returns @code{NULL}. If any of the version -numbers do not match (i.e. the library version is too old or too new), a string containing a desription of the difference is -returned. The first error found is returned. The function checks in the order -major, minor, micro. -@end deftypefun - -@subsection Version macros - -@defmac GIMPPRINT_CHECK_VERSION (major,minor,micro) - -This macro returns zero if the version of the libgimpprint headers are -greater or equal to the version given as an argument. It returns nonzero -if the version of the libgimpprint headers are less than the argument. -@end defmac - -@defmac GIMPPRINT_MAJOR_VERSION -@end defmac - -@defmac GIMPPRINT_MINOR_VERSION -@end defmac - -@defmac GIMPPRINT_MICRO_VERSION -@end defmac - -@defmac GIMPPRINT_CURRENT_INTERFACE -@end defmac - -@defmac GIMPPRINT_BINARY_AGE -@end defmac - -@defmac GIMPPRINT_INTERFACE_AGE -@end defmac - -These macros are integers holding the version numbers. They should be -used for compile-time checking only. To check version numbers at -run-time, use the equivalent variables. Note that at present (4.1.x -development branch) the library interface version numbers are not used. - -@subsection Version variables - -@deftypevar {const unsigned int} gimpprint_major_version -@end deftypevar - -@deftypevar {const unsigned int} gimpprint_minor_version -@end deftypevar - -@deftypevar {const unsigned int} gimpprint_micro_version -@end deftypevar - -@deftypevar {const unsigned int} gimpprint_current_interface -@end deftypevar - -@deftypevar {const unsigned int} gimpprint_binary_age -@end deftypevar - -@deftypevar {const unsigned int} gimpprint_interface_age -@end deftypevar - -These variables hold the library version numbers. Because the version of -the library may change on a system using shared libraries, these should -be used instead of the equivalent macros when checking the library -version at run-time. Note that library interface version numbers are not -used in the development branch, but are in the stable branch. diff --git a/doc/gimpprint.dvi b/doc/gimpprint.dvi deleted file mode 100644 index 8a291b6..0000000 Binary files a/doc/gimpprint.dvi and /dev/null differ diff --git a/doc/gimpprint.info b/doc/gimpprint.info deleted file mode 100644 index bf32d40..0000000 --- a/doc/gimpprint.info +++ /dev/null @@ -1,94 +0,0 @@ -This is gimpprint.info, produced by makeinfo version 4.0 from -gimpprint.texi. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -END-INFO-DIR-ENTRY - - This file documents the gimpprint library and associated programs -used for high quality printing. - - Copyright (C) 2001 Michael Sweet () and Robert -Krawitz () - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -Indirect: -gimpprint.info-1: 1086 -gimpprint.info-2: 50090 -gimpprint.info-3: 97464 -gimpprint.info-4: 142317 -gimpprint.info-5: 185904 - -Tag Table: -(Indirect) -Node: Top1086 -Node: Instructions2197 -Node: Copying3918 -Node: Overview24512 -Node: Using libgimpprint25397 -Node: Integrating libgimpprint26721 -Node: gimpprint-config27428 -Node: make29503 -Node: autoconf30090 -Node: automake31773 -Node: Functions33960 -Node: Main functions34957 -Node: stp_vars_t functions36188 -Node: Dither functions49755 -Node: Options functions50090 -Node: Paper functions51096 -Node: Printer functions52501 -Node: Settings functions56361 -Node: Version functions57187 -Node: Programs59480 -Node: The GIMP plugin60109 -Ref: The GIMP plugin-Footnote-169830 -Ref: The GIMP plugin-Footnote-269860 -Ref: The GIMP plugin-Footnote-369905 -Ref: The GIMP plugin-Footnote-469938 -Node: Ghostscript70040 -Node: CUPS70175 -Node: Problems70272 -Ref: Problems-Footnote-171100 -Ref: Problems-Footnote-271149 -Node: Appendices71198 -Node: Dithering71582 -Node: Weaving97161 -Node: Weaving introduction97464 -Node: Weaving algorithms103941 -Node: Simple weaving algorithms106555 -Node: Perfect weaving110315 -Node: Weaving collisions119194 -Node: What is perfect weaving?120618 -Node: Oversampling142317 -Node: ESC/P2151914 -Node: ESC/P2 Introduction152280 -Node: ESC/P2 Standard Commands153602 -Node: ESC/P2 Remote Mode Commands165573 -Node: ESC/P2 Appropriate Remote Commands178224 -Node: New Printer180913 -Node: printers.xml181856 -Node: Driver file184518 -Node: Epson inkjet printers185904 -Node: Tuning Epson printers204261 -Node: Canon inkjet printers211171 -Node: Data Type and Variable Index214629 -Node: Function and Macro Index215791 -Node: Concept Index228976 - -End Tag Table diff --git a/doc/gimpprint.info-1 b/doc/gimpprint.info-1 deleted file mode 100644 index 2b81ad8..0000000 --- a/doc/gimpprint.info-1 +++ /dev/null @@ -1,1100 +0,0 @@ -This is gimpprint.info, produced by makeinfo version 4.0 from -gimpprint.texi. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -END-INFO-DIR-ENTRY - - This file documents the gimpprint library and associated programs -used for high quality printing. - - Copyright (C) 2001 Michael Sweet () and Robert -Krawitz () - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gimpprint.info, Node: Top, Prev: (dir), Up: (dir) - -The print plugin for the GIMP and printing library -************************************************** - - This file documents the libgimpprint library and associated programs -used for high quality printing. This edition documents version 4.2.7. - - *Note Problems::, for information on how to report problems with -GIMP-Print. - -* Menu: - -* Instructions:: How to read this manual. -* Copying:: Your rights. -* Overview:: Preliminary information. -* Using libgimpprint:: Examples of how to use libgimpprint. -* Integrating libgimpprint:: Using libgimpprint in your own packages. -* Functions:: libgimpprint function reference. -* Programs:: Using GIMP-Print programs. -* Problems:: Reporting bugs. -* Appendices:: Additional information. -* Data Type and Variable Index:: Index of data types and variables. -* Function and Macro Index:: Index of functions and macros. -* Concept Index:: Index of concepts. - - -File: gimpprint.info, Node: Instructions, Next: Copying, Prev: Top, Up: Top - -Preface -******* - - This manual documents the use of the GIMP-Print package, focusing -mainly on the libgimpprint library that is the core of GIMP-Print. -Parts of the manual which describe the use of libgimpprint are aimed -primarily at programmers, and do assume that the reader is familiar -with C programming, and using standard programming tools on GNU or UNIX -systems. Other parts of the manual document the use of the programs -that make up the GIMP-Print package, and assume no knowledge other than -the basics of using a shell and editor. - - The best way to learn how to use libgimpprint in your own programs -is to read the manual from start to finish, using the examples given in -the text to learn how it works. The bulk of the manual can be used as a -reference once one understands the basics. - - The manual is split into several parts for the programmer. It starts -with a simple usage example of how to link a program with libgimpprint, -then how to integrate this into package build scripts, using `make', -`autoconf' and `automake'. This is followed by a detailed function -reference, including descriptions of all the data types used. - - For the end-user, there is a section on all of the programs that come -with GIMP-Print, including the GIMP `print' plugin, and the CUPS and -Ghostscript drivers. - - The appendices at the end of the manual detail the dither and weave -algorithms used in libgimpprint, the ESC/P2 printer control language -used in Epson printers and how to add support for a new printer to -libgimpprint. - - - - We hope you enjoy using GIMP-Print! - - --The GIMP-Print project - - -File: gimpprint.info, Node: Copying, Next: Overview, Prev: Instructions, Up: Top - -GNU GENERAL PUBLIC LICENSE -************************** - - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -Preamble -======== - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it in -new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, -and (2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 1. This License applies to any program or other work which contains a - notice placed by the copyright holder saying it may be distributed - under the terms of this General Public License. The "Program", - below, refers to any such program or work, and a "work based on - the Program" means either the Program or any derivative work under - copyright law: that is to say, a work containing the Program or a - portion of it, either verbatim or with modifications and/or - translated into another language. (Hereinafter, translation is - included without limitation in the term "modification".) Each - licensee is addressed as "you". - - Activities other than copying, distribution and modification are - not covered by this License; they are outside its scope. The act - of running the Program is not restricted, and the output from the - Program is covered only if its contents constitute a work based on - the Program (independent of having been made by running the - Program). Whether that is true depends on what the Program does. - - 2. You may copy and distribute verbatim copies of the Program's - source code as you receive it, in any medium, provided that you - conspicuously and appropriately publish on each copy an appropriate - copyright notice and disclaimer of warranty; keep intact all the - notices that refer to this License and to the absence of any - warranty; and give any other recipients of the Program a copy of - this License along with the Program. - - You may charge a fee for the physical act of transferring a copy, - and you may at your option offer warranty protection in exchange - for a fee. - - 3. You may modify your copy or copies of the Program or any portion - of it, thus forming a work based on the Program, and copy and - distribute such modifications or work under the terms of Section 1 - above, provided that you also meet all of these conditions: - - a. You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b. You must cause any work that you distribute or publish, that - in whole or in part contains or is derived from the Program - or any part thereof, to be licensed as a whole at no charge - to all third parties under the terms of this License. - - c. If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display - an announcement including an appropriate copyright notice and - a notice that there is no warranty (or else, saying that you - provide a warranty) and that users may redistribute the - program under these conditions, and telling the user how to - view a copy of this License. (Exception: if the Program - itself is interactive but does not normally print such an - announcement, your work based on the Program is not required - to print an announcement.) - - These requirements apply to the modified work as a whole. If - identifiable sections of that work are not derived from the - Program, and can be reasonably considered independent and separate - works in themselves, then this License, and its terms, do not - apply to those sections when you distribute them as separate - works. But when you distribute the same sections as part of a - whole which is a work based on the Program, the distribution of - the whole must be on the terms of this License, whose permissions - for other licensees extend to the entire whole, and thus to each - and every part regardless of who wrote it. - - Thus, it is not the intent of this section to claim rights or - contest your rights to work written entirely by you; rather, the - intent is to exercise the right to control the distribution of - derivative or collective works based on the Program. - - In addition, mere aggregation of another work not based on the - Program with the Program (or with a work based on the Program) on - a volume of a storage or distribution medium does not bring the - other work under the scope of this License. - - 4. You may copy and distribute the Program (or a work based on it, - under Section 2) in object code or executable form under the terms - of Sections 1 and 2 above provided that you also do one of the - following: - - a. Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Sections 1 and 2 above on a medium customarily used for - software interchange; or, - - b. Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a - medium customarily used for software interchange; or, - - c. Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with - such an offer, in accord with Subsection b above.) - - The source code for a work means the preferred form of the work for - making modifications to it. For an executable work, complete - source code means all the source code for all modules it contains, - plus any associated interface definition files, plus the scripts - used to control compilation and installation of the executable. - However, as a special exception, the source code distributed need - not include anything that is normally distributed (in either - source or binary form) with the major components (compiler, - kernel, and so on) of the operating system on which the executable - runs, unless that component itself accompanies the executable. - - If distribution of executable or object code is made by offering - access to copy from a designated place, then offering equivalent - access to copy the source code from the same place counts as - distribution of the source code, even though third parties are not - compelled to copy the source along with the object code. - - 5. You may not copy, modify, sublicense, or distribute the Program - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense or distribute the Program is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 6. You are not required to accept this License, since you have not - signed it. However, nothing else grants you permission to modify - or distribute the Program or its derivative works. These actions - are prohibited by law if you do not accept this License. - Therefore, by modifying or distributing the Program (or any work - based on the Program), you indicate your acceptance of this - License to do so, and all its terms and conditions for copying, - distributing or modifying the Program or works based on it. - - 7. Each time you redistribute the Program (or any work based on the - Program), the recipient automatically receives a license from the - original licensor to copy, distribute or modify the Program - subject to these terms and conditions. You may not impose any - further restrictions on the recipients' exercise of the rights - granted herein. You are not responsible for enforcing compliance - by third parties to this License. - - 8. If, as a consequence of a court judgment or allegation of patent - infringement or for any other reason (not limited to patent - issues), conditions are imposed on you (whether by court order, - agreement or otherwise) that contradict the conditions of this - License, they do not excuse you from the conditions of this - License. If you cannot distribute so as to satisfy simultaneously - your obligations under this License and any other pertinent - obligations, then as a consequence you may not distribute the - Program at all. For example, if a patent license would not permit - royalty-free redistribution of the Program by all those who - receive copies directly or indirectly through you, then the only - way you could satisfy both it and this License would be to refrain - entirely from distribution of the Program. - - If any portion of this section is held invalid or unenforceable - under any particular circumstance, the balance of the section is - intended to apply and the section as a whole is intended to apply - in other circumstances. - - It is not the purpose of this section to induce you to infringe any - patents or other property right claims or to contest validity of - any such claims; this section has the sole purpose of protecting - the integrity of the free software distribution system, which is - implemented by public license practices. Many people have made - generous contributions to the wide range of software distributed - through that system in reliance on consistent application of that - system; it is up to the author/donor to decide if he or she is - willing to distribute software through any other system and a - licensee cannot impose that choice. - - This section is intended to make thoroughly clear what is believed - to be a consequence of the rest of this License. - - 9. If the distribution and/or use of the Program is restricted in - certain countries either by patents or by copyrighted interfaces, - the original copyright holder who places the Program under this - License may add an explicit geographical distribution limitation - excluding those countries, so that distribution is permitted only - in or among countries not thus excluded. In such case, this - License incorporates the limitation as if written in the body of - this License. - - 10. The Free Software Foundation may publish revised and/or new - versions of the General Public License from time to time. Such - new versions will be similar in spirit to the present version, but - may differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the - Program specifies a version number of this License which applies - to it and "any later version", you have the option of following - the terms and conditions either of that version or of any later - version published by the Free Software Foundation. If the Program - does not specify a version number of this License, you may choose - any version ever published by the Free Software Foundation. - - 11. If you wish to incorporate parts of the Program into other free - programs whose distribution conditions are different, write to the - author to ask for permission. For software which is copyrighted - by the Free Software Foundation, write to the Free Software - Foundation; we sometimes make exceptions for this. Our decision - will be guided by the two goals of preserving the free status of - all derivatives of our free software and of promoting the sharing - and reuse of software generally. - - NO WARRANTY - - 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO - WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE - LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT - HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT - NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE - QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE - PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY - SERVICING, REPAIR OR CORRECTION. - - 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY - MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE - LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, - INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR - INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU - OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY - OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs -============================================= - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES. - Copyright (C) 19YY NAME OF AUTHOR - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - Also add information on how to contact you by electronic and paper -mail. - - If the program is interactive, make it output a short notice like -this when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details - type `show w'. This is free software, and you are welcome - to redistribute it under certain conditions; type `show c' - for details. - - The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. - - You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the program, -if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright - interest in the program `Gnomovision' - (which makes passes at compilers) written - by James Hacker. - - SIGNATURE OF TY COON, 1 April 1989 - Ty Coon, President of Vice - - This General Public License does not permit incorporating your -program into proprietary programs. If your program is a subroutine -library, you may consider it more useful to permit linking proprietary -applications with the library. If this is what you want to do, use the -GNU Library General Public License instead of this License. - -Copying summary -*************** - - GIMP-Print is "free"; this means that everyone is free to use it and -free to redistribute it on a free basis. GIMP-Print is not in the public -domain; it is copyrighted and there are restrictions on its -distribution, but these restrictions are designed to permit everything -that a good cooperating citizen would want to do. What is not allowed is -to try to prevent others from further sharing any version of GIMP-Print -that they might get from you. - - Specifically, we want to make sure that you have the right to give -away copies of GIMP-Print, that you receive source code or else can get -it if you want it, that you can change GIMP-Print or use pieces of it -in new free programs, and that you know you can do these things. - - To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of GIMP-Print, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - Also, for our own protection, we must make certain that everyone -finds out that there is no warranty for GIMP-Print. If GIMP-Print is -modified by someone else and passed on, we want their recipients to -know that what they have is not what we distributed, so that any -problems introduced by others will no reflect on our reputation. - - -File: gimpprint.info, Node: Overview, Next: Using libgimpprint, Prev: Copying, Up: Top - -Overview -******** - - The GIMP-Print package is a collection of programs and a library for -high quality printing on modern inkjets, including `photographic -quality' models which offer very high resolutions and several inks. - - META: Short history of the project - - GIMP-Print is the print facility of the "GNU Image Manipulation -Program" (GIMP). It is in addition a suite of drivers that may be used -with common UNIX spooling systems using GhostScript or CUPS. These -drivers provide printing quality for UNIX/Linux on a par with -proprietary vendor-supplied drivers in many cases, and can be used for -many of the most demanding printing tasks. The core of GIMP-Print is a -shared library (libgimpprint) which may be used by any program that -wishes to produce high-qulaity printed output. - - -File: gimpprint.info, Node: Using libgimpprint, Next: Integrating libgimpprint, Prev: Overview, Up: Top - -Using libgimpprint -****************** - - This chapter describes how to write programs that use libgimpprint. - -Code prerequisites -================== - - To use libgimpprint with a program, several steps must be taken: - - 1. Include the master libgimpprint header `.' - - 2. Call `stp_init()'. - - 3. Link with libgimpprint. - - The following is a short example program. It does not do anything -useful, but it does everything required to link with libgimpprint and -call other functions from libgimpprint. - - #include - - int - main (int argc, char *argv[]) - { - stp_init (); - return (0); - } - -Linking with libgimpprint -========================= - - To link a program with libgimpprint, then `-lgimpprint' needs to be -passed to the compiler when linking. For example, to compile and link -`prog.c' the following commands would be used: - - gcc -c prog.c - gcc -o prog -lgimpprint prog.o - - The compiler and linker flags needed may vary depending on the -options GIMP-Print was configured with when it was built. The -`gimpprint-config' script will give the correct parameters for the -local installation (*note gimpprint-config::). - - -File: gimpprint.info, Node: Integrating libgimpprint, Next: Functions, Prev: Using libgimpprint, Up: Top - -Integrating libgimpprint -************************ - - This chapter describes how to integrate the compiling and linking of -programs using libgimpprint with build scripts. Commonly used systems -include `make', but more commonly `Makefile' files are generated by -using tools such as `autoconf' and `automake'. - -* Menu: - -* gimpprint-config:: Getting the correct compiler and linker flags -* make:: Normal makefiles -* autoconf:: Macro to automatically check for libgimpprint -* automake:: Automatically defined variables to use - - -File: gimpprint.info, Node: gimpprint-config, Next: make, Up: Integrating libgimpprint - -`gimpprint-config' -================== - - Depending on the setup of the computer system GIMP-Print was -installed on, as well as the options passed to `configure' when -configuring the package when it was built, the `CFLAGS' and `LIBS' -parameters needed to compile and link programs with libgimpprint may -vary. To make it simple to determine what these are on any given -system, the script `gimpprint-config' was created. It's job is to -output the correct parameters for the setup on your system. The -following options are available: - - roger@whinlatter:~/gimpprint/devel$ gimpprint-config --help - Usage: gimpprint-config [OPTIONS] [LIBRARIES] - Options: - [--prefix[=DIR]] - [--exec-prefix[=DIR]] - [--version] - [--libs] - [--cflags] - Libraries: - gimpprint - - The `--prefix' and `--exec-prefix' options are only needed if the -installed locations of parts of GIMP-Print are different from the -configured locations. These should never be needed if GIMP-Print was -properly configured and installed. - - The installed version of GIMP-Print can be obtained with the -`--version' option: - - roger@whinlatter:~/gimpprint/devel$ gimpprint-config --version - 4.2.7 - - The correct `CFLAGS' to use can be obtained with the `--cflags' -option: - - roger@whinlatter:~/gimpprint/devel$ gimpprint-config --cflags - - In this case, there are no special `CFLAGS' required to compile -programs. - - The correct `LIBS' to use can the obtained with the `--libs' option: - - roger@whinlatter:~/gimpprint/devel$ gimpprint-config --libs - -L/usr/lib -lgimpprint -lm - - The command can be used from the shell by enclosing it in backquotes -``': - - gcc `gimpprint-config --cflags` -c prog.c - gcc `gimpprint-config --libs` -o prog prog.o - - However, this is not the way it it typically used. Normally it is -used in a `Makefile' (*note make::) or by an `m4' macro in a `configure' -script (*note autoconf::). - - -File: gimpprint.info, Node: make, Next: autoconf, Prev: gimpprint-config, Up: Integrating libgimpprint - -`make' -====== - - If you use `make' with your own `Makefile' files, then you are on -your own. This manual offers no assistance with doing this. Only the -following suggestion is offered: - - GIMPPRINT_VERSION = $(shell gimpprint-config --version) - GIMPPRINT_CFLAGS = $(shell gimpprint-config --cflags) - GIMPPRINT_LIBS = $(shell gimpprint-config --libs) - - How you choose to use these variables is entirely up to you. *note -GNU make: (make)Top, for more information. - - -File: gimpprint.info, Node: autoconf, Next: automake, Prev: make, Up: Integrating libgimpprint - -`autoconf' -========== - - The `autoconf' program produces a Bourne shell script called -`configure' from a template file called `configure.in'. `configure.in' -contains both Bourne shell script, and `m4' macros. `autoconf' expands -the `m4' macros into `real' shell script. The resulting `configure' -script performs various checks for installed programs, compiler -characteristics and other system information such as available headers -and libraries. *note GNU autoconf: (autoconf)Top, for more information. - - GIMP-Print provides an `m4' macro, `AM_PATH_GIMPPRINT', suitable for -use in a `configure.in'. It defines the environment variables -`GIMPPRINT_CFLAGS', `GIMPPRINT_LIBS' and `GIMPPRINT_CONFIG'. You can -optionally specify a minimum version of the library to use, and shell -script to run if the test suceeds or fails. - - - Macro: AM_PATH_GIMPPRINT ([MINIMUM-VERSION [, ACTION-IF-FOUND [, - ACTION-IF-NOT-FOUND]]]) - Check for an installed version of GIMP-Print greater than or equal - to MINIMUM-VERSION. - - ACTION-IF-FOUND is a list of shell commands to run if the check - for the library succeeds; ACTION-IF-NOT-FOUND is a list of shell - commands to run if the check fails. - - The macro sets the following environment variables: - `GIMPPRINT_CFLAGS', `GIMPPRINT_LIBS' and `GIMPPRINT_CONFIG'. It - also will substitute them into any `Makefile.in' you specify in - `AC_OUTPUT' because it calls `AC_SUBST' for each of them. However, - you will probably be using `automake' to generate your - `Makefile.in' files (*note automake::). - - - -File: gimpprint.info, Node: automake, Prev: autoconf, Up: Integrating libgimpprint - -`automake' -========== - - The `automake' program can be used to generate `Makefile.in' files -suitable for use with a `configure' script generated by `autoconf'. As -`automake' _requires_ `autoconf', this section will assume the use of a -`configure' script which uses the `AM_PATH_GIMPPRINT' macro (there is -little point in _not_ using it!). - - It is highly recommeded that you use GNU `autoconf' and `automake'. -They will allow you to make your software build on most platforms with -most compilers. `automake' makes writing complex `Makefile' files very -easy, by expressing how to build your packages in terms of what files -are required to build a project and the installation locations of the -files. It imposes a few limitations over using plain `Makefile' files, -such as in the use of conditionals, but these problems are vastly -outweighed by the benefits it brings. It also creates many extra -targets in the generated `Makefile.in' files such as `dist', -`distcheck', `clean', `distclean', `maintainer-clean' and `tags', and -there are many more more available. *note GNU automake: (automake)Top, -for more information. - - Because `AM_PATH_GIMPPRINT' calls `AC_SUBST' to substitute -`GIMPPRINT_CFLAGS', `GIMPPRINT_LIBS' and `GIMPPRINT_CONFIG', `automake' -will automatically set these variables in the `Makefile.in' files it -generates, requiring no additional effort on your part! - - As in previous examples, we will make a program `prog' from a file -`prog.c'. This is how one might build write a `Makefile.am' to do this: - - AUTOMAKE_OPTIONS = 1.4 gnu - MAINT_CHARSET = latin1 - - @SET_MAKE@ - - CFLAGS = @CFLAGS@ - - INCLUDES = @INCLUDES@ $(GIMPPRINT_CFLAGS) - - bin_PROGRAMS = prog - prog_SOURCES = prog.c - prog_LDADD = $(GIMPPRINT_LIBS) - - MAINTAINERCLEANFILES = Makefile.in - - That's all there is to it! Please note that this example also -requires the macro `AC_PROG_MAKE_SET' to be used in `configure.in' and -the use of `AC_SUBST' to substitute `CFLAGS' and `INCLUDES' where -`@CFLAGS@' and `@INCLUDES@' are found in the file, respectively. - - -File: gimpprint.info, Node: Functions, Next: Programs, Prev: Integrating libgimpprint, Up: Top - -Functions -********* - - This section of the manual is a complete reference to all of the -functions comprising libgimpprint, with examples. - - All of the libgimpprint functions can be declared by including the -master libgimpprint header, `'. This should -be done in every source file that uses gimpprint functions by putting - - #include - -at the top of each file. - -* Menu: - -* Main functions:: Essential functions every program must call. -* stp_vars_t functions:: Using stp_vars_t. -* Dither functions:: Dither algorithms. -* Options functions:: Options. -* Paper functions:: Paper size and orientation. -* Printer functions:: Printer selection. -* Settings functions:: Getting and changing settings. -* Version functions:: Getting libgimpprint version information. - - -File: gimpprint.info, Node: Main functions, Next: stp_vars_t functions, Up: Functions - -Main functions -============== - - These functions are essential to the correct functioning of -libgimpprint. All or most other functions in the library depend -absolutely upon them. In the case of `stp_init', this function _must_ -be called before any of the other functions in the library. - - - Function: int stp_init (void) - This function initialises the libgimpprint library. It must be - called before any of the other libgimpprint functions are called. - It is responsible for setting up message catalogues (for - internationalisation). This function may be called more than once, - at any stage during the execution of a program. - - It returns zero on success, nonzero on failure. - - `stp_init' might be used as follows: - - int - main (int argc, char **argv) - { - stp_init(); - - ... - - } - - - Function: void * stp_malloc (size_t SIZE) - Where SIZE is the amount of memory to allocate (in bytes). - - This function allocates memory. It will always return a pointer to - the allocated memory. It will not return on failure. - - It returns a pointer to the allocated memory. - - -File: gimpprint.info, Node: stp_vars_t functions, Next: Dither functions, Prev: Main functions, Up: Functions - -`stp_vars_t' functions -====================== - - - Data type: void * stp_vars_t - This is an opaque data type, whose structure is not visible to the - user. This object contains all of the information about settings - for a given printer, such as color (contrast, brightness), the - type of printer, the dithering algorithm in use, and so forth. - Please see the `stp_set_*' and `stp_get_*' functions below for the - accessors and mutators for this data type. - - - Function: stp_vars_t stp_allocate_vars (void) - Allocate a new `stp_vars_t' with default settings for all members. - - - Function: void stp_copy_vars (stp_vars_t VD, const stp_vars_t VS) - Copy the settings from VS to VD. - - - Function: stp_vars_t stp_allocate_copy (const stp_vars_t VS) - Allocate a new `stp_vars_t', copying settings from VS. - - - Function: void stp_free_vars (stp_vars_t VV) - Free all resources associated with VV. VV must not be used in any - way following this call. - - - Function: const char * stp_get_output_to (const stp_vars_t VV) - - Function: void stp_set_output_to (stp_vars_t VV, const char *VAL) - - Function: void stp_set_output_to_n (stp_vars_t VV, const char *VAL, - int BYTES) - Get or set the name of the command that this job will be printed - to. This is used by front ends; the driver library always prints - to a stream provided by the front end and never uses this directly. - - - Function: const char * stp_get_driver (const stp_vars_t VV) - - Function: void stp_set_driver (stp_vars_t VV, const char *VAL) - - Function: void stp_set_driver_n (stp_vars_t VV, const char *VAL, int - BYTES) - Get or set the name of the driver (the type of printer). - - - Function: const char * stp_get_ppd_file (const stp_vars_t VV) - - Function: void stp_set_ppd_file (stp_vars_t VV, const char *VAL) - - Function: void stp_set_ppd_file_n (stp_vars_t VV, const char *VAL, - int BYTES) - Get or set the name of the PPD file used by this print job. - Normally, only PostScript printers use PPD files. - - - Function: const char * stp_get_resolution (const stp_vars_t VV) - - Function: void stp_set_resolution (stp_vars_t VV, const char *VAL) - - Function: void stp_set_resolution_n (stp_vars_t VV, const char *VAL, - int BYTES) - Get or set the resolution to be used in this print job. Different - drivers support different resolutions, and many drivers support - multiple quality settings for a given DPI resolution. - - - Function: const char * stp_get_media_size (const stp_vars_t VV) - - Function: void stp_set_media_size (stp_vars_t VV, const char *VAL) - - Function: void stp_set_media_size_n (stp_vars_t VV, const char *VAL, - int BYTES) - Get or set the name of the media size (e. g. A3, letter, legal) to - be used in this print job. - - - Function: const char * stp_get_media_type (const stp_vars_t VV) - - Function: void stp_set_media_type (stp_vars_t VV, const char *VAL) - - Function: void stp_set_media_type_n (stp_vars_t VV, const char *VAL, - int BYTES) - Get or set the name of the media type (e. g. plain paper, photo - quality inkjet paper) to be used in this print job. - - - Function: const char * stp_get_media_source (const stp_vars_t VV) - - Function: void stp_set_media_source (stp_vars_t VV, const char *VAL) - - Function: void stp_set_media_source_n (stp_vars_t VV, const char - *VAL, int BYTES) - Get or set the name of the media source (e. g. manual feed, tray - A) to be used in this print job. - - - Function: const char * stp_get_ink_type (const stp_vars_t VV) - - Function: void stp_set_ink_type (stp_vars_t VV, const char *VAL) - - Function: void stp_set_ink_type_n (stp_vars_t VV, const char *VAL, - int BYTES) - Get or set the name of the ink type (e. g. four color standard, six - color photo) to be used in this print job. - - - Function: const char * stp_get_dither_algorithm (const stp_vars_t VV) - - Function: void stp_set_dither_algorithm (stp_vars_t VV, const char - *VAL) - - Function: void stp_set_dither_algorithm_n (stp_vars_t VV, const char - *VAL, int BYTES) - Get or set the dither algorithm to be used in this print job. - - - Function: int stp_get_output_type (const stp_vars_t VV) - - Function: void stp_set_output_type (stp_vars_t VV, int VAL) - Get or set the output type (color, grayscale, black and white) for - this print job. - - - Function: int stp_get_orientation (const stp_vars_t VV) - - Function: void stp_set_orientation (stp_vars_t VV, int VAL) - Get or set the paper orientation for this print job. - - - Function: int stp_get_left (const stp_vars_t VV) - - Function: void stp_set_left (stp_vars_t VV, int VAL) - Get or set the left margin (in 1/72 inch units, or "points") for - this print job. - - - Function: int stp_get_top (const stp_vars_t VV) - - Function: void stp_set_top (stp_vars_t VV, int VAL) - Get or set the top margin (in 1/72 inch units, or "points") for - this print job. - - - Function: int stp_get_image_type (const stp_vars_t VV) - - Function: void stp_set_image_type (stp_vars_t VV, int VAL) - Get or set the image type (line art, continuous tone, solid colors) - for this print job. - - - Function: int stp_get_unit (const stp_vars_t VV) - - Function: void stp_set_unit (stp_vars_t VV, int VAL) - Get or set the base unit (inches or centimeters) for this print - job. This is provided for front ends; the package itself uses - points as its unit of measurement. - - - Function: int stp_get_page_width (const stp_vars_t VV) - - Function: void stp_set_page_width (stp_vars_t VV, int VAL) - Get or set the width of the printed region of the page. - - - Function: int stp_get_page_height (const stp_vars_t VV) - - Function: void stp_set_page_height (stp_vars_t VV, int VAL) - Get or set the height of the printed region of the page. - - - Function: int stp_get_input_color_model (const stp_vars_t VV) - - Function: void stp_set_input_color_model (stp_vars_t VV, int VAL) - Get or set the color model (currently RGB or CMY) of the input to - the driver. Most front ends will use RGB input. - - - Function: int stp_get_output_color_model (const stp_vars_t VV) - - Function: void stp_set_output_color_model (stp_vars_t VV, int VAL) - Get or set the color model (currently RGB or CMY) of the output of - the driver. Most printers will use CMY. - - - Function: float stp_get_scaling (const stp_vars_t VV) - - Function: void stp_set_scaling (stp_vars_t VV, float VAL) - Get or set the scaling factor of the image. If the scaling factor - is greater than 0, it is interpreted as a percent (5.0-100.0 is - the valid range) of the printable page region, using the more - restrictive axis. For example, if the image to be printed should - be 3" (wide) x 2" (high), and the printable page region is - 8"x10.5", the scale factor should be 37.5 (3"/8"). - - If the scaling is less than zero, it is interpreted as pixels per - inch. - - It is likely that in the future this will be migrated into the - front end. There is no particular reason why the driver needs to - know about this. - - - Function: float stp_get_gamma (const stp_vars_t VV) - - Function: void stp_set_gamma (stp_vars_t VV, float VAL) - Get or set the gamma of the print job (valid range: 0.1-4.0; - default 1.0). Note that this is not the absolute gamma used by - the print job; it is scaled by the gamma appropriate for the - printer. This is true for all of the numerical parameters. - - - Function: float stp_get_brightness (const stp_vars_t VV) - - Function: void stp_set_brightness (stp_vars_t VV, float VAL) - Get or set the brightness of the print job (valid range: 0.0-2.0; - default: 1.0). Any value other than 1.0 will result in some - possible values not being used; if brightness is less than 1.0, no - output point will be pure white, and if brightness is greater than - 1.0, no output point will be pure black (or cyan, or magenta, or - yellow). - - - Function: float stp_get_contrast (const stp_vars_t VV) - - Function: void stp_set_contrast (stp_vars_t VV, float VAL) - Get or set the contrast of the print job (valid range: 0.0-4.0; - default: 1.0). Values less than 1.0 will result in pure white or - black not being used (0.0 will make the entire image 50% gray). - Values greater than 1.0 do not hard clip; while the contrast in the - midtones increases, it only asymptotically approaches the limits. - - - Function: float stp_get_cyan (const stp_vars_t VV) - - Function: void stp_set_cyan (stp_vars_t VV, float VAL) - Get or set the cyan adjustment of the print job (range: 0.0-4.0; - default: 1.0). This currently adjusts the gamma of the cyan - curve. It is scaled by the cyan adjustment for the printer model - in question. - - - Function: float stp_get_magenta (const stp_vars_t VV) - - Function: void stp_set_magenta (stp_vars_t VV, float VAL) - Get or set the magenta adjustment of the print job (range: - 0.0-4.0; default: 1.0). This currently adjusts the gamma of the - magenta curve. It is scaled by the magenta adjustment for the - printer model in question. - - - Function: float stp_get_yellow (const stp_vars_t VV) - - Function: void stp_set_yellow (stp_vars_t VV, float VAL) - Get or set the yellow adjustment of the print job (range: 0.0-4.0; - default: 1.0). This currently adjusts the gamma of the yellow - curve. It is scaled by the yellow adjustment for the printer - model in question. - - - Function: float stp_get_saturation (const stp_vars_t VV) - - Function: void stp_set_saturation (stp_vars_t VV, float VAL) - Get or set the saturation of the print job (range: 0.0-9.0; - default: 1.0). Saturation of 0.0 produces grayscale output using - composite (CMY or CMYK, as appropriate for the printer) color. - - - Function: float stp_get_density (const stp_vars_t VV) - - Function: void stp_set_density (stp_vars_t VV, float VAL) - Get or set the density of the print job (range: 0.0-2.0; default: - 1.0). This adjusts the amount of ink deposited in a linear fashion - for all channels. It is scaled by the density appropriate for the - choice of printer, resolution, paper type, and other factors that - the driver may deem appropriate. - - - Function: float stp_get_app_gamma (const stp_vars_t VV) - - Function: void stp_set_app_gamma (stp_vars_t VV, float VAL) - Get or set the gamma of the input (i. e. what the driving - application uses). - - - Function: void * stp_get_lut (const stp_vars_t VV) - - Function: void stp_set_lut (stp_vars_t VV, void *VAL) - Get or set the color lookup table for the print job. This is - useful outside of the library for computing a preview of the - printed result. The lookup table itself should be treated as an - opaque handle. - - - Function: unsigned char * stp_get_cmap (const stp_vars_t VV) - - Function: void stp_set_cmap (stp_vars_t VV, unsigned char *VAL) - Get or set the color map for the print job. This is a table of - R,G,B values for 8-bit indexed input. This may be moved outside - of the library in the future; in this case, the front end would be - required to do its own mapping and supply true-color RGB to the - driver. - - The following methods are used to perform output and error reporting -by the driver. The driver supplies a stream of output bytes; the front -end is responsible for providing methods that accept this output and -handle it appropriately. - - - Function: stp_outfunc_t stp_get_outfunc (const stp_vars_t VV) - - Function: void stp_set_outfunc (const stp_vars_t VV, stp_outfunc_t - VAL) - - Function: void * stp_get_outdata (const stp_vars_t VV) - - Function: void stp_set_outdata (stp_vars_t VV, void *VAL) - - Data type: stp_outfunc_t - typedef void (*stp_outfunc_t) (void *data, - const char *buffer, size_t bytes); - Get or set the output function the driver will use. The - front end must supply a suitable function for accepting the output - data. The `stp_set_outdata' method provides a way of passing an - appropriate object to the output function. - - - Function: stp_outfunc_t stp_get_errfunc (const stp_vars_t VV) - - Function: void stp_set_errfunc (const stp_vars_t VV, stp_outfunc_t - VAL) - - Function: void * stp_get_errdata (const stp_vars_t VV) - - Function: void stp_set_errdata (stp_vars_t VV, void *VAL) - Get or set the error reporting function that the driver will use. - This is used to report errors or debugging information, and must be - supplied. A typical errfunc will simply print whatever it's - passed to stderr. - - /* * hue_map is an array of 49 doubles representing the mapping of -hue * from (0..6) to (0..6) in increments of .125. The hue_map is in -CMY space, * so hue=0 is cyan. */ typedef void -(*stp_convert_t)(const stp_vars_t vars, const unsigned char *in, - unsigned short *out, int *zero_mask, - int width, int bpp, const unsigned char *cmap, - const double *hue_map, const double *lum_map, - const double *sat_map); - - - Function: void stp_merge_printvars (stp_vars_t USER, const - stp_vars_t PRINT) - - - Function: void stp_allocate_lut (stp_vars_t V, size_t STEPS) - - - Function: void stp_free_lut (stp_vars_t V) - - - Function: void stp_compute_lut (stp_vars_t V, size_t STEPS) - - -File: gimpprint.info, Node: Dither functions, Next: Options functions, Prev: stp_vars_t functions, Up: Functions - -Dither functions -================ - - - Function: size_t stp_dither_algorithm_count (void) - - - Function: const char * stp_dither_algorithm_name (int ID) - - - Function: const char * stp_default_dither_algorithm (void) - diff --git a/doc/gimpprint.info-2 b/doc/gimpprint.info-2 deleted file mode 100644 index 3539915..0000000 --- a/doc/gimpprint.info-2 +++ /dev/null @@ -1,1080 +0,0 @@ -This is gimpprint.info, produced by makeinfo version 4.0 from -gimpprint.texi. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -END-INFO-DIR-ENTRY - - This file documents the gimpprint library and associated programs -used for high quality printing. - - Copyright (C) 2001 Michael Sweet () and Robert -Krawitz () - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gimpprint.info, Node: Options functions, Next: Paper functions, Prev: Dither functions, Up: Functions - -Options functions -================= - - - Data type: void * stp_option_t - This is an opaque data type, whose structure is not visible to the - user. - - - Function: void stp_set_option(stp_vars_t V, const char *NAME, const - char *DATA, int BYTES) - - - Function: void stp_clear_option (stp_vars_t V, const char *NAME) - - - Function: void stp_clear_all_options (stp_vars_t V) - - - Function: size_t stp_option_count (const stp_vars_t V) - - - Function: const stp_option_t stp_get_option_by_index (const - stp_vars_t V, size_t IDX) - - - Function: const stp_option_t stp_get_option_by_name (const - stp_vars_t V, const char *NAME) - - - Function: const char * stp_option_data (const stp_option_t OPTION) - *Note*: not null delimited! - - - Function: const char * stp_option_name (const stp_option_t OPTION) - - - Function: size_t stp_option_length (const stp_option_t OPTION) - - -File: gimpprint.info, Node: Paper functions, Next: Printer functions, Prev: Options functions, Up: Functions - -Paper functions -=============== - - - Data type: void * stp_papersize_t - This is an opaque data type, whose structure is not visible to the - user. - - - Data type: stp_papersize_unit_t - typedef enum papersize_unit - { - PAPERSIZE_ENGLISH, - PAPERSIZE_METRIC - } stp_papersize_unit_t; - - - Function: int stp_known_papersizes (void) - - - Function: const stp_papersize_t stp_get_papersize_by_name (const - char *NAME) - - - Function: const stp_papersize_t stp_get_papersize_by_size (int L, - int W) - - - Function: const stp_papersize_t stp_get_papersize_by_index (int - INDEX) - - - Function: const char * stp_papersize_get_name (const stp_papersize_t - PT) - - - Function: unsigned stp_papersize_get_width (const stp_papersize_t PT) - - - Function: unsigned stp_papersize_get_height (const stp_papersize_t - PT) - - - Function: unsigned stp_papersize_get_top (const stp_papersize_t PT) - - - Function: unsigned stp_papersize_get_left (const stp_papersize_t PT) - - - Function: unsigned stp_papersize_get_bottom (const stp_papersize_t - PT) - - - Function: unsigned stp_papersize_get_right (const stp_papersize_t PT) - - - Function: stp_papersize_unit_t stp_papersize_get_unit (const - stp_papersize_t PT) - - -File: gimpprint.info, Node: Printer functions, Next: Settings functions, Prev: Paper functions, Up: Functions - -Printer functions -================= - - - Data type: void * stp_printer_t - This is an opaque data type, whose structure is not visible to the - user. - - - Function: int stp_known_printers (void) - - - Function: const stp_printer_t stp_get_printer_by_index (int IDX) - - - Function: const char * stp_printer_get_long_name (const - stp_printer_t P) - - - Function: const stp_printer_t stp_get_printer_by_long_name (const - char *LONG_NAME) - - - Function: const stp_printer_t stp_get_printer_by_driver (const char - *DRIVER) - - - Function: int stp_get_printer_index_by_driver (const char *DRIVER) - - - Function: const char * stp_printer_get_driver (const stp_printer_t P) - - - Function: int stp_printer_get_model (const stp_printer_t P) - - - Function: const stp_printfuncs_t * stp_printer_get_printfuncs (const - stp_printer_t P) - - - Data type: stp_printfuncs_t - typedef struct - { - char **(*parameters)(const stp_printer_t printer, - const char *ppd_file, - const char *name, int *count); - void (*media_size)(const stp_printer_t printer, - const stp_vars_t v, int *width, - int *height); - void (*imageable_area)(const stp_printer_t printer, - const stp_vars_t v, - int *left, int *right, - int *bottom, int *top); - void (*limit)(const stp_printer_t printer, - const stp_vars_t v, - int *width, int *height); - void (*print)(const stp_printer_t printer, - stp_image_t *image, const stp_vars_t v); - const char *(*default_parameters)(const stp_printer_t printer, - const char *ppd_file, - const char *name); - void (*describe_resolution)(const stp_printer_t printer, - const char *resolution, - int *x, int *y); - int (*verify)(const stp_printer_t p, const stp_vars_t v); - } stp_printfuncs_t; - - - Data type: stp_image_t - typedef struct stp_image - { - void (*init)(struct stp_image *image); - void (*reset)(struct stp_image *image); - void (*transpose)(struct stp_image *image); - void (*hflip)(struct stp_image *image); - void (*vflip)(struct stp_image *image); - void (*crop)(struct stp_image *image, - int left, int top, int right, - int bottom); - void (*rotate_ccw)(struct stp_image *image); - void (*rotate_cw)(struct stp_image *image); - void (*rotate_180)(struct stp_image *image); - int (*bpp)(struct stp_image *image); - int (*width)(struct stp_image *image); - int (*height)(struct stp_image *image); - void (*get_row)(struct stp_image *image, - unsigned char *data, int row); - const char *(*get_appname)(struct stp_image *image); - void (*progress_init)(struct stp_image *image); - void (*note_progress)(struct stp_image *image, - double current, double total); - void (*progress_conclude)(struct stp_image *image); - void *rep; - } stp_image_t; - This is an abstract data type for interfacing with the program - which created the image. - - - Function: const stp_vars_t stp_printer_get_printvars (const - stp_printer_t P) - - -File: gimpprint.info, Node: Settings functions, Next: Version functions, Prev: Printer functions, Up: Functions - -Settings functions -================== - - - Function: stp_convert_t stp_choose_colorfunc (int OUTPUT_TYPE, int - IMAGE_BPP, const unsigned char *CMAP, int *OUT_BPP, const - stp_vars_t V) - - - Function: void stp_compute_page_parameters (int PAGE_RIGHT, int - PAGE_LEFT, int PAGE_TOP, int PAGE_BOTTOM, double SCALING, int - IMAGE_WIDTH, int IMAGE_HEIGHT, stp_image_t *IMAGE, int - *ORIENTATION, int *page_width, int *PAGE_HEIGHT, int - *OUT_WIDTH, int *OUT_HEIGHT, int *LEFT, int *TOP) - - - Function: const stp_vars_t stp_default_settings (void) - - - Function: const stp_vars_t stp_maximum_settings (void) - - - Function: const stp_vars_t stp_minimum_settings (void) - - -File: gimpprint.info, Node: Version functions, Prev: Settings functions, Up: Functions - -Version functions -================= - - - Function: const char * stp_check_version (unsigned int - REQUIRED_MAJOR, - unsigned int REQUIRED_MINOR, unsigned int REQUIRED_MICRO) - - This function checks whether the version of libgimpprint that the - program is linked with is equal to the version number passed to - it. If the version is the same, the function returns `NULL'. If - any of the version numbers do not match (i.e. the library version - is too old or too new), a string containing a desription of the - difference is returned. The first error found is returned. The - function checks in the order major, minor, micro. - -Version macros --------------- - - - Macro: GIMPPRINT_CHECK_VERSION (major,minor,micro) - This macro returns zero if the version of the libgimpprint headers - are greater or equal to the version given as an argument. It - returns nonzero if the version of the libgimpprint headers are - less than the argument. - - - Macro: GIMPPRINT_MAJOR_VERSION - - - Macro: GIMPPRINT_MINOR_VERSION - - - Macro: GIMPPRINT_MICRO_VERSION - - - Macro: GIMPPRINT_CURRENT_INTERFACE - - - Macro: GIMPPRINT_BINARY_AGE - - - Macro: GIMPPRINT_INTERFACE_AGE - - These macros are integers holding the version numbers. They should be -used for compile-time checking only. To check version numbers at -run-time, use the equivalent variables. Note that at present (4.1.x -development branch) the library interface version numbers are not used. - -Version variables ------------------ - - - Variable: const unsigned int gimpprint_major_version - - - Variable: const unsigned int gimpprint_minor_version - - - Variable: const unsigned int gimpprint_micro_version - - - Variable: const unsigned int gimpprint_current_interface - - - Variable: const unsigned int gimpprint_binary_age - - - Variable: const unsigned int gimpprint_interface_age - - These variables hold the library version numbers. Because the -version of the library may change on a system using shared libraries, -these should be used instead of the equivalent macros when checking the -library version at run-time. Note that library interface version -numbers are not used in the development branch, but are in the stable -branch. - - -File: gimpprint.info, Node: Programs, Next: Problems, Prev: Functions, Up: Top - -Programs -******** - - This chapter of the manual describes the use of some of the programs -which use the GIMP-Print library (libgimpprint). Note that there is now -a user manual in DocBook/SGML format, currently provided in HTML, -PostScript and PDF formats which is distributed with GIMP-Print. This -manual currently covers the use of the GIMP Print plugin and CUPS -drivers. - -* Menu: - -* The GIMP plugin:: The print plugin for the GIMP -* Ghostscript:: Printer driver -* CUPS:: Printer driver - - -File: gimpprint.info, Node: The GIMP plugin, Next: Ghostscript, Prev: Programs, Up: Programs - -The GIMP Print plugin -===================== - - The GIMP Print plugin is the printing facility for the GNU Image -Manipulation Program(1). This section examines the features offered by -the Print plugin. - - The main window is divided into five panes: - -Preview -------- - - The Preview pane contains a positioning widget that allows -interactively positioning the output on the page. It contains an outer -border, representing the sheet of paper; an inner border, representing -the printable area of the printer; an arrow, pointing to the top of the -page (the end that's fed into the printer); and a black rectangle, -representing the position of the image on the page. The image can be -moved around on the paper. When the first (left) button is used, the -image is moved in screen pixels; when any other button is used, the -image is moved in points(2). The arrow resizes depending upon the -media size chosen; the shaft of the arrow is always equal to one inch -on the output. - -[Figure not available in Info format] - -Printer Settings ----------------- - - The Printer Settings pane contains a dropdown menu for selecting a -printer to print to. There is a special `printer' named `File' that -allows you to choose a file to print to, rather than a printer queue. -The Setup box to the right allows specification of a printer type, a -PPD file(3), and the command to be used to print. Each distinct -printer in the Printer list can have different settings applied to it. -Below that is a combo box allowing choice of media size. The choices -are constrained to those that the printer supports. Below that are -dropdown menus for choosing media type (what kind of paper), media -source (what input tray), ink type, and resolution. All of these -settings are printer-specific. - -[Figure not available in Info format] - -Position --------- - - The Position pane contains various widgets to place the image on the -paper. These widgets work in conjunction with the Preview pane. At the -top of the pane is a button to center the image on the paper (not on the -printable area), and on either side buttons to center vertically and -horizontally. Below these are four boxes that allow entry of the left, -top, right, and bottom of the image. These positions are relative to -the top left of the paper(4). There are two additional boxes that -allow specification of the right margin and bottom margin if you -prefer; these are relative to the bottom right corner of the paper. -Any of these may have values entered into them; the preview image will -be moved appropriately. - - *Note*: These entries do not resize the image. - - Finally, there is a pick box for orientation (landscape or portrait). -There is an `Auto' mode that picks the orientation that yields the -orientation that best matches that of the image to be printed. - -Scaling -------- - - The Scaling pane contains a slider that allows scaling of the image. -The image can be scaled in either percent of the printable area (*not* -the page in this case) or pixels per inch (PPI) via a radio button -below the slider. PPI allows matching image resolution to printer -resolution. The image may be scaled using either method to between 5 -and 100% of the imageable area. It is not possible to crop with the -Print plugin. In Percent mode, the image is scaled so that neither -axis will be longer than the percent of the printable area specified. -For example, if you print an image at 20%, it will be possible to tile -the image 5 times on one axis and at least 5 times on the other. To -the right of the radio button is a button called Set Image Scale. This -sets the scaling to PPI, and sets the resolution as closely as possible -to the resolution stored in the image. To the right of the Set Image -Scale button are two boxes that allow entry of width and height of the -image. These set the scaling mode to PPI. Specifying one -automatically sets the other, and the image is repositioned as needed -to prevent it from falling off the edge of the page. - - To its right is a button group that allows choosing English (inch) -units or metric (centimeter) units. - -Image Settings --------------- - - The Image Settings pane allows choice of Line Art, Solid Colors, or -Photograph image type. Line art or Solid Colors should be used for -graphics containing mostly solid areas of color. They're very similar -to each other. Photograph mode dithers more slowly, but produces more -accurate colors. To the right of these three radio buttons is a button -called Adjust Color. This pops up a new window that controls various -output quality settings. That will be described separately. Finally, -there is a choice of Black and White, Color and Monochrome output. -Monochrome output can be used to print absolute black and white very -quickly. - -Adjust Output -............. - - The Adjust Output button button pops up a non-modal dialog that -allows adjustment of various parameters related to the print quality. -These are independent of the controls within the GIMP itself and only -affect the print. - -[Figure not available in Info format] - - At the top of the window is a thumbnail of the image that changes to -reflect the color settings of the image. This enables you to get an -idea of how the image will print out as you adjust settings. - - Below that there are eight sliders: - -_Brightness_ - (0-2.0, default 1.0) Adjust the brightness of the image. - -_Contrast_ - (0-4.0, default 1.0) Adjust the output contrast. - -_Cyan, Magenta, Yellow_ - (0-4.0, default 1.0) Adjust the cyan, magenta, and yellow in the - output. These should not normally need to be adjusted very much; - even very small adjustments can go quite a long way to restoring - color balance. - -_Saturation_ - (0-9.0, default 1.0) Adjust the color brilliance (saturation) of - the output. Saturation of 0 means pure gray scale, with no color. - Saturation of 9.0 will make just about anything but pure grays - brilliantly colored. - -_Density_ - (0.1-2.0, default 1.0) Adjust the density (amount of ink) in the - print. The density is automatically corrected for the particular - printer, resolution, and in some cases paper choices. If solid - black in the input is not solid in the print, the density needs to - be increased; if there is excessive ink bleed-through and muddy - dark colors, the density should be decreased. - - *Note*: the density will not increase beyond a certain amount no - matter what the slider is set to. - -_Gamma_ - (0.1-4.0, default 1.0) Adjust the output gamma. The gamma value is - automatically corrected for the choice of printer; this is used if - you believe the automatic setting is incorrect. - -Dither Algorithm -................ - - There is also a selection box for the dither algorithm to be used in -the pop-up dialog. There are currently seven choices: - -_Adaptive Hybrid_ - Adaptive Hybrid usually yields the best output quality; it chooses - a modified Floyd-Steinberg error diffusion algorithm or ordered - dithering depending upon the image characteristics. - -_Ordered_ - Ordered uses a pure ordered dither. It generally yields excellent - quality for simple black and white or four color printers without - variable drop size or drop modulation; it is not recommended if - high quality is desired on six color printers. It is considerably - faster than Adaptive Hybrid. - -_Fast_ - Fast also uses a pure ordered dither, but uses a very simple black - model and makes no attempt to handle multi-level (6-color, - variable drop size, or drop modulation) at all cleanly. It is - substantially faster than Ordered dither. The quality tends to be - quite poor except on simple four color printers. On three color - printers, quality is probably competitive with anything else. - -_Very Fast_ - Very Fast is similar to Fast, except that it uses a very simple - dither matrix that can be looked up much more quickly than the - matrix used in the Fast dither. For simple pure black and white - images dominated by horizontal and vertical lines, this may - actually yield the best results; for other types of image, the - quality will be poor. - -_Adaptive Random_ - Adaptive Random is similar to Adaptive Hybrid, except that the - modifications to the Floyd-Steinberg algorithm are slightly - different. This is slower than Adaptive Hybrid on most systems. - For some images the quality may be better than Adaptive Hybrid, - but generally Adaptive Hybrid should yield slightly superior - images. - -_Hybrid Floyd-Steinberg_ - Hybrid Floyd-Steinberg uses the modified Floyd-Steinberg algorithm - of Adaptive Hybrid on the entire image. Generally, the results - are poor in pale regions. - -_Random Floyd-Steinberg_ - Random Floyd-Steinberg uses the modified Floyd-Steinberg algorithm - of Adaptive Random on the entire image. Generally, the results - are poor in pale regions. - -Action Buttons --------------- - - The last pane contains four action buttons: - -_Print and Save Settings_ - Immediately print the image (or, if the File printer is chosen, - display a file selection window to pick the output file), and save - all current settings for all printers. - -_Save Settings_ - Immediately save the settings, and continue working in the Print - plugin. - -_Print_ - Immediately print the image (or, if the `File' printer is chosen, - display a file selection window to pick the output file), but do - not save settings. - -_Cancel_ - Immediately quit without saving settings or printing. - - ---------- Footnotes ---------- - - (1) `http://www.gimp.org' - - (2) The output resolution of the plugin. - - (3) For Postscript printers. - - (4) Again, that's relative to the paper corner, not the printable -area, which is usually smaller. - - -File: gimpprint.info, Node: Ghostscript, Next: CUPS, Prev: The GIMP plugin, Up: Programs - -Ghostscript driver -================== - - -File: gimpprint.info, Node: CUPS, Prev: Ghostscript, Up: Programs - -CUPS driver -=========== - - -File: gimpprint.info, Node: Problems, Next: Appendices, Prev: Programs, Up: Top - -Reporting Bugs -************** - - If you find a bug in GIMP-Print or have any suggestions for -modification or improvement, please send electronic mail to the -GIMP-Print bug reporting address (1). Include the version number, -which you can find by running `gimpprint-config --version'. Also -include in your message the output that the program produced and the -output you expected, if applicable, otherwise the best description of -the problem that you can provide. - - If you have other questions, comments or suggestions about -GIMP-Print, contact the developers via electronic mail to the -GIMP-Print mailing list (2). They will try to help you out, although -they may not have time to fix your problems. - - ---------- Footnotes ---------- - - (1) - - (2) - - -File: gimpprint.info, Node: Appendices, Next: Data Type and Variable Index, Prev: Problems, Up: Top - -Appendices -********** - -* Menu: - -* Dithering:: Dither algorithms. -* Weaving:: Weaving algorithms. -* ESC/P2:: Epson ESC/P2 printer control language. -* New Printer:: Adding a new printer to libgimpprint. - - -File: gimpprint.info, Node: Dithering, Next: Weaving, Prev: Appendices, Up: Appendices - -Dithering -********* - - The dithering code in `print-dither.c' attempts to reproduce various -shades of gray (or all colors) from only a few different inks (black, -cyan, magenta, yellow, and sometimes light cyan and light magenta). -The dots can't vary in darkness or size (except for certain special -printers), and so we need to lay down a certain fraction of dots to -represent each distinct level. - - This sounds straightforward; in practice, it isn't. Completely -random distribution of dots (simple probabilistic dithering) would -create grainy clumps and light spots. The smoothest pattern results -from an equidistant spacing of dots. Approximating this requires -sophisticated algorithms. We have two dithering algorithms, an ordered -dither algorithm that uses a grid (matrix) to decide whether to print, -and a modified Floyd-Steinberg error diffusion algorithm that uses a -grid in a slightly different way. - - We currently have three dithering functions: - - 1. `dither_fastblack' produces pure black or white from a pre-dithered - input. This is used for two purposes: for printing pure black and - white very quickly (e. g. text), and for printing pre-screened - monochrome output that was rasterized externally. - - 2. `dither_black' produces black from grayscale input. The new - dither_black can produce either a single or multiple levels of - black, for printers supporting variable dot size. - - 3. `dither_cmyk' produces 3, 4, 5, 6, or 7 color output (CMY, CMYK, - CcMmYK, CcMmYy, CcMmYyK, or any variants). The new routine can - handle single or multiple levels of each color. - - There is a choice of dithering algorithms. Four of them are based -on a basic error diffusion, with a few tweaks of my own. The other one -is `ordered'. However, they all share the basic operation in common. -First, the algorithm picks what kind of dot (if there are multiple dot -sizes and/or tones that may be picked) is the candidate to be printed. -This decision is made based on the darkness at the point being dithered. -Then, it decides whether the dot will be printed at all. What this is -based on depends upon which algorithm family we use. This is all -described in more detail below. - - Ordered dithering works by comparing the value at a given point with -the value of a tiled matrix. If the value at the point is greater than -the value in the matrix, the dot is printed. The matrix should consist -of a set of evenly spaced points between 0 and the upper limit. The -choice of matrix is very important for print quality. A good dither -matrix will emphasize high frequency components, which distributes dots -evenly with a minimum of clumping. The matrices used here are all -simple matrices that are expanded recursively to create larger matrices -with the same kind of even point distribution. This is described below. - - Note that it is important to use different matrices for the two -sub-operations, because otherwise the choice about whether to print and -the choice of dot size will be correlated. The usual result is that the -print is either too dark or too light, but there can be other problems. - - Ordered dithering works quite well on single dot size, four color -printers. It has not been well tested on four color, variable dot size -printers. It should be avoided on six color printers. - - Error diffusion works by taking the output error at a given pixel and -"diffusing" it into surrounding pixels. Output error is the difference -between the amount of ink output and the input level at each pixel. -For simple printers, with one or four ink colors and only one dot size, -the amount of ink output is either 65536 (i. e. full output) or 0 (no -output). The difference between this and the input level is the error. -Normal error diffusion adds part of this error to the adjoining pixels -in the next column and the next row (the algorithm simply scans each -row in turn, never backing up). The error adds up until it reaches a -threshold (half of the full output level, or 32768), at which point a -dot is output, the output is subtracted from the current value, and the -(now negative) error is diffused similarly. - - Error diffusion works quite well in general, but it tends to generate -artifacts which usually appear as worm-like lines or areas of anomalous -density. I have devised some ways, as described below, of ameliorating -these artifacts. - - There are two sub-classes of error diffusion that we use here, -`random' and `hybrid'. One of the techniques that we use to ameliorate -the artifacts is to use a fuzzy threshold rather than the hard -threshold of half of the output level. Random error diffusion uses a -pseudo-random number to perturb the threshold, while hybrid error -diffusion uses a matrix. Hybrid error diffusion worked very poorly in -3.1.3, and I couldn't figure out why until I found a bug. It now works -very well. - - There is one additional variant (on both sub-classes), called -`adaptive hybrid' and `adaptive random'. The adaptive variant takes -advantage of the fact that the patterns that ordered dithering create -are less visible at very low densities, while the artifacts created by -error diffusion are more objectionable at low densities. At low -densities, therefore, it uses ordered dithering; at higher densities it -uses error diffusion. - - Handling multiple output levels makes life a bit more complicated. -In principle, it shouldn't be much harder: simply figure out what the -ratio between the available output levels is and have multiple -thresholds. In practice, getting these right involves a lot of trial -and error. The other thing that's important is to maximize the number -of dots that have some ink. This will reduce the amount of speckling. -More on this later. - - The next question: how do we handle black when printing in color? -Black ink is much darker than colored inks. It's possible to produce -black by adding some mixture of cyan, magenta, and yellow--in -principle. In practice, the black really isn't very black, and -different inks and different papers will produce different color casts. -However, by using CMY to produce gray, we can output a lot more dots! -This makes for a much smoother image. What's more, one cyan, one -magenta, and one yellow dot produce less darkness than one black dot, -so we're outputting that many more dots. Better yet, with 6 or 7 color -printers, we have to output even more light ink dots. So Epson Stylus -Photo printers can produce really smooth grays--if we do everything -right. The right idea is to use CMY at lower black levels, and -gradually mix in black as the overall amount of ink increases, so the -black dots don't really become visible within the ink mass. - - Variable dot sizes are handled by dividing the range between 0 and -65536 into segments. Each segment can either represent a range in -which all of one kind of ink (color and/or dot size) is used, with -varying amounts of ink, or a transition region between inks, in which -equal numbers of dots are printed but the amount of each ink will be -adjusted throughout the range. Each range is represented by four -numbers: - - 1. bottom of the range - - 2. top of the range - - 3. value of the lighter ink - - 4. value of the darker ink - - In addition, the bit patterns and which type of ink are also -represented, but they don't affect the actual algorithm. - - As mentioned above, the basic algorithm is the same whether we use -ordered dither or error diffusion. We perform the following steps on -each color of each pixel: - - 1. Compute the value of the particular color we're printing. This - isn't usually the pure CMY value; it's adjusted to improve - saturation and to limit the use of black in light toned regions - (to avoid speckling). - - 2. Find the range containing this value. - - 3. Compute where this value lies within the range. We scale the - endpoints between 0 and 65536 for this purpose. So for example, - if the bottom of the range is 10,000 and the top of the range is - 20,000, and the value is 12,500, we're 1/4 of the way between the - bottom and the top of the range, so our scale point is 16384. - - 4. Compute the "virtual value". The virtual value is the distance - between the value of the lighter and the value of the darker ink. - So if the value of the light ink is 32768 and the dark ink is - 65536, we compute a virtual value scaled appropriately between - these two values, which is 40960 in this case. - - 5. Using either error diffusion or ordered dither, the standard - threshold is 1/2 of the value (20480 in this case). Using ordered - dither, we want to compute a value between 0 and 40960 that we - will compare the input value against to decide whether to print. - Using pure error diffusion, we would compare the accumulated error - against 20480 to decide whether to print. In practice, we use the - same matrix method to decide whether to print. The correct amount - of ink will be printed this way, but we minimize the squiggly - lines characteristic of error diffusion by dithering the threshold - in this fashion. A future enhancement will allow us to control - the amount of dithering applied to the threshold. - - The matrices were generated by Thomas Tonino <> -with an algorithm of his devising. The algorithm is designed to -maximize the spacing between dots at any given density by searching the -matrix for holes and placing a dot in the largest available hole. It -requires careful selection of initial points to achieve good results, -and is very time consuming. For best results, a different matrix must -be used for modes with 2:1 aspect ratio (e.g. 1440x720) than for 1:1 -(e. g. 720x720). It is essential with any of these matrices that every -point be used. Skipping points generates low-frequency noise. - - It's essential to use different matrices for deciding whether to -print and for deciding what color (dark or light) to print. This -should be obvious; the decision about whether to print at all should be -as independent as possible from the decision about what color to print, -because any bias will result in excess light or dark ink being printed, -shifting the tonal balance. We actually use the same matrices, but we -shift them vertically and horizontally. Assuming that the matrices are -not self-correlated, this will yield good results. - - The ranges are computed from a list of ink values (between 0 and 1 -for each possible combination of dot size and ink tone, where the value -represents the darkness of the ink) and the desired maximum density of -the ink. This is done in dither_set_ranges, and needs more -documentation. - - I stated earlier that I've tweaked the basic error diffusion -algorithm. Here's what I've done to improve it: - - 1. We use a variable threshold to decide when to print, as discussed - above. This does two things for us: it reduces the slightly - squiggly diagonal lines that are the mark of error diffusion; and - it allows us to lay down some ink even in very light areas near - the edge of the image. The squiggly lines that error diffusion - algorithms tend to generate are caused by the gradual accumulation - of error. This error is partially added horizontally and - partially vertically. The horizontal accumulation results in a - dot eventually being printed. The vertical accumulation results - in a dot getting laid down in roughly the same horizontal position - in the next row. The diagonal squigglies result from the error - being added to pixels one forward and one below the current pixel; - these lines slope from the top right to the bottom left of the - image. - - Error diffusion also results in pale areas being completely white - near the top left of the image (the origin of the printing - coordinates). This is because enough error has to accumulate for - anything at all to get printed. In very pale areas it takes quite - a long time to build up anything printable at all; this results in - the bare spots. - - Randomizing the threshold somewhat breaks up the diagonals to some - degree by randomizing the exact location that the accumulated - output crosses the threshold. It reduces the false white areas by - allowing some dots to be printed even when the accumulated output - level is very low. It doesn't result in excess ink because the - full output level is still subtracted and diffused. - - Excessive randomization leads to blobs at high densities. - Therefore, as the density increases, the degree of randomization - decreases. - - 2. Alternating scan direction between rows (first row is scanned left - to right, second is scanned right to left, and so on). This also - helps break up white areas, and it also seems to break up - squigglies a bit. Furthermore, it eliminates directional biases - in the horizontal direction. This isn't necessary for ordered - dither, but it doesn't hurt either. - - 3. Diffusing the error into more pixels. Instead of diffusing the - entire error into (X+1, Y) and (X, Y+1), we diffuse it into (X+1, - Y), (X+K, Y+1), (X, Y+1), (X-K, Y+1) where K depends upon the - output level (it never exceeds about 10 dots, and is greater at - higher output levels). This really reduces squigglies and - graininess. The amount of this spread can be controlled; for line - art, it should be less than for photographs (of course, line art - doesn't usually contain much light color, but the *error* value - can be small in places!) In addition to requiring more - computation, a wide ink spread results in patterning at high dot - densities (note that the dot density can be high even in fairly - pale regions if multiple dot sizes are in use). - - 4. Don't lay down any colored ink if we're laying down black ink. - There's no point; the colored ink won't show. We still pretend - that we did for purposes of error diffusion (otherwise excessive - error will build up, and will take a long time to clear, resulting - in heavy bleeding of ink into surrounding areas, which is very - ugly indeed), but we don't bother wasting the ink. How well this - will do with variable dot size remains to be seen. - - 5. Oversampling. This is how to print 1440x720 with Epson Stylus - printers. Printing full density at 1440x720 will result in excess - ink being laid down. The trick is to print only every other dot. - We still compute the error as though we printed every dot. It - turns out that randomizing which dots are printed results in very - speckled output. This can be taken too far; oversampling at - 1440x1440 or 1440x2880 virtual resolution results in other - problems. However, at present 1440x1440 (which is more accurately - called "1440x720 enhanced", as the Epson printers cannot print - 1440 rows per inch) does quite well, although it's slow. - - What about multiple output levels? For 6 and 7 color printers, -simply using different threshold levels has a problem: the pale inks -have trouble being seen when a lot of darker ink is being printed. So -rather than just using the output level of the particular color to -decide which ink to print, we look at the total density (sum of all -output levels). If the density's high enough, we prefer to use the -dark ink. Speckling is less visible when there's a lot of ink, anyway. -I haven't yet figured out what to do for multiple levels of one color. - - You'll note that I haven't quoted a single source on color or -printing theory. I simply did all of this empirically. - - There are various other tricks to reduce speckling. One that I've -seen is to reduce the amount of ink printed in regions where one color -(particularly cyan, which is perceived as the darkest) is very pale. -This does reduce speckling all right, but it also results in strange -tonal curves and weird (to my eye) colors. - - Before any dither routine is used, `init_dither()' must be called. -This takes three arguments: the input width (number of pixels in the -input), the output width (number of pixels in the output), and a -`vars_t' structure containing the parameters for the print job. - - `init_dither()' returns a pointer to an opaque object representing -the dither. This object is passed as the first argument to all of the -dither-related routines. - - After a page is fully dithered, `free_dither()' must be called to -free the dither object and perform any cleanup. In the future, this may -do more (such as flush output). This arrangement permits using these -routines with programs that create multiple output pages, such as -GhostScript. - - The dithering routines themselves have a number of control knobs that -control internal aspects of the dithering process. These knobs are -accessible via a number of functions that can be called after -`init_dither()'. - - * `dither_set_density()' takes a double between 0 and 1 representing - the desired ink density for printing solid colors. This is used - in a number of places in the dithering routine to make decisions. - - * `dither_set_black_density()' takes a double between 0 and 1 - representing the desired ink density for printing black ink in - color printing. This is used to balance black against color ink. - By default, this is equal to the density set by - `dither_set_density()'. By setting it higher, more black ink will - be printed. For example, if the base density is .4 and the black - density is .8, twice as much black ink will be printed as would - otherwise be called for. - - This is not used when printing in monochrome. When printing - monochrome, the base density (`dither_set_density') should be - adjusted appropriately. - - * `dither_set_ink_budget()' takes an unsigned number representing the - most ink that may be deposited at a given point. This number is - arbitrary; the limit is computed by summing the size of each ink - dot, which is supplied as a parameter in `dither_set_X_ranges'. - By default, there is no limit. - - * `dither_set_black_lower()' takes a double that should be between 0 - and 1 that represents the lowest density level at which black ink - will start to mix in with colored ink to generate grays. The - lower this is, the less density is required to use black ink. - Setting this too low will result in speckling from black dots, - particularly on 6 and 7 color printers. Setting this too high - will make it hard to get satisfactory black or may result in sharp - transition between blended colors and black. Default: 0.0468. - - It is important to note that since the density scale is never - linear (and since this value is adjusted via other things - happening during the dithering process) that this does not mean - that 95% gray will use any black ink. At this setting, there will - be no black ink used until about 50% gray. - - This only applies to color mode. - - This value should be set lower for printers capable of variable dot - size, since more dots can be laid down close to each other. - - * `dither_set_black_upper()' takes a double that should be between 0 - and 1 that represents the highest density level at which colored - inks will be mixed to create gray. Setting this too low will - result in speckly dark grays because there is not enough ink to - fill all the holes, or sharp transition between blended colors and - black if it is too close to the value of dither_set_black_upper(). - Setting this too high will result in poor black and dark tone - quality. Default: 0.5. This results in 10% and darker grays - being printed with essentially all black. - - This only applies to color mode. - - * `dither_set_black_levels()' takes three doubles that represent the - amount of cyan, magenta, and yellow respectively that are blended - to create gray. The defaults are 1.0 for each, which is probably - too low for most printers. These values are adjusted to create a - good gray balance. Setting these too low will result in pale - light and midtone grays, with a sharp transition to darker tones - as black mixes in. Setting them too high will result in overly - dark grays and use of too much ink, possibly creating - bleed-through. - - This only applies to color mode. - - * `dither_set_randomizers()' takes four integer values representing - the degree of randomness used for cyan, magenta, yellow, and black. - This is used to allow some printing to take place in pale areas. - Zero is the most random; greater than 8 or so gives very little - randomness at all. Defaults are 0 for cyan, magenta, and yellow, - and 4 for black. Setting the value for black too low will result - in black speckling in pale areas. Setting values too high will - result in pale areas getting no ink at all. - - This currently only applies to single dot size in color and black. - It should be extended to operate in variable dot size mode, - although actually applying it correctly will be tricky. - - * `dither_set_ink_darkness()' takes three doubles representing the - contribution to perceived darkness of cyan, magenta, and yellow. - This is used to help decide when to switch between light and dark - inks in 6 and 7 color printers (with light cyan, light magenta, - and possibly light yellow). Setting these too low will result in - too much light ink being laid down, creating flat spots in the - darkness curves and bleed-through. Setting them too high will - result in dark ink being used in pale areas, creating speckle. - The defaults are .4 for cyan, .3 for magenta, and .2 for yellow. - Dark cyan will show against yellow much more than dark magenta - will show against cyan, since the cyan appears much darker than - the yellow. - - * `dither_set_light_inks()' takes three doubles between 0 and 1 - representing the ratio in darkness between the light and dark - versions of the inks. Setting these too low will result in too - much dark ink being used in pale areas, creating speckling, while - setting them too high will result in very smooth texture but too - much use of light ink, resulting in flat spots in the density - curves and ink bleed-through. There are no defaults. Any light - ink specified as zero indicates that there is no light ink for - that color. - - This only applies to 6 and 7 color printers in single dot size - color mode, and only to those inks which have light versions - (usually cyan and magenta). - - * `dither_set_ink_spread()' takes a small integer representing the - amount of ink spread in the dither. Larger numbers mean less - spread. Larger values are appropriate for line art and solid - tones; they will yield sharper transitions but more dither - artifacts. Smaller values are more appropriate for photos. They - will reduce resolution and sharpness but reduce dither artifacts - up to a point. A value of 16 or higher implies minimum ink spread - at any resolution no matter what the overdensity. A value of 14 - is typical for photos on single dot size, 6 color printers. For 4 - color printers, subtract 1 (more spread; the dots are farther - apart). For variable dot size printers, add 1 (more small dots - are printed; less spread is desirable). - - * `dither_set_adaptive_divisor()' takes a float representing the - transition point between error diffusion and ordered dither if - adaptive dithering is used. The float is a fraction of the - printing density. For example, if you wish the transition to be - at 1/4 of the maximum density (which works well on simple 4-color - printers), you would pass .25 here. With six colors and/or with - multiple dot sizes, the values should be set lower. - - * `dither_set_transition()' takes a float representing the exponent - of the transition curve between light and dark inks/dot sizes. A - value less than 1 (typical when using error diffusion) mixes in - less dark ink/small dots at lower ends of the range, to reduce - speckling. When using ordered dithering, this must be set to 1. - - * `dither_set_X_ranges_simple' (X=`c', `m', `y', or `k') describes - the ink choices available for each color. This is useful in - typical cases where a four color printer with variable dot sizes - is in use. It is passed an array of doubles between (0, 1] - representing the relative darkness of each dot size. The dot - sizes are assigned bit patterns (and ink quantities, see - `dither_set_ink_budget()' above) from 1 to the number of levels. - This also requires a density, which is the desired density for this - color. This density need not equal the density specified in - `dither_set_density()'. Setting it lower will tend to print more - dark ink (because the curves are calculated for this color - assuming a lower density than is actually supplied). - - * `dither_set_X_ranges' (X=`c', `m', `y', or `k') describes in a - more general way the ink choices available for each color. For - each possible ink choice, a bit pattern, dot size, value (i. e. - relative darkness), and whether the ink is the dark or light - variant ink is specified. - - --Robert Krawitz <> May 8, 2000 - - -File: gimpprint.info, Node: Weaving, Next: ESC/P2, Prev: Dithering, Up: Appendices - -Weaving for inkjet printers -*************************** - -by Charles Briscoe-Smith and Robert Krawitz. - -* Menu: - -* Weaving introduction:: Just what is weaving? -* Weaving algorithms:: How to weave. - diff --git a/doc/gimpprint.info-3 b/doc/gimpprint.info-3 deleted file mode 100644 index ad51a1c..0000000 --- a/doc/gimpprint.info-3 +++ /dev/null @@ -1,1007 +0,0 @@ -This is gimpprint.info, produced by makeinfo version 4.0 from -gimpprint.texi. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -END-INFO-DIR-ENTRY - - This file documents the gimpprint library and associated programs -used for high quality printing. - - Copyright (C) 2001 Michael Sweet () and Robert -Krawitz () - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gimpprint.info, Node: Weaving introduction, Next: Weaving algorithms, Up: Weaving - -Introduction -============ - - The Epson Stylus Color/Photo printers don't have memory to print -using all of the nozzles in the print head. For example, the Stylus -Photo 700/EX has 32 nozzles. At 720 dpi, with an 8" wide image, a -single line requires (8 * 720 * 6 / 8) bytes, or 4320 bytes (because the -Stylus Photo printers have 6 ink colors). To use 32 nozzles per color -would require 138240 bytes. It's actually worse than that, though, -because the nozzles are spaced 8 rows apart. Therefore, in order to -store enough data to permit sending the page as a simple raster, the -printer would require enough memory to store 256 rows, or 1105920 bytes. -Considering that the Photo EX can print 11" wide, we're looking at more -like 1.5 MB. In fact, these printers are capable of 1440 dpi horizontal -resolution. This would require 3 MB. The printers actually have -64K-256K. - - With the newer (740/750 and later) printers it's even worse, since -these printers support multiple dot sizes; of course, the even newer -2880x720 printers don't help either. - - Older Epson printers had a mode called "MicroWeave" (tm). In this -mode, the host fed the printer individual rows of dots, and the printer -bundled them up and sent them to the print head in the correct order to -achieve high quality. This MicroWeave mode still works in new printers, -but in some cases the implementation is very minimal: the printer uses -exactly one nozzle of each color (the first one). This makes printing -extremely slow (more than 30 minutes for one 8.5x11" page), although the -quality is extremely high with no visible banding whatsoever. It's not -good for the print head, though, since no ink is flowing through the -other nozzles. This leads to drying of ink and possible permanent -damage to the print head. - - By the way, although the Epson manual says that microweave mode -should be used at 720 dpi, 360 dpi continues to work in much the same -way. At 360 dpi, data is fed to the printer one row at a time on all -Epson printers. The pattern that the printer uses to print is very -prone to banding. However, 360 dpi is inherently a low quality mode; -if you're using it, presumably you don't much care about quality. It -is possible to do microweave at 360 DPI, with significantly improved -quality. - - Except for the Stylus Pro printers (5000, 5500, 7000, 7500, 9000, -9500, and when it's released the 10000), which can do microweave at any -resolution, printers from roughly the Stylus Color 600 and later do not -have the capability to do MicroWeave correctly in many cases (some -printers can do MicroWeave correctly at 720 DPI). Instead, the host -must arrange the output in the order that it will be sent to the print -head. This is a very complex process; the jets in the print head are -spaced more than one row (1/720") apart, so we can't simply send -consecutive rows of dots to the printer. Instead, we have to pass e. -g. the first, ninth, 17th, 25th... rows in order for them to print in -the correct position on the paper. This interleaving process is called -"soft" weaving. - - This decision was probably made to save money on memory in the -printer. It certainly makes the driver code far more complicated than -it would be if the printer could arrange the output. Is that a bad -thing? Usually this takes far less CPU time than the dithering -process, and it does allow us more control over the printing process, -e.g. to reduce banding. Conceivably, we could even use this ability to -map out bad jets. - - Interestingly, apparently the Windows (and presumably Macintosh) -drivers for most or all Epson printers still list a "microweave" mode. -Experiments have demonstrated that this does not in fact use the -"microweave" mode of the printer. Possibly it does nothing, or it uses -a different weave pattern from what the non-"microweave" mode does. -This is unnecessarily confusing, at least for people who write drivers -who try to explain them to people who don't. - - What makes this interesting is that there are many different ways of -of accomplishing this goal. The naive way would be to divide the image -up into groups of 256 rows (for a printer with 32 jets and a separation -of 8 rows), and print all the mod8=0 rows in the first pass, mod8=1 -rows in the second, and so forth. The problem with this approach is -that the individual ink jets are not perfectly uniform; some emit -slightly bigger or smaller drops than others. Since each group of 8 -adjacent rows is printed with the same nozzle, that means that there -will be distinct streaks of lighter and darker bands within the image -(8 rows is 1/90", which is visible; 1/720" is not). Possibly worse is -that these patterns will repeat every 256 rows. This creates banding -patterns that are about 1/3" wide. - - So we have to do something to break up this patterning. - - Epson does not publish the weaving algorithms that they use in their -bundled drivers. Indeed, their developer web site -(http://www.ercipd.com/isv/edr_docs.htm) does not even describe how to -do this weaving at all; it says that the only way to achieve 720 dpi is -to use MicroWeave. It does note (correctly) that 1440 dpi horizontal -can only be achieved by the driver (i. e. in software). The manual -actually makes it fairly clear how to do this (it requires two passes -with horizontal head movement between passes), and it is presumably -possible to do this with MicroWeave. - - The information about how to do this is apparently available under -non-disclosure agreement (NDA). It's actually easy enough to reverse -engineer what's inside a print file with a simple Perl script, which is -supplied with the Gimp-Print distribution as tests/parse-escp2. In any -event, we weren't particularly interested in the weaving patterns Epson -used. There are many factors that go into choosing a good weaving -pattern; we're learning them as we go along. Issues such as drying time -(giving the ink a few seconds more or less to dry can have highly -visible effects) affect the quality of the output. - - The Uniprint GhostScript driver has been able to do weaving for a -long time. It uses patterns that must be specified for each choice of -resolution and printer. We preferred an algorithmic approach that -computes a weave pattern for any given choice of inputs. This -obviously requires extensive testing; we developed a test suite -specifically for this purpose. - - -File: gimpprint.info, Node: Weaving algorithms, Prev: Weaving introduction, Up: Weaving - -Weaving algorithms -================== - - I considered a few algorithms to perform the weave. The first one I -devised let me use only (jets-distance_between_jets+1) nozzles, or 25. -This is OK in principle, but it's slower than using all nozzles. By -playing around with it some more, I came up with an algorithm that lets -me use all of the nozzles, except near the top and bottom of the page. - - This still produces some banding, though. Even better quality can be -achieved by using multiple nozzles on the same line. How do we do -this? In 1440x720 mode, we're printing two output lines at the same -vertical position. However, if we want four passes, we have to -effectively print each line twice. Actually doing this would increase -the density, so what we do is print half the dots on each pass. This -produces near-perfect output, and it's far faster than using (pseudo) -"MicroWeave". - - Yet another complication is how to get near the top and bottom of the -page. This algorithm lets us print to within one head width of the top -of the page, and a bit more than one head width from the bottom. That -leaves a lot of blank space. Doing the weave properly outside of this -region is increasingly difficult as we get closer to the edge of the -paper; in the interior region, any nozzle can print any line, but near -the top and bottom edges, only some nozzles can print. We originally -handled this by using the naive way mentioned above near the borders, -and switching over to the high quality method in the interior. -Unfortunately, this meant that the quality is quite visibly degraded -near the top and bottom of the page. We have since devised better -algorithms that allow printing to the extreme top and bottom of the -region that can physically be printed, with only minimal loss of -quality. - - Epson does not advertise that the printers can print at the very top -of the page, although in practice most of them can. The quality is -degraded to some degree, and we have observed that in some cases not -all of the dots get printed. Epson may have decided that the -degradation in quality is sufficient that printing in that region -should not be allowed. That is a valid decision, although we have -taken another approach. - -* Menu: - -* Simple weaving algorithms:: Starting to weave. -* Perfect weaving:: Improving the weave. -* Weaving collisions:: Bang! -* What is perfect weaving?:: What makes a ``perfect'' weave? -* Oversampling:: Increasing resolution, reducing banding - - -File: gimpprint.info, Node: Simple weaving algorithms, Next: Perfect weaving, Prev: Weaving algorithms, Up: Weaving algorithms - -Simple weaving algorithms -------------------------- - - The initial problem is to calculate the starting position of each -pass; the row number of the printer's top jet when printing that pass. -Since we assume the paper cannot be reverse-fed, the print head must, -for each pass, start either further down the page than the previous -pass or at the same position. Each pass's start point is therefore at -a non-negative offset from the previous pass's start point. - - Once we have a formula for the starting row of each pass, we then -turn that "inside out" to get a formula for the pass number containing -each row. - - First, let's define how our printer works. We measure vertical -position on the paper in "rows"; the resolution with which the printer -can position the paper vertically. The print head contains J ink jets, -which are spaced S rows apart. - - Consider a very simple case: we want to print a page as quickly as -possible, and we mostly don't care how sparse the printing is, so long -as it's fairly even. - - It's pretty obvious how to do this. We make one pass with the print -head, printing J lines of data, each line S rows after the previous -one. We then advance the paper by S*J rows and print the next row. -For example, if J=7 and S=4, this method can be illustrated like this: - - pass number - | row number-------> - | | 111111111122222222223333333333444444444455555555556666666666 - | 0123456789012345678901234567890123456789012345678901234567890123456789 - 0 *---*---*---*---*---*---* - 1 *---*---*---*---*---*---* - 2 \-----------------------/ *---*---*---*---*---*- - 7 jets \---/ - 4 rows offset from one jet to the next - \---------------------------/ - 7*4=28 rows offset from one pass to the next - - In these examples, the vertical axis can be thought of as the time -axis, with the pass number shown at the left margin, while the row -number runs horizontally. A `*' shows each row printed by a pass, and -a row of `-' is used to link together the rows printed by one pass of -the print head. The first pass is numbered `0' and starts at row 0. -Each subsequent pass p starts at row p*S*J. Each pass prints J lines, -each line being S rows after the previous one. (For ease of viewing -this file on a standard terminal, I'm clipping the examples at column -80.) - - This method covers the whole page with lines printed evenly S rows -apart. However, we want to fill in all the other rows with printing to -get a full-density page (we're ignoring oversampling at this stage). -Where we have previously printed a single pass, we'll now print a "pass -block": we print extra passes to fill in the empty rows. A naive -implementation might look like this: - - 0 *---*---*---*---*---*---* - 1 *---*---*---*---*---*---* - 2 *---*---*---*---*---*---* - 3 *---*---*---*---*---*---* - 4 *---*---*---*---*---*---* - 5 *---*---*---*---*---*---* - 6 *---*---*---*---*---*---* - 7 *---*---*---*---*---*---* - 8 *---*---*---*---*---*- - 9 *---*---*---*---*---* - 10 *---*---*---*---*--- - 11 *---*---*---*---*-- - -(Now you can see why this process is called "weaving"!) - - -File: gimpprint.info, Node: Perfect weaving, Next: Weaving collisions, Prev: Simple weaving algorithms, Up: Weaving algorithms - -Perfect weaving ---------------- - - This simple weave pattern prints every row, but will give conspicuous -banding patterns for the reasons discussed above. - - Let's start improving this for our simple case. We can reduce -banding by making sure that any given jet never prints a row too close -to another row printed by the same jet. This means we want to space the -rows printed by a given jet evenly down the page. In turn, this -implies we want to advance the paper by as nearly an equal amount after -each pass as possible. - - Each pass block prints S*J lines in S passes. The first line -printed in each pass block is S*J rows lower on the page than the first -line printed in the previous pass block. Therefore, if we advance the -paper by J rows between each pass, we can print the right number of -passes in each block and advance the paper perfectly evenly. - - Here's what this "perfect" weave looks like: - - start of full weave - | - 0 *---*---*---*---*---*---* - 1 *---*---*---*---*---*---* - 2 *---*---*---*---*---*---* - 3 *---*---*---*---*---*---* - 4 *---*---*---*---*---*---* - 5 *---*---*---*---*---*---* - 6 *---*---*---*---*---*---* - 7 *---*---*---*---*---*---* - 8 *---*---*---*---*---*- - 9 *---*---*---*-- - 10 *---*--- - 11 * - - You'll notice that, for the first few rows, this weave is too sparse. -It is not until the row marked "start of full weave" that every -subsequent row is printed. We can calculate this start position as -follows: - - start = (S-1) * (J-1) - - For the moment, we will ignore this problem with the weave. We'll -consider later how to fill in the missing rows. - - Let's look at a few more examples of perfect weaves: - -S=2, J=7, start=(2-1)*(7-1)=6: - - starting row of full weave - | - 0 *-*-*-*-*-*-* - 1 *-*-*-*-*-*-* - 2 *-*-*-*-*-*-* - 3 *-*-*-*-*-*-* - 4 *-*-*-*-*-*-* - 5 *-*-*-*-*-*-* - 6 *-*-*-*-*-*-* - 7 *-*-*-*-*-*-* - -S=7, J=2, start=6: - - start - | - 0 *------* - 1 *------* - 2 *------* - 3 *------* - 4 *------* - 5 *------* - 6 *------* - 7 *------* - 8 *------* - 9 *------* - -S=4, J=13, start=36: - - start - | - 0 *---*---*---*---*---*---*---*---*---*---*---*---* - 1 *---*---*---*---*---*---*---*---*---*---*---*---* - 2 *---*---*---*---*---*---*---*---*---*---*---*---* - 3 *---*---*---*---*---*---*---*---*---*-- - 4 *---*---*---*---*---*---*- - 5 *---*---*---* - -S=13, J=4, start=36: - - start - | - 0 *------------*------------*------------* - 1 *------------*------------*------------* - 2 *------------*------------*------------* - 3 *------------*------------*------------* - 4 *------------*------------*------------* - 5 *------------*------------*------------* - 6 *------------*------------*------------* - 7 *------------*------------*------------* - 8 *------------*------------*------------* - 9 *------------*------------*------------* - 10 *------------*------------*----------- - 11 *------------*------------*------- - 12 *------------*------------*--- - 13 *------------*------------ - 14 *------------*-------- - 15 *------------*---- - 16 *------------* - 17 *--------- - 18 *----- - 19 *- - -S=8, J=5, start=28: - - start - | - 0 *-------*-------*-------*-------* - 1 *-------*-------*-------*-------* - 2 *-------*-------*-------*-------* - 3 *-------*-------*-------*-------* - 4 *-------*-------*-------*-------* - 5 *-------*-------*-------*-------* - 6 *-------*-------*-------*-------* - 7 *-------*-------*-------*-------* - 8 *-------*-------*-------*-------* - 9 *-------*-------*-------*-------* - 10 *-------*-------*-------*--- - 11 *-------*-------*------ - 12 *-------*-------*- - 13 *-------*---- - 14 *------- - 15 *-- - -S=9, J=5, start=32: - - start - | - 0 *--------*--------*--------*--------* - 1 *--------*--------*--------*--------* - 2 *--------*--------*--------*--------* - 3 *--------*--------*--------*--------* - 4 *--------*--------*--------*--------* - 5 *--------*--------*--------*--------* - 6 *--------*--------*--------*--------* - 7 *--------*--------*--------*--------* - 8 *--------*--------*--------*--------* - 9 *--------*--------*--------*----- - 10 *--------*--------*--------* - 11 *--------*--------*---- - 12 *--------*-------- - 13 *--------*--- - 14 *------- - 15 *-- - -S=6, J=7, start=30: - - start - | - 0 *-----*-----*-----*-----*-----*-----* - 1 *-----*-----*-----*-----*-----*-----* - 2 *-----*-----*-----*-----*-----*-----* - 3 *-----*-----*-----*-----*-----*-----* - 4 *-----*-----*-----*-----*-----*-----* - 5 *-----*-----*-----*-----*-----*-----* - 6 *-----*-----*-----*-----*-----*----- - 7 *-----*-----*-----*-----*---- - 8 *-----*-----*-----*--- - 9 *-----*-----*-- - 10 *-----*- - 11 * - - -File: gimpprint.info, Node: Weaving collisions, Next: What is perfect weaving?, Prev: Perfect weaving, Up: Weaving algorithms - -Weaving collisions ------------------- - - This perfect weave is not possible in all cases. Let's look at -another example: - -S=6, J=4: - - 0 *-----*-----*-----* - 1 *-----*-----*-----* - 2 *-----*-----*-----* - 3 *-----*-----*-----* - 4 ^ *-^---*-----*-----* - 5 | ^ | *-^---*-----*-----* - OUCH! ^ | ^ - | | - -Here we have a collision. Some lines printed in later passes overprint -lines printed by earlier passes. We can see why by considering which -row number is printed by a given jet number j (numbered from 0) of a -given pass, p: - - row(p, j) = p*J + j*S - - Because J=4 and S=6 have a common factor of 2, jet 2 of pass 0 -prints the same row as jet 0 of pass 3: - - row(0, 2) = 0*4 + 2*6 = 12 - row(3, 0) = 3*4 + 0*6 = 12 - - In fact, with this particular weave pattern, jets 0 and 1 of pass -p+3 always overprint jets 2 and 3 of pass p. We'll represent -overprinting rows by a `^' in our diagrams, and correct rows by `*': - -S=6 J=4: - - 0 *-----*-----*-----* - 1 *-----*-----*-----* - 2 *-----*-----*-----* - 3 ^-----^-----*-----* - 4 ^-----^-----*-----* - 5 ^-----^-----*-----* - - -File: gimpprint.info, Node: What is perfect weaving?, Next: Oversampling, Prev: Weaving collisions, Up: Weaving algorithms - -What makes a "perfect" weave? ------------------------------ - - So what causes the perfect weave cases to be perfect, and the other -cases not to be? In all the perfect cases above, S and J are -relatively prime (i.e. their greatest common divisor (GCD) is 1). As -we mentioned above, S=6 and J=4 have a common factor, which causes the -overprinting. Where S and J have a GCD of 1, they have no common -factor other than 1 and, as a result, no overprinting occurs. If S and -J are not relatively prime, their common factor will cause overprinting. - - We can work out the greatest common divisor of a pair of natural -numbers using Euler's algorithm: - - * Start with the two numbers: (e.g.) 9, 24 - - * Swap them if necessary so that the larger one comes first: 24, 9 - - * Subtract the second number from the first: 15, 9 - - * Repeat until the first number becomes smaller: 6, 9 - - * Swap the numbers again, so the larger one comes first: 9, 6 - - * Subtract again: 3, 6 - - * Swap: 6, 3 - - * Subtract: 3, 3 - - * And again: 0, 3 - - * When one of the numbers becomes 0, the other number is the GCD of - the two numbers you started with. - - These repeated subtractions can be done with C's `%' operator, so we -can write this in C as follows: - - unsigned int - gcd(unsigned int x, unsigned int y) - { - if (y == 0) - return x; - while (x != 0) { - if (y > x) - swap (&x, &y); - x %= y; - } - return y; - } - - `gcd(S,J)' will feature quite prominently in our weaving algorithm. - - If 0 <= j < J, there should only be a single pair (p, j) for any -given row number. If S and J are not relatively prime, this assumption -breaks down. (For conciseness, let G=GCD(S,J).) - -S=8, J=6, G=2: - - 0 *-------*-------*-------*-------*-------* - 1 *-------*-------*-------*-------*-------* - 2 *-------*-------*-------*-------*-------* - 3 *-------*-------*-------*-------*-------* - 4 ^-------^-------^-------*-------*-------* - 5 ^-------^-------^-------*-------*-------* - - In this case, jets 0, 1 and 2 of pass p+4 collide with jets 3, 4 and -5 of pass p. - - How can we calculate these numbers? Suppose we were to print using -fewer jets, say J/G jets. The greatest common divisor of J/G and S is -1, enabling a perfect weave. But to get a perfect weave, we also have -to advance the paper by a factor of G less: - - 0 *-------*-------* - - - - 1 *-------*-------* - - - - 2 *-------*-------* - - - - 3 *-------*-------* - - - - 4 *-------*-------* - - - - 5 *-------*-------* - - - - - If we left the paper advance alone, we'd get a sparse weave; only one -row can be printed every G rows: - - 0 *-------*-------* - - - - 1 *-------*-------* - - - - 2 *-------*-------* - - - - 3 *-------*-------* - - - - 4 *-------*-------* - - - - 5 *-------*-------* - - - - ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ - These rows need filling in. - - The rows that would have been printed by the jets we've now omitted -(shown as `-') are printed by other jets on later passes. - - Let's analyse this. Consider how a pass p could collide with pass -0. Pass p starts at offset p*J. Pass 0 prints at rows which are -multiples of S. If p*J is exactly divisible by S, a collision has -occurred, unless p*J >= J*S (which will happen when we finish a pass -block). - - So, we want to find p and q such that p*J=q*S and p is minimised. -Then p is the number of rows before a collision, and q is the number of -jets in pass 0 which are not involved in the collision. To do this, we -find the lowest common multiple of J and S, which is L=J*S/G. L/J is -the number of rows before a collision, and L/S is the number of jets in -the first pass not involved in the collision. - - Thus, we see that the first J/G rows printed by a given pass are not -overprinted by any later pass. However, the rest of the rows printed -by pass p are overprinted by the first J-(J/G) jets of pass p+(S/G). -We will use C to refer to S/G, the number of rows after which a -collision occurs. - - Another example: - -S=6, J=9, G=3, C=S/G=2: - - 0 *-----*-----*-----*-----*-----*-----*-----*-----* - 1 *-----*-----*-----*-----*-----*-----*-----*-----* - 2 ^-----^-----^-----^-----^-----^-----*-----*-----* - 3 ^-----^-----^-----^-----^-----^-----*-----*-----* - 4 ^-----^-----^-----^-----^-----^-----*----- - 5 ^-----^-----^-----^-----^-----^-- - ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ - These rows need filling in. - -In this case, the first J-(J/G) = 9-9/3 = 6 jets of pass p+(6/3)=p+2 -collide with the last 6 jets of pass p. Only one row in every G=2 rows -is printed by this weave. - -S=9, J=6, G=3, C=3: - - 0 *--------*--------*--------*--------*--------* - 1 *--------*--------*--------*--------*--------* - 2 *--------*--------*--------*--------*--------* - 3 ^--------^--------^--------^--------*--------* - 4 ^--------^--------^--------^--------*--------* - 5 ^--------^--------^--------^--------*--------* - -Here, the first J-(J/G) = 6-6/3 = 4 jets of pass p+(9/3)=p+3 collide -with the last 4 jets of pass p. - - Note that, in these overprinting cases, only rows divisible by G are -ever printed. The other rows, those not divisible by G, are not -touched by this weave. - - We can modify our weave pattern to avoid overprinting any rows and -simultaneously fill in the missing rows. Instead of using J alone to -determine the start of each pass from the previous pass, we adjust the -starting position of some passes. As mentioned before, we will divide -the page into pass blocks, with S passes in each block. This ensures -that the first jet of the first pass in a block prints the row which -the Jth jet of the first pass of the previous block would have printed, -if the print head had one extra jet. - - Looking back at an example of a perfect weave, we can divide it into -pass blocks: - -S=7, J=2, G=1: - - imaginary extra jet - | - 0 *------* * <--start of pass block 0 - 1 *------* | - 2 *------* | - 3 *------*| - 4 *-----|* - 5 *---|--* - 6 *-|----* - | - 7 *------* <--start of pass block 1 - 8 *------* - 9 *------* - - We can now calculate the start of a given pass by reference to its -pass block. The first pass of pass block b always starts at row -(b*S*J). The start row of each of the other passes in the block are -calculated using offsets from this row. - - For the example above, there are 7 passes in each pass block, and -their offsets are 0, 2, 4, 6, 8, 10 and 12. The next pass block is -offset S*J=14 rows from the start of the current pass block. - - The simplest way to modify the "perfect" weave pattern to give a -correct weave in cases where G!=1 is to simply change any offsets which -would result in a collision, until the collision disappears. Every -printed row in the weave, as we have shown it up to now, is separated -from each of its neighbouring printed rows by G blank rows. We will -add an extra offset to each colliding pass in such a way that we push -the pass onto these otherwise blank rows. - - We have seen that, unless G=1, the plain weave pattern results in -each pass colliding with the pass S/G passes before. We will now -subdivide our pass block into subblocks, each consisting of B=S/G -passes. There are therefore G subblocks in a pass block. - - For each subblock, the passes in that subblock have a constant offset -added to them. The offset is different for each subblock in a block. -There are many ways we can choose the offsets, but the simplest is to -make the offset equal to the subblock number (starting from 0). - - Thus, the passes in the first subblock in each pass block remain at -the offsets we've already calculated from J. The passes in the second -subblock each have 1 added to their offset, the passes in the third -subblock have 2 added, and so on. Thus, the offset of pass p (numbered -relative to the start of its pass block) is p*J + floor(p/B). - - This gives us a weave pattern looking like this: - -S=6, J=9, G=3, B=2: - - 0 *-----*-----*-----*-----*-----*-----*-----*-----* - 1 ^ *-----*-----*-----*-----*-----*-----*-----*-----* - 2 | +-> *-----*-----*-----*-----*-----*-----*-----*-----* - 3 | | *-----*-----*-----*-----*-----*-----*-----*-----* - 4 | | +-> *-----*-----*-----*-----*-----*-----*--- - 5 | | | *-----*-----*-----*-----*-----* - 6 | | | +-> *-----*-----*-----*----- - 7 | | | | *-----*-----*-- - | | | start of pass block 1 - | | | (offset returns to 0) - | | start of subblock 2 (offset 2 rows) - | start of subblock 1 (following passes offset by 1 row) - start of passblock 0, subblock 0 (pass start calculated as p*J) - -S=9, J=6, G=3, B=3: - - 0 *--------*--------*--------*--------*--------* - 1 *--------*--------*--------*--------*--------* - 2 *--------*--------*--------*--------*--------* - 3 *--------*--------*--------*--------*--------* - 4 *--------*--------*--------*--------*--------* - 5 *--------*--------*--------*--------*--------* - 6 *--------*--------*--------*--------*--- - 7 *--------*--------*--------*------ - 8 *--------*--------*--------* - 9 *--------*--------*----- - 10 \---/ *--------*-------- - 11 small offset *--------*-- - 12 *---- - - This method of choosing offsets for subblocks can result in an -occasional small offset (as shown above) between one pass and the next, -particularly when G is large compared to J. For example: - -S=8, J=4, G=4, B=2: - - 0 *-------*-------*-------* - 1 *-------*-------*-------* - 2 *-------*-------*-------* - 3 *-------*-------*-------* - 4 *-------*-------*-------* - 5 *-------*-------*-------* - 6 *-------*-------*-------* - 7 *-------*-------*-------* - 8 *-------*-------*-------* - 9 \/ *-------*-------*-------* - very small offset! - - We can plot the offset against the subblock number as follows: - - subblock number - | offset - | | - | 0123 - 0 * - 1 * - 2 * - 3 * - 0 * - 1 * - 2 * - 3 * - -The discontinuity in this plot results in the small offset between -passes. - - As we said at the beginning, we want the offsets from each pass to -the next to be as similar as possible. We can fix this by calculating -the offset for a given subblock b as follows: - - offset(b) = 2*b , if b < ceiling(G/2) - = 2*(G-b)-1 , otherwise - - We can visualise this as follows, for G=10: - - 0123456789 - 0 * - 1 * - 2 * - 3 * - 4 * - 5 * - 6 * - 7 * - 8 * - 9 * - 0 * - 1 * - 2 * - 3 * - 4 * - 5 * - 6 * - 7 * - 8 * - 9 * - -and for G=11: - - 1 - 01234567890 - 0 * - 1 * - 2 * - 3 * - 4 * - 5 * - 6 * - 7 * - 8 * - 9 * - 10 * - 0 * - 1 * - 2 * - 3 * - 4 * - 5 * - 6 * - 7 * - 8 * - 9 * - 10 * - -This gives a weave looking like this: - -S=12, J=6, G=6, B=2: - - 0 *-----------*-----------*-----------*-----------*-----------* - 1 *-----------*-----------*-----------*-----------*-----------* - 2 *-----------*-----------*-----------*-----------*-----------* - 3 *-----------*-----------*-----------*-----------*--------- - 4 *-----------*-----------*-----------*-----------*- - 5 *-----------*-----------*-----------*------- - 6 *-----------*-----------*-----------* - 7 *-----------*-----------*------ - 8 *-----------*-----------*-- - 9 *-----------*-------- - 10 *-----------*---- - 11 *---------- - 12 *----- - - This method ensures that the offset between passes is always in the -range [J-2,J+2]. - - (This might seem odd, but it occurs to me that a good weave pattern -might also make a good score for bell ringers. When church bells are -rung, a list of "changes" are used. For example, if 8 bells are being -used, they will, at first, be rung in order: 12345678. If the first -change is for bells 5 and 6, the bells will then be rung in the order -12346578. If the second change is 1 and 2, the next notes are 21346578. -After a long list of changes, the order the bells are rung in can become -quite complex. - - For a group of bell-ringers to change the order of the notes, they -must each either delay their bell's next ring, hasten it, or keep it -the same as the time it takes to ring all the bells once. The length -of time between each ring of a given bell can only be changed a little -each time, though; with an ink-jet weave pattern, we want the same to -apply to the distance between passes.) - - Finally, knowing the number of jets J and their separation S, we can -calculate the starting row of any given pass p as follows: - - passesperblock = S - passblock = floor(p / passesperblock) - offsetinpassblock = p - passblock * passesperblock - subblocksperblock = gcd(S, J) - passespersubblock = S / subblocksperblock - subpassblock = floor(offsetinpassblock / passespersubblock) - if subpassblock < ceiling(subblocksperblock/2) - subblockoffset = 2*subpassblock - else - subblockoffset = 2*(subblocksperblock-subpassblock)-1 - startingrow = passblock * S * J + offsetinpassblock * J + subblockoffset - - We can simplify this down to the following: - - subblocksperblock = gcd(S, J) - subpassblock = floor((p % S) * subblocksperblock / S) - if subpassblock * 2 < subblocksperblock - subblockoffset = 2*subpassblock - else - subblockoffset = 2*(subblocksperblock-subpassblock)-1 - startingrow = p * J + subblockoffset - - So the row number of jet j of pass p is - - subblocksperblock = gcd(S, J) - - subblockoffset(p) - = 2*subpassblock , if subpassblock * 2 < subblocksperblock - = 2*(subblocksperblock-subpassblock)-1 , otherwise - where - subpassblock = floor((p % S) * subblocksperblock / S) - - row(j, p) = p * J + subblockoffset(p) + j * S - - Together with the inequality 0 <= j < J, we can use this definition -in reverse to calculate the pass number containing a given row, r. -Working out the inverse definition involves a little guesswork, but one -possible result is as follows. Given a row, r, which is known to be -the first row of a pass, we can calculate the pass number as follows: - - subblocksperblock = gcd(S, J) - subblockoffset = r % subblocksperblock - pass = (r - subblockoffset) / J - - If G==1, we can determine the pass number with this algorithm: - - offset = r % J - pass = (r - offset) / J - while (offset % S != 0) - { - pass-- - offset += J - } - jet = offset / S - - Generalising, we come up with this algorithm. Given r, S and J: - - G = gcd(S, J) - passespersubblock = S/G - subblockoffset = r % G - subpassblock = subblockoffset / 2 , if subblockoffset % 2 == 0 - = G - (subblockoffset+1)/2 , otherwise - baserow = r - subblockoffset - (subpassblock * passespersubblock * J) - offset = baserow % J - pass = (baserow - offset) / J - while (offset % S != 0) - { - offset += J - pass -= 1 - } - subblockretreat = floor(pass / passespersubblock) % G - pass -= subblockretreat * passespersubblock - pass += subpassblock * passespersubblock - jet = (r - subblockoffset - pass * J) / S - - Let's look at some examples of imperfect but correct weave patterns: - -S=6, J=4, GCD=2, -passesperblock=S=6, -passespersubblock=S/G=6/2=3: - - 0 *-----*-----*-----* - 1 *-----*-----*-----* - 2 *-----*-----*-----* - 3 *-----*-----*-----* - 4 *-----*-----*-----* - 5 *-----*-----*-----* - 6 *-----*-----*-----* - 7 *-----*-----*-----* - 8 *-----*-----*-----* - 9 *-----*-----*-----* - 10 *-----*-----*-----* - 11 *-----*-----*-----* - 12 *-----*-----*-----* - 13 *-----*-----*-----* - 14 *-----*-----*-----* - 15 *-----*-----*---- - 16 *-----*-----* - 17 *-----*-- - 18 *----- - 19 *- - -S=8, J=6, G=2, -passesperblock=S=8, -passespersubblock=S/G=8/2=4: - - 0 *-------*-------*-------*-------*-------* - 1 *-------*-------*-------*-------*-------* - 2 *-------*-------*-------*-------*-------* - 3 *-------*-------*-------*-------*-------* - 4 *-------*-------*-------*-------*-------* - 5 *-------*-------*-------*-------*-------* - 6 *-------*-------*-------*-------*-------* - 7 *-------*-------*-------*-------*-- - 8 *-------*-------*-------*----- - 9 *-------*-------*------- - 10 *-------*-------*- - 11 *-------*--- - 12 *---- - -S=6, J=12, G=6, -passesperblock=S=6, -passespersubblock=S/G=6/6=1: - - 0 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*-----* - 1 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*--- - 2 *-----*-----*-----*-----*-----*-----*-----*-----*- - 3 *-----*-----*-----*-----*-----*-----* - 4 *-----*-----*-----*-----*-- - 5 *-----*-----*---- - 6 *----- - - We have now solved the basic weaving problem. There are two further -refinements we need to consider: oversampling, and filling in the -missing rows at the start of the weave. - diff --git a/doc/gimpprint.info-4 b/doc/gimpprint.info-4 deleted file mode 100644 index a42b029..0000000 --- a/doc/gimpprint.info-4 +++ /dev/null @@ -1,1151 +0,0 @@ -This is gimpprint.info, produced by makeinfo version 4.0 from -gimpprint.texi. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -END-INFO-DIR-ENTRY - - This file documents the gimpprint library and associated programs -used for high quality printing. - - Copyright (C) 2001 Michael Sweet () and Robert -Krawitz () - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gimpprint.info, Node: Oversampling, Prev: What is perfect weaving?, Up: Weaving algorithms - -Oversampling ------------- - - By oversampling, we mean printing on the same row more than once. -There are two reasons for oversampling: to increase the horizontal -resolution of the printout and to reduce banding. - - Oversampling to increase horizontal resolution is necessary because, -although the printer might be able to position an ink drop to, for -example, 1/1440" horizontally, it may not be able to lay down two such -drops 1/1440" apart. If it can print two drops 1/720" apart, 2x -oversampling will be necessary to get a 1/1440" horizontal resolution. -If it can only print two drops 1/360" apart, 4x oversampling will be -necessary for a 1/1440" horizontal resolution. The printer enforces -this "drop spacing" by only accepting raster passes with a horizontal -resolution matching the spacing with which it can print dots, so we -must print passes at different horizontal positions if we are to obtain -a higher horizontal resolution. (Another reason it does this may be to -reduce the amount of memory needed in the printer.) - - Oversampling can also be done to decrease the banding apparent in an -image. By splitting a row into two or more sets of dots ("lines") and -printing each line on the same row, but with a different nozzle for -each line, we can get a smoother print. - - To quantify these two kinds of oversampling, we'll introduce two new -constants: H shows how many different horizontal offsets we want to -print at (the "horizontal oversampling") while O shows how many times -we want to print each row, over and above the number of times necessary -for horizontal oversampling (the "extra oversampling"). - - It is necessary for all the lines printed by a given pass to have the -same horizontal offset, but there need not be any relation between them -in terms of extra oversampling. For the moment, however, we will treat -all oversampling as potentially requiring this alignment; all lines in -one pass must be derived from the original row data in the same way. -Thus, we'll assume O=1 for now. - - So, how do we do this oversampling? In fact, it can be done easily: -advance the paper by a factor of H less between each pass. We'll -define a new variable, A, to show how much we advance the paper between -passes. Previously, we'd have defined A=J; we now let A=J/H. This -also affects our pass blocks. Printing one pass block used to involve -advancing the paper S*J rows; it now advances the paper S*J/H rows. We -therefore name a group of H pass blocks a "band". Printing one band -involves advancing the paper S*J rows, as a pass block did before. - - To keep our weave pattern working correctly, so that overprinting -does not occur within a pass block, we also have to redefine G as -GCD(S,A). Here's an example of an oversampled weave pattern: - -S=4, J=10, H=2, A=J/H=10/2=5, G=GCD(4,5)=1, -passesperblock=S=4, -passespersubblock=S/G=4/1=4: - - 0 *---*---*---*---*---*---*---*---*---* - 1 *---*---*---*---*---*---*---*---*---* - 2 *---*---*---*---*---*---*---*---*---* - 3 *---*---*---*---*---*---*---*---*---* - 4 *---*---*---*---*---*---*---*---*---* - 5 *---*---*---*---*---*---*---*---*---* - 6 *---*---*---*---*---*---*---*---*---* - 7 *---*---*---*---*---*---*---*---*---* - 8 *---*---*---*---*---*---*---*---*---* - 9 *---*---*---*---*---*---*---*---* - 10 *---*---*---*---*---*---*--- - 11 *---*---*---*---*---*-- - 12 *---*---*---*---*- - 13 *---*---*---* - 14 *---*--- - 15 *-- - - Now we have to determine which line is printed by each jet on each -pass. If we number each line generated as we split up a row, we can -use these numbers. We'll number the lines in our diagram by replacing -the `*'s with integers in the range [0...H-1]. - - Overprinting occurs once per pass block, so we can simply print pass -block 0 with line 0, pass block 1 with line 1, pass block 2 with line -2, etc, wrapping to 0 when we've run out of lines: - - 0 0---0---0---0---0---0---0---0---0---0 - 1 0---0---0---0---0---0---0---0---0---0 - 2 0---0---0---0---0---0---0---0---0---0 - 3 0---0---0---0---0---0---0---0---0---0 - 4 1---1---1---1---1---1---1---1---1---1 - 5 1---1---1---1---1---1---1---1---1---1 - 6 1---1---1---1---1---1---1---1---1---1 - 7 1---1---1---1---1---1---1---1---1---1 - 8 0---0---0---0---0---0---0---0---0---0 - 9 0---0---0---0---0---0---0---0---0 - 10 0---0---0---0---0---0---0--- - 11 0---0---0---0---0---0-- - 12 1---1---1---1---1- - 13 1---1---1---1 - 14 1---1--- - 15 1-- - -S=4, J=12, H=2, A=J/H=12/2=6, G=GCD(4,6)=2, -passesperblock=S=4, -passespersubblock=S/G=4/2=2: - - 0 0---0---0---0---0---0---0---0---0---0---0---0 - 1 0---0---0---0---0---0---0---0---0---0---0---0 - 2 0---0---0---0---0---0---0---0---0---0---0---0 - 3 0---0---0---0---0---0---0---0---0---0---0---0 - 4 1---1---1---1---1---1---1---1---1---1---1---1 - 5 1---1---1---1---1---1---1---1---1---1---1---1 - 6 1---1---1---1---1---1---1---1---1---1---1 - 7 1---1---1---1---1---1---1---1---1-- - 8 0---0---0---0---0---0---0---0- - 9 0---0---0---0---0---0--- - 10 0---0---0---0---0 - 11 0---0---0-- - 12 1---1- - - But what do we do if J is not an exact multiple of H? This is a -difficult problem, which I struggled with for quite a few days before -giving in and taking the easy (but less elegant) way out. The easy -solution is to round J/H down, then add on the accumulated error at the -end of each band. - -S=4, J=11, H=2 A=floor(J/H)=floor(11/2)=5, G=GCD(4,5), -passesperblock=S=4, -passespersubblock=S/G=4/1=4 - - Band 0: - 0 0---0---0---0---0---0---0---0---0---0---0 - 1 0---0---0---0---0---0---0---0---0---0---0 - 2 0---0---0---0---0---0---0---0---0---0---0 - 3 0---0---0---0---0---0---0---0---0---0---0 - 4 1---1---1---1---1---1---1---1---1---1---1 - 5 1---1---1---1---1---1---1---1---1---1---1 - 6 1---1---1---1---1---1---1---1---1---1---1 - 7 1---1---1---1---1---1---1---1---1---1--- - - Band 1: - 8 | 0---0---0---0---0---0---0---0---0- - 9 \-----------------------------------------/ 0---0---0---0---0---0---0---0 - 10 S*J rows 0---0---0---0---0---0--- - 11 0---0---0---0---0-- - 12 1---1---1---1- - 13 1---1---1 - 14 1--- - - We can calculate the starting row and subpass number of a given pass -in this scheme as follows: - - A = floor(J / H) - subblocksperblock = gcd(S, A) - subpassblock = floor((p % S) * subblocksperblock / S) - if subpassblock * 2 < subblocksperblock - subblockoffset = 2*subpassblock - else - subblockoffset = 2*(subblocksperblock-subpassblock)-1 - band = floor(P / (S * H)) - passinband = P % (S * H) - startingrow = band * S * J + passinband * A + subblockoffset - subpass = passinband / S - - So the row number of jet j of pass p is - - A = floor(J / H) - subblocksperblock = gcd(S, A) - - subblockoffset(p) - = 2*subpassblock , if subpassblock * 2 < subblocksperblock - = 2*(subblocksperblock-subpassblock)-1 , otherwise - where - subpassblock = floor((p % S) * subblocksperblock / S) - - band(p) = floor(p / (S * H)) - passinband(p) = p % (S * H) - - row(j, p) = band(p) * S * J + passinband(p) * A + subblockoffset(p) + j * S - row(j, p) = p * J + subblockoffset(p) + j * S - - To be continued.... - - -File: gimpprint.info, Node: ESC/P2, Next: New Printer, Prev: Weaving, Up: Appendices - -ESC/P2 -****** - -* Menu: - -* ESC/P2 Introduction:: What is ESC/P2 -* ESC/P2 Standard Commands:: Normal ESC/P2 commands -* ESC/P2 Remote Mode Commands:: Exotic ESC/P2 commands -* ESC/P2 Appropriate Remote Commands:: Useful remote command sequences - - -File: gimpprint.info, Node: ESC/P2 Introduction, Next: ESC/P2 Standard Commands, Up: ESC/P2 - -Introduction to ESC/P2 -====================== - - This is a description of the ESC/P2 raster commands used by the -gimp-print plugin and Ghostscript driver, which is a subset of the -complete command set. The full documents are found on -. Note that these are *not* -always correct, and are certainly not complete. - - All ESCP/2 raster commands begin with the `ESC' character (1b hex), -followed by either one or two command characters and arguments where -applicable. Older commands generally have one command character. Newer -commands usually have a `(' (left parenthesis) followed by a command -character and a byte count for the arguments that follow. The byte -count is a 16-bit (2 byte) binary integer, in little endian order. - - All arguments listed here are of the form `name[bytes]' where -`[bytes]' is the number of bytes that comprise the argument. The -arguments themselves are usually one, two, or four byte integers, always -little endian (the least significant bits come first). Presumably this -is to match Intel processors. - - In some cases, the same command sequence identifies different -versions of the same command, depending upon the number of bytes of -arguments. - - -File: gimpprint.info, Node: ESC/P2 Standard Commands, Next: ESC/P2 Remote Mode Commands, Prev: ESC/P2 Introduction, Up: ESC/P2 - -Standard commands -================= - - - ESC/P2 command: `ESC @' - Reset the printer. Discards any output, ejects the existing page, - returns all settings to their default. Always use this before - printing a page. - - - ESC/P2 command: `ESC (G BC=1 ON1' - Turn on graphics mode. ON should be `1' (turn on graphics mode). - - - ESC/P2 command: `ESC (U BC=1 UNIT1' - Set basic unit of measurement used by printer. This is expressed - in multiples of 1/3600". At 720 DPI, UNIT is `5'; at 360 DPI, - UNIT is `10'. - - - ESC/P2 command: `ESC (U BC=5 PAGEUNITS1 VUNIT1 HUNIT1 BASEUNIT2' - Set basic units of measurement used by the printer. PAGEUNIT is - the unit of page measurement (for commands that set page - dimensions and the like). VUNIT is the unit of vertical - measurement (for vertical movement commands). HUNIT is the unit - of horizontal movement (for horizontal positioning commands). All - of these units are expressed in BASEUNIT, which is in reciprocal - inches. Typically, BASEUNIT is `1440'. In 720 DPI mode, PAGEUNIT, - VUNIT, and HUNIT are all `2'; in 1440x720 DPI mode, PAGEUNIT and - VUNIT are normally set to `2'; HUNIT is set to `1'. - - - ESC/P2 command: `ESC (K BC=2 ZERO1 GRAYMODE1' - Set color or grayscale mode, on printers supporting an explicit - grayscale mode. These printers can be identified because they are - advertised as having more black nozzles than nozzles of individual - colors. Setting grayscale mode allows use of these extra nozzles - for faster printing. GRAYMODE should be `0' or `2' for color, `1' - for grayscale. ZERO should always be `0'. - - - ESC/P2 command: `ESC (i BC=1 MICROWEAVE1' - If MICROWEAVE is `1', use microweave mode. On older printers, - this is used to turn on microweave; on newer printers, it prints - one row at a time. All printers support this mode. It should - only be used at 720 (or 1440x720) DPI. The Epson Stylus Pro series - indicates additional modes: - - `2' - "Full-overlap" - - `3' - "Four-pass" - - `4' - "Full-overlap 2" - - Any of these commands can be used with the high four bits set to - either `3' or `0'. - - - ESC/P2 command: `ESC U DIRECTION1' - If DIRECTION is `1', print unidirectionally; if `0', print - bidirectionally. - - - ESC/P2 command: `ESC (s BC=1 SPEED1' - On some older printers, this controls the print head speed. SPEED - of `2' is 10 inches/sec; SPEED of `0' or 1 is 20. - - - ESC/P2 command: `ESC (e BC=2 ZERO1 DOTSIZE1' - Choose print dotsize. DOTSIZE can take on various values, - depending upon the printer. Almost all printers support `0' and - `2'. Variable dot size printers allow a value of 16. Other than - the value of 16, this appears to be ignored at resolutions of 720 - DPI and above. - - - ESC/P2 command: `ESC (C BC=2 PAGELENGTH2' - - ESC/P2 command: `ESC (C BC=4 PAGELENGTH4' - Set the length of the page in "pageunits" (see `ESC (U' above). - The second form of the command allows setting of longer page - lengths on new printers (these happen to be the printers that - support variable dot size). - - - ESC/P2 command: `ESC (c BC=4 TOP2 LENGTH2' - - ESC/P2 command: `ESC (c BC=8 TOP4 LENGTH4' - Set the vertical page margins of the page in "pageunits" (see `ESC - (U' above). The margins are specified as the top of the page and - the length of the page. The second form of the command allows - setting of longer page lengths on new printers (these happen to be - the printers that support variable dot size). - - - ESC/P2 command: `ESC (S BC=8 WIDTH4 LENGTH4' - Set the width and length of the printed page region in "pageunits" - (see `ESC (U' above). - - - ESC/P2 command: `ESC (v BC=2 ADVANCE2' - - ESC/P2 command: `ESC (v BC=4 ADVANCE4' - Feed vertically ADVANCE "vertical units" (see `ESC (U' above) from - the current print head position. - - - ESC/P2 command: `ESC (V BC=2 ADVANCE2' - - ESC/P2 command: `ESC (V BC=4 ADVANCE4' - Feed vertically ADVANCE "vertical units" (see `ESC (U' above) from - the top margin. - - - ESC/P2 command: `ESC ($ BC=4 OFFSET4' - Set horizontal position to OFFSET from the left margin. This - command operates on printers of the 740 class and newer (all - printers with variable dot size). - - - ESC/P2 command: `ESC $ OFFSET2' - Set horizontal position to OFFSET from the left margin. This - command operates on printers of the 740 class and newer (all - printers with variable dot size). - - - ESC/P2 command: `ESC (\ BC=4 UNITS2 OFFSET2' - Set horizontal position to OFFSET from the previous print head - position, measured in UNITS. UNITS is measured in inverse inches, - and should be set to 1440 in all cases. This operates on all 1440 - dpi printers that do not support variable dot size. - - - ESC/P2 command: `ESC (/ BC=4 OFFSET4' - Set horizontal position to OFFSET from the previous print head - position, measured in "horizontal units" (see `ESC (U' above). - This operates on all variable dot size printers. - - - ESC/P2 command: `ESC \ OFFSET2' - Set horizontal position to OFFSET from the previous print head - position, measured in basic unit of measurement (see `ESC (U' - above). This is used on all 720 dpi printers, and can also be used - on 1440 dpi printers in lower resolutions to save a few bytes. - Note that OFFSET may be negative. The range of values for this - command is between `-16384' and `16383'. - - - ESC/P2 command: `ESC r COLOR1' - - ESC/P2 command: `ESC (r BC=2 DENSITY1 COLOR1' - Set the ink color. The first form is used on four-color printers; - the second on six-color printers. DENSITY is `0' for dark inks, - `1' for light. COLOR is - - `0' - black - - `1' - magenta - - `2' - cyan - - `4' - yellow - - This command is not used on variable dot size printers in softweave - mode. - - - ESC/P2 command: `ESC . COMPRESS1 VSEP1 HSEP1 LINES1 WIDTH2 DATA...' - Print data. COMPRESS signifies the compression mode: - - `0' - no compression - - `1' - TIFF compression (incorrectly documented as "run length - encoded") - - `2' - TIFF compression with a special command set. - - VSEP depends upon resolution and printer type. At 360 DPI, it is - always `10'. At 720 DPI, it is normally `5'5. On the ESC 600, it - is `40' (8 * 5). On some other printers, it varies. - - HSEP1 is `10' at 360 DPI and `5' at 720 or 1440 DPI (1440 DPI - cannot be printed in one pass; it is printed in two passes, with - the dots separated in each pass by 1/720"). - - LINES is the number of lines to be printed. It should be `1' in - microweave and 360 DPI. At 720 DPI softweave, it should be the - number of lines to be actually printed. - - WIDTH is the number of pixels to be printed in each row. - Following this command, a carriage return (`13' decimal, `0A' hex) - should be output to return the print head position to the left - margin. - - The basic data format is a string of bytes, with data from left to - right on the page. Within each byte, the highest bit is first. - - The TIFF compression is implemented as one count byte followed by - one or more data bytes. There are two cases: - - 1. If the count byte is `128' or less, it is followed by [count] - + 1 data bytes. So if the count byte is `0', it is followed - by 1 data byte; if it is `128', it is followed by 129 data - bytes. - - 2. If the count byte is greater than 128, it is followed by one - byte. This byte is repeated (257 - [count]) times. So if - [count] is 129, the next byte is treated as though it were - repeated 128 times; if [count] is 255, it is treated as - though it were repeated twice. - - - ESC/P2 command: `ESC i COLOR1 COMPRESS1 BITS1 BYTES2 LINES2 DATA...' - Print data in the newer printers (that support variable dot size), - and Stylus Pro models. - - COLOR is the color: - - `0' - black - - `1' - magenta - - `2' - cyan - - `4' - yellow - - `17' - light magenta - - `18' - light cyan - - COMPRESS signifies the compression mode: - - `0' - no compression - - `1' - TIFF compression (incorrectly documented as "run length - encoded") - - `2' - TIFF compression with a special command set. - - BITS is the number of bits per pixel. - - BYTES is the number of bytes wide for each row (ceiling(BITS * - width_of_row, 8)). Note that this is different from the `ESC .' - command above. - - LINES is the number of lines to be printed. This command is the - only way to get variable dot size printing. In variable dot mode, - the size of the dots increases as the value (`1', `2', or `3') - increases. - - - ESC/P2 command: `ESC (D BC=4 BASE2 VERTICAL1 HORIZONTAL1' - Set printer horizontal and vertical spacing. It only applies to - variable dot size printers in softweave mode (and possibly other - high end printers). - - BASE is the base unit for this command; it must be `14400'. - - VERTICAL is the distance in these units between printed rows; it - should be (separation_in_nozzles * BASE / 720). - - HORIZONTAL is the horizontal separation between dots in a row. - Depending upon the printer, this should be either (14400 / 720) or - (14400 / 360). The Stylus Pro 9000 manual suggests that the - settings should match the chosen resolution, but that is - apparently not the case (or not always the case) on other printers. - - - ESC/P2 command: `ESC (R BC=8 00 R E M O T E 1' - Enters "remote mode". This is a special, undocumented command set - that is used to set up various printer options, such as paper feed - tray, and perform utility functions such as head cleaning and - alignment. It does not appear that anything here is actually - required to make the printer print. Our best understanding of - what is in a remote command sequence is described in a separate - section below. - - - ESC/P2 command: `ESC 01 @EJL [sp] ID\r\n' - Return the printer ID. This is considered a remote mode command, - although the syntax is that of a conventional command. This - returns the following information: - - @EJL ID\r - MFG:EPSON; - CMD:ESCPL2,BDC; - MDL:[printer model]; - CLS:PRINTER; - DES:EPSON [printer model]; - \f - - After all data has been sent, a form feed byte should be sent. - - All newer Epson printers (STC 440, STP 750) require the following -command to be sent at least once to enable printing at all. This -command specifically takes the printer out of the Epson packet mode -communication protocol (whatever that is) and enables normal data -transfer. Sending it multiple times is is not harmful, so it is -normally sent at the beginning of each job: - - ESC 01@EJL[space]1284.4[newline]@EJL[space][space][space][space] - [space][newline]ESC@ - - The proper sequence of initialization commands is: - - magic command - ESC remote mode if needed - ESC (G - ESC (U - ESC (K (if appropriate) - ESC (i - ESC U (if needed) - ESC (s (if appropriate) - ESC (e - ESC (C - ESC (c - ESC (S - ESC (D (if needed) - ESC (V (optional -- this can be accomplished with ESC (v) - - For printing, the proper sequence is: - - ESC (v - -and repeat for each color: - - ESC ($ or ESC (\ or ESC \ - ESC (r or ESC r (if needed--not used with `ESC i' and not needed if the color - has not changed from the previous printed line) - ESC . or ESC i ...data... [return] (0A hex) - - To terminate a page: - - [formfeed] (0C hex) - ESC @ - - -File: gimpprint.info, Node: ESC/P2 Remote Mode Commands, Next: ESC/P2 Appropriate Remote Commands, Prev: ESC/P2 Standard Commands, Up: ESC/P2 - -Remote Mode Commands -==================== - - The following description of remote commands comes out of an -examination of the sequences used by the printer utilities bundled with -the Windows drivers for the ESC740, and from other sources (some Epson -manuals, experimentation, analysis of print files). It is largely -speculative as these commands are not all documented in the Epson -documentation we have access to. Generally, newer manuals provide more -thorough documentation. - - Remote command mode is entered when the printer is sent the following -sequence: - - ESC (R BC=8 00 R E M O T E 1 - - Remote mode commands are then sent, and terminated with the following -sequence: - - ESC 00 00 00 - - All remote mode commands must be sent before the initial `ESC (G' -command is sent. - - This introductory sequence is then followed by a sequence of -commands. Each command is constructed as follows: - - * Two ASCII bytes indicating the function - - * A byte count (two bytes, little-endian) for the parameters - - * Binary parameters, if any - - This is a list of all remote commands we have seen: - - - ESC/P2 remote command: `NC BC=2 00 00' - Print a nozzle check pattern - - - ESC/P2 remote command: `VI BC=2 00 00' - on my 740, prints the following: - - W01286 I02382\r\n - - probably "version information" - - - ESC/P2 remote command: `* AI BC=3 00 00 00' - Prints a "printer ID". On one 870, prints the following: - 51-51-50-51-49-48\r\n - - The Windows driver has a text entry field where this number can be - entered, but its purpose is unknown. - - - ESC/P2 remote command: `* LD BC=0' - Load printer defaults from NVRAM, DIP switches, and/or ROM. This - apparently does not load factory defaults per se, but any settings - that are saved. This is commonly used right at the end of each - print job after the `ESC @' printer reset command. - - - ESC/P2 remote command: `* CH BC=2 00 XX' - Perform a head cleaning cycle. The heads to clean are determined - by parameter XX: - - `00' - clean all heads - - `01' - clean black head - - `02' - clean color heads - - While XX = `00' is probably supported by all printers, XX = `01' - and `02' may well not be. - - - ESC/P2 remote command: `* DT BC=3 00 XX 00' - Print an alignment pattern. There are three patterns, which are - picked via the choice of XX. Pattern `0' is coarse, pattern `1' - is medium, and pattern `2' is fine. - - - ESC/P2 remote command: `* DU BC=6 00 XX 00 09 00 YY' - Print another alignment pattern. It isn't entirely clear what XX - and YY are, but it appears that XX takes on the values `1' and `2' - , and YY takes on the values `0' and 1. This may only work on the - 580 and/or 480. - - - ESC/P2 remote command: `* DA BC=4 00 XX 00 YY' - Set results for the first alignment pattern. XX is the pattern - (`1'-`3'); YY is the best choice from the set (`1'-`7' or - `1'-`15'). This does not save to NVRAM, so when the printer is - powered off, the setting will be lost. - - - ESC/P2 remote command: `* DA BC=6 00 XX 00 YY 09 00' - Set results for alternate alignment pattern. XX appears to be the - pass, and YY appears to be the optimum pattern. This does not - save to NVRAM, so when the printer is powered off, the setting - will be lost. - - - ESC/P2 remote command: `* SV BC=0' - Save the current settings to NVRAM. - - - ESC/P2 remote command: `* RS BC=1 01' - Reset the printer. - - - ESC/P2 remote command: `* IQ BC=1 01' - Get ink quantity. This requires direct access to the printer - port. The return looks like - - IQ:KKCCMMYY - - or - - IQ:KKCCMMYYccmm - - (for 4-color and 6-color printers respectively), where each pair of - digits are hexadecimal representations of percent. - - The following two commands have been observed on an STP 870. - - - ESC/P2 remote command: `* IR BC=2 00 XX' - *Function unknown*. This command has been observed on an STP 870 - with XX=`03' at the start of a job and XX=`02' at the end of a job - (where it is followed by an `LD' command). When in roll mode, the - values change to XX=`01' at the start of a job and XX=`00' at the - end of a job. - - - ESC/P2 remote command: `* FP BC=3 00 XX YY' - XX=`00' and YY=`00' selects the printer's normal left margin - (about 3mm). XX=`0xb0' and YY=`0xff' selects zero-margin mode, - where the left-most print position is shifted to a point about - 0.1" to the left of the left-hand edge of the paper, allowing - printing up to (and off) the left-hand edge of the paper. - - The commands below are partially documented in the Stylus Pro 9000 -manual. Much of this information is interpreted; none is tested. - - - ESC/P2 remote command: `* SN BC=3 00 XX YY' - Select Mechanism Sequence. XX controls which sub-operation is - performed. XX=`00' selects the "Feed paper sequence setting". YY - can take on the following values (on the STP 870, at any rate): - - `0' - default - - `1' - plain paper - - `2' - postcards - - `3' - film (photo quality glossy film, transparencies) - - `4' - envelopes - - `5' - plain paper (fast load) - - `6' - back light film (although this has been observed with - heavyweight matte paper) - - `7' - matte paper (observed with 360 dpi inkjet paper, and photo - quality inkjet paper) - - `8' - photo paper - - Experimentation suggests that this setting changes details of how - the printers' cut sheet feeder works, presumably to tune it for - different types of paper. - - XX=`01' controls the platen gap setting; YY=`00' is the default, - YY=`1' or `2' are higher settings. - - XX=`02' controls paper loading speed (YY=`0' is normal, `1' is - fast, `2' is slow). It appears that `1' is used when printing on - "plain paper", "360dpi ink jet paper" or "ink jet transparencies", - and YY=`00' for all other paper type settings. - - XX=`07' controls duplex printing for printers with that capability - (YY=0 is default, for non-duplex printing; `1' is front side of - the paper, and 2 is back side). - - XX=`09' controls zero margin printing on the printers with the - capability of printing zero-margin on all sides (Stylus Photo - 780/790, 890, and 1280/1290). YY=`0' is the default; `1' enables - zero margin printing. - - - ESC/P2 remote command: `* PP BC=3 00 XX YY' - Set Paper Path. XX=`2' indicates manual feed, XX=`3' is for roll - paper. YY selects "paper path number". - - - ESC/P2 remote command: `* AC BC=2 00 XX' - Set Auto Cutting State. XX=`0' selects auto cutting off, XX=`1' - selects auto cutting on, and XX=`2' indicates horizontal print - page line on. It appears that with auto cutting on, roll paper is - cut automatically at the point a formfeed character is sent. The - formfeed character is normally used to eject a page; with this - turned on, it also cuts the roll paper. Horizontal print page - line on prints a narrow line of black dots at the position the - paper should be cut manually. - - - ESC/P2 remote command: `* DR BC=4 00 xx DT2' - Set Drying Time. XX=`00' sets the drying time "per scan" (per - pass?); XX=`01' sets the drying time per page. DT indicates the - drying time, which is in seconds if page mode is used and in - milliseconds if scan mode is used. DT must not exceed 3600 - seconds in per-page mode and 10000 milliseconds in per-scan mode. - - - ESC/P2 remote command: `* IK BC=2 00 XX' - Select Ink Type. XX=`00' selects dye ink. Pigment ink is - apparently selected by XX=`01'. This probably does not apply to - the consumer-grade printers. - - - ESC/P2 remote command: `* PZ BC=2 00 xx' - Set Pause After Printing. XX=`00' selects no pause after - printing; XX=`01' selects pause after printing. If turned on, the - printer is paused after the page is ejected (by the FF byte). If - cutting is turned on, the printer is paused *after* the cutting or - printing of the horizontal cut line. - - - ESC/P2 remote command: `* EX BC=6 00 00 00 00 0x14 XX' - Set Vertical Print Page Line Mode. XX=`00' is off, XX=`01' is on. - If turned on, this prints vertical trim lines at the left and - right margins. - - - ESC/P2 remote command: `* EX BC=6 00 00 00 00 0x05 XX' - Set Roll Paper Mode. If XX is `0', roll paper mode is off; if XX - is `1', roll paper mode is on. - - - ESC/P2 remote command: `* EX BC=3 00 XX YY' - Appears to be a synonym for the `SN' command described above. - - - ESC/P2 remote command: `* PH BC=2 00 XX' - Select Paper Thickness. Set the paper thickness XX in .1 mm - units. This must not exceed 0x10 (1.6 mm). If the thickness is - set "more than" .6 mm (which probably means "at least" .6 mm, - since the other case reads "less than 0.5 mm"), the platen gap is - set high irrespective of the `SN' command. - - - ESC/P2 remote command: `* PM BC=2 00 00' - *Function unknown*. Used on the STC 3000 at least when using roll - feed, and on the STP 870 in all print files analysed to date. - - - ESC/P2 remote command: `* ST BC=2 00 XX' - Epson's STP 750/1200 programming guide refers to the `ST' command - as "Set printer state reply". If XX is `0' or `2', the printer - will not send status replies. If XX is `1' or `3', the printer - will send status replies. The status replies consist of state, - error codes, ink leve, firmware version, and warning status. - - The actual reply is documented as - - @BDC ST\r - ST: xx; - [ER: yy;] - IQ: n1n2n3n4; - [WR: w1,w2...;] - RV: zz; - AI:CW:02kkccmmyy, MI:mm - [TC:tttt;] - INK:...; - \f - - (`\r' is carriage return; `\n' is newline; `\f' is formfeed.) - - `ST' is the printer status: - - `00' - Error - - `01' - Self-test - - `02' - Busy - - `03' - Waiting while printing - - `04' - Idle - - `07' - Cleaning/filling ink heads - - `08' - Not yet initialized/filling heads - - `ER', if provided, is the error status: - - `00' - Fatal error - - `01' - Interface not selected - - `04' - Paper jam - - `05' - Out of ink - - `06' - Paper out - - `IQ' is the amount of ink left, as a (decimal!) percentage - expressed in hexadecimal. The values are black, cyan, magenta, and - yellow (presumably 6-color printers supply light cyan and light - magenta inks as additional parameters). - - `WR', if provided, is the warning status: - - `10' - Black ink low - - `11' - Cyan - - `12' - Magenta - - `13' - Yellow - - `14' - Light cyan (presumably) - - `15' - Light magenta (presumably) - - `RV' is the firmware revision (one byte ASCII). - - `AI' is actuator information. These are two byte ASCII codes that - indicate "ink weight rank ID" of KCMY, respectively. - - `TC', if provided, is the total time of cleaning or ink filling - (?). - - `INK:' and `MI' are *not documented*. - - - ESC/P2 remote command: `* SM BC=2 00 XX' - Set Status Reply Rate. XX is the repeat interval in seconds. If - XX is `0', the status is returned only when the printer's state - changes. - - - ESC/P2 remote command: `* ST BC=1 01' - Reply Printer Status. The reply is formatted as - - @BDC PS\r\nST:XX;\f - - (`\r' is carriage return; `\n' is newline; `\f' is formfeed). If - XX (the reply value) is `0' or `2', automatic status update is - disabled; if `1' or `3', it is enabled. - - - ESC/P2 remote command: `* SM BC=1 01' - Reply Printer Status Rate. The reply is formatted as - - @BDC PS\r\nST:xx;\f - - (`\r' is carriage return; `\n' is newline; `\f' is formfeed). See - `SM BC=2' above for the meaning of the return value. - - - ESC/P2 remote command: `* ?? BC=XX Y[1] ... Y[xx]' - Echo Parameters (perhaps better described as Echo Commands). The - command string is executed (it would appear from the - documentation), and the string sent is returned using a sequence - similar to that described in the `ST BC=1' and `SM BC=1' commands. - Note that in this case the number of bytes is variable! - - - ESC/P2 remote command: `* SM BC=2 00 02' - *Function unknown*. Used on the STC 3000 at least when using roll - feed. - - -File: gimpprint.info, Node: ESC/P2 Appropriate Remote Commands, Prev: ESC/P2 Remote Mode Commands, Up: ESC/P2 - -Appropriate Remote Commands -=========================== - - All of the remote commands described above are wrapped up with the -usual boilerplate. The files always start with `00 00 00' and the -"magic" command described above, then two `ESC @'s to reset the -printer. The remote command sequences come next; if they print anything -that is usually followed by a `FF' (0C hex) character to feed the page, -then the file ends with another two `ESC @'s to get back to the ground -state. - - An alignment sequence goes like this: - - 1. Host uses `DT' to print an alignment sheet - - 2. User eyeballs the sheet to see which is the best aligned pattern. - - 3. Host sends a `DA' command indicating which pattern the user chose - - 4. If the user said "realign", meaning he isn't done yet, go to step 1 - - 5. We are done: host sends a `SV' command and exits - - The sequence used (by the STC 3000, at least) to print from the roll -feed is (with byte count omitted) - - PM 00 00 - SN 00 00 00 - EX 00 00 00 00 05 01 - ST 00 01 - SM 00 02 - - The sequence used by the STP 870 to print on plain paper is - - PM 00 00 - IR 00 03 - SN 00 00 01 - SN 00 01 00 - SN 00 02 01 - EX 00 00 00 00 05 00 - FP 00 00 00 - -and the job finishes with - - IR 00 02 - LD - - For different paper type settings on the STP 870, the arguments to -`SN' vary. The arguments to the first and third `SN' commands are as -outlined in the description of the `SN' command above; the arguments to -the second ("platen gap") are `00 01 01' for thick papers ("matte -paper--heavyweight", "photo paper" and "premium glossy photo paper") -and `00 01 00' for all others. - - For roll-mode printing, the STP 870's sequence changes as follows. -`IR''s arguments become `00 01' in the header, and `00 00' after the -job, and `EX''s last argument changes from `00' to `01'. - - For zero-margin printing on the STP 870, the arguments to `FP' become -`00 0xb0 0xff'. This moves the origin about 5.5mm to the left, to a -point one tenth of an inch to the left of the left-hand edge of the -paper, allowing printing right up to (and beyond) the edge of the -paper. Some printers (at least the STP 870) include white absorbent -pads at the left margin position and other positions (89mm and 100mm on -the STP 870) to soak up ink which misses the edge of the paper. -Printing off the edge of paper of a width not aligned with a pad could -result in making a mess of the inside of the printer and ink getting on -the reverse of the paper. - - -File: gimpprint.info, Node: New Printer, Prev: ESC/P2, Up: Appendices - -Adding a new printer -******************** - - This appendix covers adding a new ESCP/2, PCL, or Canon printer. -Writing a new driver module is not covered. - - The three steps to adding a printer are: - - 1. Add an entry to `printers.xml' - - 2. Add the appropriate code and data to the appropriate driver module - - 3. Tune the printer - - Printer information is stored in two places: in `printers.xml' -(which contains the list of printer models available to the the -upper-level application), and in the appropriate driver file -(`print-escp2.c', `print-pcl.c', or `print-canon.c'). - -* Menu: - -* printers.xml:: File format description. -* Driver file:: Data structures to use. -* Epson inkjet printers:: Adding an Epson printer. -* Tuning Epson printers:: Tweaking settings. -* Canon inkjet printers:: Adding a Canon printer. - - -File: gimpprint.info, Node: printers.xml, Next: Driver file, Up: New Printer - -`printers.xml' -============== - - `printers.xml' is an XML-like file (there's no formal DTD) that -contains very simple printer definitions. A typical definition follows: - - - - - - - - - - There are other tags that may be present. The only ones that are -mandatory are `', `', `', and `'. The -other optional parameters (gamma and density in this case) can be used -to adjust control settings. This is probably not the right place for -them; the printer drivers themselves should contain this information. -There's probably no good reason for anything but gamma and density to -be in here. Gamma refers to the printer's gamma factor; density is the -desired base ink density for the printer. The Epson driver contains -the density information for each printer at each resolution internally. -An even better driver would adjust density and possibly even gamma for -paper type. All the more reason not to have that information here. - - If you really are curious about what tags are permitted, please see -`printdefl.l'. I deliberately want to make this obscure. - - Anyway, here's the definition of the tags that do matter: - - - `printers.xml' tag: `' - This starts the definition of a printer. The LONGNAME should be - something human readable; the DRIVERNAME should consist of - alphanumerics and hyphens, and be fairly short. The LONGNAME is - what will appear in the GUI listing of printers; the DRIVERNAME is - what is actually used to key into the list of printers. It is - legal to have multiple printers with the same driver name. - - - `printers.xml' tag: `' - - `printers.xml' tag: `' - Indicates that this printer is capable of color, or is not capable - of color respectively - - - `printers.xml' tag: `' - This defines a model number. This is passed into the driver, - which may do whatever it cares to with it--index into a table, - compute on, or whatever. This need not be unique. - - - `printers.xml' tag: `' - This defines what driver module this printer uses. TYPE should be - `escp2', `pcl', `canon', or `ps'. - - - `printers.xml' tag: `' - This, of course, closes off a printer definition. - - This is handled very ad-hoc. It's ugly. But it's reasonably easy to -extend, and it's buzzword-compliant. - - -File: gimpprint.info, Node: Driver file, Next: Epson inkjet printers, Prev: printers.xml, Up: New Printer - -The driver file -=============== - - Adding a new printer to a driver module (`print-escp2.c', -`print-pcl.c', or `print-canon.c'--`print-ps.c' is really ad hoc) -requires a bit more planning. Each driver is somewhat different, but -they all generally have a vector of printer definitions, and the code -does some special casing based on particular printer capabilities. The -PCL and Canon drivers are quite similar; the Canon driver was actually -cribbed from the PCL driver, but it then returned the favor. - - The Epson driver is a little bit different. Canon and PCL printers -have some amount of intelligence; a lot of them have specific ink -options, and know about specific paper sizes and types, and must be -told the right thing. Epson printers have somewhat less intelligence -and will more or less do exactly what the host tells it to do in a -fairly regular fashion. I actually prefer this; it isn't materially -more work for the host to compute things like exact paper sizes and -such, it allows a lot more tweaking, and it may be why Epson has been -more open with information - the communication protocol doesn't really -contain very much IP, so they have less reason to keep it secret. - - Someone else will have to fill in the sections about PCL and Canon -printers. - diff --git a/doc/gimpprint.info-5 b/doc/gimpprint.info-5 deleted file mode 100644 index 672a377..0000000 --- a/doc/gimpprint.info-5 +++ /dev/null @@ -1,872 +0,0 @@ -This is gimpprint.info, produced by makeinfo version 4.0 from -gimpprint.texi. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -END-INFO-DIR-ENTRY - - This file documents the gimpprint library and associated programs -used for high quality printing. - - Copyright (C) 2001 Michael Sweet () and Robert -Krawitz () - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gimpprint.info, Node: Epson inkjet printers, Next: Tuning Epson printers, Prev: Driver file, Up: New Printer - -Epson inkjet printers -===================== - - The `model_capabilities' vector in `print-escp2.c' contains one -entry for each defined printer model. The `model' parameter in -`printers.xml' is an index into this table. - - In general, the new printers have fewer eccentricities than the older -printers. That doesn't mean they're simpler, just that they're more -consistent. - - An `escp2_printer_t' is a C struct defined as follows: - - - Data type: escp2_printer_t - typedef struct escp2_printer - { - model_cap_t flags; /* Bitmask of flags, see below */ - /*****************************************************************************/ - int nozzles; /* Number of nozzles per color */ - int min_nozzles; /* Minimum number of nozzles per color */ - int nozzle_separation; /* Separation between rows, in 1/360" */ - int black_nozzles; /* Number of black nozzles (may be extra) */ - int min_black_nozzles; /* # of black nozzles (may be extra) */ - int black_nozzle_separation; /* Separation between rows */ - int fast_nozzles; /* Number of fast nozzles */ - int min_fast_nozzles; /* # of fast nozzles (may be extra) */ - int fast_nozzle_separation; /* Separation between rows */ - /*****************************************************************************/ - int xres; /* Normal distance between dots in */ - /* softweave mode (inverse inches) */ - int enhanced_xres; /* Distance between dots in highest */ - /* quality modes */ - int base_separation; /* Basic unit of row separation */ - int base_resolution; /* Base hardware spacing (above this */ - /* always requires multiple passes) */ - int enhanced_resolution;/* Above this we use the */ - /* enhanced_xres rather than xres */ - int resolution_scale; /* Scaling factor for ESC(D command */ - int max_black_resolution; /* Above this resolution, we */ - /* must use color parameters */ - /* rather than (faster) black */ - /* only parameters*/ - int max_hres; - int max_vres; - int min_hres; - int min_vres; - /*****************************************************************************/ - int max_paper_width; /* Maximum paper width, in points */ - int max_paper_height; /* Maximum paper height, in points */ - int min_paper_width; /* Maximum paper width, in points */ - int min_paper_height; /* Maximum paper height, in points */ - /* Printer interleave: */ - int m_left_margin; /* Left margin, points */ - int m_right_margin; /* Right margin, points */ - int m_top_margin; /* Absolute top margin, points */ - int m_bottom_margin; /* Absolute bottom margin, points */ - /* ROLL FEED: */ - /* Softweave: */ - int roll_left_margin; /* Left margin, points */ - int roll_right_margin; /* Right margin, points */ - int roll_top_margin; /* Absolute top margin, points */ - int roll_bottom_margin; /* Absolute bottom margin, points */ - /* Printer interleave: */ - int m_roll_left_margin; /* Left margin, points */ - int m_roll_right_margin; /* Right margin, points */ - int m_roll_top_margin; /* Absolute top margin, points */ - int m_roll_bottom_margin; /* Absolute bottom margin, points */ - /*****************************************************************************/ - int extra_feed; /* Extra distance the paper can be spaced */ - /* beyond the bottom margin, in 1/360". */ - /* (maximum useful value is */ - /* nozzles * nozzle_separation) */ - int separation_rows; /* Some printers require funky spacing */ - /* arguments in interleave mode. */ - int pseudo_separation_rows;/* Some printers require funky */ - /* spacing arguments in softweave mode */ - - int zero_margin_offset; /* Offset to use to achieve */ - /* zero-margin printing */ - int initial_vertical_offset; - int black_initial_vertical_offset; - int extra_720dpi_separation; - - /*****************************************************************************/ - const int *dot_sizes; /* Vector of dot sizes for resolutions */ - const double *densities; /* List of densities for each printer */ - const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */ - /*****************************************************************************/ - const paperlist_t *paperlist; - const res_t *reslist; - const inklist_t *inklist; - /*****************************************************************************/ - const int *bits; - const int *base_resolutions; - const input_slot_list_t *input_slots; - /*****************************************************************************/ - const init_sequence_t *preinit_sequence; - const init_sequence_t *postinit_remote_sequence; - } escp2_printer_t; - - The printer definition block is divided into 8 sections. The first -section is a set of miscellaneous printer options. These are described -in the code, and will not be discussed further here. - - The second section describes the number of nozzles and the separation -between nozzles in base units. The base unit is 1/360" for all -currently supported printers, but future printers may support a smaller -base unit. - - Many printers have more black nozzles than nozzles of other colors, -and when used in black and white mode, it's possible to use these extra -nozzles, which speeds up printing. As an example, a printer that is -specified to have 48 cyan, magenta, and yellow nozzles, and 144 black -nozzles, can use all 144 black nozzles when printing black ink only. -When printing in color, only 48 nozzles of each color (including black) -can be used. - - Most printers can print using either the number of nozzles available -or any smaller number. Some printers require that all of the nozzles -be used. Those printers will set `min_nozzles' and/or -`min_black_nozzles' to the same value as `nozzles' and/or -`black_nozzles'. - - The third section defines basic units of measure for the printer, -including the standard separation between dots, the base nozzle -separation, and the minimum and maximum printing resolutions the -printer supports. Most of these are fairly self-explanatory, but some -are not obvious. - - Most Epson printers, other than the high-end Stylus Pro models, -cannot print dots spaced more closely than 1/360" or 1/720" apart (this -is the setting for `xres'. This is true even for printers that support -resolutions of 1440 or 2880 DPI. In these cases, the data must be -printed in 2, 4, or 8 passes. While the printer can position the head -to a resolution of 1/1440" or 1/2880", the head cannot deposit ink that -frequently. - - Some printers can only print in their very best quality (using the -smallest dots available) printing at a lower resolution. For example, -the Stylus Photo EX can normally print with a dot spacing of 1/720". -The smallest dot size cannot be printed with a dot spacing of less than -1/360", however. In this case, we use `enhanced_xres' to specify the -resolution to be used in this enhanced mode, and `enhanced_resolution' -to specify the printing resolution above which we use the -`enhanced_xres'. - - The `resolution_scale' command is used to specify scaling factors -for the dot separation on newer printers. It should always be 14400 -with current printers. - - The fourth section specifies the minimum and maximum paper sizes, and -the margins. Some printers allow use of narrower margins when -softweave is used; both sets of margins are specified. - - There is a convenient `INCH' macro defined to make specification of -the `max_paper_width' and `max_paper_height' more legible. It -multiplies 72 by the provided expression to get the appropriate number -of points. For example, to specify 8.5", `INCH(17/2)' expands to `(72 -* 17/2)', which is evaluated left to right, and hence generates the -correct value. - - The fifth section specifies some miscellaneous values that are -required for certain printers. For most printers, the correct values -are 1 for `separation_rows' and 0 for the others. Very, very few -printers require (or allow) `separation_rows' to be anything but 1 and -`pseudo_separation_rows' other than zero. The Stylus Color 1520, -Stylus Color 800, Stylus Color 850, and (strangely enough to my mind, -since it's a new printer) Stylus Color 660 seem to be the only -exceptions. - - The `zero_margin_offset' is used to specify an additional negative -horizontal offset required to print to the edges of the paper on newer -Stylus Photo printers. These must be determined empirically; good -starting values are 100 for 1440 DPI and 50 for 2880 DPI printers. The -goal is to print to the edge of the page, but not over it. - - The sixth section specifies head offsets for printers that do not -have the color jets aligned. Certain printers, such as the Stylus Color -480, have an unusual head arrangement whereby instead of all of the -colors being aligned vertically, the nozzles are configured in groups. -These printers are easy to determine; if the normal head offset of zero -for each color is used, the printing will be vertically out of -alignment. Most of these printers require specification of a negative -offset for printing to the top edge of the paper; typically these -printers do not require such an offset when printing black only. - - The seventh section specifies the most difficult values to tune, the -dot sizes, printing densities, and ink values (for variable dot size -enabled printers). These will be described in detail below. - - The last section specifies luminosity, hue, and saturation adjustment -vectors for the printer, and the paper definitions. These are used to -adjust the color in Photograph and Solid Colors output modes. These are -each vectors of 48 (actually 49, as the first value must be duplicated) -doubles that remap the luminosity, hue, and saturation respectively. -The hue is calculated, and the value used to interpolate between the two -closest points in each vector. - - The paper definitions is a set of paper definitions. The paper -definition contains the name of the paper type, special settings that -are required for printers to process the paper correctly, and a set of -adjustment values. These are not currently discussed here. - - The lists of dot sizes and densities contain values for 13 printing -modes: 120/180 DPI using printer weaving (single row; referred to as -"interleave") and "soft" weaving (the driver determines the exact -pattern of dot layout), 360 DPI interleave and softweave, 720x360 DPI -interleave and softweave, 720 DPI interleave and softweave, 1440x720 -interleave and softweave, 2880x720 interleave and softweave, and -2880x1440 softweave only. - - For the dot sizes, the value for each element in the vector selects -the dot size to be used when printing at this (or similar) resolution. -The dot sizes are determined by consulting the programming manual for -the printer and experimenting as described below. Current Epson -printers always use dot sizes less than `16', or `0x10', to indicate -single dot size (each dot is represented by 1 bit, and it's either -printed or not), and dot sizes of `16' or greater to indicate variable -dot size (each dot is represented by 2 bits, and it can either be not -printed or take on 2 or 3 values, representing the relative size of the -printed dot). Variable dot sizes permit the use of very small dots -(which would be too small to fill the page and produce solid black) in -light areas, while allowing the page to be filled with larger dots in -darker areas. - - Even single dot size printers can usually produce dots of different -sizes; it's just illegal to actually try to switch dot size during a -page. These dots are also much bigger than those used in true variable -dot size printing. - - A dot size of `-1' indicates that this resolution is illegal for the -printer in question. Any resolutions that would use this dot size will -not be presented to the user. A dot size of `-2' indicates that this -resolution is legal, but that the driver is not to attempt to set any -dot size. Some very old printers do not support the command to set the -dot size. - - Most printers support a dot size of `0' as a mode-specific default, -but it's often a bigger dot than necessary. Printers usually also -support some dot sizes between `1' and `3'. Usually `1' is the right -dot size for 720 and 1440 dpi printing, and `3' works best at 360 dpi. - - Variable dot size printers usually support 2 or 3 sets of variable -dot sizes. Older printers based on a 6 picolitre drop (the 480, 720, -740, 750, 900, and 1200) support two: mode 16 (0x10 in hexadecimal) for -normal variable dots at 1440 or 720 dpi, and mode 17 (0x10) for special -larger dots at 360 dpi. Newer printers based on 4 picolitre drops -normally support three sizes: `0x10' for 4 pl base drops, `0x11' for 6 -pl base drops, and `0x12' for special large drops. On these printers, -`0x10' usually works best at 1440x720 and `0x11' works best at 720x720. -Unfortunately, `0x10' doesn't seem to generate quite enough density at -720x720, because if it did the output would be very smooth. Perhaps -it's possible to tweak things.... - - The list of densities is a list of base density values for all of the -above listed modes. "Density" refers to the amount of ink deposited -when a solid color (or solid black) is printed. So if the density is -`.5', solid black actually prints only half the possible dots. "Base -density" refers to the fact that the density value can be scaled in the -GUI or on the Ghostscript command line. The density value specified -(which is not made visible to the user) is multiplied by the base -density to obtain the effective density value. All other things (such -as ink drop size) remaining the same, doubling the resolution requires -halving the base density. The base density in the density vector may -exceed `1', as many paper types require lower density than the base -driver. The driver ensures that the actual density never exceeds 1. - - Tuning the density should be done on high quality paper (usually -glossy photo paper). The goal is to find the lowest density value that -results in solid black (no visible gaps under a fairly high power -magnifying glass or loupe). If an appropriate density value is found -for 720 DPI, it could be divided by 2 for 1440x720, by 4 for 2880x720, -and by 8 for 2880x1440. - - However, for printers that offer a choice of dot size, this may not -be the best strategy. The best choice for dot size is the smallest dot -size that allows choosing a density value not greater than 1 that gives -full coverage. This dot size may be different for different -resolutions. Tuning variable dot size printers is more complicated; -the process is described below. - - The last member is a pointer to a structure containing a list of ink -values for variable dot size (or 6 color) inks. We model variable dot -size inks as producing a certain "value" of ink for each available dot -size, where the largest dot size has a value of 1. 6-color inks are -handled similarly; the light cyan and light magenta inks are treated as -a fractional ink value. The combination of variable dot size and 6 -color inks, of course, just creates that many more different ink -choices. - - This structure is actually rather complicated; it contains entries -for each combination of physical printer resolution (180, 360, 720, and -1440 dpi), ink colors (4, 6, and 7), and single and variable dot sizes -(since some printer modes can't handle variable dot size inks). Since -there's so much data, it's actually a somewhat deeply nested structure: - - An `escp2_printer_t' contains a pointer (essentially, a reference -rather than a copy) to an `escp2_variable_inklist_t'. - - An `escp2_variable_inklist_t' contains pointers to -`escp2_variable_inkset_t' structures. There is one such pointer for -each combination of resolution, dot type, and ink colors as described -above. Yes, this is rather inflexible. - - An `escp2_variable_inkset_t' contains pointers to -`escp2_variable_ink_t' structures. There is one such pointer for each -of the four colors (C, M, Y, and K). - - An `escp2_variable_ink_t' contains a pointer to the actual list of -ink values (`simple_dither_range_t'), the number of ink values, and a -density value to be used for computing the transitions. This density -value is actually a scaling value; it is multiplied by the effective -density to compute the density to be used for computing the transitions. -Normally, this value is `1', but in some cases it may be possible to -get smoother results with a different value (in particular, the single -dot size 6-color inks work best with the effective density scaled to -`.75' for this purpose). A lower density lowers the transition points, -which results in more ink being deposited. - - A `simple_dither_range_t' is a structure containing four values: - - 1. The value of the particular ink - - 2. The bit pattern used to represent the ink - - 3. Whether the ink is light (0) or dark (1), for inks with light and - dark variants - - 4. The relative amount of ink actually deposited by this dot (not - currently used for much; it can be used for ink reduction - purposes, to reduce the amount of ink deposited on the paper). - - These things are interesting as arrays. From an array of -`simple_dither_range_t''s, the dither code computes transition values -that it looks up at run time to decide what ink to print, as well as -whether to print at all. - - *Really* confused now? Yup. You'll probably find it easier to -simply read the code. - - -File: gimpprint.info, Node: Tuning Epson printers, Next: Canon inkjet printers, Prev: Epson inkjet printers, Up: New Printer - -Tuning the printer -================== - - Now, how do you use all this to tune a printer? There are a number -of ways to do it; this one is my personal favorite. - - There's a file named `cyan-sweep.tif'. This consists of a thin bar -of cyan sweeping from white to almost pure cyan, and from pure cyan to -black. The first thing to do is to pick the appropriate -`simple_dither_range_t' (or create a whole new -`escp2_variable_inklist_t') and comment out all but the darkest ink -(this means you'll be using the largest dots of dark ink). At 8.5" -width (the width of a letter-size piece of paper), the bar will be 1/8" -high. Printing it on wider or narrower paper will change the height -accordingly. Print it width-wise across a piece of photo quality paper -in line art mode using ordered or adaptive hybrid dither. Do not use -photographic mode; the colors in photographic mode vary non-linearly -depending upon the presence of the three color components, while in line -art mode the colors are much purer. Make sure that all the color -adjustments are set to defaults (1.0). Use the highest quality version -of the print mode you're testing to reduce banding and other artifacts. -This is much easier to do with the Gimp than with Ghostscript. - - At this stage, you want to look for four things: - - 1. The black near the center of the line is solid, but not more so - than that. - - 2. The cyan immediately to the left of the black is _almost_ solid. - - 3. The dark cyan at the far right of the page is solid, but not more - so. You can try tuning the density so that it isn't quite solid, - then nudging up the density until it is. - - 4. Both sweeps sweep smoothly from light to dark. In particular, the - dark half of the bar shouldn't visibly change color; it should go - smoothly from cyan to black. - - Repeat this stage until you have everything just right. Use the -positioning entry boxes in the dialog to position each bar exactly 1/8" -further down the page. Adjacent bars will be touching. - - The next step is to uncomment out the second darkest dot size. If -you're using variable dots, use the second largest dot size of the dark -ink rather than the largest dot size of the light ink. This will give -you two inks. - - When you recompile the plugin, you simply need to copy the new -executable into the correct place. You do not need to exit and restart -the Gimp. - - Print another bar adjacent to the first one. Your goal is to match -the bar using a single dot size as closely as possible. You'll find -that the dark region of the bar shouldn't change to any great degree, -but the light half probably will. If the lighter part of the light -half is too dark, you need to increase the value of the smaller dot; if -it's too light, you need to decrease the value. The reasoning is that -if the value is too low, the ink isn't being given enough credit for -its contribution to the darkness of the ink, and vice versa. Repeat -until you have a good match. Make sure you let the ink dry fully, -which will take a few minutes. Wet ink will look too dark. Don't look -at the paper too closely; hold it at a distance. The extra graininess -of the largest dot size will probably make it look lighter than it -should; if you hold it far enough away so that you can't see the dots, -you'll get a more accurate picture of what's going on. - - After you have what looks like a good match, print another bar using -only the largest dot size (or dark ink, for single dot size 6-color -printers). You want to ensure that the bars touching each other look -identical, or as close as possible to it; your eye won't give you a -good reading if the bars are separated from each other. You'll -probably have to repeat the procedure. - - The next step is to comment out all but the largest and third-largest -dot size, and repeat the procedure. When they match, use all three dot -sizes of dark ink. Again, the goal is to match the single dot size. - - You'll probably find the match is imperfect. Now you have to figure -out what region isn't right, which takes some experimentation. Even -small adjustments can make a noticeable difference in what you see. At -this stage, it's very important to hold the page far enough from your -eye; when you use all three dot sizes, the texture will be much more -even, which sometimes makes it look darker and sometimes lighter. - - After this is calibrated, it's time to calibrate the light ink -against the dark ink. To do this, comment out all but the large dot -version of the two inks, and repeat the procedure. This is trickier, -because the hues of the inks might not be quite identical. Look at the -dark half of the bar as well as the light half to see that the hue -really doesn't change as you sweep from cyan to black. Sometimes it's -easier to judge that way. You may find that it looks blotchy, in which -case you should switch from ordered dither to adaptive hybrid. - - After you have the light and dark inks calibrated against each other, -it's time to add everything back in. Usually you don't want to use the -largest dot size of light ink. These dots will be much larger than the -small dots of dark ink, but they'll still be lighter. This will cause -problems when printing mixed colors, since you'll be depositing more -ink on lighter regions of the page, and you'll probably get strange -color casts that you can't get rid of in neutral tones. I normally use -only the smallest one or two dot sizes of light ink. - - After you've tweaked everything, print the color bar with saturation -set to zero. This will print neutral tones using color inks. Your -goal here is to look for neutral tonality. If you're using a 6-color -printer and get a yellow cast, it means that the values for your light -inks are too high (remember, that means they're getting too much -credit, so you're not depositing enough cyan and magenta ink, and the -yellow dominates). If you get a bluish or bluish-purple cast, your -light inks are too low (you're not giving them enough credit, so too -much cyan and magenta is deposited, which overwhelms the yellow). Make -sure you do this on very white, very high grade inkjet paper that's -designed for 1440x720 dpi or higher; otherwise the ink will spread on -contact and you'll get values that aren't really true for high grade -paper. You can, of course, calibrate for low grade paper if that's -what you're going to use, but that shouldn't be put into the -distribution. - - You can also fully desaturate this bar inside the Gimp and print it -as monochrome (don't print the cyan as monochrome; the driver does funny -things with luminance), for comparison. You'll find it very hard to -get rid of all color casts. - - There are other ways of tuning printers, but this one works pretty -well for me. - - -File: gimpprint.info, Node: Canon inkjet printers, Prev: Tuning Epson printers, Up: New Printer - -Canon inkjet printers -===================== - - Basically, a new Canon printer can be added to `print-canon.c' in a -similar way as described above for the epson inkjet printers. The main -differences are noted here: - - In general, Canon printers have more "built-in intelligence" than -Epson printers which results in the fact that the driver only has to -tell the printing conditions like resolutions, dot sizes, etc. to the -printer and afterwards transfer the raster data line by line for each -color used. - - `canon_cap_t' is a C struct defined as follows: - - - Data type: canon_cap_t - typedef struct canon_caps { - int model; /* model number as used in printers.xml */ - int max_width; /* maximum printable paper size */ - int max_height; - int base_res; /* base resolution - shall be 150 or 180 */ - int max_xdpi; /* maximum horizontal resolution */ - int max_ydpi; /* maximum vertical resolution */ - int max_quality; - int border_left; /* left margin, points */ - int border_right; /* right margin, points */ - int border_top; /* absolute top margin, points */ - int border_bottom; /* absolute bottom margin, points */ - int inks; /* installable cartridges (CANON_INK_*) */ - int slots; /* available paperslots */ - int features; /* special bjl settings */ - canon_dot_size_t dot_sizes; /* Vector of dot sizes for resolutions */ - canon_densities_t densities; /* List of densities for each printer */ - canon_variable_inklist_t *inxs; /* Choices of inks for this printer */ - } canon_cap_t; - - Since there are Canon printers which print in resolutions of 2^n*150 -dpi (e.g. 300, 600, 1200) and others which support resolutions of -2^n*180 dpi (e.g. 360, 720, 1440), there's a base resolution (150 or -180, respectively) given in the `canon_cap_t'. The structs -`canon_dot_size_t', `canon_densities_t' and `canon_variable_inklist_t' -refer to resolutions being multiples of the base resolution. - - For the Canon driver, the struct `canon_dot_size_t' holds values for -a model's capabilities at a given resolution: `-1' if the resolution is -not supported. `0' if it can be used and `1' if the resolution can be -used for variable dot size printing. - - In `canon_densities_t' the base densities for each resolution can be -specified like for an epson printer, the same holds true for -`canon_variable_inklist_t'. See the descriptions above to learn about -how to adjust your model's output to yield nice results. - - There's a slight difference though in the way the Canon driver and -the escp2 driver define their variable inklists: In the Canon driver, -you need to define an inklist like this: - - static const canon_variable_inklist_t canon_ink_myinks[] = - { - { - 1,4, /* 1bit/pixel, 4 colors */ - &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, - &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, - }, - { - 3,4, /* 3bit/pixel, 4 colors */ - &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, - &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, - }, - }; - -where the `&ci_CMYK_1' and `&ci_CMYK_3' entries are references to a -previously defined const of type `canon_variable_inkset_t'. - - -File: gimpprint.info, Node: Data Type and Variable Index, Next: Function and Macro Index, Prev: Appendices, Up: Top - -Data Type and Variable Index -**************************** - -* Menu: - -* canon_cap_t: Canon inkjet printers. -* escp2_printer_t: Epson inkjet printers. -* gimpprint_binary_age: Version functions. -* gimpprint_current_interface: Version functions. -* gimpprint_interface_age: Version functions. -* gimpprint_major_version: Version functions. -* gimpprint_micro_version: Version functions. -* gimpprint_minor_version: Version functions. -* stp_image_t: Printer functions. -* stp_option_t: Options functions. -* stp_outfunc_t: stp_vars_t functions. -* stp_papersize_t: Paper functions. -* stp_papersize_unit_t: Paper functions. -* stp_printer_t: Printer functions. -* stp_printfuncs_t: Printer functions. -* stp_vars_t: stp_vars_t functions. - - -File: gimpprint.info, Node: Function and Macro Index, Next: Concept Index, Prev: Data Type and Variable Index, Up: Top - -Function and Macro Index -************************ - -* Menu: - -* * ?? BC=XX Y[1] ... Y[xx]: ESC/P2 Remote Mode Commands. -* * AC BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * AI BC=3 00 00 00: ESC/P2 Remote Mode Commands. -* * CH BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * DA BC=4 00 XX 00 YY: ESC/P2 Remote Mode Commands. -* * DA BC=6 00 XX 00 YY 09 00: ESC/P2 Remote Mode Commands. -* * DR BC=4 00 xx DT2: ESC/P2 Remote Mode Commands. -* * DT BC=3 00 XX 00: ESC/P2 Remote Mode Commands. -* * DU BC=6 00 XX 00 09 00 YY: ESC/P2 Remote Mode Commands. -* * EX BC=3 00 XX YY: ESC/P2 Remote Mode Commands. -* * EX BC=6 00 00 00 00 0x05 XX: ESC/P2 Remote Mode Commands. -* * EX BC=6 00 00 00 00 0x14 XX: ESC/P2 Remote Mode Commands. -* * FP BC=3 00 XX YY: ESC/P2 Remote Mode Commands. -* * IK BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * IQ BC=1 01: ESC/P2 Remote Mode Commands. -* * IR BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * LD BC=0: ESC/P2 Remote Mode Commands. -* * PH BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * PM BC=2 00 00: ESC/P2 Remote Mode Commands. -* * PP BC=3 00 XX YY: ESC/P2 Remote Mode Commands. -* * PZ BC=2 00 xx: ESC/P2 Remote Mode Commands. -* * RS BC=1 01: ESC/P2 Remote Mode Commands. -* * SM BC=1 01: ESC/P2 Remote Mode Commands. -* * SM BC=2 00 02: ESC/P2 Remote Mode Commands. -* * SM BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * SN BC=3 00 XX YY: ESC/P2 Remote Mode Commands. -* * ST BC=1 01: ESC/P2 Remote Mode Commands. -* * ST BC=2 00 XX: ESC/P2 Remote Mode Commands. -* * SV BC=0: ESC/P2 Remote Mode Commands. -* : printers.xml. -* : printers.xml. -* : printers.xml. -* : printers.xml. -* : printers.xml. -* : printers.xml. -* AM_PATH_GIMPPRINT: autoconf. -* ESC $ OFFSET2: ESC/P2 Standard Commands. -* ESC ($ BC=4 OFFSET4: ESC/P2 Standard Commands. -* ESC (/ BC=4 OFFSET4: ESC/P2 Standard Commands. -* ESC (\ BC=4 UNITS2 OFFSET2: ESC/P2 Standard Commands. -* ESC (C BC=2 PAGELENGTH2: ESC/P2 Standard Commands. -* ESC (C BC=4 PAGELENGTH4: ESC/P2 Standard Commands. -* ESC (c BC=4 TOP2 LENGTH2: ESC/P2 Standard Commands. -* ESC (c BC=8 TOP4 LENGTH4: ESC/P2 Standard Commands. -* ESC (D BC=4 BASE2 VERTICAL1 HORIZONTAL1: ESC/P2 Standard Commands. -* ESC (e BC=2 ZERO1 DOTSIZE1: ESC/P2 Standard Commands. -* ESC (G BC=1 ON1: ESC/P2 Standard Commands. -* ESC (i BC=1 MICROWEAVE1: ESC/P2 Standard Commands. -* ESC (K BC=2 ZERO1 GRAYMODE1: ESC/P2 Standard Commands. -* ESC (r BC=2 DENSITY1 COLOR1: ESC/P2 Standard Commands. -* ESC (R BC=8 00 R E M O T E 1: ESC/P2 Standard Commands. -* ESC (s BC=1 SPEED1: ESC/P2 Standard Commands. -* ESC (S BC=8 WIDTH4 LENGTH4: ESC/P2 Standard Commands. -* ESC (U BC=1 UNIT1: ESC/P2 Standard Commands. -* ESC (U BC=5 PAGEUNITS1 VUNIT1 HUNIT1 BASEUNIT2: ESC/P2 Standard Commands. -* ESC (V BC=2 ADVANCE2: ESC/P2 Standard Commands. -* ESC (v BC=2 ADVANCE2: ESC/P2 Standard Commands. -* ESC (V BC=4 ADVANCE4: ESC/P2 Standard Commands. -* ESC (v BC=4 ADVANCE4: ESC/P2 Standard Commands. -* ESC . COMPRESS1 VSEP1 HSEP1 LINES1 WIDTH2 DATA...: ESC/P2 Standard Commands. -* ESC 01 @EJL [sp] ID\r\n: ESC/P2 Standard Commands. -* ESC @: ESC/P2 Standard Commands. -* ESC \ OFFSET2: ESC/P2 Standard Commands. -* ESC i COLOR1 COMPRESS1 BITS1 BYTES2 LINES2 DATA...: ESC/P2 Standard Commands. -* ESC r COLOR1: ESC/P2 Standard Commands. -* ESC U DIRECTION1: ESC/P2 Standard Commands. -* GIMPPRINT_BINARY_AGE: Version functions. -* GIMPPRINT_CHECK_VERSION: Version functions. -* GIMPPRINT_CURRENT_INTERFACE: Version functions. -* GIMPPRINT_INTERFACE_AGE: Version functions. -* GIMPPRINT_MAJOR_VERSION: Version functions. -* GIMPPRINT_MICRO_VERSION: Version functions. -* GIMPPRINT_MINOR_VERSION: Version functions. -* NC BC=2 00 00: ESC/P2 Remote Mode Commands. -* stp_allocate_copy: stp_vars_t functions. -* stp_allocate_lut: stp_vars_t functions. -* stp_allocate_vars: stp_vars_t functions. -* stp_check_version: Version functions. -* stp_choose_colorfunc: Settings functions. -* stp_clear_all_options: Options functions. -* stp_clear_option: Options functions. -* stp_compute_lut: stp_vars_t functions. -* stp_compute_page_parameters: Settings functions. -* stp_copy_vars: stp_vars_t functions. -* stp_default_dither_algorithm: Dither functions. -* stp_default_settings: Settings functions. -* stp_dither_algorithm_count: Dither functions. -* stp_dither_algorithm_name: Dither functions. -* stp_free_lut: stp_vars_t functions. -* stp_free_vars: stp_vars_t functions. -* stp_get_app_gamma: stp_vars_t functions. -* stp_get_brightness: stp_vars_t functions. -* stp_get_cmap: stp_vars_t functions. -* stp_get_contrast: stp_vars_t functions. -* stp_get_cyan: stp_vars_t functions. -* stp_get_density: stp_vars_t functions. -* stp_get_dither_algorithm: stp_vars_t functions. -* stp_get_driver: stp_vars_t functions. -* stp_get_errdata: stp_vars_t functions. -* stp_get_errfunc: stp_vars_t functions. -* stp_get_gamma: stp_vars_t functions. -* stp_get_image_type: stp_vars_t functions. -* stp_get_ink_type: stp_vars_t functions. -* stp_get_input_color_model: stp_vars_t functions. -* stp_get_left: stp_vars_t functions. -* stp_get_lut: stp_vars_t functions. -* stp_get_magenta: stp_vars_t functions. -* stp_get_media_size: stp_vars_t functions. -* stp_get_media_source: stp_vars_t functions. -* stp_get_media_type: stp_vars_t functions. -* stp_get_option_by_index: Options functions. -* stp_get_option_by_name: Options functions. -* stp_get_orientation: stp_vars_t functions. -* stp_get_outdata: stp_vars_t functions. -* stp_get_outfunc: stp_vars_t functions. -* stp_get_output_color_model: stp_vars_t functions. -* stp_get_output_to: stp_vars_t functions. -* stp_get_output_type: stp_vars_t functions. -* stp_get_page_height: stp_vars_t functions. -* stp_get_page_width: stp_vars_t functions. -* stp_get_papersize_by_index: Paper functions. -* stp_get_papersize_by_name: Paper functions. -* stp_get_papersize_by_size: Paper functions. -* stp_get_ppd_file: stp_vars_t functions. -* stp_get_printer_by_driver: Printer functions. -* stp_get_printer_by_index: Printer functions. -* stp_get_printer_by_long_name: Printer functions. -* stp_get_printer_index_by_driver: Printer functions. -* stp_get_resolution: stp_vars_t functions. -* stp_get_saturation: stp_vars_t functions. -* stp_get_scaling: stp_vars_t functions. -* stp_get_top: stp_vars_t functions. -* stp_get_unit: stp_vars_t functions. -* stp_get_yellow: stp_vars_t functions. -* stp_init: Main functions. -* stp_known_papersizes: Paper functions. -* stp_known_printers: Printer functions. -* stp_malloc: Main functions. -* stp_maximum_settings: Settings functions. -* stp_merge_printvars: stp_vars_t functions. -* stp_minimum_settings: Settings functions. -* stp_option_count: Options functions. -* stp_option_data: Options functions. -* stp_option_length: Options functions. -* stp_option_name: Options functions. -* stp_papersize_get_bottom: Paper functions. -* stp_papersize_get_height: Paper functions. -* stp_papersize_get_left: Paper functions. -* stp_papersize_get_name: Paper functions. -* stp_papersize_get_right: Paper functions. -* stp_papersize_get_top: Paper functions. -* stp_papersize_get_unit: Paper functions. -* stp_papersize_get_width: Paper functions. -* stp_printer_get_driver: Printer functions. -* stp_printer_get_long_name: Printer functions. -* stp_printer_get_model: Printer functions. -* stp_printer_get_printfuncs: Printer functions. -* stp_printer_get_printvars: Printer functions. -* stp_set_app_gamma: stp_vars_t functions. -* stp_set_brightness: stp_vars_t functions. -* stp_set_cmap: stp_vars_t functions. -* stp_set_contrast: stp_vars_t functions. -* stp_set_cyan: stp_vars_t functions. -* stp_set_density: stp_vars_t functions. -* stp_set_dither_algorithm: stp_vars_t functions. -* stp_set_dither_algorithm_n: stp_vars_t functions. -* stp_set_driver: stp_vars_t functions. -* stp_set_driver_n: stp_vars_t functions. -* stp_set_errdata: stp_vars_t functions. -* stp_set_errfunc: stp_vars_t functions. -* stp_set_gamma: stp_vars_t functions. -* stp_set_image_type: stp_vars_t functions. -* stp_set_ink_type: stp_vars_t functions. -* stp_set_ink_type_n: stp_vars_t functions. -* stp_set_input_color_model: stp_vars_t functions. -* stp_set_left: stp_vars_t functions. -* stp_set_lut: stp_vars_t functions. -* stp_set_magenta: stp_vars_t functions. -* stp_set_media_size: stp_vars_t functions. -* stp_set_media_size_n: stp_vars_t functions. -* stp_set_media_source: stp_vars_t functions. -* stp_set_media_source_n: stp_vars_t functions. -* stp_set_media_type: stp_vars_t functions. -* stp_set_media_type_n: stp_vars_t functions. -* stp_set_option: Options functions. -* stp_set_orientation: stp_vars_t functions. -* stp_set_outdata: stp_vars_t functions. -* stp_set_outfunc: stp_vars_t functions. -* stp_set_output_color_model: stp_vars_t functions. -* stp_set_output_to: stp_vars_t functions. -* stp_set_output_to_n: stp_vars_t functions. -* stp_set_output_type: stp_vars_t functions. -* stp_set_page_height: stp_vars_t functions. -* stp_set_page_width: stp_vars_t functions. -* stp_set_ppd_file: stp_vars_t functions. -* stp_set_ppd_file_n: stp_vars_t functions. -* stp_set_resolution: stp_vars_t functions. -* stp_set_resolution_n: stp_vars_t functions. -* stp_set_saturation: stp_vars_t functions. -* stp_set_scaling: stp_vars_t functions. -* stp_set_top: stp_vars_t functions. -* stp_set_unit: stp_vars_t functions. -* stp_set_yellow: stp_vars_t functions. -* VI BC=2 00 00: ESC/P2 Remote Mode Commands. - - -File: gimpprint.info, Node: Concept Index, Prev: Function and Macro Index, Up: Top - -Concept Index -************* - -* Menu: - -* adding a printer: New Printer. -* Appendices: Appendices. -* autoconf: autoconf. -* automake: automake. -* bugs: Problems. -* collisions: Weaving collisions. -* CUPS driver: CUPS. -* dither functions: Dither functions. -* dithering: Dithering. -* driver file: Driver file. -* Epson inkjet printers: Epson inkjet printers. -* ESC/P2: ESC/P2. -* ESC/P2 introduction: ESC/P2 Introduction. -* functions: Functions. -* ghostscript driver: Ghostscript. -* GIMP Print plugin: The GIMP plugin. -* gimpprint-config: gimpprint-config. -* how to read: Instructions. -* initialising libgimpprint: Main functions. -* integrating: Integrating libgimpprint. -* m4 macros: autoconf. -* main functions: Main functions. -* make: make. -* manual, how to read: Instructions. -* memory allocation: Main functions. -* new printer: New Printer. -* options functions: Options functions. -* oversampling: Oversampling. -* overview: Overview. -* paper functions: Paper functions. -* perfect weave <1>: What is perfect weaving?. -* perfect weave: Perfect weaving. -* Print plugin: The GIMP plugin. -* printer functions: Printer functions. -* printer, adding: New Printer. -* printer, tuning: Tuning Epson printers. -* problems: Problems. -* programs: Programs. -* reading: Instructions. -* settings functions: Settings functions. -* stp_vars_t functions: stp_vars_t functions. -* tuning the printer: Tuning Epson printers. -* using: Using libgimpprint. -* version functions: Version functions. -* weaving: Weaving. -* weaving algorithms: Weaving algorithms. -* weaving collisions: Weaving collisions. - - diff --git a/doc/gimpprint.ps b/doc/gimpprint.ps deleted file mode 100644 index 060cee9..0000000 --- a/doc/gimpprint.ps +++ /dev/null @@ -1,11226 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: gimpprint.dvi -%%Pages: 94 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: /usr/bin/dvips gimpprint.dvi -o gimpprint.ps -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2004.06.11:2047 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: special.pro -%! -TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N -/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N -/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N -/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ -/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho -X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B -/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ -/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known -{userdict/md get type/dicttype eq{userdict begin md length 10 add md -maxlength ge{/md md dup length 20 add dict copy def}if end md begin -/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S -atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ -itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll -transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll -curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf -pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} -if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 --1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 -get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip -yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub -neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ -noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop -90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get -neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr -1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr -2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 --1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S -TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ -Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale -}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState -save N userdict maxlength dict begin/magscale true def normalscale -currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts -/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x -psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx -psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub -TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath -moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict -begin/SpecialSave save N gsave normalscale currentpoint TR -@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ -CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury -lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N -/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} -repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N -/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX -currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY -moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X -/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 -1 startangle endangle arc savematrix setmatrix}N end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 600 600 (gimpprint.dvi) -@start -%DVIPSBitmapFont: Fa cmsl9 9 41 -/Fa 41 122 df<123C127E12FFA312FEA212380808798715>46 D<1406141E143EEB01FE -131FEA01FF495AEA03E0C7FCA313015CA513035CA513075CA5130F5CA5131F5CA5133F91 -C7FCA4EBFF80B61280A21500193279B126>49 DI<15035D5D5D5D5D157E15FE14011403EC077E140EEC0CFC14181430146014E0EB -01C0EC81F8EB03011306130C131C133849485A136013C0EA01801203EA0700000E495A12 -0C5A5A5A007FB612C0B71280A2C7380FC000A3141FA25DA4143F90381FFFFEA322337CB2 -26>52 D<1670A216F0A21501821503A21507150F82151D15191531A2ED61FE156015C0A2 -EC0180A24A487E821406A25C834A133FA25C147002608002E0131F5C49B6FCA2498191C7 -120F1306A25BA2498116075BA25B01E081160300031507D80FF84A7EB549B512F05BA234 -367DB53A>65 D<90B7FC17E017F8903A03FC0003FE0101EC00FFEF7F800103153F4A15C0 -171FA413075C173FA21880EF7F00010F5D4A495AEE03F84C5AEE1FC091B6C7FC495C9139 -C0007FC0EE0FE0EE03F8707E83013F14004A8083A4137F91C85AA34C5AA2494A5A494A5A -4C5A4C5AEE7FC000014A485AB748C7FC16F816C032337DB236>II<90B77E17F017FC903A03FC0003FE0101EC007FEF3FC00103150F -4AEC07E018F0EF03F8170118FC13074A140018FEA4130F4A15FFA418FE131F4A1401A418 -FC013F15035C18F8A2EF07F0A2017FED0FE091C8FCEF1FC01880EF3F005F4915FE494A5A -EE07F04C5AEE3FC000014AB4C7FCB712FC16F093C8FC38337DB23B>I<90B812C0A3D903 -FCC7127F0101150F1707010315034A1401A4170013075C1618A31638010F023013005C16 -7016F0150391B5FC495CA2ECC00715011500A2013F5C4AEC0180A3EF03001600017F5D91 -C81206A2170E170C171C49153C4915381778EE01F8EE07F00001153FB8FC5FA232337DB2 -34>I<90B81280A3D903FCC7FC0101151F170F010315074A1403A4170113075CA21630A3 -010F4AC7FC5CA216E01501150749B55AA3ECC00F15031501013F5C1480A5017F90C9FC91 -CAFCA55B5BA4487EB6FCA25C31337DB232>II<90B5D8FC03B512F0A3D903FEC7380FF8006D486E5A17 -0F13034A5DA4171F13074A5DA4173F130F4A5DA491B7FC5B95C7FC02C0C77EA35F133F4A -5CA41601137F91C75BA416035B495DA400011507B5D8FC03B512F0A33C337DB23A>I<90 -387FFFFE90B5FCA2010113006D5AA213015CA513035CA513075CA5130F5CA5131F5CA513 -3F5CA5137F91C7FCA4497E007F13FEB5FCA21F337EB21C>I<90B6FCA25DD903FEC8FC6D -5AA213035CA513075CA5130F5CA5131F5CA5133F4A1430A31760A2137F91C812E017C016 -01A21603491580491407160FEE3F0016FF00011407B8FC5EA22C337DB230>76 -DIII<90B612FEEEFFC017F0903A03FC0007FC0101EC01FEEE00 -7F0103ED3F805C18C0A2171F173F13075CA31880177F010F16005C17FE4C5A4C5AEE0FE0 -011FEC7FC091B6C7FC16F802C0C9FCA3133F5CA5137F91CAFCA55B5BA41201B512FCA332 -337DB234>I<90B612F8EEFF8017E0903A03FC000FF00101EC03FCEE00FE0103814A8018 -80A2173F177F13075CA318005F010F5D4A495A4C5AEE07E0EE1FC004FFC7FC49B512F816 -E09138C001F86F7E167E82013F814A131FA283A3017F143F91C7FCA549147F49160CA304 -3F131C00011718B500FC011F1338EFE070040713E0C93803FFC09338007F0036357DB239 ->82 D<91390FF0018091387FFE0349B51207903A07F00FCF0090390FC001FF49C7FC013E -804980A249141E5B0001150EA31203160CA27F93C7FC7F6C7E6D7E14F86CEBFF806D13F8 -15FE011F7F6D80010380D9003F7F14039138003FF0150F1507A21503820018140100385D -1230A400384A5A12784B5A127C007E4A5A007F4AC7FC6D133ED8FBC05B39F1FC03F839F0 -7FFFE0D8E01F138026C003FEC8FC29377CB42B>I<001FB81280A3903AE003FC007FD900 -01140F003E1607003C130300384A13031230007017001260A214075D5AA4C7000F91C7FC -5DA5141F5DA5143F5DA5147F92C9FCA55C5CA4EB03FF0007B67EA3313377B237>IIII89 -D<013FB612FCA39139F80007F802C0EB0FF049C7FC017CEC1FE00178EC3FC00170EC7F80 -01F0ECFF005B4B5A49495A4B5A4848495A4B5AA24B5AC8485A4BC7FC4A5AA24A5A4A5A4A -5A4A5A4A5AA24A5A4AC8FC495A4948EB0180A2495A495A4948EB0300495A495A5E49C712 -064848140E485A4848141E163E48485C484814FC484813034848131FB7FC5EA22E337CB2 -2F>I97 D<167EED1FFE16FC153F1501A416F8A41503A216F0A4150714FE -903907FFC7E090381F81E790387E007749133F4848131F4848130F484814C0120F485AA2 -4848131FA2007F158090C7FCA3153F5A481500A3127E5DA2157E6C14FE14016C13036C6C -487E2607C00E13F03803E07C3800FFF090393F80FC0027357BB32B>100 -DI<163C91387F01FF903901 -FFE3CF903907C1FF0F90391F80FC1F90393F007C0E017EEB3E005B153F485AA35D157E5B -A25D6D5B0000495A90387C03E09038FE0FC02601CFFFC7FC380383F80180C8FCA21207A3 -7F90B57E6C14F015FC6C804880380F800048C7EA3F80003E141F48140F12FC5AA3151F16 -006C143E007C5C6C5C6CEB03F03907E01FC00001B5C7FC38003FF028337FA126>103 -D105 D108 D<90260F80FFEB07F82603FF839038C01FFE48903A8F03E078 -1F913B9C01F0E00F8026007FB8D9F9C013C0D93FF0EBFB8002E0EBFF0002C05B02805BA2 -02005BA2490103141F017E4A1480A501FE0107143F494A1400A50001020F5C494A137EA4 -0003021F14FE3D7FFFC3FFFE1FFFF0A2B500C75C3C217EA041>I<90380F80FE3A03FF83 -FF804890388F07E0EC9C0326007FB813F0EB3FF014E014C01480A2140015075B017E14E0 -A4150F13FE4914C0A4151F1201491480A40003143F3A7FFFC7FFFCA2B5FC26217EA02B> -I<14FF010713C090381F81F090383E00F80178133C4848133E48487FA248481480120F48 -48130FED1FC0123F90C7FCA25AA400FEEC3F80A31600007E5C157EA25D003E5C003F495A -6C495A6C6C485A6C6C485A2603F03EC7FC3800FFF8EB3FC022237CA126>I<903803E07F -9039FFE1FFC0489038E781F09138FE00FC26001FF8137E6D5A4A7F17805C161F17C0A213 -1F5CA4163F013F158091C7FCA2167F17005E495C017E495A5E017F13034B5A9039FF800F -C06E485A9026FCE07EC7FCEC7FF8EC1FC091C9FC1201A25BA41203A25B487EB512C05CA2 -2A3080A02B>I<90383E03E03907FE1FF8143C000FEB71FC38007EE1EB7FC1EC81F815F0 -91C7FCA2137EA213FE5BA512015BA512035BA41207B512C0A31E217EA01E>114 -D<13065BA4131CA25BA2137813F812011203485A381FFFFEB5FCA23803F000A212075BA5 -120F5BA5121FEB8018A41438003F13301300A214706C1360EB80E0380F81C0EBC3803803 -FF00EA00FC172F7AAD1E>116 D<3A7FFF803FFCA2B538007FF8D807F8EB1FC06C48EB0F -00150E150C7F00015C153815306D5B12005D140101FE5BD97E03C7FCA21406137F6D5A14 -1C141814B0131F14E0A25C130F5C91C8FCA2130626217A9F29>118 -D<3B03FFFC0FFFC014F85A3B003FE007F800010FEB03E0ED0780010791C7FC903803F00E -6E5A01015B6E5A01005BEC7FC05D6EC8FC81141F4A7E4A7E14E7903801C7F0EB03839038 -0701F8010E7FEB1C00497F0178137ED801F8137F00074A7E267FFC0113FC00FF5BA22A20 -7F9F29>120 D<90B5EB7FF8A248EDFFF026000FF0EB3F806D48EB1E00161C6E13180103 -143816305E8001015C15015E6E48C7FC13001506150EECFE0CEC7E18A25D147F6E5A15E0 -5D5D141F92C8FCA2140E140CA25C143814305CA25CEA3C01007C5BD8FC03C9FC5B130EEA -701CEA7878EA3FE0EA0F802D30819F29>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmti9 9 1 -/Fb 1 47 df<121C127F12FFA412FE12380808778718>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmmi10 10.95 40 -/Fc 40 123 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113 -80120313005A120E5A1218123812300B1C798919>59 D<183818FC1703EF0FF8EF3FE0EF -FF80933803FE00EE0FF8EE3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC -0FF8EC3FE0ECFF80D903FEC9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F80 -00FECBFCA2EA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3F -E0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE93 -3800FF80EF3FE0EF0FF8EF03FC17001838363678B147>II<126012F8B4FCEA7FC0 -EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF9038007FC0EC1FF0EC07FCEC01FF -9138007FC0ED1FF0ED07FCED01FF9238007FC0EE1FF0EE07FCEE01FF9338007FC0EF1FF0 -EF07F8EF01FCA2EF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07 -FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CA -FCEA07FCEA1FF0EA7FC048CBFC12FC1270363678B147>I<17075F84171FA2173F177FA2 -17FFA25E5EA24C6C7EA2EE0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07 -005D150E5DA25D157815705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C1438 -4A81A24A140713015C495AA249C8FC5B130E131E4982137C13FED807FFED1FFEB500F001 -07B512FCA219F83E417DC044>65 D<49B712F818FF19E090260001FEC7EA3FF0F007F84B -6E7E727E850203815D1A80A20207167F4B15FFA3020F17004B5C611803021F5E4B4A5A18 -0FF01FE0023F4B5A4B4A5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18E092C7EA07F84A -EC01FE4A6E7E727E727E13014A82181FA213034A82A301075F4A153FA261010F167F4A5E -18FF4D90C7FC011F5E4A14034D5A013FED1FF04D5A4AECFFC0017F020790C8FCB812FC17 -F094C9FC413E7DBD45>II<49B9 -12C0A3D9000190C71201F0003F4B151F190F1A80020316075DA314075D1A00A2140F4B13 -07A24D5B021F020E130E4B92C7FC171EA2023F5C5D177CEE01FC4AB55AA3ED800302FF6D -5A92C7FCA3495D5C19380401147801034B13704A16F093C85AA2010716014A5E18036101 -0F16074A4BC7FCA260011F163E4A157E60013F15014D5A4A140F017F15FFB95AA260423E -7DBD43>69 D71 D<49B6D8C03FB512F81BF01780D900010180C7383FF00093C85B4B5EA2197F1403 -4B5EA219FF14074B93C7FCA260140F4B5DA21803141F4B5DA21807143F4B5DA2180F4AB7 -FC61A20380C7121F14FF92C85BA2183F5B4A5EA2187F13034A5EA218FF13074A93C8FCA2 -5F130F4A5DA21703131F4A5DA2013F1507A24A5D496C4A7EB6D8E01FB512FCA2614D3E7D -BD4C>I<49B612C05BA2D90001EB800093C7FC5DA314035DA314075DA3140F5DA3141F5D -A3143F5DA3147F5DA314FF92C8FCA35B5CA313035CA313075CA3130F5CA3131F5CA2133F -A25CEBFFE0B612E0A32A3E7DBD28>I<92B612E0A39239003FF000161F5FA2163F5FA316 -7F5FA316FF94C7FCA35D5EA315035EA315075EA3150F5EA3151FA25EA2153FA25EA2157F -A25EA2D80F8013FFEA3FC0486C91C8FCA25CD8FFC05B140301805B49485A00FC5C007049 -5A0078495A0038495A001E017EC9FC380F81FC3803FFE0C690CAFC33407ABD32>I<49B6 -00C090387FFFF896B5FC5FD900010180C7000F130093C813F84B16E01A804FC7FC020316 -3C4B15F84E5AF003C002074B5A4B021FC8FC183E1878020F5D4BEB03E0EF07804DC9FC02 -1F143E4B5B17F04C5A023F1307EDC00F4C7E163F027FEBFFF8ED81EFED83CF92388F87FC -9138FF9F0792383C03FE15784B6C7E4913E0158092C77F5C01036F7E5C717EA213074A6E -7EA2717E130F4A6E7EA284011F15035C717E133F855C496C4A13E0B600E0017F13FFA34D -3E7DBD4D>I<49B612F0A3D900010180C7FC93C8FC5DA314035DA314075DA3140F5DA314 -1F5DA3143F5DA3147F5DA314FF92C9FCA35B5C180C181E0103161C5C183C183813074A15 -78187018F0130F4AEC01E0A21703011FED07C04A140F171F013FED3F8017FF4A1303017F -021F1300B9FCA25F373E7DBD3E>I79 D83 D<48B912FCA25A913A0003FE000F01F84A1301 -D807E0EE00F8491307491778000F5D90C7FC001E140FA2001C4B1470123C0038141FA200 -785D1270033F15F000F018E0485DC81600157FA25EA215FFA293C9FCA25CA25DA21403A2 -5DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147FA214FF497F001FB612FCA25E -3E3D7FBC35>I<027FB5D88007B512C091B6FCA2020101F8C7EBF8009126007FE0EC7F80 -4C92C7FC033F157C701478616F6C495A4E5A6F6C495A4EC8FC180E6F6C5B606F6C5B6017 -016F6C485A4D5A6F018FC9FC179E17BCEE7FF85F705AA3707EA283163F167FEEF7FCED01 -E7EEC3FEED0383ED070392380E01FF151E4B6C7F5D5D4A486D7E4A5A4A486D7E92C7FC14 -0E4A6E7E5C4A6E7E14F0495A49486E7E1307D91F806E7ED97FC014072603FFE0EC1FFF00 -7F01FC49B512FEB55CA24A3E7EBD4B>88 DI97 DIIII<163EEEFFC09238 -03E1E0923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA51401 -5DA30103B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C14 -7EA414FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703E -EA7878EA1FF0EA07C02C537CBF2D>III<143C14FEA21301A314FCEB00701400AD137E3801FF -803803C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F14801200 -133F14005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC03814 -78147014E013C13803E3C03801FF00EA007C173E7EBC1F>II108 -D<01F8EB0FF0D803FEEB3FFC3A078F80F03E3A0F0F83C01F3B0E07C7800F80001CEBCF00 -02FE80003C5B00385B495A127800705BA200F049131F011F5D00005BA2163F013F92C7FC -91C7FC5E167E5B017E14FE5EA201FE0101EB03804914F8A203031307000103F013005B17 -0E16E000035E49153C17385F0007913801F1E0496DB45AD801C0023FC7FC31297EA737> -110 DII<91381F800C9138FFE01C903903 -F0707C90390FC0387890391F801CF890383F000F137E4914F000011407485A485A16E048 -5A121F150F484814C0A3007F141F491480A300FF143F90C71300A35D48147EA315FE007E -495A1403A26C13074A5A381F801D000F13793807C1F33901FFC3F038007F03130014075D -A3140F5DA3141F5DA2143F147F90381FFFFE5BA2263A7DA729>III<147014FC1301A25CA21303A25CA21307A25CA2130FA25CA2007FB512F0B6FC -15E039001F8000133FA291C7FCA25BA2137EA213FEA25BA21201A25BA21203A25BA21207 -EC01C013E01403000F1480A2EBC0071500140E141E5C000713385C3803E1E03801FF80D8 -003EC7FC1C3A7EB821>I<137C48B4EC03802603C7C0EB0FC0EA0703000F7F000E151F12 -1C010715801238163FEA780F0070491400A2D8F01F5C5C0000157E133F91C712FEA2495C -137E150113FE495CA215030001161C4914F0A21507173CEEE038150F031F137800001670 -6D133F017C017313F0017E01E313E0903A3F03C1F1C0903A0FFF007F80D901FCEB1F002E -297EA734>I<013EEE0380D9FF800107EB0FE02601C3E090381F801FD8038117F0380701 -F0000E153F001E1600D81C03160F003C170700384BEB03E0D87807147E00705B1801D8F0 -0F14FE4A4914C01200131FDA800114034C1480133F140003031407494A1400137EA26001 -FE0107140E495C60A360150F017C5E017E011F14F0705B6D0139495A6D903970F8038090 -280FC0E07C0FC7FC903A03FFC01FFC903A007F0007F03C297EA741>119 -D<02F8130ED903FE131ED90FFF131C49EB803C49EBC0784914F090397E07F1E09038F800 -FF49EB1FC049EB07800001EC0F006C48131E90C75A5D5D4A5A4A5A4A5A4AC7FC143E1478 -5C495A495A495A49C8FC011E14E05B5B4913014848EB03C0485AD807F8EB078048B4131F -3A1F87E07F00391E03FFFE486C5B00785CD870005B00F0EB7FC048011FC7FC27297DA72A ->122 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmr9 9 49 -/Fd 49 122 df12 D<123C127EB4FCA21380A2127F123D1201A412031300A25A1206 -120E120C121C5A5A126009177AB315>39 D<123C127EB4FCA21380A2127F123D1201A412 -031300A25A1206120E120C121C5A5A126009177A8715>44 D<123C127E12FFA4127E123C -08087A8715>46 D<1530157815F8A215F01401A215E01403A215C01407A21580140FA215 -005CA2143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A2495AA291C7FC5BA2 -131E133EA2133C137CA2137813F8A25B1201A25B1203A2485AA25B120FA290C8FC5AA212 -1E123EA2123C127CA2127812F8A25A12601D4B7CB726>II<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A249 -7E007FB51280A319327AB126>IIII<000C14C0380FC00F90B5128015005C5C -14F014C0D80C18C7FC90C8FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80EC0FC0120E -000CEB07E0A2C713F01403A215F8A41218127E12FEA315F0140712F8006014E01270EC0F -C06C131F003C14806CEB7F00380F80FE3807FFF8000113E038003F801D347CB126>I<14 -FE903807FF80011F13E090383F00F0017C13703901F801F8EBF003EA03E01207EA0FC0EC -01F04848C7FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F809038E007C039FF -C003E0018013F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA26C1301018013 -F8000F14F0EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFCEB0FE01F347D -B126>I<1230123C003FB6FCA34814FEA215FC0070C7123800601430157015E04814C014 -01EC0380C7EA07001406140E5C141814385CA25CA2495A1303A3495AA2130FA3131F91C7 -FCA25BA55BA9131C20347CB126>III<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187F -A34A6C7EA202707FEC601FA202E07FECC00FA2D901807F1507A249486C7EA301066D7EA2 -010E80010FB5FCA249800118C77EA24981163FA2496E7EA3496E7EA20001821607487ED8 -1FF04A7ED8FFFE49B512E0A333367DB53A>65 D67 -D69 DII73 -D77 D80 D<90381FE00390387FFC07 -48B5FC3907F01FCF390F8003FF48C7FC003E80814880A200788000F880A46C80A27E92C7 -FC127F13C0EA3FF013FF6C13F06C13FF6C14C06C14F0C680013F7F01037F9038003FFF14 -0302001380157F153FED1FC0150F12C0A21507A37EA26CEC0F80A26C15006C5C6C143E6C -147E01C05B39F1FC03F800E0B512E0011F138026C003FEC7FC22377CB42B>83 -D<007FB712FEA390398007F001D87C00EC003E0078161E0070160EA20060160600E01607 -A3481603A6C71500B3AB4A7E011FB512FCA330337DB237>II97 -DII<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003BF39 -07E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B6C6C -4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>III<151F90391FC07F809039FFF8E3C03901F07FC73907E03F033A0FC01F8380 -9039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380E -FFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F000100 -3EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6 -B51280D91FFCC7FC22337EA126>IIIIII<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0 -903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C -487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3 -807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>II<3903F03F8000FFEBFFE09038 -F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716 -F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC -91C8FCAA487EB512C0A325307EA02B>I<3803E07C38FFE1FF9038E38F809038E71FC0EA -07EEEA03ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>114 -DI<1330A51370A313F0A21201 -A212031207381FFFFEB5FCA23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1F -F8EB07E0182F7FAD1E>IIII<3A7FFF807FF8A33A07F8001FC00003EC0F80 -0001EC070015066C6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E0010F5BA2 -903807E180A214F3010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05CA2495A -1278D8FC03C8FCA21306130EEA701CEA7838EA1FF0EA0FC025307F9F29>121 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmtt9 9 76 -/Fe 76 123 df<00101320007C13F838FE01FCAAEAFC00007C13F8A900381370161778AE -27>34 D36 D40 D<130F497EA60078EB81E000FEEB87F000FF138FEBDFBF6CB512E06C14C0000F -1400000313FCC613F0A2000313FC000F13FF003F14C04814E039FFDFBFF0EB1F8F00FE13 -870078EB81E00000EB8000A66DC7FC1C207BA627>42 D<007FB512F8B612FCA46C14F81E -067C9927>45 D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A728927>I<1538157C15 -FCA2140115F8140315F0140715E0140F15C0141F1580143F1500A25C147E14FE5C13015C -13035C13075C130F5CA2131F5C133F91C7FC5B137E13FE5B12015B12035BA212075B120F -5B121F5B123F90C8FC5A127E12FE5AA25A12781E3A7CB327>II< -130E131FA25B5BA25B5A5A127FB5FCA213BFEA7E3F1200B3AA003FB512805A15C01580A2 -1A2F79AE27>IIII<001FB512E04814F0A315E090C8FCACEB1FF0EBFFFC14FF158015C09038 -F03FE09038C00FF0EB0007003EEB03F8001C1301C7FC15FC1400A3127C12FEA2140115F8 -4813036C14F0007F130F9038801FE0393FE07FC06CB512806C14006C5B000113F838007F -C01E2F7CAD27>I<14FF010713C0011F13F04913F890B5FC48EB81FC3803FE0113F8EA07 -F0EA0FE09038C000F8001F1400485A90C8FCA25A127EEB0FF838FE3FFE48B51280B612C0 -15E09038F80FF09038E007F890388001FC90C7FC15FE48147E157F153F5A7E127EA3127F -6C147F157E6C6C13FE9038C001FC120F9038F007F83907F81FF06CB512E06C14C06C1480 -90383FFE00EB0FF820307DAE27>I56 -D -I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCAC121EEA7F80A2EAFFC0A4EA7F80A2EA -1E000A20729F27>I<153815FC14011407140FEC3FF8EC7FE0ECFFC001031300495AEB1F -F8495A495A3801FF804890C7FCEA0FFC485AEA7FF0EAFFC05BA27FEA7FF0EA1FF86C7EEA -03FF6C7F38007FE06D7E6D7EEB07FE6D7E010013C0EC7FE0EC3FF8EC0FFC140714011400 -15381E287CAA27>60 D<007FB512FEB7FCA4003F14FEC9FCA6003FB512FEB7FCA46C14FE -20127D9F27>I<127012FC7E6C7E7FEA7FF0EA1FF86C7EEA03FF6C7F38007FE06D7E6D7E -EB07FE6D7E010013C0EC7FE0EC3FF8EC0FFC1407A2140FEC3FF8EC7FE0ECFFC001031300 -495AEB1FF8495A495A3801FF804890C7FCEA0FFC485AEA7FF0EAFFC05B48C8FC5A12701E -287CAA27>IIII<007FB5FCB612C08115F87E3907E0 -03FCEC00FE157E157F81A6157EA25D1403EC0FF890B55A15C015F081819038E000FE157F -ED3F80151FA2ED0FC0A6151F1680153FED7F004A5A007FB55AB65A5D15E06C1480222E7F -AD27>I<903803F80E90381FFE1F90383FFFBF90B6FC5A3803FE0F3807F803497E48487E -485A49137FA248C7123FA25A127E151E150012FE5AAA7E127EA2151E007F143F7EA26C7E -157F6D137E6C6C13FE3907F001FCEBF8033903FE0FF86CB512F06C14E0013F13C06D1300 -EB03F820307DAE27>I<387FFFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA215 -7E157F811680151FA316C0150FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB5 -5A5DB65A6C91C7FC14FC222E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED0780 -92C7FCA4EC07804A7EA390B5FCA5EBE00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7 -FCA36C15C0232E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC -07804A7EA390B5FCA5EBE00FA36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>I<90 -3807F03890381FFC7C90387FFFFC90B5FC5A3803FC1F3807F00F380FE007EBC003001F13 -011380123F90C7FCA2127EA2157892C7FC5AA8EC1FFF4A1380A3007E6D1300EC00FCA36C -1301A21380121FEBC003120FEBE0073807F00F3803FC1F6CB5FC7EEB7FFE90381FFC78D9 -07F0C7FC21307DAE27>I<3A7FFE07FFE0B54813F0A36C486C13E03A07E0007E00AF90B5 -12FEA59038E0007EB03A7FFE07FFE0B54813F0A36C486C13E0242E7FAD27>I<007FB512 -E0B612F0A36C14E039001F8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>I<9038 -1FFFF84913FCA36D13F89038001F80B3AC127CA212FEA2EC3F005C387F81FE13FF6C5B6C -5B000713E0C690C7FC1E2F7BAD27>I<3A7FFC07FF8016C0486C5A6C487E16803A07C001 -F80014035D4A5A4A5A141F5D4AC7FC147E14FE5CEBC1F8EBC3F013C75CEBCFF0EBDFF813 -FF8013FEEBFC7E143EEBF83F497E01E07F140F01C07F1407811403816E7EA26E7E157C15 -7E3A7FFC01FFC016E0486C5A6C487E16C0232E7FAD27>I<387FFFC080B5FC7E5CD803F0 -C8FCB3AAED0780ED0FC0A7007FB6FCA2B7FC7E1680222E7FAD27>II<3A7FF003FFE0486C4813F0A213FC007F6D13E0000790 -38003E0013DEA313CFA3148013C714C0A213C314E0A213C114F0A3EBC0F8A31478147CA2 -143C143EA2141E141F140FA3EC07BEA3EC03FEEA7FFCEAFFFE1401A26C486C5A242E7FAD -27>II<007FB5FCB612E081816C803907E003FEEC00FF81ED3F80151F -16C0150FA6151F1680153FED7F005DEC03FE90B55A5D5D5D92C7FC01E0C8FCADEA7FFEB5 -FCA36C5A222E7FAD27>II<387FFFF0B512FE6E7E816C803907E01FF014076E7E140181 -1400A514015D14034A5A141F90B55A5D5DA281EBE01F6E7E14076E7EA816F0EDF1F8A439 -7FFE01FBB5EBFFF08016E06C48EB7FC0C8EA1F00252F7FAD27>I<90387FC0E03901FFF1 -F0000713FF5A5AEA3FE0EB801F387F000F007E130712FE5A1403A3EC01E06C90C7FC127E -127FEA3FC013F86CB47E6C13F86C13FE6CEBFF80C614C0010F13E0010013F0140FEC07F8 -1403140115FC1400127812FCA46CEB01F8A26C130390388007F09038F01FE090B5FC15C0 -150000F85B38701FF81E307CAE27>I<007FB61280B712C0A439FC03F00FA60078EC0780 -000091C7FCB3AB90B512C04880A36C5C222E7EAD27>I<3A7FFE01FFF8B54813FCA36C48 -6C13F83A07E0001F80B3AB6D133F00031500A26D5B0001147E6D13FE6C6C485A90387F87 -F814FF6D5B010F13C06D5BD901FEC7FC262F80AD27>I<3A7FFC03FFE06D5A00FF15F000 -7F15E0497E3A07E0007E00A46C6C5BA4EBF80100015CA46C6C485AA490387E07E0A56D48 -5AA4011F5B149FA3010F90C7FCA5EB07FEA46D5AA26D5A242F7FAD27>I<393FFC1FFE38 -7FFE3F815D383FFC1F3903F00FE001F85B1201EBFC1F00005CEBFE3F017E90C7FCEB7F7F -EB3F7E14FE6D5AA26D5AA26D5AA21303130780130F80131F80EB3F7E147F497E017E7F14 -1F01FC7F140FD801F87F14071203496C7E120701E07F3A7FFC0FFF8000FF15C06D5A497E -007F1580222E7EAD27>88 D<3A7FFC03FFE06D5A00FF15F0007F15E0497E3A07F000FE00 -00035CEBF80100015CA2EBFC0300005CEBFE07017E5BA26D485AA290381F9F80A3010F90 -C7FCA2EB07FEA26D5AA26D5AAF90381FFF80497FA36D5B242E7FAD27>I<003FB512FE48 -14FFA4007EC712FEEC01FCA2EC03F8EC07F0A2003CEB0FE0C7EA1FC0A2EC3F80EC7F00A2 -14FE5C1301495A5C1307495A5C131F495A91C7FC5B13FEA2485A4848131E153F485A485A -A2485A485AA248C7FCB7FCA46C14FE202E7DAD27>I<387FFFF0B512F8A314F000FCC7FC -B3B3ACB512F014F8A36C13F0153A71B327>I<127812F87EA27E127E127F7E7F121F7F12 -0F7F12077F1203A27F12017F12007F137E137F7F80131F80130FA2801307801303801301 -80130080147E147F80A21580141F15C0140F15E0140715F0140315F8140115FC1400A215 -7C15381E3A7CB327>I<387FFFF0B512F8A37EEA0001B3B3ACEA7FFFB5FCA36C13F0153A -7EB327>I<007FB512F8B612FCA46C14F81E067C7E27>95 D<3803FFC0000F13F04813FC -4813FF811380EC1FC0381F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07 -EA7FC0130012FE5AA46C130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F -8022207C9F27>97 DIIIII<153F90391FC0FF80D97FF313C048B612 -E05A4814EF390FF07F873A1FC01FC3C0EDC000EB800F48486C7EA66C6C485AEBC01FA239 -0FF07F8090B5C7FC5C485BEB7FF0EB1FC090C9FCA27F6CB5FC15E015F84814FE4880EB80 -01007EC7EA3F80007C140F00FC15C0481407A46C140F007C1580007F143F6C6CEB7F0090 -38F807FF6CB55A000714F86C5CC614C0D90FFCC7FC23337EA027>II<130F497E497EA46D5A6DC7FC90C8FCA738 -3FFF80487FA37EEA000FB3A4007FB512F0B6FC15F815F07E1D2F7BAE27>I<143C147E14 -FFA4147E143C1400A73801FFFE4813FFA37EC7123FB3B0147E1238007C13FE38FE01FC13 -03B512F814F06C13E06C13803807FE0018407CAE27>II<387FFF80B57EA37EEA000FB3B2007FB512F8 -B612FCA36C14F81E2E7CAD27>I<397F07C01F3AFF9FF07FC09039FFF9FFE091B57E7E3A -0FFC7FF1F89038F03FC001E0138001C01300A3EB803EB03A7FF0FFC3FF486C01E3138001 -F913E701F813E36C4801C313002920819F27>I<387FE07F39FFF1FFC001F713F090B5FC -6C80000313C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C018313E02420 -7F9F27>II<387FE0FFD8FF -F313C090B512F0816C800003EB81FE49C67E49EB3F8049131F16C049130FA216E01507A6 -150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D5D01F313C0D9F0FEC7FC -91C8FCAC387FFF80B57EA36C5B23317F9F27>I<397FFC03FC39FFFE0FFF023F13804A13 -C0007F90B5FC39007FFE1F14F89138F00F809138E002004AC7FC5CA291C8FCA2137EAD00 -7FB57EB67EA36C5C22207E9F27>114 D<9038FFF3800007EBFFC0121F5A5AEB803F38FC -000F5AA2EC07806C90C7FCEA7F8013FC383FFFF06C13FC000713FF00011480D8000F13C0 -9038003FE014070078EB03F000FC1301A27E14036CEB07E0EBE01F90B512C01580150000 -FB13FC38707FF01C207B9F27>I<133C137EA8007FB512F0B612F8A36C14F0D8007EC7FC -AE1518157EA415FE6D13FC1483ECFFF86D13F06D13E0010313C0010013001F297EA827> -I<397FE01FF8486C487EA3007F131F00031300B21401A21403EBFC0F6CB612E016F07EEB -3FFE90390FF87FE024207F9F27>I<3A7FFC0FFF80486C4813C0A36C486C13803A07C000 -F800EBE00100035CA2EBF00300015CA2EBF80700005CA390387C0F80A36D48C7FCA3EB3F -3FEB1F3EA214FE6D5AA36D5AA26D5A22207E9F27>I<3A7FFE07FFE000FF15F06D5A497E -007F15E03A0F80001F00A36D5B0007143EA414F0EBC1F83903E3FC7CA4EBE79EA2000114 -78A301F713F8A2EBFF0F6C5CA3EBFE0790387C03E024207F9F27>I<393FFC1FFF486C5A -168016006C487E3901F807E06C6C485A4A5A017E90C7FC6D5AEB1F7E5C6D5A13076D5A5C -80497E130F497E143EEB3E3FEB7E1F90387C0F8001F87F00016D7E3803F0033A7FFE1FFF -80A2B54813C06C486C1380A222207E9F27>I<3A7FFC0FFF80486C4813C0A36C486C1380 -3A07E000F800000313015D13F00001130301F85B1200A26D485A137CA290387E0F80133E -A2011F90C7FC5CA2130F149E14BE130714FC1303A25C1301A25CA213035CA213075C1208 -EA3E0F007F5B131FD87E7FC8FCEA7FFE6C5A5B6C5AEA07C022317E9F27>I<001FB512FE -4814FFA490380001FEEC03FCEC07F8EC0FF0001EEB1FE0C7EA3FC0EC7F80ECFF00495A49 -5A495AEB1FE0495A495A49C7FC485A4848131E4848133F485A485A485A485AB7FCA46C14 -FE20207E9F27>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr7 7 4 -/Ff 4 53 df<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215267BA521>49 -D<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4127CC7FC15 -005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA018039030003 -0012065A001FB5FC5A485BB5FCA219267DA521>I<13FF000313E0380F01F8381C007C00 -30137E003C133E007E133FA4123CC7123E147E147C5C495AEB07E03801FF8091C7FC3800 -01E06D7E147C80143F801580A21238127C12FEA21500485B0078133E00705B6C5B381F01 -F03807FFC0C690C7FC19277DA521>I<1438A2147814F81301A2130313071306130C131C -131813301370136013C012011380EA03005A120E120C121C5A12305A12E0B612E0A2C7EA -F800A7497E90383FFFE0A21B277EA621>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmbx12 13.14 42 -/Fg 42 120 df34 -D -46 D<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007FB712E0A5 -2B4777C63D>49 DIIIII56 -D<903803FFF8013FEBFF8090B612E0000315F8489038007FFCD80FF0EB1FFED81FC0EB07 -FF48C71480D87FC015C06D7F486C15E07FA66C5A6C484913C06C5A0007C7481380C81400 -5D4B5AED7FF84B5A4A13C05E4A48C7FC5D4A5A5D4A5AA24A5A5DA24AC8FCA3143EAB143C -91C9FCA9147E49B47E497F497FA2497FA66D5BA26D5B6D5BD9007EC8FC2B4D79CC3A>63 -D65 DI68 -D73 D79 -DI83 D86 -DI<010C1403011EEC0780017E141F49EC3F004848147E49147C48485C4848495A4848 -495AA248C7485A001E5D003E140F003C92C7FC007C5CA20078141EA200F8143E48143CA2 -D8F1F8147ED8F7FE90383DFF80B5013F13C0028014E0A202C014F0A26C80A36C80028014 -E06C806C496C13C06C486D1380D801F89038007E002C2572CB3F>92 -D97 DI<91380FFF8091B512F8010314FF010F15804948C6 -13C0D97FF8EB1FE0D9FFE0EB3FF04849137F4849EBFFF84890C7FCA2485A121FA24848EC -7FF0EE3FE0EE1FC0007F92C7FC5BA212FFAC127FA27FA2123FA26C6C153EA26C6C157E17 -7C6C6D14FC6C6D14F86C6D13036C6DEB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001 -035C010014F0020F13802F347CB237>IIIIII<13FC -EA03FF487F487FA2487FA66C5BA26C5B6C90C7FCEA00FC90C8FCABEB7FC0B5FCA512037E -B3B3A2B61280A5194D7BCC22>IIII<90287FC001FFC0EC7FF0B5010F01FC0103B5FC033F6D010F804B -6D4980DBFE079026803F817F9126C1F801903AC07E007FF00003D9C3E0DAE0F8806C9026 -C78000D9F1E06D7E02CFC7EBF3C002DEEDF780DD7FFF6E7E02FC93C7FC4A5DA24A5DA34A -5DB3AAB6D8C03FB5D8F00FB512FCA55E327BB167>I<903A7FC001FFC0B5010F13F8033F -7F4B13FFDBFE077F9138C1F00300039026C3E0017F6CD9C78080ECCF0014DE02DC6D7F14 -FC5CA25CA35CB3AAB6D8C07FEBFFE0A53B327BB144>I<913807FF80027F13F80103B6FC -010F15C090261FFE017F903A7FF0003FF849486D7E480180EB07FE4890C76C7E48178049 -80000F17C048486E13E0A2003F17F0A249157F007F17F8A400FF17FCAB007F17F8A46C6C -EDFFF0A2001F17E0A26C6C4A13C0A26C6C4A13806C6D4913006C5E6C01E0EB1FFC6D6C49 -5A903A3FFE01FFF0010FB612C0010392C7FCD9007F13F80207138036347DB23D>I<9039 -7FC007FFB5017F13E002C1B512FC02C714FF9126CFF80F7F9126DFC0037F000301FFC77F -6C496E7E02F8814A6E7E717E4A81831980A28319C0A37113E0AC19C05FA319805F19005F -606E143F6E5D4D5A6E4A5A02FF495BDBC0075B9126EFF01F5B02E7B548C7FC02E114F8DA -E07F13E0DB0FFEC8FC92CAFCAFB612C0A53B477CB144>I<9039FF803FE0B5EBFFF80281 -13FE02837FDA87E11380EC8F830003D99F0713C06C139E14BCA214F8A24A6C13806F1300 -6F5A4A90C7FCA45CB3A8B612E0A52A327CB132>114 D<903907FF8070017FEBF1F048B6 -FC1207380FFC01391FE0003F4848130F491307127F90C71203A2481401A27FA27F01F090 -C7FC13FCEBFFC06C13FEECFFE06C14FC6C806CECFF806C15C06C15E06C15F06C7E011F14 -F8010114FCEB000FEC007FED1FFE0078140F00F8140715037E1501A27E16FC7E15036D14 -F86D13076D14F001F8EB1FE001FFEBFFC04890B51280486C1400D8F81F13FCD8E00313C0 -27347CB230>I<14F8A51301A41303A21307A2130FA2131F133F137F13FF1203000F90B5 -12F0B7FCA426007FF8C7FCB3A7167CAA013F14F880A290391FFE01F0010F1303903907FF -87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>IIII -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmtt10 12 68 -/Fh 68 123 df<001EEB03C0003FEB07E0397F800FF000FF14F8A5007F14F0A9EB0007A6 -6C14E0A5001EEB03C00008EB00801D1E75BD34>34 D<141C143E147EA549B47E011F13F0 -017F13FE90B6FC000315C04815E0260FFE7E13F0D81FF0131F01E0EB07F8D83F801303D8 -7F0014FC007E140116FE5AA21503A46CEC01FCED00F8007F15001380EA3FC013F0EA1FFC -380FFFFE7E6CEBFFE06C14F86C6C13FE011F7F01071480D9007F13C016E091387E3FF0ED -0FF81507ED03FC15011500003E15FE127FD8FF80147EA413005A6C15FC7E15010180EB03 -F8D83FC0130701E0EB0FF0D81FF0EB3FE03A0FFE7FFFC06CB612806C15006C5C6C6C13F8 -011F13E0010390C7FCEB007EA5143E141C274D7AC434>36 D40 D<147014F8497EA7007815F000FEEC03F800FF140701C1131F01E1133F01F913FF6C -B612F0001F15C000071500000114FC6C6C13F06D5B010F1380013F13E0497F48B512FC00 -0714FF001F15C0007F15F026FFF9FC13F801E1133F01C1131F0101130700FE14030078EC -00F000001500A76D5A1470252B79B334>42 D46 D<163C167C16FEA21501A2ED03FCA2ED07F8 -A2ED0FF0A2ED1FE0A216C0153FA2ED7F80A2EDFF00A24A5AA24A5AA24A5AA25D140FA24A -5AA24A5AA24A5AA24AC7FCA25C1301A2495AA2495AA2495AA2495AA25C133FA2495AA249 -C8FCA2485AA2485AA2485AA25B120FA2485AA2485AA2485AA248C9FCA25AA2127CA2274D -7AC434>I<147F903803FFE0497F011F13FC497F497FD9FFC17F489038007FC048486D7E -49131F48486D7E49130748486D7EA248486D7EA248486D7EA348C8127FA500FEED3F80AE -6C157F6C1600A46D5C003F5DA26D1301001F5D6D1303000F5D6D130700075D6D130F6C6C -495A6D133F6C6C495A6C9038C1FF806DB5C7FC6D5B6D5B010713F06D5BD9007FC8FC293F -7BBD34>II<903803FF -80011F13F0017F13FC90B6FC000315C048814801017F3A1FF8001FF801E0130F4848EB03 -FC48486D7E90C8FC824881A26D1580163FA36CC8FC123EC9FCA2167F1700A25E5E15015E -15034B5A150F4B5A5E4B5A4B5A4A48C7FC4A5A4A5A4A5A4A5A4A5A4A5A49485A4990C8FC -EB07FC495A495A495AEBFFC04890C7121F4848EC3F80485A485A485A48B7FC5AB8FCA27E -6C1600293E7BBD34>I<903801FFE0011F13FC017F13FF90B612C000038148819138803F -F83A0FF80007FC496D7E484813016D1300167FA36C5A6C5AC9FC5E5EA215014B5AA2ED0F -F84B5A913803FFE00103B55A495C93C7FC16C016F06D8090C7EA3FFCED07FEED01FF81EE -7F80163F17C0161F17E0160FA3123E127F487EA2161F17C090C8123F17806C157F01C0EC -FF006C6C5BD81FF8EB07FE9039FF803FFC6C90B55A00035D6C15C06C6C91C7FC010F13FC -010013E02B3F7CBD34>II<0007B612F848815AA35E01C0C9FCB0EC7FC090 -38C7FFF801DF13FE90B67E82829138C07FF09039FC000FF849130701E06D7E496D7E6C48 -13006CC87EC97EA21780163FA4121C127FA2486C147F1700A290C85A5E6C14016D495A15 -07D83FE0495A6C6CEB3FF03A0FFE01FFE06CB65A6C5D6C4AC7FC6C6C5B011F13E0010390 -C8FC293E7BBC34>II56 DI<160F163FEEFF805D15074B1300153FED -7FFC913801FFF04A5B020F1380023F90C7FCEC7FFC49485A4913E0010F5B4990C8FCEB7F -FC495A000313E0485B001F90C9FCEA7FFE13F8485A13C013F06C7E13FEEA1FFF000713C0 -6C7FC613F86D7EEB1FFF6D13C001037F6D13F86D6C7E6EB4FC020F7F020313E06E7F9138 -007FFC6FB4FC150F6F1380150181EE3F00160F29337BB734>60 D<007FB712C0A2B812E0 -A36C16C06C1680CBFCA9003FB712804816C0B812E0A36C16C0A22B177CA934>I<127812 -7EB47E7F13F06C7E13FEEA1FFF000713C06C7FC613F8EB7FFEEB1FFF6D13C001037F6D13 -F86D6C7EEC1FFF6E7F020313E06E7F9138007FFC6FB4FC150F6F1380150115074B130015 -3FED7FFC913801FFF04A5B020F13804A90C7FCEC7FFC49485A4913E0010F5B4990C8FCEB -7FFEEBFFF8000313E0485B001F90C9FCEA7FFE13F8485A13C05B007ECAFC127829337BB7 -34>I<90380FFFC0017F13FC48B6FC000715C04815E04815F0263FFC0013F8D87FC0EB0F -FC49130348C7EA01FE6D1300A46CC71201003E15FC001C1407C8EA1FF8ED3FF0EDFFE04A -13C04A1380913807FE00EC0FF84A5A4A5A4A5A4A5A92C7FC5B5CA213035CA86D5A6D5A91 -C8FCA914F0497E497E497EA46D5A6D5A6D5A273E7ABD34>III<003F -B512FE48ECFFC0B712F0826C816C813A01FC0003FF03001380167FEE3FC0161FA217E016 -0FA6EE1FC0A2163FEE7F80EEFF005DED07FE90B65A16F05EA216F816FE9039FC0003FF03 -001380EE3FC0161FEE0FE017F01607A2EE03F8A7160717F0A2160FEE1FE0163FEEFFC015 -03003FB71280481600B75A16F86C15E06C15802D3D7EBC34>I<91391FF003C09139FFFE -07E00103EBFF874914CF011F14EF4914FF90387FF01F9038FFC00748EB0001497F484814 -7F485A49143F120F49141F121F5B003F150F5BA2127F90C8EA07C093C7FCA312FEAD127F -A46DEC07C0003FED0FE0A27F121F7F000F151F6D15C012076D143F6C6CEC7F806C6C14FF -6D4913006C9038C003FE90397FF01FFC6DB55A6D5C01075C6D1480010049C7FCEC1FF02B -3F7CBD34>I<007FB512F0B612FE6F7E82826C813A03F8003FF8ED0FFC6F7E15036F7E81 -EE7F80163F17C0161F17E0160FA217F01607A417F81603AC160717F0A4EE0FE0A2161F17 -C0163FA2EE7F8016FF17004B5A15074B5AED3FF8007FB65AB75A5E5E4BC7FC6C14F02D3D -7EBC34>I<003FB712F04816F8B8FCA27E7ED801FCC71203A8EE01F093C7FCA5ED0F804B -7EA590B6FCA69038FC001FA56F5A92C8FCA6177C17FEAA003FB7FC5AB8FCA27E6C16FC2F -3D7EBC34>I<007FB712F0B812F8A47ED801FCC71203A8EE01F093C7FCA6ED0F804B7EA5 -90B6FCA69038FC001FA56F5A92C8FCB0387FFFF8B57E80A25C6C5B2D3D7DBC34>I<9138 -3FC01E903901FFF03F010713FC49EBFF7F495C5B90387FE07F9038FF801F4848487E4848 -7F497F000780485A497F121F5B82485AA348C8FC163E93C7FCA25A5AA992383FFFE04B13 -F017F8A26C16F06C6E13E09238007F00A36C6C5CA36C7EA26D5B120F6D5B6C7E00035C7F -6C6C5B6C6C6C5A90387FE07F6DB6FC6D806D13FE6D13FC0101EBF03E9026003FC0C7FC2D -3F7CBD34>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3A290B7FC -A601F8C7123FB3A53B7FFFC007FFFCB56C4813FEA46C496C13FC2F3D7EBC34>I<007FB6 -12C0B712E0A46C15C0260003F8C7FCB3B3AD007FB612C0B712E0A46C15C0233D78BC34> -I<91B512FC4914FE4914FFA26D14FE6D14FC9138003F80B3B3A4121C123E127F487EA215 -7F160090C75A397F8003FE9038F00FFC6CB55A6C5C6C5C00035CC691C7FCEB1FF8283E79 -BC34>I<3B7FFF8003FFF0B56C4813F817FCA217F86C496C13F0D803F0C7EA7F0016FE4B -5A15034B5A5E4B5A4B5A153F4B5A93C7FC15FE4A5A14034A5A5D4A5A4A5A143F4A5AA24A -7E13F101F37F13F7ECF7F0EBFFE3ECC3F8ECC1FC1481EC00FE5B49137F81498049131F82 -150F826F7EA26F7EA26F7E150082167E167F823B7FFF8001FFF0B56C4813F817FCA217F8 -6C496C13F02E3D7EBC34>I<383FFFFE487FB6FCA27E6C5BC648C9FCB3B3A2177017F8EE -01FCA9003FB7FC5AB8FCA27E6C16F82E3D7EBC34>III<90381FFFFC90B67E000315E04881488148813A3FFC001FFE01E013 -0349130148486D7EA290C87EA500FEED3F80B3AC6C157F6C1600A46D5CA26D5B003F5D01 -F0130701FE133F6CB65A6C5D6C5D6C5DC61580011F01FCC7FC293F7BBD34>I<003FB512 -FE48ECFFC0B712F016FC6C816C812701FC00071380030113C0ED007FEE3FE0161FEE0FF0 -1607A217F81603A6160717F0A2160FEE1FE0163FEE7FC0ED01FF0307138090B712005E5E -16F016C04BC7FC01FCC9FCB3383FFFE0487FB57EA26C5B6C5B2D3D7EBC34>I<90381FFF -FC90B67E000315E04881488148813A3FFC001FFE01F0130701C0130148486D7EA390C87E -A448168048153FB3AAEC1F806C013F137F6C02C01300A2EC1FE0A26D6C6C5AA26E7E3A3F -C003F9FE01F013FFEBFC016CB65A6C5D6C5D6C5DC61580011F8090C7123F6F7EA26F7EA2 -6F7E8215038215018281167E294C7BBD34>I<007FB512C0B612F815FE6F7E826C812603 -F8007FED1FF8ED07FC15036F7E1500A28282A55E5EA215014B5A1507ED1FF8EDFFF090B6 -5A5E5E93C8FC8282EBF800ED1FE06F7E1507A26F7EAA171FEF3F80A416FC0301137F267F -FFC01500B56C6CB5FC5F167F705A6C496D5AC9EA07E0313E7EBC34>II<003FB712F04816F8 -B8FCA43AFE001FC003A8007CED01F0C791C7FCB3B3A4010FB57E49804980A26D5C6D5C2D -3D7DBC34>I<263FFFE090B51280486D4814C0B56C4814E0A26C496C14C06C496C1480D8 -01FCC73807F000B3B3A36D140F00005EA26D141F6D5D6E133F013F5D6E137F6D6C49C7FC -6D6C485AECFE0F6DB55A6D5C010014E06E5B021F90C8FCEC07FC333E80BC34>II<3B3FFFC03FFF80486D4813C092B5FCA2816C496C13803B01FE -000FF00012006D5C6D131F02805B013F133F02C05B011F137F02E090C7FC6D6C5A5DEB07 -F95DEB03FF5D7F5D7F5D147F5D143F5D8181147F8114FF815B81EB03F981EB07F0814948 -7E8290381FC03F82013F131F02807F017F130F02007F4913074980000114034980000314 -014980D87FFF90380FFFF0B56C4813F814C0A214806C496C13F02D3D7DBC34>88 -D<001FB7FC4816805AA490C813004B5AA24B5A4B5AA24B5A4B5A123EC8485A5E157F4BC7 -FCA24A5A4A5AA24A5A4A5AA24A5A4A5AA24A5A92C8FC5C495AA2495A495AA2495A495AA2 -495A495AA249C9FC49EC0F800001ED1FC0485AA2485A485AA2485A485AA2485A90B7FCB8 -FCA46C16802A3D7BBC34>90 D<007FB51280B612C0A4158048C8FCB3B3B3ABB6128015C0 -A46C14801A4D6BC434>I<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA212077FA26C -7EA26C7EA26C7EA26D7EA26D7EA2131F80A26D7EA26D7EA26D7EA26D7EA2130080A26E7E -A26E7EA26E7EA26E7EA2140781A26E7EA26E7EA26E7EA2ED7F80A2ED3FC0A2151F16E0A2 -ED0FF0A2ED07F8A2ED03FCA2ED01FEA21500A2167C163C274D7AC434>I<007FB51280B6 -12C0A47EC7121FB3B3B3AB007FB5FCB6FCA46C14801A4D7CC434>I<007FB7FCA2B81280 -A36C1600A229077B7D34>95 D97 -D99 DIII<49B4EB1FE001079038C0FFF8011F01F313FC01 -7F90B512FE90B7FC5A48018313F1903AFC007F80FC484890383FC07849011F130048486D -7EA2001F81491307A66D130F000F5DA26C6C495A6D133F6C6C495A9038FF83FF91B5C7FC -485C5D4814F001C713C001C190C8FC01C0C9FCA47F6C7E90B512FE6CECFFE06C15F80007 -15FE48814816809026F0000313C0D83FC09038003FE090C8120F48ED07F0007E150300FE -16F8481501A56C1503007E16F0007F15076C6CEC0FE001E0143FD81FF8ECFFC0270FFF80 -0F13806C90B612006C5DC615F8013F14E0010F1480010001F8C7FC2F447DAB34>II<14F0497E497E497EA46D5A6D5A6D5A91C8FCA9383FFFFC487FA47EC7FCB3AD00 -3FB612F04815F8B7FCA27E6C15F0253E79BD34>I<383FFFFE487FB6FCA27E7EC77EB3B3 -AD003FB612FE4881B81280A26C16006C5D293D7BBC34>108 D<027FEB1FC03B3FE1FF80 -7FE0D87FF39038E0FFF8B612E303F77F6C91B57E6C01C313F000030181EBE07ED9FE01EB -807F6E80491400A2495BA3495BB3A53C3FFF03FFC0FFF048018701E113F8B500CF01F313 -FCA26C018701E113F86C010301C013F0362C81AB34>I<15FF267FFC0713E026FFFE1F7F -027F7F91B57E90B67E6C1481C69038FC00FF02F07F4A804A133F5CA291C7FCA35BB3A427 -7FFFFC0FB5FCB56C481480A46C496C1400312C7FAB34>I<14FE903807FFC0011F13F001 -7F13FC90B57E488048010113803A07FC007FC04848EB3FE049131F4848EB0FF049130700 -3F15F8491303007F15FC90C71201A300FEEC00FEAA6C14016C15FCA26D1303003F15F86D -1307A26C6CEB0FF06C6CEB1FE06D133F6C6CEB7FC03A03FF83FF806C90B512006C5C6D5B -011F13F0010713C0010190C7FC272E7AAC34>II<4BB4FC273FFFC00F13C048D9E03F13E0B590B512F0 -02E114F86C13E76C01EF130FD8000F13F8ECFFE09238C007F092388003E092C8FC5C5CA2 -5CA25CA45CB1003FB6FC4881B77EA26C5D6C92C7FC2D2C7DAB34>114 -D<90390FFF078090B5EACFC0000314FF5A5A5A383FF803397F80007F90C7123F12FE4814 -1FA47E007FEC0F8001C090C7FCEA3FF8381FFFE06C13FF6C14E06C14F8C614FE011F7FD9 -007F1380020313C09138003FE0ED0FF0003C1407007EEC03F800FE1401A27EA36D13036D -14F06D13076DEB1FE001FE13FF90B612C016801600D8FC7F13FC6D13F0D878071380252E -79AC34>III<3B3FFFE00FFFF8486D4813FCB515FEA26C16FC6C496C13F8D801FCC7EA7F -000000157EA26D14FE017E5CA2017F13016D5CA2EC8003011F5CA2ECC007010F5CA2ECE0 -0F01075CA36D6C485AA3ECF83F010191C7FCA26E5A0100137EA2ECFEFEEC7EFCA2147F6E -5AA36E5A6E5A2F2B7EAA34>I<3B3FFFE07FFFC0486DB512E0B515F0A26C16E06C496C13 -C0C690390007F0006D495A6D6C485AEB1FC06E485A010F49C7FC903807F0FEEB03F89038 -01F9FCECFFF86D5B147F6E5A5D6E5A81143F4A7E81ECFDF8EB01F9903803F8FCECF07E90 -3807E07F010F6D7E90381FC01F02807F013F6D7E49486C7E137E01FE6D7E3B7FFFC01FFF -F0B56C4813F86E5AA24A7E6C496C13F02D2B7DAA34>120 D<000FB712C04816E05AA317 -C00180C713804B13004B5A4B5A4B5A4B5A6CC7485AC8485A4B5A4A90C7FC4A5A4A5A4A5A -4A5A4A5A4A5A4A5A4990C8FC495A495A495A495A495A4948EB07C04948EB0FE04890C7FC -485A485A485A485A485A48B7FCB8FCA46C16C02B2B7DAA34>122 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmb10 10.95 21 -/Fi 21 122 df70 D78 D82 -D91 D93 D97 D99 -D<16FF92B5FCA5150781AFEB01FF011F13E3017F13FB90B7FC4813C148EB003F48487F48 -487F001F805B123FA2485AA312FFAC127FA36C7EA3001F5C6C6C5B00074A13806D4913FC -2603FF83B5FCC690B6FC6D13F7011F13C7903A03FE07FC002E407DBE33>I<49B47E010F -13F0013F7F90B512FE48EBC3FF48010013804848EB7FC04848133F001F15E05B003FEC1F -F0A2485A150F16F8A212FFA290B6FCA401F0C8FCA5127FA37F003F15F8A26C6C1301000F -15F06D13036C6CEB07E06C9038800FC06C9038F07F806C6CB512006D5B010F13F8010013 -C0252B7EA92A>II105 D<13FFB5FCA512077EB092B512E0A592380FE0004B5A -4B5A4BC7FC15FE4A5A4A5A4A5A4A5A4A5A143FECFFE0A28181A2ECDFFCEC8FFE140F6E7E -6E7FA26E7F6E7FA26F7E6F7EA26F7E6F7EB539FC7FFFF8A52D3F7FBE30>107 -D<13FFB5FCA512077EB3B3AFB512FCA5163F7EBE19>I<01FFD97FE0EB3FF0B52601FFF8 -EBFFFC0207D9FC037F4A6D487F91281FC3FF0FE17FDA3E03D99F017F0007017C14BE6CD9 -7801EBBC0002F002F88002E05CA202C05CA302805CB3A4B5D8FE1FD9FF0FEBFF80A54929 -7EA84C>I<01FFEB7FE0B53801FFF802077F4A7F91381FC3FFDA3E0313800007137C6CEB -780102F014C014E0A214C0A31480B3A4B5D8FE1F13FFA530297EA833>I<49B47E010F13 -F0013F13FC90B6FC48018113803A03FE007FC04848EB3FE0000F15F049131F001F15F8A2 -4848EB0FFCA2007F15FEA400FF15FFAB007F15FEA3003F15FC6D131F001F15F8A26C6CEB -3FF0000715E06C6CEB7FC03A01FF81FF806C90B51200013F13FC010F13F001011380282B -7EA92D>I<3901FE07F800FFEB0FFE91383FFF804A13C0EC7C7F9138F8FFE03807FFF06C -5B5CA2ED7FC09138803F80ED1F0092C7FCA291C8FCB3A3B6FCA523297FA827>114 -D<131FA65BA55BA25BA25A5A5A001FEBFFC0B6FCA4000790C7FCB3EC03E0A97EEC87C0A2 -6CEBCF806C13FF6D1300EB1FFEEB07F81B3B7EB923>116 DI119 -D121 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmss10 10.95 2 -/Fj 2 42 df<14FCEB01F8EB03F0EB07E0EB0FC0131F1480EB3F005B137E5B12015B1203 -A2485AA25B120FA25B121FA25B123FA448C7FCA712FEB3A2127FA76C7EA4121F7FA2120F -7FA212077FA26C7EA212017F1200137E137F7FEB1F8014C0130FEB07E0EB03F0EB01F8EB -00FC165A79C323>40 D<12FC127E7E6C7E6C7E7F12076C7E7F12016C7E7F137E137FA2EB -3F80A2131F14C0A2130F14E0A2130714F0A4EB03F8A7EB01FCB3A2EB03F8A7EB07F0A414 -E0130FA214C0131FA21480133FA2EB7F00A2137E13FE5B485A12035B485A120F5B485A48 -C7FC127E5A165A7BC323>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmbx10 12 48 -/Fk 48 123 df12 -D40 -D<903801FFE0011F13FE017F6D7E48B612E048812607FE0713FC260FF0007FD81FC06D7E -4848011F1380EA7FE06D6D13C0487E6D6D13E0A26F13F0A46C5AA26C5A6C5AC8FC17E05D -A217C05D17804B13005E4B5A5E4B5A4B5A4A5B5E4A90C7FCEC07FC4A5A4A5A4A5A91397F -8001F0ECFF005C495AD903F0EB03E0495A495A495A49C71207017E140F90B7FC4816C05A -5A5A5A5A5AB8FC1780A42C417AC039>50 D65 DII69 -DII -II<49B712C0A590C70007EB -C000B3B3A8EA07C0EA1FF0487E487E487EA45D5FA2494990C7FC007F5CD83FF05C49495A -3A0FFE03FFF06CB65A000115806C6C01FCC8FC010713C032457EC33B>II77 DI<923803FFE0037F13FF0203B612E0021F15FC027F90 -38007FFF902601FFF8010F13C04901C001017F010F496D13F84948C8EA3FFC49486F7E49 -486F7E01FF8448496F7F4A81488548496F7FA248496F7FA2488591CA127F4885A3488549 -83A400FF1A80AD007F1A006D5FA36C61A26E16FF6C61A36C6D4B5BA26C6D4B5B6C616E5D -6C6D4B5B6C6D4B5B6D6C4B90C7FC6D6C4B5A6D6D4A5A6D01E001035B010301F8010F13E0 -6D01FF017F5B6D6C90B6C8FC021F15FC020715F0DA007F91C9FC030713F049467AC456> -II82 DI<003FBA12F8A5DA0007EBE000D87FF8EF1FFC01E0170F4917035B90C71601007E18 -00A3007C197CA400FC197E48193EA5C81700B3B3A20103B812C0A547437CC250>III89 -D<903801FFF8011FEBFF80017F14E090B612F8489038807FFC3A03FE001FFE486CEB07FF -486E7F0280806F7FA36F7F6C90C7FCA26C5AEA00F890C8FCA2150F021FB5FC0103B6FC13 -1F017F13C03901FFFC004813E0000F13804890C7FC485A5B485AA2485AA45DA26C6C5BED -07BF6C6C010F13FC6CB490391F3FFFE06C9026C0FE1F13F06CEBFFFC6CECF007C66CD9E0 -0113E0010790C9FC342F7DAD38>97 DIIII<913801FFC0021F13F0027F13FC49B57E49EBC3FF -903807FE074948481380EB1FF8EB3FF0EB7FE0A349486C13006F5A6F5AED007093C7FCAA -B612FCA5C601E0C8FCB3B0007FEBFFE0A529467DC523>I<902601FFF013FF010FD9FE03 -1380013FD9FF8F13C090B812E048D9C07F13BF489039001FF83F4848EB0FFC4848EB07FE -001F9238FF1FC0496DEB0F8094C7FC003F82A7001F93C7FCA26D5B000F5D6C6C495A6C6C -495A6C9038C07FF04890B55A1680D8078F49C8FC018113F0D80F80CAFCA47F7F13F890B6 -12E016FEEEFFC06C16F0836C826C82831207481780D81FF8C77ED83FE014074848020113 -C000FF8149157FA56D15FF007F17806D5C6C6C4A1300D81FFCEC0FFE6CB4EC3FFC6C9039 -E001FFF8000190B612E06C6C1580010F02FCC7FCD9007F138033427DAC39>II<13FCEA -03FF4813804813C0A24813E0A66C13C0A26C13806C1300EA00FC90C7FCA9EB7FC0EA7FFF -A512037EB3AFB6FCA518467CC520>IIII<90287FC003FF80EB07 -FFB5011F01F0013F13E0037F6D90B57E92B56C4880913DC1FC1FFE03F83FFC913DC3E00F -FF07C01FFE00039026C7C00790398F800FFF6CD9CF00EC9E0002DE6D01BC7F02FC03F815 -80A24A5D4A5DA34A5DB3A7B600C1B60083B6FCA5582D7CAC5F>I<903A7FC003FF80B501 -1F13F0037F7F92B57E9139C1FC1FFE9139C3E00FFF00039026C7C0077F6CEBCF0002DE7F -02FC81A25C5CA35CB3A7B600C1B61280A5392D7CAC40>II<90397FC01FFCB590B512C002C314F002CF14FC -9139DFF03FFF9126FF800F138000039026FE000313C06C496D13E002F015F04A7FEF7FF8 -A218FC173F18FEA3EF1FFFAB18FE173FA318FC177F18F817FF6E15F06E4913E06E4913C0 -6E4913806E6C4813009238E07FFE02EFB55A02E314F002E01480DB1FF8C7FC92C9FCADB6 -12C0A538407DAC40>I<90397F803FC0B5EBFFF0028313F8028713FC91388FE7FE91389F -8FFF0003EB9E0F6C13BCA214F8A29138F007FEED03FC9138E001F892C7FCA35CB3A5B612 -C0A5282D7DAC2F>114 D<90391FFE078090B512DF000314FF5A380FF803381FE000D83F -80133F127F90C7121FA248140FA27FA201E090C7FC13F8EBFFC06C13FEECFFC06C14F015 -FC6C806C806C1580000115C07E011F14E01301D9000713F014000078147F00F8143F151F -6C140FA37E6C15E0151F6D14C06D133F01F0EB7F809039FC03FF0090B55A00FC5CD8F83F -13F0D8F00790C7FC242F7CAD2D>IIIII<007FB590387FFFF8A5C601F890380FF8006D6CEB07E0013F4A5A6D6C -131F6E495A6D6D48C7FC6DEBC0FE6DEBC1FC6DEBE1F8EDF3F06DEBFFE0806E5B6E5B93C8 -FC6E7F6E7F6E7FA24A7F4A7F4A7FEDBFFEEC3F1F91387E0FFF02FE8049486C7F49486C7F -49487E49486C7F4A8049486D7E49C76C7ED9FF80131FB500F090B512FEA5372C7EAB3C> -I<007FB5398007FFFCA5000101F0C7EA7F806CEE3E006E147E017F157C8017FC013F5D6E -1301011F5D6E13036D5DED80076D5DEDC00F6D5D15E0161F6D92C7FC6F5A6D143EEDF87E -027F137CEDFCFC023F5B15FF6E5BA36E5BA26E5BA26E5BA26E90C8FCA26E5AA2157CA215 -FC5D1401000F5C383FC003D87FE05B1407D8FFF05B140F5D141F4AC9FC387FE07E495A38 -3F87F8EBFFF06C5B00071380D801FCCAFC36407EAB3C>I<001FB7128017C0A39026FE00 -1F138001F05B49491300495C49495A48485A4A5B5E4A5B003E5B4A5B5E4A90C7FC5CC748 -5A5D495B5B495B5D499038C007C05B49138015004948130F01FF1580485B5C4849131F5A -485B4A133F4849137F4815FF48EB000349011F1300B8FCA37E2A2C7DAB33>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmtt12 14.4 22 -/Fl 22 121 df<003FB712F84816FCB812FEA46C16FC6C16F82F0879A83E>45 -DI<177817FCEE03FE1607161F163FEEFFFC030313F84B13F0031F13C04B13809238FFFE -004A13F802075B4A13C0023F5B4A48C7FC49485A4913F0010F5B491380017F90C8FCEBFF -FC00035B4813E0001F5B4890C9FC485AEAFFF85BA27FEA7FFE6C7E6C13C000077F6C13F8 -C67F6DB4FC011F7F6D13E001037F6D13FC6D6C7E6E6C7E020F7F6E13F0020113FC6E7F92 -383FFF806F13C0030713F06F13F8030013FCEE7FFE161F16071603EE00FC17782F3C79C2 -3E>60 D<003FB712F84816FCB812FEA46C16FC6C16F82F08797C3E>95 -D<90380FFFC0017F13F848B512FE486E7E4815E04881823A1FFC007FFC49EB0FFE1507ED -01FFA26C486D7F6C48147FC97F163FA60203B5FC147F0103B6FC131F137F90B7FC0003EC -C03F48EBF800481380D81FFCC7FCEA3FF05B485A5B12FF90C8FCA56D147F127F6D14FF6C -6C130301F8010F7F6CB490B612F86C90B7FC18FC6C15CF000115076CDAFC0313F8013F90 -38F0007F010790C9FC363679B43E>97 D<913807FFF0023F13FE49B61280010715C04915 -E04915F0137F903AFFFC003FF84801E0131F48138091C7FC485A4848EC0FF049EC07E048 -4891C7FC5B123F5B127F5BA312FF90CAFCA97F127FA27F123F7F17FC6C6CEC01FE7F6C7E -6C6C14036DEC07FC6C01C0130F6C01F0EB1FF86C01FEEBFFF06DB612E06D15C0010F1580 -6D1500010114FC6D6C13F0020790C7FC2F3678B43E>99 D101 D<923801FFC0030F13F0033F13FC92B512FE5C4A14FF5C4A -1303EC1FF89238F001FEEC3FE09238C000FC027F14005DAA003FB712F05AB812F8A36C16 -F0A2C7D87F80C7FCB3B3003FB7FCA2481680A36C1600A2304A7CC93E>II<143E147F4A7E497FA56D5B6EC8FC143E91C9FCAC003F -B57E5A81A47EC7123FB3B3007FB71280B812C0A56C16802A4A76C93E>105 -D107 D<007FB512C0B6FC81A47EC7121FB3B3B3A5007FB712F8B812FCA56C16F82E4978 -C83E>IIII -I114 D<903901FFF00F011F9038FE -1F8090B612BF000315FF5A5A5A393FFE003F01F01307D87FC0130190C8FC5A48157FA47E -EE3F00D87FC091C7FC13F0EA3FFE381FFFF06CEBFFC06C14FE6C6E7EC615E0013F14F801 -0780D9003F7F02007F03071380030013C0003EED3FE0007F151F48150F17F06D1407A37F -A26D140F6D15E0161F01FCEC3FC06D14FF9026FFC00F138091B612005E485D013F5C6D14 -E0D8FC0714802778007FF8C7FC2C3677B43E>I<147C14FC497EAD003FB712FC5AB87EA3 -6C5EA2260001FEC9FCB3A6173FA2EF7F80A76E14FF6D16006F5A9238C007FE91387FF01F -92B55A6E5C6E5C6E5C6E1480020149C7FC9138003FF031437DC13E>I<263FFF80EB7FFF -4892B5FCB56C4880A36C806C81D8003FEC007FB3AC17FFA25E5E80011F140F6E5B02FE90 -B612806DB812C06D17E083010114FE6DDAF83F13C0023F01E01480020790C9FC3B347FB2 -3E>I<267FFFF890383FFFFCB56C4913FE6E90B5FCA34A7F6C496D13FCC648C8EAFE00A2 -6D14016D5DA26E1303013F5DA26E1307011F5DA26E130F010F5DA26E131F01075DA26E13 -3F01035DA26E137F010192C7FCA26E5B01005CA2ECFF01027F5BA21583023F5BA215C702 -1F5BA215EF020F5BA215FF6E5BA36E5B6E90C8FC6E5A37347DB23E>I<271FFFFE01B512 -E04817F0486D4814F8A36C496C14F06C17E03C003FE0001FF0006D6C5C010F4A5A6D6C49 -5A6E13FF6D6C91C7FC0101495A6D6C485AEC7F83EDC7F891383FCFF06EB45A805E6E5B6E -90C8FC806E5A14014A7E824A7F5C91381FEFE0EDC7F091383F87F891387F03FCECFF0102 -FE7F49486C7E01036E7E4948133F4A80010F6E7E49486D7E4948801607263FFFFC90387F -FFF8486D90B512FCB516FEA36C17FC6C496D13F837337DB23E>120 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmsl10 10.95 57 -/Fm 57 123 df39 D44 D<007FB5FCA2B512FEA418067C961E>I<121EEA3F80EA7FC012FFA41380EA -7F00123C0A0A788919>I48 D<157015F014011407143F903803FFE0137FEBFFCF -EBF80F1300141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075CA513 -0F5CA3131F497EB612F8A31D3D78BC2D>II<161C163C16 -7CA216FCED01F815031507150FA2151DED3BF0157315E315C31401EC038391380707E014 -0E141CA2143814709138E00FC0EB01C014801303EB0700130E49EB1F805B133013705B48 -5A4848EB3F0090C7FC5A120E5A5A48147E1260B8FCA3C73801FE00A25DA41403A25DA314 -074A7E0107B512F8A3283E7BBD2D>52 D54 D<17E016011603831607A2160FA2161F8316 -3FA2167F167716F7EEE7FCED01E316C3150316831507EE03FEED0F01150E151E151C153C -03387FED7800157015F05D4A4880177F4A5AA24AC7FCA2020E81173F5C021FB6FC5CA202 -70C7EA3FE0171F5CA2495AA2494881170F49C8FCA2130EA24982013C1507A2137CD801FE -4B7E2607FF80EC3FFEB500F00107B512FC19F85E3E417DC044>65 -D<013FB7FC18E018FC903B007FE00007FE6E48903801FF809438007FC05DF03FE0F01FF0 -A3027F16F892C8FCA54A16F04A153F19E0187F19C0F0FF8001014B13004A4A5A4D5AEF1F -F04D5ADC03FFC7FC49B612F8EFFF8002F8C7EA3FE0EF0FF0EF07FC717E010715014A8171 -1380A319C0130F5CA5011F4B13805C19005F601707013F4B5A4A4A5A4D5A4D5A017F9138 -01FF8001FF020F90C7FCB812FC17F094C8FC3D3E7DBD40>II<013FB7FC18E018F8903B007FF0000FFE6E48EB01FF9438007F -C04B6E7E180F85727E727E147F4B6E7EA2727EA302FF178092C9FCA54918C05CA41A8013 -034A5DA41A0013074A5DA261A24E5A130F4A5E180F61181F61011F4C5A5C4E5A4EC7FC4D -5A4D5A013F4B5A4A4A5AEF3FE0EF7F80017F4A48C8FC01FFEC1FFCB812F0178004FCC9FC -423E7DBD45>I<013FB812F8A39026007FF0C7127F6E48140F18034B14011800A3197814 -7F4B1570A502FF147092C7FCA3190017F0495D4A1301A21607161F91B6FC495DA29138FC -003F160F1607160301075D5CA219E0180119C0010FEC07004A90C712031980A218071900 -011F5E5C181EA2183E183C013F167C4A15FC4D5A1707017F151F01FF4AB45AB9FCA2603D -3E7DBD3E>I<013FB812E0A3903A007FF000016E48EB003F180F4B14071803A31801147F -4B15C0A514FF92C71270A395C7FC17F0495D5C160116031607161F49B65AA39138FC003F -160F160701075D4A1303A5010F4AC8FC5C93C9FCA4131F5CA5133F5CA3137FEBFFF0B612 -F8A33B3E7DBD3B>I<4BB46C1370031F01F013F0037F9038FC01E0913A03FF807E03913A -0FF8000F83DA1FE0EB07C7DA7F80EB01EF4AC812FFD903FE16C04948157F4948153F495A -4948151F495A4948168091C9120F5A485AA2485A000F18004982121FA248485EA295C7FC -485AA412FF5BA6043FB512E05BA29339001FFC00715AA2607F127FA2171F123F6D5EA212 -1F7F000F163F6C7E6C6C4B5A7F6C6C15FF6C6DEB01EFD93FC0EB07C7D91FF0EB1F87D907 -FE9038FE03800101B5EAF8016D6C01E0C8FCDA07FEC9FC3C4276BF47>I<013FB5D8F807 -B6FC04F015FEA29026007FF0C7380FFE006E486E5AA24B5DA4180F147F4B5DA4181F14FF -92C85BA4183F5B4A5EA491B8FC5B6102FCC8127FA318FF13074A93C7FCA45F130F4A5DA4 -1703131F4A5DA41707133F4A5DA3017F150F496C4A7EB6D8E01FB512FC6115C0483E7DBD -44>I<011FB512FC5BA29039003FF8006E5AA25DA5143F5DA5147F5DA514FF92C7FCA55B -5CA513035CA513075CA5130F5CA5131F5CA3133F497E007FB512F0A2B6FC263E7EBD21> -I<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F5DA514FF92C9FCA55B5CA51303 -5CA513075CA21838A21870130F5CA218E0A3011F15014A15C01703A21707EF0F80013F15 -1F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E7DBD39>76 -D<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B933801DFC0A2 -DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DAE07F94C7FC -19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C028003385BA2 -18706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E902603F80E -5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC01 -7C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A1338553E7CBD53> -I<90263FFFE0023FB5FC6F16FEA29026003FF8020313C0021F030013004A6C157C023B16 -3C6F15381439810238167802787FDA707F157082153F82031F15F002F07FDAE00F5D8215 -078203031401010180DAC0015D82811780047F1303010315C04A013F5C17E0161F17F004 -0F1307010715F891C7000791C7FC17FC160317FE04015B4915FF010E6E130E188E177F18 -CEEF3FDE011E16FE011C6F5AA2170FA21707133C01386F5A133C017C150113FE2607FF80 -1400B512FC18705C483E7DBD44>I<923803FF80031F13F09238FE01FE913903F0003FDA -0FC0EB1FC0DA3F80EB07E0027EC76C7E49486E7E49488149486E7E4948157F495A013F17 -804948ED3FC049C9FCA24848EE1FE012035B000718F05B120FA2485A19F8123F5BA2127F -A219F04848163FA5F07FE0A35BF0FFC0A219805F19007F4D5A127F4D5A60003F160F6D5E -001F4C5A4D5A6C6C4B5A95C7FC6C6C15FE00034B5A6C6C4A5A6C6C4A5A017FEC1FC06D6C -495AD90FE001FEC8FC903903F807F80100B512C0DA0FFCC9FC3D4276BF47>I<013FB612 -FEEFFFE018F8903B007FF0000FFC6E48EB01FF7113804BEC7FC0183F19E0F01FF0A2147F -5D19F8A402FFED3FF092C8FCA219E0A2F07FC05B4AEDFF8019004D5A4D5AEF0FF80103ED -3FE04A903801FF8091B648C7FC17F002FCCAFCA213075CA5130F5CA5131F5CA5133F5CA3 -137F497EB612E0A25D3D3E7DBD3E>I<013FB612F017FF18E0903B007FF0003FF86E48EB -07FCEF01FE4B6D7EF07F8019C0183F19E0147F4B15F0A502FFED7FE092C8FCA219C0F0FF -80A2494B13004A5D4D5AEF0FF04D5AEF7F800103DA07FEC7FC91B612F017809139FC0007 -E0EE03F8EE00FC0107814A147F717EA284A2130F5CA484011F157F5CA41902013F17075C -A2F0F00F017F170E496C143FB600E0011F131C94380FF83C4B01071378CA3801FFE09438 -003F8040407DBD43>82 D<9238FF80070207EBE00F021FEBF81E91387F00FE02FCEB1F3E -D903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E177C491578A57F17 -70A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC010380010080143F0203 -1480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F003C16C0A3178000 -3E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFCEB0FC03AF87F803F -8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>I<0007B912F0A33C0FFE000F -F8003F01F0160F01C04A13034848160190C7FC121EF000E048141F5E1238A21278127015 -3F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA514075DA5140F5DA3141FEC7F -FC0003B7FCA33C3D76BC42>IIII<010FB500F090B512F85B5FD9003F902680003F13 -00DA0FFEC7EA1FF84BEC0FE00207168096C7FC6E6C141E181C6E6C143C606E6D5B4D5ADB -7FC05B4D5A92383FE0074DC8FC92381FF01E171C6F6C5A5F923807FCF0EEFDE06FB45A5F -6F90C9FCA26F7FA2707EA216FF4B7FED03DF9238079FF0ED0F1F92380E0FF8151C92383C -07FC15784B6C7EEC01E04B6C7EEC038002076D7F4AC7FC021E6E7E5C02386E7E5C02F06E -7E495A49486E7E130749486E7E497E017F4B7E2603FFF091383FFF80007F01FC49B512FE -B55CA2453E7EBD44>II<010FB712FEA39239C00007FCD91FFCC7EA0FF814F04AEC1F -F00280EC3FE091C8EA7FC0013EEDFF80A2013C4A13004C5A494A5A4C5A13704C5A4C5A49 -4A5A4C5AA290C74890C7FC4B5A4B5A4B5AA24B5A4B5A4B5A4B5AA24A90C8FC4A5A4A5A4A -5AA24A5A4A5A4A48EB01C04A5AEF03804990C7FC495A495A494814071800495A49485C49 -5A495A171E4890C8123E485A4848157E484815FE4C5A484814074848141F4848EB01FFB8 -FC5FA2373E7BBD38>I97 D -IIIII<177C913907F803FE91393FFE0F8F9139FC0F9C3F90 -3901F007F8903907E003E0D90FC013F0011F903801F80C02801400133FD97F007FA31503 -5B495CA3017E495A5E150F6D5C6D495A90263F803EC7FCECC0FC903871FFF09038E07F80 -91C9FC485AA47FA27F90B512F8EDFF806C15E016F86D8048B6FC3A07E0000FFED80F8013 -00003FC8127F003E815A00FC815AA25E163EA25E6C15FC007C4A5A6C4A5A6CEC0FC0D80F -C0013FC7FC3903F801FCC6B512F0010F90C8FC303D7FA82D>I<147FEB3FFFA313017FA2 -5CA513015CA513035CA4ED07F80107EB1FFF9139F0781FC09138F1E00F9139F38007E0EC -F70002FE14F0495A5CA25CA24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C713 -80A4167F5B491500A300015D486C491380B5D8F87F13FCA32E3F7DBE33>I<1478EB01FE -130314FFA25B14FE130314FCEB00F01400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5 -131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>II<143FEB1FFF5BA213017FA214FEA5130114FCA5130314F8A5130714F0A5130F -14E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F13F8A2B5FC183F7DBE1A ->108 D<902707F007F8EB03FCD803FFD91FFF90380FFF80913CE0781FC03C0FE09126E1 -E00FEBF0073E001FE38007E1C003F090260FE700EBE38002EEDAF70013F802FC14FE02D8 -5C14F84A5CA24A5C011F020F14074A4A14F0A5013F021F140F4A4A14E0A5017F023F141F -91C74914C0A549027F143F4992C71380A300014B147F486C496DEBFFC0B5D8F87FD9FC3F -13FEA347287DA74C>I<903907F007F8D803FFEB1FFF9139E0781FC09138E1E00F3B001F -E38007E090380FE70002EE14F014FC14D814F85CA24A130F131F4A14E0A4161F133F4A14 -C0A4163F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E287D -A733>II<91387F01FE903A7FFF0FFFC09139FE3E03F09238F8 -01F8903A03FFE000FE6D49137F4B7F92C713804A15C04A141FA218E0A20103150F5C18F0 -A3171F010716E05CA3173F18C0130F4A147F1880A2EFFF004C5A011F5D16034C5A6E495A -EE1FC06E495AD93FDC017EC7FC91388F01F8913883FFE0028090C8FC92C9FC137FA291CA -FCA45BA25BA31201487EB512F8A3343A81A733>I<91390FE003C0DAFFFC1380903903F8 -1E0790390FE0070F90391F80038FD97F0013DF01FE13014848903800FF00485A1207485A -8248485C123F495CA2485AA2150112FF90C75BA41503A25EA37E15077F003F4A5A151F6C -6C133F6C6C137F000714FF3903F003CF3A00FC0F8FE090383FFE0FEB0FF090C7FC151F5E -A5153F5EA4157F4B7E023F13FEA32A3A7AA730>I<903907F01F80D803FFEB7FE09138E1 -E1F09138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801804AC7FCA25C13 -1FA25CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA724>I<9138FF81 -C0010713E390381F807F90397C003F8049131F4848130F5B00031407A248481400A27FA2 -7F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F13079038007FFE1403140100 -381300157EA2123C153E157E007C147CA2007E147815F8007F495A4A5A486C485A26F9E0 -1FC7FC38E0FFFC38C01FE0222A7DA824>II<01FE147F00FFEC7FFF4914FEA20007140300031401A34914FCA41503120749 -14F8A41507120F4914F0A4150F121F4914E0A2151FA3153F4914C0157F15FFEC01DF3A0F -C003BFE09138073FFF3803F01E3801FFF826003FE01380282977A733>III<48B539C07FFFC0A33C000FFE003FF8006D48EB1FE001031580010102 -3EC7FC6E133C01005C027F5B6F5A91383F81C0EDC380DA1FC7C8FC15EFEC0FFE6E5A5D14 -0381A24A7E140FEC1E7F023C7FEC383F02707FECE01F010180903803C00F49486C7ED90F -007F491303017E80D801FE80D807FF497EB5D8803F13F8A332277FA630>I<90B539E007 -FFF05E18E0902707FE000313006D48EB01FC705A5F01014A5A5F16036E5C0100140794C7 -FC160E805E805E1678ED8070023F13F05EED81C015C191381FC38015C793C8FC15EF15EE -EC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC5C140E141E141C5C121C003F5B5A485B495A -130300FE5B4848CAFCEA701EEA783CEA3FF0EA0FC0343A80A630>I<017FB512FEA2ECC0 -0190397E0003FC49EB07F849EB0FF049EB1FE049EB3FC0ED7F8000011500495B4A5A4A5A -4848485A4A5AC7485A4A5A5D147F4AC7FC495A495A49481370494813E0495A5C133F9038 -7F8001D9FF0013C0485A48481303485A4848EB078049130F4848131F003F143F397F8001 -FFB71200A227277EA628>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmti10 10.95 38 -/Fn 38 122 df44 -D<387FFFFEA3B5FCA21705799521>I<120FEA3FC0127FA212FFA31380EA7F00123C0A0A -77891C>I<171C173C177CA217FCA216011603A21607A24C7EA2161DA216391679167116 -E1A2ED01C1A2ED038115071601150EA2031C7FA24B7EA25D15F05D4A5AA24A5AA24AC7FC -5C140E5C021FB6FC4A81A20270C7127FA25C13015C495AA249C8FCA2130E131E131C133C -5B01F882487ED807FEEC01FFB500E0017FEBFF80A25C39417BC044>65 -D<49B712C018F818FE903B0003FC0001FF9438007F804BEC3FC0A2F01FE014074B15F018 -0FA2140F5D181FA2021F16E05D183F19C0023FED7F804B14FF19004D5A027F4A5A92C7EA -07F0EF1FE0EF7F804AD903FEC7FC92B512F017FE4AC7EA3F800101ED1FE04A6E7E170784 -01036F7E5CA30107825CA3010F5E4A1407A260011F150F5C4D5A60013F153F4A4A5A4D5A -017F4A90C7FC4C5A91C7EA0FF849EC3FF0B812C094C8FC16F83C3E7BBD40>I<9339FF80 -01C0030F13E0033F9038F803809239FF807E07913A03FC001F0FDA0FF0EB071FDA1FC0EC -BF00DA7F806DB4FC4AC77E495AD903F86E5A495A130F4948157E4948157C495A13FF91C9 -FC4848167812035B1207491670120FA2485A95C7FC485AA3127F5BA312FF5BA490CCFCA2 -170FA2170EA2171E171C173C173817786C16706D15F04C5A003F5E6D1403001F4B5A6D4A -C8FC000F151E6C6C5C6C6C14F86C6C495A6C6CEB07C090397FC03F8090261FFFFEC9FC01 -0713F0010013803A4272BF41>I<49B712C018F818FE903B0003FE0003FF9438007F804B -EC1FC0F00FE0F007F014074BEC03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3 -027F5D5DA219FE14FF92C81203A34917FC4A1507A219F813034A150F19F0A20107EE1FE0 -5CF03FC0A2010FEE7F804A16006060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC -017F15FEEE03FC4AEB0FF001FFEC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F0 -A390260003FEC7123F180F4B1403A2F001E014075DA3140F5D19C0A2141F5D1770EFF003 -023F02E013804B91C7FCA21601027F5CED8003A2160702FFEB1F8092B5FCA349D9003FC8 -FC4A7F82A20103140E5CA2161E0107141C5CA293C9FC130F5CA3131F5CA3133F5CA2137F -A25C497EB612E0A33C3E7BBD3B>70 DI<49B6 -48B6FC495DA2D9000390C7000313004B5D4B5DA2180714074B5DA2180F140F4B5DA2181F -141F4B5DA2183F143F4B5DA2187F147F4B5DA218FF91B8FC96C7FCA292C712015B4A5DA2 -170313034A5DA2170713074A5DA2170F130F4A5DA2171F131F4A5DA2173F133F4A5DA201 -7F157FA24A5D496C4A7EB66CB67EA3483E7BBD44>I<49B5933807FFFC496062D90003F0 -FC00505ADBBF805E1A771AEF1407033F923801CFE0A2F1039F020FEE071F020E606F6C14 -0E1A3F021E161C021C04385BA2F1707F143C023804E090C7FCF001C0629126780FE0495A -02705FF00700F00E0114F002E0031C5BA2F03803010116704A6C6C5D18E019070103ED01 -C00280DA03805BA2943807000F13070200020E5C5FDB03F8141F495D010E4B5CA24D133F -131E011CDAF9C05CEEFB80197F013C6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD8 -07FE4C7EB500F04948B512FE16E01500563E7BBD52>77 D79 -D<49B77E18F018FC903B0003FE0003FEEF00FF4BEC7F80F03FC00207151F19E05DA2020F -16F0A25DA2141FF03FE05DA2023F16C0187F4B1580A2027FEDFF00604B495A4D5A02FF4A -5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04ACAFCA21303A25CA21307A25CA2130FA2 -5CA2131FA25CA2133FA25CA2137FA25C497EB67EA33C3E7BBD3E>I<49B612FCEFFF8018 -F0903B0003FE000FF8EF03FE4BEB00FF8419800207ED3FC05DA219E0140F5DA3021FED7F -C05DA2F0FF80143F4B15004D5A60027F4A5A4B495A4D5AEF3F8002FF02FEC7FC92380007 -F892B512E01780499038000FE04A6D7E707E707E0103814A130083A213075CA25E130F5C -5F1603131F5CA3013F020714404A16E05F017F160119C04A01031303496C1680B6D88001 -13079438FE0F009338007E1ECAEA3FFCEF07F03B407BBD42>82 D<92390FF001C0ED7FFE -4AB5EA0380913907F80FC791390FC003EF91391F8001FF4AC71300027E805C495A494814 -3EA2495AA2010F153C5CA3011F1538A38094C7FC80A214FC6DB4FC15F015FE6DEBFFC06D -14F06D14FC6D80143F020F7F020180EC001F150303007F167F163FA2161FA212075A5F12 -0EA2001E153F94C7FCA2163E003E157E167C003F15FC4B5A486C5C4B5A6D495AD87DE0EB -1F80D8F8F849C8FC017F13FE39F03FFFF8D8E00F13E048C690C9FC32427ABF33>I86 D89 D<147E49B47E903907C1C38090391F80EFC090 -383F00FF017E137F4914804848133F485AA248481400120F5B001F5C157E485AA215FE00 -7F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F1370127C021F13F0007E -013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D800FC133E2529 -77A72E>97 DIIII103 -DI<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA07 -07000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E13FE5B -A212015BA212035B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383148038 -078700EA03FEEA00F8163E79BC1C>I108 DIII<903903E001F89039 -0FF807FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C0 -13F0ED80019038F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103 -140F17E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A9039 -3FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A238 -7FFFE0B5FCA22D3A80A72E>I<027E1360903901FF81E0903807C1C390391F80E7C09038 -3F00F7017E137F5B4848EB3F80485AA2485A000F15005B121F5D4848137EA3007F14FE90 -C75AA3481301485CA31403485CA314074A5A127C141F007E133F003E495A14FF381F01EF -380F879F3903FF1F80EA00FC1300143F92C7FCA35C147EA314FE5CA21301130390B512F0 -5AA2233A77A72A>I -III<137C48B4141C26038F -80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F13 -03140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F -1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C9039 -1FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F038038F80EA0707000E -01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712E012 -005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA25DA25D15780001 -14706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<017C167048B491 -387001FC3A038F8001F8EA0707000E01C015FE001E1403001CEDF000EA3C0F0038177C15 -07D8781F4A133C00701380A2D8F03F130F020049133812005B017E011F14784C137013FE -5B033F14F0000192C712E05BA2170100034A14C049137E17031880A2EF070015FE170E00 -010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E0F07C1E0903A1FFC03FFC090 -2703F0007FC7FC372979A73C>I<137C48B4143826038F8013FCEA0707000E7F001E1401 -001C15F8EA3C0F12381503D8781F14F000701380A2D8F03F1307020013E012005B017E13 -0F16C013FE5B151F1201491480A2153F000315005BA25D157EA315FE5D00011301EBF803 -0000130790387C1FF8EB3FF9EB07E1EB00035DA21407000E5CEA3F80007F495AA24A5AD8 -FF0090C7FC143E007C137E00705B387801F0383803E0381E0FC06CB4C8FCEA03F8263B79 -A72C>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmbxti10 14.4 1 -/Fo 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A -EA0FE0121271912B>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmbx12 17.28 51 -/Fp 51 122 df<19F0F001F8F003FCA3180719F8180FA219F0181F19E0183FA219C0187F -198018FFA219005F601703A260170760170FA260171F60173FA260177F6017FFA295C7FC -5E5F1603A25F16075F160FA25F161F5F163FA25F167F5F16FFA294C8FC5D5E1503A25E15 -075E150FA25E151F5EA2153F5E157FA25E15FF93C9FC5CA25D14035D1407A25D140F5D14 -1FA25D143F5D147FA25D14FF92CAFC5BA25C13035C1307A25C130F5C131FA25C133F5C13 -7FA25C13FF91CBFC5AA25B12035B1207A25B120F5B121FA25B123F5B127FA25B12FF90CC -FCA3127E123C3E9077EB51>47 D<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7 -FCA41487EBF007C7FCB3B3B3B3007FB91280A6395E74DD51>49 D<913801FFF8021FEBFF -C091B612F8010315FF010F16C0013F8290267FFC0114F89027FFE0003F7F4890C7000F7F -48486E7FD807F86E148048486E14C048486E14E048486F13F001FC17F8486C816D17FC6E -80B56C16FE8380A219FFA283A36C5BA26C5B6C90C8FCD807FC5DEA01F0CA14FEA34D13FC -A219F85F19F04D13E0A294B512C019804C14004C5B604C5B4C5B604C13804C90C7FC4C5A -4C5A4B13F05F4B13804B90C8FC4B5AED1FF84B5A4B5A4B48143F4A5B4A48C8FC4A5A4A48 -157E4A5A4A5AEC7F8092C9FC02FE16FE495A495A4948ED01FCD90FC0150749B8FC5B5B90 -B9FC5A4818F85A5A5A5A5ABAFCA219F0A4405E78DD51>I<92B5FC020F14F8023F14FF49 -B712C04916F0010FD9C01F13FC90271FFC00077FD93FE001017F49486D8049C86C7F4848 -83486C6F7F14C0486D826E806E82487FA4805CA36C5E4A5E6C5B6C5B6C495E011FC85A90 -C95CA294B55A614C91C7FC604C5B4C5B4C5B4C5B047F138092260FFFFEC8FC020FB512F8 -17E094C9FC17F817FF91C7003F13E0040713F8040113FE707F717F7113E085717FA2717F -85A285831A80A31AC0EA03FCEA0FFF487F487F487FA2B57EA31A80A34D14005C7E4A5E5F -6C495E49C8485BD81FF85F000F5ED807FE92B55A6C6C6C4914806C01F0010791C7FC6C90 -26FF803F5B6D90B65A011F16F0010716C001014BC8FCD9001F14F0020149C9FC426079DD -51>II<01C0 -EE01C0D801F8160F01FF167F02F0EC07FFDAFF8090B5FC92B71280190060606060606060 -95C7FC17FC5F17E0178004FCC8FC16E09026FC3FFCC9FC91CBFCADED3FFE0203B512F002 -0F14FE023F6E7E91B712E001FDD9E00F7F9027FFFE00037F02F801007F02E06EB4FC0280 -6E138091C8FC496F13C04917E07113F0EA00F090C914F8A219FC83A219FEA419FFA3EA03 -F0EA0FFC487E487E487FA2B57EA319FEA35C4D13FC6C90C8FC5B4917F8EA3FF001804B13 -F06D17E0001F5E6C6C17C06D4B1380D807FC92B512006C6C4A5B6C6C6C01075B6C01E001 -1F5BD97FFE90B55A6DB712C0010F93C7FC6D15FC010115F0D9003F1480020301F0C8FC40 -6078DD51>III -65 DI<4DB5ED03C0057F02F014070407B600FE140F047FDBFF -C0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807FF814A02F002 -0113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291B54882490280 -824991CB7E49498449498449498449865D49498490B5FC484A84A2484A84A24891CD127F -A25A4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07EA380A27EA2F50FC0A26C7FA37E -6E1A1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D7F6F4E5A7F6D6D4E5A6D6D4E5A -6D6D4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90C7FC020F01FFEE07FE6E02C0ED -1FF8020102F8ED7FF06E02FF913803FFE0033F02F8013F1380030F91B648C8FC030117F8 -6F6C16E004071680DC007F02F8C9FC050191CAFC626677E375>IIII<4DB5ED03C0057F02F014070407B600FE -140F047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807 -FF814A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291 -B54882490280824991CB7E49498449498449498449865D49498490B5FC484A84A2484A84 -A24891CD127FA25A4A1A3F5AA348491A1FA44899C8FCA25CA3B5FCB07E071FB812F880A3 -7EA296C70001ECC000A26C7FA37E807EA26C80A26C80A26C807F6D7F816D7F7F6D7F6D6D -5F6D14C06D6E5E6E7F6E01FC5E020F01FF5E6E02C0ED7FEF020102F8EDFFC76E02FF0207 -1383033F02FC013F1301030F91B638FC007F03014D131F6F6C04E01307040704801301DC -007F02F8CAFC050191CBFC6D6677E37F>I73 D76 DII<9438 -1FFFE00407B67E043F15F04BB712FE030FEEFFC0033FD9FC0014F092B500C0010F13FC02 -0349C7000113FF4A01F86E6C7F021F496F13E04A01C0030F7F4A496F7F91B5C96C7F0103 -497013FF494970804B834949717F49874949717F49874B8390B586484A717FA24891CB6C -7FA2481D804A84481DC0A348497214E0A3481DF0A34A85481DF8A5B51CFCB06C1DF8A36E -96B5FCA36C1DF0A46C6D4E14E0A36C1DC06E606C1D80A26C6E4D1400A26C6E4D5BA26C6E -4D5BA26D6D4D5B6D636D6D4D5B6F94B5FC6D636D6D4C5C6D6D4C91C7FC6D6E4B5B6D02E0 -031F5B023F6D4B13F06E01FC92B55A6E01FF02035C020302C0010F91C8FC020002FC90B5 -12FC033F90B712F0030F17C0030394C9FCDB007F15F804071580DC001F01E0CAFC666677 -E379>II82 -DI<001FBEFCA64849C79126E0000F1480 -02E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181FA400 -7E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>IIII<913803FFFE027FEBFFF00103B612FE010F6F7E4916E090273FFE001F7FD9 -7FE001077FD9FFF801017F486D6D7F717E486D6E7F85717FA2717FA36C496E7FA26C5B6D -5AEB1FC090C9FCA74BB6FC157F0207B7FC147F49B61207010F14C0013FEBFE004913F048 -B512C04891C7FC485B4813F85A5C485B5A5CA2B55AA45FA25F806C5E806C047D7F6EEB01 -F96C6DD903F1EBFF806C01FED90FE114FF6C9027FFC07FC01580000191B5487E6C6C4B7E -011F02FC130F010302F001011400D9001F90CBFC49437CC14E>97 -D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF80047F14F00381B612FC038715FF -038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02007F03F8824B6F7E4B6F1380 -4B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA44F13F8A31BF0A24F13E0A24F -13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C495B9126F83FE0013F13C09127 -F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C7001F91C8FC90C8000313E04F65 -7BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E01039039FE001FFF4901F801 -0113804901E0010713C04901804913E0017F90C7FC49484A13F0A2485B485B5A5C5A7113 -E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE7EA280A27EA2806C18FCA26C -6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC1FC06D01E0EC7F806D6DECFF -00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D020F1580020102FCC7FCDA00 -0F13C03E437BC148>II<92380FFFC04AB512FC020FECFF80023F15E091B712F80103D9FE03 -7F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F49486E7F48498048844A8048 -84485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA41A0002C0CBFCA67EA380A27E -A27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C17016D6C4B5A6D6D4A5A6D01E0 -4A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D6C90B55A021F15F8020715E0 -020092C8FC030713F041437CC14A>III<903807FF80B6FCA6C6FC -7F7FB3A8EF1FFF94B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FDB83 -F86D7FDB87F07FDB8FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8 -F007B71280A651647BE35A>III<903807FF80B6 -FCA6C6FC7F7FB3A90503B61280A6DD003FEB8000DE0FFCC7FCF01FF04E5AF0FFC04D5B4D -90C8FCEF07FC4D5AEF3FF04D5A4D5A4C90C9FC4C5AEE0FFC4C5A4C5AEE7FC04C7E03837F -03877F158F039F7F03BF7F92B5FC838403FC804B7E03F0804B6C7F4B6C7F1580707F707F -707FA270807080717FA2717F717F717FA2717F717F83867180727F95B57EB7D8E00FECFF -F0A64C647BE355>I<903807FF80B6FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>I< -902607FF80D91FFFEEFFF8B691B500F00207EBFF80040702FC023F14E0041F02FF91B612 -F84C6F488193267FE07F6D4801037F922781FE001F9027E00FF0007FC6DA83F86D9026F0 -1FC06D7F6DD987F06D4A487F6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFD -F003BC6E4A8003FC04FF834B5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612 -FCA67E417BC087>I<902607FF80EB1FFFB691B512F0040714FC041F14FF4C8193267FE0 -7F7F922781FE001F7FC6DA83F86D7F6DD987F07F6DD98FC0814C7F039FC78015BE03BC80 -03FC825DA25DA25DA45DB3B2B7D8F007B71280A651417BC05A>I<923807FFE092B6FC02 -0715E0021F15F8027F15FE494848C66C6C7E010701F0010F13E04901C001037F49496D7F -4990C87F49486F7E49486F7E48496F13804819C04A814819E048496F13F0A24819F8A348 -496F13FCA34819FEA4B518FFAD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E0 -6C6D4B13C0A26C6D4B13806C6D4B13006D6C4B5A6D6D495B6D6D495B010701F0010F13E0 -6D01FE017F5B010090B7C7FC023F15FC020715E0020092C8FC030713E048437CC151>I< -902607FF80EBFFF8B6010FEBFF80047F14F00381B612FC038715FF038F010114C09227BF -F0003F7FC6DAFFC0010F7F6D91C76C7F6D496E7F03F86E7F4B6E7F4B17804B6F13C0A273 -13E0A27313F0A21BF885A21BFCA3851BFEAE4F13FCA41BF861A21BF0611BE0611BC06F92 -B512801B006F5C6F4A5B6F4A5B03FF4A5B70495B04E0017F13C09226CFFC03B55A03C7B6 -48C7FC03C115F803C015E0041F91C8FC040313E093CBFCB3A3B712F0A64F5D7BC05A>I< -D90FFFEB0FFCB690383FFF8093B512E04B14F04B14F8923907FC7FFC92390FE0FFFEC6EC -1F806DD93F0113FF6D133E157E157C15F8A215F07013FEA24BEB7FFCEF3FF8EF0FE04B90 -C7FCA55DB3B0B712F8A638417BC042>114 D<913A3FFF8007800107B5EAF81F011FECFE -7F017F91B5FC48B8FC48EBE0014890C7121FD80FFC1407D81FF0801600485A007F167F49 -153FA212FF171FA27F7F7F6D92C7FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C -16F06C826C826C826C82013F1680010F16C01303D9007F15E0020315F0EC001F1500041F -13F81607007C150100FC81177F6C163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16 -C001FEEDFF806D0203130002C0EB0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F800 -7F49C7FC48010F13E035437BC140>II<902607FFC0ED3FFEB60207B5FCA6C6EE00076D826D82B3B3A2 -60A360A2607F60183E6D6D147E4E7F6D6D4948806D6DD907F0ECFF806D01FFEB3FE06D91 -B55A6E1500021F5C020314F8DA003F018002F0C7FC51427BC05A>III<007FB600C0017FB512F8A6D8001F01F8C70007EBF0006D040190C7FC6D -6D5D6D6D4A5A6D6D4A5A70495A6D4C5A6E7F6E6D495A6E6D495A7049C8FC6E4A5A6E6D48 -5A6E6D485A6E13FFEF8FF06EEC9FE06FEBFFC06F5C6F91C9FC5F6F5B816F7F6F7F848170 -7F8493B57E4B805D4B80DB0FF37FDB1FE17F04C080153F4B486C7F4B486C7F4A486D7F4A -486D7F4A5A4B6D7F020F6E7F4A486D7F4A486D804A5A4AC86C7F49486F7F4A6F7F010770 -7FEB3FFFB600F049B7FCA650407EBF55>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmr12 12 54 -/Fq 54 122 df<1618163C167CA2167816F8A216F01501A216E01503A216C01507A21680 -150FA2ED1F00A2151E153EA2153C157CA2157815F8A25D1401A24A5AA25D1407A25D140F -A292C7FC5CA2141E143EA2143C147CA25CA25C1301A25C1303A25C1307A25C130FA291C8 -FC5BA2133EA2133C137CA2137813F8A25B1201A25B1203A2485AA25B120FA290C9FC5AA2 -121E123EA2123C127CA2127812F8A25A126026647BCA31>47 D<14FF010713E090381F81 -F890383E007C01FC133F4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301 -001F15F8A2003F15FCA390C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F -15F8A26C6CEB03F0A36C6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90 -381F81F8903807FFE0010090C7FC28447CC131>I<143014F013011303131F13FFB5FC13 -E713071200B3B3B0497E497E007FB6FCA3204278C131>II<49B4FC010F13E0013F13FC9038FE01FE3A01F0007F80D803C0EB3F -C048C7EA1FE0120EED0FF0EA0FE0486C14F8A215077F5BA26C48130FEA03C0C813F0A3ED -1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0EC1FC0D90FFFC7FC15F090380001FCEC007F -ED3F80ED1FC0ED0FE016F0ED07F816FC150316FEA2150116FFA3121EEA7F80487EA416FE -491303A2007EC713FC00701407003015F80038140F6C15F06CEC1FE06C6CEB3FC0D803E0 -EB7F803A01FE01FE0039007FFFF8010F13E0010190C7FC28447CC131>II<00 -0615C0D807C0130701FCEB7F8090B612005D5D5D15E0158026063FFCC7FC90C9FCAE14FF -010713C090381F01F090383800FC01F0137ED807C07F49EB1F8016C090C7120F000615E0 -C8EA07F0A316F81503A216FCA5123E127F487EA416F890C712075A006015F0A20070140F -003015E00038EC1FC07E001EEC3F806CEC7F006C6C13FE6C6C485A3901F807F039007FFF -E0011F90C7FCEB07F826447BC131>II<121CA2EA1F -8090B712C0A3481680A217005E0038C8120C0030151C00705D0060153016705E5E481401 -4B5A4BC7FCC81206150E5D151815385D156015E04A5AA24A5A140792C8FC5CA25C141E14 -3EA2147E147CA214FCA21301A3495AA41307A6130FAA6D5AEB01C02A457BC231>I<14FF -010713E0011F13F890387F00FE01FC133FD801F0EB1F804848EB0FC049EB07E00007EC03 -F048481301A290C713F8481400A47FA26D130116F07F6C6CEB03E013FC6C6CEB07C09039 -FF800F806C9038C01F006CEBF03EECF87839007FFEF090383FFFC07F01077F6D13F8497F -90381E7FFFD97C1F1380496C13C02601E00313E048486C13F000079038007FF84848EB3F -FC48C7120F003EEC07FE150148140016FF167F48153FA2161FA56C151E007C153EA2007E -153C003E157C6C15F86DEB01F06C6CEB03E06C6CEB07C0D803F8EB1F80C6B4EBFF009038 -3FFFFC010F13F00101138028447CC131>I<14FF010713E0011F13F890387F80FC9038FC -007E48487F4848EB1F804848EB0FC0000FEC07E0485AED03F0485A16F8007F140190C713 -FCA25AA216FE1500A516FFA46C5CA36C7E5D121F7F000F5C6C6C130E150C6C6C131C6C6C -5BD8007C5B90383F01E090390FFF80FE903801FE0090C8FC150116FCA4ED03F8A216F0D8 -0F801307486C14E0486C130F16C0ED1F80A249EB3F0049137E001EC75A001C495A000F49 -5A3907E01FE06CB51280C649C7FCEB1FF028447CC131>I<16C04B7EA34B7EA34B7EA34B -7EA3ED19FEA3ED30FFA203707FED607FA203E07FEDC03FA2020180ED801FA2DA03007F16 -0FA20206801607A24A6D7EA34A6D7EA34A6D7EA20270810260147FA202E08191B7FCA249 -820280C7121FA249C87F170FA20106821707A2496F7EA3496F7EA3496F7EA201788313F8 -486C83D80FFF03037FB500E0027FEBFFC0A342477DC649>65 DIIIIII73 -D76 -DIIII82 D<49B41303010FEBE007013F13 -F89039FE00FE0FD801F8131FD807E0EB079F49EB03DF48486DB4FC48C8FC4881003E8112 -7E82127C00FC81A282A37E82A27EA26C6C91C7FC7F7FEA3FF813FE381FFFE06C13FE6CEB -FFE06C14FC6C14FF6C15C0013F14F0010F80010180D9001F7F14019138001FFF03031380 -816F13C0167F163F161F17E000C0150FA31607A37EA36C16C0160F7E17806C151F6C1600 -6C5D6D147ED8FBC05CD8F9F0495AD8F07C495A90393FC00FE0D8E00FB51280010149C7FC -39C0003FF02B487BC536>I<003FB912F8A3903BF0001FF8001F01806D481303003EC715 -0048187C0078183CA20070181CA30060180CA5481806A5C81600B3B3A54B7EED7FFE49B7 -7EA33F447DC346>IIII -97 DII<167FED3FFFA315018182B3EC7F80903803FFF090380F -C07C90383F000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2127FA290C8 -FC5AAB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C010E13C001 -3F011C13FE90380FC0F8903803FFE09026007F0013002F467DC436>IIIIII<143C14FFA2491380A46D1300A2143C91C7FCADEC7F -80EB3FFFA31300147F143FB3B3AA123E127F39FF807F00A2147EA25C6C485A383C01F06C -485A3807FF80D801FEC7FC195785C21E>IIII<3901FC01FE00FF903807FFC091381E07F091383801F80007 -01707F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F -13FEA32F2C7DAB36>II<3901FC03FC00FF -90380FFF8091383C07E091387001F83A07FDE000FE00030180137FD801FFEC3F8091C7EA -1FC04915E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8A217F0160F6D -15E0EE1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091381FFF80DA03 -FCC7FC91C9FCAE487EB512F8A32F3F7DAB36>I<3903F803F000FFEB1FFCEC3C3EEC707F -0007EBE0FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA320 -2C7DAB26>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E130148130000 -7C1478127800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14 -C06C14E0C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C -6C147C15786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26 ->I<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FCA2C648C7FCB3A4 -150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E0903801FFC0903800 -7F001E3E7EBC26>IIIIII -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmtt10 10.95 93 -/Fr 93 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 -A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14 -00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2 -02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F -90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2 -29387DB730>I<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE -FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3 -6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01 -1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC -A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C -5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>II -II<141E147F14FF5BEB03 -FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F -5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7E -EB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>I<127812 -FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB -03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14 -E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A12781847 -78BE30>I<14E0497E497EA60038EC0380007EEC0FC0D8FF83EB3FE001C3137F9038F3F9 -FF267FFBFB13C06CB61280000FECFE00000314F86C5C6C6C13C0011F90C7FC017F13C048 -B512F04880000F14FE003FECFF80267FFBFB13C026FFF3F913E09038C3F87F0183133FD8 -7E03EB0FC00038EC0380000091C7FCA66D5A6D5A23277AAE30>I<143EA2147FAF007FB7 -FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF30>II<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120F -EA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A2 -1507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA2 -4A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249 -C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA22547 -7BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049137F48 -48EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FCA400FE -EC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A2 -6C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FE -C7FC273A7CB830>IIIII<000FB6128048 -15C05AA316800180C8FCAEEB83FF019F13C090B512F015FC8181D9FE0313809039F0007F -C049133F0180EB1FE06CC7120F000E15F0C81207A216F81503A31218127EA2B4FC150716 -F048140F6C15E06C141F6DEB3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C -6C14E06C6C1380D90FFCC7FC25397BB730>II<127CB712FC16FEA416FC48C7EA -0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5A -A24AC7FCA25C5C13015CA213035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830 ->I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF8003FF049 -131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6C -EB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512FE4880 -2607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712014815 -FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE0 -6C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13 -E0013F13F890B57E4880488048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0F -F048481307A290C7EA03F85A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D -133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8 -A2150716F0150F000F15E0486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC -90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0 -A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F -000C276EA630>II<16F01503ED07F8151F157FEDFFF0 -14034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0 -485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F3800 -7FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7F -F8151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003F -B612FE4881B81280A36C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA1F -FF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF80 -6E13C0020113F080ED3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A903801 -FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE0 -5B90C9FC127E1278252F7BB230>I64 D<147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1 -A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881A39038FC001F0003 -8149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>I< -007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B5A -1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3 -EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB7 -30>I<91387F803C903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F -3903FE000F484813075B48481303A2484813015B123F491300A2127F90C8FC167C16005A -5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0F -F03901FF801F6C9038E07FE06DB512C06D14806D1400010713FC6D13F09038007FC0273A -7CB830>I<003FB512E04814FCB67E6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E -15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780A2167F17005E4B -5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B387FB730>I< -007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4 -157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<003FB7128048 -16C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E157FA490B6FCA69038FC007FA4 -153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F00103EBC0F8010F -13F1013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F485A491307121F -5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03 -F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90 -B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>I<3B3FFF800FFFE0486D -4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3 -A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E02D387FB730>I< -007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730 ->I<49B512F04914F85BA27F6D14F090C7EAFE00B3B3123C127EB4FCA24A5A1403EB8007 -397FF01FF86CB55A5D6C5C00075C000149C7FC38003FF025397AB730>II<383F -FFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16 -802A387EB730>III<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001 -E0133FD87F80EB0FF0A290C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D -131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB8 -30>I<007FB512F0B612FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7EA28217 -80163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FC -B0387FFFC0B57EA46C5B29387EB730>I<90383FFFE048B512FC000714FF4815804815C0 -4815E0EBF80001E0133F4848EB1FF049130F90C71207A44815F8481403B3A8147E14FE6C -EBFF076C15F0EC7F87A2EC3FC7018013CF9038C01FFFD83FE014E0EBF80F90B6FC6C15C0 -6C15806C1500000114FCD8003F7FEB00016E7EA21680157F16C0153F16E0151F16F0150F -ED07E025467BB830>I<003FB57E4814F0B612FC15FF6C816C812603F8017F9138003FF0 -151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D8182 -D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E -17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>I<90390FF803C0D97FFF13E048B5 -12C74814F74814FF5A381FF80F383FE001497E4848137F90C7123F5A48141FA2150FA37E -ED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF0103 -1480D9003F13C014019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C140716F0 -7F6DEB0FE06D131F01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD8 -78011380253A7BB830>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791 -C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813FEA46C -496C13FCD803F8C7EA3F80B3B16D147F00011600A36C6C14FE6D13016D5CEC800390393F -E00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730>III<3A3FFF01FFF84801837F -02C77FA202835B6C01015B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314 -C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0F -E781EB1FC381EB3F8181EB7F0081497F49800001143F49800003141F49800007140FD87F -FEEB7FFFB590B5128080A25C6C486D130029387DB730>II<001FB612FC4815FE5A -A490C7EA03FCED07F816F0150FED1FE016C0153FED7F80003E1500C85A4A5A5D14034A5A -5D140F4A5A5D143F4A5A92C7FC5C495A5C1303495A5C130F495A5C133F495A91C8FC5B48 -48147C4914FE1203485A5B120F485A5B123F485A90B6FCB7FCA46C15FC27387CB730>I< -007FB5FCB61280A4150048C8FCB3B3B3A5B6FC1580A46C140019476DBE30>I<127CA212 -FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C7EA212017FA26C7EA26D7EA26D7EA26D -7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7EA26E7EA26E7EA26E7EA26E7EA26E7EA2 -140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED0FF0A2ED07F8A21503A2ED01F0150025 -477BBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5007FB5FCB6FCA46C140019477DBE -30>I<1307EB1FC0EB7FF0497E000313FE000FEBFF80003F14E0D87FFD13F039FFF07FF8 -EBC01FEB800F38FE0003007CEB01F00010EB00401D0E77B730>I<007FB612F0A2B712F8 -A36C15F0A225077B7D30>I<1338137CEA01FE12031207EA0FFC13F0EA1FE013C0EA3F80 -13005A127EA212FE5AA5EAFFC013E013F0127FA2123FA2EA1FE0EA07C00F1D70BE30>I< -EB3FFC48B57E4814E04880488048809038F00FFE9038E001FF806F7E6C48133F6C4880C8 -121FA491B5FC130F137F48B6FC12075A48EBC01F383FFC00EA7FE0138048C7FC5AA46C14 -3FA26C6C137F9038C001FF263FF80FEBFFC06CB712E0A2000714F76C14C3C6020013C0D9 -3FF090C7FC2B2A7CA830>III<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A4813 -03380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F00 -3F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C7 -13E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B5 -7E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F90 -C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D8 -07FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A -7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F -5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>III<387FFFF8B57EA47EEA0001B3B3A8007FB612F0 -B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F -15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201F013F8A301E013 -F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A730>II<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A07 -FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A300FEEC -00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F -3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>I< -EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC6C816CEBFE07C69038F001FF -4A6C13804A137F4AEB3FC091C7121F4915E0160FA217F01607A8160FA217E07F161F6EEB -3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495C6E13C0021F90C7FCEC03 -FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730>I<49B413F8010FEBC1FC013F -13F14913FD48B6FC5A481381390FFC007F49131F4848130F491307485A491303127F90C7 -FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C -90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7FCAD92B512F84A14FCA46E14 -F82E3C7DA730>II<90381FFC1E48B5129F000714FF5A5A5A387FF007EB80 -0100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C -6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D -137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830>III<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01F8 -0003F000A26D130700005DA26D130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E -5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B27 -7EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00 -A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFD -F9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA6 -30>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F -81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7 -E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE90387F007E017E137F01FE6D7E48 -486D7E267FFF80B5FCB500C1148014E3A214C16C0180140029277DA630>I<3B3FFFC07F -FF80486DB512C0B515E0A26C16C06C496C13803B01FC0003F000A2000014076D5C137E15 -0F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01 -F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE -486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I< -001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C748 -5A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A495A495A495A4948133E4890C7 -127F485A485A485A485A485A48B7FCB8FCA46C15FE28277DA630>II<127CA212FEB3B3B3AD127CA207476CBE30>II<017C133848B4137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF -8713E0010713C0486C1380D87C0113003838007C1F0C78B730>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fs cmsy10 10.95 4 -/Fs 4 16 df<007FB812FEBAFCA26C17FE3804799847>0 D3 D13 -D15 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmbx12 14.4 64 -/Ft 64 122 df12 D39 D42 D44 DIII<913803FFC0023F13FC91B6FC010315 -C0010F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0 -A24817E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FE -A6003F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D -4913006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC02 -0313C0384F7BCD43>I<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EA -F800C7FCB3B3B3A6007FB712FEA52F4E76CD43>II< -91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7E -D803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801 -FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF -80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA2 -18FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E0 -01F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580 -010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F -167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC015 -80EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207 -485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>III<121F7F7FEBFF8091B81280A45A1900606060A26060 -60485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FE -C812014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D14 -1FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F -13FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E4848 -8048486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE -4913806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE01780 -6C4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048 -D9007F14E04848011F14F048487F48481303030014F8484880161F4848020713FC160182 -4848157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D15 -7F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F1580 -010102FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E49 -01037F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C0 -5A7013E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C -6D13F390387FF803011FB512E36D14C30103028313F89039007FFE03EC00401500A218F0 -5EA3D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A -5A49495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49 -C8FC010013F0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C -7FA34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F81 -4C7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207 -835D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A8201 -03854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366> -65 DI<932601FFFCEC01C0 -047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01 -FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F88249498249498249 -49824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA2 -5AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C00 -6C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F -806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0 -033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>IIII< -932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DA -E003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F8 -824949824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849 -181FA3485B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7003FEBC000A3 -6C7FA36C7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93B5FC6D13FF6D -6C6D5C6E01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EAC07F033FEE00 -1F030703FC1307DB007F02E01301040149CAFC5B5479D26A>III76 DII<93380F -FFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90C7000313 -F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F49854948 -707F4948707FA24849717E48864A83481B804A83481BC0A2481BE04A83A2481BF0A34849 -7113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A2 -6C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7 -FC6D6D4B5A6D01FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8FC020016 -FC031F15E0030392C9FCDB001F13E0565479D265>II82 D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F -9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F001F82498112 -3F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF80 -16FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16 -801400030F15C0ED007F040714E01600173F050F13F08383A200788200F882A3187FA27E -A219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7F -F0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8 -FC3C5479D24B>I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001 -E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3 -B3AC91B912F0A553517BD05E>III< -B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0FC06D716187 -6F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F016D66704A80 -6E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC3E074CC8FC887002 -7E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B70010317016E -4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F170F6F92C7 -6C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC177E6F4A6E14 -7C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E7061A2704870 -90CAFCA37048705AA24D1601040360A27048705A84537DD18B>I89 -D<1306131F5B137E5B485A5B485A485A485AA248C7FC121E123EA2123C127C1278A312F8 -5AA2EAF1FCEAF7FFB5128014C0A214E0A37EA37E6C13C0A26C138000031300EA01FC1328 -78D225>96 DI< -EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F91 -3AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A28584 -A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA87 -F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C041547B -D24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001FF -D97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A4892 -C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC3F -006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC02 -0113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91B6 -FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48498048 -5B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C6D -49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD900 -3F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0490181 -7F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191C7 -FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01F0 -6E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE90 -3A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F497E00 -0313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6 -B612E0A51B547BD325>I<157FEDFF80020313E04A13F0A24A13F8A76E13F0A26E13E002 -001380ED7F0092C7FCADED1FF891B5FCA51401EC007FB3B3B1EA0780EA1FE0487E487E48 -6C13FF16F0A216E05C16C04A13806C4848130049485A003F495A000FB512F06C5C000114 -8026001FFCC7FC256C87D329>IIIII<913801FFE0021F13FE91B612C0010315F0010F903880 -7FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C86C -7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA26C -5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF807F -FC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F13 -FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F92 -C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F616E -4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F1480 -031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<912601FFE0EB0780021F01 -F8130F91B500FE131F0103ECFF80010F9039F03FC03F499039800FE07F903A7FFE0003F0 -4948903801F8FF4849EB00FD4849147F4A805A4849805A4A805AA291C87E5AA35B12FFAC -6C7EA37EA2806C5EA26C6D5CA26C6D5C6C6D5C6C93B5FC6C6D5B6D6C5B6DB4EB0FEF010F -9038C07FCF6D90B5120F010114FED9003F13F80203138091C8FCB1040FB61280A5414D7C -B547>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003 -D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55C -B3AAB612FCA52F367CB537>I<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF8 -1307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13 -FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC003F -030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001 -F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C38 -7CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90B6FC -B8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC -6DEBFFF86D6C5B021F5B020313802A4D7ECB34>IIII<007FB500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D5C -6D6D495A6D4B5A6F495A6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8F -E06EEBCFC06EEBFF806E91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD -7F03F87F4A486C7E4A486C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A -49486D7F01076F7E49486E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fu cmr10 10.95 89 -/Fu 89 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 -F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 -FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 -D<4AB4FC021F13C091387F01F0903901FC0078D907F0131C4948133E494813FF49485A13 -7F1400A213FE6F5A163893C7FCAA167FB8FCA33900FE00018182B3AC486CECFF80007FD9 -FC3F13FEA32F407FBF33>I<4AB47E021F13F791387F00FFEB01F8903807F001EB0FE0EB -1FC0EB3F80137F14008101FE80AEB8FCA3C648C77EB3AE486CECFF80007FD9FC3F13FEA3 -2F407FBF33>I<4AB4ECFF80021FD9C00F13E0913B7F01F03F80F8903C01F80078FE003C -D907F0D93FF8130E49484948131F49484948EB7F804948484913FF137F02005CA201FE92 -C7FC6FED7F0070141C96C7FCAAF13F80BBFCA3C648C76CC7FC197F193FB3AC486C4A6CEB -7FC0007FD9FC3FD9FE1FB5FCA348407FBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00 -AC121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33 -D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013 -00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E -0018130C0038131C003013181C1C7DBE2D>I<013F4C7ED9FFC04B7E2601E0E015072607 -C070150F48486C4B5A023E4BC7FC48486C5D48D90FC0EB01FE003ED90EF0EB07FCDA0F3F -133E007E903A070FFFF8F8007C0200EBC1F0EE000300FC6D6C495A604D5A171F95C8FC17 -3E177E177C5F16015F007C4948485A1607007E5E003E49495A020E131F003F93C9FC6C49 -133E260F803C137E0238137C6C6C485B3901E0E0016CB448485AD93F0049133F90C74848 -EBFFC0030F903801E0E093398007C0704B4848487E4B153C033E90381F001C4B497F03FC -133E4B150F4A48017E7F0203147C5D4A4801FCEB0380140F5D4AC7FC5C143E5C14FC5C49 -5A13034948027CEB07005C4948147E011F033E5B91C8140E013E153F017E6F5B017C9238 -0F803C4917380001706C5A49923801E0E0496FB45A6C48043FC7FC41497BC34C>37 -D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A -120E5A1218123812300B1C79BE19>39 D<1430147014E0EB01C0EB03801307EB0F00131E -133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C -12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F13 -3E131E7FEB07801303EB01C0EB00E014701430145A77C323>I<12C07E12707E7E121E7E -6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A613 -0314F0B214E01307A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B -485A12075B48C7FC121E121C5A5A5A5A145A7BC323>II<1506150FB3A9007FB912E0BA12 -F0A26C18E0C8000FC9FCB3A915063C3C7BB447>I<121EEA7F8012FF13C0A213E0A3127F -EA1E601200A413E013C0A312011380120313005A120E5A1218123812300B1C798919>I< -B512FEA617067F961E>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I -IIIII<150E151E153EA2157EA215FE1401A21403EC077E1406140E -141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7 -FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<000614 -03D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380F -FF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E0150F -A316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F -00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I< -EC1FE0ECFFF8903803F03E90380FC00F90391F000780133E017EEB1FC049133F4848137F -12035B12074848EB3F80ED1F00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F -07E090389C01F09038B800FC01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127F -A6123F6D14E0A2121FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A9038 -7E07F06DB45A010F1380D903FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A -16F016E00078C712010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A5D -14034A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131FA6 -133FAA6D5A0107C8FC26407BBD2D>III<121EEA7F80A2EA -FFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619> -I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E -1200A412011380A3120313005A1206120E120C121C5A1230A20A3979A619>I<007FB912 -E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 -D63 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381 -FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA249 -819138800001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA20178 -82170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 -DII -IIII< -B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691B7FCA30280C7120FB3 -A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>II<011FB512FCA3D9000713006E5A1401B3B3A6123FEA -7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7 -FC3800FFF8EB3FC026407CBD2F>IIIIIII -III<003FB91280A3903AF0 -007FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00 -E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>IIII<007F -B5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C -6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BED -F81E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFE -ED71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E0238 -6D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E00 -076DEC7FFFB500FC0103B512FEA33F3E7EBD44>II<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EED -FF80A2003C4A1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FC -A24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA2 -495A495A173C495AA24890C8FC485A1778485A484815F8A24848140116034848140F4848 -143FED01FFB8FCA32E3E7BBD38>I -I<486C13C00003130101001380481303000EEB070048130E0018130C0038131C00301318 -0070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133F -A2003F131F01C013E0390F0007801C1C73BE2D>II<1318133C137E13FF3801E7803803C3C0380781E0380F00F0001E1378 -48133C48131E48130F00601306180D76BD2D>I96 -DII< -49B4FC010F13E090383F00F8017C131E4848131F4848137F0007ECFF80485A5B121FA248 -48EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C1307 -6C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D901FEC7FC222A7DA828 ->IIII<167C903903F801FF903A1FFF078F8090397E0FDE1F9038 -F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D13FE00 -075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA2 -7F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E14004815 -7E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017F -C7FC90383FFFFC010313C0293D7EA82D>III<1478EB01FEA2EB -03FFA4EB01FEA2EB00781400AC147FEB7FFFA313017F147FB3B3A5123E127F38FF807E14 -FEA214FCEB81F8EA7F01387C03F0381E07C0380FFF803801FC00185185BD1C>III<2701F801FE14FF00FF902707FFC0 -0313E0913B1E07E00F03F0913B7803F03C01F80007903BE001F87000FC2603F9C06D487F -000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F8 -7FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FFC091381E07E091387803F0 -00079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8 -F87F13FCA32E287DA733>I<14FF010713E090381F81F890387E007E01F8131F4848EB0F -804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C -15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D800 -7EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901FC03FC00FF90381F -FF8091387C0FE09039FDE003F03A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC0 -17E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001 -F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733 ->I<02FF131C0107EBC03C90381F80F090397F00387C01FC131CD803F8130E4848EB0FFC -150748481303121F485A1501485AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C13 -0F6C7E6C6C133DD8007E137990383F81F190380FFFC1903801FE0190C7FCAD4B7E92B512 -F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB -1401EC00FC01FF1330491300A35BB3A5487EB512FEA31F287EA724>I<90383FC0603901 -FFF8E03807C03F381F000F003E1307003C1303127C0078130112F81400A27E7E7E6D1300 -EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF8 -00E01303A214017E1400A27E15F07E14016C14E06CEB03C0903880078039F3E01F0038E0 -FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA213FCA2120112031207001FB512C0 -B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB7F03013F138090381F8700EB07FE -EB01F81B397EB723>IIIIII<001FB61280 -A2EBE0000180140049485A001E495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FC -C6485AA2495A495A130F5C495A90393FC00380A2EB7F80EBFF005A5B4848130712074914 -00485A48485BA248485B4848137F00FF495A90B6FCA221277EA628>III E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fv cmbx12 20.736 9 -/Fv 9 117 df45 D<96267FFFE01670063FB6ED01F80503B700 -F01403053F04FC14074CB96C130F040706E0131F043F72133F93BA00FC137F0303DC0007 -6D13FF030F03C09039003FFF814B02FCC8000713C3037F02E0030113F792B600806F6CB5 -FC02034ACA121F4A02F8834A02E0834A4A1701027F4A8391B548CC7E494A85495C4C8549 -88494A85494A85495C8A4991CDFC90B54886A2484A1B7FA2481E3F5D481E1F5D5A1F0FA2 -485CA3481E075DA2795A489BC9FCA45DA2B6FCB27EA26F0403BA12C0A47EA3816C96C800 -0302F8C7FCA36C80A36C80A27E817E817E817F6D80827F6D806D806D80826D6E606D806E -80021F6E5F6E02F05F6E806E02FE5F0200DAFFC05E6F02F04BB6FC031F02FE030713CF6F -DAFFE0021F138703039226FF8003B51201030093B6EAFC00043F4E133F040706E0131F04 -014E1307DC003F4CC71201050304F8EC0070DD003F038092C8FCDE007F01F0CCFC827A75 -F798>71 D73 -D77 -D80 -D105 D<902601FFF891380FFFE0B692B512FE05036E7E050F15E0053F15F8 -4D81932701FFF01F7F4CD900077FDC07FC6D80C66CDA0FF06D80011FDA1FC07F6D4A4882 -4CC8FC047E6F7F5EEDF9F85E03FB707F5E15FF5EA25EA293C9FCA45DB3B3A6B8D8E003B8 -1280A8614E79CD6C>110 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE -4C8093261FFC3F138093263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16 -F815FB16F016E015FF16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA6 -5DB3B3A2B812F8A8434E7ACD4F>114 D<15FFA75CA55CA45CA25CA25CA25CA25C91B5FC -A25B5B5B131F5B90B9FC120FBAFCA6D8000791C9FCB3B3A3F01FE0AE183F7014C07F187F -7014806D16FF826D4B13006E6D485AEEFE0F6E90B55A020F5D6E5D020115C06E6C5C031F -49C7FC030113F03B6E7CEC4B>116 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin - -%%EndSetup -%%Page: 1 1 -1 0 bop 150 1318 a Fv(GIMP-Prin)-5 b(t)p 150 1385 3600 -34 v 2515 1481 a Fu(The)30 b(prin)m(t)f(plugin)f(for)i(the)h(GIMP)2529 -1589 y(V)-8 b(ersion)30 b(4.2.7,)j(27)e(Octob)s(er)f(2001)150 -5068 y Ft(The)44 b(GIMP-Prin)l(t)h(Pro)7 b(ject)p 150 -5141 3600 17 v eop -%%Page: 2 2 -2 1 bop 150 4261 a Fu(Cop)m(yrigh)m(t)680 4258 y(c)655 -4261 y Fs(\015)108 b Fu(2001)j(Mic)m(hael)d(Sw)m(eet)h(\()p -Fr(mike@easysw.com)p Fu(\))c(and)j(Rob)s(ert)g(Kra)m(witz)150 -4371 y(\()p Fr(rlk@alum.mit.edu)p Fu(\))150 4505 y(P)m(ermission)30 -b(is)i(gran)m(ted)h(to)f(mak)m(e)i(and)d(distribute)f(v)m(erbatim)i -(copies)g(of)g(this)f(man)m(ual)h(pro)m(vided)f(the)150 -4615 y(cop)m(yrigh)m(t)g(notice)f(and)g(this)f(p)s(ermission)f(notice)i -(are)h(preserv)m(ed)f(on)h(all)e(copies.)150 4749 y(P)m(ermission)22 -b(is)g(gran)m(ted)j(to)f(cop)m(y)g(and)f(distribute)e(mo)s(di\014ed)h -(v)m(ersions)h(of)g(this)g(man)m(ual)g(under)f(the)h(con-)150 -4859 y(ditions)28 b(for)i(v)m(erbatim)f(cop)m(ying,)i(pro)m(vided)d -(that)j(the)f(en)m(tire)g(resulting)e(deriv)m(ed)h(w)m(ork)h(is)f -(distributed)150 4969 y(under)g(the)h(terms)h(of)f(a)h(p)s(ermission)c -(notice)k(iden)m(tical)e(to)i(this)e(one.)150 5103 y(P)m(ermission)i -(is)i(gran)m(ted)g(to)h(cop)m(y)g(and)f(distribute)d(translations)i(of) -i(this)e(man)m(ual)g(in)m(to)h(another)g(lan-)150 5213 -y(guage,)d(under)e(the)g(ab)s(o)m(v)m(e)i(conditions)d(for)i(mo)s -(di\014ed)d(v)m(ersions,)j(except)g(that)h(this)d(p)s(ermission)f -(notice)150 5322 y(ma)m(y)31 b(b)s(e)f(stated)h(in)e(a)i(translation)e -(appro)m(v)m(ed)i(b)m(y)f(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 -b(oundation.)p eop -%%Page: -1 3 --1 2 bop 3723 -116 a Fq(i)150 299 y Fp(Short)53 b(Con)l(ten)l(ts)150 -540 y Fq(Preface)34 b Fo(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h -(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)65 b -Fq(1)150 681 y(GNU)32 b(GENERAL)h(PUBLIC)h(LICENSE)41 -b Fo(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)f(.)g(.)72 b Fq(2)150 822 y(Cop)m(ying)33 b(summary)19 -b Fo(.)g(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) -g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)51 -b Fq(9)150 963 y(1)156 b(Ov)m(erview)20 b Fo(.)g(.)g(.)f(.)h(.)f(.)g(.) -h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)51 b Fq(10)150 -1104 y(2)156 b(Using)32 b(libgimpprin)m(t)g Fo(.)20 b(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)67 b Fq(11)150 1245 y(3)156 b(In)m(tegrating)32 -b(libgimpprin)m(t)15 b Fo(.)g(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) -h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)46 -b Fq(12)150 1386 y(4)156 b(F)-8 b(unctions)12 b Fo(.)19 -b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f -(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) -43 b Fq(15)150 1528 y(5)156 b(Programs)15 b Fo(.)j(.)i(.)f(.)h(.)f(.)g -(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) -f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)46 b -Fq(26)150 1669 y(6)156 b(Rep)s(orting)31 b(Bugs)41 b -Fo(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)71 -b Fq(32)150 1810 y(7)156 b(App)s(endices)38 b Fo(.)20 -b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)69 -b Fq(33)150 1951 y(App)s(endix)33 b(A)99 b(Dithering)26 -b Fo(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h -(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)59 -b Fq(34)150 2092 y(App)s(endix)33 b(B)103 b(W)-8 b(ea)m(ving)33 -b(for)f(inkjet)g(prin)m(ters)f Fo(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) -h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)61 b Fq(41)150 2233 y(App)s(endix)33 -b(C)102 b(ESC/P2)21 b Fo(.)g(.)f(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) -h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)53 b Fq(61)150 2374 y(App)s(endix)33 b(D)97 b(Adding)33 -b(a)f(new)h(prin)m(ter)22 b Fo(.)d(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g -(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)53 b Fq(74)150 -2516 y(Data)32 b(T)m(yp)s(e)i(and)e(V)-8 b(ariable)31 -b(Index)11 b Fo(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h -(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)42 b Fq(85)150 -2657 y(F)-8 b(unction)32 b(and)g(Macro)h(Index)i Fo(.)20 -b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f -(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)65 b Fq(86)150 2798 -y(Concept)34 b(Index)42 b Fo(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f -(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) -f(.)h(.)f(.)g(.)h(.)f(.)h(.)72 b Fq(89)p eop -%%Page: -2 4 --2 3 bop 3699 -116 a Fu(ii)150 299 y Fp(T)-13 b(able)54 -b(of)g(Con)l(ten)l(ts)150 641 y Ft(Preface)19 b Fo(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)63 -b Ft(1)150 911 y(GNU)45 b(GENERAL)g(PUBLIC)g(LICENSE)31 -b Fo(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)75 b Ft(2)449 -1048 y Fu(Pream)m(ble)16 b Fn(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)45 b Fu(2)449 1157 y(TERMS)29 -b(AND)j(CONDITIONS)d(F)m(OR)h(COPYING,)h(DISTRIBUTION)631 -1267 y(AND)g(MODIFICA)-8 b(TION)24 b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(3)449 1377 -y(Ho)m(w)31 b(to)g(Apply)e(These)h(T)-8 b(erms)30 b(to)h(Y)-8 -b(our)31 b(New)f(Programs)16 b Fn(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)46 b Fu(7)150 1619 y Ft(Cop)l(ying)g(summary)12 -b Fo(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g -(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)56 -b Ft(9)150 1889 y(1)135 b(Ov)l(erview)14 b Fo(.)20 b(.)g(.)f(.)h(.)f(.) -g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h -(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)58 b Ft(10)150 -2159 y(2)135 b(Using)45 b(libgimpprin)l(t)14 b Fo(.)21 -b(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)g(.)h(.)59 b Ft(11)449 2296 y Fu(2.1)92 -b(Co)s(de)30 b(prerequisites)10 b Fn(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b Fu(11)449 -2405 y(2.2)92 b(Linking)28 b(with)h(libgimpprin)m(t)12 -b Fn(.)e(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 -b Fu(11)150 2648 y Ft(3)135 b(In)l(tegrating)47 b(libgimpprin)l(t)11 -b Fo(.)20 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)56 b Ft(12)449 2785 y Fu(3.1)92 b Fr(gimpprint-config)17 -b Fn(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)46 b Fu(12)449 2894 y(3.2)92 b Fr(make)22 -b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)52 -b Fu(13)449 3004 y(3.3)92 b Fr(autoconf)14 b Fn(.)f(.)i(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)43 b Fu(13)449 3113 y(3.4)92 b Fr(automake)14 -b Fn(.)f(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fu(13)150 -3356 y Ft(4)135 b(F)-11 b(unctions)36 b Fo(.)19 b(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)82 b Ft(15)449 3493 y -Fu(4.1)92 b(Main)30 b(functions)14 b Fn(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 -b Fu(15)449 3602 y(4.2)92 b Fr(stp_vars_t)28 b Fu(functions)e -Fn(.)15 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -58 b Fu(15)449 3712 y(4.3)92 b(Dither)30 b(functions)10 -b Fn(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)39 b Fu(21)449 3822 y(4.4)92 b(Options)29 -b(functions)23 b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)53 b Fu(21)449 3931 y(4.5)92 -b(P)m(ap)s(er)30 b(functions)21 b Fn(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 -b Fu(21)449 4041 y(4.6)92 b(Prin)m(ter)29 b(functions)18 -b Fn(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)48 b Fu(22)449 4150 y(4.7)92 b(Settings)30 -b(functions)22 b Fn(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fu(24)449 4260 y(4.8)92 -b(V)-8 b(ersion)30 b(functions)13 b Fn(.)g(.)i(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 -b Fu(24)748 4369 y(4.8.1)93 b(V)-8 b(ersion)30 b(macros)20 -b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 -b Fu(25)748 4479 y(4.8.2)93 b(V)-8 b(ersion)30 b(v)-5 -b(ariables)27 b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -58 b Fu(25)p eop -%%Page: -3 5 --3 4 bop 3674 -116 a Fu(iii)150 83 y Ft(5)135 b(Programs)38 -b Fo(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)82 -b Ft(26)449 220 y Fu(5.1)92 b(The)30 b(GIMP)g(Prin)m(t)g(plugin)9 -b Fn(.)k(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 -b Fu(26)748 330 y(5.1.1)93 b(Preview)12 b Fn(.)i(.)h(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 -b Fu(26)748 439 y(5.1.2)93 b(Prin)m(ter)29 b(Settings)e -Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)56 -b Fu(27)748 549 y(5.1.3)93 b(P)m(osition)9 b Fn(.)14 -b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)39 b Fu(28)748 658 y(5.1.4)93 b(Scaling)27 -b Fn(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)58 b Fu(28)748 768 y(5.1.5)93 b(Image)31 -b(Settings)26 b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)56 b Fu(29)1047 878 y(5.1.5.1)93 b(Adjust)30 -b(Output)13 b Fn(.)g(.)i(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fu(29)1047 -987 y(5.1.5.2)93 b(Dither)30 b(Algorithm)25 b Fn(.)15 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)55 b Fu(30)748 1097 y(5.1.6)93 b(Action)30 -b(Buttons)15 b Fn(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)44 b Fu(31)449 1206 y(5.2)92 b(Ghostscript)30 b(driv)m(er)15 -b Fn(.)e(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)44 b Fu(31)449 1316 y(5.3)92 b(CUPS)29 -b(driv)m(er)15 b Fn(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b -Fu(31)150 1538 y Ft(6)135 b(Rep)t(orting)46 b(Bugs)12 -b Fo(.)19 b(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)57 b Ft(32)150 -1788 y(7)135 b(App)t(endices)13 b Fo(.)18 b(.)i(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -f(.)h(.)f(.)h(.)f(.)58 b Ft(33)150 2038 y(App)t(endix)44 -b(A)134 b(Dithering)25 b Fo(.)20 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h -(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)69 b Ft(34)150 -2287 y(App)t(endix)44 b(B)134 b(W)-11 b(ea)l(ving)46 -b(for)f(inkjet)g(prin)l(ters)10 b Fo(.)21 b(.)e(.)h(.)f(.)h(.)55 -b Ft(41)449 2424 y Fu(B.1)92 b(In)m(tro)s(duction)11 -b Fn(.)j(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fu(41)449 2534 -y(B.2)92 b(W)-8 b(ea)m(ving)32 b(algorithms)16 b Fn(.)e(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)45 -b Fu(42)748 2644 y(B.2.1)92 b(Simple)28 b(w)m(ea)m(ving)j(algorithms)16 -b Fn(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)46 b Fu(43)748 2753 y(B.2.2)92 b(P)m(erfect)32 -b(w)m(ea)m(ving)21 b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)50 b Fu(44)748 2863 y(B.2.3)92 b(W)-8 b(ea)m(ving)32 -b(collisions)15 b Fn(.)d(.)j(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 -b Fu(47)748 2972 y(B.2.4)92 b(What)32 b(mak)m(es)f(a)g(\\p)s(erfect")g -(w)m(ea)m(v)m(e?)19 b Fn(.)e(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)48 b Fu(48)748 3082 y(B.2.5)92 b(Ov)m(ersampling)17 -b Fn(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 -b Fu(57)150 3304 y Ft(App)t(endix)e(C)134 b(ESC/P2)35 -b Fo(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h -(.)f(.)h(.)f(.)g(.)h(.)f(.)79 b Ft(61)449 3441 y Fu(C.1)91 -b(In)m(tro)s(duction)29 b(to)i(ESC/P2)11 b Fn(.)k(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fu(61)449 3551 y(C.2)91 -b(Standard)29 b(commands)24 b Fn(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(61)449 3660 y(C.3)91 -b(Remote)32 b(Mo)s(de)e(Commands)23 b Fn(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)52 b Fu(66)449 3770 y(C.4)91 b(Appropriate)29 -b(Remote)j(Commands)22 b Fn(.)13 b(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 -b Fu(72)150 3992 y Ft(App)t(endix)44 b(D)134 b(Adding)44 -b(a)i(new)f(prin)l(ter)14 b Fo(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)59 b Ft(74)449 4129 y Fu(D.1)92 b(`)p Fr(printers.xml)p -Fu(')10 b Fn(.)i(.)j(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)39 b Fu(74)449 4239 y(D.2)92 -b(The)30 b(driv)m(er)f(\014le)17 b Fn(.)d(.)h(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)46 -b Fu(75)449 4348 y(D.3)92 b(Epson)29 b(inkjet)h(prin)m(ters)10 -b Fn(.)k(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)39 b Fu(75)449 4458 y(D.4)92 b(T)-8 b(uning)29 b(the)h(prin)m(ter)17 -b Fn(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)47 b Fu(81)449 4568 y(D.5)92 b(Canon)30 b(inkjet)f(prin)m -(ters)24 b Fn(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)54 b Fu(83)150 4790 y Ft(Data)46 b(T)l(yp)t(e)e(and)h(V)-11 -b(ariable)46 b(Index)21 b Fo(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) -g(.)h(.)f(.)h(.)f(.)66 b Ft(85)150 5040 y(F)-11 b(unction)44 -b(and)h(Macro)f(Index)11 b Fo(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) -g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)56 b Ft(86)150 -5289 y(Concept)45 b(Index)21 b Fo(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -f(.)h(.)f(.)h(.)65 b Ft(89)p eop -%%Page: 1 6 -1 5 bop 150 -116 a Fu(Preface)3264 b(1)150 299 y Fp(Preface)275 -533 y Fu(This)39 b(man)m(ual)h(do)s(cumen)m(ts)h(the)g(use)g(of)h(the)f -(GIMP-Prin)m(t)g(pac)m(k)-5 b(age,)46 b(fo)s(cusing)39 -b(mainly)h(on)h(the)150 643 y(libgimpprin)m(t)32 b(library)h(that)k(is) -e(the)h(core)h(of)f(GIMP-Prin)m(t.)57 b(P)m(arts)37 b(of)f(the)g(man)m -(ual)g(whic)m(h)f(describ)s(e)150 752 y(the)26 b(use)f(of)h -(libgimpprin)m(t)c(are)k(aimed)f(primarily)d(at)27 b(programmers,)f -(and)f(do)h(assume)g(that)g(the)g(reader)150 862 y(is)j(familiar)f -(with)g(C)i(programming,)f(and)g(using)g(standard)g(programming)f(to)s -(ols)i(on)g(GNU)h(or)f(UNIX)150 971 y(systems.)52 b(Other)34 -b(parts)g(of)g(the)h(man)m(ual)e(do)s(cumen)m(t)h(the)h(use)f(of)g(the) -h(programs)e(that)i(mak)m(e)h(up)d(the)150 1081 y(GIMP-Prin)m(t)f(pac)m -(k)-5 b(age,)34 b(and)e(assume)f(no)h(kno)m(wledge)g(other)g(than)g -(the)g(basics)f(of)i(using)d(a)i(shell)f(and)150 1191 -y(editor.)275 1325 y(The)39 b(b)s(est)h(w)m(a)m(y)h(to)g(learn)e(ho)m -(w)h(to)h(use)f(libgimpprin)m(t)c(in)j(y)m(our)h(o)m(wn)g(programs)g -(is)f(to)i(read)f(the)150 1435 y(man)m(ual)25 b(from)g(start)h(to)g -(\014nish,)f(using)f(the)h(examples)h(giv)m(en)f(in)f(the)i(text)h(to)f -(learn)f(ho)m(w)g(it)g(w)m(orks.)39 b(The)150 1544 y(bulk)29 -b(of)h(the)h(man)m(ual)e(can)i(b)s(e)f(used)f(as)i(a)g(reference)g -(once)g(one)f(understands)f(the)h(basics.)275 1679 y(The)e(man)m(ual)g -(is)f(split)g(in)m(to)i(sev)m(eral)g(parts)f(for)g(the)h(programmer.)40 -b(It)28 b(starts)h(with)f(a)h(simple)d(usage)150 1788 -y(example)e(of)g(ho)m(w)g(to)h(link)d(a)i(program)g(with)f(libgimpprin) -m(t,)e(then)j(ho)m(w)g(to)h(in)m(tegrate)g(this)e(in)m(to)h(pac)m(k)-5 -b(age)150 1898 y(build)28 b(scripts,)i(using)g Fr(make)p -Fu(,)g Fr(autoconf)f Fu(and)i Fr(automake)p Fu(.)40 b(This)30 -b(is)g(follo)m(w)m(ed)h(b)m(y)g(a)g(detailed)f(function)150 -2007 y(reference,)h(including)c(descriptions)h(of)j(all)e(the)i(data)g -(t)m(yp)s(es)f(used.)275 2142 y(F)-8 b(or)31 b(the)g(end-user,)e(there) -i(is)f(a)h(section)g(on)f(all)f(of)i(the)g(programs)f(that)h(come)h -(with)d(GIMP-Prin)m(t,)150 2252 y(including)e(the)k(GIMP)f -Fr(print)f Fu(plugin,)f(and)i(the)g(CUPS)g(and)g(Ghostscript)g(driv)m -(ers.)275 2386 y(The)c(app)s(endices)g(at)i(the)g(end)f(of)g(the)h(man) -m(ual)f(detail)f(the)i(dither)e(and)h(w)m(ea)m(v)m(e)i(algorithms)e -(used)f(in)150 2496 y(libgimpprin)m(t,)g(the)31 b(ESC/P2)f(prin)m(ter)f -(con)m(trol)i(language)f(used)g(in)f(Epson)g(prin)m(ters)g(and)h(ho)m -(w)g(to)i(add)150 2605 y(supp)s(ort)d(for)h(a)h(new)e(prin)m(ter)g(to)j -(libgimpprin)m(t.)1182 2934 y(W)-8 b(e)31 b(hop)s(e)f(y)m(ou)h(enjo)m -(y)g(using)d(GIMP-Prin)m(t!)1413 3044 y(|The)i(GIMP-Prin)m(t)g(pro)5 -b(ject)p eop -%%Page: 2 7 -2 6 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(2)150 299 y Fp(GNU)54 b(GENERAL)g(PUBLIC)f(LICENSE)1537 -564 y Fu(V)-8 b(ersion)30 b(2,)h(June)f(1991)390 720 -y(Cop)m(yrigh)m(t)842 717 y(c)817 720 y Fs(\015)g Fu(1989,)j(1991)f(F) --8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)30 b(Inc.)390 -824 y(675)i(Mass)e(Av)m(e,)i(Cam)m(bridge,)e(MA)h(02139,)h(USA)390 -1032 y(Ev)m(ery)m(one)f(is)f(p)s(ermitted)f(to)i(cop)m(y)g(and)f -(distribute)e(v)m(erbatim)i(copies)390 1135 y(of)h(this)e(license)g(do) -s(cumen)m(t,)i(but)e(c)m(hanging)i(it)f(is)f(not)i(allo)m(w)m(ed.)150 -1462 y Ft(Pream)l(ble)275 1683 y Fu(The)39 b(licenses)h(for)g(most)h -(soft)m(w)m(are)g(are)g(designed)e(to)i(tak)m(e)h(a)m(w)m(a)m(y)h(y)m -(our)d(freedom)g(to)h(share)g(and)150 1793 y(c)m(hange)g(it.)70 -b(By)40 b(con)m(trast,)k(the)c(GNU)h(General)f(Public)e(License)i(is)f -(in)m(tended)g(to)h(guaran)m(tee)i(y)m(our)150 1902 y(freedom)24 -b(to)h(share)f(and)f(c)m(hange)i(free)f(soft)m(w)m(are|to)j(mak)m(e)e -(sure)e(the)h(soft)m(w)m(are)i(is)d(free)h(for)g(all)f(its)h(users.)150 -2012 y(This)38 b(General)i(Public)d(License)j(applies)e(to)i(most)g(of) -g(the)g(F)-8 b(ree)41 b(Soft)m(w)m(are)g(F)-8 b(oundation's)39 -b(soft)m(w)m(are)150 2121 y(and)c(to)h(an)m(y)g(other)g(program)f -(whose)h(authors)f(commit)g(to)i(using)d(it.)55 b(\(Some)36 -b(other)g(F)-8 b(ree)37 b(Soft)m(w)m(are)150 2231 y(F)-8 -b(oundation)31 b(soft)m(w)m(are)i(is)d(co)m(v)m(ered)j(b)m(y)e(the)g -(GNU)h(Library)e(General)h(Public)e(License)h(instead.\))43 -b(Y)-8 b(ou)150 2340 y(can)31 b(apply)e(it)h(to)h(y)m(our)f(programs,)g -(to)s(o.)275 2503 y(When)37 b(w)m(e)g(sp)s(eak)g(of)g(free)h(soft)m(w)m -(are,)i(w)m(e)e(are)g(referring)d(to)j(freedom,)h(not)f(price.)60 -b(Our)36 b(General)150 2612 y(Public)c(Licenses)h(are)i(designed)e(to)i -(mak)m(e)g(sure)f(that)g(y)m(ou)h(ha)m(v)m(e)g(the)g(freedom)f(to)g -(distribute)e(copies)150 2722 y(of)k(free)h(soft)m(w)m(are)g(\(and)f(c) -m(harge)i(for)e(this)f(service)h(if)f(y)m(ou)i(wish\),)g(that)f(y)m(ou) -h(receiv)m(e)g(source)f(co)s(de)h(or)150 2832 y(can)e(get)h(it)e(if)f -(y)m(ou)i(w)m(an)m(t)h(it,)f(that)g(y)m(ou)g(can)g(c)m(hange)h(the)e -(soft)m(w)m(are)i(or)f(use)f(pieces)h(of)f(it)g(in)g(new)g(free)150 -2941 y(programs;)c(and)g(that)h(y)m(ou)g(kno)m(w)f(y)m(ou)h(can)f(do)h -(these)g(things.)275 3104 y(T)-8 b(o)40 b(protect)h(y)m(our)f(righ)m -(ts,)i(w)m(e)e(need)g(to)h(mak)m(e)g(restrictions)d(that)j(forbid)d(an) -m(y)m(one)j(to)g(den)m(y)f(y)m(ou)150 3213 y(these)d(righ)m(ts)f(or)g -(to)h(ask)g(y)m(ou)f(to)h(surrender)e(the)h(righ)m(ts.)58 -b(These)36 b(restrictions)f(translate)i(to)g(certain)150 -3323 y(resp)s(onsibilities)25 b(for)31 b(y)m(ou)f(if)g(y)m(ou)g -(distribute)e(copies)i(of)h(the)f(soft)m(w)m(are,)j(or)d(if)f(y)m(ou)i -(mo)s(dify)e(it.)275 3485 y(F)-8 b(or)30 b(example,)f(if)g(y)m(ou)g -(distribute)e(copies)j(of)f(suc)m(h)g(a)h(program,)g(whether)e(gratis)i -(or)f(for)g(a)h(fee,)h(y)m(ou)150 3595 y(m)m(ust)i(giv)m(e)h(the)g -(recipien)m(ts)e(all)h(the)g(righ)m(ts)g(that)h(y)m(ou)g(ha)m(v)m(e.)51 -b(Y)-8 b(ou)34 b(m)m(ust)g(mak)m(e)g(sure)f(that)h(they)-8 -b(,)35 b(to)s(o,)150 3704 y(receiv)m(e)j(or)g(can)g(get)g(the)g(source) -g(co)s(de.)62 b(And)37 b(y)m(ou)h(m)m(ust)f(sho)m(w)h(them)f(these)h -(terms)f(so)h(they)g(kno)m(w)150 3814 y(their)29 b(righ)m(ts.)275 -3976 y(W)-8 b(e)29 b(protect)g(y)m(our)f(righ)m(ts)f(with)g(t)m(w)m(o)i -(steps:)40 b(\(1\))29 b(cop)m(yrigh)m(t)f(the)g(soft)m(w)m(are,)j(and)c -(\(2\))i(o\013er)g(y)m(ou)f(this)150 4086 y(license)h(whic)m(h)g(giv)m -(es)i(y)m(ou)g(legal)f(p)s(ermission)d(to)k(cop)m(y)-8 -b(,)32 b(distribute)c(and/or)i(mo)s(dify)f(the)i(soft)m(w)m(are.)275 -4248 y(Also,)45 b(for)d(eac)m(h)i(author's)f(protection)f(and)g(ours,)j -(w)m(e)e(w)m(an)m(t)h(to)f(mak)m(e)h(certain)e(that)h(ev)m(ery)m(one) -150 4358 y(understands)29 b(that)j(there)f(is)f(no)h(w)m(arran)m(t)m(y) -h(for)f(this)f(free)h(soft)m(w)m(are.)44 b(If)30 b(the)i(soft)m(w)m -(are)g(is)e(mo)s(di\014ed)f(b)m(y)150 4467 y(someone)i(else)e(and)g -(passed)h(on,)g(w)m(e)g(w)m(an)m(t)h(its)e(recipien)m(ts)g(to)h(kno)m -(w)g(that)g(what)g(they)g(ha)m(v)m(e)h(is)e(not)h(the)150 -4577 y(original,)e(so)h(that)g(an)m(y)h(problems)d(in)m(tro)s(duced)g -(b)m(y)i(others)g(will)d(not)j(re\015ect)h(on)f(the)g(original)e -(authors')150 4686 y(reputations.)275 4849 y(Finally)-8 -b(,)24 b(an)m(y)h(free)f(program)g(is)g(threatened)g(constan)m(tly)h(b) -m(y)g(soft)m(w)m(are)h(paten)m(ts.)39 b(W)-8 b(e)26 b(wish)c(to)j(a)m -(v)m(oid)150 4958 y(the)30 b(danger)g(that)h(redistributors)c(of)k(a)f -(free)h(program)f(will)d(individually)e(obtain)30 b(paten)m(t)h -(licenses,)e(in)150 5068 y(e\013ect)39 b(making)e(the)h(program)f -(proprietary)-8 b(.)62 b(T)-8 b(o)38 b(prev)m(en)m(t)g(this,)h(w)m(e)f -(ha)m(v)m(e)h(made)f(it)f(clear)g(that)i(an)m(y)150 5178 -y(paten)m(t)31 b(m)m(ust)g(b)s(e)e(licensed)g(for)h(ev)m(ery)m(one's)i -(free)f(use)f(or)g(not)h(licensed)e(at)i(all.)275 5340 -y(The)e(precise)h(terms)g(and)g(conditions)f(for)h(cop)m(ying,)h -(distribution)26 b(and)k(mo)s(di\014cation)f(follo)m(w.)p -eop -%%Page: 3 8 -3 7 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(3)150 166 y Ft(TERMS)44 b(AND)h(CONDITIONS)g(F)l(OR)g(COPYING,)150 -299 y(DISTRIBUTION)f(AND)h(MODIFICA)-11 b(TION)199 515 -y Fu(1.)61 b(This)41 b(License)h(applies)e(to)k(an)m(y)f(program)f(or)g -(other)h(w)m(ork)g(whic)m(h)e(con)m(tains)i(a)g(notice)f(placed)330 -625 y(b)m(y)33 b(the)h(cop)m(yrigh)m(t)g(holder)e(sa)m(ying)i(it)f(ma)m -(y)h(b)s(e)f(distributed)e(under)h(the)h(terms)h(of)g(this)e(General) -330 735 y(Public)37 b(License.)67 b(The)39 b(\\Program",)j(b)s(elo)m -(w,)f(refers)e(to)h(an)m(y)g(suc)m(h)f(program)g(or)g(w)m(ork,)j(and)d -(a)330 844 y(\\w)m(ork)29 b(based)f(on)h(the)g(Program")g(means)f -(either)h(the)f(Program)h(or)g(an)m(y)g(deriv)-5 b(ativ)m(e)28 -b(w)m(ork)g(under)330 954 y(cop)m(yrigh)m(t)k(la)m(w:)42 -b(that)32 b(is)e(to)j(sa)m(y)-8 b(,)33 b(a)e(w)m(ork)h(con)m(taining)f -(the)g(Program)h(or)f(a)h(p)s(ortion)e(of)h(it,)g(either)330 -1063 y(v)m(erbatim)e(or)g(with)e(mo)s(di\014cations)g(and/or)i -(translated)g(in)m(to)g(another)g(language.)40 b(\(Hereinafter,)330 -1173 y(translation)26 b(is)g(included)f(without)h(limitation)f(in)h -(the)h(term)g(\\mo)s(di\014cation".\))40 b(Eac)m(h)27 -b(licensee)g(is)330 1282 y(addressed)i(as)i(\\y)m(ou".)330 -1429 y(Activities)38 b(other)h(than)f(cop)m(ying,)k(distribution)35 -b(and)j(mo)s(di\014cation)f(are)i(not)g(co)m(v)m(ered)h(b)m(y)f(this) -330 1538 y(License;)33 b(they)g(are)f(outside)g(its)f(scop)s(e.)47 -b(The)32 b(act)h(of)g(running)c(the)k(Program)f(is)f(not)i(restricted,) -330 1648 y(and)24 b(the)g(output)g(from)g(the)h(Program)f(is)g(co)m(v)m -(ered)i(only)d(if)g(its)h(con)m(ten)m(ts)i(constitute)f(a)g(w)m(ork)f -(based)330 1758 y(on)h(the)h(Program)f(\(indep)s(enden)m(t)f(of)i(ha)m -(ving)f(b)s(een)f(made)i(b)m(y)f(running)e(the)i(Program\).)40 -b(Whether)330 1867 y(that)31 b(is)e(true)i(dep)s(ends)d(on)i(what)h -(the)f(Program)h(do)s(es.)199 2014 y(2.)61 b(Y)-8 b(ou)42 -b(ma)m(y)g(cop)m(y)g(and)e(distribute)f(v)m(erbatim)i(copies)g(of)h -(the)f(Program's)h(source)f(co)s(de)h(as)g(y)m(ou)330 -2123 y(receiv)m(e)32 b(it,)f(in)f(an)m(y)h(medium,)f(pro)m(vided)g -(that)h(y)m(ou)h(conspicuously)d(and)h(appropriately)g(publish)330 -2233 y(on)j(eac)m(h)h(cop)m(y)g(an)f(appropriate)f(cop)m(yrigh)m(t)i -(notice)f(and)g(disclaimer)d(of)k(w)m(arran)m(t)m(y;)h(k)m(eep)f(in)m -(tact)330 2342 y(all)d(the)g(notices)h(that)h(refer)e(to)h(this)f -(License)g(and)g(to)i(the)f(absence)g(of)g(an)m(y)g(w)m(arran)m(t)m(y;) -h(and)e(giv)m(e)330 2452 y(an)m(y)g(other)f(recipien)m(ts)g(of)g(the)h -(Program)f(a)h(cop)m(y)g(of)g(this)e(License)h(along)g(with)f(the)i -(Program.)330 2598 y(Y)-8 b(ou)31 b(ma)m(y)g(c)m(harge)h(a)f(fee)g(for) -f(the)h(ph)m(ysical)e(act)j(of)f(transferring)e(a)i(cop)m(y)-8 -b(,)32 b(and)e(y)m(ou)h(ma)m(y)g(at)g(y)m(our)330 2708 -y(option)f(o\013er)h(w)m(arran)m(t)m(y)g(protection)g(in)e(exc)m(hange) -j(for)e(a)g(fee.)199 2854 y(3.)61 b(Y)-8 b(ou)24 b(ma)m(y)h(mo)s(dify)d -(y)m(our)i(cop)m(y)g(or)g(copies)g(of)g(the)g(Program)g(or)g(an)m(y)g -(p)s(ortion)e(of)i(it,)h(th)m(us)f(forming)f(a)330 2964 -y(w)m(ork)k(based)g(on)f(the)h(Program,)h(and)f(cop)m(y)g(and)g -(distribute)d(suc)m(h)j(mo)s(di\014cations)e(or)h(w)m(ork)h(under)330 -3074 y(the)k(terms)f(of)g(Section)h(1)f(ab)s(o)m(v)m(e,)i(pro)m(vided)d -(that)i(y)m(ou)g(also)f(meet)h(all)f(of)g(these)h(conditions:)379 -3220 y(a.)61 b(Y)-8 b(ou)43 b(m)m(ust)f(cause)i(the)e(mo)s(di\014ed)f -(\014les)g(to)i(carry)g(prominen)m(t)e(notices)i(stating)f(that)i(y)m -(ou)510 3330 y(c)m(hanged)31 b(the)g(\014les)e(and)h(the)g(date)h(of)g -(an)m(y)g(c)m(hange.)374 3476 y(b.)60 b(Y)-8 b(ou)31 -b(m)m(ust)g(cause)g(an)m(y)h(w)m(ork)f(that)g(y)m(ou)g(distribute)d(or) -j(publish,)d(that)j(in)f(whole)g(or)h(in)e(part)510 3586 -y(con)m(tains)35 b(or)h(is)e(deriv)m(ed)g(from)h(the)g(Program)g(or)g -(an)m(y)h(part)f(thereof,)i(to)f(b)s(e)e(licensed)g(as)i(a)510 -3695 y(whole)30 b(at)h(no)f(c)m(harge)i(to)f(all)e(third)f(parties)i -(under)f(the)i(terms)f(of)g(this)g(License.)384 3842 -y(c.)61 b(If)39 b(the)h(mo)s(di\014ed)e(program)h(normally)f(reads)i -(commands)f(in)m(teractiv)m(ely)h(when)f(run,)i(y)m(ou)510 -3951 y(m)m(ust)30 b(cause)h(it,)f(when)g(started)h(running)c(for)k(suc) -m(h)f(in)m(teractiv)m(e)h(use)f(in)f(the)i(most)g(ordinary)510 -4061 y(w)m(a)m(y)-8 b(,)25 b(to)d(prin)m(t)e(or)h(displa)m(y)f(an)h -(announcemen)m(t)g(including)d(an)k(appropriate)e(cop)m(yrigh)m(t)i -(notice)510 4170 y(and)i(a)g(notice)h(that)f(there)h(is)e(no)h(w)m -(arran)m(t)m(y)h(\(or)g(else,)g(sa)m(ying)f(that)h(y)m(ou)g(pro)m(vide) -e(a)i(w)m(arran)m(t)m(y\))510 4280 y(and)35 b(that)g(users)g(ma)m(y)g -(redistribute)e(the)j(program)f(under)e(these)j(conditions,)f(and)g -(telling)510 4390 y(the)f(user)f(ho)m(w)h(to)g(view)f(a)i(cop)m(y)f(of) -g(this)f(License.)50 b(\(Exception:)e(if)32 b(the)i(Program)g(itself)f -(is)510 4499 y(in)m(teractiv)m(e)i(but)e(do)s(es)h(not)g(normally)e -(prin)m(t)h(suc)m(h)g(an)h(announcemen)m(t,)h(y)m(our)f(w)m(ork)g -(based)510 4609 y(on)c(the)h(Program)f(is)g(not)g(required)f(to)i(prin) -m(t)e(an)h(announcemen)m(t.\))330 4792 y(These)41 b(requiremen)m(ts)g -(apply)f(to)i(the)g(mo)s(di\014ed)e(w)m(ork)h(as)h(a)g(whole.)73 -b(If)42 b(iden)m(ti\014able)d(sections)330 4902 y(of)j(that)h(w)m(ork)g -(are)f(not)h(deriv)m(ed)e(from)h(the)h(Program,)i(and)d(can)h(b)s(e)e -(reasonably)h(considered)330 5011 y(indep)s(enden)m(t)24 -b(and)j(separate)g(w)m(orks)g(in)e(themselv)m(es,)j(then)e(this)g -(License,)h(and)f(its)h(terms,)g(do)g(not)330 5121 y(apply)36 -b(to)i(those)f(sections)g(when)g(y)m(ou)g(distribute)e(them)i(as)g -(separate)h(w)m(orks.)61 b(But)37 b(when)g(y)m(ou)330 -5230 y(distribute)27 b(the)i(same)g(sections)h(as)f(part)g(of)g(a)h -(whole)e(whic)m(h)g(is)g(a)h(w)m(ork)h(based)e(on)h(the)h(Program,)330 -5340 y(the)h(distribution)d(of)j(the)h(whole)e(m)m(ust)h(b)s(e)g(on)g -(the)g(terms)g(of)h(this)e(License,)h(whose)g(p)s(ermissions)p -eop -%%Page: 4 9 -4 8 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(4)330 299 y(for)22 b(other)h(licensees)e(extend)i(to)g(the)f(en)m -(tire)g(whole,)i(and)d(th)m(us)h(to)h(eac)m(h)h(and)d(ev)m(ery)i(part)g -(regardless)330 408 y(of)31 b(who)e(wrote)i(it.)330 538 -y(Th)m(us,)48 b(it)d(is)f(not)i(the)f(in)m(ten)m(t)g(of)h(this)e -(section)h(to)h(claim)f(righ)m(ts)f(or)h(con)m(test)i(y)m(our)f(righ)m -(ts)e(to)330 648 y(w)m(ork)34 b(written)e(en)m(tirely)h(b)m(y)h(y)m -(ou;)h(rather,)g(the)f(in)m(ten)m(t)g(is)e(to)j(exercise)e(the)h(righ)m -(t)f(to)i(con)m(trol)f(the)330 757 y(distribution)27 -b(of)j(deriv)-5 b(ativ)m(e)30 b(or)h(collectiv)m(e)f(w)m(orks)h(based)f -(on)g(the)h(Program.)330 887 y(In)41 b(addition,)h(mere)f(aggregation)i -(of)f(another)f(w)m(ork)g(not)h(based)f(on)g(the)g(Program)h(with)e -(the)330 996 y(Program)22 b(\(or)g(with)e(a)i(w)m(ork)g(based)f(on)h -(the)g(Program\))g(on)f(a)h(v)m(olume)g(of)g(a)g(storage)h(or)f -(distribution)330 1106 y(medium)28 b(do)s(es)j(not)f(bring)f(the)h -(other)h(w)m(ork)f(under)f(the)i(scop)s(e)f(of)h(this)e(License.)199 -1235 y(4.)61 b(Y)-8 b(ou)38 b(ma)m(y)f(cop)m(y)h(and)f(distribute)d -(the)k(Program)f(\(or)g(a)h(w)m(ork)f(based)g(on)g(it,)i(under)c -(Section)i(2\))330 1345 y(in)29 b(ob)5 b(ject)31 b(co)s(de)g(or)g -(executable)g(form)f(under)e(the)j(terms)f(of)h(Sections)f(1)h(and)f(2) -h(ab)s(o)m(v)m(e)g(pro)m(vided)330 1455 y(that)g(y)m(ou)g(also)f(do)g -(one)h(of)f(the)h(follo)m(wing:)379 1584 y(a.)61 b(Accompan)m(y)47 -b(it)e(with)f(the)i(complete)g(corresp)s(onding)e(mac)m(hine-readable)h -(source)g(co)s(de,)510 1694 y(whic)m(h)25 b(m)m(ust)h(b)s(e)f -(distributed)e(under)h(the)j(terms)e(of)i(Sections)e(1)i(and)e(2)h(ab)s -(o)m(v)m(e)i(on)d(a)i(medium)510 1803 y(customarily)i(used)h(for)g -(soft)m(w)m(are)i(in)m(terc)m(hange;)f(or,)374 1933 y(b.)60 -b(Accompan)m(y)30 b(it)f(with)f(a)i(written)e(o\013er,)j(v)-5 -b(alid)27 b(for)i(at)i(least)e(three)h(y)m(ears,)g(to)g(giv)m(e)g(an)m -(y)g(third)510 2042 y(part)m(y)-8 b(,)32 b(for)f(a)h(c)m(harge)g(no)f -(more)h(than)f(y)m(our)g(cost)h(of)f(ph)m(ysically)f(p)s(erforming)f -(source)i(distri-)510 2152 y(bution,)c(a)h(complete)h(mac)m -(hine-readable)e(cop)m(y)h(of)g(the)g(corresp)s(onding)e(source)i(co)s -(de,)h(to)g(b)s(e)510 2262 y(distributed)i(under)i(the)h(terms)g(of)h -(Sections)f(1)g(and)g(2)h(ab)s(o)m(v)m(e)g(on)f(a)h(medium)d -(customarily)510 2371 y(used)e(for)g(soft)m(w)m(are)i(in)m(terc)m -(hange;)f(or,)384 2501 y(c.)61 b(Accompan)m(y)33 b(it)e(with)g(the)h -(information)e(y)m(ou)i(receiv)m(ed)g(as)g(to)g(the)g(o\013er)g(to)h -(distribute)c(cor-)510 2610 y(resp)s(onding)i(source)i(co)s(de.)50 -b(\(This)31 b(alternativ)m(e)j(is)e(allo)m(w)m(ed)h(only)g(for)g -(noncommercial)f(dis-)510 2720 y(tribution)e(and)h(only)g(if)g(y)m(ou)i -(receiv)m(ed)f(the)g(program)g(in)f(ob)5 b(ject)33 b(co)s(de)f(or)g -(executable)g(form)510 2829 y(with)d(suc)m(h)h(an)g(o\013er,)h(in)e -(accord)j(with)d(Subsection)g(b)h(ab)s(o)m(v)m(e.\))330 -2979 y(The)j(source)h(co)s(de)g(for)f(a)h(w)m(ork)g(means)f(the)h -(preferred)e(form)h(of)h(the)g(w)m(ork)f(for)h(making)f(mo)s(di\014-) -330 3088 y(cations)e(to)g(it.)40 b(F)-8 b(or)31 b(an)f(executable)h(w)m -(ork,)g(complete)f(source)h(co)s(de)f(means)h(all)e(the)h(source)h(co)s -(de)330 3198 y(for)25 b(all)g(mo)s(dules)f(it)h(con)m(tains,)i(plus)c -(an)m(y)j(asso)s(ciated)g(in)m(terface)h(de\014nition)c(\014les,)j -(plus)d(the)j(scripts)330 3308 y(used)41 b(to)i(con)m(trol)g -(compilation)d(and)i(installation)e(of)i(the)h(executable.)76 -b(Ho)m(w)m(ev)m(er,)48 b(as)42 b(a)g(sp)s(e-)330 3417 -y(cial)30 b(exception,)i(the)f(source)g(co)s(de)g(distributed)d(need)i -(not)h(include)e(an)m(ything)h(that)i(is)e(normally)330 -3527 y(distributed)37 b(\(in)h(either)h(source)h(or)f(binary)f(form\))i -(with)e(the)i(ma)5 b(jor)39 b(comp)s(onen)m(ts)h(\(compiler,)330 -3636 y(k)m(ernel,)35 b(and)f(so)g(on\))g(of)h(the)f(op)s(erating)g -(system)g(on)g(whic)m(h)f(the)h(executable)h(runs,)f(unless)e(that)330 -3746 y(comp)s(onen)m(t)f(itself)e(accompanies)i(the)f(executable.)330 -3875 y(If)39 b(distribution)c(of)40 b(executable)g(or)f(ob)5 -b(ject)40 b(co)s(de)f(is)g(made)g(b)m(y)g(o\013ering)g(access)h(to)g -(cop)m(y)g(from)330 3985 y(a)e(designated)f(place,)i(then)f(o\013ering) -f(equiv)-5 b(alen)m(t)37 b(access)h(to)h(cop)m(y)f(the)f(source)h(co)s -(de)g(from)f(the)330 4095 y(same)29 b(place)f(coun)m(ts)g(as)h -(distribution)24 b(of)k(the)h(source)f(co)s(de,)h(ev)m(en)g(though)e -(third)g(parties)g(are)i(not)330 4204 y(comp)s(elled)g(to)i(cop)m(y)g -(the)g(source)f(along)h(with)e(the)h(ob)5 b(ject)31 b(co)s(de.)199 -4334 y(5.)61 b(Y)-8 b(ou)35 b(ma)m(y)h(not)f(cop)m(y)-8 -b(,)37 b(mo)s(dify)-8 b(,)35 b(sublicense,)f(or)g(distribute)f(the)i -(Program)f(except)i(as)f(expressly)330 4443 y(pro)m(vided)k(under)g -(this)h(License.)70 b(An)m(y)41 b(attempt)h(otherwise)e(to)h(cop)m(y)-8 -b(,)45 b(mo)s(dify)-8 b(,)42 b(sublicense)c(or)330 4553 -y(distribute)24 b(the)j(Program)g(is)e(v)m(oid,)i(and)f(will)e -(automatically)j(terminate)f(y)m(our)h(righ)m(ts)f(under)f(this)330 -4663 y(License.)70 b(Ho)m(w)m(ev)m(er,)45 b(parties)40 -b(who)g(ha)m(v)m(e)h(receiv)m(ed)g(copies,)i(or)d(righ)m(ts,)j(from)d -(y)m(ou)g(under)f(this)330 4772 y(License)d(will)e(not)j(ha)m(v)m(e)h -(their)e(licenses)f(terminated)i(so)g(long)f(as)h(suc)m(h)f(parties)g -(remain)g(in)f(full)330 4882 y(compliance.)199 5011 y(6.)61 -b(Y)-8 b(ou)38 b(are)g(not)g(required)d(to)j(accept)h(this)e(License,)i -(since)e(y)m(ou)g(ha)m(v)m(e)i(not)f(signed)e(it.)62 -b(Ho)m(w)m(ev)m(er,)330 5121 y(nothing)23 b(else)g(gran)m(ts)i(y)m(ou)f -(p)s(ermission)c(to)25 b(mo)s(dify)d(or)h(distribute)f(the)i(Program)g -(or)f(its)g(deriv)-5 b(ativ)m(e)330 5230 y(w)m(orks.)38 -b(These)23 b(actions)g(are)h(prohibited)c(b)m(y)j(la)m(w)g(if)f(y)m(ou) -h(do)g(not)h(accept)g(this)e(License.)38 b(Therefore,)330 -5340 y(b)m(y)e(mo)s(difying)d(or)j(distributing)c(the)k(Program)g(\(or) -h(an)m(y)f(w)m(ork)g(based)g(on)f(the)i(Program\),)h(y)m(ou)p -eop -%%Page: 5 10 -5 9 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(5)330 299 y(indicate)31 b(y)m(our)i(acceptance)h(of)f(this)e(License) -h(to)i(do)e(so,)h(and)f(all)f(its)h(terms)g(and)g(conditions)f(for)330 -408 y(cop)m(ying,)g(distributing)26 b(or)31 b(mo)s(difying)c(the)k -(Program)f(or)h(w)m(orks)f(based)g(on)g(it.)199 545 y(7.)61 -b(Eac)m(h)43 b(time)e(y)m(ou)h(redistribute)e(the)i(Program)g(\(or)g -(an)m(y)h(w)m(ork)f(based)f(on)h(the)g(Program\),)k(the)330 -655 y(recipien)m(t)31 b(automatically)i(receiv)m(es)g(a)g(license)e -(from)h(the)g(original)f(licensor)g(to)i(cop)m(y)-8 b(,)34 -b(distribute)330 765 y(or)i(mo)s(dify)f(the)h(Program)h(sub)5 -b(ject)36 b(to)h(these)g(terms)f(and)g(conditions.)57 -b(Y)-8 b(ou)37 b(ma)m(y)g(not)f(imp)s(ose)330 874 y(an)m(y)27 -b(further)f(restrictions)f(on)i(the)g(recipien)m(ts')f(exercise)h(of)g -(the)g(righ)m(ts)f(gran)m(ted)h(herein.)38 b(Y)-8 b(ou)28 -b(are)330 984 y(not)j(resp)s(onsible)c(for)j(enforcing)g(compliance)g -(b)m(y)g(third)e(parties)i(to)h(this)e(License.)199 1121 -y(8.)61 b(If,)27 b(as)g(a)g(consequence)h(of)f(a)g(court)g(judgmen)m(t) -f(or)h(allegation)f(of)h(paten)m(t)h(infringemen)m(t)c(or)j(for)g(an)m -(y)330 1230 y(other)h(reason)f(\(not)h(limited)d(to)j(paten)m(t)h -(issues\),)e(conditions)f(are)h(imp)s(osed)f(on)h(y)m(ou)h(\(whether)f -(b)m(y)330 1340 y(court)c(order,)h(agreemen)m(t)g(or)f(otherwise\))f -(that)h(con)m(tradict)h(the)e(conditions)f(of)i(this)f(License,)i(they) -330 1450 y(do)34 b(not)g(excuse)h(y)m(ou)f(from)g(the)g(conditions)f -(of)h(this)f(License.)52 b(If)33 b(y)m(ou)i(cannot)g(distribute)c(so)k -(as)330 1559 y(to)f(satisfy)f(sim)m(ultaneously)f(y)m(our)h -(obligations)g(under)f(this)g(License)h(and)g(an)m(y)h(other)g(p)s -(ertinen)m(t)330 1669 y(obligations,)41 b(then)f(as)g(a)g(consequence)h -(y)m(ou)f(ma)m(y)g(not)g(distribute)e(the)i(Program)g(at)g(all.)68 -b(F)-8 b(or)330 1778 y(example,)25 b(if)e(a)i(paten)m(t)g(license)e(w)m -(ould)g(not)h(p)s(ermit)f(ro)m(y)m(alt)m(y-free)j(redistribution)20 -b(of)k(the)h(Program)330 1888 y(b)m(y)35 b(all)f(those)h(who)f(receiv)m -(e)i(copies)f(directly)e(or)i(indirectly)e(through)h(y)m(ou,)i(then)f -(the)g(only)f(w)m(a)m(y)330 1998 y(y)m(ou)27 b(could)e(satisfy)h(b)s -(oth)f(it)h(and)g(this)f(License)h(w)m(ould)f(b)s(e)h(to)h(refrain)d -(en)m(tirely)i(from)g(distribution)330 2107 y(of)31 b(the)f(Program.) -330 2244 y(If)43 b(an)m(y)g(p)s(ortion)f(of)h(this)g(section)g(is)f -(held)g(in)m(v)-5 b(alid)41 b(or)i(unenforceable)f(under)g(an)m(y)i -(particular)330 2354 y(circumstance,)i(the)e(balance)f(of)g(the)h -(section)f(is)f(in)m(tended)g(to)i(apply)e(and)g(the)i(section)f(as)h -(a)330 2463 y(whole)30 b(is)f(in)m(tended)g(to)i(apply)e(in)g(other)i -(circumstances.)330 2600 y(It)41 b(is)e(not)i(the)f(purp)s(ose)f(of)i -(this)e(section)i(to)g(induce)e(y)m(ou)i(to)g(infringe)d(an)m(y)j -(paten)m(ts)g(or)g(other)330 2710 y(prop)s(ert)m(y)e(righ)m(t)h(claims) -e(or)i(to)h(con)m(test)h(v)-5 b(alidit)m(y)38 b(of)i(an)m(y)g(suc)m(h)g -(claims;)j(this)c(section)h(has)g(the)330 2819 y(sole)30 -b(purp)s(ose)e(of)j(protecting)f(the)g(in)m(tegrit)m(y)g(of)g(the)h -(free)f(soft)m(w)m(are)h(distribution)c(system,)j(whic)m(h)330 -2929 y(is)k(implemen)m(ted)g(b)m(y)h(public)d(license)i(practices.)55 -b(Man)m(y)36 b(p)s(eople)e(ha)m(v)m(e)i(made)f(generous)h(con)m(tri-) -330 3039 y(butions)e(to)i(the)f(wide)g(range)g(of)h(soft)m(w)m(are)h -(distributed)32 b(through)j(that)h(system)f(in)f(reliance)h(on)330 -3148 y(consisten)m(t)h(application)e(of)h(that)h(system;)i(it)d(is)g -(up)f(to)i(the)g(author/donor)f(to)h(decide)f(if)g(he)g(or)330 -3258 y(she)i(is)g(willing)d(to)k(distribute)d(soft)m(w)m(are)k(through) -e(an)m(y)g(other)h(system)g(and)f(a)g(licensee)g(cannot)330 -3367 y(imp)s(ose)29 b(that)i(c)m(hoice.)330 3504 y(This)25 -b(section)j(is)e(in)m(tended)g(to)i(mak)m(e)g(thoroughly)e(clear)h -(what)g(is)f(b)s(eliev)m(ed)g(to)i(b)s(e)f(a)g(consequence)330 -3614 y(of)k(the)f(rest)h(of)f(this)f(License.)199 3751 -y(9.)61 b(If)35 b(the)g(distribution)c(and/or)k(use)g(of)g(the)g -(Program)g(is)f(restricted)h(in)f(certain)h(coun)m(tries)f(either)330 -3861 y(b)m(y)h(paten)m(ts)h(or)g(b)m(y)f(cop)m(yrigh)m(ted)h(in)m -(terfaces,)h(the)e(original)f(cop)m(yrigh)m(t)i(holder)e(who)h(places)g -(the)330 3970 y(Program)h(under)f(this)g(License)h(ma)m(y)h(add)e(an)i -(explicit)d(geographical)j(distribution)32 b(limitation)330 -4080 y(excluding)27 b(those)i(coun)m(tries,)g(so)g(that)g(distribution) -c(is)i(p)s(ermitted)h(only)f(in)g(or)i(among)g(coun)m(tries)330 -4189 y(not)k(th)m(us)f(excluded.)47 b(In)32 b(suc)m(h)g(case,)j(this)c -(License)i(incorp)s(orates)f(the)h(limitation)d(as)j(if)f(written)330 -4299 y(in)d(the)i(b)s(o)s(dy)d(of)j(this)e(License.)154 -4436 y(10.)61 b(The)26 b(F)-8 b(ree)28 b(Soft)m(w)m(are)g(F)-8 -b(oundation)26 b(ma)m(y)i(publish)23 b(revised)i(and/or)i(new)f(v)m -(ersions)g(of)h(the)g(General)330 4545 y(Public)35 b(License)h(from)h -(time)g(to)g(time.)61 b(Suc)m(h)36 b(new)h(v)m(ersions)f(will)f(b)s(e)h -(similar)e(in)i(spirit)f(to)j(the)330 4655 y(presen)m(t)30 -b(v)m(ersion,)h(but)e(ma)m(y)i(di\013er)e(in)g(detail)h(to)h(address)e -(new)h(problems)f(or)h(concerns.)330 4792 y(Eac)m(h)46 -b(v)m(ersion)e(is)g(giv)m(en)h(a)g(distinguishing)40 -b(v)m(ersion)45 b(n)m(um)m(b)s(er.)83 b(If)44 b(the)h(Program)g(sp)s -(eci\014es)f(a)330 4902 y(v)m(ersion)35 b(n)m(um)m(b)s(er)g(of)h(this)e -(License)i(whic)m(h)e(applies)g(to)j(it)e(and)g(\\an)m(y)i(later)e(v)m -(ersion",)j(y)m(ou)e(ha)m(v)m(e)330 5011 y(the)d(option)f(of)h(follo)m -(wing)e(the)i(terms)g(and)f(conditions)f(either)i(of)g(that)g(v)m -(ersion)f(or)h(of)g(an)m(y)g(later)330 5121 y(v)m(ersion)d(published)c -(b)m(y)k(the)g(F)-8 b(ree)31 b(Soft)m(w)m(are)g(F)-8 -b(oundation.)41 b(If)29 b(the)i(Program)f(do)s(es)g(not)g(sp)s(ecify)f -(a)330 5230 y(v)m(ersion)e(n)m(um)m(b)s(er)g(of)h(this)e(License,)i(y)m -(ou)g(ma)m(y)h(c)m(ho)s(ose)f(an)m(y)h(v)m(ersion)e(ev)m(er)h -(published)c(b)m(y)k(the)g(F)-8 b(ree)330 5340 y(Soft)m(w)m(are)31 -b(F)-8 b(oundation.)p eop -%%Page: 6 11 -6 10 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(6)154 299 y(11.)61 b(If)29 b(y)m(ou)g(wish)f(to)i(incorp)s(orate)f -(parts)g(of)g(the)g(Program)h(in)m(to)f(other)h(free)f(programs)g -(whose)g(distri-)330 408 y(bution)e(conditions)g(are)j(di\013eren)m(t,) -e(write)g(to)i(the)f(author)f(to)i(ask)e(for)h(p)s(ermission.)37 -b(F)-8 b(or)29 b(soft)m(w)m(are)330 518 y(whic)m(h)23 -b(is)g(cop)m(yrigh)m(ted)h(b)m(y)g(the)g(F)-8 b(ree)25 -b(Soft)m(w)m(are)g(F)-8 b(oundation,)25 b(write)e(to)i(the)f(F)-8 -b(ree)25 b(Soft)m(w)m(are)g(F)-8 b(oun-)330 628 y(dation;)28 -b(w)m(e)g(sometimes)g(mak)m(e)g(exceptions)g(for)f(this.)39 -b(Our)26 b(decision)g(will)f(b)s(e)h(guided)h(b)m(y)g(the)h(t)m(w)m(o) -330 737 y(goals)23 b(of)g(preserving)e(the)h(free)h(status)g(of)f(all)g -(deriv)-5 b(ativ)m(es)22 b(of)g(our)g(free)h(soft)m(w)m(are)h(and)e(of) -h(promoting)330 847 y(the)31 b(sharing)e(and)g(reuse)h(of)h(soft)m(w)m -(are)h(generally)-8 b(.)330 1104 y Ft(NO)45 b(W)-15 b(ARRANTY)154 -1297 y Fu(12.)61 b(BECA)m(USE)40 b(THE)f(PR)m(OGRAM)i(IS)e(LICENSED)g -(FREE)g(OF)h(CHAR)m(GE,)h(THERE)e(IS)g(NO)330 1406 y(W)-10 -b(ARRANTY)26 b(F)m(OR)f(THE)g(PR)m(OGRAM,)h(TO)e(THE)h(EXTENT)f -(PERMITTED)h(BY)g(APPLI-)330 1516 y(CABLE)i(LA)-10 b(W.)27 -b(EX)m(CEPT)g(WHEN)h(OTHER)-10 b(WISE)25 b(ST)-8 b(A)g(TED)28 -b(IN)e(WRITING)i(THE)e(COPY-)330 1626 y(RIGHT)35 b(HOLDERS)g(AND/OR)h -(OTHER)f(P)-8 b(AR)g(TIES)35 b(PR)m(O)m(VIDE)h(THE)f(PR)m(OGRAM)h(\\AS) -330 1735 y(IS")22 b(WITHOUT)f(W)-10 b(ARRANTY)23 b(OF)f(ANY)g(KIND,)h -(EITHER)e(EXPRESSED)g(OR)h(IMPLIED,)330 1845 y(INCLUDING,)33 -b(BUT)g(NOT)g(LIMITED)f(TO,)g(THE)h(IMPLIED)g(W)-10 b(ARRANTIES)32 -b(OF)h(MER-)330 1954 y(CHANT)-8 b(ABILITY)28 b(AND)g(FITNESS)e(F)m(OR)i -(A)g(P)-8 b(AR)g(TICULAR)27 b(PURPOSE.)g(THE)g(ENTIRE)330 -2064 y(RISK)19 b(AS)h(TO)g(THE)g(QUALITY)g(AND)h(PERF)m(ORMANCE)g(OF)f -(THE)g(PR)m(OGRAM)h(IS)f(WITH)330 2174 y(YOU.)h(SHOULD)g(THE)f(PR)m -(OGRAM)i(PR)m(O)m(VE)f(DEFECTIVE,)g(YOU)g(ASSUME)f(THE)g(COST)330 -2283 y(OF)30 b(ALL)g(NECESSAR)-8 b(Y)30 b(SER)-10 b(VICING,)30 -b(REP)-8 b(AIR)30 b(OR)g(CORRECTION.)154 2418 y(13.)61 -b(IN)26 b(NO)g(EVENT)g(UNLESS)f(REQUIRED)h(BY)h(APPLICABLE)f(LA)-10 -b(W)26 b(OR)g(A)m(GREED)h(TO)f(IN)330 2527 y(WRITING)37 -b(WILL)f(ANY)i(COPYRIGHT)e(HOLDER,)h(OR)f(ANY)h(OTHER)f(P)-8 -b(AR)g(TY)38 b(WHO)330 2637 y(MA)-8 b(Y)52 b(MODIFY)g(AND/OR)g -(REDISTRIBUTE)e(THE)h(PR)m(OGRAM)h(AS)f(PERMITTED)330 -2746 y(ABO)m(VE,)40 b(BE)f(LIABLE)f(TO)g(YOU)h(F)m(OR)g(D)m(AMA)m(GES,) -h(INCLUDING)f(ANY)h(GENERAL,)330 2856 y(SPECIAL,)e(INCIDENT)-8 -b(AL)40 b(OR)e(CONSEQUENTIAL)g(D)m(AMA)m(GES)j(ARISING)e(OUT)g(OF)330 -2966 y(THE)44 b(USE)g(OR)g(INABILITY)h(TO)f(USE)g(THE)g(PR)m(OGRAM)h -(\(INCLUDING)h(BUT)e(NOT)330 3075 y(LIMITED)29 b(TO)g(LOSS)f(OF)h(D)m -(A)-8 b(T)g(A)31 b(OR)e(D)m(A)-8 b(T)g(A)31 b(BEING)f(RENDERED)g(INA)m -(CCURA)-8 b(TE)29 b(OR)330 3185 y(LOSSES)38 b(SUST)-8 -b(AINED)40 b(BY)h(YOU)f(OR)g(THIRD)g(P)-8 b(AR)g(TIES)40 -b(OR)g(A)h(F)-10 b(AILURE)40 b(OF)g(THE)330 3294 y(PR)m(OGRAM)f(TO)f -(OPERA)-8 b(TE)38 b(WITH)h(ANY)g(OTHER)f(PR)m(OGRAMS\),)h(EVEN)g(IF)f -(SUCH)330 3404 y(HOLDER)33 b(OR)h(OTHER)f(P)-8 b(AR)g(TY)34 -b(HAS)f(BEEN)h(AD)m(VISED)g(OF)g(THE)f(POSSIBILITY)f(OF)330 -3513 y(SUCH)e(D)m(AMA)m(GES.)150 3771 y Ft(END)45 b(OF)g(TERMS)f(AND)h -(CONDITIONS)p eop -%%Page: 7 12 -7 11 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(7)150 299 y Ft(Ho)l(w)46 b(to)f(Apply)f(These)h(T)-11 -b(erms)45 b(to)g(Y)-11 b(our)44 b(New)i(Programs)275 -503 y Fu(If)38 b(y)m(ou)i(dev)m(elop)f(a)g(new)g(program,)j(and)c(y)m -(ou)i(w)m(an)m(t)g(it)e(to)i(b)s(e)f(of)g(the)h(greatest)h(p)s(ossible) -36 b(use)j(to)150 612 y(the)i(public,)g(the)h(b)s(est)e(w)m(a)m(y)i(to) -g(ac)m(hiev)m(e)g(this)e(is)g(to)i(mak)m(e)g(it)f(free)g(soft)m(w)m -(are)h(whic)m(h)e(ev)m(ery)m(one)j(can)150 722 y(redistribute)28 -b(and)i(c)m(hange)h(under)e(these)i(terms.)275 868 y(T)-8 -b(o)29 b(do)h(so,)g(attac)m(h)h(the)f(follo)m(wing)e(notices)h(to)i -(the)e(program.)40 b(It)30 b(is)f(safest)h(to)g(attac)m(h)h(them)f(to)g -(the)150 978 y(start)j(of)g(eac)m(h)h(source)e(\014le)g(to)h(most)g -(e\013ectiv)m(ely)h(con)m(v)m(ey)g(the)e(exclusion)g(of)g(w)m(arran)m -(t)m(y;)j(and)d(eac)m(h)i(\014le)150 1087 y(should)28 -b(ha)m(v)m(e)k(at)f(least)g(the)f(\\cop)m(yrigh)m(t")i(line)d(and)g(a)i -(p)s(oin)m(ter)f(to)h(where)f(the)g(full)e(notice)j(is)e(found.)390 -1227 y Fm(one)i(line)d(to)j(giv)m(e)g(the)g(program's)f(name)h(and)e -(an)i(idea)f(of)g(what)g(it)g(do)s(es.)390 1331 y Fr(Copyright)45 -b(\(C\))i(19)p Fm(yy)103 b(name)30 b(of)h(author)390 -1539 y Fr(This)47 b(program)e(is)j(free)e(software;)g(you)g(can)h -(redistribute)e(it)i(and/or)390 1642 y(modify)f(it)h(under)g(the)g -(terms)f(of)h(the)g(GNU)g(General)f(Public)g(License)390 -1746 y(as)h(published)e(by)j(the)f(Free)f(Software)g(Foundation;)e -(either)j(version)e(2)390 1850 y(of)i(the)g(License,)f(or)h(\(at)g -(your)f(option\))g(any)h(later)f(version.)390 2057 y(This)h(program)e -(is)j(distributed)c(in)k(the)e(hope)h(that)g(it)g(will)g(be)g(useful,) -390 2161 y(but)g(WITHOUT)f(ANY)h(WARRANTY;)e(without)h(even)g(the)h -(implied)f(warranty)g(of)390 2265 y(MERCHANTABILITY)e(or)j(FITNESS)f -(FOR)h(A)g(PARTICULAR)e(PURPOSE.)93 b(See)47 b(the)390 -2369 y(GNU)g(General)f(Public)g(License)g(for)h(more)f(details.)390 -2576 y(You)h(should)f(have)h(received)e(a)j(copy)e(of)h(the)g(GNU)g -(General)f(Public)g(License)390 2680 y(along)g(with)h(this)g(program;)e -(if)i(not,)g(write)f(to)i(the)e(Free)h(Software)390 2784 -y(Foundation,)e(Inc.,)h(675)h(Mass)g(Ave,)f(Cambridge,)f(MA)i(02139,)g -(USA.)275 2930 y Fu(Also)30 b(add)f(information)g(on)h(ho)m(w)h(to)g -(con)m(tact)i(y)m(ou)d(b)m(y)g(electronic)h(and)f(pap)s(er)f(mail.)275 -3076 y(If)f(the)g(program)h(is)e(in)m(teractiv)m(e,)j(mak)m(e)g(it)e -(output)g(a)h(short)f(notice)h(lik)m(e)f(this)f(when)h(it)g(starts)h -(in)e(an)150 3185 y(in)m(teractiv)m(e)k(mo)s(de:)390 -3325 y Fr(Gnomovision)45 b(version)h(69,)g(Copyright)g(\(C\))h(19)p -Fm(yy)55 b(name)30 b(of)g(author)390 3429 y Fr(Gnomovision)45 -b(comes)h(with)h(ABSOLUTELY)e(NO)i(WARRANTY;)e(for)i(details)390 -3533 y(type)g(`show)f(w'.)95 b(This)46 b(is)h(free)g(software,)e(and)i -(you)g(are)g(welcome)390 3637 y(to)g(redistribute)e(it)i(under)f -(certain)g(conditions;)f(type)h(`show)h(c')390 3740 y(for)g(details.) -275 3886 y Fu(The)27 b(h)m(yp)s(othetical)g(commands)h(`)p -Fr(show)h(w)p Fu(')f(and)f(`)p Fr(show)j(c)p Fu(')d(should)f(sho)m(w)i -(the)g(appropriate)f(parts)h(of)150 3996 y(the)38 b(General)g(Public)d -(License.)63 b(Of)37 b(course,)j(the)f(commands)e(y)m(ou)h(use)g(ma)m -(y)g(b)s(e)f(called)g(something)150 4106 y(other)25 b(than)f(`)p -Fr(show)29 b(w)p Fu(')c(and)f(`)p Fr(show)29 b(c)p Fu(';)e(they)d -(could)g(ev)m(en)h(b)s(e)f(mouse-clic)m(ks)g(or)h(men)m(u)f -(items|whatev)m(er)150 4215 y(suits)29 b(y)m(our)h(program.)275 -4361 y(Y)-8 b(ou)28 b(should)e(also)i(get)h(y)m(our)f(emplo)m(y)m(er)g -(\(if)f(y)m(ou)h(w)m(ork)g(as)h(a)f(programmer\))g(or)g(y)m(our)f(sc)m -(ho)s(ol,)i(if)e(an)m(y)-8 b(,)150 4471 y(to)34 b(sign)f(a)g(\\cop)m -(yrigh)m(t)i(disclaimer")c(for)j(the)f(program,)h(if)f(necessary)-8 -b(.)51 b(Here)34 b(is)e(a)i(sample;)g(alter)g(the)150 -4580 y(names:)390 4720 y Fr(Yoyodyne,)45 b(Inc.,)i(hereby)f(disclaims)f -(all)i(copyright)390 4824 y(interest)f(in)h(the)g(program)e -(`Gnomovision')390 4928 y(\(which)h(makes)g(passes)h(at)g(compilers\))e -(written)390 5032 y(by)i(James)g(Hacker.)390 5239 y Fm(signature)30 -b(of)g(T)m(y)h(Co)s(on)p Fr(,)47 b(1)g(April)g(1989)390 -5343 y(Ty)g(Coon,)g(President)e(of)i(Vice)p eop -%%Page: 8 13 -8 12 bop 150 -116 a Fu(GNU)31 b(GENERAL)f(PUBLIC)h(LICENSE)2052 -b(8)275 299 y(This)19 b(General)h(Public)f(License)h(do)s(es)h(not)g(p) -s(ermit)e(incorp)s(orating)g(y)m(our)i(program)f(in)m(to)h(proprietary) -150 408 y(programs.)38 b(If)22 b(y)m(our)h(program)f(is)g(a)h -(subroutine)e(library)-8 b(,)23 b(y)m(ou)g(ma)m(y)g(consider)f(it)g -(more)h(useful)e(to)j(p)s(ermit)150 518 y(linking)33 -b(proprietary)i(applications)g(with)g(the)h(library)-8 -b(.)57 b(If)35 b(this)h(is)f(what)h(y)m(ou)h(w)m(an)m(t)g(to)g(do,)h -(use)e(the)150 628 y(GNU)31 b(Library)e(General)h(Public)e(License)i -(instead)f(of)i(this)e(License.)p eop -%%Page: 9 14 -9 13 bop 150 -116 a Fu(Cop)m(ying)30 b(summary)2828 b(9)150 -299 y Fp(Cop)l(ying)53 b(summary)275 533 y Fu(GIMP-Prin)m(t)35 -b(is)g Fm(free)5 b Fu(;)40 b(this)35 b(means)h(that)h(ev)m(ery)m(one)g -(is)e(free)i(to)f(use)g(it)g(and)f(free)i(to)f(redistribute)150 -643 y(it)j(on)g(a)h(free)g(basis.)66 b(GIMP-Prin)m(t)39 -b(is)g(not)g(in)f(the)i(public)d(domain;)43 b(it)c(is)f(cop)m(yrigh)m -(ted)i(and)f(there)150 752 y(are)30 b(restrictions)e(on)h(its)g -(distribution,)d(but)j(these)g(restrictions)f(are)i(designed)e(to)i(p)s -(ermit)e(ev)m(erything)150 862 y(that)h(a)g(go)s(o)s(d)g(co)s(op)s -(erating)f(citizen)g(w)m(ould)g(w)m(an)m(t)h(to)h(do.)40 -b(What)29 b(is)f(not)h(allo)m(w)m(ed)f(is)g(to)h(try)g(to)g(prev)m(en)m -(t)150 971 y(others)h(from)g(further)f(sharing)g(an)m(y)i(v)m(ersion)f -(of)g(GIMP-Prin)m(t)h(that)f(they)h(migh)m(t)f(get)i(from)e(y)m(ou.)275 -1106 y(Sp)s(eci\014cally)-8 b(,)26 b(w)m(e)i(w)m(an)m(t)g(to)g(mak)m(e) -h(sure)d(that)j(y)m(ou)e(ha)m(v)m(e)i(the)f(righ)m(t)f(to)h(giv)m(e)g -(a)m(w)m(a)m(y)h(copies)f(of)f(GIMP-)150 1215 y(Prin)m(t,)36 -b(that)g(y)m(ou)f(receiv)m(e)i(source)e(co)s(de)h(or)f(else)g(can)h -(get)g(it)f(if)f(y)m(ou)i(w)m(an)m(t)g(it,)h(that)f(y)m(ou)f(can)h(c)m -(hange)150 1325 y(GIMP-Prin)m(t)31 b(or)g(use)g(pieces)g(of)h(it)e(in)g -(new)h(free)g(programs,)h(and)e(that)i(y)m(ou)g(kno)m(w)f(y)m(ou)h(can) -f(do)g(these)150 1435 y(things.)275 1569 y(T)-8 b(o)37 -b(mak)m(e)g(sure)f(that)i(ev)m(ery)m(one)g(has)e(suc)m(h)h(righ)m(ts,)h -(w)m(e)f(ha)m(v)m(e)h(to)f(forbid)e(y)m(ou)i(to)g(depriv)m(e)f(an)m(y)m -(one)150 1679 y(else)28 b(of)f(these)i(righ)m(ts.)39 -b(F)-8 b(or)28 b(example,)g(if)f(y)m(ou)h(distribute)d(copies)j(of)g -(GIMP-Prin)m(t,)g(y)m(ou)g(m)m(ust)g(giv)m(e)g(the)150 -1788 y(recipien)m(ts)k(all)g(the)h(righ)m(ts)f(that)i(y)m(ou)f(ha)m(v)m -(e.)50 b(Y)-8 b(ou)34 b(m)m(ust)f(mak)m(e)h(sure)e(that)i(they)-8 -b(,)34 b(to)s(o,)h(receiv)m(e)f(or)f(can)150 1898 y(get)f(the)e(source) -h(co)s(de.)41 b(And)29 b(y)m(ou)i(m)m(ust)f(tell)g(them)g(their)f(righ) -m(ts.)275 2032 y(Also,)34 b(for)f(our)g(o)m(wn)h(protection,)g(w)m(e)g -(m)m(ust)g(mak)m(e)g(certain)g(that)g(ev)m(ery)m(one)h(\014nds)d(out)i -(that)g(there)150 2142 y(is)29 b(no)g(w)m(arran)m(t)m(y)h(for)g -(GIMP-Prin)m(t.)40 b(If)29 b(GIMP-Prin)m(t)g(is)g(mo)s(di\014ed)e(b)m -(y)i(someone)i(else)e(and)g(passed)g(on,)150 2252 y(w)m(e)34 -b(w)m(an)m(t)g(their)f(recipien)m(ts)f(to)i(kno)m(w)f(that)h(what)g -(they)f(ha)m(v)m(e)i(is)d(not)i(what)f(w)m(e)h(distributed,)e(so)h -(that)150 2361 y(an)m(y)e(problems)d(in)m(tro)s(duced)h(b)m(y)h(others) -h(will)d(no)i(re\015ect)h(on)f(our)g(reputation.)p eop -%%Page: 10 15 -10 14 bop 150 -116 a Fu(Chapter)30 b(1:)41 b(Ov)m(erview)2672 -b(10)150 299 y Fp(1)80 b(Ov)l(erview)275 533 y Fu(The)44 -b(GIMP-Prin)m(t)h(pac)m(k)-5 b(age)48 b(is)c(a)i(collection)f(of)g -(programs)g(and)g(a)h(library)d(for)i(high)f(qualit)m(y)150 -643 y(prin)m(ting)31 b(on)j(mo)s(dern)e(inkjets,)h(including)d -(`photographic)j(qualit)m(y')g(mo)s(dels)f(whic)m(h)h(o\013er)g(v)m -(ery)h(high)150 752 y(resolutions)29 b(and)h(sev)m(eral)g(inks.)275 -887 y(MET)-8 b(A:)31 b(Short)e(history)h(of)g(the)h(pro)5 -b(ject)275 1021 y(GIMP-Prin)m(t)25 b(is)g(the)i(prin)m(t)d(facilit)m(y) -h(of)i(the)f Fm(GNU)h(Image)f(Manipulation)e(Program)i -Fu(\(GIMP\).)i(It)e(is)150 1131 y(in)h(addition)g(a)i(suite)f(of)g -(driv)m(ers)f(that)i(ma)m(y)g(b)s(e)f(used)g(with)f(common)i(UNIX)g(sp) -s(o)s(oling)d(systems)i(using)150 1240 y(GhostScript)23 -b(or)i(CUPS.)e(These)i(driv)m(ers)e(pro)m(vide)g(prin)m(ting)f(qualit)m -(y)i(for)g(UNIX/Lin)m(ux)f(on)i(a)f(par)g(with)150 1350 -y(proprietary)32 b(v)m(endor-supplied)f(driv)m(ers)h(in)g(man)m(y)i -(cases,)h(and)e(can)h(b)s(e)f(used)f(for)i(man)m(y)f(of)h(the)g(most) -150 1460 y(demanding)24 b(prin)m(ting)g(tasks.)40 b(The)25 -b(core)i(of)f(GIMP-Prin)m(t)f(is)g(a)h(shared)g(library)d -(\(libgimpprin)m(t\))f(whic)m(h)150 1569 y(ma)m(y)31 -b(b)s(e)f(used)f(b)m(y)i(an)m(y)f(program)g(that)h(wishes)e(to)i(pro)s -(duce)f(high-qulait)m(y)e(prin)m(ted)h(output.)p eop -%%Page: 11 16 -11 15 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(Using)29 -b(libgimpprin)m(t)2292 b(11)150 299 y Fp(2)80 b(Using)54 -b(libgimpprin)l(t)275 533 y Fu(This)28 b(c)m(hapter)j(describ)s(es)e -(ho)m(w)h(to)h(write)f(programs)g(that)h(use)f(libgimpprin)m(t.)150 -790 y Ft(2.1)68 b(Co)t(de)45 b(prerequisites)275 983 -y Fu(T)-8 b(o)30 b(use)g(libgimpprin)m(t)c(with)j(a)i(program,)g(sev)m -(eral)f(steps)h(m)m(ust)f(b)s(e)g(tak)m(en:)199 1117 -y(1.)61 b(Include)29 b(the)h(master)h(libgimpprin)m(t)26 -b(header)k Fr()o(.)199 1252 -y Fu(2.)61 b(Call)29 b Fr(stp_init\(\))p Fu(.)199 1386 -y(3.)61 b(Link)29 b(with)g(libgimpprin)m(t.)275 1546 -y(The)k(follo)m(wing)f(is)h(a)h(short)g(example)g(program.)51 -b(It)34 b(do)s(es)f(not)h(do)g(an)m(ything)f(useful,)h(but)f(it)g(do)s -(es)150 1655 y(ev)m(erything)d(required)f(to)i(link)d(with)h -(libgimpprin)m(t)d(and)k(call)g(other)g(functions)f(from)h(libgimpprin) -m(t.)390 1784 y Fr(#include)46 b()390 -1992 y(int)390 2095 y(main)h(\(int)f(argc,)h(char)f(*argv[]\))390 -2199 y({)485 2303 y(stp_init)g(\(\);)485 2407 y(return)h(\(0\);)390 -2511 y(})150 2768 y Ft(2.2)68 b(Linking)45 b(with)g(libgimpprin)l(t)275 -2961 y Fu(T)-8 b(o)41 b(link)f(a)h(program)g(with)f(libgimpprin)m(t,)g -(then)h(`)p Fr(-lgimpprint)p Fu(')e(needs)i(to)h(b)s(e)f(passed)g(to)h -(the)150 3070 y(compiler)28 b(when)g(linking.)37 b(F)-8 -b(or)30 b(example,)f(to)h(compile)e(and)h(link)e(`)p -Fr(prog.c)p Fu(')g(the)j(follo)m(wing)d(commands)150 -3180 y(w)m(ould)i(b)s(e)h(used:)390 3308 y Fr(gcc)47 -b(-c)g(prog.c)390 3412 y(gcc)g(-o)g(prog)g(-lgimpprint)d(prog.o)275 -3547 y Fu(The)34 b(compiler)g(and)g(link)m(er)g(\015ags)h(needed)g(ma)m -(y)g(v)-5 b(ary)35 b(dep)s(ending)e(on)i(the)g(options)f(GIMP-Prin)m(t) -150 3656 y(w)m(as)d(con\014gured)e(with)h(when)f(it)h(w)m(as)h(built.) -38 b(The)30 b Fr(gimpprint-config)c Fu(script)k(will)d(giv)m(e)k(the)g -(correct)150 3766 y(parameters)g(for)f(the)g(lo)s(cal)g(installation)e -(\(see)k(Section)e(3.1)h([gimpprin)m(t-con\014g],)f(page)h(12\).)p -eop -%%Page: 12 17 -12 16 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(In)m(tegrating)31 -b(libgimpprin)m(t)2077 b(12)150 299 y Fp(3)80 b(In)l(tegrating)53 -b(libgimpprin)l(t)275 568 y Fu(This)38 b(c)m(hapter)i(describ)s(es)e -(ho)m(w)i(to)g(in)m(tegrate)h(the)f(compiling)e(and)h(linking)e(of)j -(programs)f(using)150 678 y(libgimpprin)m(t)21 b(with)i(build)f -(scripts.)38 b(Commonly)24 b(used)g(systems)h(include)e -Fr(make)p Fu(,)i(but)f(more)h(commonly)150 787 y(`)p -Fr(Makefile)p Fu(')k(\014les)g(are)i(generated)g(b)m(y)f(using)f(to)s -(ols)h(suc)m(h)h(as)f Fr(autoconf)e Fu(and)i Fr(automake)p -Fu(.)150 1074 y Ft(3.1)68 b Fl(gimpprint-conf)o(ig)275 -1279 y Fu(Dep)s(ending)33 b(on)h(the)h(setup)f(of)h(the)g(computer)f -(system)h(GIMP-Prin)m(t)f(w)m(as)h(installed)d(on,)k(as)f(w)m(ell)150 -1388 y(as)h(the)g(options)g(passed)f(to)i Fr(configure)c -Fu(when)i(con\014guring)g(the)h(pac)m(k)-5 b(age)38 b(when)d(it)g(w)m -(as)h(built,)g(the)150 1498 y Fr(CFLAGS)30 b Fu(and)h -Fr(LIBS)f Fu(parameters)i(needed)f(to)i(compile)d(and)h(link)f -(programs)h(with)f(libgimpprin)m(t)d(ma)m(y)150 1607 -y(v)-5 b(ary)d(.)82 b(T)-8 b(o)44 b(mak)m(e)h(it)f(simple)e(to)j -(determine)e(what)h(these)g(are)h(on)f(an)m(y)g(giv)m(en)g(system,)k -(the)c(script)150 1717 y Fr(gimpprint-config)28 b Fu(w)m(as)k(created.) -47 b(It's)32 b(job)f(is)g(to)i(output)f(the)g(correct)h(parameters)f -(for)g(the)g(setup)150 1827 y(on)e(y)m(our)h(system.)40 -b(The)30 b(follo)m(wing)f(options)h(are)h(a)m(v)-5 b(ailable:)390 -1967 y Fr(roger@whinlatter:~/gimpp)o(rint)o(/dev)o(el$)41 -b(gimpprint-config)j(--help)390 2071 y(Usage:)i(gimpprint-config)d -([OPTIONS])j([LIBRARIES])390 2175 y(Options:)772 2278 -y([--prefix[=DIR]])772 2382 y([--exec-prefix[=DIR]])772 -2486 y([--version])772 2590 y([--libs])772 2693 y([--cflags])390 -2797 y(Libraries:)772 2901 y(gimpprint)275 3047 y Fu(The)31 -b(`)p Fr(--prefix)p Fu(')g(and)g(`)p Fr(--exec-prefix)p -Fu(')e(options)j(are)g(only)f(needed)h(if)f(the)i(installed)c(lo)s -(cations)150 3157 y(of)j(parts)f(of)h(GIMP-Prin)m(t)f(are)h(di\013eren) -m(t)f(from)g(the)g(con\014gured)g(lo)s(cations.)44 b(These)31 -b(should)f(nev)m(er)i(b)s(e)150 3266 y(needed)e(if)f(GIMP-Prin)m(t)h(w) -m(as)h(prop)s(erly)d(con\014gured)i(and)g(installed.)275 -3413 y(The)f(installed)g(v)m(ersion)g(of)i(GIMP-Prin)m(t)f(can)h(b)s(e) -e(obtained)h(with)f(the)i(`)p Fr(--version)p Fu(')d(option:)390 -3553 y Fr(roger@whinlatter:~/gimpp)o(rint)o(/dev)o(el$)41 -b(gimpprint-config)j(--version)390 3657 y(4.2.7)275 3803 -y Fu(The)29 b(correct)j Fr(CFLAGS)d Fu(to)i(use)f(can)g(b)s(e)g -(obtained)g(with)f(the)i(`)p Fr(--cflags)p Fu(')d(option:)390 -3944 y Fr(roger@whinlatter:~/gimpp)o(rint)o(/dev)o(el$)41 -b(gimpprint-config)j(--cflags)275 4194 y Fu(In)29 b(this)g(case,)j -(there)f(are)f(no)h(sp)s(ecial)e Fr(CFLAGS)f Fu(required)h(to)i -(compile)e(programs.)275 4340 y(The)g(correct)j Fr(LIBS)d -Fu(to)i(use)f(can)h(the)g(obtained)e(with)g(the)i(`)p -Fr(--libs)p Fu(')e(option:)390 4480 y Fr(roger@whinlatter:~/gimpp)o -(rint)o(/dev)o(el$)41 b(gimpprint-config)j(--libs)390 -4584 y(-L/usr/lib)h(-lgimpprint)g(-lm)275 4730 y Fu(The)29 -b(command)i(can)f(b)s(e)g(used)g(from)f(the)i(shell)e(b)m(y)h -(enclosing)f(it)h(in)f(bac)m(kquotes)j(`)p Fr(`)p Fu(':)390 -4871 y Fr(gcc)47 b(`gimpprint-config)c(--cflags`)i(-c)i(prog.c)390 -4975 y(gcc)g(`gimpprint-config)c(--libs`)j(-o)h(prog)g(prog.o)275 -5121 y Fu(Ho)m(w)m(ev)m(er,)40 b(this)35 b(is)h(not)h(the)g(w)m(a)m(y)g -(it)f(it)g(t)m(ypically)g(used.)58 b(Normally)36 b(it)g(is)g(used)f(in) -h(a)h(`)p Fr(Makefile)p Fu(')150 5230 y(\(see)31 b(Section)f(3.2)h -([mak)m(e],)h(page)f(13\))h(or)e(b)m(y)g(an)g Fr(m4)g -Fu(macro)g(in)f(a)i Fr(configure)d Fu(script)h(\(see)i(Section)f(3.3) -150 5340 y([auto)s(conf)7 b(],)32 b(page)f(13\).)p eop -%%Page: 13 18 -13 17 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(In)m(tegrating)31 -b(libgimpprin)m(t)2077 b(13)150 299 y Ft(3.2)68 b Fl(make)275 -490 y Fu(If)28 b(y)m(ou)h(use)f Fr(make)f Fu(with)h(y)m(our)g(o)m(wn)h -(`)p Fr(Makefile)p Fu(')e(\014les,)h(then)g(y)m(ou)h(are)g(on)g(y)m -(our)g(o)m(wn.)40 b(This)27 b(man)m(ual)150 599 y(o\013ers)k(no)f -(assistance)h(with)e(doing)g(this.)40 b(Only)29 b(the)h(follo)m(wing)f -(suggestion)h(is)g(o\013ered:)390 726 y Fr(GIMPPRINT_VERSION)43 -b(=)48 b($\(shell)d(gimpprint-config)f(--version\))390 -830 y(GIMPPRINT_CFLAGS)f(=)48 b($\(shell)e(gimpprint-config)d -(--cflags\))390 934 y(GIMPPRINT_LIBS)h(=)j($\(shell)f(gimpprint-config) -e(--libs\))275 1067 y Fu(Ho)m(w)35 b(y)m(ou)g(c)m(ho)s(ose)h(to)f(use)g -(these)g(v)-5 b(ariables)33 b(is)h(en)m(tirely)g(up)g(to)h(y)m(ou.)54 -b(See)35 b(Info)f(\014le)g(`)p Fr(make)p Fu(',)i(no)s(de)150 -1176 y(`)p Fr(Top)p Fu(',)30 b(for)g(more)h(information.)150 -1429 y Ft(3.3)68 b Fl(autoconf)275 1619 y Fu(The)32 b -Fr(autoconf)g Fu(program)h(pro)s(duces)f(a)i(Bourne)f(shell)e(script)i -(called)f(`)p Fr(configure)p Fu(')g(from)g(a)i(tem-)150 -1729 y(plate)28 b(\014le)g(called)f(`)p Fr(configure.in)p -Fu('.)37 b(`)p Fr(configure.in)p Fu(')26 b(con)m(tains)j(b)s(oth)e -(Bourne)h(shell)f(script,)h(and)g Fr(m4)150 1839 y Fu(macros.)40 -b Fr(autoconf)23 b Fu(expands)i(the)h Fr(m4)f Fu(macros)i(in)m(to)f -(`real')g(shell)e(script.)38 b(The)25 b(resulting)f(`)p -Fr(configure)p Fu(')150 1948 y(script)39 b(p)s(erforms)f(v)-5 -b(arious)39 b(c)m(hec)m(ks)j(for)d(installed)f(programs,)k(compiler)d -(c)m(haracteristics)h(and)g(other)150 2058 y(system)34 -b(information)f(suc)m(h)g(as)i(a)m(v)-5 b(ailable)33 -b(headers)h(and)f(libraries.)49 b(See)34 b(Info)g(\014le)f(`)p -Fr(autoconf)p Fu(',)h(no)s(de)150 2167 y(`)p Fr(Top)p -Fu(',)c(for)g(more)h(information.)275 2300 y(GIMP-Prin)m(t)67 -b(pro)m(vides)g(an)h Fr(m4)g Fu(macro,)78 b Fr(AM_PATH_GIMPPRINT)p -Fu(,)73 b(suitable)67 b(for)h(use)g(in)f(a)150 2410 y(`)p -Fr(configure.in)p Fu('.)36 b(It)26 b(de\014nes)f(the)g(en)m(vironmen)m -(t)g(v)-5 b(ariables)25 b Fr(GIMPPRINT_CFLAGS)p Fu(,)d -Fr(GIMPPRINT_LIBS)150 2519 y Fu(and)36 b Fr(GIMPPRINT_CONFIG)p -Fu(.)54 b(Y)-8 b(ou)37 b(can)g(optionally)e(sp)s(ecify)g(a)i(minim)m -(um)c(v)m(ersion)j(of)h(the)f(library)e(to)150 2629 y(use,)c(and)g -(shell)f(script)g(to)i(run)e(if)g(the)i(test)g(suceeds)f(or)h(fails.) -3624 2855 y(Macro)-3723 b Fk(AM)p 353 2855 35 5 v 41 -w(P)-10 b(A)g(TH)p 709 2855 V 41 w(GIMPPRINT)46 b Fj(\()p -Fi([)p Fm(minim)m(um-v)m(ersion)28 b Fi([)p Fm(,)j(action-if-found)i -Fi([)p Fm(,)565 2964 y(action-if-not-found)t Fi(]]])p -Fj(\))390 3074 y Fu(Chec)m(k)42 b(for)g(an)g(installed)e(v)m(ersion)h -(of)h(GIMP-Prin)m(t)g(greater)h(than)f(or)g(equal)g(to)g -Fm(minim)m(um-)390 3183 y(v)m(ersion)p Fu(.)390 3316 -y Fm(action-if-found)29 b Fu(is)e(a)g(list)f(of)h(shell)e(commands)i -(to)h(run)e(if)g(the)h(c)m(hec)m(k)i(for)d(the)i(library)c(succeeds;) -390 3426 y Fm(action-if-not-found)33 b Fu(is)d(a)g(list)f(of)i(shell)e -(commands)h(to)h(run)e(if)g(the)i(c)m(hec)m(k)g(fails.)390 -3559 y(The)23 b(macro)h(sets)g(the)g(follo)m(wing)e(en)m(vironmen)m(t)h -(v)-5 b(ariables:)36 b Fr(GIMPPRINT_CFLAGS)p Fu(,)21 -b Fr(GIMPPRINT_)390 3668 y(LIBS)37 b Fu(and)g Fr(GIMPPRINT_CONFIG)p -Fu(.)59 b(It)38 b(also)g(will)e(substitute)g(them)i(in)m(to)g(an)m(y)h -(`)p Fr(Makefile.in)p Fu(')390 3778 y(y)m(ou)33 b(sp)s(ecify)e(in)g -Fr(AC_OUTPUT)f Fu(b)s(ecause)i(it)g(calls)g Fr(AC_SUBST)e -Fu(for)i(eac)m(h)i(of)e(them.)47 b(Ho)m(w)m(ev)m(er,)36 -b(y)m(ou)390 3887 y(will)23 b(probably)h(b)s(e)h(using)g -Fr(automake)e Fu(to)k(generate)g(y)m(our)f(`)p Fr(Makefile.in)p -Fu(')e(\014les)g(\(see)j(Section)f(3.4)390 3997 y([automak)m(e],)33 -b(page)e(13\).)150 4249 y Ft(3.4)68 b Fl(automake)275 -4440 y Fu(The)25 b Fr(automake)e Fu(program)j(can)g(b)s(e)f(used)g(to)h -(generate)h(`)p Fr(Makefile.in)p Fu(')c(\014les)i(suitable)f(for)i(use) -f(with)150 4550 y(a)31 b(`)p Fr(configure)p Fu(')d(script)h(generated)i -(b)m(y)f Fr(autoconf)p Fu(.)39 b(As)30 b Fr(automake)e -Fn(r)-5 b(e)g(quir)g(es)38 b Fr(autoconf)p Fu(,)29 b(this)g(section)150 -4659 y(will)20 b(assume)i(the)g(use)g(of)h(a)g(`)p Fr(configure)p -Fu(')d(script)h(whic)m(h)g(uses)h(the)h Fr(AM_PATH_GIMPPRINT)17 -b Fu(macro)23 b(\(there)150 4769 y(is)29 b(little)h(p)s(oin)m(t)f(in)g -Fn(not)40 b Fu(using)29 b(it!\).)275 4902 y(It)35 b(is)f(highly)f -(recommeded)j(that)g(y)m(ou)f(use)g(GNU)h Fr(autoconf)d -Fu(and)i Fr(automake)p Fu(.)53 b(They)35 b(will)d(allo)m(w)150 -5011 y(y)m(ou)f(to)g(mak)m(e)h(y)m(our)e(soft)m(w)m(are)i(build)27 -b(on)k(most)g(platforms)e(with)g(most)i(compilers.)40 -b Fr(automake)28 b Fu(mak)m(es)150 5121 y(writing)37 -b(complex)i(`)p Fr(Makefile)p Fu(')e(\014les)h(v)m(ery)h(easy)-8 -b(,)42 b(b)m(y)d(expressing)f(ho)m(w)h(to)h(build)c(y)m(our)i(pac)m(k) --5 b(ages)41 b(in)150 5230 y(terms)h(of)g(what)g(\014les)f(are)i -(required)d(to)j(build)c(a)j(pro)5 b(ject)42 b(and)g(the)g -(installation)e(lo)s(cations)i(of)g(the)150 5340 y(\014les.)57 -b(It)37 b(imp)s(oses)d(a)j(few)f(limitations)e(o)m(v)m(er)k(using)c -(plain)h(`)p Fr(Makefile)p Fu(')f(\014les,)j(suc)m(h)f(as)g(in)f(the)i -(use)f(of)p eop -%%Page: 14 19 -14 18 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(In)m(tegrating)31 -b(libgimpprin)m(t)2077 b(14)150 299 y(conditionals,)39 -b(but)e(these)i(problems)e(are)h(v)-5 b(astly)38 b(out)m(w)m(eighed)h -(b)m(y)f(the)h(b)s(ene\014ts)e(it)h(brings.)63 b(It)38 -b(also)150 408 y(creates)c(man)m(y)f(extra)g(targets)h(in)d(the)i -(generated)g(`)p Fr(Makefile.in)p Fu(')d(\014les)i(suc)m(h)g(as)h -Fr(dist)p Fu(,)f Fr(distcheck)p Fu(,)150 518 y Fr(clean)p -Fu(,)27 b Fr(distclean)p Fu(,)f Fr(maintainer-clean)d -Fu(and)k Fr(tags)p Fu(,)g(and)g(there)h(are)g(man)m(y)g(more)g(more)f -(a)m(v)-5 b(ailable.)150 628 y(See)31 b(Info)e(\014le)h(`)p -Fr(automake)p Fu(',)f(no)s(de)h(`)p Fr(Top)p Fu(',)g(for)g(more)g -(information.)275 762 y(Because)89 b Fr(AM_PATH_GIMPPRINT)83 -b Fu(calls)88 b Fr(AC_SUBST)d Fu(to)k(substitute)e Fr(GIMPPRINT_CFLAGS) -p Fu(,)150 872 y Fr(GIMPPRINT_LIBS)30 b Fu(and)j Fr(GIMPPRINT_CONFIG)p -Fu(,)d Fr(automake)h Fu(will)g(automatically)j(set)g(these)g(v)-5 -b(ariables)150 981 y(in)29 b(the)i(`)p Fr(Makefile.in)p -Fu(')c(\014les)j(it)g(generates,)i(requiring)c(no)i(additional)e -(e\013ort)j(on)g(y)m(our)f(part!)275 1116 y(As)d(in)f(previous)g -(examples,)h(w)m(e)h(will)d(mak)m(e)j(a)g(program)f Fr(prog)f -Fu(from)h(a)h(\014le)e(`)p Fr(prog.c)p Fu('.)39 b(This)26 -b(is)g(ho)m(w)150 1225 y(one)31 b(migh)m(t)f(build)d(write)j(a)g(`)p -Fr(Makefile.am)p Fu(')e(to)j(do)g(this:)390 1354 y Fr(AUTOMAKE_OPTIONS) -43 b(=)48 b(1.4)f(gnu)390 1458 y(MAINT_CHARSET)d(=)k(latin1)390 -1665 y(@SET_MAKE@)390 1873 y(CFLAGS)e(=)i(@CFLAGS@)390 -2081 y(INCLUDES)e(=)h(@INCLUDES@)e($\(GIMPPRINT_CFLAGS\))390 -2288 y(bin_PROGRAMS)f(=)k(prog)390 2392 y(prog_SOURCES)c(=)k(prog.c)390 -2496 y(prog_LDADD)d(=)i($\(GIMPPRINT_LIBS\))390 2703 -y(MAINTAINERCLEANFILES)42 b(=)48 b(Makefile.in)275 2838 -y Fu(That's)27 b(all)e(there)j(is)e(to)i(it!)39 b(Please)27 -b(note)h(that)f(this)f(example)h(also)g(requires)e(the)j(macro)f -Fr(AC_PROG_)150 2947 y(MAKE_SET)g Fu(to)i(b)s(e)g(used)f(in)g(`)p -Fr(configure.in)p Fu(')e(and)i(the)h(use)g(of)g Fr(AC_SUBST)e -Fu(to)i(substitute)f Fr(CFLAGS)g Fu(and)150 3057 y Fr(INCLUDES)g -Fu(where)i Fr(@CFLAGS@)e Fu(and)i Fr(@INCLUDES@)d Fu(are)k(found)e(in)g -(the)i(\014le,)f(resp)s(ectiv)m(ely)-8 b(.)p eop -%%Page: 15 20 -15 19 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(15)150 299 y Fp(4)80 b(F)-13 b(unctions)275 499 y Fu(This)37 -b(section)j(of)g(the)g(man)m(ual)f(is)g(a)h(complete)g(reference)h(to)f -(all)f(of)h(the)g(functions)e(comprising)150 608 y(libgimpprin)m(t,)26 -b(with)j(examples.)275 736 y(All)i(of)j(the)f(libgimpprin)m(t)c -(functions)j(can)h(b)s(e)g(declared)f(b)m(y)i(including)29 -b(the)34 b(master)f(libgimpprin)m(t)150 845 y(header,)e(`)p -Fr()o Fu('.)36 b(This)29 b(should)g(b)s(e)h -(done)g(in)g(ev)m(ery)h(source)g(\014le)f(that)h(uses)150 -955 y(gimpprin)m(t)d(functions)h(b)m(y)h(putting)390 -1077 y Fr(#include)46 b()150 -1204 y Fu(at)31 b(the)g(top)f(of)h(eac)m(h)g(\014le.)150 -1441 y Ft(4.1)68 b(Main)45 b(functions)275 1627 y Fu(These)40 -b(functions)f(are)i(essen)m(tial)f(to)i(the)f(correct)g(functioning)e -(of)i(libgimpprin)m(t.)67 b(All)39 b(or)i(most)150 1736 -y(other)32 b(functions)e(in)g(the)h(library)e(dep)s(end)h(absolutely)g -(up)s(on)g(them.)43 b(In)31 b(the)h(case)g(of)f Fr(stp_init)p -Fu(,)f(this)150 1846 y(function)f Fn(must)39 b Fu(b)s(e)30 -b(called)g(b)s(efore)g(an)m(y)h(of)f(the)h(other)f(functions)f(in)g -(the)i(library)-8 b(.)3525 2046 y(F)g(unction)-3725 b -Fh(int)39 b Fk(stp)p 506 2046 35 5 v 41 w(init)44 b Fj(\()p -Fr(void)p Fj(\))390 2155 y Fu(This)d(function)g(initialises)e(the)k -(libgimpprin)m(t)38 b(library)-8 b(.)75 b(It)43 b(m)m(ust)f(b)s(e)g -(called)g(b)s(efore)g(an)m(y)h(of)390 2265 y(the)35 b(other)g -(libgimpprin)m(t)30 b(functions)j(are)i(called.)53 b(It)35 -b(is)e(resp)s(onsible)f(for)i(setting)h(up)f(message)390 -2374 y(catalogues)c(\(for)e(in)m(ternationalisation\).)39 -b(This)26 b(function)h(ma)m(y)i(b)s(e)f(called)f(more)h(than)h(once,)g -(at)390 2484 y(an)m(y)i(stage)h(during)c(the)i(execution)h(of)f(a)h -(program.)390 2612 y(It)f(returns)g(zero)h(on)f(success,)h(nonzero)g -(on)f(failure.)275 2775 y Fr(stp_init)e Fu(migh)m(t)i(b)s(e)f(used)h -(as)h(follo)m(ws:)390 2897 y Fr(int)390 3001 y(main)47 -b(\(int)f(argc,)h(char)f(**argv\))390 3105 y({)485 3208 -y(stp_init\(\);)485 3416 y(...)390 3623 y(})3525 3823 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b(*)g Fk(stp)p -649 3823 V 41 w(mallo)s(c)45 b Fj(\()p Fr(size_t)29 b -Fm(size)5 b Fj(\))390 3933 y Fu(Where)31 b Fm(size)k -Fu(is)29 b(the)i(amoun)m(t)g(of)f(memory)h(to)g(allo)s(cate)g(\(in)e(b) -m(ytes\).)390 4060 y(This)42 b(function)h(allo)s(cates)i(memory)-8 -b(.)82 b(It)45 b(will)c(alw)m(a)m(ys)k(return)e(a)h(p)s(oin)m(ter)g(to) -h(the)f(allo)s(cated)390 4170 y(memory)-8 b(.)41 b(It)31 -b(will)c(not)k(return)e(on)h(failure.)390 4298 y(It)g(returns)g(a)g(p)s -(oin)m(ter)g(to)h(the)f(allo)s(cated)h(memory)-8 b(.)150 -4534 y Ft(4.2)68 b Fl(stp_vars_t)40 b Ft(functions)3474 -4792 y Fu(Data)32 b(t)m(yp)s(e)-3724 b Fh(void)39 b(*)g -Fk(stp)p 649 4792 V 41 w(v)-6 b(ars)p 892 4792 V 41 w(t)390 -4902 y Fu(This)38 b(is)h(an)h(opaque)g(data)h(t)m(yp)s(e,)i(whose)d -(structure)f(is)g(not)h(visible)e(to)j(the)f(user.)69 -b(This)38 b(ob-)390 5011 y(ject)e(con)m(tains)f(all)f(of)i(the)f -(information)f(ab)s(out)h(settings)g(for)g(a)g(giv)m(en)g(prin)m(ter,)h -(suc)m(h)e(as)i(color)390 5121 y(\(con)m(trast,)47 b(brigh)m(tness\),)e -(the)e(t)m(yp)s(e)f(of)h(prin)m(ter,)h(the)f(dithering)d(algorithm)h -(in)h(use,)j(and)d(so)390 5230 y(forth.)d(Please)25 b(see)h(the)g -Fr(stp_set_*)c Fu(and)j Fr(stp_get_*)e Fu(functions)h(b)s(elo)m(w)g -(for)h(the)h(accessors)h(and)390 5340 y(m)m(utators)k(for)f(this)g -(data)h(t)m(yp)s(e.)p eop -%%Page: 16 21 -16 20 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(16)3525 299 y(F)-8 b(unction)-3725 b Fh(stp_vars_t)41 -b Fk(stp)p 872 299 35 5 v 41 w(allo)s(cate)p 1298 299 -V 40 w(v)-6 b(ars)45 b Fj(\()p Fr(void)p Fj(\))390 408 -y Fu(Allo)s(cate)31 b(a)f(new)g Fr(stp_vars_t)e Fu(with)h(default)g -(settings)i(for)f(all)f(mem)m(b)s(ers.)3525 628 y(F)-8 -b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 628 V 41 -w(cop)m(y)p 828 628 V 41 w(v)-6 b(ars)46 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vd)p Fr(,)h(const)g(stp_vars_t)f Fm(vs)t Fj(\))390 -737 y Fu(Cop)m(y)i(the)h(settings)f(from)g Fm(vs)k Fu(to)d -Fm(vd)p Fu(.)3525 956 y(F)-8 b(unction)-3725 b Fh(stp_vars_t)41 -b Fk(stp)p 872 956 V 41 w(allo)s(cate)p 1298 956 V 40 -w(cop)m(y)k Fj(\()p Fr(const)29 b(stp_vars_t)f Fm(vs)t -Fj(\))390 1066 y Fu(Allo)s(cate)j(a)f(new)g Fr(stp_vars_t)p -Fu(,)e(cop)m(ying)i(settings)h(from)f Fm(vs)p Fu(.)3525 -1285 y(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1285 V 41 w(free)p 787 1285 V 41 w(v)-6 b(ars)45 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)8 b Fj(\))390 1395 y Fu(F)-8 -b(ree)31 b(all)e(resources)i(asso)s(ciated)f(with)f Fm(vv)p -Fu(.)41 b Fm(vv)d Fu(m)m(ust)30 b(not)h(b)s(e)e(used)h(in)f(an)m(y)h(w) -m(a)m(y)h(follo)m(wing)e(this)390 1504 y(call.)3525 1724 -y(F)-8 b(unction)-3725 b Fh(const)40 b(char)f(*)g Fk(stp)p -949 1724 V 40 w(get)p 1144 1724 V 41 w(output)p 1524 -1724 V 39 w(to)46 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 1833 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 1833 V 41 w(set)p 742 1833 -V 41 w(output)p 1122 1833 V 39 w(to)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)t Fj(\))3525 -1943 y Fu(F)d(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1943 V 41 w(set)p 742 1943 V 41 w(output)p 1122 1943 -V 39 w(to)p 1263 1943 V 41 w(n)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)p Fr(,)30 -b(int)565 2052 y Fm(b)m(ytes)t Fj(\))390 2162 y Fu(Get)36 -b(or)g(set)f(the)h(name)f(of)h(the)f(command)g(that)h(this)e(job)h -(will)e(b)s(e)i(prin)m(ted)f(to.)56 b(This)33 b(is)i(used)390 -2271 y(b)m(y)c(fron)m(t)f(ends;)h(the)f(driv)m(er)g(library)e(alw)m(a)m -(ys)j(prin)m(ts)f(to)h(a)g(stream)g(pro)m(vided)e(b)m(y)i(the)g(fron)m -(t)g(end)390 2381 y(and)f(nev)m(er)g(uses)g(this)g(directly)-8 -b(.)3525 2600 y(F)g(unction)-3725 b Fh(const)40 b(char)f(*)g -Fk(stp)p 949 2600 V 40 w(get)p 1144 2600 V 41 w(driv)m(er)45 -b Fj(\()p Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 -2710 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 2710 V 41 w(set)p 742 2710 V 41 w(driv)m(er)45 b -Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)e(char)i(*)p -Fm(v)-5 b(al)t Fj(\))3525 2819 y Fu(F)d(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 2819 V 41 w(set)p 742 2819 -V 41 w(driv)m(er)p 1083 2819 V 40 w(n)46 b Fj(\()p Fr(stp_vars_t)27 -b Fm(vv)p Fr(,)j(const)f(char)h(*)p Fm(v)-5 b(al)p Fr(,)29 -b(int)g Fm(b)m(ytes)t Fj(\))390 2929 y Fu(Get)i(or)g(set)g(the)f(name)h -(of)f(the)h(driv)m(er)e(\(the)i(t)m(yp)s(e)f(of)h(prin)m(ter\).)3525 -3148 y(F)-8 b(unction)-3725 b Fh(const)40 b(char)f(*)g -Fk(stp)p 949 3148 V 40 w(get)p 1144 3148 V 41 w(pp)s(d)p -1380 3148 V 40 w(\014le)45 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 3258 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 3258 V 41 w(set)p 742 3258 -V 41 w(pp)s(d)p 978 3258 V 40 w(\014le)44 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)t Fj(\))3525 -3367 y Fu(F)d(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -3367 V 41 w(set)p 742 3367 V 41 w(pp)s(d)p 978 3367 V -40 w(\014le)p 1167 3367 V 40 w(n)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)p Fr(,)30 -b(int)565 3477 y Fm(b)m(ytes)t Fj(\))390 3587 y Fu(Get)e(or)e(set)i -(the)f(name)f(of)h(the)g(PPD)g(\014le)f(used)g(b)m(y)g(this)g(prin)m(t) -f(job.)40 b(Normally)-8 b(,)27 b(only)e(P)m(ostScript)390 -3696 y(prin)m(ters)k(use)h(PPD)g(\014les.)3525 3915 y(F)-8 -b(unction)-3725 b Fh(const)40 b(char)f(*)g Fk(stp)p 949 -3915 V 40 w(get)p 1144 3915 V 41 w(resolution)44 b Fj(\()p -Fr(const)30 b(stp_vars_t)d Fm(vv)8 b Fj(\))3525 4025 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -4025 V 41 w(set)p 742 4025 V 41 w(resolution)44 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)f(char)g(*)p -Fm(v)-5 b(al)t Fj(\))3525 4134 y Fu(F)d(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 4134 V 41 w(set)p 742 4134 -V 41 w(resolution)p 1279 4134 V 40 w(n)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)p Fr(,)29 -b(int)565 4244 y Fm(b)m(ytes)t Fj(\))390 4354 y Fu(Get)46 -b(or)e(set)i(the)f(resolution)e(to)i(b)s(e)f(used)g(in)g(this)f(prin)m -(t)h(job.)83 b(Di\013eren)m(t)45 b(driv)m(ers)f(supp)s(ort)390 -4463 y(di\013eren)m(t)34 b(resolutions,)f(and)h(man)m(y)g(driv)m(ers)f -(supp)s(ort)f(m)m(ultiple)g(qualit)m(y)h(settings)i(for)e(a)i(giv)m(en) -390 4573 y(DPI)30 b(resolution.)3525 4792 y(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 4792 V 40 w(get)p -1144 4792 V 41 w(media)p 1485 4792 V 40 w(size)45 b Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 4902 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -4902 V 41 w(set)p 742 4902 V 41 w(media)p 1083 4902 V -40 w(size)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)f(char)g -(*)p Fm(v)-5 b(al)t Fj(\))3525 5011 y Fu(F)d(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 5011 V 41 w(set)p 742 5011 -V 41 w(media)p 1083 5011 V 40 w(size)p 1304 5011 V 41 -w(n)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)f(char)g(*)p -Fm(v)-5 b(al)p Fr(,)29 b(int)565 5121 y Fm(b)m(ytes)t -Fj(\))390 5230 y Fu(Get)h(or)f(set)g(the)g(name)g(of)g(the)g(media)f -(size)g(\(e.)41 b(g.)g(A3,)30 b(letter,)g(legal\))e(to)i(b)s(e)e(used)g -(in)g(this)f(prin)m(t)390 5340 y(job.)p eop -%%Page: 17 22 -17 21 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(17)3525 299 y(F)-8 b(unction)-3725 b Fh(const)40 b(char)f(*)g -Fk(stp)p 949 299 35 5 v 40 w(get)p 1144 299 V 41 w(media)p -1485 299 V 40 w(t)m(yp)s(e)45 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 408 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 408 V 41 w(set)p 742 408 V -41 w(media)p 1083 408 V 40 w(t)m(yp)s(e)45 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)h(const)g(char)h(*)p -Fm(v)-5 b(al)t Fj(\))3525 518 y Fu(F)d(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 518 V 41 w(set)p 742 518 -V 41 w(media)p 1083 518 V 40 w(t)m(yp)s(e)p 1345 518 -V 40 w(n)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)f(char)h -(*)p Fm(v)-5 b(al)p Fr(,)29 b(int)565 628 y Fm(b)m(ytes)t -Fj(\))390 737 y Fu(Get)f(or)g(set)g(the)f(name)h(of)f(the)h(media)e(t)m -(yp)s(e)i(\(e.)40 b(g.)h(plain)25 b(pap)s(er,)i(photo)h(qualit)m(y)e -(inkjet)h(pap)s(er\))390 847 y(to)k(b)s(e)f(used)f(in)g(this)h(prin)m -(t)f(job.)3525 1080 y(F)-8 b(unction)-3725 b Fh(const)40 -b(char)f(*)g Fk(stp)p 949 1080 V 40 w(get)p 1144 1080 -V 41 w(media)p 1485 1080 V 40 w(source)45 b Fj(\()p Fr(const)30 -b(stp_vars_t)d Fm(vv)8 b Fj(\))3525 1189 y Fu(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 1189 V 41 w(set)p 742 1189 -V 41 w(media)p 1083 1189 V 40 w(source)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)t Fj(\))3525 -1299 y Fu(F)d(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1299 V 41 w(set)p 742 1299 V 41 w(media)p 1083 1299 V -40 w(source)p 1440 1299 V 41 w(n)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)p Fr(,)565 -1408 y(int)30 b Fm(b)m(ytes)t Fj(\))390 1518 y Fu(Get)36 -b(or)e(set)h(the)g(name)f(of)h(the)g(media)f(source)g(\(e.)54 -b(g.)f(man)m(ual)34 b(feed,)i(tra)m(y)f(A\))g(to)h(b)s(e)e(used)f(in) -390 1628 y(this)c(prin)m(t)g(job.)3525 1861 y(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 1861 V 40 w(get)p -1144 1861 V 41 w(ink)p 1341 1861 V 41 w(t)m(yp)s(e)45 -b Fj(\()p Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 -1970 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 1970 V 41 w(set)p 742 1970 V 41 w(ink)p 939 1970 -V 41 w(t)m(yp)s(e)44 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p -Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)t Fj(\))3525 2080 -y Fu(F)d(unction)-3725 b Fh(void)39 b Fk(stp)p 558 2080 -V 41 w(set)p 742 2080 V 41 w(ink)p 939 2080 V 41 w(t)m(yp)s(e)p -1202 2080 V 40 w(n)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p -Fr(,)i(const)f(char)g(*)p Fm(v)-5 b(al)p Fr(,)30 b(int)565 -2189 y Fm(b)m(ytes)t Fj(\))390 2299 y Fu(Get)g(or)g(set)g(the)f(name)g -(of)h(the)f(ink)f(t)m(yp)s(e)i(\(e.)41 b(g.)g(four)28 -b(color)i(standard,)f(six)f(color)i(photo\))f(to)i(b)s(e)390 -2408 y(used)f(in)f(this)g(prin)m(t)g(job.)3525 2641 y(F)-8 -b(unction)-3725 b Fh(const)40 b(char)f(*)g Fk(stp)p 949 -2641 V 40 w(get)p 1144 2641 V 41 w(dither)p 1490 2641 -V 39 w(algorithm)46 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 2751 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 2751 V 41 w(set)p 742 2751 -V 41 w(dither)p 1088 2751 V 39 w(algorithm)45 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)f(char)g(*)p -Fm(v)-5 b(al)t Fj(\))3525 2861 y Fu(F)d(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 2861 V 41 w(set)p 742 2861 -V 41 w(dither)p 1088 2861 V 39 w(algorithm)p 1612 2861 -V 41 w(n)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(const)f(char) -565 2970 y(*)p Fm(v)-5 b(al)p Fr(,)30 b(int)f Fm(b)m(ytes)t -Fj(\))390 3080 y Fu(Get)i(or)g(set)g(the)f(dither)f(algorithm)h(to)h(b) -s(e)e(used)h(in)f(this)g(prin)m(t)g(job.)3525 3313 y(F)-8 -b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 3313 V 41 -w(get)p 702 3313 V 40 w(output)p 1081 3313 V 40 w(t)m(yp)s(e)45 -b Fj(\()p Fr(const)29 b(stp_vars_t)e Fm(vv)8 b Fj(\))3525 -3422 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 3422 V 41 w(set)p 742 3422 V 41 w(output)p 1122 3422 -V 39 w(t)m(yp)s(e)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p -Fr(,)i(int)f Fm(v)-5 b(al)t Fj(\))390 3532 y Fu(Get)31 -b(or)g(set)g(the)f(output)g(t)m(yp)s(e)h(\(color,)g(gra)m(yscale,)h -(blac)m(k)e(and)g(white\))g(for)g(this)f(prin)m(t)g(job.)3525 -3765 y(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 -3765 V 41 w(get)p 702 3765 V 40 w(orien)m(tation)44 b -Fj(\()p Fr(const)29 b(stp_vars_t)e Fm(vv)8 b Fj(\))3525 -3874 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 3874 V 41 w(set)p 742 3874 V 41 w(orien)m(tation)k -Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(int)f Fm(v)-5 -b(al)t Fj(\))390 3984 y Fu(Get)31 b(or)g(set)g(the)f(pap)s(er)g(orien)m -(tation)g(for)g(this)f(prin)m(t)g(job.)3525 4217 y(F)-8 -b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 4217 V 41 -w(get)p 702 4217 V 40 w(left)45 b Fj(\()p Fr(const)29 -b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 4326 y Fu(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 4326 V 41 w(set)p 742 4326 -V 41 w(left)44 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(int)f -Fm(v)-5 b(al)t Fj(\))390 4436 y Fu(Get)31 b(or)g(set)g(the)f(left)g -(margin)g(\(in)f(1/72)j(inc)m(h)e(units,)f(or)h Fr(")p -Fu(p)s(oin)m(ts)p Fr(")p Fu(\))f(for)h(this)f(prin)m(t)g(job.)3525 -4669 y(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 -4669 V 41 w(get)p 702 4669 V 40 w(top)45 b Fj(\()p Fr(const)30 -b(stp_vars_t)d Fm(vv)8 b Fj(\))3525 4778 y Fu(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 4778 V 41 w(set)p 742 4778 -V 41 w(top)44 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(int)g -Fm(v)-5 b(al)t Fj(\))390 4888 y Fu(Get)31 b(or)g(set)g(the)f(top)h -(margin)e(\(in)h(1/72)i(inc)m(h)d(units,)g(or)i Fr(")p -Fu(p)s(oin)m(ts)p Fr(")p Fu(\))e(for)h(this)f(prin)m(t)g(job.)3525 -5121 y(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 -5121 V 41 w(get)p 702 5121 V 40 w(image)p 1035 5121 V -41 w(t)m(yp)s(e)45 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 5230 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 5230 V 41 w(set)p 742 5230 -V 41 w(image)p 1076 5230 V 41 w(t)m(yp)s(e)44 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(int)g Fm(v)-5 b(al)t -Fj(\))390 5340 y Fu(Get)31 b(or)g(set)g(the)f(image)h(t)m(yp)s(e)f -(\(line)f(art,)i(con)m(tin)m(uous)g(tone,)g(solid)d(colors\))j(for)f -(this)g(prin)m(t)f(job.)p eop -%%Page: 18 23 -18 22 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(18)3525 299 y(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p -506 299 35 5 v 41 w(get)p 702 299 V 40 w(unit)44 b Fj(\()p -Fr(const)30 b(stp_vars_t)d Fm(vv)8 b Fj(\))3525 408 y -Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 408 -V 41 w(set)p 742 408 V 41 w(unit)44 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(int)f Fm(v)-5 b(al)t Fj(\))390 518 y -Fu(Get)35 b(or)g(set)g(the)f(base)h(unit)e(\(inc)m(hes)h(or)h(cen)m -(timeters\))g(for)f(this)g(prin)m(t)f(job.)52 b(This)33 -b(is)g(pro)m(vided)390 628 y(for)d(fron)m(t)h(ends;)e(the)i(pac)m(k)-5 -b(age)32 b(itself)e(uses)g(p)s(oin)m(ts)f(as)h(its)g(unit)f(of)i -(measuremen)m(t.)3525 856 y(F)-8 b(unction)-3725 b Fh(int)39 -b Fk(stp)p 506 856 V 41 w(get)p 702 856 V 40 w(page)p -972 856 V 41 w(width)44 b Fj(\()p Fr(const)29 b(stp_vars_t)e -Fm(vv)8 b Fj(\))3525 965 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 965 V 41 w(set)p 742 965 V -41 w(page)p 1013 965 V 40 w(width)44 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(int)f Fm(v)-5 b(al)t Fj(\))390 1075 -y Fu(Get)31 b(or)g(set)g(the)f(width)f(of)h(the)h(prin)m(ted)e(region)h -(of)g(the)h(page.)3525 1303 y(F)-8 b(unction)-3725 b -Fh(int)39 b Fk(stp)p 506 1303 V 41 w(get)p 702 1303 V -40 w(page)p 972 1303 V 41 w(heigh)m(t)k Fj(\()p Fr(const)30 -b(stp_vars_t)d Fm(vv)8 b Fj(\))3525 1413 y Fu(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 1413 V 41 w(set)p 742 1413 -V 41 w(page)p 1013 1413 V 40 w(heigh)m(t)44 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(int)f Fm(v)-5 b(al)t -Fj(\))390 1522 y Fu(Get)31 b(or)g(set)g(the)f(heigh)m(t)g(of)h(the)g -(prin)m(ted)e(region)g(of)i(the)g(page.)3525 1750 y(F)-8 -b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 1750 V 41 -w(get)p 702 1750 V 40 w(input)p 1011 1750 V 40 w(color)p -1295 1750 V 42 w(mo)s(del)45 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 1860 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 1860 V 41 w(set)p 742 1860 -V 41 w(input)p 1052 1860 V 39 w(color)p 1335 1860 V 42 -w(mo)s(del)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(int)g -Fm(v)-5 b(al)t Fj(\))390 1969 y Fu(Get)29 b(or)f(set)g(the)g(color)g -(mo)s(del)f(\(curren)m(tly)g(R)m(GB)i(or)f(CMY\))h(of)f(the)g(input)e -(to)i(the)g(driv)m(er.)39 b(Most)390 2079 y(fron)m(t)30 -b(ends)g(will)e(use)i(R)m(GB)h(input.)3525 2307 y(F)-8 -b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 2307 V 41 -w(get)p 702 2307 V 40 w(output)p 1081 2307 V 40 w(color)p -1365 2307 V 42 w(mo)s(del)45 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 2417 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 2417 V 41 w(set)p 742 2417 -V 41 w(output)p 1122 2417 V 39 w(color)p 1405 2417 V -42 w(mo)s(del)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p -Fr(,)i(int)g Fm(v)-5 b(al)t Fj(\))390 2526 y Fu(Get)26 -b(or)f(set)g(the)g(color)g(mo)s(del)e(\(curren)m(tly)h(R)m(GB)i(or)f -(CMY\))g(of)g(the)g(output)f(of)h(the)g(driv)m(er.)38 -b(Most)390 2636 y(prin)m(ters)29 b(will)f(use)i(CMY.)3525 -2864 y(F)-8 b(unction)-3725 b Fh(float)40 b Fk(stp)p -611 2864 V 40 w(get)p 806 2864 V 41 w(scaling)45 b Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 2973 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -2973 V 41 w(set)p 742 2973 V 41 w(scaling)44 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(float)f Fm(v)-5 b(al)t -Fj(\))390 3083 y Fu(Get)35 b(or)g(set)f(the)h(scaling)e(factor)j(of)e -(the)h(image.)52 b(If)34 b(the)h(scaling)e(factor)j(is)d(greater)i -(than)f(0,)i(it)390 3193 y(is)29 b(in)m(terpreted)g(as)h(a)h(p)s(ercen) -m(t)f(\(5.0-100.0)j(is)c(the)h(v)-5 b(alid)29 b(range\))h(of)g(the)g -(prin)m(table)e(page)j(region,)390 3302 y(using)d(the)i(more)g -(restrictiv)m(e)f(axis.)40 b(F)-8 b(or)31 b(example,)e(if)g(the)h -(image)g(to)g(b)s(e)f(prin)m(ted)f(should)g(b)s(e)h(3)p -Fr(")390 3412 y Fu(\(wide\))g(x)f(2)p Fr(")i Fu(\(high\),)f(and)f(the)h -(prin)m(table)f(page)h(region)g(is)f(8)p Fr(")p Fu(x10.5)p -Fr(")p Fu(,)j(the)f(scale)f(factor)h(should)390 3521 -y(b)s(e)g(37.5)i(\(3)p Fr(")p Fu(/8)p Fr(")p Fu(\).)390 -3655 y(If)e(the)g(scaling)g(is)f(less)h(than)g(zero,)i(it)e(is)f(in)m -(terpreted)h(as)g(pixels)f(p)s(er)g(inc)m(h.)390 3788 -y(It)37 b(is)f(lik)m(ely)f(that)j(in)d(the)i(future)f(this)g(will)e(b)s -(e)i(migrated)h(in)m(to)f(the)h(fron)m(t)g(end.)60 b(There)36 -b(is)g(no)390 3898 y(particular)29 b(reason)h(wh)m(y)g(the)h(driv)m(er) -e(needs)h(to)h(kno)m(w)f(ab)s(out)g(this.)3525 4126 y(F)-8 -b(unction)-3725 b Fh(float)40 b Fk(stp)p 611 4126 V 40 -w(get)p 806 4126 V 41 w(gamma)46 b Fj(\()p Fr(const)29 -b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 4235 y Fu(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 4235 V 41 w(set)p 742 4235 -V 41 w(gamma)46 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p -Fr(,)i(float)e Fm(v)-5 b(al)t Fj(\))390 4345 y Fu(Get)34 -b(or)f(set)h(the)f(gamma)h(of)f(the)g(prin)m(t)f(job)h(\(v)-5 -b(alid)32 b(range:)46 b(0.1-4.0;)37 b(default)c(1.0\).)50 -b(Note)34 b(that)390 4454 y(this)40 b(is)g(not)i(the)f(absolute)g -(gamma)i(used)d(b)m(y)h(the)h(prin)m(t)e(job;)46 b(it)41 -b(is)f(scaled)h(b)m(y)h(the)f(gamma)390 4564 y(appropriate)29 -b(for)i(the)f(prin)m(ter.)39 b(This)29 b(is)g(true)i(for)f(all)f(of)i -(the)f(n)m(umerical)f(parameters.)3525 4792 y(F)-8 b(unction)-3725 -b Fh(float)40 b Fk(stp)p 611 4792 V 40 w(get)p 806 4792 -V 41 w(brigh)m(tness)k Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 4902 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 4902 V 41 w(set)p 742 4902 -V 41 w(brigh)m(tness)44 b Fj(\()p Fr(stp_vars_t)27 b -Fm(vv)p Fr(,)j(float)f Fm(v)-5 b(al)t Fj(\))390 5011 -y Fu(Get)38 b(or)f(set)g(the)h(brigh)m(tness)d(of)i(the)h(prin)m(t)d -(job)i(\(v)-5 b(alid)35 b(range:)55 b(0.0-2.0;)43 b(default:)53 -b(1.0\).)62 b(An)m(y)390 5121 y(v)-5 b(alue)32 b(other)h(than)f(1.0)i -(will)c(result)h(in)h(some)h(p)s(ossible)d(v)-5 b(alues)32 -b(not)g(b)s(eing)g(used;)h(if)e(brigh)m(tness)390 5230 -y(is)f(less)g(than)g(1.0,)i(no)f(output)f(p)s(oin)m(t)g(will)e(b)s(e)i -(pure)f(white,)h(and)h(if)e(brigh)m(tness)h(is)f(greater)j(than)390 -5340 y(1.0,)g(no)e(output)g(p)s(oin)m(t)f(will)f(b)s(e)i(pure)f(blac)m -(k)h(\(or)h(cy)m(an,)h(or)e(magen)m(ta,)i(or)f(y)m(ello)m(w\).)p -eop -%%Page: 19 24 -19 23 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(19)3525 299 y(F)-8 b(unction)-3725 b Fh(float)40 b -Fk(stp)p 611 299 35 5 v 40 w(get)p 806 299 V 41 w(con)m(trast)k -Fj(\()p Fr(const)30 b(stp_vars_t)d Fm(vv)8 b Fj(\))3525 -408 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 408 V 41 w(set)p 742 408 V 41 w(con)m(trast)44 b -Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(float)f Fm(v)-5 -b(al)t Fj(\))390 518 y Fu(Get)27 b(or)f(set)g(the)g(con)m(trast)i(of)e -(the)g(prin)m(t)e(job)i(\(v)-5 b(alid)24 b(range:)39 -b(0.0-4.0;)30 b(default:)38 b(1.0\).)j(V)-8 b(alues)26 -b(less)390 628 y(than)35 b(1.0)i(will)32 b(result)j(in)f(pure)g(white)h -(or)g(blac)m(k)g(not)h(b)s(eing)e(used)g(\(0.0)j(will)c(mak)m(e)j(the)g -(en)m(tire)390 737 y(image)30 b(50\045)h(gra)m(y\).)42 -b(V)-8 b(alues)30 b(greater)h(than)f(1.0)i(do)e(not)g(hard)f(clip;)g -(while)f(the)i(con)m(trast)i(in)d(the)390 847 y(midtones)g(increases,)i -(it)f(only)f(asymptotically)h(approac)m(hes)h(the)f(limits.)3525 -1066 y(F)-8 b(unction)-3725 b Fh(float)40 b Fk(stp)p -611 1066 V 40 w(get)p 806 1066 V 41 w(cy)m(an)45 b Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 1176 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1176 V 41 w(set)p 742 1176 V 41 w(cy)m(an)45 b Fj(\()p -Fr(stp_vars_t)27 b Fm(vv)p Fr(,)j(float)f Fm(v)-5 b(al)t -Fj(\))390 1285 y Fu(Get)35 b(or)g(set)g(the)f(cy)m(an)h(adjustmen)m(t)g -(of)f(the)h(prin)m(t)e(job)h(\(range:)49 b(0.0-4.0;)40 -b(default:)48 b(1.0\).)54 b(This)390 1395 y(curren)m(tly)32 -b(adjusts)g(the)g(gamma)i(of)f(the)f(cy)m(an)i(curv)m(e.)48 -b(It)32 b(is)g(scaled)g(b)m(y)h(the)g(cy)m(an)g(adjustmen)m(t)390 -1504 y(for)d(the)h(prin)m(ter)e(mo)s(del)g(in)g(question.)3525 -1724 y(F)-8 b(unction)-3725 b Fh(float)40 b Fk(stp)p -611 1724 V 40 w(get)p 806 1724 V 41 w(magen)m(ta)k Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 1833 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1833 V 41 w(set)p 742 1833 V 41 w(magen)m(ta)44 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(float)f Fm(v)-5 b(al)t -Fj(\))390 1943 y Fu(Get)40 b(or)g(set)f(the)h(magen)m(ta)h(adjustmen)m -(t)e(of)g(the)h(prin)m(t)e(job)h(\(range:)59 b(0.0-4.0;)47 -b(default:)57 b(1.0\).)390 2052 y(This)28 b(curren)m(tly)h(adjusts)h -(the)g(gamma)h(of)f(the)g(magen)m(ta)i(curv)m(e.)41 b(It)30 -b(is)f(scaled)h(b)m(y)g(the)g(magen)m(ta)390 2162 y(adjustmen)m(t)g -(for)g(the)h(prin)m(ter)e(mo)s(del)g(in)g(question.)3525 -2381 y(F)-8 b(unction)-3725 b Fh(float)40 b Fk(stp)p -611 2381 V 40 w(get)p 806 2381 V 41 w(y)m(ello)m(w)45 -b Fj(\()p Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 -2491 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 2491 V 41 w(set)p 742 2491 V 41 w(y)m(ello)m(w)44 -b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(float)f Fm(v)-5 -b(al)t Fj(\))390 2600 y Fu(Get)32 b(or)f(set)g(the)h(y)m(ello)m(w)f -(adjustmen)m(t)f(of)h(the)h(prin)m(t)d(job)i(\(range:)43 -b(0.0-4.0;)34 b(default:)41 b(1.0\).)j(This)390 2710 -y(curren)m(tly)23 b(adjusts)f(the)i(gamma)h(of)e(the)h(y)m(ello)m(w)g -(curv)m(e.)39 b(It)23 b(is)g(scaled)g(b)m(y)h(the)g(y)m(ello)m(w)f -(adjustmen)m(t)390 2819 y(for)30 b(the)h(prin)m(ter)e(mo)s(del)g(in)g -(question.)3525 3039 y(F)-8 b(unction)-3725 b Fh(float)40 -b Fk(stp)p 611 3039 V 40 w(get)p 806 3039 V 41 w(saturation)k -Fj(\()p Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 -3148 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 3148 V 41 w(set)p 742 3148 V 41 w(saturation)k Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(float)f Fm(v)-5 b(al)t -Fj(\))390 3258 y Fu(Get)30 b(or)f(set)g(the)g(saturation)f(of)h(the)g -(prin)m(t)f(job)g(\(range:)41 b(0.0-9.0;)32 b(default:)39 -b(1.0\).)j(Saturation)28 b(of)390 3367 y(0.0)34 b(pro)s(duces)e(gra)m -(yscale)i(output)f(using)f(comp)s(osite)h(\(CMY)g(or)g(CMYK,)h(as)f -(appropriate)f(for)390 3477 y(the)f(prin)m(ter\))e(color.)3525 -3696 y(F)-8 b(unction)-3725 b Fh(float)40 b Fk(stp)p -611 3696 V 40 w(get)p 806 3696 V 41 w(densit)m(y)k Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 3806 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -3806 V 41 w(set)p 742 3806 V 41 w(densit)m(y)44 b Fj(\()p -Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(float)f Fm(v)-5 b(al)t -Fj(\))390 3915 y Fu(Get)30 b(or)f(set)g(the)g(densit)m(y)f(of)h(the)g -(prin)m(t)f(job)g(\(range:)41 b(0.0-2.0;)32 b(default:)39 -b(1.0\).)j(This)27 b(adjusts)h(the)390 4025 y(amoun)m(t)e(of)g(ink)e -(dep)s(osited)g(in)h(a)h(linear)e(fashion)g(for)i(all)e(c)m(hannels.)39 -b(It)25 b(is)g(scaled)g(b)m(y)h(the)g(densit)m(y)390 -4134 y(appropriate)35 b(for)g(the)h(c)m(hoice)g(of)g(prin)m(ter,)g -(resolution,)f(pap)s(er)g(t)m(yp)s(e,)i(and)e(other)h(factors)g(that) -390 4244 y(the)31 b(driv)m(er)e(ma)m(y)i(deem)f(appropriate.)3525 -4463 y(F)-8 b(unction)-3725 b Fh(float)40 b Fk(stp)p -611 4463 V 40 w(get)p 806 4463 V 41 w(app)p 1031 4463 -V 40 w(gamma)46 b Fj(\()p Fr(const)30 b(stp_vars_t)d -Fm(vv)8 b Fj(\))3525 4573 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 4573 V 41 w(set)p 742 4573 -V 41 w(app)p 967 4573 V 40 w(gamma)46 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(float)f Fm(v)-5 b(al)t Fj(\))390 4682 -y Fu(Get)31 b(or)g(set)g(the)f(gamma)h(of)g(the)g(input)d(\(i.)40 -b(e.)h(what)31 b(the)f(driving)e(application)h(uses\).)3525 -4902 y(F)-8 b(unction)-3725 b Fh(void)39 b(*)g Fk(stp)p -649 4902 V 41 w(get)p 845 4902 V 40 w(lut)45 b Fj(\()p -Fr(const)29 b(stp_vars_t)e Fm(vv)8 b Fj(\))3525 5011 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -5011 V 41 w(set)p 742 5011 V 41 w(lut)44 b Fj(\()p Fr(stp_vars_t)28 -b Fm(vv)p Fr(,)i(void)f(*)p Fm(v)-5 b(al)t Fj(\))390 -5121 y Fu(Get)43 b(or)f(set)h(the)f(color)h(lo)s(okup)d(table)i(for)g -(the)h(prin)m(t)d(job.)76 b(This)40 b(is)i(useful)e(outside)h(of)i(the) -390 5230 y(library)29 b(for)h(computing)g(a)i(preview)d(of)i(the)h -(prin)m(ted)d(result.)41 b(The)31 b(lo)s(okup)e(table)i(itself)f -(should)390 5340 y(b)s(e)g(treated)h(as)g(an)f(opaque)h(handle.)p -eop -%%Page: 20 25 -20 24 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(20)3525 299 y(F)-8 b(unction)-3725 b Fh(unsigned)41 -b(char)e(*)g Fk(stp)p 1106 299 35 5 v 40 w(get)p 1301 -299 V 41 w(cmap)45 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 408 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 408 V 41 w(set)p 742 408 V -41 w(cmap)45 b Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(unsigned)e -(char)h(*)p Fm(v)-5 b(al)t Fj(\))390 518 y Fu(Get)34 -b(or)f(set)h(the)f(color)g(map)f(for)h(the)g(prin)m(t)f(job.)48 -b(This)31 b(is)i(a)g(table)g(of)g(R,G,B)h(v)-5 b(alues)32 -b(for)h(8-bit)390 628 y(indexed)e(input.)44 b(This)31 -b(ma)m(y)i(b)s(e)f(mo)m(v)m(ed)h(outside)e(of)i(the)f(library)e(in)h -(the)i(future;)f(in)f(this)h(case,)390 737 y(the)i(fron)m(t)h(end)e(w)m -(ould)g(b)s(e)h(required)e(to)j(do)f(its)g(o)m(wn)g(mapping)f(and)h -(supply)d(true-color)k(R)m(GB)390 847 y(to)c(the)g(driv)m(er.)275 -1051 y(The)36 b(follo)m(wing)g(metho)s(ds)g(are)i(used)e(to)i(p)s -(erform)e(output)g(and)h(error)g(rep)s(orting)f(b)m(y)h(the)g(driv)m -(er.)150 1161 y(The)j(driv)m(er)f(supplies)e(a)k(stream)f(of)h(output)e -(b)m(ytes;)46 b(the)41 b(fron)m(t)f(end)f(is)h(resp)s(onsible)d(for)j -(pro)m(viding)150 1271 y(metho)s(ds)30 b(that)h(accept)g(this)f(output) -g(and)f(handle)g(it)h(appropriately)-8 b(.)3525 1535 -y(F)g(unction)-3725 b Fh(stp_outfunc_t)42 b Fk(stp)p -1029 1535 V 41 w(get)p 1225 1535 V 40 w(outfunc)j Fj(\()p -Fr(const)29 b(stp_vars_t)e Fm(vv)8 b Fj(\))3525 1645 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1645 V 41 w(set)p 742 1645 V 41 w(outfunc)44 b Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)p Fr(,)i(stp_outfunc_t)c -Fm(v)-5 b(al)t Fj(\))3525 1754 y Fu(F)d(unction)-3725 -b Fh(void)39 b(*)g Fk(stp)p 649 1754 V 41 w(get)p 845 -1754 V 40 w(outdata)44 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 1864 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 1864 V 41 w(set)p 742 1864 -V 41 w(outdata)k Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(void)f(*)p -Fm(v)-5 b(al)t Fj(\))3474 2093 y Fu(Data)32 b(t)m(yp)s(e)-3484 -b Fk(stp)p 551 2093 V 41 w(outfunc)p 972 2093 V 40 w(t)870 -2197 y Fr(typedef)46 b(void)g(\(*stp_outfunc_t\))e(\(void)i(*data,)1538 -2301 y(const)h(char)f(*buffer,)g(size_t)g(bytes\);)390 -2506 y Fu(Get)22 b(or)f(set)g(the)g(output)f(function)g(the)h(driv)m -(er)e(will)g(use.)37 b(The)20 b(fron)m(t)h(end)f(m)m(ust)h(supply)d(a)j -(suitable)390 2615 y(function)f(for)i(accepting)g(the)g(output)g(data.) -38 b(The)21 b Fr(stp_set_outdata)d Fu(metho)s(d)j(pro)m(vides)g(a)h(w)m -(a)m(y)390 2725 y(of)31 b(passing)e(an)h(appropriate)f(ob)5 -b(ject)32 b(to)f(the)f(output)g(function.)3525 2989 y(F)-8 -b(unction)-3725 b Fh(stp_outfunc_t)42 b Fk(stp)p 1029 -2989 V 41 w(get)p 1225 2989 V 40 w(errfunc)j Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)8 b Fj(\))3525 3099 -y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -3099 V 41 w(set)p 742 3099 V 41 w(errfunc)44 b Fj(\()p -Fr(const)29 b(stp_vars_t)f Fm(vv)p Fr(,)i(stp_outfunc_t)d -Fm(v)-5 b(al)t Fj(\))3525 3208 y Fu(F)d(unction)-3725 -b Fh(void)39 b(*)g Fk(stp)p 649 3208 V 41 w(get)p 845 -3208 V 40 w(errdata)44 b Fj(\()p Fr(const)29 b(stp_vars_t)f -Fm(vv)8 b Fj(\))3525 3318 y Fu(F)-8 b(unction)-3725 b -Fh(void)39 b Fk(stp)p 558 3318 V 41 w(set)p 742 3318 -V 41 w(errdata)k Fj(\()p Fr(stp_vars_t)28 b Fm(vv)p Fr(,)i(void)g(*)p -Fm(v)-5 b(al)t Fj(\))390 3428 y Fu(Get)28 b(or)g(set)f(the)h(error)f -(rep)s(orting)f(function)g(that)i(the)f(driv)m(er)f(will)f(use.)39 -b(This)26 b(is)g(used)h(to)h(rep)s(ort)390 3537 y(errors)g(or)g -(debugging)f(information,)h(and)g(m)m(ust)g(b)s(e)f(supplied.)37 -b(A)29 b(t)m(ypical)f(errfunc)f(will)e(simply)390 3647 -y(prin)m(t)k(whatev)m(er)i(it's)f(passed)g(to)h(stderr.)275 -3851 y(/*)e(*)f(h)m(ue)p 611 3851 28 4 v 33 w(map)g(is)f(an)i(arra)m(y) -f(of)h(49)g(doubles)e(represen)m(ting)g(the)i(mapping)e(of)h(h)m(ue)g -(*)h(from)f(\(0..6\))i(to)150 3961 y(\(0..6\))g(in)d(incremen)m(ts)g -(of)h(.125.)42 b(The)27 b(h)m(ue)p 1605 3961 V 33 w(map)h(is)f(in)f -(CMY)j(space,)g(*)f(so)g(h)m(ue=0)g(is)g(cy)m(an.)40 -b(*/)29 b(t)m(yp)s(edef)150 4071 y(v)m(oid)36 b(\(*stp)p -560 4071 V 33 w(con)m(v)m(ert)p 882 4071 V 35 w(t\)\(const)i(stp)p -1389 4071 V 32 w(v)-5 b(ars)p 1581 4071 V 33 w(t)37 b(v)-5 -b(ars,)38 b(const)f(unsigned)d(c)m(har)j(*in,)g(unsigned)e(short)h -(*out,)150 4180 y(in)m(t)j(*zero)p 509 4180 V 34 w(mask,)j(in)m(t)d -(width,)h(in)m(t)f(bpp,)h(const)g(unsigned)e(c)m(har)i(*cmap,)i(const)e -(double)e(*h)m(ue)p 3525 4180 V 33 w(map,)150 4290 y(const)31 -b(double)e(*lum)p 884 4290 V 32 w(map,)h(const)h(double)e(*sat)p -1835 4290 V 33 w(map\);)3525 4554 y(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 4554 35 5 v 41 w(merge)p -904 4554 V 41 w(prin)m(tv)-6 b(ars)45 b Fj(\()p Fr(stp_vars_t)27 -b Fm(user)p Fr(,)j(const)f(stp_vars_t)565 4664 y Fm(prin)m(t)r -Fj(\))3525 4893 y Fu(F)-8 b(unction)-3725 b Fh(void)39 -b Fk(stp)p 558 4893 V 41 w(allo)s(cate)p 984 4893 V 40 -w(lut)44 b Fj(\()p Fr(stp_vars_t)28 b Fm(v)p Fr(,)i(size_t)f -Fm(steps)t Fj(\))3525 5123 y Fu(F)-8 b(unction)-3725 -b Fh(void)39 b Fk(stp)p 558 5123 V 41 w(free)p 787 5123 -V 41 w(lut)44 b Fj(\()p Fr(stp_vars_t)28 b Fm(v)8 b Fj(\))3525 -5352 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 5352 V 41 w(compute)p 1028 5352 V 40 w(lut)45 b Fj(\()p -Fr(stp_vars_t)28 b Fm(v)p Fr(,)i(size_t)e Fm(steps)t -Fj(\))p eop -%%Page: 21 26 -21 25 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(21)150 299 y Ft(4.3)68 b(Dither)46 b(functions)3525 -587 y Fu(F)-8 b(unction)-3725 b Fh(size_t)40 b Fk(stp)p -663 587 35 5 v 41 w(dither)p 1009 587 V 39 w(algorithm)p -1533 587 V 41 w(coun)m(t)45 b Fj(\()p Fr(void)p Fj(\))3525 -792 y Fu(F)-8 b(unction)-3725 b Fh(const)40 b(char)f(*)g -Fk(stp)p 949 792 V 40 w(dither)p 1294 792 V 40 w(algorithm)p -1819 792 V 41 w(name)45 b Fj(\()p Fr(int)30 b Fm(id)t -Fj(\))3525 998 y Fu(F)-8 b(unction)-3725 b Fh(const)40 -b(char)f(*)g Fk(stp)p 949 998 V 40 w(default)p 1338 998 -V 39 w(dither)p 1682 998 V 40 w(algorithm)45 b Fj(\()p -Fr(void)p Fj(\))150 1229 y Ft(4.4)68 b(Options)45 b(functions)3474 -1516 y Fu(Data)32 b(t)m(yp)s(e)-3724 b Fh(void)39 b(*)g -Fk(stp)p 649 1516 V 41 w(option)p 1009 1516 V 40 w(t)390 -1626 y Fu(This)29 b(is)g(an)h(opaque)h(data)g(t)m(yp)s(e,)g(whose)f -(structure)g(is)f(not)i(visible)d(to)j(the)f(user.)3525 -1856 y(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p 558 -1856 V 41 w(set)p 742 1856 V 41 w(option\(stp)p 1301 -1856 V 39 w(v)-6 b(ars)p 1542 1856 V 41 w(t)45 b Fm(v)p -Fr(,)30 b(const)f(char)h(*)p Fm(name)p Fr(,)f(const)g(char)565 -1965 y(*)p Fm(data)p Fr(,)i(int)e Fm(b)m(ytes)t Fj(\))3525 -2171 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 2171 V 41 w(clear)p 838 2171 V 40 w(option)45 b Fj(\()p -Fr(stp_vars_t)28 b Fm(v)p Fr(,)i(const)f(char)g(*)p Fm(name)5 -b Fj(\))3525 2377 y Fu(F)-8 b(unction)-3725 b Fh(void)39 -b Fk(stp)p 558 2377 V 41 w(clear)p 838 2377 V 40 w(all)p -998 2377 V 41 w(options)45 b Fj(\()p Fr(stp_vars_t)28 -b Fm(v)8 b Fj(\))3525 2582 y Fu(F)-8 b(unction)-3725 -b Fh(size_t)40 b Fk(stp)p 663 2582 V 41 w(option)p 1023 -2582 V 40 w(coun)m(t)k Fj(\()p Fr(const)30 b(stp_vars_t)d -Fm(v)8 b Fj(\))3525 2788 y Fu(F)-8 b(unction)-3725 b -Fh(const)40 b(stp_option_t)i Fk(stp)p 1277 2788 V 40 -w(get)p 1472 2788 V 41 w(option)p 1832 2788 V 40 w(b)m(y)p -1993 2788 V 41 w(index)j Fj(\()p Fr(const)29 b(stp_vars_t)565 -2898 y Fm(v)p Fr(,)h(size_t)f Fm(idx)6 b Fj(\))3525 3103 -y Fu(F)-8 b(unction)-3725 b Fh(const)40 b(stp_option_t)i -Fk(stp)p 1277 3103 V 40 w(get)p 1472 3103 V 41 w(option)p -1832 3103 V 40 w(b)m(y)p 1993 3103 V 41 w(name)j Fj(\()p -Fr(const)30 b(stp_vars_t)565 3213 y Fm(v)p Fr(,)g(const)f(char)g(*)p -Fm(name)5 b Fj(\))3525 3418 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 3418 V 40 w(option)p -1308 3418 V 41 w(data)44 b Fj(\()p Fr(const)29 b(stp_option_t)e -Fm(option)p Fj(\))390 3528 y Fi(Note)p Fu(:)42 b(not)31 -b(n)m(ull)d(delimited!)3525 3758 y(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 3758 V 40 w(option)p -1308 3758 V 41 w(name)45 b Fj(\()p Fr(const)29 b(stp_option_t)e -Fm(option)p Fj(\))3525 3963 y Fu(F)-8 b(unction)-3725 -b Fh(size_t)40 b Fk(stp)p 663 3963 V 41 w(option)p 1023 -3963 V 40 w(length)k Fj(\()p Fr(const)29 b(stp_option_t)e -Fm(option)p Fj(\))150 4194 y Ft(4.5)68 b(P)l(ap)t(er)45 -b(functions)3474 4482 y Fu(Data)32 b(t)m(yp)s(e)-3724 -b Fh(void)39 b(*)g Fk(stp)p 649 4482 V 41 w(pap)s(ersize)p -1158 4482 V 39 w(t)390 4591 y Fu(This)29 b(is)g(an)h(opaque)h(data)g(t) -m(yp)s(e,)g(whose)f(structure)g(is)f(not)i(visible)d(to)j(the)f(user.) -3474 4821 y(Data)i(t)m(yp)s(e)-3724 b Fk(stp)p 311 4821 -V 41 w(pap)s(ersize)p 820 4821 V 39 w(unit)p 1064 4821 -V 40 w(t)630 4925 y Fr(typedef)46 b(enum)g(papersize_unit)630 -5029 y({)725 5132 y(PAPERSIZE_ENGLISH,)725 5236 y(PAPERSIZE_METRIC)630 -5340 y(})h(stp_papersize_unit_t;)p eop -%%Page: 22 27 -22 26 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(22)3525 299 y(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p -506 299 35 5 v 41 w(kno)m(wn)p 872 299 V 41 w(pap)s(ersizes)44 -b Fj(\()p Fr(void)p Fj(\))3525 511 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(stp_papersize_t)i Fk(stp)p 1433 511 V -41 w(get)p 1629 511 V 41 w(pap)s(ersize)p 2138 511 V -39 w(b)m(y)p 2298 511 V 41 w(name)j Fj(\()p Fr(const)30 -b(char)565 621 y(*)p Fm(name)5 b Fj(\))3525 833 y Fu(F)-8 -b(unction)-3725 b Fh(const)40 b(stp_papersize_t)h Fk(stp)p -1432 833 V 41 w(get)p 1628 833 V 40 w(pap)s(ersize)p -2136 833 V 40 w(b)m(y)p 2297 833 V 41 w(size)k Fj(\()p -Fr(int)30 b Fm(l)p Fr(,)f(int)g Fm(w)8 b Fj(\))3525 1155 -y Fu(F)-8 b(unction)-3725 b Fh(const)40 b(stp_papersize_t)i -Fk(stp)p 1433 1155 V 41 w(get)p 1629 1155 V 41 w(pap)s(ersize)p -2138 1155 V 39 w(b)m(y)p 2298 1155 V 41 w(index)j Fj(\()p -Fr(int)30 b Fm(index)6 b Fj(\))3525 1367 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 1367 V 40 w(pap)s(ersize)p -1457 1367 V 40 w(get)p 1652 1367 V 40 w(name)45 b Fj(\()p -Fr(const)29 b(stp_papersize_t)565 1477 y Fm(pt)r Fj(\))3525 -1689 y Fu(F)-8 b(unction)-3725 b Fh(unsigned)41 b Fk(stp)p -768 1689 V 40 w(pap)s(ersize)p 1276 1689 V 40 w(get)p -1471 1689 V 40 w(width)j Fj(\()p Fr(const)30 b(stp_papersize_t)c -Fm(pt)r Fj(\))3525 1902 y Fu(F)-8 b(unction)-3725 b Fh(unsigned)41 -b Fk(stp)p 768 1902 V 40 w(pap)s(ersize)p 1276 1902 V -40 w(get)p 1471 1902 V 40 w(heigh)m(t)j Fj(\()p Fr(const)29 -b(stp_papersize_t)e Fm(pt)r Fj(\))3525 2114 y Fu(F)-8 -b(unction)-3725 b Fh(unsigned)41 b Fk(stp)p 768 2114 -V 40 w(pap)s(ersize)p 1276 2114 V 40 w(get)p 1471 2114 -V 40 w(top)k Fj(\()p Fr(const)30 b(stp_papersize_t)c -Fm(pt)r Fj(\))3525 2326 y Fu(F)-8 b(unction)-3725 b Fh(unsigned)41 -b Fk(stp)p 768 2326 V 40 w(pap)s(ersize)p 1276 2326 V -40 w(get)p 1471 2326 V 40 w(left)k Fj(\()p Fr(const)29 -b(stp_papersize_t)d Fm(pt)r Fj(\))3525 2539 y Fu(F)-8 -b(unction)-3725 b Fh(unsigned)41 b Fk(stp)p 768 2539 -V 40 w(pap)s(ersize)p 1276 2539 V 40 w(get)p 1471 2539 -V 40 w(b)s(ottom)46 b Fj(\()p Fr(const)29 b(stp_papersize_t)d -Fm(pt)r Fj(\))3525 2751 y Fu(F)-8 b(unction)-3725 b Fh(unsigned)41 -b Fk(stp)p 768 2751 V 40 w(pap)s(ersize)p 1276 2751 V -40 w(get)p 1471 2751 V 40 w(righ)m(t)k Fj(\()p Fr(const)29 -b(stp_papersize_t)e Fm(pt)r Fj(\))3525 2963 y Fu(F)-8 -b(unction)-3725 b Fh(stp_papersize_unit_t)44 b Fk(stp)p -1395 2963 V 41 w(pap)s(ersize)p 1904 2963 V 39 w(get)p -2098 2963 V 41 w(unit)g Fj(\()p Fr(const)565 3073 y(stp_papersize_t)26 -b Fm(pt)r Fj(\))150 3308 y Ft(4.6)68 b(Prin)l(ter)46 -b(functions)3474 3605 y Fu(Data)32 b(t)m(yp)s(e)-3724 -b Fh(void)39 b(*)g Fk(stp)p 649 3605 V 41 w(prin)m(ter)p -1039 3605 V 39 w(t)390 3714 y Fu(This)29 b(is)g(an)h(opaque)h(data)g(t) -m(yp)s(e,)g(whose)f(structure)g(is)f(not)i(visible)d(to)j(the)f(user.) -3525 3953 y(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p -506 3953 V 41 w(kno)m(wn)p 872 3953 V 41 w(prin)m(ters)44 -b Fj(\()p Fr(void)p Fj(\))3525 4166 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(stp_printer_t)i Fk(stp)p 1329 4166 V -40 w(get)p 1524 4166 V 41 w(prin)m(ter)p 1914 4166 V -40 w(b)m(y)p 2075 4166 V 41 w(index)i Fj(\()p Fr(int)30 -b Fm(idx)6 b Fj(\))3525 4378 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 4378 V 40 w(prin)m(ter)p -1338 4378 V 40 w(get)p 1533 4378 V 40 w(long)p 1783 4378 -V 42 w(name)45 b Fj(\()p Fr(const)29 b(stp_printer_t)565 -4487 y Fm(p)s Fj(\))3525 4700 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(stp_printer_t)i Fk(stp)p 1329 4700 V -40 w(get)p 1524 4700 V 41 w(prin)m(ter)p 1914 4700 V -40 w(b)m(y)p 2075 4700 V 41 w(long)p 2326 4700 V 41 w(name)j -Fj(\()p Fr(const)565 4809 y(char)29 b(*)p Fm(long)p 1006 -4809 28 4 v 32 w(name)5 b Fj(\))3525 5022 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(stp_printer_t)i Fk(stp)p 1329 5022 35 -5 v 40 w(get)p 1524 5022 V 41 w(prin)m(ter)p 1914 5022 -V 40 w(b)m(y)p 2075 5022 V 41 w(driv)m(er)j Fj(\()p Fr(const)29 -b(char)565 5131 y(*)p Fm(driv)m(er)7 b Fj(\))3525 5344 -y Fu(F)-8 b(unction)-3725 b Fh(int)39 b Fk(stp)p 506 -5344 V 41 w(get)p 702 5344 V 40 w(prin)m(ter)p 1091 5344 -V 40 w(index)p 1404 5344 V 40 w(b)m(y)p 1565 5344 V 41 -w(driv)m(er)46 b Fj(\()p Fr(const)29 b(char)g(*)p Fm(driv)m(er)7 -b Fj(\))p eop -%%Page: 23 28 -23 27 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(23)3525 299 y(F)-8 b(unction)-3725 b Fh(const)40 b(char)f(*)g -Fk(stp)p 949 299 35 5 v 40 w(prin)m(ter)p 1338 299 V -40 w(get)p 1533 299 V 40 w(driv)m(er)46 b Fj(\()p Fr(const)29 -b(stp_printer_t)e Fm(p)s Fj(\))3525 513 y Fu(F)-8 b(unction)-3725 -b Fh(int)39 b Fk(stp)p 506 513 V 41 w(prin)m(ter)p 896 -513 V 39 w(get)p 1090 513 V 41 w(mo)s(del)45 b Fj(\()p -Fr(const)30 b(stp_printer_t)c Fm(p)s Fj(\))3525 727 y -Fu(F)-8 b(unction)-3725 b Fh(const)40 b(stp_printfuncs_t)j(*)38 -b Fk(stp)p 1576 727 V 41 w(prin)m(ter)p 1966 727 V 40 -w(get)p 2161 727 V 40 w(prin)m(tfuncs)44 b Fj(\()p Fr(const)565 -837 y(stp_printer_t)27 b Fm(p)s Fj(\))3474 1051 y Fu(Data)32 -b(t)m(yp)s(e)-3724 b Fk(stp)p 311 1051 V 41 w(prin)m(tfuncs)p -860 1051 V 39 w(t)630 1155 y Fr(typedef)46 b(struct)630 -1259 y({)725 1362 y(char)95 b(**\(*parameters\)\(const)42 -b(stp_printer_t)i(printer,)1775 1466 y(const)j(char)f(*ppd_file,)1775 -1570 y(const)h(char)f(*name,)h(int)f(*count\);)725 1674 -y(void)95 b(\(*media_size\)\(const)42 b(stp_printer_t)j(printer,)1680 -1778 y(const)h(stp_vars_t)f(v,)j(int)e(*width,)1680 1881 -y(int)h(*height\);)725 1985 y(void)95 b(\(*imageable_area\)\(const)41 -b(stp_printer_t)j(printer,)1871 2089 y(const)i(stp_vars_t)f(v,)1871 -2193 y(int)i(*left,)f(int)h(*right,)1871 2296 y(int)g(*bottom,)e(int)i -(*top\);)725 2400 y(void)95 b(\(*limit\)\(const)44 b(stp_printer_t)g -(printer,)1441 2504 y(const)j(stp_vars_t)e(v,)1441 2608 -y(int)i(*width,)f(int)h(*height\);)725 2711 y(void)95 -b(\(*print\)\(const)44 b(stp_printer_t)g(printer,)1441 -2815 y(stp_image_t)h(*image,)h(const)g(stp_vars_t)f(v\);)725 -2919 y(const)i(char)f(*\(*default_parameters\)\(con)o(st)c -(stp_printer_t)i(printer,)2348 3023 y(const)j(char)f(*ppd_file,)2348 -3127 y(const)h(char)f(*name\);)725 3230 y(void)95 b -(\(*describe_resolution\)\(c)o(ons)o(t)42 b(stp_printer_t)i(printer,) -2110 3334 y(const)i(char)h(*resolution,)2110 3438 y(int)f(*x,)h(int)g -(*y\);)725 3542 y(int)143 b(\(*verify\)\(const)43 b(stp_printer_t)i(p,) -i(const)f(stp_vars_t)f(v\);)630 3645 y(})i(stp_printfuncs_t;)3474 -3887 y Fu(Data)32 b(t)m(yp)s(e)-3724 b Fk(stp)p 311 3887 -V 41 w(image)p 645 3887 V 41 w(t)630 3991 y Fr(typedef)46 -b(struct)g(stp_image)630 4095 y({)725 4198 y(void)h(\(*init\)\(struct)d -(stp_image)h(*image\);)725 4302 y(void)i(\(*reset\)\(struct)d -(stp_image)h(*image\);)725 4406 y(void)i(\(*transpose\)\(struct)c -(stp_image)i(*image\);)725 4510 y(void)i(\(*hflip\)\(struct)d -(stp_image)h(*image\);)725 4614 y(void)i(\(*vflip\)\(struct)d -(stp_image)h(*image\);)725 4717 y(void)i(\(*crop\)\(struct)d(stp_image) -h(*image,)1346 4821 y(int)i(left,)f(int)h(top,)g(int)g(right,)1346 -4925 y(int)g(bottom\);)725 5029 y(void)g(\(*rotate_ccw\)\(struct)42 -b(stp_image)k(*image\);)725 5132 y(void)h(\(*rotate_cw\)\(struct)c -(stp_image)i(*image\);)725 5236 y(void)i(\(*rotate_180\)\(struct)42 -b(stp_image)k(*image\);)725 5340 y(int)95 b(\(*bpp\)\(struct)44 -b(stp_image)i(*image\);)p eop -%%Page: 24 29 -24 28 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(24)725 299 y Fr(int)95 b(\(*width\)\(struct)44 b(stp_image)h -(*image\);)725 403 y(int)95 b(\(*height\)\(struct)43 -b(stp_image)j(*image\);)725 506 y(void)h(\(*get_row\)\(struct)c -(stp_image)i(*image,)1012 610 y(unsigned)g(char)i(*data,)f(int)h -(row\);)725 714 y(const)g(char)f(*\(*get_appname\)\(struct)c(stp_image) -j(*image\);)725 818 y(void)i(\(*progress_init\)\(struct)42 -b(stp_image)j(*image\);)725 922 y(void)i(\(*note_progress\)\(struct)42 -b(stp_image)j(*image,)1012 1025 y(double)h(current,)f(double)i -(total\);)725 1129 y(void)g(\(*progress_conclude\)\(stru)o(ct)41 -b(stp_image)46 b(*image\);)725 1233 y(void)h(*rep;)630 -1337 y(})g(stp_image_t;)390 1479 y Fu(This)40 b(is)h(an)g(abstract)i -(data)f(t)m(yp)s(e)g(for)g(in)m(terfacing)f(with)f(the)i(program)g -(whic)m(h)e(created)j(the)390 1589 y(image.)3525 1846 -y(F)-8 b(unction)-3725 b Fh(const)40 b(stp_vars_t)h Fk(stp)p -1172 1846 35 5 v 41 w(prin)m(ter)p 1562 1846 V 39 w(get)p -1756 1846 V 41 w(prin)m(tv)-6 b(ars)44 b Fj(\()p Fr(const)565 -1956 y(stp_printer_t)27 b Fm(p)s Fj(\))150 2200 y Ft(4.7)68 -b(Settings)46 b(functions)3525 2515 y Fu(F)-8 b(unction)-3725 -b Fh(stp_convert_t)42 b Fk(stp)p 1029 2515 V 41 w(c)m(ho)s(ose)p -1397 2515 V 41 w(colorfunc)j Fj(\()p Fr(int)30 b Fm(output)p -2416 2515 28 4 v 32 w(t)m(yp)s(e)p Fr(,)h(int)565 2625 -y Fm(image)p 802 2625 V 33 w(bpp)p Fr(,)e(const)g(unsigned)f(char)h(*)p -Fm(cmap)p Fr(,)h(int)f(*)p Fm(out)p 2657 2625 V 33 w(bpp)p -Fr(,)g(const)g(stp_vars_t)565 2735 y Fm(v)8 b Fj(\))3525 -2959 y Fu(F)-8 b(unction)-3725 b Fh(void)39 b Fk(stp)p -558 2959 35 5 v 41 w(compute)p 1028 2959 V 40 w(page)p -1298 2959 V 41 w(parameters)44 b Fj(\()p Fr(int)30 b -Fm(page)p 2332 2959 28 4 v 33 w(righ)m(t)p Fr(,)g(int)565 -3069 y Fm(page)p 751 3069 V 34 w(left)p Fr(,)f(int)h -Fm(page)p 1346 3069 V 34 w(top)p Fr(,)g(int)f Fm(page)p -1943 3069 V 34 w(b)s(ottom)p Fr(,)h(double)f Fm(scaling)p -Fr(,)g(int)h Fm(image)p 3414 3069 V 33 w(width)p Fr(,)565 -3179 y(int)g Fm(image)p 976 3179 V 33 w(heigh)m(t)p Fr(,)g(stp_image_t) -d(*)p Fm(image)p Fr(,)j(int)f(*)p Fm(orien)m(tation)p -Fr(,)h(int)g(*page_width,)565 3288 y(int)g(*)p Fm(page)p -973 3288 V 33 w(heigh)m(t)p Fr(,)g(int)f(*)p Fm(out)p -1681 3288 V 33 w(width)p Fr(,)f(int)i(*)p Fm(out)p 2372 -3288 V 33 w(heigh)m(t)p Fr(,)g(int)f(*)p Fm(left)p Fr(,)h(int)f(*)p -Fm(top)s Fj(\))3525 3513 y Fu(F)-8 b(unction)-3725 b -Fh(const)40 b(stp_vars_t)h Fk(stp)p 1172 3513 35 5 v -41 w(default)p 1562 3513 V 39 w(settings)j Fj(\()p Fr(void)p -Fj(\))3525 3738 y Fu(F)-8 b(unction)-3725 b Fh(const)40 -b(stp_vars_t)h Fk(stp)p 1172 3738 V 41 w(maxim)m(um)p -1707 3738 V 42 w(settings)j Fj(\()p Fr(void)p Fj(\))3525 -3963 y Fu(F)-8 b(unction)-3725 b Fh(const)40 b(stp_vars_t)h -Fk(stp)p 1172 3963 V 41 w(minim)m(um)p 1687 3963 V 41 -w(settings)j Fj(\()p Fr(void)p Fj(\))150 4207 y Ft(4.8)68 -b(V)-11 b(ersion)45 b(functions)3525 4522 y Fu(F)-8 b(unction)-3725 -b Fh(const)40 b(char)f(*)g Fk(stp)p 949 4522 V 40 w(c)m(hec)m(k)p -1262 4522 V 41 w(v)m(ersion)45 b Fj(\()p Fr(unsigned)28 -b(int)i Fm(required)p 2650 4522 28 4 v 31 w(ma)5 b(jor)p -Fr(,)390 4632 y Fu(unsigned)28 b(in)m(t)i Fm(required)p -1241 4632 V 31 w(minor)p Fu(,)f(unsigned)g(in)m(t)g Fm(required)p -2406 4632 V 31 w(micro)5 b Fu(\))390 4774 y(This)31 b(function)g(c)m -(hec)m(ks)k(whether)d(the)h(v)m(ersion)f(of)h(libgimpprin)m(t)28 -b(that)33 b(the)g(program)g(is)f(link)m(ed)390 4884 y(with)40 -b(is)h(equal)g(to)h(the)g(v)m(ersion)f(n)m(um)m(b)s(er)f(passed)h(to)i -(it.)73 b(If)42 b(the)f(v)m(ersion)g(is)g(the)h(same,)j(the)390 -4994 y(function)32 b(returns)h Fr(NULL)p Fu(.)49 b(If)33 -b(an)m(y)h(of)f(the)h(v)m(ersion)f(n)m(um)m(b)s(ers)f(do)i(not)g(matc)m -(h)g(\(i.e.)51 b(the)33 b(library)390 5103 y(v)m(ersion)38 -b(is)g(to)s(o)h(old)f(or)h(to)s(o)g(new\),)i(a)e(string)f(con)m -(taining)g(a)h(desription)d(of)j(the)g(di\013erence)f(is)390 -5213 y(returned.)43 b(The)32 b(\014rst)f(error)g(found)f(is)h -(returned.)44 b(The)31 b(function)f(c)m(hec)m(ks)j(in)e(the)g(order)h -(ma)5 b(jor,)390 5322 y(minor,)29 b(micro.)p eop -%%Page: 25 30 -25 29 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(F)-8 b(unctions)2658 -b(25)150 299 y Fg(4.8.1)63 b(V)-10 b(ersion)41 b(macros)3624 -591 y Fu(Macro)-3723 b Fk(GIMPPRINT)p 854 591 35 5 v -42 w(CHECK)p 1317 591 V 40 w(VERSION)45 b Fj(\()p Fm(ma)5 -b(jor,minor,micro)p Fj(\))390 701 y Fu(This)42 b(macro)i(returns)e -(zero)i(if)f(the)h(v)m(ersion)f(of)g(the)h(libgimpprin)m(t)39 -b(headers)k(are)h(greater)h(or)390 810 y(equal)36 b(to)g(the)h(v)m -(ersion)e(giv)m(en)h(as)g(an)g(argumen)m(t.)59 b(It)36 -b(returns)e(nonzero)j(if)e(the)h(v)m(ersion)g(of)g(the)390 -920 y(libgimpprin)m(t)26 b(headers)k(are)h(less)e(than)i(the)f(argumen) -m(t.)3624 1154 y(Macro)-3723 b Fk(GIMPPRINT)p 854 1154 -V 42 w(MAJOR)p 1323 1154 V 41 w(VERSION)3624 1363 y Fu(Macro)g -Fk(GIMPPRINT)p 854 1363 V 42 w(MINOR)p 1310 1363 V 41 -w(VERSION)3624 1572 y Fu(Macro)g Fk(GIMPPRINT)p 854 1572 -V 42 w(MICR)m(O)p 1300 1572 V 41 w(VERSION)3624 1782 -y Fu(Macro)g Fk(GIMPPRINT)p 854 1782 V 42 w(CURRENT)p -1484 1782 V 41 w(INTERF)-13 b(A)m(CE)3624 1991 y Fu(Macro)-3723 -b Fk(GIMPPRINT)p 854 1991 V 42 w(BINAR)-10 b(Y)p 1360 -1991 V 41 w(A)m(GE)3624 2200 y Fu(Macro)-3723 b Fk(GIMPPRINT)p -854 2200 V 42 w(INTERF)-13 b(A)m(CE)p 1571 2200 V 41 -w(A)m(GE)275 2359 y Fu(These)21 b(macros)i(are)f(in)m(tegers)h(holding) -c(the)k(v)m(ersion)e(n)m(um)m(b)s(ers.)37 b(They)21 b(should)f(b)s(e)i -(used)f(for)h(compile-)150 2469 y(time)e(c)m(hec)m(king)i(only)-8 -b(.)37 b(T)-8 b(o)21 b(c)m(hec)m(k)h(v)m(ersion)e(n)m(um)m(b)s(ers)f -(at)i(run-time,)h(use)e(the)h(equiv)-5 b(alen)m(t)20 -b(v)-5 b(ariables.)36 b(Note)150 2579 y(that)h(at)h(presen)m(t)f -(\(4.1.x)h(dev)m(elopmen)m(t)f(branc)m(h\))g(the)f(library)f(in)m -(terface)i(v)m(ersion)f(n)m(um)m(b)s(ers)g(are)h(not)150 -2688 y(used.)150 2912 y Fg(4.8.2)63 b(V)-10 b(ersion)41 -b(v)-7 b(ariables)3546 3205 y Fu(V)f(ariable)-3725 b -Fh(const)40 b(unsigned)g(int)f Fk(gimpprin)m(t)p 1605 -3205 V 41 w(ma)6 b(jor)p 1942 3205 V 42 w(v)m(ersion)3546 -3414 y Fu(V)-8 b(ariable)-3725 b Fh(const)40 b(unsigned)g(int)f -Fk(gimpprin)m(t)p 1605 3414 V 41 w(minor)p 1941 3414 -V 41 w(v)m(ersion)3546 3623 y Fu(V)-8 b(ariable)-3725 -b Fh(const)40 b(unsigned)g(int)f Fk(gimpprin)m(t)p 1605 -3623 V 41 w(micro)p 1928 3623 V 42 w(v)m(ersion)3546 -3832 y Fu(V)-8 b(ariable)-3725 b Fh(const)40 b(unsigned)g(int)f -Fk(gimpprin)m(t)p 1605 3832 V 41 w(curren)m(t)p 2014 -3832 V 39 w(in)m(terface)3546 4042 y Fu(V)-8 b(ariable)-3725 -b Fh(const)40 b(unsigned)g(int)f Fk(gimpprin)m(t)p 1605 -4042 V 41 w(binary)p 1969 4042 V 40 w(age)3546 4251 y -Fu(V)-8 b(ariable)-3725 b Fh(const)40 b(unsigned)g(int)f -Fk(gimpprin)m(t)p 1605 4251 V 41 w(in)m(terface)p 2079 -4251 V 39 w(age)275 4410 y Fu(These)24 b(v)-5 b(ariables)24 -b(hold)g(the)h(library)d(v)m(ersion)j(n)m(um)m(b)s(ers.)37 -b(Because)27 b(the)e(v)m(ersion)f(of)i(the)f(library)d(ma)m(y)150 -4520 y(c)m(hange)36 b(on)f(a)h(system)f(using)e(shared)i(libraries,)e -(these)j(should)d(b)s(e)h(used)h(instead)f(of)h(the)g(equiv)-5 -b(alen)m(t)150 4629 y(macros)34 b(when)f(c)m(hec)m(king)h(the)g -(library)d(v)m(ersion)i(at)i(run-time.)49 b(Note)35 b(that)f(library)d -(in)m(terface)j(v)m(ersion)150 4739 y(n)m(um)m(b)s(ers)29 -b(are)i(not)f(used)g(in)f(the)i(dev)m(elopmen)m(t)f(branc)m(h,)g(but)g -(are)h(in)e(the)h(stable)g(branc)m(h.)p eop -%%Page: 26 31 -26 30 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Programs)2663 -b(26)150 299 y Fp(5)80 b(Programs)275 1135 y Fu(This)48 -b(c)m(hapter)j(of)g(the)g(man)m(ual)e(describ)s(es)g(the)i(use)f(of)h -(some)g(of)f(the)h(programs)f(whic)m(h)f(use)150 1245 -y(the)60 b(GIMP-Prin)m(t)f(library)e(\(libgimpprin)m(t\).)124 -b(Note)61 b(that)f(there)g(is)e(no)m(w)i(a)g(user)e(man)m(ual)h(in)150 -1355 y(Do)s(cBo)s(ok/SGML)30 b(format,)f(curren)m(tly)e(pro)m(vided)f -(in)h(HTML,)h(P)m(ostScript)f(and)h(PDF)g(formats)g(whic)m(h)150 -1464 y(is)k(distributed)e(with)h(GIMP-Prin)m(t.)48 b(This)31 -b(man)m(ual)h(curren)m(tly)g(co)m(v)m(ers)i(the)f(use)g(of)g(the)g -(GIMP)g(Prin)m(t)150 1574 y(plugin)28 b(and)i(CUPS)f(driv)m(ers.)150 -2333 y Ft(5.1)68 b(The)45 b(GIMP)f(Prin)l(t)h(plugin)275 -2726 y Fu(The)34 b(GIMP)h(Prin)m(t)f(plugin)f(is)h(the)h(prin)m(ting)e -(facilit)m(y)h(for)g(the)i(GNU)f(Image)h(Manipulation)d(Pro-)150 -2836 y(gram)352 2803 y Ff(1)390 2836 y Fu(.)40 b(This)29 -b(section)h(examines)g(the)h(features)f(o\013ered)h(b)m(y)f(the)h(Prin) -m(t)e(plugin.)275 3171 y(The)g(main)h(windo)m(w)e(is)i(divided)e(in)m -(to)i(\014v)m(e)h(panes:)150 3797 y Fg(5.1.1)63 b(Preview)275 -4190 y Fu(The)25 b(Preview)g(pane)g(con)m(tains)h(a)g(p)s(ositioning)d -(widget)i(that)i(allo)m(ws)e(in)m(teractiv)m(ely)h(p)s(ositioning)d -(the)150 4300 y(output)31 b(on)h(the)f(page.)45 b(It)32 -b(con)m(tains)g(an)f(outer)h(b)s(order,)f(represen)m(ting)f(the)i -(sheet)g(of)g(pap)s(er;)f(an)h(inner)150 4410 y(b)s(order,)f(represen)m -(ting)f(the)i(prin)m(table)e(area)i(of)g(the)g(prin)m(ter;)f(an)g(arro) -m(w,)h(p)s(oin)m(ting)e(to)j(the)e(top)h(of)g(the)150 -4519 y(page)h(\(the)f(end)g(that's)g(fed)g(in)m(to)g(the)g(prin)m -(ter\);)g(and)g(a)g(blac)m(k)g(rectangle,)h(represen)m(ting)f(the)g(p)s -(osition)150 4629 y(of)h(the)h(image)f(on)h(the)f(page.)50 -b(The)33 b(image)h(can)f(b)s(e)g(mo)m(v)m(ed)h(around)e(on)h(the)h(pap) -s(er.)48 b(When)33 b(the)h(\014rst)150 4738 y(\(left\))g(button)f(is)g -(used,)g(the)h(image)g(is)f(mo)m(v)m(ed)h(in)e(screen)i(pixels;)g(when) -e(an)m(y)i(other)g(button)f(is)f(used,)p 150 5241 1200 -4 v 199 5308 a Ff(1)275 5340 y Fe(http://www.gimp.org)p -eop -%%Page: 27 32 -27 31 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Programs)2663 -b(27)150 299 y(the)35 b(image)h(is)e(mo)m(v)m(ed)i(in)e(p)s(oin)m(ts) -1320 266 y Ff(2)1356 299 y Fu(.)55 b(The)35 b(arro)m(w)g(resizes)g(dep) -s(ending)e(up)s(on)g(the)j(media)e(size)h(c)m(hosen;)150 -408 y(the)c(shaft)f(of)g(the)h(arro)m(w)f(is)g(alw)m(a)m(ys)h(equal)f -(to)h(one)f(inc)m(h)g(on)g(the)h(output.)750 3378 y @beginspecial -0 @llx 0 @lly 647 @urx 647 @ury 2880 @rwi @setspecial -%%BeginDocument: print-main.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (print-main.eps) -%%CreationDate: (Sun Feb 29 19:56:03 2004) -%%BoundingBox: 0 0 647 647 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 647 647 -userdict begin -%%BeginData: -DisplayImage -0 0 -648 648 -12.000000 -648 648 -0 -0 -0 -GhVQ@$[`q*^%hWSdL0pV25M*AV*KTN.8WW)5sPT6;*b^^r@9fAUBjI,"?iJF`KTuqMAV0u7K -e8B+p8KDK5a@1U(@Hr1E`%669q5$V)6]MP&L?HrH2E.o#roAI:hX5IduF*Sa=YI4L6i9bjK)p -Z2ak)zzzz!!!!A4Z.-mI;[SA+WsF"G!P_<'mce,hsnlkE*`MU459bRmKTI9q@4?[T+,nWj;:F -OfBueQ;#*oAn("S-D%eF0#:dhRd?Gq7)*Qr*/n#>D$T/? -"c4Su=h.ct/jqcjo7sd5``/RlKk?h.rSYnm*N4!sd?0.LZgu>M_#O"[+^QpXA\e2\r8"aH=pM( -%2VLAZ,,4k^GnSWRm<;b9Qad%g&nhL#FW5]<1BTd_8M>Gs1nuZVqA:q%D]tW#8=K:8\kRcdcA -tbOIYZ[C6[.31[b/=n"\3"kW)(s-?u:IBT!NJ/i7o5$s>U"6uL3#F`F,9HnX_]gtD["?g+pS. -`3P?G!Q2T7NRH#BH^,?1pEg%^bDRmP:t!UTfpLZK:dD:TpguDaKdf"=\QJq(/oAr%"u;]Li4[P*:U;<+I8 -pTu!H/oQ_huW)V8%S[BSXjeLL]"ejg+JWuQH6P]PI&Sudm#K5HpWkjTY0SE3G=!13bN-X@MB7#Nbr&l0a_lh]fO90/m,Z -^\k?AG+i13*EdcMSG*1IlQeKm;,2M"1ql\Eg3r23fn0OU*2oLW^Mpg!"k.hmX6nSa>5)?%]Cq -WI3H%g9XqTRQCtlP]KU,d$RV-HCW-3"+e1lpr7lQAKi)+Bkm`/$$MV(Q\69 -a94lbH']XBB6V$Ui3e+d3Hj'Q&"djqgU-P2bM\%o"3*,VMjR4`H((NEqu-o_p?Cma34;IQZ!i -eBC.X"qJLqXh.>N/\c!o#krW=OhN.*OF56KFa3U$U=q@4QZ=$T%r/$@*SC -"Y/\AfQ/2U!.>5@mgMplVtZl#KhPAH4HZb>tUcRpM!t'gNONBkp3_ ->PmSe;o3baApO3R)PDJ&c#gU/).gN(6^k!Q$t3cJQWr,!D9NGI0lD#K=?Fd';;*A_0cqU9qp"*`l>$:lgXR2?3IBq"YIm,F^J!-)kaO>@S'=Wd -?SLhNR*kG;lr4^td?+K]7\bcfGo\Ph6:kfl3.8km,*UMPk0F+99aDjA)p+FV -"h-SL\(0+i!)/8pi0c]j2[PJQ)3]i/7O:" -K5G#!1hAT?4*+jb8WRTBFB^^*_0S8Y/(6SipC\*]*H\Ob;5s"s,t@s%eFBFhbWaNr#@)*8#\q -r`rUMn%l:TQ*gCROb#d09WU&X+=6.87L>MZc_=t)P -3:cV=,9H56m/Gjcgs^?6mG/.gmQ09pcM?iJHagHPGsUc/DmmkQVg52d/Xh)sdu7cUV]FGEGsV -E(h:d=&\Qnr3BmW+ZJ%pC*?9.at3TH1kg" -YUu^Qi;IQG[VX>'T_uJh%'!^T;qaO8AR\W4-YacQ:?e]7%A.f.V@9I!Wh.T5!3A`7A(N/MiE( -SpoapWUFYl]V'8]h@8N.e;p"p2er9Q&,`I$80A>Y]3MpDq>\Te<_cNidl@Zrin:nZqcfQUSCL<3(X -6&"NjQU5"I_KIX;n@06WG@9MFj<1RA*,N5gE#*RHUQ',6^stn\7jn"VJYKRNn -_*Qm#:egPO#Xu6^KUPr%:)*40OKu2=`dJPo%c7;;:3TWp3jY]e'k.Blr%ZQU&l,lg.,=*g;Ie -/6nOl^S]H@G\qo]f5$"WIR*V,(Z_"IjJ`mBqh4SmQ[9g;]C)$CG0>kNEn0X>nseb#lXfUOEpi -%0Aug=A,!#XMH2fhbLpLX,dt`,Dgu'f_%*Ul6J'J@K4+4J[LZ<]h5IPpiqmpA\ft#qN3bf1BT -6>2>PQ`Y&ju6)kF4#YHS&XjB3-JoOQmq^'[]LK/\ot+m\suLWFP6=u43]"/r_L3C>Go[0M*Z' -<6s1T"`uar'2)`fcWWG=[ocM17]9pn0b<_I<:u1?@Y;a5)6=*kH0<^[ArN^Ht4DDp4O2utJ96 -[jerEaBPt7HcdC8PNR'`g9kGMSG$fDCn38\A_bMlEOC_E:2Ln*Z#TF2L/H^TNuV.Y@K]u^/9A -D(^NdI_(h_i\G.CLr@c\>@=8)KQqR/qTjk"'V>XH*R=n>LWI[;Y,8[7CjdcFSq])8kHr1^j6; -H>t1:Hft`4

    [Aet7G;nU/fb^4Q>u2-it4jo+qsV28M3B/m)oGT^]al3up_f+L.E -+*8B:596WEDg$EdbF?8SiYd%08br7Yo([k.BXdp$:0I90l+0/u]0^DJ9Wkp&IWiG1qGk)aMfS -g=o!OP"Q]@;/hCck;+Wo?ckWQ6WO-heDfSoes[d-#"HLJ`)Scr')pRBU=n)Vd*8KE.OCu9Bif -"'gFFr],HrAKRGN+o:4h)K+J_mUfU[i&%%HE5a3F?-,eh;rmRa,]`eZKo_s*)"srfmf1qBlTMYHLJR4q -FDC^--FYUpfWstSc$PFW[-P6!S]W'#4Uq37H4C8UTOD!,@Ta&7 -BCQgl[e>dRj`d$m'YK7]3G(4?1t\:bF:D>S(,#^AbFOCir@,AJ!H;na -]!E,j1gdJDj#mYO[&kNQMjYJ^-K9TPM_rVSY)5f4t5+]Vu6I+q8qCPL\hKc[+F6q\q0Hsn,LD -?^AloppWU02?ehXXZTE>YHMc"JB6AT<7f.t<\%[>qbBp*C+#[h1rO,GtO)*NlRteJKlXt$>2g -%OUR$s.AX]It4V]DVM/g$k0;g+R7=A@3^:4=nhY8Y3I_ -5]kpZ2>Fjkd2as*dhV4sROd<.=E>\bVe:rII=;mm$U=r<@_V:]Ct"lML -RP]e-kjHtV(!s4X=8loCVDgp,m\gUDZQF:HM=546RFYX5H^\t9`:!HlDBW@h -1dOp'OA02EZSB'Im,brc?GU6Ir!$CeZtlU?+SW2,%aIF@*m^D(i4Pott[lgh(9a5L"Q`cTRQcfb$P(-^bc[A=[^FIP^P*MZ*'d&dV&'.]<*d[bR_2$ -o.nA%-^QQFrVa+_4A?-mZAIbe)oe(%dVft)ON7D$"#5I^=@*F$7bIIjEo(*-c:FPPrs,:>Ah1 -9Q)p0m,R=XIVbG1Q!ehHk'd1=iPYGb%%ij$V?\5rP*97'&!17O$bF/k\p$'KVsMan4=pTFKC&+BD16[Bi!Hd -B!M\pqJfldkm&*W'sVU9;1H?L(%$>J;tmq.m;QSMm8-jCsSqSD8)Eq"b/(lZV0sFrFZ3.(X6B -jZKj4Ef/%Jql/^%'r/tCr/e!"P.qGtn*BQ&lZ1l0\SIDaYt8ii.+`C%.lPOG?BZJD-;.[/Df1 -ZC2ot/@aJ]"`NW519%hAQY97o_t2t675q@C(3%XkSUmE9ecqEt".[s%._?0=CQG1?K#IJ<3 -[QdssZnkd<74DoE8>94mBr%4!(Y*D*#aDD$"j(c,JQ!FNM5I3U?r1n=$$QXr,s_npu4=eA(asI=!U2h>R8C?,,70b;ijL -cKO'Re;io\eNW:4XkOlJ;Z$IU.IUS"l&_bKq_sPiX's54oqQ-KNS&t:qit,hMrsI_JL)Gdgr)-/Z:.cFHA=]0SW+Xo.>sEqE/hD -6:,4pP/BF10F;,JN^a#5O[od]:RP7pPb\(TBkA(PcjCLka_=NNYrpRTDni@Bh,U*3NRMSgD4X -Q5h!5+)n26i0R?duel1m(N1nEt7@+%nLb;o./oQu^Kr?VC%(DUH>rcBKrpR4CYQ`ViFIea^][JJ-d?[hS7o'#-)i,VusJD@\/IWMFBn2pHbYN<'*jhc1$^J2FgTmZCFjl -HH)O*k)jC6H&u+F>(YgE/:0qd"i\NYn./B`F$8oM'g>DsbE5C&<*MS_l;MYKf^dG"eFX^?s_, -nT.mRD;W"NN(%6S2iXEW3,2@/f&Q$cN3:oM"C9;&\suhN^Hi[8$1[/ePTP-lq9:P,-83+b0>8 -hb=3?_&as2tg!tRrs4js!.\bTjJY![Zp/o?rts"':NSL7c)927QK:ABM?k6L+)_dq^-R6*p9: -E?I+1,s-n^spL);^_64RFjTHgRa68]!n6W2.:mqpi.>7[V6gB[WS&o/RugXNuGE>e>T7H[r*0 -GZ=1\-qQ73+X/Vf9=[e\KWbq>LZQNmQW=AJjW1hD6.s6.)bOX)>d_A[\4=SjVo#QH(J%'NDam -X/1hcqhd?QiML=FPXKr89ZbEfMu+6-_Sa52Rb9]LS!/RiFFahEG`=D)2D-RPAcsG5_;6n(W%i -n(uN>p70REqrFnc-[!_*fJ.$np?fo0c5P:iA"2Up@i%i\dkl&dj7lI\@n,%1)GrG&/%V6N20: -jVgA%n:gp,l6Y`ohCGa_9mmk/O+9a94lbH']XBB6V$Ui3gAX[e]7.hCG^J,69hh^Dc3a_dBf9 -c(uq/b4g@jelIO90OR:IR:d?IQ@-.q=8uTg298P]*s.7m_F[#qEM5`ha_kRrQj.[a3HTtdXuKQ:qiJ0+ -,o7UJ/UJ"VX)@DGHOQE#YQ(\0qn=bnpXGa\5.tJ#M*#g-FEZhe1HRe)?2Jta>7[@[ElaL-"", -_TG='ckEK*&@D:i`JrT(*H`f-kPMCrNT?-Xt3S3IcpFtgAJYJ2D'f#k$HakD2HdjM1Iq<,ZDs -!LrpO$%iG4E69]f?*S6je5?/Ja^d1kKCR%b2$]$=-MG=0tHro\`kfYIc8XR$O5A[+8GB?rBK) -Ln%uZmQ9BQ.\QefXmFq60SNBX)WT061gJ=3eg,Pkhf]gZLRBl%IPFE=]B\[B._jiIS1IfoSVo -tJsQh-(ekE#;e/ltfQ.Hd'N=2c+a*ni"]?]beuA[#OmXcPE$am)CW`V\bhh=B@ijk8P4hf"US -Ijn/u-BDLXs0l*r2p5RSPb-@bcR6f+4tK?fPe5d,FN;4M\(2)flG3C7%d7]#hg=$?4Vu^ms3D -`lhqG4(laq8/3N)h_*Et`gX6&@tRZFRVo\QQAn!MaP^k@GJa4>/n\o,AU\sucBfm!,^LF(_!U -@MSQ+n!je0^V -&TF;>QpZZkNAq.rF?+h%]e3BpQnDHoD#".pU"/`1oCD`Mg%75Ve12I[P`>FZCNmmTgL\:Inuq -@jrQf'RAb,-*1:UEj^EMpW,3r!h=&,'ha2pTad.?]Hr;2TYee.ik+4bYn4*pr$i1AgXm(V_7Y -,g`0[dW&B_`ccSB3sm_kI-no;tFX7004)BdkOc?h`\MYs7,coO0+m%a$^G'>Eg%GY1?@S>Pqe(2/Zo_!Jg[!&#N]jH6JO,X'6N6pPO$fDOkj`fkgE -u1@,S+dUq_lT&)s-eFjQ6nlr[ -WM=f=hRCugUR';*rdP0f?48KZ>?)eq23t9K8%GM2OK7&YlBrVEhONth1ZU!)!3<8gq#n&MT$@XCYm -jf4EOI*puTZ=9@ep9He9+Fd]D94*cF4>42;b7,u`QRh.&VrX#Ua^Ro3Hf_>!jKs^'`!>A@J!Q -jq%39K8i5'm[W5#HaiNN+o>h?UF07*?jBm8AZ?$fi/\_D>"Vjhh:p>9h]KH2+$&Vgc2>)7cMQIs.jS*97-!=f -R\tXSdF9D1-GQm,gB/D7mp/.i:>Mid[3N]?jc#qWcIH!<=`GtLS*6A1CN`inFb62<4"%$A9UF -4@H2mh`Bqj5&)%#amp3RdVbP!T8HpN(NQ&#>kbFXg-+-YG#Odg[XRQjAj\,>_j\_mrXml,:\Y -N>B-b/m`,LOL`AD3Ohb%ILiRYjORTH_/hRmq[?`S_^p$)*L'Rf"KN]>s"S33W%hW1I'YYj4Mr -:UKaT:d6-O;72$IqD*,LPh!PV]GHN#NUMfD>[3N]7\TbU>oiLtVrGppr\`ur#r-#XGAm'M6I,c\:o4QMD,<>aMo)AZT -,FW3DY7/\Qio$u;%d`c>rgc:(\'p2I4++,Bqi>jFqI%q!pNLM!<6+WT[nf)mFiqNPP7DE#3.K ->/4e'I[ei7inL+tLM7nos%\S^_7UIUb0-I>8LI>>]48SQogeZVA&YMd((fB^Ud5?5H>D7OfBq --^reZEJ+2 -aC:Wg]nsplF3D8E@hia2;,)rMDHVT`V5:X8e4Z*&?_-)O%b^=d;G4g:4(\ZGJh_T+upXFW&VX -2trC%mXE]/nm+*]J/ff^5-I9Pkb4WF=;bocprF)_npIWtBG6UZc`)nTeL;A'nlV -[5P&.X&lE,rJuH0?Emu4'2K$!qWO@QHe-uaCs?70^&5Ls?gbR2q.&sjfFDM:q2L(G1M4k0_]SmIa$9Rn:O -VM,TDe+hcT'sD1XA2TlX0\gH0:aMdaE0P"W(EaaX*9[HKjOX?[fs/='Tgk2:l2brQR:Yr0uUA -k)MOk\F\!-]=Y\A/R.q8^\m2eLE9X5I/.954ndB(:T[a(U;+JCq<+AW[;+6\2/CdF>IT([qG! -G;%1NbHHR'.,?-Xt3S3IcpG+d$#3Ig75?I@m4Z08Iq?)Gg@6^RD%0'A9aQQ>9F?-XP'S6+qsO -HG-8QeSmpjn-r36p[12W\ikZT:4]dJ)J:m9a*>b/B4X^80A>P$m8#])2O)$",IOp"sTeb!+J? -_JV`MFJ/H[F+JN=g=oZ1:k,A!@0n@X!7[J[>$JXYRDecBuUIL:FKE>E`,-!)2QX@rBX5]'+%D` -%]$XEr\U#1o6C37Z%-b(L@]4K3k>*s:_ -3pRp[rB+af/Rk&6'\7C,',jl//uOLX!tf+@bI38(J!U-'3^p`PqVDWn?Di$_j7.c0)?a%\W9<>R+([%Wo6pk]/;@6gVI9fO_P8qBpoub>XKTl -bC08Sr\0t(#qQGMhWkI:M#-k/gEiRla#XBG%/^o^<=^[qn=`@5?0W;n!Cr*+58enc;F6Q^_c[ -T>a80ok]2REEmE=sX8XJU@8rRl_oGcBK\k\s+M?(_4E4t7B*oiWbN?-?bt9Nk]Z:0\27f:sY/ -/Y\LsY@kq5h*4UAi@J"qXYYja?PiD:%MQJM*G<1+t-d+M?(_*)K$]glE!P>rJ4_>*F[*[q$dRe1Yf7?7C]*of*F?- -*Q@iFgdi/0,hL_3q<,5mHIED>*4AH4HZbP=VE;a?ZM`/$&/)dQ2>?-]K/jAaJb]VQUL2S,DoF -?'MH3Nq-ps!\V%-H(8SCZmP56^L_J6^MkoeE(HFE>%8AD>lohi?5a1>O$]P:7(R3/uO4Pk7q: -J+,_a5d,gM>jV6)']V!YbJ%8*4f^/1EBPl:S-V2hke(07$eK`,cTaga'kc!l$]9"67@1 -]"l^XI(Rak0-&M1ECQ\QT.7nG_q&L6FG?K!];j>n#25=ltM=9cRR_Jq5-h&s>5$/l -pa0(qAHUuLp`/?7GJ1ao0n2_f&4`@Ec9AcY9]t3R<7F[7V3p+.2*VO`p3F%oaC8.*_YiF58ED -9Pa?$989/gF\E3^$q*@IeX'3]IG+2TEp3<m;LIb5c!>Q[stV14U4hAKW2.S6,RUf1!-$Gb8*\%m7E36p[12Wbq>La<5+fW=AJjW1hC" -VUWuSS18[W7HB9DkDD7GA`OA-c7?Jr58IOJTZbCu\suiD3I`Tklp-o"5BJohk]6Z)Dsd+7`@# -9PP]KNbJ]u5UQb?EiIl5.2ns/[l8U6RO3P0Z^L!#6L8eLLR&b!*2/B@Rlf5=T;m*TAeF7S-uk -8FNHAV^Alh5#qK$uJ!4'Z+,%k-khpO -;cO]5l,$T?"A\lrfmtOJ'c^k2a8"Q?S@+T;88"&D-*MFbVF+mf6["el`4Mqm!i_l$R -*tpEi1ErZYVXbOXu)Zbgf%aIIj+=`ZjFS]pre0`(UN6I>ITkpJIM`#%ZY=I/^=0:+#3]po\Pm -\Ggp!tc9Ab>tPmL3n>/>aKk7fE3]mH-DK?Ek!o@?=+2e;Kg_N_/pR9S0E11MYqp>hrgD5VsE6 -,qGuluVuQM7Y4'DSICloYA5/f,M"pQ[rY?1qT?\r>F;bB -ZOCo>fk^YoW$`nqSj\'j]*,M_7*SbU<QXdo850`O%#BUkVD^a0'J"-#`MT/8\dW*Z>n0@fO)6u.43pK(6`- -fOCQ;]`Ah0bI]sqD+GKu)dGAQsuT16=M<3?6pKq@9D%q6J:6-a38mq4?6M(*WB(Hd0_-o -jt]sm+@RQVq<%'F;`.>\f=Ic?1utr[[I"VQ*#L"[TC5DhW5;mTmsg[BDH]'=^elMA.DlT8*?* -pd.>nm[gMu#FX><,I9#TYCu8C[hhD(.AtA&^pWKCi?8#re\SKQ'+I-2gn;jQn9S\.*4hY)(8$ZT5aR -TtFP.3d:MU2%Qh/7lb78V3q*UM?MD"(Q7@,%Y1@g2Qk7q:J+,_a5ct28K?-]MC&'.:-\]\jDk -VA5OF?-Ns@ugJd#ql/]?G+lhTZbCu\dT]NF;]mj/d$nA>m;LIb5c!>Q[stV14U4hAKW2.S6,R -Uf1!-$Gb8*\%m7E36p[12Wbq>La<5+fW=AJjW1hC"VUWuSS8.)*7<6H.F%%)41@g2Qk7q:J+, -_a5ct28K?-Xt3S3IcpG+d%"+1dtDF?+iP[s#<&MG6+OF;`.>\uZa:8o`*SkGPT?S[6MJpC7@t -kkqF>L:/27c:Tg@obG^6*#AK'.gEh1S1bD"lrN5'&7#JqLG%nON"sfJYM&#>fXgEq=b!/XFM* -(`2';"'`U<-V]nW%L.^9UC=SU!#JA@qkE26-F&?e`Gk`V"G -1qmsGc8ZLe+TB';<-MY0]TbLVt94!+uT)9;V4ge"W\OS(6l"=pVg?Cg0dI9Eg!6!$'UQ -RbkLot0RZ@(HbW%UIX')9_'>Ctf\0Vl63u\(hn(^+\AGQW3;>Qb@:2Su<;pf;Fs`=![#&b7iF -r<=b4/P_-(#YXbcHjl_'&m_t4h?jh+4cJ;b2,]A09C/d'cnQh.46k/a0` -i6m,5`Ht;_\r?Q\b5c!>Q[stV14U4hAKW2.$m8#])2O)$",IOp"sTeb!+J?_JV`MFJ/H[F+SbU<m;KFXig\OJh@.&UsnF6!(@O^E"VLD7[K5Vl#[dCD!3Y4MCo"0$G$Y -UU<o09?* -8IRd#6.T$"O`U#$b05bDLe(>CHPi6C.^S#'S\m,hb/QFLgt2l8_gM5IIa"TKnhE=/L,nFa:i0 -YYA[."cPd7!E\N8cXZ2H?EZ#_]<(diB%b@ohcPhPIiBGj:OJcK&4L>>[XA1Hf6o(d*V<=bG@I -tp$4k4[.#3^GkVD]Vbq=A!YQ")\Gof&eeHFfao49&=9QW:\f9]uP9`SM`1(]R^?+,?t+1lR)c -MOm,>"o!'kV<]H[CQbhQfp19&R>SP,J":O7$dqmLb8cAd:E;4U<>eiF;[?&kV<\]>m:ib\dUt -pQN>$\/cu^5AH4HZbf7s:/49>\kA>?M1*&G*t#Rf6q!B*;nuC.a;^24L_!88c.-ln -lVP?,$iL5:YqDoIbu",q=#h -GGFkO0BPnP[OWP8l'.$nhM8@.X[?!F)V8`M//VY&LFsg$k]1\N\B5+4U!$b@>ZIY(&S:nenXX>'\dUtpQ]k@`q'iHlM8AY-=Q\bKq$T*kt\%AKW2.S=BY`E^F7"E`Ef* -aqe7e,,7+M%tL7$j*9^f=,8?-X"m$q*LMP7u+oa8(m3TUVj&X$k@s%&(j07!( -FL&Q_!J7lj/Q8a'A)MCrNI>m;LIbK5UHb._5-jSN3eXrm-!H5!Ko[U$`FH\1iW^-"j_QTd^_j -U@j+5X]]S3=0h2s18^3^])#krfrUG1tq]MMf_ulN@niL>m;LIbK3>dbDM/QTCJko\SoMG-O*# -+1P@@_&^f_$,hHVjqn[AL?kkV?]kcN>CG%umGHY.k3E,,s&.r2C:($1-XqQGZkB]i5n\hq`@V -BjD6g-9:&RA.,6LVrQiH]6G?\TB.$q*LMPEXeZ071CCg3-W^rRe8sl?g?*6eAf).@)k?\sspc -)2O)$-`;Kq>SccoOtLAQ>m;LIbK23e.`_EgW^N10KJ!?=dH0F'E0[1_AaP@-B*_cI,,39&.Gu -['KJ$mC>m;LIbK23k.OQLR>qY&FJ1^p9dH0F'E0V*"d4PrJ;=+NY'jV"fUu",q=#hEAlE]F!f_%aV3TAk+EJOTP\t#8lY&Ziae7EFeIakf/jmmc#!aUh2G?Gn05` -IBDVgthAra;7aMRM2#AoeiF;[?&kV< -\]>m:ib\dUtpQN>$\/cu^5AH4HZbm=Q]jlCBR/eg3fGoS[(9U>c]F?)?$W!e=(>oj6q3R_QT'j -^MO%@o#9-q;+"T_:Eg45Z6sF/qtSW"%ha5,a;/FDc!"Xf;)pqBhW_giOEiLb=%6L?:Ad]<$M' -FZiccSc0_o)]mcuq8QI`.>m;LIb?grPRpLA4V0T'Uk^;(L$Di7#jb,V&STC9d0)M -5=e)g-[B[3"u"0Ujnf4_ZhF<1Q!LBY8*520-0g=@E*2dMI6RQ=Z7/gE==ZI`d":=M9f=0?\m0 -"XS5Kqiaa#ATH:G1l3XQ0<76*&QhPQN:00fkWDo-T[m*:8,jF*i0N5:n*Cra,VbS&^b0ndEnD -NBU@7fda$!dg15:cG'"UXLb=%6L?lcGc^2QJaSZ.Ja[3bVlpR2`j.JDF\dZ*CbI5f;I@%@nHZ -ZBIK6Fd!I;'a[l#K*W^E6ZmF$$#XE.'ooj6^$q*CJP>bZNCoR,qAJgoKEZF)PV?1$mrm53V0quiV7!';3N9E#.& -R>SP,J":O7$dqmW/=jbEl7\YO+!?GAs_7-W7kaI@Fa4VVJP\/.WlWM-+Y)"[`s:]P9C+b7PS@ -nQcFY0"*'1s#cGkS[BAJ@-45CM>oj6q3R_QT(L<%;#O4WaF-jp5F3\kFn3r](`IYTsf\GS.d$ -umt#(4h[G]BB/'K1/\*&QhPQN:I4l*B[c0Ua6EqGY@-S-S?%\(ir'J*MEV:)4Aie_R+f9c;tg -h6kF`Xld#odtt\*Q[p\9<0otRGf24]>upk[c1gUS>Ost#]\=IJR6l%!rVCQEM9`MhGeT^1iS)G -'Qdsj?$J"6oS"'$2=K\X[mRaJ`@#.-l=ac\jB21eVbDN@Rd,jgXB[3"u"29ZGALmOQg'VtqNq -g=A\f>^Z>')cic(0o[\Kni1=.3HKrZ+H(9hA]sNu6Sq;c"*JUf\]a$+3Thq7(4aWN; -jUu3%1^n,_<*A2KBA\^Gut&E7[It-c%3Gcf\GS.d%#/3%gtYFkd#'-U]9R]RL6Qa@`7C]NrrY -lbX%SdCRm'-*jZ8bF'"Ah][m8t)I3OSN\1E'U!#^;d:L*AF;ZJd\dTF0/cu8IQN,VC[?r7VW)o[WX>oj6^%%)Z"gX`rj&"4mT2KsEd2!8,f_ZGoT -\nkSd%b/J6jt;^Ik+%?T=9)5gQYgN_J\!hnguWP&S9$Cq$UDkuZ>H^(:_sA+]0$RlF"ZT`!D$ -@d0&,6:;E8$&(Tp!qRclg45XOATEZD$Kn%*ME:"Qq4;$ZAO@pZl9PX,e'f=m.WK!WY7)p\8SF -LHIi=R#@sC#E@)1FiPmuP^.mJ>^;!_!GX& -s6M9YEF%[qI9b4pCCi6Frd$umt##^Q.lcY0T"Id*N`#,-!Urte<3p>,Hgf<.b?K7\ -=B=\MI+LUrR4)a+@ApV/K=SX2\_V";.pK#QCd.r=F)S\4=Vt4Y5>R0Pe@pU3ek7bpo#DQI7m/")" -L1)$E#ZcPc!;@q\dXsY/j%ZG>H0hu)91gA*/AdB#p;(9$ks[e#)km8JV'Z?J5PMc:iLLo0 -FD(i$B?_@7\S!j_9li0.!-=T34]M8Kem?6SQYic$GtpAaXj=R -0+M%suKeD*oF0-*EQOQHO!Me"QRprOCE\dCF&-YIg!Me"QRprOCEp0h)kV?N[\nk3hWdd\!64Q-7e';on1.q<0SAPSh$6 -PH>COB_>)/Djd?CiDq5t`66S@o'mZL_CmX.YjD3\(;"k5/PZbLo=N!McI>A -T`;UYGp3\&9Fugo^ueg;Yf1?mj]/@rErI?QS+bg/d"R7m%bo9s60"MH.-&'*@h*M, -]cgZ>+'f)0_WQ@#'Q^C?6^Q%fQNrEd1#)km8D2PmTae? -o?UW\0bkd!o;f/bp6fmIlZ0FD*o.HXe]LG#'W/d"S:b;R=Elf?E(o?h-b.!4.^pB*5`'O;bAi5Qe1fRZ#,6\T)o!hA;ZH9oK!BRU+WY/C?58=\uboo[Utj,!6Ce*kKB,hFLiIOok!gHkV<,\a.d\/o)AM -thhed#=8SR-o6tKU5S6ENEr+uT!$K<;d:HWk"oo?*-G"#=4>@H`6/m%od,lg2T6UO4_3Ib=@RQJVSKQ9(X!4",)>qZ/`Zm'TP+-IT@>RhR#m)iItD+AO%1e7 -"Tjc^56U0tSE&RDiR]Q[6ER^jCj!844%A_/@Wc;rYj.aN+$CE269*&OF1jg^7%#MlJl*%h6Ej -kF@u]\9OH)tA$]m!:'\V`ETdgOA3GM0;X9ShHE_GhpsA90$8f\lj)7>QD&[h"e7t?$?3iF)kQ -0%B/CYNQF4A[`qY?Vf\=Z"3?IT\t%'0fTf_`hXV_(-UjKaHJb(@=g6o^^))/E\t[Ai)*k&fIs -kH?hiqJT%P$?0A,EusbP\u^`@""8uP?.LQF^:Wb)^+\)[l9C?3SfqC"GI-FP\,^&@&m\O& -bFMIrbPucYmWiW>/r+\"=a`0=9U>e@=OQ[89(RFU3;*#U>Ad52gST]r,U76Y'RilfD`3EuQiMpM:C7$i1I\L'nu?9&#\\"%Top.sS\=3=.%/ -WV:!Mpl5;.#8je\Zjsq0a%KtZCH'j.e`U!!W[6f+'mGX=gmNL!5NiJ75Muga.G#!Xt3i_!19i -%TPTIpZLM67!!%[>QN7(?#@0eeeUFYL9="3l)1\`[bD:sEKg*)L.>cBY93SaDN$6H,2S+i\GZ -8?kbM!n-X/IjU).NSO^lW.6>t.4E.Q#OaI;R[;@o^u3U_uLc&J:'29lsM[&Re5T+48!OVFTPLGc?"Y$3mnnQG;XRWY#=)_0XM.\>?1r#dZP;NElC4R -eOe?"2h]dV`R&;+P]mP%7<9,tZ8Er#^%a/1VPEc@mk=M!!&G*'[ -,i#pm0f\%(F#Y'6W^nQX+d;\FnEC]5rkTr<>5(LH#1H_W:/"lDI*PrYIXIHVH=U9]hN?"b[Q -q3f?s>d*pE,9+sO1fE[F2mpX`0tEHYAbB@B6ddUA`fY,]-X\MD;RMDWqtcA`&,fLkBtLj -bL#-7.o:0Y-mE/Gl9&SGUe.\o_Q98K.aC[p%@c(dp7.r?Y@>FCkBg7dO[^r4q'QaX)Sf!cpAg -G3+'sm>^"dk-r@75n/uqLm3EGs3M!KVjHpR^5$9HH9):I<`AXD:.[+Wm(9?U8j\6PKd]Q0Z3l#^)" -UVW#Z;m$!7?fCcUY>NsV";+WI)]'4/(`T/KQWDjH,GT><>G6]9?hp'G#+Tj&k7[;V.%QNcU592#$RsASXr-'iE8`;O -XY5Zo@\U@9Nf7^83T<&#Z^irlAM=1F2^#[Pk%og5D&cWZUMcH;k#q^,/Q+=W\6\idNR;U`!'` -/gF5j4XtiOZE=tSXH/1%`;!_P82GoO,9e0DRcq%@,/TG15GX-R/Bu_CbAbFq65*YU7mn1lo7o -0MNMX2^F;_6+<+r#LqD(!1k3iH^BnjuG6r\J3Zp@'f%ZFE;[eXU#/_(muL,;-KkVAm35nMT'> -Q@GfQN7(?#@.N6^`7G6!!%)eAH2_S&ZEkQ!$H!E?*L0L6I3F.%cX=11;L9=mdk?M3h7B6&P!s%9*ej7J -2D77H0h9bJVc?j[4aS..\7A@s*J93'mAa?I:Q?I\WR-QV8Gs0RBS/Cn#B^/$d_M/'k'N1/Ja25XW)7W -3;J:a^lQhB6^SJhSH#lmdeeN.'gJ)>B`$sY%X5g`R0H#*H\:e$cP!&+X`"ouFYF;Y@ag7JIX" -Q"t9,_RcP6*VY:r7M.5(qL+Y`K'H-d=rH'c01H].8T+9BIe -RDgGASmS"M/EB-!R=Ok4M1:3`ed3kd'0i796QBhCgC -A#$!Om(9Sc^W>:+V`YT$8!cq^CU#).^0S0)g=#k59D'@+^28n8,LC"sPbW&3hB*JHepQIMo5I -RBhoX>5Q]:*1@BVNRS1j2%<6SD+E^?oSct.8t7_(pLk1I:NmBt7f\ni_4WNkcM_KFQ+M.j*Yd -,f!q6C#r06TCiGig",eS-a;j=Dp=agGUQX.K*3FXk+0Z.G(+r0uN!Y8"e&f(trfjd\Z%SDd4n -hFC(@fB*)?s=_4$:;7;X5*h+d/@7R!67]B(f,0D3hN*ZKd:Mp7d`a=O%X%srO9QWWU=p!,W9A7KE""Q13s&\G'2d$[ -\dS_\N^/q^jNqH\.!>a)$m^T\"$s1:ct+=[F;Y@A*J#gFae?mC;!\I0)+Y6C#(g;STZ]T@kV< -\`3s&[lP!bReT\'k?16ri2t/,7aD-_o^lJuX%JFsut\IM8dA$]O_m)TcdWMWN5gOqa.)2" -_ofF$A]nZAMN0RD8SN'L/^)N,7mT6+cJ'>H^cZ]SYbKfLp=]W$U//ocqh+R;F1M??+/,G:r65 -_K,".l=$d,VXGW1I6\R9$!ju&_UXDmf7UWc[e@:2p&$ZXSgcdTCqH)'*iD2D/(Vm&Od`&F5BQ -1+)UKKSdr=,P_>T)8iduiH=qjp2+maO/6lT?KWr*rg=a!p^>k>I$%ZJtW/Lj'GEU>` -t3=oH_\dS_\N^/q^jNqH\.!>a)$m^T\"$s -1:ct+=[F;Y@A*J#gFae?mC;!\I0)+Y6Cc@dK:QDgu`o2_.*2=D`s_e]gCkNiIrfh=Ha!#tGn& -`k@uk,JA0m]O%AiWGGuRr?CaMX,M8GV<>t!]pHh2ULq/MX*Yp:jC57(,9tmdH+%?>rGreaDX2 -Je7htPDSBKQUAefe7+[iRh9,EI]bW%afFd>QC!&kFVcfq@^>B-k\?4%NFH.qZbH+eG`I4_HC^ --WW-7_U>gAHb)Ufjt73HlSYpuMRU.DW9b=8aYfk[=!@=lcS>M'POZ8l/?m$6]uY:odeJ?/J_LjhUfr#NTKqgd -f0/ON#L\ni^+PY8[;*;$^@`Pg,/G4+g@3NqYP+V^ioY!39c4EeXqa*9k*X37Z\P8K*.)f',nV -+[/@Vn@#[1spU1WcpK"XYPPMJM*GPN=F:D=a]5H;tXr.i1M5aMpZ8i,3J#O$1T<'AC_:3,rPLgWa2phqK;8j:U5BF=8D:gT1qlj.\N8.J -o0Jmq6Cb?n&Go-M]UnZRUm/R+dzzz!0A;Qro5R1!:XpWrlZkn!:XpW5$nNpzzzzz! -$I58s1Q/2C2.K#cPSC.nR=W@'m)Qh,Rj9A2G,-QHduG5UG8A1@Q`[>QXKsh;h_Zg2NE,=@Q`\ -iGfD8PGQLHE5?6XO(GEca?ArO0kVd:F/HrD\@.?G%-$GVPf[U<>5Y>l -/6[>BsLE4bpOJ.]unlIbaN8E75XfSsdK@`euIe&2A?2n]qbfLiHii1\nNsIDFGhkg8Gt+$Tj.=O(qK+`a(sdHSAJcVbo4?PnlFL5GUE&q"UQnu4>ibO%bG:bc -/V-W@0eog@+90L#L"8c\f=n0kHWPNeT7V2a>#`M@+90L#L"8c\f?G#?$"+^N!ipG+a!G,'`KF -Vs";`IVi<^W4Yt,+.!*DW9.X@$k52D6='to\C>7LsSX4Ud2@@`R5P=jn3(AJe,0em[EniHoI" -F+a4EH/FN#,cS+bFmjp*6-;X]cd\",FCE)@+G_,-P@^>o-)GmY2_UN#eO`$lRCH?p*I_$_`(8b+.L`RH"sF3THM/i4NF#RlDcFQuh%=F*rQpB0>d:nVe8iL*6o3T*F-9MK -[cJqOgfpnOsk]))&Q06f`\\%J39%9bED4;8su^,)g0'(sdHSAJh-Iql0R!_/0O"g^?8/5o!om -;o84)VZ>~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 647 647 -%%EOF - -%%EndDocument - @endspecial 150 3882 a Fg(5.1.2)63 b(Prin)m(ter)40 b(Settings)275 -4214 y Fu(The)28 b(Prin)m(ter)g(Settings)h(pane)g(con)m(tains)g(a)g -(drop)s(do)m(wn)e(men)m(u)i(for)g(selecting)f(a)i(prin)m(ter)e(to)h -(prin)m(t)f(to.)150 4323 y(There)h(is)f(a)i(sp)s(ecial)e(`prin)m(ter')g -(named)h(`)p Fr(File)p Fu(')f(that)i(allo)m(ws)f(y)m(ou)g(to)h(c)m(ho)s -(ose)h(a)e(\014le)g(to)h(prin)m(t)e(to,)i(rather)150 -4433 y(than)38 b(a)h(prin)m(ter)f(queue.)65 b(The)38 -b(Setup)g(b)s(o)m(x)g(to)i(the)f(righ)m(t)f(allo)m(ws)g(sp)s -(eci\014cation)f(of)i(a)g(prin)m(ter)f(t)m(yp)s(e,)150 -4543 y(a)g(PPD)f(\014le)580 4510 y Ff(3)617 4543 y Fu(,)i(and)e(the)h -(command)f(to)h(b)s(e)f(used)g(to)h(prin)m(t.)61 b(Eac)m(h)38 -b(distinct)e(prin)m(ter)g(in)g(the)i(Prin)m(ter)150 4652 -y(list)31 b(can)h(ha)m(v)m(e)h(di\013eren)m(t)e(settings)h(applied)e -(to)j(it.)45 b(Belo)m(w)32 b(that)h(is)e(a)h(com)m(b)s(o)h(b)s(o)m(x)e -(allo)m(wing)g(c)m(hoice)i(of)150 4762 y(media)c(size.)41 -b(The)29 b(c)m(hoices)i(are)f(constrained)g(to)h(those)f(that)h(the)f -(prin)m(ter)f(supp)s(orts.)38 b(Belo)m(w)31 b(that)g(are)p -150 5137 1200 4 v 199 5204 a Ff(2)275 5236 y Fd(The)25 -b(output)g(resolution)i(of)f(the)g(plugin.)199 5308 y -Ff(3)275 5340 y Fd(F)-6 b(or)25 b(P)n(ostscript)i(prin)n(ters.)p -eop -%%Page: 28 33 -28 32 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Programs)2663 -b(28)150 299 y(drop)s(do)m(wn)29 b(men)m(us)h(for)h(c)m(ho)s(osing)g -(media)f(t)m(yp)s(e)h(\(what)g(kind)e(of)i(pap)s(er\),)g(media)f -(source)h(\(what)g(input)150 408 y(tra)m(y\),)h(ink)d(t)m(yp)s(e,)i -(and)e(resolution.)40 b(All)29 b(of)h(these)h(settings)f(are)h(prin)m -(ter-sp)s(eci\014c.)1183 1759 y @beginspecial 0 @llx -0 @lly 289 @urx 226 @ury 1841 @rwi @setspecial -%%BeginDocument: print-setup.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (print-setup.eps) -%%CreationDate: (Sun Feb 29 19:56:03 2004) -%%BoundingBox: 0 0 289 226 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 289 226 -userdict begin -%%BeginData: -DisplayImage -0 0 -290 227 -12.000000 -290 227 -1 -0 -0 -13 -000000 -ffffff -cccccc -7f7f7f -e5e5e5 -999999 -b2b2b2 -d6d6d6 -969696 -888888 -fdfdfd -c3c3c3 -00009c -GhVPUM.2r.%#/?AQ#=kD5OW(N+k[D=a*70"$T/KnrfE'R*rq*6.BGsdL9?kaGn=/@DBq*CD? -Rh^S>U6DU"aHZQI,Ws-:n(K3nK#2Qdp,'0KDkpKGK>='*:R6AjYp0cqOFdDfR:T7&Q&]aAC8u -]i/kAcW%,X6JjkW0:UC?FR$r%Ft]WjbarOe&^mM(!'7A./^4E>_O`]=NX.d_T>_II%%6^5#Rm -\X$.523>KlM:4/%F(I4\7[+nu$jMe\jPmluho2CUVl+`k,:07.h)?VMORU8cDb^4nk;\NpEm6]-&G!`7n7%=, -\TdLI>S:hG$+iHqXE@O9H@bNKRU>YpA/!IcusD63FE)tn&0n'&b+o=ha[t4,Q"I%$P4V[!d@@HebPj]J;XW(e_mB6-FRj64+=I(>F2AWQs=dQfX:q_0 -nQmTIt'%4%0)#IUjBqiMK.^5;Ak%Z2L=QFf!`>gq.ud,e!.Scq&g.8I,VG+Z(dE!W28R8$59i -Hf^`[_t=4&KG5Vp/[e/P%nER-^\sgY,*s\jgH1M=O[gdPMT,;Qgt;tpm^F:":rRm1EmHC08:Q -Toc'C;A#LVDt*E1#P&0m#;JUJt4W;kM!-ff_aZ`5#O=R35F_#EIk0P='"FT;X*9'qcl!GJDL7 -X;YJImV):*$,(j+_Wu5PK.t.A<6?#]`grjHPp=8U)#D@In9F+q&WGBQJ"1B$k64+= -I)qtlqW90KFGP]O0YbBuaQ\b%Ls7W4,Cd03h)3Z^`ni9#Cl9;Xp9rS*E^,;TRC-h&IP_>,0)O -Ab4j86hAmG;]T?g`,f`$F-hb2bm4"ip.G]gKkB9uZ9fj)UO8UWp7?;"0Sl6JMN=69$'0nFi1S -\O*YIF@V#^535JSlrTc%,%OACi>50Yh=D4.5Mt=`3VK`\6N.6;U_#T)9AT,`)""8T,*u-eEb! -]u(gCfDf[g0klJV]0KYi&V';>\ab_J/d*CA<-rO>8ZY!PJ3Qf;b;+[g"?&jiU%%p;DsGC*-Lm -dL1a\@1N+$/ng8GN7"?,r@lF0r99dCEPr\!&YqL3a1u:[VoG`+XD_)KM\N@p'ToQp3hB#]g3t -Am=!SXC7enh:F&3+$6VF,#dX!rmr#L.IoD^_!O?1lD.7IH&?G -B$Yk(+58==IZ%)%Zm;FYTb=Un\JC$TIUVBkIMbC3F/u+JES2k/Y8_1Bs+nf0RS,u'P7Z_!KK' -8]:-sc#&E4sg3!ga'6AUg:icL.kf_$-O`ZDpRU.hMDKN>QqL#8uZAkJm4_M`iQPs;,kQ/lM4d --bE%QUR<;f52qg"?(quVTG'^;!W]I;^rpt9=ueuK^SQ"d&5LFT.D/(8I0;K6C`]?-R$E"#]UJ -DS:hG$+iHqXE@N_)Aj"Tj"J\OO.8:[HX[c$t3k.cf#pCJA1SGW!Th"G0l]7#Z!?#G8GGt;TlU -0sD>`',\+nT:M.eV>TpH`J8:O_hpJaneR=n)Rt4)!%[TcH$!mR>bn*\SXi"@3uA`3[m\4XV5#gWbsH!,'=d$TR\aNIgY@TZR(M,%a\' -[X.[8gu*/<`A`^-q,er(qDHgZos,iaFsDO&F,?RcJ3053hb+_O^LV#$-ab>`(:5S&ji+A&18X ->8I0;K6C`]?-R$E"#]UJDS:hG$+iMJ8C-;j(?Wf^t^S'gmianX5&?#AXMGt@4&ZRsZF[SRlo+ -XN]KFfLS`+_\-q&4>UTtD8P,a9gkLeuZ]fC91GPTo`EKJ$iK$6^bV<,>;0Nd_o]` -:F<"[mdH^.SPR*TCNPigZO&+6'7q$AHU]EPMR&[B(F'UQk&.k'BVeX)Sm6qW#\E\724TP5f)c -XQG_-8KK^"Ig.*oR8/_GejWJp.S`U+uGaA&1:+AFK1>I;PJ&r7Lqi/:%V,]X`sjE#K>N -22u~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 289 226 -%%EOF - -%%EndDocument - @endspecial 150 1978 a Fg(5.1.3)63 b(P)m(osition)275 -2170 y Fu(The)40 b(P)m(osition)g(pane)g(con)m(tains)h(v)-5 -b(arious)39 b(widgets)h(to)i(place)e(the)h(image)g(on)f(the)h(pap)s -(er.)70 b(These)150 2279 y(widgets)37 b(w)m(ork)g(in)f(conjunction)h -(with)f(the)h(Preview)f(pane.)62 b(A)m(t)38 b(the)g(top)f(of)h(the)f -(pane)g(is)g(a)g(button)150 2389 y(to)g(cen)m(ter)g(the)f(image)g(on)g -(the)g(pap)s(er)f(\(not)h(on)g(the)g(prin)m(table)e(area\),)39 -b(and)c(on)h(either)g(side)e(buttons)150 2499 y(to)39 -b(cen)m(ter)g(v)m(ertically)f(and)f(horizon)m(tally)-8 -b(.)63 b(Belo)m(w)39 b(these)g(are)f(four)g(b)s(o)m(xes)g(that)g(allo)m -(w)g(en)m(try)g(of)h(the)150 2608 y(left,)h(top,)h(righ)m(t,)f(and)d(b) -s(ottom)i(of)f(the)g(image.)65 b(These)37 b(p)s(ositions)g(are)h -(relativ)m(e)g(to)h(the)g(top)f(left)g(of)150 2718 y(the)28 -b(pap)s(er)530 2685 y Ff(4)566 2718 y Fu(.)40 b(There)27 -b(are)h(t)m(w)m(o)h(additional)d(b)s(o)m(xes)i(that)g(allo)m(w)f(sp)s -(eci\014cation)g(of)h(the)g(righ)m(t)f(margin)g(and)150 -2827 y(b)s(ottom)e(margin)f(if)g(y)m(ou)i(prefer;)g(these)g(are)f -(relativ)m(e)g(to)h(the)f(b)s(ottom)h(righ)m(t)e(corner)h(of)h(the)f -(pap)s(er.)38 b(An)m(y)150 2937 y(of)26 b(these)g(ma)m(y)g(ha)m(v)m(e)h -(v)-5 b(alues)25 b(en)m(tered)i(in)m(to)e(them;)j(the)e(preview)e -(image)i(will)d(b)s(e)i(mo)m(v)m(ed)i(appropriately)-8 -b(.)275 3070 y Fi(Note)p Fu(:)42 b(These)30 b(en)m(tries)g(do)g(not)h -(resize)f(the)h(image.)275 3204 y(Finally)-8 b(,)35 b(there)h(is)e(a)i -(pic)m(k)f(b)s(o)m(x)g(for)h(orien)m(tation)f(\(landscap)s(e)g(or)g(p)s -(ortrait\).)56 b(There)35 b(is)f(an)i(`)p Fr(Auto)p Fu(')150 -3313 y(mo)s(de)f(that)h(pic)m(ks)f(the)g(orien)m(tation)h(that)f -(yields)f(the)i(orien)m(tation)f(that)h(b)s(est)f(matc)m(hes)h(that)g -(of)g(the)150 3423 y(image)31 b(to)g(b)s(e)e(prin)m(ted.)150 -3643 y Fg(5.1.4)63 b(Scaling)275 3835 y Fu(The)32 b(Scaling)g(pane)h -(con)m(tains)h(a)f(slider)e(that)j(allo)m(ws)f(scaling)f(of)i(the)f -(image.)50 b(The)33 b(image)g(can)h(b)s(e)150 3944 y(scaled)e(in)f -(either)h(p)s(ercen)m(t)g(of)h(the)f(prin)m(table)f(area)i(\()p -Fi(not)g Fu(the)g(page)g(in)e(this)g(case\))j(or)e(pixels)f(p)s(er)g -(inc)m(h)150 4054 y(\(PPI\))e(via)f(a)h(radio)f(button)g(b)s(elo)m(w)g -(the)g(slider.)38 b(PPI)28 b(allo)m(ws)g(matc)m(hing)h(image)g -(resolution)e(to)i(prin)m(ter)150 4163 y(resolution.)56 -b(The)35 b(image)h(ma)m(y)h(b)s(e)e(scaled)g(using)g(either)g(metho)s -(d)g(to)i(b)s(et)m(w)m(een)f(5)h(and)e(100\045)i(of)f(the)150 -4273 y(imageable)25 b(area.)40 b(It)25 b(is)e(not)j(p)s(ossible)c(to)k -(crop)e(with)g(the)h(Prin)m(t)f(plugin.)36 b(In)24 b(P)m(ercen)m(t)j -(mo)s(de,)f(the)f(image)150 4383 y(is)j(scaled)g(so)h(that)g(neither)f -(axis)g(will)e(b)s(e)i(longer)g(than)h(the)g(p)s(ercen)m(t)f(of)h(the)g -(prin)m(table)e(area)i(sp)s(eci\014ed.)150 4492 y(F)-8 -b(or)32 b(example,)g(if)f(y)m(ou)h(prin)m(t)e(an)h(image)h(at)g -(20\045,)h(it)e(will)e(b)s(e)i(p)s(ossible)e(to)k(tile)d(the)i(image)g -(5)g(times)f(on)150 4602 y(one)37 b(axis)g(and)f(at)i(least)f(5)g -(times)g(on)f(the)i(other.)60 b(T)-8 b(o)38 b(the)f(righ)m(t)f(of)h -(the)g(radio)g(button)f(is)g(a)h(button)150 4711 y(called)c(Set)i -(Image)g(Scale.)52 b(This)33 b(sets)h(the)h(scaling)e(to)i(PPI,)f(and)g -(sets)g(the)h(resolution)d(as)j(closely)f(as)150 4821 -y(p)s(ossible)c(to)j(the)g(resolution)e(stored)i(in)e(the)i(image.)47 -b(T)-8 b(o)33 b(the)g(righ)m(t)f(of)h(the)g(Set)f(Image)i(Scale)e -(button)150 4931 y(are)39 b(t)m(w)m(o)i(b)s(o)m(xes)e(that)h(allo)m(w)e -(en)m(try)h(of)g(width)f(and)g(heigh)m(t)h(of)g(the)g(image.)67 -b(These)39 b(set)h(the)f(scaling)150 5040 y(mo)s(de)28 -b(to)i(PPI.)e(Sp)s(ecifying)e(one)j(automatically)f(sets)h(the)g -(other,)h(and)e(the)h(image)f(is)g(rep)s(ositioned)f(as)150 -5150 y(needed)j(to)h(prev)m(en)m(t)g(it)f(from)g(falling)e(o\013)j(the) -g(edge)g(of)f(the)h(page.)p 150 5241 1200 4 v 199 5308 -a Ff(4)275 5340 y Fd(Again,)26 b(that's)g(relativ)n(e)g(to)g(the)f(pap) -r(er)h(corner,)g(not)g(the)f(prin)n(table)h(area,)h(whic)n(h)e(is)i -(usually)e(smaller.)p eop -%%Page: 29 34 -29 33 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Programs)2663 -b(29)275 299 y(T)-8 b(o)32 b(its)g(righ)m(t)f(is)g(a)i(button)f(group)f -(that)i(allo)m(ws)e(c)m(ho)s(osing)h(English)e(\(inc)m(h\))i(units)e -(or)i(metric)g(\(cen-)150 408 y(timeter\))f(units.)150 -619 y Fg(5.1.5)63 b(Image)40 b(Settings)275 807 y Fu(The)32 -b(Image)i(Settings)e(pane)h(allo)m(ws)f(c)m(hoice)i(of)f(Line)e(Art,)j -(Solid)d(Colors,)i(or)g(Photograph)g(image)150 917 y(t)m(yp)s(e.)63 -b(Line)36 b(art)i(or)g(Solid)d(Colors)i(should)f(b)s(e)h(used)g(for)g -(graphics)g(con)m(taining)g(mostly)g(solid)f(areas)150 -1026 y(of)h(color.)61 b(They're)37 b(v)m(ery)g(similar)e(to)j(eac)m(h)g -(other.)61 b(Photograph)37 b(mo)s(de)g(dithers)e(more)i(slo)m(wly)-8 -b(,)39 b(but)150 1136 y(pro)s(duces)29 b(more)h(accurate)h(colors.)41 -b(T)-8 b(o)30 b(the)h(righ)m(t)e(of)h(these)h(three)f(radio)f(buttons)h -(is)f(a)h(button)g(called)150 1245 y(Adjust)35 b(Color.)58 -b(This)35 b(p)s(ops)g(up)g(a)h(new)g(windo)m(w)f(that)i(con)m(trols)f -(v)-5 b(arious)35 b(output)h(qualit)m(y)g(settings.)150 -1355 y(That)30 b(will)d(b)s(e)i(describ)s(ed)f(separately)-8 -b(.)41 b(Finally)-8 b(,)28 b(there)i(is)f(a)h(c)m(hoice)h(of)f(Blac)m -(k)g(and)f(White,)h(Color)g(and)150 1465 y(Mono)s(c)m(hrome)35 -b(output.)53 b(Mono)s(c)m(hrome)35 b(output)f(can)h(b)s(e)f(used)g(to)h -(prin)m(t)e(absolute)h(blac)m(k)h(and)f(white)150 1574 -y(v)m(ery)d(quic)m(kly)-8 b(.)150 1785 y Fg(5.1.5.1)63 -b(Adjust)41 b(Output)275 1973 y Fu(The)31 b(Adjust)g(Output)f(button)i -(button)f(p)s(ops)f(up)h(a)h(non-mo)s(dal)f(dialog)g(that)h(allo)m(ws)f -(adjustmen)m(t)150 2082 y(of)36 b(v)-5 b(arious)35 b(parameters)h -(related)g(to)h(the)f(prin)m(t)f(qualit)m(y)-8 b(.)57 -b(These)35 b(are)i(indep)s(enden)m(t)c(of)j(the)h(con)m(trols)150 -2192 y(within)28 b(the)i(GIMP)h(itself)e(and)h(only)g(a\013ect)h(the)g -(prin)m(t.)1385 3521 y @beginspecial 0 @llx 0 @lly 382 -@urx 406 @ury 1354 @rwi @setspecial -%%BeginDocument: print-color.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (print-color.eps) -%%CreationDate: (Sun Feb 29 19:56:02 2004) -%%BoundingBox: 0 0 382 406 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 382 406 -userdict begin -%%BeginData: -DisplayImage -0 0 -383 407 -12.000000 -383 407 -0 -0 -0 -GhVN?ED2SjhZ*W-^\lPFpqt%gO>Ot11r^Ag0fCflU8CBdRaif'=']4f9cLReX_ogSf1hX:_< -eVA_5TpAA)4`H$%ei+3^L>dOfg4BQ:b5S[8JH=8k1I[IF$1+mJ(O9&;m3pG -Y"S-SaJY@1J<5kSd(^q,Z*%EHq?JC%KS6YDJ*l@qQ_XS>cdb8,dA'53i1uHr:mUk9jnqW5pp# ->:jBmrH$[dE[no2?'gE.O;k.o=Ak/Q;.lM#Mt?gdW3qOJl1nU:D_%P8rj[Jc'1`8C%(Yoi0/\ -WaeJkN^r%lf#2KnaXL5j+$C3r$,>B4r=7Tr[E1-n.GL]f#.:\cHOVYPOg3L\LN -3j?L0Fq0DkT98ML'p#k;K\$l)cQUAM)qp"NC_qHchp@"R;Y7L1#V_'1dn([jNT>(BsCEib`rU -3J[]W3-(qt&l5\FTI'!5I+C2_XH'ru(j[NP>e=D]\+$GOdi(r8td:4Dc78J)C77nbM_FNuNS7 -kNY9Yjn%diIntp%s(hE-k,7X.SC/K^q-4[(&c+`D5D%5-GBL&@>T1A0cdcD$X4BLHjn"E%bYE -P7U$*T=kDu.AOO1a\&**9%n)QUDL:R/]2cC5_5!8?(LLg5'k79n!olos%bqg'jFpSKRfYdL^& -+8NV#h352qAjr)?7,XKm([`*oCo?]20Zgfnr'(:G?7_X\3]b&B7rQYl85JH^a5Ee?id/Q?-`BBi#ImM@eT)-_)b^XF!i?LNKq2_V)KS5$XXns!.X$;$_hf&3B.K -@?.ho+]m4PPAYk=eE;kb$5JQh,.0ht_WfIK!B5&*%a'O*1,>5nakDqD[\HHT=HGR2JaqF)$SrPIqpp_urFNNf>bIarHsFM.b.1H -rD5H#3j2PQ2PB(dh=%\i5k$h17([52#EfnR7+rBcS`,ZI775u+D\Hq=A+G*r'Y6Z0]>TsT50I -VNYKROML,$7:t'qnib:(]$;0^$69KD$:lk.m@:jr>4YT[,o6%dJ+3Rfcq+ZoP)-JL1We*2mnN -bX"Z-'L3NY#>+t6:]s=?!^HhJ!@$KVSP9FcA95N(-aA1tCm*0O_\9ZticenF3D.&I^(HC8koQ -_F8Z.3$!S[G'DrXo"IaQ&k?+eP#o+moRdpf&^NM[K");3G+UOc-c)B,QXj'+Bg6cTjD*j=]\% -?IObU5I8Iq+N(F.]=n2V4K&RU+A$:Ir<]E7- -:&R:@3EqgsM9&PiIQ&hVd%-GI!O8`^p/VA0`HC(@Q.6p,?6XVMDCZ0[E*[t>l$qW1`#50q=BD3*&D`'(/:aP -sk*7X&5l1nqY(1LPR[:o7JNb08q5@YTg1AV_Km"oF`6a=6c@[SWasEug!l\W5/V8?^8oc)u7? -IjRd/lKl!^9bRJ58)t+8B@^n4>4i1Gd;?.8ETX1;`5X,9bn^@q_)m*s3b[]6Sgl,>PfjF:I_C -+0XD^Y]?ClI9j4&n-]UWRX)`fXu:I1n8fg=CZ6]GI\^U\"'b&8\q\Hj^8Ig$RX,D^eZ;jBKTa -A+q20bob?6.SO]!6dn`aL(OA]6&8dY6J\P&1?M=aQ=Fs+=9#s%!c`#_?h)o>f6?A`,>![[>SJ -Tin4S)E"R+W1JC_S-'L)dlk\CGC-nd(Kp[lX3j'o-5q\d4RlR)AlPNGr6#2TJ&]C!USMu:&Kret^aH`,nB'hl';+mu5-kXl,c -2ENA1YU>$/Q.H4N:U#%/Dk@_LS-T@JZK6EU_]`Iac>G)kC"jH>)d,Pn%-/ct90*`(Ot6Bjm?j -SPB%;5`;5r#+FiP@1>HJnVidRC,TjP9$MQ[4K2k$-0l:.;9n3Bl:S%@nYK^/+Q`3K<(hI,bbm -jsrCHBEl3S^dOf1PCEQ%Pp\d)XI`ZIQe2ZgVL08I"FSt0if^sI65b$j1^rb\lVKs_W.-0X3Ec -HWT7@$\X9&a^Oa=q"mqRYtQU#Q7g_8l761m2G1h6!K/F!bbV$]`P4q:eFQH&&g;g/VRGgP!$g -OTP-'UMboKci00-,pgeGq`TR+%I$2sk2oY#Q:.6"hi11EtO"ic>><[d239Fg\R!pE2%XJBDl( -d!&Q^-0Kkj5%=K6@X+R!I@Q>8t=ji?]^qRb2K8Gs0J2cr.n[C\WaH-7qH`jp)fr;:DIQZ]_49 -q6#>GEkWj_)l5Y?@r3r-Q1A$#O%NM+jq1JQ3M[01odl9P+Rq;JLCdB-H2up%0`E>L8d+k(rrg -!"n5R32(INO'W.9:TqKKbV%Vlr.GG9FG3p!S.$M-0C9$pt&eh&Rn7e7rD2F>.ZNU'GKN7rF$X -bHH\<(Wcd%J;3L$DC^]MA8r=7p/%:q']AQR2A@c+C0qX7?HRS:F+k^>m^::F+;/AD?6C,e!uh -8@Zp6emnRgW`98$_UC@$ECP3iiK>Y@djJ[\i#3bBJf1(gdht5:G`G6L,C8&O=]89VCf[n!DN; -Tu<iG:L[-,q`aX:!F#`/O/$nP\eX -FV%$k0QQc$0Dm5rZEL[e4uDhXl!qCQC9N-Z@V2aXtpg1"$`K4Z^b;Q//3\I'(*:om(<$HSR/, -Tj='-k\nY"9j\eI'PI-T5$>/uOY]V&cDQKP;o:;aDQ>#[=/q/ -I]F;R!9n+38`)Pc&)//nU<3V[E7&KR,B1&nTofq@07cO?A(^/`Oe_HOWgm_T+@57IV],0>V!! -mgJV)Ja7Ri*QI$DYWmd>6a.SaodTMsM=1?+HifT@Qlh)t&)%b3h$mjSRWlWQ"*usG\"S7$C.k -5S"K`)4)kgCFFV.SgTp29\%2>j>jHD!jOXH12A/p -SU!WJC!ijj!!8"j5_WWpiq.=&N;(l3UUG!_;G=6qA?HaDrls"?LOVtK,tEVB"CYUDWA,?3fS5 -FK7W>Gea$i&cipgdG-52"^unO_&IDMG-)c;$)SadEDJ':]PPC5d@,)>!CD#bu9,L)G/T_ -SPaCLADaoEQlQj%nF7qn"@unYF-U^HJ7S#U!(O9-=/LTWTRXk*Hea@n;<8)>$eAo0/Z(s/F!3c1cm358.+`Xad.+Y+d$MeG$'L9).71r.X/`W@? -+f1)]&p";;qRO"ii@.3E%ES94AJ0V_B4*"3?sU5ud"$sEC3%te0#fti2mULs?soX448$b]#UR -eX"9DEV87]N3'g20A,.^Xd?hbpt:;.=&Ie2?giHVcD#8V7\3d:GFLnfi?,b&tTd.F&Br -/oVY6.Jtr^0G/W,HCIRk(_P]-FN*nFCn%ipmpDnKR_Y"\!hS`eblmL.e$eoZ'Fm(uCm\Aun$' -lB94p'2SBKqI,B4+]4q#Ch!6GF%jQ)NSu=p9#[TIiO]G%_qN\eM.r:i8V="t5@+[MEm48le5Y -J>2.ek+b0MaV"WHX@p>VS,4^"%q_6$iS76(bXRtii(St$`g@TSgrK0qVqd4?F4//l%Rp\J]8m -OC_cBP)n5^>m*W44"TUB::hJ?\pKmk9F:%Tu,A@4a$\2L2J$HdF)%>@1BE>ku@2QP)`.`X -e<@t"*.]sAY4pJMtrX&[R,EdTiK,AofkN9DVpRkXgbJo(e#_#J%lrrc+ -R>jl+BJAHG;5DfA/f\V.d%_]'@q`$WDL#j/q7q&DeHPK_F_"\nI1LXb:RF[# -^nq(Gn4IQ:&%haq@ZiJmni)MBH8aOu8?'6IACr,q)m,JBoD?TBo1c-_'uBI-.;n>/4coK#nRf -A"4Fu4Wb=^N4TrLk*2'R*K1GHZB'3GN*:M=LQO3D4#g[-/MkFA%(5W;(']aW?G.6(SXCN9oMdOF5,@QL=_\r_(A#K48!b$7EiL=@#1?:(A&n -I(/D8$iBWcS9<'n5BHRL>N.&L[]Zkf,5!f`aCUhn"\b?gH2X26uO<]ha$?2=DD8.%auqAIi5@ -Y@B;fe&K%*l?B)rlW'?*l-_Ykgg'UgHJS$jj4/(@GJPOu -rc;X@p>VS,6!/k3&,"jb"GJ(\!i^A1GIG"D:*75K;b4PuaS+[&1%%+[.8__E0MC)Ns^5f6GVr@6Z#dT=QV$@9n[Q.& -Z(O,Vs3dk0Z?KlfmG/ESfe`eh&).6E\oOLU7Z%C%Pt]nC>X`k)gFO2*dNcbfPs4D))s)#=er+ -2E=0rMO(>L@m_%)USF@3`!W`-HpTd]oMe)[(Zn-b@j'H6P]5`d!-E#C=K8VHOAL*W2bM_&(J4 -b.YDb'.^h[K"_BI1f:uk.A5X*V6Fm4%q2gDp[ogEn]+XVTk5GRWbR>Re1VJ=b>_M!10GS&3N3 -f:Lp$r"ePAV_&3TK0`#O`*UdDor?j&X0H37Z!I%c4TIAnK9*aYlo&n;`XY-JgX7U1^9QiAu^/ -32,@a/T4X1>f2Yl+Vhaj10DXQ"`K^uVOW38#%S]*VI)rF+`Bp8'D&d`j$DCYPRGTK82q3*+D+ --N+5tB[rt7UJ!Z0h1!:P2X3oE&WThdCVLA`@hIgB7/XCooW-Zm+a:'3'9^jHcl#.3!Wo`U5odB -%uZAa!JfisVg;T_;OP%RGFA`-e\o'(hUOF5^fVU)CH/Y`^jF[^[9J@JrHAq)ccM9FY_DsR< -LAANH.0icR9_C,Oj/eNP4e1p!r=7\n0PP.I`+0g"=u^$Q9G?k4GYcXR!u#fNe1dTV[$L5s`\i -^U)-:fMaf.m-.W02T#)Mg/"F8*>m[#o:%G(JA)5I3n1p -'g6\Ho!pt'-H3Tgj;"'1>'$RS3^7+dr9IcI3A5^6S3KnL/P]B75R:=H43E+!:$1E -^r:R$\\I2AkE8DZgF!q?h25ste\q_@M-d"B+mn6^h"$',1k!=W8RTFH&pqKlZ:L:%].B@6Z,3 -^8@q*Tdl?qD6ibBRLuBGLK>rAuBT^"ONSqd(A<;WAj5fI50PbCb\Gpu? -D6+.h'CEZt0i00uDpgeGq`TN"Zr\253VYS+254]B3:N/M9q(^0UEo+k4&^J!K5KnC#k8g'7i- -ZX0D4J'je&+iq1EF\AQn^C,@]#-Q(1rNL1biKJ7aFa11Ngpk0V`,Ib6QRFT]#u1+/ns"aTn)) -/!qr%>0_4=dk[eYR?fU6aL$V71"2jj$L.FYh*WrX6k!"<&;qZW$fMZ:D^%/uJ.MVkGhr/G"d] -li%Lh'"mmFi!2CklBkj:]<#aAAL;6\]_$ei]Vn!OWG?rIC=A<'R&@!L7A"VQ!+m4AC*iV.n*#/5B-4Amq-k1rX0d;An7c -j'E)_,[q)8M'EYNXXHMEg`4@J&AA.WI^m'.p;#pE@gE0hkd/1X&$$/Q.grS93Su)Ku4fK;WE97qio`;J_^\"/AjA+2O@gH%-reT> -)JRKaHp:+*caZc$Tj7ZnB'gA`b1mLo:263o_\bS)+HBOa=rk;=GERgqAsV:!SqH"Vs-n(Oleo -tI;.EtBUrYZ*4t@c0h9F]1k/`4qjGX7 -8NWpmA"#LqD06A6&5;mO8-s!KMR?O),=`Yn9Mg+1 -dbu;V)^S,h],/Kkapi(pN1j[7u@Btp8)GlV0/(eZg>9LNr-1/Bhm*@AD7MsAn[]CdgQ][W)'W -@_7BbbVQ$&^2U:SI20#YV<)$4M`QBVZm]nrEH&SRSb$lonUi_cRPEajrp^T`T$msC.V%?^3&>^&:+Q.AOf6TcJ%ce'd*1E]c1gZ3+INeN$]35[H!fY -]Of$NbrB,sN?5Z#]NgN_=rbrK3A$i%_EeY)X&5k5*[Pu0@#"g" -?R7'9[c*u;k.]E[S5(.`MU7(gnd3SL)B5'=YiY*,dhhu*Mk)Tokg]Q<(9t-Td%_O0]`s!]g^U -+(6;B4@UY(U&B3O(F>JP7)E1R`-K.P3*QN+-c6rn7Y`Ig:&=3L'q-isUU'DK>3'W(;K#AqNlcj\!J62A&g5,$?*3$nc*M1jA?knnE<3!3)L##Af -XFOQ,dP>X%@sn[7afqWJ"]?m)^et3*lq>,AS,4(qbQ9s=31XBkB9&,C3K[c!`N`R+cI-p/,># -J1*1ikq*ZYOs,hP%M>Fa8(H`#FQ`K%R;`+Y1Y1s*0t[bRQ2b,3oM7&Z0N+j@MOCF6!l7I;[-O -&H^d3^cu0ari4TW49t?S!4.[)PCo2`I:GX/G)g!U\Hl=,8n#?E2@M*$"j="3:&A)M;iOm[W,E -%kRHI%+6U?$nDLAUT+0bC6(%$6YTKu*r7Qrlp#>pfSEe$S(7[4V_1Xc$EM=2gNR0QCAHQ8ej+ -Ts9lLA[B%d@pt$Y:&&2;"\DDACt;`a9sU9Y,Q1t\p"R0q]6fNNhX$HUAo?B -2E>ONLC%KG@DG$i"7D!^>;mO8*6FpOKSacHIluPN(XS,I4HB)+=,LKNi;lmdo6PWDo[Vdt>;.hl:7^m;tV.9Met:#J>Xk@<_3i`m=dEI8\C-NTV4p -s=p04?2BZkZS1*,3E6#,q2Se;/bM:tFV -4*@eGK;ha$Glr7K,$JUft;LqOLCa_Z5*06=l[1!4-=>%Ru!ouqW8AHUr'(F$*IZ7-\;mQl,,W -RTscomC83#\]5MBc&Aa#H1Qk8cUX*4X8-#]4!RDmAI@]0blZNg:g42efkF[K'P01u;W(O+uuM -HeI=ch7'J*;tga//ll>Sjr2cFWif7a@--!>fNCC'q%]4h;0JAH2G1_pTp66@`>9u7O?n(/k>O -@,`7Y8EEL:82,RRHe+-,B6+O1,ZB0ZCV7?[uF\R68kgOhJ"7q4d?YbB@"f6_MM)m=GEQj$")W -&C?L*Cj:QfEcUUSi5N"*`"\'Im#8sYuc_$Zm`,p:(?9!CfOo%&t:AT6%S#NXHd9i#mt6G=TjQ -q9+.sl^aK!lnB'gA`[B$a3R4FL_C*IH$muYr9lhl2d4+p$*1$4=)!^Inl+PK29tk,R%*Zm0U/=d2Koj-r,QfVf=NunQl2"5Mkosn%i3\1^p -(,&1?hCmDj2cFB0CI`R/S9e;4tn3+Bo!-6-pD1TaIkEM+1F)R*"uMFQs7LS>QrF=>UI7hm)qT -N$n&.`dk,:k<'Zes8TOa/TadaKW;_q,3"bnAuF7ag)%sZFP8+B,5r,l!NrUIK?'D:*hn\_ao@ -mdgSrjln1es+@6/>S1!Y=]qgu27d2HE=.(fEDnBp6lH%[LTgY?Ubd5]@ICG\#M+( -U"VF`u=E:j7WIbH1]#)B74-W\..oOd/(/FL1m-jddqc8(h#\>:;A8n.SDf'Xq#jQ9f:)B2U^[ -`1IZUNoRei$rOYV`nTN5)+7s7Du*?"`rY$$H>ff$ba-]JToI8.TZoiKdbR<;lA`^ZMag.SO8V<.j0>u[Amnf01+;IO#0Vj -)\J;A3X//8h5iQ%`j!3DFKL7IOf,.ZJXNGUEfG![m#AN8`#0lGGS9Nn8o^$/d[*FC#sY5jQ;7 -+]K!376?P%j*;RR>G:K(e(miCid_2.R^(b'II3tH`Eje_1h3uqja-90`/].+>)R5YP\RJ6$C` -m)TZ29mMNi@]!`B2&Q_?[)'dZs76iI-NGm.:qi0/QqpgeG1ifd]a-aeJ#P#M)jn;25G/jkgBM -fLX@?^N(IkRMSl8EW].!ZW%gh[S;BdlP@;DqX5aLPqI61coCiAD>^P)5-L,RkE/tU](WZ>[lM -Xem+lNS(dJ85"Ek#W\%284c=6%'Y!;E0e,D$ -%c9gT-USJZpFc^=BTaL*C-rOQW$;r2$<+(sm"_Cdba79l(bHS>ZGu?1r^df -[.P@Y'qA90uqo0$`!3KrOr%&X`.N&,L@'9`hn3>UReR(ccE$.0dSn4br6l+"P1+8`^XH"_?,B -:)uVf\rXF6*m,Z.r=N]b?$NLaX/MI(TG0bL+_&"ZK<-L(2?'FodA7VW;_mY&#_V.b0s*3StMmFi`@RT-%hQ531@_3,cVNVMW;YmN^TQIj10.L%RM2O1O^>7ih-M]>^ -18pb!GC'j,&4af^QBcH[DIM`abRlAO2_%4&+AT%XBQG2.C>W8e'FIa6#j-WlN+_XOj.JMkV]& -eNg.S)AQ:%;-8C7$EPYnE]N\`YZ(gH&XGtm\,a&IpcuVBRhG54k'i<94\e^mEf,tr-gi[1Rq# -lehP)[AOW`H\%f>M_dGa2;LOF'o>dRgIO-6M"cWCi'!#/XL/;@8f)okG^\d"q0`\A -^)UPRAg(GeK7V/L2%r5buDEtb'0i3ZhuDthdG[Tb%b)W)PtJVGa+A+MN:U+>R#u4GW#_J&l0l -o-k95c#GQGmN$lZ>$t1tn?.^q9`?65.@okn;D()`"B.p];6f*Yi/_FZ)WZ%7VlhZ7KYR4Z+^ghoiP:R[5pFE`L89XemOa]Kds0'@RUHd.j-:Y1-(Yd5V,9/&Je$E8AHT' -'Ca-+I`A:[i[N;l!dFcR -0:/\nI(RFcU'K8LF@V/UAYtr9B1jC.[-f%i:/f#`ipft72V)F@s8Kr!\!fLg9J@,77O@o```Jql61"tZlZ8`Z!)oL/IJP_;M,^!/6 ->-37",<*.Bp/f@QF!OYXF5b79Cg(D?3-86H)ff=&FF"V2$LHR`,L[L9PY/)sl5(O7bCF>>`n.U2I'u`**Ni1#iiZV!V: -5MUb1tDT4..$M>f\6pWt:ema=CbI*F2+^]kL23t5GPt^9<_NQ77G:_6<&IT!M -A^O^aGUUp^YS6rikJ`^aHt_32c1bndZlV:/!>Ui`M;;!W)^6\PBVh_eqMjknrEq+T(N4?(ppH -HbO%B-$Jq-dRA3^9qScZ1U_Ztj%!p#UYuXS7Q**.cG5lmW&mT9b#W6WjG`+ZgnA:LKX -U5jTeo!T<\e>.juu^iH@i%;S8ElN>ZP+@m^UhP?=GBE?)qP'Lbk5`k$/k$Y!rQC]/Lr$`OA/( -Y0"'bog'AZ+;$XCfk7;@4qu";:(.$$W`_$dY&A&=OE#f7P&J4`.34unf*]uO(G_$Wl%^d`)R@ -aOJbR>$;6Uc;Ludo/2"ga3>Rl&4b(PF687[^=H7_BpK::"1-7n2BSN -=n;i?-`B2Rl=8<`V>8iO(q4XFkm?:@^W"pJ_B9OVKF.hc -"sa,1^77'Rqpjl9Ga`:U=D@OK3o1$mI]",nS1[;hUYEHm%@2I0o[ -ZF2,M'H3'X0:.?(gi'`Bp0ocDslD)\K&NAMu%Qioscsc*&5Pr0hbt@:jp3*dCP9":M1"0s5WL -Y->ZK9Ch2RDW^%<#2F()uOApH!(rU[Au,7p5cl22D"odo7@GPP\ImQ[VEnZZ)MB!j]RZV)FNZL3?aJh[)/TPsSd3>Iq3?$tWOeY7'&ig]J;#k0X* -%1hu5S5+B"FRL1!M=2rn)JJ9K&Hl\JtibLG[lD52a,'#3I/lcWrr:2O&p/1Cuq!H][Xn.*B\9 -!3AW66RbMLj@@NB29f*d@Uo0o;qDpOcYYN5B/RPXBb8S*jjq/==/,=95T2KW83?OT/G:@aY\? -2-&Utf(nFV:hhZTuHVAAh#sOV/lf7RE&Y*b'DNjrp7MnN6sG&BKJg&)JW%/:hRCL6c4d1$jhG -^DODuYV&E6@WX7mk@.O/_7U&N7;-%]em'&5d@:S30(c\fbXHq4C3-)lKf0`I,%sA@MkC\KR=g -A:-ur.M"*kAKEZiO;nB'eqI'U;t`@![j`"_6qN("SS?mNZp@gn?;bf@L)Dn,$Pk-n*s*5"2FX -*sp"`W7SCpX%J[CBo2slo+lf/'mZMT\+h(%Q7Eg`8Y!Y[9ZkOr6%G">QksJM8>I]Y<`*pfTsFd*50PC/O?9;Q@,(k@EM+;1:/ZdE>b43_QX`#0cJ$0(S`l! -\iaYmTP=ci9;#T"eRBpCTjeTJMbo]IGqM^0+VUP?"DJ>QEWgcq0EIe^mNHsU$i&L]^uoTgP7t -SL@X*jlU\rEXRj/nqdl0t(PM\Fb)W8"e3c/t@C%#J[(Vf7n(D^=6o7Dh^gXsojZUTDt`/bB*8 -C+^KSuJKiL.s]I[!\d?-T-9MbnDSX.f!g*?WQZmEkW[ZF/=7R`e2609)1jupI_r"bafqq6`(R -^&u;rY\HRi7Li5b!';@78AJj<\i!'Mdd*Q=JF5 -T2gGia*?k;X1][FX>(>@!>RWu)s(L#I&A4IV&1\u?jZ1(d(^I,9sDde]+NjE#:FOQN8[(D;j\:UVS-PKj&Z:O3&6fkDcL -n;0Y[GCl#%7`Q>`jb/\g&I.((3Qt>JD`Hr$TVmig)dQKNl_1YCNXjbp]OL#7'5_UaU4jDC][4 -SL"$?2R]RcA0RVQTbZ!GP]C:7f#>0UXohc%s"8\K^oQ1I^1:R&.c``J(D9Zj,aXHN(/R"n+X" -rS0(#E_&tjHE+_&`8Z%5")#.\.[g:#X49a*r$K>4pK>N\9;;Z*.qh,mmR2!f]98#MV`46hMTT -V=@uuX!n1bgDaLK5`XQTf%mr)D7;,q]qR*8M"M-J;Y"$qkBF:FcJ8-Bp.oYUE:m:s)/fV7Hk8iA -3pIQ7jX^/N1<1,]iQ?HNq8XHE!P0oq09'U^GH?UX/bOr>U;8,P&McQ`2o_G=\>&:t-!2urtWn -1*DM&(`uR>(.2. -+m5e30!f[oZePNB"Z4Ia$Tick$$0:n1=U*PW']hWl"9j],aVF=/Y(`8p\O#LmfDWOD"^[:#>*?;M,aNU\33ne7ci>!U7ReW/! -2Ee/O]NE4G)KtFk?H\@DT%22^VHLm!Q2ISDD$m_;o8K3Z;Du_n?82me^0SgD&iPXCL574=WC? -YC;Qh:D6fJsB0-bWSd?bEI`qYGt*^N$ns)[Zn$]c4/V_N9!K*Ph7$N3c;[NF(KkcI8Ij658+M -ZW%]@+p>.EjY7fEBBWN0PlAj.iM&W^BM$7T\Bb>##l=)ZOZ9.:e@?cK8NZ*'VK7gjNCCEJSZ3 -]`/s+5i3R(tT:CE(?`DCZ'Ca-+IYH,7'U+`NM(g[#G_f:.N/_l+a63dRDMEplbK5iu_#`EZA& -(RKQ+e;Gn)?kC^U;F*VTZnnD035UWf`;gg't]hB3tbUWhZ\N0.FZ9lV?:pM&r$&Y$7.Rq7;"ak=oI'P4&T5[p2o.n#!dG;f\>3Ia4=q -dG2%dN:lTY6@eC=oHEAM%cLr),n_RMSuj;=[%"]+jT_k;bQKQI6u;VoAR%8lHnf-#=7d!tij% -@mmmGW?rnJ6c+BK]84.[kXgHb_KZ07D]j!#rn$,2J`eo#F;R&n5qVFVTt_MS(LYddpGm=[Mp> -sC3<\q>R%?YAPA&bW@jRQcLLC_cO.ifuojt)X!SsNtDF7D11n12)6+$a9@T9F]iXqEWL3s_.< -^O577JW#t76qt?MZnL6/HMJ[DOs'Ti;=QN$i%pti%mI:q[q+In6Up-0uc^Dj^W+[PA]4pB%4q -YKAcjflJoC6+Y/1.*:)V/%ZX`V2q)F!oeq,#kV;Y_-@THt9@%A_*3,d?L(54E>2$#;TOGU(QW -a2 -J[aT&$#_%NDo,M8TbA9EL&En$^C&^M=LI@@$/JVFHi]Pr@6P*`)XU=q<<_D]BNE!S&,HVimR= -ej[C`(^K6@L"*ee2Ve6AU"%-9rXXG:7*b+t-&7S+b6.o@RCF;YG(!^9bSJ58)t.t#('@VV(4& -LJkb'B6\[-:U#_j4"@4gl)\`d`FQ\7L'dpA(\d-.rY)7eA^l;(pn8+baTp`g?,Al6aBf1"`4R5PH"8st5) -5@+aj6&&,Aoj7,=L8tDT2Ag"TOFrTAXX>pCo^o\DG6P8IW<:q]"b&KC&fC2<]Gth63JM$d20s -=2XY3g,3P,%-'-W4p8b(kat9'51EZ.Ft[ru6+[M)4/(=;oera@U"kTaNDQ]HffI1r6-3l_$;n -/3dX2`[Kk(M\(('bH<<>A;gdCj!Qsk<0F&W!cP,S_"-[7koj;;N!RIDpc_RQ(6_jka&k2>;#n -+8>Lj)$:k4UcOSU4]p+*&fZaicf5J[W'I3RnX;.kh";@5[PP8f?gSYLmFWII]K/H9p^_i-*L< -h83plKYKH)Xjju9AM`DpAPsY19GZi7o7'n+I7J\3+4\0`@E?=W[`'-]@K!6-Q+!YGcTFLl2i& -q1gBt0TdoKEIT_>Z(`oru+5CBJnKd"OhF?@&dA,c0$G,>hWi&M0>IAQFl)^aL_T>F,'_>osm3:8<*#HtVr"sH5OL^C9'aY9- -f+8rhp^2V>0mS\qEBN,/50\a4H1Bk]&/ -), -N-)o4'eGmmq@WlkoR-f4a"Xp;fRf^$kl(SYpX&^GFDjPD(><+cl`4\_$-`dTT1?f*:d"pB;(/ -#hr,L4,L9):NO$^E"0fdD;0U#O$YV7fQ6pDK7))j?h@a)o\JbQbneMGpqLlN'!n$On*_Jg1WC)Bi)eB"; -?5p[<]SM=5b3RWum?c9`0ih1WE**0uEc=/DV/SJ:[=Ul[W+Ce#+mk6VfeT>G496c4?Rp%pCjE -)q"L/RU:^0AZ->WGQFi):d+u8%.[TO*J*PgC8rDATW/Wf4fI!>E>cne&8`oU;f%`g.HX\$=]r -_AY_l4?`dEH_+m'Q-$SXN_lnl$iAuE0"A7guB4#8dl8!tE1g<,0dV?WIRB<%:i1Qs.L0_0dGM -(U.I9QY5Na1.H*2TAo;CLTuTqeFu+A5pOHOq@jBE^o>>:W@?*_bu5iGuqkpPmiKe.VDSrTTDG -?(Q].Mk=N*X7j5HMQ&r.Lac0^p+ZH=6^VV@,)L7o'B$FjOpOq(Zt56@/q(VpY>^RSQ6@(=]O_i> -&:*:d,E/Z]H7rh,BCuJXXK<3T_Pc$9iD[u!NR(4c.t?SXLp.G"@=a+4 -$a\&Q1[eb$MKpT@PK_dL[kU+ir%OJ>>deTsOL]i&HC6QFB4B0-S:S4'k4Hl@0WS\abA8-(/^- -+m8])i3QQ!E1if]HB"Z(12lC!bh;p1,aR;-=Z9NNu$B"FLH&^s(D"\^/56nX$a%&jLFG7b?03 -esp]5p,7%n9a)7_n*W-]Gg>1=OCoH:.TKk*Ctp-?8(A_SB^;So?a.c -F=M'iqiW_X%WY.nm*bEJ:Y47TL@0iPGp(/"BmJR9j%dXK5*tX>j9^-I#A];Doql"PB)s#;PhSX>q#h%#n`2f<$u3ip*5EXdYR\9o0\0#;@Yab5QgnZ;gt(SF!RN\@* -TiS6H#[@sE#9hfm$4oF>:)]J5BlZi5:]_E\BHOb1@3%@9i%1Z$NTF);<.OqZ<(Wsn)jWF86KL -#$V4_^mF=2Ll&qqq/_(b7:<@&Ukp!WrVO(-#Tm-dSbSSU!umC!Y7ok@gI)H!6PK=m"Wtqj6!* -UH(hCNlE%J3HjM_c`n]b?&mVigTkY;Z7/F@QKg"?ZW(M8bYk]6q%E"[.*JhQ6YV;*)+lZcbYX -g/??`A&IRSM4Z-nBSl1a-7*00.,MZ]3o\fC]YjAY`?OTJfuWK/ -Ee%i:BUBs&)Wf&@m[X:(OC&7)dhh!=XVMZn<"K!gX4LX9f#OYd%H,n!O&Gp:uZa(lK*9%%St5 -dU]q(#GcV8L-.l.ISRQF8#Jpof1hs4]^66Lj43.+SJ_Jf -a"CCYjjERP0)(VdS%_hICd==7Joa5@d=7aPeecPHF"7We>hf8WSupp^tZl ->Td^&)*^k`MmI^V1D6u_-C*4B7.T)%P8k8d\-).OE_QJK839/&UK^5"/NZT474 -QnB#`+^P^>m6d&`U0p(F3Nmh-WZCG*m1W.VGcDDF90re`"]MDOlas\!%as4!K:_mL,4\EVn%T=!Pj^!a2/.YSlU+f,( -OI4AS:(B&tpepT,i/Y\i`LgSo%)P15RieChN-Ol^)o&n%c%.AYkT<=`(k*OB%p"'r_8RQ7#&p -7HH8@TVcl)@V&'fPr7q=S]K?'e?? -\Jgn`"a[:@qur?Q1-669)'*As+O6W'qbCR50JoH(s+Lsj[,8a--e,_3^Z\t;e\;AS:!kSMRF3 -hP8m?GqLFk7#8?H2A8e"#3))+G@l2-VFeALY4/14nW/\%K*a?Kt$<)#4l4=n%.,o'qS8hVEh7'O4W?P$jUMiOeT,gHR.6HJMJrJX8&bLiDX!Hn1!N!".s-Wk#V#o1:4uR$ -j.BmVE(3Ek96a$F='#9V#:=2$'$WY3)47ZQ5Bj:m#SG28ooZ_#`\Rl#dZ$TI>Amel@RLifs\\ -^GrEoE';.D%`]I/qWLTeoL@Q55q^D'@ekMMZm3]1YEOH*H -h9bBUDC83Dd%H)m*Nup2j^u0(_=MC]Dnn.YaHUpIJ]Hk3>_d&3*j*8-.J?eN[fecBY^I6.@0r -R#X+X8'pJ62-X8(aVn]SZMgS&dKp -7.DEppRhXO)Zr8YRN9)d__f,h3;tr3N9,q$.\.V8\&:JW0jG2ED+2%BoNJfD+*9a!0KlQ=sco -H\2XO(,>aUgWW5[,=6bW'CT#=cA`K6OqI8rpte]W&ea=t&.q;CbL!6a"83C-9rFR0p>o4JBQ! -3NDE7Qjf&*TMgY11ZTB0(#ZA^@iP$oc`Kng)431K"$"*t -TMMUNI+A;p41D,H<_3.-e<0J+FXL=dSYml\kd1^.R*6\D":Zdd=*_aiN>[9g;tArDF=DJIs+] -@c>Ab":]e<&c:uAGo6F-8q(F7(r\F9IY4A'$EmB9-%Y3mp!e#&nMS^@ -Q%mbS-#GWA(4rCrrEoUpOc9'B-JM5%5fbcmj_)X%"/8-'@f`X:29<.4.^B0nRg9bE(l7d%B*:cE?u)F:bB^tFca\KY6K?M&6E:q"PYFL&n>thT44mT:GMT^ -Hu_nm\[]R[L64;[.4uk`89-W)ks]pXS;P]3j^a&YO5RiKp;W4pBn$**>kN`0A]I#R`nPhfa70W!B(D5G1nb$QR*Yl#t>6 -PNk#@"@Iaj&-@OARJ9LPed$5(o-ja$ptS3F1C.`hM4iZ^2ua*_P[lW-ZErC+,ut:"D=iM[c$c -h1]r!#&#[Wb1uV.R<'>K.)bN7gG2bq2T%DtH46g&?9J^2t4K1eE"-0=!8;V'b*g8rhLOCpWe6 -oa"40)11_6s\e&S"`W2O*\[\k;`3F8m2O$tF!@;@Fk^n:6&mBB,MBd;tpY&N]B#1/*%N[NJ'V -3'9uPJ?U -tVAJWj'U\$%:Y>@!ib0(LnZ2>5'5>c*k^dNR:LG=R&1GGWOS\Tq=^5Cot(nEs?0aF6kTDG5Ri -g^s)/pulufa4/d`s6*64bEF0GfPD76YIIT>CB>9nX9bV,@9ehU)PKPGeOj3FfP8*r_-pJq5moA"8S-'B)oXcF]STd_8!$*(L)Npm.[g;6aN7/(QGn;E3dYQrCqH/ -;"k4&2R`S0Q;KQ":btf_af0_pi+fB1N%Tu_YXhU2h?1mEG>o#O5MT?hR)56+hTi9A -KO[9TePGY&^U40\Sfp_;:gY73ZQ]0a`c1@ipgVO2)qC$FTW,P+AlU_!gRfmXi##oG1BuU'\f[ -m9nFr3fHeJV&jF9:$(k\phtU`Mb]#;]=Gi4d6O>B`)2N8jb390p@8;O?%!$B[p&JrYNm;[t8* -_u`[lO4"qq^U]dHm[N6/tZX-J7troepuP;0RZH@CBHSMj7!PC9CE^Q&SkD)PHXV'pg?KRIt17 -9W\2a;Br6WV8U0l/rIDU\XoNj$GW6!7spK?\K!fYTKS!i&nm9bC_UO!BFp%qnifk -C#]?oKORhJVXj0^VS3Wc,m-S8.'iPY_fn&'3Y*&jSJLhD&'F>o6FnPglNFa-62,OIJGMM'0Pd -boWoO#Go.(%s(RTth^0`-']]6[9-`UtA]OOT_.(+;A=,-;AY%D)D19Y#4ISfQ!HC/% -$/$?";%hS$#S/RHcso?D>S9jUY=<:UuV\hbs.WCV)"nMUgl=l!WW9'S",C/O^a[p^mZ]`0i`V -Eqgc0pJZ;iJTp-N7r^#;[tA@]_cqT&iPXtf]]R3a0"gPdaU'B8EFK>0N'M:"Eu$l"KXq1Hdta -jGOI>U&&Pr+nVAkT^EMO8'FZ?0cFZU)?imD@/1t]"O^'7Q8YXaQ+$LEpc7if``fNs2I;M_?W= -b9?_fI4c9UlpDTXW:?;F]/CH -n`h1KJ9?q3[Eh;;B%ZAr9>^p`9U:LputhaPj60hFp5#_!?!Q)T=48]H"l33P=FnMa![#iWV:% -/j/=4ZP08Z8)5#BNSnM$N`tr%&=sk,9cor\j)Ga.7NCj4Tl*iq;:UL*3]sErU`K>:Z*,#[)XL -I6:BSNblr%;j!p+HeeR=pU>AG@E@WN8B8[,H$)oPi[L:+)WTS-)QKrLMT=6_tQFgTdXk]:0tp@$_cn)mD\`1*s@ZYYC.[FV)[!V$T4Dm4GQAh-Rk)R%RCaKC!Wqq1EpF[&c>@[iK3hm05NRL<*\g"8TUNlk.r3(Nd7XDaf -6RC2K^qC\gE;:<6P'udA\r$4]Y."%&,3oX6_:ZikDi+NHn-1GFb[8GG,nO*qLcf&k.Nqaaiii -jAW>WCq4o`V;7EF91[7e!>kO'3YD_BT08hhQVl<16Wl6q%X[G%6RS]/q1e@@%`kgTdLgjio4& -@(R?3)mE%jX\+B`fHSAu3c'sF=G)T2CoG2T$.`0cSJZ-8p_73aI#>K7_Ir[_Hr=3s^f[+hq[> -p'&8!'+fm-?MTkB*Ydr]mql)*9*gRfJ!a^I952Hn*[35Y[\m/<43CGZLKfM=jV]7-XV7s98US -WR(XgUc&.'q77`q1@nXfQ`FV2C_q13(*LUf"Xl2.Fu4%WJ]4u8mYug$PX[qq(i^*V6G[U.<.& -&K/lnD:mF@I!XI_0/;hKbGVf]J*$ftqikp3up:ITUKh;S"-VuOX]jo\VJj!0$[UAh@_unZBLL -"NY1gu.O4*j`[NA3jDtGm94=Aa4=:IRN^*eM],eR3&7K3%\MfR&nG!LbXiG_lV\]1g]nfjUPVMqYAef"i+BRm*P.A#_b&j&rCNW74Y;VS&&a.`u(+m -7W\X_!9sE4N#=:'\BQo8l6=WO&AeGm)`a5%_FOLSUrg%E?)TbfG2E/+El%=V]S!Jf\sdZ2p,D -SGG&aRA`ME,L@$5K7^aH[M:Q1DA6[-'PA71G( -ISTe(nT)cHVi-agdXICg53:^88Q%*FD[q8Ze"iT3r_kmi#V -6DD"9lY!,@T+,\+G=eIqB>Jskf$"M2S--?JW1>q0THTPfJ%md8&NdplZ2f'0D6Mm_qSgPWD`=KB8A2:aZNTRoE8JH>m5"Eb9s+K3*p.FqI,NgXDjh^Xh,ADVl'S:&:7I5QUDt06DcU$m*#dm'5C7bQPF3a2 -NCJA4@!Ob!r$<:2T)d;':U -_j$"KGYZ3f)VYQus/`./DI6C9^KZk:<;kh1d[%FB#Yk6C/$6b=E,ld<9bc0M$*#PC,7XFk7>P -\Zsp$i*uU#p9nS7KBCf";RW9GbZ!'\TJGYGcLKl,\Pt4mt;1\LK7/%n< -#JiQjgC=1#pr)ZZiSFai/i\#`@OK0>?u-';b$clWV$o_&(tak_m4`I2BcE#cd'FJC,3VJZg]H -:IBK)]71Kl`2GnW#$W.ep;#h;Bm2aFVKo(Aqc&(s"nXFkUHWn'K\5_T3t2(2[-_Pd/YiD[u!" -/#K@5+,Du*\;=d``RnV&Anka"ZS`i^bf[eoM*a!jBn*mg$,lk1!6!'r56\7/\EgZli"3adUM? -='<`6uftcGsrhS]f*W/[Q*\@h<][/un'0A)L>g:S5Gtu=:-!M'G,Nn<;^+86C>.u;ZWg^+^pe -iDF&G(-,lU6sD=Y&Fja<*_9#Vo;R%O5s!nO&*R7(=/O.a1o/IfR4'i-c;W$!\*&*l5dDN:4g> -5)`IX=oh8"LA#(a&,LIe/;?_)j"Buj6MF7=GG)8^\h[sBd(UO&gX*SBR]TDEd'*\Rbtr;4@M@ -fhe-R;QLmed7Y".#'8CjJD/]<6@I+FPO.C)S@'Qa;6:Mpo>LIig/R>SW]TpGYZPmHFCn>VO"-VI(,QB,]'F?)e-NbcBgtI;+S6JcQ`B?EqRL9K@DV$NZ -nBYU.5eZMVs\cHP6<]phJ`8!q++f3Wb'N'8J;k#\+)o;@RCV/-dm$(^;$MT*4:H@+l.O54hgK -])qiBkhH9rDJ7"&hhBXPB\iba3RhVRfFHFi.(;MdJp[sk2FFnZ2*shmU1scUlVXnsijC0JPjg --99)'*As2&Ctc#f,J76ZNI0u@%Kd08A70Jpu22!7$71W)1X2r&-grmd/7-Z'D'SrAHoEBo?8+8O_4U;"nnC>E\#PTs_Sq]UeM5 -(o;$=gI\WIa^K=<>ME'Ea-`0NGqkKq??3r@%:NF?Tc^5%lIo?@g\@B\j2X)!YC?fEkP< -P\![-LO:'+[R.D+24GcFKIS,j)c3d\icQYR$^%*8:Q\YoVjR>t52!^@8]I-R0HT6P"\&P%cS@? -%TSN,;$omLDjG]YY2VoM:?c/D>ns4uZ%W\kI'>==]9UglK7c#igH5E]0rmJVu3Y#kLV2^gGf\ -=?:2)M@JC?0Rg?<#@G@(2XBlD^,TZ^+rhWN5//&tZ.7S!Yeh4?XN#Ph<>SO01cWX]>qZL.W^`gb:Eu7-%Z$M?k"7%[DA/I@bJZ$jr$ZcbNO2H2F4]6 -ADK)QlRX.VNSmA"?]TQNJfpH_^Yoj0KAL.Vm9/gtm.?B2VaODRFG#gt<'g'!6D'cS9%?c&]h/ -)aFNrD.er8Z!;lMX`ucM]p(VGX'!b/AopFGo3(2]T[n[)u -,:?lI!>[\MNaq!Mo[Ud*$mljN8($oR\ndsg!hDiS3t1L"Zra$q!1G!^7KW731fQeA!Tb@N`/s -FUh%%NK:pUU/&ZW9)Z3_6b+l7aTFfY;=.H+3!Q1-6brYqKks269&@3WY/"i^V&c8%0"Y_RG#( -j'e,P&kg'Z-beYR:5rnoNLGrjBqkUlK'TRSL-CV]P6:l(]Vk2f"j']8$s=Nj7O0kS+s%=(,`9 -RE_s^U,qge$/*EaTRUuDjQ6n&qX6)hW%@-i\bR/^#!FpRk'niGhq77N3b3@*;jrs7"QK[ -1ie#'8&YT8)f_Gi+-X%G*$ghSqqc`o"_%$6uajq?ec,A*>3I]SO9<@$\]P*6)X=;hse=TpMJE -.HkN?I0/e+d!?PR#GJ,KqCsftT\9of,nt\Lhi53QOR5;-)5Q"`[2"kLW";;.&S:8O>$JkAa=? -.IbcUf&:G0n.P*nb9@n]=Y$o,$&`;jDS]KaYsL\IY_FttnrTUk[4cAaS59YZiK(A\7"mH<(3P)]B3eH+f>@'n9*/U>T$3#O?Y(`lkdVPO_U/J!SG -daWJGXQ.%/@73N*AFsDJ;\Z_.C,LqXhQ\^-OW".c^&NkiZO5Y#0mmD>(i'%NM'-*o)Tu$N9(f -Or*D-.`bGnWQKA)K6:.:GCHP6/`;k]n6*cU%R^3pWGc)VUs"IhJk@BKcLB@Aj^2TaIeiTmR!# -I?7O'D@^9i:pU8P1/r+C7"gHB-%(TX&jF:i5O^*Q1]O*B4H(s/@WI$V!#K8cT4Z"E"P -oNZj\t$OcdjjB2[CdjJeS5RcGbpT%@U:["YDANur(4[GO>e=q7-5[k"sgoK]F3*p#jW)h`8$^ -KleqXKhG<&n#?Nu,+(:lIj(C'sKTX`f^'DhC(cmA%7eF@tZO3R2@=/5A-dhl:oIlk9%c),,u6b3A"AWU^s`>48`.,.S8Vt_b#;p>1JTB.nN -8S/d,M(p%0_[o`S9Et9"QAK=q4cE,*^6?r97dRd#@sF63@>:il=u\af\UFa/kr3\7`#0eJ##9 -BiX68j[H?=7E3RpT#$_:"6C?SLCdE%e,:+0gXE*Q.B4b&f<[$EYH*3&(C$%K"O$$L[:A8b=O4k4N1n] -;d%KhJQqtQJ#if.Q;5*kek`t@Z$+^esb0bYXX`\<+)OdEtf:q5DW2*62K]3!m'%H<(X9(8++P -haO*KY)-Ka?[4X8&bHiDX9Pn1!N!IseOVAg0p(QsO/M^uR&1dnG"RQt"jmfHasM7W"*E1,@(# -?S2W01AAGuB?1dGCe%lnBI9LsOk\[#kM&m-+;UaGmQ\mCASI5?FVk]iI1>] -+oKTu1FrZRu;Ou>&8auLs2%3\4Er!dp%EY`2g+uP1p!90=W]nGlN#l]W?'Dt>p0#DCS]*kbLE -9K%(M=E5QVSgJ&Yb$KD%7@673/bKtQqtWl/r]7lkA>=U"oTD(Hk!ZRTm[77-dX>5o6@JoW'$0d?AhTrh<:,@7$l)tihMeb"-%(TR&jF:i^[T@C\X[2J'q_<.1Eg?GQk -&WE/5t"kHC15^""+bG>dQ;)@r.C7@G\IKC11Y7Oa`%3))a9]@`ZW`J\`talT*k=3?83*hJ&b" -KsOLDd;VQL?R)IKoI>,j6'%Oce^H+F]9Y&u?.HS6TsKo3MWlPPUkgs`S.P0#jDDtt+u=i#FX4 -&E>7eK*n0!>]R-TD)&q";9It7EC\1YX,^dL-$047J7OUbJXLZL<#Bef*3qEBSC"f>lK5K7`i$%u:OX%N>`@>AZQUqQ0G@i+QK`*IoIr/AP`s3\-LH1g@q([Z@4k_$[kK_]=? -l9K12:FN`/'Nf"7L@eXCo%qGBF=.)/NfeKaUVFf5P'@\OHd&$n-Bk6,/qroph.aVNsCpIFXjR -cs')FR%A>E7/T\K[t$*lS]FML1P+%8'#,YTMWcb2^EN@[k,uNb#i?AA0>i2E/i+J3@,cNl?c8 -<4,@.O&%8/('^;PO3I@n<&%]5:pCdlYfFJ":oK2+:GNR5Crp=I^g$CY=Rjoj2[TqNO-VkJJFM -C0O5U@'.7O.k\J81RNE)j6bjfFG0bKMPHG_P`du(I!OQI.E2#N\M>Y0#[)XZN4ZN\MVQiLRBT -gSP2iMTq)^29T:ebbbULq$Qfd4dEb36'4rkc(cO3f@'#8@4n!Ua^5c&BUMYss0[dmd)W"CKgr -Q^WGEiRc(m6[Wc_-4)[9Sf6^7+X+c;cVBAtYZ<7(ab??bdQ?]uYJ\E?fT6M*DTeM5VG')hMRe -])hqMnGN^_27SG")M"Rn':1Cj`g@&W7TdEZV&Mc<0Q8(]?c&mskn=o[Tr/@U/^U+Uk@s/:L%Z -57)pkTOo./1XK_bfijA=Amq(rd]6N.,Q%RX9NRR\OWLT8%Llp=,Y`*6*IWJ"(;q1H&i7R2KVjb-Zle5sFYu_d94a9UV8'121. -%Mb-&RFRXjA#qZg-9XJcDM/a!bC;q21;_b.[9Ym*dpZi]^0j;c!P`]]M,`G^nSs]8p)&=qXA6 -?Vio(0rY6"Un3Bd@R@mRG][n=L!C`1.is)gl/b%`A5a>ee'o'baY&IMlX^0Ofde"H*jZhdYL_ -oR.2?H'l=!;2:`=d/>]k+//9WF<Srk?;Y*E^&>)C5)IX/.DTppghZ;V/GfSbaKB -i^]f.leG`iife&0mNMm=iN<+VP'=kkc.XDOA.inN;-35kepHU-jqQ%]RB'sq``t*:;Wb!IP;$([S=%uMAjsoNR2%E.Hj[Ce13'+a8;%Q_+Zb\ -R*<^"/2\#don4gabKR4?@lu;l_M,B4=a-[Sdf3fVPjYDQCU#1f8'?iq5$nuk"k::Xu5d*Q<-d -]7ggPWEqBRLuImm-J&e8M)?e%Y7a%< -*"+9%?=A#2knPOH\@BE.$6q&0X`0uL5_66F:)E+CE2l09JWg8k$a^X.>2X@NecIE,%Mm](?uL -VY!_ih:$T&RMhDao5)WLQ)?B57@s'4lgpA&=du_J>+;RHmMS!:"K:&-\h[c=i\%QamEQ\N@!tu=b+33"N7Rlm:'c%1 -[%Ui`FI=:nDN#tagcA6Ccn4bjUet]PbTBl!G(?aEA@4TV]j0T$ZW:>$5hGiGk,u,q/6B:)K3$ -uOA20_HF6WH)g_'9]I/&ojiC_pO'7ViWDc2[I4V>aa,T475'%(331+3*QG$FiZSZ6-bgMSaf+RaLlr]u76Z%Qp)7F).PbB -EkFde;(WmXkDWCTteOS',5HcXorPbqQRU*R_#'ZDMe-RhYcR%tjma'oO`$mI-R'*uT4+,)q`M2s`0L*#P0\n2Pk9K4P0eXghiVjWXOaJ04[X]brs[(lYuO"+<*ho[%a?'-5f -7BPkeXa`g[E^9neq!32(k-Nk.9mA>lV]4?'O)l2MRgLl.K -#0$T!:C&H%tlp=Cts/ZT1eDkfIfo94sQS=k]3U>N0=N_\lW6Zt).`Aq-8_Bpp-loT7',%4QIs -W)']D8R7M5,hjBEjT1h`e0LtfY]5f*74R=s`$pbR5#,7>[4t9`XM.KPI9&fdNj:c>;1udl"d( -q8jq,aE/ql@nbeu4VKdVhY+E#H?iQ"Y7`kD0'N>jKTGJH6?b;b6r0JJ)B.t4qba!#gpJ;\h0Q -uTrqYDh]3_&(r&9TO7cB[`YDMro1r>4G?DhU^To2-t(6b::0'KNs(@j`n?H:Wi/p%1Ys,!\@j&tJ/>niua`&^sB82Uag=*DljQJr@Ve -AfPP2p#6rCQ]HTK,;:K#U4t(>0G#50f0*FYRY"ZgBq\U25]b';7J(`X#T=W!lT:VYi(46^3:, -)ko11l6%A\XIQ25T&oPXbu#=N+HXW[%_`@a.[,#EIUU:bJFne4[pY'Ve'ogI_6\AIjGe!i.W -ZYB;?@cU,4B7.aA<>B8>)GhNYYTka("ag%=W+Z*Yc3:OYuSZ=R/8!#jB(kSAh:EK:R2A]$tM> -eiH1N[1oDDCRGqb7p*=KHN]uB?K%:&VM]@\^5L/+&bqY[Tdhno)_QF1;pXg(T/kkY<[YU+nauLpQPQt"(qV2pLJb.Xmk9ppdE*_P7iG#L088f -,IU=RN!K:C8*V3:`HXiK"Cr:LQ)2OZ9L6@1C*e`76kQnY=us?8$bN_sDusJaXr41Ch;>\jl1s -'qH+f3<\.<54-6J1YPN92<&E_R_/+(*q+:3PR`[V][;bk>+ocP9,bI9`cDTf=5fMZ:FT*ja,r -D&P+el[&h3NS@BTgn$C$IRXUJE+p_7-_I#>K7`$`UElmb1:L,*")1[pL4.8D8TH,-B^SVs"sd -iP:O5"D@fNmJ]<--X1Zqa9]Zd2\rrJ];sRk1CEArXM$feBLlQ__rT@VV1%,ju1a22Z?.1S'!0 -0>a4,T]p#`d=mM`&P1;K?R:)k^i]gO_UZcn/a!_eL@lT80)-BhA,]GW$_'fN)\/`G`3W.sYO$ -7s[L!bl$(CUdq:#P>WS0(,=#X5`W1CLQWpilc\oqB?`1F@KWKVf"CG2nf.%@q`BLY&qYV&^pf -nR=;GfAO.WFU`S!Kr:06;;d6ML[%\^_k[78]sE^#U.Y4Us6G-u#="<;&<_d0OG4=pL):hbB`k -/!)q[u^`G!ePCYcBqlUt7)'"dHu_(Ai+?0QO?C`f7[?+]YW\CE3M[90)F45F'I[6OcW[M13m/ -=Z[W6eAqon%Ef2gtOo]\T@ec9ZYGG1NUl9chVS+ba`_]Z(q@[q,j#>"ZaZJ`gf`Hb.rrRQmVX -=$H^?5"N]bu5K`0C/brZ5fl7L.iMk!_0ui'C1e-.U_W/Q#\B+B%4FD\b0!P!g>DBZ^/9d`FNm -hhDQ;%Ht4N3&=XRBfX$#]!;9eWPn=kU]P#(>=/paaP"\?;$,a'!_I,tD+n_)4_beBV'2/84)7 -6d.X5h#5IRc`C/ZI)5FjVZ$;pp0G_:f23J>qas^^JtEf'Il3N,@;-m*$a;$$$h>u9#P56`OboJDQnJ3E%EZZ8"N]aeYPc1/s0sA -IX#r>dZWB,2RAV\-`$ft&BFM65,*.5oNXKYfcbi+4E0dV=fQ*F-#J#234&3&kT1p]cfZ/_b=P -q<5*c<]7e'4mF$kEcPFau'A\G%7mpN&hHRsWi\2`CB6Tpt_)A_ktnd`IqfXQ -j3T=5;G'hj:EXA,.:N42A0#/8\t?k:CN0Ra5*CO/kHU_/:m_`OtT^rIikKbkd\E9hbSCBoP'u -E#l^.LAGn;3/5"Ae.-!3"hZdIRa\2V5ZL&*l9f+nhX&8%::tQ\^*EDQ)_)>,I4JW<_9;_[Fq7 -p3Mt(%S)OCnQ[IhZI"("=J+1ldNdT02=*X-gcX,Vh#Z(Di-\g= -O*K:Hn3lg8nfl;c6K0293"/jf*c^#7"q[IcDE^pY0]@k]Q`in(BanfMKlen'RXD)i5%>G -W#6Q]Y#_(WFjC+%RS`@FIJEZDfENsh(tgrtiM\UI18f5A]Cr0D^_na%Y/s3=OZH/\mPcdN_?f,5VOAB2/ -q5K1MfH/Jg0^L9bgp\&QM2g9AK\W]b.f\"#pY?9]-\i+Fd`0pe0q?nggi5QQ/5%DQAD)H"!RpMIl4F]_e)T@RCq(%O -is!u4?(-`_]8T7Vp=nP&:;aM(hD4uO.Tt'$+BU!E"f"f]E=n4Wif5f.5/?7[/G? -F>mQWGq\'6E&=p1qmP@)dMi^Wa'ODP6>WT"g"ma77@j8k8FD0V5q-Os)r-)F#=Zj8CCo_dbiS -ZlU]4t]7oEAKi%k6G>,`[fsNu$8'u+>Uqcm4?Z?KFI(/*LpnJb`n@o3D2X_5Jn>lGr=SmuXeZV-\Y3&;UeqB -J[\i!*4f8)Z>\2i`7*E:54C)+MFGX;o+"do\>T(&_7kL\r4Kh2T$.ES"&=4+b+'/3Se8X]X#' -`VYb/#<=l.du6AXYc&-A[pe5rACk6U/afRRr$oqJN3#apgjjYbQs5S2CGD^q)5W^+K%\,1\Jd -8^OC!_\"dkmBg[fB2%]3gt[S3Jg4t]7oEAP)bo?RF4>is*U0E.O*^>mo<*$!t;dl]A#hNKemf -[\1*#!9EKhTIgM_c26/#LQ+CKYatI3XD?g]7b0E#Wh,Kjj2P:!hIFO -:/:X/T.Ts3BV&NP-9,=_oR[71L,$-qJJl44NJpG>ZI?`Cq1[BL%grK&P9Y:0+QOfJYIYinZ]HCP/"Er!VsH[r[$1Adun\sjR1R@_='"ZMNc*Eh!U23+amA<%jT)"T@fh@ -Sh@`nUU=mDn!Gbius6DTq@`S>4.bJrDTu*5q2Eb\k8`I@.DIZZ]eY1M/ORAg:o*6i'iZf-.gC -kr"i*Kc-@7I1rJr_"7uh?B3dliq>-$/&ek.9In,ie[V^e[h[o2!i4p&/IuPUpdmAmP)5fA!0W -DtOF5j-aRJ]?`JYu(c]8JDNLW0qo'Nn2-Vobm3&0.ac"Ko!BQs47f3aR[4$MBG1"q(e[&r`D_ -*aRgZN&>h?X3GKbLjPT`qFd@[WC'Q-el\1S&^td`Yq&[CY3fUCW#6ElS&;3GF.3j]i+Hk/+:, -tjfQ"q]NKOAND3K%Y@"8RmE59_nX%G>?X,Phr!VP]c]+8R4oY3ij,ZAfrlCkl5PXaBKb&Q<;# -(!HJua)I^UiL/X*62,RXJgMk(:U`=cILcIl,Kdh!p0DJ0jNAVQ9t$?KV-Om%ukMs6*f*/A/N@ -4L&EM]"'Xn/.:qEpTj#FP4S-ln'(UV^R*_?jlCmM?ZL';Mf16&D_?tHbED6c-C1K's%11ZOF5 -j-bs+U">2$>te##p55',l1fs>>;R58L4]Qs,3cX3na_8:m6F)l::04);5l-a.dQK@;mY?8&=j -iWk_giH8"@H%1ZhuDVe%mKX46`X:lIe;#X++*@ZTE"iP:H\0cP>=C-f -&9/"!Vo#iulkj-j(J+_>nJ+]jLq0]p.?[mLa`f4oNq.=2Lj]cZ:%8-S:2M$_fP]OcV0!o[tj$SOdio#l2PL -OG6iW]0DS.&Ak^9YJ*LHL##4<8ru++&O@&[G753I8a(B!_,p/%;OaO5AGKn0Fo&5W?R6u -hr+33IVeEdNG2bXo"'IR_(Y\/d'Bnk\Y;(7Zh'g*_58JZegjV,!B?\i.MO?cs:.5#]u/OF2_#!u%:t,o;cXAB@=Ii?'2TEN2t*m(<`_[3oGW:DZA#M_A-=P3/ -4U)#fab9nu+YV$&odo[IG#3@O#b&HHM@ZlemLqDg02Yf%@BP,@HeW,!]P`!u:BUMlgdis9YGa1pjl"bF:[L.F -MMMmMu*SN'md;\=FgBLk=QEE59?@sC[2L:UI=M,1HZLkHD*_3/(fL,tV-OdpY`51ZbtL?'S44 -,Blg\cHR>$6_Mt[:ZV(I"W&0K&e/0E!49Q#iQ&PNtB/?,Te1_,=k!b#Y0u(KQ%$:oGY0-8RA^ -`,D7#7er6GgNsSS-D^i=g:^6M\pBj99]559\),!EX:rcI$o!+/"l+t;S_SM.&A\9B4C.JfgE* -PRb?'jX4#Tf0?243#AjuJDn'$82jRg9Iul4d:[A*+tb%Z`'W55A$mW(q6%e#4OYHn<:(I%2C\ -I*C(P'ZX\('Z_ZgnDI.OXB4Ks'Sp^,Qbm8eq9\_(4sGQr?1W'*I-A*Y9B3pII"K4&7:_/6,8, -fFj>4mZRgS^Pa=K>[_]t[Vndu0rnhF$<5+rFgaG9YTHpe&+N-sj"),'#-m"'61[ZuX0j3JcDO -aN\91\*9m[O^9V6=7-U8h'=PB%K4c[\Ic6jPpMcaN)&p=7&RI68$;]q7oaq/r6K_4u+rm5X(% -9(2)_R4GLo;A#Oa.SbP$OWCSF')(aJ&A#Nn:&BTbfjC>mW@n8dM\:^0+XW*pF//?#8<,9KOa[ -ZUk,tL3d#Y0u(KQ%$:HpML+PItGJ7gM%MXk>3M*tt09lTf]STFBtB=7(aVoq1pK<1\.50B&J`F..6 -Jgs_n0j!,-1o)a.bb:2EO:YZ\9aG%J$d!DkQ1O#][r+^Zg5?&@a6*Lu`&)p8-PIq7oaq/r6K_ -4u+t-+s/=2N$jIgnduq\A+DA(]u!NlR_;$5Pb8GNm.)m\YuHP?`#J9P?L9Hm+!KE*9Z>Ql:pX -4/i[hS6f7^lJ -5!1-VTtQJ."E(R<-f:HhbP$JTN)4uQ]5jPpLeP7LTk@qfT`bsE%c/P.30lYdt -(UkVfMOcPogr,&p16L9mH;f>29KH$a81dYs"a'sG@?Gq* -!g.kh,aXQ(n]?jQ@jS#5is;6=%m;t#KbZ.B`QV31+%doCI/MYB.[#ikGXakd9"s]`Va"kDiWJ -AJEPe;g!]S3@NkU(-O!DRd+9/3E[AOqgap3+LF?rShoT>gjq,kX>q$<&?1&2[O?=>3Fc!DP+8 -l,^bG53!?==Q^ZiXP]cYP&frNtC_%VIJiqW7`\Sn-%:1]gD9%6;.]KNtB/?,Te1_,=k!b#Y0u -(KFj.dq$8,`61PW)%G9'DfPW$]ac_\rDP1/hQ:a=f3'G$Qn/=S1bT#@g%/'"n!M9u9+ -B"`1;6A.B,\b2d(24bT_9H?E=/;?iLI)6@(*jp7(8j< -69^kttH-6c2^@HFG\36$FY4)`b*J@sqfJr%&$j#6]eq.D69CNbE?Rj*2(C?2$ITcu6Zndu2H1 -\-rEWHWuB!n61:$#>8$5)FSb=S[XLFBBe1O[(06_]A<)i.RKY'1ZTT7lZ*5jMN78YuL9#`;dl -;MWBu6GXakdP/$B>_EIJsH<)$Y8TNmeU:03CE68Muo('&\B:n7KUr4Dus/&!k#O[Hf,5EK;PE -?CB`9C_Vi^"Y()Np.m-6jTUK(,.T%!AbX';&kf'aZ07K-e-W%!=*9,!#1JI&pCr%*;!FG7[]X -FT^-PV*]EYC<]j1q$8.@"Na.>icn5l](Z\%7J7^[tWN1Hp<0iJ>43ga%%_5D=V-+cX(%6Yk!XD*O?#;B=$5%PC1T9I, -_ptnsO$F:3QGdXi;1iX%%iSPg#5:b`I535k6Wl+Wn$M_k.mC,5M$(N-pSKH.s)-AbNK$&"KW`2Ja]Mq=loIV''_Ye.B -aBSQNGZP`cRD`9E2$"o??G=+,R:J?D0CWQ%)bI-f[2!Ano9sTjQ#.i(P0A-;*uV$jM_`,^eUCPIjp@@1,L6ub;^[ -fiDhue+%+j7m)5gT.mu]1b$`=D+%%&AKh+tO+Wp%#*^fK1_B$QoCu#(KH\E$&TN\['83T@r.7 -*M:69'SX,D:"=a[ZWq#a15[_@\%8+bV(25$"n_CSu+RZ+aIDd7>CCNtn[YD)OsoKfD7sJVlqV -JE13klD4:K?!+q!AH\gECuBDIoF@%F'dOmi@7WRW,PbG-o'md@J'3T_L'*]g&rYg\"j+f3(a1 -aYRacre`Bj&d/2>6on6oU1T\2rm8IE'N`u,MTUp0DEduecI+^e^%=N_0u%_6<8[+;G%P8Mm3' -.=jB-aCT>TVAOI#S(HDEY3n'GqH"3Cj< -^IjJc0i(E2cZZB;A;UF:A`iD!8gcI4:IfoZL#/8Cm$k/(:F@adSK+82^J6@1b;\CuNCs#ZZ_h -*8fCa8a$Q:/j8#U]tc3'i6]l8^(;a=n3!X@Y/kerHKI-\i -u7Hu;7AJ^>^8`%kopM/]'%n?A@%TmY(a*/rMO$4NUcq3[Efa_-bRk26!]A0?!9-aCTAT?(l>T -P.q3*j_(-6XjeR=\5);C&+.(J:c@I[W`S9&eQ=@%11d8MU9G=8M/,",to=K7/;N/N9$1)@[0_ -s[DX.(\CWG/5icAq5sC%6La)'%YU1kN(5aR`RV4'j=(i&#&Z[!c:5C#7Z\6`]Cn\u?4@[7BSA -Sr9aX=@3,Teu'8D5EjOl;Oil]`%'A2#8NVb%["K\!Z1P%9]9b[VY\ICl!r=leTol<`F4%*?P( -,TeO-52O2=I%3[sZ%@"e-h5C#qT+H7"pm]gYsKGjD2P+hZ/]q=(H+/b<=4-GYD*7#G.W3*'6PYZs*Q@-W8Ob*`gC4m;6-^'OXH; -^u?7?*C\pI+Qa;bm`9[&=R7n=E07@d:3rd/5!E7u.`8W2NkN@[m_='`jZB-hM:9=J@)`i1nhDC3+e7JfI%6crb8! -_+%EV*Gi - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 382 406 -%%EOF - -%%EndDocument - @endspecial 275 3732 a(A)m(t)i(the)h(top)f(of)g(the)g(windo)m(w)f(is)g -(a)h(th)m(um)m(bnail)e(of)i(the)g(image)h(that)f(c)m(hanges)h(to)g -(re\015ect)g(the)f(color)150 3842 y(settings)h(of)h(the)f(image.)53 -b(This)32 b(enables)h(y)m(ou)i(to)g(get)g(an)g(idea)e(of)i(ho)m(w)f -(the)g(image)h(will)c(prin)m(t)i(out)i(as)150 3951 y(y)m(ou)c(adjust)e -(settings.)275 4081 y(Belo)m(w)h(that)h(there)g(are)g(eigh)m(t)g -(sliders:)150 4231 y Fn(Brightness)630 4341 y Fu(\(0{2.0,)i(default)d -(1.0\))h(Adjust)f(the)g(brigh)m(tness)f(of)i(the)g(image.)150 -4491 y Fn(Contr)-5 b(ast)142 b Fu(\(0{4.0,)33 b(default)d(1.0\))h -(Adjust)f(the)g(output)g(con)m(trast.)150 4642 y Fn(Cyan,)j(Magenta,)g -(Y)-7 b(el)5 b(low)630 4751 y Fu(\(0{4.0,)31 b(default)c(1.0\))i -(Adjust)d(the)i(cy)m(an,)h(magen)m(ta,)h(and)d(y)m(ello)m(w)h(in)e(the) -i(output.)39 b(These)630 4861 y(should)c(not)j(normally)d(need)j(to)g -(b)s(e)e(adjusted)h(v)m(ery)h(m)m(uc)m(h;)j(ev)m(en)d(v)m(ery)f(small)f -(adjust-)630 4970 y(men)m(ts)31 b(can)f(go)i(quite)d(a)i(long)f(w)m(a)m -(y)h(to)h(restoring)d(color)i(balance.)150 5121 y Fn(Satur)-5 -b(ation)70 b Fu(\(0{9.0,)33 b(default)d(1.0\))i(Adjust)e(the)g(color)h -(brilliance)c(\(saturation\))k(of)g(the)g(output.)40 -b(Sat-)630 5230 y(uration)31 b(of)h(0)g(means)f(pure)g(gra)m(y)i -(scale,)f(with)f(no)g(color.)45 b(Saturation)31 b(of)h(9.0)h(will)c -(mak)m(e)630 5340 y(just)h(ab)s(out)g(an)m(ything)g(but)f(pure)h(gra)m -(ys)h(brillian)m(tly)26 b(colored.)p eop -%%Page: 30 35 -30 34 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Programs)2663 -b(30)150 299 y Fn(Density)179 b Fu(\(0.1{2.0,)47 b(default)41 -b(1.0\))i(Adjust)d(the)i(densit)m(y)e(\(amoun)m(t)j(of)e(ink\))g(in)f -(the)h(prin)m(t.)72 b(The)630 408 y(densit)m(y)30 b(is)h(automatically) -g(corrected)h(for)f(the)g(particular)e(prin)m(ter,)i(resolution,)f(and) -g(in)630 518 y(some)35 b(cases)h(pap)s(er)d(c)m(hoices.)55 -b(If)34 b(solid)f(blac)m(k)h(in)g(the)h(input)d(is)i(not)h(solid)e(in)g -(the)i(prin)m(t,)630 628 y(the)i(densit)m(y)e(needs)h(to)i(b)s(e)d -(increased;)k(if)d(there)g(is)g(excessiv)m(e)h(ink)e(bleed-through)h -(and)630 737 y(m)m(uddy)29 b(dark)h(colors,)g(the)h(densit)m(y)f -(should)e(b)s(e)i(decreased.)630 881 y Fi(Note)p Fu(:)52 -b(the)36 b(densit)m(y)e(will)f(not)j(increase)f(b)s(ey)m(ond)g(a)g -(certain)h(amoun)m(t)g(no)f(matter)h(what)630 990 y(the)31 -b(slider)d(is)h(set)i(to.)150 1167 y Fn(Gamma)170 b Fu(\(0.1{4.0,)29 -b(default)23 b(1.0\))j(Adjust)d(the)h(output)g(gamma.)40 -b(The)23 b(gamma)i(v)-5 b(alue)24 b(is)f(automati-)630 -1277 y(cally)h(corrected)j(for)d(the)i(c)m(hoice)g(of)f(prin)m(ter;)h -(this)e(is)g(used)g(if)g(y)m(ou)i(b)s(eliev)m(e)e(the)h(automatic)630 -1387 y(setting)30 b(is)g(incorrect.)150 1646 y Fg(5.1.5.2)63 -b(Dither)41 b(Algorithm)275 1857 y Fu(There)33 b(is)h(also)g(a)h -(selection)f(b)s(o)m(x)g(for)g(the)h(dither)e(algorithm)g(to)i(b)s(e)f -(used)f(in)g(the)i(p)s(op-up)d(dialog.)150 1966 y(There)e(are)h(curren) -m(tly)e(sev)m(en)i(c)m(hoices:)150 2153 y Fn(A)-5 b(daptive)34 -b(Hybrid)630 2262 y Fu(Adaptiv)m(e)g(Hybrid)e(usually)g(yields)g(the)i -(b)s(est)g(output)f(qualit)m(y;)i(it)f(c)m(ho)s(oses)h(a)f(mo)s -(di\014ed)630 2372 y(Flo)m(yd-Stein)m(b)s(erg)28 b(error)h(di\013usion) -d(algorithm)i(or)i(ordered)e(dithering)f(dep)s(ending)g(up)s(on)630 -2481 y(the)k(image)f(c)m(haracteristics.)150 2659 y Fn(Or)-5 -b(der)g(e)g(d)173 b Fu(Ordered)39 b(uses)h(a)h(pure)e(ordered)g -(dither.)70 b(It)40 b(generally)g(yields)e(excellen)m(t)j(qualit)m(y)e -(for)630 2768 y(simple)25 b(blac)m(k)i(and)g(white)f(or)h(four)f(color) -h(prin)m(ters)f(without)g(v)-5 b(ariable)26 b(drop)g(size)h(or)g(drop) -630 2878 y(mo)s(dulation;)22 b(it)f(is)f(not)h(recommended)g(if)f(high) -f(qualit)m(y)i(is)f(desired)f(on)i(six)f(color)h(prin)m(ters.)630 -2987 y(It)30 b(is)g(considerably)e(faster)j(than)f(Adaptiv)m(e)h -(Hybrid.)150 3164 y Fn(F)-7 b(ast)315 b Fu(F)-8 b(ast)37 -b(also)e(uses)f(a)i(pure)e(ordered)h(dither,)g(but)f(uses)h(a)h(v)m -(ery)f(simple)e(blac)m(k)j(mo)s(del)e(and)630 3274 y(mak)m(es)41 -b(no)g(attempt)h(to)f(handle)e(m)m(ulti-lev)m(el)g(\(6-color,)45 -b(v)-5 b(ariable)39 b(drop)h(size,)j(or)e(drop)630 3384 -y(mo)s(dulation\))31 b(at)i(all)e(cleanly)-8 b(.)46 b(It)32 -b(is)g(substan)m(tially)e(faster)i(than)g(Ordered)f(dither.)45 -b(The)630 3493 y(qualit)m(y)34 b(tends)g(to)h(b)s(e)f(quite)g(p)s(o)s -(or)f(except)j(on)e(simple)e(four)i(color)h(prin)m(ters.)51 -b(On)34 b(three)630 3603 y(color)c(prin)m(ters,)g(qualit)m(y)f(is)h -(probably)e(comp)s(etitiv)m(e)j(with)e(an)m(ything)g(else.)150 -3780 y Fn(V)-7 b(ery)40 b(F)-7 b(ast)97 b Fu(V)-8 b(ery)39 -b(F)-8 b(ast)40 b(is)e(similar)e(to)j(F)-8 b(ast,)42 -b(except)d(that)g(it)f(uses)g(a)h(v)m(ery)g(simple)e(dither)g(matrix) -630 3890 y(that)j(can)g(b)s(e)f(lo)s(ok)m(ed)h(up)e(m)m(uc)m(h)i(more)g -(quic)m(kly)e(than)i(the)g(matrix)f(used)f(in)h(the)h(F)-8 -b(ast)630 3999 y(dither.)52 b(F)-8 b(or)35 b(simple)d(pure)i(blac)m(k)g -(and)g(white)g(images)g(dominated)g(b)m(y)g(horizon)m(tal)h(and)630 -4109 y(v)m(ertical)29 b(lines,)e(this)h(ma)m(y)h(actually)g(yield)e -(the)i(b)s(est)f(results;)g(for)h(other)g(t)m(yp)s(es)g(of)f(image,)630 -4218 y(the)j(qualit)m(y)e(will)f(b)s(e)i(p)s(o)s(or.)150 -4396 y Fn(A)-5 b(daptive)34 b(R)-5 b(andom)630 4505 y -Fu(Adaptiv)m(e)27 b(Random)g(is)g(similar)d(to)k(Adaptiv)m(e)g(Hybrid,) -e(except)i(that)g(the)g(mo)s(di\014cations)630 4615 y(to)44 -b(the)g(Flo)m(yd-Stein)m(b)s(erg)f(algorithm)f(are)i(sligh)m(tly)e -(di\013eren)m(t.)80 b(This)42 b(is)g(slo)m(w)m(er)i(than)630 -4724 y(Adaptiv)m(e)29 b(Hybrid)e(on)i(most)h(systems.)40 -b(F)-8 b(or)30 b(some)g(images)f(the)g(qualit)m(y)g(ma)m(y)g(b)s(e)g(b) -s(etter)630 4834 y(than)45 b(Adaptiv)m(e)f(Hybrid,)j(but)d(generally)g -(Adaptiv)m(e)h(Hybrid)e(should)f(yield)i(sligh)m(tly)630 -4944 y(sup)s(erior)28 b(images.)150 5121 y Fn(Hybrid)33 -b(Floyd-Steinb)-5 b(er)g(g)630 5230 y Fu(Hybrid)29 b(Flo)m(yd-Stein)m -(b)s(erg)i(uses)f(the)i(mo)s(di\014ed)d(Flo)m(yd-Stein)m(b)s(erg)h -(algorithm)h(of)g(Adap-)630 5340 y(tiv)m(e)c(Hybrid)e(on)i(the)g(en)m -(tire)g(image.)39 b(Generally)-8 b(,)28 b(the)f(results)e(are)i(p)s(o)s -(or)f(in)g(pale)g(regions.)p eop -%%Page: 31 36 -31 35 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Programs)2663 -b(31)150 299 y Fn(R)-5 b(andom)35 b(Floyd-Steinb)-5 b(er)g(g)630 -408 y Fu(Random)24 b(Flo)m(yd-Stein)m(b)s(erg)f(uses)h(the)g(mo)s -(di\014ed)e(Flo)m(yd-Stein)m(b)s(erg)i(algorithm)f(of)h(Adap-)630 -518 y(tiv)m(e)f(Random)e(on)h(the)h(en)m(tire)f(image.)38 -b(Generally)-8 b(,)24 b(the)e(results)f(are)h(p)s(o)s(or)g(in)e(pale)i -(regions.)150 742 y Fg(5.1.6)63 b(Action)40 b(Buttons)275 -935 y Fu(The)29 b(last)i(pane)f(con)m(tains)g(four)g(action)h(buttons:) -150 1094 y Fn(Print)i(and)g(Save)g(Settings)630 1204 -y Fu(Immediately)40 b(prin)m(t)g(the)i(image)g(\(or,)i(if)d(the)g(File) -g(prin)m(ter)f(is)g(c)m(hosen,)45 b(displa)m(y)40 b(a)i(\014le)630 -1313 y(selection)36 b(windo)m(w)e(to)i(pic)m(k)g(the)g(output)f -(\014le\),)i(and)e(sa)m(v)m(e)i(all)e(curren)m(t)h(settings)f(for)h -(all)630 1423 y(prin)m(ters.)150 1582 y Fn(Save)d(Settings)630 -1692 y Fu(Immediately)c(sa)m(v)m(e)j(the)f(settings,)f(and)g(con)m(tin) -m(ue)h(w)m(orking)e(in)h(the)g(Prin)m(t)f(plugin.)150 -1851 y Fn(Print)271 b Fu(Immediately)34 b(prin)m(t)f(the)i(image)g -(\(or,)h(if)e(the)g(`)p Fr(File)p Fu(')g(prin)m(ter)g(is)f(c)m(hosen,)k -(displa)m(y)c(a)i(\014le)630 1961 y(selection)30 b(windo)m(w)f(to)i -(pic)m(k)f(the)h(output)f(\014le\),)g(but)f(do)i(not)f(sa)m(v)m(e)i -(settings.)150 2120 y Fn(Canc)-5 b(el)216 b Fu(Immediately)29 -b(quit)h(without)f(sa)m(ving)h(settings)h(or)f(prin)m(ting.)150 -2378 y Ft(5.2)68 b(Ghostscript)45 b(driv)l(er)150 2693 -y(5.3)68 b(CUPS)45 b(driv)l(er)p eop -%%Page: 32 37 -32 36 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Rep)s(orting)29 -b(Bugs)2420 b(32)150 299 y Fp(6)80 b(Rep)t(orting)54 -b(Bugs)275 533 y Fu(If)20 b(y)m(ou)i(\014nd)e(a)i(bug)e(in)g(GIMP-Prin) -m(t)h(or)h(ha)m(v)m(e)g(an)m(y)g(suggestions)f(for)g(mo)s(di\014cation) -f(or)h(impro)m(v)m(emen)m(t,)150 643 y(please)30 b(send)g(electronic)h -(mail)e(to)i(the)g(GIMP-Prin)m(t)f(bug)g(rep)s(orting)f(address)2891 -610 y Ff(1)2928 643 y Fu(.)41 b(Include)29 b(the)h(v)m(ersion)150 -752 y(n)m(um)m(b)s(er,)48 b(whic)m(h)d(y)m(ou)h(can)f(\014nd)f(b)m(y)i -(running)d(`)p Fr(gimpprint-config)26 b(--version)p Fu(')n(.)86 -b(Also)45 b(include)150 862 y(in)f(y)m(our)h(message)h(the)f(output)g -(that)h(the)f(program)g(pro)s(duced)e(and)i(the)g(output)g(y)m(ou)g -(exp)s(ected,)150 971 y(if)29 b(applicable,)g(otherwise)h(the)g(b)s -(est)g(description)f(of)h(the)h(problem)d(that)j(y)m(ou)g(can)g(pro)m -(vide.)275 1106 y(If)36 b(y)m(ou)i(ha)m(v)m(e)h(other)e(questions,)h -(commen)m(ts)h(or)e(suggestions)g(ab)s(out)g(GIMP-Prin)m(t,)i(con)m -(tact)h(the)150 1215 y(dev)m(elop)s(ers)33 b(via)h(electronic)g(mail)f -(to)i(the)f(GIMP-Prin)m(t)g(mailing)e(list)2613 1182 -y Ff(2)2649 1215 y Fu(.)52 b(They)34 b(will)d(try)j(to)h(help)e(y)m(ou) -150 1325 y(out,)e(although)f(they)g(ma)m(y)h(not)g(ha)m(v)m(e)g(time)f -(to)i(\014x)d(y)m(our)i(problems.)p 150 5137 1200 4 v -199 5204 a Ff(1)275 5236 y Fe(gimp-print-devel@lists.sourcefo)q(rge.n)q -(et)199 5308 y Ff(2)275 5340 y Fe(gimp-print-devel@lists.sourcefo)q -(rge.n)q(et)p eop -%%Page: 33 38 -33 37 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(App)s(endices)2587 -b(33)150 299 y Fp(7)80 b(App)t(endices)p eop -%%Page: 34 39 -34 38 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(34)150 299 y Fp(App)t(endix)53 b(A)81 b(Dithering)275 -550 y Fu(The)33 b(dithering)f(co)s(de)i(in)f(`)p Fr(print-dither.c)p -Fu(')e(attempts)k(to)g(repro)s(duce)e(v)-5 b(arious)33 -b(shades)h(of)g(gra)m(y)150 659 y(\(or)e(all)e(colors\))i(from)f(only)f -(a)i(few)g(di\013eren)m(t)e(inks)g(\(blac)m(k,)j(cy)m(an,)f(magen)m -(ta,)i(y)m(ello)m(w,)e(and)f(sometimes)150 769 y(ligh)m(t)h(cy)m(an)i -(and)f(ligh)m(t)f(magen)m(ta\).)51 b(The)33 b(dots)g(can't)h(v)-5 -b(ary)33 b(in)f(darkness)g(or)h(size)g(\(except)h(for)f(certain)150 -879 y(sp)s(ecial)h(prin)m(ters\),)i(and)e(so)i(w)m(e)g(need)f(to)h(la)m -(y)f(do)m(wn)g(a)h(certain)f(fraction)g(of)h(dots)f(to)h(represen)m(t)g -(eac)m(h)150 988 y(distinct)29 b(lev)m(el.)275 1128 y(This)20 -b(sounds)g(straigh)m(tforw)m(ard;)25 b(in)c(practice,)j(it)d(isn't.)37 -b(Completely)21 b(random)g(distribution)e(of)j(dots)150 -1238 y(\(simple)k(probabilistic)e(dithering\))h(w)m(ould)h(create)j -(grain)m(y)e(clumps)f(and)h(ligh)m(t)f(sp)s(ots.)40 b(The)26 -b(smo)s(othest)150 1348 y(pattern)33 b(results)f(from)g(an)h -(equidistan)m(t)f(spacing)g(of)h(dots.)49 b(Appro)m(ximating)31 -b(this)h(requires)g(sophisti-)150 1457 y(cated)d(algorithms.)39 -b(W)-8 b(e)29 b(ha)m(v)m(e)g(t)m(w)m(o)g(dithering)d(algorithms,)h(an)h -(ordered)f(dither)g(algorithm)g(that)h(uses)150 1567 -y(a)33 b(grid)e(\(matrix\))i(to)g(decide)f(whether)g(to)h(prin)m(t,)f -(and)g(a)g(mo)s(di\014ed)f(Flo)m(yd-Stein)m(b)s(erg)h(error)g -(di\013usion)150 1676 y(algorithm)d(that)i(uses)f(a)h(grid)e(in)g(a)i -(sligh)m(tly)e(di\013eren)m(t)h(w)m(a)m(y)-8 b(.)275 -1816 y(W)g(e)31 b(curren)m(tly)e(ha)m(v)m(e)j(three)f(dithering)d -(functions:)199 1957 y(1.)61 b Fr(dither_fastblack)33 -b Fu(pro)s(duces)i(pure)i(blac)m(k)g(or)g(white)f(from)h(a)g -(pre-dithered)f(input.)59 b(This)35 b(is)330 2066 y(used)27 -b(for)h(t)m(w)m(o)i(purp)s(oses:)38 b(for)28 b(prin)m(ting)e(pure)h -(blac)m(k)h(and)g(white)f(v)m(ery)i(quic)m(kly)e(\(e.)41 -b(g.)f(text\),)31 b(and)330 2176 y(for)f(prin)m(ting)e(pre-screened)j -(mono)s(c)m(hrome)f(output)g(that)h(w)m(as)g(rasterized)f(externally)-8 -b(.)199 2313 y(2.)61 b Fr(dither_black)22 b Fu(pro)s(duces)i(blac)m(k)h -(from)f(gra)m(yscale)j(input.)37 b(The)25 b(new)f(dither)p -3014 2313 28 4 v 32 w(blac)m(k)h(can)g(pro)s(duce)330 -2423 y(either)30 b(a)h(single)e(or)h(m)m(ultiple)e(lev)m(els)i(of)h -(blac)m(k,)f(for)g(prin)m(ters)f(supp)s(orting)f(v)-5 -b(ariable)29 b(dot)i(size.)199 2560 y(3.)61 b Fr(dither_cmyk)30 -b Fu(pro)s(duces)i(3,)j(4,)f(5,)h(6,)g(or)e(7)g(color)h(output)f -(\(CMY,)h(CMYK,)f(CcMmYK,)g(CcM-)330 2670 y(mYy)-8 b(,)43 -b(CcMmYyK,)d(or)g(an)m(y)h(v)-5 b(arian)m(ts\).)70 b(The)39 -b(new)h(routine)f(can)h(handle)f(single)f(or)i(m)m(ultiple)330 -2779 y(lev)m(els)30 b(of)g(eac)m(h)i(color.)275 2947 -y(There)42 b(is)h(a)g(c)m(hoice)i(of)e(dithering)e(algorithms.)79 -b(F)-8 b(our)43 b(of)h(them)f(are)h(based)f(on)g(a)h(basic)e(error)150 -3057 y(di\013usion,)e(with)g(a)g(few)h(t)m(w)m(eaks)h(of)e(m)m(y)h(o)m -(wn.)71 b(The)40 b(other)g(one)h(is)e(`ordered'.)71 b(Ho)m(w)m(ev)m -(er,)45 b(they)c(all)150 3166 y(share)30 b(the)h(basic)f(op)s(eration)g -(in)f(common.)41 b(First,)30 b(the)h(algorithm)f(pic)m(ks)f(what)i -(kind)e(of)h(dot)h(\(if)f(there)150 3276 y(are)40 b(m)m(ultiple)e(dot)h -(sizes)h(and/or)g(tones)g(that)g(ma)m(y)g(b)s(e)f(pic)m(k)m(ed\))h(is)f -(the)h(candidate)g(to)g(b)s(e)f(prin)m(ted.)150 3385 -y(This)30 b(decision)g(is)h(made)h(based)g(on)f(the)h(darkness)f(at)i -(the)f(p)s(oin)m(t)f(b)s(eing)f(dithered.)44 b(Then,)31 -b(it)h(decides)150 3495 y(whether)25 b(the)g(dot)g(will)e(b)s(e)h(prin) -m(ted)g(at)i(all.)38 b(What)26 b(this)e(is)g(based)h(on)g(dep)s(ends)e -(up)s(on)h(whic)m(h)g(algorithm)150 3605 y(family)29 -b(w)m(e)i(use.)40 b(This)29 b(is)g(all)g(describ)s(ed)g(in)g(more)h -(detail)g(b)s(elo)m(w.)275 3745 y(Ordered)35 b(dithering)g(w)m(orks)j -(b)m(y)f(comparing)f(the)i(v)-5 b(alue)36 b(at)i(a)g(giv)m(en)f(p)s -(oin)m(t)f(with)g(the)h(v)-5 b(alue)37 b(of)h(a)150 3854 -y(tiled)c(matrix.)56 b(If)36 b(the)g(v)-5 b(alue)35 b(at)h(the)g(p)s -(oin)m(t)f(is)g(greater)i(than)e(the)h(v)-5 b(alue)35 -b(in)f(the)i(matrix,)h(the)f(dot)g(is)150 3964 y(prin)m(ted.)h(The)25 -b(matrix)f(should)f(consist)i(of)g(a)g(set)h(of)f(ev)m(enly)g(spaced)g -(p)s(oin)m(ts)f(b)s(et)m(w)m(een)h(0)g(and)g(the)g(upp)s(er)150 -4073 y(limit.)46 b(The)32 b(c)m(hoice)i(of)f(matrix)f(is)g(v)m(ery)h -(imp)s(ortan)m(t)f(for)h(prin)m(t)f(qualit)m(y)-8 b(.)47 -b(A)33 b(go)s(o)s(d)g(dither)e(matrix)i(will)150 4183 -y(emphasize)j(high)g(frequency)h(comp)s(onen)m(ts,)i(whic)m(h)c -(distributes)g(dots)i(ev)m(enly)g(with)e(a)j(minim)m(um)c(of)150 -4293 y(clumping.)62 b(The)38 b(matrices)g(used)g(here)g(are)g(all)g -(simple)e(matrices)i(that)h(are)g(expanded)e(recursiv)m(ely)150 -4402 y(to)d(create)i(larger)d(matrices)h(with)e(the)i(same)g(kind)e(of) -i(ev)m(en)g(p)s(oin)m(t)f(distribution.)46 b(This)32 -b(is)h(describ)s(ed)150 4512 y(b)s(elo)m(w.)275 4652 -y(Note)i(that)f(it)g(is)f(imp)s(ortan)m(t)g(to)h(use)g(di\013eren)m(t)f -(matrices)h(for)g(the)g(t)m(w)m(o)h(sub-op)s(erations,)f(b)s(ecause)150 -4761 y(otherwise)g(the)h(c)m(hoice)h(ab)s(out)f(whether)f(to)h(prin)m -(t)f(and)g(the)h(c)m(hoice)h(of)f(dot)g(size)g(will)d(b)s(e)i -(correlated.)150 4871 y(The)j(usual)f(result)h(is)f(that)i(the)g(prin)m -(t)e(is)h(either)g(to)s(o)h(dark)f(or)h(to)s(o)g(ligh)m(t,)h(but)e -(there)h(can)g(b)s(e)f(other)150 4981 y(problems.)275 -5121 y(Ordered)h(dithering)f(w)m(orks)i(quite)g(w)m(ell)f(on)h(single)f -(dot)i(size,)h(four)e(color)g(prin)m(ters.)66 b(It)40 -b(has)f(not)150 5230 y(b)s(een)31 b(w)m(ell)f(tested)j(on)e(four)g -(color,)i(v)-5 b(ariable)30 b(dot)i(size)f(prin)m(ters.)43 -b(It)32 b(should)e(b)s(e)h(a)m(v)m(oided)h(on)f(six)g(color)150 -5340 y(prin)m(ters.)p eop -%%Page: 35 40 -35 39 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(35)275 299 y(Error)29 b(di\013usion)e(w)m(orks)k(b)m(y)f(taking)g -(the)h(output)e(error)h(at)h(a)g(giv)m(en)f(pixel)f(and)h -(\\di\013using")e(it)i(in)m(to)150 408 y(surrounding)h(pixels.)51 -b(Output)34 b(error)g(is)f(the)i(di\013erence)f(b)s(et)m(w)m(een)h(the) -g(amoun)m(t)g(of)f(ink)f(output)i(and)150 518 y(the)c(input)f(lev)m(el) -g(at)i(eac)m(h)h(pixel.)41 b(F)-8 b(or)32 b(simple)d(prin)m(ters,)h -(with)g(one)h(or)g(four)g(ink)f(colors)h(and)f(only)h(one)150 -628 y(dot)f(size,)g(the)g(amoun)m(t)h(of)f(ink)e(output)i(is)f(either)g -(65536)j(\(i.)40 b(e.)h(full)28 b(output\))i(or)f(0)i(\(no)f(output\).) -40 b(The)150 737 y(di\013erence)35 b(b)s(et)m(w)m(een)h(this)e(and)h -(the)h(input)d(lev)m(el)i(is)g(the)g(error.)56 b(Normal)35 -b(error)g(di\013usion)d(adds)j(part)150 847 y(of)i(this)f(error)g(to)i -(the)f(adjoining)d(pixels)h(in)h(the)h(next)g(column)e(and)i(the)g -(next)g(ro)m(w)g(\(the)g(algorithm)150 956 y(simply)g(scans)i(eac)m(h)h -(ro)m(w)f(in)f(turn,)i(nev)m(er)g(bac)m(king)f(up\).)66 -b(The)38 b(error)h(adds)f(up)g(un)m(til)g(it)g(reac)m(hes)j(a)150 -1066 y(threshold)24 b(\(half)h(of)h(the)f(full)f(output)h(lev)m(el,)h -(or)g(32768\),)j(at)e(whic)m(h)d(p)s(oin)m(t)h(a)h(dot)f(is)g(output,)i -(the)e(output)150 1176 y(is)k(subtracted)i(from)f(the)g(curren)m(t)g(v) --5 b(alue,)30 b(and)g(the)h(\(no)m(w)f(negativ)m(e\))i(error)e(is)g -(di\013used)e(similarly)-8 b(.)275 1316 y(Error)43 b(di\013usion)f(w)m -(orks)i(quite)g(w)m(ell)f(in)g(general,)48 b(but)c(it)g(tends)f(to)j -(generate)f(artifacts)g(whic)m(h)150 1426 y(usually)26 -b(app)s(ear)i(as)h(w)m(orm-lik)m(e)f(lines)f(or)h(areas)i(of)e -(anomalous)h(densit)m(y)-8 b(.)39 b(I)29 b(ha)m(v)m(e)g(devised)f(some) -h(w)m(a)m(ys,)150 1536 y(as)i(describ)s(ed)d(b)s(elo)m(w,)i(of)g -(ameliorating)g(these)h(artifacts.)275 1677 y(There)40 -b(are)g(t)m(w)m(o)i(sub-classes)e(of)h(error)f(di\013usion)e(that)j(w)m -(e)g(use)f(here,)j(`random')d(and)g(`h)m(ybrid'.)150 -1786 y(One)c(of)h(the)g(tec)m(hniques)g(that)g(w)m(e)h(use)e(to)i -(ameliorate)f(the)g(artifacts)g(is)f(to)i(use)e(a)i(fuzzy)f(threshold) -150 1896 y(rather)d(than)h(the)f(hard)g(threshold)f(of)h(half)g(of)g -(the)h(output)f(lev)m(el.)53 b(Random)34 b(error)g(di\013usion)e(uses)i -(a)150 2005 y(pseudo-random)23 b(n)m(um)m(b)s(er)h(to)h(p)s(erturb)e -(the)i(threshold,)f(while)f(h)m(ybrid)g(error)h(di\013usion)e(uses)i(a) -h(matrix.)150 2115 y(Hybrid)36 b(error)h(di\013usion)e(w)m(ork)m(ed)j -(v)m(ery)g(p)s(o)s(orly)e(in)g(3.1.3,)41 b(and)c(I)h(couldn't)e -(\014gure)h(out)h(wh)m(y)f(un)m(til)f(I)150 2225 y(found)29 -b(a)i(bug.)40 b(It)30 b(no)m(w)h(w)m(orks)f(v)m(ery)h(w)m(ell.)275 -2365 y(There)24 b(is)g(one)h(additional)e(v)-5 b(arian)m(t)24 -b(\(on)h(b)s(oth)f(sub-classes\),)i(called)e(`adaptiv)m(e)i(h)m(ybrid') -c(and)j(`adap-)150 2475 y(tiv)m(e)33 b(random'.)49 b(The)32 -b(adaptiv)m(e)h(v)-5 b(arian)m(t)33 b(tak)m(es)i(adv)-5 -b(an)m(tage)35 b(of)e(the)g(fact)h(that)g(the)f(patterns)g(that)h(or-) -150 2585 y(dered)g(dithering)e(create)k(are)f(less)f(visible)e(at)k(v)m -(ery)f(lo)m(w)f(densities,)g(while)f(the)h(artifacts)h(created)h(b)m(y) -150 2694 y(error)d(di\013usion)d(are)j(more)h(ob)5 b(jectionable)32 -b(at)i(lo)m(w)f(densities.)47 b(A)m(t)34 b(lo)m(w)f(densities,)f -(therefore,)j(it)d(uses)150 2804 y(ordered)e(dithering;)e(at)j(higher)e -(densities)g(it)h(uses)g(error)g(di\013usion.)275 2945 -y(Handling)42 b(m)m(ultiple)h(output)h(lev)m(els)h(mak)m(es)h(life)d(a) -i(bit)f(more)h(complicated.)84 b(In)44 b(principle,)h(it)150 -3054 y(shouldn't)32 b(b)s(e)i(m)m(uc)m(h)g(harder:)48 -b(simply)32 b(\014gure)i(out)g(what)g(the)h(ratio)f(b)s(et)m(w)m(een)h -(the)g(a)m(v)-5 b(ailable)33 b(output)150 3164 y(lev)m(els)c(is)f(and)h -(ha)m(v)m(e)h(m)m(ultiple)d(thresholds.)39 b(In)29 b(practice,)h -(getting)g(these)f(righ)m(t)g(in)m(v)m(olv)m(es)h(a)f(lot)h(of)f(trial) -150 3273 y(and)j(error.)48 b(The)32 b(other)h(thing)f(that's)i(imp)s -(ortan)m(t)e(is)f(to)j(maximize)e(the)h(n)m(um)m(b)s(er)e(of)i(dots)g -(that)h(ha)m(v)m(e)150 3383 y(some)d(ink.)39 b(This)29 -b(will)e(reduce)k(the)f(amoun)m(t)h(of)g(sp)s(ec)m(kling.)39 -b(More)31 b(on)f(this)f(later.)275 3524 y(The)i(next)i(question:)43 -b(ho)m(w)33 b(do)f(w)m(e)g(handle)f(blac)m(k)h(when)g(prin)m(ting)e(in) -h(color?)46 b(Blac)m(k)33 b(ink)e(is)g(m)m(uc)m(h)150 -3634 y(dark)m(er)j(than)h(colored)f(inks.)52 b(It's)35 -b(p)s(ossible)d(to)j(pro)s(duce)e(blac)m(k)i(b)m(y)f(adding)f(some)i -(mixture)e(of)i(cy)m(an,)150 3743 y(magen)m(ta,)24 b(and)c(y)m(ello)m -(w|in)f(principle.)34 b(In)20 b(practice,)j(the)e(blac)m(k)f(really)g -(isn't)f(v)m(ery)i(blac)m(k,)i(and)c(di\013eren)m(t)150 -3853 y(inks)38 b(and)h(di\013eren)m(t)g(pap)s(ers)g(will)e(pro)s(duce)h -(di\013eren)m(t)h(color)h(casts.)70 b(Ho)m(w)m(ev)m(er,)44 -b(b)m(y)39 b(using)f(CMY)i(to)150 3962 y(pro)s(duce)f(gra)m(y)-8 -b(,)44 b(w)m(e)d(can)g(output)e(a)i(lot)f(more)h(dots!)70 -b(This)38 b(mak)m(es)j(for)f(a)h(m)m(uc)m(h)f(smo)s(other)g(image.)150 -4072 y(What's)35 b(more,)g(one)f(cy)m(an,)i(one)f(magen)m(ta,)i(and)c -(one)h(y)m(ello)m(w)g(dot)h(pro)s(duce)d(less)i(darkness)f(than)h(one) -150 4181 y(blac)m(k)29 b(dot,)i(so)e(w)m(e're)i(outputting)d(that)i -(man)m(y)g(more)g(dots.)40 b(Better)31 b(y)m(et,)g(with)d(6)i(or)g(7)g -(color)f(prin)m(ters,)150 4291 y(w)m(e)34 b(ha)m(v)m(e)h(to)f(output)f -(ev)m(en)h(more)g(ligh)m(t)f(ink)f(dots.)51 b(So)33 b(Epson)g(St)m -(ylus)f(Photo)i(prin)m(ters)e(can)i(pro)s(duce)150 4401 -y(really)24 b(smo)s(oth)h(gra)m(ys|if)g(w)m(e)h(do)f(ev)m(erything)g -(righ)m(t.)39 b(The)25 b(righ)m(t)g(idea)g(is)f(to)i(use)f(CMY)g(at)h -(lo)m(w)m(er)g(blac)m(k)150 4510 y(lev)m(els,)31 b(and)f(gradually)f -(mix)g(in)h(blac)m(k)g(as)h(the)g(o)m(v)m(erall)g(amoun)m(t)g(of)g(ink) -f(increases,)g(so)h(the)g(blac)m(k)g(dots)150 4620 y(don't)f(really)g -(b)s(ecome)g(visible)e(within)g(the)j(ink)e(mass.)275 -4761 y(V)-8 b(ariable)25 b(dot)i(sizes)f(are)g(handled)f(b)m(y)h -(dividing)d(the)j(range)h(b)s(et)m(w)m(een)g(0)f(and)g(65536)i(in)m(to) -f(segmen)m(ts.)150 4870 y(Eac)m(h)i(segmen)m(t)g(can)g(either)f -(represen)m(t)g(a)h(range)f(in)f(whic)m(h)h(all)f(of)h(one)h(kind)d(of) -j(ink)e(\(color)h(and/or)h(dot)150 4980 y(size\))38 b(is)e(used,)j -(with)d(v)-5 b(arying)36 b(amoun)m(ts)i(of)g(ink,)g(or)f(a)h -(transition)e(region)h(b)s(et)m(w)m(een)h(inks,)g(in)e(whic)m(h)150 -5089 y(equal)30 b(n)m(um)m(b)s(ers)f(of)i(dots)f(are)h(prin)m(ted)e -(but)h(the)h(amoun)m(t)f(of)h(eac)m(h)h(ink)d(will)f(b)s(e)i(adjusted)f -(throughout)150 5199 y(the)i(range.)41 b(Eac)m(h)31 b(range)f(is)g -(represen)m(ted)g(b)m(y)g(four)g(n)m(um)m(b)s(ers:)199 -5340 y(1.)61 b(b)s(ottom)31 b(of)f(the)h(range)p eop -%%Page: 36 41 -36 40 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(36)199 299 y(2.)61 b(top)31 b(of)f(the)h(range)199 -432 y(3.)61 b(v)-5 b(alue)30 b(of)g(the)h(ligh)m(ter)f(ink)199 -565 y(4.)61 b(v)-5 b(alue)30 b(of)g(the)h(dark)m(er)f(ink)275 -722 y(In)f(addition,)g(the)i(bit)e(patterns)i(and)e(whic)m(h)h(t)m(yp)s -(e)g(of)h(ink)e(are)i(also)f(represen)m(ted,)h(but)e(they)i(don't)150 -831 y(a\013ect)h(the)f(actual)f(algorithm.)275 964 y(As)i(men)m(tioned) -f(ab)s(o)m(v)m(e,)j(the)e(basic)g(algorithm)f(is)g(the)h(same)h -(whether)e(w)m(e)i(use)f(ordered)f(dither)g(or)150 1074 -y(error)f(di\013usion.)38 b(W)-8 b(e)32 b(p)s(erform)d(the)h(follo)m -(wing)f(steps)h(on)g(eac)m(h)i(color)e(of)h(eac)m(h)h(pixel:)199 -1207 y(1.)61 b(Compute)34 b(the)h(v)-5 b(alue)34 b(of)g(the)h -(particular)e(color)h(w)m(e're)h(prin)m(ting.)51 b(This)33 -b(isn't)g(usually)f(the)j(pure)330 1316 y(CMY)f(v)-5 -b(alue;)36 b(it's)d(adjusted)h(to)g(impro)m(v)m(e)g(saturation)g(and)f -(to)i(limit)d(the)i(use)g(of)g(blac)m(k)g(in)f(ligh)m(t)330 -1426 y(toned)e(regions)e(\(to)j(a)m(v)m(oid)f(sp)s(ec)m(kling\).)199 -1559 y(2.)61 b(Find)29 b(the)h(range)h(con)m(taining)f(this)f(v)-5 -b(alue.)199 1692 y(3.)61 b(Compute)26 b(where)h(this)e(v)-5 -b(alue)27 b(lies)e(within)g(the)i(range.)40 b(W)-8 b(e)28 -b(scale)f(the)g(endp)s(oin)m(ts)e(b)s(et)m(w)m(een)i(0)h(and)330 -1802 y(65536)37 b(for)d(this)g(purp)s(ose.)51 b(So)35 -b(for)f(example,)i(if)d(the)i(b)s(ottom)g(of)f(the)h(range)g(is)f -(10,000)j(and)d(the)330 1911 y(top)g(of)g(the)g(range)g(is)f(20,000,)k -(and)d(the)g(v)-5 b(alue)33 b(is)g(12,500,)k(w)m(e're)e(1/4)g(of)f(the) -g(w)m(a)m(y)g(b)s(et)m(w)m(een)h(the)330 2021 y(b)s(ottom)c(and)e(the)i -(top)g(of)f(the)h(range,)g(so)f(our)g(scale)h(p)s(oin)m(t)e(is)h -(16384.)199 2154 y(4.)61 b(Compute)35 b(the)h(\\virtual)e(v)-5 -b(alue".)56 b(The)35 b(virtual)f(v)-5 b(alue)35 b(is)g(the)h(distance)f -(b)s(et)m(w)m(een)h(the)g(v)-5 b(alue)35 b(of)330 2264 -y(the)28 b(ligh)m(ter)f(and)h(the)g(v)-5 b(alue)28 b(of)g(the)g(dark)m -(er)g(ink.)38 b(So)28 b(if)f(the)i(v)-5 b(alue)27 b(of)h(the)g(ligh)m -(t)g(ink)e(is)h(32768)k(and)330 2373 y(the)i(dark)f(ink)f(is)h(65536,)k -(w)m(e)d(compute)g(a)g(virtual)e(v)-5 b(alue)33 b(scaled)f -(appropriately)f(b)s(et)m(w)m(een)i(these)330 2483 y(t)m(w)m(o)f(v)-5 -b(alues,)30 b(whic)m(h)f(is)g(40960)k(in)c(this)g(case.)199 -2616 y(5.)61 b(Using)24 b(either)h(error)f(di\013usion)e(or)j(ordered)g -(dither,)f(the)i(standard)e(threshold)f(is)h(1/2)i(of)f(the)g(v)-5 -b(alue)330 2725 y(\(20480)32 b(in)c(this)g(case\).)41 -b(Using)29 b(ordered)f(dither,)h(w)m(e)g(w)m(an)m(t)h(to)g(compute)g(a) -f(v)-5 b(alue)29 b(b)s(et)m(w)m(een)h(0)g(and)330 2835 -y(40960)j(that)f(w)m(e)g(will)d(compare)i(the)h(input)d(v)-5 -b(alue)31 b(against)g(to)h(decide)f(whether)g(to)h(prin)m(t.)42 -b(Using)330 2945 y(pure)29 b(error)h(di\013usion,)e(w)m(e)i(w)m(ould)f -(compare)i(the)f(accum)m(ulated)h(error)f(against)g(20480)j(to)e -(decide)330 3054 y(whether)36 b(to)h(prin)m(t.)57 b(In)36 -b(practice,)i(w)m(e)f(use)f(the)g(same)h(matrix)f(metho)s(d)g(to)h -(decide)e(whether)h(to)330 3164 y(prin)m(t.)h(The)25 -b(correct)h(amoun)m(t)f(of)g(ink)e(will)f(b)s(e)i(prin)m(ted)g(this)f -(w)m(a)m(y)-8 b(,)28 b(but)c(w)m(e)h(minimize)d(the)j(squiggly)330 -3273 y(lines)d(c)m(haracteristic)j(of)f(error)f(di\013usion)e(b)m(y)j -(dithering)e(the)i(threshold)e(in)h(this)g(fashion.)37 -b(A)24 b(future)330 3383 y(enhancemen)m(t)29 b(will)c(allo)m(w)j(us)f -(to)i(con)m(trol)g(the)f(amoun)m(t)h(of)f(dithering)e(applied)g(to)j -(the)f(threshold.)275 3540 y(The)35 b(matrices)h(w)m(ere)h(generated)g -(b)m(y)f(Thomas)f(T)-8 b(onino)36 b Fr()30 -b Fu(with)35 b(an)h(algo-)150 3649 y(rithm)30 b(of)j(his)d(devising.)44 -b(The)31 b(algorithm)g(is)g(designed)g(to)i(maximize)e(the)h(spacing)f -(b)s(et)m(w)m(een)i(dots)f(at)150 3759 y(an)m(y)25 b(giv)m(en)g(densit) -m(y)e(b)m(y)i(searc)m(hing)f(the)h(matrix)f(for)g(holes)g(and)g -(placing)g(a)h(dot)g(in)e(the)i(largest)g(a)m(v)-5 b(ailable)150 -3868 y(hole.)44 b(It)31 b(requires)f(careful)h(selection)h(of)f -(initial)e(p)s(oin)m(ts)i(to)h(ac)m(hiev)m(e)h(go)s(o)s(d)e(results,)g -(and)g(is)f(v)m(ery)i(time)150 3978 y(consuming.)64 b(F)-8 -b(or)39 b(b)s(est)f(results,)h(a)g(di\013eren)m(t)f(matrix)g(m)m(ust)g -(b)s(e)g(used)g(for)g(mo)s(des)g(with)f(2:1)i(asp)s(ect)150 -4088 y(ratio)28 b(\(e.g.)41 b(1440x720\))31 b(than)d(for)f(1:1)i(\(e.) -41 b(g.)f(720x720\).)j(It)28 b(is)f(essen)m(tial)g(with)g(an)m(y)h(of)g -(these)g(matrices)150 4197 y(that)j(ev)m(ery)g(p)s(oin)m(t)e(b)s(e)h -(used.)40 b(Skipping)27 b(p)s(oin)m(ts)j(generates)h(lo)m(w-frequency)f -(noise.)275 4330 y(It's)24 b(essen)m(tial)f(to)i(use)e(di\013eren)m(t)h -(matrices)f(for)h(deciding)e(whether)h(to)i(prin)m(t)d(and)h(for)h -(deciding)e(what)150 4440 y(color)31 b(\(dark)g(or)h(ligh)m(t\))f(to)h -(prin)m(t.)42 b(This)29 b(should)g(b)s(e)i(ob)m(vious;)g(the)h -(decision)e(ab)s(out)h(whether)f(to)i(prin)m(t)150 4549 -y(at)39 b(all)e(should)f(b)s(e)h(as)h(indep)s(enden)m(t)e(as)i(p)s -(ossible)e(from)h(the)h(decision)f(ab)s(out)g(what)h(color)g(to)h(prin) -m(t,)150 4659 y(b)s(ecause)h(an)m(y)g(bias)f(will)f(result)g(in)h -(excess)i(ligh)m(t)e(or)h(dark)g(ink)e(b)s(eing)h(prin)m(ted,)i -(shifting)d(the)i(tonal)150 4769 y(balance.)h(W)-8 b(e)32 -b(actually)e(use)h(the)g(same)g(matrices,)g(but)e(w)m(e)j(shift)d(them) -h(v)m(ertically)g(and)g(horizon)m(tally)-8 b(.)150 4878 -y(Assuming)29 b(that)i(the)f(matrices)h(are)f(not)h(self-correlated,)g -(this)e(will)f(yield)g(go)s(o)s(d)i(results.)275 5011 -y(The)35 b(ranges)i(are)f(computed)g(from)g(a)h(list)d(of)j(ink)e(v)-5 -b(alues)35 b(\(b)s(et)m(w)m(een)i(0)g(and)e(1)i(for)f(eac)m(h)h(p)s -(ossible)150 5121 y(com)m(bination)c(of)i(dot)f(size)g(and)f(ink)g -(tone,)j(where)d(the)i(v)-5 b(alue)33 b(represen)m(ts)h(the)g(darkness) -f(of)i(the)f(ink\))150 5230 y(and)e(the)g(desired)f(maxim)m(um)g -(densit)m(y)g(of)i(the)f(ink.)45 b(This)31 b(is)g(done)h(in)f(dither)p -2872 5230 28 4 v 31 w(set)p 3014 5230 V 34 w(ranges,)i(and)e(needs)150 -5340 y(more)g(do)s(cumen)m(tation.)p eop -%%Page: 37 42 -37 41 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(37)275 299 y(I)34 b(stated)i(earlier)e(that)i(I'v)m(e)g(t)m(w)m(eak)m -(ed)h(the)e(basic)g(error)f(di\013usion)f(algorithm.)53 -b(Here's)36 b(what)f(I'v)m(e)150 408 y(done)30 b(to)h(impro)m(v)m(e)f -(it:)199 547 y(1.)61 b(W)-8 b(e)28 b(use)e(a)h(v)-5 b(ariable)26 -b(threshold)f(to)i(decide)f(when)g(to)i(prin)m(t,)e(as)h(discussed)e -(ab)s(o)m(v)m(e.)40 b(This)25 b(do)s(es)i(t)m(w)m(o)330 -657 y(things)i(for)i(us:)40 b(it)30 b(reduces)h(the)f(sligh)m(tly)f -(squiggly)h(diagonal)f(lines)g(that)i(are)g(the)g(mark)g(of)f(error)330 -767 y(di\013usion;)e(and)i(it)g(allo)m(ws)g(us)g(to)h(la)m(y)g(do)m(wn) -f(some)h(ink)e(ev)m(en)i(in)e(v)m(ery)i(ligh)m(t)f(areas)h(near)g(the)f -(edge)330 876 y(of)35 b(the)h(image.)55 b(The)35 b(squiggly)f(lines)g -(that)h(error)g(di\013usion)e(algorithms)h(tend)h(to)h(generate)h(are) -330 986 y(caused)28 b(b)m(y)f(the)h(gradual)f(accum)m(ulation)g(of)h -(error.)40 b(This)25 b(error)j(is)e(partially)g(added)h(horizon)m -(tally)330 1095 y(and)j(partially)e(v)m(ertically)-8 -b(.)40 b(The)30 b(horizon)m(tal)g(accum)m(ulation)g(results)f(in)g(a)i -(dot)f(ev)m(en)m(tually)g(b)s(eing)330 1205 y(prin)m(ted.)55 -b(The)35 b(v)m(ertical)h(accum)m(ulation)g(results)e(in)g(a)i(dot)g -(getting)h(laid)d(do)m(wn)h(in)f(roughly)h(the)330 1315 -y(same)28 b(horizon)m(tal)f(p)s(osition)f(in)g(the)i(next)g(ro)m(w.)40 -b(The)27 b(diagonal)g(squigglies)f(result)g(from)h(the)h(error)330 -1424 y(b)s(eing)35 b(added)g(to)i(pixels)d(one)i(forw)m(ard)f(and)h -(one)g(b)s(elo)m(w)f(the)h(curren)m(t)g(pixel;)h(these)g(lines)d(slop)s -(e)330 1534 y(from)c(the)g(top)h(righ)m(t)f(to)h(the)g(b)s(ottom)f -(left)h(of)f(the)h(image.)330 1670 y(Error)37 b(di\013usion)e(also)j -(results)e(in)h(pale)g(areas)i(b)s(eing)d(completely)i(white)e(near)i -(the)g(top)g(left)g(of)330 1780 y(the)29 b(image)g(\(the)g(origin)e(of) -i(the)f(prin)m(ting)f(co)s(ordinates\).)40 b(This)27 -b(is)h(b)s(ecause)g(enough)h(error)f(has)g(to)330 1890 -y(accum)m(ulate)33 b(for)g(an)m(ything)f(at)h(all)e(to)j(get)f(prin)m -(ted.)46 b(In)32 b(v)m(ery)h(pale)f(areas)h(it)f(tak)m(es)i(quite)e(a)h -(long)330 1999 y(time)d(to)h(build)d(up)h(an)m(ything)h(prin)m(table)e -(at)j(all;)f(this)f(results)g(in)g(the)i(bare)f(sp)s(ots.)330 -2136 y(Randomizing)f(the)i(threshold)e(somewhat)i(breaks)f(up)g(the)h -(diagonals)f(to)h(some)g(degree)h(b)m(y)e(ran-)330 2245 -y(domizing)40 b(the)j(exact)g(lo)s(cation)e(that)i(the)f(accum)m -(ulated)g(output)g(crosses)g(the)g(threshold.)74 b(It)330 -2355 y(reduces)29 b(the)h(false)f(white)g(areas)h(b)m(y)f(allo)m(wing)g -(some)h(dots)f(to)h(b)s(e)f(prin)m(ted)f(ev)m(en)j(when)d(the)i(accu-) -330 2465 y(m)m(ulated)d(output)g(lev)m(el)g(is)f(v)m(ery)h(lo)m(w.)40 -b(It)27 b(do)s(esn't)g(result)f(in)g(excess)i(ink)e(b)s(ecause)h(the)g -(full)e(output)330 2574 y(lev)m(el)30 b(is)f(still)g(subtracted)h(and)g -(di\013used.)330 2711 y(Excessiv)m(e)41 b(randomization)e(leads)h(to)h -(blobs)d(at)j(high)e(densities.)69 b(Therefore,)43 b(as)d(the)h(densit) -m(y)330 2821 y(increases,)30 b(the)h(degree)g(of)f(randomization)g -(decreases.)199 2957 y(2.)61 b(Alternating)36 b(scan)h(direction)f(b)s -(et)m(w)m(een)h(ro)m(ws)g(\(\014rst)g(ro)m(w)g(is)f(scanned)g(left)h -(to)h(righ)m(t,)g(second)f(is)330 3067 y(scanned)h(righ)m(t)g(to)h -(left,)h(and)d(so)i(on\).)64 b(This)37 b(also)h(helps)f(break)h(up)f -(white)g(areas,)42 b(and)37 b(it)h(also)330 3176 y(seems)30 -b(to)g(break)f(up)g(squigglies)f(a)i(bit.)39 b(F)-8 b(urthermore,)30 -b(it)f(eliminates)f(directional)g(biases)h(in)f(the)330 -3286 y(horizon)m(tal)g(direction.)39 b(This)26 b(isn't)i(necessary)h -(for)f(ordered)g(dither,)g(but)f(it)h(do)s(esn't)g(h)m(urt)g(either.) -199 3423 y(3.)61 b(Di\013using)25 b(the)i(error)g(in)m(to)g(more)g -(pixels.)38 b(Instead)27 b(of)g(di\013using)d(the)k(en)m(tire)f(error)f -(in)m(to)h(\()p Fc(X)7 b Fu(+)q(1)p Fc(;)15 b(Y)21 b -Fu(\))330 3532 y(and)37 b(\()p Fc(X)r(;)15 b(Y)21 b Fu(+1\),)41 -b(w)m(e)d(di\013use)e(it)h(in)m(to)h(\()p Fc(X)7 b Fu(+1)p -Fc(;)15 b(Y)21 b Fu(\),)40 b(\()p Fc(X)7 b Fu(+)q Fc(K)q(;)15 -b(Y)21 b Fu(+1\),)40 b(\()p Fc(X)r(;)15 b(Y)21 b Fu(+1\),)41 -b(\()p Fc(X)33 b Fs(\000)24 b Fc(K)q(;)15 b(Y)21 b Fu(+1\))330 -3642 y(where)27 b Fc(K)34 b Fu(dep)s(ends)25 b(up)s(on)h(the)h(output)g -(lev)m(el)g(\(it)g(nev)m(er)h(exceeds)g(ab)s(out)f(10)h(dots,)h(and)d -(is)h(greater)330 3751 y(at)32 b(higher)d(output)h(lev)m(els\).)42 -b(This)29 b(really)h(reduces)g(squigglies)f(and)h(graininess.)40 -b(The)31 b(amoun)m(t)g(of)330 3861 y(this)j(spread)h(can)h(b)s(e)f(con) -m(trolled;)j(for)e(line)d(art,)38 b(it)d(should)f(b)s(e)h(less)g(than)g -(for)g(photographs)g(\(of)330 3971 y(course,)k(line)d(art)h(do)s(esn't) -g(usually)e(con)m(tain)i(m)m(uc)m(h)g(ligh)m(t)f(color,)k(but)c(the)h -Fi(error)h Fu(v)-5 b(alue)36 b(can)i(b)s(e)330 4080 y(small)28 -b(in)h(places!\))41 b(In)29 b(addition)f(to)j(requiring)c(more)j -(computation,)g(a)h(wide)d(ink)h(spread)g(results)330 -4190 y(in)d(patterning)g(at)i(high)d(dot)j(densities)d(\(note)j(that)f -(the)h(dot)f(densit)m(y)f(can)h(b)s(e)g(high)e(ev)m(en)j(in)e(fairly) -330 4299 y(pale)k(regions)g(if)f(m)m(ultiple)f(dot)j(sizes)f(are)h(in)e -(use\).)199 4436 y(4.)61 b(Don't)34 b(la)m(y)f(do)m(wn)g(an)m(y)g -(colored)g(ink)f(if)g(w)m(e're)h(la)m(ying)g(do)m(wn)f(blac)m(k)h(ink.) -48 b(There's)32 b(no)h(p)s(oin)m(t;)h(the)330 4546 y(colored)j(ink)f(w) -m(on't)i(sho)m(w.)60 b(W)-8 b(e)39 b(still)c(pretend)h(that)i(w)m(e)f -(did)f(for)g(purp)s(oses)g(of)h(error)g(di\013usion)330 -4655 y(\(otherwise)29 b(excessiv)m(e)h(error)f(will)e(build)f(up,)j -(and)g(will)d(tak)m(e)31 b(a)f(long)f(time)g(to)h(clear,)g(resulting)d -(in)330 4765 y(hea)m(vy)j(bleeding)e(of)i(ink)e(in)m(to)h(surrounding)d -(areas,)31 b(whic)m(h)d(is)h(v)m(ery)h(ugly)e(indeed\),)h(but)g(w)m(e)h -(don't)330 4874 y(b)s(other)c(w)m(asting)g(the)g(ink.)38 -b(Ho)m(w)27 b(w)m(ell)e(this)h(will)d(do)j(with)f(v)-5 -b(ariable)25 b(dot)i(size)f(remains)f(to)i(b)s(e)f(seen.)199 -5011 y(5.)61 b(Ov)m(ersampling.)38 b(This)26 b(is)h(ho)m(w)h(to)h(prin) -m(t)d(1440x720)31 b(with)c(Epson)g(St)m(ylus)g(prin)m(ters.)38 -b(Prin)m(ting)26 b(full)330 5121 y(densit)m(y)g(at)i(1440x720)i(will)25 -b(result)h(in)g(excess)h(ink)f(b)s(eing)g(laid)f(do)m(wn.)39 -b(The)27 b(tric)m(k)g(is)f(to)i(prin)m(t)e(only)330 5230 -y(ev)m(ery)34 b(other)f(dot.)49 b(W)-8 b(e)34 b(still)d(compute)i(the)h -(error)e(as)i(though)e(w)m(e)i(prin)m(ted)d(ev)m(ery)j(dot.)49 -b(It)33 b(turns)330 5340 y(out)c(that)h(randomizing)d(whic)m(h)g(dots)i -(are)h(prin)m(ted)d(results)h(in)f(v)m(ery)j(sp)s(ec)m(kled)e(output.) -40 b(This)27 b(can)p eop -%%Page: 38 43 -38 42 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(38)330 299 y(b)s(e)38 b(tak)m(en)i(to)s(o)f(far;)k(o)m(v)m -(ersampling)38 b(at)i(1440x1440)i(or)d(1440x2880)j(virtual)37 -b(resolution)g(results)330 408 y(in)g(other)j(problems.)64 -b(Ho)m(w)m(ev)m(er,)43 b(at)c(presen)m(t)g(1440x1440)k(\(whic)m(h)37 -b(is)h(more)h(accurately)h(called)330 518 y Fr(")p Fu(1440x720)j -(enhanced)p Fr(")p Fu(,)e(as)f(the)g(Epson)f(prin)m(ters)f(cannot)j -(prin)m(t)d(1440)k(ro)m(ws)d(p)s(er)g(inc)m(h\))g(do)s(es)330 -628 y(quite)30 b(w)m(ell,)f(although)h(it's)g(slo)m(w.)275 -808 y(What)36 b(ab)s(out)f(m)m(ultiple)e(output)i(lev)m(els?)55 -b(F)-8 b(or)36 b(6)g(and)f(7)h(color)f(prin)m(ters,)h(simply)d(using)g -(di\013eren)m(t)150 918 y(threshold)d(lev)m(els)h(has)g(a)h(problem:)42 -b(the)32 b(pale)f(inks)f(ha)m(v)m(e)j(trouble)d(b)s(eing)g(seen)i(when) -f(a)h(lot)f(of)h(dark)m(er)150 1027 y(ink)i(is)g(b)s(eing)f(prin)m -(ted.)54 b(So)35 b(rather)g(than)f(just)h(using)f(the)h(output)f(lev)m -(el)h(of)g(the)h(particular)d(color)i(to)150 1137 y(decide)i(whic)m(h)e -(ink)h(to)i(prin)m(t,)g(w)m(e)g(lo)s(ok)e(at)i(the)g(total)g(densit)m -(y)e(\(sum)h(of)g(all)f(output)h(lev)m(els\).)61 b(If)37 -b(the)150 1246 y(densit)m(y's)31 b(high)f(enough,)i(w)m(e)g(prefer)e -(to)j(use)e(the)h(dark)e(ink.)43 b(Sp)s(ec)m(kling)30 -b(is)g(less)h(visible)e(when)i(there's)150 1356 y(a)g(lot)f(of)h(ink,)e -(an)m(yw)m(a)m(y)-8 b(.)42 b(I)31 b(ha)m(v)m(en't)g(y)m(et)h(\014gured) -d(out)i(what)f(to)h(do)f(for)h(m)m(ultiple)d(lev)m(els)i(of)g(one)h -(color.)275 1504 y(Y)-8 b(ou'll)34 b(note)h(that)h(I)f(ha)m(v)m(en't)h -(quoted)f(a)h(single)d(source)j(on)e(color)i(or)f(prin)m(ting)d(theory) --8 b(.)56 b(I)34 b(simply)150 1614 y(did)29 b(all)g(of)h(this)g -(empirically)-8 b(.)275 1762 y(There)33 b(are)h(v)-5 -b(arious)33 b(other)h(tric)m(ks)g(to)h(reduce)e(sp)s(ec)m(kling.)50 -b(One)33 b(that)i(I'v)m(e)g(seen)f(is)e(to)j(reduce)f(the)150 -1872 y(amoun)m(t)f(of)f(ink)f(prin)m(ted)g(in)g(regions)h(where)g(one)h -(color)f(\(particularly)f(cy)m(an,)i(whic)m(h)e(is)h(p)s(erceiv)m(ed)g -(as)150 1982 y(the)d(dark)m(est\))i(is)d(v)m(ery)h(pale.)40 -b(This)28 b(do)s(es)h(reduce)g(sp)s(ec)m(kling)f(all)g(righ)m(t,)h(but) -f(it)h(also)g(results)f(in)g(strange)150 2091 y(tonal)i(curv)m(es)h -(and)f(w)m(eird)f(\(to)i(m)m(y)g(ey)m(e\))h(colors.)275 -2240 y(Before)43 b(an)m(y)h(dither)d(routine)h(is)g(used,)j -Fr(init_dither\(\))40 b Fu(m)m(ust)i(b)s(e)h(called.)77 -b(This)41 b(tak)m(es)k(three)150 2349 y(argumen)m(ts:)f(the)32 -b(input)e(width)g(\(n)m(um)m(b)s(er)h(of)h(pixels)e(in)g(the)i -(input\),)f(the)h(output)g(width)e(\(n)m(um)m(b)s(er)h(of)150 -2459 y(pixels)e(in)g(the)h(output\),)h(and)f(a)g Fr(vars_t)f -Fu(structure)h(con)m(taining)g(the)g(parameters)h(for)f(the)h(prin)m(t) -e(job.)275 2607 y Fr(init_dither\(\))38 b Fu(returns)i(a)i(p)s(oin)m -(ter)f(to)h(an)g(opaque)g(ob)5 b(ject)43 b(represen)m(ting)e(the)g -(dither.)74 b(This)150 2717 y(ob)5 b(ject)31 b(is)f(passed)g(as)g(the)h -(\014rst)e(argumen)m(t)i(to)g(all)f(of)g(the)h(dither-related)e -(routines.)275 2865 y(After)34 b(a)h(page)g(is)e(fully)f(dithered,)i -Fr(free_dither\(\))c Fu(m)m(ust)k(b)s(e)g(called)g(to)g(free)h(the)f -(dither)f(ob)5 b(ject)150 2975 y(and)37 b(p)s(erform)e(an)m(y)j(clean)m -(up.)61 b(In)36 b(the)i(future,)g(this)e(ma)m(y)i(do)f(more)g(\(suc)m -(h)h(as)f(\015ush)e(output\).)62 b(This)150 3084 y(arrangemen)m(t)27 -b(p)s(ermits)d(using)g(these)j(routines)e(with)f(programs)i(that)g -(create)i(m)m(ultiple)c(output)h(pages,)150 3194 y(suc)m(h)30 -b(as)h(GhostScript.)275 3342 y(The)e(dithering)f(routines)i(themselv)m -(es)g(ha)m(v)m(e)i(a)f(n)m(um)m(b)s(er)e(of)h(con)m(trol)h(knobs)e -(that)i(con)m(trol)g(in)m(ternal)150 3452 y(asp)s(ects)e(of)g(the)g -(dithering)d(pro)s(cess.)40 b(These)29 b(knobs)f(are)h(accessible)f -(via)h(a)g(n)m(um)m(b)s(er)e(of)i(functions)e(that)150 -3562 y(can)k(b)s(e)e(called)h(after)h Fr(init_dither\(\))p -Fu(.)225 3710 y Fs(\017)60 b Fr(dither_set_density\(\))30 -b Fu(tak)m(es)36 b(a)f(double)f(b)s(et)m(w)m(een)i(0)f(and)g(1)g -(represen)m(ting)f(the)i(desired)d(ink)330 3820 y(densit)m(y)j(for)g -(prin)m(ting)e(solid)h(colors.)58 b(This)35 b(is)g(used)h(in)f(a)i(n)m -(um)m(b)s(er)e(of)h(places)h(in)e(the)h(dithering)330 -3929 y(routine)29 b(to)i(mak)m(e)h(decisions.)225 4071 -y Fs(\017)60 b Fr(dither_set_black_density)o(\(\))16 -b Fu(tak)m(es)24 b(a)f(double)d(b)s(et)m(w)m(een)j(0)g(and)f(1)g -(represen)m(ting)g(the)g(desired)330 4180 y(ink)g(densit)m(y)h(for)g -(prin)m(ting)e(blac)m(k)i(ink)f(in)g(color)h(prin)m(ting.)37 -b(This)21 b(is)i(used)f(to)i(balance)f(blac)m(k)h(against)330 -4290 y(color)33 b(ink.)47 b(By)33 b(default,)g(this)f(is)g(equal)h(to)g -(the)g(densit)m(y)f(set)i(b)m(y)f Fr(dither_set_density\(\))p -Fu(.)43 b(By)330 4400 y(setting)30 b(it)g(higher,)f(more)i(blac)m(k)f -(ink)f(will)f(b)s(e)i(prin)m(ted.)39 b(F)-8 b(or)31 b(example,)f(if)f -(the)i(base)f(densit)m(y)g(is)f(.4)330 4509 y(and)f(the)h(blac)m(k)g -(densit)m(y)f(is)g(.8,)i(t)m(wice)f(as)g(m)m(uc)m(h)g(blac)m(k)g(ink)e -(will)f(b)s(e)j(prin)m(ted)e(as)i(w)m(ould)f(otherwise)330 -4619 y(b)s(e)i(called)f(for.)330 4760 y(This)f(is)g(not)i(used)f(when)f -(prin)m(ting)f(in)i(mono)s(c)m(hrome.)40 b(When)30 b(prin)m(ting)d -(mono)s(c)m(hrome,)j(the)g(base)330 4870 y(densit)m(y)g(\()p -Fr(dither_set_density)p Fu(\))c(should)i(b)s(e)i(adjusted)g -(appropriately)-8 b(.)225 5011 y Fs(\017)60 b Fr -(dither_set_ink_budget\(\))25 b Fu(tak)m(es)33 b(an)e(unsigned)e(n)m -(um)m(b)s(er)h(represen)m(ting)h(the)h(most)f(ink)f(that)330 -5121 y(ma)m(y)f(b)s(e)f(dep)s(osited)f(at)i(a)g(giv)m(en)f(p)s(oin)m -(t.)39 b(This)27 b(n)m(um)m(b)s(er)g(is)g(arbitrary;)i(the)f(limit)e -(is)i(computed)g(b)m(y)330 5230 y(summing)e(the)i(size)f(of)h(eac)m(h)h -(ink)e(dot,)h(whic)m(h)f(is)g(supplied)d(as)k(a)g(parameter)h(in)d -Fr(dither_set_)p Fm(X)9 b Fr(_)330 5340 y(ranges)p Fu(.)39 -b(By)31 b(default,)f(there)g(is)f(no)i(limit.)p eop -%%Page: 39 44 -39 43 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(39)225 299 y Fs(\017)60 b Fr(dither_set_black_lower\(\))24 -b Fu(tak)m(es)32 b(a)e(double)f(that)i(should)e(b)s(e)h(b)s(et)m(w)m -(een)h(0)g(and)e(1)i(that)g(rep-)330 408 y(resen)m(ts)39 -b(the)h(lo)m(w)m(est)f(densit)m(y)g(lev)m(el)f(at)i(whic)m(h)e(blac)m -(k)h(ink)e(will)g(start)i(to)h(mix)e(in)f(with)h(colored)330 -518 y(ink)32 b(to)j(generate)g(gra)m(ys.)51 b(The)33 -b(lo)m(w)m(er)h(this)e(is,)i(the)g(less)f(densit)m(y)f(is)h(required)f -(to)i(use)f(blac)m(k)h(ink.)330 628 y(Setting)i(this)f(to)s(o)i(lo)m(w) -g(will)c(result)j(in)f(sp)s(ec)m(kling)f(from)i(blac)m(k)h(dots,)h -(particularly)c(on)i(6)h(and)f(7)330 737 y(color)30 b(prin)m(ters.)39 -b(Setting)30 b(this)f(to)s(o)i(high)e(will)f(mak)m(e)j(it)f(hard)f(to)i -(get)g(satisfactory)g(blac)m(k)f(or)g(ma)m(y)330 847 -y(result)f(in)g(sharp)h(transition)e(b)s(et)m(w)m(een)j(blended)e -(colors)h(and)g(blac)m(k.)41 b(Default:)g(0.0468.)330 -989 y(It)29 b(is)f(imp)s(ortan)m(t)g(to)i(note)f(that)h(since)e(the)h -(densit)m(y)f(scale)h(is)f(nev)m(er)h(linear)f(\(and)g(since)h(this)e -(v)-5 b(alue)330 1099 y(is)27 b(adjusted)f(via)i(other)f(things)g(happ) -s(ening)e(during)g(the)j(dithering)d(pro)s(cess\))j(that)g(this)e(do)s -(es)i(not)330 1208 y(mean)j(that)g(95\045)g(gra)m(y)h(will)c(use)i(an)m -(y)h(blac)m(k)g(ink.)41 b(A)m(t)31 b(this)f(setting,)h(there)g(will)d -(b)s(e)i(no)h(blac)m(k)f(ink)330 1318 y(used)g(un)m(til)e(ab)s(out)i -(50\045)h(gra)m(y)-8 b(.)330 1461 y(This)29 b(only)g(applies)g(to)i -(color)f(mo)s(de.)330 1603 y(This)c(v)-5 b(alue)27 b(should)f(b)s(e)h -(set)h(lo)m(w)m(er)g(for)g(prin)m(ters)e(capable)h(of)h(v)-5 -b(ariable)27 b(dot)h(size,)g(since)f(more)h(dots)330 -1713 y(can)j(b)s(e)e(laid)g(do)m(wn)h(close)h(to)g(eac)m(h)g(other.)225 -1855 y Fs(\017)60 b Fr(dither_set_black_upper\(\))24 -b Fu(tak)m(es)32 b(a)e(double)f(that)i(should)e(b)s(e)h(b)s(et)m(w)m -(een)h(0)g(and)e(1)i(that)g(rep-)330 1965 y(resen)m(ts)39 -b(the)g(highest)f(densit)m(y)g(lev)m(el)h(at)h(whic)m(h)d(colored)i -(inks)e(will)g(b)s(e)h(mixed)f(to)j(create)g(gra)m(y)-8 -b(.)330 2074 y(Setting)33 b(this)g(to)s(o)h(lo)m(w)g(will)d(result)i -(in)f(sp)s(ec)m(kly)h(dark)g(gra)m(ys)i(b)s(ecause)e(there)h(is)f(not)h -(enough)f(ink)330 2184 y(to)38 b(\014ll)d(all)h(the)i(holes,)g(or)f -(sharp)f(transition)g(b)s(et)m(w)m(een)i(blended)d(colors)i(and)g(blac) -m(k)g(if)f(it)h(is)f(to)s(o)330 2293 y(close)31 b(to)h(the)f(v)-5 -b(alue)31 b(of)g(dither)p 1401 2293 28 4 v 32 w(set)p -1544 2293 V 33 w(blac)m(k)p 1784 2293 V 33 w(upp)s(er\(\).)41 -b(Setting)31 b(this)f(to)s(o)i(high)e(will)e(result)i(in)g(p)s(o)s(or) -330 2403 y(blac)m(k)h(and)f(dark)g(tone)h(qualit)m(y)-8 -b(.)42 b(Default:)f(0.5.)i(This)29 b(results)g(in)h(10\045)h(and)f -(dark)m(er)h(gra)m(ys)g(b)s(eing)330 2513 y(prin)m(ted)e(with)g(essen)m -(tially)g(all)h(blac)m(k.)330 2655 y(This)f(only)g(applies)g(to)i -(color)f(mo)s(de.)225 2798 y Fs(\017)60 b Fr(dither_set_black_levels\() -o(\))26 b Fu(tak)m(es)34 b(three)e(doubles)e(that)j(represen)m(t)f(the) -g(amoun)m(t)h(of)f(cy)m(an,)330 2907 y(magen)m(ta,)g(and)c(y)m(ello)m -(w)i(resp)s(ectiv)m(ely)f(that)h(are)f(blended)f(to)i(create)h(gra)m(y) --8 b(.)42 b(The)29 b(defaults)f(are)i(1.0)330 3017 y(for)38 -b(eac)m(h,)k(whic)m(h)37 b(is)g(probably)f(to)s(o)j(lo)m(w)f(for)g -(most)h(prin)m(ters.)63 b(These)37 b(v)-5 b(alues)38 -b(are)h(adjusted)e(to)330 3126 y(create)31 b(a)f(go)s(o)s(d)f(gra)m(y)h -(balance.)41 b(Setting)29 b(these)h(to)s(o)g(lo)m(w)f(will)e(result)h -(in)g(pale)h(ligh)m(t)g(and)g(midtone)330 3236 y(gra)m(ys,)g(with)d(a)i -(sharp)e(transition)f(to)j(dark)m(er)g(tones)f(as)h(blac)m(k)f(mixes)g -(in.)38 b(Setting)27 b(them)g(to)s(o)h(high)330 3345 -y(will)19 b(result)i(in)f(o)m(v)m(erly)i(dark)g(gra)m(ys)g(and)f(use)h -(of)f(to)s(o)i(m)m(uc)m(h)f(ink,)g(p)s(ossibly)d(creating)j -(bleed-through.)330 3488 y(This)29 b(only)g(applies)g(to)i(color)f(mo)s -(de.)225 3630 y Fs(\017)60 b Fr(dither_set_randomizers\(\))27 -b Fu(tak)m(es)36 b(four)d(in)m(teger)h(v)-5 b(alues)33 -b(represen)m(ting)g(the)h(degree)h(of)f(ran-)330 3740 -y(domness)24 b(used)h(for)g(cy)m(an,)i(magen)m(ta,)h(y)m(ello)m(w,)f -(and)d(blac)m(k.)39 b(This)23 b(is)i(used)f(to)i(allo)m(w)f(some)g -(prin)m(ting)330 3850 y(to)34 b(tak)m(e)i(place)d(in)g(pale)g(areas.)51 -b(Zero)34 b(is)f(the)h(most)g(random;)g(greater)h(than)f(8)g(or)g(so)g -(giv)m(es)g(v)m(ery)330 3959 y(little)27 b(randomness)h(at)h(all.)39 -b(Defaults)29 b(are)g(0)g(for)g(cy)m(an,)h(magen)m(ta,)h(and)d(y)m -(ello)m(w,)h(and)f(4)h(for)g(blac)m(k.)330 4069 y(Setting)h(the)h(v)-5 -b(alue)31 b(for)f(blac)m(k)h(to)s(o)g(lo)m(w)g(will)d(result)i(in)f -(blac)m(k)i(sp)s(ec)m(kling)e(in)g(pale)i(areas.)42 b(Setting)330 -4178 y(v)-5 b(alues)30 b(to)s(o)h(high)e(will)f(result)h(in)g(pale)h -(areas)h(getting)g(no)f(ink)f(at)i(all.)330 4321 y(This)c(curren)m(tly) -h(only)g(applies)f(to)i(single)f(dot)h(size)f(in)g(color)h(and)f(blac)m -(k.)40 b(It)29 b(should)e(b)s(e)h(extended)330 4430 y(to)39 -b(op)s(erate)g(in)d(v)-5 b(ariable)37 b(dot)i(size)f(mo)s(de,)i -(although)d(actually)h(applying)e(it)i(correctly)g(will)e(b)s(e)330 -4540 y(tric)m(ky)-8 b(.)225 4682 y Fs(\017)60 b Fr -(dither_set_ink_darkness\()o(\))17 b Fu(tak)m(es)25 b(three)f(doubles)e -(represen)m(ting)g(the)i(con)m(tribution)e(to)i(p)s(er-)330 -4792 y(ceiv)m(ed)d(darkness)f(of)g(cy)m(an,)k(magen)m(ta,)h(and)20 -b(y)m(ello)m(w.)37 b(This)19 b(is)g(used)h(to)h(help)f(decide)g(when)f -(to)i(switc)m(h)330 4902 y(b)s(et)m(w)m(een)33 b(ligh)m(t)e(and)h(dark) -g(inks)f(in)g(6)h(and)g(7)h(color)f(prin)m(ters)f(\(with)g(ligh)m(t)h -(cy)m(an,)h(ligh)m(t)f(magen)m(ta,)330 5011 y(and)27 -b(p)s(ossibly)d(ligh)m(t)j(y)m(ello)m(w\).)40 b(Setting)27 -b(these)h(to)s(o)g(lo)m(w)g(will)c(result)j(in)f(to)s(o)i(m)m(uc)m(h)g -(ligh)m(t)e(ink)g(b)s(eing)330 5121 y(laid)j(do)m(wn,)i(creating)h -(\015at)f(sp)s(ots)g(in)f(the)h(darkness)f(curv)m(es)h(and)g -(bleed-through.)41 b(Setting)31 b(them)330 5230 y(to)s(o)d(high)f(will) -e(result)h(in)h(dark)g(ink)f(b)s(eing)g(used)h(in)g(pale)g(areas,)i -(creating)f(sp)s(ec)m(kle.)40 b(The)27 b(defaults)330 -5340 y(are)33 b(.4)g(for)f(cy)m(an,)h(.3)g(for)f(magen)m(ta,)j(and)d -(.2)h(for)f(y)m(ello)m(w.)46 b(Dark)33 b(cy)m(an)g(will)c(sho)m(w)k -(against)f(y)m(ello)m(w)p eop -%%Page: 40 45 -40 44 bop 150 -116 a Fu(App)s(endix)28 b(A:)i(Dithering)2590 -b(40)330 299 y(m)m(uc)m(h)36 b(more)g(than)g(dark)f(magen)m(ta)j(will) -33 b(sho)m(w)j(against)g(cy)m(an,)j(since)c(the)h(cy)m(an)h(app)s(ears) -e(m)m(uc)m(h)330 408 y(dark)m(er)30 b(than)g(the)h(y)m(ello)m(w.)225 -543 y Fs(\017)60 b Fr(dither_set_light_inks\(\))20 b -Fu(tak)m(es)28 b(three)f(doubles)e(b)s(et)m(w)m(een)i(0)g(and)f(1)g -(represen)m(ting)g(the)h(ratio)330 653 y(in)i(darkness)g(b)s(et)m(w)m -(een)i(the)f(ligh)m(t)g(and)f(dark)h(v)m(ersions)f(of)i(the)f(inks.)39 -b(Setting)30 b(these)h(to)s(o)g(lo)m(w)f(will)330 762 -y(result)g(in)g(to)s(o)j(m)m(uc)m(h)e(dark)g(ink)f(b)s(eing)g(used)h -(in)f(pale)h(areas,)h(creating)g(sp)s(ec)m(kling,)e(while)g(setting)330 -872 y(them)24 b(to)s(o)g(high)f(will)e(result)i(in)f(v)m(ery)j(smo)s -(oth)e(texture)i(but)e(to)s(o)h(m)m(uc)m(h)g(use)g(of)g(ligh)m(t)f -(ink,)h(resulting)330 981 y(in)31 b(\015at)h(sp)s(ots)g(in)f(the)h -(densit)m(y)g(curv)m(es)g(and)g(ink)e(bleed-through.)45 -b(There)32 b(are)h(no)f(defaults.)45 b(An)m(y)330 1091 -y(ligh)m(t)30 b(ink)f(sp)s(eci\014ed)f(as)j(zero)g(indicates)e(that)i -(there)g(is)e(no)i(ligh)m(t)e(ink)g(for)h(that)h(color.)330 -1225 y(This)i(only)g(applies)f(to)j(6)g(and)f(7)h(color)f(prin)m(ters)f -(in)g(single)g(dot)h(size)h(color)f(mo)s(de,)h(and)f(only)f(to)330 -1335 y(those)e(inks)e(whic)m(h)g(ha)m(v)m(e)i(ligh)m(t)f(v)m(ersions)g -(\(usually)e(cy)m(an)j(and)f(magen)m(ta\).)225 1469 y -Fs(\017)60 b Fr(dither_set_ink_spread\(\))17 b Fu(tak)m(es)24 -b(a)g(small)e(in)m(teger)h(represen)m(ting)g(the)g(amoun)m(t)h(of)f -(ink)f(spread)330 1579 y(in)27 b(the)i(dither.)39 b(Larger)29 -b(n)m(um)m(b)s(ers)e(mean)i(less)f(spread.)39 b(Larger)29 -b(v)-5 b(alues)28 b(are)h(appropriate)f(for)h(line)330 -1689 y(art)22 b(and)f(solid)f(tones;)25 b(they)d(will)d(yield)h(sharp)s -(er)g(transitions)g(but)h(more)g(dither)g(artifacts.)38 -b(Smaller)330 1798 y(v)-5 b(alues)27 b(are)i(more)f(appropriate)f(for)h -(photos.)40 b(They)27 b(will)e(reduce)j(resolution)f(and)g(sharpness)g -(but)330 1908 y(reduce)38 b(dither)e(artifacts)j(up)e(to)h(a)h(p)s(oin) -m(t.)63 b(A)38 b(v)-5 b(alue)37 b(of)h(16)h(or)f(higher)f(implies)e -(minim)m(um)g(ink)330 2017 y(spread)e(at)i(an)m(y)f(resolution)e(no)i -(matter)g(what)g(the)g(o)m(v)m(erdensit)m(y)-8 b(.)52 -b(A)34 b(v)-5 b(alue)33 b(of)h(14)h(is)e(t)m(ypical)g(for)330 -2127 y(photos)24 b(on)g(single)f(dot)h(size,)i(6)e(color)g(prin)m -(ters.)38 b(F)-8 b(or)24 b(4)h(color)f(prin)m(ters,)g(subtract)g(1)h -(\(more)f(spread;)330 2237 y(the)32 b(dots)g(are)h(farther)e(apart\).) -46 b(F)-8 b(or)33 b(v)-5 b(ariable)31 b(dot)h(size)g(prin)m(ters,)f -(add)g(1)i(\(more)f(small)e(dots)j(are)330 2346 y(prin)m(ted;)c(less)h -(spread)f(is)h(desirable\).)225 2481 y Fs(\017)60 b Fr -(dither_set_adaptive_divi)o(sor\()o(\))30 b Fu(tak)m(es)37 -b(a)f(\015oat)h(represen)m(ting)e(the)h(transition)e(p)s(oin)m(t)h(b)s -(e-)330 2590 y(t)m(w)m(een)i(error)f(di\013usion)e(and)h(ordered)h -(dither)f(if)g(adaptiv)m(e)h(dithering)e(is)h(used.)58 -b(The)35 b(\015oat)i(is)f(a)330 2700 y(fraction)e(of)h(the)g(prin)m -(ting)e(densit)m(y)-8 b(.)53 b(F)-8 b(or)36 b(example,)g(if)d(y)m(ou)i -(wish)e(the)i(transition)f(to)h(b)s(e)f(at)i(1/4)330 -2809 y(of)29 b(the)f(maxim)m(um)f(densit)m(y)h(\(whic)m(h)f(w)m(orks)i -(w)m(ell)e(on)h(simple)e(4-color)k(prin)m(ters\),)e(y)m(ou)g(w)m(ould)f -(pass)330 2919 y(.25)g(here.)39 b(With)25 b(six)g(colors)g(and/or)h -(with)e(m)m(ultiple)f(dot)j(sizes,)h(the)f(v)-5 b(alues)25 -b(should)e(b)s(e)i(set)h(lo)m(w)m(er.)225 3054 y Fs(\017)60 -b Fr(dither_set_transition\(\))32 b Fu(tak)m(es)39 b(a)g(\015oat)g -(represen)m(ting)e(the)i(exp)s(onen)m(t)f(of)g(the)g(transition)330 -3163 y(curv)m(e)c(b)s(et)m(w)m(een)g(ligh)m(t)f(and)g(dark)g(inks/dot)g -(sizes.)51 b(A)34 b(v)-5 b(alue)33 b(less)g(than)g(1)h(\(t)m(ypical)g -(when)e(using)330 3273 y(error)e(di\013usion\))d(mixes)i(in)g(less)g -(dark)g(ink/small)f(dots)i(at)h(lo)m(w)m(er)f(ends)f(of)h(the)g(range,) -h(to)f(reduce)330 3382 y(sp)s(ec)m(kling.)39 b(When)30 -b(using)f(ordered)h(dithering,)e(this)i(m)m(ust)g(b)s(e)g(set)h(to)g -(1.)225 3517 y Fs(\017)60 b Fr(dither_set_)p Fm(X)9 b -Fr(_ranges_simple)22 b Fu(\()p Fm(X)9 b Fu(=`)p Fr(c)p -Fu(',)30 b(`)p Fr(m)p Fu(',)f(`)p Fr(y)p Fu(',)g(or)g(`)p -Fr(k)p Fu('\))g(describ)s(es)e(the)h(ink)g(c)m(hoices)h(a)m(v)-5 -b(ail-)330 3626 y(able)42 b(for)g(eac)m(h)i(color.)77 -b(This)41 b(is)g(useful)g(in)g(t)m(ypical)h(cases)i(where)e(a)h(four)e -(color)i(prin)m(ter)e(with)330 3736 y(v)-5 b(ariable)27 -b(dot)i(sizes)f(is)g(in)f(use.)40 b(It)29 b(is)e(passed)h(an)h(arra)m -(y)g(of)f(doubles)f(b)s(et)m(w)m(een)j(\(0,)f(1])h(represen)m(ting)330 -3846 y(the)g(relativ)m(e)f(darkness)g(of)g(eac)m(h)i(dot)e(size.)40 -b(The)29 b(dot)h(sizes)f(are)h(assigned)e(bit)h(patterns)g(\(and)g(ink) -330 3955 y(quan)m(tities,)e(see)g Fr(dither_set_ink_budget\(\))20 -b Fu(ab)s(o)m(v)m(e\))27 b(from)f(1)h(to)g(the)f(n)m(um)m(b)s(er)f(of)i -(lev)m(els.)39 b(This)330 4065 y(also)c(requires)f(a)i(densit)m(y)-8 -b(,)36 b(whic)m(h)f(is)f(the)h(desired)f(densit)m(y)h(for)g(this)f -(color.)56 b(This)34 b(densit)m(y)g(need)330 4174 y(not)27 -b(equal)e(the)i(densit)m(y)f(sp)s(eci\014ed)e(in)h Fr -(dither_set_density\(\))p Fu(.)34 b(Setting)26 b(it)g(lo)m(w)m(er)h -(will)c(tend)j(to)330 4284 y(prin)m(t)j(more)h(dark)g(ink)f(\(b)s -(ecause)i(the)f(curv)m(es)h(are)f(calculated)h(for)f(this)f(color)h -(assuming)f(a)i(lo)m(w)m(er)330 4394 y(densit)m(y)f(than)g(is)f -(actually)h(supplied\).)225 4528 y Fs(\017)60 b Fr(dither_set_)p -Fm(X)9 b Fr(_ranges)22 b Fu(\()p Fm(X)9 b Fu(=`)p Fr(c)p -Fu(',)29 b(`)p Fr(m)p Fu(',)f(`)p Fr(y)p Fu(',)g(or)f(`)p -Fr(k)p Fu('\))g(describ)s(es)f(in)f(a)j(more)f(general)g(w)m(a)m(y)h -(the)f(ink)330 4638 y(c)m(hoices)36 b(a)m(v)-5 b(ailable)35 -b(for)g(eac)m(h)i(color.)56 b(F)-8 b(or)37 b(eac)m(h)f(p)s(ossible)d -(ink)i(c)m(hoice,)i(a)f(bit)f(pattern,)i(dot)f(size,)330 -4747 y(v)-5 b(alue)33 b(\(i.)49 b(e.)g(relativ)m(e)34 -b(darkness\),)f(and)g(whether)f(the)i(ink)e(is)g(the)h(dark)g(or)g -(ligh)m(t)g(v)-5 b(arian)m(t)33 b(ink)f(is)330 4857 y(sp)s(eci\014ed.) -275 5016 y(|Rob)s(ert)e(Kra)m(witz)g Fr()25 -b Fu(Ma)m(y)32 b(8,)f(2000)p eop -%%Page: 41 46 -41 45 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(41)150 299 y Fp(App)t(endix)53 -b(B)81 b(W)-13 b(ea)l(ving)53 b(for)h(inkjet)g(prin)l(ters)150 -551 y Fu(b)m(y)30 b(Charles)f(Brisco)s(e-Smith)g(and)h(Rob)s(ert)g(Kra) -m(witz.)150 823 y Ft(B.1)67 b(In)l(tro)t(duction)275 -1021 y Fu(The)40 b(Epson)h(St)m(ylus)f(Color/Photo)i(prin)m(ters)e -(don't)i(ha)m(v)m(e)g(memory)g(to)g(prin)m(t)e(using)g(all)g(of)i(the) -150 1131 y(nozzles)i(in)e(the)h(prin)m(t)f(head.)80 b(F)-8 -b(or)44 b(example,)j(the)c(St)m(ylus)f(Photo)i(700/EX)i(has)d(32)h -(nozzles.)80 b(A)m(t)150 1241 y(720)35 b(dpi,)f(with)e(an)i(8)p -Fr(")g Fu(wide)f(image,)j(a)e(single)f(line)f(requires)h(\(8)23 -b Fs(\003)g Fu(720)h Fs(\003)f Fu(6)p Fc(=)p Fu(8\))36 -b(b)m(ytes,)g(or)e(4320)h(b)m(ytes)150 1350 y(\(b)s(ecause)h(the)g(St)m -(ylus)e(Photo)i(prin)m(ters)e(ha)m(v)m(e)j(6)e(ink)g(colors\).)56 -b(T)-8 b(o)36 b(use)f(32)h(nozzles)g(p)s(er)f(color)g(w)m(ould)150 -1460 y(require)27 b(138240)k(b)m(ytes.)41 b(It's)29 b(actually)f(w)m -(orse)g(than)h(that,)g(though,)g(b)s(ecause)g(the)f(nozzles)h(are)g -(spaced)150 1569 y(8)43 b(ro)m(ws)g(apart.)78 b(Therefore,)46 -b(in)c(order)g(to)i(store)f(enough)g(data)g(to)h(p)s(ermit)d(sending)g -(the)i(page)h(as)150 1679 y(a)38 b(simple)d(raster,)k(the)e(prin)m(ter) -f(w)m(ould)g(require)g(enough)h(memory)g(to)g(store)h(256)h(ro)m(ws,)g -(or)e(1105920)150 1789 y(b)m(ytes.)53 b(Considering)32 -b(that)j(the)g(Photo)g(EX)f(can)h(prin)m(t)e(11)p Fr(")i -Fu(wide,)g(w)m(e're)g(lo)s(oking)e(at)i(more)g(lik)m(e)f(1.5)150 -1898 y(MB.)26 b(In)e(fact,)j(these)e(prin)m(ters)e(are)i(capable)g(of)g -(1440)h(dpi)d(horizon)m(tal)h(resolution.)38 b(This)23 -b(w)m(ould)g(require)150 2008 y(3)31 b(MB.)g(The)f(prin)m(ters)f -(actually)h(ha)m(v)m(e)h(64K-256K.)275 2148 y(With)25 -b(the)h(new)m(er)g(\(740/750)k(and)25 b(later\))i(prin)m(ters)d(it's)i -(ev)m(en)h(w)m(orse,)g(since)f(these)g(prin)m(ters)f(supp)s(ort)150 -2258 y(m)m(ultiple)j(dot)j(sizes;)f(of)h(course,)f(the)h(ev)m(en)g(new) -m(er)f(2880x720)k(prin)m(ters)29 b(don't)h(help)f(either.)275 -2398 y(Older)j(Epson)h(prin)m(ters)f(had)h(a)h(mo)s(de)f(called)g -Fm(MicroW)-8 b(ea)m(v)m(e)42 b Fu(\(tm\).)52 b(In)33 -b(this)f(mo)s(de,)j(the)e(host)h(fed)150 2508 y(the)c(prin)m(ter)f -(individual)d(ro)m(ws)k(of)g(dots,)h(and)e(the)h(prin)m(ter)f(bundled)e -(them)k(up)e(and)g(sen)m(t)i(them)f(to)h(the)150 2617 -y(prin)m(t)f(head)h(in)g(the)g(correct)i(order)e(to)h(ac)m(hiev)m(e)h -(high)d(qualit)m(y)-8 b(.)44 b(This)30 b(MicroW)-8 b(ea)m(v)m(e)34 -b(mo)s(de)e(still)d(w)m(orks)150 2727 y(in)36 b(new)h(prin)m(ters,)i -(but)d(in)h(some)h(cases)g(the)g(implemen)m(tation)e(is)h(v)m(ery)h -(minimal:)52 b(the)38 b(prin)m(ter)e(uses)150 2837 y(exactly)c(one)g -(nozzle)g(of)g(eac)m(h)h(color)f(\(the)g(\014rst)f(one\).)45 -b(This)30 b(mak)m(es)j(prin)m(ting)c(extremely)j(slo)m(w)f(\(more)150 -2946 y(than)41 b(30)h(min)m(utes)f(for)g(one)h(8.5x11)p -Fr(")h Fu(page\),)i(although)c(the)h(qualit)m(y)e(is)g(extremely)i -(high)e(with)g(no)150 3056 y(visible)24 b(banding)h(whatso)s(ev)m(er.) -40 b(It's)27 b(not)g(go)s(o)s(d)f(for)g(the)h(prin)m(t)f(head,)h -(though,)g(since)f(no)h(ink)e(is)h(\015o)m(wing)150 3165 -y(through)32 b(the)h(other)h(nozzles.)48 b(This)31 b(leads)i(to)g -(drying)e(of)j(ink)d(and)h(p)s(ossible)f(p)s(ermanen)m(t)h(damage)i(to) -150 3275 y(the)d(prin)m(t)e(head.)275 3415 y(By)j(the)g(w)m(a)m(y)-8 -b(,)35 b(although)c(the)i(Epson)e(man)m(ual)g(sa)m(ys)i(that)g(micro)m -(w)m(ea)m(v)m(e)h(mo)s(de)e(should)e(b)s(e)i(used)f(at)150 -3525 y(720)36 b(dpi,)d(360)j(dpi)d(con)m(tin)m(ues)h(to)h(w)m(ork)g(in) -e(m)m(uc)m(h)h(the)h(same)f(w)m(a)m(y)-8 b(.)54 b(A)m(t)36 -b(360)f(dpi,)f(data)h(is)f(fed)g(to)h(the)150 3634 y(prin)m(ter)29 -b(one)i(ro)m(w)f(at)h(a)g(time)f(on)h(all)e(Epson)h(prin)m(ters.)39 -b(The)30 b(pattern)g(that)h(the)g(prin)m(ter)e(uses)h(to)h(prin)m(t)150 -3744 y(is)26 b(v)m(ery)h(prone)f(to)h(banding.)38 b(Ho)m(w)m(ev)m(er,) -30 b(360)e(dpi)d(is)g(inheren)m(tly)g(a)i(lo)m(w)g(qualit)m(y)f(mo)s -(de;)h(if)f(y)m(ou're)h(using)150 3854 y(it,)34 b(presumably)e(y)m(ou)i -(don't)g(m)m(uc)m(h)g(care)g(ab)s(out)g(qualit)m(y)-8 -b(.)51 b(It)34 b(is)e(p)s(ossible)g(to)i(do)g(micro)m(w)m(ea)m(v)m(e)i -(at)f(360)150 3963 y(DPI,)c(with)e(signi\014can)m(tly)f(impro)m(v)m(ed) -i(qualit)m(y)-8 b(.)275 4104 y(Except)36 b(for)h(the)f(St)m(ylus)g(Pro) -g(prin)m(ters)f(\(5000,)40 b(5500,)g(7000,)g(7500,)g(9000,)g(9500,)g -(and)c(when)f(it's)150 4213 y(released)43 b(the)h(10000\),)50 -b(whic)m(h)42 b(can)i(do)f(micro)m(w)m(ea)m(v)m(e)j(at)e(an)m(y)g -(resolution,)i(prin)m(ters)c(from)h(roughly)150 4323 -y(the)36 b(St)m(ylus)g(Color)f(600)j(and)d(later)i(do)f(not)g(ha)m(v)m -(e)i(the)e(capabilit)m(y)f(to)i(do)f(MicroW)-8 b(ea)m(v)m(e)40 -b(correctly)c(in)150 4432 y(man)m(y)41 b(cases)g(\(some)h(prin)m(ters)d -(can)i(do)f(MicroW)-8 b(ea)m(v)m(e)44 b(correctly)d(at)g(720)h(DPI\).)g -(Instead,)h(the)e(host)150 4542 y(m)m(ust)32 b(arrange)g(the)g(output)f -(in)f(the)i(order)g(that)g(it)f(will)e(b)s(e)i(sen)m(t)h(to)h(the)f -(prin)m(t)e(head.)45 b(This)30 b(is)g(a)j(v)m(ery)150 -4652 y(complex)f(pro)s(cess;)h(the)g(jets)g(in)e(the)h(prin)m(t)f(head) -h(are)h(spaced)g(more)f(than)g(one)h(ro)m(w)f(\(1/720)p -Fr(")p Fu(\))j(apart,)150 4761 y(so)29 b(w)m(e)g(can't)g(simply)d(send) -h(consecutiv)m(e)j(ro)m(ws)e(of)h(dots)f(to)h(the)g(prin)m(ter.)39 -b(Instead,)29 b(w)m(e)g(ha)m(v)m(e)g(to)g(pass)f(e.)150 -4871 y(g.)49 b(the)33 b(\014rst,)h(nin)m(th,)e(17th,)j(25th...)50 -b(ro)m(ws)33 b(in)f(order)g(for)h(them)g(to)h(prin)m(t)e(in)f(the)j -(correct)g(p)s(osition)d(on)150 4980 y(the)g(pap)s(er.)39 -b(This)29 b(in)m(terlea)m(ving)g(pro)s(cess)h(is)g(called)f -Fr(")p Fu(soft)p Fr(")i Fu(w)m(ea)m(ving.)275 5121 y(This)e(decision)g -(w)m(as)i(probably)e(made)i(to)h(sa)m(v)m(e)g(money)f(on)g(memory)f(in) -g(the)h(prin)m(ter.)41 b(It)31 b(certainly)150 5230 y(mak)m(es)k(the)f -(driv)m(er)e(co)s(de)i(far)g(more)g(complicated)g(than)f(it)g(w)m(ould) -g(b)s(e)g(if)g(the)h(prin)m(ter)f(could)g(arrange)150 -5340 y(the)h(output.)50 b(Is)33 b(that)h(a)g(bad)f(thing?)49 -b(Usually)33 b(this)f(tak)m(es)j(far)e(less)g(CPU)h(time)f(than)g(the)h -(dithering)p eop -%%Page: 42 47 -42 46 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(42)150 299 y(pro)s(cess,)27 -b(and)e(it)h(do)s(es)g(allo)m(w)f(us)h(more)g(con)m(trol)h(o)m(v)m(er)g -(the)g(prin)m(ting)d(pro)s(cess,)i(e.g.)41 b(to)27 b(reduce)f(banding.) -150 408 y(Conceiv)-5 b(ably)d(,)30 b(w)m(e)h(could)e(ev)m(en)i(use)f -(this)f(abilit)m(y)g(to)i(map)f(out)h(bad)f(jets.)275 -546 y(In)m(terestingly)-8 b(,)30 b(apparen)m(tly)h(the)g(Windo)m(ws)f -(\(and)h(presumably)d(Macin)m(tosh\))k(driv)m(ers)e(for)h(most)g(or)150 -656 y(all)39 b(Epson)g(prin)m(ters)g(still)f(list)g(a)j(\\micro)m(w)m -(ea)m(v)m(e")i(mo)s(de.)69 b(Exp)s(erimen)m(ts)39 b(ha)m(v)m(e)i -(demonstrated)f(that)150 765 y(this)33 b(do)s(es)h(not)g(in)f(fact)i -(use)e(the)i(\\micro)m(w)m(ea)m(v)m(e")i(mo)s(de)c(of)h(the)h(prin)m -(ter.)50 b(P)m(ossibly)32 b(it)i(do)s(es)g(nothing,)150 -875 y(or)h(it)g(uses)g(a)h(di\013eren)m(t)f(w)m(ea)m(v)m(e)j(pattern)d -(from)g(what)h(the)f(non-\\micro)m(w)m(ea)m(v)m(e")k(mo)s(de)c(do)s -(es.)55 b(This)34 b(is)150 984 y(unnecessarily)f(confusing,)i(at)h -(least)f(for)g(p)s(eople)f(who)g(write)g(driv)m(ers)g(who)g(try)h(to)h -(explain)d(them)i(to)150 1094 y(p)s(eople)29 b(who)h(don't.)275 -1232 y(What)35 b(mak)m(es)h(this)e(in)m(teresting)g(is)g(that)i(there)f -(are)g(man)m(y)g(di\013eren)m(t)g(w)m(a)m(ys)h(of)f(of)g(accomplishing) -150 1341 y(this)j(goal.)67 b(The)38 b(naiv)m(e)h(w)m(a)m(y)h(w)m(ould)e -(b)s(e)g(to)i(divide)d(the)i(image)g(up)f(in)m(to)h(groups)f(of)i(256)g -(ro)m(ws)f(\(for)150 1451 y(a)d(prin)m(ter)e(with)f(32)k(jets)e(and)g -(a)g(separation)g(of)h(8)f(ro)m(ws\),)i(and)e(prin)m(t)f(all)g(the)i -(mo)s(d8=0)f(ro)m(ws)g(in)f(the)150 1560 y(\014rst)i(pass,)h(mo)s(d8=1) -f(ro)m(ws)h(in)e(the)h(second,)j(and)c(so)i(forth.)58 -b(The)36 b(problem)f(with)g(this)g(approac)m(h)i(is)150 -1670 y(that)32 b(the)g(individual)27 b(ink)j(jets)i(are)g(not)g(p)s -(erfectly)f(uniform;)f(some)i(emit)g(sligh)m(tly)e(bigger)h(or)g -(smaller)150 1780 y(drops)36 b(than)g(others.)61 b(Since)36 -b(eac)m(h)i(group)e(of)h(8)h(adjacen)m(t)g(ro)m(ws)f(is)f(prin)m(ted)f -(with)h(the)h(same)g(nozzle,)150 1889 y(that)30 b(means)f(that)g(there) -g(will)e(b)s(e)h(distinct)g(streaks)h(of)g(ligh)m(ter)g(and)f(dark)m -(er)h(bands)f(within)e(the)k(image)150 1999 y(\(8)g(ro)m(ws)g(is)e -(1/90)p Fr(")p Fu(,)k(whic)m(h)c(is)g(visible;)g(1/720)p -Fr(")j Fu(is)e(not\).)41 b(P)m(ossibly)28 b(w)m(orse)i(is)e(that)i -(these)g(patterns)g(will)150 2108 y(rep)s(eat)h(ev)m(ery)g(256)g(ro)m -(ws.)41 b(This)29 b(creates)i(banding)e(patterns)h(that)h(are)g(ab)s -(out)f(1/3)p Fr(")i Fu(wide.)275 2246 y(So)e(w)m(e)h(ha)m(v)m(e)g(to)g -(do)g(something)e(to)j(break)e(up)f(this)g(patterning.)275 -2384 y(Epson)j(do)s(es)h(not)h(publish)29 b(the)34 b(w)m(ea)m(ving)g -(algorithms)e(that)i(they)f(use)g(in)f(their)h(bundled)d(driv)m(ers.) -150 2493 y(Indeed,)g(their)f(dev)m(elop)s(er)h(w)m(eb)h(site)f(\(h)m -(ttp://www.ercip)s(d.com/isv/edr)p 2754 2493 28 4 v 32 -w(do)s(cs.h)m(tm\))h(do)s(es)f(not)h(ev)m(en)150 2603 -y(describ)s(e)i(ho)m(w)j(to)f(do)g(this)f(w)m(ea)m(ving)i(at)g(all;)h -(it)d(sa)m(ys)i(that)g(the)f(only)f(w)m(a)m(y)i(to)g(ac)m(hiev)m(e)g -(720)h(dpi)c(is)h(to)150 2713 y(use)c(MicroW)-8 b(ea)m(v)m(e.)43 -b(It)30 b(do)s(es)g(note)h(\(correctly\))g(that)f(1440)i(dpi)c(horizon) -m(tal)i(can)g(only)f(b)s(e)g(ac)m(hiev)m(ed)i(b)m(y)150 -2822 y(the)h(driv)m(er)f(\(i.)46 b(e.)h(in)30 b(soft)m(w)m(are\).)48 -b(The)32 b(man)m(ual)g(actually)f(mak)m(es)i(it)f(fairly)f(clear)h(ho)m -(w)g(to)h(do)f(this)f(\(it)150 2932 y(requires)g(t)m(w)m(o)j(passes)e -(with)f(horizon)m(tal)h(head)g(mo)m(v)m(emen)m(t)i(b)s(et)m(w)m(een)f -(passes\),)g(and)f(it)g(is)f(presumably)150 3041 y(p)s(ossible)d(to)j -(do)f(this)g(with)f(MicroW)-8 b(ea)m(v)m(e.)275 3179 -y(The)23 b(information)f(ab)s(out)i(ho)m(w)g(to)h(do)f(this)f(is)g -(apparen)m(tly)h(a)m(v)-5 b(ailable)23 b(under)g(non-disclosure)e -(agree-)150 3289 y(men)m(t)31 b(\(ND)m(A\).)i(It's)d(actually)g(easy)h -(enough)g(to)g(rev)m(erse)g(engineer)f(what's)h(inside)d(a)j(prin)m(t)e -(\014le)g(with)h(a)150 3398 y(simple)c(P)m(erl)h(script,)g(whic)m(h)g -(is)g(supplied)d(with)j(the)h(Gimp-Prin)m(t)e(distribution)e(as)k -(tests/parse-escp2.)150 3508 y(In)f(an)m(y)h(ev)m(en)m(t,)i(w)m(e)e(w)m -(eren't)g(particularly)d(in)m(terested)j(in)e(the)i(w)m(ea)m(ving)g -(patterns)g(Epson)e(used.)39 b(There)150 3617 y(are)31 -b(man)m(y)g(factors)h(that)g(go)f(in)m(to)g(c)m(ho)s(osing)g(a)g(go)s -(o)s(d)g(w)m(ea)m(ving)h(pattern;)f(w)m(e're)h(learning)d(them)i(as)g -(w)m(e)150 3727 y(go)i(along.)44 b(Issues)31 b(suc)m(h)h(as)f(drying)f -(time)i(\(giving)f(the)h(ink)e(a)i(few)f(seconds)h(more)g(or)g(less)f -(to)h(dry)f(can)150 3836 y(ha)m(v)m(e)h(highly)c(visible)g(e\013ects\)) -k(a\013ect)g(the)e(qualit)m(y)g(of)g(the)h(output.)275 -3974 y(The)j(Uniprin)m(t)f(GhostScript)h(driv)m(er)g(has)h(b)s(een)g -(able)g(to)h(do)f(w)m(ea)m(ving)h(for)f(a)g(long)g(time.)55 -b(It)35 b(uses)150 4084 y(patterns)e(that)g(m)m(ust)g(b)s(e)f(sp)s -(eci\014ed)f(for)h(eac)m(h)i(c)m(hoice)g(of)f(resolution)e(and)h(prin)m -(ter.)47 b(W)-8 b(e)34 b(preferred)d(an)150 4193 y(algorithmic)i -(approac)m(h)h(that)g(computes)g(a)g(w)m(ea)m(v)m(e)i(pattern)e(for)g -(an)m(y)g(giv)m(en)g(c)m(hoice)h(of)f(inputs.)49 b(This)150 -4303 y(ob)m(viously)29 b(requires)g(extensiv)m(e)i(testing;)g(w)m(e)f -(dev)m(elop)s(ed)g(a)h(test)g(suite)f(sp)s(eci\014cally)e(for)i(this)f -(purp)s(ose.)150 4568 y Ft(B.2)67 b(W)-11 b(ea)l(ving)46 -b(algorithms)275 4764 y Fu(I)32 b(considered)f(a)i(few)f(algorithms)f -(to)j(p)s(erform)d(the)h(w)m(ea)m(v)m(e.)49 b(The)32 -b(\014rst)g(one)h(I)f(devised)f(let)i(me)f(use)150 4874 -y(only)40 b(\()p Fc(j)5 b(ets)28 b Fs(\000)g Fc(distance)p -1025 4874 V 33 w(betw)r(een)p 1378 4874 V 33 w(j)5 b(ets)p -Fu(+1\))42 b(nozzles,)j(or)c(25.)74 b(This)39 b(is)i(OK)f(in)g -(principle,)h(but)f(it's)150 4983 y(slo)m(w)m(er)e(than)f(using)f(all)g -(nozzles.)62 b(By)38 b(pla)m(ying)e(around)g(with)h(it)g(some)g(more,)j -(I)d(came)i(up)d(with)g(an)150 5093 y(algorithm)29 b(that)i(lets)g(me)f -(use)g(all)f(of)i(the)f(nozzles,)h(except)h(near)e(the)g(top)h(and)f(b) -s(ottom)h(of)f(the)h(page.)275 5230 y(This)26 b(still)f(pro)s(duces)i -(some)h(banding,)f(though.)39 b(Ev)m(en)28 b(b)s(etter)g(qualit)m(y)f -(can)h(b)s(e)f(ac)m(hiev)m(ed)i(b)m(y)e(using)150 5340 -y(m)m(ultiple)k(nozzles)j(on)g(the)f(same)i(line.)48 -b(Ho)m(w)35 b(do)e(w)m(e)h(do)g(this?)49 b(In)33 b(1440x720)j(mo)s(de,) -f(w)m(e're)f(prin)m(ting)p eop -%%Page: 43 48 -43 47 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(43)150 299 y(t)m(w)m(o)30 -b(output)f(lines)e(at)i(the)g(same)h(v)m(ertical)f(p)s(osition.)38 -b(Ho)m(w)m(ev)m(er,)31 b(if)d(w)m(e)i(w)m(an)m(t)f(four)f(passes,)i(w)m -(e)f(ha)m(v)m(e)h(to)150 408 y(e\013ectiv)m(ely)f(prin)m(t)e(eac)m(h)i -(line)e(t)m(wice.)40 b(Actually)28 b(doing)f(this)g(w)m(ould)g -(increase)h(the)g(densit)m(y)-8 b(,)29 b(so)f(what)g(w)m(e)150 -518 y(do)f(is)f(prin)m(t)g(half)h(the)g(dots)g(on)h(eac)m(h)g(pass.)39 -b(This)26 b(pro)s(duces)g(near-p)s(erfect)h(output,)h(and)f(it's)g(far) -g(faster)150 628 y(than)j(using)f(\(pseudo\))h(\\MicroW)-8 -b(ea)m(v)m(e".)275 762 y(Y)g(et)43 b(another)f(complication)e(is)h(ho)m -(w)h(to)g(get)h(near)f(the)g(top)g(and)f(b)s(ottom)h(of)g(the)g(page.) -76 b(This)150 872 y(algorithm)37 b(lets)g(us)g(prin)m(t)f(to)i(within)d -(one)j(head)f(width)f(of)i(the)g(top)f(of)h(the)g(page,)i(and)d(a)h -(bit)f(more)150 981 y(than)32 b(one)g(head)g(width)e(from)h(the)i(b)s -(ottom.)45 b(That)32 b(lea)m(v)m(es)h(a)g(lot)f(of)g(blank)e(space.)47 -b(Doing)32 b(the)g(w)m(ea)m(v)m(e)150 1091 y(prop)s(erly)i(outside)h -(of)h(this)f(region)h(is)f(increasingly)f(di\016cult)g(as)i(w)m(e)h -(get)g(closer)f(to)h(the)f(edge)h(of)f(the)150 1200 y(pap)s(er;)g(in)e -(the)h(in)m(terior)f(region,)i(an)m(y)f(nozzle)h(can)f(prin)m(t)f(an)m -(y)h(line,)g(but)f(near)h(the)g(top)g(and)g(b)s(ottom)150 -1310 y(edges,)45 b(only)40 b(some)i(nozzles)g(can)f(prin)m(t.)72 -b(W)-8 b(e)43 b(originally)c(handled)g(this)h(b)m(y)h(using)f(the)i -(naiv)m(e)f(w)m(a)m(y)150 1419 y(men)m(tioned)35 b(ab)s(o)m(v)m(e)i -(near)f(the)g(b)s(orders,)g(and)f(switc)m(hing)g(o)m(v)m(er)i(to)f(the) -g(high)f(qualit)m(y)g(metho)s(d)g(in)g(the)150 1529 y(in)m(terior.)47 -b(Unfortunately)-8 b(,)33 b(this)f(mean)m(t)h(that)h(the)f(qualit)m(y)f -(is)g(quite)g(visibly)e(degraded)i(near)h(the)g(top)150 -1639 y(and)26 b(b)s(ottom)h(of)g(the)g(page.)41 b(W)-8 -b(e)28 b(ha)m(v)m(e)g(since)e(devised)f(b)s(etter)i(algorithms)f(that)h -(allo)m(w)g(prin)m(ting)d(to)k(the)150 1748 y(extreme)37 -b(top)f(and)g(b)s(ottom)g(of)g(the)h(region)e(that)i(can)f(ph)m -(ysically)e(b)s(e)i(prin)m(ted,)g(with)f(only)g(minimal)150 -1858 y(loss)30 b(of)g(qualit)m(y)-8 b(.)275 1992 y(Epson)22 -b(do)s(es)h(not)h(adv)m(ertise)g(that)g(the)g(prin)m(ters)e(can)i(prin) -m(t)e(at)j(the)e(v)m(ery)h(top)g(of)g(the)g(page,)i(although)150 -2102 y(in)d(practice)h(most)h(of)f(them)g(can.)39 b(The)23 -b(qualit)m(y)h(is)f(degraded)h(to)h(some)f(degree,)i(and)e(w)m(e)g(ha)m -(v)m(e)i(observ)m(ed)150 2211 y(that)45 b(in)f(some)h(cases)h(not)f -(all)f(of)h(the)g(dots)g(get)h(prin)m(ted.)82 b(Epson)44 -b(ma)m(y)i(ha)m(v)m(e)g(decided)d(that)j(the)150 2321 -y(degradation)28 b(in)e(qualit)m(y)h(is)g(su\016cien)m(t)h(that)g(prin) -m(ting)e(in)g(that)j(region)e(should)f(not)i(b)s(e)f(allo)m(w)m(ed.)40 -b(That)150 2430 y(is)29 b(a)i(v)-5 b(alid)29 b(decision,)g(although)h -(w)m(e)h(ha)m(v)m(e)g(tak)m(en)h(another)e(approac)m(h.)150 -2654 y Fg(B.2.1)63 b(Simple)40 b(w)m(ea)m(ving)g(algorithms)275 -2846 y Fu(The)35 b(initial)f(problem)h(is)g(to)i(calculate)g(the)f -(starting)g(p)s(osition)e(of)j(eac)m(h)g(pass;)i(the)e(ro)m(w)f(n)m(um) -m(b)s(er)150 2956 y(of)41 b(the)g(prin)m(ter's)f(top)h(jet)h(when)e -(prin)m(ting)e(that)k(pass.)72 b(Since)40 b(w)m(e)h(assume)g(the)g(pap) -s(er)f(cannot)i(b)s(e)150 3065 y(rev)m(erse-fed,)30 b(the)f(prin)m(t)e -(head)i(m)m(ust,)g(for)g(eac)m(h)h(pass,)f(start)g(either)f(further)f -(do)m(wn)i(the)g(page)g(than)g(the)150 3175 y(previous)c(pass)h(or)h -(at)g(the)g(same)g(p)s(osition.)38 b(Eac)m(h)27 b(pass's)f(start)h(p)s -(oin)m(t)f(is)g(therefore)h(at)g(a)g(non-negativ)m(e)150 -3285 y(o\013set)k(from)f(the)h(previous)e(pass's)h(start)h(p)s(oin)m -(t.)275 3419 y(Once)26 b(w)m(e)g(ha)m(v)m(e)i(a)e(form)m(ula)g(for)g -(the)g(starting)g(ro)m(w)g(of)g(eac)m(h)i(pass,)f(w)m(e)f(then)g(turn)f -(that)i(\\inside)d(out")150 3529 y(to)31 b(get)h(a)e(form)m(ula)g(for)g -(the)h(pass)f(n)m(um)m(b)s(er)f(con)m(taining)h(eac)m(h)h(ro)m(w.)275 -3663 y(First,)h(let's)g(de\014ne)g(ho)m(w)h(our)e(prin)m(ter)g(w)m -(orks.)47 b(W)-8 b(e)34 b(measure)e(v)m(ertical)h(p)s(osition)d(on)i -(the)h(pap)s(er)e(in)150 3772 y(\\ro)m(ws";)k(the)f(resolution)d(with)h -(whic)m(h)g(the)h(prin)m(ter)f(can)h(p)s(osition)e(the)i(pap)s(er)f(v)m -(ertically)-8 b(.)49 b(The)32 b(prin)m(t)150 3882 y(head)e(con)m(tains) -h Fc(J)39 b Fu(ink)29 b(jets,)i(whic)m(h)e(are)i(spaced)f -Fc(S)36 b Fu(ro)m(ws)30 b(apart.)275 4016 y(Consider)37 -b(a)i(v)m(ery)g(simple)e(case:)58 b(w)m(e)40 b(w)m(an)m(t)f(to)h(prin)m -(t)d(a)i(page)h(as)f(quic)m(kly)f(as)h(p)s(ossible,)f(and)g(w)m(e)150 -4126 y(mostly)30 b(don't)g(care)i(ho)m(w)e(sparse)g(the)g(prin)m(ting)f -(is,)g(so)i(long)f(as)h(it's)f(fairly)e(ev)m(en.)275 -4260 y(It's)40 b(prett)m(y)h(ob)m(vious)e(ho)m(w)i(to)f(do)h(this.)69 -b(W)-8 b(e)41 b(mak)m(e)g(one)g(pass)e(with)g(the)i(prin)m(t)d(head,)43 -b(prin)m(ting)150 4370 y Fc(J)k Fu(lines)35 b(of)j(data,)i(eac)m(h)f -(line)c Fc(S)43 b Fu(ro)m(ws)37 b(after)h(the)g(previous)e(one.)62 -b(W)-8 b(e)39 b(then)e(adv)-5 b(ance)38 b(the)g(pap)s(er)e(b)m(y)150 -4479 y Fc(S)27 b Fs(\003)22 b Fc(J)42 b Fu(ro)m(ws)33 -b(and)g(prin)m(t)e(the)i(next)h(ro)m(w.)48 b(F)-8 b(or)34 -b(example,)f(if)f Fc(J)39 b Fu(=)29 b(7)34 b(and)e Fc(S)j -Fu(=)29 b(4,)34 b(this)e(metho)s(d)g(can)i(b)s(e)150 -4589 y(illustrated)28 b(lik)m(e)i(this:)390 4717 y Fr(pass)47 -b(number)390 4821 y(|)g(row)g(number------->)390 4925 -y(|)g(|)430 b(11111111112222222222333)o(3333)o(3334)o(444)o(4444)o -(4455)o(555)o(5555)o(5666)o(666)o(6666)390 5029 y(|)47 -b(01234567890123456789012345)o(6789)o(012)o(3456)o(7890)o(123)o(4567)o -(8901)o(234)o(5678)o(9012)o(345)o(6789)390 5132 y(0)g -(*---*---*---*---*---*---*)390 5236 y(1)1384 b -(*---*---*---*---*---*---)o(*)390 5340 y(2)47 b -(\\-----------------------/)1473 b(*---*---*---*---*---*-)p -eop -%%Page: 44 49 -44 48 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(44)867 299 y Fr(7)48 -b(jets)667 b(\\---/)1822 403 y(4)47 b(rows)g(offset)f(from)h(one)g(jet) -f(to)i(the)f(next)485 506 y(\\-------------------------)o(--/)629 -610 y(7*4=28)f(rows)g(offset)g(from)h(one)g(pass)g(to)g(the)g(next)275 -747 y Fu(In)35 b(these)i(examples,)g(the)f(v)m(ertical)h(axis)e(can)i -(b)s(e)e(though)m(t)i(of)f(as)h(the)f(time)g(axis,)h(with)e(the)h(pass) -150 857 y(n)m(um)m(b)s(er)25 b(sho)m(wn)g(at)i(the)g(left)e(margin,)i -(while)d(the)i(ro)m(w)g(n)m(um)m(b)s(er)f(runs)g(horizon)m(tally)-8 -b(.)38 b(A)27 b(`)p Fr(*)p Fu(')f(sho)m(ws)g(eac)m(h)150 -967 y(ro)m(w)h(prin)m(ted)f(b)m(y)h(a)g(pass,)h(and)e(a)h(ro)m(w)h(of)f -(`)p Fr(-)p Fu(')g(is)f(used)g(to)i(link)d(together)j(the)g(ro)m(ws)f -(prin)m(ted)e(b)m(y)i(one)g(pass)150 1076 y(of)h(the)g(prin)m(t)f -(head.)39 b(The)28 b(\014rst)f(pass)g(is)g(n)m(um)m(b)s(ered)g(`)p -Fr(0)p Fu(')h(and)f(starts)i(at)f(ro)m(w)g(0.)41 b(Eac)m(h)28 -b(subsequen)m(t)f(pass)150 1186 y Fc(p)h Fu(starts)h(at)g(ro)m(w)f -Fc(p)16 b Fs(\003)g Fc(S)21 b Fs(\003)16 b Fc(J)9 b Fu(.)40 -b(Eac)m(h)29 b(pass)f(prin)m(ts)f Fc(J)37 b Fu(lines,)27 -b(eac)m(h)j(line)c(b)s(eing)h Fc(S)33 b Fu(ro)m(ws)28 -b(after)h(the)f(previous)150 1295 y(one.)66 b(\(F)-8 -b(or)39 b(ease)h(of)f(viewing)e(this)g(\014le)h(on)g(a)h(standard)f -(terminal,)h(I'm)g(clipping)c(the)k(examples)f(at)150 -1405 y(column)29 b(80.\))275 1542 y(This)34 b(metho)s(d)i(co)m(v)m(ers) -h(the)g(whole)e(page)i(with)e(lines)g(prin)m(ted)f(ev)m(enly)j -Fc(S)k Fu(ro)m(ws)36 b(apart.)59 b(Ho)m(w)m(ev)m(er,)150 -1652 y(w)m(e)30 b(w)m(an)m(t)h(to)g(\014ll)d(in)h(all)g(the)h(other)g -(ro)m(ws)g(with)f(prin)m(ting)f(to)j(get)g(a)f(full-densit)m(y)e(page)i -(\(w)m(e're)i(ignoring)150 1762 y(o)m(v)m(ersampling)24 -b(at)i(this)e(stage\).)41 b(Where)25 b(w)m(e)g(ha)m(v)m(e)h(previously) -d(prin)m(ted)g(a)j(single)d(pass,)j(w)m(e'll)e(no)m(w)h(prin)m(t)150 -1871 y(a)37 b(\\pass)f(blo)s(c)m(k":)53 b(w)m(e)37 b(prin)m(t)e(extra)i -(passes)f(to)i(\014ll)c(in)h(the)i(empt)m(y)g(ro)m(ws.)58 -b(A)37 b(naiv)m(e)f(implemen)m(tation)150 1981 y(migh)m(t)30 -b(lo)s(ok)g(lik)m(e)g(this:)390 2112 y Fr(0)47 b -(*---*---*---*---*---*---*)390 2216 y(1)95 b(*---*---*---*---*---*---*) -390 2320 y(2)143 b(*---*---*---*---*---*---)o(*)390 2423 -y(3)191 b(*---*---*---*---*---*--)o(-*)390 2527 y(4)1384 -b(*---*---*---*---*---*---)o(*)390 2631 y(5)1432 b -(*---*---*---*---*---*--)o(-*)390 2735 y(6)1479 b -(*---*---*---*---*---*---*)390 2839 y(7)1527 b -(*---*---*---*---*---*---)o(*)390 2942 y(8)2720 b -(*---*---*---*---*---*-)390 3046 y(9)2768 b(*---*---*---*---*---*)390 -3150 y(10)g(*---*---*---*---*---)390 3254 y(11)2815 b -(*---*---*---*---*--)150 3391 y Fu(\(No)m(w)31 b(y)m(ou)g(can)g(see)g -(wh)m(y)f(this)f(pro)s(cess)h(is)f(called)h(\\w)m(ea)m(ving"!\))150 -3621 y Fg(B.2.2)63 b(P)m(erfect)39 b(w)m(ea)m(ving)275 -3816 y Fu(This)28 b(simple)f(w)m(ea)m(v)m(e)33 b(pattern)c(prin)m(ts)g -(ev)m(ery)h(ro)m(w,)h(but)e(will)e(giv)m(e)j(conspicuous)f(banding)f -(patterns)150 3926 y(for)i(the)h(reasons)f(discussed)f(ab)s(o)m(v)m(e.) -275 4063 y(Let's)k(start)h(impro)m(ving)e(this)g(for)h(our)f(simple)f -(case.)51 b(W)-8 b(e)34 b(can)g(reduce)f(banding)e(b)m(y)i(making)g -(sure)150 4173 y(that)27 b(an)m(y)g(giv)m(en)g(jet)g(nev)m(er)h(prin)m -(ts)d(a)i(ro)m(w)g(to)s(o)g(close)g(to)h(another)f(ro)m(w)g(prin)m(ted) -e(b)m(y)i(the)g(same)g(jet.)40 b(This)150 4282 y(means)d(w)m(e)g(w)m -(an)m(t)g(to)h(space)f(the)g(ro)m(ws)g(prin)m(ted)e(b)m(y)i(a)g(giv)m -(en)f(jet)i(ev)m(enly)e(do)m(wn)g(the)h(page.)61 b(In)36 -b(turn,)150 4392 y(this)28 b(implies)f(w)m(e)i(w)m(an)m(t)h(to)g(adv)-5 -b(ance)30 b(the)f(pap)s(er)f(b)m(y)i(as)f(nearly)f(an)h(equal)g(amoun)m -(t)h(after)g(eac)m(h)g(pass)f(as)150 4501 y(p)s(ossible.)275 -4639 y(Eac)m(h)e(pass)f(blo)s(c)m(k)h(prin)m(ts)e Fc(S)18 -b Fs(\003)13 b Fc(J)37 b Fu(lines)25 b(in)g Fc(S)32 b -Fu(passes.)40 b(The)26 b(\014rst)g(line)f(prin)m(ted)h(in)f(eac)m(h)j -(pass)f(blo)s(c)m(k)f(is)150 4748 y Fc(S)12 b Fs(\003)7 -b Fc(J)33 b Fu(ro)m(ws)24 b(lo)m(w)m(er)g(on)g(the)g(page)g(than)g(the) -f(\014rst)g(line)g(prin)m(ted)f(in)g(the)i(previous)f(pass)g(blo)s(c)m -(k.)38 b(Therefore,)150 4858 y(if)e(w)m(e)h(adv)-5 b(ance)38 -b(the)f(pap)s(er)f(b)m(y)h Fc(J)46 b Fu(ro)m(ws)37 b(b)s(et)m(w)m(een)g -(eac)m(h)i(pass,)f(w)m(e)g(can)f(prin)m(t)e(the)j(righ)m(t)e(n)m(um)m -(b)s(er)g(of)150 4967 y(passes)30 b(in)f(eac)m(h)j(blo)s(c)m(k)e(and)g -(adv)-5 b(ance)30 b(the)h(pap)s(er)e(p)s(erfectly)h(ev)m(enly)-8 -b(.)275 5105 y(Here's)31 b(what)f(this)f(\\p)s(erfect")i(w)m(ea)m(v)m -(e)i(lo)s(oks)d(lik)m(e:)1345 5236 y Fr(start)46 b(of)h(full)g(weave) -1345 5340 y(|)p eop -%%Page: 45 50 -45 49 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(45)390 299 y Fr(0)47 -b(*---*---*---*---*---*---*)390 403 y(1)382 b(*---*---*---*---*---*--)o -(-*)390 506 y(2)716 b(*---*---*---*---*---*--)o(-*)390 -610 y(3)1050 b(*---*---*---*---*---*--)o(-*)390 714 y(4)1384 -b(*---*---*---*---*---*---)o(*)390 818 y(5)1718 b -(*---*---*---*---*---*---)o(*)390 922 y(6)2052 b -(*---*---*---*---*---*---)o(*)390 1025 y(7)2386 b -(*---*---*---*---*---*---*)390 1129 y(8)2720 b(*---*---*---*---*---*-) -390 1233 y(9)3054 b(*---*---*---*--)390 1337 y(10)3340 -b(*---*---)390 1440 y(11)3674 b(*)275 1572 y Fu(Y)-8 -b(ou'll)28 b(notice)h(that,)h(for)e(the)h(\014rst)f(few)h(ro)m(ws,)g -(this)f(w)m(ea)m(v)m(e)j(is)d(to)s(o)h(sparse.)40 b(It)29 -b(is)f(not)h(un)m(til)e(the)i(ro)m(w)150 1681 y(mark)m(ed)35 -b(\\start)h(of)f(full)e(w)m(ea)m(v)m(e")38 b(that)d(ev)m(ery)h -(subsequen)m(t)e(ro)m(w)h(is)f(prin)m(ted.)53 b(W)-8 -b(e)36 b(can)g(calculate)f(this)150 1791 y(start)c(p)s(osition)d(as)j -(follo)m(ws:)390 1916 y Fc(star)s(t)72 b Fu(=)h(\()p -Fc(S)25 b Fs(\000)20 b Fu(1\))69 b Fs(\003)f Fu(\()p -Fc(J)30 b Fs(\000)20 b Fu(1\))275 2047 y(F)-8 b(or)34 -b(the)f(momen)m(t,)j(w)m(e)d(will)e(ignore)i(this)g(problem)f(with)g -(the)h(w)m(ea)m(v)m(e.)53 b(W)-8 b(e'll)33 b(consider)f(later)i(ho)m(w) -150 2157 y(to)d(\014ll)d(in)h(the)i(missing)d(ro)m(ws.)275 -2288 y(Let's)j(lo)s(ok)e(at)j(a)e(few)h(more)f(examples)g(of)g(p)s -(erfect)h(w)m(ea)m(v)m(es:)150 2419 y Fc(S)f Fu(=)25 -b(2,)31 b Fc(J)k Fu(=)25 b(7,)31 b Fc(star)s(t)24 b Fu(=)h(\(2)c -Fs(\000)f Fu(1\))h Fs(\003)f Fu(\(7)h Fs(\000)f Fu(1\))26 -b(=)f(6:)772 2544 y Fr(starting)45 b(row)i(of)g(full)g(weave)772 -2648 y(|)390 2752 y(0)g(*-*-*-*-*-*-*)390 2855 y(1)382 -b(*-*-*-*-*-*-*)390 2959 y(2)716 b(*-*-*-*-*-*-*)390 -3063 y(3)1050 b(*-*-*-*-*-*-*)390 3167 y(4)1384 b(*-*-*-*-*-*-*)390 -3271 y(5)1718 b(*-*-*-*-*-*-*)390 3374 y(6)2052 b(*-*-*-*-*-*-*)390 -3478 y(7)2386 b(*-*-*-*-*-*-*)150 3609 y Fc(S)30 b Fu(=)25 -b(7,)31 b Fc(J)k Fu(=)25 b(2,)31 b Fc(star)s(t)24 b Fu(=)h(6:)772 -3734 y Fr(start)772 3838 y(|)390 3942 y(0)47 b(*------*)390 -4046 y(1)143 b(*------*)390 4150 y(2)238 b(*------*)390 -4253 y(3)334 b(*------*)390 4357 y(4)429 b(*------*)390 -4461 y(5)525 b(*------*)390 4565 y(6)620 b(*------*)390 -4668 y(7)716 b(*------*)390 4772 y(8)811 b(*------*)390 -4876 y(9)907 b(*------*)150 5007 y Fc(S)30 b Fu(=)25 -b(4,)31 b Fc(J)k Fu(=)25 b(13,)31 b Fc(star)s(t)24 b -Fu(=)h(36:)2204 5132 y Fr(start)2204 5236 y(|)390 5340 -y(0)47 b(*---*---*---*---*---*---*-)o(--*-)o(--*)o(---*)o(---*)o(---)o -(*---)o(*)p eop -%%Page: 46 51 -46 50 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(46)390 299 y Fr(1)668 -b(*---*---*---*---*---*---)o(*---)o(*--)o(-*--)o(-*--)o(-*-)o(--*-)o -(--*)390 403 y(2)1288 b(*---*---*---*---*---*---*-)o(--*)o(---*)o(---*) -o(---)o(*---)o(*---)o(*)390 506 y(3)1909 b(*---*---*---*---*---*---)o -(*--)o(-*--)o(-*--)o(-*-)o(-)390 610 y(4)2529 b -(*---*---*---*---*---*---*)o(-)390 714 y(5)3150 b(*---*---*---*)150 -853 y Fc(S)30 b Fu(=)25 b(13,)32 b Fc(J)i Fu(=)25 b(4,)31 -b Fc(star)s(t)24 b Fu(=)h(36:)2204 986 y Fr(start)2204 -1090 y(|)390 1193 y(0)47 b(*------------*------------)o(*---)o(---)o -(----)o(--*)390 1297 y(1)238 b(*------------*------------)o(*--)o(----) -o(----)o(--*)390 1401 y(2)429 b(*------------*-----------)o(-*--)o -(----)o(---)o(---*)390 1505 y(3)620 b(*------------*-----------)o(-*--) -o(---)o(----)o(---*)390 1608 y(4)811 b(*------------*-----------)o(-*-) -o(----)o(----)o(---)o(*)390 1712 y(5)1002 b(*------------*----------)o -(--*-)o(----)o(---)o(----)o(*)390 1816 y(6)1193 b -(*------------*----------)o(--*-)o(---)o(----)o(----)o(*)390 -1920 y(7)1384 b(*------------*----------)o(--*)o(----)o(----)o(---)o -(-*)390 2024 y(8)1575 b(*------------*---------)o(---*)o(----)o(---)o -(----)o(-*)390 2127 y(9)1766 b(*------------*---------)o(---*)o(---)o -(----)o(----)o(-*)390 2231 y(10)1909 b(*------------*---------)o(---)o -(*---)o(----)o(---)o(-)390 2335 y(11)2099 b(*------------*------------) -o(*---)o(---)o(-)390 2439 y(12)2290 b(*------------*------------)o(*--) -o(-)390 2542 y(13)2481 b(*------------*-----------)o(-)390 -2646 y(14)2672 b(*------------*--------)390 2750 y(15)2863 -b(*------------*----)390 2854 y(16)3054 b(*------------*)390 -2958 y(17)3245 b(*---------)390 3061 y(18)3436 b(*-----)390 -3165 y(19)3627 b(*-)150 3304 y Fc(S)30 b Fu(=)25 b(8,)31 -b Fc(J)k Fu(=)25 b(5,)31 b Fc(star)s(t)24 b Fu(=)h(28:)1822 -3437 y Fr(start)1822 3541 y(|)390 3644 y(0)47 b -(*-------*-------*-------*-)o(----)o(--*)390 3748 y(1)286 -b(*-------*-------*-------*)o(---)o(----)o(*)390 3852 -y(2)525 b(*-------*-------*------)o(-*--)o(----)o(-*)390 -3956 y(3)763 b(*-------*-------*-------*-)o(---)o(---*)390 -4060 y(4)1002 b(*-------*-------*-------)o(*---)o(----)o(*)390 -4163 y(5)1241 b(*-------*-------*------)o(-*--)o(---)o(--*)390 -4267 y(6)1479 b(*-------*-------*-------*)o(----)o(---*)390 -4371 y(7)1718 b(*-------*-------*-------)o(*---)o(---)o(-*)390 -4475 y(8)1957 b(*-------*-------*------)o(-*-)o(----)o(--*)390 -4578 y(9)2195 b(*-------*-------*-------*)o(----)o(---)o(*)390 -4682 y(10)2386 b(*-------*-------*-------)o(*--)o(-)390 -4786 y(11)2624 b(*-------*-------*------)390 4890 y(12)2863 -b(*-------*-------*-)390 4994 y(13)3102 b(*-------*----)390 -5097 y(14)3340 b(*-------)390 5201 y(15)3579 b(*--)150 -5340 y Fc(S)30 b Fu(=)25 b(9,)31 b Fc(J)k Fu(=)25 b(5,)31 -b Fc(star)s(t)24 b Fu(=)h(32:)p eop -%%Page: 47 52 -47 51 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(47)2013 299 y Fr(start)2013 -403 y(|)390 506 y(0)47 b(*--------*--------*-------)o(-*--)o(---)o -(---*)390 610 y(1)286 b(*--------*--------*------)o(--*)o(----)o(----)o -(*)390 714 y(2)525 b(*--------*--------*----)o(----)o(*---)o(---)o(--*) -390 818 y(3)763 b(*--------*--------*-------)o(-*-)o(----)o(---*)390 -922 y(4)1002 b(*--------*--------*-----)o(---*)o(----)o(---)o(-*)390 -1025 y(5)1241 b(*--------*--------*----)o(----)o(*--)o(----)o(--*)390 -1129 y(6)1479 b(*--------*--------*------)o(--*-)o(----)o(---)o(*)390 -1233 y(7)1718 b(*--------*--------*-----)o(---*)o(---)o(----)o(-*)390 -1337 y(8)1957 b(*--------*--------*----)o(---)o(-*--)o(----)o(--*)390 -1440 y(9)2195 b(*--------*--------*------)o(--*-)o(---)o(-)390 -1544 y(10)2386 b(*--------*--------*-----)o(---)o(*)390 -1648 y(11)2624 b(*--------*--------*----)390 1752 y(12)2863 -b(*--------*--------)390 1856 y(13)3102 b(*--------*---)390 -1959 y(14)3340 b(*-------)390 2063 y(15)3579 b(*--)150 -2234 y Fc(S)30 b Fu(=)25 b(6,)31 b Fc(J)k Fu(=)25 b(7,)31 -b Fc(star)s(t)24 b Fu(=)h(30:)1917 2400 y Fr(start)1917 -2504 y(|)390 2608 y(0)47 b(*-----*-----*-----*-----*-)o(----)o(*--)o -(---*)390 2711 y(1)382 b(*-----*-----*-----*----)o(-*-)o(----)o(*---)o -(--*)390 2815 y(2)716 b(*-----*-----*-----*----)o(-*--)o(---)o(*---)o -(--*)390 2919 y(3)1050 b(*-----*-----*-----*----)o(-*--)o(---*)o(---)o -(--*)390 3023 y(4)1384 b(*-----*-----*-----*-----)o(*--)o(---*)o(----)o -(-*)390 3126 y(5)1718 b(*-----*-----*-----*-----)o(*---)o(--*)o(----)o -(-*)390 3230 y(6)2052 b(*-----*-----*-----*-----)o(*---)o(--*-)o(---)o -(-)390 3334 y(7)2386 b(*-----*-----*-----*-----*)o(---)o(-)390 -3438 y(8)2720 b(*-----*-----*-----*---)390 3542 y(9)3054 -b(*-----*-----*--)390 3645 y(10)3340 b(*-----*-)390 3749 -y(11)3674 b(*)150 4047 y Fg(B.2.3)63 b(W)-10 b(ea)m(ving)40 -b(collisions)275 4277 y Fu(This)28 b(p)s(erfect)i(w)m(ea)m(v)m(e)j(is)c -(not)i(p)s(ossible)d(in)h(all)g(cases.)42 b(Let's)31 -b(lo)s(ok)f(at)h(another)g(example:)150 4448 y Fc(S)f -Fu(=)25 b(6,)31 b Fc(J)k Fu(=)25 b(4:)390 4614 y Fr(0)47 -b(*-----*-----*-----*)390 4717 y(1)238 b(*-----*-----*-----*)390 -4821 y(2)429 b(*-----*-----*-----*)390 4925 y(3)620 b -(*-----*-----*-----*)390 5029 y(4)g(^)143 b(*-^---*-----*-----*)390 -5132 y(5)620 b(|)143 b(^)48 b(|)f(*-^---*-----*-----*)1058 -5236 y(OUCH!)142 b(^)47 b(|)143 b(^)1440 5340 y(|)238 -b(|)p eop -%%Page: 48 53 -48 52 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(48)150 299 y(Here)26 -b(w)m(e)h(ha)m(v)m(e)g(a)f(collision.)37 b(Some)26 b(lines)e(prin)m -(ted)h(in)f(later)i(passes)g(o)m(v)m(erprin)m(t)g(lines)e(prin)m(ted)g -(b)m(y)i(earlier)150 408 y(passes.)40 b(W)-8 b(e)30 b(can)g(see)f(wh)m -(y)g(b)m(y)g(considering)e(whic)m(h)h(ro)m(w)h(n)m(um)m(b)s(er)f(is)g -(prin)m(ted)f(b)m(y)i(a)h(giv)m(en)f(jet)g(n)m(um)m(b)s(er)150 -518 y Fc(j)36 b Fu(\(n)m(um)m(b)s(ered)29 b(from)h(0\))h(of)g(a)g(giv)m -(en)f(pass,)g Fc(p)p Fu(:)390 655 y Fc(r)s(ow)r Fu(\()p -Fc(p;)63 b(j)5 b Fu(\))74 b(=)f Fc(p)20 b Fs(\003)h Fc(J)56 -b Fu(+)48 b Fc(j)26 b Fs(\003)20 b Fc(S)275 799 y Fu(Because)28 -b Fc(J)35 b Fu(=)25 b(4)i(and)g Fc(S)j Fu(=)25 b(6)j(ha)m(v)m(e)h(a)f -(common)f(factor)i(of)e(2,)i(jet)f(2)f(of)h(pass)f(0)h(prin)m(ts)d(the) -j(same)g(ro)m(w)150 908 y(as)j(jet)f(0)h(of)g(pass)f(3:)390 -1046 y Fc(r)s(ow)r Fu(\(0)p Fc(;)64 b Fu(2\))74 b(=)f(0)20 -b Fs(\003)h Fu(4)48 b(+)f(2)21 b Fs(\003)g Fu(6)73 b(=)g(12)390 -1150 y Fc(r)s(ow)r Fu(\(3)p Fc(;)64 b Fu(0\))74 b(=)f(3)20 -b Fs(\003)h Fu(4)48 b(+)f(0)21 b Fs(\003)g Fu(6)73 b(=)g(12)275 -1293 y(In)25 b(fact,)j(with)c(this)h(particular)f(w)m(ea)m(v)m(e)29 -b(pattern,)e(jets)f(0)g(and)g(1)g(of)g(pass)f Fc(p)p -Fu(+3)h(alw)m(a)m(ys)h(o)m(v)m(erprin)m(t)f(jets)150 -1402 y(2)33 b(and)g(3)g(of)g(pass)g Fc(p)p Fu(.)48 b(W)-8 -b(e'll)33 b(represen)m(t)g(o)m(v)m(erprin)m(ting)f(ro)m(ws)h(b)m(y)g(a) -g(`)p Fr(^)p Fu(')g(in)f(our)g(diagrams,)h(and)g(correct)150 -1512 y(ro)m(ws)d(b)m(y)h(`)p Fr(*)p Fu(':)150 1655 y -Fc(S)f Fu(=)25 b(6)31 b Fc(J)j Fu(=)25 b(4:)390 1793 -y Fr(0)47 b(*-----*-----*-----*)390 1896 y(1)238 b(*-----*-----*-----*) -390 2000 y(2)429 b(*-----*-----*-----*)390 2104 y(3)620 -b(^-----^-----*-----*)390 2208 y(4)811 b(^-----^-----*-----*)390 -2311 y(5)1002 b(^-----^-----*-----*)150 2553 y Fg(B.2.4)63 -b(What)40 b(mak)m(es)f(a)i(\\p)s(erfect")g(w)m(ea)m(v)m(e?)275 -2754 y Fu(So)30 b(what)g(causes)g(the)h(p)s(erfect)f(w)m(ea)m(v)m(e)i -(cases)f(to)g(b)s(e)f(p)s(erfect,)g(and)g(the)g(other)h(cases)g(not)f -(to)h(b)s(e?)40 b(In)150 2864 y(all)26 b(the)i(p)s(erfect)f(cases)h(ab) -s(o)m(v)m(e,)h Fc(S)j Fu(and)27 b Fc(J)36 b Fu(are)28 -b(relativ)m(ely)f(prime)e(\(i.e.)40 b(their)27 b(greatest)i(common)e -(divisor)150 2974 y(\(GCD\))40 b(is)f(1\).)68 b(As)39 -b(w)m(e)h(men)m(tioned)f(ab)s(o)m(v)m(e,)k Fc(S)i Fu(=)40 -b(6)f(and)g Fc(J)49 b Fu(=)40 b(4)g(ha)m(v)m(e)g(a)g(common)f(factor,)k -(whic)m(h)150 3083 y(causes)37 b(the)f(o)m(v)m(erprin)m(ting.)58 -b(Where)37 b Fc(S)k Fu(and)36 b Fc(J)46 b Fu(ha)m(v)m(e)37 -b(a)g(GCD)g(of)f(1,)j(they)d(ha)m(v)m(e)i(no)e(common)h(factor)150 -3193 y(other)c(than)f(1)h(and,)g(as)f(a)h(result,)g(no)f(o)m(v)m -(erprin)m(ting)g(o)s(ccurs.)47 b(If)32 b Fc(S)37 b Fu(and)32 -b Fc(J)42 b Fu(are)33 b(not)f(relativ)m(ely)g(prime,)150 -3302 y(their)d(common)i(factor)g(will)d(cause)j(o)m(v)m(erprin)m(ting.) -275 3446 y(W)-8 b(e)27 b(can)g(w)m(ork)f(out)h(the)f(greatest)i(common) -f(divisor)d(of)j(a)f(pair)g(of)g(natural)g(n)m(um)m(b)s(ers)e(using)h -(Euler's)150 3555 y(algorithm:)330 3698 y(Start)31 b(with)e(the)h(t)m -(w)m(o)i(n)m(um)m(b)s(ers:)39 b(\(e.g.\))k(9,)31 b(24)330 -3837 y(Sw)m(ap)f(them)g(if)g(necessary)g(so)h(that)g(the)f(larger)h -(one)f(comes)h(\014rst:)40 b(24,)32 b(9)330 3976 y(Subtract)e(the)h -(second)f(n)m(um)m(b)s(er)f(from)h(the)h(\014rst:)39 -b(15,)32 b(9)330 4115 y(Rep)s(eat)f(un)m(til)e(the)h(\014rst)g(n)m(um)m -(b)s(er)f(b)s(ecomes)h(smaller:)40 b(6,)31 b(9)330 4254 -y(Sw)m(ap)f(the)g(n)m(um)m(b)s(ers)f(again,)i(so)g(the)f(larger)g(one)h -(comes)g(\014rst:)40 b(9,)31 b(6)330 4393 y(Subtract)f(again:)41 -b(3,)31 b(6)330 4532 y(Sw)m(ap:)40 b(6,)31 b(3)330 4671 -y(Subtract:)40 b(3,)31 b(3)330 4809 y(And)e(again:)41 -b(0,)31 b(3)330 4948 y(When)25 b(one)h(of)f(the)h(n)m(um)m(b)s(ers)e(b) -s(ecomes)h(0,)i(the)f(other)f(n)m(um)m(b)s(er)f(is)h(the)g(GCD)h(of)f -(the)h(t)m(w)m(o)g(n)m(um)m(b)s(ers)330 5058 y(y)m(ou)31 -b(started)g(with.)275 5230 y(These)h(rep)s(eated)h(subtractions)e(can)i -(b)s(e)f(done)h(with)e(C's)h(`)p Fr(\045)p Fu(')h(op)s(erator,)h(so)f -(w)m(e)g(can)g(write)f(this)f(in)150 5340 y(C)f(as)h(follo)m(ws:)p -eop -%%Page: 49 54 -49 53 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(49)390 299 y Fr(unsigned)46 -b(int)390 403 y(gcd\(unsigned)e(int)j(x,)h(unsigned)d(int)i(y\))390 -506 y({)581 610 y(if)g(\(y)g(==)g(0\))772 714 y(return)f(x;)581 -818 y(while)g(\(x)h(!=)h(0\))f({)772 922 y(if)g(\(y)g(>)h(x\))963 -1025 y(swap)e(\(&x,)h(&y\);)772 1129 y(x)g(\045=)g(y;)581 -1233 y(})581 1337 y(return)f(y;)390 1440 y(})275 1590 -y Fu(`)p Fr(gcd\(S,J\))p Fu(')28 b(will)g(feature)j(quite)e(prominen)m -(tly)g(in)g(our)h(w)m(ea)m(ving)h(algorithm.)275 1739 -y(If)38 b(0)p Fc(<)i Fu(=)g Fc(j)5 b()25 -b Fu(=)g Fc(J)h Fs(\003)18 b Fc(S)33 b Fu(\(whic)m(h)28 -b(will)e(happ)s(en)i(when)f(w)m(e)j(\014nish)c(a)j(pass)150 -628 y(blo)s(c)m(k\).)275 769 y(So,)41 b(w)m(e)f(w)m(an)m(t)g(to)g -(\014nd)e Fc(p)h Fu(and)f Fc(q)k Fu(suc)m(h)d(that)h -Fc(p)26 b Fs(\003)g Fc(J)50 b Fu(=)39 b Fc(q)29 b Fs(\003)e -Fc(S)44 b Fu(and)39 b Fc(p)g Fu(is)f(minimised.)64 b(Then)38 -b Fc(p)h Fu(is)150 878 y(the)33 b(n)m(um)m(b)s(er)f(of)h(ro)m(ws)g(b)s -(efore)f(a)i(collision,)d(and)h Fc(q)k Fu(is)c(the)h(n)m(um)m(b)s(er)f -(of)h(jets)g(in)f(pass)g(0)i(whic)m(h)d(are)j(not)150 -988 y(in)m(v)m(olv)m(ed)27 b(in)f(the)i(collision.)37 -b(T)-8 b(o)28 b(do)f(this,)h(w)m(e)f(\014nd)f(the)i(lo)m(w)m(est)g -(common)g(m)m(ultiple)d(of)j Fc(J)36 b Fu(and)27 b Fc(S)5 -b Fu(,)28 b(whic)m(h)150 1098 y(is)34 b Fc(L)e Fu(=)h -Fc(J)f Fs(\003)24 b Fc(S=G)p Fu(.)54 b Fc(L=J)45 b Fu(is)34 -b(the)h(n)m(um)m(b)s(er)e(of)i(ro)m(ws)g(b)s(efore)f(a)h(collision,)f -(and)g Fc(L=S)40 b Fu(is)34 b(the)h(n)m(um)m(b)s(er)f(of)150 -1207 y(jets)d(in)e(the)h(\014rst)g(pass)g(not)h(in)m(v)m(olv)m(ed)f(in) -f(the)h(collision.)275 1348 y(Th)m(us,)40 b(w)m(e)g(see)g(that)f(the)h -(\014rst)e Fc(J)t(=G)i Fu(ro)m(ws)g(prin)m(ted)d(b)m(y)i(a)h(giv)m(en)f -(pass)g(are)g(not)h(o)m(v)m(erprin)m(ted)f(b)m(y)150 -1458 y(an)m(y)31 b(later)f(pass.)40 b(Ho)m(w)m(ev)m(er,)33 -b(the)d(rest)h(of)f(the)g(ro)m(ws)h(prin)m(ted)d(b)m(y)j(pass)e -Fc(p)h Fu(are)h(o)m(v)m(erprin)m(ted)f(b)m(y)g(the)h(\014rst)150 -1567 y Fc(J)f Fs(\000)21 b Fu(\()p Fc(J)t(=G)p Fu(\))33 -b(jets)f(of)g(pass)f Fc(p)p Fu(+\()p Fc(S=G)p Fu(\).)46 -b(W)-8 b(e)33 b(will)c(use)i Fc(C)38 b Fu(to)33 b(refer)e(to)i -Fc(S=G)p Fu(,)g(the)f(n)m(um)m(b)s(er)e(of)i(ro)m(ws)f(after)150 -1677 y(whic)m(h)e(a)i(collision)d(o)s(ccurs.)275 1818 -y(Another)i(example:)150 1959 y Fc(S)g Fu(=)25 b(6,)31 -b Fc(J)k Fu(=)25 b(9,)31 b Fc(G)25 b Fu(=)g(3,)31 b Fc(C)h -Fu(=)25 b Fc(S=G)h Fu(=)f(2:)390 2095 y Fr(0)47 b -(*-----*-----*-----*-----*-)o(----)o(*--)o(---*)o(----)o(-*-)o(----)o -(*)390 2198 y(1)477 b(*-----*-----*-----*-----)o(*---)o(--*-)o(---)o -(-*--)o(---*)o(---)o(--*)390 2302 y(2)907 b(^-----^-----^-----^----)o -(-^-)o(----)o(^---)o(--*)o(----)o(-*--)o(---)o(*)390 -2406 y(3)1336 b(^-----^-----^-----^-----^)o(---)o(--^-)o(----)o(*--)o -(---*)o(----)o(-*)390 2510 y(4)1766 b(^-----^-----^-----^----)o(-^--)o -(---)o(^---)o(--*-)o(---)o(-)390 2614 y(5)2195 b -(^-----^-----^-----^-----^)o(----)o(-^-)o(-)820 2717 -y(^^)47 b(^^)g(^^)g(^^)g(^^)g(^^)h(^^)f(^^)g(^^)g(^^)g(^^)h(^^)f(^^)g -(^^)g(^^)g(^^)g(^^)h(^^)f(^^)g(^^)g(^^)g(^^)h(^^)f(^^)1058 -2821 y(These)g(rows)f(need)h(filling)f(in.)150 2962 y -Fu(In)30 b(this)f(case,)j(the)e(\014rst)g Fc(J)f Fs(\000)20 -b Fu(\()p Fc(J)t(=G)p Fu(\))27 b(=)e(9)c Fs(\000)e Fu(9)p -Fc(=)p Fu(3)27 b(=)e(6)31 b(jets)f(of)h(pass)f Fc(p)p -Fu(+)o(\(6)p Fc(=)p Fu(3\))e(=)d Fc(p)p Fu(+)o(2)31 b(collide)e(with)g -(the)150 3072 y(last)h(6)h(jets)g(of)f(pass)g Fc(p)p -Fu(.)41 b(Only)28 b(one)j(ro)m(w)f(in)g(ev)m(ery)h Fc(G)25 -b Fu(=)g(2)31 b(ro)m(ws)g(is)e(prin)m(ted)g(b)m(y)h(this)f(w)m(ea)m(v)m -(e.)150 3213 y Fc(S)h Fu(=)25 b(9,)31 b Fc(J)k Fu(=)25 -b(6,)31 b Fc(G)25 b Fu(=)g(3,)31 b Fc(C)h Fu(=)25 b(3:)390 -3348 y Fr(0)47 b(*--------*--------*-------)o(-*--)o(---)o(---*)o(----) -o(---)o(-*)390 3452 y(1)334 b(*--------*--------*-----)o(---)o(*---)o -(----)o(-*-)o(----)o(---*)390 3556 y(2)620 b(*--------*--------*------) -o(--*-)o(---)o(----)o(*---)o(---)o(--*)390 3660 y(3)907 -b(^--------^--------^----)o(---)o(-^--)o(----)o(--*)o(----)o(----)o(*) -390 3763 y(4)1193 b(^--------^--------^-----)o(---^)o(---)o(----)o -(-*--)o(---)o(---*)390 3867 y(5)1479 b(^--------^--------^------)o -(--^-)o(----)o(---)o(*---)o(----)o(-*)150 4008 y Fu(Here,)32 -b(the)g(\014rst)e Fc(J)g Fs(\000)20 b Fu(\()p Fc(J)t(=G)p -Fu(\))29 b(=)d(6)21 b Fs(\000)g Fu(6)p Fc(=)p Fu(3)28 -b(=)e(4)32 b(jets)f(of)g(pass)g Fc(p)p Fu(+\(9)p Fc(=)p -Fu(3\))d(=)f Fc(p)p Fu(+)o(3)32 b(collide)d(with)h(the)i(last)f(4)150 -4118 y(jets)g(of)f(pass)g Fc(p)p Fu(.)275 4259 y(Note)36 -b(that,)i(in)c(these)i(o)m(v)m(erprin)m(ting)f(cases,)j(only)c(ro)m(ws) -i(divisible)31 b(b)m(y)36 b Fc(G)g Fu(are)g(ev)m(er)g(prin)m(ted.)54 -b(The)150 4369 y(other)31 b(ro)m(ws,)f(those)h(not)g(divisible)26 -b(b)m(y)31 b Fc(G)p Fu(,)g(are)f(not)h(touc)m(hed)g(b)m(y)f(this)f(w)m -(ea)m(v)m(e.)275 4510 y(W)-8 b(e)28 b(can)g(mo)s(dify)d(our)i(w)m(ea)m -(v)m(e)i(pattern)f(to)g(a)m(v)m(oid)g(o)m(v)m(erprin)m(ting)e(an)m(y)i -(ro)m(ws)f(and)g(sim)m(ultaneously)e(\014ll)150 4619 -y(in)30 b(the)i(missing)d(ro)m(ws.)44 b(Instead)31 b(of)h(using)e -Fc(J)41 b Fu(alone)31 b(to)h(determine)f(the)g(start)h(of)g(eac)m(h)h -(pass)e(from)g(the)150 4729 y(previous)c(pass,)h(w)m(e)h(adjust)f(the)g -(starting)g(p)s(osition)e(of)j(some)f(passes.)40 b(As)29 -b(men)m(tioned)e(b)s(efore,)i(w)m(e)g(will)150 4839 y(divide)c(the)i -(page)h(in)m(to)f(pass)g(blo)s(c)m(ks,)g(with)f Fc(S)32 -b Fu(passes)27 b(in)f(eac)m(h)i(blo)s(c)m(k.)40 b(This)25 -b(ensures)h(that)i(the)f(\014rst)f(jet)150 4948 y(of)j(the)h(\014rst)e -(pass)h(in)f(a)i(blo)s(c)m(k)f(prin)m(ts)e(the)j(ro)m(w)f(whic)m(h)f -(the)h Fc(J)9 b Fu(th)30 b(jet)f(of)h(the)f(\014rst)g(pass)g(of)g(the)g -(previous)150 5058 y(blo)s(c)m(k)h(w)m(ould)f(ha)m(v)m(e)j(prin)m(ted,) -d(if)g(the)i(prin)m(t)e(head)h(had)g(one)g(extra)h(jet.)275 -5199 y(Lo)s(oking)e(bac)m(k)i(at)h(an)e(example)g(of)g(a)h(p)s(erfect)f -(w)m(ea)m(v)m(e,)j(w)m(e)e(can)g(divide)d(it)i(in)m(to)g(pass)g(blo)s -(c)m(ks:)150 5340 y Fc(S)g Fu(=)25 b(7,)31 b Fc(J)k Fu(=)25 -b(2,)31 b Fc(G)25 b Fu(=)g(1:)p eop -%%Page: 51 56 -51 55 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(51)1154 299 y Fr(imaginary)45 -b(extra)h(jet)1154 403 y(|)390 506 y(0)h(*------*)285 -b(*)h(<--start)45 b(of)i(pass)g(block)f(0)390 610 y(1)143 -b(*------*)189 b(|)390 714 y(2)238 b(*------*)94 b(|)390 -818 y(3)334 b(*------*|)390 922 y(4)429 b(*-----|*)390 -1025 y(5)525 b(*---|--*)390 1129 y(6)620 b(*-|----*)1154 -1233 y(|)390 1337 y(7)716 b(*------*)93 b(<--start)45 -b(of)j(pass)e(block)h(1)390 1440 y(8)811 b(*------*)390 -1544 y(9)907 b(*------*)275 1679 y Fu(W)-8 b(e)33 b(can)f(no)m(w)g -(calculate)h(the)f(start)g(of)h(a)f(giv)m(en)g(pass)g(b)m(y)g -(reference)g(to)h(its)e(pass)h(blo)s(c)m(k.)45 b(The)32 -b(\014rst)150 1788 y(pass)k(of)h(pass)g(blo)s(c)m(k)f -Fc(b)h Fu(alw)m(a)m(ys)g(starts)g(at)h(ro)m(w)f(\()p -Fc(b)25 b Fs(\003)g Fc(S)k Fs(\003)c Fc(J)9 b Fu(\).)60 -b(The)37 b(start)g(ro)m(w)g(of)g(eac)m(h)h(of)f(the)g(other)150 -1898 y(passes)30 b(in)f(the)i(blo)s(c)m(k)f(are)h(calculated)f(using)f -(o\013sets)i(from)f(this)f(ro)m(w.)275 2033 y(F)-8 b(or)38 -b(the)f(example)g(ab)s(o)m(v)m(e,)k(there)d(are)f(7)h(passes)f(in)f -(eac)m(h)j(pass)e(blo)s(c)m(k,)i(and)e(their)f(o\013sets)j(are)e(0,)150 -2142 y(2,)f(4,)g(6,)f(8,)h(10)f(and)f(12.)53 b(The)34 -b(next)g(pass)g(blo)s(c)m(k)g(is)f(o\013set)i Fc(S)28 -b Fs(\003)23 b Fc(J)41 b Fu(=)31 b(14)k(ro)m(ws)f(from)g(the)h(start)f -(of)h(the)150 2252 y(curren)m(t)30 b(pass)g(blo)s(c)m(k.)275 -2387 y(The)c(simplest)g(w)m(a)m(y)i(to)g(mo)s(dify)d(the)i(\\p)s -(erfect")h(w)m(ea)m(v)m(e)i(pattern)d(to)h(giv)m(e)g(a)f(correct)i(w)m -(ea)m(v)m(e)g(in)d(cases)150 2496 y(where)37 b Fc(G)p -Fu(!)g(=)f(1)i(is)e(to)i(simply)d(c)m(hange)j(an)m(y)f(o\013sets)h -(whic)m(h)e(w)m(ould)g(result)g(in)g(a)i(collision,)e(un)m(til)g(the) -150 2606 y(collision)f(disapp)s(ears.)59 b(Ev)m(ery)37 -b(prin)m(ted)f(ro)m(w)h(in)f(the)h(w)m(ea)m(v)m(e,)k(as)d(w)m(e)f(ha)m -(v)m(e)i(sho)m(wn)d(it)h(up)f(to)i(no)m(w,)h(is)150 2715 -y(separated)g(from)g(eac)m(h)h(of)f(its)f(neigh)m(b)s(ouring)e(prin)m -(ted)h(ro)m(ws)i(b)m(y)g Fc(G)g Fu(blank)f(ro)m(ws.)66 -b(W)-8 b(e)40 b(will)c(add)i(an)150 2825 y(extra)29 b(o\013set)g(to)g -(eac)m(h)g(colliding)c(pass)j(in)f(suc)m(h)h(a)g(w)m(a)m(y)h(that)g(w)m -(e)f(push)f(the)h(pass)g(on)m(to)h(these)g(otherwise)150 -2935 y(blank)g(ro)m(ws.)275 3069 y(W)-8 b(e)33 b(ha)m(v)m(e)g(seen)f -(that,)h(unless)d Fc(G)e Fu(=)f(1,)33 b(the)f(plain)e(w)m(ea)m(v)m(e)k -(pattern)e(results)f(in)f(eac)m(h)j(pass)f(colliding)150 -3179 y(with)24 b(the)i(pass)f Fc(S=G)h Fu(passes)f(b)s(efore.)39 -b(W)-8 b(e)26 b(will)d(no)m(w)i(sub)s(divide)d(our)j(pass)g(blo)s(c)m -(k)g(in)m(to)g(subblo)s(c)m(ks,)g(eac)m(h)150 3288 y(consisting)k(of)i -Fc(B)f Fu(=)24 b Fc(S=G)32 b Fu(passes.)40 b(There)30 -b(are)h(therefore)g Fc(G)f Fu(subblo)s(c)m(ks)f(in)g(a)i(pass)f(blo)s -(c)m(k.)275 3423 y(F)-8 b(or)37 b(eac)m(h)i(subblo)s(c)m(k,)e(the)h -(passes)f(in)f(that)h(subblo)s(c)m(k)f(ha)m(v)m(e)i(a)g(constan)m(t)g -(o\013set)g(added)f(to)h(them.)150 3533 y(The)27 b(o\013set)h(is)e -(di\013eren)m(t)h(for)g(eac)m(h)h(subblo)s(c)m(k)d(in)h(a)i(blo)s(c)m -(k.)39 b(There)27 b(are)g(man)m(y)h(w)m(a)m(ys)f(w)m(e)h(can)g(c)m(ho)s -(ose)g(the)150 3642 y(o\013sets,)k(but)f(the)g(simplest)e(is)h(to)i -(mak)m(e)g(the)f(o\013set)h(equal)e(to)i(the)f(subblo)s(c)m(k)f(n)m(um) -m(b)s(er)f(\(starting)i(from)150 3752 y(0\).)275 3887 -y(Th)m(us,)42 b(the)e(passes)g(in)f(the)i(\014rst)e(subblo)s(c)m(k)g -(in)g(eac)m(h)j(pass)d(blo)s(c)m(k)h(remain)g(at)h(the)f(o\013sets)h(w) -m(e'v)m(e)150 3996 y(already)34 b(calculated)f(from)h -Fc(J)9 b Fu(.)51 b(The)34 b(passes)f(in)g(the)h(second)g(subblo)s(c)m -(k)e(eac)m(h)k(ha)m(v)m(e)f(1)f(added)f(to)i(their)150 -4106 y(o\013set,)d(the)f(passes)g(in)e(the)i(third)e(subblo)s(c)m(k)g -(ha)m(v)m(e)j(2)g(added,)e(and)g(so)h(on.)42 b(Th)m(us,)30 -b(the)h(o\013set)h(of)f(pass)f Fc(p)150 4215 y Fu(\(n)m(um)m(b)s(ered)f -(relativ)m(e)i(to)g(the)f(start)h(of)g(its)f(pass)g(blo)s(c)m(k\))g(is) -f Fc(p)20 b Fs(\003)h Fc(J)9 b Fu(+\015o)s(or)o(\()p -Fc(p=B)c Fu(\).)275 4350 y(This)28 b(giv)m(es)j(us)f(a)g(w)m(ea)m(v)m -(e)j(pattern)d(lo)s(oking)g(lik)m(e)f(this:)150 4485 -y Fc(S)h Fu(=)25 b(6,)31 b Fc(J)k Fu(=)25 b(9,)31 b Fc(G)25 -b Fu(=)g(3,)31 b Fc(B)f Fu(=)25 b(2:)390 4614 y Fr(0)47 -b(*-----*-----*-----*-----*-)o(----)o(*--)o(---*)o(----)o(-*-)o(----)o -(*)390 4717 y(1)g(^)382 b(*-----*-----*-----*-----)o(*---)o(--*-)o(---) -o(-*--)o(---*)o(---)o(--*)390 4821 y(2)47 b(|)668 b(+->)47 -b(*-----*-----*-----*-----*)o(----)o(-*--)o(---)o(*---)o(--*-)o(---)o -(-*)390 4925 y(3)g(|)668 b(|)573 b(*-----*-----*-----*-----)o(*--)o -(---*)o(----)o(-*-)o(----)o(*---)o(--*)390 5029 y(4)47 -b(|)668 b(|)859 b(+->)47 b(*-----*-----*-----*-----*)o(---)o(--*-)o -(----)o(*--)o(-)390 5132 y(5)g(|)668 b(|)859 b(|)573 -b(*-----*-----*-----*----)o(-*--)o(---)o(*)390 5236 y(6)47 -b(|)668 b(|)859 b(|)716 b(+->)47 b(*-----*-----*-----*----)o(-)390 -5340 y(7)g(|)668 b(|)859 b(|)716 b(|)572 b(*-----*-----*--)p -eop -%%Page: 52 57 -52 56 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(52)485 299 y Fr(|)668 -b(|)859 b(|)620 b(start)47 b(of)g(pass)g(block)f(1)485 -403 y(|)668 b(|)859 b(|)620 b(\(offset)46 b(returns)g(to)h(0\))485 -506 y(|)668 b(|)859 b(start)47 b(of)g(subblock)e(2)j(\(offset)e(2)h -(rows\))485 610 y(|)668 b(start)47 b(of)g(subblock)e(1)j(\(following)d -(passes)h(offset)g(by)h(1)h(row\))485 714 y(start)f(of)g(passblock)e -(0,)i(subblock)f(0)h(\(pass)g(start)f(calculated)f(as)i(p*J\))150 -857 y Fc(S)30 b Fu(=)25 b(9,)31 b Fc(J)k Fu(=)25 b(6,)31 -b Fc(G)25 b Fu(=)g(3,)31 b Fc(B)f Fu(=)25 b(3:)390 994 -y Fr(0)47 b(*--------*--------*-------)o(-*--)o(---)o(---*)o(----)o -(---)o(-*)390 1098 y(1)334 b(*--------*--------*-----)o(---)o(*---)o -(----)o(-*-)o(----)o(---*)390 1201 y(2)620 b(*--------*--------*------) -o(--*-)o(---)o(----)o(*---)o(---)o(--*)390 1305 y(3)954 -b(*--------*--------*------)o(--*-)o(----)o(---)o(*---)o(----)o(-*)390 -1409 y(4)1241 b(*--------*--------*----)o(----)o(*--)o(----)o(--*-)o -(---)o(----)o(*)390 1513 y(5)1527 b(*--------*--------*-----)o(---*)o -(----)o(---)o(-*--)o(----)o(--*)390 1616 y(6)1861 b -(*--------*--------*------)o(--*)o(----)o(----)o(*--)o(-)390 -1720 y(7)2147 b(*--------*--------*-------)o(-*--)o(---)o(-)390 -1824 y(8)2434 b(*--------*--------*-----)o(---)o(*)390 -1928 y(9)2625 b(*--------*--------*----)o(-)390 2032 -y(10)2386 b(\\---/)237 b(*--------*--------)390 2135 -y(11)2243 b(small)46 b(offset)332 b(*--------*--)390 -2239 y(12)3484 b(*----)275 2382 y Fu(This)25 b(metho)s(d)i(of)g(c)m(ho) -s(osing)g(o\013sets)h(for)g(subblo)s(c)m(ks)d(can)j(result)e(in)g(an)h -(o)s(ccasional)g(small)f(o\013set)i(\(as)150 2491 y(sho)m(wn)i(ab)s(o)m -(v)m(e\))h(b)s(et)m(w)m(een)g(one)f(pass)g(and)g(the)g(next,)h -(particularly)c(when)j Fc(G)g Fu(is)f(large)i(compared)f(to)h -Fc(J)9 b Fu(.)150 2601 y(F)-8 b(or)31 b(example:)150 -2744 y Fc(S)f Fu(=)25 b(8,)31 b Fc(J)k Fu(=)25 b(4,)31 -b Fc(G)25 b Fu(=)g(4,)31 b Fc(B)f Fu(=)25 b(2:)390 2881 -y Fr(0)47 b(*-------*-------*-------*)390 2985 y(1)238 -b(*-------*-------*-------*)390 3088 y(2)477 b -(*-------*-------*-------)o(*)390 3192 y(3)668 b -(*-------*-------*-------)o(*)390 3296 y(4)907 b -(*-------*-------*------)o(-*)390 3400 y(5)1097 b -(*-------*-------*-------*)390 3504 y(6)1336 b -(*-------*-------*-------*)390 3607 y(7)1527 b -(*-------*-------*-------)o(*)390 3711 y(8)1575 b -(*-------*-------*------)o(-*)390 3815 y(9)1527 b(\\/)143 -b(*-------*-------*------)o(-*)1822 3919 y(very)46 b(small)h(offset!) -275 4061 y Fu(W)-8 b(e)31 b(can)g(plot)f(the)g(o\013set)i(against)e -(the)h(subblo)s(c)m(k)e(n)m(um)m(b)s(er)g(as)h(follo)m(ws:)390 -4198 y Fr(subblock)46 b(number)390 4302 y(|)h(offset)390 -4406 y(|)g(|)390 4510 y(|)g(0123)390 4614 y(0)g(*)390 -4717 y(1)95 b(*)390 4821 y(2)143 b(*)390 4925 y(3)191 -b(*)390 5029 y(0)47 b(*)390 5132 y(1)95 b(*)390 5236 -y(2)143 b(*)390 5340 y(3)191 b(*)p eop -%%Page: 53 58 -53 57 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(53)150 299 y(The)30 -b(discon)m(tin)m(uit)m(y)f(in)g(this)g(plot)h(results)f(in)g(the)i -(small)e(o\013set)i(b)s(et)m(w)m(een)g(passes.)275 432 -y(As)36 b(w)m(e)h(said)f(at)i(the)e(b)s(eginning,)g(w)m(e)h(w)m(an)m(t) -h(the)f(o\013sets)h(from)e(eac)m(h)i(pass)e(to)h(the)g(next)g(to)h(b)s -(e)e(as)150 541 y(similar)21 b(as)i(p)s(ossible.)36 b(W)-8 -b(e)25 b(can)e(\014x)g(this)f(b)m(y)i(calculating)e(the)i(o\013set)g -(for)f(a)h(giv)m(en)f(subblo)s(c)m(k)f(b)h(as)h(follo)m(ws:)485 -669 y Fr(offset\(b\))46 b(=)h(2*b)620 b(,)47 b(if)g(b)h(<)f -(ceiling\(G/2\))963 772 y(=)g(2*\(G-b\)-1)332 b(,)47 -b(otherwise)275 905 y Fu(W)-8 b(e)31 b(can)g(visualise)d(this)h(as)i -(follo)m(ws,)f(for)g Fc(G)25 b Fu(=)g(10:)485 1033 y -Fr(0123456789)390 1136 y(0)47 b(*)390 1240 y(1)143 b(*)390 -1344 y(2)238 b(*)390 1448 y(3)334 b(*)390 1551 y(4)429 -b(*)390 1655 y(5)477 b(*)390 1759 y(6)382 b(*)390 1863 -y(7)286 b(*)390 1967 y(8)191 b(*)390 2070 y(9)95 b(*)390 -2174 y(0)47 b(*)390 2278 y(1)143 b(*)390 2382 y(2)238 -b(*)390 2485 y(3)334 b(*)390 2589 y(4)429 b(*)390 2693 -y(5)477 b(*)390 2797 y(6)382 b(*)390 2901 y(7)286 b(*)390 -3004 y(8)191 b(*)390 3108 y(9)95 b(*)150 3241 y Fu(and)30 -b(for)g Fc(G)c Fu(=)f(11:)1010 3368 y Fr(1)533 3472 y(01234567890)438 -3576 y(0)47 b(*)438 3680 y(1)143 b(*)438 3783 y(2)238 -b(*)438 3887 y(3)334 b(*)438 3991 y(4)429 b(*)438 4095 -y(5)524 b(*)438 4198 y(6)477 b(*)438 4302 y(7)381 b(*)438 -4406 y(8)286 b(*)438 4510 y(9)190 b(*)390 4614 y(10)95 -b(*)438 4717 y(0)47 b(*)438 4821 y(1)143 b(*)438 4925 -y(2)238 b(*)438 5029 y(3)334 b(*)438 5132 y(4)429 b(*)438 -5236 y(5)524 b(*)438 5340 y(6)477 b(*)p eop -%%Page: 54 59 -54 58 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(54)438 299 y Fr(7)381 -b(*)438 403 y(8)286 b(*)438 506 y(9)190 b(*)390 610 y(10)95 -b(*)150 747 y Fu(This)29 b(giv)m(es)h(a)h(w)m(ea)m(v)m(e)i(lo)s(oking)c -(lik)m(e)h(this:)150 884 y Fc(S)g Fu(=)25 b(12,)32 b -Fc(J)i Fu(=)25 b(6,)31 b Fc(G)26 b Fu(=)f(6,)31 b Fc(B)f -Fu(=)24 b(2:)390 1015 y Fr(0)47 b(*-----------*-----------*-)o(----)o -(---)o(---*)o(----)o(---)o(----)o(*---)o(---)o(----)o(-*)390 -1119 y(1)334 b(*-----------*-----------)o(*--)o(----)o(----)o(-*-)o -(----)o(----)o(--*)o(----)o(----)o(---)o(*)390 1222 y(2)716 -b(*-----------*----------)o(-*--)o(---)o(----)o(--*-)o(---)o(----)o -(---*)o(---)o(----)o(----)o(*)390 1326 y(3)1002 b -(*-----------*-----------)o(*---)o(----)o(---)o(-*--)o(----)o(---)o -(--*-)o(----)o(---)o(-)390 1430 y(4)1384 b(*-----------*-----------)o -(*--)o(----)o(----)o(-*-)o(----)o(----)o(--*)o(-)390 -1534 y(5)1670 b(*-----------*-----------*)o(----)o(---)o(----)o(*---)o -(---)o(-)390 1638 y(6)2004 b(*-----------*-----------*)o(----)o(----)o -(---)o(*)390 1741 y(7)2291 b(*-----------*----------)o(-*--)o(---)o(-) -390 1845 y(8)2482 b(*-----------*----------)o(-*-)o(-)390 -1949 y(9)2768 b(*-----------*--------)390 2053 y(10)2911 -b(*-----------*----)390 2156 y(11)3197 b(*----------)390 -2260 y(12)3436 b(*-----)275 2397 y Fu(This)28 b(metho)s(d)i(ensures)f -(that)i(the)f(o\013set)i(b)s(et)m(w)m(een)f(passes)f(is)f(alw)m(a)m(ys) -i(in)e(the)h(range)h([)p Fc(J)f Fs(\000)19 b Fu(2)p Fc(;)c(J)9 -b Fu(+)q(2].)275 2534 y(\(This)30 b(migh)m(t)h(seem)h(o)s(dd,)f(but)f -(it)h(o)s(ccurs)h(to)g(me)g(that)g(a)g(go)s(o)s(d)f(w)m(ea)m(v)m(e)j -(pattern)d(migh)m(t)g(also)h(mak)m(e)150 2643 y(a)e(go)s(o)s(d)f(score) -h(for)f(b)s(ell)e(ringers.)40 b(When)29 b(c)m(h)m(urc)m(h)g(b)s(ells)e -(are)j(rung,)f(a)h(list)e(of)h(\\c)m(hanges")j(are)e(used.)39 -b(F)-8 b(or)150 2753 y(example,)28 b(if)d(8)j(b)s(ells)c(are)k(b)s -(eing)d(used,)i(they)h(will,)d(at)i(\014rst,)h(b)s(e)e(rung)g(in)f -(order:)39 b(12345678.)k(If)27 b(the)g(\014rst)150 2863 -y(c)m(hange)k(is)d(for)h(b)s(ells)e(5)j(and)f(6,)h(the)g(b)s(ells)d -(will)g(then)i(b)s(e)g(rung)f(in)h(the)g(order)g(12346578.)44 -b(If)29 b(the)h(second)150 2972 y(c)m(hange)j(is)d(1)j(and)e(2,)h(the)g -(next)g(notes)g(are)g(21346578.)48 b(After)32 b(a)g(long)f(list)g(of)h -(c)m(hanges,)h(the)f(order)f(the)150 3082 y(b)s(ells)d(are)j(rung)e(in) -g(can)i(b)s(ecome)g(quite)f(complex.)275 3219 y(F)-8 -b(or)29 b(a)g(group)f(of)h(b)s(ell-ringers)d(to)j(c)m(hange)h(the)f -(order)f(of)h(the)g(notes,)g(they)g(m)m(ust)g(eac)m(h)h(either)e(dela)m -(y)150 3328 y(their)g(b)s(ell's)f(next)i(ring,)f(hasten)h(it,)g(or)g(k) -m(eep)h(it)e(the)i(same)f(as)g(the)g(time)g(it)f(tak)m(es)j(to)f(ring)d -(all)h(the)h(b)s(ells)150 3438 y(once.)40 b(The)27 b(length)f(of)h -(time)g(b)s(et)m(w)m(een)g(eac)m(h)i(ring)c(of)i(a)h(giv)m(en)f(b)s -(ell)d(can)k(only)e(b)s(e)g(c)m(hanged)i(a)f(little)f(eac)m(h)150 -3547 y(time,)39 b(though;)h(with)c(an)h(ink-jet)g(w)m(ea)m(v)m(e)i -(pattern,)h(w)m(e)d(w)m(an)m(t)h(the)g(same)f(to)h(apply)e(to)i(the)f -(distance)150 3657 y(b)s(et)m(w)m(een)31 b(passes.\))275 -3794 y(Finally)-8 b(,)44 b(kno)m(wing)f(the)g(n)m(um)m(b)s(er)e(of)j -(jets)f Fc(J)52 b Fu(and)42 b(their)g(separation)h Fc(S)5 -b Fu(,)47 b(w)m(e)c(can)g(calculate)h(the)150 3903 y(starting)30 -b(ro)m(w)h(of)f(an)m(y)h(giv)m(en)f(pass)g Fc(p)g Fu(as)h(follo)m(ws:) -390 4034 y Fr(passesperblock)44 b(=)j(S)390 4138 y(passblock)e(=)j -(floor\(p)e(/)h(passesperblock\))390 4242 y(offsetinpassblock)c(=)48 -b(p)f(-)g(passblock)f(*)h(passesperblock)390 4346 y(subblocksperblock)c -(=)48 b(gcd\(S,)e(J\))390 4449 y(passespersubblock)d(=)48 -b(S)f(/)g(subblocksperblock)390 4553 y(subpassblock)d(=)k -(floor\(offsetinpassblock)41 b(/)48 b(passespersubblock\))390 -4657 y(if)f(subpassblock)e(<)i(ceiling\(subblocksperblock)o(/2\))581 -4761 y(subblockoffset)d(=)j(2*subpassblock)390 4865 y(else)581 -4968 y(subblockoffset)d(=)j(2*\(subblocksperblock-subp)o(assb)o(lock)o -(\)-1)390 5072 y(startingrow)e(=)i(passblock)e(*)j(S)f(*)h(J)f(+)h -(offsetinpassblock)43 b(*)k(J)h(+)f(subblockoffset)275 -5209 y Fu(W)-8 b(e)31 b(can)g(simplify)c(this)i(do)m(wn)h(to)h(the)g -(follo)m(wing:)390 5340 y Fr(subblocksperblock)43 b(=)48 -b(gcd\(S,)e(J\))p eop -%%Page: 55 60 -55 59 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(55)390 299 y Fr(subpassblock)44 -b(=)k(floor\(\(p)d(\045)j(S\))f(*)h(subblocksperblock)43 -b(/)k(S\))390 403 y(if)g(subpassblock)e(*)i(2)h(<)f(subblocksperblock) -581 506 y(subblockoffset)d(=)j(2*subpassblock)390 610 -y(else)581 714 y(subblockoffset)d(=)j(2*\(subblocksperblock-subp)o -(assb)o(lock)o(\)-1)390 818 y(startingrow)e(=)i(p)h(*)f(J)h(+)f -(subblockoffset)275 956 y Fu(So)30 b(the)g(ro)m(w)h(n)m(um)m(b)s(er)e -(of)h(jet)h Fc(j)36 b Fu(of)31 b(pass)f Fc(p)g Fu(is)390 -1088 y Fr(subblocksperblock)43 b(=)48 b(gcd\(S,)e(J\))390 -1295 y(subblockoffset\(p\))581 1399 y(=)h(2*subpassblock)331 -b(,)47 b(if)g(subpassblock)e(*)i(2)h(<)f(subblocksperblock)581 -1503 y(=)g(2*\(subblocksperblock-subpa)o(ssb)o(lock)o(\)-1)280 -b(,)47 b(otherwise)676 1607 y(where)676 1710 y(subpassblock)e(=)i -(floor\(\(p)f(\045)h(S\))g(*)h(subblocksperblock)43 b(/)k(S\))390 -1918 y(row\(j,)f(p\))h(=)h(p)f(*)h(J)f(+)h(subblockoffset\(p\))43 -b(+)k(j)h(*)f(S)275 2056 y Fu(T)-8 b(ogether)26 b(with)e(the)h -(inequalit)m(y)f(0)p Fc(<)h Fu(=)g Fc(j)5 b(<)q(J)k Fu(,)26 -b(w)m(e)g(can)g(use)f(this)f(de\014nition)f(in)h(rev)m(erse)i(to)g -(calculate)150 2166 y(the)35 b(pass)g(n)m(um)m(b)s(er)e(con)m(taining)i -(a)g(giv)m(en)g(ro)m(w,)h Fc(r)s Fu(.)54 b(W)-8 b(orking)35 -b(out)g(the)g(in)m(v)m(erse)g(de\014nition)e(in)m(v)m(olv)m(es)i(a)150 -2275 y(little)28 b(guessw)m(ork,)i(but)e(one)h(p)s(ossible)e(result)h -(is)g(as)i(follo)m(ws.)39 b(Giv)m(en)29 b(a)g(ro)m(w,)h -Fc(r)s Fu(,)f(whic)m(h)f(is)g(kno)m(wn)h(to)h(b)s(e)150 -2385 y(the)h(\014rst)e(ro)m(w)i(of)f(a)h(pass,)f(w)m(e)h(can)g -(calculate)g(the)f(pass)g(n)m(um)m(b)s(er)f(as)i(follo)m(ws:)390 -2517 y Fr(subblocksperblock)43 b(=)48 b(gcd\(S,)e(J\))390 -2621 y(subblockoffset)e(=)j(r)h(\045)f(subblocksperblock)390 -2724 y(pass)g(=)g(\(r)g(-)h(subblockoffset\))43 b(/)48 -b(J)275 2862 y Fu(If)29 b Fc(G)d Fu(==)f(1,)31 b(w)m(e)g(can)f -(determine)g(the)g(pass)g(n)m(um)m(b)s(er)f(with)h(this)f(algorithm:) -390 2994 y Fr(offset)46 b(=)i(r)f(\045)g(J)390 3098 y(pass)g(=)g(\(r)g -(-)h(offset\))e(/)h(J)390 3202 y(while)f(\(offset)g(\045)i(S)f(!=)g -(0\))390 3306 y({)485 3410 y(pass--)485 3513 y(offset)g(+=)g(J)390 -3617 y(})390 3721 y(jet)g(=)g(offset)f(/)i(S)275 3859 -y Fu(Generalising,)28 b(w)m(e)j(come)h(up)d(with)g(this)g(algorithm.)40 -b(Giv)m(en)30 b Fc(r)s Fu(,)g Fc(S)36 b Fu(and)29 b Fc(J)9 -b Fu(:)390 3991 y Fr(G)47 b(=)h(gcd\(S,)e(J\))390 4095 -y(passespersubblock)d(=)48 b(S/G)390 4198 y(subblockoffset)c(=)j(r)h -(\045)f(G)390 4302 y(subpassblock)d(=)k(subblockoffset)c(/)j(2)95 -b(,)48 b(if)f(subblockoffset)d(\045)j(2)h(==)f(0)1010 -4406 y(=)h(G)f(-)h(\(subblockoffset+1\)/2)185 b(,)48 -b(otherwise)390 4510 y(baserow)e(=)h(r)h(-)f(subblockoffset)d(-)k -(\(subpassblock)c(*)j(passespersubblock)c(*)48 b(J\))390 -4614 y(offset)e(=)i(baserow)d(\045)j(J)390 4717 y(pass)f(=)g(\(baserow) -f(-)h(offset\))f(/)h(J)390 4821 y(while)f(\(offset)g(\045)i(S)f(!=)g -(0\))390 4925 y({)485 5029 y(offset)g(+=)g(J)485 5132 -y(pass)g(-=)g(1)390 5236 y(})390 5340 y(subblockretreat)d(=)j -(floor\(pass)e(/)j(passespersubblock\))42 b(\045)48 b(G)p -eop -%%Page: 56 61 -56 60 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(56)390 299 y Fr(pass)47 -b(-=)g(subblockretreat)c(*)48 b(passespersubblock)390 -403 y(pass)f(+=)g(subpassblock)d(*)k(passespersubblock)390 -506 y(jet)f(=)g(\(r)h(-)f(subblockoffset)d(-)j(pass)g(*)g(J\))h(/)f(S) -275 646 y Fu(Let's)31 b(lo)s(ok)e(at)j(some)e(examples)g(of)h(imp)s -(erfect)e(but)h(correct)h(w)m(ea)m(v)m(e)i(patterns:)150 -785 y Fc(S)d Fu(=)25 b(6,)31 b Fc(J)k Fu(=)25 b(4,)31 -b(GCD)25 b(=)g(2,)150 895 y(passesp)s(erblo)s(c)m(k=)p -Fc(S)5 b Fu(=6,)150 1005 y(passesp)s(ersubblo)s(c)m(k=)p -Fc(S=G)p Fu(=6/2=3:)390 1138 y Fr(0)47 b(*-----*-----*-----*)390 -1242 y(1)238 b(*-----*-----*-----*)390 1346 y(2)429 b -(*-----*-----*-----*)390 1450 y(3)668 b(*-----*-----*-----*)390 -1553 y(4)859 b(*-----*-----*-----*)390 1657 y(5)1050 -b(*-----*-----*-----*)390 1761 y(6)1193 b(*-----*-----*-----*)390 -1865 y(7)1384 b(*-----*-----*-----*)390 1968 y(8)1575 -b(*-----*-----*-----*)390 2072 y(9)1813 b(*-----*-----*-----*)390 -2176 y(10)1956 b(*-----*-----*-----*)390 2280 y(11)2147 -b(*-----*-----*-----*)390 2384 y(12)2290 b(*-----*-----*-----*)390 -2487 y(13)2481 b(*-----*-----*-----*)390 2591 y(14)2672 -b(*-----*-----*-----*)390 2695 y(15)2911 b(*-----*-----*----)390 -2799 y(16)3102 b(*-----*-----*)390 2902 y(17)3293 b(*-----*--)390 -3006 y(18)3436 b(*-----)390 3110 y(19)3627 b(*-)150 3249 -y Fc(S)30 b Fu(=)25 b(8,)31 b Fc(J)k Fu(=)25 b(6,)31 -b Fc(G)25 b Fu(=)g(2,)150 3359 y(passesp)s(erblo)s(c)m(k=)p -Fc(S)5 b Fu(=8,)150 3469 y(passesp)s(ersubblo)s(c)m(k=)p -Fc(S=G)p Fu(=8/2=4:)390 3602 y Fr(0)47 b(*-------*-------*-------*-)o -(----)o(--*)o(----)o(---*)390 3706 y(1)334 b(*-------*-------*-------)o -(*--)o(----)o(-*--)o(---)o(--*)390 3810 y(2)620 b -(*-------*-------*-------*)o(----)o(---)o(*---)o(----)o(*)390 -3914 y(3)907 b(*-------*-------*------)o(-*-)o(----)o(--*-)o(---)o -(---*)390 4017 y(4)1241 b(*-------*-------*------)o(-*--)o(---)o(--*-)o -(----)o(--*)390 4121 y(5)1527 b(*-------*-------*-------)o(*---)o(----) -o(*--)o(----)o(-*)390 4225 y(6)1813 b(*-------*-------*-------*-)o(---) -o(---*)o(----)o(---)o(*)390 4329 y(7)2100 b(*-------*-------*------)o -(-*--)o(----)o(-*-)o(-)390 4433 y(8)2338 b(*-------*-------*-------*-)o -(---)o(-)390 4536 y(9)2625 b(*-------*-------*------)o(-)390 -4640 y(10)2863 b(*-------*-------*-)390 4744 y(11)3149 -b(*-------*---)390 4848 y(12)3484 b(*----)150 4987 y -Fc(S)30 b Fu(=)25 b(6,)31 b Fc(J)k Fu(=)25 b(12,)31 b -Fc(G)26 b Fu(=)f(6,)150 5097 y(passesp)s(erblo)s(c)m(k=)p -Fc(S)5 b Fu(=6,)150 5206 y(passesp)s(ersubblo)s(c)m(k=)p -Fc(S=G)p Fu(=6/6=1:)390 5340 y Fr(0)47 b(*-----*-----*-----*-----*-)o -(----)o(*--)o(---*)o(----)o(-*-)o(----)o(*---)o(--*)o(----)o(-*--)o -(---)o(*)p eop -%%Page: 57 62 -57 61 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(57)390 299 y Fr(1)716 -b(*-----*-----*-----*----)o(-*--)o(---)o(*---)o(--*-)o(---)o(-*--)o -(---*)o(---)o(--*-)o(----)o(*--)o(-)390 403 y(2)1384 -b(*-----*-----*-----*-----)o(*--)o(---*)o(----)o(-*-)o(----)o(*---)o -(--*)o(-)390 506 y(3)2004 b(*-----*-----*-----*-----*)o(----)o(-*--)o -(---)o(*)390 610 y(4)2482 b(*-----*-----*-----*----)o(-*-)o(-)390 -714 y(5)2959 b(*-----*-----*----)390 818 y(6)3484 b(*-----)275 -962 y Fu(W)-8 b(e)34 b(ha)m(v)m(e)h(no)m(w)f(solv)m(ed)f(the)h(basic)f -(w)m(ea)m(ving)h(problem.)49 b(There)33 b(are)h(t)m(w)m(o)h(further)d -(re\014nemen)m(ts)h(w)m(e)150 1071 y(need)d(to)h(consider:)40 -b(o)m(v)m(ersampling,)30 b(and)g(\014lling)d(in)i(the)i(missing)d(ro)m -(ws)i(at)h(the)g(start)g(of)g(the)f(w)m(ea)m(v)m(e.)150 -1315 y Fg(B.2.5)63 b(Ov)m(ersampling)275 1517 y Fu(By)37 -b(o)m(v)m(ersampling,)i(w)m(e)f(mean)f(prin)m(ting)e(on)i(the)h(same)g -(ro)m(w)f(more)h(than)f(once.)62 b(There)37 b(are)h(t)m(w)m(o)150 -1626 y(reasons)25 b(for)g(o)m(v)m(ersampling:)38 b(to)26 -b(increase)f(the)h(horizon)m(tal)e(resolution)g(of)i(the)f(prin)m(tout) -f(and)h(to)h(reduce)150 1736 y(banding.)275 1880 y(Ov)m(ersampling)21 -b(to)k(increase)e(horizon)m(tal)h(resolution)e(is)h(necessary)h(b)s -(ecause,)h(although)e(the)h(prin)m(ter)150 1990 y(migh)m(t)30 -b(b)s(e)h(able)f(to)h(p)s(osition)e(an)i(ink)e(drop)h(to,)h(for)g -(example,)g(1/1440)p Fr(")i Fu(horizon)m(tally)-8 b(,)30 -b(it)g(ma)m(y)i(not)f(b)s(e)150 2099 y(able)37 b(to)g(la)m(y)h(do)m(wn) -e(t)m(w)m(o)j(suc)m(h)d(drops)g(1/1440)p Fr(")k Fu(apart.)61 -b(If)36 b(it)h(can)g(prin)m(t)f(t)m(w)m(o)i(drops)e(1/720)p -Fr(")j Fu(apart,)150 2209 y(2x)g(o)m(v)m(ersampling)g(will)d(b)s(e)j -(necessary)h(to)f(get)i(a)e(1/1440)p Fr(")j Fu(horizon)m(tal)c -(resolution.)66 b(If)39 b(it)f(can)i(only)150 2318 y(prin)m(t)33 -b(t)m(w)m(o)i(drops)e(1/360)p Fr(")j Fu(apart,)f(4x)g(o)m(v)m -(ersampling)e(will)f(b)s(e)h(necessary)i(for)e(a)i(1/1440)p -Fr(")h Fu(horizon)m(tal)150 2428 y(resolution.)j(The)29 -b(prin)m(ter)f(enforces)i(this)f(\\drop)g(spacing")g(b)m(y)h(only)f -(accepting)h(raster)g(passes)f(with)g(a)150 2538 y(horizon)m(tal)k -(resolution)e(matc)m(hing)j(the)f(spacing)f(with)g(whic)m(h)g(it)g(can) -i(prin)m(t)d(dots,)k(so)e(w)m(e)g(m)m(ust)g(prin)m(t)150 -2647 y(passes)k(at)h(di\013eren)m(t)e(horizon)m(tal)h(p)s(ositions)e -(if)h(w)m(e)i(are)g(to)f(obtain)g(a)h(higher)d(horizon)m(tal)i -(resolution.)150 2757 y(\(Another)24 b(reason)g(it)f(do)s(es)g(this)g -(ma)m(y)h(b)s(e)f(to)i(reduce)e(the)h(amoun)m(t)g(of)g(memory)f(needed) -h(in)e(the)i(prin)m(ter.\))275 2901 y(Ov)m(ersampling)42 -b(can)j(also)f(b)s(e)g(done)g(to)h(decrease)g(the)g(banding)d(apparen)m -(t)j(in)e(an)h(image.)83 b(By)150 3010 y(splitting)32 -b(a)j(ro)m(w)f(in)m(to)h(t)m(w)m(o)g(or)g(more)f(sets)h(of)g(dots)f -(\(\\lines"\))g(and)g(prin)m(ting)e(eac)m(h)k(line)d(on)h(the)h(same) -150 3120 y(ro)m(w,)c(but)e(with)g(a)i(di\013eren)m(t)f(nozzle)h(for)f -(eac)m(h)h(line,)e(w)m(e)i(can)g(get)g(a)g(smo)s(other)f(prin)m(t.)275 -3264 y(T)-8 b(o)23 b(quan)m(tify)f(these)h(t)m(w)m(o)h(kinds)d(of)i(o)m -(v)m(ersampling,)h(w)m(e'll)e(in)m(tro)s(duce)f(t)m(w)m(o)j(new)f -(constan)m(ts:)38 b Fc(H)29 b Fu(sho)m(ws)150 3374 y(ho)m(w)k(man)m(y)h -(di\013eren)m(t)e(horizon)m(tal)h(o\013sets)h(w)m(e)g(w)m(an)m(t)g(to)g -(prin)m(t)e(at)i(\(the)f(\\horizon)m(tal)h(o)m(v)m(ersampling"\))150 -3483 y(while)c Fc(O)35 b Fu(sho)m(ws)d(ho)m(w)h(man)m(y)f(times)g(w)m -(e)h(w)m(an)m(t)g(to)g(prin)m(t)e(eac)m(h)i(ro)m(w,)g(o)m(v)m(er)h(and) -e(ab)s(o)m(v)m(e)h(the)g(n)m(um)m(b)s(er)e(of)150 3593 -y(times)f(necessary)h(for)f(horizon)m(tal)g(o)m(v)m(ersampling)g(\(the) -h(\\extra)g(o)m(v)m(ersampling"\).)275 3737 y(It)26 b(is)f(necessary)i -(for)f(all)g(the)g(lines)f(prin)m(ted)g(b)m(y)h(a)h(giv)m(en)f(pass)g -(to)i(ha)m(v)m(e)f(the)g(same)g(horizon)m(tal)f(o\013set,)150 -3846 y(but)32 b(there)h(need)g(not)g(b)s(e)f(an)m(y)i(relation)e(b)s -(et)m(w)m(een)h(them)g(in)f(terms)h(of)g(extra)g(o)m(v)m(ersampling.)48 -b(F)-8 b(or)34 b(the)150 3956 y(momen)m(t,)29 b(ho)m(w)m(ev)m(er,)h(w)m -(e)e(will)e(treat)i(all)f(o)m(v)m(ersampling)g(as)h(p)s(oten)m(tially)f -(requiring)e(this)i(alignmen)m(t;)h(all)150 4066 y(lines)i(in)h(one)i -(pass)f(m)m(ust)g(b)s(e)f(deriv)m(ed)h(from)f(the)i(original)d(ro)m(w)i -(data)h(in)e(the)i(same)f(w)m(a)m(y)-8 b(.)48 b(Th)m(us,)32 -b(w)m(e'll)150 4175 y(assume)e Fc(O)e Fu(=)d(1)31 b(for)f(no)m(w.)275 -4319 y(So,)j(ho)m(w)f(do)g(w)m(e)h(do)f(this)g(o)m(v)m(ersampling?)45 -b(In)32 b(fact,)i(it)e(can)h(b)s(e)e(done)i(easily:)43 -b(adv)-5 b(ance)33 b(the)g(pap)s(er)150 4429 y(b)m(y)42 -b(a)g(factor)g(of)g Fc(H)49 b Fu(less)41 b(b)s(et)m(w)m(een)h(eac)m(h)h -(pass.)74 b(W)-8 b(e'll)42 b(de\014ne)f(a)h(new)f(v)-5 -b(ariable,)44 b Fc(A)p Fu(,)h(to)d(sho)m(w)g(ho)m(w)150 -4538 y(m)m(uc)m(h)31 b(w)m(e)g(adv)-5 b(ance)32 b(the)f(pap)s(er)f(b)s -(et)m(w)m(een)i(passes.)42 b(Previously)-8 b(,)30 b(w)m(e'd)h(ha)m(v)m -(e)i(de\014ned)c Fc(A)e Fu(=)f Fc(J)9 b Fu(;)31 b(w)m(e)h(no)m(w)150 -4648 y(let)37 b Fc(A)e Fu(=)h Fc(J)t(=H)7 b Fu(.)60 b(This)35 -b(also)h(a\013ects)i(our)e(pass)h(blo)s(c)m(ks.)58 b(Prin)m(ting)35 -b(one)i(pass)f(blo)s(c)m(k)h(used)e(to)j(in)m(v)m(olv)m(e)150 -4758 y(adv)-5 b(ancing)35 b(the)i(pap)s(er)d Fc(S)29 -b Fs(\003)c Fc(J)45 b Fu(ro)m(ws;)39 b(it)c(no)m(w)h(adv)-5 -b(ances)37 b(the)f(pap)s(er)f Fc(S)29 b Fs(\003)24 b -Fc(J)t(=H)44 b Fu(ro)m(ws.)57 b(W)-8 b(e)37 b(therefore)150 -4867 y(name)31 b(a)g(group)f(of)g Fc(H)38 b Fu(pass)30 -b(blo)s(c)m(ks)g(a)h(\\band".)41 b(Prin)m(ting)28 b(one)j(band)f(in)m -(v)m(olv)m(es)g(adv)-5 b(ancing)30 b(the)h(pap)s(er)150 -4977 y Fc(S)25 b Fs(\003)c Fc(J)39 b Fu(ro)m(ws,)31 b(as)g(a)f(pass)g -(blo)s(c)m(k)g(did)f(b)s(efore.)275 5121 y(T)-8 b(o)28 -b(k)m(eep)g(our)f(w)m(ea)m(v)m(e)j(pattern)e(w)m(orking)f(correctly)-8 -b(,)29 b(so)f(that)g(o)m(v)m(erprin)m(ting)f(do)s(es)g(not)h(o)s(ccur)f -(within)150 5230 y(a)c(pass)g(blo)s(c)m(k,)h(w)m(e)g(also)f(ha)m(v)m(e) -h(to)g(rede\014ne)e Fc(G)h Fu(as)h(GCD\()p Fc(S;)15 b(A)p -Fu(\).)40 b(Here's)23 b(an)g(example)g(of)g(an)g(o)m(v)m(ersampled)150 -5340 y(w)m(ea)m(v)m(e)33 b(pattern:)p eop -%%Page: 58 63 -58 62 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(58)150 299 y Fc(S)30 -b Fu(=)25 b(4,)31 b Fc(J)k Fu(=)25 b(10,)31 b Fc(H)h -Fu(=)25 b(2,)31 b Fc(A)26 b Fu(=)f Fc(J)t(=H)32 b Fu(=)25 -b(10)p Fc(=)p Fu(2)i(=)e(5,)31 b Fc(G)26 b Fu(=)f(GCD\(4)p -Fc(;)15 b Fu(5\))28 b(=)d(1,)150 408 y(passesp)s(erblo)s(c)m(k=)p -Fc(S)5 b Fu(=4,)150 518 y(passesp)s(ersubblo)s(c)m(k=)p -Fc(S=G)p Fu(=4/1=4:)390 656 y Fr(0)47 b(*---*---*---*---*---*---*-)o -(--*-)o(--*)o(---*)390 760 y(1)286 b(*---*---*---*---*---*---*)o(---)o -(*---)o(*---)o(*)390 863 y(2)525 b(*---*---*---*---*---*--)o(-*--)o -(-*--)o(-*-)o(--*)390 967 y(3)763 b(*---*---*---*---*---*---*-)o(--*)o -(---*)o(---*)390 1071 y(4)1002 b(*---*---*---*---*---*---)o(*---)o -(*---)o(*--)o(-*)390 1175 y(5)1241 b(*---*---*---*---*---*--)o(-*--)o -(-*-)o(--*-)o(--*)390 1278 y(6)1479 b(*---*---*---*---*---*---*)o(---*) -o(---*)o(---)o(*)390 1382 y(7)1718 b(*---*---*---*---*---*---)o(*---)o -(*--)o(-*--)o(-*)390 1486 y(8)1957 b(*---*---*---*---*---*--)o(-*-)o -(--*-)o(--*-)o(--*)390 1590 y(9)2195 b(*---*---*---*---*---*---*)o -(---*)o(---)o(*)390 1694 y(10)2386 b(*---*---*---*---*---*---)o(*--)o -(-)390 1797 y(11)2624 b(*---*---*---*---*---*--)390 1901 -y(12)2863 b(*---*---*---*---*-)390 2005 y(13)3102 b(*---*---*---*)390 -2109 y(14)3340 b(*---*---)390 2212 y(15)3579 b(*--)275 -2356 y Fu(No)m(w)30 b(w)m(e)h(ha)m(v)m(e)g(to)g(determine)e(whic)m(h)g -(line)g(is)g(prin)m(ted)g(b)m(y)h(eac)m(h)h(jet)f(on)g(eac)m(h)i(pass.) -40 b(If)30 b(w)m(e)g(n)m(um)m(b)s(er)150 2465 y(eac)m(h)f(line)e -(generated)i(as)g(w)m(e)f(split)e(up)i(a)g(ro)m(w,)h(w)m(e)g(can)f(use) -g(these)h(n)m(um)m(b)s(ers.)38 b(W)-8 b(e'll)28 b(n)m(um)m(b)s(er)f -(the)i(lines)150 2575 y(in)g(our)h(diagram)g(b)m(y)g(replacing)f(the)i -(`)p Fr(*)p Fu('s)f(with)f(in)m(tegers)i(in)e(the)h(range)h([0)6 -b(.)23 b(.)f(.)11 b Fc(H)27 b Fs(\000)20 b Fu(1].)275 -2719 y(Ov)m(erprin)m(ting)30 b(o)s(ccurs)j(once)g(p)s(er)f(pass)g(blo)s -(c)m(k,)h(so)g(w)m(e)h(can)f(simply)d(prin)m(t)h(pass)i(blo)s(c)m(k)f -(0)h(with)f(line)150 2828 y(0,)e(pass)f(blo)s(c)m(k)f(1)h(with)f(line)g -(1,)h(pass)g(blo)s(c)m(k)g(2)g(with)f(line)f(2,)j(etc,)h(wrapping)26 -b(to)k(0)g(when)e(w)m(e'v)m(e)i(run)e(out)150 2938 y(of)j(lines:)390 -3075 y Fr(0)47 b(0---0---0---0---0---0---0-)o(--0-)o(--0)o(---0)390 -3179 y(1)286 b(0---0---0---0---0---0---0)o(---)o(0---)o(0---)o(0)390 -3283 y(2)525 b(0---0---0---0---0---0--)o(-0--)o(-0--)o(-0-)o(--0)390 -3387 y(3)763 b(0---0---0---0---0---0---0-)o(--0)o(---0)o(---0)390 -3491 y(4)1002 b(1---1---1---1---1---1---)o(1---)o(1---)o(1--)o(-1)390 -3594 y(5)1241 b(1---1---1---1---1---1--)o(-1--)o(-1-)o(--1-)o(--1)390 -3698 y(6)1479 b(1---1---1---1---1---1---1)o(---1)o(---1)o(---)o(1)390 -3802 y(7)1718 b(1---1---1---1---1---1---)o(1---)o(1--)o(-1--)o(-1)390 -3906 y(8)1957 b(0---0---0---0---0---0--)o(-0-)o(--0-)o(--0-)o(--0)390 -4009 y(9)2195 b(0---0---0---0---0---0---0)o(---0)o(---)o(0)390 -4113 y(10)2386 b(0---0---0---0---0---0---)o(0--)o(-)390 -4217 y(11)2624 b(0---0---0---0---0---0--)390 4321 y(12)2863 -b(1---1---1---1---1-)390 4425 y(13)3102 b(1---1---1---1)390 -4528 y(14)3340 b(1---1---)390 4632 y(15)3579 b(1--)150 -4776 y Fc(S)30 b Fu(=)25 b(4,)31 b Fc(J)k Fu(=)25 b(12,)31 -b Fc(H)h Fu(=)25 b(2,)31 b Fc(A)26 b Fu(=)f Fc(J)t(=H)32 -b Fu(=)25 b(12)p Fc(=)p Fu(2)i(=)e(6,)31 b Fc(G)26 b -Fu(=)f(GCD\(4)p Fc(;)15 b Fu(6\))28 b(=)d(2,)150 4885 -y(passesp)s(erblo)s(c)m(k=)p Fc(S)5 b Fu(=4,)150 4995 -y(passesp)s(ersubblo)s(c)m(k=)p Fc(S=G)p Fu(=4/2=2:)390 -5132 y Fr(0)47 b(0---0---0---0---0---0---0-)o(--0-)o(--0)o(---0)o(---0) -o(---)o(0)390 5236 y(1)334 b(0---0---0---0---0---0---)o(0--)o(-0--)o -(-0--)o(-0-)o(--0-)o(--0)390 5340 y(2)668 b(0---0---0---0---0---0---)o -(0---)o(0--)o(-0--)o(-0--)o(-0-)o(--0)p eop -%%Page: 59 64 -59 63 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(59)390 299 y Fr(3)954 -b(0---0---0---0---0---0---0)o(---0)o(---0)o(---)o(0---)o(0---)o(0)390 -403 y(4)1193 b(1---1---1---1---1---1---)o(1---)o(1--)o(-1--)o(-1--)o -(-1-)o(--1)390 506 y(5)1479 b(1---1---1---1---1---1---1)o(---1)o(---1)o -(---)o(1---)o(1---)o(1)390 610 y(6)1813 b(1---1---1---1---1---1---1-)o -(--1)o(---1)o(---1)o(---)o(1)390 714 y(7)2100 b -(1---1---1---1---1---1--)o(-1--)o(-1--)o(-1-)o(-)390 -818 y(8)2338 b(0---0---0---0---0---0---0-)o(--0)o(-)390 -922 y(9)2625 b(0---0---0---0---0---0--)o(-)390 1025 y(10)2911 -b(0---0---0---0---0)390 1129 y(11)3197 b(0---0---0--)390 -1233 y(12)3436 b(1---1-)275 1365 y Fu(But)27 b(what)g(do)h(w)m(e)g(do)f -(if)f Fc(J)37 b Fu(is)26 b(not)i(an)f(exact)i(m)m(ultiple)c(of)j -Fc(H)7 b Fu(?)39 b(This)26 b(is)g(a)i(di\016cult)e(problem,)g(whic)m(h) -150 1474 y(I)i(struggled)g(with)g(for)g(quite)g(a)h(few)g(da)m(ys)f(b)s -(efore)h(giving)e(in)g(and)h(taking)h(the)g(easy)g(\(but)f(less)g -(elegan)m(t\))150 1584 y(w)m(a)m(y)34 b(out.)48 b(The)33 -b(easy)g(solution)f(is)g(to)h(round)f Fc(J)t(=H)40 b -Fu(do)m(wn,)34 b(then)e(add)g(on)h(the)g(accum)m(ulated)h(error)e(at) -150 1693 y(the)f(end)e(of)i(eac)m(h)g(band.)150 1825 -y Fc(S)f Fu(=)25 b(4,)31 b Fc(J)k Fu(=)25 b(11,)31 b -Fc(H)h Fu(=)25 b(2)31 b Fc(A)25 b Fu(=)g(\015o)s(or\()p -Fc(J)t(=H)7 b Fu(\))26 b(=)f(\015o)s(or\(11)p Fc(=)p -Fu(2\))j(=)d(5,)31 b Fc(G)25 b Fu(=)g(GCD)q(\(4)p Fc(;)15 -b Fu(5\),)150 1935 y(passesp)s(erblo)s(c)m(k=)p Fc(S)5 -b Fu(=4,)150 2044 y(passesp)s(ersubblo)s(c)m(k=)p Fc(S=G)p -Fu(=4/1=4)390 2171 y Fr(Band)47 b(0:)390 2274 y(0)g -(0---0---0---0---0---0---0-)o(--0-)o(--0)o(---0)o(---0)390 -2378 y(1)286 b(0---0---0---0---0---0---0)o(---)o(0---)o(0---)o(0--)o -(-0)390 2482 y(2)525 b(0---0---0---0---0---0--)o(-0--)o(-0--)o(-0-)o -(--0-)o(--0)390 2586 y(3)763 b(0---0---0---0---0---0---0-)o(--0)o(---0) -o(---0)o(---)o(0)390 2689 y(4)1002 b(1---1---1---1---1---1---)o(1---)o -(1---)o(1--)o(-1--)o(-1)390 2793 y(5)1241 b(1---1---1---1---1---1--)o -(-1--)o(-1-)o(--1-)o(--1-)o(--1)390 2897 y(6)1479 b -(1---1---1---1---1---1---1)o(---1)o(---1)o(---)o(1---)o(1)390 -3001 y(7)1718 b(1---1---1---1---1---1---)o(1---)o(1--)o(-1--)o(-1--)o -(-)390 3208 y(Band)47 b(1:)390 3312 y(8)g(|)2052 b -(0---0---0---0---0---0---0-)o(--0-)o(--0)o(-)390 3416 -y(9)95 b(\\------------------------)o(----)o(---)o(----)o(----)o(--/) -232 b(0---0---0---0---0---0---0)o(---)o(0)390 3520 y(10)906 -b(S*J)47 b(rows)1288 b(0---0---0---0---0---0--)o(-)390 -3623 y(11)2815 b(0---0---0---0---0--)390 3727 y(12)3054 -b(1---1---1---1-)390 3831 y(13)3293 b(1---1---1)390 3935 -y(14)3531 b(1---)275 4067 y Fu(W)-8 b(e)29 b(can)g(calculate)g(the)g -(starting)f(ro)m(w)h(and)e(subpass)g(n)m(um)m(b)s(er)h(of)g(a)h(giv)m -(en)g(pass)f(in)f(this)g(sc)m(heme)j(as)150 4176 y(follo)m(ws:)390 -4302 y Fr(A)47 b(=)h(floor\(J)e(/)h(H\))390 4406 y(subblocksperblock)c -(=)48 b(gcd\(S,)e(A\))390 4510 y(subpassblock)e(=)k(floor\(\(p)d(\045)j -(S\))f(*)h(subblocksperblock)43 b(/)k(S\))390 4614 y(if)g(subpassblock) -e(*)i(2)h(<)f(subblocksperblock)581 4717 y(subblockoffset)d(=)j -(2*subpassblock)390 4821 y(else)581 4925 y(subblockoffset)d(=)j -(2*\(subblocksperblock-subp)o(assb)o(lock)o(\)-1)390 -5029 y(band)g(=)g(floor\(P)f(/)h(\(S)h(*)f(H\)\))390 -5132 y(passinband)e(=)i(P)h(\045)f(\(S)h(*)f(H\))390 -5236 y(startingrow)e(=)i(band)g(*)g(S)h(*)f(J)h(+)f(passinband)e(*)j(A) -f(+)g(subblockoffset)390 5340 y(subpass)f(=)h(passinband)e(/)j(S)p -eop -%%Page: 60 65 -60 64 bop 150 -116 a Fu(App)s(endix)28 b(B:)j(W)-8 b(ea)m(ving)31 -b(for)f(inkjet)g(prin)m(ters)1899 b(60)275 299 y(So)30 -b(the)g(ro)m(w)h(n)m(um)m(b)s(er)e(of)h(jet)h Fc(j)36 -b Fu(of)31 b(pass)f Fc(p)g Fu(is)390 428 y Fr(A)47 b(=)h(floor\(J)e(/)h -(H\))390 531 y(subblocksperblock)c(=)48 b(gcd\(S,)e(A\))390 -739 y(subblockoffset\(p\))581 843 y(=)h(2*subpassblock)331 -b(,)47 b(if)g(subpassblock)e(*)i(2)h(<)f(subblocksperblock)581 -946 y(=)g(2*\(subblocksperblock-subpa)o(ssb)o(lock)o(\)-1)280 -b(,)47 b(otherwise)676 1050 y(where)676 1154 y(subpassblock)e(=)i -(floor\(\(p)f(\045)h(S\))g(*)h(subblocksperblock)43 b(/)k(S\))390 -1362 y(band\(p\))f(=)h(floor\(p)f(/)i(\(S)f(*)g(H\)\))390 -1465 y(passinband\(p\))d(=)k(p)f(\045)h(\(S)f(*)g(H\))390 -1673 y(row\(j,)f(p\))h(=)h(band\(p\))e(*)h(S)g(*)h(J)f(+)h -(passinband\(p\))c(*)j(A)h(+)f(subblockoffset\(p\))c(+)48 -b(j)f(*)h(S)390 1777 y(row\(j,)e(p\))h(=)h(p)f(*)h(J)f(+)h -(subblockoffset\(p\))43 b(+)k(j)h(*)f(S)275 1911 y Fu(T)-8 -b(o)30 b(b)s(e)g(con)m(tin)m(ued)5 b(.)22 b(.)g(.)g(.)p -eop -%%Page: 61 66 -61 65 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(61)150 299 y Fp(App)t(endix)53 b(C)81 b(ESC/P2)150 -718 y Ft(C.1)68 b(In)l(tro)t(duction)45 b(to)g(ESC/P2)275 -924 y Fu(This)24 b(is)h(a)h(description)e(of)i(the)g(ESC/P2)g(raster)g -(commands)g(used)f(b)m(y)h(the)g(gimp-prin)m(t)e(plugin)g(and)150 -1034 y(Ghostscript)37 b(driv)m(er,)h(whic)m(h)e(is)h(a)h(subset)e(of)i -(the)g(complete)g(command)f(set.)62 b(The)37 b(full)e(do)s(cumen)m(ts) -150 1143 y(are)26 b(found)f(on)h Fr(http://www.ercipd.com/isv)o(/ed)o -(r_do)o(cs.h)o(tm)p Fu(.)33 b(Note)27 b(that)g(these)g(are)f -Fi(not)g Fu(alw)m(a)m(ys)150 1253 y(correct,)32 b(and)e(are)g -(certainly)g(not)g(complete.)275 1401 y(All)23 b(ESCP/2)i(raster)g -(commands)g(b)s(egin)e(with)h(the)h(`)p Fr(ESC)p Fu(')g(c)m(haracter)h -(\(1b)f(hex\),)i(follo)m(w)m(ed)e(b)m(y)f(either)150 -1510 y(one)d(or)f(t)m(w)m(o)i(command)e(c)m(haracters)i(and)e(argumen)m -(ts)h(where)e(applicable.)36 b(Older)19 b(commands)h(generally)150 -1620 y(ha)m(v)m(e)j(one)f(command)f(c)m(haracter.)39 -b(New)m(er)23 b(commands)e(usually)e(ha)m(v)m(e)k(a)f(`)p -Fr(\()p Fu(')g(\(left)f(paren)m(thesis\))g(follo)m(w)m(ed)150 -1730 y(b)m(y)33 b(a)g(command)f(c)m(haracter)j(and)d(a)h(b)m(yte)g -(coun)m(t)h(for)e(the)h(argumen)m(ts)g(that)h(follo)m(w.)47 -b(The)32 b(b)m(yte)h(coun)m(t)150 1839 y(is)c(a)i(16-bit)g(\(2)g(b)m -(yte\))g(binary)e(in)m(teger,)i(in)e(little)g(endian)g(order.)275 -1987 y(All)e(argumen)m(ts)j(listed)e(here)h(are)g(of)h(the)f(form)g(`)p -Fr(name[bytes])p Fu(')d(where)j(`)p Fr([bytes])p Fu(')f(is)g(the)h(n)m -(um)m(b)s(er)150 2097 y(of)35 b(b)m(ytes)g(that)g(comprise)f(the)h -(argumen)m(t.)53 b(The)35 b(argumen)m(ts)f(themselv)m(es)h(are)g -(usually)e(one,)j(t)m(w)m(o,)h(or)150 2207 y(four)e(b)m(yte)h(in)m -(tegers,)h(alw)m(a)m(ys)f(little)e(endian)g(\(the)i(least)f -(signi\014can)m(t)g(bits)f(come)i(\014rst\).)56 b(Presumably)150 -2316 y(this)29 b(is)h(to)h(matc)m(h)g(In)m(tel)f(pro)s(cessors.)275 -2464 y(In)42 b(some)i(cases,)49 b(the)43 b(same)h(command)g(sequence)g -(iden)m(ti\014es)e(di\013eren)m(t)h(v)m(ersions)g(of)h(the)g(same)150 -2574 y(command,)30 b(dep)s(ending)e(up)s(on)h(the)i(n)m(um)m(b)s(er)e -(of)h(b)m(ytes)h(of)g(argumen)m(ts.)150 2866 y Ft(C.2)68 -b(Standard)45 b(commands)3130 3199 y Fu(ESC/P2)30 b(command)-3725 -b Fh(ESC)39 b(@)390 3309 y Fu(Reset)33 b(the)g(prin)m(ter.)45 -b(Discards)32 b(an)m(y)h(output,)f(ejects)i(the)e(existing)g(page,)i -(returns)d(all)g(settings)390 3418 y(to)g(their)f(default.)39 -b(Alw)m(a)m(ys)31 b(use)f(this)f(b)s(efore)h(prin)m(ting)f(a)h(page.) -3130 3694 y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(\(G)g -Fm(BC)8 b Fh(=1)39 b Fm(ON1)390 3803 y Fu(T)-8 b(urn)29 -b(on)h(graphics)g(mo)s(de.)40 b Fm(ON)g Fu(should)28 -b(b)s(e)i(`)p Fr(1)p Fu(')h(\(turn)e(on)h(graphics)g(mo)s(de\).)3130 -4078 y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(\(U)g Fm(BC)8 -b Fh(=1)39 b Fm(UNIT1)390 4188 y Fu(Set)j(basic)g(unit)f(of)h -(measuremen)m(t)h(used)e(b)m(y)i(prin)m(ter.)75 b(This)40 -b(is)h(expressed)h(in)f(m)m(ultiples)f(of)390 4298 y(1/3600)p -Fr(")p Fu(.)j(A)m(t)31 b(720)h(DPI,)f Fm(UNIT)37 b Fu(is)29 -b(`)p Fr(5)p Fu(';)i(at)g(360)g(DPI,)g Fm(UNIT)37 b Fu(is)29 -b(`)p Fr(10)p Fu('.)3130 4573 y(ESC/P2)h(command)-3725 -b Fh(ESC)39 b(\(U)g Fm(BC)8 b Fh(=5)39 b Fm(P)-8 b(A)m(GEUNITS1)46 -b(VUNIT1)g(HUNIT1)g(BASEUNIT2)390 4682 y Fu(Set)31 b(basic)g(units)f -(of)h(measuremen)m(t)h(used)e(b)m(y)h(the)h(prin)m(ter.)42 -b Fm(P)-8 b(A)m(GEUNIT)38 b Fu(is)31 b(the)g(unit)f(of)h(page)390 -4792 y(measuremen)m(t)i(\(for)h(commands)e(that)i(set)f(page)h -(dimensions)c(and)j(the)g(lik)m(e\).)48 b Fm(VUNIT)40 -b Fu(is)32 b(the)390 4902 y(unit)27 b(of)i(v)m(ertical)h(measuremen)m -(t)f(\(for)g(v)m(ertical)g(mo)m(v)m(emen)m(t)i(commands\).)40 -b Fm(HUNIT)35 b Fu(is)28 b(the)h(unit)390 5011 y(of)41 -b(horizon)m(tal)f(mo)m(v)m(emen)m(t)i(\(for)f(horizon)m(tal)f(p)s -(ositioning)e(commands\).)72 b(All)39 b(of)h(these)i(units)390 -5121 y(are)29 b(expressed)f(in)f Fm(BASEUNIT)p Fu(,)i(whic)m(h)e(is)g -(in)h(recipro)s(cal)f(inc)m(hes.)39 b(T)m(ypically)-8 -b(,)28 b Fm(BASEUNIT)35 b Fu(is)390 5230 y(`)p Fr(1440)p -Fu('.)40 b(In)28 b(720)i(DPI)g(mo)s(de,)f Fm(P)-8 b(A)m(GEUNIT)p -Fu(,)30 b Fm(VUNIT)p Fu(,)f(and)g Fm(HUNIT)36 b Fu(are)29 -b(all)f(`)p Fr(2)p Fu(';)i(in)e(1440x720)390 5340 y(DPI)i(mo)s(de,)h -Fm(P)-8 b(A)m(GEUNIT)38 b Fu(and)29 b Fm(VUNIT)37 b Fu(are)31 -b(normally)e(set)h(to)i(`)p Fr(2)p Fu(';)e Fm(HUNIT)37 -b Fu(is)30 b(set)h(to)g(`)p Fr(1)p Fu('.)p eop -%%Page: 62 67 -62 66 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(62)3130 299 y(ESC/P2)30 b(command)-3725 b Fh(ESC)39 -b(\(K)g Fm(BC)8 b Fh(=2)39 b Fm(ZER)m(O1)45 b(GRA)-8 -b(YMODE1)390 408 y Fu(Set)25 b(color)g(or)g(gra)m(yscale)h(mo)s(de,)g -(on)f(prin)m(ters)e(supp)s(orting)g(an)h(explicit)g(gra)m(yscale)i(mo)s -(de.)38 b(These)390 518 y(prin)m(ters)c(can)i(b)s(e)e(iden)m(ti\014ed)g -(b)s(ecause)h(they)h(are)g(adv)m(ertised)f(as)h(ha)m(ving)f(more)g -(blac)m(k)h(nozzles)390 628 y(than)h(nozzles)h(of)f(individual)c -(colors.)62 b(Setting)37 b(gra)m(yscale)i(mo)s(de)e(allo)m(ws)g(use)g -(of)g(these)h(extra)390 737 y(nozzles)21 b(for)f(faster)h(prin)m(ting.) -36 b Fm(GRA)-8 b(YMODE)27 b Fu(should)19 b(b)s(e)h(`)p -Fr(0)p Fu(')g(or)h(`)p Fr(2)p Fu(')g(for)f(color,)j(`)p -Fr(1)p Fu(')e(for)f(gra)m(yscale.)390 847 y Fm(ZER)m(O)35 -b Fu(should)28 b(alw)m(a)m(ys)j(b)s(e)f(`)p Fr(0)p Fu('.)3130 -1058 y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(\(i)g Fm(BC)8 -b Fh(=1)39 b Fm(MICR)m(O)m(WEA)-10 b(VE1)390 1168 y Fu(If)23 -b Fm(MICR)m(O)m(WEA)-10 b(VE)29 b Fu(is)23 b(`)p Fr(1)p -Fu(',)i(use)e(micro)m(w)m(ea)m(v)m(e)j(mo)s(de.)38 b(On)22 -b(older)h(prin)m(ters,)g(this)g(is)f(used)h(to)h(turn)390 -1278 y(on)34 b(micro)m(w)m(ea)m(v)m(e;)k(on)c(new)m(er)h(prin)m(ters,)e -(it)h(prin)m(ts)f(one)h(ro)m(w)g(at)h(a)g(time.)51 b(All)33 -b(prin)m(ters)g(supp)s(ort)390 1387 y(this)e(mo)s(de.)46 -b(It)32 b(should)e(only)i(b)s(e)f(used)h(at)h(720)g(\(or)g(1440x720\))i -(DPI.)e(The)f(Epson)f(St)m(ylus)g(Pro)390 1497 y(series)f(indicates)f -(additional)f(mo)s(des:)390 1647 y(`)p Fr(2)p Fu(')382 -b(\\F)-8 b(ull-o)m(v)m(erlap")390 1797 y(`)p Fr(3)p Fu(')382 -b(\\F)-8 b(our-pass")390 1948 y(`)p Fr(4)p Fu(')382 b(\\F)-8 -b(ull-o)m(v)m(erlap)30 b(2")390 2098 y(An)m(y)g(of)h(these)g(commands)f -(can)g(b)s(e)g(used)g(with)f(the)h(high)f(four)h(bits)f(set)i(to)g -(either)f(`)p Fr(3)p Fu(')h(or)f(`)p Fr(0)p Fu('.)3130 -2310 y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(U)g Fm(DIRECTION1)390 -2419 y Fu(If)30 b Fm(DIRECTION)39 b Fu(is)30 b(`)p Fr(1)p -Fu(',)g(prin)m(t)f(unidirectionally;)e(if)i(`)p Fr(0)p -Fu(',)i(prin)m(t)e(bidirectionally)-8 b(.)3130 2631 y(ESC/P2)30 -b(command)-3725 b Fh(ESC)39 b(\(s)g Fm(BC)8 b Fh(=1)39 -b Fm(SPEED1)390 2740 y Fu(On)44 b(some)h(older)f(prin)m(ters,)j(this)c -(con)m(trols)i(the)g(prin)m(t)f(head)g(sp)s(eed.)83 b -Fm(SPEED)49 b Fu(of)c(`)p Fr(2)p Fu(')f(is)g(10)390 2850 -y(inc)m(hes/sec;)31 b(SPEED)f(of)g(`)p Fr(0)p Fu(')h(or)f(1)h(is)f(20.) -3130 3062 y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(\(e)g -Fm(BC)8 b Fh(=2)39 b Fm(ZER)m(O1)45 b(DOTSIZE1)390 3171 -y Fu(Cho)s(ose)c(prin)m(t)f(dotsize.)75 b Fm(DOTSIZE)45 -b Fu(can)d(tak)m(e)h(on)e(v)-5 b(arious)41 b(v)-5 b(alues,)44 -b(dep)s(ending)39 b(up)s(on)h(the)390 3281 y(prin)m(ter.)62 -b(Almost)38 b(all)f(prin)m(ters)f(supp)s(ort)g(`)p Fr(0)p -Fu(')i(and)g(`)p Fr(2)p Fu('.)63 b(V)-8 b(ariable)38 -b(dot)g(size)g(prin)m(ters)e(allo)m(w)i(a)390 3390 y(v)-5 -b(alue)32 b(of)g Fm(16)p Fu(.)48 b(Other)32 b(than)g(the)g(v)-5 -b(alue)32 b(of)h Fm(16)p Fu(,)h(this)d(app)s(ears)h(to)h(b)s(e)e -(ignored)h(at)h(resolutions)e(of)390 3500 y(720)h(DPI)e(and)g(ab)s(o)m -(v)m(e.)3130 3711 y(ESC/P2)g(command)-3725 b Fh(ESC)39 -b(\(C)g Fm(BC)8 b Fh(=2)39 b Fm(P)-8 b(A)m(GELENGTH2)3130 -3821 y Fu(ESC/P2)30 b(command)-3725 b Fh(ESC)39 b(\(C)g -Fm(BC)8 b Fh(=4)39 b Fm(P)-8 b(A)m(GELENGTH4)390 3931 -y Fu(Set)34 b(the)g(length)g(of)g(the)g(page)g(in)f Fr(")p -Fu(pageunits)p Fr(")g Fu(\(see)i(`)p Fr(ESC)29 b(\(U)p -Fu(')34 b(ab)s(o)m(v)m(e\).)53 b(The)33 b(second)h(form)g(of)390 -4040 y(the)c(command)g(allo)m(ws)g(setting)g(of)h(longer)f(page)h -(lengths)e(on)h(new)g(prin)m(ters)f(\(these)i(happ)s(en)d(to)390 -4150 y(b)s(e)i(the)g(prin)m(ters)f(that)i(supp)s(ort)e(v)-5 -b(ariable)29 b(dot)i(size\).)3130 4361 y(ESC/P2)f(command)-3725 -b Fh(ESC)39 b(\(c)g Fm(BC)8 b Fh(=4)39 b Fm(TOP2)45 b(LENGTH2)3130 -4471 y Fu(ESC/P2)30 b(command)-3725 b Fh(ESC)39 b(\(c)g -Fm(BC)8 b Fh(=8)39 b Fm(TOP4)45 b(LENGTH4)390 4580 y -Fu(Set)35 b(the)g(v)m(ertical)g(page)h(margins)d(of)i(the)g(page)h(in)d -Fr(")p Fu(pageunits)p Fr(")h Fu(\(see)i(`)p Fr(ESC)29 -b(\(U)p Fu(')35 b(ab)s(o)m(v)m(e\).)55 b(The)390 4690 -y(margins)31 b(are)h(sp)s(eci\014ed)e(as)i(the)g(top)g(of)g(the)g(page) -h(and)e(the)h(length)g(of)g(the)g(page.)46 b(The)31 b(second)390 -4800 y(form)38 b(of)i(the)f(command)f(allo)m(ws)h(setting)g(of)g -(longer)f(page)i(lengths)e(on)h(new)g(prin)m(ters)e(\(these)390 -4909 y(happ)s(en)29 b(to)i(b)s(e)f(the)g(prin)m(ters)f(that)i(supp)s -(ort)e(v)-5 b(ariable)29 b(dot)h(size\).)3130 5121 y(ESC/P2)g(command) --3725 b Fh(ESC)39 b(\(S)g Fm(BC)8 b Fh(=8)39 b Fm(WIDTH4)46 -b(LENGTH4)390 5230 y Fu(Set)d(the)g(width)e(and)h(length)g(of)h(the)g -(prin)m(ted)e(page)j(region)e(in)f Fr(")p Fu(pageunits)p -Fr(")h Fu(\(see)i(`)p Fr(ESC)29 b(\(U)p Fu(')390 5340 -y(ab)s(o)m(v)m(e\).)p eop -%%Page: 63 68 -63 67 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(63)3130 299 y(ESC/P2)30 b(command)-3725 b Fh(ESC)39 -b(\(v)g Fm(BC)8 b Fh(=2)39 b Fm(AD)m(V)-10 b(ANCE2)3130 -408 y Fu(ESC/P2)30 b(command)-3725 b Fh(ESC)39 b(\(v)g -Fm(BC)8 b Fh(=4)39 b Fm(AD)m(V)-10 b(ANCE4)390 518 y -Fu(F)i(eed)44 b(v)m(ertically)f Fm(AD)m(V)-10 b(ANCE)49 -b Fr(")p Fu(v)m(ertical)43 b(units)p Fr(")f Fu(\(see)i(`)p -Fr(ESC)29 b(\(U)p Fu(')43 b(ab)s(o)m(v)m(e\))i(from)e(the)g(curren)m(t) -390 628 y(prin)m(t)29 b(head)h(p)s(osition.)3130 871 -y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(\(V)g Fm(BC)8 -b Fh(=2)39 b Fm(AD)m(V)-10 b(ANCE2)3130 981 y Fu(ESC/P2)30 -b(command)-3725 b Fh(ESC)39 b(\(V)g Fm(BC)8 b Fh(=4)39 -b Fm(AD)m(V)-10 b(ANCE4)390 1090 y Fu(F)i(eed)27 b(v)m(ertically)e -Fm(AD)m(V)-10 b(ANCE)32 b Fr(")p Fu(v)m(ertical)25 b(units)p -Fr(")f Fu(\(see)j(`)p Fr(ESC)j(\(U)p Fu(')25 b(ab)s(o)m(v)m(e\))j(from) -d(the)h(top)g(margin.)3130 1334 y(ESC/P2)k(command)-3725 -b Fh(ESC)39 b(\($)g Fm(BC)8 b Fh(=4)39 b Fm(OFFSET4)390 -1443 y Fu(Set)27 b(horizon)m(tal)g(p)s(osition)e(to)i -Fm(OFFSET)33 b Fu(from)27 b(the)g(left)f(margin.)39 b(This)25 -b(command)i(op)s(erates)g(on)390 1553 y(prin)m(ters)i(of)h(the)h(740)h -(class)e(and)g(new)m(er)g(\(all)g(prin)m(ters)e(with)h(v)-5 -b(ariable)30 b(dot)g(size\).)3130 1797 y(ESC/P2)g(command)-3725 -b Fh(ESC)39 b($)g Fm(OFFSET2)390 1906 y Fu(Set)27 b(horizon)m(tal)g(p)s -(osition)e(to)i Fm(OFFSET)33 b Fu(from)27 b(the)g(left)f(margin.)39 -b(This)25 b(command)i(op)s(erates)g(on)390 2016 y(prin)m(ters)i(of)h -(the)h(740)h(class)e(and)g(new)m(er)g(\(all)g(prin)m(ters)e(with)h(v)-5 -b(ariable)30 b(dot)g(size\).)3130 2259 y(ESC/P2)g(command)-3725 -b Fh(ESC)39 b(\(\\)g Fm(BC)8 b Fh(=4)39 b Fm(UNITS2)45 -b(OFFSET2)390 2369 y Fu(Set)30 b(horizon)m(tal)f(p)s(osition)f(to)j -Fm(OFFSET)k Fu(from)29 b(the)h(previous)e(prin)m(t)h(head)g(p)s -(osition,)g(measured)390 2478 y(in)38 b Fm(UNITS)p Fu(.)h -Fm(UNITS)44 b Fu(is)38 b(measured)h(in)f(in)m(v)m(erse)h(inc)m(hes,)i -(and)e(should)e(b)s(e)i(set)h(to)g(1440)h(in)d(all)390 -2588 y(cases.)k(This)28 b(op)s(erates)j(on)f(all)g(1440)i(dpi)c(prin)m -(ters)h(that)i(do)f(not)h(supp)s(ort)e(v)-5 b(ariable)29 -b(dot)h(size.)3130 2832 y(ESC/P2)g(command)-3725 b Fh(ESC)39 -b(\(/)g Fm(BC)8 b Fh(=4)39 b Fm(OFFSET4)390 2941 y Fu(Set)30 -b(horizon)m(tal)f(p)s(osition)f(to)j Fm(OFFSET)k Fu(from)29 -b(the)h(previous)e(prin)m(t)h(head)g(p)s(osition,)g(measured)390 -3051 y(in)42 b Fr(")p Fu(horizon)m(tal)g(units)p Fr(")f -Fu(\(see)j(`)p Fr(ESC)30 b(\(U)p Fu(')42 b(ab)s(o)m(v)m(e\).)81 -b(This)41 b(op)s(erates)i(on)g(all)f(v)-5 b(ariable)42 -b(dot)h(size)390 3160 y(prin)m(ters.)3130 3404 y(ESC/P2)30 -b(command)-3725 b Fh(ESC)39 b(\\)g Fm(OFFSET2)390 3513 -y Fu(Set)30 b(horizon)m(tal)f(p)s(osition)f(to)j Fm(OFFSET)k -Fu(from)29 b(the)h(previous)e(prin)m(t)h(head)g(p)s(osition,)g -(measured)390 3623 y(in)22 b(basic)h(unit)f(of)i(measuremen)m(t)g -(\(see)h(`)p Fr(ESC)k(\(U)p Fu(')23 b(ab)s(o)m(v)m(e\).)41 -b(This)21 b(is)i(used)g(on)g(all)g(720)h(dpi)e(prin)m(ters,)390 -3733 y(and)f(can)i(also)f(b)s(e)f(used)g(on)h(1440)i(dpi)c(prin)m(ters) -g(in)h(lo)m(w)m(er)h(resolutions)f(to)h(sa)m(v)m(e)i(a)e(few)g(b)m -(ytes.)39 b(Note)390 3842 y(that)e Fm(OFFSET)43 b Fu(ma)m(y)37 -b(b)s(e)f(negativ)m(e.)60 b(The)36 b(range)h(of)g(v)-5 -b(alues)36 b(for)g(this)f(command)i(is)e(b)s(et)m(w)m(een)390 -3952 y(`)p Fr(-16384)p Fu(')29 b(and)h(`)p Fr(16383)p -Fu('.)3130 4195 y(ESC/P2)g(command)-3725 b Fh(ESC)39 -b(r)g Fm(COLOR1)3130 4305 y Fu(ESC/P2)30 b(command)-3725 -b Fh(ESC)39 b(\(r)g Fm(BC)8 b Fh(=2)39 b Fm(DENSITY1)45 -b(COLOR1)390 4415 y Fu(Set)26 b(the)g(ink)f(color.)39 -b(The)26 b(\014rst)f(form)g(is)g(used)h(on)f(four-color)h(prin)m(ters;) -g(the)h(second)f(on)f(six-color)390 4524 y(prin)m(ters.)39 -b Fm(DENSITY)k Fu(is)29 b(`)p Fr(0)p Fu(')i(for)f(dark)g(inks,)f(`)p -Fr(1)p Fu(')h(for)h(ligh)m(t.)40 b Fm(COLOR)29 b Fu(is)390 -4688 y(`)p Fr(0)p Fu(')382 b(blac)m(k)390 4851 y(`)p -Fr(1)p Fu(')g(magen)m(ta)390 5013 y(`)p Fr(2)p Fu(')g(cy)m(an)390 -5176 y(`)p Fr(4)p Fu(')g(y)m(ello)m(w)390 5340 y(This)29 -b(command)h(is)f(not)i(used)e(on)i(v)-5 b(ariable)29 -b(dot)h(size)h(prin)m(ters)d(in)i(soft)m(w)m(ea)m(v)m(e)j(mo)s(de.)p -eop -%%Page: 64 69 -64 68 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(64)3130 299 y(ESC/P2)30 b(command)-3725 b Fh(ESC)39 -b(.)g Fm(COMPRESS1)44 b(VSEP1)h(HSEP1)g(LINES1)h(WIDTH2)g(data...)390 -408 y Fu(Prin)m(t)29 b(data.)42 b Fm(COMPRESS)34 b Fu(signi\014es)28 -b(the)j(compression)e(mo)s(de:)390 565 y(`)p Fr(0)p Fu(')382 -b(no)30 b(compression)390 722 y(`)p Fr(1)p Fu(')382 b(TIFF)30 -b(compression)g(\(incorrectly)g(do)s(cumen)m(ted)g(as)g -Fr(")p Fu(run)f(length)h(enco)s(ded)p Fr(")p Fu(\))390 -879 y(`)p Fr(2)p Fu(')382 b(TIFF)30 b(compression)g(with)f(a)i(sp)s -(ecial)e(command)h(set.)390 1036 y Fm(VSEP)38 b Fu(dep)s(ends)32 -b(up)s(on)g(resolution)g(and)i(prin)m(ter)e(t)m(yp)s(e.)51 -b(A)m(t)34 b(360)h(DPI,)f(it)g(is)e(alw)m(a)m(ys)i(`)p -Fr(10)p Fu('.)51 b(A)m(t)390 1146 y(720)25 b(DPI,)f(it)f(is)g(normally) -f(`)p Fr(5)p Fu('5.)39 b(On)23 b(the)h(ESC)f(600,)k(it)c(is)g(`)p -Fr(40)p Fu(')g(\(8)7 b Fs(\003)g Fu(5\).)41 b(On)23 b(some)h(other)g -(prin)m(ters,)390 1256 y(it)30 b(v)-5 b(aries.)390 1389 -y Fm(HSEP1)34 b Fu(is)26 b(`)p Fr(10)p Fu(')h(at)h(360)g(DPI)f(and)f(`) -p Fr(5)p Fu(')h(at)h(720)g(or)f(1440)i(DPI)e(\(1440)i(DPI)e(cannot)g(b) -s(e)g(prin)m(ted)e(in)390 1498 y(one)j(pass;)g(it)f(is)f(prin)m(ted)g -(in)g(t)m(w)m(o)j(passes,)f(with)e(the)h(dots)h(separated)g(in)e(eac)m -(h)i(pass)f(b)m(y)g(1/720)p Fr(")p Fu(\).)390 1632 y -Fm(LINES)37 b Fu(is)31 b(the)i(n)m(um)m(b)s(er)e(of)i(lines)d(to)j(b)s -(e)f(prin)m(ted.)46 b(It)32 b(should)f(b)s(e)g(`)p Fr(1)p -Fu(')i(in)e(micro)m(w)m(ea)m(v)m(e)k(and)d(360)390 1741 -y(DPI.)f(A)m(t)g(720)h(DPI)e(soft)m(w)m(ea)m(v)m(e,)k(it)c(should)e(b)s -(e)i(the)h(n)m(um)m(b)s(er)e(of)h(lines)f(to)i(b)s(e)f(actually)f(prin) -m(ted.)390 1875 y Fm(WIDTH)40 b Fu(is)28 b(the)i(n)m(um)m(b)s(er)e(of)h -(pixels)f(to)i(b)s(e)f(prin)m(ted)f(in)g(eac)m(h)i(ro)m(w.)41 -b(F)-8 b(ollo)m(wing)29 b(this)f(command,)390 1984 y(a)34 -b(carriage)g(return)e(\(`)p Fr(13)p Fu(')i(decimal,)f(`)p -Fr(0A)p Fu(')g(hex\))h(should)d(b)s(e)i(output)g(to)h(return)f(the)g -(prin)m(t)f(head)390 2094 y(p)s(osition)c(to)k(the)e(left)g(margin.)390 -2227 y(The)i(basic)g(data)i(format)f(is)f(a)h(string)f(of)h(b)m(ytes,)h -(with)d(data)j(from)e(left)g(to)i(righ)m(t)e(on)h(the)g(page.)390 -2337 y(Within)c(eac)m(h)i(b)m(yte,)g(the)g(highest)f(bit)f(is)g -(\014rst.)390 2470 y(The)38 b(TIFF)g(compression)f(is)h(implemen)m(ted) -e(as)j(one)f(coun)m(t)h(b)m(yte)g(follo)m(w)m(ed)f(b)m(y)g(one)h(or)f -(more)390 2580 y(data)31 b(b)m(ytes.)41 b(There)30 b(are)h(t)m(w)m(o)h -(cases:)439 2713 y(1.)61 b(If)28 b(the)g(coun)m(t)h(b)m(yte)g(is)e(`)p -Fr(128)p Fu(')h(or)g(less,)g(it)g(is)f(follo)m(w)m(ed)h(b)m(y)g([)p -Fc(count)p Fu(]+1)h(data)g(b)m(ytes.)40 b(So)29 b(if)e(the)570 -2822 y(coun)m(t)k(b)m(yte)g(is)f(`)p Fr(0)p Fu(',)h(it)f(is)f(follo)m -(w)m(ed)h(b)m(y)h(1)g(data)g(b)m(yte;)g(if)f(it)g(is)f(`)p -Fr(128)p Fu(',)i(it)f(is)f(follo)m(w)m(ed)h(b)m(y)h(129)570 -2932 y(data)g(b)m(ytes.)439 3065 y(2.)61 b(If)38 b(the)g(coun)m(t)h(b)m -(yte)g(is)e(greater)i(than)f(128,)k(it)37 b(is)h(follo)m(w)m(ed)f(b)m -(y)i(one)f(b)m(yte.)65 b(This)36 b(b)m(yte)j(is)570 3175 -y(rep)s(eated)d(\(257)h(-)f([coun)m(t]\))h(times.)55 -b(So)36 b(if)e([coun)m(t])j(is)e(129,)j(the)e(next)f(b)m(yte)i(is)d -(treated)j(as)570 3284 y(though)h(it)f(w)m(ere)i(rep)s(eated)f(128)i -(times;)h(if)c([coun)m(t])j(is)d(255,)k(it)d(is)f(treated)i(as)g -(though)e(it)570 3394 y(w)m(ere)31 b(rep)s(eated)f(t)m(wice.)3130 -3622 y(ESC/P2)g(command)-3725 b Fh(ESC)39 b(i)g Fm(COLOR1)44 -b(COMPRESS1)h(BITS1)g(BYTES2)g(LINES2)565 3732 y(data...)390 -3841 y Fu(Prin)m(t)c(data)i(in)f(the)g(new)m(er)h(prin)m(ters)d(\(that) -k(supp)s(ort)c(v)-5 b(ariable)42 b(dot)g(size\),)k(and)c(St)m(ylus)f -(Pro)390 3951 y(mo)s(dels.)390 4084 y Fm(COLOR)29 b Fu(is)h(the)g -(color:)390 4241 y(`)p Fr(0)p Fu(')382 b(blac)m(k)390 -4398 y(`)p Fr(1)p Fu(')g(magen)m(ta)390 4555 y(`)p Fr(2)p -Fu(')g(cy)m(an)390 4712 y(`)p Fr(4)p Fu(')g(y)m(ello)m(w)390 -4869 y(`)p Fr(17)p Fu(')334 b(ligh)m(t)30 b(magen)m(ta)390 -5026 y(`)p Fr(18)p Fu(')334 b(ligh)m(t)30 b(cy)m(an)390 -5183 y Fm(COMPRESS)k Fu(signi\014es)28 b(the)j(compression)e(mo)s(de:) -390 5340 y(`)p Fr(0)p Fu(')382 b(no)30 b(compression)p -eop -%%Page: 65 70 -65 69 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(65)390 299 y(`)p Fr(1)p Fu(')382 b(TIFF)30 b(compression)g -(\(incorrectly)g(do)s(cumen)m(ted)g(as)g Fr(")p Fu(run)f(length)h(enco) -s(ded)p Fr(")p Fu(\))390 462 y(`)p Fr(2)p Fu(')382 b(TIFF)30 -b(compression)g(with)f(a)i(sp)s(ecial)e(command)h(set.)390 -628 y Fm(BITS)35 b Fu(is)29 b(the)i(n)m(um)m(b)s(er)e(of)i(bits)e(p)s -(er)g(pixel.)390 767 y Fm(BYTES)j Fu(is)26 b(the)h(n)m(um)m(b)s(er)f -(of)h(b)m(ytes)g(wide)f(for)h(eac)m(h)h(ro)m(w)f(\()p -Fc(ceil)r(ing)s Fu(\()p Fc(B)5 b(I)i(T)13 b(S)20 b Fs(\003)13 -b Fc(w)r(idth)p 3252 767 28 4 v 35 w(of)p 3386 767 V -42 w(r)s(ow)r(;)i Fu(8\)\).)390 876 y(Note)32 b(that)f(this)e(is)g -(di\013eren)m(t)h(from)g(the)h(`)p Fr(ESC)e(.)p Fu(')i(command)f(ab)s -(o)m(v)m(e.)390 1015 y Fm(LINES)40 b Fu(is)34 b(the)i(n)m(um)m(b)s(er)e -(of)i(lines)e(to)i(b)s(e)f(prin)m(ted.)54 b(This)34 b(command)h(is)g -(the)g(only)g(w)m(a)m(y)i(to)f(get)390 1125 y(v)-5 b(ariable)30 -b(dot)h(size)g(prin)m(ting.)41 b(In)30 b(v)-5 b(ariable)30 -b(dot)i(mo)s(de,)f(the)g(size)g(of)g(the)g(dots)h(increases)e(as)i(the) -390 1234 y(v)-5 b(alue)30 b(\(`)p Fr(1)p Fu(',)h(`)p -Fr(2)p Fu(',)g(or)f(`)p Fr(3)p Fu('\))h(increases.)3130 -1481 y(ESC/P2)f(command)-3725 b Fh(ESC)39 b(\(D)g Fm(BC)8 -b Fh(=4)39 b Fm(BASE2)45 b(VER)-8 b(TICAL1)46 b(HORIZONT)-8 -b(AL1)390 1590 y Fu(Set)24 b(prin)m(ter)f(horizon)m(tal)h(and)f(v)m -(ertical)h(spacing.)38 b(It)24 b(only)f(applies)g(to)h(v)-5 -b(ariable)23 b(dot)i(size)e(prin)m(ters)390 1700 y(in)29 -b(soft)m(w)m(ea)m(v)m(e)34 b(mo)s(de)c(\(and)g(p)s(ossibly)d(other)k -(high)e(end)h(prin)m(ters\).)390 1839 y Fm(BASE)36 b -Fu(is)29 b(the)i(base)f(unit)f(for)h(this)f(command;)i(it)f(m)m(ust)g -(b)s(e)g(`)p Fr(14400)p Fu('.)390 1977 y Fm(VER)-8 b(TICAL)54 -b Fu(is)g(the)i(distance)e(in)g(these)h(units)f(b)s(et)m(w)m(een)h -(prin)m(ted)f(ro)m(ws;)67 b(it)55 b(should)e(b)s(e)390 -2087 y(\()p Fc(separ)s(ation)p 864 2087 V 32 w(in)p 982 -2087 V 33 w(noz)t(z)t(l)r(es)20 b Fs(\003)h Fc(B)5 b(AS)g(E)g(=)p -Fu(720\).)390 2226 y Fm(HORIZONT)-8 b(AL)30 b Fu(is)f(the)i(horizon)m -(tal)f(separation)h(b)s(et)m(w)m(een)g(dots)g(in)e(a)i(ro)m(w.)41 -b(Dep)s(ending)30 b(up)s(on)390 2335 y(the)k(prin)m(ter,)f(this)g -(should)f(b)s(e)h(either)g(\(14400)p Fc(=)p Fu(720\))39 -b(or)33 b(\(14400)p Fc(=)p Fu(360\).)56 b(The)33 b(St)m(ylus)g(Pro)g -(9000)390 2445 y(man)m(ual)39 b(suggests)i(that)f(the)g(settings)g -(should)d(matc)m(h)k(the)f(c)m(hosen)g(resolution,)h(but)f(that)g(is) -390 2554 y(apparen)m(tly)30 b(not)g(the)h(case)g(\(or)g(not)g(alw)m(a)m -(ys)g(the)f(case\))i(on)e(other)h(prin)m(ters.)3130 2801 -y(ESC/P2)f(command)-3725 b Fh(ESC)39 b(\(R)g Fm(BC)8 -b Fh(=8)39 b(00)f(R)h(E)f(M)h(O)f(T)h(E)f(1)390 2911 -y Fu(En)m(ters)27 b(\\remote)h(mo)s(de".)40 b(This)25 -b(is)h(a)h(sp)s(ecial,)g(undo)s(cumen)m(ted)e(command)i(set)h(that)f -(is)f(used)g(to)390 3020 y(set)31 b(up)f(v)-5 b(arious)30 -b(prin)m(ter)f(options,)h(suc)m(h)h(as)f(pap)s(er)g(feed)h(tra)m(y)-8 -b(,)32 b(and)e(p)s(erform)f(utilit)m(y)g(functions)390 -3130 y(suc)m(h)22 b(as)h(head)f(cleaning)f(and)h(alignmen)m(t.)37 -b(It)23 b(do)s(es)f(not)g(app)s(ear)g(that)h(an)m(ything)f(here)g(is)f -(actually)390 3239 y(required)34 b(to)i(mak)m(e)g(the)g(prin)m(ter)e -(prin)m(t.)55 b(Our)34 b(b)s(est)h(understanding)e(of)i(what)h(is)e(in) -g(a)i(remote)390 3349 y(command)30 b(sequence)h(is)e(describ)s(ed)g(in) -g(a)h(separate)i(section)e(b)s(elo)m(w.)3130 3596 y(ESC/P2)g(command) --3725 b Fh(ESC)39 b(01)g(@EJL)g([sp])h(ID\\r\\n)390 3705 -y Fu(Return)g(the)g(prin)m(ter)f(ID.)i(This)e(is)g(considered)g(a)i -(remote)g(mo)s(de)f(command,)j(although)d(the)390 3815 -y(syn)m(tax)31 b(is)e(that)i(of)g(a)g(con)m(v)m(en)m(tional)g(command.) -40 b(This)29 b(returns)g(the)i(follo)m(wing)d(information:)630 -3948 y Fr(@EJL)47 b(ID\\r)630 4051 y(MFG:EPSON;)630 4155 -y(CMD:ESCPL2,BDC;)630 4259 y(MDL:[printer)d(model];)630 -4363 y(CLS:PRINTER;)630 4467 y(DES:EPSON)h([printer)h(model];)630 -4570 y(\\f)275 4763 y Fu(After)30 b(all)f(data)i(has)g(b)s(een)e(sen)m -(t,)i(a)g(form)f(feed)g(b)m(yte)h(should)e(b)s(e)h(sen)m(t.)275 -4902 y(All)25 b(new)m(er)i(Epson)e(prin)m(ters)h(\(STC)g(440,)j(STP)c -(750\))k(require)c(the)i(follo)m(wing)e(command)i(to)g(b)s(e)f(sen)m(t) -150 5011 y(at)34 b(least)g(once)f(to)i(enable)d(prin)m(ting)f(at)j -(all.)49 b(This)31 b(command)i(sp)s(eci\014cally)e(tak)m(es)k(the)e -(prin)m(ter)f(out)i(of)150 5121 y(the)24 b(Epson)f(pac)m(k)m(et)i(mo)s -(de)f(comm)m(unication)f(proto)s(col)g(\(whatev)m(er)i(that)f(is\))g -(and)f(enables)g(normal)f(data)150 5230 y(transfer.)39 -b(Sending)26 b(it)i(m)m(ultiple)e(times)h(is)g(is)g(not)i(harmful,)d -(so)i(it)g(is)f(normally)f(sen)m(t)j(at)f(the)h(b)s(eginning)150 -5340 y(of)i(eac)m(h)g(job:)p eop -%%Page: 66 71 -66 70 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(66)390 299 y Fr(ESC)47 b(01@EJL[space]1284.4[newl)o(ine])o(@EJ)o -(L[sp)o(ace])o([sp)o(ace])o([spa)o(ce])o([spa)o(ce])390 -403 y([space][newline]ESC@)275 540 y Fu(The)29 b(prop)s(er)g(sequence)i -(of)g(initialization)c(commands)j(is:)390 672 y Fr(magic)46 -b(command)390 776 y(ESC)95 b(remote)46 b(mode)g(if)i(needed)390 -880 y(ESC)f(\(G)390 983 y(ESC)g(\(U)390 1087 y(ESC)g(\(K)g(\(if)g -(appropriate\))390 1191 y(ESC)g(\(i)390 1295 y(ESC)g(U)g(\(if)g -(needed\))390 1398 y(ESC)g(\(s)g(\(if)g(appropriate\))390 -1502 y(ESC)g(\(e)390 1606 y(ESC)g(\(C)390 1710 y(ESC)g(\(c)390 -1814 y(ESC)g(\(S)390 1917 y(ESC)g(\(D)g(\(if)g(needed\))390 -2021 y(ESC)g(\(V)g(\(optional)e(--)j(this)e(can)h(be)g(accomplished)e -(with)h(ESC)h(\(v\))275 2159 y Fu(F)-8 b(or)31 b(prin)m(ting,)d(the)j -(prop)s(er)e(sequence)h(is:)390 2290 y Fr(ESC)47 b(\(v)150 -2428 y Fu(and)30 b(rep)s(eat)g(for)g(eac)m(h)i(color:)390 -2560 y Fr(ESC)47 b(\($)g Fu(or)h Fr(ESC)f(\(\\)g Fu(or)h -Fr(ESC)f(\\)390 2663 y(ESC)g(\(r)g Fu(or)h Fr(ESC)f(r)g -Fu(\(if)30 b(needed|not)g(used)g(with)f(`)p Fr(ESC)47 -b(i)p Fu(')30 b(and)g(not)h(needed)f(if)f(the)i(color)390 -2767 y(has)f(not)h(c)m(hanged)g(from)f(the)g(previous)f(prin)m(ted)g -(line\))390 2871 y Fr(ESC)47 b(.)g Fu(or)h Fr(ESC)f(i)95 -b(...data...)45 b([return])h(\(0A)h(hex\))275 3009 y -Fu(T)-8 b(o)30 b(terminate)h(a)g(page:)390 3140 y Fr([formfeed])45 -b(\(0C)i(hex\))390 3244 y(ESC)g(@)150 3509 y Ft(C.3)68 -b(Remote)47 b(Mo)t(de)d(Commands)275 3705 y Fu(The)g(follo)m(wing)f -(description)h(of)h(remote)h(commands)e(comes)i(out)f(of)g(an)g -(examination)g(of)g(the)150 3814 y(sequences)33 b(used)e(b)m(y)i(the)f -(prin)m(ter)f(utilities)f(bundled)f(with)j(the)g(Windo)m(ws)g(driv)m -(ers)f(for)h(the)g(ESC740,)150 3924 y(and)26 b(from)g(other)h(sources)f -(\(some)i(Epson)d(man)m(uals,)i(exp)s(erimen)m(tation,)g(analysis)e(of) -h(prin)m(t)g(\014les\).)38 b(It)27 b(is)150 4034 y(largely)g(sp)s -(eculativ)m(e)f(as)i(these)g(commands)f(are)h(not)f(all)g(do)s(cumen)m -(ted)g(in)f(the)i(Epson)e(do)s(cumen)m(tation)150 4143 -y(w)m(e)31 b(ha)m(v)m(e)g(access)h(to.)42 b(Generally)-8 -b(,)30 b(new)m(er)g(man)m(uals)g(pro)m(vide)f(more)i(thorough)f(do)s -(cumen)m(tation.)275 4281 y(Remote)h(command)f(mo)s(de)g(is)g(en)m -(tered)h(when)e(the)i(prin)m(ter)e(is)g(sen)m(t)i(the)f(follo)m(wing)f -(sequence:)390 4412 y Fr(ESC)47 b(\(R)g(BC=8)g(00)g(R)g(E)h(M)f(O)h(T)f -(E)h(1)275 4550 y Fu(Remote)31 b(mo)s(de)f(commands)g(are)h(then)f(sen) -m(t,)h(and)f(terminated)g(with)f(the)h(follo)m(wing)f(sequence:)390 -4682 y Fr(ESC)47 b(00)g(00)g(00)275 4819 y Fu(All)29 -b(remote)i(mo)s(de)f(commands)g(m)m(ust)g(b)s(e)g(sen)m(t)h(b)s(efore)f -(the)g(initial)e(`)p Fr(ESC)i(\(G)p Fu(')g(command)g(is)f(sen)m(t.)275 -4957 y(This)22 b(in)m(tro)s(ductory)i(sequence)h(is)f(then)g(follo)m(w) -m(ed)h(b)m(y)f(a)h(sequence)g(of)g(commands.)39 b(Eac)m(h)25 -b(command)150 5066 y(is)k(constructed)i(as)g(follo)m(ws:)330 -5204 y(Tw)m(o)g(ASCI)s(I)d(b)m(ytes)j(indicating)d(the)j(function)330 -5340 y(A)f(b)m(yte)i(coun)m(t)f(\(t)m(w)m(o)h(b)m(ytes,)f -(little-endian\))d(for)i(the)h(parameters)p eop -%%Page: 67 72 -67 71 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(67)330 299 y(Binary)29 b(parameters,)i(if)f(an)m(y)275 -458 y(This)e(is)i(a)g(list)f(of)i(all)e(remote)i(commands)f(w)m(e)h(ha) -m(v)m(e)h(seen:)2826 690 y(ESC/P2)e(remote)i(command)-3725 -b Fh(NC)39 b Fm(BC)8 b Fh(=2)38 b(00)h(00)390 800 y Fu(Prin)m(t)29 -b(a)i(nozzle)g(c)m(hec)m(k)h(pattern)2826 1032 y(ESC/P2)e(remote)i -(command)-3725 b Fh(VI)39 b Fm(BC)8 b Fh(=2)38 b(00)h(00)390 -1142 y Fu(on)30 b(m)m(y)h(740,)h(prin)m(ts)d(the)h(follo)m(wing:)630 -1270 y Fr(W01286)46 b(I02382\\r\\n)390 1404 y Fu(probably)29 -b(\\v)m(ersion)h(information")2826 1637 y(ESC/P2)g(remote)i(command) --3725 b Fh(*)38 b(AI)h Fm(BC)8 b Fh(=3)39 b(00)g(00)g(00)390 -1746 y Fu(Prin)m(ts)29 b(a)i(\\prin)m(ter)e(ID".)j(On)d(one)i(870,)h -(prin)m(ts)d(the)h(follo)m(wing:)630 1875 y Fr(51-51-50-51-49-48\\r\\n) -390 2009 y Fu(The)f(Windo)m(ws)f(driv)m(er)g(has)h(a)g(text)i(en)m(try) -e(\014eld)f(where)h(this)f(n)m(um)m(b)s(er)g(can)h(b)s(e)g(en)m(tered,) -h(but)f(its)390 2118 y(purp)s(ose)g(is)g(unkno)m(wn.)2826 -2351 y(ESC/P2)h(remote)i(command)-3725 b Fh(*)38 b(LD)h -Fm(BC)8 b Fh(=0)390 2460 y Fu(Load)38 b(prin)m(ter)f(defaults)g(from)g -(NVRAM,)i(DIP)f(switc)m(hes,)i(and/or)e(R)m(OM.)g(This)f(apparen)m(tly) -390 2570 y(do)s(es)d(not)g(load)f(factory)i(defaults)e(p)s(er)g(se,)j -(but)d(an)m(y)h(settings)g(that)h(are)f(sa)m(v)m(ed.)53 -b(This)32 b(is)h(com-)390 2679 y(monly)25 b(used)f(righ)m(t)i(at)g(the) -g(end)f(of)h(eac)m(h)g(prin)m(t)f(job)g(after)h(the)g(`)p -Fr(ESC)k(@)p Fu(')25 b(prin)m(ter)g(reset)h(command.)2826 -2912 y(ESC/P2)k(remote)i(command)-3725 b Fh(*)38 b(CH)h -Fm(BC)8 b Fh(=2)39 b(00)g Fm(xx)390 3021 y Fu(P)m(erform)30 -b(a)h(head)f(cleaning)g(cycle.)41 b(The)30 b(heads)g(to)h(clean)f(are)h -(determined)e(b)m(y)h(parameter)h Fm(xx)6 b Fu(:)390 -3180 y(`)p Fr(00)p Fu(')334 b(clean)30 b(all)g(heads)390 -3339 y(`)p Fr(01)p Fu(')334 b(clean)30 b(blac)m(k)h(head)390 -3498 y(`)p Fr(02)p Fu(')334 b(clean)30 b(color)h(heads)390 -3656 y(While)i Fm(xx)40 b Fu(=)33 b(`)p Fr(00)p Fu(')h(is)f(probably)f -(supp)s(orted)g(b)m(y)h(all)g(prin)m(ters,)g Fm(xx)40 -b Fu(=)34 b(`)p Fr(01)p Fu(')g(and)f(`)p Fr(02)p Fu(')h(ma)m(y)g(w)m -(ell)390 3766 y(not)d(b)s(e.)2826 3998 y(ESC/P2)f(remote)i(command) --3725 b Fh(*)38 b(DT)h Fm(BC)8 b Fh(=3)39 b(00)g Fm(xx)44 -b Fh(00)390 4108 y Fu(Prin)m(t)25 b(an)h(alignmen)m(t)f(pattern.)40 -b(There)25 b(are)i(three)f(patterns,)h(whic)m(h)e(are)h(pic)m(k)m(ed)g -(via)g(the)g(c)m(hoice)390 4218 y(of)31 b Fm(xx)p Fu(.)40 -b(P)m(attern)31 b(`)p Fr(0)p Fu(')g(is)e(coarse,)j(pattern)f(`)p -Fr(1)p Fu(')f(is)g(medium,)e(and)i(pattern)h(`)p Fr(2)p -Fu(')f(is)g(\014ne.)2826 4450 y(ESC/P2)g(remote)i(command)-3725 -b Fh(*)38 b(DU)h Fm(BC)8 b Fh(=6)39 b(00)g Fm(xx)44 b -Fh(00)39 b(09)g(00)g Fm(yy)390 4560 y Fu(Prin)m(t)c(another)h(alignmen) -m(t)f(pattern.)57 b(It)36 b(isn't)f(en)m(tirely)g(clear)g(what)h -Fm(xx)42 b Fu(and)35 b Fm(yy)44 b Fu(are,)37 b(but)e(it)390 -4669 y(app)s(ears)d(that)i Fm(xx)39 b Fu(tak)m(es)34 -b(on)f(the)g(v)-5 b(alues)32 b(`)p Fr(1)p Fu(')h(and)f(`)p -Fr(2)p Fu(')h(,)h(and)e Fm(yy)41 b Fu(tak)m(es)34 b(on)f(the)g(v)-5 -b(alues)32 b(`)p Fr(0)p Fu(')i(and)390 4779 y Fm(1)p -Fu(.)41 b(This)29 b(ma)m(y)i(only)e(w)m(ork)i(on)f(the)g(580)i(and/or)e -(480.)2826 5011 y(ESC/P2)g(remote)i(command)-3725 b Fh(*)38 -b(DA)h Fm(BC)8 b Fh(=4)39 b(00)g Fm(xx)44 b Fh(00)39 -b Fm(yy)390 5121 y Fu(Set)32 b(results)f(for)h(the)h(\014rst)e -(alignmen)m(t)h(pattern.)46 b Fm(xx)38 b Fu(is)31 b(the)i(pattern)f -(\(`)p Fr(1)p Fu('{`)p Fr(3)p Fu('\);)j Fm(yy)40 b Fu(is)31 -b(the)h(b)s(est)390 5230 y(c)m(hoice)f(from)f(the)h(set)g(\(`)p -Fr(1)p Fu('{`)p Fr(7)p Fu(')g(or)g(`)p Fr(1)p Fu('{`)p -Fr(15)p Fu('\).)42 b(This)28 b(do)s(es)i(not)h(sa)m(v)m(e)h(to)f -(NVRAM,)h(so)e(when)g(the)390 5340 y(prin)m(ter)f(is)g(p)s(o)m(w)m -(ered)i(o\013,)g(the)f(setting)h(will)d(b)s(e)h(lost.)p -eop -%%Page: 68 73 -68 72 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(68)2826 299 y(ESC/P2)30 b(remote)i(command)-3725 b -Fh(*)38 b(DA)h Fm(BC)8 b Fh(=6)39 b(00)g Fm(xx)44 b Fh(00)39 -b Fm(yy)46 b Fh(09)39 b(00)390 408 y Fu(Set)24 b(results)e(for)h -(alternate)h(alignmen)m(t)f(pattern.)39 b Fm(xx)29 b -Fu(app)s(ears)23 b(to)h(b)s(e)f(the)h(pass,)h(and)e Fm(yy)31 -b Fu(app)s(ears)390 518 y(to)k(b)s(e)e(the)i(optim)m(um)e(pattern.)52 -b(This)33 b(do)s(es)h(not)g(sa)m(v)m(e)i(to)f(NVRAM,)g(so)f(when)g(the) -g(prin)m(ter)f(is)390 628 y(p)s(o)m(w)m(ered)d(o\013,)h(the)g(setting)f -(will)e(b)s(e)i(lost.)2826 869 y(ESC/P2)g(remote)i(command)-3725 -b Fh(*)38 b(SV)h Fm(BC)8 b Fh(=0)390 979 y Fu(Sa)m(v)m(e)32 -b(the)e(curren)m(t)g(settings)h(to)g(NVRAM.)2826 1220 -y(ESC/P2)f(remote)i(command)-3725 b Fh(*)38 b(RS)h Fm(BC)8 -b Fh(=1)39 b(01)390 1330 y Fu(Reset)31 b(the)g(prin)m(ter.)2826 -1571 y(ESC/P2)f(remote)i(command)-3725 b Fh(*)38 b(IQ)h -Fm(BC)8 b Fh(=1)39 b(01)390 1681 y Fu(Get)e(ink)d(quan)m(tit)m(y)-8 -b(.)57 b(This)34 b(requires)g(direct)h(access)i(to)g(the)f(prin)m(ter)e -(p)s(ort.)56 b(The)35 b(return)f(lo)s(oks)390 1790 y(lik)m(e)630 -1921 y Fr(IQ:KKCCMMYY)390 2058 y Fu(or)630 2189 y Fr(IQ:KKCCMMYYccmm) -390 2326 y Fu(\(for)c(4-color)g(and)f(6-color)h(prin)m(ters)e(resp)s -(ectiv)m(ely\),)i(where)f(eac)m(h)i(pair)d(of)i(digits)e(are)i -(hexadeci-)390 2436 y(mal)g(represen)m(tations)g(of)h(p)s(ercen)m(t.) -275 2625 y(The)e(follo)m(wing)g(t)m(w)m(o)j(commands)e(ha)m(v)m(e)i(b)s -(een)d(observ)m(ed)i(on)f(an)g(STP)g(870.)2826 2866 y(ESC/P2)g(remote)i -(command)-3725 b Fh(*)38 b(IR)h Fm(BC)8 b Fh(=2)39 b(00)g -Fm(xx)390 2976 y Fi(F)-8 b(unction)33 b(unkno)m(wn)p -Fu(.)46 b(This)31 b(command)h(has)h(b)s(een)f(observ)m(ed)g(on)h(an)f -(STP)g(870)i(with)d Fm(xx)6 b Fu(=`)p Fr(03)p Fu(')390 -3085 y(at)32 b(the)f(start)g(of)h(a)f(job)g(and)f Fm(xx)6 -b Fu(=`)p Fr(02)p Fu(')31 b(at)h(the)f(end)f(of)h(a)h(job)e(\(where)h -(it)g(is)f(follo)m(w)m(ed)g(b)m(y)h(an)g(`)p Fr(LD)p -Fu(')390 3195 y(command\).)57 b(When)36 b(in)f(roll)f(mo)s(de,)j(the)f -(v)-5 b(alues)35 b(c)m(hange)i(to)g Fm(xx)6 b Fu(=`)p -Fr(01)p Fu(')36 b(at)g(the)g(start)h(of)f(a)g(job)390 -3305 y(and)30 b Fm(xx)6 b Fu(=`)p Fr(00)p Fu(')30 b(at)h(the)g(end)e -(of)i(a)g(job.)2826 3546 y(ESC/P2)f(remote)i(command)-3725 -b Fh(*)38 b(FP)h Fm(BC)8 b Fh(=3)39 b(00)g Fm(xx)44 b(yy)390 -3656 y(xx)6 b Fu(=`)p Fr(00)p Fu(')20 b(and)g Fm(yy)8 -b Fu(=`)p Fr(00)p Fu(')20 b(selects)h(the)f(prin)m(ter's)g(normal)f -(left)h(margin)f(\(ab)s(out)i(3mm\).)38 b Fm(xx)6 b Fu(=`)p -Fr(0xb0)p Fu(')390 3765 y(and)25 b Fm(yy)8 b Fu(=`)p -Fr(0xff)p Fu(')25 b(selects)i(zero-margin)f(mo)s(de,)g(where)g(the)g -(left-most)h(prin)m(t)d(p)s(osition)g(is)h(shifted)390 -3875 y(to)30 b(a)g(p)s(oin)m(t)f(ab)s(out)g(0.1)p Fr(")i -Fu(to)f(the)g(left)f(of)h(the)g(left-hand)f(edge)h(of)g(the)g(pap)s -(er,)f(allo)m(wing)f(prin)m(ting)390 3984 y(up)h(to)i(\(and)g(o\013)7 -b(\))31 b(the)f(left-hand)g(edge)h(of)f(the)h(pap)s(er.)275 -4174 y(The)i(commands)h(b)s(elo)m(w)f(are)i(partially)d(do)s(cumen)m -(ted)i(in)f(the)h(St)m(ylus)f(Pro)h(9000)i(man)m(ual.)52 -b(Muc)m(h)150 4283 y(of)31 b(this)e(information)f(is)i(in)m(terpreted;) -g(none)g(is)f(tested.)2826 4525 y(ESC/P2)h(remote)i(command)-3725 -b Fh(*)38 b(SN)h Fm(BC)8 b Fh(=3)39 b(00)g Fm(xx)44 b(yy)390 -4634 y Fu(Select)31 b(Mec)m(hanism)g(Sequence.)42 b Fm(xx)37 -b Fu(con)m(trols)31 b(whic)m(h)f(sub-op)s(eration)f(is)h(p)s(erformed.) -41 b Fm(xx)6 b Fu(=`)p Fr(00)p Fu(')390 4744 y(selects)36 -b(the)g(\\F)-8 b(eed)38 b(pap)s(er)d(sequence)h(setting".)58 -b Fm(yy)43 b Fu(can)37 b(tak)m(e)g(on)f(the)g(follo)m(wing)e(v)-5 -b(alues)36 b(\(on)390 4853 y(the)31 b(STP)e(870,)j(at)f(an)m(y)g -(rate\):)390 5016 y(`)p Fr(0)p Fu(')382 b(default)390 -5178 y(`)p Fr(1)p Fu(')g(plain)28 b(pap)s(er)390 5340 -y(`)p Fr(2)p Fu(')382 b(p)s(ostcards)p eop -%%Page: 69 74 -69 73 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(69)390 299 y(`)p Fr(3)p Fu(')382 b(\014lm)29 b(\(photo)i(qualit)m(y)e -(glossy)h(\014lm,)g(transparencies\))390 462 y(`)p Fr(4)p -Fu(')382 b(en)m(v)m(elop)s(es)390 626 y(`)p Fr(5)p Fu(')g(plain)28 -b(pap)s(er)i(\(fast)h(load\))390 789 y(`)p Fr(6)p Fu(')382 -b(bac)m(k)29 b(ligh)m(t)e(\014lm)g(\(although)g(this)g(has)h(b)s(een)f -(observ)m(ed)i(with)d(hea)m(vyw)m(eigh)m(t)k(matte)870 -899 y(pap)s(er\))390 1062 y(`)p Fr(7)p Fu(')382 b(matte)24 -b(pap)s(er)d(\(observ)m(ed)j(with)d(360)j(dpi)d(inkjet)h(pap)s(er,)h -(and)f(photo)h(qualit)m(y)f(inkjet)870 1172 y(pap)s(er\))390 -1335 y(`)p Fr(8)p Fu(')382 b(photo)31 b(pap)s(er)390 -1500 y(Exp)s(erimen)m(tation)36 b(suggests)h(that)h(this)e(setting)h(c) -m(hanges)h(details)e(of)i(ho)m(w)f(the)g(prin)m(ters')f(cut)390 -1610 y(sheet)31 b(feeder)f(w)m(orks,)h(presumably)d(to)j(tune)f(it)g -(for)g(di\013eren)m(t)g(t)m(yp)s(es)g(of)h(pap)s(er.)390 -1748 y Fm(xx)6 b Fu(=`)p Fr(01)p Fu(')41 b(con)m(trols)g(the)g(platen)g -(gap)g(setting;)46 b Fm(yy)8 b Fu(=`)p Fr(00)p Fu(')41 -b(is)f(the)h(default,)i Fm(yy)8 b Fu(=`)p Fr(1)p Fu(')40 -b(or)h(`)p Fr(2)p Fu(')h(are)390 1858 y(higher)29 b(settings.)390 -1997 y Fm(xx)6 b Fu(=`)p Fr(02)p Fu(')36 b(con)m(trols)h(pap)s(er)f -(loading)f(sp)s(eed)h(\()p Fm(yy)8 b Fu(=`)p Fr(0)p Fu(')37 -b(is)e(normal,)j(`)p Fr(1)p Fu(')e(is)g(fast,)j(`)p Fr(2)p -Fu(')e(is)e(slo)m(w\).)60 b(It)390 2106 y(app)s(ears)35 -b(that)i(`)p Fr(1)p Fu(')f(is)g(used)f(when)g(prin)m(ting)f(on)i -(\\plain)f(pap)s(er",)i(\\360dpi)f(ink)f(jet)h(pap)s(er")g(or)390 -2216 y(\\ink)29 b(jet)i(transparencies",)g(and)e Fm(yy)8 -b Fu(=`)p Fr(00)p Fu(')30 b(for)g(all)f(other)i(pap)s(er)e(t)m(yp)s(e)i -(settings.)390 2354 y Fm(xx)6 b Fu(=`)p Fr(07)p Fu(')34 -b(con)m(trols)h(duplex)d(prin)m(ting)g(for)i(prin)m(ters)f(with)g(that) -i(capabilit)m(y)e(\()p Fm(yy)8 b Fu(=)p Fm(0)42 b Fu(is)33 -b(default,)390 2464 y(for)d(non-duplex)e(prin)m(ting;)h(`)p -Fr(1)p Fu(')h(is)g(fron)m(t)g(side)g(of)g(the)h(pap)s(er,)e(and)h -Fm(2)38 b Fu(is)29 b(bac)m(k)j(side\).)390 2602 y Fm(xx)6 -b Fu(=`)p Fr(09)p Fu(')30 b(con)m(trols)h(zero)g(margin)f(prin)m(ting)e -(on)i(the)h(prin)m(ters)e(with)g(the)h(capabilit)m(y)g(of)g(prin)m -(ting)390 2712 y(zero-margin)j(on)g(all)f(sides)g(\(St)m(ylus)g(Photo)h -(780/790,)38 b(890,)d(and)d(1280/1290\).)53 b Fm(yy)8 -b Fu(=`)p Fr(0)p Fu(')33 b(is)f(the)390 2821 y(default;)e(`)p -Fr(1)p Fu(')g(enables)g(zero)h(margin)f(prin)m(ting.)2826 -3067 y(ESC/P2)g(remote)i(command)-3725 b Fh(*)38 b(PP)h -Fm(BC)8 b Fh(=3)39 b(00)g Fm(xx)44 b(yy)390 3177 y Fu(Set)36 -b(P)m(ap)s(er)g(P)m(ath.)57 b Fm(xx)6 b Fu(=`)p Fr(2)p -Fu(')36 b(indicates)f(man)m(ual)g(feed,)j Fm(xx)6 b Fu(=`)p -Fr(3)p Fu(')36 b(is)f(for)g(roll)g(pap)s(er.)56 b Fm(yy)43 -b Fu(selects)390 3287 y(\\pap)s(er)30 b(path)g(n)m(um)m(b)s(er".)2826 -3533 y(ESC/P2)g(remote)i(command)-3725 b Fh(*)38 b(AC)h -Fm(BC)8 b Fh(=2)39 b(00)g Fm(xx)390 3642 y Fu(Set)33 -b(Auto)f(Cutting)g(State.)47 b Fm(xx)6 b Fu(=`)p Fr(0)p -Fu(')33 b(selects)f(auto)h(cutting)f(o\013,)i Fm(xx)6 -b Fu(=`)p Fr(1)p Fu(')32 b(selects)h(auto)g(cutting)390 -3752 y(on,)42 b(and)d Fm(xx)6 b Fu(=`)p Fr(2)p Fu(')39 -b(indicates)f(horizon)m(tal)h(prin)m(t)f(page)j(line)c(on.)68 -b(It)40 b(app)s(ears)e(that)i(with)e(auto)390 3862 y(cutting)32 -b(on,)h(roll)e(pap)s(er)g(is)h(cut)g(automatically)h(at)g(the)f(p)s -(oin)m(t)g(a)h(formfeed)f(c)m(haracter)i(is)d(sen)m(t.)390 -3971 y(The)g(formfeed)f(c)m(haracter)j(is)d(normally)f(used)h(to)i -(eject)h(a)e(page;)h(with)e(this)g(turned)g(on,)h(it)g(also)390 -4081 y(cuts)j(the)g(roll)e(pap)s(er.)49 b(Horizon)m(tal)34 -b(prin)m(t)f(page)h(line)e(on)i(prin)m(ts)e(a)i(narro)m(w)f(line)f(of)i -(blac)m(k)g(dots)390 4190 y(at)d(the)g(p)s(osition)d(the)j(pap)s(er)e -(should)f(b)s(e)i(cut)h(man)m(ually)-8 b(.)2826 4436 -y(ESC/P2)30 b(remote)i(command)-3725 b Fh(*)38 b(DR)h -Fm(BC)8 b Fh(=4)39 b(00)g(xx)g Fm(DT2)390 4546 y Fu(Set)31 -b(Drying)f(Time.)40 b Fm(xx)6 b Fu(=`)p Fr(00)p Fu(')31 -b(sets)g(the)g(drying)d(time)j(\\p)s(er)f(scan")h(\(p)s(er)f(pass?\);)h -Fm(xx)6 b Fu(=`)p Fr(01)p Fu(')31 b(sets)390 4656 y(the)h(drying)e -(time)i(p)s(er)f(page.)46 b Fm(DT)38 b Fu(indicates)31 -b(the)h(drying)e(time,)i(whic)m(h)f(is)g(in)g(seconds)g(if)g(page)390 -4765 y(mo)s(de)38 b(is)f(used)g(and)h(in)e(milliseconds)f(if)i(scan)h -(mo)s(de)g(is)f(used.)63 b Fm(DT)45 b Fu(m)m(ust)38 b(not)g(exceed)h -(3600)390 4875 y(seconds)30 b(in)f(p)s(er-page)i(mo)s(de)f(and)g(10000) -i(milliseconds)27 b(in)i(p)s(er-scan)h(mo)s(de.)2826 -5121 y(ESC/P2)g(remote)i(command)-3725 b Fh(*)38 b(IK)h -Fm(BC)8 b Fh(=2)39 b(00)g Fm(xx)390 5230 y Fu(Select)j(Ink)f(T)m(yp)s -(e.)73 b Fm(xx)6 b Fu(=`)p Fr(00)p Fu(')42 b(selects)g(dy)m(e)g(ink.)73 -b(Pigmen)m(t)41 b(ink)f(is)h(apparen)m(tly)g(selected)h(b)m(y)390 -5340 y Fm(xx)6 b Fu(=`)p Fr(01)p Fu('.)41 b(This)28 b(probably)h(do)s -(es)h(not)g(apply)f(to)i(the)g(consumer-grade)g(prin)m(ters.)p -eop -%%Page: 70 75 -70 74 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(70)2826 299 y(ESC/P2)30 b(remote)i(command)-3725 b -Fh(*)38 b(PZ)h(BC=2)h(00)e(xx)390 408 y Fu(Set)h(P)m(ause)g(After)f -(Prin)m(ting.)64 b Fm(xx)6 b Fu(=`)p Fr(00)p Fu(')38 -b(selects)h(no)f(pause)g(after)i(prin)m(ting;)g Fm(xx)6 -b Fu(=`)p Fr(01)p Fu(')38 b(selects)390 518 y(pause)j(after)g(prin)m -(ting.)70 b(If)41 b(turned)f(on,)j(the)f(prin)m(ter)d(is)h(paused)g -(after)i(the)f(page)h(is)e(ejected)390 628 y(\(b)m(y)34 -b(the)f(FF)i(b)m(yte\).)51 b(If)33 b(cutting)g(is)g(turned)f(on,)j(the) -e(prin)m(ter)f(is)h(paused)g Fi(after)h Fu(the)g(cutting)f(or)390 -737 y(prin)m(ting)28 b(of)j(the)f(horizon)m(tal)g(cut)h(line.)2826 -961 y(ESC/P2)f(remote)i(command)-3725 b Fh(*)38 b(EX)h -Fm(BC)8 b Fh(=6)39 b(00)g(00)g(00)f(00)h(0x14)h Fm(xx)390 -1071 y Fu(Set)32 b(V)-8 b(ertical)33 b(Prin)m(t)e(P)m(age)j(Line)d(Mo)s -(de.)47 b Fm(xx)6 b Fu(=`)p Fr(00)p Fu(')32 b(is)f(o\013,)j -Fm(xx)6 b Fu(=`)p Fr(01)p Fu(')32 b(is)f(on.)46 b(If)32 -b(turned)f(on,)i(this)390 1181 y(prin)m(ts)c(v)m(ertical)h(trim)g -(lines)e(at)j(the)g(left)f(and)g(righ)m(t)g(margins.)2826 -1405 y(ESC/P2)g(remote)i(command)-3725 b Fh(*)38 b(EX)h -Fm(BC)8 b Fh(=6)39 b(00)g(00)g(00)f(00)h(0x05)h Fm(xx)390 -1514 y Fu(Set)30 b(Roll)f(P)m(ap)s(er)g(Mo)s(de.)41 b(If)29 -b Fm(xx)36 b Fu(is)29 b(`)p Fr(0)p Fu(',)h(roll)e(pap)s(er)h(mo)s(de)g -(is)g(o\013;)i(if)d Fm(xx)36 b Fu(is)29 b(`)p Fr(1)p -Fu(',)h(roll)f(pap)s(er)f(mo)s(de)390 1624 y(is)h(on.)2826 -1848 y(ESC/P2)h(remote)i(command)-3725 b Fh(*)38 b(EX)h -Fm(BC)8 b Fh(=3)39 b(00)g Fm(xx)44 b(yy)390 1958 y Fu(App)s(ears)29 -b(to)i(b)s(e)f(a)h(synon)m(ym)f(for)g(the)g(`)p Fr(SN)p -Fu(')h(command)f(describ)s(ed)e(ab)s(o)m(v)m(e.)2826 -2182 y(ESC/P2)i(remote)i(command)-3725 b Fh(*)38 b(PH)h -Fm(BC)8 b Fh(=2)39 b(00)g Fm(xx)390 2292 y Fu(Select)c(P)m(ap)s(er)f -(Thic)m(kness.)51 b(Set)34 b(the)h(pap)s(er)e(thic)m(kness)h -Fm(xx)40 b Fu(in)33 b(.1)i(mm)f(units.)51 b(This)33 b(m)m(ust)h(not)390 -2401 y(exceed)j(0x10)g(\(1.6)g(mm\).)56 b(If)36 b(the)f(thic)m(kness)h -(is)e(set)j Fr(")p Fu(more)e(than)p Fr(")g Fu(.6)i(mm)e(\(whic)m(h)g -(probably)390 2511 y(means)e Fr(")p Fu(at)g(least)p Fr(")g -Fu(.6)g(mm,)h(since)e(the)h(other)g(case)h(reads)f Fr(")p -Fu(less)f(than)g(0.5)i(mm)p Fr(")p Fu(\),)f(the)h(platen)390 -2620 y(gap)d(is)e(set)i(high)e(irresp)s(ectiv)m(e)g(of)i(the)g(`)p -Fr(SN)p Fu(')f(command.)2826 2845 y(ESC/P2)g(remote)i(command)-3725 -b Fh(*)38 b(PM)h Fm(BC)8 b Fh(=2)39 b(00)g(00)390 2954 -y Fi(F)-8 b(unction)32 b(unkno)m(wn)p Fu(.)43 b(Used)31 -b(on)h(the)g(STC)e(3000)j(at)g(least)e(when)g(using)f(roll)g(feed,)i -(and)f(on)h(the)390 3064 y(STP)d(870)j(in)d(all)g(prin)m(t)g(\014les)h -(analysed)f(to)i(date.)2826 3288 y(ESC/P2)f(remote)i(command)-3725 -b Fh(*)38 b(ST)h Fm(BC)8 b Fh(=2)39 b(00)g Fm(xx)390 -3398 y Fu(Epson's)24 b(STP)f(750/1200)28 b(programming)c(guide)f -(refers)h(to)i(the)f(`)p Fr(ST)p Fu(')f(command)g(as)h(\\Set)g(prin)m -(ter)390 3507 y(state)37 b(reply".)56 b(If)35 b Fm(xx)42 -b Fu(is)35 b(`)p Fr(0)p Fu(')h(or)f(`)p Fr(2)p Fu(',)j(the)e(prin)m -(ter)e(will)f(not)j(send)f(status)h(replies.)55 b(If)35 -b Fm(xx)42 b Fu(is)35 b(`)p Fr(1)p Fu(')390 3617 y(or)h(`)p -Fr(3)p Fu(',)h(the)f(prin)m(ter)e(will)f(send)i(status)h(replies.)55 -b(The)36 b(status)g(replies)d(consist)j(of)g(state,)i(error)390 -3726 y(co)s(des,)31 b(ink)e(lev)m(e,)i(\014rm)m(w)m(are)f(v)m(ersion,)g -(and)g(w)m(arning)f(status.)390 3859 y(The)h(actual)h(reply)e(is)g(do)s -(cumen)m(ted)h(as)630 3986 y Fr(@BDC)47 b(ST\\r)630 4089 -y(ST:)g(xx;)630 4193 y([ER:)g(yy;])630 4297 y(IQ:)g(n1n2n3n4;)630 -4401 y([WR:)g(w1,w2...;])630 4504 y(RV:)g(zz;)630 4608 -y(AI:CW:02kkccmmyy,)c(MI:mm)630 4712 y([TC:tttt;])630 -4816 y(INK:...;)630 4920 y(\\f)390 5052 y Fu(\(`)p Fr(\\r)p -Fu(')31 b(is)e(carriage)i(return;)f(`)p Fr(\\n)p Fu(')g(is)f(newline;)g -(`)p Fr(\\f)p Fu(')h(is)f(formfeed.\))390 5185 y(`)p -Fr(ST)p Fu(')h(is)g(the)g(prin)m(ter)f(status:)390 5340 -y(`)p Fr(00)p Fu(')334 b(Error)p eop -%%Page: 71 76 -71 75 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(71)390 299 y(`)p Fr(01)p Fu(')334 b(Self-test)390 457 -y(`)p Fr(02)p Fu(')g(Busy)390 616 y(`)p Fr(03)p Fu(')g(W)-8 -b(aiting)30 b(while)f(prin)m(ting)390 774 y(`)p Fr(04)p -Fu(')334 b(Idle)390 933 y(`)p Fr(07)p Fu(')g(Cleaning/\014lling)26 -b(ink)k(heads)390 1091 y(`)p Fr(08)p Fu(')334 b(Not)31 -b(y)m(et)h(initialized/\014lling)25 b(heads)390 1250 -y(`)p Fr(ER)p Fu(',)31 b(if)e(pro)m(vided,)g(is)h(the)g(error)g -(status:)390 1408 y(`)p Fr(00)p Fu(')334 b(F)-8 b(atal)32 -b(error)390 1567 y(`)p Fr(01)p Fu(')334 b(In)m(terface)32 -b(not)e(selected)390 1725 y(`)p Fr(04)p Fu(')334 b(P)m(ap)s(er)30 -b(jam)390 1884 y(`)p Fr(05)p Fu(')334 b(Out)30 b(of)g(ink)390 -2042 y(`)p Fr(06)p Fu(')334 b(P)m(ap)s(er)30 b(out)390 -2201 y(`)p Fr(IQ)p Fu(')k(is)f(the)h(amoun)m(t)g(of)h(ink)d(left,)j(as) -f(a)h(\(decimal!\))51 b(p)s(ercen)m(tage)35 b(expressed)f(in)e -(hexadecimal.)390 2311 y(The)d(v)-5 b(alues)28 b(are)i(blac)m(k,)g(cy)m -(an,)g(magen)m(ta,)i(and)c(y)m(ello)m(w)h(\(presumably)f(6-color)i -(prin)m(ters)d(supply)390 2420 y(ligh)m(t)j(cy)m(an)h(and)e(ligh)m(t)h -(magen)m(ta)i(inks)d(as)i(additional)d(parameters\).)390 -2554 y(`)p Fr(WR)p Fu(',)j(if)e(pro)m(vided,)g(is)h(the)g(w)m(arning)f -(status:)390 2713 y(`)p Fr(10)p Fu(')334 b(Blac)m(k)31 -b(ink)e(lo)m(w)390 2871 y(`)p Fr(11)p Fu(')334 b(Cy)m(an)390 -3030 y(`)p Fr(12)p Fu(')g(Magen)m(ta)390 3188 y(`)p Fr(13)p -Fu(')g(Y)-8 b(ello)m(w)390 3347 y(`)p Fr(14)p Fu(')334 -b(Ligh)m(t)30 b(cy)m(an)h(\(presumably\))390 3505 y(`)p -Fr(15)p Fu(')334 b(Ligh)m(t)30 b(magen)m(ta)i(\(presumably\))390 -3664 y(`)p Fr(RV)p Fu(')e(is)g(the)g(\014rm)m(w)m(are)g(revision)f -(\(one)i(b)m(yte)g(ASCI)s(I\).)390 3798 y(`)p Fr(AI)p -Fu(')43 b(is)f(actuator)i(information.)76 b(These)43 -b(are)g(t)m(w)m(o)h(b)m(yte)f(ASCI)s(I)f(co)s(des)h(that)g(indicate)f -(\\ink)390 3907 y(w)m(eigh)m(t)31 b(rank)f(ID")h(of)f(K)m(CMY,)h(resp)s -(ectiv)m(ely)-8 b(.)390 4041 y(`)p Fr(TC)p Fu(',)31 b(if)e(pro)m -(vided,)g(is)h(the)g(total)h(time)f(of)h(cleaning)e(or)i(ink)e -(\014lling)e(\(?\).)390 4176 y(`)p Fr(INK:)p Fu(')j(and)f(`)p -Fr(MI)p Fu(')i(are)g Fi(not)f(do)s(cumen)m(ted)p Fu(.)2826 -4407 y(ESC/P2)g(remote)i(command)-3725 b Fh(*)38 b(SM)h -Fm(BC)8 b Fh(=2)39 b(00)g Fm(xx)390 4517 y Fu(Set)30 -b(Status)g(Reply)e(Rate.)42 b Fm(xx)36 b Fu(is)28 b(the)i(rep)s(eat)g -(in)m(terv)-5 b(al)29 b(in)f(seconds.)41 b(If)29 b Fm(xx)36 -b Fu(is)29 b(`)p Fr(0)p Fu(',)h(the)g(status)g(is)390 -4627 y(returned)f(only)h(when)f(the)i(prin)m(ter's)e(state)i(c)m -(hanges.)2826 4859 y(ESC/P2)f(remote)i(command)-3725 -b Fh(*)38 b(ST)h Fm(BC)8 b Fh(=1)39 b(01)390 4968 y Fu(Reply)29 -b(Prin)m(ter)h(Status.)40 b(The)30 b(reply)f(is)h(formatted)h(as)630 -5096 y Fr(@BDC)47 b(PS\\r\\nST:)p Fm(xx)6 b Fr(;\\f)390 -5230 y Fu(\(`)p Fr(\\r)p Fu(')29 b(is)e(carriage)i(return;)f(`)p -Fr(\\n)p Fu(')g(is)g(newline;)f(`)p Fr(\\f)p Fu(')h(is)g(formfeed\).)40 -b(If)28 b Fm(xx)34 b Fu(\(the)29 b(reply)e(v)-5 b(alue\))28 -b(is)g(`)p Fr(0)p Fu(')390 5340 y(or)i(`)p Fr(2)p Fu(',)h(automatic)g -(status)g(up)s(date)f(is)f(disabled;)f(if)i(`)p Fr(1)p -Fu(')g(or)h(`)p Fr(3)p Fu(',)f(it)g(is)g(enabled.)p eop -%%Page: 72 77 -72 76 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(72)2826 299 y(ESC/P2)30 b(remote)i(command)-3725 b -Fh(*)38 b(SM)h Fm(BC)8 b Fh(=1)39 b(01)390 408 y Fu(Reply)29 -b(Prin)m(ter)h(Status)g(Rate.)42 b(The)30 b(reply)f(is)g(formatted)i -(as)630 538 y Fr(@BDC)47 b(PS\\r\\nST:xx;\\f)390 673 -y Fu(\(`)p Fr(\\r)p Fu(')27 b(is)e(carriage)i(return;)g(`)p -Fr(\\n)p Fu(')g(is)e(newline;)h(`)p Fr(\\f)p Fu(')h(is)e(formfeed\).)40 -b(See)27 b(`)p Fr(SM)j Fm(BC)8 b Fr(=2)p Fu(')26 b(ab)s(o)m(v)m(e)h -(for)g(the)390 783 y(meaning)j(of)g(the)h(return)e(v)-5 -b(alue.)2826 1019 y(ESC/P2)30 b(remote)i(command)-3725 -b Fh(*)38 b(??)h Fm(BC)8 b Fh(=)p Fm(xx)45 b(y)8 b Fh([1])39 -b(...)g Fm(y)8 b Fh([xx])390 1128 y Fu(Ec)m(ho)45 b(P)m(arameters)g -(\(p)s(erhaps)e(b)s(etter)h(describ)s(ed)e(as)i(Ec)m(ho)h(Commands\).) -81 b(The)43 b(command)390 1238 y(string)33 b(is)g(executed)h(\(it)g(w)m -(ould)f(app)s(ear)g(from)g(the)h(do)s(cumen)m(tation\),)h(and)f(the)g -(string)f(sen)m(t)h(is)390 1347 y(returned)29 b(using)g(a)i(sequence)g -(similar)d(to)k(that)f(describ)s(ed)d(in)i(the)g(`)p -Fr(ST)g Fm(BC)8 b Fr(=1)p Fu(')30 b(and)g(`)p Fr(SM)g -Fm(BC)8 b Fr(=1)p Fu(')390 1457 y(commands.)40 b(Note)32 -b(that)f(in)e(this)g(case)j(the)e(n)m(um)m(b)s(er)f(of)i(b)m(ytes)g(is) -e(v)-5 b(ariable!)2826 1693 y(ESC/P2)30 b(remote)i(command)-3725 -b Fh(*)38 b(SM)h Fm(BC)8 b Fh(=2)39 b(00)g(02)390 1803 -y Fi(F)-8 b(unction)31 b(unkno)m(wn)p Fu(.)39 b(Used)30 -b(on)h(the)f(STC)f(3000)j(at)g(least)e(when)g(using)e(roll)h(feed.)150 -2062 y Ft(C.4)68 b(Appropriate)45 b(Remote)i(Commands)275 -2255 y Fu(All)25 b(of)h(the)h(remote)h(commands)e(describ)s(ed)e(ab)s -(o)m(v)m(e)k(are)f(wrapp)s(ed)d(up)i(with)f(the)i(usual)e(b)s -(oilerplate.)150 2365 y(The)40 b(\014les)f(alw)m(a)m(ys)j(start)f(with) -e(`)p Fr(00)30 b(00)g(00)p Fu(')40 b(and)g(the)g(\\magic")i(command)e -(describ)s(ed)f(ab)s(o)m(v)m(e,)44 b(then)150 2474 y(t)m(w)m(o)32 -b(`)p Fr(ESC)e(@)p Fu('s)g(to)i(reset)f(the)g(prin)m(ter.)41 -b(The)30 b(remote)i(command)e(sequences)h(come)h(next;)g(if)d(they)i -(prin)m(t)150 2584 y(an)m(ything)26 b(that)i(is)d(usually)g(follo)m(w)m -(ed)h(b)m(y)h(a)g(`)p Fr(FF)p Fu(')g(\(0C)g(hex\))g(c)m(haracter)i(to)e -(feed)g(the)g(page,)h(then)f(the)g(\014le)150 2693 y(ends)j(with)f -(another)h(t)m(w)m(o)i(`)p Fr(ESC)e(@)p Fu('s)g(to)h(get)g(bac)m(k)h -(to)f(the)f(ground)g(state.)275 2829 y(An)g(alignmen)m(t)f(sequence)i -(go)s(es)g(lik)m(e)f(this:)199 2964 y(1.)61 b(Host)31 -b(uses)f(`)p Fr(DT)p Fu(')g(to)h(prin)m(t)e(an)i(alignmen)m(t)e(sheet) -199 3099 y(2.)61 b(User)30 b(ey)m(eballs)g(the)h(sheet)g(to)g(see)g -(whic)m(h)e(is)g(the)i(b)s(est)f(aligned)f(pattern.)199 -3233 y(3.)61 b(Host)31 b(sends)f(a)g(`)p Fr(DA)p Fu(')h(command)f -(indicating)e(whic)m(h)h(pattern)i(the)f(user)g(c)m(hose)199 -3368 y(4.)61 b(If)30 b(the)g(user)g(said)g Fr(")p Fu(realign)p -Fr(")p Fu(,)e(meaning)i(he)g(isn't)g(done)g(y)m(et,)i(go)f(to)g(step)g -(1)199 3503 y(5.)61 b(W)-8 b(e)32 b(are)e(done:)41 b(host)30 -b(sends)g(a)h(`)p Fr(SV)p Fu(')f(command)g(and)g(exits)275 -3664 y(The)g(sequence)i(used)e(\(b)m(y)h(the)h(STC)e(3000,)j(at)f -(least\))g(to)f(prin)m(t)f(from)h(the)g(roll)f(feed)h(is)f(\(with)g(b)m -(yte)150 3773 y(coun)m(t)h(omitted\))629 3903 y Fr(PM)47 -b(00)g(00)629 4006 y(SN)g(00)g(00)g(00)629 4110 y(EX)g(00)g(00)g(00)g -(00)h(05)f(01)629 4214 y(ST)g(00)g(01)629 4318 y(SM)g(00)g(02)275 -4453 y Fu(The)29 b(sequence)i(used)f(b)m(y)g(the)h(STP)e(870)j(to)f -(prin)m(t)e(on)h(plain)e(pap)s(er)i(is)629 4582 y Fr(PM)47 -b(00)g(00)629 4686 y(IR)g(00)g(03)629 4790 y(SN)g(00)g(00)g(01)629 -4893 y(SN)g(00)g(01)g(00)629 4997 y(SN)g(00)g(02)g(01)629 -5101 y(EX)g(00)g(00)g(00)g(00)h(05)f(00)629 5205 y(FP)g(00)g(00)g(00) -150 5340 y Fu(and)30 b(the)g(job)g(\014nishes)f(with)p -eop -%%Page: 73 78 -73 77 bop 150 -116 a Fu(App)s(endix)28 b(C:)i(ESC/P2)2640 -b(73)629 299 y Fr(IR)47 b(00)g(02)629 403 y(LD)275 537 -y Fu(F)-8 b(or)43 b(di\013eren)m(t)f(pap)s(er)g(t)m(yp)s(e)h(settings)g -(on)g(the)g(STP)f(870,)47 b(the)c(argumen)m(ts)h(to)f(`)p -Fr(SN)p Fu(')g(v)-5 b(ary)d(.)78 b(The)150 647 y(argumen)m(ts)37 -b(to)h(the)f(\014rst)f(and)g(third)f(`)p Fr(SN)p Fu(')i(commands)f(are) -h(as)g(outlined)e(in)h(the)h(description)e(of)i(the)150 -756 y(`)p Fr(SN)p Fu(')c(command)g(ab)s(o)m(v)m(e;)k(the)c(argumen)m -(ts)h(to)g(the)f(second)h(\(\\platen)f(gap"\))i(are)e(`)p -Fr(00)d(01)g(01)p Fu(')j(for)g(thic)m(k)150 866 y(pap)s(ers)e -(\(\\matte)k(pap)s(er|hea)m(vyw)m(eigh)m(t",)f(\\photo)g(pap)s(er")e -(and)g(\\premium)f(glossy)h(photo)h(pap)s(er"\))150 976 -y(and)d(`)p Fr(00)g(01)g(00)p Fu(')g(for)g(all)f(others.)275 -1110 y(F)-8 b(or)41 b(roll-mo)s(de)e(prin)m(ting,)i(the)f(STP)g(870's)h -(sequence)g(c)m(hanges)h(as)e(follo)m(ws.)70 b(`)p Fr(IR)p -Fu(''s)41 b(argumen)m(ts)150 1220 y(b)s(ecome)35 b(`)p -Fr(00)30 b(01)p Fu(')k(in)g(the)h(header,)g(and)f(`)p -Fr(00)d(00)p Fu(')j(after)h(the)g(job,)h(and)e(`)p Fr(EX)p -Fu(''s)g(last)h(argumen)m(t)g(c)m(hanges)150 1329 y(from)30 -b(`)p Fr(00)p Fu(')g(to)h(`)p Fr(01)p Fu('.)275 1464 -y(F)-8 b(or)27 b(zero-margin)g(prin)m(ting)d(on)j(the)g(STP)e(870,)k -(the)e(argumen)m(ts)g(to)h(`)p Fr(FP)p Fu(')e(b)s(ecome)h(`)p -Fr(00)j(0xb0)g(0xff)p Fu('.)150 1573 y(This)h(mo)m(v)m(es)j(the)f -(origin)e(ab)s(out)i(5.5mm)g(to)g(the)g(left,)h(to)f(a)g(p)s(oin)m(t)f -(one)h(ten)m(th)g(of)g(an)g(inc)m(h)f(to)h(the)g(left)150 -1683 y(of)g(the)g(left-hand)f(edge)i(of)f(the)g(pap)s(er,)g(allo)m -(wing)e(prin)m(ting)g(righ)m(t)h(up)g(to)i(\(and)f(b)s(ey)m(ond\))f -(the)h(edge)h(of)150 1792 y(the)g(pap)s(er.)50 b(Some)34 -b(prin)m(ters)e(\(at)j(least)f(the)g(STP)f(870\))i(include)c(white)i -(absorb)s(en)m(t)h(pads)f(at)h(the)g(left)150 1902 y(margin)h(p)s -(osition)f(and)h(other)h(p)s(ositions)e(\(89mm)i(and)f(100mm)i(on)e -(the)h(STP)f(870\))j(to)e(soak)h(up)d(ink)150 2012 y(whic)m(h)e(misses) -g(the)i(edge)g(of)f(the)h(pap)s(er.)48 b(Prin)m(ting)32 -b(o\013)i(the)f(edge)h(of)g(pap)s(er)e(of)h(a)h(width)e(not)h(aligned) -150 2121 y(with)27 b(a)h(pad)f(could)g(result)g(in)g(making)g(a)h(mess) -g(of)g(the)g(inside)e(of)i(the)g(prin)m(ter)e(and)i(ink)e(getting)j(on) -f(the)150 2231 y(rev)m(erse)j(of)g(the)f(pap)s(er.)p -eop -%%Page: 74 79 -74 78 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(74)150 299 y Fp(App)t(endix)53 b(D)81 b(Adding)53 -b(a)h(new)f(prin)l(ter)275 506 y Fu(This)36 b(app)s(endix)f(co)m(v)m -(ers)40 b(adding)c(a)i(new)g(ESCP/2,)h(PCL,)f(or)g(Canon)f(prin)m(ter.) -62 b(W)-8 b(riting)37 b(a)h(new)150 616 y(driv)m(er)29 -b(mo)s(dule)g(is)g(not)i(co)m(v)m(ered.)275 745 y(The)e(three)i(steps)f -(to)h(adding)e(a)i(prin)m(ter)e(are:)199 874 y(1.)61 -b(Add)29 b(an)i(en)m(try)f(to)h(`)p Fr(printers.xml)p -Fu(')199 1003 y(2.)61 b(Add)29 b(the)i(appropriate)e(co)s(de)i(and)f -(data)h(to)g(the)g(appropriate)e(driv)m(er)g(mo)s(dule)199 -1132 y(3.)61 b(T)-8 b(une)30 b(the)g(prin)m(ter)275 1281 -y(Prin)m(ter)i(information)f(is)h(stored)h(in)f(t)m(w)m(o)i(places:)46 -b(in)32 b(`)p Fr(printers.xml)p Fu(')e(\(whic)m(h)i(con)m(tains)h(the)g -(list)150 1391 y(of)25 b(prin)m(ter)f(mo)s(dels)f(a)m(v)-5 -b(ailable)25 b(to)h(the)f(the)g(upp)s(er-lev)m(el)e(application\),)i -(and)f(in)g(the)h(appropriate)f(driv)m(er)150 1500 y(\014le)29 -b(\(`)p Fr(print-escp2.c)p Fu(',)f(`)p Fr(print-pcl.c)p -Fu(',)g(or)j(`)p Fr(print-canon.c)p Fu('\).)150 1742 -y Ft(D.1)68 b(`)p Fl(printers.xml)p Ft(')275 1929 y Fu(`)p -Fr(printers.xml)p Fu(')30 b(is)i(an)i(XML-lik)m(e)f(\014le)f(\(there's) -i(no)f(formal)g(DTD\))h(that)g(con)m(tains)f(v)m(ery)h(simple)150 -2038 y(prin)m(ter)29 b(de\014nitions.)38 b(A)31 b(t)m(ypical)f -(de\014nition)e(follo)m(ws:)390 2162 y Fr()390 -2266 y()390 2369 y()390 2473 -y()390 2577 y()390 -2681 y()390 2784 y()275 -2914 y Fu(There)f(are)i(other)g(tags)g(that)g(ma)m(y)g(b)s(e)f(presen)m -(t.)86 b(The)44 b(only)h(ones)g(that)h(are)g(mandatory)g(are)150 -3023 y(`)p Fr()p Fu(',)51 b(`)p Fr()p -Fu(',)h(`)p Fr()p Fu(',)g(and)c(`)p Fr()p -Fu('.)93 b(The)48 b(other)h(optional)f(parameters)150 -3133 y(\(gamma)34 b(and)d(densit)m(y)h(in)f(this)g(case\))j(can)f(b)s -(e)f(used)f(to)i(adjust)f(con)m(trol)h(settings.)47 b(This)30 -b(is)i(probably)150 3242 y(not)38 b(the)g(righ)m(t)f(place)h(for)f -(them;)k(the)d(prin)m(ter)f(driv)m(ers)f(themselv)m(es)i(should)d(con)m -(tain)j(this)f(informa-)150 3352 y(tion.)43 b(There's)30 -b(probably)g(no)h(go)s(o)s(d)g(reason)g(for)g(an)m(ything)g(but)f -(gamma)i(and)f(densit)m(y)f(to)i(b)s(e)f(in)f(here.)150 -3462 y(Gamma)40 b(refers)f(to)g(the)h(prin)m(ter's)e(gamma)i(factor;)k -(densit)m(y)39 b(is)f(the)h(desired)f(base)h(ink)f(densit)m(y)g(for)150 -3571 y(the)h(prin)m(ter.)66 b(The)39 b(Epson)g(driv)m(er)f(con)m(tains) -h(the)g(densit)m(y)g(information)e(for)i(eac)m(h)i(prin)m(ter)d(at)i -(eac)m(h)150 3681 y(resolution)27 b(in)m(ternally)-8 -b(.)38 b(An)28 b(ev)m(en)i(b)s(etter)e(driv)m(er)f(w)m(ould)g(adjust)h -(densit)m(y)g(and)g(p)s(ossibly)d(ev)m(en)k(gamma)150 -3790 y(for)h(pap)s(er)f(t)m(yp)s(e.)41 b(All)29 b(the)i(more)f(reason)h -(not)g(to)g(ha)m(v)m(e)g(that)g(information)e(here.)275 -3919 y(If)38 b(y)m(ou)h(really)f(are)h(curious)e(ab)s(out)i(what)g -(tags)h(are)f(p)s(ermitted,)h(please)e(see)i(`)p Fr(printdefl.l)p -Fu('.)63 b(I)150 4029 y(delib)s(erately)28 b(w)m(an)m(t)j(to)h(mak)m(e) -f(this)e(obscure.)275 4158 y(An)m(yw)m(a)m(y)-8 b(,)32 -b(here's)e(the)h(de\014nition)d(of)i(the)h(tags)g(that)g(do)f(matter:) -3095 4365 y(`)p Fr(printers.xml)p Fu(')d(tag)-3723 b -Fh()390 4475 y Fu(This)36 b(starts)i(the)g -(de\014nition)e(of)i(a)g(prin)m(ter.)62 b(The)37 b Fm(longname)43 -b Fu(should)35 b(b)s(e)j(something)f(h)m(uman)390 4585 -y(readable;)29 b(the)g Fm(driv)m(ername)j Fu(should)26 -b(consist)i(of)h(alphan)m(umerics)d(and)i(h)m(yphens,)g(and)g(b)s(e)g -(fairly)390 4694 y(short.)38 b(The)21 b Fm(longname)27 -b Fu(is)22 b(what)g(will)d(app)s(ear)j(in)f(the)h(GUI)h(listing)d(of)i -(prin)m(ters;)i(the)e Fm(driv)m(ername)390 4804 y Fu(is)35 -b(what)h(is)f(actually)g(used)g(to)i(k)m(ey)f(in)m(to)g(the)g(list)f -(of)h(prin)m(ters.)55 b(It)36 b(is)f(legal)h(to)g(ha)m(v)m(e)h(m)m -(ultiple)390 4913 y(prin)m(ters)29 b(with)g(the)i(same)f(driv)m(er)f -(name.)3095 5121 y(`)p Fr(printers.xml)p Fu(')e(tag)-3723 -b Fh()3095 5230 y Fu(`)p Fr(printers.xml)p Fu(')27 -b(tag)-3723 b Fh()390 5340 y Fu(Indicates)30 -b(that)h(this)e(prin)m(ter)g(is)h(capable)g(of)g(color,)h(or)f(is)g -(not)g(capable)h(of)f(color)h(resp)s(ectiv)m(ely)p eop -%%Page: 75 80 -75 79 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(75)3095 299 y(`)p Fr(printers.xml)p Fu(')27 -b(tag)-3723 b Fh()390 -408 y Fu(This)27 b(de\014nes)h(a)i(mo)s(del)e(n)m(um)m(b)s(er.)39 -b(This)27 b(is)h(passed)g(in)m(to)h(the)h(driv)m(er,)e(whic)m(h)g(ma)m -(y)h(do)g(whatev)m(er)390 518 y(it)35 b(cares)g(to)h(with)e(it|index)f -(in)m(to)i(a)h(table,)g(compute)g(on,)g(or)f(whatev)m(er.)56 -b(This)33 b(need)i(not)h(b)s(e)390 628 y(unique.)3095 -862 y(`)p Fr(printers.xml)p Fu(')27 b(tag)-3723 b Fh()390 971 y Fu(This)39 -b(de\014nes)h(what)h(driv)m(er)f(mo)s(dule)f(this)h(prin)m(ter)g(uses.) -72 b Fm(t)m(yp)s(e)46 b Fu(should)39 b(b)s(e)h(`)p Fr(escp2)p -Fu(',)j(`)p Fr(pcl)p Fu(',)390 1081 y(`)p Fr(canon)p -Fu(',)30 b(or)g(`)p Fr(ps)p Fu('.)3095 1315 y(`)p Fr(printers.xml)p -Fu(')d(tag)-3723 b Fh()390 1425 y Fu(This,)29 -b(of)h(course,)h(closes)g(o\013)f(a)h(prin)m(ter)e(de\014nition.)275 -1609 y(This)39 b(is)h(handled)g(v)m(ery)i(ad-ho)s(c.)73 -b(It's)42 b(ugly)-8 b(.)73 b(But)41 b(it's)g(reasonably)g(easy)h(to)g -(extend,)j(and)40 b(it's)150 1719 y(buzzw)m(ord-complian)m(t.)150 -1976 y Ft(D.2)68 b(The)44 b(driv)l(er)i(\014le)275 2169 -y Fu(Adding)61 b(a)j(new)f(prin)m(ter)f(to)i(a)g(driv)m(er)e(mo)s(dule) -g(\(`)p Fr(print-escp2.c)p Fu(',)69 b(`)p Fr(print-pcl.c)p -Fu(',)g(or)150 2278 y(`)p Fr(print-canon.c)p Fu('|`)p -Fr(print-ps.c)p Fu(')43 b(is)k(really)h(ad)g(ho)s(c\))g(requires)f(a)i -(bit)f(more)g(planning.)92 b(Eac)m(h)150 2388 y(driv)m(er)41 -b(is)g(somewhat)h(di\013eren)m(t,)j(but)c(they)i(all)e(generally)g(ha)m -(v)m(e)i(a)g(v)m(ector)g(of)f(prin)m(ter)f(de\014nitions,)150 -2497 y(and)35 b(the)g(co)s(de)h(do)s(es)f(some)g(sp)s(ecial)f(casing)h -(based)g(on)g(particular)f(prin)m(ter)g(capabilities.)53 -b(The)35 b(PCL)150 2607 y(and)c(Canon)h(driv)m(ers)e(are)i(quite)f -(similar;)f(the)i(Canon)g(driv)m(er)e(w)m(as)j(actually)e(cribb)s(ed)e -(from)j(the)g(PCL)150 2716 y(driv)m(er,)d(but)h(it)g(then)g(returned)f -(the)i(fa)m(v)m(or.)275 2851 y(The)j(Epson)h(driv)m(er)e(is)i(a)g -(little)f(bit)g(di\013eren)m(t.)55 b(Canon)35 b(and)f(PCL)h(prin)m -(ters)e(ha)m(v)m(e)k(some)e(amoun)m(t)150 2961 y(of)c(in)m(telligence;) -f(a)h(lot)f(of)h(them)g(ha)m(v)m(e)g(sp)s(eci\014c)f(ink)f(options,)h -(and)g(kno)m(w)h(ab)s(out)f(sp)s(eci\014c)g(pap)s(er)f(sizes)150 -3070 y(and)c(t)m(yp)s(es,)i(and)e(m)m(ust)h(b)s(e)f(told)h(the)g(righ)m -(t)f(thing.)38 b(Epson)25 b(prin)m(ters)g(ha)m(v)m(e)i(somewhat)f(less) -f(in)m(telligence)150 3180 y(and)34 b(will)f(more)i(or)g(less)f(do)h -(exactly)h(what)e(the)i(host)f(tells)f(it)g(to)i(do)f(in)e(a)j(fairly)d -(regular)h(fashion.)53 b(I)150 3289 y(actually)29 b(prefer)h(this;)f -(it)g(isn't)g(materially)g(more)h(w)m(ork)g(for)g(the)g(host)g(to)g -(compute)g(things)f(lik)m(e)g(exact)150 3399 y(pap)s(er)23 -b(sizes)h(and)g(suc)m(h,)h(it)f(allo)m(ws)g(a)g(lot)h(more)f(t)m(w)m -(eaking,)j(and)d(it)f(ma)m(y)i(b)s(e)f(wh)m(y)g(Epson)f(has)h(b)s(een)g -(more)150 3509 y(op)s(en)31 b(with)g(information)f({)i(the)g(comm)m -(unication)f(proto)s(col)g(do)s(esn't)h(really)f(con)m(tain)h(v)m(ery)g -(m)m(uc)m(h)g(IP)-8 b(,)150 3618 y(so)31 b(they)f(ha)m(v)m(e)i(less)d -(reason)i(to)g(k)m(eep)g(it)f(secret.)275 3753 y(Someone)g(else)h(will) -c(ha)m(v)m(e)32 b(to)f(\014ll)d(in)h(the)i(sections)f(ab)s(out)g(PCL)g -(and)g(Canon)g(prin)m(ters.)150 4010 y Ft(D.3)68 b(Epson)45 -b(inkjet)g(prin)l(ters)275 4203 y Fu(The)34 b(`)p Fr -(model_capabilities)p Fu(')c(v)m(ector)36 b(in)d(`)p -Fr(print-escp2.c)p Fu(')f(con)m(tains)j(one)g(en)m(try)g(for)f(eac)m(h) -i(de-)150 4312 y(\014ned)29 b(prin)m(ter)g(mo)s(del.)40 -b(The)30 b(`)p Fr(model)p Fu(')f(parameter)i(in)e(`)p -Fr(printers.xml)p Fu(')f(is)h(an)h(index)f(in)m(to)i(this)e(table.)275 -4447 y(In)43 b(general,)k(the)d(new)f(prin)m(ters)g(ha)m(v)m(e)i(few)m -(er)f(eccen)m(tricities)g(than)f(the)h(older)f(prin)m(ters.)80 -b(That)150 4556 y(do)s(esn't)30 b(mean)h(they're)f(simpler,)f(just)g -(that)i(they're)g(more)g(consisten)m(t.)275 4691 y(An)f -Fr(escp2_printer_t)c Fu(is)j(a)i(C)f(struct)g(de\014ned)f(as)i(follo)m -(ws:)3474 4925 y(Data)h(t)m(yp)s(e)-3724 b Fk(escp2)p -427 4925 35 5 v 41 w(prin)m(ter)p 817 4925 V 39 w(t)630 -5029 y Fr(typedef)46 b(struct)g(escp2_printer)630 5132 -y({)725 5236 y(model_cap_t)f(flags;)h(/*)h(Bitmask)f(of)h(flags,)g(see) -f(below)h(*/)630 5340 y(/***********************)o(****)o(****)o(***)o -(****)o(****)o(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o -(***)o(***/)p eop -%%Page: 76 81 -76 80 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(76)725 299 y Fr(int)47 b(nozzles;)f(/*)h(Number)f(of)h -(nozzles)f(per)h(color)f(*/)725 403 y(int)h(min_nozzles;)e(/*)i -(Minimum)f(number)g(of)h(nozzles)f(per)h(color)f(*/)725 -506 y(int)h(nozzle_separation;)c(/*)k(Separation)e(between)h(rows,)h -(in)g(1/360")f(*/)725 610 y(int)h(black_nozzles;)d(/*)j(Number)g(of)g -(black)f(nozzles)g(\(may)h(be)g(extra\))f(*/)725 714 -y(int)h(min_black_nozzles;)c(/*)k(#)h(of)f(black)f(nozzles)g(\(may)h -(be)g(extra\))f(*/)725 818 y(int)h(black_nozzle_separation;)42 -b(/*)47 b(Separation)e(between)h(rows)g(*/)725 922 y(int)h -(fast_nozzles;)e(/*)i(Number)f(of)h(fast)g(nozzles)e(*/)725 -1025 y(int)i(min_fast_nozzles;)c(/*)48 b(#)f(of)g(fast)g(nozzles)f -(\(may)g(be)i(extra\))e(*/)725 1129 y(int)h(fast_nozzle_separation;)42 -b(/*)47 b(Separation)e(between)h(rows)g(*/)630 1233 y -(/***********************)o(****)o(****)o(***)o(****)o(****)o(***)o -(****)o(****)o(***)o(****)o(****)o(***)o(****)o(***)o(***/)725 -1337 y(int)h(xres;)g(/*)g(Normal)f(distance)g(between)f(dots)i(in)g(*/) -630 1440 y(/*)g(softweave)e(mode)i(\(inverse)f(inches\))f(*/)725 -1544 y(int)i(enhanced_xres;)d(/*)j(Distance)f(between)g(dots)g(in)i -(highest)d(*/)630 1648 y(/*)i(quality)f(modes)g(*/)725 -1752 y(int)h(base_separation;)d(/*)j(Basic)f(unit)h(of)g(row)g -(separation)e(*/)725 1856 y(int)i(base_resolution;)d(/*)j(Base)g -(hardware)e(spacing)h(\(above)g(this)h(*/)630 1959 y(/*)g(always)f -(requires)g(multiple)f(passes\))h(*/)725 2063 y(int)h -(enhanced_resolution;/*)42 b(Above)k(this)h(we)g(use)g(the)g(*/)821 -2167 y(/*)g(enhanced_xres)d(rather)i(than)h(xres)g(*/)725 -2271 y(int)g(resolution_scale;)139 b(/*)47 b(Scaling)f(factor)g(for)h -(ESC\(D)f(command)g(*/)725 2374 y(int)h(max_black_resolution;)42 -b(/*)48 b(Above)e(this)h(resolution,)d(we)j(*/)916 2478 -y(/*)h(must)e(use)h(color)f(parameters)f(*/)916 2582 -y(/*)j(rather)e(than)g(\(faster\))g(black)g(*/)916 2686 -y(/*)i(only)e(parameters*/)725 2790 y(int)h(max_hres;)725 -2893 y(int)g(max_vres;)725 2997 y(int)g(min_hres;)725 -3101 y(int)g(min_vres;)630 3205 y(/***********************)o(****)o -(****)o(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o(****)o -(***)o(****)o(***)o(***/)725 3308 y(int)g(max_paper_width;)d(/*)j -(Maximum)f(paper)g(width,)g(in)h(points)f(*/)725 3412 -y(int)h(max_paper_height;)c(/*)48 b(Maximum)d(paper)i(height,)f(in)h -(points)f(*/)725 3516 y(int)h(min_paper_width;)d(/*)j(Maximum)f(paper)g -(width,)g(in)h(points)f(*/)725 3620 y(int)h(min_paper_height;)c(/*)48 -b(Maximum)d(paper)i(height,)f(in)h(points)f(*/)630 3724 -y(/*)h(Printer)f(interleave:)f(*/)725 3827 y(int)i(m_left_margin;)d(/*) -j(Left)g(margin,)f(points)g(*/)725 3931 y(int)h(m_right_margin;)d(/*)j -(Right)g(margin,)e(points)h(*/)725 4035 y(int)h(m_top_margin;)e(/*)i -(Absolute)e(top)i(margin,)f(points)g(*/)725 4139 y(int)h -(m_bottom_margin;)d(/*)j(Absolute)e(bottom)i(margin,)e(points)h(*/)630 -4242 y(/*)h(ROLL)g(FEED:)f(*/)630 4346 y(/*)h(Softweave:)e(*/)725 -4450 y(int)i(roll_left_margin;)c(/*)48 b(Left)e(margin,)g(points)g(*/) -725 4554 y(int)h(roll_right_margin;)c(/*)k(Right)g(margin,)f(points)g -(*/)725 4658 y(int)h(roll_top_margin;)d(/*)j(Absolute)e(top)i(margin,)f -(points)g(*/)725 4761 y(int)h(roll_bottom_margin;)c(/*)k(Absolute)f -(bottom)g(margin,)g(points)g(*/)630 4865 y(/*)h(Printer)f(interleave:)f -(*/)725 4969 y(int)i(m_roll_left_margin;)c(/*)k(Left)g(margin,)f -(points)g(*/)725 5073 y(int)h(m_roll_right_margin;)c(/*)k(Right)f -(margin,)g(points)g(*/)725 5176 y(int)h(m_roll_top_margin;)c(/*)k -(Absolute)f(top)h(margin,)f(points)g(*/)725 5280 y(int)h -(m_roll_bottom_margin;)42 b(/*)48 b(Absolute)d(bottom)h(margin,)g -(points)g(*/)p eop -%%Page: 77 82 -77 81 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(77)630 299 y Fr(/***********************)o(****)o(****)o -(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o(****)o(***)o -(****)o(***)o(***/)725 403 y(int)47 b(extra_feed;)e(/*)i(Extra)g -(distance)e(the)i(paper)f(can)h(be)h(spaced)e(*/)630 -506 y(/*)h(beyond)f(the)h(bottom)f(margin,)g(in)h(1/360".)f(*/)630 -610 y(/*)h(\(maximum)f(useful)g(value)g(is)h(*/)630 714 -y(/*)g(nozzles)f(*)h(nozzle_separation\))c(*/)725 818 -y(int)k(separation_rows;)d(/*)j(Some)g(printers)e(require)h(funky)g -(spacing)g(*/)630 922 y(/*)h(arguments)e(in)j(interleave)d(mode.)h(*/) -725 1025 y(int)h(pseudo_separation_rows;/*)41 b(Some)47 -b(printers)e(require)h(funky)h(*/)630 1129 y(/*)g(spacing)f(arguments)f -(in)i(softweave)f(mode)g(*/)725 1337 y(int)525 b(zero_margin_offset;) -138 b(/*)47 b(Offset)f(to)h(use)g(to)g(achieve)f(*/)916 -1440 y(/*)i(zero-margin)c(printing)i(*/)725 1544 y(int)h -(initial_vertical_offset;)725 1648 y(int)g(black_initial_vertical_off)o -(set)o(;)725 1752 y(int)g(extra_720dpi_separation;)630 -1959 y(/***********************)o(****)o(****)o(***)o(****)o(****)o -(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o(***)o(***/)725 -2063 y(const)g(int)g(*dot_sizes;)d(/*)k(Vector)e(of)h(dot)g(sizes)f -(for)h(resolutions)e(*/)725 2167 y(const)i(double)f(*densities;)f(/*)i -(List)f(of)i(densities)d(for)i(each)f(printer)g(*/)725 -2271 y(const)h(escp2_variable_inklist_t)41 b(*inks;)46 -b(/*)h(Choices)f(of)h(inks)g(for)g(this)f(printer)g(*/)630 -2374 y(/***********************)o(****)o(****)o(***)o(****)o(****)o -(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o(***)o(***/)725 -2478 y(const)h(paperlist_t)e(*paperlist;)725 2582 y(const)i(res_t)f -(*reslist;)725 2686 y(const)h(inklist_t)e(*inklist;)630 -2790 y(/***********************)o(****)o(****)o(***)o(****)o(****)o -(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o(***)o(***/)725 -2893 y(const)i(int)g(*bits;)725 2997 y(const)g(int)g -(*base_resolutions;)725 3101 y(const)g(input_slot_list_t)c -(*input_slots;)630 3205 y(/***********************)o(****)o(****)o(***) -o(****)o(****)o(***)o(****)o(****)o(***)o(****)o(****)o(***)o(****)o -(***)o(***/)725 3308 y(const)k(init_sequence_t)c(*preinit_sequence;)725 -3412 y(const)k(init_sequence_t)c(*postinit_remote_sequence;)630 -3516 y(})k(escp2_printer_t;)275 3756 y Fu(The)c(prin)m(ter)g -(de\014nition)f(blo)s(c)m(k)i(is)f(divided)f(in)m(to)i(8)h(sections.)82 -b(The)44 b(\014rst)g(section)g(is)f(a)i(set)g(of)150 -3866 y(miscellaneous)33 b(prin)m(ter)g(options.)53 b(These)34 -b(are)h(describ)s(ed)e(in)g(the)i(co)s(de,)h(and)e(will)e(not)j(b)s(e)f -(discussed)150 3976 y(further)29 b(here.)275 4138 y(The)21 -b(second)i(section)f(describ)s(es)f(the)h(n)m(um)m(b)s(er)f(of)i -(nozzles)f(and)g(the)h(separation)f(b)s(et)m(w)m(een)h(nozzles)f(in)150 -4248 y(base)28 b(units.)38 b(The)28 b(base)g(unit)e(is)h(1/360)p -Fr(")j Fu(for)e(all)f(curren)m(tly)g(supp)s(orted)f(prin)m(ters,)h(but) -g(future)g(prin)m(ters)150 4357 y(ma)m(y)k(supp)s(ort)e(a)h(smaller)f -(base)i(unit.)275 4520 y(Man)m(y)k(prin)m(ters)e(ha)m(v)m(e)i(more)g -(blac)m(k)f(nozzles)h(than)f(nozzles)h(of)f(other)h(colors,)g(and)f -(when)g(used)f(in)150 4629 y(blac)m(k)j(and)g(white)f(mo)s(de,)j(it's)e -(p)s(ossible)e(to)j(use)f(these)g(extra)h(nozzles,)h(whic)m(h)d(sp)s -(eeds)h(up)f(prin)m(ting.)150 4739 y(As)i(an)f(example,)j(a)e(prin)m -(ter)e(that)i(is)f(sp)s(eci\014ed)f(to)j(ha)m(v)m(e)g(48)f(cy)m(an,)i -(magen)m(ta,)i(and)36 b(y)m(ello)m(w)g(nozzles,)150 4849 -y(and)f(144)h(blac)m(k)g(nozzles,)h(can)e(use)g(all)g(144)h(blac)m(k)g -(nozzles)f(when)f(prin)m(ting)g(blac)m(k)h(ink)f(only)-8 -b(.)55 b(When)150 4958 y(prin)m(ting)28 b(in)h(color,)i(only)e(48)j -(nozzles)e(of)h(eac)m(h)g(color)g(\(including)c(blac)m(k\))k(can)g(b)s -(e)e(used.)275 5121 y(Most)45 b(prin)m(ters)e(can)h(prin)m(t)f(using)g -(either)h(the)g(n)m(um)m(b)s(er)f(of)h(nozzles)h(a)m(v)-5 -b(ailable)44 b(or)g(an)m(y)g(smaller)150 5230 y(n)m(um)m(b)s(er.)39 -b(Some)29 b(prin)m(ters)e(require)h(that)h(all)f(of)h(the)g(nozzles)h -(b)s(e)e(used.)39 b(Those)29 b(prin)m(ters)e(will)g(set)i -Fr(min_)150 5340 y(nozzles)22 b Fu(and/or)i Fr(min_black_nozzles)19 -b Fu(to)25 b(the)f(same)g(v)-5 b(alue)23 b(as)i Fr(nozzles)c -Fu(and/or)j Fr(black_nozzles)p Fu(.)p eop -%%Page: 78 83 -78 82 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(78)275 299 y(The)31 b(third)g(section)h(de\014nes)f(basic)h -(units)e(of)j(measure)f(for)g(the)g(prin)m(ter,)g(including)c(the)33 -b(standard)150 408 y(separation)24 b(b)s(et)m(w)m(een)g(dots,)h(the)f -(base)g(nozzle)g(separation,)h(and)e(the)h(minim)m(um)d(and)i(maxim)m -(um)g(prin)m(t-)150 518 y(ing)28 b(resolutions)f(the)h(prin)m(ter)g -(supp)s(orts.)38 b(Most)29 b(of)g(these)g(are)g(fairly)e -(self-explanatory)-8 b(,)29 b(but)f(some)h(are)150 628 -y(not)i(ob)m(vious.)275 774 y(Most)44 b(Epson)e(prin)m(ters,)j(other)f -(than)f(the)g(high-end)f(St)m(ylus)g(Pro)h(mo)s(dels,)i(cannot)f(prin)m -(t)e(dots)150 883 y(spaced)30 b(more)g(closely)g(than)g(1/360)p -Fr(")i Fu(or)e(1/720)p Fr(")i Fu(apart)e(\(this)g(is)f(the)h(setting)g -(for)g Fr(xres)p Fu(.)40 b(This)28 b(is)h(true)150 993 -y(ev)m(en)c(for)g(prin)m(ters)e(that)i(supp)s(ort)e(resolutions)g(of)i -(1440)i(or)d(2880)j(DPI.)e(In)f(these)h(cases,)i(the)e(data)g(m)m(ust) -150 1103 y(b)s(e)33 b(prin)m(ted)f(in)g(2,)j(4,)g(or)f(8)g(passes.)50 -b(While)33 b(the)g(prin)m(ter)g(can)g(p)s(osition)f(the)i(head)f(to)i -(a)f(resolution)e(of)150 1212 y(1/1440)p Fr(")h Fu(or)d(1/2880)p -Fr(")p Fu(,)j(the)e(head)f(cannot)h(dep)s(osit)e(ink)g(that)i(frequen)m -(tly)-8 b(.)275 1358 y(Some)25 b(prin)m(ters)e(can)j(only)e(prin)m(t)f -(in)h(their)g(v)m(ery)i(b)s(est)e(qualit)m(y)h(\(using)f(the)h -(smallest)f(dots)h(a)m(v)-5 b(ailable\))150 1468 y(prin)m(ting)29 -b(at)k(a)f(lo)m(w)m(er)g(resolution.)43 b(F)-8 b(or)32 -b(example,)g(the)g(St)m(ylus)e(Photo)j(EX)e(can)h(normally)e(prin)m(t)g -(with)150 1577 y(a)f(dot)h(spacing)e(of)h(1/720)p Fr(")p -Fu(.)42 b(The)29 b(smallest)f(dot)h(size)g(cannot)h(b)s(e)e(prin)m(ted) -g(with)f(a)j(dot)f(spacing)f(of)i(less)150 1687 y(than)i(1/360)p -Fr(")p Fu(,)j(ho)m(w)m(ev)m(er.)47 b(In)32 b(this)f(case,)j(w)m(e)e -(use)g Fr(enhanced_xres)d Fu(to)k(sp)s(ecify)e(the)h(resolution)f(to)i -(b)s(e)150 1797 y(used)e(in)g(this)h(enhanced)g(mo)s(de,)g(and)g -Fr(enhanced_resolution)27 b Fu(to)33 b(sp)s(ecify)e(the)h(prin)m(ting)e -(resolution)150 1906 y(ab)s(o)m(v)m(e)i(whic)m(h)d(w)m(e)i(use)f(the)g -Fr(enhanced_xres)p Fu(.)275 2052 y(The)22 b Fr(resolution_scale)c -Fu(command)k(is)g(used)g(to)h(sp)s(ecify)f(scaling)f(factors)j(for)e -(the)h(dot)g(separation)150 2162 y(on)30 b(new)m(er)h(prin)m(ters.)39 -b(It)30 b(should)f(alw)m(a)m(ys)i(b)s(e)e(14400)k(with)c(curren)m(t)h -(prin)m(ters.)275 2308 y(The)i(fourth)g(section)h(sp)s(eci\014es)f(the) -h(minim)m(um)d(and)j(maxim)m(um)f(pap)s(er)g(sizes,)h(and)g(the)g -(margins.)150 2418 y(Some)f(prin)m(ters)f(allo)m(w)g(use)h(of)h(narro)m -(w)m(er)f(margins)f(when)g(soft)m(w)m(ea)m(v)m(e)k(is)c(used;)i(b)s -(oth)e(sets)i(of)f(margins)150 2527 y(are)f(sp)s(eci\014ed.)275 -2673 y(There)41 b(is)f(a)i(con)m(v)m(enien)m(t)h(`)p -Fr(INCH)p Fu(')e(macro)h(de\014ned)e(to)i(mak)m(e)h(sp)s(eci\014cation) -d(of)i(the)g Fr(max_paper_)150 2783 y(width)29 b Fu(and)h -Fr(max_paper_height)c Fu(more)31 b(legible.)39 b(It)31 -b(m)m(ultiplies)c(72)32 b(b)m(y)e(the)h(pro)m(vided)e(expression)g(to) -150 2892 y(get)j(the)e(appropriate)g(n)m(um)m(b)s(er)f(of)i(p)s(oin)m -(ts.)40 b(F)-8 b(or)32 b(example,)e(to)i(sp)s(ecify)d(8.5)p -Fr(")p Fu(,)j(`)p Fr(INCH\(17/2\))p Fu(')c(expands)150 -3002 y(to)j(`)p Fr(\(72)f(*)g(17/2\))p Fu(',)f(whic)m(h)g(is)h(ev)-5 -b(aluated)30 b(left)g(to)i(righ)m(t,)e(and)g(hence)g(generates)i(the)e -(correct)i(v)-5 b(alue.)275 3148 y(The)21 b(\014fth)f(section)i(sp)s -(eci\014es)e(some)i(miscellaneous)e(v)-5 b(alues)21 b(that)h(are)g -(required)d(for)j(certain)f(prin)m(ters.)150 3258 y(F)-8 -b(or)28 b(most)f(prin)m(ters,)f(the)h(correct)h(v)-5 -b(alues)26 b(are)h(1)g(for)g Fr(separation_rows)22 b -Fu(and)k(0)i(for)e(the)h(others.)40 b(V)-8 b(ery)g(,)150 -3367 y(v)m(ery)36 b(few)f(prin)m(ters)e(require)h(\(or)i(allo)m(w\))f -Fr(separation_rows)c Fu(to)36 b(b)s(e)f(an)m(ything)f(but)h(1)g(and)g -Fr(pseudo_)150 3477 y(separation_rows)28 b Fu(other)33 -b(than)f(zero.)47 b(The)32 b(St)m(ylus)f(Color)h(1520,)i(St)m(ylus)d -(Color)h(800,)i(St)m(ylus)e(Color)150 3587 y(850,)g(and)e(\(strangely)h -(enough)g(to)g(m)m(y)g(mind,)e(since)h(it's)g(a)i(new)e(prin)m(ter\))f -(St)m(ylus)h(Color)g(660)i(seem)f(to)150 3696 y(b)s(e)f(the)g(only)g -(exceptions.)275 3842 y(The)43 b Fr(zero_margin_offset)c -Fu(is)k(used)h(to)g(sp)s(ecify)f(an)h(additional)e(negativ)m(e)j -(horizon)m(tal)f(o\013set)150 3952 y(required)36 b(to)i(prin)m(t)e(to)j -(the)e(edges)h(of)g(the)g(pap)s(er)e(on)i(new)m(er)f(St)m(ylus)g(Photo) -h(prin)m(ters.)61 b(These)37 b(m)m(ust)150 4061 y(b)s(e)30 -b(determined)f(empirically;)e(go)s(o)s(d)j(starting)g(v)-5 -b(alues)30 b(are)h(100)g(for)f(1440)j(DPI)d(and)g(50)h(for)f(2880)i -(DPI)150 4171 y(prin)m(ters.)39 b(The)30 b(goal)h(is)e(to)j(prin)m(t)d -(to)i(the)f(edge)h(of)g(the)f(page,)i(but)d(not)i(o)m(v)m(er)h(it.)275 -4317 y(The)22 b(sixth)g(section)h(sp)s(eci\014es)e(head)i(o\013sets)g -(for)g(prin)m(ters)e(that)j(do)f(not)g(ha)m(v)m(e)h(the)f(color)g(jets) -g(aligned.)150 4427 y(Certain)28 b(prin)m(ters,)f(suc)m(h)i(as)f(the)h -(St)m(ylus)f(Color)f(480,)k(ha)m(v)m(e)f(an)e(un)m(usual)f(head)h -(arrangemen)m(t)h(whereb)m(y)150 4536 y(instead)38 b(of)g(all)g(of)g -(the)h(colors)f(b)s(eing)f(aligned)g(v)m(ertically)-8 -b(,)41 b(the)d(nozzles)h(are)g(con\014gured)e(in)g(groups.)150 -4646 y(These)26 b(prin)m(ters)e(are)i(easy)h(to)g(determine;)f(if)f -(the)h(normal)f(head)h(o\013set)h(of)f(zero)h(for)e(eac)m(h)i(color)g -(is)d(used,)150 4755 y(the)29 b(prin)m(ting)e(will)g(b)s(e)h(v)m -(ertically)h(out)g(of)h(alignmen)m(t.)39 b(Most)31 b(of)e(these)h(prin) -m(ters)d(require)h(sp)s(eci\014cation)150 4865 y(of)g(a)h(negativ)m(e)g -(o\013set)g(for)f(prin)m(ting)e(to)i(the)h(top)f(edge)h(of)f(the)g(pap) -s(er;)g(t)m(ypically)f(these)h(prin)m(ters)f(do)h(not)150 -4975 y(require)h(suc)m(h)h(an)g(o\013set)i(when)d(prin)m(ting)f(blac)m -(k)j(only)-8 b(.)275 5121 y(The)38 b(sev)m(en)m(th)h(section)g(sp)s -(eci\014es)f(the)g(most)i(di\016cult)c(v)-5 b(alues)38 -b(to)i(tune,)g(the)f(dot)g(sizes,)i(prin)m(ting)150 5230 -y(densities,)28 b(and)f(ink)h(v)-5 b(alues)28 b(\(for)g(v)-5 -b(ariable)28 b(dot)h(size)f(enabled)g(prin)m(ters\).)39 -b(These)28 b(will)e(b)s(e)i(describ)s(ed)e(in)150 5340 -y(detail)k(b)s(elo)m(w.)p eop -%%Page: 79 84 -79 83 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(79)275 299 y(The)42 b(last)g(section)h(sp)s(eci\014es)f -(luminosit)m(y)-8 b(,)44 b(h)m(ue,)i(and)c(saturation)g(adjustmen)m(t)h -(v)m(ectors)h(for)f(the)150 408 y(prin)m(ter,)35 b(and)f(the)h(pap)s -(er)f(de\014nitions.)51 b(These)35 b(are)g(used)f(to)i(adjust)e(the)h -(color)g(in)f(Photograph)h(and)150 518 y(Solid)h(Colors)h(output)h(mo)s -(des.)64 b(These)37 b(are)i(eac)m(h)g(v)m(ectors)h(of)e(48)h -(\(actually)f(49,)j(as)e(the)f(\014rst)f(v)-5 b(alue)150 -628 y(m)m(ust)35 b(b)s(e)g(duplicated\))f(doubles)g(that)i(remap)f(the) -h(luminosit)m(y)-8 b(,)35 b(h)m(ue,)i(and)e(saturation)g(resp)s(ectiv)m -(ely)-8 b(.)150 737 y(The)32 b(h)m(ue)h(is)e(calculated,)j(and)e(the)g -(v)-5 b(alue)32 b(used)g(to)i(in)m(terp)s(olate)e(b)s(et)m(w)m(een)h -(the)g(t)m(w)m(o)h(closest)f(p)s(oin)m(ts)e(in)150 847 -y(eac)m(h)h(v)m(ector.)275 984 y(The)37 b(pap)s(er)h(de\014nitions)e -(is)h(a)i(set)g(of)g(pap)s(er)e(de\014nitions.)63 b(The)38 -b(pap)s(er)f(de\014nition)f(con)m(tains)j(the)150 1093 -y(name)30 b(of)g(the)g(pap)s(er)e(t)m(yp)s(e,)j(sp)s(ecial)d(settings)i -(that)g(are)g(required)e(for)i(prin)m(ters)e(to)j(pro)s(cess)e(the)h -(pap)s(er)150 1203 y(correctly)-8 b(,)31 b(and)f(a)h(set)g(of)f -(adjustmen)m(t)h(v)-5 b(alues.)40 b(These)30 b(are)h(not)f(curren)m -(tly)g(discussed)e(here.)275 1340 y(The)33 b(lists)g(of)h(dot)g(sizes)g -(and)f(densities)f(con)m(tain)j(v)-5 b(alues)33 b(for)h(13)h(prin)m -(ting)c(mo)s(des:)48 b(120/180)37 b(DPI)150 1450 y(using)22 -b(prin)m(ter)h(w)m(ea)m(ving)i(\(single)e(ro)m(w;)j(referred)d(to)i(as) -f(\\in)m(terlea)m(v)m(e"\))i(and)e(\\soft")h(w)m(ea)m(ving)g(\(the)f -(driv)m(er)150 1559 y(determines)39 b(the)h(exact)i(pattern)e(of)g(dot) -h(la)m(y)m(out\),)i(360)f(DPI)e(in)m(terlea)m(v)m(e)h(and)e(soft)m(w)m -(ea)m(v)m(e,)46 b(720x360)150 1669 y(DPI)36 b(in)m(terlea)m(v)m(e)g -(and)f(soft)m(w)m(ea)m(v)m(e,)41 b(720)c(DPI)e(in)m(terlea)m(v)m(e)i -(and)e(soft)m(w)m(ea)m(v)m(e,)40 b(1440x720)f(in)m(terlea)m(v)m(e)e -(and)150 1778 y(soft)m(w)m(ea)m(v)m(e,)d(2880x720)f(in)m(terlea)m(v)m -(e)f(and)d(soft)m(w)m(ea)m(v)m(e,)34 b(and)c(2880x1440)k(soft)m(w)m(ea) -m(v)m(e)f(only)-8 b(.)275 1915 y(F)g(or)29 b(the)g(dot)f(sizes,)h(the)g -(v)-5 b(alue)28 b(for)g(eac)m(h)i(elemen)m(t)f(in)f(the)g(v)m(ector)i -(selects)f(the)g(dot)g(size)f(to)i(b)s(e)e(used)150 2025 -y(when)35 b(prin)m(ting)e(at)j(this)f(\(or)h(similar\))d(resolution.)55 -b(The)35 b(dot)h(sizes)f(are)h(determined)e(b)m(y)h(consulting)150 -2134 y(the)h(programming)f(man)m(ual)h(for)g(the)h(prin)m(ter)d(and)i -(exp)s(erimen)m(ting)f(as)h(describ)s(ed)e(b)s(elo)m(w.)58 -b(Curren)m(t)150 2244 y(Epson)25 b(prin)m(ters)f(alw)m(a)m(ys)j(use)e -(dot)i(sizes)e(less)g(than)h(`)p Fr(16)p Fu(',)h(or)f(`)p -Fr(0x10)p Fu(',)g(to)h(indicate)e(single)g(dot)h(size)f(\(eac)m(h)150 -2354 y(dot)33 b(is)f(represen)m(ted)g(b)m(y)h(1)g(bit,)g(and)f(it's)g -(either)g(prin)m(ted)f(or)i(not\),)h(and)e(dot)h(sizes)g(of)f(`)p -Fr(16)p Fu(')h(or)g(greater)150 2463 y(to)39 b(indicate)f(v)-5 -b(ariable)37 b(dot)i(size)g(\(eac)m(h)h(dot)f(is)f(represen)m(ted)g(b)m -(y)h(2)g(bits,)g(and)g(it)f(can)h(either)f(b)s(e)g(not)150 -2573 y(prin)m(ted)28 b(or)i(tak)m(e)h(on)e(2)h(or)g(3)g(v)-5 -b(alues,)29 b(represen)m(ting)g(the)h(relativ)m(e)f(size)h(of)g(the)f -(prin)m(ted)f(dot\).)41 b(V)-8 b(ariable)150 2682 y(dot)33 -b(sizes)g(p)s(ermit)e(the)i(use)f(of)h(v)m(ery)g(small)f(dots)g(\(whic) -m(h)g(w)m(ould)g(b)s(e)g(to)s(o)h(small)f(to)h(\014ll)e(the)i(page)h -(and)150 2792 y(pro)s(duce)d(solid)g(blac)m(k\))i(in)f(ligh)m(t)g -(areas,)i(while)c(allo)m(wing)i(the)h(page)g(to)g(b)s(e)f(\014lled)f -(with)g(larger)h(dots)h(in)150 2902 y(dark)m(er)d(areas.)275 -3039 y(Ev)m(en)j(single)f(dot)h(size)g(prin)m(ters)f(can)i(usually)d -(pro)s(duce)h(dots)h(of)h(di\013eren)m(t)e(sizes;)j(it's)e(just)g -(illegal)150 3148 y(to)27 b(actually)e(try)h(to)g(switc)m(h)g(dot)g -(size)g(during)d(a)k(page.)40 b(These)25 b(dots)h(are)h(also)e(m)m(uc)m -(h)h(bigger)g(than)f(those)150 3258 y(used)30 b(in)f(true)h(v)-5 -b(ariable)29 b(dot)i(size)f(prin)m(ting.)275 3395 y(A)e(dot)h(size)f -(of)h(`)p Fr(-1)p Fu(')f(indicates)g(that)h(this)f(resolution)f(is)g -(illegal)g(for)h(the)h(prin)m(ter)e(in)g(question.)40 -b(An)m(y)150 3504 y(resolutions)27 b(that)j(w)m(ould)d(use)i(this)e -(dot)i(size)g(will)d(not)j(b)s(e)f(presen)m(ted)h(to)g(the)g(user.)40 -b(A)29 b(dot)g(size)f(of)h(`)p Fr(-2)p Fu(')150 3614 -y(indicates)j(that)i(this)d(resolution)h(is)g(legal,)i(but)e(that)i -(the)f(driv)m(er)f(is)g(not)h(to)h(attempt)g(to)g(set)f(an)m(y)h(dot) -150 3724 y(size.)41 b(Some)30 b(v)m(ery)h(old)e(prin)m(ters)g(do)h(not) -h(supp)s(ort)e(the)h(command)g(to)h(set)g(the)g(dot)g(size.)275 -3861 y(Most)f(prin)m(ters)e(supp)s(ort)f(a)j(dot)g(size)f(of)g(`)p -Fr(0)p Fu(')h(as)f(a)h(mo)s(de-sp)s(eci\014c)e(default,)h(but)g(it's)g -(often)h(a)f(bigger)150 3970 y(dot)23 b(than)f(necessary)-8 -b(.)39 b(Prin)m(ters)22 b(usually)e(also)i(supp)s(ort)f(some)i(dot)g -(sizes)f(b)s(et)m(w)m(een)i(`)p Fr(1)p Fu(')e(and)g(`)p -Fr(3)p Fu('.)39 b(Usually)150 4080 y(`)p Fr(1)p Fu(')31 -b(is)e(the)i(righ)m(t)e(dot)i(size)f(for)g(720)i(and)e(1440)i(dpi)d -(prin)m(ting,)f(and)i(`)p Fr(3)p Fu(')g(w)m(orks)h(b)s(est)f(at)h(360)g -(dpi.)275 4217 y(V)-8 b(ariable)26 b(dot)h(size)f(prin)m(ters)g -(usually)e(supp)s(ort)h(2)i(or)g(3)g(sets)g(of)g(v)-5 -b(ariable)26 b(dot)h(sizes.)39 b(Older)25 b(prin)m(ters)150 -4326 y(based)33 b(on)f(a)h(6)h(picolitre)d(drop)h(\(the)h(480,)i(720,)g -(740,)g(750,)g(900,)g(and)e(1200\))i(supp)s(ort)c(t)m(w)m(o:)47 -b(mo)s(de)32 b(16)150 4436 y(\(0x10)f(in)d(hexadecimal\))h(for)g -(normal)g(v)-5 b(ariable)28 b(dots)h(at)i(1440)g(or)e(720)i(dpi,)d(and) -h(mo)s(de)g(17)h(\(0x10\))h(for)150 4545 y(sp)s(ecial)f(larger)h(dots)h -(at)g(360)h(dpi.)43 b(New)m(er)32 b(prin)m(ters)e(based)h(on)h(4)g -(picolitre)e(drops)g(normally)g(supp)s(ort)150 4655 y(three)38 -b(sizes:)55 b(`)p Fr(0x10)p Fu(')37 b(for)g(4)h(pl)e(base)i(drops,)g(`) -p Fr(0x11)p Fu(')f(for)h(6)g(pl)e(base)i(drops,)g(and)f(`)p -Fr(0x12)p Fu(')g(for)g(sp)s(ecial)150 4765 y(large)i(drops.)64 -b(On)38 b(these)h(prin)m(ters,)h(`)p Fr(0x10)p Fu(')e(usually)f(w)m -(orks)h(b)s(est)h(at)g(1440x720)j(and)c(`)p Fr(0x11)p -Fu(')g(w)m(orks)150 4874 y(b)s(est)d(at)i(720x720.)60 -b(Unfortunately)-8 b(,)37 b(`)p Fr(0x10)p Fu(')e(do)s(esn't)h(seem)g -(to)h(generate)g(quite)e(enough)h(densit)m(y)f(at)150 -4984 y(720x720,)d(b)s(ecause)c(if)g(it)g(did)f(the)h(output)g(w)m(ould) -g(b)s(e)g(v)m(ery)h(smo)s(oth.)40 b(P)m(erhaps)28 b(it's)g(p)s(ossible) -e(to)j(t)m(w)m(eak)150 5093 y(things)5 b(.)21 b(.)h(.)g(.)275 -5230 y(The)38 b(list)g(of)i(densities)d(is)i(a)g(list)f(of)i(base)f -(densit)m(y)g(v)-5 b(alues)39 b(for)g(all)f(of)h(the)h(ab)s(o)m(v)m(e)g -(listed)e(mo)s(des.)150 5340 y(\\Densit)m(y")47 b(refers)e(to)h(the)f -(amoun)m(t)h(of)g(ink)e(dep)s(osited)g(when)h(a)g(solid)f(color)i(\(or) -f(solid)f(blac)m(k\))i(is)p eop -%%Page: 80 85 -80 84 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(80)150 299 y(prin)m(ted.)65 b(So)39 b(if)f(the)h(densit)m -(y)g(is)f(`)p Fr(.5)p Fu(',)j(solid)c(blac)m(k)i(actually)g(prin)m(ts)f -(only)g(half)g(the)h(p)s(ossible)e(dots.)150 408 y(\\Base)32 -b(densit)m(y")e(refers)f(to)i(the)g(fact)g(that)f(the)h(densit)m(y)e(v) --5 b(alue)30 b(can)g(b)s(e)g(scaled)g(in)f(the)h(GUI)h(or)f(on)g(the) -150 518 y(Ghostscript)35 b(command)g(line.)54 b(The)35 -b(densit)m(y)g(v)-5 b(alue)35 b(sp)s(eci\014ed)f(\(whic)m(h)g(is)h(not) -g(made)h(visible)d(to)j(the)150 628 y(user\))25 b(is)g(m)m(ultiplied)e -(b)m(y)i(the)h(base)g(densit)m(y)f(to)i(obtain)e(the)h(e\013ectiv)m(e)i -(densit)m(y)d(v)-5 b(alue.)39 b(All)24 b(other)i(things)150 -737 y(\(suc)m(h)38 b(as)g(ink)f(drop)g(size\))h(remaining)e(the)i -(same,)j(doubling)35 b(the)j(resolution)f(requires)f(halving)h(the)150 -847 y(base)c(densit)m(y)-8 b(.)47 b(The)32 b(base)h(densit)m(y)e(in)h -(the)g(densit)m(y)g(v)m(ector)j(ma)m(y)e(exceed)g(`)p -Fr(1)p Fu(',)h(as)f(man)m(y)f(pap)s(er)g(t)m(yp)s(es)150 -956 y(require)25 b(lo)m(w)m(er)i(densit)m(y)f(than)h(the)g(base)g(driv) -m(er.)38 b(The)26 b(driv)m(er)g(ensures)f(that)j(the)f(actual)g(densit) -m(y)f(nev)m(er)150 1066 y(exceeds)31 b(1.)275 1208 y(T)-8 -b(uning)30 b(the)i(densit)m(y)f(should)f(b)s(e)h(done)h(on)g(high)e -(qualit)m(y)i(pap)s(er)e(\(usually)h(glossy)g(photo)h(pap)s(er\).)150 -1318 y(The)26 b(goal)i(is)d(to)j(\014nd)d(the)i(lo)m(w)m(est)h(densit)m -(y)e(v)-5 b(alue)26 b(that)h(results)f(in)f(solid)g(blac)m(k)i(\(no)g -(visible)d(gaps)j(under)150 1428 y(a)j(fairly)e(high)h(p)s(o)m(w)m(er)h -(magnifying)e(glass)i(or)g(loup)s(e\).)39 b(If)30 b(an)f(appropriate)g -(densit)m(y)g(v)-5 b(alue)30 b(is)f(found)f(for)150 1537 -y(720)h(DPI,)f(it)g(could)f(b)s(e)g(divided)e(b)m(y)j(2)g(for)f -(1440x720,)32 b(b)m(y)c(4)g(for)g(2880x720,)j(and)d(b)m(y)f(8)i(for)e -(2880x1440.)275 1680 y(Ho)m(w)m(ev)m(er,)36 b(for)d(prin)m(ters)f(that) -h(o\013er)h(a)g(c)m(hoice)g(of)f(dot)h(size,)g(this)e(ma)m(y)i(not)f(b) -s(e)g(the)g(b)s(est)g(strategy)-8 b(.)150 1789 y(The)37 -b(b)s(est)g(c)m(hoice)h(for)f(dot)h(size)f(is)g(the)g(smallest)g(dot)h -(size)f(that)h(allo)m(ws)f(c)m(ho)s(osing)g(a)h(densit)m(y)e(v)-5 -b(alue)150 1899 y(not)41 b(greater)h(than)e(1)h(that)g(giv)m(es)g(full) -d(co)m(v)m(erage.)74 b(This)39 b(dot)i(size)f(ma)m(y)h(b)s(e)f -(di\013eren)m(t)g(for)g(di\013eren)m(t)150 2008 y(resolutions.)f(T)-8 -b(uning)29 b(v)-5 b(ariable)29 b(dot)i(size)f(prin)m(ters)f(is)g(more)i -(complicated;)f(the)h(pro)s(cess)f(is)f(describ)s(ed)150 -2118 y(b)s(elo)m(w.)275 2261 y(The)k(last)h(mem)m(b)s(er)g(is)f(a)i(p)s -(oin)m(ter)e(to)i(a)g(structure)f(con)m(taining)g(a)g(list)f(of)i(ink)d -(v)-5 b(alues)34 b(for)g(v)-5 b(ariable)150 2370 y(dot)33 -b(size)h(\(or)f(6)h(color\))f(inks.)48 b(W)-8 b(e)35 -b(mo)s(del)d(v)-5 b(ariable)32 b(dot)h(size)g(inks)f(as)h(pro)s(ducing) -e(a)j(certain)f Fr(")p Fu(v)-5 b(alue)p Fr(")150 2480 -y Fu(of)34 b(ink)f(for)h(eac)m(h)h(a)m(v)-5 b(ailable)33 -b(dot)h(size,)h(where)f(the)g(largest)h(dot)f(size)g(has)f(a)i(v)-5 -b(alue)33 b(of)h(1.)53 b(6-color)34 b(inks)150 2589 y(are)d(handled)e -(similarly;)e(the)k(ligh)m(t)f(cy)m(an)h(and)f(ligh)m(t)g(magen)m(ta)j -(inks)c(are)i(treated)g(as)g(a)g(fractional)f(ink)150 -2699 y(v)-5 b(alue.)57 b(The)36 b(com)m(bination)f(of)h(v)-5 -b(ariable)35 b(dot)h(size)g(and)g(6)g(color)g(inks,)g(of)h(course,)g -(just)f(creates)h(that)150 2808 y(man)m(y)30 b(more)h(di\013eren)m(t)f -(ink)f(c)m(hoices.)275 2951 y(This)c(structure)i(is)f(actually)h -(rather)g(complicated;)h(it)f(con)m(tains)h(en)m(tries)f(for)g(eac)m(h) -h(com)m(bination)f(of)150 3061 y(ph)m(ysical)f(prin)m(ter)f(resolution) -h(\(180,)j(360,)h(720,)f(and)d(1440)j(dpi\),)d(ink)g(colors)h(\(4,)i -(6,)f(and)e(7\),)j(and)d(single)150 3170 y(and)i(v)-5 -b(ariable)28 b(dot)h(sizes)g(\(since)g(some)g(prin)m(ter)f(mo)s(des)g -(can't)i(handle)e(v)-5 b(ariable)28 b(dot)h(size)g(inks\).)39 -b(Since)150 3280 y(there's)31 b(so)f(m)m(uc)m(h)h(data,)g(it's)f -(actually)g(a)h(somewhat)g(deeply)e(nested)h(structure:)275 -3422 y(An)f Fr(escp2_printer_t)e Fu(con)m(tains)j(a)h(p)s(oin)m(ter)e -(\(essen)m(tially)-8 b(,)30 b(a)h(reference)g(rather)f(than)g(a)h(cop)m -(y\))g(to)150 3532 y(an)f Fr(escp2_variable_inklist_t)p -Fu(.)275 3674 y(An)c Fr(escp2_variable_inklist_t)20 b -Fu(con)m(tains)27 b(p)s(oin)m(ters)e(to)j Fr(escp2_variable_inkset_t)20 -b Fu(struc-)150 3784 y(tures.)39 b(There)25 b(is)g(one)h(suc)m(h)g(p)s -(oin)m(ter)f(for)g(eac)m(h)i(com)m(bination)e(of)h(resolution,)g(dot)g -(t)m(yp)s(e,)h(and)e(ink)g(colors)150 3893 y(as)31 b(describ)s(ed)d(ab) -s(o)m(v)m(e.)42 b(Y)-8 b(es,)31 b(this)f(is)f(rather)h(in\015exible.) -275 4036 y(An)c Fr(escp2_variable_inkset_t)20 b Fu(con)m(tains)26 -b(p)s(oin)m(ters)f(to)i Fr(escp2_variable_ink_t)21 b -Fu(structures.)150 4145 y(There)30 b(is)f(one)i(suc)m(h)f(p)s(oin)m -(ter)f(for)i(eac)m(h)g(of)g(the)f(four)g(colors)g(\(C,)h(M,)g(Y,)f(and) -g(K\).)275 4288 y(An)g Fr(escp2_variable_ink_t)25 b Fu(con)m(tains)31 -b(a)h(p)s(oin)m(ter)d(to)j(the)f(actual)g(list)f(of)h(ink)e(v)-5 -b(alues)31 b(\()p Fr(simple_)150 4398 y(dither_range_t)p -Fu(\),)c(the)j(n)m(um)m(b)s(er)f(of)i(ink)e(v)-5 b(alues,)29 -b(and)h(a)h(densit)m(y)e(v)-5 b(alue)30 b(to)h(b)s(e)e(used)h(for)g -(computing)150 4507 y(the)24 b(transitions.)37 b(This)23 -b(densit)m(y)g(v)-5 b(alue)23 b(is)h(actually)f(a)i(scaling)e(v)-5 -b(alue;)26 b(it)d(is)h(m)m(ultiplied)c(b)m(y)k(the)g(e\013ectiv)m(e)150 -4617 y(densit)m(y)36 b(to)i(compute)f(the)g(densit)m(y)f(to)i(b)s(e)e -(used)g(for)g(computing)g(the)h(transitions.)59 b(Normally)-8 -b(,)38 b(this)150 4726 y(v)-5 b(alue)34 b(is)g(`)p Fr(1)p -Fu(',)j(but)d(in)f(some)j(cases)f(it)g(ma)m(y)g(b)s(e)f(p)s(ossible)f -(to)i(get)h(smo)s(other)f(results)f(with)f(a)i(di\013eren)m(t)150 -4836 y(v)-5 b(alue)39 b(\(in)g(particular,)h(the)g(single)e(dot)i(size) -g(6-color)g(inks)e(w)m(ork)i(b)s(est)f(with)g(the)g(e\013ectiv)m(e)j -(densit)m(y)150 4945 y(scaled)27 b(to)h(`)p Fr(.75)p -Fu(')e(for)h(this)f(purp)s(ose\).)38 b(A)27 b(lo)m(w)m(er)h(densit)m(y) -e(lo)m(w)m(ers)h(the)g(transition)f(p)s(oin)m(ts,)g(whic)m(h)g(results) -150 5055 y(in)j(more)i(ink)e(b)s(eing)g(dep)s(osited.)275 -5198 y(A)h Fr(simple_dither_range_t)25 b Fu(is)k(a)i(structure)f(con)m -(taining)g(four)f(v)-5 b(alues:)199 5340 y(1.)61 b(The)30 -b(v)-5 b(alue)30 b(of)g(the)h(particular)e(ink)p eop -%%Page: 81 86 -81 85 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(81)199 299 y(2.)61 b(The)30 b(bit)f(pattern)i(used)e(to)i -(represen)m(t)g(the)f(ink)199 434 y(3.)61 b(Whether)31 -b(the)f(ink)f(is)h(ligh)m(t)f(\(0\))j(or)e(dark)g(\(1\),)i(for)e(inks)f -(with)g(ligh)m(t)g(and)h(dark)g(v)-5 b(arian)m(ts)199 -570 y(4.)61 b(The)25 b(relativ)m(e)h(amoun)m(t)g(of)f(ink)g(actually)g -(dep)s(osited)f(b)m(y)i(this)e(dot)i(\(not)g(curren)m(tly)f(used)f(for) -i(m)m(uc)m(h;)330 679 y(it)35 b(can)i(b)s(e)e(used)g(for)g(ink)g -(reduction)g(purp)s(oses,)g(to)i(reduce)f(the)g(amoun)m(t)g(of)g(ink)e -(dep)s(osited)h(on)330 789 y(the)c(pap)s(er\).)275 951 -y(These)26 b(things)g(are)i(in)m(teresting)e(as)i(arra)m(ys.)40 -b(F)-8 b(rom)27 b(an)g(arra)m(y)h(of)f Fr(simple_dither_range_t)p -Fu('s,)c(the)150 1060 y(dither)32 b(co)s(de)h(computes)g(transition)f -(v)-5 b(alues)32 b(that)i(it)f(lo)s(oks)f(up)h(at)g(run)f(time)h(to)h -(decide)e(what)h(ink)f(to)150 1170 y(prin)m(t,)d(as)i(w)m(ell)e(as)i -(whether)f(to)h(prin)m(t)e(at)i(all.)275 1306 y Fi(Really)g -Fu(confused)f(no)m(w?)40 b(Y)-8 b(up.)40 b(Y)-8 b(ou'll)30 -b(probably)f(\014nd)f(it)i(easier)h(to)g(simply)d(read)i(the)g(co)s -(de.)150 1568 y Ft(D.4)68 b(T)-11 b(uning)44 b(the)h(prin)l(ter)275 -1762 y Fu(No)m(w,)35 b(ho)m(w)g(do)f(y)m(ou)g(use)g(all)f(this)g(to)i -(tune)e(a)i(prin)m(ter?)50 b(There)34 b(are)g(a)g(n)m(um)m(b)s(er)f(of) -h(w)m(a)m(ys)h(to)g(do)f(it;)150 1872 y(this)29 b(one)i(is)e(m)m(y)i(p) -s(ersonal)e(fa)m(v)m(orite.)275 2008 y(There's)37 b(a)h(\014le)f(named) -g(`)p Fr(cyan-sweep.tif)p Fu('.)59 b(This)36 b(consists)h(of)h(a)g -(thin)e(bar)h(of)h(cy)m(an)g(sw)m(eeping)150 2118 y(from)33 -b(white)g(to)i(almost)f(pure)f(cy)m(an,)j(and)d(from)h(pure)e(cy)m(an)j -(to)g(blac)m(k.)51 b(The)34 b(\014rst)f(thing)g(to)h(do)g(is)f(to)150 -2227 y(pic)m(k)39 b(the)g(appropriate)f Fr(simple_dither_range_t)33 -b Fu(\(or)39 b(create)i(a)e(whole)g(new)f Fr(escp2_variable_)150 -2337 y(inklist_t)p Fu(\))24 b(and)h(commen)m(t)i(out)f(all)f(but)g(the) -h(dark)m(est)g(ink)f(\(this)g(means)h(y)m(ou'll)f(b)s(e)g(using)g(the)h -(largest)150 2447 y(dots)37 b(of)h(dark)e(ink\).)60 b(A)m(t)39 -b(8.5)p Fr(")f Fu(width)d(\(the)j(width)d(of)i(a)h(letter-size)g(piece) -f(of)g(pap)s(er\),)i(the)e(bar)g(will)150 2556 y(b)s(e)e(1/8)p -Fr(")h Fu(high.)55 b(Prin)m(ting)34 b(it)h(on)g(wider)f(or)h(narro)m(w) -m(er)h(pap)s(er)f(will)d(c)m(hange)37 b(the)f(heigh)m(t)f(accordingly) --8 b(.)150 2666 y(Prin)m(t)30 b(it)g(width-wise)f(across)i(a)g(piece)g -(of)g(photo)g(qualit)m(y)f(pap)s(er)f(in)h(line)f(art)i(mo)s(de)f -(using)g(ordered)g(or)150 2775 y(adaptiv)m(e)35 b(h)m(ybrid)e(dither.) -54 b(Do)36 b(not)f(use)g(photographic)f(mo)s(de;)k(the)d(colors)g(in)f -(photographic)g(mo)s(de)150 2885 y(v)-5 b(ary)29 b(non-linearly)d(dep)s -(ending)h(up)s(on)g(the)i(presence)g(of)g(the)g(three)g(color)g(comp)s -(onen)m(ts,)h(while)d(in)h(line)150 2995 y(art)36 b(mo)s(de)f(the)h -(colors)g(are)g(m)m(uc)m(h)g(purer.)55 b(Mak)m(e)37 b(sure)e(that)h -(all)f(the)h(color)f(adjustmen)m(ts)h(are)g(set)g(to)150 -3104 y(defaults)e(\(1.0\).)57 b(Use)36 b(the)f(highest)f(qualit)m(y)h -(v)m(ersion)f(of)h(the)h(prin)m(t)e(mo)s(de)g(y)m(ou're)i(testing)f(to) -h(reduce)150 3214 y(banding)21 b(and)h(other)h(artifacts.)39 -b(This)20 b(is)i(m)m(uc)m(h)h(easier)g(to)g(do)g(with)e(the)i(Gimp)e -(than)i(with)e(Ghostscript.)275 3350 y(A)m(t)31 b(this)e(stage,)j(y)m -(ou)f(w)m(an)m(t)g(to)g(lo)s(ok)f(for)g(four)g(things:)199 -3486 y(1.)61 b(The)30 b(blac)m(k)g(near)h(the)f(cen)m(ter)i(of)e(the)h -(line)d(is)i(solid,)f(but)g(not)i(more)f(so)h(than)f(that.)199 -3622 y(2.)61 b(The)30 b(cy)m(an)h(immediately)e(to)i(the)f(left)g(of)h -(the)g(blac)m(k)f(is)f Fn(almost)41 b Fu(solid.)199 3757 -y(3.)61 b(The)25 b(dark)h(cy)m(an)h(at)f(the)g(far)g(righ)m(t)g(of)g -(the)g(page)h(is)e(solid,)g(but)g(not)h(more)g(so.)40 -b(Y)-8 b(ou)26 b(can)h(try)e(tuning)330 3867 y(the)31 -b(densit)m(y)e(so)i(that)g(it)f(isn't)f(quite)h(solid,)f(then)h(n)m -(udging)f(up)g(the)i(densit)m(y)e(un)m(til)g(it)h(is.)199 -4002 y(4.)61 b(Both)29 b(sw)m(eeps)f(sw)m(eep)g(smo)s(othly)f(from)g -(ligh)m(t)g(to)i(dark.)40 b(In)27 b(particular,)g(the)h(dark)f(half)g -(of)h(the)g(bar)330 4112 y(shouldn't)g(visibly)g(c)m(hange)j(color;)g -(it)f(should)e(go)k(smo)s(othly)d(from)h(cy)m(an)h(to)g(blac)m(k.)275 -4274 y(Rep)s(eat)h(this)e(stage)j(un)m(til)d(y)m(ou)i(ha)m(v)m(e)h(ev)m -(erything)e(just)g(righ)m(t.)44 b(Use)32 b(the)g(p)s(ositioning)d(en)m -(try)j(b)s(o)m(xes)150 4383 y(in)g(the)h(dialog)f(to)h(p)s(osition)e -(eac)m(h)j(bar)f(exactly)h(1/8)p Fr(")f Fu(further)f(do)m(wn)g(the)h -(page.)49 b(Adjacen)m(t)34 b(bars)f(will)150 4493 y(b)s(e)d(touc)m -(hing.)275 4629 y(The)e(next)i(step)f(is)f(to)i(uncommen)m(t)g(out)f -(the)h(second)f(dark)m(est)h(dot)f(size.)41 b(If)28 b(y)m(ou're)i -(using)e(v)-5 b(ariable)150 4739 y(dots,)32 b(use)f(the)h(second)f -(largest)h(dot)g(size)f(of)h(the)f(dark)g(ink)f(rather)i(than)f(the)g -(largest)h(dot)g(size)f(of)h(the)150 4848 y(ligh)m(t)e(ink.)39 -b(This)29 b(will)e(giv)m(e)k(y)m(ou)g(t)m(w)m(o)h(inks.)275 -4985 y(When)j(y)m(ou)g(recompile)g(the)g(plugin,)f(y)m(ou)i(simply)d -(need)i(to)h(cop)m(y)g(the)g(new)f(executable)g(in)m(to)h(the)150 -5094 y(correct)c(place.)40 b(Y)-8 b(ou)31 b(do)f(not)h(need)f(to)h -(exit)f(and)g(restart)h(the)g(Gimp.)275 5230 y(Prin)m(t)c(another)j -(bar)e(adjacen)m(t)i(to)g(the)f(\014rst)f(one.)40 b(Y)-8 -b(our)29 b(goal)h(is)e(to)h(matc)m(h)h(the)f(bar)g(using)e(a)i(single) -150 5340 y(dot)i(size)f(as)h(closely)f(as)h(p)s(ossible.)38 -b(Y)-8 b(ou'll)30 b(\014nd)f(that)i(the)g(dark)f(region)g(of)g(the)h -(bar)f(shouldn't)f(c)m(hange)p eop -%%Page: 82 87 -82 86 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(82)150 299 y(to)33 b(an)m(y)f(great)i(degree,)f(but)f(the)g -(ligh)m(t)f(half)g(probably)f(will.)44 b(If)31 b(the)i(ligh)m(ter)e -(part)h(of)g(the)h(ligh)m(t)e(half)g(is)150 408 y(to)s(o)37 -b(dark,)h(y)m(ou)g(need)e(to)h(increase)g(the)g(v)-5 -b(alue)36 b(of)h(the)g(smaller)e(dot;)40 b(if)c(it's)g(to)s(o)i(ligh)m -(t,)g(y)m(ou)f(need)f(to)150 518 y(decrease)e(the)g(v)-5 -b(alue.)48 b(The)33 b(reasoning)f(is)h(that)g(if)g(the)g(v)-5 -b(alue)33 b(is)f(to)s(o)i(lo)m(w,)g(the)f(ink)f(isn't)g(b)s(eing)g(giv) -m(en)150 628 y(enough)g(credit)h(for)f(its)g(con)m(tribution)f(to)j -(the)f(darkness)e(of)i(the)g(ink,)f(and)g(vice)h(v)m(ersa.)48 -b(Rep)s(eat)34 b(un)m(til)150 737 y(y)m(ou)29 b(ha)m(v)m(e)g(a)g(go)s -(o)s(d)f(matc)m(h.)41 b(Mak)m(e)30 b(sure)d(y)m(ou)i(let)f(the)h(ink)e -(dry)g(fully)-8 b(,)27 b(whic)m(h)g(will)f(tak)m(e)k(a)f(few)f(min)m -(utes.)150 847 y(W)-8 b(et)32 b(ink)d(will)f(lo)s(ok)i(to)s(o)i(dark.) -40 b(Don't)32 b(lo)s(ok)e(at)h(the)g(pap)s(er)e(to)s(o)j(closely;)e -(hold)f(it)h(at)i(a)f(distance.)40 b(The)150 956 y(extra)e(graininess)e -(of)h(the)h(largest)g(dot)f(size)h(will)d(probably)g(mak)m(e)k(it)e(lo) -s(ok)g(ligh)m(ter)f(than)i(it)f(should;)150 1066 y(if)e(y)m(ou)h(hold)f -(it)h(far)f(enough)h(a)m(w)m(a)m(y)i(so)e(that)h(y)m(ou)f(can't)h(see)g -(the)f(dots,)i(y)m(ou'll)d(get)i(a)f(more)g(accurate)150 -1176 y(picture)29 b(of)i(what's)f(going)h(on.)275 1322 -y(After)j(y)m(ou)g(ha)m(v)m(e)h(what)f(lo)s(oks)f(lik)m(e)g(a)i(go)s(o) -s(d)e(matc)m(h,)j(prin)m(t)d(another)h(bar)f(using)g(only)g(the)h -(largest)150 1431 y(dot)29 b(size)g(\(or)g(dark)f(ink,)g(for)g(single)g -(dot)h(size)f(6-color)i(prin)m(ters\).)39 b(Y)-8 b(ou)29 -b(w)m(an)m(t)h(to)f(ensure)f(that)i(the)f(bars)150 1541 -y(touc)m(hing)34 b(eac)m(h)g(other)g(lo)s(ok)g(iden)m(tical,)f(or)h(as) -g(close)g(as)g(p)s(ossible)d(to)j(it;)h(y)m(our)f(ey)m(e)h(w)m(on't)f -(giv)m(e)h(y)m(ou)f(a)150 1650 y(go)s(o)s(d)c(reading)e(if)h(the)h -(bars)f(are)h(separated)h(from)e(eac)m(h)i(other.)40 -b(Y)-8 b(ou'll)29 b(probably)f(ha)m(v)m(e)j(to)g(rep)s(eat)f(the)150 -1760 y(pro)s(cedure.)275 1906 y(The)24 b(next)g(step)h(is)f(to)h -(commen)m(t)h(out)f(all)e(but)h(the)h(largest)g(and)f(third-largest)f -(dot)i(size,)h(and)e(rep)s(eat)150 2016 y(the)31 b(pro)s(cedure.)42 -b(When)31 b(they)g(matc)m(h,)i(use)e(all)f(three)h(dot)g(sizes)g(of)g -(dark)g(ink.)42 b(Again,)31 b(the)g(goal)h(is)e(to)150 -2125 y(matc)m(h)h(the)g(single)e(dot)h(size.)275 2271 -y(Y)-8 b(ou'll)22 b(probably)g(\014nd)g(the)h(matc)m(h)i(is)d(imp)s -(erfect.)37 b(No)m(w)24 b(y)m(ou)g(ha)m(v)m(e)h(to)f(\014gure)f(out)g -(what)h(region)f(isn't)150 2381 y(righ)m(t,)37 b(whic)m(h)d(tak)m(es)j -(some)f(exp)s(erimen)m(tation.)55 b(Ev)m(en)36 b(small)e(adjustmen)m -(ts)h(can)h(mak)m(e)g(a)g(noticeable)150 2491 y(di\013erence)d(in)f -(what)h(y)m(ou)h(see.)50 b(A)m(t)34 b(this)e(stage,)k(it's)d(v)m(ery)h -(imp)s(ortan)m(t)e(to)i(hold)e(the)i(page)g(far)f(enough)150 -2600 y(from)28 b(y)m(our)h(ey)m(e;)i(when)d(y)m(ou)h(use)g(all)f(three) -h(dot)g(sizes,)g(the)g(texture)h(will)c(b)s(e)i(m)m(uc)m(h)h(more)g(ev) -m(en,)h(whic)m(h)150 2710 y(sometimes)g(mak)m(es)i(it)e(lo)s(ok)g(dark) -m(er)g(and)g(sometimes)g(ligh)m(ter.)275 2856 y(After)j(this)g(is)f -(calibrated,)i(it's)f(time)g(to)h(calibrate)f(the)h(ligh)m(t)e(ink)g -(against)i(the)g(dark)f(ink.)48 b(T)-8 b(o)34 b(do)150 -2966 y(this,)d(commen)m(t)i(out)f(all)f(but)g(the)h(large)g(dot)g(v)m -(ersion)f(of)h(the)g(t)m(w)m(o)i(inks,)d(and)g(rep)s(eat)h(the)g(pro)s -(cedure.)150 3075 y(This)26 b(is)h(tric)m(kier,)h(b)s(ecause)g(the)g(h) -m(ues)g(of)g(the)g(inks)f(migh)m(t)h(not)g(b)s(e)f(quite)h(iden)m -(tical.)38 b(Lo)s(ok)29 b(at)f(the)g(dark)150 3185 y(half)37 -b(of)h(the)g(bar)g(as)g(w)m(ell)f(as)h(the)g(ligh)m(t)g(half)f(to)h -(see)h(that)g(the)f(h)m(ue)g(really)e(do)s(esn't)i(c)m(hange)h(as)g(y)m -(ou)150 3294 y(sw)m(eep)c(from)e(cy)m(an)j(to)f(blac)m(k.)52 -b(Sometimes)34 b(it's)g(easier)h(to)g(judge)f(that)h(w)m(a)m(y)-8 -b(.)54 b(Y)-8 b(ou)35 b(ma)m(y)g(\014nd)d(that)j(it)150 -3404 y(lo)s(oks)30 b(blotc)m(h)m(y)-8 b(,)31 b(in)e(whic)m(h)g(case)j -(y)m(ou)f(should)d(switc)m(h)i(from)g(ordered)f(dither)g(to)i(adaptiv)m -(e)g(h)m(ybrid.)275 3550 y(After)36 b(y)m(ou)h(ha)m(v)m(e)g(the)g(ligh) -m(t)f(and)f(dark)h(inks)f(calibrated)h(against)g(eac)m(h)i(other,)g -(it's)e(time)g(to)i(add)150 3660 y(ev)m(erything)33 b(bac)m(k)g(in.)48 -b(Usually)31 b(y)m(ou)i(don't)g(w)m(an)m(t)h(to)g(use)e(the)i(largest)f -(dot)g(size)g(of)g(ligh)m(t)f(ink.)47 b(These)150 3769 -y(dots)24 b(will)e(b)s(e)h(m)m(uc)m(h)h(larger)g(than)g(the)g(small)f -(dots)h(of)g(dark)f(ink,)i(but)e(they'll)g(still)f(b)s(e)h(ligh)m(ter.) -38 b(This)23 b(will)150 3879 y(cause)34 b(problems)d(when)h(prin)m -(ting)f(mixed)h(colors,)i(since)e(y)m(ou'll)g(b)s(e)h(dep)s(ositing)e -(more)i(ink)f(on)h(ligh)m(ter)150 3988 y(regions)d(of)h(the)g(page,)g -(and)f(y)m(ou'll)g(probably)f(get)i(strange)g(color)g(casts)g(that)h(y) -m(ou)e(can't)i(get)g(rid)d(of)h(in)150 4098 y(neutral)f(tones.)42 -b(I)30 b(normally)e(use)i(only)g(the)g(smallest)g(one)h(or)f(t)m(w)m(o) -i(dot)e(sizes)g(of)h(ligh)m(t)f(ink.)275 4244 y(After)35 -b(y)m(ou'v)m(e)h(t)m(w)m(eak)m(ed)h(ev)m(erything,)f(prin)m(t)d(the)i -(color)g(bar)g(with)e(saturation)i(set)g(to)h(zero.)55 -b(This)150 4354 y(will)32 b(prin)m(t)g(neutral)i(tones)g(using)f(color) -h(inks.)51 b(Y)-8 b(our)34 b(goal)h(here)f(is)f(to)i(lo)s(ok)f(for)g -(neutral)f(tonalit)m(y)-8 b(.)52 b(If)150 4463 y(y)m(ou're)31 -b(using)e(a)i(6-color)h(prin)m(ter)d(and)h(get)h(a)g(y)m(ello)m(w)g -(cast,)h(it)e(means)g(that)h(the)g(v)-5 b(alues)30 b(for)g(y)m(our)h -(ligh)m(t)150 4573 y(inks)37 b(are)j(to)s(o)f(high)e(\(remem)m(b)s(er,) -k(that)f(means)e(they're)i(getting)f(to)s(o)h(m)m(uc)m(h)f(credit,)h -(so)f(y)m(ou're)h(not)150 4682 y(dep)s(ositing)33 b(enough)i(cy)m(an)g -(and)f(magen)m(ta)j(ink,)e(and)f(the)h(y)m(ello)m(w)g(dominates\).)54 -b(If)35 b(y)m(ou)g(get)h(a)f(bluish)150 4792 y(or)30 -b(bluish-purple)25 b(cast,)31 b(y)m(our)f(ligh)m(t)f(inks)f(are)j(to)s -(o)f(lo)m(w)g(\(y)m(ou're)h(not)f(giving)f(them)g(enough)h(credit,)g -(so)150 4902 y(to)s(o)e(m)m(uc)m(h)g(cy)m(an)g(and)f(magen)m(ta)j(is)c -(dep)s(osited,)h(whic)m(h)g(o)m(v)m(erwhelms)g(the)h(y)m(ello)m(w\).)40 -b(Mak)m(e)29 b(sure)e(y)m(ou)h(do)150 5011 y(this)e(on)i(v)m(ery)g -(white,)f(v)m(ery)h(high)e(grade)i(inkjet)f(pap)s(er)f(that's)j -(designed)d(for)h(1440x720)k(dpi)26 b(or)h(higher;)150 -5121 y(otherwise)e(the)g(ink)f(will)f(spread)h(on)h(con)m(tact)j(and)c -(y)m(ou'll)h(get)h(v)-5 b(alues)25 b(that)g(aren't)h(really)e(true)h -(for)g(high)150 5230 y(grade)33 b(pap)s(er.)47 b(Y)-8 -b(ou)33 b(can,)h(of)f(course,)h(calibrate)e(for)g(lo)m(w)h(grade)g(pap) -s(er)f(if)f(that's)j(what)f(y)m(ou're)g(going)150 5340 -y(to)e(use,)f(but)g(that)h(shouldn't)e(b)s(e)g(put)h(in)m(to)g(the)h -(distribution.)p eop -%%Page: 83 88 -83 87 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(83)275 299 y(Y)-8 b(ou)43 b(can)f(also)h(fully)d -(desaturate)k(this)d(bar)h(inside)e(the)j(Gimp)f(and)g(prin)m(t)f(it)h -(as)h(mono)s(c)m(hrome)150 408 y(\(don't)38 b(prin)m(t)e(the)i(cy)m(an) -g(as)f(mono)s(c)m(hrome;)42 b(the)37 b(driv)m(er)g(do)s(es)g(funn)m(y)f -(things)g(with)g(luminance\),)i(for)150 518 y(comparison.)i(Y)-8 -b(ou'll)30 b(\014nd)e(it)i(v)m(ery)h(hard)e(to)i(get)h(rid)d(of)h(all)f -(color)i(casts.)275 652 y(There)e(are)i(other)g(w)m(a)m(ys)g(of)g -(tuning)d(prin)m(ters,)i(but)f(this)g(one)i(w)m(orks)f(prett)m(y)h(w)m -(ell)f(for)g(me.)150 909 y Ft(D.5)68 b(Canon)45 b(inkjet)h(prin)l(ters) -275 1101 y Fu(Basically)-8 b(,)39 b(a)f(new)f(Canon)g(prin)m(ter)g(can) -h(b)s(e)f(added)g(to)h(`)p Fr(print-canon.c)p Fu(')d(in)h(a)i(similar)d -(w)m(a)m(y)k(as)150 1210 y(describ)s(ed)28 b(ab)s(o)m(v)m(e)k(for)e -(the)h(epson)f(inkjet)f(prin)m(ters.)39 b(The)30 b(main)g -(di\013erences)f(are)i(noted)f(here:)275 1345 y(In)h(general,)i(Canon)f -(prin)m(ters)f(ha)m(v)m(e)i(more)g(\\built-in)c(in)m(telligence")j -(than)g(Epson)f(prin)m(ters)g(whic)m(h)150 1454 y(results)j(in)f(the)i -(fact)h(that)g(the)f(driv)m(er)e(only)h(has)h(to)h(tell)e(the)h(prin)m -(ting)e(conditions)g(lik)m(e)h(resolutions,)150 1564 -y(dot)i(sizes,)g(etc.)57 b(to)36 b(the)f(prin)m(ter)f(and)h(afterw)m -(ards)g(transfer)g(the)h(raster)f(data)h(line)e(b)m(y)h(line)f(for)h -(eac)m(h)150 1673 y(color)30 b(used.)275 1807 y Fr(canon_cap_t)d -Fu(is)i(a)i(C)f(struct)g(de\014ned)f(as)i(follo)m(ws:)3474 -2040 y(Data)h(t)m(yp)s(e)-3724 b Fk(canon)p 449 2040 -35 5 v 40 w(cap)p 660 2040 V 41 w(t)630 2144 y Fr(typedef)46 -b(struct)g(canon_caps)f({)725 2247 y(int)i(model;)476 -b(/*)47 b(model)g(number)f(as)h(used)f(in)i(printers.xml)c(*/)725 -2351 y(int)j(max_width;)284 b(/*)47 b(maximum)f(printable)f(paper)i -(size)f(*/)725 2455 y(int)h(max_height;)725 2559 y(int)g(base_res;)332 -b(/*)47 b(base)g(resolution)e(-)i(shall)g(be)g(150)g(or)g(180)g(*/)725 -2663 y(int)g(max_xdpi;)332 b(/*)47 b(maximum)f(horizontal)f(resolution) -g(*/)725 2766 y(int)i(max_ydpi;)332 b(/*)47 b(maximum)f(vertical)g -(resolution)f(*/)725 2870 y(int)i(max_quality;)725 2974 -y(int)g(border_left;)188 b(/*)47 b(left)g(margin,)f(points)g(*/)725 -3078 y(int)h(border_right;)140 b(/*)47 b(right)g(margin,)e(points)h(*/) -725 3181 y(int)h(border_top;)236 b(/*)47 b(absolute)f(top)h(margin,)e -(points)i(*/)725 3285 y(int)g(border_bottom;)92 b(/*)47 -b(absolute)f(bottom)g(margin,)g(points)g(*/)725 3389 -y(int)h(inks;)524 b(/*)47 b(installable)e(cartridges)g(\(CANON_INK_*\)) -f(*/)725 3493 y(int)j(slots;)476 b(/*)47 b(available)e(paperslots)g(*/) -725 3597 y(int)i(features;)332 b(/*)47 b(special)f(bjl)h(settings)e(*/) -725 3700 y(canon_dot_size_t)f(dot_sizes;)h(/*)i(Vector)f(of)h(dot)g -(sizes)g(for)f(resolutions)f(*/)725 3804 y(canon_densities_t)f -(densities;)h(/*)i(List)f(of)i(densities)d(for)i(each)f(printer)g(*/) -725 3908 y(canon_variable_inklist_t)c(*inxs;)k(/*)h(Choices)f(of)h -(inks)g(for)f(this)h(printer)f(*/)630 4012 y(})h(canon_cap_t;)275 -4195 y Fu(Since)38 b(there)i(are)g(Canon)f(prin)m(ters)f(whic)m(h)g -(prin)m(t)g(in)h(resolutions)f(of)h(2^)p Fc(n)27 b Fs(\003)g -Fu(150)41 b(dpi)d(\(e.g.)69 b(300,)150 4305 y(600,)44 -b(1200\))e(and)d(others)h(whic)m(h)e(supp)s(ort)g(resolutions)h(of)h -(2^)p Fc(n)27 b Fs(\003)g Fu(180)41 b(dpi)d(\(e.g.)70 -b(360,)44 b(720,)g(1440\),)150 4414 y(there's)32 b(a)h(base)f -(resolution)f(\(150)i(or)f(180,)i(resp)s(ectiv)m(ely\))e(giv)m(en)g(in) -f(the)h Fr(canon_cap_t)p Fu(.)43 b(The)31 b(structs)150 -4524 y Fr(canon_dot_size_t)p Fu(,)c Fr(canon_densities_t)f -Fu(and)k Fr(canon_variable_inklist_)o(t)25 b Fu(refer)30 -b(to)i(resolu-)150 4633 y(tions)e(b)s(eing)f(m)m(ultiples)f(of)i(the)h -(base)f(resolution.)275 4767 y(F)-8 b(or)30 b(the)h(Canon)f(driv)m(er,) -f(the)h(struct)g Fr(canon_dot_size_t)c Fu(holds)j(v)-5 -b(alues)29 b(for)h(a)h(mo)s(del's)e(capabil-)150 4877 -y(ities)i(at)h(a)g(giv)m(en)g(resolution:)42 b(`)p Fr(-1)p -Fu(')32 b(if)f(the)g(resolution)g(is)g(not)h(supp)s(orted.)43 -b(`)p Fr(0)p Fu(')31 b(if)g(it)g(can)h(b)s(e)g(used)f(and)150 -4987 y(`)p Fr(1)p Fu(')g(if)e(the)h(resolution)f(can)i(b)s(e)f(used)f -(for)i(v)-5 b(ariable)29 b(dot)h(size)h(prin)m(ting.)275 -5121 y(In)c Fr(canon_densities_t)c Fu(the)28 b(base)g(densities)f(for)g -(eac)m(h)j(resolution)c(can)i(b)s(e)g(sp)s(eci\014ed)e(lik)m(e)h(for)h -(an)150 5230 y(epson)35 b(prin)m(ter,)i(the)f(same)g(holds)e(true)i -(for)f Fr(canon_variable_inklist_t)p Fu(.)51 b(See)36 -b(the)g(descriptions)150 5340 y(ab)s(o)m(v)m(e)c(to)f(learn)e(ab)s(out) -h(ho)m(w)h(to)g(adjust)f(y)m(our)g(mo)s(del's)f(output)h(to)h(yield)e -(nice)h(results.)p eop -%%Page: 84 89 -84 88 bop 150 -116 a Fu(App)s(endix)28 b(D:)j(Adding)d(a)j(new)f(prin)m -(ter)2112 b(84)275 299 y(There's)40 b(a)i(sligh)m(t)e(di\013erence)h -(though)g(in)f(the)h(w)m(a)m(y)h(the)g(Canon)e(driv)m(er)g(and)h(the)g -(escp2)h(driv)m(er)150 408 y(de\014ne)30 b(their)f(v)-5 -b(ariable)29 b(inklists:)38 b(In)30 b(the)g(Canon)g(driv)m(er,)g(y)m -(ou)g(need)g(to)i(de\014ne)d(an)h(inklist)e(lik)m(e)i(this:)390 -537 y Fr(static)46 b(const)g(canon_variable_inklist_t)c -(canon_ink_myinks[])g(=)390 641 y({)485 745 y({)581 848 -y(1,4,)47 b(/*)g(1bit/pixel,)d(4)k(colors)e(*/)581 952 -y(&ci_CMYK_1,)f(&ci_CMYK_1,)f(&ci_CMYK_1,)581 1056 y(&ci_CMYK_1,)h -(&ci_CMYK_1,)f(&ci_CMYK_1,)485 1160 y(},)485 1264 y({)581 -1367 y(3,4,)j(/*)g(3bit/pixel,)d(4)k(colors)e(*/)581 -1471 y(&ci_CMYK_3,)f(&ci_CMYK_3,)f(&ci_CMYK_3,)581 1575 -y(&ci_CMYK_3,)h(&ci_CMYK_3,)f(&ci_CMYK_3,)485 1679 y(},)390 -1782 y(};)150 1917 y Fu(where)d(the)h(`)p Fr(&ci_CMYK_1)p -Fu(')d(and)i(`)p Fr(&ci_CMYK_3)p Fu(')e(en)m(tries)i(are)h(references)g -(to)g(a)g(previously)d(de\014ned)150 2027 y(const)31 -b(of)f(t)m(yp)s(e)h Fr(canon_variable_inkset_t)p Fu(.)p -eop -%%Page: 85 90 -85 89 bop 150 -116 a Fu(Data)32 b(T)m(yp)s(e)e(and)g(V)-8 -b(ariable)29 b(Index)2290 b(85)150 299 y Fp(Data)54 b(T)l(yp)t(e)g(and) -f(V)-13 b(ariable)55 b(Index)150 642 y Ft(C)150 764 y -Fe(canon_cap_t)23 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)46 b Fd(83)150 1023 y Ft(E)150 1145 y Fe(escp2_printer_t)15 -b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(75)150 -1404 y Ft(G)150 1526 y Fe(gimpprint_binary_age)7 b Fb(.)17 -b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)33 b Fd(25)150 1618 y Fe -(gimpprint_current_interface)16 b Fb(.)i(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(25)150 1709 y Fe -(gimpprint_interface_age)26 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(25)150 -1800 y Fe(gimpprint_major_version)26 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b -Fd(25)2025 642 y Fe(gimpprint_micro_version)26 b Fb(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)47 b Fd(25)2025 737 y Fe(gimpprint_minor_version)26 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)47 b Fd(25)2025 1012 y Ft(S)2025 1140 y Fe(stp_image_t)23 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 -b Fd(23)2025 1234 y Fe(stp_option_t)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(21)2025 1329 y Fe(stp_outfunc_t)18 -b Fb(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 -b Fd(20)2025 1423 y Fe(stp_papersize_t)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)40 b Fd(21)2025 1517 y Fe(stp_papersize_unit_t)7 -b Fb(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(21)2025 1612 y -Fe(stp_printer_t)18 b Fb(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)43 b Fd(22)2025 1706 y Fe(stp_printfuncs_t)13 b Fb(.)j(.)c(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)39 b Fd(23)2025 1800 y Fe(stp_vars_t)24 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 -b Fd(15)p eop -%%Page: 86 91 -86 90 bop 150 -116 a Fu(F)-8 b(unction)30 b(and)g(Macro)h(Index)2449 -b(86)150 299 y Fp(F)-13 b(unction)53 b(and)g(Macro)h(Index)150 -614 y Ft(*)150 737 y Fe(*)39 b(??)h Fa(BC)6 b Fe(=)p -Fa(xx)45 b(y)6 b Fe([1])40 b(...)g Fa(y)6 b Fe([xx])g -Fb(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)31 -b Fd(72)150 829 y Fe(*)39 b(AC)h Fa(BC)6 b Fe(=2)41 b(00)f -Fa(xx)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 -b Fd(69)150 921 y Fe(*)j(AI)h Fa(BC)6 b Fe(=3)41 b(00)f(00)f(00)10 -b Fb(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(67)150 1013 y Fe(*)k(CH)h -Fa(BC)6 b Fe(=2)41 b(00)f Fa(xx)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)36 b Fd(67)150 1105 y Fe(*)j(DA)h Fa(BC)6 b Fe(=4)41 -b(00)f Fa(xx)j Fe(00)d Fa(yy)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)41 b Fd(67)150 -1197 y Fe(*)e(DA)h Fa(BC)6 b Fe(=6)41 b(00)f Fa(xx)j -Fe(00)d Fa(yy)45 b Fe(09)39 b(00)6 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fd(68)150 1289 y Fe(*)39 -b(DR)h Fa(BC)6 b Fe(=4)41 b(00)f(xx)f Fa(DT2)31 b Fb(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)50 b Fd(69)150 1381 y Fe(*)39 b(DT)h Fa(BC)6 -b Fe(=3)41 b(00)f Fa(xx)j Fe(00)25 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 -b Fd(67)150 1473 y Fe(*)39 b(DU)h Fa(BC)6 b Fe(=6)41 -b(00)f Fa(xx)j Fe(00)d(09)g(00)f Fa(yy)13 b Fb(.)e(.)i(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fd(67)150 1565 y -Fe(*)39 b(EX)h Fa(BC)6 b Fe(=3)41 b(00)f Fa(xx)j(yy)25 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)45 b Fd(70)150 1656 y Fe(*)39 -b(EX)h Fa(BC)6 b Fe(=6)41 b(00)f(00)f(00)h(00)g(0x05)g -Fa(xx)13 b Fb(.)e(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fd(70)150 1748 y Fe(*)39 b(EX)h Fa(BC)6 b Fe(=6)41 -b(00)f(00)f(00)h(00)g(0x14)g Fa(xx)13 b Fb(.)e(.)i(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)33 b Fd(70)150 1840 y Fe(*)39 b(FP)h -Fa(BC)6 b Fe(=3)41 b(00)f Fa(xx)j(yy)25 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)45 -b Fd(68)150 1932 y Fe(*)39 b(IK)h Fa(BC)6 b Fe(=2)41 -b(00)f Fa(xx)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 -b Fd(69)150 2024 y Fe(*)j(IQ)h Fa(BC)6 b Fe(=1)41 b(01)18 -b Fb(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 -b Fd(68)150 2116 y Fe(*)39 b(IR)h Fa(BC)6 b Fe(=2)41 -b(00)f Fa(xx)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 -b Fd(68)150 2208 y Fe(*)j(LD)h Fa(BC)6 b Fe(=0)25 b Fb(.)12 -b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 -b Fd(67)150 2300 y Fe(*)39 b(PH)h Fa(BC)6 b Fe(=2)41 -b(00)f Fa(xx)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 -b Fd(70)150 2392 y Fe(*)j(PM)h Fa(BC)6 b Fe(=2)41 b(00)f(00)14 -b Fb(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(70)150 -2484 y Fe(*)g(PP)h Fa(BC)6 b Fe(=3)41 b(00)f Fa(xx)j(yy)25 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)45 b Fd(69)150 2576 y Fe(*)39 -b(PZ)h(BC=2)g(00)g(xx)15 b Fb(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -40 b Fd(70)150 2668 y Fe(*)f(RS)h Fa(BC)6 b Fe(=1)41 -b(01)18 b Fb(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 -b Fd(68)150 2760 y Fe(*)39 b(SM)h Fa(BC)6 b Fe(=1)41 -b(01)18 b Fb(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 -b Fd(72)150 2852 y Fe(*)39 b(SM)h Fa(BC)6 b Fe(=2)41 -b(00)f(02)14 b Fb(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 -b Fd(72)150 2944 y Fe(*)g(SM)h Fa(BC)6 b Fe(=2)41 b(00)f -Fa(xx)15 b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 -b Fd(71)150 3036 y Fe(*)j(SN)h Fa(BC)6 b Fe(=3)41 b(00)f -Fa(xx)j(yy)25 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)45 b Fd(68)150 -3127 y Fe(*)39 b(ST)h Fa(BC)6 b Fe(=1)41 b(01)18 b Fb(.)13 -b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(71)150 -3219 y Fe(*)39 b(ST)h Fa(BC)6 b Fe(=2)41 b(00)f Fa(xx)15 -b Fb(.)c(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(70)150 -3311 y Fe(*)j(SV)h Fa(BC)6 b Fe(=0)25 b Fb(.)12 b(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(68)150 3559 -y Fl(<)150 3681 y Fe()24 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(75)150 3773 y -Fe()8 b Fb(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fd(74)150 3865 y Fe()9 b Fb(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)34 -b Fd(75)150 3957 y Fe()24 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fd(75)150 -4049 y Fe()25 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(74)150 4141 y Fe()9 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)35 b Fd(74)150 4480 y Ft(A)150 4602 -y Fe(AM_PATH_GIMPPRINT)12 b Fb(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 -b Fd(13)150 4849 y Ft(E)150 4972 y Fe(ESC)j($)f Fa(OFFSET2)21 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(63)150 -5064 y Fe(ESC)h(\($)g Fa(BC)6 b Fe(=4)41 b Fa(OFFSET4)29 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)48 b Fd(63)150 5156 y Fe(ESC)40 b(\(/)g -Fa(BC)6 b Fe(=4)41 b Fa(OFFSET4)29 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 -b Fd(63)150 5248 y Fe(ESC)40 b(\(\\)g Fa(BC)6 b Fe(=4)41 -b Fa(UNITS2)j(OFFSET2)30 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)49 b Fd(63)150 5340 y Fe(ESC)40 b(\(C)g Fa(BC)6 b -Fe(=2)41 b Fa(P)-6 b(A)n(GELENGTH2)20 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(62)2025 614 y -Fe(ESC)g(\(C)f Fa(BC)6 b Fe(=4)41 b Fa(P)-6 b(A)n(GELENGTH4)21 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 -b Fd(62)2025 725 y Fe(ESC)g(\(c)f Fa(BC)6 b Fe(=4)41 -b Fa(TOP2)46 b(LENGTH2)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)40 b Fd(62)2025 836 y Fe(ESC)g(\(c)f Fa(BC)6 -b Fe(=8)41 b Fa(TOP4)46 b(LENGTH4)21 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(62)2025 947 y Fe(ESC)g(\(D)f -Fa(BC)6 b Fe(=4)41 b Fa(BASE2)46 b(VER)-6 b(TICAL1)2178 -1039 y(HORIZONT)g(AL1)26 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 -b Fd(65)2025 1150 y Fe(ESC)40 b(\(e)f Fa(BC)6 b Fe(=2)41 -b Fa(ZER)n(O1)k(DOTSIZE1)27 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)47 b Fd(62)2025 1261 y Fe(ESC)40 b(\(G)f Fa(BC)6 -b Fe(=1)41 b Fa(ON1)16 b Fb(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)36 -b Fd(61)2025 1372 y Fe(ESC)k(\(i)f Fa(BC)6 b Fe(=1)41 -b Fa(MICR)n(O)n(WEA)-9 b(VE1)15 b Fb(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)35 b Fd(62)2025 1483 y Fe(ESC)40 -b(\(K)f Fa(BC)6 b Fe(=2)41 b Fa(ZER)n(O1)k(GRA)-6 b(YMODE1)19 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(62)2025 -1594 y Fe(ESC)g(\(r)f Fa(BC)6 b Fe(=2)41 b Fa(DENSITY1)k(COLOR1)26 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(63)2025 -1705 y Fe(ESC)40 b(\(R)f Fa(BC)6 b Fe(=8)41 b(00)f(R)f(E)h(M)f(O)h(T)f -(E)h(1)13 b Fb(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 -b Fd(65)2025 1816 y Fe(ESC)h(\(s)f Fa(BC)6 b Fe(=1)41 -b Fa(SPEED1)18 b Fb(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 b Fd(62)2025 -1927 y Fe(ESC)i(\(S)f Fa(BC)6 b Fe(=8)41 b Fa(WIDTH4)k(LENGTH4)19 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(62)2025 -2038 y Fe(ESC)h(\(U)f Fa(BC)6 b Fe(=1)41 b Fa(UNIT1)30 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)50 b Fd(61)2025 2149 y Fe(ESC)40 -b(\(U)f Fa(BC)6 b Fe(=5)41 b Fa(P)-6 b(A)n(GEUNITS1)45 -b(VUNIT1)f(HUNIT1)2178 2240 y(BASEUNIT2)13 b Fb(.)g(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)33 b Fd(61)2025 2351 y Fe(ESC)40 b(\(v)f -Fa(BC)6 b Fe(=2)41 b Fa(AD)n(V)-9 b(ANCE2)27 b Fb(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 -b Fd(63)2025 2462 y Fe(ESC)40 b(\(V)f Fa(BC)6 b Fe(=2)41 -b Fa(AD)n(V)-9 b(ANCE2)27 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(63)2025 2573 -y Fe(ESC)40 b(\(v)f Fa(BC)6 b Fe(=4)41 b Fa(AD)n(V)-9 -b(ANCE4)27 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)47 b Fd(63)2025 2684 y Fe(ESC)40 b(\(V)f -Fa(BC)6 b Fe(=4)41 b Fa(AD)n(V)-9 b(ANCE4)27 b Fb(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 -b Fd(63)2025 2795 y Fe(ESC)40 b(.)f Fa(COMPRESS1)46 b(VSEP1)f(HSEP1)g -(LINES1)2178 2887 y(WIDTH2)g(data...)17 b Fb(.)d(.)e(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)43 -b Fd(64)2025 2998 y Fe(ESC)d(@)11 b Fb(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 -b Fd(61)2025 3109 y Fe(ESC)j(\\)f Fa(OFFSET2)21 b Fb(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(63)2025 -3220 y Fe(ESC)g(01)f(@EJL)h([sp])h(ID\\r\\n)22 b Fb(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)47 b Fd(65)2025 3331 y Fe(ESC)40 b(i)f Fa(COLOR1)45 -b(COMPRESS1)h(BITS1)f(BYTES2)2178 3422 y(LINES2)g(data...)25 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(64)2025 3533 -y Fe(ESC)40 b(r)f Fa(COLOR1)17 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)37 b Fd(63)2025 3644 y Fe(ESC)j(U)f Fa(DIRECTION1)22 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b Fd(62)2025 3996 y -Ft(G)2025 4159 y Fe(GIMPPRINT_BINARY_AGE)7 b Fb(.)17 -b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)33 b Fd(25)2025 4270 y Fe(GIMPPRINT_CHECK_VERSION) -26 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)47 b Fd(25)2025 4381 y Fe(GIMPPRINT_CURRENT_INTERFACE)16 -b Fb(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 -b Fd(25)2025 4492 y Fe(GIMPPRINT_INTERFACE_AGE)26 b Fb(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)47 b Fd(25)2025 4603 y Fe(GIMPPRINT_MAJOR_VERSION)26 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)47 b Fd(25)2025 4714 y Fe(GIMPPRINT_MICRO_VERSION)26 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)47 b Fd(25)2025 4825 y Fe(GIMPPRINT_MINOR_VERSION)26 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)47 b Fd(25)2025 5177 y Ft(N)2025 5340 y Fe(NC)39 -b Fa(BC)6 b Fe(=2)41 b(00)f(00)17 b Fb(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)43 b Fd(67)p eop -%%Page: 87 92 -87 91 bop 150 -116 a Fu(F)-8 b(unction)30 b(and)g(Macro)h(Index)2449 -b(87)150 299 y Ft(S)150 422 y Fe(stp_allocate_copy)12 -b Fb(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(16)150 514 -y Fe(stp_allocate_lut)13 b Fb(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 -b Fd(20)150 606 y Fe(stp_allocate_vars)12 b Fb(.)k(.)c(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)37 b Fd(16)150 698 y Fe(stp_check_version)12 -b Fb(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(24)150 790 -y Fe(stp_choose_colorfunc)7 b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fd(24)150 882 y Fe(stp_clear_all_options)c Fb(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)50 b Fd(21)150 974 y Fe(stp_clear_option)13 -b Fb(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(21)150 -1066 y Fe(stp_compute_lut)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)40 b Fd(20)150 1158 y Fe(stp_compute_page_parameters)16 -b Fb(.)i(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41 -b Fd(24)150 1250 y Fe(stp_copy_vars)18 b Fb(.)d(.)d(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)43 b Fd(16)150 1342 y Fe -(stp_default_dither_algorithm)15 b Fb(.)j(.)12 b(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(21)150 1434 y Fe(stp_default_settings)7 -b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(24)150 1526 y Fe -(stp_dither_algorithm_count)17 b Fb(.)h(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fd(21)150 1619 y -Fe(stp_dither_algorithm_name)18 b Fb(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(21)150 1711 -y Fe(stp_free_lut)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)45 b Fd(20)150 1803 y Fe(stp_free_vars)18 -b Fb(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 -b Fd(16)150 1895 y Fe(stp_get_app_gamma)12 b Fb(.)k(.)c(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)37 b Fd(19)150 1987 y Fe(stp_get_brightness)10 -b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(18)150 -2079 y Fe(stp_get_cmap)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)45 b Fd(20)150 2171 y Fe(stp_get_contrast)13 -b Fb(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(19)150 -2263 y Fe(stp_get_cyan)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)45 b Fd(19)150 2355 y Fe(stp_get_density)15 -b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(19)150 -2447 y Fe(stp_get_dither_algorithm)25 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(17)150 -2539 y Fe(stp_get_driver)16 b Fb(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)42 b Fd(16)150 2631 y Fe(stp_get_errdata)15 b -Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(20)150 -2723 y Fe(stp_get_errfunc)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)40 b Fd(20)150 2815 y Fe(stp_get_gamma)18 b Fb(.)d(.)d(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fd(18)150 2907 y Fe -(stp_get_image_type)10 b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 -b Fd(17)150 2999 y Fe(stp_get_ink_type)13 b Fb(.)j(.)d(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)39 b Fd(17)150 3091 y Fe(stp_get_input_color_model)18 -b Fb(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)44 b Fd(18)150 3183 y Fe(stp_get_left)22 b Fb(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 -b Fd(17)150 3275 y Fe(stp_get_lut)23 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(19)150 3368 y -Fe(stp_get_magenta)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 -b Fd(19)150 3460 y Fe(stp_get_media_size)10 b Fb(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(16)150 3552 y Fe -(stp_get_media_source)7 b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fd(17)150 3644 y Fe(stp_get_media_type)10 b Fb(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(17)150 3736 y Fe -(stp_get_option_by_index)26 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(21)150 -3828 y Fe(stp_get_option_by_name)28 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)48 -b Fd(21)150 3920 y Fe(stp_get_orientation)9 b Fb(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)34 b Fd(17)150 4012 y Fe(stp_get_outdata)15 -b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(20)150 -4104 y Fe(stp_get_outfunc)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)40 b Fd(20)150 4196 y Fe(stp_get_output_color_model)17 -b Fb(.)h(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -42 b Fd(18)150 4288 y Fe(stp_get_output_to)12 b Fb(.)k(.)c(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)37 b Fd(16)150 4380 y Fe(stp_get_output_type)9 -b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fd(17)150 4472 -y Fe(stp_get_page_height)9 b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 -b Fd(18)150 4564 y Fe(stp_get_page_width)10 b Fb(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(18)150 4656 y Fe -(stp_get_papersize_by_index)17 b Fb(.)h(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fd(22)150 4748 y -Fe(stp_get_papersize_by_name)18 b Fb(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(22)150 4840 -y Fe(stp_get_papersize_by_size)18 b Fb(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(22)150 -4932 y Fe(stp_get_ppd_file)13 b Fb(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -39 b Fd(16)150 5024 y Fe(stp_get_printer_by_driver)18 -b Fb(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)44 b Fd(22)2025 299 y Fe(stp_get_printer_by_index)25 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)46 b Fd(22)2025 392 y Fe(stp_get_printer_by_long_name)15 -b Fb(.)i(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 -b Fd(22)2025 484 y Fe(stp_get_printer_index_by_drive)q(r)10 -b Fb(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 -b Fd(22)2025 577 y Fe(stp_get_resolution)10 b Fb(.)17 -b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(16)2025 670 y Fe -(stp_get_saturation)10 b Fb(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 -b Fd(19)2025 762 y Fe(stp_get_scaling)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)40 b Fd(18)2025 855 y Fe(stp_get_top)23 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 -b Fd(17)2025 947 y Fe(stp_get_unit)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(18)2025 1040 y Fe(stp_get_yellow)16 -b Fb(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b -Fd(19)2025 1133 y Fe(stp_init)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(15)2025 -1225 y Fe(stp_known_papersizes)7 b Fb(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fd(22)2025 1318 y Fe(stp_known_printers)10 b Fb(.)17 -b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(22)2025 1411 y Fe(stp_malloc)24 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 -b Fd(15)2025 1503 y Fe(stp_maximum_settings)7 b Fb(.)17 -b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)33 b Fd(24)2025 1596 y Fe(stp_merge_printvars)9 -b Fb(.)16 b(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fd(20)2025 1689 y -Fe(stp_minimum_settings)7 b Fb(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fd(24)2025 1781 y Fe(stp_option_count)13 b Fb(.)j(.)c(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)39 b Fd(21)2025 1874 y Fe(stp_option_data)15 -b Fb(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(21)2025 -1967 y Fe(stp_option_length)12 b Fb(.)k(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38 -b Fd(21)2025 2059 y Fe(stp_option_name)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)40 b Fd(21)2025 2152 y Fe(stp_papersize_get_bottom)25 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)46 b Fd(22)2025 2245 y Fe(stp_papersize_get_height)25 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)46 b Fd(22)2025 2337 y Fe(stp_papersize_get_left)27 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)48 b Fd(22)2025 2430 y Fe(stp_papersize_get_name)27 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)48 b Fd(22)2025 2523 y Fe(stp_papersize_get_right)26 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)47 b Fd(22)2025 2615 y Fe(stp_papersize_get_top)29 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)50 b Fd(22)2025 2708 y Fe(stp_papersize_get_unit)27 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)48 b Fd(22)2025 2801 y Fe(stp_papersize_get_width)26 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)47 b Fd(22)2025 2893 y Fe(stp_printer_get_driver)27 -b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)48 b Fd(23)2025 2986 y Fe(stp_printer_get_long_name)18 -b Fb(.)g(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)44 b Fd(22)2025 3079 y Fe(stp_printer_get_model)29 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)50 b Fd(23)2025 3171 y Fe -(stp_printer_get_printfuncs)17 b Fb(.)h(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(23)2025 3264 y -Fe(stp_printer_get_printvars)18 b Fb(.)g(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fd(24)2025 3357 -y Fe(stp_set_app_gamma)12 b Fb(.)k(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38 -b Fd(19)2025 3449 y Fe(stp_set_brightness)10 b Fb(.)17 -b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(18)2025 3542 y Fe(stp_set_cmap)22 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fd(20)2025 3635 y Fe(stp_set_contrast)13 b Fb(.)j(.)c(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)39 b Fd(19)2025 3727 y Fe(stp_set_cyan)22 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fd(19)2025 3820 y Fe(stp_set_density)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)40 b Fd(19)2025 3913 y Fe(stp_set_dither_algorithm)25 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)46 b Fd(17)2025 4005 y Fe(stp_set_dither_algorithm_n)17 -b Fb(.)h(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -43 b Fd(17)2025 4098 y Fe(stp_set_driver)16 b Fb(.)f(.)e(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)g(.)h(.)f(.)42 b Fd(16)2025 4191 y Fe(stp_set_driver_n)13 -b Fb(.)j(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fd(16)2025 -4283 y Fe(stp_set_errdata)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)40 b Fd(20)2025 4376 y Fe(stp_set_errfunc)15 b Fb(.)g(.)e(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(20)2025 4469 y Fe(stp_set_gamma)18 -b Fb(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 -b Fd(18)2025 4561 y Fe(stp_set_image_type)10 b Fb(.)17 -b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(17)2025 4654 y Fe(stp_set_ink_type) -13 b Fb(.)j(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fd(17)2025 -4747 y Fe(stp_set_ink_type_n)10 b Fb(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -36 b Fd(17)2025 4839 y Fe(stp_set_input_color_model)18 -b Fb(.)g(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)44 b Fd(18)2025 4932 y Fe(stp_set_left)22 b Fb(.)12 -b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fd(17)2025 5024 y Fe(stp_set_lut)23 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 b Fd(19)p eop -%%Page: 88 93 -88 92 bop 150 -116 a Fu(F)-8 b(unction)30 b(and)g(Macro)h(Index)2449 -b(88)150 299 y Fe(stp_set_magenta)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)40 b Fd(19)150 391 y Fe(stp_set_media_size)10 -b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(16)150 -484 y Fe(stp_set_media_size_n)7 b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fd(16)150 576 y Fe(stp_set_media_source)7 b Fb(.)17 -b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)33 b Fd(17)150 669 y Fe(stp_set_media_source_n)28 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)48 b Fd(17)150 761 y Fe(stp_set_media_type)10 -b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(17)150 -854 y Fe(stp_set_media_type_n)7 b Fb(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fd(17)150 946 y Fe(stp_set_option\(stp_vars_t)18 b -Fb(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)44 b Fd(21)150 1038 y Fe(stp_set_orientation)9 b Fb(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)34 b Fd(17)150 1131 y Fe(stp_set_outdata)15 -b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(20)150 -1223 y Fe(stp_set_outfunc)15 b Fb(.)g(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)40 b Fd(20)150 1316 y Fe(stp_set_output_color_model)17 -b Fb(.)h(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -42 b Fd(18)150 1408 y Fe(stp_set_output_to)12 b Fb(.)k(.)c(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)37 b Fd(16)150 1501 y Fe(stp_set_output_to_n)9 -b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fd(16)150 1593 -y Fe(stp_set_output_type)9 b Fb(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 -b Fd(17)2025 299 y Fe(stp_set_page_height)9 b Fb(.)16 -b(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)35 b Fd(18)2025 390 y Fe(stp_set_page_width)10 -b Fb(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(18)2025 -482 y Fe(stp_set_ppd_file)13 b Fb(.)j(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -39 b Fd(16)2025 573 y Fe(stp_set_ppd_file_n)10 b Fb(.)17 -b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(16)2025 664 y Fe -(stp_set_resolution)10 b Fb(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 -b Fd(16)2025 756 y Fe(stp_set_resolution_n)7 b Fb(.)17 -b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)33 b Fd(16)2025 847 y Fe(stp_set_saturation)10 -b Fb(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(19)2025 -938 y Fe(stp_set_scaling)15 b Fb(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)40 b Fd(18)2025 1030 y Fe(stp_set_top)23 b Fb(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 -b Fd(17)2025 1121 y Fe(stp_set_unit)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(18)2025 1213 y Fe(stp_set_yellow)16 -b Fb(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b -Fd(19)2025 1472 y Ft(V)2025 1593 y Fe(VI)d Fa(BC)6 b -Fe(=2)41 b(00)f(00)17 b Fb(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -43 b Fd(67)p eop -%%Page: 89 94 -89 93 bop 150 -116 a Fu(Concept)31 b(Index)2927 b(89)150 -299 y Fp(Concept)52 b(Index)150 592 y Ft(A)150 714 y -Fd(adding)26 b(a)g(prin)n(ter)18 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)44 b Fd(74)150 805 y(App)r(endices)8 b -Fb(.)j(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)33 -b Fd(33)150 897 y Fe(autoconf)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fd(13)150 -988 y Fe(automake)7 b Fb(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fd(13)150 1232 y Ft(B)150 -1354 y Fd(bugs)14 b Fb(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(32)150 -1611 y Ft(C)150 1733 y Fd(collisions)14 b Fb(.)h(.)d(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(47)150 -1824 y(CUPS)26 b(driv)n(er)20 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(31)150 2068 y Ft(D)150 -2190 y Fd(dither)25 b(functions)7 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)32 b Fd(21)150 2281 y(dithering)12 -b Fb(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)38 b Fd(34)150 2373 y(driv)n(er)25 b(\014le)d -Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)47 b Fd(75)150 2617 y Ft(E)150 2739 y Fd(Epson)26 -b(inkjet)f(prin)n(ters)9 b Fb(.)k(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 -b Fd(75)150 2830 y(ESC/P2)25 b Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fd(61)150 -2921 y(ESC/P2)27 b(in)n(tro)r(duction)22 b Fb(.)12 b(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)48 b Fd(61)150 3183 y Ft(F)150 3304 y Fd(functions)11 -b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)36 b Fd(15)150 3549 y Ft(G)150 3670 y Fd(ghostscript)27 -b(driv)n(er)14 b Fb(.)d(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 -b Fd(31)150 3762 y(GIMP)26 b(Prin)n(t)g(plugin)d Fb(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(26)150 3853 y -Fe(gimpprint-config)13 b Fb(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 -b Fd(12)150 4112 y Ft(H)150 4234 y Fd(ho)n(w)26 b(to)g(read)20 -b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -46 b Fd(1)150 4478 y Ft(I)150 4600 y Fd(initialising)28 -b(libgimpprin)n(t)21 b Fb(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(15)150 -4691 y(in)n(tegrating)17 b Fb(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)43 b Fd(12)150 4948 y Ft(M)150 -5070 y Fd(m4)25 b(macros)18 b Fb(.)13 b(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)44 b Fd(13)150 5161 y(main)25 -b(functions)f Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 -b Fd(15)150 5253 y Fe(make)13 b Fb(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38 -b Fd(13)150 5344 y(man)n(ual,)25 b(ho)n(w)h(to)g(read)19 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fd(1)150 -5435 y(memory)24 b(allo)r(cation)16 b Fb(.)e(.)e(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)41 b Fd(15)2025 592 y Ft(N)2025 731 y Fd(new)26 -b(prin)n(ter)7 b Fb(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)32 b Fd(74)2025 1034 y Ft(O)2025 1173 y Fd(options)26 -b(functions)c Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 -b Fd(21)2025 1273 y(o)n(v)n(ersampling)17 b Fb(.)12 b(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fd(57)2025 1372 -y(o)n(v)n(erview)18 b Fb(.)13 b(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fd(10)2025 1662 y Ft(P)2025 -1801 y Fd(pap)r(er)25 b(functions)12 b Fb(.)h(.)g(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)38 b Fd(21)2025 1900 y(p)r(erfect)26 -b(w)n(ea)n(v)n(e)21 b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 -b Fd(44,)27 b(48)2025 2000 y(Prin)n(t)e(plugin)14 b Fb(.)f(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(26)2025 -2100 y(prin)n(ter)25 b(functions)11 b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)37 b Fd(22)2025 2199 y(prin)n(ter,)25 -b(adding)d Fb(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 -b Fd(74)2025 2299 y(prin)n(ter,)25 b(tuning)8 b Fb(.)k(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fd(81)2025 2399 -y(problems)12 b Fb(.)f(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)38 b Fd(32)2025 2498 y(programs)8 -b Fb(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)33 b Fd(26)2025 2801 y Ft(R)2025 2940 y Fd(reading)23 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)49 b Fd(1)2025 3242 y Ft(S)2025 3381 -y Fd(settings)26 b(functions)15 b Fb(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)41 b Fd(24)2025 3481 y Fe(stp_vars_t)28 b Fd(functions)20 -b Fb(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(15)2025 3786 y -Ft(T)2025 3924 y Fd(tuning)25 b(the)g(prin)n(ter)7 b -Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fd(81)2025 -4227 y Ft(U)2025 4366 y Fd(using)22 b Fb(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 -b Fd(11)2025 4668 y Ft(V)2025 4807 y Fd(v)n(ersion)26 -b(functions)8 b Fb(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fd(24)2025 5097 y Ft(W)2025 5236 y Fd(w)n(ea)n(ving)12 -b Fb(.)h(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)38 b Fd(41)2025 5336 y(w)n(ea)n(ving)26 b(algorithms)c -Fb(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(42)2025 -5435 y(w)n(ea)n(ving)26 b(collisions)13 b Fb(.)i(.)d(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)39 b Fd(47)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/doc/gimpprint.texi b/doc/gimpprint.texi deleted file mode 100644 index 92a27d7..0000000 --- a/doc/gimpprint.texi +++ /dev/null @@ -1,130 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@c $Id: gimpprint.texi,v 1.6 2001/10/27 17:16:37 rlk Exp $ -@setfilename gimpprint.info -@settitle GIMP-Print -@finalout -@c @exampleindent 0 -@c For double-sided printing, uncomment: -@c @setchapternewpage odd -@c %**end of header - -@c Combine several related indices -@syncodeindex pg cp -@syncodeindex tp vr - -@c Include version numbers -@include version.texi - -@c Macro definitions -@set BUGADDR @email{gimp-print-devel@@lists.sourceforge.net} -@set MAILLIST @email{gimp-print-devel@@lists.sourceforge.net} - -@dircategory Libraries -@direntry -* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library -@end direntry - -@ifinfo -This file documents the gimpprint library and associated programs -used for high quality printing. - -Copyright (C) 2001 Michael Sweet (@email{mike@@easysw.com}) and Robert -Krawitz (@email{rlk@@alum.mit.edu}) - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. -@end ifinfo - -@titlepage -@title GIMP-Print -@subtitle The print plugin for the GIMP -@subtitle Version @value{VERSION}, @value{UPDATED} -@author The GIMP-Print Project - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 2001 Michael Sweet -(@email{mike@@easysw.com}) and Robert Krawitz (@email{rlk@@alum.mit.edu}) - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. -@end titlepage - - -@c Print tables of contents -@shortcontents -@contents - -@ifnottex -@c All the nodes can be updated using the EMACS command -@c texinfo-every-node-update, which is normally bound to C-c C-u C-e. -@node Top, , (dir), (dir) -@comment node-name, next, previous, up -@top The print plugin for the GIMP and printing library - -This file documents the libgimpprint library and associated programs used -for high quality printing. This edition documents version @value{VERSION}. - -@xref{Problems}, for information on how to report problems with -GIMP-Print. -@end ifnottex - -@c All the menus can be updated with the EMACS command -@c texinfo-all-menus-update, which is normally bound to C-c C-u C-a. -@menu -* Instructions:: How to read this manual. -* Copying:: Your rights. -* Overview:: Preliminary information. -* Using libgimpprint:: Examples of how to use libgimpprint. -* Integrating libgimpprint:: Using libgimpprint in your own packages. -* Functions:: libgimpprint function reference. -* Programs:: Using GIMP-Print programs. -* Problems:: Reporting bugs. -* Appendices:: Additional information. -* Data Type and Variable Index:: Index of data types and variables. -* Function and Macro Index:: Index of functions and macros. -* Concept Index:: Index of concepts. -@end menu - -@include introduction.texi -@include copying.texi -@include overview.texi -@include using.texi -@include integrating.texi -@include functions.texi -@include programs.texi -@include problems.texi -@include appendices.texi -@include indices.texi - -@bye diff --git a/doc/gpl.texi b/doc/gpl.texi deleted file mode 100644 index 1aeb8f3..0000000 --- a/doc/gpl.texi +++ /dev/null @@ -1,396 +0,0 @@ -@setfilename gpl.info - -@unnumbered GNU GENERAL PUBLIC LICENSE -@center Version 2, June 1991 - -@display -Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. -675 Mass Ave, Cambridge, MA 02139, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@unnumberedsec Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software---to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -@iftex -@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end iftex -@ifinfo -@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end ifinfo - -@enumerate -@item -This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The ``Program'', below, -refers to any such program or work, and a ``work based on the Program'' -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term ``modification''.) Each licensee is addressed as ``you''. - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -@item -You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -@item -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -@enumerate a -@item -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -@item -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -@item -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) -@end enumerate - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -@item -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -@enumerate a -@item -Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -@item -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -@item -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) -@end enumerate - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -@item -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -@item -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -@item -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -@item -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -@item -The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and ``any -later version'', you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -@item -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -@iftex -@heading NO WARRANTY -@end iftex -@ifinfo -@center NO WARRANTY -@end ifinfo - -@item -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -@item -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. -@end enumerate - -@iftex -@heading END OF TERMS AND CONDITIONS -@end iftex -@ifinfo -@center END OF TERMS AND CONDITIONS -@end ifinfo - -@page -@unnumberedsec How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the ``copyright'' line and a pointer to where the full notice is found. - -@smallexample -@var{one line to give the program's name and an idea of what it does.} -Copyright (C) 19@var{yy} @var{name of author} - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -@end smallexample - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -@smallexample -Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details -type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' -for details. -@end smallexample - -The hypothetical commands @samp{show w} and @samp{show c} should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than @samp{show w} and -@samp{show c}; they could even be mouse-clicks or menu items---whatever -suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a ``copyright disclaimer'' for the program, if -necessary. Here is a sample; alter the names: - -@smallexample -@group -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -@var{signature of Ty Coon}, 1 April 1989 -Ty Coon, President of Vice -@end group -@end smallexample - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/doc/gutenprint-stamp b/doc/gutenprint-stamp new file mode 100644 index 0000000..e69de29 diff --git a/doc/gutenprint.dox.in b/doc/gutenprint.dox.in new file mode 100644 index 0000000..c75434f --- /dev/null +++ b/doc/gutenprint.dox.in @@ -0,0 +1,1078 @@ +# Doxyfile 1.3.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "libgutenprint API Reference" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./gutenprint + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. It is allowed to use relative paths in the argument list. + +STRIP_FROM_PATH = ../ + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explict @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# reimplements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @top_srcdir@/include/gutenprint + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = @top_srcdir@/src/main/xmli18n-tmp.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output dir. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = YES + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimised for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assigments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = ./gutenprint/gutenprint.tag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = @PERL@ + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superceded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = NO + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similiar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/doc/gutenprint/gutenprint.tag b/doc/gutenprint/gutenprint.tag new file mode 100644 index 0000000..b3c6a2e --- /dev/null +++ b/doc/gutenprint/gutenprint.tag @@ -0,0 +1,8996 @@ + + + + array.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + array_8h + gutenprint/sequence.h + + stp_array + stp_array_t + group__array.html + ga0 + + + + stp_array_t * + stp_array_create + group__array.html + ga1 + (int x_size, int y_size) + + + void + stp_array_destroy + group__array.html + ga2 + (stp_array_t *array) + + + void + stp_array_copy + group__array.html + ga3 + (stp_array_t *dest, const stp_array_t *source) + + + stp_array_t * + stp_array_create_copy + group__array.html + ga4 + (const stp_array_t *array) + + + void + stp_array_set_size + group__array.html + ga5 + (stp_array_t *array, int x_size, int y_size) + + + void + stp_array_get_size + group__array.html + ga6 + (const stp_array_t *array, int *x_size, int *y_size) + + + void + stp_array_set_data + group__array.html + ga7 + (stp_array_t *array, const double *data) + + + void + stp_array_get_data + group__array.html + ga8 + (const stp_array_t *array, size_t *size, const double **data) + + + int + stp_array_set_point + group__array.html + ga9 + (stp_array_t *array, int x, int y, double data) + + + int + stp_array_get_point + group__array.html + ga10 + (const stp_array_t *array, int x, int y, double *data) + + + const stp_sequence_t * + stp_array_get_sequence + group__array.html + ga11 + (const stp_array_t *array) + + + + bit-ops.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + bit-ops_8h + + void + stp_fold + bit-ops_8h.html + a0 + (const unsigned char *line, int single_height, unsigned char *outbuf) + + + void + stp_split_2 + bit-ops_8h.html + a1 + (int height, int bits, const unsigned char *in, unsigned char *outhi, unsigned char *outlo) + + + void + stp_split_4 + bit-ops_8h.html + a2 + (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3) + + + void + stp_unpack_2 + bit-ops_8h.html + a3 + (int height, int bits, const unsigned char *in, unsigned char *outlo, unsigned char *outhi) + + + void + stp_unpack_4 + bit-ops_8h.html + a4 + (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3) + + + void + stp_unpack_8 + bit-ops_8h.html + a5 + (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3, unsigned char *out4, unsigned char *out5, unsigned char *out6, unsigned char *out7) + + + void + stp_unpack_16 + bit-ops_8h.html + a6 + (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3, unsigned char *out4, unsigned char *out5, unsigned char *out6, unsigned char *out7, unsigned char *out8, unsigned char *out9, unsigned char *out10, unsigned char *out11, unsigned char *out12, unsigned char *out13, unsigned char *out14, unsigned char *out15) + + + + channel.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + channel_8h + + void + stp_channel_reset + channel_8h.html + a0 + (stp_vars_t *v) + + + void + stp_channel_reset_channel + channel_8h.html + a1 + (stp_vars_t *v, int channel) + + + void + stp_channel_add + channel_8h.html + a2 + (stp_vars_t *v, unsigned channel, unsigned subchannel, double value) + + + double + stp_channel_get_value + channel_8h.html + a3 + (stp_vars_t *v, unsigned channel, unsigned subchannel) + + + void + stp_channel_set_density_adjustment + channel_8h.html + a4 + (stp_vars_t *v, int color, int subchannel, double adjustment) + + + double + stp_channel_get_density_adjustment + channel_8h.html + a5 + (stp_vars_t *v, int color, int subchannel) + + + void + stp_channel_set_ink_limit + channel_8h.html + a6 + (stp_vars_t *v, double limit) + + + double + stp_channel_get_ink_limit + channel_8h.html + a7 + (stp_vars_t *v) + + + void + stp_channel_set_cutoff_adjustment + channel_8h.html + a8 + (stp_vars_t *v, int color, int subchannel, double adjustment) + + + double + stp_channel_get_cutoff_adjustment + channel_8h.html + a9 + (stp_vars_t *v, int color, int subchannel) + + + void + stp_channel_set_black_channel + channel_8h.html + a10 + (stp_vars_t *v, int channel) + + + int + stp_channel_get_black_channel + channel_8h.html + a11 + (stp_vars_t *v) + + + void + stp_channel_set_gloss_channel + channel_8h.html + a12 + (stp_vars_t *v, int channel) + + + int + stp_channel_get_gloss_channel + channel_8h.html + a13 + (stp_vars_t *v) + + + void + stp_channel_set_gloss_limit + channel_8h.html + a14 + (stp_vars_t *v, double limit) + + + double + stp_channel_get_gloss_limit + channel_8h.html + a15 + (stp_vars_t *v) + + + void + stp_channel_set_curve + channel_8h.html + a16 + (stp_vars_t *v, int channel, const stp_curve_t *curve) + + + const stp_curve_t * + stp_channel_get_curve + channel_8h.html + a17 + (stp_vars_t *v, int channel) + + + void + stp_channel_initialize + channel_8h.html + a18 + (stp_vars_t *v, stp_image_t *image, int input_channel_count) + + + void + stp_channel_convert + channel_8h.html + a19 + (const stp_vars_t *v, unsigned *zero_mask) + + + unsigned short * + stp_channel_get_input + channel_8h.html + a20 + (const stp_vars_t *v) + + + unsigned short * + stp_channel_get_output + channel_8h.html + a21 + (const stp_vars_t *v) + + + + color.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + color_8h + stp_colorfuncs_t + stp_color + + stp_color + stp_color_t + group__color.html + ga0 + + + + int + stp_color_init + group__color.html + ga1 + (stp_vars_t *v, stp_image_t *image, size_t steps) + + + int + stp_color_get_row + group__color.html + ga2 + (stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask) + + + stp_parameter_list_t + stp_color_list_parameters + group__color.html + ga3 + (const stp_vars_t *v) + + + void + stp_color_describe_parameter + group__color.html + ga4 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + int + stp_color_register + group__color.html + ga5 + (const stp_color_t *color) + + + int + stp_color_unregister + group__color.html + ga6 + (const stp_color_t *color) + + + int + stp_color_count + group__color.html + ga7 + (void) + + + const stp_color_t * + stp_get_color_by_name + group__color.html + ga8 + (const char *name) + + + const stp_color_t * + stp_get_color_by_index + group__color.html + ga9 + (int idx) + + + const stp_color_t * + stp_get_color_by_colorfuncs + group__color.html + ga10 + (stp_colorfuncs_t *colorfuncs) + + + const char * + stp_color_get_name + group__color.html + ga11 + (const stp_color_t *c) + + + const char * + stp_color_get_long_name + group__color.html + ga12 + (const stp_color_t *c) + + + + curve-cache.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + curve-cache_8h + gutenprint/curve.h + stp_cached_curve_t + + #define + CURVE_CACHE_FAST_USHORT + curve-cache_8h.html + a0 + (cache) + + + #define + CURVE_CACHE_FAST_DOUBLE + curve-cache_8h.html + a1 + (cache) + + + #define + CURVE_CACHE_FAST_COUNT + curve-cache_8h.html + a2 + (cache) + + + void + stp_curve_free_curve_cache + curve-cache_8h.html + a3 + (stp_cached_curve_t *cache) + + + void + stp_curve_cache_curve_data + curve-cache_8h.html + a4 + (stp_cached_curve_t *cache) + + + stp_curve_t * + stp_curve_cache_get_curve + curve-cache_8h.html + a5 + (stp_cached_curve_t *cache) + + + void + stp_curve_cache_curve_invalidate + curve-cache_8h.html + a6 + (stp_cached_curve_t *cache) + + + void + stp_curve_cache_set_curve + curve-cache_8h.html + a7 + (stp_cached_curve_t *cache, stp_curve_t *curve) + + + void + stp_curve_cache_set_curve_copy + curve-cache_8h.html + a8 + (stp_cached_curve_t *cache, const stp_curve_t *curve) + + + const size_t + stp_curve_cache_get_count + curve-cache_8h.html + a9 + (stp_cached_curve_t *cache) + + + const unsigned short * + stp_curve_cache_get_ushort_data + curve-cache_8h.html + a10 + (stp_cached_curve_t *cache) + + + const double * + stp_curve_cache_get_double_data + curve-cache_8h.html + a11 + (stp_cached_curve_t *cache) + + + void + stp_curve_cache_copy + curve-cache_8h.html + a12 + (stp_cached_curve_t *dest, const stp_cached_curve_t *src) + + + + curve.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + curve_8h + gutenprint/sequence.h + stp_curve_point_t + + stp_curve + stp_curve_t + group__curve.html + ga0 + + + + stp_curve_type_t + ga47 + + + + STP_CURVE_TYPE_LINEAR + gga47a1 + + + + STP_CURVE_TYPE_SPLINE + gga47a2 + + + + stp_curve_wrap_mode_t + ga48 + + + + STP_CURVE_WRAP_NONE + gga48a3 + + + + STP_CURVE_WRAP_AROUND + gga48a4 + + + + stp_curve_compose_t + ga49 + + + + STP_CURVE_COMPOSE_ADD + gga49a5 + + + + STP_CURVE_COMPOSE_MULTIPLY + gga49a6 + + + + STP_CURVE_COMPOSE_EXPONENTIATE + gga49a7 + + + + stp_curve_bounds_t + ga50 + + + + STP_CURVE_BOUNDS_RESCALE + gga50a8 + + + + STP_CURVE_BOUNDS_CLIP + gga50a9 + + + + STP_CURVE_BOUNDS_ERROR + gga50a10 + + + + stp_curve_t * + stp_curve_create + group__curve.html + ga1 + (stp_curve_wrap_mode_t wrap) + + + stp_curve_t * + stp_curve_create_copy + group__curve.html + ga2 + (const stp_curve_t *curve) + + + void + stp_curve_copy + group__curve.html + ga3 + (stp_curve_t *dest, const stp_curve_t *source) + + + void + stp_curve_destroy + group__curve.html + ga4 + (stp_curve_t *curve) + + + int + stp_curve_set_bounds + group__curve.html + ga5 + (stp_curve_t *curve, double low, double high) + + + void + stp_curve_get_bounds + group__curve.html + ga6 + (const stp_curve_t *curve, double *low, double *high) + + + stp_curve_wrap_mode_t + stp_curve_get_wrap + group__curve.html + ga7 + (const stp_curve_t *curve) + + + int + stp_curve_is_piecewise + group__curve.html + ga8 + (const stp_curve_t *curve) + + + void + stp_curve_get_range + group__curve.html + ga9 + (const stp_curve_t *curve, double *low, double *high) + + + size_t + stp_curve_count_points + group__curve.html + ga10 + (const stp_curve_t *curve) + + + int + stp_curve_set_interpolation_type + group__curve.html + ga11 + (stp_curve_t *curve, stp_curve_type_t itype) + + + stp_curve_type_t + stp_curve_get_interpolation_type + group__curve.html + ga12 + (const stp_curve_t *curve) + + + int + stp_curve_set_data + group__curve.html + ga13 + (stp_curve_t *curve, size_t count, const double *data) + + + int + stp_curve_set_data_points + group__curve.html + ga14 + (stp_curve_t *curve, size_t count, const stp_curve_point_t *data) + + + int + stp_curve_set_float_data + group__curve.html + ga15 + (stp_curve_t *curve, size_t count, const float *data) + + + int + stp_curve_set_long_data + group__curve.html + ga16 + (stp_curve_t *curve, size_t count, const long *data) + + + int + stp_curve_set_ulong_data + group__curve.html + ga17 + (stp_curve_t *curve, size_t count, const unsigned long *data) + + + int + stp_curve_set_int_data + group__curve.html + ga18 + (stp_curve_t *curve, size_t count, const int *data) + + + int + stp_curve_set_uint_data + group__curve.html + ga19 + (stp_curve_t *curve, size_t count, const unsigned int *data) + + + int + stp_curve_set_short_data + group__curve.html + ga20 + (stp_curve_t *curve, size_t count, const short *data) + + + int + stp_curve_set_ushort_data + group__curve.html + ga21 + (stp_curve_t *curve, size_t count, const unsigned short *data) + + + stp_curve_t * + stp_curve_get_subrange + group__curve.html + ga22 + (const stp_curve_t *curve, size_t start, size_t count) + + + int + stp_curve_set_subrange + group__curve.html + ga23 + (stp_curve_t *curve, const stp_curve_t *range, size_t start) + + + const double * + stp_curve_get_data + group__curve.html + ga24 + (const stp_curve_t *curve, size_t *count) + + + const stp_curve_point_t * + stp_curve_get_data_points + group__curve.html + ga25 + (const stp_curve_t *curve, size_t *count) + + + const float * + stp_curve_get_float_data + group__curve.html + ga26 + (const stp_curve_t *curve, size_t *count) + + + const long * + stp_curve_get_long_data + group__curve.html + ga27 + (const stp_curve_t *curve, size_t *count) + + + const unsigned long * + stp_curve_get_ulong_data + group__curve.html + ga28 + (const stp_curve_t *curve, size_t *count) + + + const int * + stp_curve_get_int_data + group__curve.html + ga29 + (const stp_curve_t *curve, size_t *count) + + + const unsigned int * + stp_curve_get_uint_data + group__curve.html + ga30 + (const stp_curve_t *curve, size_t *count) + + + const short * + stp_curve_get_short_data + group__curve.html + ga31 + (const stp_curve_t *curve, size_t *count) + + + const unsigned short * + stp_curve_get_ushort_data + group__curve.html + ga32 + (const stp_curve_t *curve, size_t *count) + + + const stp_sequence_t * + stp_curve_get_sequence + group__curve.html + ga33 + (const stp_curve_t *curve) + + + int + stp_curve_set_gamma + group__curve.html + ga34 + (stp_curve_t *curve, double f_gamma) + + + double + stp_curve_get_gamma + group__curve.html + ga35 + (const stp_curve_t *curve) + + + int + stp_curve_set_point + group__curve.html + ga36 + (stp_curve_t *curve, size_t where, double data) + + + int + stp_curve_get_point + group__curve.html + ga37 + (const stp_curve_t *curve, size_t where, double *data) + + + int + stp_curve_interpolate_value + group__curve.html + ga38 + (const stp_curve_t *curve, double where, double *result) + + + int + stp_curve_resample + group__curve.html + ga39 + (stp_curve_t *curve, size_t points) + + + int + stp_curve_rescale + group__curve.html + ga40 + (stp_curve_t *curve, double scale, stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode) + + + int + stp_curve_write + group__curve.html + ga41 + (FILE *file, const stp_curve_t *curve) + + + char * + stp_curve_write_string + group__curve.html + ga42 + (const stp_curve_t *curve) + + + stp_curve_t * + stp_curve_create_from_stream + group__curve.html + ga43 + (FILE *fp) + + + stp_curve_t * + stp_curve_create_from_file + group__curve.html + ga44 + (const char *file) + + + stp_curve_t * + stp_curve_create_from_string + group__curve.html + ga45 + (const char *string) + + + int + stp_curve_compose + group__curve.html + ga46 + (stp_curve_t **retval, stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points) + + + + dither.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + dither_8h + stp_dither_matrix_short + stp_dither_matrix_normal + stp_dither_matrix_generic + dither_matrix_impl + stp_dotsize + stp_shade + + #define + STP_ECOLOR_K + dither_8h.html + a0 + + + + #define + STP_ECOLOR_C + dither_8h.html + a1 + + + + #define + STP_ECOLOR_M + dither_8h.html + a2 + + + + #define + STP_ECOLOR_Y + dither_8h.html + a3 + + + + #define + STP_NCOLORS + dither_8h.html + a4 + + + + stp_dither_matrix_short + stp_dither_matrix_short_t + dither_8h.html + a5 + + + + stp_dither_matrix_normal + stp_dither_matrix_normal_t + dither_8h.html + a6 + + + + stp_dither_matrix_generic + stp_dither_matrix_generic_t + dither_8h.html + a7 + + + + dither_matrix_impl + stp_dither_matrix_impl_t + dither_8h.html + a8 + + + + stp_dotsize + stp_dotsize_t + dither_8h.html + a9 + + + + stp_shade + stp_shade_t + dither_8h.html + a10 + + + + void + stp_dither_matrix_iterated_init + dither_8h.html + a11 + (stp_dither_matrix_impl_t *mat, size_t size, size_t exponent, const unsigned *array) + + + void + stp_dither_matrix_shear + dither_8h.html + a12 + (stp_dither_matrix_impl_t *mat, int x_shear, int y_shear) + + + void + stp_dither_matrix_init + dither_8h.html + a13 + (stp_dither_matrix_impl_t *mat, int x_size, int y_size, const unsigned int *array, int transpose, int prescaled) + + + void + stp_dither_matrix_init_short + dither_8h.html + a14 + (stp_dither_matrix_impl_t *mat, int x_size, int y_size, const unsigned short *array, int transpose, int prescaled) + + + int + stp_dither_matrix_validate_array + dither_8h.html + a15 + (const stp_array_t *array) + + + void + stp_dither_matrix_init_from_dither_array + dither_8h.html + a16 + (stp_dither_matrix_impl_t *mat, const stp_array_t *array, int transpose) + + + void + stp_dither_matrix_destroy + dither_8h.html + a17 + (stp_dither_matrix_impl_t *mat) + + + void + stp_dither_matrix_clone + dither_8h.html + a18 + (const stp_dither_matrix_impl_t *src, stp_dither_matrix_impl_t *dest, int x_offset, int y_offset) + + + void + stp_dither_matrix_copy + dither_8h.html + a19 + (const stp_dither_matrix_impl_t *src, stp_dither_matrix_impl_t *dest) + + + void + stp_dither_matrix_scale_exponentially + dither_8h.html + a20 + (stp_dither_matrix_impl_t *mat, double exponent) + + + void + stp_dither_matrix_set_row + dither_8h.html + a21 + (stp_dither_matrix_impl_t *mat, int y) + + + stp_array_t * + stp_find_standard_dither_array + dither_8h.html + a22 + (int x_aspect, int y_aspect) + + + stp_parameter_list_t + stp_dither_list_parameters + dither_8h.html + a23 + (const stp_vars_t *v) + + + void + stp_dither_describe_parameter + dither_8h.html + a24 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + void + stp_dither_init + dither_8h.html + a25 + (stp_vars_t *v, stp_image_t *image, int out_width, int xdpi, int ydpi) + + + void + stp_dither_set_iterated_matrix + dither_8h.html + a26 + (stp_vars_t *v, size_t edge, size_t iterations, const unsigned *data, int prescaled, int x_shear, int y_shear) + + + void + stp_dither_set_matrix + dither_8h.html + a27 + (stp_vars_t *v, const stp_dither_matrix_generic_t *mat, int transpose, int x_shear, int y_shear) + + + void + stp_dither_set_matrix_from_dither_array + dither_8h.html + a28 + (stp_vars_t *v, const stp_array_t *array, int transpose) + + + void + stp_dither_set_transition + dither_8h.html + a29 + (stp_vars_t *v, double) + + + void + stp_dither_set_randomizer + dither_8h.html + a30 + (stp_vars_t *v, int color, double) + + + void + stp_dither_set_ink_spread + dither_8h.html + a31 + (stp_vars_t *v, int spread) + + + void + stp_dither_set_adaptive_limit + dither_8h.html + a32 + (stp_vars_t *v, double limit) + + + int + stp_dither_get_first_position + dither_8h.html + a33 + (stp_vars_t *v, int color, int subchan) + + + int + stp_dither_get_last_position + dither_8h.html + a34 + (stp_vars_t *v, int color, int subchan) + + + void + stp_dither_set_inks_simple + dither_8h.html + a35 + (stp_vars_t *v, int color, int nlevels, const double *levels, double density, double darkness) + + + void + stp_dither_set_inks_full + dither_8h.html + a36 + (stp_vars_t *v, int color, int nshades, const stp_shade_t *shades, double density, double darkness) + + + void + stp_dither_set_inks + dither_8h.html + a37 + (stp_vars_t *v, int color, double density, double darkness, int nshades, const double *svalues, int ndotsizes, const double *dvalues) + + + void + stp_dither_add_channel + dither_8h.html + a38 + (stp_vars_t *v, unsigned char *data, unsigned channel, unsigned subchannel) + + + unsigned char * + stp_dither_get_channel + dither_8h.html + a39 + (stp_vars_t *v, unsigned channel, unsigned subchannel) + + + void + stp_dither + dither_8h.html + a40 + (stp_vars_t *v, int row, int duplicate_line, int zero_mask, const unsigned char *mask) + + + void + stp_dither_internal + dither_8h.html + a41 + (stp_vars_t *v, int row, const unsigned short *input, int duplicate_line, int zero_mask, const unsigned char *mask) + + + + gutenprint-intl-internal.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + gutenprint-intl-internal_8h + + #define + textdomain + group__intl__internal.html + ga0 + (String) + + + #define + gettext + group__intl__internal.html + ga1 + (String) + + + #define + dgettext + group__intl__internal.html + ga2 + (Domain, Message) + + + #define + dcgettext + group__intl__internal.html + ga3 + (Domain, Message, Type) + + + #define + bindtextdomain + group__intl__internal.html + ga4 + (Domain, Directory) + + + #define + _ + group__intl__internal.html + ga5 + (String) + + + #define + N_ + group__intl__internal.html + ga6 + (String) + + + + gutenprint-intl.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + gutenprint-intl_8h + + #define + textdomain + group__intl.html + ga0 + (String) + + + #define + gettext + group__intl.html + ga1 + (String) + + + #define + dgettext + group__intl.html + ga2 + (Domain, Message) + + + #define + dcgettext + group__intl.html + ga3 + (Domain, Message, Type) + + + #define + bindtextdomain + group__intl.html + ga4 + (Domain, Directory) + + + #define + _ + group__intl.html + ga5 + (String) + + + #define + N_ + group__intl.html + ga6 + (String) + + + + gutenprint-module.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + gutenprint-module_8h + gutenprint/gutenprint.h + gutenprint/bit-ops.h + gutenprint/channel.h + gutenprint/color.h + gutenprint/dither.h + gutenprint/list.h + gutenprint/module.h + gutenprint/path.h + gutenprint/weave.h + gutenprint/xml.h + + #define + STP_MODULE + gutenprint-module_8h.html + a0 + + + + + gutenprint-version.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + gutenprint-version_8h + + #define + STP_MAJOR_VERSION + group__version.html + ga7 + + + + #define + STP_MINOR_VERSION + group__version.html + ga8 + + + + #define + STP_MICRO_VERSION + group__version.html + ga9 + + + + #define + STP_CURRENT_INTERFACE + group__version.html + ga10 + + + + #define + STP_BINARY_AGE + group__version.html + ga11 + + + + #define + STP_INTERFACE_AGE + group__version.html + ga12 + + + + #define + STP_CHECK_VERSION + group__version.html + ga13 + (major, minor, micro) + + + const char * + stp_check_version + group__version.html + ga6 + (unsigned int required_major, unsigned int required_minor, unsigned int required_micro) + + + const unsigned int + stp_major_version + group__version.html + ga0 + + + + const unsigned int + stp_minor_version + group__version.html + ga1 + + + + const unsigned int + stp_micro_version + group__version.html + ga2 + + + + const unsigned int + stp_current_interface + group__version.html + ga3 + + + + const unsigned int + stp_binary_age + group__version.html + ga4 + + + + const unsigned int + stp_interface_age + group__version.html + ga5 + + + + + gutenprint.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + gutenprint_8h + gutenprint/array.h + gutenprint/curve.h + gutenprint/gutenprint-version.h + gutenprint/image.h + gutenprint/paper.h + gutenprint/printers.h + gutenprint/sequence.h + gutenprint/string-list.h + gutenprint/util.h + gutenprint/vars.h + + + image.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + image_8h + stp_image + + #define + STP_CHANNEL_LIMIT + group__image.html + ga8 + + + + stp_image + stp_image_t + group__image.html + ga0 + + + + stp_image_status_t + ga9 + + + + STP_IMAGE_STATUS_OK + gga9a2 + + + + STP_IMAGE_STATUS_ABORT + gga9a3 + + + + void + stp_image_init + group__image.html + ga1 + (stp_image_t *image) + + + void + stp_image_reset + group__image.html + ga2 + (stp_image_t *image) + + + int + stp_image_width + group__image.html + ga3 + (stp_image_t *image) + + + int + stp_image_height + group__image.html + ga4 + (stp_image_t *image) + + + stp_image_status_t + stp_image_get_row + group__image.html + ga5 + (stp_image_t *image, unsigned char *data, size_t limit, int row) + + + const char * + stp_image_get_appname + group__image.html + ga6 + (stp_image_t *image) + + + void + stp_image_conclude + group__image.html + ga7 + (stp_image_t *image) + + + + list.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + list_8h + + stp_list_item + stp_list_item_t + group__list.html + ga0 + + + + stp_list + stp_list_t + group__list.html + ga1 + + + + void(* + stp_node_freefunc + group__list.html + ga2 + )(void *) + + + void *(* + stp_node_copyfunc + group__list.html + ga3 + )(const void *) + + + const char *(* + stp_node_namefunc + group__list.html + ga4 + )(const void *) + + + int(* + stp_node_sortfunc + group__list.html + ga5 + )(const void *, const void *) + + + void + stp_list_node_free_data + group__list.html + ga6 + (void *item) + + + stp_list_t * + stp_list_create + group__list.html + ga7 + (void) + + + stp_list_t * + stp_list_copy + group__list.html + ga8 + (const stp_list_t *list) + + + int + stp_list_destroy + group__list.html + ga9 + (stp_list_t *list) + + + stp_list_item_t * + stp_list_get_start + group__list.html + ga10 + (const stp_list_t *list) + + + stp_list_item_t * + stp_list_get_end + group__list.html + ga11 + (const stp_list_t *list) + + + stp_list_item_t * + stp_list_get_item_by_index + group__list.html + ga12 + (const stp_list_t *list, int idx) + + + stp_list_item_t * + stp_list_get_item_by_name + group__list.html + ga13 + (const stp_list_t *list, const char *name) + + + stp_list_item_t * + stp_list_get_item_by_long_name + group__list.html + ga14 + (const stp_list_t *list, const char *long_name) + + + int + stp_list_get_length + group__list.html + ga15 + (const stp_list_t *list) + + + void + stp_list_set_freefunc + group__list.html + ga16 + (stp_list_t *list, stp_node_freefunc freefunc) + + + stp_node_freefunc + stp_list_get_freefunc + group__list.html + ga17 + (const stp_list_t *list) + + + void + stp_list_set_copyfunc + group__list.html + ga18 + (stp_list_t *list, stp_node_copyfunc copyfunc) + + + stp_node_copyfunc + stp_list_get_copyfunc + group__list.html + ga19 + (const stp_list_t *list) + + + void + stp_list_set_namefunc + group__list.html + ga20 + (stp_list_t *list, stp_node_namefunc namefunc) + + + stp_node_namefunc + stp_list_get_namefunc + group__list.html + ga21 + (const stp_list_t *list) + + + void + stp_list_set_long_namefunc + group__list.html + ga22 + (stp_list_t *list, stp_node_namefunc long_namefunc) + + + stp_node_namefunc + stp_list_get_long_namefunc + group__list.html + ga23 + (const stp_list_t *list) + + + void + stp_list_set_sortfunc + group__list.html + ga24 + (stp_list_t *list, stp_node_sortfunc sortfunc) + + + stp_node_sortfunc + stp_list_get_sortfunc + group__list.html + ga25 + (const stp_list_t *list) + + + int + stp_list_item_create + group__list.html + ga26 + (stp_list_t *list, stp_list_item_t *next, const void *data) + + + int + stp_list_item_destroy + group__list.html + ga27 + (stp_list_t *list, stp_list_item_t *item) + + + stp_list_item_t * + stp_list_item_prev + group__list.html + ga28 + (const stp_list_item_t *item) + + + stp_list_item_t * + stp_list_item_next + group__list.html + ga29 + (const stp_list_item_t *item) + + + void * + stp_list_item_get_data + group__list.html + ga30 + (const stp_list_item_t *item) + + + int + stp_list_item_set_data + group__list.html + ga31 + (stp_list_item_t *item, void *data) + + + + module.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + module_8h + gutenprint/list.h + stp_module_version + stp_module + + stp_module_version + stp_module_version_t + module_8h.html + a0 + + + + stp_module + stp_module_t + module_8h.html + a1 + + + + stp_module_class_t + a13 + + + + STP_MODULE_CLASS_INVALID + a13a2 + + + + STP_MODULE_CLASS_MISC + a13a3 + + + + STP_MODULE_CLASS_FAMILY + a13a4 + + + + STP_MODULE_CLASS_COLOR + a13a5 + + + + STP_MODULE_CLASS_DITHER + a13a6 + + + + int + stp_module_load + module_8h.html + a7 + (void) + + + int + stp_module_exit + module_8h.html + a8 + (void) + + + int + stp_module_open + module_8h.html + a9 + (const char *modulename) + + + int + stp_module_init + module_8h.html + a10 + (void) + + + int + stp_module_close + module_8h.html + a11 + (stp_list_item_t *module) + + + stp_list_t * + stp_module_get_class + module_8h.html + a12 + (stp_module_class_t class) + + + + mxml.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + mxml_8h + stp_mxml_attr_s + stp_mxml_value_s + stp_mxml_text_s + stp_mxml_value_u + stp_mxml_node_s + + #define + STP_MXML_WRAP + mxml_8h.html + a0 + + + + #define + STP_MXML_TAB + mxml_8h.html + a1 + + + + #define + STP_MXML_NO_CALLBACK + mxml_8h.html + a2 + + + + #define + STP_MXML_NO_PARENT + mxml_8h.html + a3 + + + + #define + STP_MXML_DESCEND + mxml_8h.html + a4 + + + + #define + STP_MXML_NO_DESCEND + mxml_8h.html + a5 + + + + #define + STP_MXML_DESCEND_FIRST + mxml_8h.html + a6 + + + + #define + STP_MXML_WS_BEFORE_OPEN + mxml_8h.html + a7 + + + + #define + STP_MXML_WS_AFTER_OPEN + mxml_8h.html + a8 + + + + #define + STP_MXML_WS_BEFORE_CLOSE + mxml_8h.html + a9 + + + + #define + STP_MXML_WS_AFTER_CLOSE + mxml_8h.html + a10 + + + + #define + STP_MXML_ADD_BEFORE + mxml_8h.html + a11 + + + + #define + STP_MXML_ADD_AFTER + mxml_8h.html + a12 + + + + #define + STP_MXML_ADD_TO_PARENT + mxml_8h.html + a13 + + + + enum stp_mxml_type_e + stp_mxml_type_t + mxml_8h.html + a14 + + + + stp_mxml_attr_s + stp_mxml_attr_t + mxml_8h.html + a15 + + + + stp_mxml_value_s + stp_mxml_element_t + mxml_8h.html + a16 + + + + stp_mxml_text_s + stp_mxml_text_t + mxml_8h.html + a17 + + + + stp_mxml_value_u + stp_mxml_value_t + mxml_8h.html + a18 + + + + stp_mxml_node_s + stp_mxml_node_t + mxml_8h.html + a19 + + + + stp_mxml_type_e + a43 + + + + STP_MXML_ELEMENT + a43a20 + + + + STP_MXML_INTEGER + a43a21 + + + + STP_MXML_OPAQUE + a43a22 + + + + STP_MXML_REAL + a43a23 + + + + STP_MXML_TEXT + a43a24 + + + + void + stp_mxmlAdd + mxml_8h.html + a25 + (stp_mxml_node_t *parent, int where, stp_mxml_node_t *child, stp_mxml_node_t *node) + + + void + stp_mxmlDelete + mxml_8h.html + a26 + (stp_mxml_node_t *node) + + + const char * + stp_mxmlElementGetAttr + mxml_8h.html + a27 + (stp_mxml_node_t *node, const char *name) + + + void + stp_mxmlElementSetAttr + mxml_8h.html + a28 + (stp_mxml_node_t *node, const char *name, const char *value) + + + stp_mxml_node_t * + stp_mxmlFindElement + mxml_8h.html + a29 + (stp_mxml_node_t *node, stp_mxml_node_t *top, const char *name, const char *attr, const char *value, int descend) + + + stp_mxml_node_t * + stp_mxmlLoadFile + mxml_8h.html + a30 + (stp_mxml_node_t *top, FILE *fp, stp_mxml_type_t(*cb)(stp_mxml_node_t *)) + + + stp_mxml_node_t * + stp_mxmlLoadString + mxml_8h.html + a31 + (stp_mxml_node_t *top, const char *s, stp_mxml_type_t(*cb)(stp_mxml_node_t *)) + + + stp_mxml_node_t * + stp_mxmlNewElement + mxml_8h.html + a32 + (stp_mxml_node_t *parent, const char *name) + + + stp_mxml_node_t * + stp_mxmlNewInteger + mxml_8h.html + a33 + (stp_mxml_node_t *parent, int integer) + + + stp_mxml_node_t * + stp_mxmlNewOpaque + mxml_8h.html + a34 + (stp_mxml_node_t *parent, const char *opaque) + + + stp_mxml_node_t * + stp_mxmlNewReal + mxml_8h.html + a35 + (stp_mxml_node_t *parent, double real) + + + stp_mxml_node_t * + stp_mxmlNewText + mxml_8h.html + a36 + (stp_mxml_node_t *parent, int whitespace, const char *string) + + + void + stp_mxmlRemove + mxml_8h.html + a37 + (stp_mxml_node_t *node) + + + char * + stp_mxmlSaveAllocString + mxml_8h.html + a38 + (stp_mxml_node_t *node, int(*cb)(stp_mxml_node_t *, int)) + + + int + stp_mxmlSaveFile + mxml_8h.html + a39 + (stp_mxml_node_t *node, FILE *fp, int(*cb)(stp_mxml_node_t *, int)) + + + int + stp_mxmlSaveString + mxml_8h.html + a40 + (stp_mxml_node_t *node, char *buffer, int bufsize, int(*cb)(stp_mxml_node_t *, int)) + + + stp_mxml_node_t * + stp_mxmlWalkNext + mxml_8h.html + a41 + (stp_mxml_node_t *node, stp_mxml_node_t *top, int descend) + + + stp_mxml_node_t * + stp_mxmlWalkPrev + mxml_8h.html + a42 + (stp_mxml_node_t *node, stp_mxml_node_t *top, int descend) + + + + paper.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + paper_8h + gutenprint/vars.h + stp_papersize_t + + stp_papersize_unit_t + ga5 + + + + PAPERSIZE_ENGLISH_STANDARD + gga5a0 + + + + PAPERSIZE_METRIC_STANDARD + gga5a1 + + + + PAPERSIZE_ENGLISH_EXTENDED + gga5a2 + + + + PAPERSIZE_METRIC_EXTENDED + gga5a3 + + + + int + stp_known_papersizes + group__papersize.html + ga0 + (void) + + + const stp_papersize_t * + stp_get_papersize_by_name + group__papersize.html + ga1 + (const char *name) + + + const stp_papersize_t * + stp_get_papersize_by_size + group__papersize.html + ga2 + (int length, int width) + + + const stp_papersize_t * + stp_get_papersize_by_index + group__papersize.html + ga3 + (int idx) + + + void + stp_default_media_size + group__papersize.html + ga4 + (const stp_vars_t *v, int *width, int *height) + + + + path.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + path_8h + + stp_list_t * + stp_path_search + path_8h.html + a0 + (stp_list_t *dirlist, const char *suffix) + + + void + stp_path_split + path_8h.html + a1 + (stp_list_t *list, const char *path) + + + + printers.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + printers_8h + gutenprint/list.h + gutenprint/vars.h + stp_printfuncs_t + stp_family + + stp_printer + stp_printer_t + group__printer.html + ga0 + + + + stp_family + stp_family_t + group__printer.html + ga1 + + + + int + stp_printer_model_count + group__printer.html + ga2 + (void) + + + const stp_printer_t * + stp_get_printer_by_index + group__printer.html + ga3 + (int idx) + + + const stp_printer_t * + stp_get_printer_by_long_name + group__printer.html + ga4 + (const char *long_name) + + + const stp_printer_t * + stp_get_printer_by_driver + group__printer.html + ga5 + (const char *driver) + + + const stp_printer_t * + stp_get_printer + group__printer.html + ga6 + (const stp_vars_t *v) + + + int + stp_get_printer_index_by_driver + group__printer.html + ga7 + (const char *driver) + + + const char * + stp_printer_get_long_name + group__printer.html + ga8 + (const stp_printer_t *p) + + + const char * + stp_printer_get_driver + group__printer.html + ga9 + (const stp_printer_t *p) + + + const char * + stp_printer_get_family + group__printer.html + ga10 + (const stp_printer_t *p) + + + const char * + stp_printer_get_manufacturer + group__printer.html + ga11 + (const stp_printer_t *p) + + + int + stp_printer_get_model + group__printer.html + ga12 + (const stp_printer_t *p) + + + const stp_vars_t * + stp_printer_get_defaults + group__printer.html + ga13 + (const stp_printer_t *p) + + + void + stp_set_printer_defaults + group__printer.html + ga14 + (stp_vars_t *v, const stp_printer_t *p) + + + int + stp_print + group__printer.html + ga15 + (const stp_vars_t *v, stp_image_t *image) + + + int + stp_start_job + group__printer.html + ga16 + (const stp_vars_t *v, stp_image_t *image) + + + int + stp_end_job + group__printer.html + ga17 + (const stp_vars_t *v, stp_image_t *image) + + + int + stp_get_model_id + group__printer.html + ga18 + (const stp_vars_t *v) + + + int + stp_verify_printer_params + group__printer.html + ga19 + (stp_vars_t *v) + + + int + stp_family_register + group__printer.html + ga20 + (stp_list_t *family) + + + int + stp_family_unregister + group__printer.html + ga21 + (stp_list_t *family) + + + void + stp_initialize_printer_defaults + group__printer.html + ga22 + (void) + + + stp_parameter_list_t + stp_printer_list_parameters + group__printer.html + ga23 + (const stp_vars_t *v) + + + void + stp_printer_describe_parameter + group__printer.html + ga24 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + const char * + stp_describe_output + group__printer.html + ga25 + (const stp_vars_t *v) + + + + sequence.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + sequence_8h + + stp_sequence + stp_sequence_t + group__sequence.html + ga0 + + + + stp_sequence_t * + stp_sequence_create + group__sequence.html + ga1 + (void) + + + void + stp_sequence_destroy + group__sequence.html + ga2 + (stp_sequence_t *sequence) + + + void + stp_sequence_copy + group__sequence.html + ga3 + (stp_sequence_t *dest, const stp_sequence_t *source) + + + stp_sequence_t * + stp_sequence_create_copy + group__sequence.html + ga4 + (const stp_sequence_t *sequence) + + + int + stp_sequence_set_bounds + group__sequence.html + ga5 + (stp_sequence_t *sequence, double low, double high) + + + void + stp_sequence_get_bounds + group__sequence.html + ga6 + (const stp_sequence_t *sequence, double *low, double *high) + + + void + stp_sequence_get_range + group__sequence.html + ga7 + (const stp_sequence_t *sequence, double *low, double *high) + + + int + stp_sequence_set_size + group__sequence.html + ga8 + (stp_sequence_t *sequence, size_t size) + + + size_t + stp_sequence_get_size + group__sequence.html + ga9 + (const stp_sequence_t *sequence) + + + int + stp_sequence_set_data + group__sequence.html + ga10 + (stp_sequence_t *sequence, size_t count, const double *data) + + + int + stp_sequence_set_subrange + group__sequence.html + ga11 + (stp_sequence_t *sequence, size_t where, size_t size, const double *data) + + + void + stp_sequence_get_data + group__sequence.html + ga12 + (const stp_sequence_t *sequence, size_t *size, const double **data) + + + int + stp_sequence_set_point + group__sequence.html + ga13 + (stp_sequence_t *sequence, size_t where, double data) + + + int + stp_sequence_get_point + group__sequence.html + ga14 + (const stp_sequence_t *sequence, size_t where, double *data) + + + int + stp_sequence_set_float_data + group__sequence.html + ga15 + (stp_sequence_t *sequence, size_t count, const float *data) + + + int + stp_sequence_set_long_data + group__sequence.html + ga16 + (stp_sequence_t *sequence, size_t count, const long *data) + + + int + stp_sequence_set_ulong_data + group__sequence.html + ga17 + (stp_sequence_t *sequence, size_t count, const unsigned long *data) + + + int + stp_sequence_set_int_data + group__sequence.html + ga18 + (stp_sequence_t *sequence, size_t count, const int *data) + + + int + stp_sequence_set_uint_data + group__sequence.html + ga19 + (stp_sequence_t *sequence, size_t count, const unsigned int *data) + + + int + stp_sequence_set_short_data + group__sequence.html + ga20 + (stp_sequence_t *sequence, size_t count, const short *data) + + + int + stp_sequence_set_ushort_data + group__sequence.html + ga21 + (stp_sequence_t *sequence, size_t count, const unsigned short *data) + + + const float * + stp_sequence_get_float_data + group__sequence.html + ga22 + (const stp_sequence_t *sequence, size_t *count) + + + const long * + stp_sequence_get_long_data + group__sequence.html + ga23 + (const stp_sequence_t *sequence, size_t *count) + + + const unsigned long * + stp_sequence_get_ulong_data + group__sequence.html + ga24 + (const stp_sequence_t *sequence, size_t *count) + + + const int * + stp_sequence_get_int_data + group__sequence.html + ga25 + (const stp_sequence_t *sequence, size_t *count) + + + const unsigned int * + stp_sequence_get_uint_data + group__sequence.html + ga26 + (const stp_sequence_t *sequence, size_t *count) + + + const short * + stp_sequence_get_short_data + group__sequence.html + ga27 + (const stp_sequence_t *sequence, size_t *count) + + + const unsigned short * + stp_sequence_get_ushort_data + group__sequence.html + ga28 + (const stp_sequence_t *sequence, size_t *count) + + + + string-list.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + string-list_8h + stp_param_string_t + + stp_string_list + stp_string_list_t + string-list_8h.html + a0 + + + + stp_string_list_t * + stp_string_list_create + string-list_8h.html + a1 + (void) + + + void + stp_string_list_destroy + string-list_8h.html + a2 + (stp_string_list_t *list) + + + stp_param_string_t * + stp_string_list_param + string-list_8h.html + a3 + (const stp_string_list_t *list, size_t element) + + + stp_param_string_t * + stp_string_list_find + string-list_8h.html + a4 + (const stp_string_list_t *list, const char *name) + + + size_t + stp_string_list_count + string-list_8h.html + a5 + (const stp_string_list_t *list) + + + stp_string_list_t * + stp_string_list_create_copy + string-list_8h.html + a6 + (const stp_string_list_t *list) + + + void + stp_string_list_add_string + string-list_8h.html + a7 + (stp_string_list_t *list, const char *name, const char *text) + + + void + stp_string_list_remove_string + string-list_8h.html + a8 + (stp_string_list_t *list, const char *name) + + + stp_string_list_t * + stp_string_list_create_from_params + string-list_8h.html + a9 + (const stp_param_string_t *list, size_t count) + + + int + stp_string_list_is_present + string-list_8h.html + a10 + (const stp_string_list_t *list, const char *value) + + + + util.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + util_8h + gutenprint/curve.h + gutenprint/vars.h + + #define + STP_DBG_LUT + group__util.html + ga33 + + + + #define + STP_DBG_COLORFUNC + group__util.html + ga34 + + + + #define + STP_DBG_INK + group__util.html + ga35 + + + + #define + STP_DBG_PS + group__util.html + ga36 + + + + #define + STP_DBG_PCL + group__util.html + ga37 + + + + #define + STP_DBG_ESCP2 + group__util.html + ga38 + + + + #define + STP_DBG_CANON + group__util.html + ga39 + + + + #define + STP_DBG_LEXMARK + group__util.html + ga40 + + + + #define + STP_DBG_WEAVE_PARAMS + group__util.html + ga41 + + + + #define + STP_DBG_ROWS + group__util.html + ga42 + + + + #define + STP_DBG_MARK_FILE + group__util.html + ga43 + + + + #define + STP_DBG_LIST + group__util.html + ga44 + + + + #define + STP_DBG_MODULE + group__util.html + ga45 + + + + #define + STP_DBG_PATH + group__util.html + ga46 + + + + #define + STP_DBG_PAPER + group__util.html + ga47 + + + + #define + STP_DBG_PRINTERS + group__util.html + ga48 + + + + #define + STP_DBG_XML + group__util.html + ga49 + + + + #define + STP_DBG_VARS + group__util.html + ga50 + + + + #define + STP_DBG_OLYMPUS + group__util.html + ga51 + + + + #define + STP_DBG_CURVE + group__util.html + ga52 + + + + #define + STP_DBG_CURVE_ERRORS + group__util.html + ga53 + + + + #define + STP_SAFE_FREE + group__util.html + ga54 + (x) + + + int + stp_init + group__util.html + ga0 + (void) + + + const char * + stp_set_output_codeset + group__util.html + ga1 + (const char *codeset) + + + stp_curve_t * + stp_read_and_compose_curves + group__util.html + ga2 + (const char *s1, const char *s2, stp_curve_compose_t comp, size_t piecewise_point_count) + + + void + stp_abort + group__util.html + ga3 + (void) + + + void + stp_prune_inactive_options + group__util.html + ga4 + (stp_vars_t *v) + + + void + stp_zprintf + group__util.html + ga5 + (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__ + + + void void + stp_zfwrite + group__util.html + ga6 + (const char *buf, size_t bytes, size_t nitems, const stp_vars_t *v) + + + void + stp_putc + group__util.html + ga7 + (int ch, const stp_vars_t *v) + + + void + stp_put16_le + group__util.html + ga8 + (unsigned short sh, const stp_vars_t *v) + + + void + stp_put16_be + group__util.html + ga9 + (unsigned short sh, const stp_vars_t *v) + + + void + stp_put32_le + group__util.html + ga10 + (unsigned int sh, const stp_vars_t *v) + + + void + stp_put32_be + group__util.html + ga11 + (unsigned int sh, const stp_vars_t *v) + + + void + stp_puts + group__util.html + ga12 + (const char *s, const stp_vars_t *v) + + + void + stp_send_command + group__util.html + ga13 + (const stp_vars_t *v, const char *command, const char *format,...) + + + void + stp_erputc + group__util.html + ga14 + (int ch) + + + void + stp_eprintf + group__util.html + ga15 + (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__ + + + void void + stp_erprintf + group__util.html + ga16 + (const char *format,...) __attribute__((format(__printf__ + + + void void void + stp_asprintf + group__util.html + ga17 + (char **strp, const char *format,...) __attribute__((format(__printf__ + + + void void void void + stp_catprintf + group__util.html + ga18 + (char **strp, const char *format,...) __attribute__((format(__printf__ + + + unsigned long + stp_get_debug_level + group__util.html + ga19 + (void) + + + void + stp_dprintf + group__util.html + ga20 + (unsigned long level, const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__ + + + void void + stp_deprintf + group__util.html + ga21 + (unsigned long level, const char *format,...) __attribute__((format(__printf__ + + + void void void + stp_init_debug_messages + group__util.html + ga22 + (stp_vars_t *v) + + + void + stp_flush_debug_messages + group__util.html + ga23 + (stp_vars_t *v) + + + void * + stp_malloc + group__util.html + ga24 + (size_t) + + + void * + stp_zalloc + group__util.html + ga25 + (size_t) + + + void * + stp_realloc + group__util.html + ga26 + (void *ptr, size_t) + + + void + stp_free + group__util.html + ga27 + (void *ptr) + + + size_t + stp_strlen + group__util.html + ga28 + (const char *s) + + + char * + stp_strndup + group__util.html + ga29 + (const char *s, int n) + + + char * + stp_strdup + group__util.html + ga30 + (const char *s) + + + const char * + stp_get_version + group__util.html + ga31 + (void) + + + const char * + stp_get_release_version + group__util.html + ga32 + (void) + + + + vars.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + vars_8h + gutenprint/array.h + gutenprint/curve.h + gutenprint/string-list.h + stp_raw_t + stp_double_bound_t + stp_int_bound_t + stp_parameter_t + + stp_vars + stp_vars_t + group__vars.html + ga0 + + + + void * + stp_parameter_list_t + group__vars.html + ga1 + + + + const void * + stp_const_parameter_list_t + group__vars.html + ga2 + + + + void(* + stp_outfunc_t + group__vars.html + ga3 + )(void *data, const char *buffer, size_t bytes) + + + void *(* + stp_copy_data_func_t + group__vars.html + ga4 + )(void *) + + + void(* + stp_free_data_func_t + group__vars.html + ga5 + )(void *) + + + stp_compdata + compdata_t + group__vars.html + ga6 + + + + stp_parameter_type_t + ga132 + + + + STP_PARAMETER_TYPE_STRING_LIST + gga132a7 + + + + STP_PARAMETER_TYPE_INT + gga132a8 + + + + STP_PARAMETER_TYPE_BOOLEAN + gga132a9 + + + + STP_PARAMETER_TYPE_DOUBLE + gga132a10 + + + + STP_PARAMETER_TYPE_CURVE + gga132a11 + + + + STP_PARAMETER_TYPE_FILE + gga132a12 + + + + STP_PARAMETER_TYPE_RAW + gga132a13 + + + + STP_PARAMETER_TYPE_ARRAY + gga132a14 + + + + STP_PARAMETER_TYPE_DIMENSION + gga132a15 + + + + STP_PARAMETER_TYPE_INVALID + gga132a16 + + + + stp_parameter_class_t + ga133 + + + + STP_PARAMETER_CLASS_FEATURE + gga133a17 + + + + STP_PARAMETER_CLASS_OUTPUT + gga133a18 + + + + STP_PARAMETER_CLASS_CORE + gga133a19 + + + + STP_PARAMETER_CLASS_INVALID + gga133a20 + + + + stp_parameter_level_t + ga134 + + + + STP_PARAMETER_LEVEL_BASIC + gga134a21 + + + + STP_PARAMETER_LEVEL_ADVANCED + gga134a22 + + + + STP_PARAMETER_LEVEL_ADVANCED1 + gga134a23 + + + + STP_PARAMETER_LEVEL_ADVANCED2 + gga134a24 + + + + STP_PARAMETER_LEVEL_ADVANCED3 + gga134a25 + + + + STP_PARAMETER_LEVEL_ADVANCED4 + gga134a26 + + + + STP_PARAMETER_LEVEL_INTERNAL + gga134a27 + + + + STP_PARAMETER_LEVEL_EXTERNAL + gga134a28 + + + + STP_PARAMETER_LEVEL_INVALID + gga134a29 + + + + stp_parameter_activity_t + ga135 + + + + STP_PARAMETER_INACTIVE + gga135a30 + + + + STP_PARAMETER_DEFAULTED + gga135a31 + + + + STP_PARAMETER_ACTIVE + gga135a32 + + + + stp_parameter_verify_t + ga136 + + + + PARAMETER_BAD + gga136a33 + + + + PARAMETER_OK + gga136a34 + + + + PARAMETER_INACTIVE + gga136a35 + + + + stp_vars_t * + stp_vars_create + group__vars.html + ga7 + (void) + + + void + stp_vars_copy + group__vars.html + ga8 + (stp_vars_t *dest, const stp_vars_t *source) + + + stp_vars_t * + stp_vars_create_copy + group__vars.html + ga9 + (const stp_vars_t *source) + + + void + stp_vars_destroy + group__vars.html + ga10 + (stp_vars_t *v) + + + void + stp_set_driver + group__vars.html + ga11 + (stp_vars_t *v, const char *val) + + + void + stp_set_driver_n + group__vars.html + ga12 + (stp_vars_t *v, const char *val, int bytes) + + + const char * + stp_get_driver + group__vars.html + ga13 + (const stp_vars_t *v) + + + void + stp_set_color_conversion + group__vars.html + ga14 + (stp_vars_t *v, const char *val) + + + void + stp_set_color_conversion_n + group__vars.html + ga15 + (stp_vars_t *v, const char *val, int bytes) + + + const char * + stp_get_color_conversion + group__vars.html + ga16 + (const stp_vars_t *v) + + + void + stp_set_left + group__vars.html + ga17 + (stp_vars_t *v, int val) + + + int + stp_get_left + group__vars.html + ga18 + (const stp_vars_t *v) + + + void + stp_set_top + group__vars.html + ga19 + (stp_vars_t *v, int val) + + + int + stp_get_top + group__vars.html + ga20 + (const stp_vars_t *v) + + + void + stp_set_width + group__vars.html + ga21 + (stp_vars_t *v, int val) + + + int + stp_get_width + group__vars.html + ga22 + (const stp_vars_t *v) + + + void + stp_set_height + group__vars.html + ga23 + (stp_vars_t *v, int val) + + + int + stp_get_height + group__vars.html + ga24 + (const stp_vars_t *v) + + + void + stp_set_page_width + group__vars.html + ga25 + (stp_vars_t *v, int val) + + + int + stp_get_page_width + group__vars.html + ga26 + (const stp_vars_t *v) + + + void + stp_set_page_height + group__vars.html + ga27 + (stp_vars_t *v, int val) + + + int + stp_get_page_height + group__vars.html + ga28 + (const stp_vars_t *v) + + + void + stp_set_outfunc + group__vars.html + ga29 + (stp_vars_t *v, stp_outfunc_t val) + + + stp_outfunc_t + stp_get_outfunc + group__vars.html + ga30 + (const stp_vars_t *v) + + + void + stp_set_errfunc + group__vars.html + ga31 + (stp_vars_t *v, stp_outfunc_t val) + + + stp_outfunc_t + stp_get_errfunc + group__vars.html + ga32 + (const stp_vars_t *v) + + + void + stp_set_outdata + group__vars.html + ga33 + (stp_vars_t *v, void *val) + + + void * + stp_get_outdata + group__vars.html + ga34 + (const stp_vars_t *v) + + + void + stp_set_errdata + group__vars.html + ga35 + (stp_vars_t *v, void *val) + + + void * + stp_get_errdata + group__vars.html + ga36 + (const stp_vars_t *v) + + + void + stp_merge_printvars + group__vars.html + ga37 + (stp_vars_t *user, const stp_vars_t *print) + + + stp_parameter_list_t + stp_get_parameter_list + group__vars.html + ga38 + (const stp_vars_t *v) + + + size_t + stp_parameter_list_count + group__vars.html + ga39 + (stp_const_parameter_list_t list) + + + const stp_parameter_t * + stp_parameter_find + group__vars.html + ga40 + (stp_const_parameter_list_t list, const char *name) + + + const stp_parameter_t * + stp_parameter_list_param + group__vars.html + ga41 + (stp_const_parameter_list_t list, size_t item) + + + void + stp_parameter_list_destroy + group__vars.html + ga42 + (stp_parameter_list_t list) + + + stp_parameter_list_t + stp_parameter_list_create + group__vars.html + ga43 + (void) + + + void + stp_parameter_list_add_param + group__vars.html + ga44 + (stp_parameter_list_t list, const stp_parameter_t *item) + + + stp_parameter_list_t + stp_parameter_list_copy + group__vars.html + ga45 + (stp_const_parameter_list_t list) + + + void + stp_parameter_list_append + group__vars.html + ga46 + (stp_parameter_list_t list, stp_const_parameter_list_t append) + + + void + stp_describe_parameter + group__vars.html + ga47 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + void + stp_parameter_description_destroy + group__vars.html + ga48 + (stp_parameter_t *description) + + + const stp_parameter_t * + stp_parameter_find_in_settings + group__vars.html + ga49 + (const stp_vars_t *v, const char *name) + + + void + stp_set_string_parameter + group__vars.html + ga50 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_string_parameter_n + group__vars.html + ga51 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_file_parameter + group__vars.html + ga52 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_file_parameter_n + group__vars.html + ga53 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_float_parameter + group__vars.html + ga54 + (stp_vars_t *v, const char *parameter, double value) + + + void + stp_set_int_parameter + group__vars.html + ga55 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_dimension_parameter + group__vars.html + ga56 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_boolean_parameter + group__vars.html + ga57 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_curve_parameter + group__vars.html + ga58 + (stp_vars_t *v, const char *parameter, const stp_curve_t *value) + + + void + stp_set_array_parameter + group__vars.html + ga59 + (stp_vars_t *v, const char *parameter, const stp_array_t *value) + + + void + stp_set_raw_parameter + group__vars.html + ga60 + (stp_vars_t *v, const char *parameter, const void *value, size_t bytes) + + + void + stp_scale_float_parameter + group__vars.html + ga61 + (stp_vars_t *v, const char *parameter, double scale) + + + void + stp_set_default_string_parameter + group__vars.html + ga62 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_default_string_parameter_n + group__vars.html + ga63 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_default_file_parameter + group__vars.html + ga64 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_default_file_parameter_n + group__vars.html + ga65 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_default_float_parameter + group__vars.html + ga66 + (stp_vars_t *v, const char *parameter, double value) + + + void + stp_set_default_int_parameter + group__vars.html + ga67 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_default_dimension_parameter + group__vars.html + ga68 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_default_boolean_parameter + group__vars.html + ga69 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_default_curve_parameter + group__vars.html + ga70 + (stp_vars_t *v, const char *parameter, const stp_curve_t *value) + + + void + stp_set_default_array_parameter + group__vars.html + ga71 + (stp_vars_t *v, const char *parameter, const stp_array_t *value) + + + void + stp_set_default_raw_parameter + group__vars.html + ga72 + (stp_vars_t *v, const char *parameter, const void *value, size_t bytes) + + + const char * + stp_get_string_parameter + group__vars.html + ga73 + (const stp_vars_t *v, const char *parameter) + + + const char * + stp_get_file_parameter + group__vars.html + ga74 + (const stp_vars_t *v, const char *parameter) + + + double + stp_get_float_parameter + group__vars.html + ga75 + (const stp_vars_t *v, const char *parameter) + + + int + stp_get_int_parameter + group__vars.html + ga76 + (const stp_vars_t *v, const char *parameter) + + + int + stp_get_dimension_parameter + group__vars.html + ga77 + (const stp_vars_t *v, const char *parameter) + + + int + stp_get_boolean_parameter + group__vars.html + ga78 + (const stp_vars_t *v, const char *parameter) + + + const stp_curve_t * + stp_get_curve_parameter + group__vars.html + ga79 + (const stp_vars_t *v, const char *parameter) + + + const stp_array_t * + stp_get_array_parameter + group__vars.html + ga80 + (const stp_vars_t *v, const char *parameter) + + + const stp_raw_t * + stp_get_raw_parameter + group__vars.html + ga81 + (const stp_vars_t *v, const char *parameter) + + + void + stp_clear_string_parameter + group__vars.html + ga82 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_file_parameter + group__vars.html + ga83 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_float_parameter + group__vars.html + ga84 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_int_parameter + group__vars.html + ga85 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_dimension_parameter + group__vars.html + ga86 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_boolean_parameter + group__vars.html + ga87 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_curve_parameter + group__vars.html + ga88 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_array_parameter + group__vars.html + ga89 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_raw_parameter + group__vars.html + ga90 + (stp_vars_t *v, const char *parameter) + + + void + stp_set_string_parameter_active + group__vars.html + ga91 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_file_parameter_active + group__vars.html + ga92 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_float_parameter_active + group__vars.html + ga93 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_int_parameter_active + group__vars.html + ga94 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_dimension_parameter_active + group__vars.html + ga95 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_boolean_parameter_active + group__vars.html + ga96 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_curve_parameter_active + group__vars.html + ga97 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_array_parameter_active + group__vars.html + ga98 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_raw_parameter_active + group__vars.html + ga99 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_string_parameter + group__vars.html + ga100 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_file_parameter + group__vars.html + ga101 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_float_parameter + group__vars.html + ga102 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_int_parameter + group__vars.html + ga103 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_dimension_parameter + group__vars.html + ga104 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_boolean_parameter + group__vars.html + ga105 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_curve_parameter + group__vars.html + ga106 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_array_parameter + group__vars.html + ga107 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_raw_parameter + group__vars.html + ga108 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + stp_parameter_activity_t + stp_get_string_parameter_active + group__vars.html + ga109 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_file_parameter_active + group__vars.html + ga110 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_float_parameter_active + group__vars.html + ga111 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_int_parameter_active + group__vars.html + ga112 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_dimension_parameter_active + group__vars.html + ga113 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_boolean_parameter_active + group__vars.html + ga114 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_curve_parameter_active + group__vars.html + ga115 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_array_parameter_active + group__vars.html + ga116 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_raw_parameter_active + group__vars.html + ga117 + (const stp_vars_t *v, const char *parameter) + + + void + stp_get_media_size + group__vars.html + ga118 + (const stp_vars_t *v, int *width, int *height) + + + void + stp_get_imageable_area + group__vars.html + ga119 + (const stp_vars_t *v, int *left, int *right, int *bottom, int *top) + + + void + stp_get_size_limit + group__vars.html + ga120 + (const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height) + + + void + stp_describe_resolution + group__vars.html + ga121 + (const stp_vars_t *v, int *x, int *y) + + + int + stp_verify + group__vars.html + ga122 + (stp_vars_t *v) + + + const stp_vars_t * + stp_default_settings + group__vars.html + ga123 + (void) + + + void + stp_allocate_component_data + group__vars.html + ga124 + (stp_vars_t *v, const char *name, stp_copy_data_func_t copyfunc, stp_free_data_func_t freefunc, void *data) + + + void + stp_destroy_component_data + group__vars.html + ga125 + (stp_vars_t *v, const char *name) + + + void * + stp_get_component_data + group__vars.html + ga126 + (const stp_vars_t *v, const char *name) + + + stp_parameter_verify_t + stp_verify_parameter + group__vars.html + ga127 + (const stp_vars_t *v, const char *parameter, int quiet) + + + int + stp_get_verified + group__vars.html + ga128 + (const stp_vars_t *v) + + + void + stp_set_verified + group__vars.html + ga129 + (stp_vars_t *v, int value) + + + void + stp_copy_options + group__vars.html + ga130 + (stp_vars_t *vd, const stp_vars_t *vs) + + + void + stp_fill_parameter_settings + group__vars.html + ga131 + (stp_parameter_t *desc, const stp_parameter_t *param) + + + + weave.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + weave_8h + stp_weave_t + stp_pass_t + stp_lineoff_t + stp_lineactive_t + stp_linecount_t + stp_linebufs_t + stp_linebounds_t + + #define + STP_MAX_WEAVE + weave_8h.html + a0 + + + + int + stp_packfunc + weave_8h.html + a1 + (stp_vars_t *v, const unsigned char *line, int height, unsigned char *comp_buf, unsigned char **comp_ptr, int *first, int *last) + + + void + stp_fillfunc + weave_8h.html + a2 + (stp_vars_t *v, int row, int subpass, int width, int missingstartrows, int color) + + + void + stp_flushfunc + weave_8h.html + a3 + (stp_vars_t *v, int passno, int vertical_subpass) + + + int + stp_compute_linewidth_func + weave_8h.html + a4 + (stp_vars_t *v, int n) + + + stp_weave_strategy_t + a26 + + + + STP_WEAVE_ZIGZAG + a26a11 + + + + STP_WEAVE_ASCENDING + a26a12 + + + + STP_WEAVE_DESCENDING + a26a13 + + + + STP_WEAVE_ASCENDING_2X + a26a14 + + + + STP_WEAVE_STAGGERED + a26a15 + + + + STP_WEAVE_ASCENDING_3X + a26a16 + + + + void + stp_initialize_weave + weave_8h.html + a17 + (stp_vars_t *v, int jets, int separation, int oversample, int horizontal, int vertical, int ncolors, int bitwidth, int linewidth, int line_count, int first_line, int page_height, const int *head_offset, stp_weave_strategy_t, stp_flushfunc, stp_fillfunc, stp_packfunc, stp_compute_linewidth_func) + + + void + stp_flush_all + weave_8h.html + a18 + (stp_vars_t *v) + + + void + stp_write_weave + weave_8h.html + a19 + (stp_vars_t *v, unsigned char *const cols[]) + + + stp_lineoff_t * + stp_get_lineoffsets_by_pass + weave_8h.html + a20 + (const stp_vars_t *v, int pass) + + + stp_lineactive_t * + stp_get_lineactive_by_pass + weave_8h.html + a21 + (const stp_vars_t *v, int pass) + + + stp_linecount_t * + stp_get_linecount_by_pass + weave_8h.html + a22 + (const stp_vars_t *v, int pass) + + + const stp_linebufs_t * + stp_get_linebases_by_pass + weave_8h.html + a23 + (const stp_vars_t *v, int pass) + + + stp_pass_t * + stp_get_pass_by_pass + weave_8h.html + a24 + (const stp_vars_t *v, int pass) + + + void + stp_weave_parameters_by_row + weave_8h.html + a25 + (const stp_vars_t *v, int row, int vertical_subpass, stp_weave_t *w) + + + stp_packfunc + stp_pack_tiff + weave_8h.html + a5 + + + + stp_packfunc + stp_pack_uncompressed + weave_8h.html + a6 + + + + stp_fillfunc + stp_fill_tiff + weave_8h.html + a7 + + + + stp_fillfunc + stp_fill_uncompressed + weave_8h.html + a8 + + + + stp_compute_linewidth_func + stp_compute_tiff_linewidth + weave_8h.html + a9 + + + + stp_compute_linewidth_func + stp_compute_uncompressed_linewidth + weave_8h.html + a10 + + + + + xml.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + xml_8h + gutenprint/mxml.h + + int(* + stp_xml_parse_func + xml_8h.html + a0 + )(stp_mxml_node_t *node, const char *file) + + + void + stp_register_xml_parser + xml_8h.html + a1 + (const char *name, stp_xml_parse_func parse_func) + + + void + stp_unregister_xml_parser + xml_8h.html + a2 + (const char *name) + + + void + stp_register_xml_preload + xml_8h.html + a3 + (const char *filename) + + + void + stp_unregister_xml_preload + xml_8h.html + a4 + (const char *filename) + + + int + stp_xml_init_defaults + xml_8h.html + a5 + (void) + + + int + stp_xml_parse_file + xml_8h.html + a6 + (const char *file) + + + long + stp_xmlstrtol + xml_8h.html + a7 + (const char *value) + + + unsigned long + stp_xmlstrtoul + xml_8h.html + a8 + (const char *value) + + + double + stp_xmlstrtod + xml_8h.html + a9 + (const char *textval) + + + void + stp_xml_init + xml_8h.html + a10 + (void) + + + void + stp_xml_exit + xml_8h.html + a11 + (void) + + + stp_mxml_node_t * + stp_xml_get_node + xml_8h.html + a12 + (stp_mxml_node_t *xmlroot,...) + + + stp_mxml_node_t * + stp_xmldoc_create_generic + xml_8h.html + a13 + (void) + + + void + stp_xml_preinit + xml_8h.html + a14 + (void) + + + stp_sequence_t * + stp_sequence_create_from_xmltree + xml_8h.html + a15 + (stp_mxml_node_t *da) + + + stp_mxml_node_t * + stp_xmltree_create_from_sequence + xml_8h.html + a16 + (const stp_sequence_t *seq) + + + stp_curve_t * + stp_curve_create_from_xmltree + xml_8h.html + a17 + (stp_mxml_node_t *da) + + + stp_mxml_node_t * + stp_xmltree_create_from_curve + xml_8h.html + a18 + (const stp_curve_t *curve) + + + stp_array_t * + stp_array_create_from_xmltree + xml_8h.html + a19 + (stp_mxml_node_t *array) + + + stp_mxml_node_t * + stp_xmltree_create_from_array + xml_8h.html + a20 + (const stp_array_t *array) + + + void + stp_xml_parse_file_named + xml_8h.html + a21 + (const char *name) + + + + dither_matrix_impl + structdither__matrix__impl.html + + int + base + structdither__matrix__impl.html + o0 + + + + int + exp + structdither__matrix__impl.html + o1 + + + + int + x_size + structdither__matrix__impl.html + o2 + + + + int + y_size + structdither__matrix__impl.html + o3 + + + + int + total_size + structdither__matrix__impl.html + o4 + + + + int + last_x + structdither__matrix__impl.html + o5 + + + + int + last_x_mod + structdither__matrix__impl.html + o6 + + + + int + last_y + structdither__matrix__impl.html + o7 + + + + int + last_y_mod + structdither__matrix__impl.html + o8 + + + + int + index + structdither__matrix__impl.html + o9 + + + + int + i_own + structdither__matrix__impl.html + o10 + + + + int + x_offset + structdither__matrix__impl.html + o11 + + + + int + y_offset + structdither__matrix__impl.html + o12 + + + + unsigned + fast_mask + structdither__matrix__impl.html + o13 + + + + unsigned * + matrix + structdither__matrix__impl.html + o14 + + + + + stp_cached_curve_t + structstp__cached__curve__t.html + + stp_curve_t * + curve + structstp__cached__curve__t.html + o0 + + + + const double * + d_cache + structstp__cached__curve__t.html + o1 + + + + const unsigned short * + s_cache + structstp__cached__curve__t.html + o2 + + + + size_t + count + structstp__cached__curve__t.html + o3 + + + + + stp_color + structstp__color.html + + const char * + short_name + structstp__color.html + o0 + + + + const char * + long_name + structstp__color.html + o1 + + + + const stp_colorfuncs_t * + colorfuncs + structstp__color.html + o2 + + + + + stp_colorfuncs_t + structstp__colorfuncs__t.html + + int(* + init + structstp__colorfuncs__t.html + o0 + )(stp_vars_t *v, stp_image_t *image, size_t steps) + + + int(* + get_row + structstp__colorfuncs__t.html + o1 + )(stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask) + + + stp_parameter_list_t(* + list_parameters + structstp__colorfuncs__t.html + o2 + )(const stp_vars_t *v) + + + void(* + describe_parameter + structstp__colorfuncs__t.html + o3 + )(const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + + stp_curve_point_t + structstp__curve__point__t.html + + double + x + structstp__curve__point__t.html + o0 + + + + double + y + structstp__curve__point__t.html + o1 + + + + + stp_dither_matrix_generic + structstp__dither__matrix__generic.html + + int + x + structstp__dither__matrix__generic.html + o0 + + + + int + y + structstp__dither__matrix__generic.html + o1 + + + + int + bytes + structstp__dither__matrix__generic.html + o2 + + + + int + prescaled + structstp__dither__matrix__generic.html + o3 + + + + const void * + data + structstp__dither__matrix__generic.html + o4 + + + + + stp_dither_matrix_normal + structstp__dither__matrix__normal.html + + int + x + structstp__dither__matrix__normal.html + o0 + + + + int + y + structstp__dither__matrix__normal.html + o1 + + + + int + bytes + structstp__dither__matrix__normal.html + o2 + + + + int + prescaled + structstp__dither__matrix__normal.html + o3 + + + + const unsigned * + data + structstp__dither__matrix__normal.html + o4 + + + + + stp_dither_matrix_short + structstp__dither__matrix__short.html + + int + x + structstp__dither__matrix__short.html + o0 + + + + int + y + structstp__dither__matrix__short.html + o1 + + + + int + bytes + structstp__dither__matrix__short.html + o2 + + + + int + prescaled + structstp__dither__matrix__short.html + o3 + + + + const unsigned short * + data + structstp__dither__matrix__short.html + o4 + + + + + stp_dotsize + structstp__dotsize.html + + unsigned + bit_pattern + structstp__dotsize.html + o0 + + + + double + value + structstp__dotsize.html + o1 + + + + + stp_double_bound_t + structstp__double__bound__t.html + + double + lower + structstp__double__bound__t.html + o0 + + + + double + upper + structstp__double__bound__t.html + o1 + + + + + stp_family + structstp__family.html + + const stp_printfuncs_t * + printfuncs + structstp__family.html + o0 + + + + stp_list_t * + printer_list + structstp__family.html + o1 + + + + + stp_image + structstp__image.html + + void(* + init + structstp__image.html + o0 + )(struct stp_image *image) + + + void(* + reset + structstp__image.html + o1 + )(struct stp_image *image) + + + int(* + width + structstp__image.html + o2 + )(struct stp_image *image) + + + int(* + height + structstp__image.html + o3 + )(struct stp_image *image) + + + stp_image_status_t(* + get_row + structstp__image.html + o4 + )(struct stp_image *image, unsigned char *data, size_t byte_limit, int row) + + + const char *(* + get_appname + structstp__image.html + o5 + )(struct stp_image *image) + + + void(* + conclude + structstp__image.html + o6 + )(struct stp_image *image) + + + void * + rep + structstp__image.html + o7 + + + + + stp_int_bound_t + structstp__int__bound__t.html + + int + lower + structstp__int__bound__t.html + o0 + + + + int + upper + structstp__int__bound__t.html + o1 + + + + + stp_lineactive_t + structstp__lineactive__t.html + + int + ncolors + structstp__lineactive__t.html + o0 + + + + char * + v + structstp__lineactive__t.html + o1 + + + + + stp_linebounds_t + structstp__linebounds__t.html + + int + ncolors + structstp__linebounds__t.html + o0 + + + + int * + start_pos + structstp__linebounds__t.html + o1 + + + + int * + end_pos + structstp__linebounds__t.html + o2 + + + + + stp_linebufs_t + structstp__linebufs__t.html + + int + ncolors + structstp__linebufs__t.html + o0 + + + + unsigned char ** + v + structstp__linebufs__t.html + o1 + + + + + stp_linecount_t + structstp__linecount__t.html + + int + ncolors + structstp__linecount__t.html + o0 + + + + int * + v + structstp__linecount__t.html + o1 + + + + + stp_lineoff_t + structstp__lineoff__t.html + + int + ncolors + structstp__lineoff__t.html + o0 + + + + unsigned long * + v + structstp__lineoff__t.html + o1 + + + + + stp_module + structstp__module.html + + const char * + name + structstp__module.html + o0 + + + + const char * + version + structstp__module.html + o1 + + + + const char * + comment + structstp__module.html + o2 + + + + stp_module_class_t + class + structstp__module.html + o3 + + + + void * + handle + structstp__module.html + o4 + + + + int(* + init + structstp__module.html + o5 + )(void) + + + int(* + fini + structstp__module.html + o6 + )(void) + + + void * + syms + structstp__module.html + o7 + + + + + stp_module_version + structstp__module__version.html + + int + major + structstp__module__version.html + o0 + + + + int + minor + structstp__module__version.html + o1 + + + + + stp_mxml_attr_s + structstp__mxml__attr__s.html + + char * + name + structstp__mxml__attr__s.html + o0 + + + + char * + value + structstp__mxml__attr__s.html + o1 + + + + + stp_mxml_node_s + structstp__mxml__node__s.html + + stp_mxml_type_t + type + structstp__mxml__node__s.html + o0 + + + + stp_mxml_node_t * + next + structstp__mxml__node__s.html + o1 + + + + stp_mxml_node_t * + prev + structstp__mxml__node__s.html + o2 + + + + stp_mxml_node_t * + parent + structstp__mxml__node__s.html + o3 + + + + stp_mxml_node_t * + child + structstp__mxml__node__s.html + o4 + + + + stp_mxml_node_t * + last_child + structstp__mxml__node__s.html + o5 + + + + stp_mxml_value_t + value + structstp__mxml__node__s.html + o6 + + + + + stp_mxml_text_s + structstp__mxml__text__s.html + + int + whitespace + structstp__mxml__text__s.html + o0 + + + + char * + string + structstp__mxml__text__s.html + o1 + + + + + stp_mxml_value_s + structstp__mxml__value__s.html + + char * + name + structstp__mxml__value__s.html + o0 + + + + int + num_attrs + structstp__mxml__value__s.html + o1 + + + + stp_mxml_attr_t * + attrs + structstp__mxml__value__s.html + o2 + + + + + stp_mxml_value_u + unionstp__mxml__value__u.html + + stp_mxml_element_t + element + unionstp__mxml__value__u.html + o0 + + + + int + integer + unionstp__mxml__value__u.html + o1 + + + + char * + opaque + unionstp__mxml__value__u.html + o2 + + + + double + real + unionstp__mxml__value__u.html + o3 + + + + stp_mxml_text_t + text + unionstp__mxml__value__u.html + o4 + + + + + stp_papersize_t + structstp__papersize__t.html + + char * + name + structstp__papersize__t.html + o0 + + + + char * + text + structstp__papersize__t.html + o1 + + + + char * + comment + structstp__papersize__t.html + o2 + + + + unsigned + width + structstp__papersize__t.html + o3 + + + + unsigned + height + structstp__papersize__t.html + o4 + + + + unsigned + top + structstp__papersize__t.html + o5 + + + + unsigned + left + structstp__papersize__t.html + o6 + + + + unsigned + bottom + structstp__papersize__t.html + o7 + + + + unsigned + right + structstp__papersize__t.html + o8 + + + + stp_papersize_unit_t + paper_unit + structstp__papersize__t.html + o9 + + + + + stp_param_string_t + structstp__param__string__t.html + + const char * + name + structstp__param__string__t.html + o0 + + + + const char * + text + structstp__param__string__t.html + o1 + + + + + stp_parameter_t + structstp__parameter__t.html + + const char * + name + structstp__parameter__t.html + o0 + + + + const char * + text + structstp__parameter__t.html + o1 + + + + const char * + category + structstp__parameter__t.html + o2 + + + + const char * + help + structstp__parameter__t.html + o3 + + + + stp_parameter_type_t + p_type + structstp__parameter__t.html + o4 + + + + stp_parameter_class_t + p_class + structstp__parameter__t.html + o5 + + + + stp_parameter_level_t + p_level + structstp__parameter__t.html + o6 + + + + unsigned char + is_mandatory + structstp__parameter__t.html + o7 + + + + unsigned char + is_active + structstp__parameter__t.html + o8 + + + + unsigned char + channel + structstp__parameter__t.html + o9 + + + + unsigned char + verify_this_parameter + structstp__parameter__t.html + o10 + + + + unsigned char + read_only + structstp__parameter__t.html + o11 + + + + stp_parameter_t::@0 + bounds + structstp__parameter__t.html + o18 + + + + stp_curve_t * + curve + unionstp__parameter__t_1_1@0.html + o0 + + + + stp_double_bound_t + dbl + unionstp__parameter__t_1_1@0.html + o1 + + + + stp_int_bound_t + integer + unionstp__parameter__t_1_1@0.html + o2 + + + + stp_int_bound_t + dimension + unionstp__parameter__t_1_1@0.html + o3 + + + + stp_string_list_t * + str + unionstp__parameter__t_1_1@0.html + o4 + + + + stp_array_t * + array + unionstp__parameter__t_1_1@0.html + o5 + + + + stp_parameter_t::@1 + deflt + structstp__parameter__t.html + o26 + + + + stp_curve_t * + curve + unionstp__parameter__t_1_1@1.html + o0 + + + + double + dbl + unionstp__parameter__t_1_1@1.html + o1 + + + + int + dimension + unionstp__parameter__t_1_1@1.html + o2 + + + + int + integer + unionstp__parameter__t_1_1@1.html + o3 + + + + int + boolean + unionstp__parameter__t_1_1@1.html + o4 + + + + const char * + str + unionstp__parameter__t_1_1@1.html + o5 + + + + stp_array_t * + array + unionstp__parameter__t_1_1@1.html + o6 + + + + + stp_pass_t + structstp__pass__t.html + + int + pass + structstp__pass__t.html + o0 + + + + int + missingstartrows + structstp__pass__t.html + o1 + + + + int + logicalpassstart + structstp__pass__t.html + o2 + + + + int + physpassstart + structstp__pass__t.html + o3 + + + + int + physpassend + structstp__pass__t.html + o4 + + + + int + subpass + structstp__pass__t.html + o5 + + + + + stp_printfuncs_t + structstp__printfuncs__t.html + + stp_parameter_list_t(* + list_parameters + structstp__printfuncs__t.html + o0 + )(const stp_vars_t *v) + + + void(* + parameters + structstp__printfuncs__t.html + o1 + )(const stp_vars_t *v, const char *name, stp_parameter_t *) + + + void(* + media_size + structstp__printfuncs__t.html + o2 + )(const stp_vars_t *v, int *width, int *height) + + + void(* + imageable_area + structstp__printfuncs__t.html + o3 + )(const stp_vars_t *v, int *left, int *right, int *bottom, int *top) + + + void(* + limit + structstp__printfuncs__t.html + o4 + )(const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height) + + + int(* + print + structstp__printfuncs__t.html + o5 + )(const stp_vars_t *v, stp_image_t *image) + + + void(* + describe_resolution + structstp__printfuncs__t.html + o6 + )(const stp_vars_t *v, int *x, int *y) + + + const char *(* + describe_output + structstp__printfuncs__t.html + o7 + )(const stp_vars_t *v) + + + int(* + verify + structstp__printfuncs__t.html + o8 + )(stp_vars_t *v) + + + int(* + start_job + structstp__printfuncs__t.html + o9 + )(const stp_vars_t *v, stp_image_t *image) + + + int(* + end_job + structstp__printfuncs__t.html + o10 + )(const stp_vars_t *v, stp_image_t *image) + + + + stp_raw_t + structstp__raw__t.html + + size_t + bytes + structstp__raw__t.html + o0 + + + + const void * + data + structstp__raw__t.html + o1 + + + + + stp_shade + structstp__shade.html + + double + value + structstp__shade.html + o0 + + + + int + numsizes + structstp__shade.html + o1 + + + + const stp_dotsize_t * + dot_sizes + structstp__shade.html + o2 + + + + + stp_weave_t + structstp__weave__t.html + + int + row + structstp__weave__t.html + o0 + + + + int + pass + structstp__weave__t.html + o1 + + + + int + jet + structstp__weave__t.html + o2 + + + + int + missingstartrows + structstp__weave__t.html + o3 + + + + int + logicalpassstart + structstp__weave__t.html + o4 + + + + int + physpassstart + structstp__weave__t.html + o5 + + + + int + physpassend + structstp__weave__t.html + o6 + + + + + array + array + group__array.html + + stp_array + stp_array_t + group__array.html + ga0 + + + + stp_array_t * + stp_array_create + group__array.html + ga1 + (int x_size, int y_size) + + + void + stp_array_destroy + group__array.html + ga2 + (stp_array_t *array) + + + void + stp_array_copy + group__array.html + ga3 + (stp_array_t *dest, const stp_array_t *source) + + + stp_array_t * + stp_array_create_copy + group__array.html + ga4 + (const stp_array_t *array) + + + void + stp_array_set_size + group__array.html + ga5 + (stp_array_t *array, int x_size, int y_size) + + + void + stp_array_get_size + group__array.html + ga6 + (const stp_array_t *array, int *x_size, int *y_size) + + + void + stp_array_set_data + group__array.html + ga7 + (stp_array_t *array, const double *data) + + + void + stp_array_get_data + group__array.html + ga8 + (const stp_array_t *array, size_t *size, const double **data) + + + int + stp_array_set_point + group__array.html + ga9 + (stp_array_t *array, int x, int y, double data) + + + int + stp_array_get_point + group__array.html + ga10 + (const stp_array_t *array, int x, int y, double *data) + + + const stp_sequence_t * + stp_array_get_sequence + group__array.html + ga11 + (const stp_array_t *array) + + + + color + color + group__color.html + stp_colorfuncs_t + stp_color + + stp_color + stp_color_t + group__color.html + ga0 + + + + int + stp_color_init + group__color.html + ga1 + (stp_vars_t *v, stp_image_t *image, size_t steps) + + + int + stp_color_get_row + group__color.html + ga2 + (stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask) + + + stp_parameter_list_t + stp_color_list_parameters + group__color.html + ga3 + (const stp_vars_t *v) + + + void + stp_color_describe_parameter + group__color.html + ga4 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + int + stp_color_register + group__color.html + ga5 + (const stp_color_t *color) + + + int + stp_color_unregister + group__color.html + ga6 + (const stp_color_t *color) + + + int + stp_color_count + group__color.html + ga7 + (void) + + + const stp_color_t * + stp_get_color_by_name + group__color.html + ga8 + (const char *name) + + + const stp_color_t * + stp_get_color_by_index + group__color.html + ga9 + (int idx) + + + const stp_color_t * + stp_get_color_by_colorfuncs + group__color.html + ga10 + (stp_colorfuncs_t *colorfuncs) + + + const char * + stp_color_get_name + group__color.html + ga11 + (const stp_color_t *c) + + + const char * + stp_color_get_long_name + group__color.html + ga12 + (const stp_color_t *c) + + + + curve + curve + group__curve.html + stp_curve_point_t + + stp_curve + stp_curve_t + group__curve.html + ga0 + + + + stp_curve_type_t + ga47 + + + + STP_CURVE_TYPE_LINEAR + gga47a1 + + + + STP_CURVE_TYPE_SPLINE + gga47a2 + + + + stp_curve_wrap_mode_t + ga48 + + + + STP_CURVE_WRAP_NONE + gga48a3 + + + + STP_CURVE_WRAP_AROUND + gga48a4 + + + + stp_curve_compose_t + ga49 + + + + STP_CURVE_COMPOSE_ADD + gga49a5 + + + + STP_CURVE_COMPOSE_MULTIPLY + gga49a6 + + + + STP_CURVE_COMPOSE_EXPONENTIATE + gga49a7 + + + + stp_curve_bounds_t + ga50 + + + + STP_CURVE_BOUNDS_RESCALE + gga50a8 + + + + STP_CURVE_BOUNDS_CLIP + gga50a9 + + + + STP_CURVE_BOUNDS_ERROR + gga50a10 + + + + stp_curve_t * + stp_curve_create + group__curve.html + ga1 + (stp_curve_wrap_mode_t wrap) + + + stp_curve_t * + stp_curve_create_copy + group__curve.html + ga2 + (const stp_curve_t *curve) + + + void + stp_curve_copy + group__curve.html + ga3 + (stp_curve_t *dest, const stp_curve_t *source) + + + void + stp_curve_destroy + group__curve.html + ga4 + (stp_curve_t *curve) + + + int + stp_curve_set_bounds + group__curve.html + ga5 + (stp_curve_t *curve, double low, double high) + + + void + stp_curve_get_bounds + group__curve.html + ga6 + (const stp_curve_t *curve, double *low, double *high) + + + stp_curve_wrap_mode_t + stp_curve_get_wrap + group__curve.html + ga7 + (const stp_curve_t *curve) + + + int + stp_curve_is_piecewise + group__curve.html + ga8 + (const stp_curve_t *curve) + + + void + stp_curve_get_range + group__curve.html + ga9 + (const stp_curve_t *curve, double *low, double *high) + + + size_t + stp_curve_count_points + group__curve.html + ga10 + (const stp_curve_t *curve) + + + int + stp_curve_set_interpolation_type + group__curve.html + ga11 + (stp_curve_t *curve, stp_curve_type_t itype) + + + stp_curve_type_t + stp_curve_get_interpolation_type + group__curve.html + ga12 + (const stp_curve_t *curve) + + + int + stp_curve_set_data + group__curve.html + ga13 + (stp_curve_t *curve, size_t count, const double *data) + + + int + stp_curve_set_data_points + group__curve.html + ga14 + (stp_curve_t *curve, size_t count, const stp_curve_point_t *data) + + + int + stp_curve_set_float_data + group__curve.html + ga15 + (stp_curve_t *curve, size_t count, const float *data) + + + int + stp_curve_set_long_data + group__curve.html + ga16 + (stp_curve_t *curve, size_t count, const long *data) + + + int + stp_curve_set_ulong_data + group__curve.html + ga17 + (stp_curve_t *curve, size_t count, const unsigned long *data) + + + int + stp_curve_set_int_data + group__curve.html + ga18 + (stp_curve_t *curve, size_t count, const int *data) + + + int + stp_curve_set_uint_data + group__curve.html + ga19 + (stp_curve_t *curve, size_t count, const unsigned int *data) + + + int + stp_curve_set_short_data + group__curve.html + ga20 + (stp_curve_t *curve, size_t count, const short *data) + + + int + stp_curve_set_ushort_data + group__curve.html + ga21 + (stp_curve_t *curve, size_t count, const unsigned short *data) + + + stp_curve_t * + stp_curve_get_subrange + group__curve.html + ga22 + (const stp_curve_t *curve, size_t start, size_t count) + + + int + stp_curve_set_subrange + group__curve.html + ga23 + (stp_curve_t *curve, const stp_curve_t *range, size_t start) + + + const double * + stp_curve_get_data + group__curve.html + ga24 + (const stp_curve_t *curve, size_t *count) + + + const stp_curve_point_t * + stp_curve_get_data_points + group__curve.html + ga25 + (const stp_curve_t *curve, size_t *count) + + + const float * + stp_curve_get_float_data + group__curve.html + ga26 + (const stp_curve_t *curve, size_t *count) + + + const long * + stp_curve_get_long_data + group__curve.html + ga27 + (const stp_curve_t *curve, size_t *count) + + + const unsigned long * + stp_curve_get_ulong_data + group__curve.html + ga28 + (const stp_curve_t *curve, size_t *count) + + + const int * + stp_curve_get_int_data + group__curve.html + ga29 + (const stp_curve_t *curve, size_t *count) + + + const unsigned int * + stp_curve_get_uint_data + group__curve.html + ga30 + (const stp_curve_t *curve, size_t *count) + + + const short * + stp_curve_get_short_data + group__curve.html + ga31 + (const stp_curve_t *curve, size_t *count) + + + const unsigned short * + stp_curve_get_ushort_data + group__curve.html + ga32 + (const stp_curve_t *curve, size_t *count) + + + const stp_sequence_t * + stp_curve_get_sequence + group__curve.html + ga33 + (const stp_curve_t *curve) + + + int + stp_curve_set_gamma + group__curve.html + ga34 + (stp_curve_t *curve, double f_gamma) + + + double + stp_curve_get_gamma + group__curve.html + ga35 + (const stp_curve_t *curve) + + + int + stp_curve_set_point + group__curve.html + ga36 + (stp_curve_t *curve, size_t where, double data) + + + int + stp_curve_get_point + group__curve.html + ga37 + (const stp_curve_t *curve, size_t where, double *data) + + + int + stp_curve_interpolate_value + group__curve.html + ga38 + (const stp_curve_t *curve, double where, double *result) + + + int + stp_curve_resample + group__curve.html + ga39 + (stp_curve_t *curve, size_t points) + + + int + stp_curve_rescale + group__curve.html + ga40 + (stp_curve_t *curve, double scale, stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode) + + + int + stp_curve_write + group__curve.html + ga41 + (FILE *file, const stp_curve_t *curve) + + + char * + stp_curve_write_string + group__curve.html + ga42 + (const stp_curve_t *curve) + + + stp_curve_t * + stp_curve_create_from_stream + group__curve.html + ga43 + (FILE *fp) + + + stp_curve_t * + stp_curve_create_from_file + group__curve.html + ga44 + (const char *file) + + + stp_curve_t * + stp_curve_create_from_string + group__curve.html + ga45 + (const char *string) + + + int + stp_curve_compose + group__curve.html + ga46 + (stp_curve_t **retval, stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points) + + + + intl_internal + intl-internal + group__intl__internal.html + + #define + textdomain + group__intl__internal.html + ga0 + (String) + + + #define + gettext + group__intl__internal.html + ga1 + (String) + + + #define + dgettext + group__intl__internal.html + ga2 + (Domain, Message) + + + #define + dcgettext + group__intl__internal.html + ga3 + (Domain, Message, Type) + + + #define + bindtextdomain + group__intl__internal.html + ga4 + (Domain, Directory) + + + #define + _ + group__intl__internal.html + ga5 + (String) + + + #define + N_ + group__intl__internal.html + ga6 + (String) + + + + intl + intl + group__intl.html + + #define + textdomain + group__intl.html + ga0 + (String) + + + #define + gettext + group__intl.html + ga1 + (String) + + + #define + dgettext + group__intl.html + ga2 + (Domain, Message) + + + #define + dcgettext + group__intl.html + ga3 + (Domain, Message, Type) + + + #define + bindtextdomain + group__intl.html + ga4 + (Domain, Directory) + + + #define + _ + group__intl.html + ga5 + (String) + + + #define + N_ + group__intl.html + ga6 + (String) + + + + version + version + group__version.html + + #define + STP_MAJOR_VERSION + group__version.html + ga7 + + + + #define + STP_MINOR_VERSION + group__version.html + ga8 + + + + #define + STP_MICRO_VERSION + group__version.html + ga9 + + + + #define + STP_CURRENT_INTERFACE + group__version.html + ga10 + + + + #define + STP_BINARY_AGE + group__version.html + ga11 + + + + #define + STP_INTERFACE_AGE + group__version.html + ga12 + + + + #define + STP_CHECK_VERSION + group__version.html + ga13 + (major, minor, micro) + + + const char * + stp_check_version + group__version.html + ga6 + (unsigned int required_major, unsigned int required_minor, unsigned int required_micro) + + + const unsigned int + stp_major_version + group__version.html + ga0 + + + + const unsigned int + stp_minor_version + group__version.html + ga1 + + + + const unsigned int + stp_micro_version + group__version.html + ga2 + + + + const unsigned int + stp_current_interface + group__version.html + ga3 + + + + const unsigned int + stp_binary_age + group__version.html + ga4 + + + + const unsigned int + stp_interface_age + group__version.html + ga5 + + + + + image + image + group__image.html + stp_image + + #define + STP_CHANNEL_LIMIT + group__image.html + ga8 + + + + stp_image + stp_image_t + group__image.html + ga0 + + + + stp_image_status_t + ga9 + + + + STP_IMAGE_STATUS_OK + gga9a2 + + + + STP_IMAGE_STATUS_ABORT + gga9a3 + + + + void + stp_image_init + group__image.html + ga1 + (stp_image_t *image) + + + void + stp_image_reset + group__image.html + ga2 + (stp_image_t *image) + + + int + stp_image_width + group__image.html + ga3 + (stp_image_t *image) + + + int + stp_image_height + group__image.html + ga4 + (stp_image_t *image) + + + stp_image_status_t + stp_image_get_row + group__image.html + ga5 + (stp_image_t *image, unsigned char *data, size_t limit, int row) + + + const char * + stp_image_get_appname + group__image.html + ga6 + (stp_image_t *image) + + + void + stp_image_conclude + group__image.html + ga7 + (stp_image_t *image) + + + + list + list + group__list.html + + stp_list_item + stp_list_item_t + group__list.html + ga0 + + + + stp_list + stp_list_t + group__list.html + ga1 + + + + void(* + stp_node_freefunc + group__list.html + ga2 + )(void *) + + + void *(* + stp_node_copyfunc + group__list.html + ga3 + )(const void *) + + + const char *(* + stp_node_namefunc + group__list.html + ga4 + )(const void *) + + + int(* + stp_node_sortfunc + group__list.html + ga5 + )(const void *, const void *) + + + void + stp_list_node_free_data + group__list.html + ga6 + (void *item) + + + stp_list_t * + stp_list_create + group__list.html + ga7 + (void) + + + stp_list_t * + stp_list_copy + group__list.html + ga8 + (const stp_list_t *list) + + + int + stp_list_destroy + group__list.html + ga9 + (stp_list_t *list) + + + stp_list_item_t * + stp_list_get_start + group__list.html + ga10 + (const stp_list_t *list) + + + stp_list_item_t * + stp_list_get_end + group__list.html + ga11 + (const stp_list_t *list) + + + stp_list_item_t * + stp_list_get_item_by_index + group__list.html + ga12 + (const stp_list_t *list, int idx) + + + stp_list_item_t * + stp_list_get_item_by_name + group__list.html + ga13 + (const stp_list_t *list, const char *name) + + + stp_list_item_t * + stp_list_get_item_by_long_name + group__list.html + ga14 + (const stp_list_t *list, const char *long_name) + + + int + stp_list_get_length + group__list.html + ga15 + (const stp_list_t *list) + + + void + stp_list_set_freefunc + group__list.html + ga16 + (stp_list_t *list, stp_node_freefunc freefunc) + + + stp_node_freefunc + stp_list_get_freefunc + group__list.html + ga17 + (const stp_list_t *list) + + + void + stp_list_set_copyfunc + group__list.html + ga18 + (stp_list_t *list, stp_node_copyfunc copyfunc) + + + stp_node_copyfunc + stp_list_get_copyfunc + group__list.html + ga19 + (const stp_list_t *list) + + + void + stp_list_set_namefunc + group__list.html + ga20 + (stp_list_t *list, stp_node_namefunc namefunc) + + + stp_node_namefunc + stp_list_get_namefunc + group__list.html + ga21 + (const stp_list_t *list) + + + void + stp_list_set_long_namefunc + group__list.html + ga22 + (stp_list_t *list, stp_node_namefunc long_namefunc) + + + stp_node_namefunc + stp_list_get_long_namefunc + group__list.html + ga23 + (const stp_list_t *list) + + + void + stp_list_set_sortfunc + group__list.html + ga24 + (stp_list_t *list, stp_node_sortfunc sortfunc) + + + stp_node_sortfunc + stp_list_get_sortfunc + group__list.html + ga25 + (const stp_list_t *list) + + + int + stp_list_item_create + group__list.html + ga26 + (stp_list_t *list, stp_list_item_t *next, const void *data) + + + int + stp_list_item_destroy + group__list.html + ga27 + (stp_list_t *list, stp_list_item_t *item) + + + stp_list_item_t * + stp_list_item_prev + group__list.html + ga28 + (const stp_list_item_t *item) + + + stp_list_item_t * + stp_list_item_next + group__list.html + ga29 + (const stp_list_item_t *item) + + + void * + stp_list_item_get_data + group__list.html + ga30 + (const stp_list_item_t *item) + + + int + stp_list_item_set_data + group__list.html + ga31 + (stp_list_item_t *item, void *data) + + + + papersize + papersize + group__papersize.html + stp_papersize_t + + stp_papersize_unit_t + ga5 + + + + PAPERSIZE_ENGLISH_STANDARD + gga5a0 + + + + PAPERSIZE_METRIC_STANDARD + gga5a1 + + + + PAPERSIZE_ENGLISH_EXTENDED + gga5a2 + + + + PAPERSIZE_METRIC_EXTENDED + gga5a3 + + + + int + stp_known_papersizes + group__papersize.html + ga0 + (void) + + + const stp_papersize_t * + stp_get_papersize_by_name + group__papersize.html + ga1 + (const char *name) + + + const stp_papersize_t * + stp_get_papersize_by_size + group__papersize.html + ga2 + (int length, int width) + + + const stp_papersize_t * + stp_get_papersize_by_index + group__papersize.html + ga3 + (int idx) + + + void + stp_default_media_size + group__papersize.html + ga4 + (const stp_vars_t *v, int *width, int *height) + + + + printer + printer + group__printer.html + stp_printfuncs_t + stp_family + + stp_printer + stp_printer_t + group__printer.html + ga0 + + + + stp_family + stp_family_t + group__printer.html + ga1 + + + + int + stp_printer_model_count + group__printer.html + ga2 + (void) + + + const stp_printer_t * + stp_get_printer_by_index + group__printer.html + ga3 + (int idx) + + + const stp_printer_t * + stp_get_printer_by_long_name + group__printer.html + ga4 + (const char *long_name) + + + const stp_printer_t * + stp_get_printer_by_driver + group__printer.html + ga5 + (const char *driver) + + + const stp_printer_t * + stp_get_printer + group__printer.html + ga6 + (const stp_vars_t *v) + + + int + stp_get_printer_index_by_driver + group__printer.html + ga7 + (const char *driver) + + + const char * + stp_printer_get_long_name + group__printer.html + ga8 + (const stp_printer_t *p) + + + const char * + stp_printer_get_driver + group__printer.html + ga9 + (const stp_printer_t *p) + + + const char * + stp_printer_get_family + group__printer.html + ga10 + (const stp_printer_t *p) + + + const char * + stp_printer_get_manufacturer + group__printer.html + ga11 + (const stp_printer_t *p) + + + int + stp_printer_get_model + group__printer.html + ga12 + (const stp_printer_t *p) + + + const stp_vars_t * + stp_printer_get_defaults + group__printer.html + ga13 + (const stp_printer_t *p) + + + void + stp_set_printer_defaults + group__printer.html + ga14 + (stp_vars_t *v, const stp_printer_t *p) + + + int + stp_print + group__printer.html + ga15 + (const stp_vars_t *v, stp_image_t *image) + + + int + stp_start_job + group__printer.html + ga16 + (const stp_vars_t *v, stp_image_t *image) + + + int + stp_end_job + group__printer.html + ga17 + (const stp_vars_t *v, stp_image_t *image) + + + int + stp_get_model_id + group__printer.html + ga18 + (const stp_vars_t *v) + + + int + stp_verify_printer_params + group__printer.html + ga19 + (stp_vars_t *v) + + + int + stp_family_register + group__printer.html + ga20 + (stp_list_t *family) + + + int + stp_family_unregister + group__printer.html + ga21 + (stp_list_t *family) + + + void + stp_initialize_printer_defaults + group__printer.html + ga22 + (void) + + + stp_parameter_list_t + stp_printer_list_parameters + group__printer.html + ga23 + (const stp_vars_t *v) + + + void + stp_printer_describe_parameter + group__printer.html + ga24 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + const char * + stp_describe_output + group__printer.html + ga25 + (const stp_vars_t *v) + + + + sequence + sequence + group__sequence.html + + stp_sequence + stp_sequence_t + group__sequence.html + ga0 + + + + stp_sequence_t * + stp_sequence_create + group__sequence.html + ga1 + (void) + + + void + stp_sequence_destroy + group__sequence.html + ga2 + (stp_sequence_t *sequence) + + + void + stp_sequence_copy + group__sequence.html + ga3 + (stp_sequence_t *dest, const stp_sequence_t *source) + + + stp_sequence_t * + stp_sequence_create_copy + group__sequence.html + ga4 + (const stp_sequence_t *sequence) + + + int + stp_sequence_set_bounds + group__sequence.html + ga5 + (stp_sequence_t *sequence, double low, double high) + + + void + stp_sequence_get_bounds + group__sequence.html + ga6 + (const stp_sequence_t *sequence, double *low, double *high) + + + void + stp_sequence_get_range + group__sequence.html + ga7 + (const stp_sequence_t *sequence, double *low, double *high) + + + int + stp_sequence_set_size + group__sequence.html + ga8 + (stp_sequence_t *sequence, size_t size) + + + size_t + stp_sequence_get_size + group__sequence.html + ga9 + (const stp_sequence_t *sequence) + + + int + stp_sequence_set_data + group__sequence.html + ga10 + (stp_sequence_t *sequence, size_t count, const double *data) + + + int + stp_sequence_set_subrange + group__sequence.html + ga11 + (stp_sequence_t *sequence, size_t where, size_t size, const double *data) + + + void + stp_sequence_get_data + group__sequence.html + ga12 + (const stp_sequence_t *sequence, size_t *size, const double **data) + + + int + stp_sequence_set_point + group__sequence.html + ga13 + (stp_sequence_t *sequence, size_t where, double data) + + + int + stp_sequence_get_point + group__sequence.html + ga14 + (const stp_sequence_t *sequence, size_t where, double *data) + + + int + stp_sequence_set_float_data + group__sequence.html + ga15 + (stp_sequence_t *sequence, size_t count, const float *data) + + + int + stp_sequence_set_long_data + group__sequence.html + ga16 + (stp_sequence_t *sequence, size_t count, const long *data) + + + int + stp_sequence_set_ulong_data + group__sequence.html + ga17 + (stp_sequence_t *sequence, size_t count, const unsigned long *data) + + + int + stp_sequence_set_int_data + group__sequence.html + ga18 + (stp_sequence_t *sequence, size_t count, const int *data) + + + int + stp_sequence_set_uint_data + group__sequence.html + ga19 + (stp_sequence_t *sequence, size_t count, const unsigned int *data) + + + int + stp_sequence_set_short_data + group__sequence.html + ga20 + (stp_sequence_t *sequence, size_t count, const short *data) + + + int + stp_sequence_set_ushort_data + group__sequence.html + ga21 + (stp_sequence_t *sequence, size_t count, const unsigned short *data) + + + const float * + stp_sequence_get_float_data + group__sequence.html + ga22 + (const stp_sequence_t *sequence, size_t *count) + + + const long * + stp_sequence_get_long_data + group__sequence.html + ga23 + (const stp_sequence_t *sequence, size_t *count) + + + const unsigned long * + stp_sequence_get_ulong_data + group__sequence.html + ga24 + (const stp_sequence_t *sequence, size_t *count) + + + const int * + stp_sequence_get_int_data + group__sequence.html + ga25 + (const stp_sequence_t *sequence, size_t *count) + + + const unsigned int * + stp_sequence_get_uint_data + group__sequence.html + ga26 + (const stp_sequence_t *sequence, size_t *count) + + + const short * + stp_sequence_get_short_data + group__sequence.html + ga27 + (const stp_sequence_t *sequence, size_t *count) + + + const unsigned short * + stp_sequence_get_ushort_data + group__sequence.html + ga28 + (const stp_sequence_t *sequence, size_t *count) + + + + util + util + group__util.html + + #define + STP_DBG_LUT + group__util.html + ga33 + + + + #define + STP_DBG_COLORFUNC + group__util.html + ga34 + + + + #define + STP_DBG_INK + group__util.html + ga35 + + + + #define + STP_DBG_PS + group__util.html + ga36 + + + + #define + STP_DBG_PCL + group__util.html + ga37 + + + + #define + STP_DBG_ESCP2 + group__util.html + ga38 + + + + #define + STP_DBG_CANON + group__util.html + ga39 + + + + #define + STP_DBG_LEXMARK + group__util.html + ga40 + + + + #define + STP_DBG_WEAVE_PARAMS + group__util.html + ga41 + + + + #define + STP_DBG_ROWS + group__util.html + ga42 + + + + #define + STP_DBG_MARK_FILE + group__util.html + ga43 + + + + #define + STP_DBG_LIST + group__util.html + ga44 + + + + #define + STP_DBG_MODULE + group__util.html + ga45 + + + + #define + STP_DBG_PATH + group__util.html + ga46 + + + + #define + STP_DBG_PAPER + group__util.html + ga47 + + + + #define + STP_DBG_PRINTERS + group__util.html + ga48 + + + + #define + STP_DBG_XML + group__util.html + ga49 + + + + #define + STP_DBG_VARS + group__util.html + ga50 + + + + #define + STP_DBG_OLYMPUS + group__util.html + ga51 + + + + #define + STP_DBG_CURVE + group__util.html + ga52 + + + + #define + STP_DBG_CURVE_ERRORS + group__util.html + ga53 + + + + #define + STP_SAFE_FREE + group__util.html + ga54 + (x) + + + int + stp_init + group__util.html + ga0 + (void) + + + const char * + stp_set_output_codeset + group__util.html + ga1 + (const char *codeset) + + + stp_curve_t * + stp_read_and_compose_curves + group__util.html + ga2 + (const char *s1, const char *s2, stp_curve_compose_t comp, size_t piecewise_point_count) + + + void + stp_abort + group__util.html + ga3 + (void) + + + void + stp_prune_inactive_options + group__util.html + ga4 + (stp_vars_t *v) + + + void + stp_zprintf + group__util.html + ga5 + (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__ + + + void void + stp_zfwrite + group__util.html + ga6 + (const char *buf, size_t bytes, size_t nitems, const stp_vars_t *v) + + + void + stp_putc + group__util.html + ga7 + (int ch, const stp_vars_t *v) + + + void + stp_put16_le + group__util.html + ga8 + (unsigned short sh, const stp_vars_t *v) + + + void + stp_put16_be + group__util.html + ga9 + (unsigned short sh, const stp_vars_t *v) + + + void + stp_put32_le + group__util.html + ga10 + (unsigned int sh, const stp_vars_t *v) + + + void + stp_put32_be + group__util.html + ga11 + (unsigned int sh, const stp_vars_t *v) + + + void + stp_puts + group__util.html + ga12 + (const char *s, const stp_vars_t *v) + + + void + stp_send_command + group__util.html + ga13 + (const stp_vars_t *v, const char *command, const char *format,...) + + + void + stp_erputc + group__util.html + ga14 + (int ch) + + + void + stp_eprintf + group__util.html + ga15 + (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__ + + + void void + stp_erprintf + group__util.html + ga16 + (const char *format,...) __attribute__((format(__printf__ + + + void void void + stp_asprintf + group__util.html + ga17 + (char **strp, const char *format,...) __attribute__((format(__printf__ + + + void void void void + stp_catprintf + group__util.html + ga18 + (char **strp, const char *format,...) __attribute__((format(__printf__ + + + unsigned long + stp_get_debug_level + group__util.html + ga19 + (void) + + + void + stp_dprintf + group__util.html + ga20 + (unsigned long level, const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__ + + + void void + stp_deprintf + group__util.html + ga21 + (unsigned long level, const char *format,...) __attribute__((format(__printf__ + + + void void void + stp_init_debug_messages + group__util.html + ga22 + (stp_vars_t *v) + + + void + stp_flush_debug_messages + group__util.html + ga23 + (stp_vars_t *v) + + + void * + stp_malloc + group__util.html + ga24 + (size_t) + + + void * + stp_zalloc + group__util.html + ga25 + (size_t) + + + void * + stp_realloc + group__util.html + ga26 + (void *ptr, size_t) + + + void + stp_free + group__util.html + ga27 + (void *ptr) + + + size_t + stp_strlen + group__util.html + ga28 + (const char *s) + + + char * + stp_strndup + group__util.html + ga29 + (const char *s, int n) + + + char * + stp_strdup + group__util.html + ga30 + (const char *s) + + + const char * + stp_get_version + group__util.html + ga31 + (void) + + + const char * + stp_get_release_version + group__util.html + ga32 + (void) + + + + vars + vars + group__vars.html + stp_raw_t + stp_double_bound_t + stp_int_bound_t + stp_parameter_t + + stp_vars + stp_vars_t + group__vars.html + ga0 + + + + void * + stp_parameter_list_t + group__vars.html + ga1 + + + + const void * + stp_const_parameter_list_t + group__vars.html + ga2 + + + + void(* + stp_outfunc_t + group__vars.html + ga3 + )(void *data, const char *buffer, size_t bytes) + + + void *(* + stp_copy_data_func_t + group__vars.html + ga4 + )(void *) + + + void(* + stp_free_data_func_t + group__vars.html + ga5 + )(void *) + + + stp_compdata + compdata_t + group__vars.html + ga6 + + + + stp_parameter_type_t + ga132 + + + + STP_PARAMETER_TYPE_STRING_LIST + gga132a7 + + + + STP_PARAMETER_TYPE_INT + gga132a8 + + + + STP_PARAMETER_TYPE_BOOLEAN + gga132a9 + + + + STP_PARAMETER_TYPE_DOUBLE + gga132a10 + + + + STP_PARAMETER_TYPE_CURVE + gga132a11 + + + + STP_PARAMETER_TYPE_FILE + gga132a12 + + + + STP_PARAMETER_TYPE_RAW + gga132a13 + + + + STP_PARAMETER_TYPE_ARRAY + gga132a14 + + + + STP_PARAMETER_TYPE_DIMENSION + gga132a15 + + + + STP_PARAMETER_TYPE_INVALID + gga132a16 + + + + stp_parameter_class_t + ga133 + + + + STP_PARAMETER_CLASS_FEATURE + gga133a17 + + + + STP_PARAMETER_CLASS_OUTPUT + gga133a18 + + + + STP_PARAMETER_CLASS_CORE + gga133a19 + + + + STP_PARAMETER_CLASS_INVALID + gga133a20 + + + + stp_parameter_level_t + ga134 + + + + STP_PARAMETER_LEVEL_BASIC + gga134a21 + + + + STP_PARAMETER_LEVEL_ADVANCED + gga134a22 + + + + STP_PARAMETER_LEVEL_ADVANCED1 + gga134a23 + + + + STP_PARAMETER_LEVEL_ADVANCED2 + gga134a24 + + + + STP_PARAMETER_LEVEL_ADVANCED3 + gga134a25 + + + + STP_PARAMETER_LEVEL_ADVANCED4 + gga134a26 + + + + STP_PARAMETER_LEVEL_INTERNAL + gga134a27 + + + + STP_PARAMETER_LEVEL_EXTERNAL + gga134a28 + + + + STP_PARAMETER_LEVEL_INVALID + gga134a29 + + + + stp_parameter_activity_t + ga135 + + + + STP_PARAMETER_INACTIVE + gga135a30 + + + + STP_PARAMETER_DEFAULTED + gga135a31 + + + + STP_PARAMETER_ACTIVE + gga135a32 + + + + stp_parameter_verify_t + ga136 + + + + PARAMETER_BAD + gga136a33 + + + + PARAMETER_OK + gga136a34 + + + + PARAMETER_INACTIVE + gga136a35 + + + + stp_vars_t * + stp_vars_create + group__vars.html + ga7 + (void) + + + void + stp_vars_copy + group__vars.html + ga8 + (stp_vars_t *dest, const stp_vars_t *source) + + + stp_vars_t * + stp_vars_create_copy + group__vars.html + ga9 + (const stp_vars_t *source) + + + void + stp_vars_destroy + group__vars.html + ga10 + (stp_vars_t *v) + + + void + stp_set_driver + group__vars.html + ga11 + (stp_vars_t *v, const char *val) + + + void + stp_set_driver_n + group__vars.html + ga12 + (stp_vars_t *v, const char *val, int bytes) + + + const char * + stp_get_driver + group__vars.html + ga13 + (const stp_vars_t *v) + + + void + stp_set_color_conversion + group__vars.html + ga14 + (stp_vars_t *v, const char *val) + + + void + stp_set_color_conversion_n + group__vars.html + ga15 + (stp_vars_t *v, const char *val, int bytes) + + + const char * + stp_get_color_conversion + group__vars.html + ga16 + (const stp_vars_t *v) + + + void + stp_set_left + group__vars.html + ga17 + (stp_vars_t *v, int val) + + + int + stp_get_left + group__vars.html + ga18 + (const stp_vars_t *v) + + + void + stp_set_top + group__vars.html + ga19 + (stp_vars_t *v, int val) + + + int + stp_get_top + group__vars.html + ga20 + (const stp_vars_t *v) + + + void + stp_set_width + group__vars.html + ga21 + (stp_vars_t *v, int val) + + + int + stp_get_width + group__vars.html + ga22 + (const stp_vars_t *v) + + + void + stp_set_height + group__vars.html + ga23 + (stp_vars_t *v, int val) + + + int + stp_get_height + group__vars.html + ga24 + (const stp_vars_t *v) + + + void + stp_set_page_width + group__vars.html + ga25 + (stp_vars_t *v, int val) + + + int + stp_get_page_width + group__vars.html + ga26 + (const stp_vars_t *v) + + + void + stp_set_page_height + group__vars.html + ga27 + (stp_vars_t *v, int val) + + + int + stp_get_page_height + group__vars.html + ga28 + (const stp_vars_t *v) + + + void + stp_set_outfunc + group__vars.html + ga29 + (stp_vars_t *v, stp_outfunc_t val) + + + stp_outfunc_t + stp_get_outfunc + group__vars.html + ga30 + (const stp_vars_t *v) + + + void + stp_set_errfunc + group__vars.html + ga31 + (stp_vars_t *v, stp_outfunc_t val) + + + stp_outfunc_t + stp_get_errfunc + group__vars.html + ga32 + (const stp_vars_t *v) + + + void + stp_set_outdata + group__vars.html + ga33 + (stp_vars_t *v, void *val) + + + void * + stp_get_outdata + group__vars.html + ga34 + (const stp_vars_t *v) + + + void + stp_set_errdata + group__vars.html + ga35 + (stp_vars_t *v, void *val) + + + void * + stp_get_errdata + group__vars.html + ga36 + (const stp_vars_t *v) + + + void + stp_merge_printvars + group__vars.html + ga37 + (stp_vars_t *user, const stp_vars_t *print) + + + stp_parameter_list_t + stp_get_parameter_list + group__vars.html + ga38 + (const stp_vars_t *v) + + + size_t + stp_parameter_list_count + group__vars.html + ga39 + (stp_const_parameter_list_t list) + + + const stp_parameter_t * + stp_parameter_find + group__vars.html + ga40 + (stp_const_parameter_list_t list, const char *name) + + + const stp_parameter_t * + stp_parameter_list_param + group__vars.html + ga41 + (stp_const_parameter_list_t list, size_t item) + + + void + stp_parameter_list_destroy + group__vars.html + ga42 + (stp_parameter_list_t list) + + + stp_parameter_list_t + stp_parameter_list_create + group__vars.html + ga43 + (void) + + + void + stp_parameter_list_add_param + group__vars.html + ga44 + (stp_parameter_list_t list, const stp_parameter_t *item) + + + stp_parameter_list_t + stp_parameter_list_copy + group__vars.html + ga45 + (stp_const_parameter_list_t list) + + + void + stp_parameter_list_append + group__vars.html + ga46 + (stp_parameter_list_t list, stp_const_parameter_list_t append) + + + void + stp_describe_parameter + group__vars.html + ga47 + (const stp_vars_t *v, const char *name, stp_parameter_t *description) + + + void + stp_parameter_description_destroy + group__vars.html + ga48 + (stp_parameter_t *description) + + + const stp_parameter_t * + stp_parameter_find_in_settings + group__vars.html + ga49 + (const stp_vars_t *v, const char *name) + + + void + stp_set_string_parameter + group__vars.html + ga50 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_string_parameter_n + group__vars.html + ga51 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_file_parameter + group__vars.html + ga52 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_file_parameter_n + group__vars.html + ga53 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_float_parameter + group__vars.html + ga54 + (stp_vars_t *v, const char *parameter, double value) + + + void + stp_set_int_parameter + group__vars.html + ga55 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_dimension_parameter + group__vars.html + ga56 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_boolean_parameter + group__vars.html + ga57 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_curve_parameter + group__vars.html + ga58 + (stp_vars_t *v, const char *parameter, const stp_curve_t *value) + + + void + stp_set_array_parameter + group__vars.html + ga59 + (stp_vars_t *v, const char *parameter, const stp_array_t *value) + + + void + stp_set_raw_parameter + group__vars.html + ga60 + (stp_vars_t *v, const char *parameter, const void *value, size_t bytes) + + + void + stp_scale_float_parameter + group__vars.html + ga61 + (stp_vars_t *v, const char *parameter, double scale) + + + void + stp_set_default_string_parameter + group__vars.html + ga62 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_default_string_parameter_n + group__vars.html + ga63 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_default_file_parameter + group__vars.html + ga64 + (stp_vars_t *v, const char *parameter, const char *value) + + + void + stp_set_default_file_parameter_n + group__vars.html + ga65 + (stp_vars_t *v, const char *parameter, const char *value, size_t bytes) + + + void + stp_set_default_float_parameter + group__vars.html + ga66 + (stp_vars_t *v, const char *parameter, double value) + + + void + stp_set_default_int_parameter + group__vars.html + ga67 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_default_dimension_parameter + group__vars.html + ga68 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_default_boolean_parameter + group__vars.html + ga69 + (stp_vars_t *v, const char *parameter, int value) + + + void + stp_set_default_curve_parameter + group__vars.html + ga70 + (stp_vars_t *v, const char *parameter, const stp_curve_t *value) + + + void + stp_set_default_array_parameter + group__vars.html + ga71 + (stp_vars_t *v, const char *parameter, const stp_array_t *value) + + + void + stp_set_default_raw_parameter + group__vars.html + ga72 + (stp_vars_t *v, const char *parameter, const void *value, size_t bytes) + + + const char * + stp_get_string_parameter + group__vars.html + ga73 + (const stp_vars_t *v, const char *parameter) + + + const char * + stp_get_file_parameter + group__vars.html + ga74 + (const stp_vars_t *v, const char *parameter) + + + double + stp_get_float_parameter + group__vars.html + ga75 + (const stp_vars_t *v, const char *parameter) + + + int + stp_get_int_parameter + group__vars.html + ga76 + (const stp_vars_t *v, const char *parameter) + + + int + stp_get_dimension_parameter + group__vars.html + ga77 + (const stp_vars_t *v, const char *parameter) + + + int + stp_get_boolean_parameter + group__vars.html + ga78 + (const stp_vars_t *v, const char *parameter) + + + const stp_curve_t * + stp_get_curve_parameter + group__vars.html + ga79 + (const stp_vars_t *v, const char *parameter) + + + const stp_array_t * + stp_get_array_parameter + group__vars.html + ga80 + (const stp_vars_t *v, const char *parameter) + + + const stp_raw_t * + stp_get_raw_parameter + group__vars.html + ga81 + (const stp_vars_t *v, const char *parameter) + + + void + stp_clear_string_parameter + group__vars.html + ga82 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_file_parameter + group__vars.html + ga83 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_float_parameter + group__vars.html + ga84 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_int_parameter + group__vars.html + ga85 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_dimension_parameter + group__vars.html + ga86 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_boolean_parameter + group__vars.html + ga87 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_curve_parameter + group__vars.html + ga88 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_array_parameter + group__vars.html + ga89 + (stp_vars_t *v, const char *parameter) + + + void + stp_clear_raw_parameter + group__vars.html + ga90 + (stp_vars_t *v, const char *parameter) + + + void + stp_set_string_parameter_active + group__vars.html + ga91 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_file_parameter_active + group__vars.html + ga92 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_float_parameter_active + group__vars.html + ga93 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_int_parameter_active + group__vars.html + ga94 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_dimension_parameter_active + group__vars.html + ga95 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_boolean_parameter_active + group__vars.html + ga96 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_curve_parameter_active + group__vars.html + ga97 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_array_parameter_active + group__vars.html + ga98 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + void + stp_set_raw_parameter_active + group__vars.html + ga99 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_string_parameter + group__vars.html + ga100 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_file_parameter + group__vars.html + ga101 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_float_parameter + group__vars.html + ga102 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_int_parameter + group__vars.html + ga103 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_dimension_parameter + group__vars.html + ga104 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_boolean_parameter + group__vars.html + ga105 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_curve_parameter + group__vars.html + ga106 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_array_parameter + group__vars.html + ga107 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + int + stp_check_raw_parameter + group__vars.html + ga108 + (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active) + + + stp_parameter_activity_t + stp_get_string_parameter_active + group__vars.html + ga109 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_file_parameter_active + group__vars.html + ga110 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_float_parameter_active + group__vars.html + ga111 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_int_parameter_active + group__vars.html + ga112 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_dimension_parameter_active + group__vars.html + ga113 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_boolean_parameter_active + group__vars.html + ga114 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_curve_parameter_active + group__vars.html + ga115 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_array_parameter_active + group__vars.html + ga116 + (const stp_vars_t *v, const char *parameter) + + + stp_parameter_activity_t + stp_get_raw_parameter_active + group__vars.html + ga117 + (const stp_vars_t *v, const char *parameter) + + + void + stp_get_media_size + group__vars.html + ga118 + (const stp_vars_t *v, int *width, int *height) + + + void + stp_get_imageable_area + group__vars.html + ga119 + (const stp_vars_t *v, int *left, int *right, int *bottom, int *top) + + + void + stp_get_size_limit + group__vars.html + ga120 + (const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height) + + + void + stp_describe_resolution + group__vars.html + ga121 + (const stp_vars_t *v, int *x, int *y) + + + int + stp_verify + group__vars.html + ga122 + (stp_vars_t *v) + + + const stp_vars_t * + stp_default_settings + group__vars.html + ga123 + (void) + + + void + stp_allocate_component_data + group__vars.html + ga124 + (stp_vars_t *v, const char *name, stp_copy_data_func_t copyfunc, stp_free_data_func_t freefunc, void *data) + + + void + stp_destroy_component_data + group__vars.html + ga125 + (stp_vars_t *v, const char *name) + + + void * + stp_get_component_data + group__vars.html + ga126 + (const stp_vars_t *v, const char *name) + + + stp_parameter_verify_t + stp_verify_parameter + group__vars.html + ga127 + (const stp_vars_t *v, const char *parameter, int quiet) + + + int + stp_get_verified + group__vars.html + ga128 + (const stp_vars_t *v) + + + void + stp_set_verified + group__vars.html + ga129 + (stp_vars_t *v, int value) + + + void + stp_copy_options + group__vars.html + ga130 + (stp_vars_t *vd, const stp_vars_t *vs) + + + void + stp_fill_parameter_settings + group__vars.html + ga131 + (stp_parameter_t *desc, const stp_parameter_t *param) + + + + include/gutenprint/ + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprint/ + dir_000001.html + array.h + bit-ops.h + channel.h + color.h + curve-cache.h + curve.h + dither.h + gutenprint-intl-internal.h + gutenprint-intl.h + gutenprint-module.h + gutenprint-version.h + gutenprint.h + image.h + list.h + module.h + mxml.h + paper.h + path.h + printers.h + sequence.h + string-list.h + util.h + vars.h + weave.h + xml.h + + + include/ + /home/rleigh/gutenprint-5.0.0-rc1/include/ + dir_000000.html +

    include/gutenprint/ + + diff --git a/doc/gutenprint/html/annotated.html b/doc/gutenprint/html/annotated.html new file mode 100644 index 0000000..c53689d --- /dev/null +++ b/doc/gutenprint/html/annotated.html @@ -0,0 +1,47 @@ + + +libgutenprint API Reference: Data Structures + + + + +

    libgutenprint API Reference Data Structures

    Here are the data structures with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dither_matrix_impl
    stp_cached_curve_t
    stp_color
    stp_colorfuncs_t
    stp_curve_point_tPoint (x,y) for piecewise curve
    stp_dither_matrix_generic
    stp_dither_matrix_normal
    stp_dither_matrix_short
    stp_dotsize
    stp_double_bound_tDouble_bound (range) parameter
    stp_family
    stp_imageThe image type is an abstract data type for interfacing with the image creation program
    stp_int_bound_tInt_bound (range) parameter
    stp_lineactive_t
    stp_linebounds_t
    stp_linebufs_t
    stp_linecount_t
    stp_lineoff_t
    stp_module
    stp_module_version
    stp_mxml_attr_s
    stp_mxml_node_s
    stp_mxml_text_s
    stp_mxml_value_s
    stp_mxml_value_u
    stp_papersize_tThe papersize data type
    stp_param_string_tString parameter
    stp_parameter_tParameter description
    stp_pass_t
    stp_printfuncs_t
    stp_raw_tRaw parameter
    stp_shade
    stp_weave_t
    +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/array_8h.html b/doc/gutenprint/html/array_8h.html new file mode 100644 index 0000000..dcfacd7 --- /dev/null +++ b/doc/gutenprint/html/array_8h.html @@ -0,0 +1,61 @@ + + +libgutenprint API Reference: include/gutenprint/array.h File Reference + + + + + +

    array.h File Reference

    Array functions. More... +

    +#include <gutenprint/sequence.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef stp_array stp_array_t
     The array opaque data type.

    Functions

    stp_array_tstp_array_create (int x_size, int y_size)
     Create a new array.
    void stp_array_destroy (stp_array_t *array)
     Destroy an array.
    void stp_array_copy (stp_array_t *dest, const stp_array_t *source)
     Copy an array.
    stp_array_tstp_array_create_copy (const stp_array_t *array)
     Copy and allocate an array.
    void stp_array_set_size (stp_array_t *array, int x_size, int y_size)
     Resize an array.
    void stp_array_get_size (const stp_array_t *array, int *x_size, int *y_size)
     Get the size of an array.
    void stp_array_set_data (stp_array_t *array, const double *data)
     Set the data in an array.
    void stp_array_get_data (const stp_array_t *array, size_t *size, const double **data)
     Get the data in an array.
    int stp_array_set_point (stp_array_t *array, int x, int y, double data)
     Set the data at a single point in the array.
    int stp_array_get_point (const stp_array_t *array, int x, int y, double *data)
     Get the data at a single point in the array.
    const stp_sequence_tstp_array_get_sequence (const stp_array_t *array)
     Get the underlying stp_sequence_t.
    +


    Detailed Description

    +Array functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/bit-ops_8h.html b/doc/gutenprint/html/bit-ops_8h.html new file mode 100644 index 0000000..379f26d --- /dev/null +++ b/doc/gutenprint/html/bit-ops_8h.html @@ -0,0 +1,555 @@ + + +libgutenprint API Reference: include/gutenprint/bit-ops.h File Reference + + + + + +

    bit-ops.h File Reference

    Bit operations. More... +

    + + + + + + + + + + + + + + + + + +

    Functions

    void stp_fold (const unsigned char *line, int single_height, unsigned char *outbuf)
    void stp_split_2 (int height, int bits, const unsigned char *in, unsigned char *outhi, unsigned char *outlo)
    void stp_split_4 (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3)
    void stp_unpack_2 (int height, int bits, const unsigned char *in, unsigned char *outlo, unsigned char *outhi)
    void stp_unpack_4 (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3)
    void stp_unpack_8 (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3, unsigned char *out4, unsigned char *out5, unsigned char *out6, unsigned char *out7)
    void stp_unpack_16 (int height, int bits, const unsigned char *in, unsigned char *out0, unsigned char *out1, unsigned char *out2, unsigned char *out3, unsigned char *out4, unsigned char *out5, unsigned char *out6, unsigned char *out7, unsigned char *out8, unsigned char *out9, unsigned char *out10, unsigned char *out11, unsigned char *out12, unsigned char *out13, unsigned char *out14, unsigned char *out15)
    +


    Detailed Description

    +Bit operations. +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_fold const unsigned char *  line,
    int  single_height,
    unsigned char *  outbuf
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_split_2 int  height,
    int  bits,
    const unsigned char *  in,
    unsigned char *  outhi,
    unsigned char *  outlo
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_split_4 int  height,
    int  bits,
    const unsigned char *  in,
    unsigned char *  out0,
    unsigned char *  out1,
    unsigned char *  out2,
    unsigned char *  out3
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_unpack_16 int  height,
    int  bits,
    const unsigned char *  in,
    unsigned char *  out0,
    unsigned char *  out1,
    unsigned char *  out2,
    unsigned char *  out3,
    unsigned char *  out4,
    unsigned char *  out5,
    unsigned char *  out6,
    unsigned char *  out7,
    unsigned char *  out8,
    unsigned char *  out9,
    unsigned char *  out10,
    unsigned char *  out11,
    unsigned char *  out12,
    unsigned char *  out13,
    unsigned char *  out14,
    unsigned char *  out15
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_unpack_2 int  height,
    int  bits,
    const unsigned char *  in,
    unsigned char *  outlo,
    unsigned char *  outhi
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_unpack_4 int  height,
    int  bits,
    const unsigned char *  in,
    unsigned char *  out0,
    unsigned char *  out1,
    unsigned char *  out2,
    unsigned char *  out3
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_unpack_8 int  height,
    int  bits,
    const unsigned char *  in,
    unsigned char *  out0,
    unsigned char *  out1,
    unsigned char *  out2,
    unsigned char *  out3,
    unsigned char *  out4,
    unsigned char *  out5,
    unsigned char *  out6,
    unsigned char *  out7
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/channel_8h.html b/doc/gutenprint/html/channel_8h.html new file mode 100644 index 0000000..18ef67d --- /dev/null +++ b/doc/gutenprint/html/channel_8h.html @@ -0,0 +1,885 @@ + + +libgutenprint API Reference: include/gutenprint/channel.h File Reference + + + + + +

    channel.h File Reference

    Channel functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Functions

    void stp_channel_reset (stp_vars_t *v)
    void stp_channel_reset_channel (stp_vars_t *v, int channel)
    void stp_channel_add (stp_vars_t *v, unsigned channel, unsigned subchannel, double value)
    double stp_channel_get_value (stp_vars_t *v, unsigned channel, unsigned subchannel)
    void stp_channel_set_density_adjustment (stp_vars_t *v, int color, int subchannel, double adjustment)
    double stp_channel_get_density_adjustment (stp_vars_t *v, int color, int subchannel)
    void stp_channel_set_ink_limit (stp_vars_t *v, double limit)
    double stp_channel_get_ink_limit (stp_vars_t *v)
    void stp_channel_set_cutoff_adjustment (stp_vars_t *v, int color, int subchannel, double adjustment)
    double stp_channel_get_cutoff_adjustment (stp_vars_t *v, int color, int subchannel)
    void stp_channel_set_black_channel (stp_vars_t *v, int channel)
    int stp_channel_get_black_channel (stp_vars_t *v)
    void stp_channel_set_gloss_channel (stp_vars_t *v, int channel)
    int stp_channel_get_gloss_channel (stp_vars_t *v)
    void stp_channel_set_gloss_limit (stp_vars_t *v, double limit)
    double stp_channel_get_gloss_limit (stp_vars_t *v)
    void stp_channel_set_curve (stp_vars_t *v, int channel, const stp_curve_t *curve)
    const stp_curve_tstp_channel_get_curve (stp_vars_t *v, int channel)
    void stp_channel_initialize (stp_vars_t *v, stp_image_t *image, int input_channel_count)
    void stp_channel_convert (const stp_vars_t *v, unsigned *zero_mask)
    unsigned short * stp_channel_get_input (const stp_vars_t *v)
    unsigned short * stp_channel_get_output (const stp_vars_t *v)
    +


    Detailed Description

    +Channel functions. +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_channel_add stp_vars_t v,
    unsigned  channel,
    unsigned  subchannel,
    double  value
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_channel_convert const stp_vars_t v,
    unsigned *  zero_mask
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_channel_get_black_channel stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_curve_t* stp_channel_get_curve stp_vars_t v,
    int  channel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    double stp_channel_get_cutoff_adjustment stp_vars_t v,
    int  color,
    int  subchannel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    double stp_channel_get_density_adjustment stp_vars_t v,
    int  color,
    int  subchannel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_channel_get_gloss_channel stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    double stp_channel_get_gloss_limit stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    double stp_channel_get_ink_limit stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    unsigned short* stp_channel_get_input const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    unsigned short* stp_channel_get_output const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    double stp_channel_get_value stp_vars_t v,
    unsigned  channel,
    unsigned  subchannel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_channel_initialize stp_vars_t v,
    stp_image_t image,
    int  input_channel_count
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_channel_reset stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_channel_reset_channel stp_vars_t v,
    int  channel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_black_channel stp_vars_t v,
    int  channel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_curve stp_vars_t v,
    int  channel,
    const stp_curve_t curve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_cutoff_adjustment stp_vars_t v,
    int  color,
    int  subchannel,
    double  adjustment
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_density_adjustment stp_vars_t v,
    int  color,
    int  subchannel,
    double  adjustment
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_gloss_channel stp_vars_t v,
    int  channel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_gloss_limit stp_vars_t v,
    double  limit
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_channel_set_ink_limit stp_vars_t v,
    double  limit
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/classes.html b/doc/gutenprint/html/classes.html new file mode 100644 index 0000000..f2ed916 --- /dev/null +++ b/doc/gutenprint/html/classes.html @@ -0,0 +1,17 @@ + + +libgutenprint API Reference: Alphabetical List + + + + +

    libgutenprint API Reference Data Structure Index

    D | S

    + +
      D  
    +
    stp_dither_matrix_generic   stp_int_bound_t   stp_module_version   stp_param_string_t   
    dither_matrix_impl   stp_dither_matrix_normal   stp_lineactive_t   stp_mxml_attr_s   stp_parameter_t   
      S  
    +
    stp_dither_matrix_short   stp_linebounds_t   stp_mxml_node_s   stp_pass_t   
    stp_cached_curve_t   stp_dotsize   stp_linebufs_t   stp_mxml_text_s   stp_printfuncs_t   
    stp_color   stp_double_bound_t   stp_linecount_t   stp_mxml_value_s   stp_raw_t   
    stp_colorfuncs_t   stp_family   stp_lineoff_t   stp_mxml_value_u   stp_shade   
    stp_curve_point_t   stp_image   stp_module   stp_papersize_t   stp_weave_t   

    D | S

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/color_8h.html b/doc/gutenprint/html/color_8h.html new file mode 100644 index 0000000..6d31997 --- /dev/null +++ b/doc/gutenprint/html/color_8h.html @@ -0,0 +1,60 @@ + + +libgutenprint API Reference: include/gutenprint/color.h File Reference + + + + + +

    color.h File Reference

    Color functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_colorfuncs_t
    struct  stp_color

    Typedefs

    typedef stp_color stp_color_t

    Functions

    int stp_color_init (stp_vars_t *v, stp_image_t *image, size_t steps)
    int stp_color_get_row (stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask)
    stp_parameter_list_t stp_color_list_parameters (const stp_vars_t *v)
    void stp_color_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
    int stp_color_register (const stp_color_t *color)
    int stp_color_unregister (const stp_color_t *color)
    int stp_color_count (void)
     Get the number of available color modules.
    const stp_color_tstp_get_color_by_name (const char *name)
     Get a color module by its name.
    const stp_color_tstp_get_color_by_index (int idx)
     Get a color module by its index number.
    const stp_color_tstp_get_color_by_colorfuncs (stp_colorfuncs_t *colorfuncs)
    const char * stp_color_get_name (const stp_color_t *c)
     Get the short (untranslated) name of a color module.
    const char * stp_color_get_long_name (const stp_color_t *c)
     Get the long (translated) name of a color module.
    +


    Detailed Description

    +Color functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/curve-cache_8h.html b/doc/gutenprint/html/curve-cache_8h.html new file mode 100644 index 0000000..fb253d4 --- /dev/null +++ b/doc/gutenprint/html/curve-cache_8h.html @@ -0,0 +1,447 @@ + + +libgutenprint API Reference: include/gutenprint/curve-cache.h File Reference + + + + + +

    curve-cache.h File Reference

    Curve caching functions. More... +

    +#include <gutenprint/curve.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_cached_curve_t

    Defines

    #define CURVE_CACHE_FAST_USHORT(cache)   ((cache)->s_cache)
    #define CURVE_CACHE_FAST_DOUBLE(cache)   ((cache)->d_cache)
    #define CURVE_CACHE_FAST_COUNT(cache)   ((cache)->count)

    Functions

    void stp_curve_free_curve_cache (stp_cached_curve_t *cache)
    void stp_curve_cache_curve_data (stp_cached_curve_t *cache)
    stp_curve_tstp_curve_cache_get_curve (stp_cached_curve_t *cache)
    void stp_curve_cache_curve_invalidate (stp_cached_curve_t *cache)
    void stp_curve_cache_set_curve (stp_cached_curve_t *cache, stp_curve_t *curve)
    void stp_curve_cache_set_curve_copy (stp_cached_curve_t *cache, const stp_curve_t *curve)
    const size_t stp_curve_cache_get_count (stp_cached_curve_t *cache)
    const unsigned short * stp_curve_cache_get_ushort_data (stp_cached_curve_t *cache)
    const double * stp_curve_cache_get_double_data (stp_cached_curve_t *cache)
    void stp_curve_cache_copy (stp_cached_curve_t *dest, const stp_cached_curve_t *src)
    +


    Detailed Description

    +Curve caching functions. +

    +


    Define Documentation

    +

    + + + + +
    + + + + + + + + + +
    #define CURVE_CACHE_FAST_COUNT cache   )    ((cache)->count)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define CURVE_CACHE_FAST_DOUBLE cache   )    ((cache)->d_cache)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define CURVE_CACHE_FAST_USHORT cache   )    ((cache)->s_cache)
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_curve_cache_copy stp_cached_curve_t dest,
    const stp_cached_curve_t src
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_curve_cache_curve_data stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_curve_cache_curve_invalidate stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const size_t stp_curve_cache_get_count stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_cache_get_curve stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const double* stp_curve_cache_get_double_data stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const unsigned short* stp_curve_cache_get_ushort_data stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_curve_cache_set_curve stp_cached_curve_t cache,
    stp_curve_t curve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_curve_cache_set_curve_copy stp_cached_curve_t cache,
    const stp_curve_t curve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_curve_free_curve_cache stp_cached_curve_t cache  ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/curve_8h.html b/doc/gutenprint/html/curve_8h.html new file mode 100644 index 0000000..a475f61 --- /dev/null +++ b/doc/gutenprint/html/curve_8h.html @@ -0,0 +1,193 @@ + + +libgutenprint API Reference: include/gutenprint/curve.h File Reference + + + + + +

    curve.h File Reference

    Curve functions. More... +

    +#include <stdio.h>
    +#include <stdlib.h>
    +#include <gutenprint/sequence.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_curve_point_t
     Point (x,y) for piecewise curve. More...

    Typedefs

    typedef stp_curve stp_curve_t
     The curve opaque data type.

    Enumerations

    enum  stp_curve_type_t { STP_CURVE_TYPE_LINEAR, +STP_CURVE_TYPE_SPLINE + }
     Curve types. More...
    enum  stp_curve_wrap_mode_t { STP_CURVE_WRAP_NONE, +STP_CURVE_WRAP_AROUND + }
     Wrapping mode. More...
    enum  stp_curve_compose_t { STP_CURVE_COMPOSE_ADD, +STP_CURVE_COMPOSE_MULTIPLY, +STP_CURVE_COMPOSE_EXPONENTIATE + }
     Composition types. More...
    enum  stp_curve_bounds_t { STP_CURVE_BOUNDS_RESCALE, +STP_CURVE_BOUNDS_CLIP, +STP_CURVE_BOUNDS_ERROR + }
     Behaviour when curve exceeds bounds. More...

    Functions

    stp_curve_tstp_curve_create (stp_curve_wrap_mode_t wrap)
     Create a new curve.
    stp_curve_tstp_curve_create_copy (const stp_curve_t *curve)
     Copy and allocate an curve.
    void stp_curve_copy (stp_curve_t *dest, const stp_curve_t *source)
     Copy an curve.
    void stp_curve_destroy (stp_curve_t *curve)
     Destroy an curve.
    int stp_curve_set_bounds (stp_curve_t *curve, double low, double high)
     Set the lower and upper bounds on a curve.
    void stp_curve_get_bounds (const stp_curve_t *curve, double *low, double *high)
     Get the lower and upper bounds on a curve.
    stp_curve_wrap_mode_t stp_curve_get_wrap (const stp_curve_t *curve)
     Get the wrapping mode.
    int stp_curve_is_piecewise (const stp_curve_t *curve)
     Determine whether the curve is piecewise.
    void stp_curve_get_range (const stp_curve_t *curve, double *low, double *high)
    size_t stp_curve_count_points (const stp_curve_t *curve)
     Get the number of allocated points in the curve.
    int stp_curve_set_interpolation_type (stp_curve_t *curve, stp_curve_type_t itype)
     Set the curve interpolation type.
    stp_curve_type_t stp_curve_get_interpolation_type (const stp_curve_t *curve)
     Get the curve interpolation type.
    int stp_curve_set_data (stp_curve_t *curve, size_t count, const double *data)
     Set all data points of the curve.
    int stp_curve_set_data_points (stp_curve_t *curve, size_t count, const stp_curve_point_t *data)
     Set all data points of the curve.
    int stp_curve_set_float_data (stp_curve_t *curve, size_t count, const float *data)
     Set the data points in a curve from float values.
    int stp_curve_set_long_data (stp_curve_t *curve, size_t count, const long *data)
     Set the data points in a curve from long values.
    int stp_curve_set_ulong_data (stp_curve_t *curve, size_t count, const unsigned long *data)
     Set the data points in a curve from unsigned long values.
    int stp_curve_set_int_data (stp_curve_t *curve, size_t count, const int *data)
     Set the data points in a curve from integer values.
    int stp_curve_set_uint_data (stp_curve_t *curve, size_t count, const unsigned int *data)
     Set the data points in a curve from unsigned integer values.
    int stp_curve_set_short_data (stp_curve_t *curve, size_t count, const short *data)
     Set the data points in a curve from short values.
    int stp_curve_set_ushort_data (stp_curve_t *curve, size_t count, const unsigned short *data)
     Set the data points in a curve from unsigned short values.
    stp_curve_tstp_curve_get_subrange (const stp_curve_t *curve, size_t start, size_t count)
     Get a curve containing a subrange of data.
    int stp_curve_set_subrange (stp_curve_t *curve, const stp_curve_t *range, size_t start)
    const double * stp_curve_get_data (const stp_curve_t *curve, size_t *count)
     Get a pointer to the curve's raw data.
    const stp_curve_point_tstp_curve_get_data_points (const stp_curve_t *curve, size_t *count)
     Get a pointer to the curve's raw data as points.
    const float * stp_curve_get_float_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as floats.
    const long * stp_curve_get_long_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as longs.
    const unsigned long * stp_curve_get_ulong_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as unsigned longs.
    const int * stp_curve_get_int_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as integers.
    const unsigned int * stp_curve_get_uint_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as unsigned integers.
    const short * stp_curve_get_short_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as shorts.
    const unsigned short * stp_curve_get_ushort_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as unsigned shorts.
    const stp_sequence_tstp_curve_get_sequence (const stp_curve_t *curve)
     Get the underlying stp_sequence_t data structure which stp_curve_t is derived from.
    int stp_curve_set_gamma (stp_curve_t *curve, double f_gamma)
     Set the gamma of a curve.
    double stp_curve_get_gamma (const stp_curve_t *curve)
     Get the gamma value of the curve.
    int stp_curve_set_point (stp_curve_t *curve, size_t where, double data)
     Set a point along the curve.
    int stp_curve_get_point (const stp_curve_t *curve, size_t where, double *data)
     Get a point along the curve.
    int stp_curve_interpolate_value (const stp_curve_t *curve, double where, double *result)
     Interpolate a point along the curve.
    int stp_curve_resample (stp_curve_t *curve, size_t points)
     Resample a curve (change the number of points).
    int stp_curve_rescale (stp_curve_t *curve, double scale, stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode)
     Rescale a curve (multiply all points by a scaling constant).
    int stp_curve_write (FILE *file, const stp_curve_t *curve)
     Write a curve to a file.
    char * stp_curve_write_string (const stp_curve_t *curve)
     Write a curve to a string.
    stp_curve_tstp_curve_create_from_stream (FILE *fp)
     Create a curve from a stream.
    stp_curve_tstp_curve_create_from_file (const char *file)
     Create a curve from a stream.
    stp_curve_tstp_curve_create_from_string (const char *string)
     Create a curve from a string.
    int stp_curve_compose (stp_curve_t **retval, stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points)
     Compose two curves, creating a third curve.
    +


    Detailed Description

    +Curve functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/deprecated.html b/doc/gutenprint/html/deprecated.html new file mode 100644 index 0000000..3547296 --- /dev/null +++ b/doc/gutenprint/html/deprecated.html @@ -0,0 +1,21 @@ + + +libgutenprint API Reference: Deprecated List + + + + +

    Deprecated List

    +
    Global stp_get_printer_index_by_driver
    +
    There should never be any need to use this function.
    +
    +

    +

    +
    Global stp_merge_printvars
    +
    This is likely to go away.
    +
    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/dir_000000.html b/doc/gutenprint/html/dir_000000.html new file mode 100644 index 0000000..d2fb987 --- /dev/null +++ b/doc/gutenprint/html/dir_000000.html @@ -0,0 +1,20 @@ + + +libgutenprint API Reference: include/ Directory Reference + + + + + +

    include Directory Reference

    + + + + +

    Directories

    directory  gutenprint
    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/dir_000001.html b/doc/gutenprint/html/dir_000001.html new file mode 100644 index 0000000..aa75f63 --- /dev/null +++ b/doc/gutenprint/html/dir_000001.html @@ -0,0 +1,143 @@ + + +libgutenprint API Reference: include/gutenprint/ Directory Reference + + + + + +

    gutenprint Directory Reference

    + + + + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +

    + + + +

    +


    Files

    file  array.h
     Array functions.
    file  bit-ops.h
     Bit operations.
    file  channel.h
     Channel functions.
    file  color.h
     Color functions.
    file  curve-cache.h
     Curve caching functions.
    file  curve.h
     Curve functions.
    file  dither.h
     Dither functions.
    file  gutenprint-intl-internal.h
     Internationalisation functions.
    file  gutenprint-intl.h
     Internationalisation functions.
    file  gutenprint-module.h
     Gutenprint module header.
    file  gutenprint-version.h
     Version functions.
    file  gutenprint.h
     Gutenprint master header.
    file  image.h
     Image functions.
    file  list.h
     Generic list functions.
    file  module.h
     Module functions.
    file  mxml.h
     Mini-XML XML parsing functions.
    file  paper.h
     Paper size functions.
    file  path.h
     Simple directory path functions.
    file  printers.h
     Printer functions.
    file  sequence.h
     Sequence functions.
    file  string-list.h
     String list functions.
    file  util.h
     Utility functions.
    file  vars.h
     Print job functions.
    file  weave.h
     Softweave functions.
    file  xml.h
     XML tree functions.
    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/dirs.html b/doc/gutenprint/html/dirs.html new file mode 100644 index 0000000..776d45f --- /dev/null +++ b/doc/gutenprint/html/dirs.html @@ -0,0 +1,18 @@ + + +libgutenprint API Reference: Directory Hierarchy + + + + +

    libgutenprint API Reference Directories

    This directory hierarchy is sorted roughly, but not completely, alphabetically: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/dither_8h.html b/doc/gutenprint/html/dither_8h.html new file mode 100644 index 0000000..fc8f3d1 --- /dev/null +++ b/doc/gutenprint/html/dither_8h.html @@ -0,0 +1,1822 @@ + + +libgutenprint API Reference: include/gutenprint/dither.h File Reference + + + + + +

    dither.h File Reference

    Dither functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_dither_matrix_short
    struct  stp_dither_matrix_normal
    struct  stp_dither_matrix_generic
    struct  dither_matrix_impl
    struct  stp_dotsize
    struct  stp_shade

    Defines

    #define STP_ECOLOR_K   0
    #define STP_ECOLOR_C   1
    #define STP_ECOLOR_M   2
    #define STP_ECOLOR_Y   3
    #define STP_NCOLORS   (4)

    Typedefs

    typedef stp_dither_matrix_short stp_dither_matrix_short_t
    typedef stp_dither_matrix_normal stp_dither_matrix_normal_t
    typedef stp_dither_matrix_generic stp_dither_matrix_generic_t
    typedef dither_matrix_impl stp_dither_matrix_impl_t
    typedef stp_dotsize stp_dotsize_t
    typedef stp_shade stp_shade_t

    Functions

    void stp_dither_matrix_iterated_init (stp_dither_matrix_impl_t *mat, size_t size, size_t exponent, const unsigned *array)
    void stp_dither_matrix_shear (stp_dither_matrix_impl_t *mat, int x_shear, int y_shear)
    void stp_dither_matrix_init (stp_dither_matrix_impl_t *mat, int x_size, int y_size, const unsigned int *array, int transpose, int prescaled)
    void stp_dither_matrix_init_short (stp_dither_matrix_impl_t *mat, int x_size, int y_size, const unsigned short *array, int transpose, int prescaled)
    int stp_dither_matrix_validate_array (const stp_array_t *array)
    void stp_dither_matrix_init_from_dither_array (stp_dither_matrix_impl_t *mat, const stp_array_t *array, int transpose)
    void stp_dither_matrix_destroy (stp_dither_matrix_impl_t *mat)
    void stp_dither_matrix_clone (const stp_dither_matrix_impl_t *src, stp_dither_matrix_impl_t *dest, int x_offset, int y_offset)
    void stp_dither_matrix_copy (const stp_dither_matrix_impl_t *src, stp_dither_matrix_impl_t *dest)
    void stp_dither_matrix_scale_exponentially (stp_dither_matrix_impl_t *mat, double exponent)
    void stp_dither_matrix_set_row (stp_dither_matrix_impl_t *mat, int y)
    stp_array_tstp_find_standard_dither_array (int x_aspect, int y_aspect)
    stp_parameter_list_t stp_dither_list_parameters (const stp_vars_t *v)
    void stp_dither_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
    void stp_dither_init (stp_vars_t *v, stp_image_t *image, int out_width, int xdpi, int ydpi)
    void stp_dither_set_iterated_matrix (stp_vars_t *v, size_t edge, size_t iterations, const unsigned *data, int prescaled, int x_shear, int y_shear)
    void stp_dither_set_matrix (stp_vars_t *v, const stp_dither_matrix_generic_t *mat, int transpose, int x_shear, int y_shear)
    void stp_dither_set_matrix_from_dither_array (stp_vars_t *v, const stp_array_t *array, int transpose)
    void stp_dither_set_transition (stp_vars_t *v, double)
    void stp_dither_set_randomizer (stp_vars_t *v, int color, double)
    void stp_dither_set_ink_spread (stp_vars_t *v, int spread)
    void stp_dither_set_adaptive_limit (stp_vars_t *v, double limit)
    int stp_dither_get_first_position (stp_vars_t *v, int color, int subchan)
    int stp_dither_get_last_position (stp_vars_t *v, int color, int subchan)
    void stp_dither_set_inks_simple (stp_vars_t *v, int color, int nlevels, const double *levels, double density, double darkness)
    void stp_dither_set_inks_full (stp_vars_t *v, int color, int nshades, const stp_shade_t *shades, double density, double darkness)
    void stp_dither_set_inks (stp_vars_t *v, int color, double density, double darkness, int nshades, const double *svalues, int ndotsizes, const double *dvalues)
    void stp_dither_add_channel (stp_vars_t *v, unsigned char *data, unsigned channel, unsigned subchannel)
    unsigned char * stp_dither_get_channel (stp_vars_t *v, unsigned channel, unsigned subchannel)
    void stp_dither (stp_vars_t *v, int row, int duplicate_line, int zero_mask, const unsigned char *mask)
    void stp_dither_internal (stp_vars_t *v, int row, const unsigned short *input, int duplicate_line, int zero_mask, const unsigned char *mask)
    +


    Detailed Description

    +Dither functions. +

    +


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_ECOLOR_C   1
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_ECOLOR_K   0
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_ECOLOR_M   2
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_ECOLOR_Y   3
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_NCOLORS   (4)
    +
    + + + + + +
    +   + + +

    +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_dither_matrix_generic stp_dither_matrix_generic_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct dither_matrix_impl stp_dither_matrix_impl_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_dither_matrix_normal stp_dither_matrix_normal_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_dither_matrix_short stp_dither_matrix_short_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_dotsize stp_dotsize_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_shade stp_shade_t
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither stp_vars_t v,
    int  row,
    int  duplicate_line,
    int  zero_mask,
    const unsigned char *  mask
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_add_channel stp_vars_t v,
    unsigned char *  data,
    unsigned  channel,
    unsigned  subchannel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_describe_parameter const stp_vars_t v,
    const char *  name,
    stp_parameter_t description
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    unsigned char* stp_dither_get_channel stp_vars_t v,
    unsigned  channel,
    unsigned  subchannel
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_dither_get_first_position stp_vars_t v,
    int  color,
    int  subchan
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_dither_get_last_position stp_vars_t v,
    int  color,
    int  subchan
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_init stp_vars_t v,
    stp_image_t image,
    int  out_width,
    int  xdpi,
    int  ydpi
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_internal stp_vars_t v,
    int  row,
    const unsigned short *  input,
    int  duplicate_line,
    int  zero_mask,
    const unsigned char *  mask
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_parameter_list_t stp_dither_list_parameters const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_clone const stp_dither_matrix_impl_t src,
    stp_dither_matrix_impl_t dest,
    int  x_offset,
    int  y_offset
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_copy const stp_dither_matrix_impl_t src,
    stp_dither_matrix_impl_t dest
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_dither_matrix_destroy stp_dither_matrix_impl_t mat  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_init stp_dither_matrix_impl_t mat,
    int  x_size,
    int  y_size,
    const unsigned int *  array,
    int  transpose,
    int  prescaled
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_init_from_dither_array stp_dither_matrix_impl_t mat,
    const stp_array_t array,
    int  transpose
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_init_short stp_dither_matrix_impl_t mat,
    int  x_size,
    int  y_size,
    const unsigned short *  array,
    int  transpose,
    int  prescaled
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_iterated_init stp_dither_matrix_impl_t mat,
    size_t  size,
    size_t  exponent,
    const unsigned *  array
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_scale_exponentially stp_dither_matrix_impl_t mat,
    double  exponent
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_set_row stp_dither_matrix_impl_t mat,
    int  y
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_matrix_shear stp_dither_matrix_impl_t mat,
    int  x_shear,
    int  y_shear
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_dither_matrix_validate_array const stp_array_t array  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_adaptive_limit stp_vars_t v,
    double  limit
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_ink_spread stp_vars_t v,
    int  spread
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_inks stp_vars_t v,
    int  color,
    double  density,
    double  darkness,
    int  nshades,
    const double *  svalues,
    int  ndotsizes,
    const double *  dvalues
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_inks_full stp_vars_t v,
    int  color,
    int  nshades,
    const stp_shade_t shades,
    double  density,
    double  darkness
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_inks_simple stp_vars_t v,
    int  color,
    int  nlevels,
    const double *  levels,
    double  density,
    double  darkness
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_iterated_matrix stp_vars_t v,
    size_t  edge,
    size_t  iterations,
    const unsigned *  data,
    int  prescaled,
    int  x_shear,
    int  y_shear
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_matrix stp_vars_t v,
    const stp_dither_matrix_generic_t mat,
    int  transpose,
    int  x_shear,
    int  y_shear
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_matrix_from_dither_array stp_vars_t v,
    const stp_array_t array,
    int  transpose
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_randomizer stp_vars_t v,
    int  color,
    double 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_dither_set_transition stp_vars_t v,
    double 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_array_t* stp_find_standard_dither_array int  x_aspect,
    int  y_aspect
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/doxygen.css b/doc/gutenprint/html/doxygen.css new file mode 100644 index 0000000..decae9e --- /dev/null +++ b/doc/gutenprint/html/doxygen.css @@ -0,0 +1,309 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: Fixed, monospace; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdPrefix { + background-color: #F4F4FB; + color: #606060; + font-size: 80%; +} +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #eeeeff; +} +TD.tiny { font-size: 75%; +} +a { + color: #252E78; +} +a:visited { + color: #3D2185; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #b0b0b0; +} +TH.dirtab { background: #eeeeff; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} diff --git a/doc/gutenprint/html/doxygen.png b/doc/gutenprint/html/doxygen.png new file mode 100644 index 0000000..f0a274b Binary files /dev/null and b/doc/gutenprint/html/doxygen.png differ diff --git a/doc/gutenprint/html/files.html b/doc/gutenprint/html/files.html new file mode 100644 index 0000000..1a64535 --- /dev/null +++ b/doc/gutenprint/html/files.html @@ -0,0 +1,39 @@ + + +libgutenprint API Reference: File Index + + + + +

    libgutenprint API Reference File List

    Here is a list of all files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + +
    include/gutenprint/array.hArray functions
    include/gutenprint/bit-ops.hBit operations
    include/gutenprint/channel.hChannel functions
    include/gutenprint/color.hColor functions
    include/gutenprint/curve-cache.hCurve caching functions
    include/gutenprint/curve.hCurve functions
    include/gutenprint/dither.hDither functions
    include/gutenprint/gutenprint-intl-internal.hInternationalisation functions
    include/gutenprint/gutenprint-intl.hInternationalisation functions
    include/gutenprint/gutenprint-module.hGutenprint module header
    include/gutenprint/gutenprint-version.hVersion functions
    include/gutenprint/gutenprint.hGutenprint master header
    include/gutenprint/image.hImage functions
    include/gutenprint/list.hGeneric list functions
    include/gutenprint/module.hModule functions
    include/gutenprint/mxml.hMini-XML XML parsing functions
    include/gutenprint/paper.hPaper size functions
    include/gutenprint/path.hSimple directory path functions
    include/gutenprint/printers.hPrinter functions
    include/gutenprint/sequence.hSequence functions
    include/gutenprint/string-list.hString list functions
    include/gutenprint/util.hUtility functions
    include/gutenprint/vars.hPrint job functions
    include/gutenprint/weave.hSoftweave functions
    include/gutenprint/xml.hXML tree functions
    +
    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/functions.html b/doc/gutenprint/html/functions.html new file mode 100644 index 0000000..a6bd690 --- /dev/null +++ b/doc/gutenprint/html/functions.html @@ -0,0 +1,177 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    a | b | c | d | e | f | g | h | i | j | l | m | n | o | p | r | s | t | u | v | w | x | y
    + +

    +Here is a list of all struct and union fields with links to the structures/unions they belong to: +

    +

    - a -

    +

    - b -

    +

    - c -

    +

    - d -

    +

    - e -

    +

    - f -

    +

    - g -

    +

    - h -

    +

    - i -

    +

    - j -

    +

    - l -

    +

    - m -

    +

    - n -

    +

    - o -

    +

    - p -

    +

    - r -

    +

    - s -

    +

    - t -

    +

    - u -

    +

    - v -

    +

    - w -

    +

    - x -

    +

    - y -

    +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/functions_vars.html b/doc/gutenprint/html/functions_vars.html new file mode 100644 index 0000000..c59740b --- /dev/null +++ b/doc/gutenprint/html/functions_vars.html @@ -0,0 +1,177 @@ + + +libgutenprint API Reference: Data Fields - Variables + + + + + +
    a | b | c | d | e | f | g | h | i | j | l | m | n | o | p | r | s | t | u | v | w | x | y
    + +

    + +

    +

    - a -

    +

    - b -

    +

    - c -

    +

    - d -

    +

    - e -

    +

    - f -

    +

    - g -

    +

    - h -

    +

    - i -

    +

    - j -

    +

    - l -

    +

    - m -

    +

    - n -

    +

    - o -

    +

    - p -

    +

    - r -

    +

    - s -

    +

    - t -

    +

    - u -

    +

    - v -

    +

    - w -

    +

    - x -

    +

    - y -

    +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals.html b/doc/gutenprint/html/globals.html new file mode 100644 index 0000000..47b90f2 --- /dev/null +++ b/doc/gutenprint/html/globals.html @@ -0,0 +1,21 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - _ -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x62.html b/doc/gutenprint/html/globals_0x62.html new file mode 100644 index 0000000..db5ccc0 --- /dev/null +++ b/doc/gutenprint/html/globals_0x62.html @@ -0,0 +1,21 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - b -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x63.html b/doc/gutenprint/html/globals_0x63.html new file mode 100644 index 0000000..12956bd --- /dev/null +++ b/doc/gutenprint/html/globals_0x63.html @@ -0,0 +1,24 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - c -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x64.html b/doc/gutenprint/html/globals_0x64.html new file mode 100644 index 0000000..9ae3005 --- /dev/null +++ b/doc/gutenprint/html/globals_0x64.html @@ -0,0 +1,22 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - d -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x67.html b/doc/gutenprint/html/globals_0x67.html new file mode 100644 index 0000000..45fcf85 --- /dev/null +++ b/doc/gutenprint/html/globals_0x67.html @@ -0,0 +1,21 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - g -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x6e.html b/doc/gutenprint/html/globals_0x6e.html new file mode 100644 index 0000000..78d6f22 --- /dev/null +++ b/doc/gutenprint/html/globals_0x6e.html @@ -0,0 +1,21 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - n -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x70.html b/doc/gutenprint/html/globals_0x70.html new file mode 100644 index 0000000..58c68d7 --- /dev/null +++ b/doc/gutenprint/html/globals_0x70.html @@ -0,0 +1,27 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - p -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x73.html b/doc/gutenprint/html/globals_0x73.html new file mode 100644 index 0000000..ce946cd --- /dev/null +++ b/doc/gutenprint/html/globals_0x73.html @@ -0,0 +1,644 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - s -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_0x74.html b/doc/gutenprint/html/globals_0x74.html new file mode 100644 index 0000000..103ecd1 --- /dev/null +++ b/doc/gutenprint/html/globals_0x74.html @@ -0,0 +1,21 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | p | s | t
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - t -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_defs.html b/doc/gutenprint/html/globals_defs.html new file mode 100644 index 0000000..5f07189 --- /dev/null +++ b/doc/gutenprint/html/globals_defs.html @@ -0,0 +1,95 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    _ | b | c | d | g | n | s | t
    + +

    + +

    +

    - _ -

    +

    - b -

    +

    - c -

    +

    - d -

    +

    - g -

    +

    - n -

    +

    - s -

    +

    - t -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_enum.html b/doc/gutenprint/html/globals_enum.html new file mode 100644 index 0000000..9628de3 --- /dev/null +++ b/doc/gutenprint/html/globals_enum.html @@ -0,0 +1,31 @@ + + +libgutenprint API Reference: Data Fields + + + + + + +

    +

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_eval.html b/doc/gutenprint/html/globals_eval.html new file mode 100644 index 0000000..99d4780 --- /dev/null +++ b/doc/gutenprint/html/globals_eval.html @@ -0,0 +1,83 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    p | s
    + +

    + +

    +

    - p -

    +

    - s -

      +
    • STP_CURVE_BOUNDS_CLIP +: curve.h
    • STP_CURVE_BOUNDS_ERROR +: curve.h
    • STP_CURVE_BOUNDS_RESCALE +: curve.h
    • STP_CURVE_COMPOSE_ADD +: curve.h
    • STP_CURVE_COMPOSE_EXPONENTIATE +: curve.h
    • STP_CURVE_COMPOSE_MULTIPLY +: curve.h
    • STP_CURVE_TYPE_LINEAR +: curve.h
    • STP_CURVE_TYPE_SPLINE +: curve.h
    • STP_CURVE_WRAP_AROUND +: curve.h
    • STP_CURVE_WRAP_NONE +: curve.h
    • STP_IMAGE_STATUS_ABORT +: image.h
    • STP_IMAGE_STATUS_OK +: image.h
    • STP_MODULE_CLASS_COLOR +: module.h
    • STP_MODULE_CLASS_DITHER +: module.h
    • STP_MODULE_CLASS_FAMILY +: module.h
    • STP_MODULE_CLASS_INVALID +: module.h
    • STP_MODULE_CLASS_MISC +: module.h
    • STP_MXML_ELEMENT +: mxml.h
    • STP_MXML_INTEGER +: mxml.h
    • STP_MXML_OPAQUE +: mxml.h
    • STP_MXML_REAL +: mxml.h
    • STP_MXML_TEXT +: mxml.h
    • STP_PARAMETER_ACTIVE +: vars.h
    • STP_PARAMETER_CLASS_CORE +: vars.h
    • STP_PARAMETER_CLASS_FEATURE +: vars.h
    • STP_PARAMETER_CLASS_INVALID +: vars.h
    • STP_PARAMETER_CLASS_OUTPUT +: vars.h
    • STP_PARAMETER_DEFAULTED +: vars.h
    • STP_PARAMETER_INACTIVE +: vars.h
    • STP_PARAMETER_LEVEL_ADVANCED +: vars.h
    • STP_PARAMETER_LEVEL_ADVANCED1 +: vars.h
    • STP_PARAMETER_LEVEL_ADVANCED2 +: vars.h
    • STP_PARAMETER_LEVEL_ADVANCED3 +: vars.h
    • STP_PARAMETER_LEVEL_ADVANCED4 +: vars.h
    • STP_PARAMETER_LEVEL_BASIC +: vars.h
    • STP_PARAMETER_LEVEL_EXTERNAL +: vars.h
    • STP_PARAMETER_LEVEL_INTERNAL +: vars.h
    • STP_PARAMETER_LEVEL_INVALID +: vars.h
    • STP_PARAMETER_TYPE_ARRAY +: vars.h
    • STP_PARAMETER_TYPE_BOOLEAN +: vars.h
    • STP_PARAMETER_TYPE_CURVE +: vars.h
    • STP_PARAMETER_TYPE_DIMENSION +: vars.h
    • STP_PARAMETER_TYPE_DOUBLE +: vars.h
    • STP_PARAMETER_TYPE_FILE +: vars.h
    • STP_PARAMETER_TYPE_INT +: vars.h
    • STP_PARAMETER_TYPE_INVALID +: vars.h
    • STP_PARAMETER_TYPE_RAW +: vars.h
    • STP_PARAMETER_TYPE_STRING_LIST +: vars.h
    • STP_WEAVE_ASCENDING +: weave.h
    • STP_WEAVE_ASCENDING_2X +: weave.h
    • STP_WEAVE_ASCENDING_3X +: weave.h
    • STP_WEAVE_DESCENDING +: weave.h
    • STP_WEAVE_STAGGERED +: weave.h
    • STP_WEAVE_ZIGZAG +: weave.h
    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_func.html b/doc/gutenprint/html/globals_func.html new file mode 100644 index 0000000..aa8be08 --- /dev/null +++ b/doc/gutenprint/html/globals_func.html @@ -0,0 +1,474 @@ + + +libgutenprint API Reference: Data Fields + + + + + + + +

    + +

    +

    - s -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_type.html b/doc/gutenprint/html/globals_type.html new file mode 100644 index 0000000..9afd5bc --- /dev/null +++ b/doc/gutenprint/html/globals_type.html @@ -0,0 +1,62 @@ + + +libgutenprint API Reference: Data Fields + + + + + +
    c | s
    + +

    + +

    +

    - c -

    +

    - s -

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/globals_vars.html b/doc/gutenprint/html/globals_vars.html new file mode 100644 index 0000000..b32f0c1 --- /dev/null +++ b/doc/gutenprint/html/globals_vars.html @@ -0,0 +1,29 @@ + + +libgutenprint API Reference: Data Fields + + + + + + +

    +

    +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__array.html b/doc/gutenprint/html/group__array.html new file mode 100644 index 0000000..f2c66ff --- /dev/null +++ b/doc/gutenprint/html/group__array.html @@ -0,0 +1,607 @@ + + +libgutenprint API Reference: array + + + + +

    array

    The array is a simple "two-dimensional array of numbers" data structure. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef stp_array stp_array_t
     The array opaque data type.

    Functions

    stp_array_tstp_array_create (int x_size, int y_size)
     Create a new array.
    void stp_array_destroy (stp_array_t *array)
     Destroy an array.
    void stp_array_copy (stp_array_t *dest, const stp_array_t *source)
     Copy an array.
    stp_array_tstp_array_create_copy (const stp_array_t *array)
     Copy and allocate an array.
    void stp_array_set_size (stp_array_t *array, int x_size, int y_size)
     Resize an array.
    void stp_array_get_size (const stp_array_t *array, int *x_size, int *y_size)
     Get the size of an array.
    void stp_array_set_data (stp_array_t *array, const double *data)
     Set the data in an array.
    void stp_array_get_data (const stp_array_t *array, size_t *size, const double **data)
     Get the data in an array.
    int stp_array_set_point (stp_array_t *array, int x, int y, double data)
     Set the data at a single point in the array.
    int stp_array_get_point (const stp_array_t *array, int x, int y, double *data)
     Get the data at a single point in the array.
    const stp_sequence_tstp_array_get_sequence (const stp_array_t *array)
     Get the underlying stp_sequence_t.
    +

    Detailed Description

    +The array is a simple "two-dimensional array of numbers" data structure. +

    +array "inherits" from the sequence data structure (implemented via containment).


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_array stp_array_t
    +
    + + + + + +
    +   + + +

    +The array opaque data type. +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_array_copy stp_array_t dest,
    const stp_array_t source
    +
    + + + + + +
    +   + + +

    +Copy an array. +

    +Both dest and source must be valid arrays previously created with stp_array_create().

    Parameters:
    + + + +
    dest the destination array.
    source the source array.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_array_t* stp_array_create int  x_size,
    int  y_size
    +
    + + + + + +
    +   + + +

    +Create a new array. +

    +The total size of the array will be (x_size * y_size).

    Parameters:
    + + + +
    x_size the number of "columns".
    y_size the number of "rows".
    +
    +
    Returns:
    the newly created array.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_array_t* stp_array_create_copy const stp_array_t array  ) 
    +
    + + + + + +
    +   + + +

    +Copy and allocate an array. +

    +dest will be created, and then the contents of source will be copied into it. dest must not have been previously allocated with stp_array_create().

    Parameters:
    + + +
    array the source array.
    +
    +
    Returns:
    the new copy of the array.
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_array_destroy stp_array_t array  ) 
    +
    + + + + + +
    +   + + +

    +Destroy an array. +

    +It is an error to destroy the array more than once.

    Parameters:
    + + +
    array the array to destroy.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_array_get_data const stp_array_t array,
    size_t *  size,
    const double **  data
    +
    + + + + + +
    +   + + +

    +Get the data in an array. +

    +

    Parameters:
    + + + + +
    array the array to get the data from.
    size the number of elements in the array (x_size * y_size) are stored in the size_t pointed to.
    data a pointer to the first element of an array of doubles is stored in a pointer to double*.
     stp_array_t *array;
    + size_t size;
    + double *data;
    + stp_array_get_data(array, &size, &data);
    +
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_array_get_point const stp_array_t array,
    int  x,
    int  y,
    double *  data
    +
    + + + + + +
    +   + + +

    +Get the data at a single point in the array. +

    +

    Parameters:
    + + + + + +
    array the array to use.
    x the x location.
    y the y location.
    data the datum is stored in the double pointed to.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    const stp_sequence_t* stp_array_get_sequence const stp_array_t array  ) 
    +
    + + + + + +
    +   + + +

    +Get the underlying stp_sequence_t. +

    +

    Parameters:
    + + +
    array the array to use.
    +
    +
    Returns:
    the (constant) stp_sequence_t.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_array_get_size const stp_array_t array,
    int *  x_size,
    int *  y_size
    +
    + + + + + +
    +   + + +

    +Get the size of an array. +

    +The current x and y sizes are stored in the integers pointed to by x_size and y_size.

    Parameters:
    + + + + +
    array the array to get the size of.
    x_size a pointer to an integer to store the x size in.
    y_size a pointer to an integer to store the y size in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_array_set_data stp_array_t array,
    const double *  data
    +
    + + + + + +
    +   + + +

    +Set the data in an array. +

    +

    Parameters:
    + + + +
    array the array to set.
    data a pointer to the first member of an array containing the data to set. This array must be at least as long as (x_size * y_size).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_array_set_point stp_array_t array,
    int  x,
    int  y,
    double  data
    +
    + + + + + +
    +   + + +

    +Set the data at a single point in the array. +

    +

    Parameters:
    + + + + + +
    array the array to use.
    x the x location.
    y the y location.
    data the datum to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_array_set_size stp_array_t array,
    int  x_size,
    int  y_size
    +
    + + + + + +
    +   + + +

    +Resize an array. +

    +Resizing an array will destroy all data stored in the array.

    Parameters:
    + + + + +
    array the array to resize.
    x_size the new number of "columns".
    y_size the new number of "rows".
    +
    +
    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__color.html b/doc/gutenprint/html/group__color.html new file mode 100644 index 0000000..5317f9d --- /dev/null +++ b/doc/gutenprint/html/group__color.html @@ -0,0 +1,504 @@ + + +libgutenprint API Reference: color + + + + +

    color

    The color data type is responsible for providing colour conversion features. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_colorfuncs_t
    struct  stp_color

    Typedefs

    typedef stp_color stp_color_t

    Functions

    int stp_color_init (stp_vars_t *v, stp_image_t *image, size_t steps)
    int stp_color_get_row (stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask)
    stp_parameter_list_t stp_color_list_parameters (const stp_vars_t *v)
    void stp_color_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
    int stp_color_register (const stp_color_t *color)
    int stp_color_unregister (const stp_color_t *color)
    int stp_color_count (void)
     Get the number of available color modules.
    const stp_color_tstp_get_color_by_name (const char *name)
     Get a color module by its name.
    const stp_color_tstp_get_color_by_index (int idx)
     Get a color module by its index number.
    const stp_color_tstp_get_color_by_colorfuncs (stp_colorfuncs_t *colorfuncs)
    const char * stp_color_get_name (const stp_color_t *c)
     Get the short (untranslated) name of a color module.
    const char * stp_color_get_long_name (const stp_color_t *c)
     Get the long (translated) name of a color module.
    +

    Detailed Description

    +The color data type is responsible for providing colour conversion features. +

    +Color modules provide the actual functionality, so different colour management modules may provide the application with different services (for example, colour profiles).


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_color stp_color_t
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    int stp_color_count void   ) 
    +
    + + + + + +
    +   + + +

    +Get the number of available color modules. +

    +

    Returns:
    the number of color modules.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_color_describe_parameter const stp_vars_t v,
    const char *  name,
    stp_parameter_t description
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stp_color_get_long_name const stp_color_t c  ) 
    +
    + + + + + +
    +   + + +

    +Get the long (translated) name of a color module. +

    +

    Parameters:
    + + +
    c the color module to use.
    +
    +
    Returns:
    the long name.
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_color_get_name const stp_color_t c  ) 
    +
    + + + + + +
    +   + + +

    +Get the short (untranslated) name of a color module. +

    +

    Parameters:
    + + +
    c the color module to use.
    +
    +
    Returns:
    the short name.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_color_get_row stp_vars_t v,
    stp_image_t image,
    int  row,
    unsigned *  zero_mask
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_color_init stp_vars_t v,
    stp_image_t image,
    size_t  steps
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_parameter_list_t stp_color_list_parameters const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_color_register const stp_color_t color  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_color_unregister const stp_color_t color  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_color_t* stp_get_color_by_colorfuncs stp_colorfuncs_t colorfuncs  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_color_t* stp_get_color_by_index int  idx  ) 
    +
    + + + + + +
    +   + + +

    +Get a color module by its index number. +

    +

    Parameters:
    + + +
    idx the index number. This must not be greater than (total number of papers - 1).
    +
    +
    Returns:
    a pointer to the color module, or NULL on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    const stp_color_t* stp_get_color_by_name const char *  name  ) 
    +
    + + + + + +
    +   + + +

    +Get a color module by its name. +

    +

    Parameters:
    + + +
    name the short unique name. number of papers - 1).
    +
    +
    Returns:
    a pointer to the color module, or NULL on failure.
    +
    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__curve.html b/doc/gutenprint/html/group__curve.html new file mode 100644 index 0000000..25b60cc --- /dev/null +++ b/doc/gutenprint/html/group__curve.html @@ -0,0 +1,2470 @@ + + +libgutenprint API Reference: curve + + + + +

    curve

    The curve type models a linear, spline or gamma curve. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_curve_point_t
     Point (x,y) for piecewise curve. More...

    Typedefs

    typedef stp_curve stp_curve_t
     The curve opaque data type.

    Enumerations

    enum  stp_curve_type_t { STP_CURVE_TYPE_LINEAR, +STP_CURVE_TYPE_SPLINE + }
     Curve types. More...
    enum  stp_curve_wrap_mode_t { STP_CURVE_WRAP_NONE, +STP_CURVE_WRAP_AROUND + }
     Wrapping mode. More...
    enum  stp_curve_compose_t { STP_CURVE_COMPOSE_ADD, +STP_CURVE_COMPOSE_MULTIPLY, +STP_CURVE_COMPOSE_EXPONENTIATE + }
     Composition types. More...
    enum  stp_curve_bounds_t { STP_CURVE_BOUNDS_RESCALE, +STP_CURVE_BOUNDS_CLIP, +STP_CURVE_BOUNDS_ERROR + }
     Behaviour when curve exceeds bounds. More...

    Functions

    stp_curve_tstp_curve_create (stp_curve_wrap_mode_t wrap)
     Create a new curve.
    stp_curve_tstp_curve_create_copy (const stp_curve_t *curve)
     Copy and allocate an curve.
    void stp_curve_copy (stp_curve_t *dest, const stp_curve_t *source)
     Copy an curve.
    void stp_curve_destroy (stp_curve_t *curve)
     Destroy an curve.
    int stp_curve_set_bounds (stp_curve_t *curve, double low, double high)
     Set the lower and upper bounds on a curve.
    void stp_curve_get_bounds (const stp_curve_t *curve, double *low, double *high)
     Get the lower and upper bounds on a curve.
    stp_curve_wrap_mode_t stp_curve_get_wrap (const stp_curve_t *curve)
     Get the wrapping mode.
    int stp_curve_is_piecewise (const stp_curve_t *curve)
     Determine whether the curve is piecewise.
    void stp_curve_get_range (const stp_curve_t *curve, double *low, double *high)
    size_t stp_curve_count_points (const stp_curve_t *curve)
     Get the number of allocated points in the curve.
    int stp_curve_set_interpolation_type (stp_curve_t *curve, stp_curve_type_t itype)
     Set the curve interpolation type.
    stp_curve_type_t stp_curve_get_interpolation_type (const stp_curve_t *curve)
     Get the curve interpolation type.
    int stp_curve_set_data (stp_curve_t *curve, size_t count, const double *data)
     Set all data points of the curve.
    int stp_curve_set_data_points (stp_curve_t *curve, size_t count, const stp_curve_point_t *data)
     Set all data points of the curve.
    int stp_curve_set_float_data (stp_curve_t *curve, size_t count, const float *data)
     Set the data points in a curve from float values.
    int stp_curve_set_long_data (stp_curve_t *curve, size_t count, const long *data)
     Set the data points in a curve from long values.
    int stp_curve_set_ulong_data (stp_curve_t *curve, size_t count, const unsigned long *data)
     Set the data points in a curve from unsigned long values.
    int stp_curve_set_int_data (stp_curve_t *curve, size_t count, const int *data)
     Set the data points in a curve from integer values.
    int stp_curve_set_uint_data (stp_curve_t *curve, size_t count, const unsigned int *data)
     Set the data points in a curve from unsigned integer values.
    int stp_curve_set_short_data (stp_curve_t *curve, size_t count, const short *data)
     Set the data points in a curve from short values.
    int stp_curve_set_ushort_data (stp_curve_t *curve, size_t count, const unsigned short *data)
     Set the data points in a curve from unsigned short values.
    stp_curve_tstp_curve_get_subrange (const stp_curve_t *curve, size_t start, size_t count)
     Get a curve containing a subrange of data.
    int stp_curve_set_subrange (stp_curve_t *curve, const stp_curve_t *range, size_t start)
    const double * stp_curve_get_data (const stp_curve_t *curve, size_t *count)
     Get a pointer to the curve's raw data.
    const stp_curve_point_tstp_curve_get_data_points (const stp_curve_t *curve, size_t *count)
     Get a pointer to the curve's raw data as points.
    const float * stp_curve_get_float_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as floats.
    const long * stp_curve_get_long_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as longs.
    const unsigned long * stp_curve_get_ulong_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as unsigned longs.
    const int * stp_curve_get_int_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as integers.
    const unsigned int * stp_curve_get_uint_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as unsigned integers.
    const short * stp_curve_get_short_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as shorts.
    const unsigned short * stp_curve_get_ushort_data (const stp_curve_t *curve, size_t *count)
     Get pointer to the curve's raw data as unsigned shorts.
    const stp_sequence_tstp_curve_get_sequence (const stp_curve_t *curve)
     Get the underlying stp_sequence_t data structure which stp_curve_t is derived from.
    int stp_curve_set_gamma (stp_curve_t *curve, double f_gamma)
     Set the gamma of a curve.
    double stp_curve_get_gamma (const stp_curve_t *curve)
     Get the gamma value of the curve.
    int stp_curve_set_point (stp_curve_t *curve, size_t where, double data)
     Set a point along the curve.
    int stp_curve_get_point (const stp_curve_t *curve, size_t where, double *data)
     Get a point along the curve.
    int stp_curve_interpolate_value (const stp_curve_t *curve, double where, double *result)
     Interpolate a point along the curve.
    int stp_curve_resample (stp_curve_t *curve, size_t points)
     Resample a curve (change the number of points).
    int stp_curve_rescale (stp_curve_t *curve, double scale, stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode)
     Rescale a curve (multiply all points by a scaling constant).
    int stp_curve_write (FILE *file, const stp_curve_t *curve)
     Write a curve to a file.
    char * stp_curve_write_string (const stp_curve_t *curve)
     Write a curve to a string.
    stp_curve_tstp_curve_create_from_stream (FILE *fp)
     Create a curve from a stream.
    stp_curve_tstp_curve_create_from_file (const char *file)
     Create a curve from a stream.
    stp_curve_tstp_curve_create_from_string (const char *string)
     Create a curve from a string.
    int stp_curve_compose (stp_curve_t **retval, stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points)
     Compose two curves, creating a third curve.
    +

    Detailed Description

    +The curve type models a linear, spline or gamma curve. +

    +curve "inherits" from the sequence data structure (implemented via containment), since the curve data is represented internally as a sequence of numbers, for linear and spline curves. Linear Piecewise Curves (LPCs) should be implemented in the future which represent a curve in a more compact format.

    +Various operations are supported, including interpolation and composition.


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_curve stp_curve_t
    +
    + + + + + +
    +   + + +

    +The curve opaque data type. +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_curve_bounds_t
    +
    + + + + + +
    +   + + +

    +Behaviour when curve exceeds bounds. +

    +

    Enumerator:
    + + + + +
    STP_CURVE_BOUNDS_RESCALE  +Rescale the bounds.
    STP_CURVE_BOUNDS_CLIP  +Clip the curve to the existing bounds.
    STP_CURVE_BOUNDS_ERROR  +Error if bounds are violated.
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_curve_compose_t
    +
    + + + + + +
    +   + + +

    +Composition types. +

    +

    Enumerator:
    + + + + +
    STP_CURVE_COMPOSE_ADD  +Add composition.
    STP_CURVE_COMPOSE_MULTIPLY  +Multiply composition.
    STP_CURVE_COMPOSE_EXPONENTIATE  +Exponentiate composition.
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_curve_type_t
    +
    + + + + + +
    +   + + +

    +Curve types. +

    +

    Enumerator:
    + + + +
    STP_CURVE_TYPE_LINEAR  +Linear interpolation.
    STP_CURVE_TYPE_SPLINE  +Spline interpolation.
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_curve_wrap_mode_t
    +
    + + + + + +
    +   + + +

    +Wrapping mode. +

    +

    Enumerator:
    + + + +
    STP_CURVE_WRAP_NONE  +The curve does not wrap.
    STP_CURVE_WRAP_AROUND  +The curve wraps to its starting point.
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_compose stp_curve_t **  retval,
    stp_curve_t a,
    stp_curve_t b,
    stp_curve_compose_t  mode,
    int  points
    +
    + + + + + +
    +   + + +

    +Compose two curves, creating a third curve. +

    +Only add and multiply composition is currently supported. If both curves are gamma curves with the same sign, and the operation is multiplication or division, the returned curve is a gamma curve with the appropriate number of points. Both a and b must have the same wraparound type.

    Parameters:
    + + + + + + +
    retval a pointer to store the location of the newly-created output curve in.
    a the first source curve.
    b the second source curve.
    mode the composition mode.
    points the number of points in the output curve (must not exceed 1048576). It must be at least two, unless the curve is a gamma curve and the operation chosen is multiplication or division. If -1, the resulting number of points will be the least common multiplier of the number of points in the input and output curves (but will not exceed 1048576).
    +
    +
    Returns:
    FALSE if element-wise composition fails.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_curve_copy stp_curve_t dest,
    const stp_curve_t source
    +
    + + + + + +
    +   + + +

    +Copy an curve. +

    +Both dest and source must be valid curves previously created with stp_curve_create().

    Parameters:
    + + + +
    dest the destination curve.
    source the source curve.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    size_t stp_curve_count_points const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Get the number of allocated points in the curve. +

    +

    Parameters:
    + + +
    curve the curve to use.
    +
    +
    Returns:
    the number of points.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_create stp_curve_wrap_mode_t  wrap  ) 
    +
    + + + + + +
    +   + + +

    +Create a new curve. +

    +Curves have y=lower..upper. The default bounds are 0..1. The default interpolation type is linear. There are no points allocated, and the gamma is defaulted to 1. The curve is a dense (equally-spaced) curve.

    +A wrapped curve has the same value at x=0 and x=1. The wrap mode of a curve cannot be changed except by routines that destroy the old curve entirely (e. g. stp_curve_copy, stp_curve_read).

    Parameters:
    + + +
    wrap the wrap mode of the curve.
    +
    +
    Returns:
    the newly created curve.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_create_copy const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Copy and allocate an curve. +

    +dest will be created, and then the contents of source will be copied into it. dest must not have been previously allocated with stp_curve_create().

    Parameters:
    + + +
    curve the source curve.
    +
    +
    Returns:
    the new copy of the curve.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_create_from_file const char *  file  ) 
    +
    + + + + + +
    +   + + +

    +Create a curve from a stream. +

    +

    Warning:
    NOTE that these calls are not thread-safe! These routines may manipulate the locale to achieve a safe representation.
    +
    Parameters:
    + + +
    file the file to read.
    +
    +
    Returns:
    the newly created curve, or NULL if an error occured.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_create_from_stream FILE *  fp  ) 
    +
    + + + + + +
    +   + + +

    +Create a curve from a stream. +

    +

    Warning:
    NOTE that these calls are not thread-safe! These routines may manipulate the locale to achieve a safe representation.
    +
    Parameters:
    + + +
    fp the stream to read.
    +
    +
    Returns:
    the newly created curve, or NULL if an error occured.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_create_from_string const char *  string  ) 
    +
    + + + + + +
    +   + + +

    +Create a curve from a string. +

    +

    Warning:
    NOTE that these calls are not thread-safe! These routines may manipulate the locale to achieve a safe representation.
    +
    Parameters:
    + + +
    string the string to read.
    +
    +
    Returns:
    the newly created curve, or NULL if an error occured.
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_curve_destroy stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Destroy an curve. +

    +It is an error to destroy the curve more than once.

    Parameters:
    + + +
    curve the curve to destroy.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_curve_get_bounds const stp_curve_t curve,
    double *  low,
    double *  high
    +
    + + + + + +
    +   + + +

    +Get the lower and upper bounds on a curve. +

    +

    Parameters:
    + + + + +
    curve the curve to use.
    low a pointer to a double to store the lower bound in.
    high a pointer to a double to store the upper bound in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const double* stp_curve_get_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get a pointer to the curve's raw data. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This call also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_curve_point_t* stp_curve_get_data_points const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get a pointer to the curve's raw data as points. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This call also returns NULL if the curve is a dense (equally-spaced) curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const float* stp_curve_get_float_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as floats. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + +
    double stp_curve_get_gamma const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Get the gamma value of the curve. +

    +

    Returns:
    the gamma value. A value of 0 indicates that the curve does not have a valid gamma value.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const int* stp_curve_get_int_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as integers. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_type_t stp_curve_get_interpolation_type const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Get the curve interpolation type. +

    +

    Parameters:
    + + +
    curve the curve to use.
    +
    +
    Returns:
    the interpolation type.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const long* stp_curve_get_long_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as longs. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_get_point const stp_curve_t curve,
    size_t  where,
    double *  data
    +
    + + + + + +
    +   + + +

    +Get a point along the curve. +

    +

    Parameters:
    + + + + +
    curve the curve to use.
    where the point to get.
    data a pointer to a double to store the value of where in.
    +
    +
    Returns:
    FALSE if where is outside of the number of valid points. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_curve_get_range const stp_curve_t curve,
    double *  low,
    double *  high
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_sequence_t* stp_curve_get_sequence const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Get the underlying stp_sequence_t data structure which stp_curve_t is derived from. +

    +This can be used for fast access to the raw data.

    Parameters:
    + + +
    curve the curve to use.
    +
    +
    Returns:
    the stp_sequence_t. If the curve is a piecewise curve, the sequence returned is NULL;
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const short* stp_curve_get_short_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as shorts. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_curve_t* stp_curve_get_subrange const stp_curve_t curve,
    size_t  start,
    size_t  count
    +
    + + + + + +
    +   + + +

    +Get a curve containing a subrange of data. +

    +If the start or count is invalid, the returned curve will compare equal to NULL (i. e. it will be a null pointer). start and count must not exceed the number of points in the curve, and count must be at least 2. The curve must be a dense (equally-spaced) curve

    Parameters:
    + + + + +
    curve the curve to use.
    start the start of the subrange.
    count the number of point starting at start.
    +
    +
    Returns:
    a curve containing the subrange. The returned curve is non-wrapping.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const unsigned int* stp_curve_get_uint_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as unsigned integers. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const unsigned long* stp_curve_get_ulong_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as unsigned longs. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const unsigned short* stp_curve_get_ushort_data const stp_curve_t curve,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get pointer to the curve's raw data as unsigned shorts. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    count a pointer to a size_t to store the curve size in.
    +
    +
    Returns:
    a pointer to the curve data. This data is not guaranteed to be valid beyond the next non-const curve call. If the curve is a pure gamma curve (no associated points), NULL is returned and the count is 0. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_curve_wrap_mode_t stp_curve_get_wrap const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Get the wrapping mode. +

    +

    Parameters:
    + + +
    curve the curve to use.
    +
    +
    Returns:
    the wrapping mode.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_interpolate_value const stp_curve_t curve,
    double  where,
    double *  result
    +
    + + + + + +
    +   + + +

    +Interpolate a point along the curve. +

    +

    Parameters:
    + + + + +
    curve the curve to use.
    where the point to interpolate.
    result a pointer to double to store the value of where in. If interpolation would produce a value outside of the allowed range (as could happen with spline interpolation), the value is clipped to the range.
    +
    +
    Returns:
    FALSE if 'where' is less than 0 or greater than the number of points, an error is returned. Also returns FALSE if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_curve_is_piecewise const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Determine whether the curve is piecewise. +

    +

    Parameters:
    + + +
    curve the curve to use.
    +
    +
    Returns:
    whether the curve is piecewise
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_curve_resample stp_curve_t curve,
    size_t  points
    +
    + + + + + +
    +   + + +

    +Resample a curve (change the number of points). +

    +This does not destroy the gamma value of a curve. Points are interpolated as required; any interpolation that would place points outside of the bounds of the curve will be clipped to the bounds. The resulting curve is always dense (equally-spaced). This is the correct way to convert a piecewise curve to an equally-spaced curve.

    Parameters:
    + + + +
    curve the curve to use (must not exceed 1048576).
    points the number of points.
    +
    +
    Returns:
    FALSE if the number of points is invalid (less than two, except that zero points is permitted for a gamma curve).
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_rescale stp_curve_t curve,
    double  scale,
    stp_curve_compose_t  mode,
    stp_curve_bounds_t  bounds_mode
    +
    + + + + + +
    +   + + +

    +Rescale a curve (multiply all points by a scaling constant). +

    +This also rescales the bounds. Note that this currently destroys the gamma property of the curve.

    Parameters:
    + + + + + +
    curve the curve to use.
    scale the scaling factor.
    mode the composition mode.
    bounds_mode the bounds exceeding mode.
    +
    +
    Returns:
    FALSE if this would exceed floating point limits
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_bounds stp_curve_t curve,
    double  low,
    double  high
    +
    + + + + + +
    +   + + +

    +Set the lower and upper bounds on a curve. +

    +To change the bounds adjusting data as required, use stp_curve_rescale instead.

    Parameters:
    + + + + +
    curve the curve to use.
    low the lower bound.
    high the upper bound.
    +
    +
    Returns:
    FALSE if any existing points on the curve are outside the bounds.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_data stp_curve_t curve,
    size_t  count,
    const double *  data
    +
    + + + + + +
    +   + + +

    +Set all data points of the curve. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of doubles (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_data_points stp_curve_t curve,
    size_t  count,
    const stp_curve_point_t data
    +
    + + + + + +
    +   + + +

    +Set all data points of the curve. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a piecewise curve.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of points (must be at least count in size). The first point must have X=0, and each point must have an X value at least .000001 greater than the previous point. If the curve is not a wraparound curve, the last point must have X=1.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_float_data stp_curve_t curve,
    size_t  count,
    const float *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from float values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of floats (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_gamma stp_curve_t curve,
    double  f_gamma
    +
    + + + + + +
    +   + + +

    +Set the gamma of a curve. +

    +This replaces all existing points along the curve. The bounds are set to 0..1. If the gamma value is positive, the function is increasing; if negative, the function is decreasing. Count must be either 0 or at least 2. If the count is zero, the gamma of the curve is set for interpolation purposes, but points cannot be assigned to. It is illegal to set gamma on a wrap-mode curve. The resulting curve is treated as a dense (equally-spaced) curve.

    Parameters:
    + + + +
    curve the curve to use.
    f_gamma the gamma value to set.
    +
    +
    Returns:
    FALSE if the gamma value is illegal (0, infinity, or NaN), or if the curve wraps around.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_int_data stp_curve_t curve,
    size_t  count,
    const int *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from integer values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of integers (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_interpolation_type stp_curve_t curve,
    stp_curve_type_t  itype
    +
    + + + + + +
    +   + + +

    +Set the curve interpolation type. +

    +

    Parameters:
    + + + +
    curve the curve to use.
    itype the interpolation type.
    +
    +
    Returns:
    1 on success, or 0 if itype is invalid.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_long_data stp_curve_t curve,
    size_t  count,
    const long *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from long values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of longs (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_point stp_curve_t curve,
    size_t  where,
    double  data
    +
    + + + + + +
    +   + + +

    +Set a point along the curve. +

    +This call destroys any gamma value assigned to the curve.

    Parameters:
    + + + + +
    curve the curve to use.
    where the point to set.
    data the value to set where to.
    +
    +
    Returns:
    FALSE if data is outside the valid bounds or if where is outside the number of valid points. This also returns NULL if the curve is a piecewise curve.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_short_data stp_curve_t curve,
    size_t  count,
    const short *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from short values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of shorts (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_subrange stp_curve_t curve,
    const stp_curve_t range,
    size_t  start
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_uint_data stp_curve_t curve,
    size_t  count,
    const unsigned int *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from unsigned integer values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of unsigned integers (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_ulong_data stp_curve_t curve,
    size_t  count,
    const unsigned long *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from unsigned long values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of unsigned longs (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_curve_set_ushort_data stp_curve_t curve,
    size_t  count,
    const unsigned short *  data
    +
    + + + + + +
    +   + + +

    +Set the data points in a curve from unsigned short values. +

    +If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned. This creates a curve with equally-spaced points.

    Parameters:
    + + + + +
    curve the curve to use.
    count the number of the number of points (must be at least two and not more than 1048576).
    data a pointer to an array of unsigned shorts (must be at least count in size).
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_curve_write FILE *  file,
    const stp_curve_t curve
    +
    + + + + + +
    +   + + +

    +Write a curve to a file. +

    +The printable representation is guaranteed to contain only 7-bit printable ASCII characters, and is null-terminated. The curve will not contain any space, newline, single quote, or comma characters. Furthermore, a printed curve will be read back correctly in all locales. These calls are not guaranteed to provide more than 6 decimal places of precision or +/-0.5e-6 accuracy, whichever is less.

    Warning:
    NOTE that these calls are not thread-safe! These routines may manipulate the locale to achieve a safe representation.
    +
    Parameters:
    + + + +
    file the file to write.
    curve the curve to use.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    char* stp_curve_write_string const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +Write a curve to a string. +

    +The printable representation is guaranteed to contain only 7-bit printable ASCII characters, and is null-terminated. The curve will not contain any space, newline, or comma characters. Furthermore, a printed curve will be read back correctly in all locales. These calls are not guaranteed to provide more than 6 decimal places of precision or +/-0.5e-6 accuracy, whichever is less.

    Warning:
    NOTE that these calls are not thread-safe! These routines may manipulate the locale to achieve a safe representation.
    +
    Parameters:
    + + +
    curve the curve to use.
    +
    +
    Returns:
    a pointer to a string. This is allocated on the heap, and it is the caller's responsibility to free it.
    +
    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__image.html b/doc/gutenprint/html/group__image.html new file mode 100644 index 0000000..99cb917 --- /dev/null +++ b/doc/gutenprint/html/group__image.html @@ -0,0 +1,353 @@ + + +libgutenprint API Reference: image + + + + +

    image

    The image type is an abstract data type for interfacing with the image creation program. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_image
     The image type is an abstract data type for interfacing with the image creation program. More...

    Defines

    #define STP_CHANNEL_LIMIT   (32)

    Typedefs

    typedef stp_image stp_image_t
     The image type is an abstract data type for interfacing with the image creation program.

    Enumerations

    enum  stp_image_status_t { STP_IMAGE_STATUS_OK, +STP_IMAGE_STATUS_ABORT + }
     Image status. More...

    Functions

    void stp_image_init (stp_image_t *image)
    void stp_image_reset (stp_image_t *image)
    int stp_image_width (stp_image_t *image)
    int stp_image_height (stp_image_t *image)
    stp_image_status_t stp_image_get_row (stp_image_t *image, unsigned char *data, size_t limit, int row)
    const char * stp_image_get_appname (stp_image_t *image)
    void stp_image_conclude (stp_image_t *image)
    +

    Detailed Description

    +The image type is an abstract data type for interfacing with the image creation program. +

    +


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_CHANNEL_LIMIT   (32)
    +
    + + + + + +
    +   + + +

    +The maximum number of channels.

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_image stp_image_t
    +
    + + + + + +
    +   + + +

    +The image type is an abstract data type for interfacing with the image creation program. +

    +It provides callbacks to functions defined within the client application which are called while printing the image.

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_image_status_t
    +
    + + + + + +
    +   + + +

    +Image status. +

    +

    Enumerator:
    + + + +
    STP_IMAGE_STATUS_OK  +Everything is OK.
    STP_IMAGE_STATUS_ABORT  +An error occured, or the job was aborted.
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    void stp_image_conclude stp_image_t image  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stp_image_get_appname stp_image_t image  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_image_status_t stp_image_get_row stp_image_t image,
    unsigned char *  data,
    size_t  limit,
    int  row
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_image_height stp_image_t image  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_image_init stp_image_t image  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_image_reset stp_image_t image  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_image_width stp_image_t image  ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__intl.html b/doc/gutenprint/html/group__intl.html new file mode 100644 index 0000000..f650ade --- /dev/null +++ b/doc/gutenprint/html/group__intl.html @@ -0,0 +1,243 @@ + + +libgutenprint API Reference: intl + + + + +

    intl

    Internationalisation functions are used to localise Gimp-Print by translating strings into the user's native language. +More... + + + + + + + + + + + + + + + + +

    Defines

    #define textdomain(String)   (String)
    #define gettext(String)   (String)
    #define dgettext(Domain, Message)   (Message)
    #define dcgettext(Domain, Message, Type)   (Message)
    #define bindtextdomain(Domain, Directory)   (Domain)
    #define _(String)   (String)
    #define N_(String)   (String)
    +

    Detailed Description

    +Internationalisation functions are used to localise Gimp-Print by translating strings into the user's native language. +

    +The macros defined in this header are convenience wrappers around the gettext functions provided by libintl library (or directly by libc on GNU systems).


    Define Documentation

    +

    + + + + +
    + + + + + + + + + +
    #define _ String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + +
    #define bindtextdomain Domain,
    Directory   )    (Domain)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + +
    #define dcgettext Domain,
    Message,
    Type   )    (Message)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + +
    #define dgettext Domain,
    Message   )    (Message)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define gettext String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define N_ String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define textdomain String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__intl__internal.html b/doc/gutenprint/html/group__intl__internal.html new file mode 100644 index 0000000..44e56ad --- /dev/null +++ b/doc/gutenprint/html/group__intl__internal.html @@ -0,0 +1,243 @@ + + +libgutenprint API Reference: intl-internal + + + + +

    intl-internal

    Internationalisation functions are used to localise Gimp-Print by translating strings into the user's native language. +More... + + + + + + + + + + + + + + + + +

    Defines

    #define textdomain(String)   (String)
    #define gettext(String)   (String)
    #define dgettext(Domain, Message)   (Message)
    #define dcgettext(Domain, Message, Type)   (Message)
    #define bindtextdomain(Domain, Directory)   (Domain)
    #define _(String)   (String)
    #define N_(String)   (String)
    +

    Detailed Description

    +Internationalisation functions are used to localise Gimp-Print by translating strings into the user's native language. +

    +The macros defined in this header are convenience wrappers around the gettext functions provided by libintl library (or directly by libc on GNU systems). They differ from the normal intl functions in that the textdomain is fixed, for use by functions internal to Gimp-Print. This header should not be included by source files outside the gimp-print source tree.


    Define Documentation

    +

    + + + + +
    + + + + + + + + + +
    #define _ String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + +
    #define bindtextdomain Domain,
    Directory   )    (Domain)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + +
    #define dcgettext Domain,
    Message,
    Type   )    (Message)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + +
    #define dgettext Domain,
    Message   )    (Message)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define gettext String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define N_ String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define textdomain String   )    (String)
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__list.html b/doc/gutenprint/html/group__list.html new file mode 100644 index 0000000..7571931 --- /dev/null +++ b/doc/gutenprint/html/group__list.html @@ -0,0 +1,1312 @@ + + +libgutenprint API Reference: list + + + + +

    list

    The list data type implements a fast generic doubly-linked list. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef stp_list_item stp_list_item_t
     The list item opaque data type.
    typedef stp_list stp_list_t
     The list opaque data type.
    typedef void(* stp_node_freefunc )(void *)
     A callback function to free the data a node contains.
    typedef void *(* stp_node_copyfunc )(const void *)
     A callback function to copy the data a node contains.
    typedef const char *(* stp_node_namefunc )(const void *)
     A callback function to get the name of a node.
    typedef int(* stp_node_sortfunc )(const void *, const void *)
     A callback function to compare two nodes.

    Functions

    void stp_list_node_free_data (void *item)
     Free node data allocated with stp_malloc.
    stp_list_tstp_list_create (void)
     Create a new list object.
    stp_list_tstp_list_copy (const stp_list_t *list)
     Copy and allocate a list object.
    int stp_list_destroy (stp_list_t *list)
     Destroy a list object.
    stp_list_item_tstp_list_get_start (const stp_list_t *list)
     Find the first item in a list.
    stp_list_item_tstp_list_get_end (const stp_list_t *list)
     Find the last item in a list.
    stp_list_item_tstp_list_get_item_by_index (const stp_list_t *list, int idx)
     Find an item in a list by its index.
    stp_list_item_tstp_list_get_item_by_name (const stp_list_t *list, const char *name)
     Find an item in a list by its name.
    stp_list_item_tstp_list_get_item_by_long_name (const stp_list_t *list, const char *long_name)
     Find an item in a list by its long name.
    int stp_list_get_length (const stp_list_t *list)
     Get the length of a list.
    void stp_list_set_freefunc (stp_list_t *list, stp_node_freefunc freefunc)
     Set a list node free function.
    stp_node_freefunc stp_list_get_freefunc (const stp_list_t *list)
     Get a list node free function.
    void stp_list_set_copyfunc (stp_list_t *list, stp_node_copyfunc copyfunc)
     Set a list node copy function.
    stp_node_copyfunc stp_list_get_copyfunc (const stp_list_t *list)
     Get a list node copy function.
    void stp_list_set_namefunc (stp_list_t *list, stp_node_namefunc namefunc)
     Set a list node name function.
    stp_node_namefunc stp_list_get_namefunc (const stp_list_t *list)
     Get a list node name function.
    void stp_list_set_long_namefunc (stp_list_t *list, stp_node_namefunc long_namefunc)
     Set a list node long name function.
    stp_node_namefunc stp_list_get_long_namefunc (const stp_list_t *list)
     Get a list node long name function.
    void stp_list_set_sortfunc (stp_list_t *list, stp_node_sortfunc sortfunc)
     Set a list node sort function.
    stp_node_sortfunc stp_list_get_sortfunc (const stp_list_t *list)
     Get a list node sort function.
    int stp_list_item_create (stp_list_t *list, stp_list_item_t *next, const void *data)
     Create a new list item.
    int stp_list_item_destroy (stp_list_t *list, stp_list_item_t *item)
     Destroy a list item.
    stp_list_item_tstp_list_item_prev (const stp_list_item_t *item)
     Get the previous item in the list.
    stp_list_item_tstp_list_item_next (const stp_list_item_t *item)
     Get the next item in the list.
    void * stp_list_item_get_data (const stp_list_item_t *item)
     Get the data associated with a list item.
    int stp_list_item_set_data (stp_list_item_t *item, void *data)
     Set the data associated with a list item.
    +

    Detailed Description

    +The list data type implements a fast generic doubly-linked list. +

    +It supports all of the operations you might want in a list (insert, remove, iterate over the list, copy whole lists), plus some (optional) less common features: finding items by index, name or long name, and sorting. These should also be fairly fast, due to caching in the list head.


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_list_item stp_list_item_t
    +
    + + + + + +
    +   + + +

    +The list item opaque data type. +

    +This object is a node in the list.

    +

    + + + + +
    + + + + +
    typedef struct stp_list stp_list_t
    +
    + + + + + +
    +   + + +

    +The list opaque data type. +

    +This object represents the list as a whole.

    +

    + + + + +
    + + + + +
    typedef void*(* stp_node_copyfunc)(const void *)
    +
    + + + + + +
    +   + + +

    +A callback function to copy the data a node contains. +

    +The parameter is a pointer to the node data. The return value is a pointer to the new copy of the data.

    +

    + + + + +
    + + + + +
    typedef void(* stp_node_freefunc)(void *)
    +
    + + + + + +
    +   + + +

    +A callback function to free the data a node contains. +

    +The parameter is a pointer to the node data.

    +

    + + + + +
    + + + + +
    typedef const char*(* stp_node_namefunc)(const void *)
    +
    + + + + + +
    +   + + +

    +A callback function to get the name of a node. +

    +The parameter is a pointer to the node data. The return value is a pointer to the name of the node, or NULL if there is no name.

    +

    + + + + +
    + + + + +
    typedef int(* stp_node_sortfunc)(const void *, const void *)
    +
    + + + + + +
    +   + + +

    +A callback function to compare two nodes. +

    +The two parameters are pointers to node data. The return value is <0 if the first sorts before the second, 0 if they sort identically, and >0 if the first sorts after the second.

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    stp_list_t* stp_list_copy const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Copy and allocate a list object. +

    +list must be a valid list object previously created with stp_list_create().

    Parameters:
    + + +
    list the list to copy.
    +
    +
    Returns:
    a pointer to the new copy of the list.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_list_t* stp_list_create void   ) 
    +
    + + + + + +
    +   + + +

    +Create a new list object. +

    +

    Returns:
    the newly created list object.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_list_destroy stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Destroy a list object. +

    +It is an error to destroy the list more than once.

    Parameters:
    + + +
    list the list to destroy.
    +
    +
    Returns:
    0 on success, 1 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_node_copyfunc stp_list_get_copyfunc const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Get a list node copy function. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    the function previously set with stp_list_set_copyfunc, or NULL if no function has been set.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_list_item_t* stp_list_get_end const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Find the last item in a list. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    a pointer to the last list item, or NULL if the list is empty.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_node_freefunc stp_list_get_freefunc const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Get a list node free function. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    the function previously set with stp_list_set_freefunc, or NULL if no function has been set.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_list_item_t* stp_list_get_item_by_index const stp_list_t list,
    int  idx
    +
    + + + + + +
    +   + + +

    +Find an item in a list by its index. +

    +

    Parameters:
    + + + +
    list the list to use.
    idx the index to find.
    +
    +
    Returns:
    a pointer to the list item, or NULL if the index is invalid or the list is empty.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_list_item_t* stp_list_get_item_by_long_name const stp_list_t list,
    const char *  long_name
    +
    + + + + + +
    +   + + +

    +Find an item in a list by its long name. +

    +

    Parameters:
    + + + +
    list the list to use.
    long_name the long name to find.
    +
    +
    Returns:
    a pointer to the list item, or NULL if the long name is invalid or the list is empty.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_list_item_t* stp_list_get_item_by_name const stp_list_t list,
    const char *  name
    +
    + + + + + +
    +   + + +

    +Find an item in a list by its name. +

    +

    Parameters:
    + + + +
    list the list to use.
    name the name to find.
    +
    +
    Returns:
    a pointer to the list item, or NULL if the name is invalid or the list is empty.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_list_get_length const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Get the length of a list. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    the list length (number of list items).
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_node_namefunc stp_list_get_long_namefunc const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Get a list node long name function. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    the function previously set with stp_list_set_long_namefunc, or NULL if no function has been set.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_node_namefunc stp_list_get_namefunc const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Get a list node name function. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    the function previously set with stp_list_set_namefunc, or NULL if no function has been set.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_node_sortfunc stp_list_get_sortfunc const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Get a list node sort function. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    the function previously set with stp_list_set_sortfunc, or NULL if no function has been set.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_list_item_t* stp_list_get_start const stp_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +Find the first item in a list. +

    +

    Parameters:
    + + +
    list the list to use.
    +
    +
    Returns:
    a pointer to the first list item, or NULL if the list is empty.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_list_item_create stp_list_t list,
    stp_list_item_t next,
    const void *  data
    +
    + + + + + +
    +   + + +

    +Create a new list item. +

    +

    Parameters:
    + + + + +
    list the list to use.
    next the next item in the list, or NULL to insert at the end of the list.
    data the data the list item will contain.
    +
    +
    Returns:
    0 on success, 1 on failure (if data is NULL, for example).
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_list_item_destroy stp_list_t list,
    stp_list_item_t item
    +
    + + + + + +
    +   + + +

    +Destroy a list item. +

    +

    Parameters:
    + + + +
    list the list to use.
    item the item to destroy.
    +
    +
    Returns:
    0 on success, 1 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    void* stp_list_item_get_data const stp_list_item_t item  ) 
    +
    + + + + + +
    +   + + +

    +Get the data associated with a list item. +

    +

    Parameters:
    + + +
    item the list item to use.
    +
    +
    Returns:
    the data associated with item.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_list_item_t* stp_list_item_next const stp_list_item_t item  ) 
    +
    + + + + + +
    +   + + +

    +Get the next item in the list. +

    +

    Parameters:
    + + +
    item the item to start from.
    +
    +
    Returns:
    a pointer to the list item following from item, or NULL if item is the end of the list.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_list_item_t* stp_list_item_prev const stp_list_item_t item  ) 
    +
    + + + + + +
    +   + + +

    +Get the previous item in the list. +

    +

    Parameters:
    + + +
    item the item to start from.
    +
    +
    Returns:
    a pointer to the list item prior to item, or NULL if item is the start of the list.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_list_item_set_data stp_list_item_t item,
    void *  data
    +
    + + + + + +
    +   + + +

    +Set the data associated with a list item. +

    +

    Warning:
    Note that if a sortfunc is in use, changing the data will NOT re-sort the list!
    +
    Parameters:
    + + + +
    item the list item to use.
    data the data to set.
    +
    +
    Returns:
    0 on success, 1 on failure (if data is NULL).
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_list_node_free_data void *  item  ) 
    +
    + + + + + +
    +   + + +

    +Free node data allocated with stp_malloc. +

    +This function is indended for use as an stp_node_freefunc, which uses stp_free to free the node data.

    Parameters:
    + + +
    item the node data to free
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_list_set_copyfunc stp_list_t list,
    stp_node_copyfunc  copyfunc
    +
    + + + + + +
    +   + + +

    +Set a list node copy function. +

    +This callback function will be called whenever a list item is copied. Its intended use is for automatic object copying (since C lacks a copy constructor).

    Parameters:
    + + + +
    list the list to use.
    copyfunc the function to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_list_set_freefunc stp_list_t list,
    stp_node_freefunc  freefunc
    +
    + + + + + +
    +   + + +

    +Set a list node free function. +

    +This callback function will be called whenever a list item is destroyed. Its intended use is for automatic object destruction and any other cleanup required.

    Parameters:
    + + + +
    list the list to use.
    freefunc the function to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_list_set_long_namefunc stp_list_t list,
    stp_node_namefunc  long_namefunc
    +
    + + + + + +
    +   + + +

    +Set a list node long name function. +

    +This callback function will be called whenever the long name of a list item needs to be determined. This is used to find list items by long name.

    Parameters:
    + + + +
    list the list to use.
    long_namefunc the function to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_list_set_namefunc stp_list_t list,
    stp_node_namefunc  namefunc
    +
    + + + + + +
    +   + + +

    +Set a list node name function. +

    +This callback function will be called whenever the name of a list item needs to be determined. This is used to find list items by name.

    Parameters:
    + + + +
    list the list to use.
    namefunc the function to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_list_set_sortfunc stp_list_t list,
    stp_node_sortfunc  sortfunc
    +
    + + + + + +
    +   + + +

    +Set a list node sort function. +

    +This callback function will be called to determine the sort order for list items in sorted lists.

    Parameters:
    + + + +
    list the list to use.
    sortfunc the function to set.
    +
    +
    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__papersize.html b/doc/gutenprint/html/group__papersize.html new file mode 100644 index 0000000..f8c424f --- /dev/null +++ b/doc/gutenprint/html/group__papersize.html @@ -0,0 +1,277 @@ + + +libgutenprint API Reference: papersize + + + + +

    papersize

    The papersize describes the dimensions of a paper. +More... + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_papersize_t
     The papersize data type. More...

    Enumerations

    enum  stp_papersize_unit_t { PAPERSIZE_ENGLISH_STANDARD, +PAPERSIZE_METRIC_STANDARD, +PAPERSIZE_ENGLISH_EXTENDED, +PAPERSIZE_METRIC_EXTENDED + }
     Units of measurement. More...

    Functions

    int stp_known_papersizes (void)
     Get the number of available papersizes.
    const stp_papersize_tstp_get_papersize_by_name (const char *name)
     Get a papersize by name.
    const stp_papersize_tstp_get_papersize_by_size (int length, int width)
     Get a papersize by size.
    const stp_papersize_tstp_get_papersize_by_index (int idx)
     Get a papersize by its index number.
    void stp_default_media_size (const stp_vars_t *v, int *width, int *height)
    +

    Detailed Description

    +The papersize describes the dimensions of a paper. +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_papersize_unit_t
    +
    + + + + + +
    +   + + +

    +Units of measurement. +

    +

    Enumerator:
    + + + + + +
    PAPERSIZE_ENGLISH_STANDARD  +English/Imperial units.
    PAPERSIZE_METRIC_STANDARD  +Metric units.
    PAPERSIZE_ENGLISH_EXTENDED  +English/Imperial units (optional paper, not displayed by default).
    PAPERSIZE_METRIC_EXTENDED  +Metric units (optional paper, not displayed by default).
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_default_media_size const stp_vars_t v,
    int *  width,
    int *  height
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_papersize_t* stp_get_papersize_by_index int  idx  ) 
    +
    + + + + + +
    +   + + +

    +Get a papersize by its index number. +

    +

    Parameters:
    + + +
    idx the index number. This must not be greater than (total number of papers - 1).
    +
    +
    Returns:
    a pointer to the papersize, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    const stp_papersize_t* stp_get_papersize_by_name const char *  name  ) 
    +
    + + + + + +
    +   + + +

    +Get a papersize by name. +

    +

    Parameters:
    + + +
    name the short unique name of the paper.
    +
    +
    Returns:
    a pointer to the papersize, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_papersize_t* stp_get_papersize_by_size int  length,
    int  width
    +
    + + + + + +
    +   + + +

    +Get a papersize by size. +

    +The nearest available size to the size requested will be found.

    Parameters:
    + + + +
    length the length of the paper.
    width the width of the paper
    +
    +
    Returns:
    a pointer to the papersize, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_known_papersizes void   ) 
    +
    + + + + + +
    +   + + +

    +Get the number of available papersizes. +

    +

    Returns:
    the number of papersizes.
    +
    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__printer.html b/doc/gutenprint/html/group__printer.html new file mode 100644 index 0000000..4337c79 --- /dev/null +++ b/doc/gutenprint/html/group__printer.html @@ -0,0 +1,997 @@ + + +libgutenprint API Reference: printer + + + + +

    printer

    The printer type represents a printer model. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_printfuncs_t
    struct  stp_family

    Typedefs

    typedef stp_printer stp_printer_t
     The printer opaque data type (representation of printer model).
    typedef stp_family stp_family_t

    Functions

    int stp_printer_model_count (void)
     Get the number of available printer models.
    const stp_printer_tstp_get_printer_by_index (int idx)
     Get a printer model by its index number.
    const stp_printer_tstp_get_printer_by_long_name (const char *long_name)
     Get a printer model by its long (translated) name.
    const stp_printer_tstp_get_printer_by_driver (const char *driver)
     Get a printer model by its short name.
    const stp_printer_tstp_get_printer (const stp_vars_t *v)
     Get the printer model from a vars object.
    int stp_get_printer_index_by_driver (const char *driver)
     Get the printer index number from the printer model short (driver) name.
    const char * stp_printer_get_long_name (const stp_printer_t *p)
     Get a printer model's long (translated) name.
    const char * stp_printer_get_driver (const stp_printer_t *p)
     Get a printer model's short (driver) name.
    const char * stp_printer_get_family (const stp_printer_t *p)
     Get a printer model's family name.
    const char * stp_printer_get_manufacturer (const stp_printer_t *p)
     Get a printer model's manufacturer's name.
    int stp_printer_get_model (const stp_printer_t *p)
     Get a printer model's model number.
    const stp_vars_tstp_printer_get_defaults (const stp_printer_t *p)
     Get the default vars for a particular printer model.
    void stp_set_printer_defaults (stp_vars_t *v, const stp_printer_t *p)
     Set a vars object to use a particular driver, and set the parameter to its defaults.
    int stp_print (const stp_vars_t *v, stp_image_t *image)
     Print the image.
    int stp_start_job (const stp_vars_t *v, stp_image_t *image)
     Start a print job.
    int stp_end_job (const stp_vars_t *v, stp_image_t *image)
     End a print job.
    int stp_get_model_id (const stp_vars_t *v)
    int stp_verify_printer_params (stp_vars_t *v)
    int stp_family_register (stp_list_t *family)
    int stp_family_unregister (stp_list_t *family)
    void stp_initialize_printer_defaults (void)
    stp_parameter_list_t stp_printer_list_parameters (const stp_vars_t *v)
    void stp_printer_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
    const char * stp_describe_output (const stp_vars_t *v)
    +

    Detailed Description

    +The printer type represents a printer model. +

    +A particular printer model must selected in order to be able to print. Each printer model provides default print options through a default vars object.


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_family stp_family_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_printer stp_printer_t
    +
    + + + + + +
    +   + + +

    +The printer opaque data type (representation of printer model). +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    const char* stp_describe_output const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_end_job const stp_vars_t v,
    stp_image_t image
    +
    + + + + + +
    +   + + +

    +End a print job. +

    +

    Parameters:
    + + + +
    v the vars to use.
    image the image to print.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_family_register stp_list_t family  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_family_unregister stp_list_t family  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_get_model_id const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_printer_t* stp_get_printer const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the printer model from a vars object. +

    +

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    a pointer to the printer model, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    const stp_printer_t* stp_get_printer_by_driver const char *  driver  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model by its short name. +

    +

    Parameters:
    + + +
    driver the printer model's short (driver) name.
    +
    +
    Returns:
    a pointer to the printer model, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    const stp_printer_t* stp_get_printer_by_index int  idx  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model by its index number. +

    +

    Parameters:
    + + +
    idx the index number. This must not be greater than (total number of printers - 1).
    +
    +
    Returns:
    a pointer to the printer model, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    const stp_printer_t* stp_get_printer_by_long_name const char *  long_name  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model by its long (translated) name. +

    +

    Parameters:
    + + +
    long_name the printer model's long (translated) name.
    +
    +
    Returns:
    a pointer to the printer model, or NULL on failure. The pointer should not be freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_printer_index_by_driver const char *  driver  ) 
    +
    + + + + + +
    +   + + +

    +Get the printer index number from the printer model short (driver) name. +

    +

    Deprecated:
    There should never be any need to use this function.
    +
    Parameters:
    + + +
    driver the printer model's short (driver) name.
    +
    +
    Returns:
    the index number, or -1 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_initialize_printer_defaults void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_print const stp_vars_t v,
    stp_image_t image
    +
    + + + + + +
    +   + + +

    +Print the image. +

    +

    Warning:
    stp_job_start() must be called prior to the first call to this function.
    +
    Parameters:
    + + + +
    v the vars to use.
    image the image to print.
    +
    +
    Returns:
    0 on failure, 1 on success, 2 on abort requested by the driver.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_printer_describe_parameter const stp_vars_t v,
    const char *  name,
    stp_parameter_t description
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_vars_t* stp_printer_get_defaults const stp_printer_t p  ) 
    +
    + + + + + +
    +   + + +

    +Get the default vars for a particular printer model. +

    +The default vars should be copied to a new vars object and customised prior to printing.

    Parameters:
    + + +
    p the printer model to use.
    +
    +
    Returns:
    the printer model's default vars.
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_printer_get_driver const stp_printer_t p  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model's short (driver) name. +

    +

    Parameters:
    + + +
    p the printer model to use.
    +
    +
    Returns:
    the short name (should never be freed).
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_printer_get_family const stp_printer_t p  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model's family name. +

    +The family name is the name of the modular "family" driver this model uses.

    Parameters:
    + + +
    p the printer model to use.
    +
    +
    Returns:
    the family name (should never be freed).
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_printer_get_long_name const stp_printer_t p  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model's long (translated) name. +

    +

    Parameters:
    + + +
    p the printer model to use.
    +
    +
    Returns:
    the long name (should never be freed).
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_printer_get_manufacturer const stp_printer_t p  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model's manufacturer's name. +

    +

    Parameters:
    + + +
    p the printer model to use.
    +
    +
    Returns:
    the manufacturer's name (should never be freed).
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_printer_get_model const stp_printer_t p  ) 
    +
    + + + + + +
    +   + + +

    +Get a printer model's model number. +

    +The model number is used internally by the "family" driver module, and has no meaning out of that context. It bears no relation to the model name/number actually found on the printer itself.

    Parameters:
    + + +
    p the printer model to use.
    +
    +
    Returns:
    the model number.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_parameter_list_t stp_printer_list_parameters const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_printer_model_count void   ) 
    +
    + + + + + +
    +   + + +

    +Get the number of available printer models. +

    +

    Returns:
    the number of printer models.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_printer_defaults stp_vars_t v,
    const stp_printer_t p
    +
    + + + + + +
    +   + + +

    +Set a vars object to use a particular driver, and set the parameter to its defaults. +

    +

    Parameters:
    + + + +
    v the vars to use.
    p the printer model to use.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_start_job const stp_vars_t v,
    stp_image_t image
    +
    + + + + + +
    +   + + +

    +Start a print job. +

    +

    Warning:
    This function must be called prior to the first call to stp_print().
    +
    Parameters:
    + + + +
    v the vars to use.
    image the image to print.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_verify_printer_params stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__sequence.html b/doc/gutenprint/html/group__sequence.html new file mode 100644 index 0000000..be7fade --- /dev/null +++ b/doc/gutenprint/html/group__sequence.html @@ -0,0 +1,1484 @@ + + +libgutenprint API Reference: sequence + + + + +

    sequence

    The sequence is a simple "vector of numbers" data structure. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef stp_sequence stp_sequence_t
     The sequence opaque data type.

    Functions

    stp_sequence_tstp_sequence_create (void)
     Create a new sequence.
    void stp_sequence_destroy (stp_sequence_t *sequence)
     Destroy a sequence.
    void stp_sequence_copy (stp_sequence_t *dest, const stp_sequence_t *source)
     Copy an sequence.
    stp_sequence_tstp_sequence_create_copy (const stp_sequence_t *sequence)
     Copy and allocate an sequence.
    int stp_sequence_set_bounds (stp_sequence_t *sequence, double low, double high)
     Set the lower and upper bounds.
    void stp_sequence_get_bounds (const stp_sequence_t *sequence, double *low, double *high)
     Get the lower and upper bounds.
    void stp_sequence_get_range (const stp_sequence_t *sequence, double *low, double *high)
     Get range of values stored in the sequence.
    int stp_sequence_set_size (stp_sequence_t *sequence, size_t size)
     Set the sequence size.
    size_t stp_sequence_get_size (const stp_sequence_t *sequence)
     Get the sequence size.
    int stp_sequence_set_data (stp_sequence_t *sequence, size_t count, const double *data)
     Set the data in a sequence.
    int stp_sequence_set_subrange (stp_sequence_t *sequence, size_t where, size_t size, const double *data)
     Set the data in a subrange of a sequence.
    void stp_sequence_get_data (const stp_sequence_t *sequence, size_t *size, const double **data)
     Get the data in a sequence.
    int stp_sequence_set_point (stp_sequence_t *sequence, size_t where, double data)
     Set the data at a single point in a sequence.
    int stp_sequence_get_point (const stp_sequence_t *sequence, size_t where, double *data)
     Get the data at a single point in a sequence.
    int stp_sequence_set_float_data (stp_sequence_t *sequence, size_t count, const float *data)
     Set the data in a sequence from float values.
    int stp_sequence_set_long_data (stp_sequence_t *sequence, size_t count, const long *data)
     Set the data in a sequence from long values.
    int stp_sequence_set_ulong_data (stp_sequence_t *sequence, size_t count, const unsigned long *data)
     Set the data in a sequence from unsigned long values.
    int stp_sequence_set_int_data (stp_sequence_t *sequence, size_t count, const int *data)
     Set the data in a sequence from int values.
    int stp_sequence_set_uint_data (stp_sequence_t *sequence, size_t count, const unsigned int *data)
     Set the data in a sequence from unsigned int values.
    int stp_sequence_set_short_data (stp_sequence_t *sequence, size_t count, const short *data)
     Set the data in a sequence from short values.
    int stp_sequence_set_ushort_data (stp_sequence_t *sequence, size_t count, const unsigned short *data)
     Set the data in a sequence from unsigned short values.
    const float * stp_sequence_get_float_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as float data.
    const long * stp_sequence_get_long_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as long data.
    const unsigned long * stp_sequence_get_ulong_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as unsigned long data.
    const int * stp_sequence_get_int_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as int data.
    const unsigned int * stp_sequence_get_uint_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as unsigned int data.
    const short * stp_sequence_get_short_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as short data.
    const unsigned short * stp_sequence_get_ushort_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as unsigned short data.
    +

    Detailed Description

    +The sequence is a simple "vector of numbers" data structure. +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_sequence stp_sequence_t
    +
    + + + + + +
    +   + + +

    +The sequence opaque data type. +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_sequence_copy stp_sequence_t dest,
    const stp_sequence_t source
    +
    + + + + + +
    +   + + +

    +Copy an sequence. +

    +Both dest and source must be valid sequences previously created with stp_sequence_create().

    Parameters:
    + + + +
    dest the destination sequence.
    source the source sequence.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_sequence_t* stp_sequence_create void   ) 
    +
    + + + + + +
    +   + + +

    +Create a new sequence. +

    +

    Returns:
    the newly created sequence.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_sequence_t* stp_sequence_create_copy const stp_sequence_t sequence  ) 
    +
    + + + + + +
    +   + + +

    +Copy and allocate an sequence. +

    +A new sequence will be created, and then the contents of source will be copied into it. The destination must not have been previously allocated with stp_sequence_create().

    Parameters:
    + + +
    sequence the source sequence.
    +
    +
    Returns:
    the new copy of the sequence.
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_sequence_destroy stp_sequence_t sequence  ) 
    +
    + + + + + +
    +   + + +

    +Destroy a sequence. +

    +It is an error to destroy the sequence more than once.

    Parameters:
    + + +
    sequence the sequence to destroy.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_sequence_get_bounds const stp_sequence_t sequence,
    double *  low,
    double *  high
    +
    + + + + + +
    +   + + +

    +Get the lower and upper bounds. +

    +The values are stored in the variables pointed to by low and high.

    Parameters:
    + + + + +
    sequence the sequence to work on.
    low a pointer to a double to store the low bound in.
    high a pointer to a double to store the high bound in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_sequence_get_data const stp_sequence_t sequence,
    size_t *  size,
    const double **  data
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence. +

    +

    Parameters:
    + + + + +
    sequence the sequence to get the data from.
    size the number of elements in the sequence are stored in the size_t pointed to.
    data a pointer to the first element of an sequence of doubles is stored in a pointer to double*.
     stp_sequence_t *sequence;
    + size_t size;
    + double *data;
    + stp_sequence_get_data(sequence, &size, &data);
    +
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const float* stp_sequence_get_float_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as float data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of floats is stored in a pointer to float*.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const int* stp_sequence_get_int_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as int data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of ints is stored in a pointer to int*.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const long* stp_sequence_get_long_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as long data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of longs is stored in a pointer to long*.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_get_point const stp_sequence_t sequence,
    size_t  where,
    double *  data
    +
    + + + + + +
    +   + + +

    +Get the data at a single point in a sequence. +

    +

    Parameters:
    + + + + +
    sequence the sequence to use.
    where the location (indexed from zero).
    data the datum is stored in the double pointed to.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_sequence_get_range const stp_sequence_t sequence,
    double *  low,
    double *  high
    +
    + + + + + +
    +   + + +

    +Get range of values stored in the sequence. +

    +The values are stored in the variables pointed to by low and high.

    Parameters:
    + + + + +
    sequence the sequence to work on.
    low a pointer to a double to store the low bound in.
    high a pointer to a double to store the high bound in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const short* stp_sequence_get_short_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as short data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of shorts is stored in a pointer to short*.
    +
    +

    + + + + +
    + + + + + + + + + +
    size_t stp_sequence_get_size const stp_sequence_t sequence  ) 
    +
    + + + + + +
    +   + + +

    +Get the sequence size. +

    +

    Returns:
    the sequence size.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const unsigned int* stp_sequence_get_uint_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as unsigned int data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of unsigned ints is stored in a pointer to unsigned int*.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const unsigned long* stp_sequence_get_ulong_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as unsigned long data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of unsigned longs is stored in a pointer to unsigned long*.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const unsigned short* stp_sequence_get_ushort_data const stp_sequence_t sequence,
    size_t *  count
    +
    + + + + + +
    +   + + +

    +Get the data in a sequence as unsigned short data. +

    +The pointer returned is owned by the curve, and is not guaranteed to be valid beyond the next non-const curve call; If the bounds of the curve exceed the limits of the data type, NULL is returned.

    Parameters:
    + + + +
    sequence the sequence to get the data from.
    count the number of elements in the sequence are stored in the size_t pointed to.
    +
    +
    Returns:
    a pointer to the first element of an sequence of unsigned shorts is stored in a pointer to unsigned short*.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_bounds stp_sequence_t sequence,
    double  low,
    double  high
    +
    + + + + + +
    +   + + +

    +Set the lower and upper bounds. +

    +The lower and upper bounds set the minimum and maximum values that a point in the sequence may hold.

    Parameters:
    + + + + +
    sequence the sequence to work on.
    low the lower bound.
    high the upper bound.
    +
    +
    Returns:
    1 on success, or 0 if the lower bound is greater than the upper bound.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_data stp_sequence_t sequence,
    size_t  count,
    const double *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_float_data stp_sequence_t sequence,
    size_t  count,
    const float *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from float values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_int_data stp_sequence_t sequence,
    size_t  count,
    const int *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from int values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_long_data stp_sequence_t sequence,
    size_t  count,
    const long *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from long values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_point stp_sequence_t sequence,
    size_t  where,
    double  data
    +
    + + + + + +
    +   + + +

    +Set the data at a single point in a sequence. +

    +

    Parameters:
    + + + + +
    sequence the sequence to use.
    where the location (indexed from zero).
    data the datum to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_short_data stp_sequence_t sequence,
    size_t  count,
    const short *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from short values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_size stp_sequence_t sequence,
    size_t  size
    +
    + + + + + +
    +   + + +

    +Set the sequence size. +

    +The size is the number of elements the sequence contains. Note that resizing will destroy all data contained in the sequence.

    Parameters:
    + + + +
    sequence the sequence to work on.
    size the size to set the sequence to.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_subrange stp_sequence_t sequence,
    size_t  where,
    size_t  size,
    const double *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a subrange of a sequence. +

    +

    Parameters:
    + + + + + +
    sequence the sequence to set.
    where the starting element in the sequence (indexed from 0).
    size the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_uint_data stp_sequence_t sequence,
    size_t  count,
    const unsigned int *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from unsigned int values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_ulong_data stp_sequence_t sequence,
    size_t  count,
    const unsigned long *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from unsigned long values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_sequence_set_ushort_data stp_sequence_t sequence,
    size_t  count,
    const unsigned short *  data
    +
    + + + + + +
    +   + + +

    +Set the data in a sequence from unsigned short values. +

    +

    Parameters:
    + + + + +
    sequence the sequence to set.
    count the number of elements in the data.
    data a pointer to the first member of a sequence containing the data to set.
    +
    +
    Returns:
    1 on success, 0 on failure.
    +
    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__util.html b/doc/gutenprint/html/group__util.html new file mode 100644 index 0000000..6f80d0a --- /dev/null +++ b/doc/gutenprint/html/group__util.html @@ -0,0 +1,1835 @@ + + +libgutenprint API Reference: util + + + + +

    util

    Utility functions. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Defines

    #define STP_DBG_LUT   0x1
    #define STP_DBG_COLORFUNC   0x2
    #define STP_DBG_INK   0x4
    #define STP_DBG_PS   0x8
    #define STP_DBG_PCL   0x10
    #define STP_DBG_ESCP2   0x20
    #define STP_DBG_CANON   0x40
    #define STP_DBG_LEXMARK   0x80
    #define STP_DBG_WEAVE_PARAMS   0x100
    #define STP_DBG_ROWS   0x200
    #define STP_DBG_MARK_FILE   0x400
    #define STP_DBG_LIST   0x800
    #define STP_DBG_MODULE   0x1000
    #define STP_DBG_PATH   0x2000
    #define STP_DBG_PAPER   0x4000
    #define STP_DBG_PRINTERS   0x8000
    #define STP_DBG_XML   0x10000
    #define STP_DBG_VARS   0x20000
    #define STP_DBG_OLYMPUS   0x40000
    #define STP_DBG_CURVE   0x80000
    #define STP_DBG_CURVE_ERRORS   0x100000
    #define STP_SAFE_FREE(x)

    Functions

    int stp_init (void)
     Initialise libgimpprint.
    const char * stp_set_output_codeset (const char *codeset)
     Set the output encoding.
    stp_curve_tstp_read_and_compose_curves (const char *s1, const char *s2, stp_curve_compose_t comp, size_t piecewise_point_count)
    void stp_abort (void)
    void stp_prune_inactive_options (stp_vars_t *v)
    void stp_zprintf (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__
    void void stp_zfwrite (const char *buf, size_t bytes, size_t nitems, const stp_vars_t *v)
    void stp_putc (int ch, const stp_vars_t *v)
    void stp_put16_le (unsigned short sh, const stp_vars_t *v)
    void stp_put16_be (unsigned short sh, const stp_vars_t *v)
    void stp_put32_le (unsigned int sh, const stp_vars_t *v)
    void stp_put32_be (unsigned int sh, const stp_vars_t *v)
    void stp_puts (const char *s, const stp_vars_t *v)
    void stp_send_command (const stp_vars_t *v, const char *command, const char *format,...)
    void stp_erputc (int ch)
    void stp_eprintf (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__
    void void stp_erprintf (const char *format,...) __attribute__((format(__printf__
    void void void stp_asprintf (char **strp, const char *format,...) __attribute__((format(__printf__
    void void void void stp_catprintf (char **strp, const char *format,...) __attribute__((format(__printf__
    unsigned long stp_get_debug_level (void)
    void stp_dprintf (unsigned long level, const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__
    void void stp_deprintf (unsigned long level, const char *format,...) __attribute__((format(__printf__
    void void void stp_init_debug_messages (stp_vars_t *v)
    void stp_flush_debug_messages (stp_vars_t *v)
    void * stp_malloc (size_t)
    void * stp_zalloc (size_t)
    void * stp_realloc (void *ptr, size_t)
    void stp_free (void *ptr)
    size_t stp_strlen (const char *s)
    char * stp_strndup (const char *s, int n)
    char * stp_strdup (const char *s)
    const char * stp_get_version (void)
     Get the library version string (x.y.z).
    const char * stp_get_release_version (void)
     Get the library release version string (x.y).
    +

    Detailed Description

    +Utility functions. +

    +


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_DBG_CANON   0x40
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_COLORFUNC   0x2
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_CURVE   0x80000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_CURVE_ERRORS   0x100000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_ESCP2   0x20
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_INK   0x4
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_LEXMARK   0x80
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_LIST   0x800
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_LUT   0x1
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_MARK_FILE   0x400
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_MODULE   0x1000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_OLYMPUS   0x40000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_PAPER   0x4000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_PATH   0x2000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_PCL   0x10
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_PRINTERS   0x8000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_PS   0x8
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_ROWS   0x200
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_VARS   0x20000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_WEAVE_PARAMS   0x100
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_DBG_XML   0x10000
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STP_SAFE_FREE  ) 
    +
    + + + + + +
    +   + + +

    +Value:

    do                                              \
    +{                                               \
    +  if ((x))                                      \
    +    stp_free((char *)(x));                      \
    +  ((x)) = NULL;                                 \
    +} while (0)
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    void stp_abort void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void void void stp_asprintf char **  strp,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void void void void stp_catprintf char **  strp,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void void stp_deprintf unsigned long  level,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_dprintf unsigned long  level,
    const stp_vars_t v,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_eprintf const stp_vars_t v,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void void stp_erprintf const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_erputc int  ch  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_flush_debug_messages stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_free void *  ptr  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    unsigned long stp_get_debug_level void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stp_get_release_version void   ) 
    +
    + + + + + +
    +   + + +

    +Get the library release version string (x.y). +

    +

    Returns:
    a pointer to the release name of the package, which must not be modified or freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_get_version void   ) 
    +
    + + + + + +
    +   + + +

    +Get the library version string (x.y.z). +

    +

    Returns:
    a pointer to the version name of the package, which must not be modified or freed.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_init void   ) 
    +
    + + + + + +
    +   + + +

    +Initialise libgimpprint. +

    +This function must be called prior to any other use of the library. It is responsible for loading modules and XML data and initialising internal data structures.

    Returns:
    0 on success, 1 on failure.
    +
    +

    + + + + +
    + + + + + + + + + +
    void void void stp_init_debug_messages stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void* stp_malloc size_t   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_prune_inactive_options stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_put16_be unsigned short  sh,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_put16_le unsigned short  sh,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_put32_be unsigned int  sh,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_put32_le unsigned int  sh,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_putc int  ch,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_puts const char *  s,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_curve_t* stp_read_and_compose_curves const char *  s1,
    const char *  s2,
    stp_curve_compose_t  comp,
    size_t  piecewise_point_count
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void* stp_realloc void *  ptr,
    size_t 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_send_command const stp_vars_t v,
    const char *  command,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stp_set_output_codeset const char *  codeset  ) 
    +
    + + + + + +
    +   + + +

    +Set the output encoding. +

    +This function sets the encoding that all strings translated by gettext are output in. It is a wrapper around the gettext bind_textdomain_codeset() function.

    Parameters:
    + + +
    codeset the standard name of the encoding, which must be usable with iconv_open(). For example, "US-ASCII" or "UTF-8". If NULL, the currently-selected codeset will be returned (or NULL if no codeset has been selected yet).
    +
    +
    Returns:
    a string containing the selected codeset, or NULL on failure (errno is set accordingly).
    +
    +

    + + + + +
    + + + + + + + + + +
    char* stp_strdup const char *  s  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    size_t stp_strlen const char *  s  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    char* stp_strndup const char *  s,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void* stp_zalloc size_t   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void void stp_zfwrite const char *  buf,
    size_t  bytes,
    size_t  nitems,
    const stp_vars_t v
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_zprintf const stp_vars_t v,
    const char *  format,
      ...
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__vars.html b/doc/gutenprint/html/group__vars.html new file mode 100644 index 0000000..468533e --- /dev/null +++ b/doc/gutenprint/html/group__vars.html @@ -0,0 +1,6594 @@ + + +libgutenprint API Reference: vars + + + + +

    vars

    The vars data type contains all the information about a print job, this includes information such as the printer model, paper size, print resolution etc. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_raw_t
     Raw parameter. More...
    struct  stp_double_bound_t
     double_bound (range) parameter. More...
    struct  stp_int_bound_t
     int_bound (range) parameter. More...
    struct  stp_parameter_t
     Parameter description. More...

    Typedefs

    typedef stp_vars stp_vars_t
     The vars opaque data type.
    typedef void * stp_parameter_list_t
     The parameter_list opaque data type.
    typedef const void * stp_const_parameter_list_t
     The constant parameter_list opaque data type.
    typedef void(* stp_outfunc_t )(void *data, const char *buffer, size_t bytes)
     Output function supplied by the calling application.
    typedef void *(* stp_copy_data_func_t )(void *)
    typedef void(* stp_free_data_func_t )(void *)
    typedef stp_compdata compdata_t

    Enumerations

    enum  stp_parameter_type_t {
    +  STP_PARAMETER_TYPE_STRING_LIST, +STP_PARAMETER_TYPE_INT, +STP_PARAMETER_TYPE_BOOLEAN, +STP_PARAMETER_TYPE_DOUBLE, +
    +  STP_PARAMETER_TYPE_CURVE, +STP_PARAMETER_TYPE_FILE, +STP_PARAMETER_TYPE_RAW, +STP_PARAMETER_TYPE_ARRAY, +
    +  STP_PARAMETER_TYPE_DIMENSION, +STP_PARAMETER_TYPE_INVALID +
    + }
     Parameter types. More...
    enum  stp_parameter_class_t { STP_PARAMETER_CLASS_FEATURE, +STP_PARAMETER_CLASS_OUTPUT, +STP_PARAMETER_CLASS_CORE, +STP_PARAMETER_CLASS_INVALID + }
     Parameter class. More...
    enum  stp_parameter_level_t {
    +  STP_PARAMETER_LEVEL_BASIC, +STP_PARAMETER_LEVEL_ADVANCED, +STP_PARAMETER_LEVEL_ADVANCED1, +STP_PARAMETER_LEVEL_ADVANCED2, +
    +  STP_PARAMETER_LEVEL_ADVANCED3, +STP_PARAMETER_LEVEL_ADVANCED4, +STP_PARAMETER_LEVEL_INTERNAL, +STP_PARAMETER_LEVEL_EXTERNAL, +
    +  STP_PARAMETER_LEVEL_INVALID +
    + }
     Parameter level. More...
    enum  stp_parameter_activity_t { STP_PARAMETER_INACTIVE, +STP_PARAMETER_DEFAULTED, +STP_PARAMETER_ACTIVE + }
     Parameter activity. More...
    enum  stp_parameter_verify_t { PARAMETER_BAD, +PARAMETER_OK, +PARAMETER_INACTIVE + }

    Functions

    stp_vars_tstp_vars_create (void)
     Create a new vars object.
    void stp_vars_copy (stp_vars_t *dest, const stp_vars_t *source)
     Copy a vars object.
    stp_vars_tstp_vars_create_copy (const stp_vars_t *source)
     Copy and allocate a vars object.
    void stp_vars_destroy (stp_vars_t *v)
     Destroy a vars object.
    void stp_set_driver (stp_vars_t *v, const char *val)
     Set the name of the printer driver.
    void stp_set_driver_n (stp_vars_t *v, const char *val, int bytes)
     Set the name of the printer driver.
    const char * stp_get_driver (const stp_vars_t *v)
     Get the name of the printer driver.
    void stp_set_color_conversion (stp_vars_t *v, const char *val)
     Set the name of the color conversion routine, if not the default.
    void stp_set_color_conversion_n (stp_vars_t *v, const char *val, int bytes)
     Set the name of the color conversion routine, if not the default.
    const char * stp_get_color_conversion (const stp_vars_t *v)
     Get the name of the color conversion routine.
    void stp_set_left (stp_vars_t *v, int val)
     Set the left edge of the image.
    int stp_get_left (const stp_vars_t *v)
     Get the left edge of the image.
    void stp_set_top (stp_vars_t *v, int val)
     Set the top edge of the image.
    int stp_get_top (const stp_vars_t *v)
     Get the top edge of the image.
    void stp_set_width (stp_vars_t *v, int val)
     Set the width of the image.
    int stp_get_width (const stp_vars_t *v)
     Get the width edge of the image.
    void stp_set_height (stp_vars_t *v, int val)
     Set the height of the image.
    int stp_get_height (const stp_vars_t *v)
     Get the height of the image.
    void stp_set_page_width (stp_vars_t *v, int val)
     Set the page width.
    int stp_get_page_width (const stp_vars_t *v)
     Get the page width.
    void stp_set_page_height (stp_vars_t *v, int val)
     Set the page height.
    int stp_get_page_height (const stp_vars_t *v)
     Get the page height.
    void stp_set_outfunc (stp_vars_t *v, stp_outfunc_t val)
     Set the function used to print output information.
    stp_outfunc_t stp_get_outfunc (const stp_vars_t *v)
     Get the function used to print output information.
    void stp_set_errfunc (stp_vars_t *v, stp_outfunc_t val)
     Set the function used to print error and diagnostic information.
    stp_outfunc_t stp_get_errfunc (const stp_vars_t *v)
     Get the function used to print output information.
    void stp_set_outdata (stp_vars_t *v, void *val)
     Set the output data.
    void * stp_get_outdata (const stp_vars_t *v)
     Get the output data.
    void stp_set_errdata (stp_vars_t *v, void *val)
     Set the error data.
    void * stp_get_errdata (const stp_vars_t *v)
     Get the error data.
    void stp_merge_printvars (stp_vars_t *user, const stp_vars_t *print)
     Merge defaults for a printer with user-chosen settings.
    stp_parameter_list_t stp_get_parameter_list (const stp_vars_t *v)
     List the available parameters for the currently chosen settings.
    size_t stp_parameter_list_count (stp_const_parameter_list_t list)
     List the number of available parameters for the currently chosen settings.
    const stp_parameter_tstp_parameter_find (stp_const_parameter_list_t list, const char *name)
     Find a parameter by its name.
    const stp_parameter_tstp_parameter_list_param (stp_const_parameter_list_t list, size_t item)
     Find a parameter by its index number.
    void stp_parameter_list_destroy (stp_parameter_list_t list)
     Destroy a parameter_list.
    stp_parameter_list_t stp_parameter_list_create (void)
     Create a parameter_list.
    void stp_parameter_list_add_param (stp_parameter_list_t list, const stp_parameter_t *item)
     Add a parameter to a parameter_list.
    stp_parameter_list_t stp_parameter_list_copy (stp_const_parameter_list_t list)
     Copy and allocate a parameter_list.
    void stp_parameter_list_append (stp_parameter_list_t list, stp_const_parameter_list_t append)
     Append one parameter_list to another.
    void stp_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
     Describe a parameter in detail.
    void stp_parameter_description_destroy (stp_parameter_t *description)
     Destroy a parameter description.
    const stp_parameter_tstp_parameter_find_in_settings (const stp_vars_t *v, const char *name)
     Find a parameter by its name from a vars object.
    void stp_set_string_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a string parameter.
    void stp_set_string_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a string parameter.
    void stp_set_file_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a file parameter.
    void stp_set_file_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a file parameter.
    void stp_set_float_parameter (stp_vars_t *v, const char *parameter, double value)
     Set a float parameter.
    void stp_set_int_parameter (stp_vars_t *v, const char *parameter, int value)
     Set an integer parameter.
    void stp_set_dimension_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a dimension parameter.
    void stp_set_boolean_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a boolean parameter.
    void stp_set_curve_parameter (stp_vars_t *v, const char *parameter, const stp_curve_t *value)
     Set a curve parameter.
    void stp_set_array_parameter (stp_vars_t *v, const char *parameter, const stp_array_t *value)
     Set an array parameter.
    void stp_set_raw_parameter (stp_vars_t *v, const char *parameter, const void *value, size_t bytes)
     Set a raw parameter.
    void stp_scale_float_parameter (stp_vars_t *v, const char *parameter, double scale)
     Multiply the value of a float parameter by a scaling factor.
    void stp_set_default_string_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a default string parameter.
    void stp_set_default_string_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a default string parameter.
    void stp_set_default_file_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a default file parameter.
    void stp_set_default_file_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a default file parameter.
    void stp_set_default_float_parameter (stp_vars_t *v, const char *parameter, double value)
     Set a default float parameter.
    void stp_set_default_int_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a default integer parameter.
    void stp_set_default_dimension_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a default dimension parameter.
    void stp_set_default_boolean_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a default boolean parameter.
    void stp_set_default_curve_parameter (stp_vars_t *v, const char *parameter, const stp_curve_t *value)
     Set a default curve parameter.
    void stp_set_default_array_parameter (stp_vars_t *v, const char *parameter, const stp_array_t *value)
     Set a default array parameter.
    void stp_set_default_raw_parameter (stp_vars_t *v, const char *parameter, const void *value, size_t bytes)
     Set a default raw parameter.
    const char * stp_get_string_parameter (const stp_vars_t *v, const char *parameter)
     Get a string parameter.
    const char * stp_get_file_parameter (const stp_vars_t *v, const char *parameter)
     Get a file parameter.
    double stp_get_float_parameter (const stp_vars_t *v, const char *parameter)
     Get a float parameter.
    int stp_get_int_parameter (const stp_vars_t *v, const char *parameter)
     Get an integer parameter.
    int stp_get_dimension_parameter (const stp_vars_t *v, const char *parameter)
     Get a dimension parameter.
    int stp_get_boolean_parameter (const stp_vars_t *v, const char *parameter)
     Get a boolean parameter.
    const stp_curve_tstp_get_curve_parameter (const stp_vars_t *v, const char *parameter)
     Get a curve parameter.
    const stp_array_tstp_get_array_parameter (const stp_vars_t *v, const char *parameter)
     Get an array parameter.
    const stp_raw_tstp_get_raw_parameter (const stp_vars_t *v, const char *parameter)
     Get a raw parameter.
    void stp_clear_string_parameter (stp_vars_t *v, const char *parameter)
     Clear a string parameter.
    void stp_clear_file_parameter (stp_vars_t *v, const char *parameter)
     Clear a file parameter.
    void stp_clear_float_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) a float parameter.
    void stp_clear_int_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) an integer parameter.
    void stp_clear_dimension_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) a dimension parameter.
    void stp_clear_boolean_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) a boolean parameter.
    void stp_clear_curve_parameter (stp_vars_t *v, const char *parameter)
     Clear a curve parameter.
    void stp_clear_array_parameter (stp_vars_t *v, const char *parameter)
     Clear an array parameter.
    void stp_clear_raw_parameter (stp_vars_t *v, const char *parameter)
     Clear a raw parameter.
    void stp_set_string_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a string parameter.
    void stp_set_file_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a file parameter.
    void stp_set_float_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a float parameter.
    void stp_set_int_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of an integer parameter.
    void stp_set_dimension_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a dimension parameter.
    void stp_set_boolean_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a boolean parameter.
    void stp_set_curve_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a curveparameter.
    void stp_set_array_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of an array parameter.
    void stp_set_raw_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a raw parameter.
    int stp_check_string_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a string parameter is set.
    int stp_check_file_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a file parameter is set.
    int stp_check_float_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a float parameter is set.
    int stp_check_int_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if an integer parameter is set.
    int stp_check_dimension_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a dimension parameter is set.
    int stp_check_boolean_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a boolean parameter is set.
    int stp_check_curve_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a curve parameter is set.
    int stp_check_array_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if an array parameter is set.
    int stp_check_raw_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a raw parameter is set.
    stp_parameter_activity_t stp_get_string_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a string parameter.
    stp_parameter_activity_t stp_get_file_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a file parameter.
    stp_parameter_activity_t stp_get_float_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a float parameter.
    stp_parameter_activity_t stp_get_int_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of an integer parameter.
    stp_parameter_activity_t stp_get_dimension_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a dimension parameter.
    stp_parameter_activity_t stp_get_boolean_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a boolean parameter.
    stp_parameter_activity_t stp_get_curve_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a curve parameter.
    stp_parameter_activity_t stp_get_array_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of an array parameter.
    stp_parameter_activity_t stp_get_raw_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a raw parameter.
    void stp_get_media_size (const stp_vars_t *v, int *width, int *height)
     Get the media (paper) size.
    void stp_get_imageable_area (const stp_vars_t *v, int *left, int *right, int *bottom, int *top)
     Get the imagable area of the page.
    void stp_get_size_limit (const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height)
     Get the media size limits.
    void stp_describe_resolution (const stp_vars_t *v, int *x, int *y)
     Retrieve the printing resolution of the selected resolution.
    int stp_verify (stp_vars_t *v)
     Verify parameters.
    const stp_vars_tstp_default_settings (void)
     Get default global settings.
    void stp_allocate_component_data (stp_vars_t *v, const char *name, stp_copy_data_func_t copyfunc, stp_free_data_func_t freefunc, void *data)
    void stp_destroy_component_data (stp_vars_t *v, const char *name)
    void * stp_get_component_data (const stp_vars_t *v, const char *name)
    stp_parameter_verify_t stp_verify_parameter (const stp_vars_t *v, const char *parameter, int quiet)
    int stp_get_verified (const stp_vars_t *v)
    void stp_set_verified (stp_vars_t *v, int value)
    void stp_copy_options (stp_vars_t *vd, const stp_vars_t *vs)
    void stp_fill_parameter_settings (stp_parameter_t *desc, const stp_parameter_t *param)
    +

    Detailed Description

    +The vars data type contains all the information about a print job, this includes information such as the printer model, paper size, print resolution etc. +

    +Most of these job options are expressed as parameters which vary according to the model and other options selected.

    +The representation of printer settings has changed dramatically from 4.2. All (well most, anyway) settings outside of basics such as the printer model and sizing settings are now typed parameters.


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_compdata compdata_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef const void* stp_const_parameter_list_t
    +
    + + + + + +
    +   + + +

    +The constant parameter_list opaque data type. +

    +

    +

    + + + + +
    + + + + +
    typedef void*(* stp_copy_data_func_t)(void *)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef void(* stp_free_data_func_t)(void *)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef void(* stp_outfunc_t)(void *data, const char *buffer, size_t bytes)
    +
    + + + + + +
    +   + + +

    +Output function supplied by the calling application. +

    +There are two output functions supplied by the caller, one to send output data and one to report errors.

    Parameters:
    + + + + +
    data a pointer to an opaque object owned by the calling application.
    buffer the data to output.
    bytes the size of buffer (in bytes).
    +
    +
    +

    + + + + +
    + + + + +
    typedef void* stp_parameter_list_t
    +
    + + + + + +
    +   + + +

    +The parameter_list opaque data type. +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_vars stp_vars_t
    +
    + + + + + +
    +   + + +

    +The vars opaque data type. +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_parameter_activity_t
    +
    + + + + + +
    +   + + +

    +Parameter activity. +

    +Whether a parameter is currently active (i. e. whether its value should be used by the driver or not). All parameters default to being active unless explicitly "turned off".

    Enumerator:
    + + + + +
    STP_PARAMETER_INACTIVE  +Parameter is inactive (unused).
    STP_PARAMETER_DEFAULTED  +Parameter is set to its default value.
    STP_PARAMETER_ACTIVE  +Parameter is active (used).
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_parameter_class_t
    +
    + + + + + +
    +   + + +

    +Parameter class. +

    +What kind of setting this is, for the purpose of user interface representation.

    Enumerator:
    + + + + + +
    STP_PARAMETER_CLASS_FEATURE  +Printer feature.
    STP_PARAMETER_CLASS_OUTPUT  +Output control.
    STP_PARAMETER_CLASS_CORE  +Core Gimp-Print parameter.
    STP_PARAMETER_CLASS_INVALID  +Invalid class (should never be used).
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_parameter_level_t
    +
    + + + + + +
    +   + + +

    +Parameter level. +

    +What "level" a setting is at, for UI design.

    Enumerator:
    + + + + + + + + + + +
    STP_PARAMETER_LEVEL_BASIC  +Basic parameter, shown by all UIs.
    STP_PARAMETER_LEVEL_ADVANCED  +Advanced parameter, shown by advanced UIs.
    STP_PARAMETER_LEVEL_ADVANCED1  +Advanced1 parameter, shown by advanced UIs.
    STP_PARAMETER_LEVEL_ADVANCED2  +Advanced2 parameter, shown by advanced UIs.
    STP_PARAMETER_LEVEL_ADVANCED3  +Advanced3 parameter, shown by advanced UIs.
    STP_PARAMETER_LEVEL_ADVANCED4  +Advanced4 parameter, shown by advanced UIs.
    STP_PARAMETER_LEVEL_INTERNAL  +Parameters used only within Gimp-Print.
    STP_PARAMETER_LEVEL_EXTERNAL  +Parameters used only outside Gimp-Print.
    STP_PARAMETER_LEVEL_INVALID  +Invalid level (should never be used).
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_parameter_type_t
    +
    + + + + + +
    +   + + +

    +Parameter types. +

    +The following types are permitted for a printer setting. Not all are currently implemented.

    Enumerator:
    + + + + + + + + + + + +
    STP_PARAMETER_TYPE_STRING_LIST  +Single string choice from a list.
    STP_PARAMETER_TYPE_INT  +Integer.
    STP_PARAMETER_TYPE_BOOLEAN  +Boolean.
    STP_PARAMETER_TYPE_DOUBLE  +Floating point number.
    STP_PARAMETER_TYPE_CURVE  +Curve.
    STP_PARAMETER_TYPE_FILE  +Filename (NYI, need to consider security).
    STP_PARAMETER_TYPE_RAW  +Raw, opaque data.
    STP_PARAMETER_TYPE_ARRAY  +Array.
    STP_PARAMETER_TYPE_DIMENSION  +Linear dimension.
    STP_PARAMETER_TYPE_INVALID  +Invalid type (should never be used).
    +
    +
    +

    + + + + +
    + + + + +
    enum stp_parameter_verify_t
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + +
    PARAMETER_BAD  +
    PARAMETER_OK  +
    PARAMETER_INACTIVE  +
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_allocate_component_data stp_vars_t v,
    const char *  name,
    stp_copy_data_func_t  copyfunc,
    stp_free_data_func_t  freefunc,
    void *  data
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_array_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if an array parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_boolean_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a boolean parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_curve_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a curve parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_dimension_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a dimension parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_file_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a file parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_float_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a float parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_int_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if an integer parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_raw_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a raw parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_check_string_parameter const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Check if a string parameter is set. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the minimum activity status.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_array_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear an array parameter. +

    +The parameter is set to NULL.

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_boolean_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear (remove) a boolean parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_curve_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear a curve parameter. +

    +The parameter is set to NULL.

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_dimension_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear (remove) a dimension parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_file_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear a file parameter. +

    +The parameter is set to NULL.

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_float_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear (remove) a float parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_int_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear (remove) an integer parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_raw_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear a raw parameter. +

    +The parameter is set to NULL.

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_clear_string_parameter stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Clear a string parameter. +

    +The parameter is set to NULL.

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_copy_options stp_vars_t vd,
    const stp_vars_t vs
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stp_vars_t* stp_default_settings void   ) 
    +
    + + + + + +
    +   + + +

    +Get default global settings. +

    +The main use of this is to provide a usable stp_vars_t for purposes of parameter inquiry in the absence of a specific printer. This is currently used in a variety of places to get information on the standard color parameters without querying a particular printer.

    Returns:
    the default settings.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_describe_parameter const stp_vars_t v,
    const char *  name,
    stp_parameter_t description
    +
    + + + + + +
    +   + + +

    +Describe a parameter in detail. +

    +All of the parameter fields will be populated.

    Parameters:
    + + + + +
    v the vars to use.
    name the name of the parameter.
    description a pointer to an stp_parameter_t to store the parameter description in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_describe_resolution const stp_vars_t v,
    int *  x,
    int *  y
    +
    + + + + + +
    +   + + +

    +Retrieve the printing resolution of the selected resolution. +

    +If the resolution is invalid, -1 will be returned in both x and y.

    Parameters:
    + + + + +
    v the vars to use.
    x a pointer to a int to store the horizontal resolution in.
    y a pointer to a int to store the vertical resolution in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_destroy_component_data stp_vars_t v,
    const char *  name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_fill_parameter_settings stp_parameter_t desc,
    const stp_parameter_t param
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_array_t* stp_get_array_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get an array parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the array, or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_array_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of an array parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_get_boolean_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a boolean parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the boolean value.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_boolean_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a boolean parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_get_color_conversion const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the name of the color conversion routine. +

    +

    Returns:
    the name of the color conversion routine (must not be freed).
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void* stp_get_component_data const stp_vars_t v,
    const char *  name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_curve_t* stp_get_curve_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a curve parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the curve, or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_curve_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a curve parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_get_dimension_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a dimension parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the dimension (integer) value.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_dimension_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a dimension parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + +
    const char* stp_get_driver const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the name of the printer driver. +

    +

    Returns:
    the name of the printer driver (must not be freed).
    +
    +

    + + + + +
    + + + + + + + + + +
    void* stp_get_errdata const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the error data. +

    +

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    the output data.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_outfunc_t stp_get_errfunc const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the function used to print output information. +

    +

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    the outfunc.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const char* stp_get_file_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a file parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the filename, or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_file_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a file parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    double stp_get_float_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a float parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the float value.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_float_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a float parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_height const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the height of the image. +

    +

    Returns:
    the left edge.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_get_imageable_area const stp_vars_t v,
    int *  left,
    int *  right,
    int *  bottom,
    int *  top
    +
    + + + + + +
    +   + + +

    +Get the imagable area of the page. +

    +Retrieve the boundaries of the printable area of the page. In combination with the media size, this can be used to determine the actual printable region, which callers can use to place the image precisely. The dimensions are relative to the top left of the physical page.

    +If a customizable page size is used (see stp_printer_get_media_size), the actual desired width and/or height must be filled in using stp_set_page_width and/or stp_set_page_height. If these are not filled in, the margins will be returned.

    +Returned values may be negative if a printer is capable of full bleed by printing beyond the physical boundaries of the page.

    +If the media size stored in V is invalid, the return values will be indeterminate. It is up to the user to specify legal values.

    Parameters:
    + + + + + + +
    v the vars to use.
    left a pointer to a int to store the left edge in.
    right a pointer to a int to store the right edge in.
    bottom a pointer to a int to store the bottom edge in.
    top a pointer to a int to store the top edge in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_get_int_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get an integer parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the integer value.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_int_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of an integer parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_left const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the left edge of the image. +

    +

    Returns:
    the left edge.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_get_media_size const stp_vars_t v,
    int *  width,
    int *  height
    +
    + + + + + +
    +   + + +

    +Get the media (paper) size. +

    +Retrieve the media size of the media type set in V, expressed in units of 1/72". If the media size is invalid, width and height will be set to -1. Values of 0 for width or height indicate that the dimension is variable, so that custom page sizes or roll paper can be used. In this case, the size limit should be used to determine maximum and minimum values permitted.

    Parameters:
    + + + + +
    v the vars to use.
    width a pointer to an int to store the media width in.
    height a pointer to an int to store the media height in.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    void* stp_get_outdata const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the output data. +

    +

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    the output data.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_outfunc_t stp_get_outfunc const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the function used to print output information. +

    +

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    the outfunc.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_page_height const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the page height. +

    +

    Returns:
    the page height.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_page_width const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the page width. +

    +

    Returns:
    the page width.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_parameter_list_t stp_get_parameter_list const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +List the available parameters for the currently chosen settings. +

    +This does not fill in the bounds and defaults; it merely provides a list of settings. To fill in detailed information for a setting, use stp_describe_parameter.

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    a list of available parameters (must be freed with stp_parameter_list_destroy()).
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_raw_t* stp_get_raw_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a raw parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the raw data, or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_raw_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a raw parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_get_size_limit const stp_vars_t v,
    int *  max_width,
    int *  max_height,
    int *  min_width,
    int *  min_height
    +
    + + + + + +
    +   + + +

    +Get the media size limits. +

    +Retrieve the minimum and maximum size limits for custom media sizes with the current printer settings.

    Parameters:
    + + + + + + +
    v the vars to use.
    max_width a pointer to a int to store the maximum width in.
    max_height a pointer to a int to store the maximum height in.
    min_width a pointer to a int to store the minimum width in.
    min_height a pointer to a int to store the minimum height in.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const char* stp_get_string_parameter const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get a string parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the string, or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_parameter_activity_t stp_get_string_parameter_active const stp_vars_t v,
    const char *  parameter
    +
    + + + + + +
    +   + + +

    +Get the activity status of a string parameter. +

    +

    Parameters:
    + + + +
    v the vars to use.
    parameter the name of the parameter.
    +
    +
    Returns:
    the activity status.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_top const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the top edge of the image. +

    +

    Returns:
    the left edge.
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_get_verified const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_get_width const stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Get the width edge of the image. +

    +

    Returns:
    the left edge.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_merge_printvars stp_vars_t user,
    const stp_vars_t print
    +
    + + + + + +
    +   + + +

    +Merge defaults for a printer with user-chosen settings. +

    +

    Deprecated:
    This is likely to go away.
    +
    Parameters:
    + + + +
    user the destination vars.
    print the vars to merge into user.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_parameter_description_destroy stp_parameter_t description  ) 
    +
    + + + + + +
    +   + + +

    +Destroy a parameter description. +

    +This must be called even if the stp_parameter_t was not allocated with malloc, since some members are dynamically allocated.

    Parameters:
    + + +
    description the parameter description to destroy.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_parameter_t* stp_parameter_find stp_const_parameter_list_t  list,
    const char *  name
    +
    + + + + + +
    +   + + +

    +Find a parameter by its name. +

    +

    Parameters:
    + + + +
    list the parameter_list to use.
    name the name of the parameter.
    +
    +
    Returns:
    a pointer to the parameter (must not be freed), or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_parameter_t* stp_parameter_find_in_settings const stp_vars_t v,
    const char *  name
    +
    + + + + + +
    +   + + +

    +Find a parameter by its name from a vars object. +

    +

    Parameters:
    + + + +
    v the vars to use.
    name the name of the parameter.
    +
    +
    Returns:
    a pointer to the parameter (must not be freed), or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_parameter_list_add_param stp_parameter_list_t  list,
    const stp_parameter_t item
    +
    + + + + + +
    +   + + +

    +Add a parameter to a parameter_list. +

    +

    Parameters:
    + + + +
    list the parameter_list to use.
    item the parameter to add.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_parameter_list_append stp_parameter_list_t  list,
    stp_const_parameter_list_t  append
    +
    + + + + + +
    +   + + +

    +Append one parameter_list to another. +

    +

    Parameters:
    + + + +
    list the destination list (to append to).
    append the list of paramters to append. Each item that does not already exist in list will be appended.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_parameter_list_t stp_parameter_list_copy stp_const_parameter_list_t  list  ) 
    +
    + + + + + +
    +   + + +

    +Copy and allocate a parameter_list. +

    +A new parameter_list will be created, and then the contents of source will be copied into it.

    Parameters:
    + + +
    list the source parameter_list.
    +
    +
    Returns:
    the new copy of the parameter_list.
    +
    +

    + + + + +
    + + + + + + + + + +
    size_t stp_parameter_list_count stp_const_parameter_list_t  list  ) 
    +
    + + + + + +
    +   + + +

    +List the number of available parameters for the currently chosen settings. +

    +

    Parameters:
    + + +
    list the parameter_list to use.
    +
    +
    Returns:
    the number of parameters.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_parameter_list_t stp_parameter_list_create void   ) 
    +
    + + + + + +
    +   + + +

    +Create a parameter_list. +

    +

    Returns:
    the newly created parameter_list.
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_parameter_list_destroy stp_parameter_list_t  list  ) 
    +
    + + + + + +
    +   + + +

    +Destroy a parameter_list. +

    +It is an error to destroy the parameter_list more than once.

    Parameters:
    + + +
    list the parameter_list to destroy.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_parameter_t* stp_parameter_list_param stp_const_parameter_list_t  list,
    size_t  item
    +
    + + + + + +
    +   + + +

    +Find a parameter by its index number. +

    +

    Parameters:
    + + + +
    list the parameter_list to use.
    item the index number of the parameter (must not be greater than stp_parameter_list_count - 1).
    +
    +
    Returns:
    a pointer to the parameter (must not be freed), or NULL if no parameter was found.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_scale_float_parameter stp_vars_t v,
    const char *  parameter,
    double  scale
    +
    + + + + + +
    +   + + +

    +Multiply the value of a float parameter by a scaling factor. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    scale the factor to multiply the value by.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_array_parameter stp_vars_t v,
    const char *  parameter,
    const stp_array_t value
    +
    + + + + + +
    +   + + +

    +Set an array parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_array_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of an array parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_boolean_parameter stp_vars_t v,
    const char *  parameter,
    int  value
    +
    + + + + + +
    +   + + +

    +Set a boolean parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_boolean_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a boolean parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_color_conversion stp_vars_t v,
    const char *  val
    +
    + + + + + +
    +   + + +

    +Set the name of the color conversion routine, if not the default. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the name to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_color_conversion_n stp_vars_t v,
    const char *  val,
    int  bytes
    +
    + + + + + +
    +   + + +

    +Set the name of the color conversion routine, if not the default. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    val the name to set.
    bytes the length of val (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_curve_parameter stp_vars_t v,
    const char *  parameter,
    const stp_curve_t value
    +
    + + + + + +
    +   + + +

    +Set a curve parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_curve_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a curveparameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_array_parameter stp_vars_t v,
    const char *  parameter,
    const stp_array_t value
    +
    + + + + + +
    +   + + +

    +Set a default array parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_boolean_parameter stp_vars_t v,
    const char *  parameter,
    int  value
    +
    + + + + + +
    +   + + +

    +Set a default boolean parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_curve_parameter stp_vars_t v,
    const char *  parameter,
    const stp_curve_t value
    +
    + + + + + +
    +   + + +

    +Set a default curve parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_dimension_parameter stp_vars_t v,
    const char *  parameter,
    int  value
    +
    + + + + + +
    +   + + +

    +Set a default dimension parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_file_parameter stp_vars_t v,
    const char *  parameter,
    const char *  value
    +
    + + + + + +
    +   + + +

    +Set a default file parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_file_parameter_n stp_vars_t v,
    const char *  parameter,
    const char *  value,
    size_t  bytes
    +
    + + + + + +
    +   + + +

    +Set a default file parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set (must not contain NUL).
    bytes the length of value (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_float_parameter stp_vars_t v,
    const char *  parameter,
    double  value
    +
    + + + + + +
    +   + + +

    +Set a default float parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_int_parameter stp_vars_t v,
    const char *  parameter,
    int  value
    +
    + + + + + +
    +   + + +

    +Set a default integer parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_raw_parameter stp_vars_t v,
    const char *  parameter,
    const void *  value,
    size_t  bytes
    +
    + + + + + +
    +   + + +

    +Set a default raw parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    bytes the length of value (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_string_parameter stp_vars_t v,
    const char *  parameter,
    const char *  value
    +
    + + + + + +
    +   + + +

    +Set a default string parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_default_string_parameter_n stp_vars_t v,
    const char *  parameter,
    const char *  value,
    size_t  bytes
    +
    + + + + + +
    +   + + +

    +Set a default string parameter. +

    +The value is set if the parameter is not already set. This avoids having to check if the parameter is set prior to setting it, if you do not want to override the existing value.

    Parameters:
    + + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set (must not contain NUL).
    bytes the length of value (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_dimension_parameter stp_vars_t v,
    const char *  parameter,
    int  value
    +
    + + + + + +
    +   + + +

    +Set a dimension parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_dimension_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a dimension parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_driver stp_vars_t v,
    const char *  val
    +
    + + + + + +
    +   + + +

    +Set the name of the printer driver. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the name to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_driver_n stp_vars_t v,
    const char *  val,
    int  bytes
    +
    + + + + + +
    +   + + +

    +Set the name of the printer driver. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    val the name to set.
    bytes the length of val (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_errdata stp_vars_t v,
    void *  val
    +
    + + + + + +
    +   + + +

    +Set the error data. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the error data. This will typically be a file descriptor, but it is entirely up to the caller exactly what type this might be.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_errfunc stp_vars_t v,
    stp_outfunc_t  val
    +
    + + + + + +
    +   + + +

    +Set the function used to print error and diagnostic information. +

    +These must be supplied by the caller. errdata is passed as an arguments to errfunc; typically it will be a file descriptor.

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_file_parameter stp_vars_t v,
    const char *  parameter,
    const char *  value
    +
    + + + + + +
    +   + + +

    +Set a file parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_file_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a file parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_file_parameter_n stp_vars_t v,
    const char *  parameter,
    const char *  value,
    size_t  bytes
    +
    + + + + + +
    +   + + +

    +Set a file parameter. +

    +

    Parameters:
    + + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set (must not contain NUL).
    bytes the length of value (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_float_parameter stp_vars_t v,
    const char *  parameter,
    double  value
    +
    + + + + + +
    +   + + +

    +Set a float parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_float_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a float parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_height stp_vars_t v,
    int  val
    +
    + + + + + +
    +   + + +

    +Set the height of the image. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_int_parameter stp_vars_t v,
    const char *  parameter,
    int  value
    +
    + + + + + +
    +   + + +

    +Set an integer parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_int_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of an integer parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_left stp_vars_t v,
    int  val
    +
    + + + + + +
    +   + + +

    +Set the left edge of the image. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_outdata stp_vars_t v,
    void *  val
    +
    + + + + + +
    +   + + +

    +Set the output data. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the output data. This will typically be a file descriptor, but it is entirely up to the caller exactly what type this might be.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_outfunc stp_vars_t v,
    stp_outfunc_t  val
    +
    + + + + + +
    +   + + +

    +Set the function used to print output information. +

    +These must be supplied by the caller. outdata is passed as an arguments to outfunc; typically it will be a file descriptor.

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_page_height stp_vars_t v,
    int  val
    +
    + + + + + +
    +   + + +

    +Set the page height. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_page_width stp_vars_t v,
    int  val
    +
    + + + + + +
    +   + + +

    +Set the page width. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_raw_parameter stp_vars_t v,
    const char *  parameter,
    const void *  value,
    size_t  bytes
    +
    + + + + + +
    +   + + +

    +Set a raw parameter. +

    +

    Parameters:
    + + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    bytes the length of value (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_raw_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a raw parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_string_parameter stp_vars_t v,
    const char *  parameter,
    const char *  value
    +
    + + + + + +
    +   + + +

    +Set a string parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_string_parameter_active const stp_vars_t v,
    const char *  parameter,
    stp_parameter_activity_t  active
    +
    + + + + + +
    +   + + +

    +Set the activity of a string parameter. +

    +

    Parameters:
    + + + + +
    v the vars to use.
    parameter the name of the parameter.
    active the activity status to set (should be set to STP_PARAMETER_ACTIVE or STP_PARAMETER_INACTIVE).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_set_string_parameter_n stp_vars_t v,
    const char *  parameter,
    const char *  value,
    size_t  bytes
    +
    + + + + + +
    +   + + +

    +Set a string parameter. +

    +

    Parameters:
    + + + + + +
    v the vars to use.
    parameter the name of the parameter.
    value the value to set (must not contain NUL).
    bytes the length of value (in bytes).
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_top stp_vars_t v,
    int  val
    +
    + + + + + +
    +   + + +

    +Set the top edge of the image. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_verified stp_vars_t v,
    int  value
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_set_width stp_vars_t v,
    int  val
    +
    + + + + + +
    +   + + +

    +Set the width of the image. +

    +

    Parameters:
    + + + +
    v the vars to use.
    val the value to set.
    +
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_vars_copy stp_vars_t dest,
    const stp_vars_t source
    +
    + + + + + +
    +   + + +

    +Copy a vars object. +

    +Both dest and source must be valid vars objects previously created with stp_vars_create().

    Parameters:
    + + + +
    dest the destination vars.
    source the source vars.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_vars_t* stp_vars_create void   ) 
    +
    + + + + + +
    +   + + +

    +Create a new vars object. +

    +

    Returns:
    the newly created vars object.
    +
    +

    + + + + +
    + + + + + + + + + +
    stp_vars_t* stp_vars_create_copy const stp_vars_t source  ) 
    +
    + + + + + +
    +   + + +

    +Copy and allocate a vars object. +

    +source must be a valid vars object previously created with stp_vars_create().

    Parameters:
    + + +
    source the source vars.
    +
    +
    Returns:
    the new copy of the vars.
    +
    +

    + + + + +
    + + + + + + + + + +
    void stp_vars_destroy stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Destroy a vars object. +

    +It is an error to destroy the vars more than once.

    Parameters:
    + + +
    v the vars to destroy.
    +
    +
    +

    + + + + +
    + + + + + + + + + +
    int stp_verify stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +Verify parameters. +

    +Verify that the parameters selected are consistent with those allowed by the driver. This must be called prior to printing; failure to do so will result in printing failing.

    Parameters:
    + + +
    v the vars to use.
    +
    +
    Returns:
    0 on failure, 1 on success; other status values are reserved.
    +
    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_parameter_verify_t stp_verify_parameter const stp_vars_t v,
    const char *  parameter,
    int  quiet
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/group__version.html b/doc/gutenprint/html/group__version.html new file mode 100644 index 0000000..b513448 --- /dev/null +++ b/doc/gutenprint/html/group__version.html @@ -0,0 +1,441 @@ + + +libgutenprint API Reference: version + + + + +

    version

    Version information. +More... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Defines

    #define STP_MAJOR_VERSION   (5)
    #define STP_MINOR_VERSION   (0)
    #define STP_MICRO_VERSION   (0)
    #define STP_CURRENT_INTERFACE   (2)
    #define STP_BINARY_AGE   (0)
    #define STP_INTERFACE_AGE   (0)
    #define STP_CHECK_VERSION(major, minor, micro)

    Functions

    const char * stp_check_version (unsigned int required_major, unsigned int required_minor, unsigned int required_micro)
     Check whether the library provides the requested version.

    Variables

    const unsigned int stp_major_version
     The library major version number.
    const unsigned int stp_minor_version
     The library minor version number.
    const unsigned int stp_micro_version
     The library micro version number.
    const unsigned int stp_current_interface
     The library ABI revision number (number of incompatible revisions).
    const unsigned int stp_binary_age
     The library ABI binary age number (number of forward-compatible revisions).
    const unsigned int stp_interface_age
     The library ABI interface age number (number of revisions of this ABI).
    +

    Detailed Description

    +Version information. +

    +Version information may be used to check the library version at compile-time, using macros, or at run-time, using constants.


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_BINARY_AGE   (0)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + +
    #define STP_CHECK_VERSION major,
    minor,
    micro   ) 
    +
    + + + + + +
    +   + + +

    +Value:

    (STP_MAJOR_VERSION >  (major) ||                \
    +  (STP_MAJOR_VERSION == (major) &&              \
    +   STP_MINOR_VERSION > (minor)) ||              \
    +  (STP_MAJOR_VERSION == (major) &&              \
    +   STP_MINOR_VERSION == (minor) &&              \
    +   STP_MICRO_VERSION >= (micro)))
    +
    +

    + + + + +
    + + + + +
    #define STP_CURRENT_INTERFACE   (2)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_INTERFACE_AGE   (0)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MAJOR_VERSION   (5)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MICRO_VERSION   (0)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MINOR_VERSION   (0)
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    const char* stp_check_version unsigned int  required_major,
    unsigned int  required_minor,
    unsigned int  required_micro
    +
    + + + + + +
    +   + + +

    +Check whether the library provides the requested version. +

    +

    Parameters:
    + + + + +
    required_major the minimum major revision.
    required_minor the minimum minor revision.
    required_micro the minimum micro revision.
    +
    +
    Returns:
    NULL if the version matches, or else a description of the error if the library is too old or too new.
    +
    +


    Variable Documentation

    +

    + + + + +
    + + + + +
    const unsigned int stp_binary_age
    +
    + + + + + +
    +   + + +

    +The library ABI binary age number (number of forward-compatible revisions). +

    +

    +

    + + + + +
    + + + + +
    const unsigned int stp_current_interface
    +
    + + + + + +
    +   + + +

    +The library ABI revision number (number of incompatible revisions). +

    +

    +

    + + + + +
    + + + + +
    const unsigned int stp_interface_age
    +
    + + + + + +
    +   + + +

    +The library ABI interface age number (number of revisions of this ABI). +

    +

    +

    + + + + +
    + + + + +
    const unsigned int stp_major_version
    +
    + + + + + +
    +   + + +

    +The library major version number. +

    +

    +

    + + + + +
    + + + + +
    const unsigned int stp_micro_version
    +
    + + + + + +
    +   + + +

    +The library micro version number. +

    +

    +

    + + + + +
    + + + + +
    const unsigned int stp_minor_version
    +
    + + + + + +
    +   + + +

    +The library minor version number. +

    +

    +


    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/gutenprint-intl-internal_8h.html b/doc/gutenprint/html/gutenprint-intl-internal_8h.html new file mode 100644 index 0000000..7ec4b32 --- /dev/null +++ b/doc/gutenprint/html/gutenprint-intl-internal_8h.html @@ -0,0 +1,38 @@ + + +libgutenprint API Reference: include/gutenprint/gutenprint-intl-internal.h File Reference + + + + + +

    gutenprint-intl-internal.h File Reference

    Internationalisation functions. More... +

    +#include <locale.h>
    + + + + + + + + + + + + + + + + + +

    Defines

    #define textdomain(String)   (String)
    #define gettext(String)   (String)
    #define dgettext(Domain, Message)   (Message)
    #define dcgettext(Domain, Message, Type)   (Message)
    #define bindtextdomain(Domain, Directory)   (Domain)
    #define _(String)   (String)
    #define N_(String)   (String)
    +


    Detailed Description

    +Internationalisation functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/gutenprint-intl_8h.html b/doc/gutenprint/html/gutenprint-intl_8h.html new file mode 100644 index 0000000..5a40d1e --- /dev/null +++ b/doc/gutenprint/html/gutenprint-intl_8h.html @@ -0,0 +1,38 @@ + + +libgutenprint API Reference: include/gutenprint/gutenprint-intl.h File Reference + + + + + +

    gutenprint-intl.h File Reference

    Internationalisation functions. More... +

    +#include <locale.h>
    + + + + + + + + + + + + + + + + + +

    Defines

    #define textdomain(String)   (String)
    #define gettext(String)   (String)
    #define dgettext(Domain, Message)   (Message)
    #define dcgettext(Domain, Message, Type)   (Message)
    #define bindtextdomain(Domain, Directory)   (Domain)
    #define _(String)   (String)
    #define N_(String)   (String)
    +


    Detailed Description

    +Internationalisation functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/gutenprint-module_8h.html b/doc/gutenprint/html/gutenprint-module_8h.html new file mode 100644 index 0000000..1fa63c9 --- /dev/null +++ b/doc/gutenprint/html/gutenprint-module_8h.html @@ -0,0 +1,59 @@ + + +libgutenprint API Reference: include/gutenprint/gutenprint-module.h File Reference + + + + + +

    gutenprint-module.h File Reference

    Gutenprint module header. More... +

    +#include <gutenprint/gutenprint.h>
    +#include <gutenprint/bit-ops.h>
    +#include <gutenprint/channel.h>
    +#include <gutenprint/color.h>
    +#include <gutenprint/dither.h>
    +#include <gutenprint/list.h>
    +#include <gutenprint/module.h>
    +#include <gutenprint/path.h>
    +#include <gutenprint/weave.h>
    +#include <gutenprint/xml.h>
    + + + + + +

    Defines

    #define STP_MODULE   1
    +


    Detailed Description

    +Gutenprint module header. +

    +This header includes all of the public headers used by modules.


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_MODULE   1
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/gutenprint-version_8h.html b/doc/gutenprint/html/gutenprint-version_8h.html new file mode 100644 index 0000000..5c9c1ec --- /dev/null +++ b/doc/gutenprint/html/gutenprint-version_8h.html @@ -0,0 +1,60 @@ + + +libgutenprint API Reference: include/gutenprint/gutenprint-version.h File Reference + + + + + +

    gutenprint-version.h File Reference

    Version functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Defines

    #define STP_MAJOR_VERSION   (5)
    #define STP_MINOR_VERSION   (0)
    #define STP_MICRO_VERSION   (0)
    #define STP_CURRENT_INTERFACE   (2)
    #define STP_BINARY_AGE   (0)
    #define STP_INTERFACE_AGE   (0)
    #define STP_CHECK_VERSION(major, minor, micro)

    Functions

    const char * stp_check_version (unsigned int required_major, unsigned int required_minor, unsigned int required_micro)
     Check whether the library provides the requested version.

    Variables

    const unsigned int stp_major_version
     The library major version number.
    const unsigned int stp_minor_version
     The library minor version number.
    const unsigned int stp_micro_version
     The library micro version number.
    const unsigned int stp_current_interface
     The library ABI revision number (number of incompatible revisions).
    const unsigned int stp_binary_age
     The library ABI binary age number (number of forward-compatible revisions).
    const unsigned int stp_interface_age
     The library ABI interface age number (number of revisions of this ABI).
    +


    Detailed Description

    +Version functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/gutenprint_8h.html b/doc/gutenprint/html/gutenprint_8h.html new file mode 100644 index 0000000..c126757 --- /dev/null +++ b/doc/gutenprint/html/gutenprint_8h.html @@ -0,0 +1,34 @@ + + +libgutenprint API Reference: include/gutenprint/gutenprint.h File Reference + + + + + +

    gutenprint.h File Reference

    Gutenprint master header. More... +

    +#include <stddef.h>
    +#include <stdio.h>
    +#include <gutenprint/array.h>
    +#include <gutenprint/curve.h>
    +#include <gutenprint/gutenprint-version.h>
    +#include <gutenprint/image.h>
    +#include <gutenprint/paper.h>
    +#include <gutenprint/printers.h>
    +#include <gutenprint/sequence.h>
    +#include <gutenprint/string-list.h>
    +#include <gutenprint/util.h>
    +#include <gutenprint/vars.h>
    + + +
    +


    Detailed Description

    +Gutenprint master header. +

    +This header includes all of the public headers.


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/image_8h.html b/doc/gutenprint/html/image_8h.html new file mode 100644 index 0000000..95b6b6b --- /dev/null +++ b/doc/gutenprint/html/image_8h.html @@ -0,0 +1,54 @@ + + +libgutenprint API Reference: include/gutenprint/image.h File Reference + + + + + +

    image.h File Reference

    Image functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_image
     The image type is an abstract data type for interfacing with the image creation program. More...

    Defines

    #define STP_CHANNEL_LIMIT   (32)

    Typedefs

    typedef stp_image stp_image_t
     The image type is an abstract data type for interfacing with the image creation program.

    Enumerations

    enum  stp_image_status_t { STP_IMAGE_STATUS_OK, +STP_IMAGE_STATUS_ABORT + }
     Image status. More...

    Functions

    void stp_image_init (stp_image_t *image)
    void stp_image_reset (stp_image_t *image)
    int stp_image_width (stp_image_t *image)
    int stp_image_height (stp_image_t *image)
    stp_image_status_t stp_image_get_row (stp_image_t *image, unsigned char *data, size_t limit, int row)
    const char * stp_image_get_appname (stp_image_t *image)
    void stp_image_conclude (stp_image_t *image)
    +


    Detailed Description

    +Image functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/index.html b/doc/gutenprint/html/index.html new file mode 100644 index 0000000..3ba1939 --- /dev/null +++ b/doc/gutenprint/html/index.html @@ -0,0 +1,14 @@ + + +libgutenprint API Reference: Main Page + + + + +

    libgutenprint API Reference Documentation

    +

    +

    5.0.0-rc1


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/list_8h.html b/doc/gutenprint/html/list_8h.html new file mode 100644 index 0000000..26e7fc5 --- /dev/null +++ b/doc/gutenprint/html/list_8h.html @@ -0,0 +1,120 @@ + + +libgutenprint API Reference: include/gutenprint/list.h File Reference + + + + + +

    list.h File Reference

    Generic list functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef stp_list_item stp_list_item_t
     The list item opaque data type.
    typedef stp_list stp_list_t
     The list opaque data type.
    typedef void(* stp_node_freefunc )(void *)
     A callback function to free the data a node contains.
    typedef void *(* stp_node_copyfunc )(const void *)
     A callback function to copy the data a node contains.
    typedef const char *(* stp_node_namefunc )(const void *)
     A callback function to get the name of a node.
    typedef int(* stp_node_sortfunc )(const void *, const void *)
     A callback function to compare two nodes.

    Functions

    void stp_list_node_free_data (void *item)
     Free node data allocated with stp_malloc.
    stp_list_tstp_list_create (void)
     Create a new list object.
    stp_list_tstp_list_copy (const stp_list_t *list)
     Copy and allocate a list object.
    int stp_list_destroy (stp_list_t *list)
     Destroy a list object.
    stp_list_item_tstp_list_get_start (const stp_list_t *list)
     Find the first item in a list.
    stp_list_item_tstp_list_get_end (const stp_list_t *list)
     Find the last item in a list.
    stp_list_item_tstp_list_get_item_by_index (const stp_list_t *list, int idx)
     Find an item in a list by its index.
    stp_list_item_tstp_list_get_item_by_name (const stp_list_t *list, const char *name)
     Find an item in a list by its name.
    stp_list_item_tstp_list_get_item_by_long_name (const stp_list_t *list, const char *long_name)
     Find an item in a list by its long name.
    int stp_list_get_length (const stp_list_t *list)
     Get the length of a list.
    void stp_list_set_freefunc (stp_list_t *list, stp_node_freefunc freefunc)
     Set a list node free function.
    stp_node_freefunc stp_list_get_freefunc (const stp_list_t *list)
     Get a list node free function.
    void stp_list_set_copyfunc (stp_list_t *list, stp_node_copyfunc copyfunc)
     Set a list node copy function.
    stp_node_copyfunc stp_list_get_copyfunc (const stp_list_t *list)
     Get a list node copy function.
    void stp_list_set_namefunc (stp_list_t *list, stp_node_namefunc namefunc)
     Set a list node name function.
    stp_node_namefunc stp_list_get_namefunc (const stp_list_t *list)
     Get a list node name function.
    void stp_list_set_long_namefunc (stp_list_t *list, stp_node_namefunc long_namefunc)
     Set a list node long name function.
    stp_node_namefunc stp_list_get_long_namefunc (const stp_list_t *list)
     Get a list node long name function.
    void stp_list_set_sortfunc (stp_list_t *list, stp_node_sortfunc sortfunc)
     Set a list node sort function.
    stp_node_sortfunc stp_list_get_sortfunc (const stp_list_t *list)
     Get a list node sort function.
    int stp_list_item_create (stp_list_t *list, stp_list_item_t *next, const void *data)
     Create a new list item.
    int stp_list_item_destroy (stp_list_t *list, stp_list_item_t *item)
     Destroy a list item.
    stp_list_item_tstp_list_item_prev (const stp_list_item_t *item)
     Get the previous item in the list.
    stp_list_item_tstp_list_item_next (const stp_list_item_t *item)
     Get the next item in the list.
    void * stp_list_item_get_data (const stp_list_item_t *item)
     Get the data associated with a list item.
    int stp_list_item_set_data (stp_list_item_t *item, void *data)
     Set the data associated with a list item.
    +


    Detailed Description

    +Generic list functions. +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/module_8h.html b/doc/gutenprint/html/module_8h.html new file mode 100644 index 0000000..2d1ce3d --- /dev/null +++ b/doc/gutenprint/html/module_8h.html @@ -0,0 +1,311 @@ + + +libgutenprint API Reference: include/gutenprint/module.h File Reference + + + + + +

    module.h File Reference

    Module functions. More... +

    +#include <gutenprint/list.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_module_version
    struct  stp_module

    Typedefs

    typedef stp_module_version stp_module_version_t
    typedef stp_module stp_module_t

    Enumerations

    enum  stp_module_class_t {
    +  STP_MODULE_CLASS_INVALID, +STP_MODULE_CLASS_MISC, +STP_MODULE_CLASS_FAMILY, +STP_MODULE_CLASS_COLOR, +
    +  STP_MODULE_CLASS_DITHER +
    + }

    Functions

    int stp_module_load (void)
    int stp_module_exit (void)
    int stp_module_open (const char *modulename)
    int stp_module_init (void)
    int stp_module_close (stp_list_item_t *module)
    stp_list_tstp_module_get_class (stp_module_class_t class)
    +


    Detailed Description

    +Module functions. +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_module stp_module_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_module_version stp_module_version_t
    +
    + + + + + +
    +   + + +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_module_class_t
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + + + +
    STP_MODULE_CLASS_INVALID  +
    STP_MODULE_CLASS_MISC  +
    STP_MODULE_CLASS_FAMILY  +
    STP_MODULE_CLASS_COLOR  +
    STP_MODULE_CLASS_DITHER  +
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    int stp_module_close stp_list_item_t module  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_module_exit void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_list_t* stp_module_get_class stp_module_class_t  class  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_module_init void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_module_load void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_module_open const char *  modulename  ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/modules.html b/doc/gutenprint/html/modules.html new file mode 100644 index 0000000..3fc2a6e --- /dev/null +++ b/doc/gutenprint/html/modules.html @@ -0,0 +1,27 @@ + + +libgutenprint API Reference: Module Index + + + + +

    libgutenprint API Reference Modules

    Here is a list of all modules: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/mxml_8h.html b/doc/gutenprint/html/mxml_8h.html new file mode 100644 index 0000000..d6c9f09 --- /dev/null +++ b/doc/gutenprint/html/mxml_8h.html @@ -0,0 +1,1367 @@ + + +libgutenprint API Reference: include/gutenprint/mxml.h File Reference + + + + + +

    mxml.h File Reference

    Mini-XML XML parsing functions. More... +

    +#include <stdio.h>
    +#include <stdlib.h>
    +#include <string.h>
    +#include <ctype.h>
    +#include <errno.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_mxml_attr_s
    struct  stp_mxml_value_s
    struct  stp_mxml_text_s
    union  stp_mxml_value_u
    struct  stp_mxml_node_s

    Defines

    #define STP_MXML_WRAP   70
    #define STP_MXML_TAB   8
    #define STP_MXML_NO_CALLBACK   0
    #define STP_MXML_NO_PARENT   0
    #define STP_MXML_DESCEND   1
    #define STP_MXML_NO_DESCEND   0
    #define STP_MXML_DESCEND_FIRST   -1
    #define STP_MXML_WS_BEFORE_OPEN   0
    #define STP_MXML_WS_AFTER_OPEN   1
    #define STP_MXML_WS_BEFORE_CLOSE   2
    #define STP_MXML_WS_AFTER_CLOSE   3
    #define STP_MXML_ADD_BEFORE   0
    #define STP_MXML_ADD_AFTER   1
    #define STP_MXML_ADD_TO_PARENT   NULL

    Typedefs

    typedef enum stp_mxml_type_e stp_mxml_type_t
    typedef stp_mxml_attr_s stp_mxml_attr_t
    typedef stp_mxml_value_s stp_mxml_element_t
    typedef stp_mxml_text_s stp_mxml_text_t
    typedef stp_mxml_value_u stp_mxml_value_t
    typedef stp_mxml_node_s stp_mxml_node_t

    Enumerations

    enum  stp_mxml_type_e {
    +  STP_MXML_ELEMENT, +STP_MXML_INTEGER, +STP_MXML_OPAQUE, +STP_MXML_REAL, +
    +  STP_MXML_TEXT +
    + }

    Functions

    void stp_mxmlAdd (stp_mxml_node_t *parent, int where, stp_mxml_node_t *child, stp_mxml_node_t *node)
    void stp_mxmlDelete (stp_mxml_node_t *node)
    const char * stp_mxmlElementGetAttr (stp_mxml_node_t *node, const char *name)
    void stp_mxmlElementSetAttr (stp_mxml_node_t *node, const char *name, const char *value)
    stp_mxml_node_tstp_mxmlFindElement (stp_mxml_node_t *node, stp_mxml_node_t *top, const char *name, const char *attr, const char *value, int descend)
    stp_mxml_node_tstp_mxmlLoadFile (stp_mxml_node_t *top, FILE *fp, stp_mxml_type_t(*cb)(stp_mxml_node_t *))
    stp_mxml_node_tstp_mxmlLoadString (stp_mxml_node_t *top, const char *s, stp_mxml_type_t(*cb)(stp_mxml_node_t *))
    stp_mxml_node_tstp_mxmlNewElement (stp_mxml_node_t *parent, const char *name)
    stp_mxml_node_tstp_mxmlNewInteger (stp_mxml_node_t *parent, int integer)
    stp_mxml_node_tstp_mxmlNewOpaque (stp_mxml_node_t *parent, const char *opaque)
    stp_mxml_node_tstp_mxmlNewReal (stp_mxml_node_t *parent, double real)
    stp_mxml_node_tstp_mxmlNewText (stp_mxml_node_t *parent, int whitespace, const char *string)
    void stp_mxmlRemove (stp_mxml_node_t *node)
    char * stp_mxmlSaveAllocString (stp_mxml_node_t *node, int(*cb)(stp_mxml_node_t *, int))
    int stp_mxmlSaveFile (stp_mxml_node_t *node, FILE *fp, int(*cb)(stp_mxml_node_t *, int))
    int stp_mxmlSaveString (stp_mxml_node_t *node, char *buffer, int bufsize, int(*cb)(stp_mxml_node_t *, int))
    stp_mxml_node_tstp_mxmlWalkNext (stp_mxml_node_t *node, stp_mxml_node_t *top, int descend)
    stp_mxml_node_tstp_mxmlWalkPrev (stp_mxml_node_t *node, stp_mxml_node_t *top, int descend)
    +


    Detailed Description

    +Mini-XML XML parsing functions. +

    +


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_MXML_ADD_AFTER   1
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_ADD_BEFORE   0
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_ADD_TO_PARENT   NULL
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_DESCEND   1
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_DESCEND_FIRST   -1
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_NO_CALLBACK   0
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_NO_DESCEND   0
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_NO_PARENT   0
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_TAB   8
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_WRAP   70
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_WS_AFTER_CLOSE   3
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_WS_AFTER_OPEN   1
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_WS_BEFORE_CLOSE   2
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STP_MXML_WS_BEFORE_OPEN   0
    +
    + + + + + +
    +   + + +

    +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_mxml_attr_s stp_mxml_attr_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_mxml_value_s stp_mxml_element_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_mxml_node_s stp_mxml_node_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stp_mxml_text_s stp_mxml_text_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef enum stp_mxml_type_e stp_mxml_type_t
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef union stp_mxml_value_u stp_mxml_value_t
    +
    + + + + + +
    +   + + +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_mxml_type_e
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + + + +
    STP_MXML_ELEMENT  +
    STP_MXML_INTEGER  +
    STP_MXML_OPAQUE  +
    STP_MXML_REAL  +
    STP_MXML_TEXT  +
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_mxmlAdd stp_mxml_node_t parent,
    int  where,
    stp_mxml_node_t child,
    stp_mxml_node_t node
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_mxmlDelete stp_mxml_node_t node  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const char* stp_mxmlElementGetAttr stp_mxml_node_t node,
    const char *  name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_mxmlElementSetAttr stp_mxml_node_t node,
    const char *  name,
    const char *  value
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlFindElement stp_mxml_node_t node,
    stp_mxml_node_t top,
    const char *  name,
    const char *  attr,
    const char *  value,
    int  descend
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlLoadFile stp_mxml_node_t top,
    FILE *  fp,
    stp_mxml_type_t(*)(stp_mxml_node_t *)  cb
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlLoadString stp_mxml_node_t top,
    const char *  s,
    stp_mxml_type_t(*)(stp_mxml_node_t *)  cb
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlNewElement stp_mxml_node_t parent,
    const char *  name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlNewInteger stp_mxml_node_t parent,
    int  integer
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlNewOpaque stp_mxml_node_t parent,
    const char *  opaque
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlNewReal stp_mxml_node_t parent,
    double  real
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlNewText stp_mxml_node_t parent,
    int  whitespace,
    const char *  string
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_mxmlRemove stp_mxml_node_t node  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    char* stp_mxmlSaveAllocString stp_mxml_node_t node,
    int(*)(stp_mxml_node_t *, int)  cb
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_mxmlSaveFile stp_mxml_node_t node,
    FILE *  fp,
    int(*)(stp_mxml_node_t *, int)  cb
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int stp_mxmlSaveString stp_mxml_node_t node,
    char *  buffer,
    int  bufsize,
    int(*)(stp_mxml_node_t *, int)  cb
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlWalkNext stp_mxml_node_t node,
    stp_mxml_node_t top,
    int  descend
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_mxmlWalkPrev stp_mxml_node_t node,
    stp_mxml_node_t top,
    int  descend
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:08 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/pages.html b/doc/gutenprint/html/pages.html new file mode 100644 index 0000000..a139373 --- /dev/null +++ b/doc/gutenprint/html/pages.html @@ -0,0 +1,16 @@ + + +libgutenprint API Reference: Page Index + + + + +

    libgutenprint API Reference Related Pages

    Here is a list of all related documentation pages: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/paper_8h.html b/doc/gutenprint/html/paper_8h.html new file mode 100644 index 0000000..6dd7bcb --- /dev/null +++ b/doc/gutenprint/html/paper_8h.html @@ -0,0 +1,50 @@ + + +libgutenprint API Reference: include/gutenprint/paper.h File Reference + + + + + +

    paper.h File Reference

    Paper size functions. More... +

    +#include <gutenprint/vars.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_papersize_t
     The papersize data type. More...

    Enumerations

    enum  stp_papersize_unit_t { PAPERSIZE_ENGLISH_STANDARD, +PAPERSIZE_METRIC_STANDARD, +PAPERSIZE_ENGLISH_EXTENDED, +PAPERSIZE_METRIC_EXTENDED + }
     Units of measurement. More...

    Functions

    int stp_known_papersizes (void)
     Get the number of available papersizes.
    const stp_papersize_tstp_get_papersize_by_name (const char *name)
     Get a papersize by name.
    const stp_papersize_tstp_get_papersize_by_size (int length, int width)
     Get a papersize by size.
    const stp_papersize_tstp_get_papersize_by_index (int idx)
     Get a papersize by its index number.
    void stp_default_media_size (const stp_vars_t *v, int *width, int *height)
    +


    Detailed Description

    +Paper size functions. +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/path_8h.html b/doc/gutenprint/html/path_8h.html new file mode 100644 index 0000000..eda875f --- /dev/null +++ b/doc/gutenprint/html/path_8h.html @@ -0,0 +1,102 @@ + + +libgutenprint API Reference: include/gutenprint/path.h File Reference + + + + + +

    path.h File Reference

    Simple directory path functions. More... +

    + + + + + + + +

    Functions

    stp_list_tstp_path_search (stp_list_t *dirlist, const char *suffix)
    void stp_path_split (stp_list_t *list, const char *path)
    +


    Detailed Description

    +Simple directory path functions. +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_list_t* stp_path_search stp_list_t dirlist,
    const char *  suffix
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_path_split stp_list_t list,
    const char *  path
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/printers_8h.html b/doc/gutenprint/html/printers_8h.html new file mode 100644 index 0000000..7091a99 --- /dev/null +++ b/doc/gutenprint/html/printers_8h.html @@ -0,0 +1,100 @@ + + +libgutenprint API Reference: include/gutenprint/printers.h File Reference + + + + + +

    printers.h File Reference

    Printer functions. More... +

    +#include <gutenprint/list.h>
    +#include <gutenprint/vars.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_printfuncs_t
    struct  stp_family

    Typedefs

    typedef stp_printer stp_printer_t
     The printer opaque data type (representation of printer model).
    typedef stp_family stp_family_t

    Functions

    int stp_printer_model_count (void)
     Get the number of available printer models.
    const stp_printer_tstp_get_printer_by_index (int idx)
     Get a printer model by its index number.
    const stp_printer_tstp_get_printer_by_long_name (const char *long_name)
     Get a printer model by its long (translated) name.
    const stp_printer_tstp_get_printer_by_driver (const char *driver)
     Get a printer model by its short name.
    const stp_printer_tstp_get_printer (const stp_vars_t *v)
     Get the printer model from a vars object.
    int stp_get_printer_index_by_driver (const char *driver)
     Get the printer index number from the printer model short (driver) name.
    const char * stp_printer_get_long_name (const stp_printer_t *p)
     Get a printer model's long (translated) name.
    const char * stp_printer_get_driver (const stp_printer_t *p)
     Get a printer model's short (driver) name.
    const char * stp_printer_get_family (const stp_printer_t *p)
     Get a printer model's family name.
    const char * stp_printer_get_manufacturer (const stp_printer_t *p)
     Get a printer model's manufacturer's name.
    int stp_printer_get_model (const stp_printer_t *p)
     Get a printer model's model number.
    const stp_vars_tstp_printer_get_defaults (const stp_printer_t *p)
     Get the default vars for a particular printer model.
    void stp_set_printer_defaults (stp_vars_t *v, const stp_printer_t *p)
     Set a vars object to use a particular driver, and set the parameter to its defaults.
    int stp_print (const stp_vars_t *v, stp_image_t *image)
     Print the image.
    int stp_start_job (const stp_vars_t *v, stp_image_t *image)
     Start a print job.
    int stp_end_job (const stp_vars_t *v, stp_image_t *image)
     End a print job.
    int stp_get_model_id (const stp_vars_t *v)
    int stp_verify_printer_params (stp_vars_t *v)
    int stp_family_register (stp_list_t *family)
    int stp_family_unregister (stp_list_t *family)
    void stp_initialize_printer_defaults (void)
    stp_parameter_list_t stp_printer_list_parameters (const stp_vars_t *v)
    void stp_printer_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
    const char * stp_describe_output (const stp_vars_t *v)
    +


    Detailed Description

    +Printer functions. +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/sequence_8h.html b/doc/gutenprint/html/sequence_8h.html new file mode 100644 index 0000000..810e717 --- /dev/null +++ b/doc/gutenprint/html/sequence_8h.html @@ -0,0 +1,111 @@ + + +libgutenprint API Reference: include/gutenprint/sequence.h File Reference + + + + + +

    sequence.h File Reference

    Sequence functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef stp_sequence stp_sequence_t
     The sequence opaque data type.

    Functions

    stp_sequence_tstp_sequence_create (void)
     Create a new sequence.
    void stp_sequence_destroy (stp_sequence_t *sequence)
     Destroy a sequence.
    void stp_sequence_copy (stp_sequence_t *dest, const stp_sequence_t *source)
     Copy an sequence.
    stp_sequence_tstp_sequence_create_copy (const stp_sequence_t *sequence)
     Copy and allocate an sequence.
    int stp_sequence_set_bounds (stp_sequence_t *sequence, double low, double high)
     Set the lower and upper bounds.
    void stp_sequence_get_bounds (const stp_sequence_t *sequence, double *low, double *high)
     Get the lower and upper bounds.
    void stp_sequence_get_range (const stp_sequence_t *sequence, double *low, double *high)
     Get range of values stored in the sequence.
    int stp_sequence_set_size (stp_sequence_t *sequence, size_t size)
     Set the sequence size.
    size_t stp_sequence_get_size (const stp_sequence_t *sequence)
     Get the sequence size.
    int stp_sequence_set_data (stp_sequence_t *sequence, size_t count, const double *data)
     Set the data in a sequence.
    int stp_sequence_set_subrange (stp_sequence_t *sequence, size_t where, size_t size, const double *data)
     Set the data in a subrange of a sequence.
    void stp_sequence_get_data (const stp_sequence_t *sequence, size_t *size, const double **data)
     Get the data in a sequence.
    int stp_sequence_set_point (stp_sequence_t *sequence, size_t where, double data)
     Set the data at a single point in a sequence.
    int stp_sequence_get_point (const stp_sequence_t *sequence, size_t where, double *data)
     Get the data at a single point in a sequence.
    int stp_sequence_set_float_data (stp_sequence_t *sequence, size_t count, const float *data)
     Set the data in a sequence from float values.
    int stp_sequence_set_long_data (stp_sequence_t *sequence, size_t count, const long *data)
     Set the data in a sequence from long values.
    int stp_sequence_set_ulong_data (stp_sequence_t *sequence, size_t count, const unsigned long *data)
     Set the data in a sequence from unsigned long values.
    int stp_sequence_set_int_data (stp_sequence_t *sequence, size_t count, const int *data)
     Set the data in a sequence from int values.
    int stp_sequence_set_uint_data (stp_sequence_t *sequence, size_t count, const unsigned int *data)
     Set the data in a sequence from unsigned int values.
    int stp_sequence_set_short_data (stp_sequence_t *sequence, size_t count, const short *data)
     Set the data in a sequence from short values.
    int stp_sequence_set_ushort_data (stp_sequence_t *sequence, size_t count, const unsigned short *data)
     Set the data in a sequence from unsigned short values.
    const float * stp_sequence_get_float_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as float data.
    const long * stp_sequence_get_long_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as long data.
    const unsigned long * stp_sequence_get_ulong_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as unsigned long data.
    const int * stp_sequence_get_int_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as int data.
    const unsigned int * stp_sequence_get_uint_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as unsigned int data.
    const short * stp_sequence_get_short_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as short data.
    const unsigned short * stp_sequence_get_ushort_data (const stp_sequence_t *sequence, size_t *count)
     Get the data in a sequence as unsigned short data.
    +


    Detailed Description

    +Sequence functions. +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/string-list_8h.html b/doc/gutenprint/html/string-list_8h.html new file mode 100644 index 0000000..c315fcf --- /dev/null +++ b/doc/gutenprint/html/string-list_8h.html @@ -0,0 +1,418 @@ + + +libgutenprint API Reference: include/gutenprint/string-list.h File Reference + + + + + +

    string-list.h File Reference

    String list functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_param_string_t
     String parameter. More...

    Typedefs

    typedef stp_string_list stp_string_list_t
     The string_list opaque data type.

    Functions

    stp_string_list_tstp_string_list_create (void)
    void stp_string_list_destroy (stp_string_list_t *list)
    stp_param_string_tstp_string_list_param (const stp_string_list_t *list, size_t element)
    stp_param_string_tstp_string_list_find (const stp_string_list_t *list, const char *name)
    size_t stp_string_list_count (const stp_string_list_t *list)
    stp_string_list_tstp_string_list_create_copy (const stp_string_list_t *list)
    void stp_string_list_add_string (stp_string_list_t *list, const char *name, const char *text)
    void stp_string_list_remove_string (stp_string_list_t *list, const char *name)
    stp_string_list_tstp_string_list_create_from_params (const stp_param_string_t *list, size_t count)
    int stp_string_list_is_present (const stp_string_list_t *list, const char *value)
    +


    Detailed Description

    +String list functions. +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct stp_string_list stp_string_list_t
    +
    + + + + + +
    +   + + +

    +The string_list opaque data type. +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_string_list_add_string stp_string_list_t list,
    const char *  name,
    const char *  text
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    size_t stp_string_list_count const stp_string_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_string_list_t* stp_string_list_create void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_string_list_t* stp_string_list_create_copy const stp_string_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_string_list_t* stp_string_list_create_from_params const stp_param_string_t list,
    size_t  count
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_string_list_destroy stp_string_list_t list  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_param_string_t* stp_string_list_find const stp_string_list_t list,
    const char *  name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stp_string_list_is_present const stp_string_list_t list,
    const char *  value
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_param_string_t* stp_string_list_param const stp_string_list_t list,
    size_t  element
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_string_list_remove_string stp_string_list_t list,
    const char *  name
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structdither__matrix__impl.html b/doc/gutenprint/html/structdither__matrix__impl.html new file mode 100644 index 0000000..6c10703 --- /dev/null +++ b/doc/gutenprint/html/structdither__matrix__impl.html @@ -0,0 +1,396 @@ + + +libgutenprint API Reference: dither_matrix_impl Struct Reference + + + + +

    dither_matrix_impl Struct Reference

    #include <dither.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    int base
    int exp
    int x_size
    int y_size
    int total_size
    int last_x
    int last_x_mod
    int last_y
    int last_y_mod
    int index
    int i_own
    int x_offset
    int y_offset
    unsigned fast_mask
    unsigned * matrix
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::base
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::exp
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    unsigned dither_matrix_impl::fast_mask
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::i_own
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::index
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::last_x
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::last_x_mod
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::last_y
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::last_y_mod
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    unsigned* dither_matrix_impl::matrix
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::total_size
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::x_offset
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::x_size
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::y_offset
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int dither_matrix_impl::y_size
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__cached__curve__t.html b/doc/gutenprint/html/structstp__cached__curve__t.html new file mode 100644 index 0000000..a3a105e --- /dev/null +++ b/doc/gutenprint/html/structstp__cached__curve__t.html @@ -0,0 +1,121 @@ + + +libgutenprint API Reference: stp_cached_curve_t Struct Reference + + + + +

    stp_cached_curve_t Struct Reference

    #include <curve-cache.h> +

    + + + + + + + + + + + +

    Data Fields

    stp_curve_tcurve
    const double * d_cache
    const unsigned short * s_cache
    size_t count
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    size_t stp_cached_curve_t::count
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_curve_t* stp_cached_curve_t::curve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const double* stp_cached_curve_t::d_cache
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const unsigned short* stp_cached_curve_t::s_cache
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__color.html b/doc/gutenprint/html/structstp__color.html new file mode 100644 index 0000000..74f0694 --- /dev/null +++ b/doc/gutenprint/html/structstp__color.html @@ -0,0 +1,99 @@ + + +libgutenprint API Reference: stp_color Struct Reference + + + + +

    stp_color Struct Reference
    + +[color] +

    #include <color.h> +

    + + + + + + + + + +

    Data Fields

    const char * short_name
    const char * long_name
    const stp_colorfuncs_tcolorfuncs
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    const stp_colorfuncs_t* stp_color::colorfuncs
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const char* stp_color::long_name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const char* stp_color::short_name
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__colorfuncs__t.html b/doc/gutenprint/html/structstp__colorfuncs__t.html new file mode 100644 index 0000000..4e61e2b --- /dev/null +++ b/doc/gutenprint/html/structstp__colorfuncs__t.html @@ -0,0 +1,124 @@ + + +libgutenprint API Reference: stp_colorfuncs_t Struct Reference + + + + +

    stp_colorfuncs_t Struct Reference
    + +[color] +

    #include <color.h> +

    + + + + + + + + + + + +

    Data Fields

    int(* init )(stp_vars_t *v, stp_image_t *image, size_t steps)
    int(* get_row )(stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask)
    stp_parameter_list_t(* list_parameters )(const stp_vars_t *v)
    void(* describe_parameter )(const stp_vars_t *v, const char *name, stp_parameter_t *description)
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    void(* stp_colorfuncs_t::describe_parameter)(const stp_vars_t *v, const char *name, stp_parameter_t *description)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_colorfuncs_t::get_row)(stp_vars_t *v, stp_image_t *image, int row, unsigned *zero_mask)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_colorfuncs_t::init)(stp_vars_t *v, stp_image_t *image, size_t steps)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_parameter_list_t(* stp_colorfuncs_t::list_parameters)(const stp_vars_t *v)
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__curve__point__t.html b/doc/gutenprint/html/structstp__curve__point__t.html new file mode 100644 index 0000000..536e9af --- /dev/null +++ b/doc/gutenprint/html/structstp__curve__point__t.html @@ -0,0 +1,86 @@ + + +libgutenprint API Reference: stp_curve_point_t Struct Reference + + + + +

    stp_curve_point_t Struct Reference
    + +[curve] +

    Point (x,y) for piecewise curve. +More... +

    +#include <curve.h> +

    + + + + + + + + + +

    Data Fields

    double x
     Horizontal position.
    double y
     Vertical position.
    +


    Detailed Description

    +Point (x,y) for piecewise curve. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    double stp_curve_point_t::x
    +
    + + + + + +
    +   + + +

    +Horizontal position. +

    +

    +

    + + + + +
    + + + + +
    double stp_curve_point_t::y
    +
    + + + + + +
    +   + + +

    +Vertical position. +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__dither__matrix__generic.html b/doc/gutenprint/html/structstp__dither__matrix__generic.html new file mode 100644 index 0000000..39b7adf --- /dev/null +++ b/doc/gutenprint/html/structstp__dither__matrix__generic.html @@ -0,0 +1,146 @@ + + +libgutenprint API Reference: stp_dither_matrix_generic Struct Reference + + + + +

    stp_dither_matrix_generic Struct Reference

    #include <dither.h> +

    + + + + + + + + + + + + + +

    Data Fields

    int x
    int y
    int bytes
    int prescaled
    const void * data
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_generic::bytes
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const void* stp_dither_matrix_generic::data
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_generic::prescaled
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_generic::x
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_generic::y
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__dither__matrix__normal.html b/doc/gutenprint/html/structstp__dither__matrix__normal.html new file mode 100644 index 0000000..6905646 --- /dev/null +++ b/doc/gutenprint/html/structstp__dither__matrix__normal.html @@ -0,0 +1,146 @@ + + +libgutenprint API Reference: stp_dither_matrix_normal Struct Reference + + + + +

    stp_dither_matrix_normal Struct Reference

    #include <dither.h> +

    + + + + + + + + + + + + + +

    Data Fields

    int x
    int y
    int bytes
    int prescaled
    const unsigned * data
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_normal::bytes
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const unsigned* stp_dither_matrix_normal::data
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_normal::prescaled
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_normal::x
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_normal::y
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__dither__matrix__short.html b/doc/gutenprint/html/structstp__dither__matrix__short.html new file mode 100644 index 0000000..f7bb824 --- /dev/null +++ b/doc/gutenprint/html/structstp__dither__matrix__short.html @@ -0,0 +1,146 @@ + + +libgutenprint API Reference: stp_dither_matrix_short Struct Reference + + + + +

    stp_dither_matrix_short Struct Reference

    #include <dither.h> +

    + + + + + + + + + + + + + +

    Data Fields

    int x
    int y
    int bytes
    int prescaled
    const unsigned short * data
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_short::bytes
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const unsigned short* stp_dither_matrix_short::data
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_short::prescaled
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_short::x
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_dither_matrix_short::y
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__dotsize.html b/doc/gutenprint/html/structstp__dotsize.html new file mode 100644 index 0000000..4630fbd --- /dev/null +++ b/doc/gutenprint/html/structstp__dotsize.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_dotsize Struct Reference + + + + +

    stp_dotsize Struct Reference

    #include <dither.h> +

    + + + + + + + +

    Data Fields

    unsigned bit_pattern
    double value
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    unsigned stp_dotsize::bit_pattern
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    double stp_dotsize::value
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__double__bound__t.html b/doc/gutenprint/html/structstp__double__bound__t.html new file mode 100644 index 0000000..2480d35 --- /dev/null +++ b/doc/gutenprint/html/structstp__double__bound__t.html @@ -0,0 +1,80 @@ + + +libgutenprint API Reference: stp_double_bound_t Struct Reference + + + + +

    stp_double_bound_t Struct Reference
    + +[vars] +

    double_bound (range) parameter. +More... +

    +#include <vars.h> +

    + + + + + + + +

    Data Fields

    double lower
    double upper
    +


    Detailed Description

    +double_bound (range) parameter. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    double stp_double_bound_t::lower
    +
    + + + + + +
    +   + + +

    +Lower bound.

    +

    + + + + +
    + + + + +
    double stp_double_bound_t::upper
    +
    + + + + + +
    +   + + +

    +Upper bound.

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__family.html b/doc/gutenprint/html/structstp__family.html new file mode 100644 index 0000000..3b80780 --- /dev/null +++ b/doc/gutenprint/html/structstp__family.html @@ -0,0 +1,74 @@ + + +libgutenprint API Reference: stp_family Struct Reference + + + + +

    stp_family Struct Reference
    + +[printer] +

    #include <printers.h> +

    + + + + + + + +

    Data Fields

    const stp_printfuncs_tprintfuncs
    stp_list_tprinter_list
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    stp_list_t* stp_family::printer_list
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const stp_printfuncs_t* stp_family::printfuncs
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__image.html b/doc/gutenprint/html/structstp__image.html new file mode 100644 index 0000000..e5b4644 --- /dev/null +++ b/doc/gutenprint/html/structstp__image.html @@ -0,0 +1,285 @@ + + +libgutenprint API Reference: stp_image Struct Reference + + + + +

    stp_image Struct Reference
    + +[image] +

    The image type is an abstract data type for interfacing with the image creation program. +More... +

    +#include <image.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    void(* init )(struct stp_image *image)
     This callback is used to perform any initialization required by the image layer for the image.
    void(* reset )(struct stp_image *image)
     This callback is called to reset the image to the beginning.
    int(* width )(struct stp_image *image)
     This callback returns the width of the image in pixels.
    int(* height )(struct stp_image *image)
     This callback returns the height of the image in pixels.
    stp_image_status_t(* get_row )(struct stp_image *image, unsigned char *data, size_t byte_limit, int row)
     This callback transfers the data from the image to the gimp-print library.
    const char *(* get_appname )(struct stp_image *image)
     This callback returns the name of the application.
    void(* conclude )(struct stp_image *image)
     This callback is called at the end of each page.
    void * rep
     A pointer to an application-specific state information that might need to be associated with the image object.
    +


    Detailed Description

    +The image type is an abstract data type for interfacing with the image creation program. +

    +It provides callbacks to functions defined within the client application which are called while printing the image. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    void(* stp_image::conclude)(struct stp_image *image)
    +
    + + + + + +
    +   + + +

    +This callback is called at the end of each page. +

    +

    +

    + + + + +
    + + + + +
    const char*(* stp_image::get_appname)(struct stp_image *image)
    +
    + + + + + +
    +   + + +

    +This callback returns the name of the application. +

    +This is embedded in the output by some drivers.

    +

    + + + + +
    + + + + +
    stp_image_status_t(* stp_image::get_row)(struct stp_image *image, unsigned char *data, size_t byte_limit, int row)
    +
    + + + + + +
    +   + + +

    +This callback transfers the data from the image to the gimp-print library. +

    +It is called from the driver layer. It should copy WIDTH (as returned by the width() member) pixels of data into the data buffer. It normally returns STP_IMAGE_STATUS_OK; if something goes wrong, or the application wishes to stop producing any further output (e. g. because the user cancelled the print job), it should return STP_IMAGE_STATUS_ABORT. This will cause the driver to flush any remaining data to the output. It will always request rows in monotonically ascending order, but it may skip rows (if, for example, the resolution of the input is higher than the resolution of the output).

    Parameters:
    + + + + + +
    image the image in use.
    data a pointer to width() bytes of pixel data.
    byte_limit (image width * number of channels).
    row (unused).
    +
    +
    +

    + + + + +
    + + + + +
    int(* stp_image::height)(struct stp_image *image)
    +
    + + + + + +
    +   + + +

    +This callback returns the height of the image in pixels. +

    +

    Parameters:
    + + +
    image the image in use.
    +
    +
    +

    + + + + +
    + + + + +
    void(* stp_image::init)(struct stp_image *image)
    +
    + + + + + +
    +   + + +

    +This callback is used to perform any initialization required by the image layer for the image. +

    +It will be called once per image.

    Parameters:
    + + +
    image the image in use.
    +
    +
    +

    + + + + +
    + + + + +
    void* stp_image::rep
    +
    + + + + + +
    +   + + +

    +A pointer to an application-specific state information that might need to be associated with the image object. +

    +

    +

    + + + + +
    + + + + +
    void(* stp_image::reset)(struct stp_image *image)
    +
    + + + + + +
    +   + + +

    +This callback is called to reset the image to the beginning. +

    +It may (in principle) be called multiple times if a page is being printed more than once.

    Warning:
    The reset() call may be removed in the future.
    +
    Parameters:
    + + +
    image the image in use.
    +
    +
    +

    + + + + +
    + + + + +
    int(* stp_image::width)(struct stp_image *image)
    +
    + + + + + +
    +   + + +

    +This callback returns the width of the image in pixels. +

    +

    Parameters:
    + + +
    image the image in use.
    +
    +
    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__int__bound__t.html b/doc/gutenprint/html/structstp__int__bound__t.html new file mode 100644 index 0000000..ca86f47 --- /dev/null +++ b/doc/gutenprint/html/structstp__int__bound__t.html @@ -0,0 +1,80 @@ + + +libgutenprint API Reference: stp_int_bound_t Struct Reference + + + + +

    stp_int_bound_t Struct Reference
    + +[vars] +

    int_bound (range) parameter. +More... +

    +#include <vars.h> +

    + + + + + + + +

    Data Fields

    int lower
    int upper
    +


    Detailed Description

    +int_bound (range) parameter. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_int_bound_t::lower
    +
    + + + + + +
    +   + + +

    +Lower bound.

    +

    + + + + +
    + + + + +
    int stp_int_bound_t::upper
    +
    + + + + + +
    +   + + +

    +Upper bound.

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__lineactive__t.html b/doc/gutenprint/html/structstp__lineactive__t.html new file mode 100644 index 0000000..62ce653 --- /dev/null +++ b/doc/gutenprint/html/structstp__lineactive__t.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_lineactive_t Struct Reference + + + + +

    stp_lineactive_t Struct Reference

    #include <weave.h> +

    + + + + + + + +

    Data Fields

    int ncolors
    char * v
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_lineactive_t::ncolors
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stp_lineactive_t::v
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__linebounds__t.html b/doc/gutenprint/html/structstp__linebounds__t.html new file mode 100644 index 0000000..90b0eb8 --- /dev/null +++ b/doc/gutenprint/html/structstp__linebounds__t.html @@ -0,0 +1,96 @@ + + +libgutenprint API Reference: stp_linebounds_t Struct Reference + + + + +

    stp_linebounds_t Struct Reference

    #include <weave.h> +

    + + + + + + + + + +

    Data Fields

    int ncolors
    int * start_pos
    int * end_pos
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int* stp_linebounds_t::end_pos
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_linebounds_t::ncolors
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int* stp_linebounds_t::start_pos
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__linebufs__t.html b/doc/gutenprint/html/structstp__linebufs__t.html new file mode 100644 index 0000000..00ebfd8 --- /dev/null +++ b/doc/gutenprint/html/structstp__linebufs__t.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_linebufs_t Struct Reference + + + + +

    stp_linebufs_t Struct Reference

    #include <weave.h> +

    + + + + + + + +

    Data Fields

    int ncolors
    unsigned char ** v
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_linebufs_t::ncolors
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    unsigned char** stp_linebufs_t::v
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__linecount__t.html b/doc/gutenprint/html/structstp__linecount__t.html new file mode 100644 index 0000000..082d291 --- /dev/null +++ b/doc/gutenprint/html/structstp__linecount__t.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_linecount_t Struct Reference + + + + +

    stp_linecount_t Struct Reference

    #include <weave.h> +

    + + + + + + + +

    Data Fields

    int ncolors
    int * v
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_linecount_t::ncolors
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int* stp_linecount_t::v
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__lineoff__t.html b/doc/gutenprint/html/structstp__lineoff__t.html new file mode 100644 index 0000000..9366ead --- /dev/null +++ b/doc/gutenprint/html/structstp__lineoff__t.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_lineoff_t Struct Reference + + + + +

    stp_lineoff_t Struct Reference

    #include <weave.h> +

    + + + + + + + +

    Data Fields

    int ncolors
    unsigned long * v
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_lineoff_t::ncolors
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    unsigned long* stp_lineoff_t::v
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__module.html b/doc/gutenprint/html/structstp__module.html new file mode 100644 index 0000000..47ec90d --- /dev/null +++ b/doc/gutenprint/html/structstp__module.html @@ -0,0 +1,221 @@ + + +libgutenprint API Reference: stp_module Struct Reference + + + + +

    stp_module Struct Reference

    #include <module.h> +

    + + + + + + + + + + + + + + + + + + + +

    Data Fields

    const char * name
    const char * version
    const char * comment
    stp_module_class_t class
    void * handle
    int(* init )(void)
    int(* fini )(void)
    void * syms
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    stp_module_class_t stp_module::class
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const char* stp_module::comment
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_module::fini)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void* stp_module::handle
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_module::init)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const char* stp_module::name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void* stp_module::syms
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const char* stp_module::version
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__module__version.html b/doc/gutenprint/html/structstp__module__version.html new file mode 100644 index 0000000..57c1836 --- /dev/null +++ b/doc/gutenprint/html/structstp__module__version.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_module_version Struct Reference + + + + +

    stp_module_version Struct Reference

    #include <module.h> +

    + + + + + + + +

    Data Fields

    int major
    int minor
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_module_version::major
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_module_version::minor
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__mxml__attr__s.html b/doc/gutenprint/html/structstp__mxml__attr__s.html new file mode 100644 index 0000000..37c5b69 --- /dev/null +++ b/doc/gutenprint/html/structstp__mxml__attr__s.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_mxml_attr_s Struct Reference + + + + +

    stp_mxml_attr_s Struct Reference

    #include <mxml.h> +

    + + + + + + + +

    Data Fields

    char * name
    char * value
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    char* stp_mxml_attr_s::name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stp_mxml_attr_s::value
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__mxml__node__s.html b/doc/gutenprint/html/structstp__mxml__node__s.html new file mode 100644 index 0000000..efb3129 --- /dev/null +++ b/doc/gutenprint/html/structstp__mxml__node__s.html @@ -0,0 +1,196 @@ + + +libgutenprint API Reference: stp_mxml_node_s Struct Reference + + + + +

    stp_mxml_node_s Struct Reference

    #include <mxml.h> +

    + + + + + + + + + + + + + + + + + +

    Data Fields

    stp_mxml_type_t type
    stp_mxml_node_tnext
    stp_mxml_node_tprev
    stp_mxml_node_tparent
    stp_mxml_node_tchild
    stp_mxml_node_tlast_child
    stp_mxml_value_t value
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    stp_mxml_node_t* stp_mxml_node_s::child
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_node_t* stp_mxml_node_s::last_child
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_node_t* stp_mxml_node_s::next
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_node_t* stp_mxml_node_s::parent
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_node_t* stp_mxml_node_s::prev
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_type_t stp_mxml_node_s::type
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_value_t stp_mxml_node_s::value
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__mxml__text__s.html b/doc/gutenprint/html/structstp__mxml__text__s.html new file mode 100644 index 0000000..785445a --- /dev/null +++ b/doc/gutenprint/html/structstp__mxml__text__s.html @@ -0,0 +1,71 @@ + + +libgutenprint API Reference: stp_mxml_text_s Struct Reference + + + + +

    stp_mxml_text_s Struct Reference

    #include <mxml.h> +

    + + + + + + + +

    Data Fields

    int whitespace
    char * string
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    char* stp_mxml_text_s::string
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_mxml_text_s::whitespace
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__mxml__value__s.html b/doc/gutenprint/html/structstp__mxml__value__s.html new file mode 100644 index 0000000..c4c8848 --- /dev/null +++ b/doc/gutenprint/html/structstp__mxml__value__s.html @@ -0,0 +1,96 @@ + + +libgutenprint API Reference: stp_mxml_value_s Struct Reference + + + + +

    stp_mxml_value_s Struct Reference

    #include <mxml.h> +

    + + + + + + + + + +

    Data Fields

    char * name
    int num_attrs
    stp_mxml_attr_tattrs
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    stp_mxml_attr_t* stp_mxml_value_s::attrs
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stp_mxml_value_s::name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_mxml_value_s::num_attrs
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__papersize__t.html b/doc/gutenprint/html/structstp__papersize__t.html new file mode 100644 index 0000000..756152a --- /dev/null +++ b/doc/gutenprint/html/structstp__papersize__t.html @@ -0,0 +1,310 @@ + + +libgutenprint API Reference: stp_papersize_t Struct Reference + + + + +

    stp_papersize_t Struct Reference
    + +[papersize] +

    The papersize data type. +More... +

    +#include <paper.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    char * name
     Short unique name (not translated).
    char * text
     Long descriptive name (translated).
    char * comment
     Comment.
    unsigned width
     Paper width.
    unsigned height
     Paper height.
    unsigned top
     Top margin.
    unsigned left
     Left margin.
    unsigned bottom
     Bottom margin.
    unsigned right
     Right margin.
    stp_papersize_unit_t paper_unit
     Units of measurement.
    +


    Detailed Description

    +The papersize data type. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    unsigned stp_papersize_t::bottom
    +
    + + + + + +
    +   + + +

    +Bottom margin. +

    +

    +

    + + + + +
    + + + + +
    char* stp_papersize_t::comment
    +
    + + + + + +
    +   + + +

    +Comment. +

    +

    +

    + + + + +
    + + + + +
    unsigned stp_papersize_t::height
    +
    + + + + + +
    +   + + +

    +Paper height. +

    +

    +

    + + + + +
    + + + + +
    unsigned stp_papersize_t::left
    +
    + + + + + +
    +   + + +

    +Left margin. +

    +

    +

    + + + + +
    + + + + +
    char* stp_papersize_t::name
    +
    + + + + + +
    +   + + +

    +Short unique name (not translated). +

    +

    +

    + + + + +
    + + + + +
    stp_papersize_unit_t stp_papersize_t::paper_unit
    +
    + + + + + +
    +   + + +

    +Units of measurement. +

    +

    +

    + + + + +
    + + + + +
    unsigned stp_papersize_t::right
    +
    + + + + + +
    +   + + +

    +Right margin. +

    +

    +

    + + + + +
    + + + + +
    char* stp_papersize_t::text
    +
    + + + + + +
    +   + + +

    +Long descriptive name (translated). +

    +

    +

    + + + + +
    + + + + +
    unsigned stp_papersize_t::top
    +
    + + + + + +
    +   + + +

    +Top margin. +

    +

    +

    + + + + +
    + + + + +
    unsigned stp_papersize_t::width
    +
    + + + + + +
    +   + + +

    +Paper width. +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__param__string__t.html b/doc/gutenprint/html/structstp__param__string__t.html new file mode 100644 index 0000000..917e17b --- /dev/null +++ b/doc/gutenprint/html/structstp__param__string__t.html @@ -0,0 +1,79 @@ + + +libgutenprint API Reference: stp_param_string_t Struct Reference + + + + +

    stp_param_string_t Struct Reference

    String parameter. +More... +

    +#include <string-list.h> +

    + + + + + + + +

    Data Fields

    const char * name
    const char * text
    +


    Detailed Description

    +String parameter. +

    +Representation of a choice list of strings. The choices themselves consist of a key and a human-readable name. The list object is opaque. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    const char* stp_param_string_t::name
    +
    + + + + + +
    +   + + +

    +Option name (key, untranslated).

    +

    + + + + +
    + + + + +
    const char * stp_param_string_t::text
    +
    + + + + + +
    +   + + +

    +Option name (key, untranslated). Human-readable (translated) text.

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__parameter__t.html b/doc/gutenprint/html/structstp__parameter__t.html new file mode 100644 index 0000000..885519d --- /dev/null +++ b/doc/gutenprint/html/structstp__parameter__t.html @@ -0,0 +1,709 @@ + + +libgutenprint API Reference: stp_parameter_t Struct Reference + + + + +

    stp_parameter_t Struct Reference
    + +[vars] +

    Parameter description. +More... +

    +#include <vars.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    const char * name
    const char * text
    const char * category
    const char * help
    stp_parameter_type_t p_type
    stp_parameter_class_t p_class
    stp_parameter_level_t p_level
    unsigned char is_mandatory
    unsigned char is_active
    unsigned char channel
    unsigned char verify_this_parameter
    unsigned char read_only
    union {
       stp_curve_t *   curve
       stp_double_bound_t   dbl
       stp_int_bound_t   integer
       stp_int_bound_t   dimension
       stp_string_list_t *   str
       stp_array_t *   array
    bounds
    union {
       stp_curve_t *   curve
       double   dbl
       int   dimension
       int   integer
       int   boolean
       const char *   str
       stp_array_t *   array
    deflt
    +


    Detailed Description

    +Parameter description. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    stp_array_t* stp_parameter_t::array
    +
    + + + + + +
    +   + + +

    +Default array parameter value.

    +

    + + + + +
    + + + + +
    stp_array_t* stp_parameter_t::array
    +
    + + + + + +
    +   + + +

    +array parameter value.

    +

    + + + + +
    + + + + +
    int stp_parameter_t::boolean
    +
    + + + + + +
    +   + + +

    +Default boolean parameter value.

    +

    + + + + +
    + + + + +
    union { ... } stp_parameter_t::bounds
    +
    + + + + + +
    +   + + +

    +Limits on the values the parameter may take.

    +

    + + + + +
    + + + + +
    const char* stp_parameter_t::category
    +
    + + + + + +
    +   + + +

    +User-visible category name.

    +

    + + + + +
    + + + + +
    unsigned char stp_parameter_t::channel
    +
    + + + + + +
    +   + + +

    +The channel to which this parameter applies

    +

    + + + + +
    + + + + +
    stp_curve_t* stp_parameter_t::curve
    +
    + + + + + +
    +   + + +

    +Default curve parameter value.

    +

    + + + + +
    + + + + +
    stp_curve_t* stp_parameter_t::curve
    +
    + + + + + +
    +   + + +

    +curve parameter value.

    +

    + + + + +
    + + + + +
    double stp_parameter_t::dbl
    +
    + + + + + +
    +   + + +

    +Default double parameter value.

    +

    + + + + +
    + + + + +
    stp_double_bound_t stp_parameter_t::dbl
    +
    + + + + + +
    +   + + +

    +double_bound parameter value.

    +

    + + + + +
    + + + + +
    union { ... } stp_parameter_t::deflt
    +
    + + + + + +
    +   + + +

    +Default value of the parameter.

    +

    + + + + +
    + + + + +
    int stp_parameter_t::dimension
    +
    + + + + + +
    +   + + +

    +Default dimension parameter value.

    +

    + + + + +
    + + + + +
    stp_int_bound_t stp_parameter_t::dimension
    +
    + + + + + +
    +   + + +

    +int_bound parameter value.

    +

    + + + + +
    + + + + +
    const char* stp_parameter_t::help
    +
    + + + + + +
    +   + + +

    +Help string.

    +

    + + + + +
    + + + + +
    int stp_parameter_t::integer
    +
    + + + + + +
    +   + + +

    +Default int parameter value.

    +

    + + + + +
    + + + + +
    stp_int_bound_t stp_parameter_t::integer
    +
    + + + + + +
    +   + + +

    +int_bound parameter value.

    +

    + + + + +
    + + + + +
    unsigned char stp_parameter_t::is_active
    +
    + + + + + +
    +   + + +

    +Is the parameter active?

    +

    + + + + +
    + + + + +
    unsigned char stp_parameter_t::is_mandatory
    +
    + + + + + +
    +   + + +

    +The parameter is required, even when set inactive.

    +

    + + + + +
    + + + + +
    const char* stp_parameter_t::name
    +
    + + + + + +
    +   + + +

    +Internal name (key).

    +

    + + + + +
    + + + + +
    stp_parameter_class_t stp_parameter_t::p_class
    +
    + + + + + +
    +   + + +

    +Parameter class.

    +

    + + + + +
    + + + + +
    stp_parameter_level_t stp_parameter_t::p_level
    +
    + + + + + +
    +   + + +

    +Parameter level.

    +

    + + + + +
    + + + + +
    stp_parameter_type_t stp_parameter_t::p_type
    +
    + + + + + +
    +   + + +

    +Parameter type.

    +

    + + + + +
    + + + + +
    unsigned char stp_parameter_t::read_only
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    const char* stp_parameter_t::str
    +
    + + + + + +
    +   + + +

    +Default string parameter value.

    +

    + + + + +
    + + + + +
    stp_string_list_t* stp_parameter_t::str
    +
    + + + + + +
    +   + + +

    +string_list parameter value.

    +

    + + + + +
    + + + + +
    const char* stp_parameter_t::text
    +
    + + + + + +
    +   + + +

    +User-visible name.

    +

    + + + + +
    + + + + +
    unsigned char stp_parameter_t::verify_this_parameter
    +
    + + + + + +
    +   + + +

    +Should the verify system check this parameter?

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__pass__t.html b/doc/gutenprint/html/structstp__pass__t.html new file mode 100644 index 0000000..3147848 --- /dev/null +++ b/doc/gutenprint/html/structstp__pass__t.html @@ -0,0 +1,171 @@ + + +libgutenprint API Reference: stp_pass_t Struct Reference + + + + +

    stp_pass_t Struct Reference

    #include <weave.h> +

    + + + + + + + + + + + + + + + +

    Data Fields

    int pass
    int missingstartrows
    int logicalpassstart
    int physpassstart
    int physpassend
    int subpass
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_pass_t::logicalpassstart
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_pass_t::missingstartrows
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_pass_t::pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_pass_t::physpassend
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_pass_t::physpassstart
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_pass_t::subpass
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__printfuncs__t.html b/doc/gutenprint/html/structstp__printfuncs__t.html new file mode 100644 index 0000000..ad1c517 --- /dev/null +++ b/doc/gutenprint/html/structstp__printfuncs__t.html @@ -0,0 +1,299 @@ + + +libgutenprint API Reference: stp_printfuncs_t Struct Reference + + + + +

    stp_printfuncs_t Struct Reference
    + +[printer] +

    #include <printers.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    stp_parameter_list_t(* list_parameters )(const stp_vars_t *v)
    void(* parameters )(const stp_vars_t *v, const char *name, stp_parameter_t *)
    void(* media_size )(const stp_vars_t *v, int *width, int *height)
    void(* imageable_area )(const stp_vars_t *v, int *left, int *right, int *bottom, int *top)
    void(* limit )(const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height)
    int(* print )(const stp_vars_t *v, stp_image_t *image)
    void(* describe_resolution )(const stp_vars_t *v, int *x, int *y)
    const char *(* describe_output )(const stp_vars_t *v)
    int(* verify )(stp_vars_t *v)
    int(* start_job )(const stp_vars_t *v, stp_image_t *image)
    int(* end_job )(const stp_vars_t *v, stp_image_t *image)
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    const char*(* stp_printfuncs_t::describe_output)(const stp_vars_t *v)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stp_printfuncs_t::describe_resolution)(const stp_vars_t *v, int *x, int *y)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_printfuncs_t::end_job)(const stp_vars_t *v, stp_image_t *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stp_printfuncs_t::imageable_area)(const stp_vars_t *v, int *left, int *right, int *bottom, int *top)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stp_printfuncs_t::limit)(const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_parameter_list_t(* stp_printfuncs_t::list_parameters)(const stp_vars_t *v)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stp_printfuncs_t::media_size)(const stp_vars_t *v, int *width, int *height)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stp_printfuncs_t::parameters)(const stp_vars_t *v, const char *name, stp_parameter_t *)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_printfuncs_t::print)(const stp_vars_t *v, stp_image_t *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_printfuncs_t::start_job)(const stp_vars_t *v, stp_image_t *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int(* stp_printfuncs_t::verify)(stp_vars_t *v)
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__raw__t.html b/doc/gutenprint/html/structstp__raw__t.html new file mode 100644 index 0000000..d07efa4 --- /dev/null +++ b/doc/gutenprint/html/structstp__raw__t.html @@ -0,0 +1,80 @@ + + +libgutenprint API Reference: stp_raw_t Struct Reference + + + + +

    stp_raw_t Struct Reference
    + +[vars] +

    Raw parameter. +More... +

    +#include <vars.h> +

    + + + + + + + +

    Data Fields

    size_t bytes
    const void * data
    +


    Detailed Description

    +Raw parameter. +

    +


    Field Documentation

    +

    + + + + +
    + + + + +
    size_t stp_raw_t::bytes
    +
    + + + + + +
    +   + + +

    +Size of data.

    +

    + + + + +
    + + + + +
    const void* stp_raw_t::data
    +
    + + + + + +
    +   + + +

    +Raw data.

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__shade.html b/doc/gutenprint/html/structstp__shade.html new file mode 100644 index 0000000..13501e8 --- /dev/null +++ b/doc/gutenprint/html/structstp__shade.html @@ -0,0 +1,96 @@ + + +libgutenprint API Reference: stp_shade Struct Reference + + + + +

    stp_shade Struct Reference

    #include <dither.h> +

    + + + + + + + + + +

    Data Fields

    double value
    int numsizes
    const stp_dotsize_tdot_sizes
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    const stp_dotsize_t* stp_shade::dot_sizes
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_shade::numsizes
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    double stp_shade::value
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/structstp__weave__t.html b/doc/gutenprint/html/structstp__weave__t.html new file mode 100644 index 0000000..a9bd84c --- /dev/null +++ b/doc/gutenprint/html/structstp__weave__t.html @@ -0,0 +1,196 @@ + + +libgutenprint API Reference: stp_weave_t Struct Reference + + + + +

    stp_weave_t Struct Reference

    #include <weave.h> +

    + + + + + + + + + + + + + + + + + +

    Data Fields

    int row
    int pass
    int jet
    int missingstartrows
    int logicalpassstart
    int physpassstart
    int physpassend
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stp_weave_t::jet
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_weave_t::logicalpassstart
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_weave_t::missingstartrows
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_weave_t::pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_weave_t::physpassend
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_weave_t::physpassstart
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_weave_t::row
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/unionstp__mxml__value__u.html b/doc/gutenprint/html/unionstp__mxml__value__u.html new file mode 100644 index 0000000..7c2cb48 --- /dev/null +++ b/doc/gutenprint/html/unionstp__mxml__value__u.html @@ -0,0 +1,146 @@ + + +libgutenprint API Reference: stp_mxml_value_u Union Reference + + + + +

    stp_mxml_value_u Union Reference

    #include <mxml.h> +

    + + + + + + + + + + + + + +

    Data Fields

    stp_mxml_element_t element
    int integer
    char * opaque
    double real
    stp_mxml_text_t text
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    stp_mxml_element_t stp_mxml_value_u::element
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stp_mxml_value_u::integer
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stp_mxml_value_u::opaque
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    double stp_mxml_value_u::real
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_mxml_text_t stp_mxml_value_u::text
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this union was generated from the following file: +
    Generated on Sat Jul 2 09:45:10 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/util_8h.html b/doc/gutenprint/html/util_8h.html new file mode 100644 index 0000000..655f5ef --- /dev/null +++ b/doc/gutenprint/html/util_8h.html @@ -0,0 +1,140 @@ + + +libgutenprint API Reference: include/gutenprint/util.h File Reference + + + + + +

    util.h File Reference

    Utility functions. More... +

    +#include <gutenprint/curve.h>
    +#include <gutenprint/vars.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Defines

    #define STP_DBG_LUT   0x1
    #define STP_DBG_COLORFUNC   0x2
    #define STP_DBG_INK   0x4
    #define STP_DBG_PS   0x8
    #define STP_DBG_PCL   0x10
    #define STP_DBG_ESCP2   0x20
    #define STP_DBG_CANON   0x40
    #define STP_DBG_LEXMARK   0x80
    #define STP_DBG_WEAVE_PARAMS   0x100
    #define STP_DBG_ROWS   0x200
    #define STP_DBG_MARK_FILE   0x400
    #define STP_DBG_LIST   0x800
    #define STP_DBG_MODULE   0x1000
    #define STP_DBG_PATH   0x2000
    #define STP_DBG_PAPER   0x4000
    #define STP_DBG_PRINTERS   0x8000
    #define STP_DBG_XML   0x10000
    #define STP_DBG_VARS   0x20000
    #define STP_DBG_OLYMPUS   0x40000
    #define STP_DBG_CURVE   0x80000
    #define STP_DBG_CURVE_ERRORS   0x100000
    #define STP_SAFE_FREE(x)

    Functions

    int stp_init (void)
     Initialise libgimpprint.
    const char * stp_set_output_codeset (const char *codeset)
     Set the output encoding.
    stp_curve_tstp_read_and_compose_curves (const char *s1, const char *s2, stp_curve_compose_t comp, size_t piecewise_point_count)
    void stp_abort (void)
    void stp_prune_inactive_options (stp_vars_t *v)
    void stp_zprintf (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__
    void void stp_zfwrite (const char *buf, size_t bytes, size_t nitems, const stp_vars_t *v)
    void stp_putc (int ch, const stp_vars_t *v)
    void stp_put16_le (unsigned short sh, const stp_vars_t *v)
    void stp_put16_be (unsigned short sh, const stp_vars_t *v)
    void stp_put32_le (unsigned int sh, const stp_vars_t *v)
    void stp_put32_be (unsigned int sh, const stp_vars_t *v)
    void stp_puts (const char *s, const stp_vars_t *v)
    void stp_send_command (const stp_vars_t *v, const char *command, const char *format,...)
    void stp_erputc (int ch)
    void stp_eprintf (const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__
    void void stp_erprintf (const char *format,...) __attribute__((format(__printf__
    void void void stp_asprintf (char **strp, const char *format,...) __attribute__((format(__printf__
    void void void void stp_catprintf (char **strp, const char *format,...) __attribute__((format(__printf__
    unsigned long stp_get_debug_level (void)
    void stp_dprintf (unsigned long level, const stp_vars_t *v, const char *format,...) __attribute__((format(__printf__
    void void stp_deprintf (unsigned long level, const char *format,...) __attribute__((format(__printf__
    void void void stp_init_debug_messages (stp_vars_t *v)
    void stp_flush_debug_messages (stp_vars_t *v)
    void * stp_malloc (size_t)
    void * stp_zalloc (size_t)
    void * stp_realloc (void *ptr, size_t)
    void stp_free (void *ptr)
    size_t stp_strlen (const char *s)
    char * stp_strndup (const char *s, int n)
    char * stp_strdup (const char *s)
    const char * stp_get_version (void)
     Get the library version string (x.y.z).
    const char * stp_get_release_version (void)
     Get the library release version string (x.y).
    +


    Detailed Description

    +Utility functions. +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/vars_8h.html b/doc/gutenprint/html/vars_8h.html new file mode 100644 index 0000000..df4b4ab --- /dev/null +++ b/doc/gutenprint/html/vars_8h.html @@ -0,0 +1,477 @@ + + +libgutenprint API Reference: include/gutenprint/vars.h File Reference + + + + + +

    vars.h File Reference

    Print job functions. More... +

    +#include <gutenprint/array.h>
    +#include <gutenprint/curve.h>
    +#include <gutenprint/string-list.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_raw_t
     Raw parameter. More...
    struct  stp_double_bound_t
     double_bound (range) parameter. More...
    struct  stp_int_bound_t
     int_bound (range) parameter. More...
    struct  stp_parameter_t
     Parameter description. More...

    Typedefs

    typedef stp_vars stp_vars_t
     The vars opaque data type.
    typedef void * stp_parameter_list_t
     The parameter_list opaque data type.
    typedef const void * stp_const_parameter_list_t
     The constant parameter_list opaque data type.
    typedef void(* stp_outfunc_t )(void *data, const char *buffer, size_t bytes)
     Output function supplied by the calling application.
    typedef void *(* stp_copy_data_func_t )(void *)
    typedef void(* stp_free_data_func_t )(void *)
    typedef stp_compdata compdata_t

    Enumerations

    enum  stp_parameter_type_t {
    +  STP_PARAMETER_TYPE_STRING_LIST, +STP_PARAMETER_TYPE_INT, +STP_PARAMETER_TYPE_BOOLEAN, +STP_PARAMETER_TYPE_DOUBLE, +
    +  STP_PARAMETER_TYPE_CURVE, +STP_PARAMETER_TYPE_FILE, +STP_PARAMETER_TYPE_RAW, +STP_PARAMETER_TYPE_ARRAY, +
    +  STP_PARAMETER_TYPE_DIMENSION, +STP_PARAMETER_TYPE_INVALID +
    + }
     Parameter types. More...
    enum  stp_parameter_class_t { STP_PARAMETER_CLASS_FEATURE, +STP_PARAMETER_CLASS_OUTPUT, +STP_PARAMETER_CLASS_CORE, +STP_PARAMETER_CLASS_INVALID + }
     Parameter class. More...
    enum  stp_parameter_level_t {
    +  STP_PARAMETER_LEVEL_BASIC, +STP_PARAMETER_LEVEL_ADVANCED, +STP_PARAMETER_LEVEL_ADVANCED1, +STP_PARAMETER_LEVEL_ADVANCED2, +
    +  STP_PARAMETER_LEVEL_ADVANCED3, +STP_PARAMETER_LEVEL_ADVANCED4, +STP_PARAMETER_LEVEL_INTERNAL, +STP_PARAMETER_LEVEL_EXTERNAL, +
    +  STP_PARAMETER_LEVEL_INVALID +
    + }
     Parameter level. More...
    enum  stp_parameter_activity_t { STP_PARAMETER_INACTIVE, +STP_PARAMETER_DEFAULTED, +STP_PARAMETER_ACTIVE + }
     Parameter activity. More...
    enum  stp_parameter_verify_t { PARAMETER_BAD, +PARAMETER_OK, +PARAMETER_INACTIVE + }

    Functions

    stp_vars_tstp_vars_create (void)
     Create a new vars object.
    void stp_vars_copy (stp_vars_t *dest, const stp_vars_t *source)
     Copy a vars object.
    stp_vars_tstp_vars_create_copy (const stp_vars_t *source)
     Copy and allocate a vars object.
    void stp_vars_destroy (stp_vars_t *v)
     Destroy a vars object.
    void stp_set_driver (stp_vars_t *v, const char *val)
     Set the name of the printer driver.
    void stp_set_driver_n (stp_vars_t *v, const char *val, int bytes)
     Set the name of the printer driver.
    const char * stp_get_driver (const stp_vars_t *v)
     Get the name of the printer driver.
    void stp_set_color_conversion (stp_vars_t *v, const char *val)
     Set the name of the color conversion routine, if not the default.
    void stp_set_color_conversion_n (stp_vars_t *v, const char *val, int bytes)
     Set the name of the color conversion routine, if not the default.
    const char * stp_get_color_conversion (const stp_vars_t *v)
     Get the name of the color conversion routine.
    void stp_set_left (stp_vars_t *v, int val)
     Set the left edge of the image.
    int stp_get_left (const stp_vars_t *v)
     Get the left edge of the image.
    void stp_set_top (stp_vars_t *v, int val)
     Set the top edge of the image.
    int stp_get_top (const stp_vars_t *v)
     Get the top edge of the image.
    void stp_set_width (stp_vars_t *v, int val)
     Set the width of the image.
    int stp_get_width (const stp_vars_t *v)
     Get the width edge of the image.
    void stp_set_height (stp_vars_t *v, int val)
     Set the height of the image.
    int stp_get_height (const stp_vars_t *v)
     Get the height of the image.
    void stp_set_page_width (stp_vars_t *v, int val)
     Set the page width.
    int stp_get_page_width (const stp_vars_t *v)
     Get the page width.
    void stp_set_page_height (stp_vars_t *v, int val)
     Set the page height.
    int stp_get_page_height (const stp_vars_t *v)
     Get the page height.
    void stp_set_outfunc (stp_vars_t *v, stp_outfunc_t val)
     Set the function used to print output information.
    stp_outfunc_t stp_get_outfunc (const stp_vars_t *v)
     Get the function used to print output information.
    void stp_set_errfunc (stp_vars_t *v, stp_outfunc_t val)
     Set the function used to print error and diagnostic information.
    stp_outfunc_t stp_get_errfunc (const stp_vars_t *v)
     Get the function used to print output information.
    void stp_set_outdata (stp_vars_t *v, void *val)
     Set the output data.
    void * stp_get_outdata (const stp_vars_t *v)
     Get the output data.
    void stp_set_errdata (stp_vars_t *v, void *val)
     Set the error data.
    void * stp_get_errdata (const stp_vars_t *v)
     Get the error data.
    void stp_merge_printvars (stp_vars_t *user, const stp_vars_t *print)
     Merge defaults for a printer with user-chosen settings.
    stp_parameter_list_t stp_get_parameter_list (const stp_vars_t *v)
     List the available parameters for the currently chosen settings.
    size_t stp_parameter_list_count (stp_const_parameter_list_t list)
     List the number of available parameters for the currently chosen settings.
    const stp_parameter_tstp_parameter_find (stp_const_parameter_list_t list, const char *name)
     Find a parameter by its name.
    const stp_parameter_tstp_parameter_list_param (stp_const_parameter_list_t list, size_t item)
     Find a parameter by its index number.
    void stp_parameter_list_destroy (stp_parameter_list_t list)
     Destroy a parameter_list.
    stp_parameter_list_t stp_parameter_list_create (void)
     Create a parameter_list.
    void stp_parameter_list_add_param (stp_parameter_list_t list, const stp_parameter_t *item)
     Add a parameter to a parameter_list.
    stp_parameter_list_t stp_parameter_list_copy (stp_const_parameter_list_t list)
     Copy and allocate a parameter_list.
    void stp_parameter_list_append (stp_parameter_list_t list, stp_const_parameter_list_t append)
     Append one parameter_list to another.
    void stp_describe_parameter (const stp_vars_t *v, const char *name, stp_parameter_t *description)
     Describe a parameter in detail.
    void stp_parameter_description_destroy (stp_parameter_t *description)
     Destroy a parameter description.
    const stp_parameter_tstp_parameter_find_in_settings (const stp_vars_t *v, const char *name)
     Find a parameter by its name from a vars object.
    void stp_set_string_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a string parameter.
    void stp_set_string_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a string parameter.
    void stp_set_file_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a file parameter.
    void stp_set_file_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a file parameter.
    void stp_set_float_parameter (stp_vars_t *v, const char *parameter, double value)
     Set a float parameter.
    void stp_set_int_parameter (stp_vars_t *v, const char *parameter, int value)
     Set an integer parameter.
    void stp_set_dimension_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a dimension parameter.
    void stp_set_boolean_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a boolean parameter.
    void stp_set_curve_parameter (stp_vars_t *v, const char *parameter, const stp_curve_t *value)
     Set a curve parameter.
    void stp_set_array_parameter (stp_vars_t *v, const char *parameter, const stp_array_t *value)
     Set an array parameter.
    void stp_set_raw_parameter (stp_vars_t *v, const char *parameter, const void *value, size_t bytes)
     Set a raw parameter.
    void stp_scale_float_parameter (stp_vars_t *v, const char *parameter, double scale)
     Multiply the value of a float parameter by a scaling factor.
    void stp_set_default_string_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a default string parameter.
    void stp_set_default_string_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a default string parameter.
    void stp_set_default_file_parameter (stp_vars_t *v, const char *parameter, const char *value)
     Set a default file parameter.
    void stp_set_default_file_parameter_n (stp_vars_t *v, const char *parameter, const char *value, size_t bytes)
     Set a default file parameter.
    void stp_set_default_float_parameter (stp_vars_t *v, const char *parameter, double value)
     Set a default float parameter.
    void stp_set_default_int_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a default integer parameter.
    void stp_set_default_dimension_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a default dimension parameter.
    void stp_set_default_boolean_parameter (stp_vars_t *v, const char *parameter, int value)
     Set a default boolean parameter.
    void stp_set_default_curve_parameter (stp_vars_t *v, const char *parameter, const stp_curve_t *value)
     Set a default curve parameter.
    void stp_set_default_array_parameter (stp_vars_t *v, const char *parameter, const stp_array_t *value)
     Set a default array parameter.
    void stp_set_default_raw_parameter (stp_vars_t *v, const char *parameter, const void *value, size_t bytes)
     Set a default raw parameter.
    const char * stp_get_string_parameter (const stp_vars_t *v, const char *parameter)
     Get a string parameter.
    const char * stp_get_file_parameter (const stp_vars_t *v, const char *parameter)
     Get a file parameter.
    double stp_get_float_parameter (const stp_vars_t *v, const char *parameter)
     Get a float parameter.
    int stp_get_int_parameter (const stp_vars_t *v, const char *parameter)
     Get an integer parameter.
    int stp_get_dimension_parameter (const stp_vars_t *v, const char *parameter)
     Get a dimension parameter.
    int stp_get_boolean_parameter (const stp_vars_t *v, const char *parameter)
     Get a boolean parameter.
    const stp_curve_tstp_get_curve_parameter (const stp_vars_t *v, const char *parameter)
     Get a curve parameter.
    const stp_array_tstp_get_array_parameter (const stp_vars_t *v, const char *parameter)
     Get an array parameter.
    const stp_raw_tstp_get_raw_parameter (const stp_vars_t *v, const char *parameter)
     Get a raw parameter.
    void stp_clear_string_parameter (stp_vars_t *v, const char *parameter)
     Clear a string parameter.
    void stp_clear_file_parameter (stp_vars_t *v, const char *parameter)
     Clear a file parameter.
    void stp_clear_float_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) a float parameter.
    void stp_clear_int_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) an integer parameter.
    void stp_clear_dimension_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) a dimension parameter.
    void stp_clear_boolean_parameter (stp_vars_t *v, const char *parameter)
     Clear (remove) a boolean parameter.
    void stp_clear_curve_parameter (stp_vars_t *v, const char *parameter)
     Clear a curve parameter.
    void stp_clear_array_parameter (stp_vars_t *v, const char *parameter)
     Clear an array parameter.
    void stp_clear_raw_parameter (stp_vars_t *v, const char *parameter)
     Clear a raw parameter.
    void stp_set_string_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a string parameter.
    void stp_set_file_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a file parameter.
    void stp_set_float_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a float parameter.
    void stp_set_int_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of an integer parameter.
    void stp_set_dimension_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a dimension parameter.
    void stp_set_boolean_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a boolean parameter.
    void stp_set_curve_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a curveparameter.
    void stp_set_array_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of an array parameter.
    void stp_set_raw_parameter_active (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Set the activity of a raw parameter.
    int stp_check_string_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a string parameter is set.
    int stp_check_file_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a file parameter is set.
    int stp_check_float_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a float parameter is set.
    int stp_check_int_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if an integer parameter is set.
    int stp_check_dimension_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a dimension parameter is set.
    int stp_check_boolean_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a boolean parameter is set.
    int stp_check_curve_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a curve parameter is set.
    int stp_check_array_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if an array parameter is set.
    int stp_check_raw_parameter (const stp_vars_t *v, const char *parameter, stp_parameter_activity_t active)
     Check if a raw parameter is set.
    stp_parameter_activity_t stp_get_string_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a string parameter.
    stp_parameter_activity_t stp_get_file_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a file parameter.
    stp_parameter_activity_t stp_get_float_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a float parameter.
    stp_parameter_activity_t stp_get_int_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of an integer parameter.
    stp_parameter_activity_t stp_get_dimension_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a dimension parameter.
    stp_parameter_activity_t stp_get_boolean_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a boolean parameter.
    stp_parameter_activity_t stp_get_curve_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a curve parameter.
    stp_parameter_activity_t stp_get_array_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of an array parameter.
    stp_parameter_activity_t stp_get_raw_parameter_active (const stp_vars_t *v, const char *parameter)
     Get the activity status of a raw parameter.
    void stp_get_media_size (const stp_vars_t *v, int *width, int *height)
     Get the media (paper) size.
    void stp_get_imageable_area (const stp_vars_t *v, int *left, int *right, int *bottom, int *top)
     Get the imagable area of the page.
    void stp_get_size_limit (const stp_vars_t *v, int *max_width, int *max_height, int *min_width, int *min_height)
     Get the media size limits.
    void stp_describe_resolution (const stp_vars_t *v, int *x, int *y)
     Retrieve the printing resolution of the selected resolution.
    int stp_verify (stp_vars_t *v)
     Verify parameters.
    const stp_vars_tstp_default_settings (void)
     Get default global settings.
    void stp_allocate_component_data (stp_vars_t *v, const char *name, stp_copy_data_func_t copyfunc, stp_free_data_func_t freefunc, void *data)
    void stp_destroy_component_data (stp_vars_t *v, const char *name)
    void * stp_get_component_data (const stp_vars_t *v, const char *name)
    stp_parameter_verify_t stp_verify_parameter (const stp_vars_t *v, const char *parameter, int quiet)
    int stp_get_verified (const stp_vars_t *v)
    void stp_set_verified (stp_vars_t *v, int value)
    void stp_copy_options (stp_vars_t *vd, const stp_vars_t *vs)
    void stp_fill_parameter_settings (stp_parameter_t *desc, const stp_parameter_t *param)
    +


    Detailed Description

    +Print job functions. +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/weave_8h.html b/doc/gutenprint/html/weave_8h.html new file mode 100644 index 0000000..1d5a0ec --- /dev/null +++ b/doc/gutenprint/html/weave_8h.html @@ -0,0 +1,822 @@ + + +libgutenprint API Reference: include/gutenprint/weave.h File Reference + + + + + +

    weave.h File Reference

    Softweave functions. More... +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stp_weave_t
    struct  stp_pass_t
    struct  stp_lineoff_t
    struct  stp_lineactive_t
    struct  stp_linecount_t
    struct  stp_linebufs_t
    struct  stp_linebounds_t

    Defines

    #define STP_MAX_WEAVE   (16)

    Typedefs

    typedef int stp_packfunc (stp_vars_t *v, const unsigned char *line, int height, unsigned char *comp_buf, unsigned char **comp_ptr, int *first, int *last)
    typedef void stp_fillfunc (stp_vars_t *v, int row, int subpass, int width, int missingstartrows, int color)
    typedef void stp_flushfunc (stp_vars_t *v, int passno, int vertical_subpass)
    typedef int stp_compute_linewidth_func (stp_vars_t *v, int n)

    Enumerations

    enum  stp_weave_strategy_t {
    +  STP_WEAVE_ZIGZAG, +STP_WEAVE_ASCENDING, +STP_WEAVE_DESCENDING, +STP_WEAVE_ASCENDING_2X, +
    +  STP_WEAVE_STAGGERED, +STP_WEAVE_ASCENDING_3X +
    + }

    Functions

    void stp_initialize_weave (stp_vars_t *v, int jets, int separation, int oversample, int horizontal, int vertical, int ncolors, int bitwidth, int linewidth, int line_count, int first_line, int page_height, const int *head_offset, stp_weave_strategy_t, stp_flushfunc, stp_fillfunc, stp_packfunc, stp_compute_linewidth_func)
    void stp_flush_all (stp_vars_t *v)
    void stp_write_weave (stp_vars_t *v, unsigned char *const cols[])
    stp_lineoff_tstp_get_lineoffsets_by_pass (const stp_vars_t *v, int pass)
    stp_lineactive_tstp_get_lineactive_by_pass (const stp_vars_t *v, int pass)
    stp_linecount_tstp_get_linecount_by_pass (const stp_vars_t *v, int pass)
    const stp_linebufs_tstp_get_linebases_by_pass (const stp_vars_t *v, int pass)
    stp_pass_tstp_get_pass_by_pass (const stp_vars_t *v, int pass)
    void stp_weave_parameters_by_row (const stp_vars_t *v, int row, int vertical_subpass, stp_weave_t *w)

    Variables

    stp_packfunc stp_pack_tiff
    stp_packfunc stp_pack_uncompressed
    stp_fillfunc stp_fill_tiff
    stp_fillfunc stp_fill_uncompressed
    stp_compute_linewidth_func stp_compute_tiff_linewidth
    stp_compute_linewidth_func stp_compute_uncompressed_linewidth
    +


    Detailed Description

    +Softweave functions. +

    +


    Define Documentation

    +

    + + + + +
    + + + + +
    #define STP_MAX_WEAVE   (16)
    +
    + + + + + +
    +   + + +

    +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef int stp_compute_linewidth_func(stp_vars_t *v, int n)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef void stp_fillfunc(stp_vars_t *v, int row, int subpass, int width, int missingstartrows, int color)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef void stp_flushfunc(stp_vars_t *v, int passno, int vertical_subpass)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef int stp_packfunc(stp_vars_t *v, const unsigned char *line, int height, unsigned char *comp_buf, unsigned char **comp_ptr, int *first, int *last)
    +
    + + + + + +
    +   + + +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum stp_weave_strategy_t
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + + + + +
    STP_WEAVE_ZIGZAG  +
    STP_WEAVE_ASCENDING  +
    STP_WEAVE_DESCENDING  +
    STP_WEAVE_ASCENDING_2X  +
    STP_WEAVE_STAGGERED  +
    STP_WEAVE_ASCENDING_3X  +
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    void stp_flush_all stp_vars_t v  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_lineactive_t* stp_get_lineactive_by_pass const stp_vars_t v,
    int  pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    const stp_linebufs_t* stp_get_linebases_by_pass const stp_vars_t v,
    int  pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_linecount_t* stp_get_linecount_by_pass const stp_vars_t v,
    int  pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_lineoff_t* stp_get_lineoffsets_by_pass const stp_vars_t v,
    int  pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_pass_t* stp_get_pass_by_pass const stp_vars_t v,
    int  pass
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_initialize_weave stp_vars_t v,
    int  jets,
    int  separation,
    int  oversample,
    int  horizontal,
    int  vertical,
    int  ncolors,
    int  bitwidth,
    int  linewidth,
    int  line_count,
    int  first_line,
    int  page_height,
    const int *  head_offset,
    stp_weave_strategy_t ,
    stp_flushfunc ,
    stp_fillfunc ,
    stp_packfunc ,
    stp_compute_linewidth_func 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stp_weave_parameters_by_row const stp_vars_t v,
    int  row,
    int  vertical_subpass,
    stp_weave_t w
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_write_weave stp_vars_t v,
    unsigned char *const   cols[]
    +
    + + + + + +
    +   + + +

    +

    +


    Variable Documentation

    +

    + + + + +
    + + + + +
    stp_compute_linewidth_func stp_compute_tiff_linewidth
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_compute_linewidth_func stp_compute_uncompressed_linewidth
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_fillfunc stp_fill_tiff
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_fillfunc stp_fill_uncompressed
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_packfunc stp_pack_tiff
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_packfunc stp_pack_uncompressed
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprint/html/xml_8h.html b/doc/gutenprint/html/xml_8h.html new file mode 100644 index 0000000..374e47b --- /dev/null +++ b/doc/gutenprint/html/xml_8h.html @@ -0,0 +1,700 @@ + + +libgutenprint API Reference: include/gutenprint/xml.h File Reference + + + + + +

    xml.h File Reference

    XML tree functions. More... +

    +#include <gutenprint/mxml.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Typedefs

    typedef int(* stp_xml_parse_func )(stp_mxml_node_t *node, const char *file)

    Functions

    void stp_register_xml_parser (const char *name, stp_xml_parse_func parse_func)
    void stp_unregister_xml_parser (const char *name)
    void stp_register_xml_preload (const char *filename)
    void stp_unregister_xml_preload (const char *filename)
    int stp_xml_init_defaults (void)
    int stp_xml_parse_file (const char *file)
    long stp_xmlstrtol (const char *value)
    unsigned long stp_xmlstrtoul (const char *value)
    double stp_xmlstrtod (const char *textval)
    void stp_xml_init (void)
    void stp_xml_exit (void)
    stp_mxml_node_tstp_xml_get_node (stp_mxml_node_t *xmlroot,...)
    stp_mxml_node_tstp_xmldoc_create_generic (void)
    void stp_xml_preinit (void)
    stp_sequence_tstp_sequence_create_from_xmltree (stp_mxml_node_t *da)
    stp_mxml_node_tstp_xmltree_create_from_sequence (const stp_sequence_t *seq)
    stp_curve_tstp_curve_create_from_xmltree (stp_mxml_node_t *da)
    stp_mxml_node_tstp_xmltree_create_from_curve (const stp_curve_t *curve)
    stp_array_tstp_array_create_from_xmltree (stp_mxml_node_t *array)
    stp_mxml_node_tstp_xmltree_create_from_array (const stp_array_t *array)
    void stp_xml_parse_file_named (const char *name)
    +


    Detailed Description

    +XML tree functions. +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef int(* stp_xml_parse_func)(stp_mxml_node_t *node, const char *file)
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    stp_array_t* stp_array_create_from_xmltree stp_mxml_node_t array  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_curve_t* stp_curve_create_from_xmltree stp_mxml_node_t da  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stp_register_xml_parser const char *  name,
    stp_xml_parse_func  parse_func
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_register_xml_preload const char *  filename  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_sequence_t* stp_sequence_create_from_xmltree stp_mxml_node_t da  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_unregister_xml_parser const char *  name  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_unregister_xml_preload const char *  filename  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_xml_exit void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    stp_mxml_node_t* stp_xml_get_node stp_mxml_node_t xmlroot,
      ...
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_xml_init void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_xml_init_defaults void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stp_xml_parse_file const char *  file  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_xml_parse_file_named const char *  name  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stp_xml_preinit void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_mxml_node_t* stp_xmldoc_create_generic void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    double stp_xmlstrtod const char *  textval  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    long stp_xmlstrtol const char *  value  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    unsigned long stp_xmlstrtoul const char *  value  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_mxml_node_t* stp_xmltree_create_from_array const stp_array_t array  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_mxml_node_t* stp_xmltree_create_from_curve const stp_curve_t curve  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_mxml_node_t* stp_xmltree_create_from_sequence const stp_sequence_t seq  ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:09 2005 for libgutenprint API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2-stamp b/doc/gutenprintui2-stamp new file mode 100644 index 0000000..e69de29 diff --git a/doc/gutenprintui2.dox.in b/doc/gutenprintui2.dox.in new file mode 100644 index 0000000..5761bef --- /dev/null +++ b/doc/gutenprintui2.dox.in @@ -0,0 +1,1078 @@ +# Doxyfile 1.3.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "libgutenprintui2 API Reference" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./gutenprintui2 + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. It is allowed to use relative paths in the argument list. + +STRIP_FROM_PATH = ../ + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explict @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# reimplements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @top_srcdir@/include/gutenprintui2 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = @top_srcdir@/src/main/xmli18n-tmp.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output dir. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = YES + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimised for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assigments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = ./gutenprintui2/gutenprintui2.tag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = @PERL@ + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superceded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = NO + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similiar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/doc/gutenprintui2/gutenprintui2.tag b/doc/gutenprintui2/gutenprintui2.tag new file mode 100644 index 0000000..77ca577 --- /dev/null +++ b/doc/gutenprintui2/gutenprintui2.tag @@ -0,0 +1,1121 @@ + + + + curve.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprintui2/ + curve_8h + _StpuiCurve + _StpuiCurveClass + + #define + STPUI_TYPE_CURVE + curve_8h.html + a0 + + + + #define + STPUI_CURVE + curve_8h.html + a1 + (obj) + + + #define + STPUI_CURVE_CLASS + curve_8h.html + a2 + (klass) + + + #define + STPUI_IS_CURVE + curve_8h.html + a3 + (obj) + + + #define + STPUI_IS_CURVE_CLASS + curve_8h.html + a4 + (klass) + + + #define + STPUI_CURVE_GET_CLASS + curve_8h.html + a5 + (obj) + + + _StpuiCurve + StpuiCurve + curve_8h.html + a6 + + + + _StpuiCurveClass + StpuiCurveClass + curve_8h.html + a7 + + + + StpuiCurveType + a19 + + + + STPUI_CURVE_TYPE_LINEAR + a19a8 + + + + STPUI_CURVE_TYPE_SPLINE + a19a9 + + + + STPUI_CURVE_TYPE_FREE + a19a10 + + + + GType + stpui_curve_get_type + curve_8h.html + a11 + (void) G_GNUC_CONST + + + GtkWidget * + stpui_curve_new + curve_8h.html + a12 + (void) + + + void + stpui_curve_reset + curve_8h.html + a13 + (StpuiCurve *curve) + + + void + stpui_curve_set_gamma + curve_8h.html + a14 + (StpuiCurve *curve, gfloat gamma_) + + + void + stpui_curve_set_range + curve_8h.html + a15 + (StpuiCurve *curve, gfloat min_x, gfloat max_x, gfloat min_y, gfloat max_y) + + + void + stpui_curve_get_vector + curve_8h.html + a16 + (StpuiCurve *curve, int veclen, gfloat vector[]) + + + void + stpui_curve_set_vector + curve_8h.html + a17 + (StpuiCurve *curve, int veclen, const gfloat vector[]) + + + void + stpui_curve_set_curve_type + curve_8h.html + a18 + (StpuiCurve *curve, StpuiCurveType type) + + + + gammacurve.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprintui2/ + gammacurve_8h + _StpuiGammaCurve + _StpuiGammaCurveClass + + #define + STPUI_TYPE_GAMMA_CURVE + gammacurve_8h.html + a0 + + + + #define + STPUI_GAMMA_CURVE + gammacurve_8h.html + a1 + (obj) + + + #define + STPUI_GAMMA_CURVE_CLASS + gammacurve_8h.html + a2 + (klass) + + + #define + STPUI_IS_GAMMA_CURVE + gammacurve_8h.html + a3 + (obj) + + + #define + STPUI_IS_GAMMA_CURVE_CLASS + gammacurve_8h.html + a4 + (klass) + + + #define + STPUI_GAMMA_CURVE_GET_CLASS + gammacurve_8h.html + a5 + (obj) + + + _StpuiGammaCurve + StpuiGammaCurve + gammacurve_8h.html + a6 + + + + _StpuiGammaCurveClass + StpuiGammaCurveClass + gammacurve_8h.html + a7 + + + + GType + stpui_gamma_curve_get_type + gammacurve_8h.html + a8 + (void) G_GNUC_CONST + + + GtkWidget * + stpui_gamma_curve_new + gammacurve_8h.html + a9 + (void) + + + + gutenprintui.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprintui2/ + gutenprintui_8h + gutenprintui2/curve.h + gutenprintui2/gammacurve.h + gutenprintui2/typebuiltins.h + stpui_plist_t + stpui_image + + stpui_image + stpui_image_t + gutenprintui_8h.html + a0 + + + + guchar *(* + get_thumbnail_func_t + gutenprintui_8h.html + a1 + )(void *data, gint *width, gint *height, gint *bpp, gint page) + + + orient_t + a62 + + + + ORIENT_AUTO + a62a2 + + + + ORIENT_PORTRAIT + a62a3 + + + + ORIENT_LANDSCAPE + a62a4 + + + + ORIENT_UPSIDEDOWN + a62a5 + + + + ORIENT_SEASCAPE + a62a6 + + + + command_t + a63 + + + + COMMAND_TYPE_DEFAULT + a63a7 + + + + COMMAND_TYPE_CUSTOM + a63a8 + + + + COMMAND_TYPE_FILE + a63a9 + + + + void + stpui_plist_set_name + gutenprintui_8h.html + a10 + (stpui_plist_t *p, const char *val) + + + void + stpui_plist_set_name_n + gutenprintui_8h.html + a11 + (stpui_plist_t *p, const char *val, int n) + + + const char * + stpui_plist_get_name + gutenprintui_8h.html + a12 + (const stpui_plist_t *p) + + + void + stpui_plist_set_queue_name + gutenprintui_8h.html + a13 + (stpui_plist_t *p, const char *val) + + + void + stpui_plist_set_queue_name_n + gutenprintui_8h.html + a14 + (stpui_plist_t *p, const char *val, int n) + + + const char * + stpui_plist_get_queue_name + gutenprintui_8h.html + a15 + (const stpui_plist_t *p) + + + void + stpui_plist_set_output_filename + gutenprintui_8h.html + a16 + (stpui_plist_t *p, const char *val) + + + void + stpui_plist_set_output_filename_n + gutenprintui_8h.html + a17 + (stpui_plist_t *p, const char *val, int n) + + + const char * + stpui_plist_get_output_filename + gutenprintui_8h.html + a18 + (const stpui_plist_t *p) + + + void + stpui_plist_set_extra_printer_options + gutenprintui_8h.html + a19 + (stpui_plist_t *p, const char *val) + + + void + stpui_plist_set_extra_printer_options_n + gutenprintui_8h.html + a20 + (stpui_plist_t *p, const char *val, int n) + + + const char * + stpui_plist_get_extra_printer_options + gutenprintui_8h.html + a21 + (const stpui_plist_t *p) + + + void + stpui_plist_set_custom_command + gutenprintui_8h.html + a22 + (stpui_plist_t *p, const char *val) + + + void + stpui_plist_set_custom_command_n + gutenprintui_8h.html + a23 + (stpui_plist_t *p, const char *val, int n) + + + const char * + stpui_plist_get_custom_command + gutenprintui_8h.html + a24 + (const stpui_plist_t *p) + + + void + stpui_plist_set_copy_count + gutenprintui_8h.html + a25 + (stpui_plist_t *p, gint count) + + + int + stpui_plist_get_copy_count + gutenprintui_8h.html + a26 + (const stpui_plist_t *p) + + + void + stpui_plist_set_current_standard_command + gutenprintui_8h.html + a27 + (stpui_plist_t *p, const char *val) + + + void + stpui_plist_set_current_standard_command_n + gutenprintui_8h.html + a28 + (stpui_plist_t *p, const char *val, int n) + + + const char * + stpui_plist_get_current_standard_command + gutenprintui_8h.html + a29 + (const stpui_plist_t *p) + + + void + stpui_plist_set_command_type + gutenprintui_8h.html + a30 + (stpui_plist_t *p, command_t val) + + + command_t + stpui_plist_get_command_type + gutenprintui_8h.html + a31 + (const stpui_plist_t *p) + + + void + stpui_set_global_parameter + gutenprintui_8h.html + a32 + (const char *param, const char *value) + + + const char * + stpui_get_global_parameter + gutenprintui_8h.html + a33 + (const char *param) + + + void + stpui_plist_copy + gutenprintui_8h.html + a34 + (stpui_plist_t *vd, const stpui_plist_t *vs) + + + int + stpui_plist_add + gutenprintui_8h.html + a35 + (const stpui_plist_t *key, int add_only) + + + void + stpui_printer_initialize + gutenprintui_8h.html + a36 + (stpui_plist_t *printer) + + + const stpui_plist_t * + stpui_get_current_printer + gutenprintui_8h.html + a37 + (void) + + + char * + stpui_build_standard_print_command + gutenprintui_8h.html + a38 + (const stpui_plist_t *plist, const stp_printer_t *printer) + + + void + stpui_set_printrc_file + gutenprintui_8h.html + a39 + (const char *name) + + + const char * + stpui_get_printrc_file + gutenprintui_8h.html + a40 + (void) + + + void + stpui_printrc_load + gutenprintui_8h.html + a41 + (void) + + + void + stpui_get_system_printers + gutenprintui_8h.html + a42 + (void) + + + void + stpui_printrc_save + gutenprintui_8h.html + a43 + (void) + + + void + stpui_set_image_filename + gutenprintui_8h.html + a44 + (const char *) + + + const char * + stpui_get_image_filename + gutenprintui_8h.html + a45 + (void) + + + void + stpui_set_errfunc + gutenprintui_8h.html + a46 + (stp_outfunc_t wfunc) + + + stp_outfunc_t + stpui_get_errfunc + gutenprintui_8h.html + a47 + (void) + + + void + stpui_set_errdata + gutenprintui_8h.html + a48 + (void *errdata) + + + void * + stpui_get_errdata + gutenprintui_8h.html + a49 + (void) + + + gint + stpui_do_print_dialog + gutenprintui_8h.html + a50 + (void) + + + gint + stpui_compute_orientation + gutenprintui_8h.html + a51 + (void) + + + void + stpui_set_image_dimensions + gutenprintui_8h.html + a52 + (gint width, gint height) + + + void + stpui_set_image_resolution + gutenprintui_8h.html + a53 + (gdouble xres, gdouble yres) + + + void + stpui_set_image_type + gutenprintui_8h.html + a54 + (const char *image_type) + + + void + stpui_set_image_raw_channels + gutenprintui_8h.html + a55 + (gint channels) + + + void + stpui_set_image_channel_depth + gutenprintui_8h.html + a56 + (gint bit_depth) + + + void + stpui_set_thumbnail_func + gutenprintui_8h.html + a57 + (get_thumbnail_func_t) + + + get_thumbnail_func_t + stpui_get_thumbnail_func + gutenprintui_8h.html + a58 + (void) + + + void + stpui_set_thumbnail_data + gutenprintui_8h.html + a59 + (void *) + + + void * + stpui_get_thumbnail_data + gutenprintui_8h.html + a60 + (void) + + + int + stpui_print + gutenprintui_8h.html + a61 + (const stpui_plist_t *printer, stpui_image_t *im) + + + + typebuiltins.h + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprintui2/ + typebuiltins_8h + + #define + STPUI_TYPE_ORIENT_T + typebuiltins_8h.html + a0 + + + + #define + STPUI_TYPE_COMMAND_T + typebuiltins_8h.html + a1 + + + + #define + STPUI_TYPE_CURVE_TYPE + typebuiltins_8h.html + a2 + + + + G_BEGIN_DECLS GType + orient_t_orient_t_get_type + typebuiltins_8h.html + a3 + (void) + + + GType + command_t_command_t_get_type + typebuiltins_8h.html + a4 + (void) + + + GType + stpui_curve_type_get_type + typebuiltins_8h.html + a5 + (void) + + + + _StpuiCurve + struct__StpuiCurve.html + + GtkDrawingArea + graph + struct__StpuiCurve.html + o0 + + + + gint + cursor_type + struct__StpuiCurve.html + o1 + + + + gfloat + min_x + struct__StpuiCurve.html + o2 + + + + gfloat + max_x + struct__StpuiCurve.html + o3 + + + + gfloat + min_y + struct__StpuiCurve.html + o4 + + + + gfloat + max_y + struct__StpuiCurve.html + o5 + + + + GdkPixmap * + pixmap + struct__StpuiCurve.html + o6 + + + + StpuiCurveType + curve_type + struct__StpuiCurve.html + o7 + + + + gint + height + struct__StpuiCurve.html + o8 + + + + gint + grab_point + struct__StpuiCurve.html + o9 + + + + gint + last + struct__StpuiCurve.html + o10 + + + + gint + num_points + struct__StpuiCurve.html + o11 + + + + GdkPoint * + point + struct__StpuiCurve.html + o12 + + + + gint + num_ctlpoints + struct__StpuiCurve.html + o13 + + + + gfloat(* + ctlpoint + struct__StpuiCurve.html + o14 + )[2] + + + + _StpuiCurveClass + struct__StpuiCurveClass.html + + GtkDrawingAreaClass + parent_class + struct__StpuiCurveClass.html + o0 + + + + void(* + curve_type_changed + struct__StpuiCurveClass.html + o1 + )(StpuiCurve *curve) + + + void(* + _gtk_reserved1 + struct__StpuiCurveClass.html + o2 + )(void) + + + void(* + _gtk_reserved2 + struct__StpuiCurveClass.html + o3 + )(void) + + + void(* + _gtk_reserved3 + struct__StpuiCurveClass.html + o4 + )(void) + + + void(* + _gtk_reserved4 + struct__StpuiCurveClass.html + o5 + )(void) + + + + _StpuiGammaCurve + struct__StpuiGammaCurve.html + + GtkVBox + vbox + struct__StpuiGammaCurve.html + o0 + + + + GtkWidget * + table + struct__StpuiGammaCurve.html + o1 + + + + GtkWidget * + curve + struct__StpuiGammaCurve.html + o2 + + + + GtkWidget * + button + struct__StpuiGammaCurve.html + o3 + [5] + + + gfloat + gamma + struct__StpuiGammaCurve.html + o4 + + + + GtkWidget * + gamma_dialog + struct__StpuiGammaCurve.html + o5 + + + + GtkWidget * + gamma_text + struct__StpuiGammaCurve.html + o6 + + + + + _StpuiGammaCurveClass + struct__StpuiGammaCurveClass.html + + GtkVBoxClass + parent_class + struct__StpuiGammaCurveClass.html + o0 + + + + void(* + _gtk_reserved1 + struct__StpuiGammaCurveClass.html + o1 + )(void) + + + void(* + _gtk_reserved2 + struct__StpuiGammaCurveClass.html + o2 + )(void) + + + void(* + _gtk_reserved3 + struct__StpuiGammaCurveClass.html + o3 + )(void) + + + void(* + _gtk_reserved4 + struct__StpuiGammaCurveClass.html + o4 + )(void) + + + + stpui_image + structstpui__image.html + + stp_image_t + im + structstpui__image.html + o0 + + + + void(* + transpose + structstpui__image.html + o1 + )(struct stpui_image *image) + + + void(* + hflip + structstpui__image.html + o2 + )(struct stpui_image *image) + + + void(* + vflip + structstpui__image.html + o3 + )(struct stpui_image *image) + + + void(* + rotate_ccw + structstpui__image.html + o4 + )(struct stpui_image *image) + + + void(* + rotate_cw + structstpui__image.html + o5 + )(struct stpui_image *image) + + + void(* + rotate_180 + structstpui__image.html + o6 + )(struct stpui_image *image) + + + void(* + crop + structstpui__image.html + o7 + )(struct stpui_image *image, int left, int top, int right, int bottom) + + + + stpui_plist_t + structstpui__plist__t.html + + char * + name + structstpui__plist__t.html + o0 + + + + command_t + command_type + structstpui__plist__t.html + o1 + + + + char * + queue_name + structstpui__plist__t.html + o2 + + + + char * + extra_printer_options + structstpui__plist__t.html + o3 + + + + char * + custom_command + structstpui__plist__t.html + o4 + + + + char * + current_standard_command + structstpui__plist__t.html + o5 + + + + char * + output_filename + structstpui__plist__t.html + o6 + + + + float + scaling + structstpui__plist__t.html + o7 + + + + orient_t + orientation + structstpui__plist__t.html + o8 + + + + int + unit + structstpui__plist__t.html + o9 + + + + int + auto_size_roll_feed_paper + structstpui__plist__t.html + o10 + + + + int + invalid_mask + structstpui__plist__t.html + o11 + + + + stp_vars_t * + v + structstpui__plist__t.html + o12 + + + + + include/gutenprintui2/ + /home/rleigh/gutenprint-5.0.0-rc1/include/gutenprintui2/ + dir_000001.html + curve.h + gammacurve.h + gutenprintui.h + typebuiltins.h + + + include/ + /home/rleigh/gutenprint-5.0.0-rc1/include/ + dir_000000.html + include/gutenprintui2/ + + diff --git a/doc/gutenprintui2/html/annotated.html b/doc/gutenprintui2/html/annotated.html new file mode 100644 index 0000000..7a75739 --- /dev/null +++ b/doc/gutenprintui2/html/annotated.html @@ -0,0 +1,20 @@ + + +libgutenprintui2 API Reference: Data Structures + + + + +

    libgutenprintui2 API Reference Data Structures

    Here are the data structures with brief descriptions: + + + + + + +
    _StpuiCurve
    _StpuiCurveClass
    _StpuiGammaCurve
    _StpuiGammaCurveClass
    stpui_image
    stpui_plist_t
    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/classes.html b/doc/gutenprintui2/html/classes.html new file mode 100644 index 0000000..2ce1ae7 --- /dev/null +++ b/doc/gutenprintui2/html/classes.html @@ -0,0 +1,17 @@ + + +libgutenprintui2 API Reference: Alphabetical List + + + + +

    libgutenprintui2 API Reference Data Structure Index

    _ | S

    + +
      _  
    +
    _StpuiCurveClass   _StpuiGammaCurveClass   stpui_image   stpui_plist_t   
    _StpuiCurve   _StpuiGammaCurve   
      S  
    +

    _ | S

    +


    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/curve_8h.html b/doc/gutenprintui2/html/curve_8h.html new file mode 100644 index 0000000..f9db692 --- /dev/null +++ b/doc/gutenprintui2/html/curve_8h.html @@ -0,0 +1,610 @@ + + +libgutenprintui2 API Reference: include/gutenprintui2/curve.h File Reference + + + + + +

    curve.h File Reference

    #include <gdk/gdk.h>
    +#include <gtk/gtkdrawingarea.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  _StpuiCurve
    struct  _StpuiCurveClass

    Defines

    #define STPUI_TYPE_CURVE   (stpui_curve_get_type ())
    #define STPUI_CURVE(obj)   (G_TYPE_CHECK_INSTANCE_CAST ((obj), STPUI_TYPE_CURVE, StpuiCurve))
    #define STPUI_CURVE_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), STPUI_TYPE_CURVE, StpuiCurveClass))
    #define STPUI_IS_CURVE(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), STPUI_TYPE_CURVE))
    #define STPUI_IS_CURVE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), STPUI_TYPE_CURVE))
    #define STPUI_CURVE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), STPUI_TYPE_CURVE, StpuiCurveClass))

    Typedefs

    typedef _StpuiCurve StpuiCurve
    typedef _StpuiCurveClass StpuiCurveClass

    Enumerations

    enum  StpuiCurveType { STPUI_CURVE_TYPE_LINEAR, +STPUI_CURVE_TYPE_SPLINE, +STPUI_CURVE_TYPE_FREE + }

    Functions

    GType stpui_curve_get_type (void) G_GNUC_CONST
    GtkWidget * stpui_curve_new (void)
    void stpui_curve_reset (StpuiCurve *curve)
    void stpui_curve_set_gamma (StpuiCurve *curve, gfloat gamma_)
    void stpui_curve_set_range (StpuiCurve *curve, gfloat min_x, gfloat max_x, gfloat min_y, gfloat max_y)
    void stpui_curve_get_vector (StpuiCurve *curve, int veclen, gfloat vector[])
    void stpui_curve_set_vector (StpuiCurve *curve, int veclen, const gfloat vector[])
    void stpui_curve_set_curve_type (StpuiCurve *curve, StpuiCurveType type)
    +

    Define Documentation

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_CURVE obj   )    (G_TYPE_CHECK_INSTANCE_CAST ((obj), STPUI_TYPE_CURVE, StpuiCurve))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_CURVE_CLASS klass   )    (G_TYPE_CHECK_CLASS_CAST ((klass), STPUI_TYPE_CURVE, StpuiCurveClass))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_CURVE_GET_CLASS obj   )    (G_TYPE_INSTANCE_GET_CLASS ((obj), STPUI_TYPE_CURVE, StpuiCurveClass))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_IS_CURVE obj   )    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), STPUI_TYPE_CURVE))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_IS_CURVE_CLASS klass   )    (G_TYPE_CHECK_CLASS_TYPE ((klass), STPUI_TYPE_CURVE))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STPUI_TYPE_CURVE   (stpui_curve_get_type ())
    +
    + + + + + +
    +   + + +

    +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct _StpuiCurve StpuiCurve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct _StpuiCurveClass StpuiCurveClass
    +
    + + + + + +
    +   + + +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum StpuiCurveType
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + +
    STPUI_CURVE_TYPE_LINEAR  +
    STPUI_CURVE_TYPE_SPLINE  +
    STPUI_CURVE_TYPE_FREE  +
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    GType stpui_curve_get_type void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_curve_get_vector StpuiCurve curve,
    int  veclen,
    gfloat  vector[]
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    GtkWidget* stpui_curve_new void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_curve_reset StpuiCurve curve  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_curve_set_curve_type StpuiCurve curve,
    StpuiCurveType  type
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_curve_set_gamma StpuiCurve curve,
    gfloat  gamma_
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_curve_set_range StpuiCurve curve,
    gfloat  min_x,
    gfloat  max_x,
    gfloat  min_y,
    gfloat  max_y
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_curve_set_vector StpuiCurve curve,
    int  veclen,
    const gfloat  vector[]
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/dir_000000.html b/doc/gutenprintui2/html/dir_000000.html new file mode 100644 index 0000000..a363ef1 --- /dev/null +++ b/doc/gutenprintui2/html/dir_000000.html @@ -0,0 +1,20 @@ + + +libgutenprintui2 API Reference: include/ Directory Reference + + + + + +

    include Directory Reference

    + + + + +

    Directories

    directory  gutenprintui2
    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/dir_000001.html b/doc/gutenprintui2/html/dir_000001.html new file mode 100644 index 0000000..3489cc8 --- /dev/null +++ b/doc/gutenprintui2/html/dir_000001.html @@ -0,0 +1,26 @@ + + +libgutenprintui2 API Reference: include/gutenprintui2/ Directory Reference + + + + + +

    gutenprintui2 Directory Reference

    + + + + + + + + + + +

    Files

    file  curve.h
    file  gammacurve.h
    file  gutenprintui.h
    file  typebuiltins.h
    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/dirs.html b/doc/gutenprintui2/html/dirs.html new file mode 100644 index 0000000..eb2b34e --- /dev/null +++ b/doc/gutenprintui2/html/dirs.html @@ -0,0 +1,18 @@ + + +libgutenprintui2 API Reference: Directory Hierarchy + + + + +

    libgutenprintui2 API Reference Directories

    This directory hierarchy is sorted roughly, but not completely, alphabetically: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/doxygen.css b/doc/gutenprintui2/html/doxygen.css new file mode 100644 index 0000000..decae9e --- /dev/null +++ b/doc/gutenprintui2/html/doxygen.css @@ -0,0 +1,309 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: Fixed, monospace; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdPrefix { + background-color: #F4F4FB; + color: #606060; + font-size: 80%; +} +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #eeeeff; +} +TD.tiny { font-size: 75%; +} +a { + color: #252E78; +} +a:visited { + color: #3D2185; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #b0b0b0; +} +TH.dirtab { background: #eeeeff; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} diff --git a/doc/gutenprintui2/html/doxygen.png b/doc/gutenprintui2/html/doxygen.png new file mode 100644 index 0000000..f0a274b Binary files /dev/null and b/doc/gutenprintui2/html/doxygen.png differ diff --git a/doc/gutenprintui2/html/files.html b/doc/gutenprintui2/html/files.html new file mode 100644 index 0000000..86191e9 --- /dev/null +++ b/doc/gutenprintui2/html/files.html @@ -0,0 +1,18 @@ + + +libgutenprintui2 API Reference: File Index + + + + +

    libgutenprintui2 API Reference File List

    Here is a list of all files with brief descriptions: + + + + +
    include/gutenprintui2/curve.h
    include/gutenprintui2/gammacurve.h
    include/gutenprintui2/gutenprintui.h
    include/gutenprintui2/typebuiltins.h
    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/functions.html b/doc/gutenprintui2/html/functions.html new file mode 100644 index 0000000..5e75be7 --- /dev/null +++ b/doc/gutenprintui2/html/functions.html @@ -0,0 +1,105 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + +
    _ | a | b | c | e | g | h | i | l | m | n | o | p | q | r | s | t | u | v
    + +

    +Here is a list of all struct and union fields with links to the structures/unions they belong to: +

    +

    - _ -

    +

    - a -

    +

    - b -

    +

    - c -

    +

    - e -

    +

    - g -

    +

    - h -

    +

    - i -

    +

    - l -

    +

    - m -

    +

    - n -

    +

    - o -

    +

    - p -

    +

    - q -

    +

    - r -

    +

    - s -

    +

    - t -

    +

    - u -

    +

    - v -

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/functions_vars.html b/doc/gutenprintui2/html/functions_vars.html new file mode 100644 index 0000000..f881c75 --- /dev/null +++ b/doc/gutenprintui2/html/functions_vars.html @@ -0,0 +1,105 @@ + + +libgutenprintui2 API Reference: Data Fields - Variables + + + + + +
    _ | a | b | c | e | g | h | i | l | m | n | o | p | q | r | s | t | u | v
    + +

    + +

    +

    - _ -

    +

    - a -

    +

    - b -

    +

    - c -

    +

    - e -

    +

    - g -

    +

    - h -

    +

    - i -

    +

    - l -

    +

    - m -

    +

    - n -

    +

    - o -

    +

    - p -

    +

    - q -

    +

    - r -

    +

    - s -

    +

    - t -

    +

    - u -

    +

    - v -

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/gammacurve_8h.html b/doc/gutenprintui2/html/gammacurve_8h.html new file mode 100644 index 0000000..c3ba173 --- /dev/null +++ b/doc/gutenprintui2/html/gammacurve_8h.html @@ -0,0 +1,315 @@ + + +libgutenprintui2 API Reference: include/gutenprintui2/gammacurve.h File Reference + + + + + +

    gammacurve.h File Reference

    #include <gdk/gdk.h>
    +#include <gtk/gtkvbox.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  _StpuiGammaCurve
    struct  _StpuiGammaCurveClass

    Defines

    #define STPUI_TYPE_GAMMA_CURVE   (stpui_gamma_curve_get_type ())
    #define STPUI_GAMMA_CURVE(obj)   (G_TYPE_CHECK_INSTANCE_CAST ((obj), STPUI_TYPE_GAMMA_CURVE, StpuiGammaCurve))
    #define STPUI_GAMMA_CURVE_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), STPUI_TYPE_GAMMA_CURVE, StpuiGammaCurveClass))
    #define STPUI_IS_GAMMA_CURVE(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), STPUI_TYPE_GAMMA_CURVE))
    #define STPUI_IS_GAMMA_CURVE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), STPUI_TYPE_GAMMA_CURVE))
    #define STPUI_GAMMA_CURVE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), STPUI_TYPE_GAMMA_CURVE, StpuiGammaCurveClass))

    Typedefs

    typedef _StpuiGammaCurve StpuiGammaCurve
    typedef _StpuiGammaCurveClass StpuiGammaCurveClass

    Functions

    GType stpui_gamma_curve_get_type (void) G_GNUC_CONST
    GtkWidget * stpui_gamma_curve_new (void)
    +

    Define Documentation

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_GAMMA_CURVE obj   )    (G_TYPE_CHECK_INSTANCE_CAST ((obj), STPUI_TYPE_GAMMA_CURVE, StpuiGammaCurve))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_GAMMA_CURVE_CLASS klass   )    (G_TYPE_CHECK_CLASS_CAST ((klass), STPUI_TYPE_GAMMA_CURVE, StpuiGammaCurveClass))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_GAMMA_CURVE_GET_CLASS obj   )    (G_TYPE_INSTANCE_GET_CLASS ((obj), STPUI_TYPE_GAMMA_CURVE, StpuiGammaCurveClass))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_IS_GAMMA_CURVE obj   )    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), STPUI_TYPE_GAMMA_CURVE))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    #define STPUI_IS_GAMMA_CURVE_CLASS klass   )    (G_TYPE_CHECK_CLASS_TYPE ((klass), STPUI_TYPE_GAMMA_CURVE))
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STPUI_TYPE_GAMMA_CURVE   (stpui_gamma_curve_get_type ())
    +
    + + + + + +
    +   + + +

    +

    +


    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef struct _StpuiGammaCurve StpuiGammaCurve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct _StpuiGammaCurveClass StpuiGammaCurveClass
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    GType stpui_gamma_curve_get_type void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    GtkWidget* stpui_gamma_curve_new void   ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/globals.html b/doc/gutenprintui2/html/globals.html new file mode 100644 index 0000000..3017fac --- /dev/null +++ b/doc/gutenprintui2/html/globals.html @@ -0,0 +1,126 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + +
    c | g | o | s
    + +

    +Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

    +

    - c -

    +

    - g -

    +

    - o -

    +

    - s -

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/globals_defs.html b/doc/gutenprintui2/html/globals_defs.html new file mode 100644 index 0000000..c3934f5 --- /dev/null +++ b/doc/gutenprintui2/html/globals_defs.html @@ -0,0 +1,32 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + + +

    +

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/globals_enum.html b/doc/gutenprintui2/html/globals_enum.html new file mode 100644 index 0000000..b437b0c --- /dev/null +++ b/doc/gutenprintui2/html/globals_enum.html @@ -0,0 +1,20 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + + +

    +

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/globals_eval.html b/doc/gutenprintui2/html/globals_eval.html new file mode 100644 index 0000000..598f52f --- /dev/null +++ b/doc/gutenprintui2/html/globals_eval.html @@ -0,0 +1,28 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + + +

    +

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/globals_func.html b/doc/gutenprintui2/html/globals_func.html new file mode 100644 index 0000000..c04cefe --- /dev/null +++ b/doc/gutenprintui2/html/globals_func.html @@ -0,0 +1,89 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + +
    c | o | s
    + +

    + +

    +

    - c -

    +

    - o -

    +

    - s -

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/globals_type.html b/doc/gutenprintui2/html/globals_type.html new file mode 100644 index 0000000..ea2abdf --- /dev/null +++ b/doc/gutenprintui2/html/globals_type.html @@ -0,0 +1,23 @@ + + +libgutenprintui2 API Reference: Data Fields + + + + + + +

    +

    +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/gutenprintui_8h.html b/doc/gutenprintui2/html/gutenprintui_8h.html new file mode 100644 index 0000000..a5db95f --- /dev/null +++ b/doc/gutenprintui2/html/gutenprintui_8h.html @@ -0,0 +1,1953 @@ + + +libgutenprintui2 API Reference: include/gutenprintui2/gutenprintui.h File Reference + + + + + +

    gutenprintui.h File Reference

    #include <gtk/gtk.h>
    +#include <gutenprint/gutenprint.h>
    +#include <gutenprintui2/curve.h>
    +#include <gutenprintui2/gammacurve.h>
    +#include <gutenprintui2/typebuiltins.h>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Structures

    struct  stpui_plist_t
    struct  stpui_image

    Typedefs

    typedef stpui_image stpui_image_t
    typedef guchar *(* get_thumbnail_func_t )(void *data, gint *width, gint *height, gint *bpp, gint page)

    Enumerations

    enum  orient_t {
    +  ORIENT_AUTO = -1, +ORIENT_PORTRAIT = 0, +ORIENT_LANDSCAPE = 1, +ORIENT_UPSIDEDOWN = 2, +
    +  ORIENT_SEASCAPE = 3 +
    + }
    enum  command_t { COMMAND_TYPE_DEFAULT, +COMMAND_TYPE_CUSTOM, +COMMAND_TYPE_FILE + }

    Functions

    void stpui_plist_set_name (stpui_plist_t *p, const char *val)
    void stpui_plist_set_name_n (stpui_plist_t *p, const char *val, int n)
    const char * stpui_plist_get_name (const stpui_plist_t *p)
    void stpui_plist_set_queue_name (stpui_plist_t *p, const char *val)
    void stpui_plist_set_queue_name_n (stpui_plist_t *p, const char *val, int n)
    const char * stpui_plist_get_queue_name (const stpui_plist_t *p)
    void stpui_plist_set_output_filename (stpui_plist_t *p, const char *val)
    void stpui_plist_set_output_filename_n (stpui_plist_t *p, const char *val, int n)
    const char * stpui_plist_get_output_filename (const stpui_plist_t *p)
    void stpui_plist_set_extra_printer_options (stpui_plist_t *p, const char *val)
    void stpui_plist_set_extra_printer_options_n (stpui_plist_t *p, const char *val, int n)
    const char * stpui_plist_get_extra_printer_options (const stpui_plist_t *p)
    void stpui_plist_set_custom_command (stpui_plist_t *p, const char *val)
    void stpui_plist_set_custom_command_n (stpui_plist_t *p, const char *val, int n)
    const char * stpui_plist_get_custom_command (const stpui_plist_t *p)
    void stpui_plist_set_copy_count (stpui_plist_t *p, gint count)
    int stpui_plist_get_copy_count (const stpui_plist_t *p)
    void stpui_plist_set_current_standard_command (stpui_plist_t *p, const char *val)
    void stpui_plist_set_current_standard_command_n (stpui_plist_t *p, const char *val, int n)
    const char * stpui_plist_get_current_standard_command (const stpui_plist_t *p)
    void stpui_plist_set_command_type (stpui_plist_t *p, command_t val)
    command_t stpui_plist_get_command_type (const stpui_plist_t *p)
    void stpui_set_global_parameter (const char *param, const char *value)
    const char * stpui_get_global_parameter (const char *param)
    void stpui_plist_copy (stpui_plist_t *vd, const stpui_plist_t *vs)
    int stpui_plist_add (const stpui_plist_t *key, int add_only)
    void stpui_printer_initialize (stpui_plist_t *printer)
    const stpui_plist_tstpui_get_current_printer (void)
    char * stpui_build_standard_print_command (const stpui_plist_t *plist, const stp_printer_t *printer)
    void stpui_set_printrc_file (const char *name)
    const char * stpui_get_printrc_file (void)
    void stpui_printrc_load (void)
    void stpui_get_system_printers (void)
    void stpui_printrc_save (void)
    void stpui_set_image_filename (const char *)
    const char * stpui_get_image_filename (void)
    void stpui_set_errfunc (stp_outfunc_t wfunc)
    stp_outfunc_t stpui_get_errfunc (void)
    void stpui_set_errdata (void *errdata)
    void * stpui_get_errdata (void)
    gint stpui_do_print_dialog (void)
    gint stpui_compute_orientation (void)
    void stpui_set_image_dimensions (gint width, gint height)
    void stpui_set_image_resolution (gdouble xres, gdouble yres)
    void stpui_set_image_type (const char *image_type)
    void stpui_set_image_raw_channels (gint channels)
    void stpui_set_image_channel_depth (gint bit_depth)
    void stpui_set_thumbnail_func (get_thumbnail_func_t)
    get_thumbnail_func_t stpui_get_thumbnail_func (void)
    void stpui_set_thumbnail_data (void *)
    void * stpui_get_thumbnail_data (void)
    int stpui_print (const stpui_plist_t *printer, stpui_image_t *im)
    +

    Typedef Documentation

    +

    + + + + +
    + + + + +
    typedef guchar*(* get_thumbnail_func_t)(void *data, gint *width, gint *height, gint *bpp, gint page)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    typedef struct stpui_image stpui_image_t
    +
    + + + + + +
    +   + + +

    +

    +


    Enumeration Type Documentation

    +

    + + + + +
    + + + + +
    enum command_t
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + +
    COMMAND_TYPE_DEFAULT  +
    COMMAND_TYPE_CUSTOM  +
    COMMAND_TYPE_FILE  +
    +
    +
    +

    + + + + +
    + + + + +
    enum orient_t
    +
    + + + + + +
    +   + + +

    +

    Enumerator:
    + + + + + + +
    ORIENT_AUTO  +
    ORIENT_PORTRAIT  +
    ORIENT_LANDSCAPE  +
    ORIENT_UPSIDEDOWN  +
    ORIENT_SEASCAPE  +
    +
    +
    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    char* stpui_build_standard_print_command const stpui_plist_t plist,
    const stp_printer_t *  printer
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    gint stpui_compute_orientation void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    gint stpui_do_print_dialog void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const stpui_plist_t* stpui_get_current_printer void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void* stpui_get_errdata void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    stp_outfunc_t stpui_get_errfunc void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_get_global_parameter const char *  param  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_get_image_filename void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_get_printrc_file void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_get_system_printers void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void* stpui_get_thumbnail_data void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    get_thumbnail_func_t stpui_get_thumbnail_func void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stpui_plist_add const stpui_plist_t key,
    int  add_only
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_copy stpui_plist_t vd,
    const stpui_plist_t vs
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    command_t stpui_plist_get_command_type const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    int stpui_plist_get_copy_count const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_plist_get_current_standard_command const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_plist_get_custom_command const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_plist_get_extra_printer_options const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_plist_get_name const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_plist_get_output_filename const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    const char* stpui_plist_get_queue_name const stpui_plist_t p  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_command_type stpui_plist_t p,
    command_t  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_copy_count stpui_plist_t p,
    gint  count
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_current_standard_command stpui_plist_t p,
    const char *  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_current_standard_command_n stpui_plist_t p,
    const char *  val,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_custom_command stpui_plist_t p,
    const char *  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_custom_command_n stpui_plist_t p,
    const char *  val,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_extra_printer_options stpui_plist_t p,
    const char *  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_extra_printer_options_n stpui_plist_t p,
    const char *  val,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_name stpui_plist_t p,
    const char *  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_name_n stpui_plist_t p,
    const char *  val,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_output_filename stpui_plist_t p,
    const char *  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_output_filename_n stpui_plist_t p,
    const char *  val,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_queue_name stpui_plist_t p,
    const char *  val
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void stpui_plist_set_queue_name_n stpui_plist_t p,
    const char *  val,
    int  n
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    int stpui_print const stpui_plist_t printer,
    stpui_image_t im
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_printer_initialize stpui_plist_t printer  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_printrc_load void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_printrc_save void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_errdata void *  errdata  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_errfunc stp_outfunc_t  wfunc  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_set_global_parameter const char *  param,
    const char *  value
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_image_channel_depth gint  bit_depth  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_set_image_dimensions gint  width,
    gint  height
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_image_filename const char *   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_image_raw_channels gint  channels  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + + + + + + + + + + +
    void stpui_set_image_resolution gdouble  xres,
    gdouble  yres
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_image_type const char *  image_type  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_printrc_file const char *  name  ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_thumbnail_data void *   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    void stpui_set_thumbnail_func get_thumbnail_func_t   ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/index.html b/doc/gutenprintui2/html/index.html new file mode 100644 index 0000000..93ee5e3 --- /dev/null +++ b/doc/gutenprintui2/html/index.html @@ -0,0 +1,14 @@ + + +libgutenprintui2 API Reference: Main Page + + + + +

    libgutenprintui2 API Reference Documentation

    +

    +

    5.0.0-rc1


    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/struct__StpuiCurve.html b/doc/gutenprintui2/html/struct__StpuiCurve.html new file mode 100644 index 0000000..0fb5b48 --- /dev/null +++ b/doc/gutenprintui2/html/struct__StpuiCurve.html @@ -0,0 +1,396 @@ + + +libgutenprintui2 API Reference: _StpuiCurve Struct Reference + + + + +

    _StpuiCurve Struct Reference

    #include <curve.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    GtkDrawingArea graph
    gint cursor_type
    gfloat min_x
    gfloat max_x
    gfloat min_y
    gfloat max_y
    GdkPixmap * pixmap
    StpuiCurveType curve_type
    gint height
    gint grab_point
    gint last
    gint num_points
    GdkPoint * point
    gint num_ctlpoints
    gfloat(* ctlpoint )[2]
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    gfloat(* _StpuiCurve::ctlpoint)[2]
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gint _StpuiCurve::cursor_type
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    StpuiCurveType _StpuiCurve::curve_type
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gint _StpuiCurve::grab_point
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkDrawingArea _StpuiCurve::graph
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gint _StpuiCurve::height
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gint _StpuiCurve::last
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gfloat _StpuiCurve::max_x
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gfloat _StpuiCurve::max_y
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gfloat _StpuiCurve::min_x
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gfloat _StpuiCurve::min_y
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gint _StpuiCurve::num_ctlpoints
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gint _StpuiCurve::num_points
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GdkPixmap* _StpuiCurve::pixmap
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GdkPoint* _StpuiCurve::point
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/struct__StpuiCurveClass.html b/doc/gutenprintui2/html/struct__StpuiCurveClass.html new file mode 100644 index 0000000..b37b862 --- /dev/null +++ b/doc/gutenprintui2/html/struct__StpuiCurveClass.html @@ -0,0 +1,171 @@ + + +libgutenprintui2 API Reference: _StpuiCurveClass Struct Reference + + + + +

    _StpuiCurveClass Struct Reference

    #include <curve.h> +

    + + + + + + + + + + + + + + + +

    Data Fields

    GtkDrawingAreaClass parent_class
    void(* curve_type_changed )(StpuiCurve *curve)
    void(* _gtk_reserved1 )(void)
    void(* _gtk_reserved2 )(void)
    void(* _gtk_reserved3 )(void)
    void(* _gtk_reserved4 )(void)
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    void(* _StpuiCurveClass::_gtk_reserved1)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiCurveClass::_gtk_reserved2)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiCurveClass::_gtk_reserved3)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiCurveClass::_gtk_reserved4)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiCurveClass::curve_type_changed)(StpuiCurve *curve)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkDrawingAreaClass _StpuiCurveClass::parent_class
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/struct__StpuiGammaCurve.html b/doc/gutenprintui2/html/struct__StpuiGammaCurve.html new file mode 100644 index 0000000..7e7e74e --- /dev/null +++ b/doc/gutenprintui2/html/struct__StpuiGammaCurve.html @@ -0,0 +1,196 @@ + + +libgutenprintui2 API Reference: _StpuiGammaCurve Struct Reference + + + + +

    _StpuiGammaCurve Struct Reference

    #include <gammacurve.h> +

    + + + + + + + + + + + + + + + + + +

    Data Fields

    GtkVBox vbox
    GtkWidget * table
    GtkWidget * curve
    GtkWidget * button [5]
    gfloat gamma
    GtkWidget * gamma_dialog
    GtkWidget * gamma_text
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    GtkWidget* _StpuiGammaCurve::button[5]
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkWidget* _StpuiGammaCurve::curve
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    gfloat _StpuiGammaCurve::gamma
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkWidget* _StpuiGammaCurve::gamma_dialog
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkWidget* _StpuiGammaCurve::gamma_text
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkWidget* _StpuiGammaCurve::table
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkVBox _StpuiGammaCurve::vbox
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/struct__StpuiGammaCurveClass.html b/doc/gutenprintui2/html/struct__StpuiGammaCurveClass.html new file mode 100644 index 0000000..fa85d0e --- /dev/null +++ b/doc/gutenprintui2/html/struct__StpuiGammaCurveClass.html @@ -0,0 +1,146 @@ + + +libgutenprintui2 API Reference: _StpuiGammaCurveClass Struct Reference + + + + +

    _StpuiGammaCurveClass Struct Reference

    #include <gammacurve.h> +

    + + + + + + + + + + + + + +

    Data Fields

    GtkVBoxClass parent_class
    void(* _gtk_reserved1 )(void)
    void(* _gtk_reserved2 )(void)
    void(* _gtk_reserved3 )(void)
    void(* _gtk_reserved4 )(void)
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    void(* _StpuiGammaCurveClass::_gtk_reserved1)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiGammaCurveClass::_gtk_reserved2)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiGammaCurveClass::_gtk_reserved3)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* _StpuiGammaCurveClass::_gtk_reserved4)(void)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    GtkVBoxClass _StpuiGammaCurveClass::parent_class
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/structstpui__image.html b/doc/gutenprintui2/html/structstpui__image.html new file mode 100644 index 0000000..e1d6e7c --- /dev/null +++ b/doc/gutenprintui2/html/structstpui__image.html @@ -0,0 +1,221 @@ + + +libgutenprintui2 API Reference: stpui_image Struct Reference + + + + +

    stpui_image Struct Reference

    #include <gutenprintui.h> +

    + + + + + + + + + + + + + + + + + + + +

    Data Fields

    stp_image_t im
    void(* transpose )(struct stpui_image *image)
    void(* hflip )(struct stpui_image *image)
    void(* vflip )(struct stpui_image *image)
    void(* rotate_ccw )(struct stpui_image *image)
    void(* rotate_cw )(struct stpui_image *image)
    void(* rotate_180 )(struct stpui_image *image)
    void(* crop )(struct stpui_image *image, int left, int top, int right, int bottom)
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    void(* stpui_image::crop)(struct stpui_image *image, int left, int top, int right, int bottom)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stpui_image::hflip)(struct stpui_image *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_image_t stpui_image::im
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stpui_image::rotate_180)(struct stpui_image *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stpui_image::rotate_ccw)(struct stpui_image *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stpui_image::rotate_cw)(struct stpui_image *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stpui_image::transpose)(struct stpui_image *image)
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    void(* stpui_image::vflip)(struct stpui_image *image)
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/structstpui__plist__t.html b/doc/gutenprintui2/html/structstpui__plist__t.html new file mode 100644 index 0000000..5cca4a3 --- /dev/null +++ b/doc/gutenprintui2/html/structstpui__plist__t.html @@ -0,0 +1,346 @@ + + +libgutenprintui2 API Reference: stpui_plist_t Struct Reference + + + + +

    stpui_plist_t Struct Reference

    #include <gutenprintui.h> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Data Fields

    char * name
    command_t command_type
    char * queue_name
    char * extra_printer_options
    char * custom_command
    char * current_standard_command
    char * output_filename
    float scaling
    orient_t orientation
    int unit
    int auto_size_roll_feed_paper
    int invalid_mask
    stp_vars_t * v
    +


    Field Documentation

    +

    + + + + +
    + + + + +
    int stpui_plist_t::auto_size_roll_feed_paper
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    command_t stpui_plist_t::command_type
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stpui_plist_t::current_standard_command
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stpui_plist_t::custom_command
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stpui_plist_t::extra_printer_options
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stpui_plist_t::invalid_mask
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stpui_plist_t::name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    orient_t stpui_plist_t::orientation
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stpui_plist_t::output_filename
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    char* stpui_plist_t::queue_name
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    float stpui_plist_t::scaling
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    int stpui_plist_t::unit
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    stp_vars_t* stpui_plist_t::v
    +
    + + + + + +
    +   + + +

    +

    +


    The documentation for this struct was generated from the following file: +
    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/gutenprintui2/html/typebuiltins_8h.html b/doc/gutenprintui2/html/typebuiltins_8h.html new file mode 100644 index 0000000..2d3d0b2 --- /dev/null +++ b/doc/gutenprintui2/html/typebuiltins_8h.html @@ -0,0 +1,187 @@ + + +libgutenprintui2 API Reference: include/gutenprintui2/typebuiltins.h File Reference + + + + + +

    typebuiltins.h File Reference

    #include <glib-object.h>
    + + + + + + + + + + + + + + + + +

    Defines

    #define STPUI_TYPE_ORIENT_T   (orient_t_orient_t_get_type())
    #define STPUI_TYPE_COMMAND_T   (command_t_command_t_get_type())
    #define STPUI_TYPE_CURVE_TYPE   (stpui_curve_type_get_type())

    Functions

    G_BEGIN_DECLS GType orient_t_orient_t_get_type (void)
    GType command_t_command_t_get_type (void)
    GType stpui_curve_type_get_type (void)
    +

    Define Documentation

    +

    + + + + +
    + + + + +
    #define STPUI_TYPE_COMMAND_T   (command_t_command_t_get_type())
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STPUI_TYPE_CURVE_TYPE   (stpui_curve_type_get_type())
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + +
    #define STPUI_TYPE_ORIENT_T   (orient_t_orient_t_get_type())
    +
    + + + + + +
    +   + + +

    +

    +


    Function Documentation

    +

    + + + + +
    + + + + + + + + + +
    GType command_t_command_t_get_type void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    G_BEGIN_DECLS GType orient_t_orient_t_get_type void   ) 
    +
    + + + + + +
    +   + + +

    +

    +

    + + + + +
    + + + + + + + + + +
    GType stpui_curve_type_get_type void   ) 
    +
    + + + + + +
    +   + + +

    +

    +


    Generated on Sat Jul 2 09:45:12 2005 for libgutenprintui2 API Reference by  + +doxygen 1.4.3-20050530
    + + diff --git a/doc/html-stamp b/doc/html-stamp deleted file mode 100644 index e69de29..0000000 diff --git a/doc/indices.texi b/doc/indices.texi deleted file mode 100644 index fdabf0a..0000000 --- a/doc/indices.texi +++ /dev/null @@ -1,14 +0,0 @@ -@node Data Type and Variable Index, Function and Macro Index, Appendices, Top -@unnumbered Data Type and Variable Index - -@printindex vr - -@node Function and Macro Index, Concept Index, Data Type and Variable Index, Top -@unnumbered Function and Macro Index - -@printindex fn - -@node Concept Index, , Function and Macro Index, Top -@unnumbered Concept Index - -@printindex cp diff --git a/doc/integrating.texi b/doc/integrating.texi deleted file mode 100644 index 75e150b..0000000 --- a/doc/integrating.texi +++ /dev/null @@ -1,192 +0,0 @@ -@node Integrating libgimpprint, Functions, Using libgimpprint, Top -@chapter Integrating libgimpprint -@cindex integrating - -This chapter describes how to integrate the compiling and linking of -programs using libgimpprint with build scripts. Commonly used systems include -@command{make}, but more commonly @file{Makefile} files are generated by using -tools such as @command{autoconf} and @command{automake}. - -@menu -* gimpprint-config:: Getting the correct compiler and linker flags -* make:: Normal makefiles -* autoconf:: Macro to automatically check for libgimpprint -* automake:: Automatically defined variables to use -@end menu - - -@node gimpprint-config, make, , Integrating libgimpprint -@section @command{gimpprint-config} -@pindex gimpprint-config - -Depending on the setup of the computer system GIMP-Print was installed on, as -well as the options passed to @command{configure} when configuring the -package when it was built, the @env{CFLAGS} and @env{LIBS} parameters -needed to compile and link programs with libgimpprint may vary. To make it -simple to determine what these are on any given system, the script -@command{gimpprint-config} was created. It's job is to output the -correct parameters for the setup on your system. The following options -are available: - -@example -roger@@whinlatter:~/gimpprint/devel$ gimpprint-config --help -Usage: gimpprint-config [OPTIONS] [LIBRARIES] -Options: - [--prefix[=DIR]] - [--exec-prefix[=DIR]] - [--version] - [--libs] - [--cflags] -Libraries: - gimpprint -@end example - -The @option{--prefix} and @option{--exec-prefix} options are only needed if the -installed locations of parts of GIMP-Print are different from the configured -locations. These should never be needed if GIMP-Print was properly configured -and installed. - -The installed version of GIMP-Print can be obtained with the -@option{--version} option: - -@example -roger@@whinlatter:~/gimpprint/devel$ gimpprint-config --version -@value{VERSION} -@end example - -The correct @env{CFLAGS} to use can be obtained with the @option{--cflags} -option: - -@example -roger@@whinlatter:~/gimpprint/devel$ gimpprint-config --cflags - -@end example - -In this case, there are no special @env{CFLAGS} required to compile programs. - -The correct @env{LIBS} to use can the obtained with the @option{--libs} option: - -@example -roger@@whinlatter:~/gimpprint/devel$ gimpprint-config --libs --L/usr/lib -lgimpprint -lm -@end example - -The command can be used from the shell by enclosing it in backquotes @samp{`}: - -@example -gcc `gimpprint-config --cflags` -c prog.c -gcc `gimpprint-config --libs` -o prog prog.o -@end example - -However, this is not the way it it typically used. Normally it is used in a -@file{Makefile} (@pxref{make}) or by an @command{m4} macro in a @command{configure} -script (@pxref{autoconf}). - - -@node make, autoconf, gimpprint-config, Integrating libgimpprint -@section @command{make} -@pindex make - -If you use @command{make} with your own @file{Makefile} files, then you are on -your own. This manual offers no assistance with doing this. Only the following -suggestion is offered: - -@example -GIMPPRINT_VERSION = $(shell gimpprint-config --version) -GIMPPRINT_CFLAGS = $(shell gimpprint-config --cflags) -GIMPPRINT_LIBS = $(shell gimpprint-config --libs) -@end example - -How you choose to use these variables is entirely up to you. @inforef{Top, GNU -make, make}, for more information. - - -@node autoconf, automake, make, Integrating libgimpprint -@section @command{autoconf} -@pindex autoconf -@cindex m4 macros - -The @command{autoconf} program produces a Bourne shell script called -@file{configure} from a template file called @file{configure.in}. -@file{configure.in} contains both Bourne shell script, and @command{m4} macros. -@command{autoconf} expands the @command{m4} macros into `real' shell script. -The resulting @file{configure} script performs various checks for installed -programs, compiler characteristics and other system information such as -available headers and libraries. @inforef{Top, GNU autoconf, autoconf}, for -more information. - -GIMP-Print provides an @command{m4} macro, @code{AM_PATH_GIMPPRINT}, suitable for -use in a @file{configure.in}. It defines the environment variables -@env{GIMPPRINT_CFLAGS}, @env{GIMPPRINT_LIBS} and @env{GIMPPRINT_CONFIG}. You can -optionally specify a minimum version of the library to use, and shell script to -run if the test suceeds or fails. - -@defmac AM_PATH_GIMPPRINT (@r{[}@var{minimum-version} @r{[}, @var{action-if-found} @r{[}, @var{action-if-not-found}@r{]]]}) -Check for an installed version of GIMP-Print greater than or equal to -@var{minimum-version}. - -@var{action-if-found} is a list of shell commands to run if the check -for the library succeeds; @var{action-if-not-found} is a list of -shell commands to run if the check fails. - -The macro sets the following environment variables: @env{GIMPPRINT_CFLAGS}, -@env{GIMPPRINT_LIBS} and @env{GIMPPRINT_CONFIG}. It also will substitute them -into any @file{Makefile.in} you specify in @code{AC_OUTPUT} because it calls -@code{AC_SUBST} for each of them. However, you will probably be using -@command{automake} to generate your @file{Makefile.in} files -(@pxref{automake}). - -@end defmac - -@node automake, , autoconf, Integrating libgimpprint -@section @command{automake} -@pindex automake - -The @command{automake} program can be used to generate @file{Makefile.in} files -suitable for use with a @file{configure} script generated by -@command{autoconf}. As @command{automake} @emph{requires} @command{autoconf}, -this section will assume the use of a @file{configure} script which uses the -@code{AM_PATH_GIMPPRINT} macro (there is little point in @emph{not} using it!). - -It is highly recommeded that you use GNU @command{autoconf} and -@command{automake}. They will allow you to make your software build on most -platforms with most compilers. @command{automake} makes writing complex -@file{Makefile} files very easy, by expressing how to build your packages -in terms of what files are required to build a project and the installation -locations of the files. It imposes a few limitations over using plain -@file{Makefile} files, such as in the use of conditionals, but these problems -are vastly outweighed by the benefits it brings. It also creates many extra -targets in the generated @file{Makefile.in} files such as @command{dist}, -@command{distcheck}, @command{clean}, @command{distclean}, -@command{maintainer-clean} and @command{tags}, and there are many more more -available. @inforef{Top, GNU automake, automake}, for more information. - -Because @code{AM_PATH_GIMPPRINT} calls @code{AC_SUBST} to substitute -@env{GIMPPRINT_CFLAGS}, @env{GIMPPRINT_LIBS} and @env{GIMPPRINT_CONFIG}, -@command{automake} will automatically set these variables in the -@file{Makefile.in} files it generates, requiring no additional effort on -your part! - -As in previous examples, we will make a program @command{prog} from a file @file{prog.c}. This is how one might build write a @file{Makefile.am} to do this: - -@example -AUTOMAKE_OPTIONS = 1.4 gnu -MAINT_CHARSET = latin1 - -@@SET_MAKE@@ - -CFLAGS = @@CFLAGS@@ - -INCLUDES = @@INCLUDES@@ $(GIMPPRINT_CFLAGS) - -bin_PROGRAMS = prog -prog_SOURCES = prog.c -prog_LDADD = $(GIMPPRINT_LIBS) - -MAINTAINERCLEANFILES = Makefile.in -@end example - -That's all there is to it! Please note that this example also requires the -macro @code{AC_PROG_MAKE_SET} to be used in @file{configure.in} and the use of -@code{AC_SUBST} to substitute @env{CFLAGS} and @env{INCLUDES} where -@code{@@CFLAGS@@} and @code{@@INCLUDES@@} are found in the file, respectively. diff --git a/doc/introduction.texi b/doc/introduction.texi deleted file mode 100644 index 3dab48e..0000000 --- a/doc/introduction.texi +++ /dev/null @@ -1,38 +0,0 @@ -@node Instructions, Copying, Top, Top -@unnumbered Preface - -@cindex reading -@cindex manual, how to read -@cindex how to read -This manual documents the use of the GIMP-Print package, focusing mainly on the -libgimpprint library that is the core of GIMP-Print. Parts of the manual which -describe the use of libgimpprint are aimed primarily at programmers, and do -assume that the reader is familiar with C programming, and using standard -programming tools on GNU or UNIX systems. Other parts of the manual document -the use of the programs that make up the GIMP-Print package, and assume no -knowledge other than the basics of using a shell and editor. - -The best way to learn how to use libgimpprint in your own programs is to read -the manual from start to finish, using the examples given in the text to learn -how it works. The bulk of the manual can be used as a reference once one -understands the basics. - -The manual is split into several parts for the programmer. It starts -with a simple usage example of how to link a program with libgimpprint, -then how to integrate this into package build scripts, using -@command{make}, @command{autoconf} and @command{automake}. This is -followed by a detailed function reference, including descriptions of all -the data types used. - -For the end-user, there is a section on all of the programs that come -with GIMP-Print, including the GIMP @command{print} plugin, and the CUPS -and Ghostscript drivers. - -The appendices at the end of the manual detail the dither and weave -algorithms used in libgimpprint, the ESC/P2 printer control language -used in Epson printers and how to add support for a new printer to -libgimpprint. - -@sp 2 -@center We hope you enjoy using GIMP-Print! -@center ---The GIMP-Print project diff --git a/doc/manual-html/gimpprint_1.html b/doc/manual-html/gimpprint_1.html deleted file mode 100644 index efd7c7f..0000000 --- a/doc/manual-html/gimpprint_1.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - -GIMP-Print - Instructions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    Preface

    - -

    - - - -This manual documents the use of the GIMP-Print package, focusing mainly on the -libgimpprint library that is the core of GIMP-Print. Parts of the manual which -describe the use of libgimpprint are aimed primarily at programmers, and do -assume that the reader is familiar with C programming, and using standard -programming tools on GNU or UNIX systems. Other parts of the manual document -the use of the programs that make up the GIMP-Print package, and assume no -knowledge other than the basics of using a shell and editor. - -

    -

    -The best way to learn how to use libgimpprint in your own programs is to read -the manual from start to finish, using the examples given in the text to learn -how it works. The bulk of the manual can be used as a reference once one -understands the basics. - -

    -

    -The manual is split into several parts for the programmer. It starts -with a simple usage example of how to link a program with libgimpprint, -then how to integrate this into package build scripts, using -@command{make}, @command{autoconf} and @command{automake}. This is -followed by a detailed function reference, including descriptions of all -the data types used. - -

    -

    -For the end-user, there is a section on all of the programs that come -with GIMP-Print, including the GIMP @command{print} plugin, and the CUPS -and Ghostscript drivers. - -

    -

    -The appendices at the end of the manual detail the dither and weave -algorithms used in libgimpprint, the ESC/P2 printer control language -used in Epson printers and how to add support for a new printer to -libgimpprint. - -

    -

    -We hope you enjoy using GIMP-Print! ---The GIMP-Print project -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_10.html b/doc/manual-html/gimpprint_10.html deleted file mode 100644 index 03be2c3..0000000 --- a/doc/manual-html/gimpprint_10.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - -GIMP-Print - Functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4 Functions

    -

    - - -

    -

    -This section of the manual is a complete reference to all of the functions -comprising libgimpprint, with examples. - -

    -

    -All of the libgimpprint functions can be declared by including the master -libgimpprint header, `<gimp-print/gimp-print.h>'. This should be done in -every source file that uses gimpprint functions by putting - -

    - -
    -#include <gimp-print/gimp-print.h>
    -
    - -

    -at the top of each file. - -

    - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_11.html b/doc/manual-html/gimpprint_11.html deleted file mode 100644 index 3ba2822..0000000 --- a/doc/manual-html/gimpprint_11.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - -GIMP-Print - Main functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.1 Main functions

    -

    - - -

    -

    -These functions are essential to the correct functioning of -libgimpprint. All or most other functions in the library depend -absolutely upon them. In the case of stp_init, this function -must be called before any of the other functions in the library. - -

    - -

    - -

    -
    Function: int stp_init (void) -
    - -

    -

    -This function initialises the libgimpprint library. It must be called before -any of the other libgimpprint functions are called. It is responsible for -setting up message catalogues (for internationalisation). This function -may be called more than once, at any stage during the execution of a -program. - -

    -

    -It returns zero on success, nonzero on failure. -

    - -

    -

    -stp_init might be used as follows: - -

    - -
    -int
    -main (int argc, char **argv)
    -{
    -  stp_init();
    -
    -  ...
    -
    -}
    -
    - -

    - -

    -
    Function: void * stp_malloc (size_t size) -
    - -

    -

    -Where size is the amount of memory to allocate (in bytes). - -

    -

    -This function allocates memory. It will always return a pointer to the -allocated memory. It will not return on failure. - -

    -

    -It returns a pointer to the allocated memory. -

    - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_12.html b/doc/manual-html/gimpprint_12.html deleted file mode 100644 index 59eb45e..0000000 --- a/doc/manual-html/gimpprint_12.html +++ /dev/null @@ -1,558 +0,0 @@ - - - - -GIMP-Print - stp_vars_t functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.2 stp_vars_t functions

    -

    - - -

    -

    -

    -
    Data type: void * stp_vars_t -
    -This is an opaque data type, whose structure is not visible to the -user. This object contains all of the information about settings for -a given printer, such as color (contrast, brightness), the type of -printer, the dithering algorithm in use, and so forth. Please see the -stp_set_* and stp_get_* functions below for the -accessors and mutators for this data type. -
    - -

    - -

    -

    -
    Function: stp_vars_t stp_allocate_vars (void) -
    -Allocate a new stp_vars_t with default settings for all members. -
    - -

    -

    -

    -
    Function: void stp_copy_vars (stp_vars_t vd, const stp_vars_t vs) -
    -Copy the settings from vs to vd. -
    - -

    -

    -

    -
    Function: stp_vars_t stp_allocate_copy (const stp_vars_t vs) -
    -Allocate a new stp_vars_t, copying settings from vs. -
    - -

    -

    -

    -
    Function: void stp_free_vars (stp_vars_t vv) -
    -Free all resources associated with vv. vv must not be -used in any way following this call. -
    - -

    -

    -

    -
    Function: const char * stp_get_output_to (const stp_vars_t vv) -
    -
    Function: void stp_set_output_to (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_output_to_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the command that this job will be printed to. -This is used by front ends; the driver library always prints to a -stream provided by the front end and never uses this directly. -
    - -

    -

    -

    -
    Function: const char * stp_get_driver (const stp_vars_t vv) -
    -
    Function: void stp_set_driver (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_driver_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the driver (the type of printer). -
    - -

    -

    -

    -
    Function: const char * stp_get_ppd_file (const stp_vars_t vv) -
    -
    Function: void stp_set_ppd_file (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_ppd_file_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the PPD file used by this print job. Normally, -only PostScript printers use PPD files. -
    - -

    -

    -

    -
    Function: const char * stp_get_resolution (const stp_vars_t vv) -
    -
    Function: void stp_set_resolution (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_resolution_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the resolution to be used in this print job. Different -drivers support different resolutions, and many drivers support -multiple quality settings for a given DPI resolution. -
    - -

    -

    -

    -
    Function: const char * stp_get_media_size (const stp_vars_t vv) -
    -
    Function: void stp_set_media_size (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_media_size_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the media size (e. g. A3, letter, legal) to be -used in this print job. -
    - -

    -

    -

    -
    Function: const char * stp_get_media_type (const stp_vars_t vv) -
    -
    Function: void stp_set_media_type (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_media_type_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the media type (e. g. plain paper, photo -quality inkjet paper) to be used in this print job. -
    - -

    -

    -

    -
    Function: const char * stp_get_media_source (const stp_vars_t vv) -
    -
    Function: void stp_set_media_source (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_media_source_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the media source (e. g. manual feed, tray A) to -be used in this print job. -
    - -

    -

    -

    -
    Function: const char * stp_get_ink_type (const stp_vars_t vv) -
    -
    Function: void stp_set_ink_type (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_ink_type_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the name of the ink type (e. g. four color standard, six -color photo) to be used in this print job. -
    - -

    -

    -

    -
    Function: const char * stp_get_dither_algorithm (const stp_vars_t vv) -
    -
    Function: void stp_set_dither_algorithm (stp_vars_t vv, const char *val) -
    -
    Function: void stp_set_dither_algorithm_n (stp_vars_t vv, const char *val, int bytes) -
    -Get or set the dither algorithm to be used in this print job. -
    - -

    -

    -

    -
    Function: int stp_get_output_type (const stp_vars_t vv) -
    -
    Function: void stp_set_output_type (stp_vars_t vv, int val) -
    -Get or set the output type (color, grayscale, black and white) for -this print job. -
    - -

    -

    -

    -
    Function: int stp_get_orientation (const stp_vars_t vv) -
    -
    Function: void stp_set_orientation (stp_vars_t vv, int val) -
    -Get or set the paper orientation for this print job. -
    - -

    -

    -

    -
    Function: int stp_get_left (const stp_vars_t vv) -
    -
    Function: void stp_set_left (stp_vars_t vv, int val) -
    -Get or set the left margin (in 1/72 inch units, or "points") for this -print job. -
    - -

    -

    -

    -
    Function: int stp_get_top (const stp_vars_t vv) -
    -
    Function: void stp_set_top (stp_vars_t vv, int val) -
    -Get or set the top margin (in 1/72 inch units, or "points") for this -print job. -
    - -

    -

    -

    -
    Function: int stp_get_image_type (const stp_vars_t vv) -
    -
    Function: void stp_set_image_type (stp_vars_t vv, int val) -
    -Get or set the image type (line art, continuous tone, solid colors) -for this print job. -
    - -

    -

    -

    -
    Function: int stp_get_unit (const stp_vars_t vv) -
    -
    Function: void stp_set_unit (stp_vars_t vv, int val) -
    -Get or set the base unit (inches or centimeters) for this print job. -This is provided for front ends; the package itself uses points as its -unit of measurement. -
    - -

    -

    -

    -
    Function: int stp_get_page_width (const stp_vars_t vv) -
    -
    Function: void stp_set_page_width (stp_vars_t vv, int val) -
    -Get or set the width of the printed region of the page. -
    - -

    -

    -

    -
    Function: int stp_get_page_height (const stp_vars_t vv) -
    -
    Function: void stp_set_page_height (stp_vars_t vv, int val) -
    -Get or set the height of the printed region of the page. -
    - -

    -

    -

    -
    Function: int stp_get_input_color_model (const stp_vars_t vv) -
    -
    Function: void stp_set_input_color_model (stp_vars_t vv, int val) -
    -Get or set the color model (currently RGB or CMY) of the input to the -driver. Most front ends will use RGB input. -
    - -

    -

    -

    -
    Function: int stp_get_output_color_model (const stp_vars_t vv) -
    -
    Function: void stp_set_output_color_model (stp_vars_t vv, int val) -
    -Get or set the color model (currently RGB or CMY) of the output of the -driver. Most printers will use CMY. -
    - -

    -

    -

    -
    Function: float stp_get_scaling (const stp_vars_t vv) -
    -
    Function: void stp_set_scaling (stp_vars_t vv, float val) -
    -Get or set the scaling factor of the image. If the scaling factor is -greater than 0, it is interpreted as a percent (5.0-100.0 is the valid -range) of the printable page region, using the more restrictive axis. -For example, if the image to be printed should be 3" (wide) x 2" -(high), and the printable page region is 8"x10.5", the scale factor -should be 37.5 (3"/8"). - -

    -

    -If the scaling is less than zero, it is interpreted as pixels per -inch. - -

    -

    -It is likely that in the future this will be migrated into the front -end. There is no particular reason why the driver needs to know about -this. -

    - -

    -

    -

    -
    Function: float stp_get_gamma (const stp_vars_t vv) -
    -
    Function: void stp_set_gamma (stp_vars_t vv, float val) -
    -Get or set the gamma of the print job (valid range: 0.1-4.0; default -1.0). Note that this is not the absolute gamma used by the print job; -it is scaled by the gamma appropriate for the printer. This is true -for all of the numerical parameters. -
    - -

    -

    -

    -
    Function: float stp_get_brightness (const stp_vars_t vv) -
    -
    Function: void stp_set_brightness (stp_vars_t vv, float val) -
    -Get or set the brightness of the print job (valid range: 0.0-2.0; -default: 1.0). Any value other than 1.0 will result in some possible -values not being used; if brightness is less than 1.0, no output point -will be pure white, and if brightness is greater than 1.0, no output -point will be pure black (or cyan, or magenta, or yellow). -
    - -

    -

    -

    -
    Function: float stp_get_contrast (const stp_vars_t vv) -
    -
    Function: void stp_set_contrast (stp_vars_t vv, float val) -
    -Get or set the contrast of the print job (valid range: 0.0-4.0; -default: 1.0). Values less than 1.0 will result in pure white or -black not being used (0.0 will make the entire image 50% gray). -Values greater than 1.0 do not hard clip; while the contrast in the -midtones increases, it only asymptotically approaches the limits. -
    - -

    -

    -

    -
    Function: float stp_get_cyan (const stp_vars_t vv) -
    -
    Function: void stp_set_cyan (stp_vars_t vv, float val) -
    -Get or set the cyan adjustment of the print job (range: 0.0-4.0; default: -1.0). This currently adjusts the gamma of the cyan curve. It is -scaled by the cyan adjustment for the printer model in question. -
    - -

    -

    -

    -
    Function: float stp_get_magenta (const stp_vars_t vv) -
    -
    Function: void stp_set_magenta (stp_vars_t vv, float val) -
    -Get or set the magenta adjustment of the print job (range: 0.0-4.0; default: -1.0). This currently adjusts the gamma of the magenta curve. It is -scaled by the magenta adjustment for the printer model in question. -
    - -

    -

    -

    -
    Function: float stp_get_yellow (const stp_vars_t vv) -
    -
    Function: void stp_set_yellow (stp_vars_t vv, float val) -
    -Get or set the yellow adjustment of the print job (range: 0.0-4.0; default: -1.0). This currently adjusts the gamma of the yellow curve. It is -scaled by the yellow adjustment for the printer model in question. -
    - -

    -

    -

    -
    Function: float stp_get_saturation (const stp_vars_t vv) -
    -
    Function: void stp_set_saturation (stp_vars_t vv, float val) -
    -Get or set the saturation of the print job (range: 0.0-9.0; default: 1.0). -Saturation of 0.0 produces grayscale output using composite (CMY or -CMYK, as appropriate for the printer) color. -
    - -

    -

    -

    -
    Function: float stp_get_density (const stp_vars_t vv) -
    -
    Function: void stp_set_density (stp_vars_t vv, float val) -
    -Get or set the density of the print job (range: 0.0-2.0; default: -1.0). This adjusts the amount of ink deposited in a linear fashion -for all channels. It is scaled by the density appropriate for the -choice of printer, resolution, paper type, and other factors that the -driver may deem appropriate. -
    - -

    -

    -

    -
    Function: float stp_get_app_gamma (const stp_vars_t vv) -
    -
    Function: void stp_set_app_gamma (stp_vars_t vv, float val) -
    -Get or set the gamma of the input (i. e. what the driving application -uses). -
    - -

    -

    -

    -
    Function: void * stp_get_lut (const stp_vars_t vv) -
    -
    Function: void stp_set_lut (stp_vars_t vv, void *val) -
    -Get or set the color lookup table for the print job. This is useful -outside of the library for computing a preview of the printed result. -The lookup table itself should be treated as an opaque handle. -
    - -

    -

    -

    -
    Function: unsigned char * stp_get_cmap (const stp_vars_t vv) -
    -
    Function: void stp_set_cmap (stp_vars_t vv, unsigned char *val) -
    -Get or set the color map for the print job. This is a table of R,G,B -values for 8-bit indexed input. This may be moved outside of the -library in the future; in this case, the front end would be required -to do its own mapping and supply true-color RGB to the driver. -
    - -

    -

    -The following methods are used to perform output and error reporting -by the driver. The driver supplies a stream of output bytes; the -front end is responsible for providing methods that accept this output -and handle it appropriately. - -

    -

    -

    -
    Function: stp_outfunc_t stp_get_outfunc (const stp_vars_t vv) -
    -
    Function: void stp_set_outfunc (const stp_vars_t vv, stp_outfunc_t val) -
    -
    Function: void * stp_get_outdata (const stp_vars_t vv) -
    -
    Function: void stp_set_outdata (stp_vars_t vv, void *val) -
    - -

    -

    -

    -
    Data type: stp_outfunc_t -
    - -
    -typedef void (*stp_outfunc_t) (void *data,
    -              const char *buffer, size_t bytes);
    -
    - -
    -

    -Get or set the output function the driver will use. The front end -must supply a suitable function for accepting the output data. The -stp_set_outdata method provides a way of passing an appropriate -object to the output function. -

    - -

    -

    -

    -
    Function: stp_outfunc_t stp_get_errfunc (const stp_vars_t vv) -
    -
    Function: void stp_set_errfunc (const stp_vars_t vv, stp_outfunc_t val) -
    -
    Function: void * stp_get_errdata (const stp_vars_t vv) -
    -
    Function: void stp_set_errdata (stp_vars_t vv, void *val) -
    -Get or set the error reporting function that the driver will use. -This is used to report errors or debugging information, and must be -supplied. A typical errfunc will simply print whatever it's passed to -stderr. -
    - -

    -

    -/* - * hue_map is an array of 49 doubles representing the mapping of hue - * from (0..6) to (0..6) in increments of .125. The hue_map is in CMY space, - * so hue=0 is cyan. - */ -typedef void (*stp_convert_t)(const stp_vars_t vars, const unsigned char *in, - unsigned short *out, int *zero_mask, - int width, int bpp, const unsigned char *cmap, - const double *hue_map, const double *lum_map, - const double *sat_map); - -

    -

    -

    -
    Function: void stp_merge_printvars (stp_vars_t user, const stp_vars_t print) -
    - -

    -
    - -

    -

    -
    Function: void stp_allocate_lut (stp_vars_t v, size_t steps) -
    - -

    -
    - -

    -

    -
    Function: void stp_free_lut (stp_vars_t v) -
    - -

    -
    - -

    -

    -
    Function: void stp_compute_lut (stp_vars_t v, size_t steps) -
    - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_13.html b/doc/manual-html/gimpprint_13.html deleted file mode 100644 index 8942a5e..0000000 --- a/doc/manual-html/gimpprint_13.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - -GIMP-Print - Dither functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.3 Dither functions

    -

    - - -

    -

    -

    -
    Function: size_t stp_dither_algorithm_count (void) -
    - -

    -
    - -

    -

    -
    Function: const char * stp_dither_algorithm_name (int id) -
    - -

    -
    - -

    -

    -
    Function: const char * stp_default_dither_algorithm (void) -
    - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_14.html b/doc/manual-html/gimpprint_14.html deleted file mode 100644 index 5384d1a..0000000 --- a/doc/manual-html/gimpprint_14.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - -GIMP-Print - Options functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.4 Options functions

    -

    - - -

    -

    -

    -
    Data type: void * stp_option_t -
    -This is an opaque data type, whose structure is not visible to the -user. -
    - -

    -

    -

    -
    Function: void stp_set_option(stp_vars_t v, const char *name, const char *data, int bytes) -
    - -

    -
    - -

    -

    -
    Function: void stp_clear_option (stp_vars_t v, const char *name) -
    - -

    -
    - -

    -

    -
    Function: void stp_clear_all_options (stp_vars_t v) -
    - -

    -
    - -

    -

    -
    Function: size_t stp_option_count (const stp_vars_t v) -
    - -

    -
    - -

    -

    -
    Function: const stp_option_t stp_get_option_by_index (const stp_vars_t v, size_t idx) -
    - -

    -
    - -

    -

    -
    Function: const stp_option_t stp_get_option_by_name (const stp_vars_t v, const char *name) -
    - -

    -
    - -

    -

    -
    Function: const char * stp_option_data (const stp_option_t option) -
    -Note: not null delimited! -
    - -

    -

    -

    -
    Function: const char * stp_option_name (const stp_option_t option) -
    - -

    -
    - -

    -

    -
    Function: size_t stp_option_length (const stp_option_t option) -
    - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_15.html b/doc/manual-html/gimpprint_15.html deleted file mode 100644 index 3bc88e2..0000000 --- a/doc/manual-html/gimpprint_15.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - -GIMP-Print - Paper functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.5 Paper functions

    -

    - - -

    -

    -

    -
    Data type: void * stp_papersize_t -
    -This is an opaque data type, whose structure is not visible to the -user. -
    - -

    -

    -

    -
    Data type: stp_papersize_unit_t -
    - -
    -typedef enum papersize_unit
    -{
    -  PAPERSIZE_ENGLISH,
    -  PAPERSIZE_METRIC
    -} stp_papersize_unit_t;
    -
    - -
    - -

    -

    -
    Function: int stp_known_papersizes (void) -
    - -

    -
    - -

    -

    -
    Function: const stp_papersize_t stp_get_papersize_by_name (const char *name) -
    - -

    -
    - -

    -

    -
    Function: const stp_papersize_t stp_get_papersize_by_size (int l, int w) -
    - -

    -
    - -

    -

    -
    Function: const stp_papersize_t stp_get_papersize_by_index (int index) -
    - -

    -
    - -

    -

    -
    Function: const char * stp_papersize_get_name (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: unsigned stp_papersize_get_width (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: unsigned stp_papersize_get_height (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: unsigned stp_papersize_get_top (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: unsigned stp_papersize_get_left (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: unsigned stp_papersize_get_bottom (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: unsigned stp_papersize_get_right (const stp_papersize_t pt) -
    - -

    -
    - -

    -

    -
    Function: stp_papersize_unit_t stp_papersize_get_unit (const stp_papersize_t pt) -
    - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_16.html b/doc/manual-html/gimpprint_16.html deleted file mode 100644 index dd8f55d..0000000 --- a/doc/manual-html/gimpprint_16.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - -GIMP-Print - Printer functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.6 Printer functions

    -

    - - -

    -

    -

    -
    Data type: void * stp_printer_t -
    -This is an opaque data type, whose structure is not visible to the -user. -
    - -

    -

    -

    -
    Function: int stp_known_printers (void) -
    - -

    -
    - -

    -

    -
    Function: const stp_printer_t stp_get_printer_by_index (int idx) -
    - -

    -
    - -

    -

    -
    Function: const char * stp_printer_get_long_name (const stp_printer_t p) -
    - -

    -
    - -

    -

    -
    Function: const stp_printer_t stp_get_printer_by_long_name (const char *long_name) -
    - -

    -
    - -

    -

    -
    Function: const stp_printer_t stp_get_printer_by_driver (const char *driver) -
    - -

    -
    - -

    -

    -
    Function: int stp_get_printer_index_by_driver (const char *driver) -
    - -

    -
    - -

    -

    -
    Function: const char * stp_printer_get_driver (const stp_printer_t p) -
    - -

    -
    - -

    -

    -
    Function: int stp_printer_get_model (const stp_printer_t p) -
    - -

    -
    - -

    -

    -
    Function: const stp_printfuncs_t * stp_printer_get_printfuncs (const stp_printer_t p) -
    - -

    -
    - -

    -

    -
    Data type: stp_printfuncs_t -
    - -
    -typedef struct
    -{
    -  char  **(*parameters)(const stp_printer_t printer,
    -                        const char *ppd_file,
    -                        const char *name, int *count);
    -  void  (*media_size)(const stp_printer_t printer,
    -                      const stp_vars_t v, int *width,
    -                      int *height);
    -  void  (*imageable_area)(const stp_printer_t printer,
    -                          const stp_vars_t v,
    -                          int *left, int *right,
    -                          int *bottom, int *top);
    -  void  (*limit)(const stp_printer_t printer,
    -                 const stp_vars_t v,
    -                 int *width, int *height);
    -  void  (*print)(const stp_printer_t printer,
    -                 stp_image_t *image, const stp_vars_t v);
    -  const char *(*default_parameters)(const stp_printer_t printer,
    -                                    const char *ppd_file,
    -                                    const char *name);
    -  void  (*describe_resolution)(const stp_printer_t printer,
    -                               const char *resolution,
    -                               int *x, int *y);
    -  int   (*verify)(const stp_printer_t p, const stp_vars_t v);
    -} stp_printfuncs_t;
    -
    - -
    - -

    -

    -
    Data type: stp_image_t -
    - -
    -typedef struct stp_image
    -{
    -  void (*init)(struct stp_image *image);
    -  void (*reset)(struct stp_image *image);
    -  void (*transpose)(struct stp_image *image);
    -  void (*hflip)(struct stp_image *image);
    -  void (*vflip)(struct stp_image *image);
    -  void (*crop)(struct stp_image *image,
    -               int left, int top, int right,
    -               int bottom);
    -  void (*rotate_ccw)(struct stp_image *image);
    -  void (*rotate_cw)(struct stp_image *image);
    -  void (*rotate_180)(struct stp_image *image);
    -  int  (*bpp)(struct stp_image *image);
    -  int  (*width)(struct stp_image *image);
    -  int  (*height)(struct stp_image *image);
    -  void (*get_row)(struct stp_image *image,
    -        unsigned char *data, int row);
    -  const char *(*get_appname)(struct stp_image *image);
    -  void (*progress_init)(struct stp_image *image);
    -  void (*note_progress)(struct stp_image *image,
    -        double current, double total);
    -  void (*progress_conclude)(struct stp_image *image);
    -  void *rep;
    -} stp_image_t;
    -
    - -

    -This is an abstract data type for interfacing with the program which -created the image. -

    - -

    -

    -

    -
    Function: const stp_vars_t stp_printer_get_printvars (const stp_printer_t p) -
    - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_17.html b/doc/manual-html/gimpprint_17.html deleted file mode 100644 index f6dc2bb..0000000 --- a/doc/manual-html/gimpprint_17.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - -GIMP-Print - Settings functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.7 Settings functions

    -

    - - -

    -

    -

    -
    Function: stp_convert_t stp_choose_colorfunc (int output_type, int image_bpp, const unsigned char *cmap, int *out_bpp, const stp_vars_t v) -
    - -

    -
    - -

    -

    -
    Function: void stp_compute_page_parameters (int page_right, int page_left, int page_top, int page_bottom, double scaling, int image_width, int image_height, stp_image_t *image, int *orientation, int *{page_width}, int *page_height, int *out_width, int *out_height, int *left, int *top) -
    - -

    -
    - -

    -

    -
    Function: const stp_vars_t stp_default_settings (void) -
    - -

    -
    - -

    -

    -
    Function: const stp_vars_t stp_maximum_settings (void) -
    - -

    -
    - -

    -

    -
    Function: const stp_vars_t stp_minimum_settings (void) -
    - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_18.html b/doc/manual-html/gimpprint_18.html deleted file mode 100644 index 96bc5a4..0000000 --- a/doc/manual-html/gimpprint_18.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - -GIMP-Print - Version functions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4.8 Version functions

    -

    - - -

    -

    -

    -
    Function: const char * stp_check_version (unsigned int required_major, -
    -unsigned int required_minor, unsigned int required_micro) - -

    -

    -This function checks whether the version of libgimpprint that the program -is linked with is equal to the version number passed to it. If the version -is the same, the function returns NULL. If any of the version -numbers do not match (i.e. the library version is too old or too new), a string containing a desription of the difference is -returned. The first error found is returned. The function checks in the order -major, minor, micro. -

    - -

    - - -

    4.8.1 Version macros

    - -

    -

    -
    Macro: GIMPPRINT_CHECK_VERSION (major,minor,micro) -
    - -

    -

    -This macro returns zero if the version of the libgimpprint headers are -greater or equal to the version given as an argument. It returns nonzero -if the version of the libgimpprint headers are less than the argument. -

    - -

    -

    -

    -
    Macro: GIMPPRINT_MAJOR_VERSION -
    -
    - -

    -

    -

    -
    Macro: GIMPPRINT_MINOR_VERSION -
    -
    - -

    -

    -

    -
    Macro: GIMPPRINT_MICRO_VERSION -
    -
    - -

    -

    -

    -
    Macro: GIMPPRINT_CURRENT_INTERFACE -
    -
    - -

    -

    -

    -
    Macro: GIMPPRINT_BINARY_AGE -
    -
    - -

    -

    -

    -
    Macro: GIMPPRINT_INTERFACE_AGE -
    -
    - -

    -

    -These macros are integers holding the version numbers. They should be -used for compile-time checking only. To check version numbers at -run-time, use the equivalent variables. Note that at present (4.1.x -development branch) the library interface version numbers are not used. - -

    - - -

    4.8.2 Version variables

    - -

    -

    -
    Variable: const unsigned int gimpprint_major_version -
    -
    - -

    -

    -

    -
    Variable: const unsigned int gimpprint_minor_version -
    -
    - -

    -

    -

    -
    Variable: const unsigned int gimpprint_micro_version -
    -
    - -

    -

    -

    -
    Variable: const unsigned int gimpprint_current_interface -
    -
    - -

    -

    -

    -
    Variable: const unsigned int gimpprint_binary_age -
    -
    - -

    -

    -

    -
    Variable: const unsigned int gimpprint_interface_age -
    -
    - -

    -

    -These variables hold the library version numbers. Because the version of -the library may change on a system using shared libraries, these should -be used instead of the equivalent macros when checking the library -version at run-time. Note that library interface version numbers are not -used in the development branch, but are in the stable branch. -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_19.html b/doc/manual-html/gimpprint_19.html deleted file mode 100644 index 0ba0d14..0000000 --- a/doc/manual-html/gimpprint_19.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - -GIMP-Print - Programs - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    5 Programs

    -

    - - -

    -

    -This chapter of the manual describes the use of some of the programs -which use the GIMP-Print library (libgimpprint). Note that there is now -a user manual in DocBook/SGML format, currently provided in HTML, -PostScript and PDF formats which is distributed with GIMP-Print. This -manual currently covers the use of the GIMP Print plugin and CUPS -drivers. - -

    - - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_2.html b/doc/manual-html/gimpprint_2.html deleted file mode 100644 index 4820f55..0000000 --- a/doc/manual-html/gimpprint_2.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - -GIMP-Print - Copying - - -Go to the first, previous, next, last section, table of contents. -


    - -

    - - -

    GNU GENERAL PUBLIC LICENSE

    -

    -Version 2, June 1991 - -

    - -
    -Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    -675 Mass Ave, Cambridge, MA 02139, USA
    -
    -Everyone is permitted to copy and distribute verbatim copies
    -of this license document, but changing it is not allowed.
    -
    - - - -

    Preamble

    - -

    - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - -

    -

    - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - -

    -

    - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - -

    -

    - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - -

    -

    - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -

    -

    - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - -

    -

    - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - -

    -

    - The precise terms and conditions for copying, distribution and -modification follow. - -

    -

    -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -

    - -
      -
    1. - -This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -
    2. - -You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -
    3. - -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - -
        -
      1. - -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -
      2. - -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -
      3. - -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) -
      - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -
    4. - -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - -
        -
      1. - -Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -
      2. - -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -
      3. - -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) -
      - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -
    5. - -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -
    6. - -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -
    7. - -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -
    8. - -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -
    9. - -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -
    10. - -The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -
    11. - -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -NO WARRANTY - -
    12. - -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -
    13. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. -
    - -

    -END OF TERMS AND CONDITIONS - -

    - - -

    How to Apply These Terms to Your New Programs

    - -

    - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - -

    -

    - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - -

    - -
    -one line to give the program's name and an idea of what it does.
    -Copyright (C) 19yy  name of author
    -
    -This program is free software; you can redistribute it and/or
    -modify it under the terms of the GNU General Public License
    -as published by the Free Software Foundation; either version 2
    -of the License, or (at your option) any later version.
    -
    -This program is distributed in the hope that it will be useful,
    -but WITHOUT ANY WARRANTY; without even the implied warranty of
    -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -GNU General Public License for more details.
    -
    -You should have received a copy of the GNU General Public License
    -along with this program; if not, write to the Free Software
    -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    -
    - -

    -Also add information on how to contact you by electronic and paper mail. - -

    -

    -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -

    - -
    -Gnomovision version 69, Copyright (C) 19yy name of author
    -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
    -type `show w'.  This is free software, and you are welcome
    -to redistribute it under certain conditions; type `show c'
    -for details.
    -
    - -

    -The hypothetical commands `show w' and `show c' should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and -`show c'; they could even be mouse-clicks or menu items--whatever -suits your program. - -

    -

    -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - -

    - -
    -Yoyodyne, Inc., hereby disclaims all copyright
    -interest in the program `Gnomovision'
    -(which makes passes at compilers) written
    -by James Hacker.
    -
    -signature of Ty Coon, 1 April 1989
    -Ty Coon, President of Vice
    -
    - -

    -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - -

    - - -

    Copying summary

    -

    -GIMP-Print is free; this means that everyone is free to use it and -free to redistribute it on a free basis. GIMP-Print is not in the public -domain; it is copyrighted and there are restrictions on its -distribution, but these restrictions are designed to permit everything -that a good cooperating citizen would want to do. What is not allowed is -to try to prevent others from further sharing any version of GIMP-Print -that they might get from you. - -

    -

    -Specifically, we want to make sure that you have the right to give away -copies of GIMP-Print, that you receive source code or else can get it if -you want it, that you can change GIMP-Print or use pieces of it in new -free programs, and that you know you can do these things. - -

    -

    -To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of GIMP-Print, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - -

    -

    -Also, for our own protection, we must make certain that everyone finds -out that there is no warranty for GIMP-Print. If GIMP-Print is modified -by someone else and passed on, we want their recipients to know that -what they have is not what we distributed, so that any problems -introduced by others will no reflect on our reputation. -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_20.html b/doc/manual-html/gimpprint_20.html deleted file mode 100644 index e53165e..0000000 --- a/doc/manual-html/gimpprint_20.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - -GIMP-Print - The GIMP plugin - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    5.1 The GIMP Print plugin

    -

    - - - -

    -

    -The GIMP Print plugin is the printing facility for the GNU Image -Manipulation Program(1)}. This section -examines the features offered by the Print plugin. - -

    -

    -The main window is divided into five panes: - -

    - - - -

    5.1.1 Preview

    - -

    -The Preview pane contains a positioning widget that allows interactively -positioning the output on the page. It contains an outer border, -representing the sheet of paper; an inner border, representing the -printable area of the printer; an arrow, pointing to the top of the page -(the end that's fed into the printer); and a black rectangle, -representing the position of the image on the page. The image can be -moved around on the paper. When the first (left) button is used, the -image is moved in screen pixels; when any other button is used, the -image is moved in points(2). -The arrow resizes depending upon the media size chosen; the shaft of the -arrow is always equal to one inch on the output. - -

    -

    -@image{print-main,,4in} - -

    - - - -

    5.1.2 Printer Settings

    - -

    -The Printer Settings pane contains a dropdown menu for selecting a -printer to print to. There is a special `printer' named `File' -that allows you to choose a file to print to, rather than a printer -queue. The Setup box to the right allows specification of a printer -type, a PPD file(3), and the command to -be used to print. Each distinct printer in the Printer list can have -different settings applied to it. Below that is a combo box allowing -choice of media size. The choices are constrained to those that the -printer supports. Below that are dropdown menus for choosing media type -(what kind of paper), media source (what input tray), ink type, and -resolution. All of these settings are printer-specific. - -

    -

    -@image{print-setup,,2in} - -

    - - - -

    5.1.3 Position

    - -

    -The Position pane contains various widgets to place the image on the -paper. These widgets work in conjunction with the Preview pane. At the -top of the pane is a button to center the image on the paper (not on the -printable area), and on either side buttons to center vertically and -horizontally. Below these are four boxes that allow entry of the left, -top, right, and bottom of the image. These positions are relative to -the top left of the paper(4). There are -two additional boxes that allow specification of the right margin and -bottom margin if you prefer; these are relative to the bottom right -corner of the paper. Any of these may have values entered into them; -the preview image will be moved appropriately. - -

    -

    -Note: These entries do not resize the image. - -

    -

    -Finally, there is a pick box for orientation (landscape or portrait). -There is an `Auto' mode that picks the orientation that yields the -orientation that best matches that of the image to be printed. - -

    - - -

    5.1.4 Scaling

    - -

    -The Scaling pane contains a slider that allows scaling of the image. -The image can be scaled in either percent of the printable area -(not the page in this case) or pixels per inch (PPI) via a -radio button below the slider. PPI allows matching image resolution to -printer resolution. The image may be scaled using either method to -between 5 and 100% of the imageable area. It is not possible to crop -with the Print plugin. In Percent mode, the image is scaled so that -neither axis will be longer than the percent of the printable area -specified. For example, if you print an image at 20%, it will be -possible to tile the image 5 times on one axis and at least 5 times on -the other. To the right of the radio button is a button called Set -Image Scale. This sets the scaling to PPI, and sets the resolution as -closely as possible to the resolution stored in the image. To the right -of the Set Image Scale button are two boxes that allow entry of width -and height of the image. These set the scaling mode to PPI. Specifying -one automatically sets the other, and the image is repositioned as -needed to prevent it from falling off the edge of the page. - -

    -

    -To its right is a button group that allows choosing English (inch) -units or metric (centimeter) units. - -

    - - -

    5.1.5 Image Settings

    - -

    -The Image Settings pane allows choice of Line Art, Solid Colors, or -Photograph image type. Line art or Solid Colors should be used for -graphics containing mostly solid areas of color. They're very similar -to each other. Photograph mode dithers more slowly, but produces more -accurate colors. To the right of these three radio buttons is a button -called Adjust Color. This pops up a new window that controls various -output quality settings. That will be described separately. Finally, -there is a choice of Black and White, Color and Monochrome output. -Monochrome output can be used to print absolute black and white very -quickly. - -

    - - - -

    5.1.5.1 Adjust Output

    - -

    -The Adjust Output button button pops up a non-modal dialog that allows -adjustment of various parameters related to the print quality. These -are independent of the controls within the GIMP itself and only affect -the print. - -

    -

    -@image{print-color,,2in} - -

    -

    -At the top of the window is a thumbnail of the image that changes to -reflect the color settings of the image. This enables you to get an -idea of how the image will print out as you adjust settings. - -

    -

    -Below that there are eight sliders: - -

    -
    - -
    Brightness -
    -(0--2.0, default 1.0) Adjust the brightness of the image. - -
    Contrast -
    -(0--4.0, default 1.0) Adjust the output contrast. - -
    Cyan, Magenta, Yellow -
    -(0--4.0, default 1.0) Adjust the cyan, magenta, and yellow in the -output. These should not normally need to be adjusted very much; even -very small adjustments can go quite a long way to restoring color -balance. - -
    Saturation -
    -(0--9.0, default 1.0) Adjust the color brilliance (saturation) of the -output. Saturation of 0 means pure gray scale, with no color. -Saturation of 9.0 will make just about anything but pure grays -brilliantly colored. - -
    Density -
    -(0.1--2.0, default 1.0) Adjust the density (amount of ink) in the print. -The density is automatically corrected for the particular printer, -resolution, and in some cases paper choices. If solid black in the -input is not solid in the print, the density needs to be increased; if -there is excessive ink bleed-through and muddy dark colors, the density -should be decreased. - -Note: the density will not increase beyond a certain amount no -matter what the slider is set to. - -
    Gamma -
    -(0.1--4.0, default 1.0) Adjust the output gamma. The gamma value is -automatically corrected for the choice of printer; this is used if you -believe the automatic setting is incorrect. -
    - - - -

    5.1.5.2 Dither Algorithm

    -

    -There is also a selection box for the dither algorithm to be used in the -pop-up dialog. There are currently seven choices: - -

    -
    - -
    Adaptive Hybrid -
    -Adaptive Hybrid usually yields the best output quality; it chooses a -modified Floyd-Steinberg error diffusion algorithm or ordered dithering -depending upon the image characteristics. - -
    Ordered -
    -Ordered uses a pure ordered dither. It generally yields excellent -quality for simple black and white or four color printers without -variable drop size or drop modulation; it is not recommended if high -quality is desired on six color printers. It is considerably faster -than Adaptive Hybrid. - -
    Fast -
    -Fast also uses a pure ordered dither, but uses a very simple black model -and makes no attempt to handle multi-level (6-color, variable drop size, -or drop modulation) at all cleanly. It is substantially faster than -Ordered dither. The quality tends to be quite poor except on simple -four color printers. On three color printers, quality is probably -competitive with anything else. - -
    Very Fast -
    -Very Fast is similar to Fast, except that it uses a very simple dither -matrix that can be looked up much more quickly than the matrix used in -the Fast dither. For simple pure black and white images dominated by -horizontal and vertical lines, this may actually yield the best results; -for other types of image, the quality will be poor. - -
    Adaptive Random -
    -Adaptive Random is similar to Adaptive Hybrid, except that the -modifications to the Floyd-Steinberg algorithm are slightly different. -This is slower than Adaptive Hybrid on most systems. For some images -the quality may be better than Adaptive Hybrid, but generally Adaptive -Hybrid should yield slightly superior images. - -
    Hybrid Floyd-Steinberg -
    -Hybrid Floyd-Steinberg uses the modified Floyd-Steinberg algorithm of -Adaptive Hybrid on the entire image. Generally, the results are poor in -pale regions. - -
    Random Floyd-Steinberg -
    -Random Floyd-Steinberg uses the modified Floyd-Steinberg algorithm of -Adaptive Random on the entire image. Generally, the results are poor in -pale regions. -
    - - - -

    5.1.6 Action Buttons

    - -

    -The last pane contains four action buttons: - -

    -
    - -
    Print and Save Settings -
    -Immediately print the image (or, if the File printer is chosen, display -a file selection window to pick the output file), and save all current -settings for all printers. - -
    Save Settings -
    -Immediately save the settings, and continue working in the Print plugin. - -
    Print -
    -Immediately print the image (or, if the `File' printer is chosen, -display a file selection window to pick the output file), but do not -save settings. - -
    Cancel -
    -Immediately quit without saving settings or printing. -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_21.html b/doc/manual-html/gimpprint_21.html deleted file mode 100644 index 9f83de8..0000000 --- a/doc/manual-html/gimpprint_21.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - -GIMP-Print - Ghostscript - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    5.2 Ghostscript driver

    -

    - - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_22.html b/doc/manual-html/gimpprint_22.html deleted file mode 100644 index 11b0fec..0000000 --- a/doc/manual-html/gimpprint_22.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - -GIMP-Print - CUPS - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    5.3 CUPS driver

    -

    - - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_23.html b/doc/manual-html/gimpprint_23.html deleted file mode 100644 index e1bd23b..0000000 --- a/doc/manual-html/gimpprint_23.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - -GIMP-Print - Problems - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    6 Reporting Bugs

    -

    - - - -

    -

    -If you find a bug in GIMP-Print or have any suggestions for modification -or improvement, please send electronic mail to the GIMP-Print bug -reporting address (5)}. Include the version -number, which you can find by running `gimpprint-config ---version'. Also include in your message the output that the program -produced and the output you expected, if applicable, otherwise the best -description of the problem that you can provide. - -

    -

    -If you have other questions, comments or suggestions about GIMP-Print, -contact the developers via electronic mail to the GIMP-Print mailing -list (6)}. They will try to help you out, -although they may not have time to fix your problems. -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_24.html b/doc/manual-html/gimpprint_24.html deleted file mode 100644 index 31838f9..0000000 --- a/doc/manual-html/gimpprint_24.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - -GIMP-Print - Appendices - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    7 Appendices

    -

    - - -

    - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_25.html b/doc/manual-html/gimpprint_25.html deleted file mode 100644 index bbccb97..0000000 --- a/doc/manual-html/gimpprint_25.html +++ /dev/null @@ -1,611 +0,0 @@ - - - - -GIMP-Print - Dithering - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    A Dithering

    -

    - - -

    -

    -The dithering code in `print-dither.c' attempts to reproduce -various shades of gray (or all colors) from only a few different inks -(black, cyan, magenta, yellow, and sometimes light cyan and light -magenta). The dots can't vary in darkness or size (except for certain -special printers), and so we need to lay down a certain fraction of dots -to represent each distinct level. - -

    -

    -This sounds straightforward; in practice, it isn't. Completely random -distribution of dots (simple probabilistic dithering) would create -grainy clumps and light spots. The smoothest pattern results from an -equidistant spacing of dots. Approximating this requires sophisticated -algorithms. We have two dithering algorithms, an ordered dither -algorithm that uses a grid (matrix) to decide whether to print, and a -modified Floyd-Steinberg error diffusion algorithm that uses a grid in a -slightly different way. - -

    - -

    -We currently have three dithering functions: - -

    - -
      -
    1. - -dither_fastblack produces pure black or white from a pre-dithered -input. This is used for two purposes: for printing pure black and white -very quickly (e. g. text), and for printing pre-screened monochrome -output that was rasterized externally. - -
    2. - -dither_black produces black from grayscale input. The new -dither_black can produce either a single or multiple levels of black, -for printers supporting variable dot size. - -
    3. - -dither_cmyk produces 3, 4, 5, 6, or 7 color output (CMY, CMYK, -CcMmYK, CcMmYy, CcMmYyK, or any variants). The new routine can handle -single or multiple levels of each color. -
    - -

    -There is a choice of dithering algorithms. Four of them are based on a -basic error diffusion, with a few tweaks of my own. The other one is -`ordered'. However, they all share the basic operation in common. -First, the algorithm picks what kind of dot (if there are multiple dot -sizes and/or tones that may be picked) is the candidate to be printed. -This decision is made based on the darkness at the point being dithered. -Then, it decides whether the dot will be printed at all. What this is -based on depends upon which algorithm family we use. This is all -described in more detail below. - -

    - -

    -Ordered dithering works by comparing the value at a given point with the -value of a tiled matrix. If the value at the point is greater than the -value in the matrix, the dot is printed. The matrix should consist of a -set of evenly spaced points between 0 and the upper limit. The choice -of matrix is very important for print quality. A good dither matrix -will emphasize high frequency components, which distributes dots evenly -with a minimum of clumping. The matrices used here are all simple -matrices that are expanded recursively to create larger matrices with -the same kind of even point distribution. This is described below. - -

    -

    -Note that it is important to use different matrices for the two -sub-operations, because otherwise the choice about whether to print and -the choice of dot size will be correlated. The usual result is that the -print is either too dark or too light, but there can be other problems. - -

    -

    -Ordered dithering works quite well on single dot size, four color -printers. It has not been well tested on four color, variable dot size -printers. It should be avoided on six color printers. - -

    - -

    -Error diffusion works by taking the output error at a given pixel and -"diffusing" it into surrounding pixels. Output error is the -difference between the amount of ink output and the input level at each -pixel. For simple printers, with one or four ink colors and only one -dot size, the amount of ink output is either 65536 (i. e. full output) -or 0 (no output). The difference between this and the input level is -the error. Normal error diffusion adds part of this error to the -adjoining pixels in the next column and the next row (the algorithm -simply scans each row in turn, never backing up). The error adds up -until it reaches a threshold (half of the full output level, or 32768), -at which point a dot is output, the output is subtracted from the -current value, and the (now negative) error is diffused similarly. - -

    -

    -Error diffusion works quite well in general, but it tends to generate -artifacts which usually appear as worm-like lines or areas of anomalous -density. I have devised some ways, as described below, of ameliorating -these artifacts. - -

    -

    -There are two sub-classes of error diffusion that we use here, `random' -and `hybrid'. One of the techniques that we use to ameliorate the -artifacts is to use a fuzzy threshold rather than the hard threshold of -half of the output level. Random error diffusion uses a pseudo-random -number to perturb the threshold, while hybrid error diffusion uses a -matrix. Hybrid error diffusion worked very poorly in 3.1.3, and I -couldn't figure out why until I found a bug. It now works very well. - -

    -

    -There is one additional variant (on both sub-classes), called `adaptive -hybrid' and `adaptive random'. The adaptive variant takes advantage of -the fact that the patterns that ordered dithering create are less -visible at very low densities, while the artifacts created by error -diffusion are more objectionable at low densities. At low densities, -therefore, it uses ordered dithering; at higher densities it uses error -diffusion. - -

    - -

    -Handling multiple output levels makes life a bit more complicated. In -principle, it shouldn't be much harder: simply figure out what the ratio -between the available output levels is and have multiple thresholds. In -practice, getting these right involves a lot of trial and error. The -other thing that's important is to maximize the number of dots that have -some ink. This will reduce the amount of speckling. More on this -later. - -

    -

    -The next question: how do we handle black when printing in color? Black -ink is much darker than colored inks. It's possible to produce black by -adding some mixture of cyan, magenta, and yellow--in principle. In -practice, the black really isn't very black, and different inks and -different papers will produce different color casts. However, by using -CMY to produce gray, we can output a lot more dots! This makes for a much -smoother image. What's more, one cyan, one magenta, and one yellow dot -produce less darkness than one black dot, so we're outputting that many -more dots. Better yet, with 6 or 7 color printers, we have to output even -more light ink dots. So Epson Stylus Photo printers can produce really -smooth grays--if we do everything right. The right idea is to use -CMY at lower black levels, and gradually mix in black as the overall -amount of ink increases, so the black dots don't really become visible -within the ink mass. - -

    -

    -Variable dot sizes are handled by dividing the range between 0 and -65536 into segments. Each segment can either represent a range in -which all of one kind of ink (color and/or dot size) is used, with -varying amounts of ink, or a transition region between inks, in which -equal numbers of dots are printed but the amount of each ink will be -adjusted throughout the range. Each range is represented by four -numbers: - -

    - -
      -
    1. - -bottom of the range -
    2. - -top of the range -
    3. - -value of the lighter ink -
    4. - -value of the darker ink -
    - -

    -In addition, the bit patterns and which type of ink are also -represented, but they don't affect the actual algorithm. - -

    - -

    -As mentioned above, the basic algorithm is the same whether we use -ordered dither or error diffusion. We perform the following steps on -each color of each pixel: - -

    - -
      -
    1. - -Compute the value of the particular color we're printing. This isn't -usually the pure CMY value; it's adjusted to improve saturation and to -limit the use of black in light toned regions (to avoid speckling). - -
    2. - -Find the range containing this value. - -
    3. - -Compute where this value lies within the range. We scale the endpoints -between 0 and 65536 for this purpose. So for example, if the bottom of -the range is 10,000 and the top of the range is 20,000, and the value is -12,500, we're 1/4 of the way between the bottom and the top of the -range, so our scale point is 16384. - -
    4. - -Compute the "virtual value". The virtual value is the distance between -the value of the lighter and the value of the darker ink. So if the -value of the light ink is 32768 and the dark ink is 65536, we compute a -virtual value scaled appropriately between these two values, which is -40960 in this case. - -
    5. - -Using either error diffusion or ordered dither, the standard threshold -is 1/2 of the value (20480 in this case). Using ordered dither, we want -to compute a value between 0 and 40960 that we will compare the input -value against to decide whether to print. Using pure error diffusion, -we would compare the accumulated error against 20480 to decide whether -to print. In practice, we use the same matrix method to decide whether -to print. The correct amount of ink will be printed this way, but we -minimize the squiggly lines characteristic of error diffusion by -dithering the threshold in this fashion. A future enhancement will -allow us to control the amount of dithering applied to the threshold. -
    - -

    -The matrices were generated by Thomas Tonino -@email{<ttonino@bio.vu.nl>} with an algorithm of his devising. The -algorithm is designed to maximize the spacing between dots at any given -density by searching the matrix for holes and placing a dot in the -largest available hole. It requires careful selection of initial points -to achieve good results, and is very time consuming. For best results, -a different matrix must be used for modes with 2:1 aspect ratio -(e.g. 1440x720) than for 1:1 (e. g. 720x720). It is essential with any -of these matrices that every point be used. Skipping points generates -low-frequency noise. - -

    -

    -It's essential to use different matrices for deciding whether to print -and for deciding what color (dark or light) to print. This should be -obvious; the decision about whether to print at all should be as -independent as possible from the decision about what color to print, -because any bias will result in excess light or dark ink being -printed, shifting the tonal balance. We actually use the same -matrices, but we shift them vertically and horizontally. Assuming -that the matrices are not self-correlated, this will yield good -results. - -

    -

    -The ranges are computed from a list of ink values (between 0 and 1 for -each possible combination of dot size and ink tone, where the value -represents the darkness of the ink) and the desired maximum density of -the ink. This is done in dither_set_ranges, and needs more -documentation. - -

    - -

    -I stated earlier that I've tweaked the basic error diffusion algorithm. -Here's what I've done to improve it: - -

    - -
      -
    1. - -We use a variable threshold to decide when to print, as discussed above. -This does two things for us: it reduces the slightly squiggly diagonal -lines that are the mark of error diffusion; and it allows us to lay down -some ink even in very light areas near the edge of the image. The -squiggly lines that error diffusion algorithms tend to generate are -caused by the gradual accumulation of error. This error is partially -added horizontally and partially vertically. The horizontal -accumulation results in a dot eventually being printed. The vertical -accumulation results in a dot getting laid down in roughly the same -horizontal position in the next row. The diagonal squigglies result -from the error being added to pixels one forward and one below the -current pixel; these lines slope from the top right to the bottom left -of the image. - -Error diffusion also results in pale areas being completely white near -the top left of the image (the origin of the printing coordinates). -This is because enough error has to accumulate for anything at all to -get printed. In very pale areas it takes quite a long time to build up -anything printable at all; this results in the bare spots. - -Randomizing the threshold somewhat breaks up the diagonals to some -degree by randomizing the exact location that the accumulated output -crosses the threshold. It reduces the false white areas by allowing -some dots to be printed even when the accumulated output level is very -low. It doesn't result in excess ink because the full output level is -still subtracted and diffused. - -Excessive randomization leads to blobs at high densities. Therefore, as -the density increases, the degree of randomization decreases. - -
    2. - -Alternating scan direction between rows (first row is scanned left to -right, second is scanned right to left, and so on). This also helps -break up white areas, and it also seems to break up squigglies a bit. -Furthermore, it eliminates directional biases in the horizontal -direction. This isn't necessary for ordered dither, but it doesn't hurt -either. - -
    3. - -Diffusing the error into more pixels. Instead of diffusing the entire -error into @math{(X+1, Y)} and @math{(X, Y+1)}, we diffuse it into -@math{(X+1, Y)}, @math{(X+K, Y+1)}, @math{(X, Y+1)}, @math{(X-K, Y+1)} -where @math{K} depends upon the output level (it never exceeds about 10 -dots, and is greater at higher output levels). This really reduces -squigglies and graininess. The amount of this spread can be controlled; -for line art, it should be less than for photographs (of course, line -art doesn't usually contain much light color, but the error -value can be small in places!) In addition to requiring more -computation, a wide ink spread results in patterning at high dot -densities (note that the dot density can be high even in fairly pale -regions if multiple dot sizes are in use). - -
    4. - -Don't lay down any colored ink if we're laying down black ink. There's -no point; the colored ink won't show. We still pretend that we did for -purposes of error diffusion (otherwise excessive error will build up, -and will take a long time to clear, resulting in heavy bleeding of ink -into surrounding areas, which is very ugly indeed), but we don't bother -wasting the ink. How well this will do with variable dot size remains -to be seen. - -
    5. - -Oversampling. This is how to print 1440x720 with Epson Stylus printers. -Printing full density at 1440x720 will result in excess ink being laid -down. The trick is to print only every other dot. We still compute the -error as though we printed every dot. It turns out that randomizing -which dots are printed results in very speckled output. This can be -taken too far; oversampling at 1440x1440 or 1440x2880 virtual resolution -results in other problems. However, at present 1440x1440 (which is more -accurately called "1440x720 enhanced", as the Epson printers cannot -print 1440 rows per inch) does quite well, although it's slow. -
    - -

    -What about multiple output levels? For 6 and 7 color printers, simply -using different threshold levels has a problem: the pale inks have trouble -being seen when a lot of darker ink is being printed. So rather than -just using the output level of the particular color to decide which ink -to print, we look at the total density (sum of all output levels). -If the density's high enough, we prefer to use the dark ink. Speckling -is less visible when there's a lot of ink, anyway. I haven't yet figured -out what to do for multiple levels of one color. - -

    -

    -You'll note that I haven't quoted a single source on color or printing -theory. I simply did all of this empirically. - -

    -

    -There are various other tricks to reduce speckling. One that I've seen -is to reduce the amount of ink printed in regions where one color -(particularly cyan, which is perceived as the darkest) is very pale. -This does reduce speckling all right, but it also results in strange -tonal curves and weird (to my eye) colors. - -

    - -

    -Before any dither routine is used, init_dither() must be called. -This takes three arguments: the input width (number of pixels in the -input), the output width (number of pixels in the output), and a -vars_t structure containing the parameters for the print job. - -

    -

    -init_dither() returns a pointer to an opaque object representing -the dither. This object is passed as the first argument to all of the -dither-related routines. - -

    -

    -After a page is fully dithered, free_dither() must be called to -free the dither object and perform any cleanup. In the future, this may -do more (such as flush output). This arrangement permits using these -routines with programs that create multiple output pages, such as -GhostScript. - -

    -

    -The dithering routines themselves have a number of control knobs that -control internal aspects of the dithering process. These knobs are -accessible via a number of functions that can be called after -init_dither(). - -

    - -
      -
    • - -dither_set_density() takes a double between 0 and 1 representing -the desired ink density for printing solid colors. This is used in a -number of places in the dithering routine to make decisions. - -
    • - -dither_set_black_density() takes a double between 0 and 1 -representing the desired ink density for printing black ink in color -printing. This is used to balance black against color ink. By default, -this is equal to the density set by dither_set_density(). By -setting it higher, more black ink will be printed. For example, if the -base density is .4 and the black density is .8, twice as much black ink -will be printed as would otherwise be called for. - -This is not used when printing in monochrome. When printing monochrome, -the base density (dither_set_density) should be adjusted -appropriately. - -
    • - -dither_set_ink_budget() takes an unsigned number representing the -most ink that may be deposited at a given point. This number is -arbitrary; the limit is computed by summing the size of each ink dot, -which is supplied as a parameter in dither_set_X_ranges. -By default, there is no limit. - -
    • - -dither_set_black_lower() takes a double that should be between 0 -and 1 that represents the lowest density level at which black ink will -start to mix in with colored ink to generate grays. The lower this is, -the less density is required to use black ink. Setting this too low -will result in speckling from black dots, particularly on 6 and 7 color -printers. Setting this too high will make it hard to get satisfactory -black or may result in sharp transition between blended colors and -black. Default: 0.0468. - -It is important to note that since the density scale is never linear -(and since this value is adjusted via other things happening during the -dithering process) that this does not mean that 95% gray will use any -black ink. At this setting, there will be no black ink used until about -50% gray. - -This only applies to color mode. - -This value should be set lower for printers capable of variable dot -size, since more dots can be laid down close to each other. - -
    • - -dither_set_black_upper() takes a double that should be between 0 -and 1 that represents the highest density level at which colored inks -will be mixed to create gray. Setting this too low will result in -speckly dark grays because there is not enough ink to fill all the -holes, or sharp transition between blended colors and black if it is too -close to the value of dither_set_black_upper(). Setting this too high -will result in poor black and dark tone quality. Default: 0.5. This -results in 10% and darker grays being printed with essentially all -black. - -This only applies to color mode. - -
    • - -dither_set_black_levels() takes three doubles that represent the -amount of cyan, magenta, and yellow respectively that are blended to -create gray. The defaults are 1.0 for each, which is probably too low -for most printers. These values are adjusted to create a good gray -balance. Setting these too low will result in pale light and midtone -grays, with a sharp transition to darker tones as black mixes in. -Setting them too high will result in overly dark grays and use of too -much ink, possibly creating bleed-through. - -This only applies to color mode. - -
    • - -dither_set_randomizers() takes four integer values representing -the degree of randomness used for cyan, magenta, yellow, and black. -This is used to allow some printing to take place in pale areas. Zero -is the most random; greater than 8 or so gives very little randomness at -all. Defaults are 0 for cyan, magenta, and yellow, and 4 for black. -Setting the value for black too low will result in black speckling in -pale areas. Setting values too high will result in pale areas getting -no ink at all. - -This currently only applies to single dot size in color and black. It -should be extended to operate in variable dot size mode, although -actually applying it correctly will be tricky. - -
    • - -dither_set_ink_darkness() takes three doubles representing the -contribution to perceived darkness of cyan, magenta, and yellow. This -is used to help decide when to switch between light and dark inks in 6 -and 7 color printers (with light cyan, light magenta, and possibly light -yellow). Setting these too low will result in too much light ink being -laid down, creating flat spots in the darkness curves and bleed-through. -Setting them too high will result in dark ink being used in pale areas, -creating speckle. The defaults are .4 for cyan, .3 for magenta, and .2 -for yellow. Dark cyan will show against yellow much more than dark -magenta will show against cyan, since the cyan appears much darker than -the yellow. - -
    • - -dither_set_light_inks() takes three doubles between 0 and 1 -representing the ratio in darkness between the light and dark versions -of the inks. Setting these too low will result in too much dark ink -being used in pale areas, creating speckling, while setting them too -high will result in very smooth texture but too much use of light ink, -resulting in flat spots in the density curves and ink bleed-through. -There are no defaults. Any light ink specified as zero indicates that -there is no light ink for that color. - -This only applies to 6 and 7 color printers in single dot size color -mode, and only to those inks which have light versions (usually cyan and -magenta). - -
    • - -dither_set_ink_spread() takes a small integer representing the -amount of ink spread in the dither. Larger numbers mean less spread. -Larger values are appropriate for line art and solid tones; they will -yield sharper transitions but more dither artifacts. Smaller values are -more appropriate for photos. They will reduce resolution and sharpness -but reduce dither artifacts up to a point. A value of 16 or higher -implies minimum ink spread at any resolution no matter what the -overdensity. A value of 14 is typical for photos on single dot size, 6 -color printers. For 4 color printers, subtract 1 (more spread; the dots -are farther apart). For variable dot size printers, add 1 (more small -dots are printed; less spread is desirable). - -
    • - -dither_set_adaptive_divisor() takes a float representing the -transition point between error diffusion and ordered dither if adaptive -dithering is used. The float is a fraction of the printing density. -For example, if you wish the transition to be at 1/4 of the maximum -density (which works well on simple 4-color printers), you would pass -.25 here. With six colors and/or with multiple dot sizes, the values -should be set lower. - -
    • - -dither_set_transition() takes a float representing the exponent -of the transition curve between light and dark inks/dot sizes. A value -less than 1 (typical when using error diffusion) mixes in less dark -ink/small dots at lower ends of the range, to reduce speckling. When -using ordered dithering, this must be set to 1. - -
    • - -dither_set_X_ranges_simple (X=`c', `m', -`y', or `k') describes the ink choices available for each -color. This is useful in typical cases where a four color printer with -variable dot sizes is in use. It is passed an array of doubles between -(0, 1] representing the relative darkness of each dot size. The dot -sizes are assigned bit patterns (and ink quantities, see -dither_set_ink_budget() above) from 1 to the number of levels. -This also requires a density, which is the desired density for this -color. This density need not equal the density specified in -dither_set_density(). Setting it lower will tend to print more -dark ink (because the curves are calculated for this color assuming a -lower density than is actually supplied). - -
    • - -dither_set_X_ranges (X=`c', `m', `y', -or `k') describes in a more general way the ink choices available -for each color. For each possible ink choice, a bit pattern, dot size, -value (i. e. relative darkness), and whether the ink is the dark or -light variant ink is specified. -
    - -

    ----Robert Krawitz @email{<rlk@alum.mit.edu>} May 8, 2000 -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_26.html b/doc/manual-html/gimpprint_26.html deleted file mode 100644 index 49ba0d0..0000000 --- a/doc/manual-html/gimpprint_26.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - -GIMP-Print - Weaving - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B Weaving for inkjet printers

    -

    - - -

    -

    -by Charles Briscoe-Smith and Robert Krawitz. - -

    - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_27.html b/doc/manual-html/gimpprint_27.html deleted file mode 100644 index dbd76d4..0000000 --- a/doc/manual-html/gimpprint_27.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - -GIMP-Print - Weaving introduction - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.1 Introduction

    - -

    -The Epson Stylus Color/Photo printers don't have memory to print using -all of the nozzles in the print head. For example, the Stylus Photo -700/EX has 32 nozzles. At 720 dpi, with an 8" wide image, a single line -requires @math{(8 * 720 * 6 / 8)} bytes, or 4320 bytes (because the -Stylus Photo printers have 6 ink colors). To use 32 nozzles per color -would require 138240 bytes. It's actually worse than that, though, -because the nozzles are spaced 8 rows apart. Therefore, in order to -store enough data to permit sending the page as a simple raster, the -printer would require enough memory to store 256 rows, or 1105920 bytes. -Considering that the Photo EX can print 11" wide, we're looking at more -like 1.5 MB. In fact, these printers are capable of 1440 dpi horizontal -resolution. This would require 3 MB. The printers actually have -64K-256K. - -

    -

    -With the newer (740/750 and later) printers it's even worse, since these -printers support multiple dot sizes; of course, the even newer -2880x720 printers don't help either. - -

    -

    -Older Epson printers had a mode called MicroWeave (tm). In this -mode, the host fed the printer individual rows of dots, and the printer -bundled them up and sent them to the print head in the correct order to -achieve high quality. This MicroWeave mode still works in new printers, -but in some cases the implementation is very minimal: the printer uses -exactly one nozzle of each color (the first one). This makes printing -extremely slow (more than 30 minutes for one 8.5x11" page), although the -quality is extremely high with no visible banding whatsoever. It's not -good for the print head, though, since no ink is flowing through the -other nozzles. This leads to drying of ink and possible permanent -damage to the print head. - -

    -

    -By the way, although the Epson manual says that microweave mode should be -used at 720 dpi, 360 dpi continues to work in much the same way. At 360 -dpi, data is fed to the printer one row at a time on all Epson printers. -The pattern that the printer uses to print is very prone to banding. -However, 360 dpi is inherently a low quality mode; if you're using it, -presumably you don't much care about quality. It is possible to do -microweave at 360 DPI, with significantly improved quality. - -

    -

    -Except for the Stylus Pro printers (5000, 5500, 7000, 7500, 9000, -9500, and when it's released the 10000), which can do microweave at -any resolution, printers from roughly the Stylus Color 600 and later -do not have the capability to do MicroWeave correctly in many cases -(some printers can do MicroWeave correctly at 720 DPI). Instead, the -host must arrange the output in the order that it will be sent to the -print head. This is a very complex process; the jets in the print -head are spaced more than one row (1/720") apart, so we can't simply -send consecutive rows of dots to the printer. Instead, we have to -pass e. g. the first, ninth, 17th, 25th... rows in order for them to -print in the correct position on the paper. This interleaving process -is called "soft" weaving. - -

    -

    -This decision was probably made to save money on memory in the -printer. It certainly makes the driver code far more complicated than -it would be if the printer could arrange the output. Is that a bad -thing? Usually this takes far less CPU time than the dithering -process, and it does allow us more control over the printing process, -e.g. to reduce banding. Conceivably, we could even use this ability -to map out bad jets. - -

    -

    -Interestingly, apparently the Windows (and presumably Macintosh) drivers -for most or all Epson printers still list a "microweave" mode. -Experiments have demonstrated that this does not in fact use the -"microweave" mode of the printer. Possibly it does nothing, or it -uses a different weave pattern from what the non-"microweave" mode -does. This is unnecessarily confusing, at least for people who write -drivers who try to explain them to people who don't. - -

    -

    -What makes this interesting is that there are many different ways of of -accomplishing this goal. The naive way would be to divide the image up -into groups of 256 rows (for a printer with 32 jets and a separation of -8 rows), and print all the mod8=0 rows in the first pass, mod8=1 rows in -the second, and so forth. The problem with this approach is that the -individual ink jets are not perfectly uniform; some emit slightly bigger -or smaller drops than others. Since each group of 8 adjacent rows is -printed with the same nozzle, that means that there will be distinct -streaks of lighter and darker bands within the image (8 rows is 1/90", -which is visible; 1/720" is not). Possibly worse is that these patterns -will repeat every 256 rows. This creates banding patterns that are -about 1/3" wide. - -

    -

    -So we have to do something to break up this patterning. - -

    -

    -Epson does not publish the weaving algorithms that they use in their -bundled drivers. Indeed, their developer web site -(http://www.ercipd.com/isv/edr_docs.htm) does not even describe how to -do this weaving at all; it says that the only way to achieve 720 dpi is -to use MicroWeave. It does note (correctly) that 1440 dpi horizontal -can only be achieved by the driver (i. e. in software). The manual -actually makes it fairly clear how to do this (it requires two passes -with horizontal head movement between passes), and it is presumably -possible to do this with MicroWeave. - -

    -

    -The information about how to do this is apparently available under -non-disclosure agreement (NDA). It's actually easy enough to reverse -engineer what's inside a print file with a simple Perl script, which is -supplied with the Gimp-Print distribution as tests/parse-escp2. In any -event, we weren't particularly interested in the weaving patterns Epson -used. There are many factors that go into choosing a good weaving -pattern; we're learning them as we go along. Issues such as drying time -(giving the ink a few seconds more or less to dry can have highly -visible effects) affect the quality of the output. - -

    -

    -The Uniprint GhostScript driver has been able to do weaving for a long -time. It uses patterns that must be specified for each choice of -resolution and printer. We preferred an algorithmic approach that -computes a weave pattern for any given choice of inputs. This -obviously requires extensive testing; we developed a test suite -specifically for this purpose. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_28.html b/doc/manual-html/gimpprint_28.html deleted file mode 100644 index 3116157..0000000 --- a/doc/manual-html/gimpprint_28.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -GIMP-Print - Weaving algorithms - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.2 Weaving algorithms

    -

    - - -

    -

    -I considered a few algorithms to perform the weave. The first one I -devised let me use only @math{(jets-distance_between_jets+1)} -nozzles, or 25. This is OK in principle, but it's slower than using all -nozzles. By playing around with it some more, I came up with an -algorithm that lets me use all of the nozzles, except near the top and -bottom of the page. - -

    -

    -This still produces some banding, though. Even better quality can be -achieved by using multiple nozzles on the same line. How do we do -this? In 1440x720 mode, we're printing two output lines at the same -vertical position. However, if we want four passes, we have to -effectively print each line twice. Actually doing this would increase -the density, so what we do is print half the dots on each pass. This -produces near-perfect output, and it's far faster than using (pseudo) -"MicroWeave". - -

    -

    -Yet another complication is how to get near the top and bottom of the -page. This algorithm lets us print to within one head width of the -top of the page, and a bit more than one head width from the bottom. -That leaves a lot of blank space. Doing the weave properly outside of -this region is increasingly difficult as we get closer to the edge of -the paper; in the interior region, any nozzle can print any line, but -near the top and bottom edges, only some nozzles can print. We -originally handled this by using the naive way mentioned above near -the borders, and switching over to the high quality method in the -interior. Unfortunately, this meant that the quality is quite visibly -degraded near the top and bottom of the page. We have since devised -better algorithms that allow printing to the extreme top and bottom of -the region that can physically be printed, with only minimal loss of -quality. - -

    -

    -Epson does not advertise that the printers can print at the very top -of the page, although in practice most of them can. The quality is -degraded to some degree, and we have observed that in some cases not -all of the dots get printed. Epson may have decided that the -degradation in quality is sufficient that printing in that region -should not be allowed. That is a valid decision, although we have -taken another approach. - -

    - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_29.html b/doc/manual-html/gimpprint_29.html deleted file mode 100644 index bd893a6..0000000 --- a/doc/manual-html/gimpprint_29.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - -GIMP-Print - Simple weaving algorithms - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.2.1 Simple weaving algorithms

    - -

    -The initial problem is to calculate the starting position of each -pass; the row number of the printer's top jet when printing that pass. -Since we assume the paper cannot be reverse-fed, the print head must, -for each pass, start either further down the page than the previous -pass or at the same position. Each pass's start point is therefore at -a non-negative offset from the previous pass's start point. - -

    -

    -Once we have a formula for the starting row of each pass, we then turn -that "inside out" to get a formula for the pass number containing each -row. - -

    -

    -First, let's define how our printer works. We measure vertical -position on the paper in "rows"; the resolution with which the printer -can position the paper vertically. The print head contains @math{J} ink -jets, which are spaced @math{S} rows apart. - -

    -

    -Consider a very simple case: we want to print a page as quickly as -possible, and we mostly don't care how sparse the printing is, so long -as it's fairly even. - -

    -

    -It's pretty obvious how to do this. We make one pass with the print -head, printing @math{J} lines of data, each line @math{S} rows after the -previous one. We then advance the paper by @math{S*J} rows and print -the next row. For example, if @math{J=7} and @math{S=4}, this method -can be illustrated like this: - -

    - -
    -pass number
    -| row number------->
    -| |         111111111122222222223333333333444444444455555555556666666666
    -| 0123456789012345678901234567890123456789012345678901234567890123456789
    -0 *---*---*---*---*---*---*
    -1                             *---*---*---*---*---*---*
    -2 \-----------------------/                               *---*---*---*---*---*-
    -          7 jets              \---/
    -                              4 rows offset from one jet to the next
    -  \---------------------------/
    -     7*4=28 rows offset from one pass to the next
    -
    - -

    -In these examples, the vertical axis can be thought of as the time axis, -with the pass number shown at the left margin, while the row number runs -horizontally. A `*' shows each row printed by a pass, and a row of -`-' is used to link together the rows printed by one pass of the -print head. The first pass is numbered `0' and starts at row 0. -Each subsequent pass @math{p} starts at row @math{p*S*J}. Each pass -prints @math{J} lines, each line being @math{S} rows after the previous -one. (For ease of viewing this file on a standard terminal, I'm -clipping the examples at column 80.) - -

    -

    -This method covers the whole page with lines printed evenly @math{S} -rows apart. However, we want to fill in all the other rows with -printing to get a full-density page (we're ignoring oversampling at this -stage). Where we have previously printed a single pass, we'll now print -a "pass block": we print extra passes to fill in the empty rows. A -naive implementation might look like this: - -

    - -
    -0 *---*---*---*---*---*---*
    -1  *---*---*---*---*---*---*
    -2   *---*---*---*---*---*---*
    -3    *---*---*---*---*---*---*
    -4                             *---*---*---*---*---*---*
    -5                              *---*---*---*---*---*---*
    -6                               *---*---*---*---*---*---*
    -7                                *---*---*---*---*---*---*
    -8                                                         *---*---*---*---*---*-
    -9                                                          *---*---*---*---*---*
    -10                                                          *---*---*---*---*---
    -11                                                           *---*---*---*---*--
    -
    - -

    -(Now you can see why this process is called "weaving"!) - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_3.html b/doc/manual-html/gimpprint_3.html deleted file mode 100644 index e64b2eb..0000000 --- a/doc/manual-html/gimpprint_3.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - -GIMP-Print - Overview - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    1 Overview

    -

    - - -

    -

    -The GIMP-Print package is a collection of programs and a library for -high quality printing on modern inkjets, including `photographic -quality' models which offer very high resolutions and several inks. - -

    - -

    -META: Short history of the project - -

    -

    -GIMP-Print is the print facility of the GNU Image Manipulation Program -(GIMP). It is in addition -a suite of drivers that may be used with common UNIX spooling systems -using GhostScript or CUPS. These drivers provide printing quality for -UNIX/Linux on a par with proprietary vendor-supplied drivers in many -cases, and can be used for many of the most demanding printing tasks. -The core of GIMP-Print is a shared library (libgimpprint) which may be -used by any program that wishes to produce high-qulaity printed output. -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_30.html b/doc/manual-html/gimpprint_30.html deleted file mode 100644 index b947f40..0000000 --- a/doc/manual-html/gimpprint_30.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - -GIMP-Print - Perfect weaving - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.2.2 Perfect weaving

    -

    - - -

    -

    -This simple weave pattern prints every row, but will give conspicuous -banding patterns for the reasons discussed above. - -

    -

    -Let's start improving this for our simple case. We can reduce banding -by making sure that any given jet never prints a row too close to -another row printed by the same jet. This means we want to space the -rows printed by a given jet evenly down the page. In turn, this -implies we want to advance the paper by as nearly an equal amount -after each pass as possible. - -

    -

    -Each pass block prints @math{S*J} lines in @math{S} passes. The first -line printed in each pass block is @math{S*J} rows lower on the page -than the first line printed in the previous pass block. Therefore, if -we advance the paper by @math{J} rows between each pass, we can print -the right number of passes in each block and advance the paper perfectly -evenly. - -

    -

    -Here's what this "perfect" weave looks like: - -

    - -
    -                    start of full weave
    -                    |
    -0 *---*---*---*---*---*---*
    -1        *---*---*---*---*---*---*
    -2               *---*---*---*---*---*---*
    -3                      *---*---*---*---*---*---*
    -4                             *---*---*---*---*---*---*
    -5                                    *---*---*---*---*---*---*
    -6                                           *---*---*---*---*---*---*
    -7                                                  *---*---*---*---*---*---*
    -8                                                         *---*---*---*---*---*-
    -9                                                                *---*---*---*--
    -10                                                                      *---*---
    -11                                                                             *
    -
    - -

    -You'll notice that, for the first few rows, this weave is too sparse. -It is not until the row marked "start of full weave" that every -subsequent row is printed. We can calculate this start position as -follows: - -

    - -
    -@math{start = (S-1) * (J-1)}
    -
    - -

    -For the moment, we will ignore this problem with the weave. We'll -consider later how to fill in the missing rows. - -

    -

    -Let's look at a few more examples of perfect weaves: - -

    - -

    -@math{S=2}, @math{J=7}, @math{start=(2-1)*(7-1)=6}: - -

    - -
    -        starting row of full weave
    -        |
    -0 *-*-*-*-*-*-*
    -1        *-*-*-*-*-*-*
    -2               *-*-*-*-*-*-*
    -3                      *-*-*-*-*-*-*
    -4                             *-*-*-*-*-*-*
    -5                                    *-*-*-*-*-*-*
    -6                                           *-*-*-*-*-*-*
    -7                                                  *-*-*-*-*-*-*
    -
    - -

    -@math{S=7}, @math{J=2}, @math{start=6}: - -

    - -
    -        start
    -        |
    -0 *------*
    -1   *------*
    -2     *------*
    -3       *------*
    -4         *------*
    -5           *------*
    -6             *------*
    -7               *------*
    -8                 *------*
    -9                   *------*
    -
    - -

    -@math{S=4}, @math{J=13}, @math{start=36}: - -

    - -
    -                                      start
    -                                      |
    -0 *---*---*---*---*---*---*---*---*---*---*---*---*
    -1              *---*---*---*---*---*---*---*---*---*---*---*---*
    -2                           *---*---*---*---*---*---*---*---*---*---*---*---*
    -3                                        *---*---*---*---*---*---*---*---*---*--
    -4                                                     *---*---*---*---*---*---*-
    -5                                                                  *---*---*---*
    -
    - -

    -@math{S=13}, @math{J=4}, @math{start=36}: - -

    - -
    -                                      start
    -                                      |
    -0 *------------*------------*------------*
    -1     *------------*------------*------------*
    -2         *------------*------------*------------*
    -3             *------------*------------*------------*
    -4                 *------------*------------*------------*
    -5                     *------------*------------*------------*
    -6                         *------------*------------*------------*
    -7                             *------------*------------*------------*
    -8                                 *------------*------------*------------*
    -9                                     *------------*------------*------------*
    -10                                        *------------*------------*-----------
    -11                                            *------------*------------*-------
    -12                                                *------------*------------*---
    -13                                                    *------------*------------
    -14                                                        *------------*--------
    -15                                                            *------------*----
    -16                                                                *------------*
    -17                                                                    *---------
    -18                                                                        *-----
    -19                                                                            *-
    -
    - -

    -@math{S=8}, @math{J=5}, @math{start=28}: - -

    - -
    -                              start
    -                              |
    -0 *-------*-------*-------*-------*
    -1      *-------*-------*-------*-------*
    -2           *-------*-------*-------*-------*
    -3                *-------*-------*-------*-------*
    -4                     *-------*-------*-------*-------*
    -5                          *-------*-------*-------*-------*
    -6                               *-------*-------*-------*-------*
    -7                                    *-------*-------*-------*-------*
    -8                                         *-------*-------*-------*-------*
    -9                                              *-------*-------*-------*-------*
    -10                                                  *-------*-------*-------*---
    -11                                                       *-------*-------*------
    -12                                                            *-------*-------*-
    -13                                                                 *-------*----
    -14                                                                      *-------
    -15                                                                           *--
    -
    - -

    -@math{S=9}, @math{J=5}, @math{start=32}: - -

    - -
    -                                  start
    -                                  |
    -0 *--------*--------*--------*--------*
    -1      *--------*--------*--------*--------*
    -2           *--------*--------*--------*--------*
    -3                *--------*--------*--------*--------*
    -4                     *--------*--------*--------*--------*
    -5                          *--------*--------*--------*--------*
    -6                               *--------*--------*--------*--------*
    -7                                    *--------*--------*--------*--------*
    -8                                         *--------*--------*--------*--------*
    -9                                              *--------*--------*--------*-----
    -10                                                  *--------*--------*--------*
    -11                                                       *--------*--------*----
    -12                                                            *--------*--------
    -13                                                                 *--------*---
    -14                                                                      *-------
    -15                                                                           *--
    -
    - -

    -@math{S=6}, @math{J=7}, @math{start=30}: - -

    - -
    -                                start
    -                                |
    -0 *-----*-----*-----*-----*-----*-----*
    -1        *-----*-----*-----*-----*-----*-----*
    -2               *-----*-----*-----*-----*-----*-----*
    -3                      *-----*-----*-----*-----*-----*-----*
    -4                             *-----*-----*-----*-----*-----*-----*
    -5                                    *-----*-----*-----*-----*-----*-----*
    -6                                           *-----*-----*-----*-----*-----*-----
    -7                                                  *-----*-----*-----*-----*----
    -8                                                         *-----*-----*-----*---
    -9                                                                *-----*-----*--
    -10                                                                      *-----*-
    -11                                                                             *
    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_31.html b/doc/manual-html/gimpprint_31.html deleted file mode 100644 index c4c1a4b..0000000 --- a/doc/manual-html/gimpprint_31.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - -GIMP-Print - Weaving collisions - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.2.3 Weaving collisions

    -

    - - - -

    -

    -This perfect weave is not possible in all cases. Let's look at another -example: - -

    -

    -@math{S=6}, @math{J=4}: - -

    - -
    -0 *-----*-----*-----*
    -1     *-----*-----*-----*
    -2         *-----*-----*-----*
    -3             *-----*-----*-----*
    -4             ^   *-^---*-----*-----*
    -5             |   ^ | *-^---*-----*-----*
    -              OUCH!   ^ |   ^
    -                      |     |
    -
    - -

    -Here we have a collision. Some lines printed in later passes overprint -lines printed by earlier passes. We can see why by considering which -row number is printed by a given jet number @math{j} (numbered from 0) -of a given pass, @math{p}: - -

    - -
    -@math{row(p, j) = p*J + j*S}
    -
    - -

    -Because @math{J=4} and @math{S=6} have a common factor of 2, jet 2 of -pass 0 prints the same row as jet 0 of pass 3: - -

    - -
    -@math{row(0, 2) = 0*4 + 2*6 = 12}
    -@math{row(3, 0) = 3*4 + 0*6 = 12}
    -
    - -

    -In fact, with this particular weave pattern, jets 0 and 1 of pass -@math{p+3} always overprint jets 2 and 3 of pass @math{p}. We'll -represent overprinting rows by a `^' in our diagrams, and correct -rows by `*': - -

    -

    -@math{S=6} @math{J=4}: - -

    - -
    -0 *-----*-----*-----*
    -1     *-----*-----*-----*
    -2         *-----*-----*-----*
    -3             ^-----^-----*-----*
    -4                 ^-----^-----*-----*
    -5                     ^-----^-----*-----*
    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_32.html b/doc/manual-html/gimpprint_32.html deleted file mode 100644 index 3a118f5..0000000 --- a/doc/manual-html/gimpprint_32.html +++ /dev/null @@ -1,723 +0,0 @@ - - - - -GIMP-Print - What is perfect weaving? - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.2.4 What makes a "perfect" weave?

    -

    - - -

    -

    -So what causes the perfect weave cases to be perfect, and the other -cases not to be? In all the perfect cases above, @math{S} and @math{J} -are relatively prime (i.e. their greatest common divisor (GCD) is 1). -As we mentioned above, @math{S=6} and @math{J=4} have a common factor, -which causes the overprinting. Where @math{S} and @math{J} have a GCD -of 1, they have no common factor other than 1 and, as a result, no -overprinting occurs. If @math{S} and @math{J} are not relatively prime, -their common factor will cause overprinting. - -

    -

    -We can work out the greatest common divisor of a pair of natural numbers -using Euler's algorithm: - -

    - -
      -
    • Start with the two numbers: (e.g.) 9, 24 - -
    • Swap them if necessary so that the larger one comes first: 24, 9 - -
    • Subtract the second number from the first: 15, 9 - -
    • Repeat until the first number becomes smaller: 6, 9 - -
    • Swap the numbers again, so the larger one comes first: 9, 6 - -
    • Subtract again: 3, 6 - -
    • Swap: 6, 3 - -
    • Subtract: 3, 3 - -
    • And again: 0, 3 - -
    • When one of the numbers becomes 0, the other number is the GCD of the two numbers you started with. - -
    - -

    -These repeated subtractions can be done with C's `%' operator, so we -can write this in C as follows: - -

    - -
    -unsigned int
    -gcd(unsigned int x, unsigned int y)
    -{
    -    if (y == 0)
    -        return x;
    -    while (x != 0) {
    -        if (y > x)
    -            swap (&x, &y);
    -        x %= y;
    -    }
    -    return y;
    -}
    -
    - -

    -`gcd(S,J)' will feature quite prominently in our weaving algorithm. - -

    -

    -If @math{0 <= j < J}, there should only be a single pair @math{(p, j)} -for any given row number. If @math{S} and @math{J} are not relatively -prime, this assumption breaks down. (For conciseness, let -@math{G=GCD(S,J)}.) - -

    -

    -@math{S=8}, @math{J=6}, @math{G=2}: - -

    - -
    -0 *-------*-------*-------*-------*-------*
    -1       *-------*-------*-------*-------*-------*
    -2             *-------*-------*-------*-------*-------*
    -3                   *-------*-------*-------*-------*-------*
    -4                         ^-------^-------^-------*-------*-------*
    -5                               ^-------^-------^-------*-------*-------*
    -
    - -

    -In this case, jets 0, 1 and 2 of pass @math{p+4} collide with jets 3, 4 -and 5 of pass @math{p}. - -

    -

    -How can we calculate these numbers? Suppose we were to print using -fewer jets, say @math{J/G} jets. The greatest common divisor of -@math{J/G} and @math{S} is 1, enabling a perfect weave. But to get a -perfect weave, we also have to advance the paper by a factor of @math{G} -less: - -

    - -
    -0 *-------*-------*       -       -       -
    -1    *-------*-------*       -       -       -
    -2       *-------*-------*       -       -       -
    -3          *-------*-------*       -       -       -
    -4             *-------*-------*       -       -       -
    -5                *-------*-------*       -       -       -
    -
    - -

    -If we left the paper advance alone, we'd get a sparse weave; only one -row can be printed every @math{G} rows: - -

    - -
    -0 *-------*-------*       -       -       -
    -1       *-------*-------*       -       -       -
    -2             *-------*-------*       -       -       -
    -3                   *-------*-------*       -       -       -
    -4                         *-------*-------*       -       -       -
    -5                               *-------*-------*       -       -       -
    -               ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
    -              These rows need filling in.
    -
    - -

    -The rows that would have been printed by the jets we've now omitted -(shown as `-') are printed by other jets on later passes. - -

    -

    -Let's analyse this. Consider how a pass @math{p} could collide with -pass 0. Pass @math{p} starts at offset @math{p*J}. Pass 0 prints at -rows which are multiples of @math{S}. If @math{p*J} is exactly -divisible by @math{S}, a collision has occurred, unless @math{p*J >= -J*S} (which will happen when we finish a pass block). - -

    -

    -So, we want to find @math{p} and @math{q} such that @math{p*J=q*S} and -@math{p} is minimised. Then @math{p} is the number of rows before a -collision, and @math{q} is the number of jets in pass 0 which are not -involved in the collision. To do this, we find the lowest common -multiple of @math{J} and @math{S}, which is @math{L=J*S/G}. @math{L/J} -is the number of rows before a collision, and @math{L/S} is the number -of jets in the first pass not involved in the collision. - -

    -

    -Thus, we see that the first @math{J/G} rows printed by a given pass are -not overprinted by any later pass. However, the rest of the rows -printed by pass @math{p} are overprinted by the first -@math{J-(J/G)} jets of pass @math{p+(S/G)}. We will use @math{C} -to refer to @math{S/G}, the number of rows after which a collision -occurs. - -

    -

    -Another example: - -

    -

    -@math{S=6}, @math{J=9}, @math{G=3}, @math{C=S/G=2}: - -

    - -
    -0 *-----*-----*-----*-----*-----*-----*-----*-----*
    -1          *-----*-----*-----*-----*-----*-----*-----*-----*
    -2                   ^-----^-----^-----^-----^-----^-----*-----*-----*
    -3                            ^-----^-----^-----^-----^-----^-----*-----*-----*
    -4                                     ^-----^-----^-----^-----^-----^-----*-----
    -5                                              ^-----^-----^-----^-----^-----^--
    -         ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
    -              These rows need filling in.
    -
    - -

    -In this case, the first @math{J-(J/G) = 9-9/3 = 6} jets of pass -@math{p+(6/3)=p+2} collide with the last 6 jets of pass @math{p}. Only -one row in every @math{G=2} rows is printed by this weave. - -

    -

    -@math{S=9}, @math{J=6}, @math{G=3}, @math{C=3}: - -

    - -
    -0 *--------*--------*--------*--------*--------*
    -1       *--------*--------*--------*--------*--------*
    -2             *--------*--------*--------*--------*--------*
    -3                   ^--------^--------^--------^--------*--------*
    -4                         ^--------^--------^--------^--------*--------*
    -5                               ^--------^--------^--------^--------*--------*
    -
    - -

    -Here, the first @math{J-(J/G) = 6-6/3 = 4} jets of pass -@math{p+(9/3)=p+3} collide with the last 4 jets of pass @math{p}. - -

    -

    -Note that, in these overprinting cases, only rows divisible by @math{G} -are ever printed. The other rows, those not divisible by @math{G}, are -not touched by this weave. - -

    -

    -We can modify our weave pattern to avoid overprinting any rows and -simultaneously fill in the missing rows. Instead of using @math{J} -alone to determine the start of each pass from the previous pass, we -adjust the starting position of some passes. As mentioned before, we -will divide the page into pass blocks, with @math{S} passes in each -block. This ensures that the first jet of the first pass in a block -prints the row which the @math{J}th jet of the first pass of the -previous block would have printed, if the print head had one extra jet. - -

    -

    -Looking back at an example of a perfect weave, we can divide it into -pass blocks: - -

    -

    -@math{S=7}, @math{J=2}, @math{G=1}: - -

    - -
    -                imaginary extra jet
    -                |
    -0 *------*      *      <--start of pass block 0
    -1   *------*    |
    -2     *------*  |
    -3       *------*|
    -4         *-----|*
    -5           *---|--*
    -6             *-|----*
    -                |
    -7               *------*  <--start of pass block 1
    -8                 *------*
    -9                   *------*
    -
    - -

    -We can now calculate the start of a given pass by reference to its pass -block. The first pass of pass block @math{b} always starts at row -@math{(b*S*J)}. The start row of each of the other passes in the block -are calculated using offsets from this row. - -

    -

    -For the example above, there are 7 passes in each pass block, and their -offsets are 0, 2, 4, 6, 8, 10 and 12. The next pass block is offset -@math{S*J=14} rows from the start of the current pass block. - -

    -

    -The simplest way to modify the "perfect" weave pattern to give a -correct weave in cases where @math{G!=1} is to simply change any offsets -which would result in a collision, until the collision disappears. -Every printed row in the weave, as we have shown it up to now, is -separated from each of its neighbouring printed rows by @math{G} blank -rows. We will add an extra offset to each colliding pass in such a way -that we push the pass onto these otherwise blank rows. - -

    -

    -We have seen that, unless @math{G=1}, the plain weave pattern results in -each pass colliding with the pass @math{S/G} passes before. We will now -subdivide our pass block into subblocks, each consisting of @math{B=S/G} -passes. There are therefore @math{G} subblocks in a pass block. - -

    -

    -For each subblock, the passes in that subblock have a constant offset -added to them. The offset is different for each subblock in a block. -There are many ways we can choose the offsets, but the simplest is to -make the offset equal to the subblock number (starting from 0). - -

    -

    -Thus, the passes in the first subblock in each pass block remain at the -offsets we've already calculated from @math{J}. The passes in the -second subblock each have 1 added to their offset, the passes in the -third subblock have 2 added, and so on. Thus, the offset of pass -@math{p} (numbered relative to the start of its pass block) is @math{p*J -+ floor(p/B)}. - -

    -

    -This gives us a weave pattern looking like this: - -

    -

    -@math{S=6}, @math{J=9}, @math{G=3}, @math{B=2}: - -

    - -
    -0 *-----*-----*-----*-----*-----*-----*-----*-----*
    -1 ^        *-----*-----*-----*-----*-----*-----*-----*-----*
    -2 |              +-> *-----*-----*-----*-----*-----*-----*-----*-----*
    -3 |              |            *-----*-----*-----*-----*-----*-----*-----*-----*
    -4 |              |                  +-> *-----*-----*-----*-----*-----*-----*---
    -5 |              |                  |            *-----*-----*-----*-----*-----*
    -6 |              |                  |               +-> *-----*-----*-----*-----
    -7 |              |                  |               |            *-----*-----*--
    -  |              |                  |             start of pass block 1
    -  |              |                  |             (offset returns to 0)
    -  |              |                  start of subblock 2 (offset 2 rows)
    -  |              start of subblock 1 (following passes offset by 1 row)
    -  start of passblock 0, subblock 0 (pass start calculated as p*J)
    -
    - -

    -@math{S=9}, @math{J=6}, @math{G=3}, @math{B=3}: - -

    - -
    -0 *--------*--------*--------*--------*--------*
    -1       *--------*--------*--------*--------*--------*
    -2             *--------*--------*--------*--------*--------*
    -3                    *--------*--------*--------*--------*--------*
    -4                          *--------*--------*--------*--------*--------*
    -5                                *--------*--------*--------*--------*--------*
    -6                                       *--------*--------*--------*--------*---
    -7                                             *--------*--------*--------*------
    -8                                                   *--------*--------*--------*
    -9                                                       *--------*--------*-----
    -10                                                  \---/     *--------*--------
    -11                                               small offset       *--------*--
    -12                                                                         *----
    -
    - -

    -This method of choosing offsets for subblocks can result in an occasional -small offset (as shown above) between one pass and the next, particularly -when @math{G} is large compared to @math{J}. For example: - -

    -

    -@math{S=8}, @math{J=4}, @math{G=4}, @math{B=2}: - -

    - -
    -0 *-------*-------*-------*
    -1     *-------*-------*-------*
    -2          *-------*-------*-------*
    -3              *-------*-------*-------*
    -4                   *-------*-------*-------*
    -5                       *-------*-------*-------*
    -6                            *-------*-------*-------*
    -7                                *-------*-------*-------*
    -8                                 *-------*-------*-------*
    -9                                \/   *-------*-------*-------*
    -                              very small offset!
    -
    - -

    -We can plot the offset against the subblock number as follows: - -

    - -
    -subblock number
    -| offset
    -| |
    -| 0123
    -0 *
    -1  *
    -2   *
    -3    *
    -0 *
    -1  *
    -2   *
    -3    *
    -
    - -

    -The discontinuity in this plot results in the small offset between -passes. - -

    -

    -As we said at the beginning, we want the offsets from each pass to the -next to be as similar as possible. We can fix this by calculating the -offset for a given subblock b as follows: - -

    - -
    -  offset(b) = 2*b             , if b < ceiling(G/2)
    -            = 2*(G-b)-1       , otherwise
    -
    - -

    -We can visualise this as follows, for @math{G=10}: - -

    - -
    -  0123456789
    -0 *
    -1   *
    -2     *
    -3       *
    -4         *
    -5          *
    -6        *
    -7      *
    -8    *
    -9  *
    -0 *
    -1   *
    -2     *
    -3       *
    -4         *
    -5          *
    -6        *
    -7      *
    -8    *
    -9  *
    -
    - -

    -and for @math{G=11}: - -

    - -
    -             1
    -   01234567890
    - 0 *
    - 1   *
    - 2     *
    - 3       *
    - 4         *
    - 5           *
    - 6          *
    - 7        *
    - 8      *
    - 9    *
    -10  *
    - 0 *
    - 1   *
    - 2     *
    - 3       *
    - 4         *
    - 5           *
    - 6          *
    - 7        *
    - 8      *
    - 9    *
    -10  *
    -
    - -

    -This gives a weave looking like this: - -

    -

    -@math{S=12}, @math{J=6}, @math{G=6}, @math{B=2}: - -

    - -
    -0 *-----------*-----------*-----------*-----------*-----------*
    -1       *-----------*-----------*-----------*-----------*-----------*
    -2               *-----------*-----------*-----------*-----------*-----------*
    -3                     *-----------*-----------*-----------*-----------*---------
    -4                             *-----------*-----------*-----------*-----------*-
    -5                                   *-----------*-----------*-----------*-------
    -6                                          *-----------*-----------*-----------*
    -7                                                *-----------*-----------*------
    -8                                                    *-----------*-----------*--
    -9                                                          *-----------*--------
    -10                                                             *-----------*----
    -11                                                                   *----------
    -12                                                                        *-----
    -
    - -

    -This method ensures that the offset between passes is always in the range -@math{[J-2,J+2]}. - -

    -

    -(This might seem odd, but it occurs to me that a good weave pattern -might also make a good score for bell ringers. When church bells are -rung, a list of "changes" are used. For example, if 8 bells are being -used, they will, at first, be rung in order: 12345678. If the first -change is for bells 5 and 6, the bells will then be rung in the order -12346578. If the second change is 1 and 2, the next notes are 21346578. -After a long list of changes, the order the bells are rung in can become -quite complex. - -

    -

    -For a group of bell-ringers to change the order of the notes, they must -each either delay their bell's next ring, hasten it, or keep it the same -as the time it takes to ring all the bells once. The length of time -between each ring of a given bell can only be changed a little each -time, though; with an ink-jet weave pattern, we want the same to apply -to the distance between passes.) - -

    -

    -Finally, knowing the number of jets @math{J} and their separation -@math{S}, we can calculate the starting row of any given pass @math{p} -as follows: - -

    - -
    -passesperblock = S
    -passblock = floor(p / passesperblock)
    -offsetinpassblock = p - passblock * passesperblock
    -subblocksperblock = gcd(S, J)
    -passespersubblock = S / subblocksperblock
    -subpassblock = floor(offsetinpassblock / passespersubblock)
    -if subpassblock < ceiling(subblocksperblock/2)
    -    subblockoffset = 2*subpassblock
    -else
    -    subblockoffset = 2*(subblocksperblock-subpassblock)-1
    -startingrow = passblock * S * J + offsetinpassblock * J + subblockoffset
    -
    - -

    -We can simplify this down to the following: - -

    - -
    -subblocksperblock = gcd(S, J)
    -subpassblock = floor((p % S) * subblocksperblock / S)
    -if subpassblock * 2 < subblocksperblock
    -    subblockoffset = 2*subpassblock
    -else
    -    subblockoffset = 2*(subblocksperblock-subpassblock)-1
    -startingrow = p * J + subblockoffset
    -
    - -

    -So the row number of jet @math{j} of pass @math{p} is - -

    - -
    -subblocksperblock = gcd(S, J)
    -
    -subblockoffset(p)
    -    = 2*subpassblock       , if subpassblock * 2 < subblocksperblock
    -    = 2*(subblocksperblock-subpassblock)-1      , otherwise
    -      where
    -      subpassblock = floor((p % S) * subblocksperblock / S)
    -
    -row(j, p) = p * J + subblockoffset(p) + j * S
    -
    - -

    -Together with the inequality @math{0 <= j < J}, we can use this -definition in reverse to calculate the pass number containing a given -row, @math{r}. Working out the inverse definition involves a little -guesswork, but one possible result is as follows. Given a row, -@math{r}, which is known to be the first row of a pass, we can calculate -the pass number as follows: - -

    - -
    -subblocksperblock = gcd(S, J)
    -subblockoffset = r % subblocksperblock
    -pass = (r - subblockoffset) / J
    -
    - -

    -If @math{G==1}, we can determine the pass number with this algorithm: - -

    - -
    -offset = r % J
    -pass = (r - offset) / J
    -while (offset % S != 0)
    -{
    -  pass--
    -  offset += J
    -}
    -jet = offset / S
    -
    - -

    -Generalising, we come up with this algorithm. Given @math{r}, @math{S} -and @math{J}: - -

    - -
    -G = gcd(S, J)
    -passespersubblock = S/G
    -subblockoffset = r % G
    -subpassblock = subblockoffset / 2  , if subblockoffset % 2 == 0
    -             = G - (subblockoffset+1)/2    , otherwise
    -baserow = r - subblockoffset - (subpassblock * passespersubblock * J)
    -offset = baserow % J
    -pass = (baserow - offset) / J
    -while (offset % S != 0)
    -{
    -  offset += J
    -  pass -= 1
    -}
    -subblockretreat = floor(pass / passespersubblock) % G
    -pass -= subblockretreat * passespersubblock
    -pass += subpassblock * passespersubblock
    -jet = (r - subblockoffset - pass * J) / S
    -
    - -

    -Let's look at some examples of imperfect but correct weave patterns: - -

    -

    -@math{S=6}, @math{J=4}, @math{GCD=2}, -
    passesperblock=@math{S}=6, -
    passespersubblock=@math{S/G}=6/2=3: - -

    - -
    -0 *-----*-----*-----*
    -1     *-----*-----*-----*
    -2         *-----*-----*-----*
    -3              *-----*-----*-----*
    -4                  *-----*-----*-----*
    -5                      *-----*-----*-----*
    -6                         *-----*-----*-----*
    -7                             *-----*-----*-----*
    -8                                 *-----*-----*-----*
    -9                                      *-----*-----*-----*
    -10                                         *-----*-----*-----*
    -11                                             *-----*-----*-----*
    -12                                                *-----*-----*-----*
    -13                                                    *-----*-----*-----*
    -14                                                        *-----*-----*-----*
    -15                                                             *-----*-----*----
    -16                                                                 *-----*-----*
    -17                                                                     *-----*--
    -18                                                                        *-----
    -19                                                                            *-
    -
    - -

    -@math{S=8}, @math{J=6}, @math{G=2}, -
    passesperblock=@math{S}=8, -
    passespersubblock=@math{S/G}=8/2=4: - -

    - -
    -0 *-------*-------*-------*-------*-------*
    -1       *-------*-------*-------*-------*-------*
    -2             *-------*-------*-------*-------*-------*
    -3                   *-------*-------*-------*-------*-------*
    -4                          *-------*-------*-------*-------*-------*
    -5                                *-------*-------*-------*-------*-------*
    -6                                      *-------*-------*-------*-------*-------*
    -7                                            *-------*-------*-------*-------*--
    -8                                                 *-------*-------*-------*-----
    -9                                                       *-------*-------*-------
    -10                                                            *-------*-------*-
    -11                                                                  *-------*---
    -12                                                                         *----
    -
    - -

    -@math{S=6}, @math{J=12}, @math{G=6}, -
    passesperblock=@math{S}=6, -
    passespersubblock=@math{S/G}=6/6=1: - -

    - -
    -0 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*
    -1               *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*---
    -2                             *-----*-----*-----*-----*-----*-----*-----*-----*-
    -3                                          *-----*-----*-----*-----*-----*-----*
    -4                                                    *-----*-----*-----*-----*--
    -5                                                              *-----*-----*----
    -6                                                                         *-----
    -
    - -

    -We have now solved the basic weaving problem. There are two further -refinements we need to consider: oversampling, and filling in the -missing rows at the start of the weave. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_33.html b/doc/manual-html/gimpprint_33.html deleted file mode 100644 index edf4627..0000000 --- a/doc/manual-html/gimpprint_33.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - -GIMP-Print - Oversampling - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    B.2.5 Oversampling

    -

    - - -

    -

    -By oversampling, we mean printing on the same row more than once. -There are two reasons for oversampling: to increase the horizontal -resolution of the printout and to reduce banding. - -

    -

    -Oversampling to increase horizontal resolution is necessary because, -although the printer might be able to position an ink drop to, for -example, 1/1440" horizontally, it may not be able to lay down two such -drops 1/1440" apart. If it can print two drops 1/720" apart, 2x -oversampling will be necessary to get a 1/1440" horizontal resolution. -If it can only print two drops 1/360" apart, 4x oversampling will be -necessary for a 1/1440" horizontal resolution. The printer enforces -this "drop spacing" by only accepting raster passes with a horizontal -resolution matching the spacing with which it can print dots, so we -must print passes at different horizontal positions if we are to -obtain a higher horizontal resolution. (Another reason it does this -may be to reduce the amount of memory needed in the printer.) - -

    -

    -Oversampling can also be done to decrease the banding apparent in an -image. By splitting a row into two or more sets of dots ("lines") and -printing each line on the same row, but with a different nozzle for -each line, we can get a smoother print. - -

    -

    -To quantify these two kinds of oversampling, we'll introduce two new -constants: @math{H} shows how many different horizontal offsets we want -to print at (the "horizontal oversampling") while @math{O} shows how -many times we want to print each row, over and above the number of times -necessary for horizontal oversampling (the "extra oversampling"). - -

    -

    -It is necessary for all the lines printed by a given pass to have the -same horizontal offset, but there need not be any relation between -them in terms of extra oversampling. For the moment, however, we will -treat all oversampling as potentially requiring this alignment; all -lines in one pass must be derived from the original row data in the -same way. Thus, we'll assume @math{O=1} for now. - -

    -

    -So, how do we do this oversampling? In fact, it can be done easily: -advance the paper by a factor of @math{H} less between each pass. We'll -define a new variable, @math{A}, to show how much we advance the paper -between passes. Previously, we'd have defined @math{A=J}; we now let -@math{A=J/H}. This also affects our pass blocks. Printing one pass -block used to involve advancing the paper @math{S*J} rows; it now -advances the paper @math{S*J/H} rows. We therefore name a group of -@math{H} pass blocks a "band". Printing one band involves advancing -the paper @math{S*J} rows, as a pass block did before. - -

    -

    -To keep our weave pattern working correctly, so that overprinting does -not occur within a pass block, we also have to redefine @math{G} as -@math{GCD(S,A)}. Here's an example of an oversampled weave pattern: - -

    -

    -@math{S=4}, @math{J=10}, @math{H=2}, @math{A=J/H=10/2=5}, -@math{G=GCD(4,5)=1}, -
    passesperblock=@math{S}=4, -
    passespersubblock=@math{S/G}=4/1=4: - -

    - -
    -0 *---*---*---*---*---*---*---*---*---*
    -1      *---*---*---*---*---*---*---*---*---*
    -2           *---*---*---*---*---*---*---*---*---*
    -3                *---*---*---*---*---*---*---*---*---*
    -4                     *---*---*---*---*---*---*---*---*---*
    -5                          *---*---*---*---*---*---*---*---*---*
    -6                               *---*---*---*---*---*---*---*---*---*
    -7                                    *---*---*---*---*---*---*---*---*---*
    -8                                         *---*---*---*---*---*---*---*---*---*
    -9                                              *---*---*---*---*---*---*---*---*
    -10                                                  *---*---*---*---*---*---*---
    -11                                                       *---*---*---*---*---*--
    -12                                                            *---*---*---*---*-
    -13                                                                 *---*---*---*
    -14                                                                      *---*---
    -15                                                                           *--
    -
    - -

    -Now we have to determine which line is printed by each jet on each -pass. If we number each line generated as we split up a row, we can -use these numbers. We'll number the lines in our diagram by replacing -the `*'s with integers in the range [0...@math{H-1}]. - -

    -

    -Overprinting occurs once per pass block, so we can simply print pass -block 0 with line 0, pass block 1 with line 1, pass block 2 with line -2, etc, wrapping to 0 when we've run out of lines: - -

    - -
    -0 0--0---0--0---0--0---0--0---0--0
    -1      0--0---0--0---0--0---0--0---0--0
    -2           0--0---0--0---0--0---0--0---0--0
    -3                0--0---0--0---0--0---0--0---0--0
    -4                     1--1---1--1---1--1---1--1---1--1
    -5                          1--1---1--1---1--1---1--1---1--1
    -6                               1--1---1--1---1--1---1--1---1--1
    -7                                    1--1---1--1---1--1---1--1---1--1
    -8                                         0--0---0--0---0--0---0--0---0--0
    -9                                              0--0---0--0---0--0---0--0---0
    -10                                                  0--0---0--0---0--0---0---
    -11                                                       0--0---0--0---0--0--
    -12                                                            1--1---1--1---1-
    -13                                                                 1--1---1--1
    -14                                                                      1--1---
    -15                                                                           1--
    -
    - -

    -@math{S=4}, @math{J=12}, @math{H=2}, @math{A=J/H=12/2=6}, @math{G=GCD(4,6)=2}, -
    passesperblock=@math{S}=4, -
    passespersubblock=@math{S/G}=4/2=2: - -

    - -
    -0 0--0---0--0---0--0---0--0---0--0---0--0
    -1       0--0---0--0---0--0---0--0---0--0---0--0
    -2              0--0---0--0---0--0---0--0---0--0---0--0
    -3                    0--0---0--0---0--0---0--0---0--0---0--0
    -4                         1--1---1--1---1--1---1--1---1--1---1--1
    -5                               1--1---1--1---1--1---1--1---1--1---1--1
    -6                                      1--1---1--1---1--1---1--1---1--1---1
    -7                                            1--1---1--1---1--1---1--1---1--
    -8                                                 0--0---0--0---0--0---0--0-
    -9                                                       0--0---0--0---0--0---
    -10                                                             0--0---0--0---0
    -11                                                                   0--0---0--
    -12                                                                        1--1-
    -
    - -

    -But what do we do if @math{J} is not an exact multiple of @math{H}? -This is a difficult problem, which I struggled with for quite a few days -before giving in and taking the easy (but less elegant) way out. The -easy solution is to round @math{J/H} down, then add on the accumulated -error at the end of each band. - -

    -

    -@math{S=4}, @math{J=11}, @math{H=2} @math{A=floor(J/H)=floor(11/2)=5}, @math{G=GCD(4,5)}, -
    passesperblock=@math{S}=4, -
    passespersubblock=@math{S/G}=4/1=4 - -

    - -
    -Band 0:
    -0 0--0---0--0---0--0---0--0---0--0---0
    -1      0--0---0--0---0--0---0--0---0--0---0
    -2           0--0---0--0---0--0---0--0---0--0---0
    -3                0--0---0--0---0--0---0--0---0--0---0
    -4                     1--1---1--1---1--1---1--1---1--1---1
    -5                          1--1---1--1---1--1---1--1---1--1---1
    -6                               1--1---1--1---1--1---1--1---1--1---1
    -7                                    1--1---1--1---1--1---1--1---1--1---
    -
    -Band 1:
    -8 |                                           0--0---0--0---0--0---0--0---0-
    -9  \-----------------------------------------/     0--0---0--0---0--0---0--0
    -10                   S*J rows                           0--0---0--0---0--0---
    -11                                                           0--0---0--0---0--
    -12                                                                1--1---1--1-
    -13                                                                     1--1---1
    -14                                                                          1---
    -
    - -

    -We can calculate the starting row and subpass number of a given pass -in this scheme as follows: - -

    - -
    -A = floor(J / H)
    -subblocksperblock = gcd(S, A)
    -subpassblock = floor((p % S) * subblocksperblock / S)
    -if subpassblock * 2 < subblocksperblock
    -    subblockoffset = 2*subpassblock
    -else
    -    subblockoffset = 2*(subblocksperblock-subpassblock)-1
    -band = floor(P / (S * H))
    -passinband = P % (S * H)
    -startingrow = band * S * J + passinband * A + subblockoffset
    -subpass = passinband / S
    -
    - -

    -So the row number of jet @math{j} of pass @math{p} is - -

    - -
    -A = floor(J / H)
    -subblocksperblock = gcd(S, A)
    -
    -subblockoffset(p)
    -    = 2*subpassblock       , if subpassblock * 2 < subblocksperblock
    -    = 2*(subblocksperblock-subpassblock)-1      , otherwise
    -      where
    -      subpassblock = floor((p % S) * subblocksperblock / S)
    -
    -band(p) = floor(p / (S * H))
    -passinband(p) = p % (S * H)
    -
    -row(j, p) = band(p) * S * J + passinband(p) * A + subblockoffset(p) + j * S
    -row(j, p) = p * J + subblockoffset(p) + j * S
    -
    - -

    -To be continued@enddots{} -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_34.html b/doc/manual-html/gimpprint_34.html deleted file mode 100644 index 95372ef..0000000 --- a/doc/manual-html/gimpprint_34.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - -GIMP-Print - ESC/P2 - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    C ESC/P2

    -

    - - -

    - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_35.html b/doc/manual-html/gimpprint_35.html deleted file mode 100644 index 38adfb3..0000000 --- a/doc/manual-html/gimpprint_35.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - -GIMP-Print - ESC/P2 Introduction - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    C.1 Introduction to ESC/P2

    -

    - - -

    -

    -This is a description of the ESC/P2 raster commands used by the -gimp-print plugin and Ghostscript driver, which is a subset of the -complete command set. The full documents are found on -@url{http://www.ercipd.com/isv/edr_docs.htm}. Note that these are -not always correct, and are certainly not complete. - -

    -

    -All ESCP/2 raster commands begin with the `ESC' character (1b hex), -followed by either one or two command characters and arguments where -applicable. Older commands generally have one command character. Newer -commands usually have a `(' (left parenthesis) followed by a -command character and a byte count for the arguments that follow. The -byte count is a 16-bit (2 byte) binary integer, in little endian order. - -

    -

    -All arguments listed here are of the form `name[bytes]' where -`[bytes]' is the number of bytes that comprise the argument. The -arguments themselves are usually one, two, or four byte integers, always -little endian (the least significant bits come first). Presumably this -is to match Intel processors. - -

    -

    -In some cases, the same command sequence identifies different versions -of the same command, depending upon the number of bytes of arguments. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_36.html b/doc/manual-html/gimpprint_36.html deleted file mode 100644 index d7e1677..0000000 --- a/doc/manual-html/gimpprint_36.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - -GIMP-Print - ESC/P2 Standard Commands - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    C.2 Standard commands

    - -

    -

    -
    ESC/P2 command: ESC @ -
    -Reset the printer. Discards any output, ejects the existing page, -returns all settings to their default. Always use this before printing -a page. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (G BC=1 ON1 -
    -Turn on graphics mode. ON should be `1' (turn on graphics -mode). -
    - -

    -

    -

    -
    ESC/P2 command: ESC (U BC=1 UNIT1 -
    -Set basic unit of measurement used by printer. This is expressed in -multiples of 1/3600". At 720 DPI, UNIT is `5'; at 360 DPI, -UNIT is `10'. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (U BC=5 PAGEUNITS1 VUNIT1 HUNIT1 BASEUNIT2 -
    -Set basic units of measurement used by the printer. PAGEUNIT is -the unit of page measurement (for commands that set page dimensions and -the like). VUNIT is the unit of vertical measurement (for -vertical movement commands). HUNIT is the unit of horizontal -movement (for horizontal positioning commands). All of these units are -expressed in BASEUNIT, which is in reciprocal inches. Typically, -BASEUNIT is `1440'. In 720 DPI mode, PAGEUNIT, -VUNIT, and HUNIT are all `2'; in 1440x720 DPI mode, -PAGEUNIT and VUNIT are normally set to `2'; HUNIT -is set to `1'. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (K BC=2 ZERO1 GRAYMODE1 -
    -Set color or grayscale mode, on printers supporting an explicit -grayscale mode. These printers can be identified because they are -advertised as having more black nozzles than nozzles of individual -colors. Setting grayscale mode allows use of these extra nozzles for -faster printing. GRAYMODE should be `0' or `2' for -color, `1' for grayscale. ZERO should always be `0'. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (i BC=1 MICROWEAVE1 -
    -If MICROWEAVE is `1', use microweave mode. On older -printers, this is used to turn on microweave; on newer printers, it -prints one row at a time. All printers support this mode. It should -only be used at 720 (or 1440x720) DPI. The Epson Stylus Pro series -indicates additional modes: - -

    -
    - -
    `2' -
    -"Full-overlap" -
    `3' -
    -"Four-pass" -
    `4' -
    -"Full-overlap 2" -
    - -

    -Any of these commands can be used with the high four bits set to either -`3' or `0'. -

    - -

    -

    -

    -
    ESC/P2 command: ESC U DIRECTION1 -
    -If DIRECTION is `1', print unidirectionally; if `0', -print bidirectionally. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (s BC=1 SPEED1 -
    -On some older printers, this controls the print head speed. SPEED -of `2' is 10 inches/sec; SPEED of `0' or 1 is 20. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (e BC=2 ZERO1 DOTSIZE1 -
    -Choose print dotsize. DOTSIZE can take on various values, -depending upon the printer. Almost all printers support `0' and -`2'. Variable dot size printers allow a value of 16. Other -than the value of 16, this appears to be ignored at resolutions of -720 DPI and above. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (C BC=2 PAGELENGTH2 -
    -
    ESC/P2 command: ESC (C BC=4 PAGELENGTH4 -
    -Set the length of the page in "pageunits" (see `ESC (U' above). -The second form of the command allows setting of longer page lengths on -new printers (these happen to be the printers that support variable dot -size). -
    - -

    -

    -

    -
    ESC/P2 command: ESC (c BC=4 TOP2 LENGTH2 -
    -
    ESC/P2 command: ESC (c BC=8 TOP4 LENGTH4 -
    -Set the vertical page margins of the page in "pageunits" (see `ESC -(U' above). The margins are specified as the top of the page and the -length of the page. The second form of the command allows setting of -longer page lengths on new printers (these happen to be the printers -that support variable dot size). -
    - -

    -

    -

    -
    ESC/P2 command: ESC (S BC=8 WIDTH4 LENGTH4 -
    -Set the width and length of the printed page region in "pageunits" (see -`ESC (U' above). -
    - -

    -

    -

    -
    ESC/P2 command: ESC (v BC=2 ADVANCE2 -
    -
    ESC/P2 command: ESC (v BC=4 ADVANCE4 -
    -Feed vertically ADVANCE "vertical units" (see `ESC (U' above) -from the current print head position. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (V BC=2 ADVANCE2 -
    -
    ESC/P2 command: ESC (V BC=4 ADVANCE4 -
    -Feed vertically ADVANCE "vertical units" (see `ESC (U' above) -from the top margin. -
    - -

    -

    -

    -
    ESC/P2 command: ESC ($ BC=4 OFFSET4 -
    -Set horizontal position to OFFSET from the left margin. This -command operates on printers of the 740 class and newer (all printers -with variable dot size). -
    - -

    -

    -

    -
    ESC/P2 command: ESC $ OFFSET2 -
    -Set horizontal position to OFFSET from the left margin. This -command operates on printers of the 740 class and newer (all printers -with variable dot size). -
    - -

    -

    -

    -
    ESC/P2 command: ESC (\ BC=4 UNITS2 OFFSET2 -
    -Set horizontal position to OFFSET from the previous print head -position, measured in UNITS. UNITS is measured in inverse -inches, and should be set to 1440 in all cases. This operates on all -1440 dpi printers that do not support variable dot size. -
    - -

    -

    -

    -
    ESC/P2 command: ESC (/ BC=4 OFFSET4 -
    -Set horizontal position to OFFSET from the previous print head -position, measured in "horizontal units" (see `ESC (U' above). -This operates on all variable dot size printers. -
    - -

    -

    -

    -
    ESC/P2 command: ESC \ OFFSET2 -
    -Set horizontal position to OFFSET from the previous print head -position, measured in basic unit of measurement (see `ESC (U' -above). This is used on all 720 dpi printers, and can also be used on -1440 dpi printers in lower resolutions to save a few bytes. Note that -OFFSET may be negative. The range of values for this command is -between `-16384' and `16383'. -
    - -

    -

    -

    -
    ESC/P2 command: ESC r COLOR1 -
    -
    ESC/P2 command: ESC (r BC=2 DENSITY1 COLOR1 -
    -Set the ink color. The first form is used on four-color printers; the -second on six-color printers. DENSITY is `0' for dark inks, -`1' for light. COLOR is - -

    -
    - -
    `0' -
    -black -
    `1' -
    -magenta -
    `2' -
    -cyan -
    `4' -
    -yellow -
    - -

    -This command is not used on variable dot size printers in softweave -mode. -

    - -

    -

    -

    -
    ESC/P2 command: ESC . COMPRESS1 VSEP1 HSEP1 LINES1 WIDTH2 data... -
    - Print data. COMPRESS signifies the compression mode: - -

    -
    - -
    `0' -
    -no compression -
    `1' -
    -TIFF compression (incorrectly documented as "run length encoded") -
    `2' -
    -TIFF compression with a special command set. -
    - -

    -VSEP depends upon resolution and printer type. At 360 DPI, it is -always `10'. At 720 DPI, it is normally `5'5. On the ESC -600, it is `40' (@math{8 * 5}). On some other printers, it varies. - -

    -

    -HSEP1 is `10' at 360 DPI and `5' at 720 or 1440 DPI -(1440 DPI cannot be printed in one pass; it is printed in two passes, -with the dots separated in each pass by 1/720"). - -

    -

    -LINES is the number of lines to be printed. It should be `1' -in microweave and 360 DPI. At 720 DPI softweave, it should be the -number of lines to be actually printed. - -

    -

    -WIDTH is the number of pixels to be printed in each row. -Following this command, a carriage return (`13' decimal, `0A' -hex) should be output to return the print head position to the left -margin. - -

    -

    -The basic data format is a string of bytes, with data from left to right -on the page. Within each byte, the highest bit is first. - -

    -

    -The TIFF compression is implemented as one count byte followed by one or -more data bytes. There are two cases: - -

    - -
      -
    1. - -If the count byte is `128' or less, it is followed by @math{[count] -+ 1} data bytes. So if the count byte is `0', it is followed by 1 -data byte; if it is `128', it is followed by 129 data bytes. - -
    2. - -If the count byte is greater than 128, it is followed by one byte. This -byte is repeated (257 - [count]) times. So if [count] is 129, the next -byte is treated as though it were repeated 128 times; if [count] is 255, -it is treated as though it were repeated twice. -
    - -
    - -

    -

    -
    ESC/P2 command: ESC i COLOR1 COMPRESS1 BITS1 BYTES2 LINES2 data... -
    -Print data in the newer printers (that support variable dot size), and -Stylus Pro models. - -

    -

    -COLOR is the color: - -

    -
    - -
    `0' -
    -black -
    `1' -
    -magenta -
    `2' -
    -cyan -
    `4' -
    -yellow -
    `17' -
    -light magenta -
    `18' -
    -light cyan -
    - -

    -COMPRESS signifies the -compression mode: - -

    -
    - -
    `0' -
    -no compression -
    `1' -
    -TIFF compression (incorrectly documented as "run length encoded") -
    `2' -
    -TIFF compression with a special command set. -
    - -

    -BITS is the number of bits per pixel. - -

    -

    -BYTES is the number of bytes wide for each row (@math{ceiling(BITS -* width_of_row, 8)}). Note that this is different from the `ESC .' -command above. - -

    -

    -LINES is the number of lines to be printed. This command is the -only way to get variable dot size printing. In variable dot mode, the -size of the dots increases as the value (`1', `2', or -`3') increases. -

    - -

    -

    -

    -
    ESC/P2 command: ESC (D BC=4 BASE2 VERTICAL1 HORIZONTAL1 -
    -Set printer horizontal and vertical spacing. It only applies to -variable dot size printers in softweave mode (and possibly other high -end printers). - -

    -

    -BASE is the base unit for this command; it must be `14400'. - -

    -

    -VERTICAL is the distance in these units between printed rows; it -should be (@math{separation_in_nozzles * BASE / 720}). - -

    -

    -HORIZONTAL is the horizontal separation between dots in a row. -Depending upon the printer, this should be either (@math{14400 / 720}) -or (@math{14400 / 360}). The Stylus Pro 9000 manual suggests that the -settings should match the chosen resolution, but that is apparently not -the case (or not always the case) on other printers. -

    - -

    -

    -

    -
    ESC/P2 command: ESC (R BC=8 00 R E M O T E 1 -
    -Enters "remote mode". This is a special, undocumented command set that -is used to set up various printer options, such as paper feed tray, and -perform utility functions such as head cleaning and alignment. It does -not appear that anything here is actually required to make the printer -print. Our best understanding of what is in a remote command sequence -is described in a separate section below. -
    - -

    -

    -

    -
    ESC/P2 command: ESC 01 @EJL [sp] ID\r\n -
    -Return the printer ID. This is considered a remote mode command, -although the syntax is that of a conventional command. This returns the -following information: - -

    - -
    -@EJL ID\r
    -MFG:EPSON;
    -CMD:ESCPL2,BDC;
    -MDL:[printer model];
    -CLS:PRINTER;
    -DES:EPSON [printer model];
    -\f
    -
    - -
    - -

    -After all data has been sent, a form feed byte should be sent. - -

    -

    -All newer Epson printers (STC 440, STP 750) require the following -command to be sent at least once to enable printing at all. This -command specifically takes the printer out of the Epson packet mode -communication protocol (whatever that is) and enables normal data -transfer. Sending it multiple times is is not harmful, so it is -normally sent at the beginning of each job: - -

    - -
    -ESC 01@EJL[space]1284.4[newline]@EJL[space][space][space][space]
    -[space][newline]ESC@
    -
    - -

    -The proper sequence of initialization commands is: - -

    - -
    -magic command
    -ESC 
    -remote mode if needed
    -ESC (G
    -ESC (U
    -ESC (K (if appropriate)
    -ESC (i
    -ESC U (if needed)
    -ESC (s (if appropriate)
    -ESC (e
    -ESC (C
    -ESC (c
    -ESC (S
    -ESC (D (if needed)
    -ESC (V (optional -- this can be accomplished with ESC (v)
    -
    - -

    -For printing, the proper sequence is: - -

    - -
    -ESC (v
    -
    - -

    -and repeat for each color: - -

    - -
    -ESC ($ or ESC (\ or ESC \
    -ESC (r or ESC r (if needed--not used with `ESC i' and not needed if the color
    -has not changed from the previous printed line)
    -ESC . or ESC i  ...data... [return] (0A hex)
    -
    - -

    -To terminate a page: - -

    - -
    -[formfeed] (0C hex)
    -ESC @
    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_37.html b/doc/manual-html/gimpprint_37.html deleted file mode 100644 index d2cbd44..0000000 --- a/doc/manual-html/gimpprint_37.html +++ /dev/null @@ -1,663 +0,0 @@ - - - - -GIMP-Print - ESC/P2 Remote Mode Commands - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    C.3 Remote Mode Commands

    - -

    -The following description of remote commands comes out of an -examination of the sequences used by the printer utilities bundled -with the Windows drivers for the ESC740, and from other sources (some -Epson manuals, experimentation, analysis of print files). It is -largely speculative as these commands are not all documented in the -Epson documentation we have access to. Generally, newer manuals -provide more thorough documentation. - -

    -

    -Remote command mode is entered when the printer is sent the following -sequence: - -

    - -
    -ESC (R BC=8 00 R E M O T E 1
    -
    - -

    -Remote mode commands are then sent, and terminated with the following -sequence: - -

    - -
    -ESC 00 00 00
    -
    - -

    -All remote mode commands must be sent before the initial `ESC (G' -command is sent. - -

    -

    -This introductory sequence is then followed by a sequence of commands. -Each command is constructed as follows: - -

    - -
      -
    • Two ASCII bytes indicating the function - -
    • A byte count (two bytes, little-endian) for the parameters - -
    • Binary parameters, if any - -
    - -

    -This is a list of all remote commands we have seen: - -

    -

    -

    -
    ESC/P2 remote command: NC BC=2 00 00 -
    -Print a nozzle check pattern -
    - -

    -

    -

    -
    ESC/P2 remote command: VI BC=2 00 00 -
    -on my 740, prints the following: - -

    - -
    -W01286 I02382\r\n
    -
    - -

    -probably "version information" -

    - -

    -

    -

    -
    ESC/P2 remote command: * AI BC=3 00 00 00 -
    -Prints a "printer ID". On one 870, prints the following: - -
    -51-51-50-51-49-48\r\n
    -
    - -

    -The Windows driver has a text entry field where this number can be -entered, but its purpose is unknown. -

    - -

    -

    -

    -
    ESC/P2 remote command: * LD BC=0 -
    -Load printer defaults from NVRAM, DIP switches, and/or ROM. This -apparently does not load factory defaults per se, but any settings that -are saved. This is commonly used right at the end of each print job -after the `ESC @' printer reset command. -
    - -

    -

    -

    -
    ESC/P2 remote command: * CH BC=2 00 xx -
    -Perform a head cleaning cycle. The heads to clean are determined by -parameter xx: - -

    -
    - -
    `00' -
    -clean all heads -
    `01' -
    -clean black head -
    `02' -
    -clean color heads -
    - -

    -While xx = `00' is probably supported by all printers, xx = -`01' and `02' may well not be. -

    - -

    -

    -

    -
    ESC/P2 remote command: * DT BC=3 00 xx 00 -
    -Print an alignment pattern. There are three patterns, which are picked -via the choice of xx. Pattern `0' is coarse, pattern -`1' is medium, and pattern `2' is fine. -
    - -

    -

    -

    -
    ESC/P2 remote command: * DU BC=6 00 xx 00 09 00 yy -
    -Print another alignment pattern. It isn't entirely clear what xx -and yy are, but it appears that xx takes on the values -`1' and `2' , and yy takes on the values `0' and -1. This may only work on the 580 and/or 480. -
    - -

    -

    -

    -
    ESC/P2 remote command: * DA BC=4 00 xx 00 yy -
    -Set results for the first alignment pattern. xx is the pattern -(`1'--`3'); yy is the best choice from the set -(`1'--`7' or `1'--`15'). This does not save to -NVRAM, so when the printer is powered off, the setting will be lost. -
    - -

    -

    -

    -
    ESC/P2 remote command: * DA BC=6 00 xx 00 yy 09 00 -
    -Set results for alternate alignment pattern. xx appears to be the -pass, and yy appears to be the optimum pattern. This does not -save to NVRAM, so when the printer is powered off, the setting will be -lost. -
    - -

    -

    -

    -
    ESC/P2 remote command: * SV BC=0 -
    -Save the current settings to NVRAM. -
    - -

    -

    -

    -
    ESC/P2 remote command: * RS BC=1 01 -
    -Reset the printer. -
    - -

    -

    -

    -
    ESC/P2 remote command: * IQ BC=1 01 -
    -Get ink quantity. This requires direct access to the printer port. The -return looks like - -

    - -
    -IQ:KKCCMMYY
    -
    - -

    -or - -

    - -
    -IQ:KKCCMMYYccmm
    -
    - -

    -(for 4-color and 6-color printers respectively), where each pair of -digits are hexadecimal representations of percent. -

    - -

    -

    -The following two commands have been observed on an STP 870. - -

    -

    -

    -
    ESC/P2 remote command: * IR BC=2 00 xx -
    -Function unknown. This command has been observed on an STP 870 -with xx=`03' at the start of a job and xx=`02' at -the end of a job (where it is followed by an `LD' command). When -in roll mode, the values change to xx=`01' at the start of a -job and xx=`00' at the end of a job. -
    - -

    -

    -

    -
    ESC/P2 remote command: * FP BC=3 00 xx yy -
    -xx=`00' and yy=`00' selects the printer's normal -left margin (about 3mm). xx=`0xb0' and yy=`0xff' -selects zero-margin mode, where the left-most print position is shifted -to a point about 0.1" to the left of the left-hand edge of the paper, -allowing printing up to (and off) the left-hand edge of the paper. -
    - -

    -

    -The commands below are partially documented in the Stylus Pro 9000 -manual. Much of this information is interpreted; none is tested. - -

    -

    -

    -
    ESC/P2 remote command: * SN BC=3 00 xx yy -
    -Select Mechanism Sequence. xx controls which sub-operation is -performed. xx=`00' selects the "Feed paper sequence -setting". yy can take on the following values (on the STP 870, -at any rate): - -

    -
    - -
    `0' -
    -default -
    `1' -
    -plain paper -
    `2' -
    -postcards -
    `3' -
    -film (photo quality glossy film, transparencies) -
    `4' -
    -envelopes -
    `5' -
    -plain paper (fast load) -
    `6' -
    -back light film (although this has been observed with heavyweight matte -paper) -
    `7' -
    -matte paper (observed with 360 dpi inkjet paper, and photo quality -inkjet paper) -
    `8' -
    -photo paper -
    - -

    -Experimentation suggests that this setting changes details of how the -printers' cut sheet feeder works, presumably to tune it for different -types of paper. - -

    -

    -xx=`01' controls the platen gap setting; yy=`00' -is the default, yy=`1' or `2' are higher settings. - -

    -

    -xx=`02' controls paper loading speed (yy=`0' is -normal, `1' is fast, `2' is slow). It appears that `1' -is used when printing on "plain paper", "360dpi ink jet paper" or -"ink jet transparencies", and yy=`00' for all other paper -type settings. - -

    -

    -xx=`07' controls duplex printing for printers with that -capability (yy=0 is default, for non-duplex printing; -`1' is front side of the paper, and 2 is back side). - -

    -

    -xx=`09' controls zero margin printing on the printers with -the capability of printing zero-margin on all sides (Stylus Photo -780/790, 890, and 1280/1290). yy=`0' is the default; -`1' enables zero margin printing. -

    - -

    -

    -

    -
    ESC/P2 remote command: * PP BC=3 00 xx yy -
    -Set Paper Path. xx=`2' indicates manual feed, -xx=`3' is for roll paper. yy selects "paper path -number". -
    - -

    -

    -

    -
    ESC/P2 remote command: * AC BC=2 00 xx -
    -Set Auto Cutting State. xx=`0' selects auto cutting off, -xx=`1' selects auto cutting on, and xx=`2' -indicates horizontal print page line on. It appears that with auto -cutting on, roll paper is cut automatically at the point a formfeed -character is sent. The formfeed character is normally used to eject a -page; with this turned on, it also cuts the roll paper. Horizontal -print page line on prints a narrow line of black dots at the position -the paper should be cut manually. -
    - -

    -

    -

    -
    ESC/P2 remote command: * DR BC=4 00 xx DT2 -
    -Set Drying Time. xx=`00' sets the drying time "per scan" -(per pass?); xx=`01' sets the drying time per page. DT -indicates the drying time, which is in seconds if page mode is used and -in milliseconds if scan mode is used. DT must not exceed 3600 -seconds in per-page mode and 10000 milliseconds in per-scan mode. -
    - -

    -

    -

    -
    ESC/P2 remote command: * IK BC=2 00 xx -
    -Select Ink Type. xx=`00' selects dye ink. Pigment ink is -apparently selected by xx=`01'. This probably does not apply -to the consumer-grade printers. -
    - -

    -

    -

    -
    ESC/P2 remote command: * PZ BC=2 00 xx -
    -Set Pause After Printing. xx=`00' selects no pause after -printing; xx=`01' selects pause after printing. If turned -on, the printer is paused after the page is ejected (by the FF -byte). If cutting is turned on, the printer is paused after -the cutting or printing of the horizontal cut line. -
    - -

    -

    -

    -
    ESC/P2 remote command: * EX BC=6 00 00 00 00 0x14 xx -
    -Set Vertical Print Page Line Mode. xx=`00' is off, -xx=`01' is on. If turned on, this prints vertical trim lines -at the left and right margins. -
    - -

    -

    -

    -
    ESC/P2 remote command: * EX BC=6 00 00 00 00 0x05 xx -
    -Set Roll Paper Mode. If xx is `0', roll paper mode is off; -if xx is `1', roll paper mode is on. -
    - -

    -

    -

    -
    ESC/P2 remote command: * EX BC=3 00 xx yy -
    -Appears to be a synonym for the `SN' command described above. -
    - -

    -

    -

    -
    ESC/P2 remote command: * PH BC=2 00 xx -
    -Select Paper Thickness. Set the paper thickness xx in .1 mm -units. This must not exceed 0x10 (1.6 mm). If the thickness is set -"more than" .6 mm (which probably means "at least" .6 mm, since the -other case reads "less than 0.5 mm"), the platen gap is set high -irrespective of the `SN' command. -
    - -

    -

    -

    -
    ESC/P2 remote command: * PM BC=2 00 00 -
    -Function unknown. Used on the STC 3000 at least when using roll -feed, and on the STP 870 in all print files analysed to date. -
    - -

    -

    -

    -
    ESC/P2 remote command: * ST BC=2 00 xx -
    -Epson's STP 750/1200 programming guide refers to the `ST' command -as "Set printer state reply". If xx is `0' or `2', -the printer will not send status replies. If xx is `1' or -`3', the printer will send status replies. The status replies -consist of state, error codes, ink leve, firmware version, and warning -status. - -

    -

    -The actual reply is documented as - -

    - -
    -@BDC ST\r
    -ST: xx;
    -[ER: yy;]
    -IQ: n1n2n3n4;
    -[WR: w1,w2...;]
    -RV: zz;
    -AI:CW:02kkccmmyy, MI:mm
    -[TC:tttt;]
    -INK:...;
    -\f
    -
    - -

    -(`\r' is carriage return; `\n' is newline; `\f' is -formfeed.) - -

    -

    -`ST' is the printer status: - -

    -
    - -
    `00' -
    -Error -
    `01' -
    -Self-test -
    `02' -
    -Busy -
    `03' -
    -Waiting while printing -
    `04' -
    -Idle -
    `07' -
    -Cleaning/filling ink heads -
    `08' -
    -Not yet initialized/filling heads -
    - -

    -`ER', if provided, is the error status: - -

    -
    - -
    `00' -
    -Fatal error -
    `01' -
    -Interface not selected -
    `04' -
    -Paper jam -
    `05' -
    -Out of ink -
    `06' -
    -Paper out -
    - -

    -`IQ' is the amount of ink left, as a (decimal!) percentage -expressed in hexadecimal. The values are black, cyan, magenta, and -yellow (presumably 6-color printers supply light cyan and light magenta -inks as additional parameters). - -

    -

    -`WR', if provided, is the warning status: - -

    -
    - -
    `10' -
    -Black ink low -
    `11' -
    -Cyan -
    `12' -
    -Magenta -
    `13' -
    -Yellow -
    `14' -
    -Light cyan (presumably) -
    `15' -
    -Light magenta (presumably) -
    - -

    -`RV' is the firmware revision (one byte ASCII). - -

    -

    -`AI' is actuator information. These are two byte ASCII codes that -indicate "ink weight rank ID" of KCMY, respectively. - -

    -

    -`TC', if provided, is the total time of cleaning or ink filling (?). - -

    -

    -`INK:' and `MI' are not documented. -

    - -

    -

    -

    -
    ESC/P2 remote command: * SM BC=2 00 xx -
    -Set Status Reply Rate. xx is the repeat interval in seconds. If -xx is `0', the status is returned only when the printer's -state changes. -
    - -

    -

    -

    -
    ESC/P2 remote command: * ST BC=1 01 -
    -Reply Printer Status. The reply is formatted as - -

    - -
    -@BDC PS\r\nST:xx;\f
    -
    - -

    -(`\r' is carriage return; `\n' is newline; `\f' is -formfeed). If xx (the reply value) is `0' or `2', -automatic status update is disabled; if `1' or `3', it is -enabled. -

    - -

    -

    -

    -
    ESC/P2 remote command: * SM BC=1 01 -
    -Reply Printer Status Rate. The reply is formatted as - -

    - -
    -@BDC PS\r\nST:xx;\f
    -
    - -

    -(`\r' is carriage return; `\n' is newline; `\f' is -formfeed). See `SM BC=2' above for the meaning of the return -value. -

    - -

    -

    -

    -
    ESC/P2 remote command: * ?? BC=xx y[1] ... y[xx] -
    -Echo Parameters (perhaps better described as Echo Commands). The -command string is executed (it would appear from the documentation), and -the string sent is returned using a sequence similar to that described -in the `ST BC=1' and `SM BC=1' commands. Note -that in this case the number of bytes is variable! -
    - -

    -

    -

    -
    ESC/P2 remote command: * SM BC=2 00 02 -
    -Function unknown. Used on the STC 3000 at least when using -roll feed. -
    - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_38.html b/doc/manual-html/gimpprint_38.html deleted file mode 100644 index a71d5f1..0000000 --- a/doc/manual-html/gimpprint_38.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - -GIMP-Print - ESC/P2 Appropriate Remote Commands - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    C.4 Appropriate Remote Commands

    - -

    -All of the remote commands described above are wrapped up with the usual -boilerplate. The files always start with `00 00 00' and the -"magic" command described above, then two `ESC @'s to reset the -printer. The remote command sequences come next; if they print anything -that is usually followed by a `FF' (0C hex) character to feed the -page, then the file ends with another two `ESC @'s to get back to -the ground state. - -

    -

    -An alignment sequence goes like this: - -

    - -
      -
    1. Host uses `DT' to print an alignment sheet - -
    2. User eyeballs the sheet to see which is the best aligned pattern. - -
    3. Host sends a `DA' command indicating which pattern the user chose - -
    4. If the user said "realign", meaning he isn't done yet, go to step 1 - -
    5. We are done: host sends a `SV' command and exits - -
    - -

    -The sequence used (by the STC 3000, at least) to print from the roll -feed is (with byte count omitted) - -

    - -
    -     PM 00 00
    -     SN 00 00 00
    -     EX 00 00 00 00 05 01
    -     ST 00 01
    -     SM 00 02
    -
    - -

    -The sequence used by the STP 870 to print on plain paper is - -

    - -
    -     PM 00 00
    -     IR 00 03
    -     SN 00 00 01
    -     SN 00 01 00
    -     SN 00 02 01
    -     EX 00 00 00 00 05 00
    -     FP 00 00 00
    -
    - -

    -and the job finishes with - -

    - -
    -     IR 00 02
    -     LD
    -
    - -

    -For different paper type settings on the STP 870, the arguments to -`SN' vary. The arguments to the first and third `SN' commands -are as outlined in the description of the `SN' command above; the -arguments to the second ("platen gap") are `00 01 01' for thick -papers ("matte paper--heavyweight", "photo paper" and "premium -glossy photo paper") and `00 01 00' for all others. - -

    -

    -For roll-mode printing, the STP 870's sequence changes as follows. -`IR''s arguments become `00 01' in the header, and `00 -00' after the job, and `EX''s last argument changes from `00' -to `01'. - -

    -

    -For zero-margin printing on the STP 870, the arguments to `FP' become -`00 0xb0 0xff'. This moves the origin about 5.5mm to the left, to a -point one tenth of an inch to the left of the left-hand edge of the -paper, allowing printing right up to (and beyond) the edge of the -paper. Some printers (at least the STP 870) include white absorbent -pads at the left margin position and other positions (89mm and 100mm -on the STP 870) to soak up ink which misses the edge of the paper. -Printing off the edge of paper of a width not aligned with a pad could -result in making a mess of the inside of the printer and ink getting -on the reverse of the paper. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_39.html b/doc/manual-html/gimpprint_39.html deleted file mode 100644 index fd25fb0..0000000 --- a/doc/manual-html/gimpprint_39.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - -GIMP-Print - New Printer - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    D Adding a new printer

    -

    - - - - -

    - -

    -This appendix covers adding a new ESCP/2, PCL, or Canon printer. -Writing a new driver module is not covered. - -

    -

    -The three steps to adding a printer are: - -

    - -
      -
    1. Add an entry to `printers.xml' - -
    2. Add the appropriate code and data to the appropriate driver module - -
    3. Tune the printer - -
    - -

    -Printer information is stored in two places: in `printers.xml' -(which contains the list of printer models available to the the -upper-level application), and in the appropriate driver file -(`print-escp2.c', `print-pcl.c', or `print-canon.c'). - -

    - - - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_4.html b/doc/manual-html/gimpprint_4.html deleted file mode 100644 index 5b262af..0000000 --- a/doc/manual-html/gimpprint_4.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -GIMP-Print - Using libgimpprint - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    2 Using libgimpprint

    -

    - - -

    -

    -This chapter describes how to write programs that use libgimpprint. - -

    - - - -

    2.1 Code prerequisites

    -

    -To use libgimpprint with a program, several steps must be taken: - -

    - -
      -
    1. Include the master libgimpprint header <gimp-print/gimp-print.h>. - -
    2. Call stp_init(). - -
    3. Link with libgimpprint. - -
    - -

    -The following is a short example program. It does not do anything useful, -but it does everything required to link with libgimpprint and call other -functions from libgimpprint. - -

    - -
    -#include <gimp-print/gimp-print.h>
    -
    -int
    -main (int argc, char *argv[])
    -{
    -  stp_init ();
    -  return (0);
    -}
    -
    - - - -

    2.2 Linking with libgimpprint

    - -

    -To link a program with libgimpprint, then `-lgimpprint' needs to be passed -to the compiler when linking. For example, to compile and link `prog.c' -the following commands would be used: - -

    - -
    -gcc -c prog.c
    -gcc -o prog -lgimpprint prog.o
    -
    - -

    -The compiler and linker flags needed may vary depending on the options -GIMP-Print was configured with when it was built. The -@command{gimpprint-config} script will give the correct parameters for -the local installation (see section 3.1 @command{gimpprint-config}). -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_40.html b/doc/manual-html/gimpprint_40.html deleted file mode 100644 index d71cf27..0000000 --- a/doc/manual-html/gimpprint_40.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - -GIMP-Print - printers.xml - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    D.1 `printers.xml'

    - -

    -`printers.xml' is an XML-like file (there's no formal DTD) that -contains very simple printer definitions. A typical definition follows: - -

    - -
    -<printer name="EPSON Stylus Color 1500" driver="escp2-1500">
    -<color>
    -<model value=2>
    -<gamma value=0.597>
    -<density value=1.0>
    -<language value=escp2>
    -</printer>
    -
    - -

    -There are other tags that may be present. The only ones that are -mandatory are `<printer>', `<color>', `<model>', and -`<language>'. The other optional parameters (gamma and density in -this case) can be used to adjust control settings. This is probably not -the right place for them; the printer drivers themselves should contain -this information. There's probably no good reason for anything but -gamma and density to be in here. Gamma refers to the printer's gamma -factor; density is the desired base ink density for the printer. The -Epson driver contains the density information for each printer at each -resolution internally. An even better driver would adjust density and -possibly even gamma for paper type. All the more reason not to have -that information here. - -

    -

    -If you really are curious about what tags are permitted, please see -`printdefl.l'. I deliberately want to make this obscure. - -

    -

    -Anyway, here's the definition of the tags that do matter: - -

    -

    -

    -
    `printers.xml' tag: <printer name="longname" driver="drivername"> -
    -This starts the definition of a printer. The longname should be -something human readable; the drivername should consist of -alphanumerics and hyphens, and be fairly short. The longname is -what will appear in the GUI listing of printers; the drivername is -what is actually used to key into the list of printers. It is legal to -have multiple printers with the same driver name. -
    - -

    -

    -

    -
    `printers.xml' tag: <color> -
    -
    `printers.xml' tag: <nocolor> -
    -Indicates that this printer is capable of color, or is not capable of -color respectively -
    - -

    -

    -

    -
    `printers.xml' tag: <model value=int> -
    -This defines a model number. This is passed into the driver, which may -do whatever it cares to with it--index into a table, compute on, or -whatever. This need not be unique. -
    - -

    -

    -

    -
    `printers.xml' tag: <language value=type> -
    -This defines what driver module this printer uses. type should be -`escp2', `pcl', `canon', or `ps'. -
    - -

    -

    -

    -
    `printers.xml' tag: </printer> -
    -This, of course, closes off a printer definition. -
    - -

    -

    -This is handled very ad-hoc. It's ugly. But it's reasonably easy to -extend, and it's buzzword-compliant. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_41.html b/doc/manual-html/gimpprint_41.html deleted file mode 100644 index 8f7fde6..0000000 --- a/doc/manual-html/gimpprint_41.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - -GIMP-Print - Driver file - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    D.2 The driver file

    -

    - - -

    -

    -Adding a new printer to a driver module (`print-escp2.c', -`print-pcl.c', or `print-canon.c'---`print-ps.c' is -really ad hoc) requires a bit more planning. Each driver is somewhat -different, but they all generally have a vector of printer definitions, -and the code does some special casing based on particular printer -capabilities. The PCL and Canon drivers are quite similar; the Canon -driver was actually cribbed from the PCL driver, but it then returned -the favor. - -

    -

    -The Epson driver is a little bit different. Canon and PCL printers -have some amount of intelligence; a lot of them have specific ink -options, and know about specific paper sizes and types, and must be -told the right thing. Epson printers have somewhat less intelligence -and will more or less do exactly what the host tells it to do in a -fairly regular fashion. I actually prefer this; it isn't materially -more work for the host to compute things like exact paper sizes and -such, it allows a lot more tweaking, and it may be why Epson has been -more open with information -- the communication protocol doesn't -really contain very much IP, so they have less reason to keep it -secret. - -

    -

    -Someone else will have to fill in the sections about PCL and Canon -printers. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_42.html b/doc/manual-html/gimpprint_42.html deleted file mode 100644 index 4c5e557..0000000 --- a/doc/manual-html/gimpprint_42.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - -GIMP-Print - Epson inkjet printers - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    D.3 Epson inkjet printers

    -

    - - -

    -

    -The `model_capabilities' vector in `print-escp2.c' contains -one entry for each defined printer model. The `model' parameter in -`printers.xml' is an index into this table. - -

    -

    -In general, the new printers have fewer eccentricities than the older -printers. That doesn't mean they're simpler, just that they're more -consistent. - -

    -

    -An escp2_printer_t is a C struct defined as follows: - -

    -

    -

    -
    Data type: escp2_printer_t -
    - -
    -typedef struct escp2_printer
    -{
    -  model_cap_t	flags;		/* Bitmask of flags, see below */
    -/*****************************************************************************/
    -  int		nozzles;	/* Number of nozzles per color */
    -  int		min_nozzles;	/* Minimum number of nozzles per color */
    -  int		nozzle_separation; /* Separation between rows, in 1/360" */
    -  int		black_nozzles;	/* Number of black nozzles (may be extra) */
    -  int		min_black_nozzles;	/* # of black nozzles (may be extra) */
    -  int		black_nozzle_separation; /* Separation between rows */
    -  int		fast_nozzles;	/* Number of fast nozzles */
    -  int		min_fast_nozzles;	/* # of fast nozzles (may be extra) */
    -  int		fast_nozzle_separation; /* Separation between rows */
    -/*****************************************************************************/
    -  int		xres;		/* Normal distance between dots in */
    -				/* softweave mode (inverse inches) */
    -  int		enhanced_xres;	/* Distance between dots in highest */
    -				/* quality modes */
    -  int		base_separation; /* Basic unit of row separation */
    -  int		base_resolution; /* Base hardware spacing (above this */
    -				/* always requires multiple passes) */
    -  int		enhanced_resolution;/* Above this we use the */
    -				    /* enhanced_xres rather than xres */
    -  int		resolution_scale;   /* Scaling factor for ESC(D command */
    -  int		max_black_resolution; /* Above this resolution, we */
    -				      /* must use color parameters */
    -				      /* rather than (faster) black */
    -				      /* only parameters*/
    -  int		max_hres;
    -  int		max_vres;
    -  int		min_hres;
    -  int		min_vres;
    -/*****************************************************************************/
    -  int		max_paper_width; /* Maximum paper width, in points */
    -  int		max_paper_height; /* Maximum paper height, in points */
    -  int		min_paper_width; /* Maximum paper width, in points */
    -  int		min_paper_height; /* Maximum paper height, in points */
    -				/* Printer interleave: */
    -  int		m_left_margin;	/* Left margin, points */
    -  int		m_right_margin;	/* Right margin, points */
    -  int		m_top_margin;	/* Absolute top margin, points */
    -  int		m_bottom_margin;	/* Absolute bottom margin, points */
    -				/* ROLL FEED: */
    -				/* Softweave: */
    -  int		roll_left_margin;	/* Left margin, points */
    -  int		roll_right_margin;	/* Right margin, points */
    -  int		roll_top_margin;	/* Absolute top margin, points */
    -  int		roll_bottom_margin;	/* Absolute bottom margin, points */
    -				/* Printer interleave: */
    -  int		m_roll_left_margin;	/* Left margin, points */
    -  int		m_roll_right_margin;	/* Right margin, points */
    -  int		m_roll_top_margin;	/* Absolute top margin, points */
    -  int		m_roll_bottom_margin;	/* Absolute bottom margin, points */
    -/*****************************************************************************/
    -  int		extra_feed;	/* Extra distance the paper can be spaced */
    -				/* beyond the bottom margin, in 1/360". */
    -				/* (maximum useful value is */
    -				/* nozzles * nozzle_separation) */
    -  int		separation_rows; /* Some printers require funky spacing */
    -				/* arguments in interleave mode. */
    -  int		pseudo_separation_rows;/* Some printers require funky */
    -				/* spacing arguments in softweave mode */
    -
    -  int           zero_margin_offset;   /* Offset to use to achieve */
    -				      /* zero-margin printing */
    -  int		initial_vertical_offset;
    -  int		black_initial_vertical_offset;
    -  int		extra_720dpi_separation;
    -
    -/*****************************************************************************/
    -  const int *dot_sizes;		/* Vector of dot sizes for resolutions */
    -  const double *densities;	/* List of densities for each printer */
    -  const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */
    -/*****************************************************************************/
    -  const paperlist_t *paperlist;
    -  const res_t *reslist;
    -  const inklist_t *inklist;
    -/*****************************************************************************/
    -  const int *bits;
    -  const int *base_resolutions;
    -  const input_slot_list_t *input_slots;
    -/*****************************************************************************/
    -  const init_sequence_t *preinit_sequence;
    -  const init_sequence_t *postinit_remote_sequence;
    -} escp2_printer_t;
    -
    - -
    - -

    -The printer definition block is divided into 8 sections. The first -section is a set of miscellaneous printer options. These are -described in the code, and will not be discussed further here. - -

    - -

    -The second section describes the number of nozzles and the separation -between nozzles in base units. The base unit is 1/360" for all -currently supported printers, but future printers may support a -smaller base unit. - -

    -

    -Many printers have more black nozzles than nozzles of other colors, -and when used in black and white mode, it's possible to use these -extra nozzles, which speeds up printing. As an example, a printer -that is specified to have 48 cyan, magenta, and yellow nozzles, and -144 black nozzles, can use all 144 black nozzles when printing black -ink only. When printing in color, only 48 nozzles of each color -(including black) can be used. - -

    -

    -Most printers can print using either the number of nozzles available -or any smaller number. Some printers require that all of the nozzles -be used. Those printers will set min_nozzles and/or -min_black_nozzles to the same value as nozzles and/or -black_nozzles. - -

    - -

    -The third section defines basic units of measure for the printer, -including the standard separation between dots, the base nozzle -separation, and the minimum and maximum printing resolutions the -printer supports. Most of these are fairly self-explanatory, but some -are not obvious. - -

    -

    -Most Epson printers, other than the high-end Stylus Pro models, cannot -print dots spaced more closely than 1/360" or 1/720" apart (this is -the setting for xres. This is true even for printers that -support resolutions of 1440 or 2880 DPI. In these cases, the data -must be printed in 2, 4, or 8 passes. While the printer can position -the head to a resolution of 1/1440" or 1/2880", the head cannot -deposit ink that frequently. - -

    -

    -Some printers can only print in their very best quality (using the -smallest dots available) printing at a lower resolution. For example, -the Stylus Photo EX can normally print with a dot spacing of 1/720". -The smallest dot size cannot be printed with a dot spacing of less -than 1/360", however. In this case, we use enhanced_xres -to specify the resolution to be used in this enhanced mode, and -enhanced_resolution to specify the printing resolution above -which we use the enhanced_xres. - -

    -

    -The resolution_scale command is used to specify scaling factors -for the dot separation on newer printers. It should always be 14400 -with current printers. - -

    - -

    -The fourth section specifies the minimum and maximum paper sizes, and -the margins. Some printers allow use of narrower margins when -softweave is used; both sets of margins are specified. - -

    -

    -There is a convenient `INCH' macro defined to make specification of -the max_paper_width and max_paper_height more legible. It -multiplies 72 by the provided expression to get the appropriate number -of points. For example, to specify 8.5", `INCH(17/2)' expands to -`(72 * 17/2)', which is evaluated left to right, and hence -generates the correct value. - -

    - -

    -The fifth section specifies some miscellaneous values that are -required for certain printers. For most printers, the correct values -are 1 for separation_rows and 0 for the others. Very, very few -printers require (or allow) separation_rows to be anything but -1 and pseudo_separation_rows other than zero. The Stylus Color -1520, Stylus Color 800, Stylus Color 850, and (strangely enough to my -mind, since it's a new printer) Stylus Color 660 seem to be the only -exceptions. - -

    -

    -The zero_margin_offset is used to specify an additional -negative horizontal offset required to print to the edges of the paper -on newer Stylus Photo printers. These must be determined empirically; -good starting values are 100 for 1440 DPI and 50 for 2880 DPI -printers. The goal is to print to the edge of the page, but not over -it. - -

    - -

    -The sixth section specifies head offsets for printers that do not have -the color jets aligned. Certain printers, such as the Stylus Color -480, have an unusual head arrangement whereby instead of all of the -colors being aligned vertically, the nozzles are configured in -groups. These printers are easy to determine; if the normal head -offset of zero for each color is used, the printing will be vertically -out of alignment. Most of these printers require specification of a -negative offset for printing to the top edge of the paper; typically -these printers do not require such an offset when printing black only. - -

    -

    -The seventh section specifies the most difficult values to tune, the -dot sizes, printing densities, and ink values (for variable dot size -enabled printers). These will be described in detail below. - -

    - -

    -The last section specifies luminosity, hue, and saturation adjustment -vectors for the printer, and the paper definitions. These are used to -adjust the color in Photograph and Solid Colors output modes. These are -each vectors of 48 (actually 49, as the first value must be duplicated) -doubles that remap the luminosity, hue, and saturation respectively. -The hue is calculated, and the value used to interpolate between the two -closest points in each vector. - -

    -

    -The paper definitions is a set of paper definitions. The paper -definition contains the name of the paper type, special settings that -are required for printers to process the paper correctly, and a set of -adjustment values. These are not currently discussed here. - -

    - -

    -The lists of dot sizes and densities contain values for 13 printing -modes: 120/180 DPI using printer weaving (single row; -referred to as "interleave") and "soft" weaving (the driver -determines the exact pattern of dot layout), 360 DPI interleave and -softweave, 720x360 DPI interleave and softweave, 720 DPI interleave -and softweave, 1440x720 interleave and softweave, 2880x720 interleave -and softweave, and 2880x1440 softweave only. - -

    -

    -For the dot sizes, the value for each element in the vector selects -the dot size to be used when printing at this (or similar) -resolution. The dot sizes are determined by consulting the -programming manual for the printer and experimenting as described -below. Current Epson printers always use dot sizes less than -`16', or `0x10', to indicate single dot size (each dot is -represented by 1 bit, and it's either printed or not), and dot sizes -of `16' or greater to indicate variable dot size (each dot is -represented by 2 bits, and it can either be not printed or take on 2 -or 3 values, representing the relative size of the printed dot). -Variable dot sizes permit the use of very small dots (which would be -too small to fill the page and produce solid black) in light areas, -while allowing the page to be filled with larger dots in darker areas. - -

    -

    -Even single dot size printers can usually produce dots of different -sizes; it's just illegal to actually try to switch dot size during a -page. These dots are also much bigger than those used in true -variable dot size printing. - -

    -

    -A dot size of `-1' indicates that this resolution is illegal for -the printer in question. Any resolutions that would use this dot size -will not be presented to the user. A dot size of `-2' indicates -that this resolution is legal, but that the driver is not to attempt -to set any dot size. Some very old printers do not support the -command to set the dot size. - -

    -

    -Most printers support a dot size of `0' as a mode-specific default, -but it's often a bigger dot than necessary. Printers usually also -support some dot sizes between `1' and `3'. Usually `1' -is the right dot size for 720 and 1440 dpi printing, and `3' works -best at 360 dpi. - -

    -

    -Variable dot size printers usually support 2 or 3 sets of variable dot -sizes. Older printers based on a 6 picolitre drop (the 480, 720, 740, -750, 900, and 1200) support two: mode 16 (0x10 in hexadecimal) for -normal variable dots at 1440 or 720 dpi, and mode 17 (0x10) for -special larger dots at 360 dpi. Newer printers based on 4 picolitre -drops normally support three sizes: `0x10' for 4 pl base drops, -`0x11' for 6 pl base drops, and `0x12' for special large -drops. On these printers, `0x10' usually works best at 1440x720 -and `0x11' works best at 720x720. Unfortunately, `0x10' -doesn't seem to generate quite enough density at 720x720, because if -it did the output would be very smooth. Perhaps it's possible to -tweak things@enddots{} - -

    - -

    -The list of densities is a list of base density values for all of the -above listed modes. "Density" refers to the amount of ink deposited -when a solid color (or solid black) is printed. So if the density is -`.5', solid black actually prints only half the possible dots. -"Base density" refers to the fact that the density value can be -scaled in the GUI or on the Ghostscript command line. The density -value specified (which is not made visible to the user) is multiplied -by the base density to obtain the effective density value. All other -things (such as ink drop size) remaining the same, doubling the -resolution requires halving the base density. The base density in the -density vector may exceed `1', as many paper types require lower -density than the base driver. The driver ensures that the actual -density never exceeds 1. - -

    -

    -Tuning the density should be done on high quality paper (usually -glossy photo paper). The goal is to find the lowest density value -that results in solid black (no visible gaps under a fairly high power -magnifying glass or loupe). If an appropriate density value is found -for 720 DPI, it could be divided by 2 for 1440x720, by 4 for 2880x720, -and by 8 for 2880x1440. - -

    -

    -However, for printers that offer a choice of dot size, this may not be -the best strategy. The best choice for dot size is the smallest dot -size that allows choosing a density value not greater than 1 that -gives full coverage. This dot size may be different for different -resolutions. Tuning variable dot size printers is more complicated; -the process is described below. - -

    -

    -The last member is a pointer to a structure containing a list of ink -values for variable dot size (or 6 color) inks. We model variable dot -size inks as producing a certain "value" of ink for each available dot -size, where the largest dot size has a value of 1. 6-color inks are -handled similarly; the light cyan and light magenta inks are treated -as a fractional ink value. The combination of variable dot size and 6 -color inks, of course, just creates that many more different ink -choices. - -

    -

    -This structure is actually rather complicated; it contains entries for -each combination of physical printer resolution (180, 360, 720, and -1440 dpi), ink colors (4, 6, and 7), and single and variable dot sizes -(since some printer modes can't handle variable dot size inks). Since -there's so much data, it's actually a somewhat deeply nested -structure: - -

    -

    -An escp2_printer_t contains a pointer (essentially, a reference -rather than a copy) to an escp2_variable_inklist_t. - -

    -

    -An escp2_variable_inklist_t contains pointers to -escp2_variable_inkset_t structures. There is one such pointer -for each combination of resolution, dot type, and ink colors as -described above. Yes, this is rather inflexible. - -

    -

    -An escp2_variable_inkset_t contains pointers to -escp2_variable_ink_t structures. There is one such pointer for -each of the four colors (C, M, Y, and K). - -

    -

    -An escp2_variable_ink_t contains a pointer to the actual list of -ink values (simple_dither_range_t), the number of ink values, and -a density value to be used for computing the transitions. This density -value is actually a scaling value; it is multiplied by the effective -density to compute the density to be used for computing the transitions. -Normally, this value is `1', but in some cases it may be possible -to get smoother results with a different value (in particular, the -single dot size 6-color inks work best with the effective density scaled -to `.75' for this purpose). A lower density lowers the transition -points, which results in more ink being deposited. - -

    -

    -A simple_dither_range_t is a structure containing four values: - -

    - -
      -
    1. The value of the particular ink - -
    2. The bit pattern used to represent the ink - -
    3. Whether the ink is light (0) or dark (1), for inks with light and dark variants - -
    4. The relative amount of ink actually deposited by this dot (not - -currently used for much; it can be used for ink reduction purposes, to -reduce the amount of ink deposited on the paper). -
    - -

    -These things are interesting as arrays. From an array of -simple_dither_range_t's, the dither code computes transition -values that it looks up at run time to decide what ink to print, as well -as whether to print at all. - -

    -

    -Really confused now? Yup. You'll probably find it easier to -simply read the code. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_43.html b/doc/manual-html/gimpprint_43.html deleted file mode 100644 index 381ac9c..0000000 --- a/doc/manual-html/gimpprint_43.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - -GIMP-Print - Tuning Epson printers - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    D.4 Tuning the printer

    -

    - - - -

    -

    -Now, how do you use all this to tune a printer? There are a number of -ways to do it; this one is my personal favorite. - -

    -

    -There's a file named `cyan-sweep.tif'. This consists of a thin bar -of cyan sweeping from white to almost pure cyan, and from pure cyan to -black. The first thing to do is to pick the appropriate -simple_dither_range_t (or create a whole new -escp2_variable_inklist_t) and comment out all but the darkest ink -(this means you'll be using the largest dots of dark ink). At 8.5" -width (the width of a letter-size piece of paper), the bar will be 1/8" -high. Printing it on wider or narrower paper will change the height -accordingly. Print it width-wise across a piece of photo quality paper -in line art mode using ordered or adaptive hybrid dither. Do not use -photographic mode; the colors in photographic mode vary non-linearly -depending upon the presence of the three color components, while in line -art mode the colors are much purer. Make sure that all the color -adjustments are set to defaults (1.0). Use the highest quality version -of the print mode you're testing to reduce banding and other artifacts. -This is much easier to do with the Gimp than with Ghostscript. - -

    -

    -At this stage, you want to look for four things: - -

    - -
      -
    1. - -The black near the center of the line is solid, but not more so than -that. - -
    2. - -The cyan immediately to the left of the black is almost solid. - -
    3. - -The dark cyan at the far right of the page is solid, but not more so. -You can try tuning the density so that it isn't quite solid, then -nudging up the density until it is. - -
    4. - -Both sweeps sweep smoothly from light to dark. In particular, the dark -half of the bar shouldn't visibly change color; it should go smoothly -from cyan to black. -
    - -

    -Repeat this stage until you have everything just right. Use the -positioning entry boxes in the dialog to position each bar exactly -1/8" further down the page. Adjacent bars will be touching. - -

    -

    -The next step is to uncomment out the second darkest dot size. If -you're using variable dots, use the second largest dot size of the -dark ink rather than the largest dot size of the light ink. This will -give you two inks. - -

    -

    -When you recompile the plugin, you simply need to copy the new -executable into the correct place. You do not need to exit and -restart the Gimp. - -

    -

    -Print another bar adjacent to the first one. Your goal is to match -the bar using a single dot size as closely as possible. You'll find -that the dark region of the bar shouldn't change to any great degree, -but the light half probably will. If the lighter part of the light -half is too dark, you need to increase the value of the smaller dot; -if it's too light, you need to decrease the value. The reasoning is -that if the value is too low, the ink isn't being given enough credit -for its contribution to the darkness of the ink, and vice versa. -Repeat until you have a good match. Make sure you let the ink dry -fully, which will take a few minutes. Wet ink will look too dark. -Don't look at the paper too closely; hold it at a distance. The extra -graininess of the largest dot size will probably make it look lighter -than it should; if you hold it far enough away so that you can't see -the dots, you'll get a more accurate picture of what's going on. - -

    -

    -After you have what looks like a good match, print another bar using -only the largest dot size (or dark ink, for single dot size 6-color -printers). You want to ensure that the bars touching each other look -identical, or as close as possible to it; your eye won't give you a -good reading if the bars are separated from each other. You'll -probably have to repeat the procedure. - -

    -

    -The next step is to comment out all but the largest and third-largest -dot size, and repeat the procedure. When they match, use all three -dot sizes of dark ink. Again, the goal is to match the single dot -size. - -

    -

    -You'll probably find the match is imperfect. Now you have to figure -out what region isn't right, which takes some experimentation. Even -small adjustments can make a noticeable difference in what you see. -At this stage, it's very important to hold the page far enough from -your eye; when you use all three dot sizes, the texture will be much -more even, which sometimes makes it look darker and sometimes lighter. - -

    -

    -After this is calibrated, it's time to calibrate the light ink against -the dark ink. To do this, comment out all but the large dot version -of the two inks, and repeat the procedure. This is trickier, because -the hues of the inks might not be quite identical. Look at the dark -half of the bar as well as the light half to see that the hue really -doesn't change as you sweep from cyan to black. Sometimes it's easier -to judge that way. You may find that it looks blotchy, in which case -you should switch from ordered dither to adaptive hybrid. - -

    -

    -After you have the light and dark inks calibrated against each other, -it's time to add everything back in. Usually you don't want to use -the largest dot size of light ink. These dots will be much larger -than the small dots of dark ink, but they'll still be lighter. This -will cause problems when printing mixed colors, since you'll be -depositing more ink on lighter regions of the page, and you'll -probably get strange color casts that you can't get rid of in neutral -tones. I normally use only the smallest one or two dot sizes of light -ink. - -

    -

    -After you've tweaked everything, print the color bar with saturation -set to zero. This will print neutral tones using color inks. Your -goal here is to look for neutral tonality. If you're using a 6-color -printer and get a yellow cast, it means that the values for your light -inks are too high (remember, that means they're getting too much -credit, so you're not depositing enough cyan and magenta ink, and the -yellow dominates). If you get a bluish or bluish-purple cast, your -light inks are too low (you're not giving them enough credit, so too -much cyan and magenta is deposited, which overwhelms the yellow). -Make sure you do this on very white, very high grade inkjet paper -that's designed for 1440x720 dpi or higher; otherwise the ink will -spread on contact and you'll get values that aren't really true for -high grade paper. You can, of course, calibrate for low grade paper -if that's what you're going to use, but that shouldn't be put into the -distribution. - -

    -

    -You can also fully desaturate this bar inside the Gimp and print it as -monochrome (don't print the cyan as monochrome; the driver does funny -things with luminance), for comparison. You'll find it very hard to -get rid of all color casts. - -

    -

    -There are other ways of tuning printers, but this one works pretty -well for me. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_44.html b/doc/manual-html/gimpprint_44.html deleted file mode 100644 index 6e54c81..0000000 --- a/doc/manual-html/gimpprint_44.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - -GIMP-Print - Canon inkjet printers - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    D.5 Canon inkjet printers

    - -

    -Basically, a new Canon printer can be added to `print-canon.c' in a -similar way as described above for the epson inkjet printers. The main -differences are noted here: - -

    -

    -In general, Canon printers have more "built-in intelligence" than Epson -printers which results in the fact that the driver only has to tell the -printing conditions like resolutions, dot sizes, etc. to the printer and -afterwards transfer the raster data line by line for each color used. - -

    -

    -canon_cap_t is a C struct defined as follows: - -

    -

    -

    -
    Data type: canon_cap_t -
    - -
    -typedef struct canon_caps {
    -  int model;          /* model number as used in printers.xml */
    -  int max_width;      /* maximum printable paper size */
    -  int max_height;
    -  int base_res;       /* base resolution - shall be 150 or 180 */
    -  int max_xdpi;       /* maximum horizontal resolution */
    -  int max_ydpi;       /* maximum vertical resolution */
    -  int max_quality;
    -  int border_left;    /* left margin, points */
    -  int border_right;   /* right margin, points */
    -  int border_top;     /* absolute top margin, points */
    -  int border_bottom;  /* absolute bottom margin, points */
    -  int inks;           /* installable cartridges (CANON_INK_*) */
    -  int slots;          /* available paperslots */
    -  int features;       /* special bjl settings */
    -  canon_dot_size_t dot_sizes;	/* Vector of dot sizes for resolutions */
    -  canon_densities_t densities;	/* List of densities for each printer */
    -  canon_variable_inklist_t *inxs; /* Choices of inks for this printer */
    -} canon_cap_t;
    -
    - -
    - -

    -Since there are Canon printers which print in resolutions of -@math{2^n*150} dpi (e.g. 300, 600, 1200) and others which support -resolutions of @math{2^n*180} dpi (e.g. 360, 720, 1440), there's a base -resolution (150 or 180, respectively) given in the -canon_cap_t. The structs canon_dot_size_t, -canon_densities_t and canon_variable_inklist_t refer to -resolutions being multiples of the base resolution. - -

    -

    -For the Canon driver, the struct canon_dot_size_t holds values -for a model's capabilities at a given resolution: `-1' if the -resolution is not supported. `0' if it can be used and `1' if -the resolution can be used for variable dot size printing. - -

    -

    -In canon_densities_t the base densities for each resolution can -be specified like for an epson printer, the same holds true for -canon_variable_inklist_t. See the descriptions above to learn -about how to adjust your model's output to yield nice results. - -

    -

    -There's a slight difference though in the way the Canon driver and the escp2 -driver define their variable inklists: In the Canon driver, you need to define -an inklist like this: - -

    - -
    -static const canon_variable_inklist_t canon_ink_myinks[] =
    -{
    -  {
    -    1,4, /* 1bit/pixel, 4 colors */
    -    &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1,
    -    &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1,
    -  },
    -  {
    -    3,4, /* 3bit/pixel, 4 colors */
    -    &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3,
    -    &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3,
    -  },
    -};
    -
    - -

    -where the `&ci_CMYK_1' and `&ci_CMYK_3' entries are references -to a previously defined const of type canon_variable_inkset_t. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_45.html b/doc/manual-html/gimpprint_45.html deleted file mode 100644 index b7214b1..0000000 --- a/doc/manual-html/gimpprint_45.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - -GIMP-Print - Data Type and Variable Index - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    Data Type and Variable Index

    - -

    -

    c

    - -
  2. canon_cap_t -
  3. -

    e

    - -
  4. escp2_printer_t -
  5. -

    g

    - -
  6. gimpprint_binary_age -
  7. gimpprint_current_interface -
  8. gimpprint_interface_age -
  9. gimpprint_major_version -
  10. gimpprint_micro_version -
  11. gimpprint_minor_version -
  12. -

    s

    - -
  13. stp_image_t -
  14. stp_option_t -
  15. stp_outfunc_t -
  16. stp_papersize_t -
  17. stp_papersize_unit_t -
  18. stp_printer_t -
  19. stp_printfuncs_t -
  20. stp_vars_t -
  21. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_46.html b/doc/manual-html/gimpprint_46.html deleted file mode 100644 index 88bb95b..0000000 --- a/doc/manual-html/gimpprint_46.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - -GIMP-Print - Function and Macro Index - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    Function and Macro Index

    - -

    -

    *

    - -
  22. * ?? BC=xx y[1] ... y[xx] -
  23. * AC BC=2 00 xx -
  24. * AI BC=3 00 00 00 -
  25. * CH BC=2 00 xx -
  26. * DA BC=4 00 xx 00 yy -
  27. * DA BC=6 00 xx 00 yy 09 00 -
  28. * DR BC=4 00 xx DT2 -
  29. * DT BC=3 00 xx 00 -
  30. * DU BC=6 00 xx 00 09 00 yy -
  31. * EX BC=3 00 xx yy -
  32. * EX BC=6 00 00 00 00 0x05 xx -
  33. * EX BC=6 00 00 00 00 0x14 xx -
  34. * FP BC=3 00 xx yy -
  35. * IK BC=2 00 xx -
  36. * IQ BC=1 01 -
  37. * IR BC=2 00 xx -
  38. * LD BC=0 -
  39. * PH BC=2 00 xx -
  40. * PM BC=2 00 00 -
  41. * PP BC=3 00 xx yy -
  42. * PZ BC=2 00 xx -
  43. * RS BC=1 01 -
  44. * SM BC=2 00 xx -
  45. * SM BC=1 01 -
  46. * SM BC=2 00 02 -
  47. * SN BC=3 00 xx yy -
  48. * ST BC=2 00 xx -
  49. * ST BC=1 01 -
  50. * SV BC=0 -
  51. -

    <

    - -
  52. </printer> -
  53. <color> -
  54. <language value=type> -
  55. <model value=int> -
  56. <nocolor> -
  57. <printer name="longname" driver="drivername"> -
  58. -

    a

    - -
  59. AM_PATH_GIMPPRINT -
  60. -

    e

    - -
  61. ESC $ OFFSET2 -
  62. ESC ($ BC=4 OFFSET4 -
  63. ESC (/ BC=4 OFFSET4 -
  64. ESC (\ BC=4 UNITS2 OFFSET2 -
  65. ESC (C BC=2 PAGELENGTH2 -
  66. ESC (C BC=4 PAGELENGTH4 -
  67. ESC (c BC=4 TOP2 LENGTH2 -
  68. ESC (c BC=8 TOP4 LENGTH4 -
  69. ESC (D BC=4 BASE2 VERTICAL1 HORIZONTAL1 -
  70. ESC (e BC=2 ZERO1 DOTSIZE1 -
  71. ESC (G BC=1 ON1 -
  72. ESC (i BC=1 MICROWEAVE1 -
  73. ESC (K BC=2 ZERO1 GRAYMODE1 -
  74. ESC (r BC=2 DENSITY1 COLOR1 -
  75. ESC (R BC=8 00 R E M O T E 1 -
  76. ESC (s BC=1 SPEED1 -
  77. ESC (S BC=8 WIDTH4 LENGTH4 -
  78. ESC (U BC=1 UNIT1 -
  79. ESC (U BC=5 PAGEUNITS1 VUNIT1 HUNIT1 BASEUNIT2 -
  80. ESC (v BC=2 ADVANCE2 -
  81. ESC (V BC=2 ADVANCE2 -
  82. ESC (v BC=4 ADVANCE4 -
  83. ESC (V BC=4 ADVANCE4 -
  84. ESC . COMPRESS1 VSEP1 HSEP1 LINES1 WIDTH2 data... -
  85. ESC 01 @EJL [sp] ID\r\n -
  86. ESC @ -
  87. ESC \ OFFSET2 -
  88. ESC i COLOR1 COMPRESS1 BITS1 BYTES2 LINES2 data... -
  89. ESC r COLOR1 -
  90. ESC U DIRECTION1 -
  91. -

    g

    - -
  92. GIMPPRINT_BINARY_AGE -
  93. GIMPPRINT_CHECK_VERSION -
  94. GIMPPRINT_CURRENT_INTERFACE -
  95. GIMPPRINT_INTERFACE_AGE -
  96. GIMPPRINT_MAJOR_VERSION -
  97. GIMPPRINT_MICRO_VERSION -
  98. GIMPPRINT_MINOR_VERSION -
  99. -

    n

    - -
  100. NC BC=2 00 00 -
  101. -

    s

    - -
  102. stp_allocate_copy -
  103. stp_allocate_lut -
  104. stp_allocate_vars -
  105. stp_check_version -
  106. stp_choose_colorfunc -
  107. stp_clear_all_options -
  108. stp_clear_option -
  109. stp_compute_lut -
  110. stp_compute_page_parameters -
  111. stp_copy_vars -
  112. stp_default_dither_algorithm -
  113. stp_default_settings -
  114. stp_dither_algorithm_count -
  115. stp_dither_algorithm_name -
  116. stp_free_lut -
  117. stp_free_vars -
  118. stp_get_app_gamma -
  119. stp_get_brightness -
  120. stp_get_cmap -
  121. stp_get_contrast -
  122. stp_get_cyan -
  123. stp_get_density -
  124. stp_get_dither_algorithm -
  125. stp_get_driver -
  126. stp_get_errdata -
  127. stp_get_errfunc -
  128. stp_get_gamma -
  129. stp_get_image_type -
  130. stp_get_ink_type -
  131. stp_get_input_color_model -
  132. stp_get_left -
  133. stp_get_lut -
  134. stp_get_magenta -
  135. stp_get_media_size -
  136. stp_get_media_source -
  137. stp_get_media_type -
  138. stp_get_option_by_index -
  139. stp_get_option_by_name -
  140. stp_get_orientation -
  141. stp_get_outdata -
  142. stp_get_outfunc -
  143. stp_get_output_color_model -
  144. stp_get_output_to -
  145. stp_get_output_type -
  146. stp_get_page_height -
  147. stp_get_page_width -
  148. stp_get_papersize_by_index -
  149. stp_get_papersize_by_name -
  150. stp_get_papersize_by_size -
  151. stp_get_ppd_file -
  152. stp_get_printer_by_driver -
  153. stp_get_printer_by_index -
  154. stp_get_printer_by_long_name -
  155. stp_get_printer_index_by_driver -
  156. stp_get_resolution -
  157. stp_get_saturation -
  158. stp_get_scaling -
  159. stp_get_top -
  160. stp_get_unit -
  161. stp_get_yellow -
  162. stp_init -
  163. stp_known_papersizes -
  164. stp_known_printers -
  165. stp_malloc -
  166. stp_maximum_settings -
  167. stp_merge_printvars -
  168. stp_minimum_settings -
  169. stp_option_count -
  170. stp_option_data -
  171. stp_option_length -
  172. stp_option_name -
  173. stp_papersize_get_bottom -
  174. stp_papersize_get_height -
  175. stp_papersize_get_left -
  176. stp_papersize_get_name -
  177. stp_papersize_get_right -
  178. stp_papersize_get_top -
  179. stp_papersize_get_unit -
  180. stp_papersize_get_width -
  181. stp_printer_get_driver -
  182. stp_printer_get_long_name -
  183. stp_printer_get_model -
  184. stp_printer_get_printfuncs -
  185. stp_printer_get_printvars -
  186. stp_set_app_gamma -
  187. stp_set_brightness -
  188. stp_set_cmap -
  189. stp_set_contrast -
  190. stp_set_cyan -
  191. stp_set_density -
  192. stp_set_dither_algorithm -
  193. stp_set_dither_algorithm_n -
  194. stp_set_driver -
  195. stp_set_driver_n -
  196. stp_set_errdata -
  197. stp_set_errfunc -
  198. stp_set_gamma -
  199. stp_set_image_type -
  200. stp_set_ink_type -
  201. stp_set_ink_type_n -
  202. stp_set_input_color_model -
  203. stp_set_left -
  204. stp_set_lut -
  205. stp_set_magenta -
  206. stp_set_media_size -
  207. stp_set_media_size_n -
  208. stp_set_media_source -
  209. stp_set_media_source_n -
  210. stp_set_media_type -
  211. stp_set_media_type_n -
  212. stp_set_option(stp_vars_t -
  213. stp_set_orientation -
  214. stp_set_outdata -
  215. stp_set_outfunc -
  216. stp_set_output_color_model -
  217. stp_set_output_to -
  218. stp_set_output_to_n -
  219. stp_set_output_type -
  220. stp_set_page_height -
  221. stp_set_page_width -
  222. stp_set_ppd_file -
  223. stp_set_ppd_file_n -
  224. stp_set_resolution -
  225. stp_set_resolution_n -
  226. stp_set_saturation -
  227. stp_set_scaling -
  228. stp_set_top -
  229. stp_set_unit -
  230. stp_set_yellow -
  231. -

    v

    - -
  232. VI BC=2 00 00 -
  233. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_47.html b/doc/manual-html/gimpprint_47.html deleted file mode 100644 index 46f8520..0000000 --- a/doc/manual-html/gimpprint_47.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - -GIMP-Print - Concept Index - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    Concept Index

    - -

    -

    a

    - -
  234. adding a printer -
  235. Appendices -
  236. autoconf -
  237. automake -
  238. -

    b

    - -
  239. bugs -
  240. -

    c

    - -
  241. collisions -
  242. CUPS driver -
  243. -

    d

    - -
  244. dither functions -
  245. dithering -
  246. driver file -
  247. -

    e

    - -
  248. Epson inkjet printers -
  249. ESC/P2 -
  250. ESC/P2 introduction -
  251. -

    f

    - -
  252. functions -
  253. -

    g

    - -
  254. ghostscript driver -
  255. GIMP Print plugin -
  256. gimpprint-config -
  257. -

    h

    - -
  258. how to read -
  259. -

    i

    - -
  260. initialising libgimpprint -
  261. integrating -
  262. -

    m

    - -
  263. m4 macros -
  264. main functions -
  265. make -
  266. manual, how to read -
  267. memory allocation -
  268. -

    n

    - -
  269. new printer -
  270. -

    o

    - -
  271. options functions -
  272. oversampling -
  273. overview -
  274. -

    p

    - -
  275. paper functions -
  276. perfect weave, perfect weave -
  277. Print plugin -
  278. printer functions -
  279. printer, adding -
  280. printer, tuning -
  281. problems -
  282. programs -
  283. -

    r

    - -
  284. reading -
  285. -

    s

    - -
  286. settings functions -
  287. stp_vars_t functions -
  288. -

    t

    - -
  289. tuning the printer -
  290. -

    u

    - -
  291. using -
  292. -

    v

    - -
  293. version functions -
  294. -

    w

    - -
  295. weaving -
  296. weaving algorithms -
  297. weaving collisions -
  298. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_5.html b/doc/manual-html/gimpprint_5.html deleted file mode 100644 index 75dbead..0000000 --- a/doc/manual-html/gimpprint_5.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - -GIMP-Print - Integrating libgimpprint - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    3 Integrating libgimpprint

    -

    - - -

    -

    -This chapter describes how to integrate the compiling and linking of -programs using libgimpprint with build scripts. Commonly used systems include -@command{make}, but more commonly `Makefile' files are generated by using -tools such as @command{autoconf} and @command{automake}. - -

    - -
      -
    • gimpprint-config: Getting the correct compiler and linker flags -
    • make: Normal makefiles -
    • autoconf: Macro to automatically check for libgimpprint -
    • automake: Automatically defined variables to use -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_6.html b/doc/manual-html/gimpprint_6.html deleted file mode 100644 index a0bc835..0000000 --- a/doc/manual-html/gimpprint_6.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - -GIMP-Print - gimpprint-config - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    3.1 @command{gimpprint-config}

    -

    - - -

    -

    -Depending on the setup of the computer system GIMP-Print was installed on, as -well as the options passed to @command{configure} when configuring the -package when it was built, the @env{CFLAGS} and @env{LIBS} parameters -needed to compile and link programs with libgimpprint may vary. To make it -simple to determine what these are on any given system, the script -@command{gimpprint-config} was created. It's job is to output the -correct parameters for the setup on your system. The following options -are available: - -

    - -
    -roger@whinlatter:~/gimpprint/devel$ gimpprint-config --help
    -Usage: gimpprint-config [OPTIONS] [LIBRARIES]
    -Options:
    -        [--prefix[=DIR]]
    -        [--exec-prefix[=DIR]]
    -        [--version]
    -        [--libs]
    -        [--cflags]
    -Libraries:
    -        gimpprint
    -
    - -

    -The @option{--prefix} and @option{--exec-prefix} options are only needed if the -installed locations of parts of GIMP-Print are different from the configured -locations. These should never be needed if GIMP-Print was properly configured -and installed. - -

    -

    -The installed version of GIMP-Print can be obtained with the -@option{--version} option: - -

    - -
    -roger@whinlatter:~/gimpprint/devel$ gimpprint-config --version
    -4.2.7
    -
    - -

    -The correct @env{CFLAGS} to use can be obtained with the @option{--cflags} -option: - -

    - -
    -roger@whinlatter:~/gimpprint/devel$ gimpprint-config --cflags
    -
    -
    - -

    -In this case, there are no special @env{CFLAGS} required to compile programs. - -

    -

    -The correct @env{LIBS} to use can the obtained with the @option{--libs} option: - -

    - -
    -roger@whinlatter:~/gimpprint/devel$ gimpprint-config --libs
    --L/usr/lib -lgimpprint -lm
    -
    - -

    -The command can be used from the shell by enclosing it in backquotes ``': - -

    - -
    -gcc `gimpprint-config --cflags` -c prog.c
    -gcc `gimpprint-config --libs` -o prog prog.o
    -
    - -

    -However, this is not the way it it typically used. Normally it is used in a -`Makefile' (see section 3.2 @command{make}) or by an @command{m4} macro in a @command{configure} -script (see section 3.3 @command{autoconf}). - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_7.html b/doc/manual-html/gimpprint_7.html deleted file mode 100644 index 7a792c3..0000000 --- a/doc/manual-html/gimpprint_7.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - -GIMP-Print - make - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    3.2 @command{make}

    -

    - - -

    -

    -If you use @command{make} with your own `Makefile' files, then you are on -your own. This manual offers no assistance with doing this. Only the following -suggestion is offered: - -

    - -
    -GIMPPRINT_VERSION = $(shell gimpprint-config --version)
    -GIMPPRINT_CFLAGS = $(shell gimpprint-config --cflags)
    -GIMPPRINT_LIBS = $(shell gimpprint-config --libs)
    -
    - -

    -How you choose to use these variables is entirely up to you. See Info file `make', node `Top', for more information. - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_8.html b/doc/manual-html/gimpprint_8.html deleted file mode 100644 index e35f343..0000000 --- a/doc/manual-html/gimpprint_8.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - -GIMP-Print - autoconf - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    3.3 @command{autoconf}

    -

    - - - -

    -

    -The @command{autoconf} program produces a Bourne shell script called -`configure' from a template file called `configure.in'. -`configure.in' contains both Bourne shell script, and @command{m4} macros. -@command{autoconf} expands the @command{m4} macros into `real' shell script. -The resulting `configure' script performs various checks for installed -programs, compiler characteristics and other system information such as -available headers and libraries. See Info file `autoconf', node `Top', for -more information. - -

    -

    -GIMP-Print provides an @command{m4} macro, AM_PATH_GIMPPRINT, suitable for -use in a `configure.in'. It defines the environment variables -@env{GIMPPRINT_CFLAGS}, @env{GIMPPRINT_LIBS} and @env{GIMPPRINT_CONFIG}. You can -optionally specify a minimum version of the library to use, and shell script to -run if the test suceeds or fails. - -

    -

    -

    -
    Macro: AM_PATH_GIMPPRINT ([minimum-version [, action-if-found [, action-if-not-found]]]) -
    -Check for an installed version of GIMP-Print greater than or equal to -minimum-version. - -

    -

    -action-if-found is a list of shell commands to run if the check -for the library succeeds; action-if-not-found is a list of -shell commands to run if the check fails. - -

    -

    -The macro sets the following environment variables: @env{GIMPPRINT_CFLAGS}, -@env{GIMPPRINT_LIBS} and @env{GIMPPRINT_CONFIG}. It also will substitute them -into any `Makefile.in' you specify in AC_OUTPUT because it calls -AC_SUBST for each of them. However, you will probably be using -@command{automake} to generate your `Makefile.in' files -(see section 3.4 @command{automake}). - -

    -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_9.html b/doc/manual-html/gimpprint_9.html deleted file mode 100644 index 93d7d58..0000000 --- a/doc/manual-html/gimpprint_9.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - -GIMP-Print - automake - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    3.4 @command{automake}

    -

    - - -

    -

    -The @command{automake} program can be used to generate `Makefile.in' files -suitable for use with a `configure' script generated by -@command{autoconf}. As @command{automake} requires @command{autoconf}, -this section will assume the use of a `configure' script which uses the -AM_PATH_GIMPPRINT macro (there is little point in not using it!). - -

    -

    -It is highly recommeded that you use GNU @command{autoconf} and -@command{automake}. They will allow you to make your software build on most -platforms with most compilers. @command{automake} makes writing complex -`Makefile' files very easy, by expressing how to build your packages -in terms of what files are required to build a project and the installation -locations of the files. It imposes a few limitations over using plain -`Makefile' files, such as in the use of conditionals, but these problems -are vastly outweighed by the benefits it brings. It also creates many extra -targets in the generated `Makefile.in' files such as @command{dist}, -@command{distcheck}, @command{clean}, @command{distclean}, -@command{maintainer-clean} and @command{tags}, and there are many more more -available. See Info file `automake', node `Top', for more information. - -

    -

    -Because AM_PATH_GIMPPRINT calls AC_SUBST to substitute -@env{GIMPPRINT_CFLAGS}, @env{GIMPPRINT_LIBS} and @env{GIMPPRINT_CONFIG}, -@command{automake} will automatically set these variables in the -`Makefile.in' files it generates, requiring no additional effort on -your part! - -

    -

    -As in previous examples, we will make a program @command{prog} from a file `prog.c'. This is how one might build write a `Makefile.am' to do this: - -

    - -
    -AUTOMAKE_OPTIONS = 1.4 gnu
    -MAINT_CHARSET = latin1
    -
    -@SET_MAKE@
    -
    -CFLAGS = @CFLAGS@
    -
    -INCLUDES = @INCLUDES@ $(GIMPPRINT_CFLAGS)
    -
    -bin_PROGRAMS = prog
    -prog_SOURCES = prog.c
    -prog_LDADD = $(GIMPPRINT_LIBS)
    -
    -MAINTAINERCLEANFILES = Makefile.in
    -
    - -

    -That's all there is to it! Please note that this example also requires the -macro AC_PROG_MAKE_SET to be used in `configure.in' and the use of -AC_SUBST to substitute @env{CFLAGS} and @env{INCLUDES} where -@CFLAGS@ and @INCLUDES@ are found in the file, respectively. -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/manual-html/gimpprint_foot.html b/doc/manual-html/gimpprint_foot.html deleted file mode 100644 index 1980040..0000000 --- a/doc/manual-html/gimpprint_foot.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - -GIMP-Print - Footnotes - - -

    GIMP-Print

    -

    The print plugin for the GIMP

    -

    Version 4.2.7, 27 October 2001

    -
    The GIMP-Print Project
    -

    -


    -

    (1)

    -

    @uref{http://www.gimp.org -

    (2)

    -

    The output resolution of the plugin. -

    (3)

    -

    For Postscript printers. -

    (4)

    -

    Again, that's relative to the paper -corner, not the printable area, which is usually smaller. -

    (5)

    -

    @email{gimp-print-devel@lists.sourceforge.net -

    (6)

    -

    @email{gimp-print-devel@lists.sourceforge.net -


    -This document was generated on 11 June 2004 using the -texi2html -translator version 1.51.

    - - diff --git a/doc/manual-html/gimpprint_toc.html b/doc/manual-html/gimpprint_toc.html deleted file mode 100644 index 4c34629..0000000 --- a/doc/manual-html/gimpprint_toc.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - -GIMP-Print - Table of Contents - - -

    GIMP-Print

    -

    The print plugin for the GIMP

    -

    Version 4.2.7, 27 October 2001

    -
    The GIMP-Print Project
    -

    -


    -

    -


    -This document was generated on 11 June 2004 using the -texi2html -translator version 1.51.

    - - diff --git a/doc/manual-html/print-color.png b/doc/manual-html/print-color.png deleted file mode 100644 index db1af3f..0000000 Binary files a/doc/manual-html/print-color.png and /dev/null differ diff --git a/doc/manual-html/print-main.png b/doc/manual-html/print-main.png deleted file mode 100644 index 2d78222..0000000 Binary files a/doc/manual-html/print-main.png and /dev/null differ diff --git a/doc/manual-html/print-setup.png b/doc/manual-html/print-setup.png deleted file mode 100644 index 904e03b..0000000 Binary files a/doc/manual-html/print-setup.png and /dev/null differ diff --git a/doc/new-printer.texi b/doc/new-printer.texi deleted file mode 100644 index 8ab4f2e..0000000 --- a/doc/new-printer.texi +++ /dev/null @@ -1,707 +0,0 @@ -@node New Printer, ,ESC/P2, Appendices -@appendix Adding a new printer -@cindex adding a printer -@cindex printer, adding -@cindex new printer - - -This appendix covers adding a new ESCP/2, PCL, or Canon printer. -Writing a new driver module is not covered. - -The three steps to adding a printer are: - -@enumerate -@item Add an entry to @file{printers.xml} -@item Add the appropriate code and data to the appropriate driver module -@item Tune the printer -@end enumerate - -Printer information is stored in two places: in @file{printers.xml} -(which contains the list of printer models available to the the -upper-level application), and in the appropriate driver file -(@file{print-escp2.c}, @file{print-pcl.c}, or @file{print-canon.c}). - -@menu -* printers.xml:: File format description. -* Driver file:: Data structures to use. -* Epson inkjet printers:: Adding an Epson printer. -* Tuning Epson printers:: Tweaking settings. -* Canon inkjet printers:: Adding a Canon printer. -@end menu - -@node printers.xml, Driver file, , New Printer -@appendixsection @file{printers.xml} - -@file{printers.xml} is an XML-like file (there's no formal DTD) that -contains very simple printer definitions. A typical definition follows: - -@example - - - - - - - -@end example - -There are other tags that may be present. The only ones that are -mandatory are @samp{}, @samp{}, @samp{}, and -@samp{}. The other optional parameters (gamma and density in -this case) can be used to adjust control settings. This is probably not -the right place for them; the printer drivers themselves should contain -this information. There's probably no good reason for anything but -gamma and density to be in here. Gamma refers to the printer's gamma -factor; density is the desired base ink density for the printer. The -Epson driver contains the density information for each printer at each -resolution internally. An even better driver would adjust density and -possibly even gamma for paper type. All the more reason not to have -that information here. - -If you really are curious about what tags are permitted, please see -@file{printdefl.l}. I deliberately want to make this obscure. - -Anyway, here's the definition of the tags that do matter: - -@deffn {@file{printers.xml} tag} @code{} -This starts the definition of a printer. The @var{longname} should be -something human readable; the @var{drivername} should consist of -alphanumerics and hyphens, and be fairly short. The @var{longname} is -what will appear in the GUI listing of printers; the @var{drivername} is -what is actually used to key into the list of printers. It is legal to -have multiple printers with the same driver name. -@end deffn - -@deffn {@file{printers.xml} tag} @code{} -@deffnx {@file{printers.xml} tag} @code{} -Indicates that this printer is capable of color, or is not capable of -color respectively -@end deffn - -@deffn {@file{printers.xml} tag} @code{} -This defines a model number. This is passed into the driver, which may -do whatever it cares to with it---index into a table, compute on, or -whatever. This need not be unique. -@end deffn - -@deffn {@file{printers.xml} tag} @code{} -This defines what driver module this printer uses. @var{type} should be -@samp{escp2}, @samp{pcl}, @samp{canon}, or @samp{ps}. -@end deffn - -@deffn {@file{printers.xml} tag} @code{} -This, of course, closes off a printer definition. -@end deffn - -This is handled very ad-hoc. It's ugly. But it's reasonably easy to -extend, and it's buzzword-compliant. - - -@node Driver file, Epson inkjet printers, printers.xml, New Printer -@appendixsection The driver file -@cindex driver file - -Adding a new printer to a driver module (@file{print-escp2.c}, -@file{print-pcl.c}, or @file{print-canon.c}---@file{print-ps.c} is -really ad hoc) requires a bit more planning. Each driver is somewhat -different, but they all generally have a vector of printer definitions, -and the code does some special casing based on particular printer -capabilities. The PCL and Canon drivers are quite similar; the Canon -driver was actually cribbed from the PCL driver, but it then returned -the favor. - -The Epson driver is a little bit different. Canon and PCL printers -have some amount of intelligence; a lot of them have specific ink -options, and know about specific paper sizes and types, and must be -told the right thing. Epson printers have somewhat less intelligence -and will more or less do exactly what the host tells it to do in a -fairly regular fashion. I actually prefer this; it isn't materially -more work for the host to compute things like exact paper sizes and -such, it allows a lot more tweaking, and it may be why Epson has been -more open with information -- the communication protocol doesn't -really contain very much IP, so they have less reason to keep it -secret. - -Someone else will have to fill in the sections about PCL and Canon -printers. - - -@node Epson inkjet printers, Tuning Epson printers, Driver file, New Printer -@appendixsection Epson inkjet printers -@cindex Epson inkjet printers - -The @samp{model_capabilities} vector in @file{print-escp2.c} contains -one entry for each defined printer model. The @samp{model} parameter in -@file{printers.xml} is an index into this table. - -In general, the new printers have fewer eccentricities than the older -printers. That doesn't mean they're simpler, just that they're more -consistent. - -An @code{escp2_printer_t} is a C struct defined as follows: - -@deftypevr {Data type} {} escp2_printer_t -@example -typedef struct escp2_printer -@{ - model_cap_t flags; /* Bitmask of flags, see below */ -/*****************************************************************************/ - int nozzles; /* Number of nozzles per color */ - int min_nozzles; /* Minimum number of nozzles per color */ - int nozzle_separation; /* Separation between rows, in 1/360" */ - int black_nozzles; /* Number of black nozzles (may be extra) */ - int min_black_nozzles; /* # of black nozzles (may be extra) */ - int black_nozzle_separation; /* Separation between rows */ - int fast_nozzles; /* Number of fast nozzles */ - int min_fast_nozzles; /* # of fast nozzles (may be extra) */ - int fast_nozzle_separation; /* Separation between rows */ -/*****************************************************************************/ - int xres; /* Normal distance between dots in */ - /* softweave mode (inverse inches) */ - int enhanced_xres; /* Distance between dots in highest */ - /* quality modes */ - int base_separation; /* Basic unit of row separation */ - int base_resolution; /* Base hardware spacing (above this */ - /* always requires multiple passes) */ - int enhanced_resolution;/* Above this we use the */ - /* enhanced_xres rather than xres */ - int resolution_scale; /* Scaling factor for ESC(D command */ - int max_black_resolution; /* Above this resolution, we */ - /* must use color parameters */ - /* rather than (faster) black */ - /* only parameters*/ - int max_hres; - int max_vres; - int min_hres; - int min_vres; -/*****************************************************************************/ - int max_paper_width; /* Maximum paper width, in points */ - int max_paper_height; /* Maximum paper height, in points */ - int min_paper_width; /* Maximum paper width, in points */ - int min_paper_height; /* Maximum paper height, in points */ - /* Printer interleave: */ - int m_left_margin; /* Left margin, points */ - int m_right_margin; /* Right margin, points */ - int m_top_margin; /* Absolute top margin, points */ - int m_bottom_margin; /* Absolute bottom margin, points */ - /* ROLL FEED: */ - /* Softweave: */ - int roll_left_margin; /* Left margin, points */ - int roll_right_margin; /* Right margin, points */ - int roll_top_margin; /* Absolute top margin, points */ - int roll_bottom_margin; /* Absolute bottom margin, points */ - /* Printer interleave: */ - int m_roll_left_margin; /* Left margin, points */ - int m_roll_right_margin; /* Right margin, points */ - int m_roll_top_margin; /* Absolute top margin, points */ - int m_roll_bottom_margin; /* Absolute bottom margin, points */ -/*****************************************************************************/ - int extra_feed; /* Extra distance the paper can be spaced */ - /* beyond the bottom margin, in 1/360". */ - /* (maximum useful value is */ - /* nozzles * nozzle_separation) */ - int separation_rows; /* Some printers require funky spacing */ - /* arguments in interleave mode. */ - int pseudo_separation_rows;/* Some printers require funky */ - /* spacing arguments in softweave mode */ - - int zero_margin_offset; /* Offset to use to achieve */ - /* zero-margin printing */ - int initial_vertical_offset; - int black_initial_vertical_offset; - int extra_720dpi_separation; - -/*****************************************************************************/ - const int *dot_sizes; /* Vector of dot sizes for resolutions */ - const double *densities; /* List of densities for each printer */ - const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */ -/*****************************************************************************/ - const paperlist_t *paperlist; - const res_t *reslist; - const inklist_t *inklist; -/*****************************************************************************/ - const int *bits; - const int *base_resolutions; - const input_slot_list_t *input_slots; -/*****************************************************************************/ - const init_sequence_t *preinit_sequence; - const init_sequence_t *postinit_remote_sequence; -@} escp2_printer_t; -@end example -@end deftypevr - -The printer definition block is divided into 8 sections. The first -section is a set of miscellaneous printer options. These are -described in the code, and will not be discussed further here. - - -The second section describes the number of nozzles and the separation -between nozzles in base units. The base unit is 1/360" for all -currently supported printers, but future printers may support a -smaller base unit. - -Many printers have more black nozzles than nozzles of other colors, -and when used in black and white mode, it's possible to use these -extra nozzles, which speeds up printing. As an example, a printer -that is specified to have 48 cyan, magenta, and yellow nozzles, and -144 black nozzles, can use all 144 black nozzles when printing black -ink only. When printing in color, only 48 nozzles of each color -(including black) can be used. - -Most printers can print using either the number of nozzles available -or any smaller number. Some printers require that all of the nozzles -be used. Those printers will set @code{min_nozzles} and/or -@code{min_black_nozzles} to the same value as @code{nozzles} and/or -@code{black_nozzles}. - - -The third section defines basic units of measure for the printer, -including the standard separation between dots, the base nozzle -separation, and the minimum and maximum printing resolutions the -printer supports. Most of these are fairly self-explanatory, but some -are not obvious. - -Most Epson printers, other than the high-end Stylus Pro models, cannot -print dots spaced more closely than 1/360" or 1/720" apart (this is -the setting for @code{xres}. This is true even for printers that -support resolutions of 1440 or 2880 DPI. In these cases, the data -must be printed in 2, 4, or 8 passes. While the printer can position -the head to a resolution of 1/1440" or 1/2880", the head cannot -deposit ink that frequently. - -Some printers can only print in their very best quality (using the -smallest dots available) printing at a lower resolution. For example, -the Stylus Photo EX can normally print with a dot spacing of 1/720". -The smallest dot size cannot be printed with a dot spacing of less -than 1/360", however. In this case, we use @code{enhanced_xres} -to specify the resolution to be used in this enhanced mode, and -@code{enhanced_resolution} to specify the printing resolution above -which we use the @code{enhanced_xres}. - -The @code{resolution_scale} command is used to specify scaling factors -for the dot separation on newer printers. It should always be 14400 -with current printers. - - -The fourth section specifies the minimum and maximum paper sizes, and -the margins. Some printers allow use of narrower margins when -softweave is used; both sets of margins are specified. - -There is a convenient @samp{INCH} macro defined to make specification of -the @code{max_paper_width} and @code{max_paper_height} more legible. It -multiplies 72 by the provided expression to get the appropriate number -of points. For example, to specify 8.5", @samp{INCH(17/2)} expands to -@samp{(72 * 17/2)}, which is evaluated left to right, and hence -generates the correct value. - - -The fifth section specifies some miscellaneous values that are -required for certain printers. For most printers, the correct values -are 1 for @code{separation_rows} and 0 for the others. Very, very few -printers require (or allow) @code{separation_rows} to be anything but -1 and @code{pseudo_separation_rows} other than zero. The Stylus Color -1520, Stylus Color 800, Stylus Color 850, and (strangely enough to my -mind, since it's a new printer) Stylus Color 660 seem to be the only -exceptions. - -The @code{zero_margin_offset} is used to specify an additional -negative horizontal offset required to print to the edges of the paper -on newer Stylus Photo printers. These must be determined empirically; -good starting values are 100 for 1440 DPI and 50 for 2880 DPI -printers. The goal is to print to the edge of the page, but not over -it. - - -The sixth section specifies head offsets for printers that do not have -the color jets aligned. Certain printers, such as the Stylus Color -480, have an unusual head arrangement whereby instead of all of the -colors being aligned vertically, the nozzles are configured in -groups. These printers are easy to determine; if the normal head -offset of zero for each color is used, the printing will be vertically -out of alignment. Most of these printers require specification of a -negative offset for printing to the top edge of the paper; typically -these printers do not require such an offset when printing black only. - -The seventh section specifies the most difficult values to tune, the -dot sizes, printing densities, and ink values (for variable dot size -enabled printers). These will be described in detail below. - - -The last section specifies luminosity, hue, and saturation adjustment -vectors for the printer, and the paper definitions. These are used to -adjust the color in Photograph and Solid Colors output modes. These are -each vectors of 48 (actually 49, as the first value must be duplicated) -doubles that remap the luminosity, hue, and saturation respectively. -The hue is calculated, and the value used to interpolate between the two -closest points in each vector. - -The paper definitions is a set of paper definitions. The paper -definition contains the name of the paper type, special settings that -are required for printers to process the paper correctly, and a set of -adjustment values. These are not currently discussed here. - - -The lists of dot sizes and densities contain values for 13 printing -modes: 120/180 DPI using printer weaving (single row; -referred to as ``interleave'') and ``soft'' weaving (the driver -determines the exact pattern of dot layout), 360 DPI interleave and -softweave, 720x360 DPI interleave and softweave, 720 DPI interleave -and softweave, 1440x720 interleave and softweave, 2880x720 interleave -and softweave, and 2880x1440 softweave only. - -For the dot sizes, the value for each element in the vector selects -the dot size to be used when printing at this (or similar) -resolution. The dot sizes are determined by consulting the -programming manual for the printer and experimenting as described -below. Current Epson printers always use dot sizes less than -@samp{16}, or @samp{0x10}, to indicate single dot size (each dot is -represented by 1 bit, and it's either printed or not), and dot sizes -of @samp{16} or greater to indicate variable dot size (each dot is -represented by 2 bits, and it can either be not printed or take on 2 -or 3 values, representing the relative size of the printed dot). -Variable dot sizes permit the use of very small dots (which would be -too small to fill the page and produce solid black) in light areas, -while allowing the page to be filled with larger dots in darker areas. - -Even single dot size printers can usually produce dots of different -sizes; it's just illegal to actually try to switch dot size during a -page. These dots are also much bigger than those used in true -variable dot size printing. - -A dot size of @samp{-1} indicates that this resolution is illegal for -the printer in question. Any resolutions that would use this dot size -will not be presented to the user. A dot size of @samp{-2} indicates -that this resolution is legal, but that the driver is not to attempt -to set any dot size. Some very old printers do not support the -command to set the dot size. - -Most printers support a dot size of @samp{0} as a mode-specific default, -but it's often a bigger dot than necessary. Printers usually also -support some dot sizes between @samp{1} and @samp{3}. Usually @samp{1} -is the right dot size for 720 and 1440 dpi printing, and @samp{3} works -best at 360 dpi. - -Variable dot size printers usually support 2 or 3 sets of variable dot -sizes. Older printers based on a 6 picolitre drop (the 480, 720, 740, -750, 900, and 1200) support two: mode 16 (0x10 in hexadecimal) for -normal variable dots at 1440 or 720 dpi, and mode 17 (0x10) for -special larger dots at 360 dpi. Newer printers based on 4 picolitre -drops normally support three sizes: @samp{0x10} for 4 pl base drops, -@samp{0x11} for 6 pl base drops, and @samp{0x12} for special large -drops. On these printers, @samp{0x10} usually works best at 1440x720 -and @samp{0x11} works best at 720x720. Unfortunately, @samp{0x10} -doesn't seem to generate quite enough density at 720x720, because if -it did the output would be very smooth. Perhaps it's possible to -tweak things@enddots{} - - -The list of densities is a list of base density values for all of the -above listed modes. ``Density'' refers to the amount of ink deposited -when a solid color (or solid black) is printed. So if the density is -@samp{.5}, solid black actually prints only half the possible dots. -``Base density'' refers to the fact that the density value can be -scaled in the GUI or on the Ghostscript command line. The density -value specified (which is not made visible to the user) is multiplied -by the base density to obtain the effective density value. All other -things (such as ink drop size) remaining the same, doubling the -resolution requires halving the base density. The base density in the -density vector may exceed @samp{1}, as many paper types require lower -density than the base driver. The driver ensures that the actual -density never exceeds 1. - -Tuning the density should be done on high quality paper (usually -glossy photo paper). The goal is to find the lowest density value -that results in solid black (no visible gaps under a fairly high power -magnifying glass or loupe). If an appropriate density value is found -for 720 DPI, it could be divided by 2 for 1440x720, by 4 for 2880x720, -and by 8 for 2880x1440. - -However, for printers that offer a choice of dot size, this may not be -the best strategy. The best choice for dot size is the smallest dot -size that allows choosing a density value not greater than 1 that -gives full coverage. This dot size may be different for different -resolutions. Tuning variable dot size printers is more complicated; -the process is described below. - -The last member is a pointer to a structure containing a list of ink -values for variable dot size (or 6 color) inks. We model variable dot -size inks as producing a certain "value" of ink for each available dot -size, where the largest dot size has a value of 1. 6-color inks are -handled similarly; the light cyan and light magenta inks are treated -as a fractional ink value. The combination of variable dot size and 6 -color inks, of course, just creates that many more different ink -choices. - -This structure is actually rather complicated; it contains entries for -each combination of physical printer resolution (180, 360, 720, and -1440 dpi), ink colors (4, 6, and 7), and single and variable dot sizes -(since some printer modes can't handle variable dot size inks). Since -there's so much data, it's actually a somewhat deeply nested -structure: - -An @code{escp2_printer_t} contains a pointer (essentially, a reference -rather than a copy) to an @code{escp2_variable_inklist_t}. - -An @code{escp2_variable_inklist_t} contains pointers to -@code{escp2_variable_inkset_t} structures. There is one such pointer -for each combination of resolution, dot type, and ink colors as -described above. Yes, this is rather inflexible. - -An @code{escp2_variable_inkset_t} contains pointers to -@code{escp2_variable_ink_t} structures. There is one such pointer for -each of the four colors (C, M, Y, and K). - -An @code{escp2_variable_ink_t} contains a pointer to the actual list of -ink values (@code{simple_dither_range_t}), the number of ink values, and -a density value to be used for computing the transitions. This density -value is actually a scaling value; it is multiplied by the effective -density to compute the density to be used for computing the transitions. -Normally, this value is @samp{1}, but in some cases it may be possible -to get smoother results with a different value (in particular, the -single dot size 6-color inks work best with the effective density scaled -to @samp{.75} for this purpose). A lower density lowers the transition -points, which results in more ink being deposited. - -A @code{simple_dither_range_t} is a structure containing four values: - -@enumerate -@item The value of the particular ink -@item The bit pattern used to represent the ink -@item Whether the ink is light (0) or dark (1), for inks with light and dark variants -@item The relative amount of ink actually deposited by this dot (not -currently used for much; it can be used for ink reduction purposes, to -reduce the amount of ink deposited on the paper). -@end enumerate - -These things are interesting as arrays. From an array of -@code{simple_dither_range_t}'s, the dither code computes transition -values that it looks up at run time to decide what ink to print, as well -as whether to print at all. - -@strong{Really} confused now? Yup. You'll probably find it easier to -simply read the code. - - -@node Tuning Epson printers, Canon inkjet printers, Epson inkjet printers, New Printer -@appendixsection Tuning the printer -@cindex tuning the printer -@cindex printer, tuning - -Now, how do you use all this to tune a printer? There are a number of -ways to do it; this one is my personal favorite. - -There's a file named @file{cyan-sweep.tif}. This consists of a thin bar -of cyan sweeping from white to almost pure cyan, and from pure cyan to -black. The first thing to do is to pick the appropriate -@code{simple_dither_range_t} (or create a whole new -@code{escp2_variable_inklist_t}) and comment out all but the darkest ink -(this means you'll be using the largest dots of dark ink). At 8.5" -width (the width of a letter-size piece of paper), the bar will be 1/8" -high. Printing it on wider or narrower paper will change the height -accordingly. Print it width-wise across a piece of photo quality paper -in line art mode using ordered or adaptive hybrid dither. Do not use -photographic mode; the colors in photographic mode vary non-linearly -depending upon the presence of the three color components, while in line -art mode the colors are much purer. Make sure that all the color -adjustments are set to defaults (1.0). Use the highest quality version -of the print mode you're testing to reduce banding and other artifacts. -This is much easier to do with the Gimp than with Ghostscript. - -At this stage, you want to look for four things: - -@enumerate -@item -The black near the center of the line is solid, but not more so than -that. - -@item -The cyan immediately to the left of the black is @emph{almost} solid. - -@item -The dark cyan at the far right of the page is solid, but not more so. -You can try tuning the density so that it isn't quite solid, then -nudging up the density until it is. - -@item -Both sweeps sweep smoothly from light to dark. In particular, the dark -half of the bar shouldn't visibly change color; it should go smoothly -from cyan to black. -@end enumerate - -Repeat this stage until you have everything just right. Use the -positioning entry boxes in the dialog to position each bar exactly -1/8" further down the page. Adjacent bars will be touching. - -The next step is to uncomment out the second darkest dot size. If -you're using variable dots, use the second largest dot size of the -dark ink rather than the largest dot size of the light ink. This will -give you two inks. - -When you recompile the plugin, you simply need to copy the new -executable into the correct place. You do not need to exit and -restart the Gimp. - -Print another bar adjacent to the first one. Your goal is to match -the bar using a single dot size as closely as possible. You'll find -that the dark region of the bar shouldn't change to any great degree, -but the light half probably will. If the lighter part of the light -half is too dark, you need to increase the value of the smaller dot; -if it's too light, you need to decrease the value. The reasoning is -that if the value is too low, the ink isn't being given enough credit -for its contribution to the darkness of the ink, and vice versa. -Repeat until you have a good match. Make sure you let the ink dry -fully, which will take a few minutes. Wet ink will look too dark. -Don't look at the paper too closely; hold it at a distance. The extra -graininess of the largest dot size will probably make it look lighter -than it should; if you hold it far enough away so that you can't see -the dots, you'll get a more accurate picture of what's going on. - -After you have what looks like a good match, print another bar using -only the largest dot size (or dark ink, for single dot size 6-color -printers). You want to ensure that the bars touching each other look -identical, or as close as possible to it; your eye won't give you a -good reading if the bars are separated from each other. You'll -probably have to repeat the procedure. - -The next step is to comment out all but the largest and third-largest -dot size, and repeat the procedure. When they match, use all three -dot sizes of dark ink. Again, the goal is to match the single dot -size. - -You'll probably find the match is imperfect. Now you have to figure -out what region isn't right, which takes some experimentation. Even -small adjustments can make a noticeable difference in what you see. -At this stage, it's very important to hold the page far enough from -your eye; when you use all three dot sizes, the texture will be much -more even, which sometimes makes it look darker and sometimes lighter. - -After this is calibrated, it's time to calibrate the light ink against -the dark ink. To do this, comment out all but the large dot version -of the two inks, and repeat the procedure. This is trickier, because -the hues of the inks might not be quite identical. Look at the dark -half of the bar as well as the light half to see that the hue really -doesn't change as you sweep from cyan to black. Sometimes it's easier -to judge that way. You may find that it looks blotchy, in which case -you should switch from ordered dither to adaptive hybrid. - -After you have the light and dark inks calibrated against each other, -it's time to add everything back in. Usually you don't want to use -the largest dot size of light ink. These dots will be much larger -than the small dots of dark ink, but they'll still be lighter. This -will cause problems when printing mixed colors, since you'll be -depositing more ink on lighter regions of the page, and you'll -probably get strange color casts that you can't get rid of in neutral -tones. I normally use only the smallest one or two dot sizes of light -ink. - -After you've tweaked everything, print the color bar with saturation -set to zero. This will print neutral tones using color inks. Your -goal here is to look for neutral tonality. If you're using a 6-color -printer and get a yellow cast, it means that the values for your light -inks are too high (remember, that means they're getting too much -credit, so you're not depositing enough cyan and magenta ink, and the -yellow dominates). If you get a bluish or bluish-purple cast, your -light inks are too low (you're not giving them enough credit, so too -much cyan and magenta is deposited, which overwhelms the yellow). -Make sure you do this on very white, very high grade inkjet paper -that's designed for 1440x720 dpi or higher; otherwise the ink will -spread on contact and you'll get values that aren't really true for -high grade paper. You can, of course, calibrate for low grade paper -if that's what you're going to use, but that shouldn't be put into the -distribution. - -You can also fully desaturate this bar inside the Gimp and print it as -monochrome (don't print the cyan as monochrome; the driver does funny -things with luminance), for comparison. You'll find it very hard to -get rid of all color casts. - -There are other ways of tuning printers, but this one works pretty -well for me. - - -@node Canon inkjet printers, , Tuning Epson printers, New Printer -@appendixsection Canon inkjet printers - -Basically, a new Canon printer can be added to @file{print-canon.c} in a -similar way as described above for the epson inkjet printers. The main -differences are noted here: - -In general, Canon printers have more ``built-in intelligence'' than Epson -printers which results in the fact that the driver only has to tell the -printing conditions like resolutions, dot sizes, etc. to the printer and -afterwards transfer the raster data line by line for each color used. - -@code{canon_cap_t} is a C struct defined as follows: - -@deftypevr {Data type} {} canon_cap_t -@example -typedef struct canon_caps @{ - int model; /* model number as used in printers.xml */ - int max_width; /* maximum printable paper size */ - int max_height; - int base_res; /* base resolution - shall be 150 or 180 */ - int max_xdpi; /* maximum horizontal resolution */ - int max_ydpi; /* maximum vertical resolution */ - int max_quality; - int border_left; /* left margin, points */ - int border_right; /* right margin, points */ - int border_top; /* absolute top margin, points */ - int border_bottom; /* absolute bottom margin, points */ - int inks; /* installable cartridges (CANON_INK_*) */ - int slots; /* available paperslots */ - int features; /* special bjl settings */ - canon_dot_size_t dot_sizes; /* Vector of dot sizes for resolutions */ - canon_densities_t densities; /* List of densities for each printer */ - canon_variable_inklist_t *inxs; /* Choices of inks for this printer */ -@} canon_cap_t; -@end example -@end deftypevr - -Since there are Canon printers which print in resolutions of -@math{2^n*150} dpi (e.g. 300, 600, 1200) and others which support -resolutions of @math{2^n*180} dpi (e.g. 360, 720, 1440), there's a base -resolution (150 or 180, respectively) given in the -@code{canon_cap_t}. The structs @code{canon_dot_size_t}, -@code{canon_densities_t} and @code{canon_variable_inklist_t} refer to -resolutions being multiples of the base resolution. - -For the Canon driver, the struct @code{canon_dot_size_t} holds values -for a model's capabilities at a given resolution: @samp{-1} if the -resolution is not supported. @samp{0} if it can be used and @samp{1} if -the resolution can be used for variable dot size printing. - -In @code{canon_densities_t} the base densities for each resolution can -be specified like for an epson printer, the same holds true for -@code{canon_variable_inklist_t}. See the descriptions above to learn -about how to adjust your model's output to yield nice results. - -There's a slight difference though in the way the Canon driver and the escp2 -driver define their variable inklists: In the Canon driver, you need to define -an inklist like this: - -@example -static const canon_variable_inklist_t canon_ink_myinks[] = -@{ - @{ - 1,4, /* 1bit/pixel, 4 colors */ - &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, - &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, - @}, - @{ - 3,4, /* 3bit/pixel, 4 colors */ - &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, - &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, - @}, -@}; -@end example - -@noindent -where the @samp{&ci_CMYK_1} and @samp{&ci_CMYK_3} entries are references -to a previously defined const of type @code{canon_variable_inkset_t}. - - - - - - - diff --git a/doc/overview.texi b/doc/overview.texi deleted file mode 100644 index 64d3409..0000000 --- a/doc/overview.texi +++ /dev/null @@ -1,19 +0,0 @@ -@node Overview, Using libgimpprint, Copying, Top -@chapter Overview -@cindex overview - -The GIMP-Print package is a collection of programs and a library for -high quality printing on modern inkjets, including `photographic -quality' models which offer very high resolutions and several inks. - - -META: Short history of the project - -GIMP-Print is the print facility of the @dfn{GNU Image Manipulation Program} -(GIMP). It is in addition -a suite of drivers that may be used with common UNIX spooling systems -using GhostScript or CUPS. These drivers provide printing quality for -UNIX/Linux on a par with proprietary vendor-supplied drivers in many -cases, and can be used for many of the most demanding printing tasks. -The core of GIMP-Print is a shared library (libgimpprint) which may be -used by any program that wishes to produce high-qulaity printed output. diff --git a/doc/print-color.eps b/doc/print-color.eps deleted file mode 100644 index 7c68f37..0000000 --- a/doc/print-color.eps +++ /dev/null @@ -1,788 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (print-color.eps) -%%CreationDate: (Sun Feb 29 19:56:02 2004) -%%BoundingBox: 0 0 382 406 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 382 406 -userdict begin -%%BeginData: -DisplayImage -0 0 -383 407 -12.000000 -383 407 -0 -0 -0 -GhVN?ED2SjhZ*W-^\lPFpqt%gO>Ot11r^Ag0fCflU8CBdRaif'=']4f9cLReX_ogSf1hX:_< -eVA_5TpAA)4`H$%ei+3^L>dOfg4BQ:b5S[8JH=8k1I[IF$1+mJ(O9&;m3pG -Y"S-SaJY@1J<5kSd(^q,Z*%EHq?JC%KS6YDJ*l@qQ_XS>cdb8,dA'53i1uHr:mUk9jnqW5pp# ->:jBmrH$[dE[no2?'gE.O;k.o=Ak/Q;.lM#Mt?gdW3qOJl1nU:D_%P8rj[Jc'1`8C%(Yoi0/\ -WaeJkN^r%lf#2KnaXL5j+$C3r$,>B4r=7Tr[E1-n.GL]f#.:\cHOVYPOg3L\LN -3j?L0Fq0DkT98ML'p#k;K\$l)cQUAM)qp"NC_qHchp@"R;Y7L1#V_'1dn([jNT>(BsCEib`rU -3J[]W3-(qt&l5\FTI'!5I+C2_XH'ru(j[NP>e=D]\+$GOdi(r8td:4Dc78J)C77nbM_FNuNS7 -kNY9Yjn%diIntp%s(hE-k,7X.SC/K^q-4[(&c+`D5D%5-GBL&@>T1A0cdcD$X4BLHjn"E%bYE -P7U$*T=kDu.AOO1a\&**9%n)QUDL:R/]2cC5_5!8?(LLg5'k79n!olos%bqg'jFpSKRfYdL^& -+8NV#h352qAjr)?7,XKm([`*oCo?]20Zgfnr'(:G?7_X\3]b&B7rQYl85JH^a5Ee?id/Q?-`BBi#ImM@eT)-_)b^XF!i?LNKq2_V)KS5$XXns!.X$;$_hf&3B.K -@?.ho+]m4PPAYk=eE;kb$5JQh,.0ht_WfIK!B5&*%a'O*1,>5nakDqD[\HHT=HGR2JaqF)$SrPIqpp_urFNNf>bIarHsFM.b.1H -rD5H#3j2PQ2PB(dh=%\i5k$h17([52#EfnR7+rBcS`,ZI775u+D\Hq=A+G*r'Y6Z0]>TsT50I -VNYKROML,$7:t'qnib:(]$;0^$69KD$:lk.m@:jr>4YT[,o6%dJ+3Rfcq+ZoP)-JL1We*2mnN -bX"Z-'L3NY#>+t6:]s=?!^HhJ!@$KVSP9FcA95N(-aA1tCm*0O_\9ZticenF3D.&I^(HC8koQ -_F8Z.3$!S[G'DrXo"IaQ&k?+eP#o+moRdpf&^NM[K");3G+UOc-c)B,QXj'+Bg6cTjD*j=]\% -?IObU5I8Iq+N(F.]=n2V4K&RU+A$:Ir<]E7- -:&R:@3EqgsM9&PiIQ&hVd%-GI!O8`^p/VA0`HC(@Q.6p,?6XVMDCZ0[E*[t>l$qW1`#50q=BD3*&D`'(/:aP -sk*7X&5l1nqY(1LPR[:o7JNb08q5@YTg1AV_Km"oF`6a=6c@[SWasEug!l\W5/V8?^8oc)u7? -IjRd/lKl!^9bRJ58)t+8B@^n4>4i1Gd;?.8ETX1;`5X,9bn^@q_)m*s3b[]6Sgl,>PfjF:I_C -+0XD^Y]?ClI9j4&n-]UWRX)`fXu:I1n8fg=CZ6]GI\^U\"'b&8\q\Hj^8Ig$RX,D^eZ;jBKTa -A+q20bob?6.SO]!6dn`aL(OA]6&8dY6J\P&1?M=aQ=Fs+=9#s%!c`#_?h)o>f6?A`,>![[>SJ -Tin4S)E"R+W1JC_S-'L)dlk\CGC-nd(Kp[lX3j'o-5q\d4RlR)AlPNGr6#2TJ&]C!USMu:&Kret^aH`,nB'hl';+mu5-kXl,c -2ENA1YU>$/Q.H4N:U#%/Dk@_LS-T@JZK6EU_]`Iac>G)kC"jH>)d,Pn%-/ct90*`(Ot6Bjm?j -SPB%;5`;5r#+FiP@1>HJnVidRC,TjP9$MQ[4K2k$-0l:.;9n3Bl:S%@nYK^/+Q`3K<(hI,bbm -jsrCHBEl3S^dOf1PCEQ%Pp\d)XI`ZIQe2ZgVL08I"FSt0if^sI65b$j1^rb\lVKs_W.-0X3Ec -HWT7@$\X9&a^Oa=q"mqRYtQU#Q7g_8l761m2G1h6!K/F!bbV$]`P4q:eFQH&&g;g/VRGgP!$g -OTP-'UMboKci00-,pgeGq`TR+%I$2sk2oY#Q:.6"hi11EtO"ic>><[d239Fg\R!pE2%XJBDl( -d!&Q^-0Kkj5%=K6@X+R!I@Q>8t=ji?]^qRb2K8Gs0J2cr.n[C\WaH-7qH`jp)fr;:DIQZ]_49 -q6#>GEkWj_)l5Y?@r3r-Q1A$#O%NM+jq1JQ3M[01odl9P+Rq;JLCdB-H2up%0`E>L8d+k(rrg -!"n5R32(INO'W.9:TqKKbV%Vlr.GG9FG3p!S.$M-0C9$pt&eh&Rn7e7rD2F>.ZNU'GKN7rF$X -bHH\<(Wcd%J;3L$DC^]MA8r=7p/%:q']AQR2A@c+C0qX7?HRS:F+k^>m^::F+;/AD?6C,e!uh -8@Zp6emnRgW`98$_UC@$ECP3iiK>Y@djJ[\i#3bBJf1(gdht5:G`G6L,C8&O=]89VCf[n!DN; -Tu<iG:L[-,q`aX:!F#`/O/$nP\eX -FV%$k0QQc$0Dm5rZEL[e4uDhXl!qCQC9N-Z@V2aXtpg1"$`K4Z^b;Q//3\I'(*:om(<$HSR/, -Tj='-k\nY"9j\eI'PI-T5$>/uOY]V&cDQKP;o:;aDQ>#[=/q/ -I]F;R!9n+38`)Pc&)//nU<3V[E7&KR,B1&nTofq@07cO?A(^/`Oe_HOWgm_T+@57IV],0>V!! -mgJV)Ja7Ri*QI$DYWmd>6a.SaodTMsM=1?+HifT@Qlh)t&)%b3h$mjSRWlWQ"*usG\"S7$C.k -5S"K`)4)kgCFFV.SgTp29\%2>j>jHD!jOXH12A/p -SU!WJC!ijj!!8"j5_WWpiq.=&N;(l3UUG!_;G=6qA?HaDrls"?LOVtK,tEVB"CYUDWA,?3fS5 -FK7W>Gea$i&cipgdG-52"^unO_&IDMG-)c;$)SadEDJ':]PPC5d@,)>!CD#bu9,L)G/T_ -SPaCLADaoEQlQj%nF7qn"@unYF-U^HJ7S#U!(O9-=/LTWTRXk*Hea@n;<8)>$eAo0/Z(s/F!3c1cm358.+`Xad.+Y+d$MeG$'L9).71r.X/`W@? -+f1)]&p";;qRO"ii@.3E%ES94AJ0V_B4*"3?sU5ud"$sEC3%te0#fti2mULs?soX448$b]#UR -eX"9DEV87]N3'g20A,.^Xd?hbpt:;.=&Ie2?giHVcD#8V7\3d:GFLnfi?,b&tTd.F&Br -/oVY6.Jtr^0G/W,HCIRk(_P]-FN*nFCn%ipmpDnKR_Y"\!hS`eblmL.e$eoZ'Fm(uCm\Aun$' -lB94p'2SBKqI,B4+]4q#Ch!6GF%jQ)NSu=p9#[TIiO]G%_qN\eM.r:i8V="t5@+[MEm48le5Y -J>2.ek+b0MaV"WHX@p>VS,4^"%q_6$iS76(bXRtii(St$`g@TSgrK0qVqd4?F4//l%Rp\J]8m -OC_cBP)n5^>m*W44"TUB::hJ?\pKmk9F:%Tu,A@4a$\2L2J$HdF)%>@1BE>ku@2QP)`.`X -e<@t"*.]sAY4pJMtrX&[R,EdTiK,AofkN9DVpRkXgbJo(e#_#J%lrrc+ -R>jl+BJAHG;5DfA/f\V.d%_]'@q`$WDL#j/q7q&DeHPK_F_"\nI1LXb:RF[# -^nq(Gn4IQ:&%haq@ZiJmni)MBH8aOu8?'6IACr,q)m,JBoD?TBo1c-_'uBI-.;n>/4coK#nRf -A"4Fu4Wb=^N4TrLk*2'R*K1GHZB'3GN*:M=LQO3D4#g[-/MkFA%(5W;(']aW?G.6(SXCN9oMdOF5,@QL=_\r_(A#K48!b$7EiL=@#1?:(A&n -I(/D8$iBWcS9<'n5BHRL>N.&L[]Zkf,5!f`aCUhn"\b?gH2X26uO<]ha$?2=DD8.%auqAIi5@ -Y@B;fe&K%*l?B)rlW'?*l-_Ykgg'UgHJS$jj4/(@GJPOu -rc;X@p>VS,6!/k3&,"jb"GJ(\!i^A1GIG"D:*75K;b4PuaS+[&1%%+[.8__E0MC)Ns^5f6GVr@6Z#dT=QV$@9n[Q.& -Z(O,Vs3dk0Z?KlfmG/ESfe`eh&).6E\oOLU7Z%C%Pt]nC>X`k)gFO2*dNcbfPs4D))s)#=er+ -2E=0rMO(>L@m_%)USF@3`!W`-HpTd]oMe)[(Zn-b@j'H6P]5`d!-E#C=K8VHOAL*W2bM_&(J4 -b.YDb'.^h[K"_BI1f:uk.A5X*V6Fm4%q2gDp[ogEn]+XVTk5GRWbR>Re1VJ=b>_M!10GS&3N3 -f:Lp$r"ePAV_&3TK0`#O`*UdDor?j&X0H37Z!I%c4TIAnK9*aYlo&n;`XY-JgX7U1^9QiAu^/ -32,@a/T4X1>f2Yl+Vhaj10DXQ"`K^uVOW38#%S]*VI)rF+`Bp8'D&d`j$DCYPRGTK82q3*+D+ --N+5tB[rt7UJ!Z0h1!:P2X3oE&WThdCVLA`@hIgB7/XCooW-Zm+a:'3'9^jHcl#.3!Wo`U5odB -%uZAa!JfisVg;T_;OP%RGFA`-e\o'(hUOF5^fVU)CH/Y`^jF[^[9J@JrHAq)ccM9FY_DsR< -LAANH.0icR9_C,Oj/eNP4e1p!r=7\n0PP.I`+0g"=u^$Q9G?k4GYcXR!u#fNe1dTV[$L5s`\i -^U)-:fMaf.m-.W02T#)Mg/"F8*>m[#o:%G(JA)5I3n1p -'g6\Ho!pt'-H3Tgj;"'1>'$RS3^7+dr9IcI3A5^6S3KnL/P]B75R:=H43E+!:$1E -^r:R$\\I2AkE8DZgF!q?h25ste\q_@M-d"B+mn6^h"$',1k!=W8RTFH&pqKlZ:L:%].B@6Z,3 -^8@q*Tdl?qD6ibBRLuBGLK>rAuBT^"ONSqd(A<;WAj5fI50PbCb\Gpu? -D6+.h'CEZt0i00uDpgeGq`TN"Zr\253VYS+254]B3:N/M9q(^0UEo+k4&^J!K5KnC#k8g'7i- -ZX0D4J'je&+iq1EF\AQn^C,@]#-Q(1rNL1biKJ7aFa11Ngpk0V`,Ib6QRFT]#u1+/ns"aTn)) -/!qr%>0_4=dk[eYR?fU6aL$V71"2jj$L.FYh*WrX6k!"<&;qZW$fMZ:D^%/uJ.MVkGhr/G"d] -li%Lh'"mmFi!2CklBkj:]<#aAAL;6\]_$ei]Vn!OWG?rIC=A<'R&@!L7A"VQ!+m4AC*iV.n*#/5B-4Amq-k1rX0d;An7c -j'E)_,[q)8M'EYNXXHMEg`4@J&AA.WI^m'.p;#pE@gE0hkd/1X&$$/Q.grS93Su)Ku4fK;WE97qio`;J_^\"/AjA+2O@gH%-reT> -)JRKaHp:+*caZc$Tj7ZnB'gA`b1mLo:263o_\bS)+HBOa=rk;=GERgqAsV:!SqH"Vs-n(Oleo -tI;.EtBUrYZ*4t@c0h9F]1k/`4qjGX7 -8NWpmA"#LqD06A6&5;mO8-s!KMR?O),=`Yn9Mg+1 -dbu;V)^S,h],/Kkapi(pN1j[7u@Btp8)GlV0/(eZg>9LNr-1/Bhm*@AD7MsAn[]CdgQ][W)'W -@_7BbbVQ$&^2U:SI20#YV<)$4M`QBVZm]nrEH&SRSb$lonUi_cRPEajrp^T`T$msC.V%?^3&>^&:+Q.AOf6TcJ%ce'd*1E]c1gZ3+INeN$]35[H!fY -]Of$NbrB,sN?5Z#]NgN_=rbrK3A$i%_EeY)X&5k5*[Pu0@#"g" -?R7'9[c*u;k.]E[S5(.`MU7(gnd3SL)B5'=YiY*,dhhu*Mk)Tokg]Q<(9t-Td%_O0]`s!]g^U -+(6;B4@UY(U&B3O(F>JP7)E1R`-K.P3*QN+-c6rn7Y`Ig:&=3L'q-isUU'DK>3'W(;K#AqNlcj\!J62A&g5,$?*3$nc*M1jA?knnE<3!3)L##Af -XFOQ,dP>X%@sn[7afqWJ"]?m)^et3*lq>,AS,4(qbQ9s=31XBkB9&,C3K[c!`N`R+cI-p/,># -J1*1ikq*ZYOs,hP%M>Fa8(H`#FQ`K%R;`+Y1Y1s*0t[bRQ2b,3oM7&Z0N+j@MOCF6!l7I;[-O -&H^d3^cu0ari4TW49t?S!4.[)PCo2`I:GX/G)g!U\Hl=,8n#?E2@M*$"j="3:&A)M;iOm[W,E -%kRHI%+6U?$nDLAUT+0bC6(%$6YTKu*r7Qrlp#>pfSEe$S(7[4V_1Xc$EM=2gNR0QCAHQ8ej+ -Ts9lLA[B%d@pt$Y:&&2;"\DDACt;`a9sU9Y,Q1t\p"R0q]6fNNhX$HUAo?B -2E>ONLC%KG@DG$i"7D!^>;mO8*6FpOKSacHIluPN(XS,I4HB)+=,LKNi;lmdo6PWDo[Vdt>;.hl:7^m;tV.9Met:#J>Xk@<_3i`m=dEI8\C-NTV4p -s=p04?2BZkZS1*,3E6#,q2Se;/bM:tFV -4*@eGK;ha$Glr7K,$JUft;LqOLCa_Z5*06=l[1!4-=>%Ru!ouqW8AHUr'(F$*IZ7-\;mQl,,W -RTscomC83#\]5MBc&Aa#H1Qk8cUX*4X8-#]4!RDmAI@]0blZNg:g42efkF[K'P01u;W(O+uuM -HeI=ch7'J*;tga//ll>Sjr2cFWif7a@--!>fNCC'q%]4h;0JAH2G1_pTp66@`>9u7O?n(/k>O -@,`7Y8EEL:82,RRHe+-,B6+O1,ZB0ZCV7?[uF\R68kgOhJ"7q4d?YbB@"f6_MM)m=GEQj$")W -&C?L*Cj:QfEcUUSi5N"*`"\'Im#8sYuc_$Zm`,p:(?9!CfOo%&t:AT6%S#NXHd9i#mt6G=TjQ -q9+.sl^aK!lnB'gA`[B$a3R4FL_C*IH$muYr9lhl2d4+p$*1$4=)!^Inl+PK29tk,R%*Zm0U/=d2Koj-r,QfVf=NunQl2"5Mkosn%i3\1^p -(,&1?hCmDj2cFB0CI`R/S9e;4tn3+Bo!-6-pD1TaIkEM+1F)R*"uMFQs7LS>QrF=>UI7hm)qT -N$n&.`dk,:k<'Zes8TOa/TadaKW;_q,3"bnAuF7ag)%sZFP8+B,5r,l!NrUIK?'D:*hn\_ao@ -mdgSrjln1es+@6/>S1!Y=]qgu27d2HE=.(fEDnBp6lH%[LTgY?Ubd5]@ICG\#M+( -U"VF`u=E:j7WIbH1]#)B74-W\..oOd/(/FL1m-jddqc8(h#\>:;A8n.SDf'Xq#jQ9f:)B2U^[ -`1IZUNoRei$rOYV`nTN5)+7s7Du*?"`rY$$H>ff$ba-]JToI8.TZoiKdbR<;lA`^ZMag.SO8V<.j0>u[Amnf01+;IO#0Vj -)\J;A3X//8h5iQ%`j!3DFKL7IOf,.ZJXNGUEfG![m#AN8`#0lGGS9Nn8o^$/d[*FC#sY5jQ;7 -+]K!376?P%j*;RR>G:K(e(miCid_2.R^(b'II3tH`Eje_1h3uqja-90`/].+>)R5YP\RJ6$C` -m)TZ29mMNi@]!`B2&Q_?[)'dZs76iI-NGm.:qi0/QqpgeG1ifd]a-aeJ#P#M)jn;25G/jkgBM -fLX@?^N(IkRMSl8EW].!ZW%gh[S;BdlP@;DqX5aLPqI61coCiAD>^P)5-L,RkE/tU](WZ>[lM -Xem+lNS(dJ85"Ek#W\%284c=6%'Y!;E0e,D$ -%c9gT-USJZpFc^=BTaL*C-rOQW$;r2$<+(sm"_Cdba79l(bHS>ZGu?1r^df -[.P@Y'qA90uqo0$`!3KrOr%&X`.N&,L@'9`hn3>UReR(ccE$.0dSn4br6l+"P1+8`^XH"_?,B -:)uVf\rXF6*m,Z.r=N]b?$NLaX/MI(TG0bL+_&"ZK<-L(2?'FodA7VW;_mY&#_V.b0s*3StMmFi`@RT-%hQ531@_3,cVNVMW;YmN^TQIj10.L%RM2O1O^>7ih-M]>^ -18pb!GC'j,&4af^QBcH[DIM`abRlAO2_%4&+AT%XBQG2.C>W8e'FIa6#j-WlN+_XOj.JMkV]& -eNg.S)AQ:%;-8C7$EPYnE]N\`YZ(gH&XGtm\,a&IpcuVBRhG54k'i<94\e^mEf,tr-gi[1Rq# -lehP)[AOW`H\%f>M_dGa2;LOF'o>dRgIO-6M"cWCi'!#/XL/;@8f)okG^\d"q0`\A -^)UPRAg(GeK7V/L2%r5buDEtb'0i3ZhuDthdG[Tb%b)W)PtJVGa+A+MN:U+>R#u4GW#_J&l0l -o-k95c#GQGmN$lZ>$t1tn?.^q9`?65.@okn;D()`"B.p];6f*Yi/_FZ)WZ%7VlhZ7KYR4Z+^ghoiP:R[5pFE`L89XemOa]Kds0'@RUHd.j-:Y1-(Yd5V,9/&Je$E8AHT' -'Ca-+I`A:[i[N;l!dFcR -0:/\nI(RFcU'K8LF@V/UAYtr9B1jC.[-f%i:/f#`ipft72V)F@s8Kr!\!fLg9J@,77O@o```Jql61"tZlZ8`Z!)oL/IJP_;M,^!/6 ->-37",<*.Bp/f@QF!OYXF5b79Cg(D?3-86H)ff=&FF"V2$LHR`,L[L9PY/)sl5(O7bCF>>`n.U2I'u`**Ni1#iiZV!V: -5MUb1tDT4..$M>f\6pWt:ema=CbI*F2+^]kL23t5GPt^9<_NQ77G:_6<&IT!M -A^O^aGUUp^YS6rikJ`^aHt_32c1bndZlV:/!>Ui`M;;!W)^6\PBVh_eqMjknrEq+T(N4?(ppH -HbO%B-$Jq-dRA3^9qScZ1U_Ztj%!p#UYuXS7Q**.cG5lmW&mT9b#W6WjG`+ZgnA:LKX -U5jTeo!T<\e>.juu^iH@i%;S8ElN>ZP+@m^UhP?=GBE?)qP'Lbk5`k$/k$Y!rQC]/Lr$`OA/( -Y0"'bog'AZ+;$XCfk7;@4qu";:(.$$W`_$dY&A&=OE#f7P&J4`.34unf*]uO(G_$Wl%^d`)R@ -aOJbR>$;6Uc;Ludo/2"ga3>Rl&4b(PF687[^=H7_BpK::"1-7n2BSN -=n;i?-`B2Rl=8<`V>8iO(q4XFkm?:@^W"pJ_B9OVKF.hc -"sa,1^77'Rqpjl9Ga`:U=D@OK3o1$mI]",nS1[;hUYEHm%@2I0o[ -ZF2,M'H3'X0:.?(gi'`Bp0ocDslD)\K&NAMu%Qioscsc*&5Pr0hbt@:jp3*dCP9":M1"0s5WL -Y->ZK9Ch2RDW^%<#2F()uOApH!(rU[Au,7p5cl22D"odo7@GPP\ImQ[VEnZZ)MB!j]RZV)FNZL3?aJh[)/TPsSd3>Iq3?$tWOeY7'&ig]J;#k0X* -%1hu5S5+B"FRL1!M=2rn)JJ9K&Hl\JtibLG[lD52a,'#3I/lcWrr:2O&p/1Cuq!H][Xn.*B\9 -!3AW66RbMLj@@NB29f*d@Uo0o;qDpOcYYN5B/RPXBb8S*jjq/==/,=95T2KW83?OT/G:@aY\? -2-&Utf(nFV:hhZTuHVAAh#sOV/lf7RE&Y*b'DNjrp7MnN6sG&BKJg&)JW%/:hRCL6c4d1$jhG -^DODuYV&E6@WX7mk@.O/_7U&N7;-%]em'&5d@:S30(c\fbXHq4C3-)lKf0`I,%sA@MkC\KR=g -A:-ur.M"*kAKEZiO;nB'eqI'U;t`@![j`"_6qN("SS?mNZp@gn?;bf@L)Dn,$Pk-n*s*5"2FX -*sp"`W7SCpX%J[CBo2slo+lf/'mZMT\+h(%Q7Eg`8Y!Y[9ZkOr6%G">QksJM8>I]Y<`*pfTsFd*50PC/O?9;Q@,(k@EM+;1:/ZdE>b43_QX`#0cJ$0(S`l! -\iaYmTP=ci9;#T"eRBpCTjeTJMbo]IGqM^0+VUP?"DJ>QEWgcq0EIe^mNHsU$i&L]^uoTgP7t -SL@X*jlU\rEXRj/nqdl0t(PM\Fb)W8"e3c/t@C%#J[(Vf7n(D^=6o7Dh^gXsojZUTDt`/bB*8 -C+^KSuJKiL.s]I[!\d?-T-9MbnDSX.f!g*?WQZmEkW[ZF/=7R`e2609)1jupI_r"bafqq6`(R -^&u;rY\HRi7Li5b!';@78AJj<\i!'Mdd*Q=JF5 -T2gGia*?k;X1][FX>(>@!>RWu)s(L#I&A4IV&1\u?jZ1(d(^I,9sDde]+NjE#:FOQN8[(D;j\:UVS-PKj&Z:O3&6fkDcL -n;0Y[GCl#%7`Q>`jb/\g&I.((3Qt>JD`Hr$TVmig)dQKNl_1YCNXjbp]OL#7'5_UaU4jDC][4 -SL"$?2R]RcA0RVQTbZ!GP]C:7f#>0UXohc%s"8\K^oQ1I^1:R&.c``J(D9Zj,aXHN(/R"n+X" -rS0(#E_&tjHE+_&`8Z%5")#.\.[g:#X49a*r$K>4pK>N\9;;Z*.qh,mmR2!f]98#MV`46hMTT -V=@uuX!n1bgDaLK5`XQTf%mr)D7;,q]qR*8M"M-J;Y"$qkBF:FcJ8-Bp.oYUE:m:s)/fV7Hk8iA -3pIQ7jX^/N1<1,]iQ?HNq8XHE!P0oq09'U^GH?UX/bOr>U;8,P&McQ`2o_G=\>&:t-!2urtWn -1*DM&(`uR>(.2. -+m5e30!f[oZePNB"Z4Ia$Tick$$0:n1=U*PW']hWl"9j],aVF=/Y(`8p\O#LmfDWOD"^[:#>*?;M,aNU\33ne7ci>!U7ReW/! -2Ee/O]NE4G)KtFk?H\@DT%22^VHLm!Q2ISDD$m_;o8K3Z;Du_n?82me^0SgD&iPXCL574=WC? -YC;Qh:D6fJsB0-bWSd?bEI`qYGt*^N$ns)[Zn$]c4/V_N9!K*Ph7$N3c;[NF(KkcI8Ij658+M -ZW%]@+p>.EjY7fEBBWN0PlAj.iM&W^BM$7T\Bb>##l=)ZOZ9.:e@?cK8NZ*'VK7gjNCCEJSZ3 -]`/s+5i3R(tT:CE(?`DCZ'Ca-+IYH,7'U+`NM(g[#G_f:.N/_l+a63dRDMEplbK5iu_#`EZA& -(RKQ+e;Gn)?kC^U;F*VTZnnD035UWf`;gg't]hB3tbUWhZ\N0.FZ9lV?:pM&r$&Y$7.Rq7;"ak=oI'P4&T5[p2o.n#!dG;f\>3Ia4=q -dG2%dN:lTY6@eC=oHEAM%cLr),n_RMSuj;=[%"]+jT_k;bQKQI6u;VoAR%8lHnf-#=7d!tij% -@mmmGW?rnJ6c+BK]84.[kXgHb_KZ07D]j!#rn$,2J`eo#F;R&n5qVFVTt_MS(LYddpGm=[Mp> -sC3<\q>R%?YAPA&bW@jRQcLLC_cO.ifuojt)X!SsNtDF7D11n12)6+$a9@T9F]iXqEWL3s_.< -^O577JW#t76qt?MZnL6/HMJ[DOs'Ti;=QN$i%pti%mI:q[q+In6Up-0uc^Dj^W+[PA]4pB%4q -YKAcjflJoC6+Y/1.*:)V/%ZX`V2q)F!oeq,#kV;Y_-@THt9@%A_*3,d?L(54E>2$#;TOGU(QW -a2 -J[aT&$#_%NDo,M8TbA9EL&En$^C&^M=LI@@$/JVFHi]Pr@6P*`)XU=q<<_D]BNE!S&,HVimR= -ej[C`(^K6@L"*ee2Ve6AU"%-9rXXG:7*b+t-&7S+b6.o@RCF;YG(!^9bSJ58)t.t#('@VV(4& -LJkb'B6\[-:U#_j4"@4gl)\`d`FQ\7L'dpA(\d-.rY)7eA^l;(pn8+baTp`g?,Al6aBf1"`4R5PH"8st5) -5@+aj6&&,Aoj7,=L8tDT2Ag"TOFrTAXX>pCo^o\DG6P8IW<:q]"b&KC&fC2<]Gth63JM$d20s -=2XY3g,3P,%-'-W4p8b(kat9'51EZ.Ft[ru6+[M)4/(=;oera@U"kTaNDQ]HffI1r6-3l_$;n -/3dX2`[Kk(M\(('bH<<>A;gdCj!Qsk<0F&W!cP,S_"-[7koj;;N!RIDpc_RQ(6_jka&k2>;#n -+8>Lj)$:k4UcOSU4]p+*&fZaicf5J[W'I3RnX;.kh";@5[PP8f?gSYLmFWII]K/H9p^_i-*L< -h83plKYKH)Xjju9AM`DpAPsY19GZi7o7'n+I7J\3+4\0`@E?=W[`'-]@K!6-Q+!YGcTFLl2i& -q1gBt0TdoKEIT_>Z(`oru+5CBJnKd"OhF?@&dA,c0$G,>hWi&M0>IAQFl)^aL_T>F,'_>osm3:8<*#HtVr"sH5OL^C9'aY9- -f+8rhp^2V>0mS\qEBN,/50\a4H1Bk]&/ -), -N-)o4'eGmmq@WlkoR-f4a"Xp;fRf^$kl(SYpX&^GFDjPD(><+cl`4\_$-`dTT1?f*:d"pB;(/ -#hr,L4,L9):NO$^E"0fdD;0U#O$YV7fQ6pDK7))j?h@a)o\JbQbneMGpqLlN'!n$On*_Jg1WC)Bi)eB"; -?5p[<]SM=5b3RWum?c9`0ih1WE**0uEc=/DV/SJ:[=Ul[W+Ce#+mk6VfeT>G496c4?Rp%pCjE -)q"L/RU:^0AZ->WGQFi):d+u8%.[TO*J*PgC8rDATW/Wf4fI!>E>cne&8`oU;f%`g.HX\$=]r -_AY_l4?`dEH_+m'Q-$SXN_lnl$iAuE0"A7guB4#8dl8!tE1g<,0dV?WIRB<%:i1Qs.L0_0dGM -(U.I9QY5Na1.H*2TAo;CLTuTqeFu+A5pOHOq@jBE^o>>:W@?*_bu5iGuqkpPmiKe.VDSrTTDG -?(Q].Mk=N*X7j5HMQ&r.Lac0^p+ZH=6^VV@,)L7o'B$FjOpOq(Zt56@/q(VpY>^RSQ6@(=]O_i> -&:*:d,E/Z]H7rh,BCuJXXK<3T_Pc$9iD[u!NR(4c.t?SXLp.G"@=a+4 -$a\&Q1[eb$MKpT@PK_dL[kU+ir%OJ>>deTsOL]i&HC6QFB4B0-S:S4'k4Hl@0WS\abA8-(/^- -+m8])i3QQ!E1if]HB"Z(12lC!bh;p1,aR;-=Z9NNu$B"FLH&^s(D"\^/56nX$a%&jLFG7b?03 -esp]5p,7%n9a)7_n*W-]Gg>1=OCoH:.TKk*Ctp-?8(A_SB^;So?a.c -F=M'iqiW_X%WY.nm*bEJ:Y47TL@0iPGp(/"BmJR9j%dXK5*tX>j9^-I#A];Doql"PB)s#;PhSX>q#h%#n`2f<$u3ip*5EXdYR\9o0\0#;@Yab5QgnZ;gt(SF!RN\@* -TiS6H#[@sE#9hfm$4oF>:)]J5BlZi5:]_E\BHOb1@3%@9i%1Z$NTF);<.OqZ<(Wsn)jWF86KL -#$V4_^mF=2Ll&qqq/_(b7:<@&Ukp!WrVO(-#Tm-dSbSSU!umC!Y7ok@gI)H!6PK=m"Wtqj6!* -UH(hCNlE%J3HjM_c`n]b?&mVigTkY;Z7/F@QKg"?ZW(M8bYk]6q%E"[.*JhQ6YV;*)+lZcbYX -g/??`A&IRSM4Z-nBSl1a-7*00.,MZ]3o\fC]YjAY`?OTJfuWK/ -Ee%i:BUBs&)Wf&@m[X:(OC&7)dhh!=XVMZn<"K!gX4LX9f#OYd%H,n!O&Gp:uZa(lK*9%%St5 -dU]q(#GcV8L-.l.ISRQF8#Jpof1hs4]^66Lj43.+SJ_Jf -a"CCYjjERP0)(VdS%_hICd==7Joa5@d=7aPeecPHF"7We>hf8WSupp^tZl ->Td^&)*^k`MmI^V1D6u_-C*4B7.T)%P8k8d\-).OE_QJK839/&UK^5"/NZT474 -QnB#`+^P^>m6d&`U0p(F3Nmh-WZCG*m1W.VGcDDF90re`"]MDOlas\!%as4!K:_mL,4\EVn%T=!Pj^!a2/.YSlU+f,( -OI4AS:(B&tpepT,i/Y\i`LgSo%)P15RieChN-Ol^)o&n%c%.AYkT<=`(k*OB%p"'r_8RQ7#&p -7HH8@TVcl)@V&'fPr7q=S]K?'e?? -\Jgn`"a[:@qur?Q1-669)'*As+O6W'qbCR50JoH(s+Lsj[,8a--e,_3^Z\t;e\;AS:!kSMRF3 -hP8m?GqLFk7#8?H2A8e"#3))+G@l2-VFeALY4/14nW/\%K*a?Kt$<)#4l4=n%.,o'qS8hVEh7'O4W?P$jUMiOeT,gHR.6HJMJrJX8&bLiDX!Hn1!N!".s-Wk#V#o1:4uR$ -j.BmVE(3Ek96a$F='#9V#:=2$'$WY3)47ZQ5Bj:m#SG28ooZ_#`\Rl#dZ$TI>Amel@RLifs\\ -^GrEoE';.D%`]I/qWLTeoL@Q55q^D'@ekMMZm3]1YEOH*H -h9bBUDC83Dd%H)m*Nup2j^u0(_=MC]Dnn.YaHUpIJ]Hk3>_d&3*j*8-.J?eN[fecBY^I6.@0r -R#X+X8'pJ62-X8(aVn]SZMgS&dKp -7.DEppRhXO)Zr8YRN9)d__f,h3;tr3N9,q$.\.V8\&:JW0jG2ED+2%BoNJfD+*9a!0KlQ=sco -H\2XO(,>aUgWW5[,=6bW'CT#=cA`K6OqI8rpte]W&ea=t&.q;CbL!6a"83C-9rFR0p>o4JBQ! -3NDE7Qjf&*TMgY11ZTB0(#ZA^@iP$oc`Kng)431K"$"*t -TMMUNI+A;p41D,H<_3.-e<0J+FXL=dSYml\kd1^.R*6\D":Zdd=*_aiN>[9g;tArDF=DJIs+] -@c>Ab":]e<&c:uAGo6F-8q(F7(r\F9IY4A'$EmB9-%Y3mp!e#&nMS^@ -Q%mbS-#GWA(4rCrrEoUpOc9'B-JM5%5fbcmj_)X%"/8-'@f`X:29<.4.^B0nRg9bE(l7d%B*:cE?u)F:bB^tFca\KY6K?M&6E:q"PYFL&n>thT44mT:GMT^ -Hu_nm\[]R[L64;[.4uk`89-W)ks]pXS;P]3j^a&YO5RiKp;W4pBn$**>kN`0A]I#R`nPhfa70W!B(D5G1nb$QR*Yl#t>6 -PNk#@"@Iaj&-@OARJ9LPed$5(o-ja$ptS3F1C.`hM4iZ^2ua*_P[lW-ZErC+,ut:"D=iM[c$c -h1]r!#&#[Wb1uV.R<'>K.)bN7gG2bq2T%DtH46g&?9J^2t4K1eE"-0=!8;V'b*g8rhLOCpWe6 -oa"40)11_6s\e&S"`W2O*\[\k;`3F8m2O$tF!@;@Fk^n:6&mBB,MBd;tpY&N]B#1/*%N[NJ'V -3'9uPJ?U -tVAJWj'U\$%:Y>@!ib0(LnZ2>5'5>c*k^dNR:LG=R&1GGWOS\Tq=^5Cot(nEs?0aF6kTDG5Ri -g^s)/pulufa4/d`s6*64bEF0GfPD76YIIT>CB>9nX9bV,@9ehU)PKPGeOj3FfP8*r_-pJq5moA"8S-'B)oXcF]STd_8!$*(L)Npm.[g;6aN7/(QGn;E3dYQrCqH/ -;"k4&2R`S0Q;KQ":btf_af0_pi+fB1N%Tu_YXhU2h?1mEG>o#O5MT?hR)56+hTi9A -KO[9TePGY&^U40\Sfp_;:gY73ZQ]0a`c1@ipgVO2)qC$FTW,P+AlU_!gRfmXi##oG1BuU'\f[ -m9nFr3fHeJV&jF9:$(k\phtU`Mb]#;]=Gi4d6O>B`)2N8jb390p@8;O?%!$B[p&JrYNm;[t8* -_u`[lO4"qq^U]dHm[N6/tZX-J7troepuP;0RZH@CBHSMj7!PC9CE^Q&SkD)PHXV'pg?KRIt17 -9W\2a;Br6WV8U0l/rIDU\XoNj$GW6!7spK?\K!fYTKS!i&nm9bC_UO!BFp%qnifk -C#]?oKORhJVXj0^VS3Wc,m-S8.'iPY_fn&'3Y*&jSJLhD&'F>o6FnPglNFa-62,OIJGMM'0Pd -boWoO#Go.(%s(RTth^0`-']]6[9-`UtA]OOT_.(+;A=,-;AY%D)D19Y#4ISfQ!HC/% -$/$?";%hS$#S/RHcso?D>S9jUY=<:UuV\hbs.WCV)"nMUgl=l!WW9'S",C/O^a[p^mZ]`0i`V -Eqgc0pJZ;iJTp-N7r^#;[tA@]_cqT&iPXtf]]R3a0"gPdaU'B8EFK>0N'M:"Eu$l"KXq1Hdta -jGOI>U&&Pr+nVAkT^EMO8'FZ?0cFZU)?imD@/1t]"O^'7Q8YXaQ+$LEpc7if``fNs2I;M_?W= -b9?_fI4c9UlpDTXW:?;F]/CH -n`h1KJ9?q3[Eh;;B%ZAr9>^p`9U:LputhaPj60hFp5#_!?!Q)T=48]H"l33P=FnMa![#iWV:% -/j/=4ZP08Z8)5#BNSnM$N`tr%&=sk,9cor\j)Ga.7NCj4Tl*iq;:UL*3]sErU`K>:Z*,#[)XL -I6:BSNblr%;j!p+HeeR=pU>AG@E@WN8B8[,H$)oPi[L:+)WTS-)QKrLMT=6_tQFgTdXk]:0tp@$_cn)mD\`1*s@ZYYC.[FV)[!V$T4Dm4GQAh-Rk)R%RCaKC!Wqq1EpF[&c>@[iK3hm05NRL<*\g"8TUNlk.r3(Nd7XDaf -6RC2K^qC\gE;:<6P'udA\r$4]Y."%&,3oX6_:ZikDi+NHn-1GFb[8GG,nO*qLcf&k.Nqaaiii -jAW>WCq4o`V;7EF91[7e!>kO'3YD_BT08hhQVl<16Wl6q%X[G%6RS]/q1e@@%`kgTdLgjio4& -@(R?3)mE%jX\+B`fHSAu3c'sF=G)T2CoG2T$.`0cSJZ-8p_73aI#>K7_Ir[_Hr=3s^f[+hq[> -p'&8!'+fm-?MTkB*Ydr]mql)*9*gRfJ!a^I952Hn*[35Y[\m/<43CGZLKfM=jV]7-XV7s98US -WR(XgUc&.'q77`q1@nXfQ`FV2C_q13(*LUf"Xl2.Fu4%WJ]4u8mYug$PX[qq(i^*V6G[U.<.& -&K/lnD:mF@I!XI_0/;hKbGVf]J*$ftqikp3up:ITUKh;S"-VuOX]jo\VJj!0$[UAh@_unZBLL -"NY1gu.O4*j`[NA3jDtGm94=Aa4=:IRN^*eM],eR3&7K3%\MfR&nG!LbXiG_lV\]1g]nfjUPVMqYAef"i+BRm*P.A#_b&j&rCNW74Y;VS&&a.`u(+m -7W\X_!9sE4N#=:'\BQo8l6=WO&AeGm)`a5%_FOLSUrg%E?)TbfG2E/+El%=V]S!Jf\sdZ2p,D -SGG&aRA`ME,L@$5K7^aH[M:Q1DA6[-'PA71G( -ISTe(nT)cHVi-agdXICg53:^88Q%*FD[q8Ze"iT3r_kmi#V -6DD"9lY!,@T+,\+G=eIqB>Jskf$"M2S--?JW1>q0THTPfJ%md8&NdplZ2f'0D6Mm_qSgPWD`=KB8A2:aZNTRoE8JH>m5"Eb9s+K3*p.FqI,NgXDjh^Xh,ADVl'S:&:7I5QUDt06DcU$m*#dm'5C7bQPF3a2 -NCJA4@!Ob!r$<:2T)d;':U -_j$"KGYZ3f)VYQus/`./DI6C9^KZk:<;kh1d[%FB#Yk6C/$6b=E,ld<9bc0M$*#PC,7XFk7>P -\Zsp$i*uU#p9nS7KBCf";RW9GbZ!'\TJGYGcLKl,\Pt4mt;1\LK7/%n< -#JiQjgC=1#pr)ZZiSFai/i\#`@OK0>?u-';b$clWV$o_&(tak_m4`I2BcE#cd'FJC,3VJZg]H -:IBK)]71Kl`2GnW#$W.ep;#h;Bm2aFVKo(Aqc&(s"nXFkUHWn'K\5_T3t2(2[-_Pd/YiD[u!" -/#K@5+,Du*\;=d``RnV&Anka"ZS`i^bf[eoM*a!jBn*mg$,lk1!6!'r56\7/\EgZli"3adUM? -='<`6uftcGsrhS]f*W/[Q*\@h<][/un'0A)L>g:S5Gtu=:-!M'G,Nn<;^+86C>.u;ZWg^+^pe -iDF&G(-,lU6sD=Y&Fja<*_9#Vo;R%O5s!nO&*R7(=/O.a1o/IfR4'i-c;W$!\*&*l5dDN:4g> -5)`IX=oh8"LA#(a&,LIe/;?_)j"Buj6MF7=GG)8^\h[sBd(UO&gX*SBR]TDEd'*\Rbtr;4@M@ -fhe-R;QLmed7Y".#'8CjJD/]<6@I+FPO.C)S@'Qa;6:Mpo>LIig/R>SW]TpGYZPmHFCn>VO"-VI(,QB,]'F?)e-NbcBgtI;+S6JcQ`B?EqRL9K@DV$NZ -nBYU.5eZMVs\cHP6<]phJ`8!q++f3Wb'N'8J;k#\+)o;@RCV/-dm$(^;$MT*4:H@+l.O54hgK -])qiBkhH9rDJ7"&hhBXPB\iba3RhVRfFHFi.(;MdJp[sk2FFnZ2*shmU1scUlVXnsijC0JPjg --99)'*As2&Ctc#f,J76ZNI0u@%Kd08A70Jpu22!7$71W)1X2r&-grmd/7-Z'D'SrAHoEBo?8+8O_4U;"nnC>E\#PTs_Sq]UeM5 -(o;$=gI\WIa^K=<>ME'Ea-`0NGqkKq??3r@%:NF?Tc^5%lIo?@g\@B\j2X)!YC?fEkP< -P\![-LO:'+[R.D+24GcFKIS,j)c3d\icQYR$^%*8:Q\YoVjR>t52!^@8]I-R0HT6P"\&P%cS@? -%TSN,;$omLDjG]YY2VoM:?c/D>ns4uZ%W\kI'>==]9UglK7c#igH5E]0rmJVu3Y#kLV2^gGf\ -=?:2)M@JC?0Rg?<#@G@(2XBlD^,TZ^+rhWN5//&tZ.7S!Yeh4?XN#Ph<>SO01cWX]>qZL.W^`gb:Eu7-%Z$M?k"7%[DA/I@bJZ$jr$ZcbNO2H2F4]6 -ADK)QlRX.VNSmA"?]TQNJfpH_^Yoj0KAL.Vm9/gtm.?B2VaODRFG#gt<'g'!6D'cS9%?c&]h/ -)aFNrD.er8Z!;lMX`ucM]p(VGX'!b/AopFGo3(2]T[n[)u -,:?lI!>[\MNaq!Mo[Ud*$mljN8($oR\ndsg!hDiS3t1L"Zra$q!1G!^7KW731fQeA!Tb@N`/s -FUh%%NK:pUU/&ZW9)Z3_6b+l7aTFfY;=.H+3!Q1-6brYqKks269&@3WY/"i^V&c8%0"Y_RG#( -j'e,P&kg'Z-beYR:5rnoNLGrjBqkUlK'TRSL-CV]P6:l(]Vk2f"j']8$s=Nj7O0kS+s%=(,`9 -RE_s^U,qge$/*EaTRUuDjQ6n&qX6)hW%@-i\bR/^#!FpRk'niGhq77N3b3@*;jrs7"QK[ -1ie#'8&YT8)f_Gi+-X%G*$ghSqqc`o"_%$6uajq?ec,A*>3I]SO9<@$\]P*6)X=;hse=TpMJE -.HkN?I0/e+d!?PR#GJ,KqCsftT\9of,nt\Lhi53QOR5;-)5Q"`[2"kLW";;.&S:8O>$JkAa=? -.IbcUf&:G0n.P*nb9@n]=Y$o,$&`;jDS]KaYsL\IY_FttnrTUk[4cAaS59YZiK(A\7"mH<(3P)]B3eH+f>@'n9*/U>T$3#O?Y(`lkdVPO_U/J!SG -daWJGXQ.%/@73N*AFsDJ;\Z_.C,LqXhQ\^-OW".c^&NkiZO5Y#0mmD>(i'%NM'-*o)Tu$N9(f -Or*D-.`bGnWQKA)K6:.:GCHP6/`;k]n6*cU%R^3pWGc)VUs"IhJk@BKcLB@Aj^2TaIeiTmR!# -I?7O'D@^9i:pU8P1/r+C7"gHB-%(TX&jF:i5O^*Q1]O*B4H(s/@WI$V!#K8cT4Z"E"P -oNZj\t$OcdjjB2[CdjJeS5RcGbpT%@U:["YDANur(4[GO>e=q7-5[k"sgoK]F3*p#jW)h`8$^ -KleqXKhG<&n#?Nu,+(:lIj(C'sKTX`f^'DhC(cmA%7eF@tZO3R2@=/5A-dhl:oIlk9%c),,u6b3A"AWU^s`>48`.,.S8Vt_b#;p>1JTB.nN -8S/d,M(p%0_[o`S9Et9"QAK=q4cE,*^6?r97dRd#@sF63@>:il=u\af\UFa/kr3\7`#0eJ##9 -BiX68j[H?=7E3RpT#$_:"6C?SLCdE%e,:+0gXE*Q.B4b&f<[$EYH*3&(C$%K"O$$L[:A8b=O4k4N1n] -;d%KhJQqtQJ#if.Q;5*kek`t@Z$+^esb0bYXX`\<+)OdEtf:q5DW2*62K]3!m'%H<(X9(8++P -haO*KY)-Ka?[4X8&bHiDX9Pn1!N!IseOVAg0p(QsO/M^uR&1dnG"RQt"jmfHasM7W"*E1,@(# -?S2W01AAGuB?1dGCe%lnBI9LsOk\[#kM&m-+;UaGmQ\mCASI5?FVk]iI1>] -+oKTu1FrZRu;Ou>&8auLs2%3\4Er!dp%EY`2g+uP1p!90=W]nGlN#l]W?'Dt>p0#DCS]*kbLE -9K%(M=E5QVSgJ&Yb$KD%7@673/bKtQqtWl/r]7lkA>=U"oTD(Hk!ZRTm[77-dX>5o6@JoW'$0d?AhTrh<:,@7$l)tihMeb"-%(TR&jF:i^[T@C\X[2J'q_<.1Eg?GQk -&WE/5t"kHC15^""+bG>dQ;)@r.C7@G\IKC11Y7Oa`%3))a9]@`ZW`J\`talT*k=3?83*hJ&b" -KsOLDd;VQL?R)IKoI>,j6'%Oce^H+F]9Y&u?.HS6TsKo3MWlPPUkgs`S.P0#jDDtt+u=i#FX4 -&E>7eK*n0!>]R-TD)&q";9It7EC\1YX,^dL-$047J7OUbJXLZL<#Bef*3qEBSC"f>lK5K7`i$%u:OX%N>`@>AZQUqQ0G@i+QK`*IoIr/AP`s3\-LH1g@q([Z@4k_$[kK_]=? -l9K12:FN`/'Nf"7L@eXCo%qGBF=.)/NfeKaUVFf5P'@\OHd&$n-Bk6,/qroph.aVNsCpIFXjR -cs')FR%A>E7/T\K[t$*lS]FML1P+%8'#,YTMWcb2^EN@[k,uNb#i?AA0>i2E/i+J3@,cNl?c8 -<4,@.O&%8/('^;PO3I@n<&%]5:pCdlYfFJ":oK2+:GNR5Crp=I^g$CY=Rjoj2[TqNO-VkJJFM -C0O5U@'.7O.k\J81RNE)j6bjfFG0bKMPHG_P`du(I!OQI.E2#N\M>Y0#[)XZN4ZN\MVQiLRBT -gSP2iMTq)^29T:ebbbULq$Qfd4dEb36'4rkc(cO3f@'#8@4n!Ua^5c&BUMYss0[dmd)W"CKgr -Q^WGEiRc(m6[Wc_-4)[9Sf6^7+X+c;cVBAtYZ<7(ab??bdQ?]uYJ\E?fT6M*DTeM5VG')hMRe -])hqMnGN^_27SG")M"Rn':1Cj`g@&W7TdEZV&Mc<0Q8(]?c&mskn=o[Tr/@U/^U+Uk@s/:L%Z -57)pkTOo./1XK_bfijA=Amq(rd]6N.,Q%RX9NRR\OWLT8%Llp=,Y`*6*IWJ"(;q1H&i7R2KVjb-Zle5sFYu_d94a9UV8'121. -%Mb-&RFRXjA#qZg-9XJcDM/a!bC;q21;_b.[9Ym*dpZi]^0j;c!P`]]M,`G^nSs]8p)&=qXA6 -?Vio(0rY6"Un3Bd@R@mRG][n=L!C`1.is)gl/b%`A5a>ee'o'baY&IMlX^0Ofde"H*jZhdYL_ -oR.2?H'l=!;2:`=d/>]k+//9WF<Srk?;Y*E^&>)C5)IX/.DTppghZ;V/GfSbaKB -i^]f.leG`iife&0mNMm=iN<+VP'=kkc.XDOA.inN;-35kepHU-jqQ%]RB'sq``t*:;Wb!IP;$([S=%uMAjsoNR2%E.Hj[Ce13'+a8;%Q_+Zb\ -R*<^"/2\#don4gabKR4?@lu;l_M,B4=a-[Sdf3fVPjYDQCU#1f8'?iq5$nuk"k::Xu5d*Q<-d -]7ggPWEqBRLuImm-J&e8M)?e%Y7a%< -*"+9%?=A#2knPOH\@BE.$6q&0X`0uL5_66F:)E+CE2l09JWg8k$a^X.>2X@NecIE,%Mm](?uL -VY!_ih:$T&RMhDao5)WLQ)?B57@s'4lgpA&=du_J>+;RHmMS!:"K:&-\h[c=i\%QamEQ\N@!tu=b+33"N7Rlm:'c%1 -[%Ui`FI=:nDN#tagcA6Ccn4bjUet]PbTBl!G(?aEA@4TV]j0T$ZW:>$5hGiGk,u,q/6B:)K3$ -uOA20_HF6WH)g_'9]I/&ojiC_pO'7ViWDc2[I4V>aa,T475'%(331+3*QG$FiZSZ6-bgMSaf+RaLlr]u76Z%Qp)7F).PbB -EkFde;(WmXkDWCTteOS',5HcXorPbqQRU*R_#'ZDMe-RhYcR%tjma'oO`$mI-R'*uT4+,)q`M2s`0L*#P0\n2Pk9K4P0eXghiVjWXOaJ04[X]brs[(lYuO"+<*ho[%a?'-5f -7BPkeXa`g[E^9neq!32(k-Nk.9mA>lV]4?'O)l2MRgLl.K -#0$T!:C&H%tlp=Cts/ZT1eDkfIfo94sQS=k]3U>N0=N_\lW6Zt).`Aq-8_Bpp-loT7',%4QIs -W)']D8R7M5,hjBEjT1h`e0LtfY]5f*74R=s`$pbR5#,7>[4t9`XM.KPI9&fdNj:c>;1udl"d( -q8jq,aE/ql@nbeu4VKdVhY+E#H?iQ"Y7`kD0'N>jKTGJH6?b;b6r0JJ)B.t4qba!#gpJ;\h0Q -uTrqYDh]3_&(r&9TO7cB[`YDMro1r>4G?DhU^To2-t(6b::0'KNs(@j`n?H:Wi/p%1Ys,!\@j&tJ/>niua`&^sB82Uag=*DljQJr@Ve -AfPP2p#6rCQ]HTK,;:K#U4t(>0G#50f0*FYRY"ZgBq\U25]b';7J(`X#T=W!lT:VYi(46^3:, -)ko11l6%A\XIQ25T&oPXbu#=N+HXW[%_`@a.[,#EIUU:bJFne4[pY'Ve'ogI_6\AIjGe!i.W -ZYB;?@cU,4B7.aA<>B8>)GhNYYTka("ag%=W+Z*Yc3:OYuSZ=R/8!#jB(kSAh:EK:R2A]$tM> -eiH1N[1oDDCRGqb7p*=KHN]uB?K%:&VM]@\^5L/+&bqY[Tdhno)_QF1;pXg(T/kkY<[YU+nauLpQPQt"(qV2pLJb.Xmk9ppdE*_P7iG#L088f -,IU=RN!K:C8*V3:`HXiK"Cr:LQ)2OZ9L6@1C*e`76kQnY=us?8$bN_sDusJaXr41Ch;>\jl1s -'qH+f3<\.<54-6J1YPN92<&E_R_/+(*q+:3PR`[V][;bk>+ocP9,bI9`cDTf=5fMZ:FT*ja,r -D&P+el[&h3NS@BTgn$C$IRXUJE+p_7-_I#>K7`$`UElmb1:L,*")1[pL4.8D8TH,-B^SVs"sd -iP:O5"D@fNmJ]<--X1Zqa9]Zd2\rrJ];sRk1CEArXM$feBLlQ__rT@VV1%,ju1a22Z?.1S'!0 -0>a4,T]p#`d=mM`&P1;K?R:)k^i]gO_UZcn/a!_eL@lT80)-BhA,]GW$_'fN)\/`G`3W.sYO$ -7s[L!bl$(CUdq:#P>WS0(,=#X5`W1CLQWpilc\oqB?`1F@KWKVf"CG2nf.%@q`BLY&qYV&^pf -nR=;GfAO.WFU`S!Kr:06;;d6ML[%\^_k[78]sE^#U.Y4Us6G-u#="<;&<_d0OG4=pL):hbB`k -/!)q[u^`G!ePCYcBqlUt7)'"dHu_(Ai+?0QO?C`f7[?+]YW\CE3M[90)F45F'I[6OcW[M13m/ -=Z[W6eAqon%Ef2gtOo]\T@ec9ZYGG1NUl9chVS+ba`_]Z(q@[q,j#>"ZaZJ`gf`Hb.rrRQmVX -=$H^?5"N]bu5K`0C/brZ5fl7L.iMk!_0ui'C1e-.U_W/Q#\B+B%4FD\b0!P!g>DBZ^/9d`FNm -hhDQ;%Ht4N3&=XRBfX$#]!;9eWPn=kU]P#(>=/paaP"\?;$,a'!_I,tD+n_)4_beBV'2/84)7 -6d.X5h#5IRc`C/ZI)5FjVZ$;pp0G_:f23J>qas^^JtEf'Il3N,@;-m*$a;$$$h>u9#P56`OboJDQnJ3E%EZZ8"N]aeYPc1/s0sA -IX#r>dZWB,2RAV\-`$ft&BFM65,*.5oNXKYfcbi+4E0dV=fQ*F-#J#234&3&kT1p]cfZ/_b=P -q<5*c<]7e'4mF$kEcPFau'A\G%7mpN&hHRsWi\2`CB6Tpt_)A_ktnd`IqfXQ -j3T=5;G'hj:EXA,.:N42A0#/8\t?k:CN0Ra5*CO/kHU_/:m_`OtT^rIikKbkd\E9hbSCBoP'u -E#l^.LAGn;3/5"Ae.-!3"hZdIRa\2V5ZL&*l9f+nhX&8%::tQ\^*EDQ)_)>,I4JW<_9;_[Fq7 -p3Mt(%S)OCnQ[IhZI"("=J+1ldNdT02=*X-gcX,Vh#Z(Di-\g= -O*K:Hn3lg8nfl;c6K0293"/jf*c^#7"q[IcDE^pY0]@k]Q`in(BanfMKlen'RXD)i5%>G -W#6Q]Y#_(WFjC+%RS`@FIJEZDfENsh(tgrtiM\UI18f5A]Cr0D^_na%Y/s3=OZH/\mPcdN_?f,5VOAB2/ -q5K1MfH/Jg0^L9bgp\&QM2g9AK\W]b.f\"#pY?9]-\i+Fd`0pe0q?nggi5QQ/5%DQAD)H"!RpMIl4F]_e)T@RCq(%O -is!u4?(-`_]8T7Vp=nP&:;aM(hD4uO.Tt'$+BU!E"f"f]E=n4Wif5f.5/?7[/G? -F>mQWGq\'6E&=p1qmP@)dMi^Wa'ODP6>WT"g"ma77@j8k8FD0V5q-Os)r-)F#=Zj8CCo_dbiS -ZlU]4t]7oEAKi%k6G>,`[fsNu$8'u+>Uqcm4?Z?KFI(/*LpnJb`n@o3D2X_5Jn>lGr=SmuXeZV-\Y3&;UeqB -J[\i!*4f8)Z>\2i`7*E:54C)+MFGX;o+"do\>T(&_7kL\r4Kh2T$.ES"&=4+b+'/3Se8X]X#' -`VYb/#<=l.du6AXYc&-A[pe5rACk6U/afRRr$oqJN3#apgjjYbQs5S2CGD^q)5W^+K%\,1\Jd -8^OC!_\"dkmBg[fB2%]3gt[S3Jg4t]7oEAP)bo?RF4>is*U0E.O*^>mo<*$!t;dl]A#hNKemf -[\1*#!9EKhTIgM_c26/#LQ+CKYatI3XD?g]7b0E#Wh,Kjj2P:!hIFO -:/:X/T.Ts3BV&NP-9,=_oR[71L,$-qJJl44NJpG>ZI?`Cq1[BL%grK&P9Y:0+QOfJYIYinZ]HCP/"Er!VsH[r[$1Adun\sjR1R@_='"ZMNc*Eh!U23+amA<%jT)"T@fh@ -Sh@`nUU=mDn!Gbius6DTq@`S>4.bJrDTu*5q2Eb\k8`I@.DIZZ]eY1M/ORAg:o*6i'iZf-.gC -kr"i*Kc-@7I1rJr_"7uh?B3dliq>-$/&ek.9In,ie[V^e[h[o2!i4p&/IuPUpdmAmP)5fA!0W -DtOF5j-aRJ]?`JYu(c]8JDNLW0qo'Nn2-Vobm3&0.ac"Ko!BQs47f3aR[4$MBG1"q(e[&r`D_ -*aRgZN&>h?X3GKbLjPT`qFd@[WC'Q-el\1S&^td`Yq&[CY3fUCW#6ElS&;3GF.3j]i+Hk/+:, -tjfQ"q]NKOAND3K%Y@"8RmE59_nX%G>?X,Phr!VP]c]+8R4oY3ij,ZAfrlCkl5PXaBKb&Q<;# -(!HJua)I^UiL/X*62,RXJgMk(:U`=cILcIl,Kdh!p0DJ0jNAVQ9t$?KV-Om%ukMs6*f*/A/N@ -4L&EM]"'Xn/.:qEpTj#FP4S-ln'(UV^R*_?jlCmM?ZL';Mf16&D_?tHbED6c-C1K's%11ZOF5 -j-bs+U">2$>te##p55',l1fs>>;R58L4]Qs,3cX3na_8:m6F)l::04);5l-a.dQK@;mY?8&=j -iWk_giH8"@H%1ZhuDVe%mKX46`X:lIe;#X++*@ZTE"iP:H\0cP>=C-f -&9/"!Vo#iulkj-j(J+_>nJ+]jLq0]p.?[mLa`f4oNq.=2Lj]cZ:%8-S:2M$_fP]OcV0!o[tj$SOdio#l2PL -OG6iW]0DS.&Ak^9YJ*LHL##4<8ru++&O@&[G753I8a(B!_,p/%;OaO5AGKn0Fo&5W?R6u -hr+33IVeEdNG2bXo"'IR_(Y\/d'Bnk\Y;(7Zh'g*_58JZegjV,!B?\i.MO?cs:.5#]u/OF2_#!u%:t,o;cXAB@=Ii?'2TEN2t*m(<`_[3oGW:DZA#M_A-=P3/ -4U)#fab9nu+YV$&odo[IG#3@O#b&HHM@ZlemLqDg02Yf%@BP,@HeW,!]P`!u:BUMlgdis9YGa1pjl"bF:[L.F -MMMmMu*SN'md;\=FgBLk=QEE59?@sC[2L:UI=M,1HZLkHD*_3/(fL,tV-OdpY`51ZbtL?'S44 -,Blg\cHR>$6_Mt[:ZV(I"W&0K&e/0E!49Q#iQ&PNtB/?,Te1_,=k!b#Y0u(KQ%$:oGY0-8RA^ -`,D7#7er6GgNsSS-D^i=g:^6M\pBj99]559\),!EX:rcI$o!+/"l+t;S_SM.&A\9B4C.JfgE* -PRb?'jX4#Tf0?243#AjuJDn'$82jRg9Iul4d:[A*+tb%Z`'W55A$mW(q6%e#4OYHn<:(I%2C\ -I*C(P'ZX\('Z_ZgnDI.OXB4Ks'Sp^,Qbm8eq9\_(4sGQr?1W'*I-A*Y9B3pII"K4&7:_/6,8, -fFj>4mZRgS^Pa=K>[_]t[Vndu0rnhF$<5+rFgaG9YTHpe&+N-sj"),'#-m"'61[ZuX0j3JcDO -aN\91\*9m[O^9V6=7-U8h'=PB%K4c[\Ic6jPpMcaN)&p=7&RI68$;]q7oaq/r6K_4u+rm5X(% -9(2)_R4GLo;A#Oa.SbP$OWCSF')(aJ&A#Nn:&BTbfjC>mW@n8dM\:^0+XW*pF//?#8<,9KOa[ -ZUk,tL3d#Y0u(KQ%$:HpML+PItGJ7gM%MXk>3M*tt09lTf]STFBtB=7(aVoq1pK<1\.50B&J`F..6 -Jgs_n0j!,-1o)a.bb:2EO:YZ\9aG%J$d!DkQ1O#][r+^Zg5?&@a6*Lu`&)p8-PIq7oaq/r6K_ -4u+t-+s/=2N$jIgnduq\A+DA(]u!NlR_;$5Pb8GNm.)m\YuHP?`#J9P?L9Hm+!KE*9Z>Ql:pX -4/i[hS6f7^lJ -5!1-VTtQJ."E(R<-f:HhbP$JTN)4uQ]5jPpLeP7LTk@qfT`bsE%c/P.30lYdt -(UkVfMOcPogr,&p16L9mH;f>29KH$a81dYs"a'sG@?Gq* -!g.kh,aXQ(n]?jQ@jS#5is;6=%m;t#KbZ.B`QV31+%doCI/MYB.[#ikGXakd9"s]`Va"kDiWJ -AJEPe;g!]S3@NkU(-O!DRd+9/3E[AOqgap3+LF?rShoT>gjq,kX>q$<&?1&2[O?=>3Fc!DP+8 -l,^bG53!?==Q^ZiXP]cYP&frNtC_%VIJiqW7`\Sn-%:1]gD9%6;.]KNtB/?,Te1_,=k!b#Y0u -(KFj.dq$8,`61PW)%G9'DfPW$]ac_\rDP1/hQ:a=f3'G$Qn/=S1bT#@g%/'"n!M9u9+ -B"`1;6A.B,\b2d(24bT_9H?E=/;?iLI)6@(*jp7(8j< -69^kttH-6c2^@HFG\36$FY4)`b*J@sqfJr%&$j#6]eq.D69CNbE?Rj*2(C?2$ITcu6Zndu2H1 -\-rEWHWuB!n61:$#>8$5)FSb=S[XLFBBe1O[(06_]A<)i.RKY'1ZTT7lZ*5jMN78YuL9#`;dl -;MWBu6GXakdP/$B>_EIJsH<)$Y8TNmeU:03CE68Muo('&\B:n7KUr4Dus/&!k#O[Hf,5EK;PE -?CB`9C_Vi^"Y()Np.m-6jTUK(,.T%!AbX';&kf'aZ07K-e-W%!=*9,!#1JI&pCr%*;!FG7[]X -FT^-PV*]EYC<]j1q$8.@"Na.>icn5l](Z\%7J7^[tWN1Hp<0iJ>43ga%%_5D=V-+cX(%6Yk!XD*O?#;B=$5%PC1T9I, -_ptnsO$F:3QGdXi;1iX%%iSPg#5:b`I535k6Wl+Wn$M_k.mC,5M$(N-pSKH.s)-AbNK$&"KW`2Ja]Mq=loIV''_Ye.B -aBSQNGZP`cRD`9E2$"o??G=+,R:J?D0CWQ%)bI-f[2!Ano9sTjQ#.i(P0A-;*uV$jM_`,^eUCPIjp@@1,L6ub;^[ -fiDhue+%+j7m)5gT.mu]1b$`=D+%%&AKh+tO+Wp%#*^fK1_B$QoCu#(KH\E$&TN\['83T@r.7 -*M:69'SX,D:"=a[ZWq#a15[_@\%8+bV(25$"n_CSu+RZ+aIDd7>CCNtn[YD)OsoKfD7sJVlqV -JE13klD4:K?!+q!AH\gECuBDIoF@%F'dOmi@7WRW,PbG-o'md@J'3T_L'*]g&rYg\"j+f3(a1 -aYRacre`Bj&d/2>6on6oU1T\2rm8IE'N`u,MTUp0DEduecI+^e^%=N_0u%_6<8[+;G%P8Mm3' -.=jB-aCT>TVAOI#S(HDEY3n'GqH"3Cj< -^IjJc0i(E2cZZB;A;UF:A`iD!8gcI4:IfoZL#/8Cm$k/(:F@adSK+82^J6@1b;\CuNCs#ZZ_h -*8fCa8a$Q:/j8#U]tc3'i6]l8^(;a=n3!X@Y/kerHKI-\i -u7Hu;7AJ^>^8`%kopM/]'%n?A@%TmY(a*/rMO$4NUcq3[Efa_-bRk26!]A0?!9-aCTAT?(l>T -P.q3*j_(-6XjeR=\5);C&+.(J:c@I[W`S9&eQ=@%11d8MU9G=8M/,",to=K7/;N/N9$1)@[0_ -s[DX.(\CWG/5icAq5sC%6La)'%YU1kN(5aR`RV4'j=(i&#&Z[!c:5C#7Z\6`]Cn\u?4@[7BSA -Sr9aX=@3,Teu'8D5EjOl;Oil]`%'A2#8NVb%["K\!Z1P%9]9b[VY\ICl!r=leTol<`F4%*?P( -,TeO-52O2=I%3[sZ%@"e-h5C#qT+H7"pm]gYsKGjD2P+hZ/]q=(H+/b<=4-GYD*7#G.W3*'6PYZs*Q@-W8Ob*`gC4m;6-^'OXH; -^u?7?*C\pI+Qa;bm`9[&=R7n=E07@d:3rd/5!E7u.`8W2NkN@[m_='`jZB-hM:9=J@)`i1nhDC3+e7JfI%6crb8! -_+%EV*Gi - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 382 406 -%%EOF diff --git a/doc/print-color.png b/doc/print-color.png deleted file mode 100644 index db1af3f..0000000 Binary files a/doc/print-color.png and /dev/null differ diff --git a/doc/print-color.txt b/doc/print-color.txt deleted file mode 100644 index 69fdede..0000000 --- a/doc/print-color.txt +++ /dev/null @@ -1 +0,0 @@ -[Figure not available in Info format] diff --git a/doc/print-main.eps b/doc/print-main.eps deleted file mode 100644 index 05a6b3f..0000000 --- a/doc/print-main.eps +++ /dev/null @@ -1,551 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (print-main.eps) -%%CreationDate: (Sun Feb 29 19:56:03 2004) -%%BoundingBox: 0 0 647 647 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 647 647 -userdict begin -%%BeginData: -DisplayImage -0 0 -648 648 -12.000000 -648 648 -0 -0 -0 -GhVQ@$[`q*^%hWSdL0pV25M*AV*KTN.8WW)5sPT6;*b^^r@9fAUBjI,"?iJF`KTuqMAV0u7K -e8B+p8KDK5a@1U(@Hr1E`%669q5$V)6]MP&L?HrH2E.o#roAI:hX5IduF*Sa=YI4L6i9bjK)p -Z2ak)zzzz!!!!A4Z.-mI;[SA+WsF"G!P_<'mce,hsnlkE*`MU459bRmKTI9q@4?[T+,nWj;:F -OfBueQ;#*oAn("S-D%eF0#:dhRd?Gq7)*Qr*/n#>D$T/? -"c4Su=h.ct/jqcjo7sd5``/RlKk?h.rSYnm*N4!sd?0.LZgu>M_#O"[+^QpXA\e2\r8"aH=pM( -%2VLAZ,,4k^GnSWRm<;b9Qad%g&nhL#FW5]<1BTd_8M>Gs1nuZVqA:q%D]tW#8=K:8\kRcdcA -tbOIYZ[C6[.31[b/=n"\3"kW)(s-?u:IBT!NJ/i7o5$s>U"6uL3#F`F,9HnX_]gtD["?g+pS. -`3P?G!Q2T7NRH#BH^,?1pEg%^bDRmP:t!UTfpLZK:dD:TpguDaKdf"=\QJq(/oAr%"u;]Li4[P*:U;<+I8 -pTu!H/oQ_huW)V8%S[BSXjeLL]"ejg+JWuQH6P]PI&Sudm#K5HpWkjTY0SE3G=!13bN-X@MB7#Nbr&l0a_lh]fO90/m,Z -^\k?AG+i13*EdcMSG*1IlQeKm;,2M"1ql\Eg3r23fn0OU*2oLW^Mpg!"k.hmX6nSa>5)?%]Cq -WI3H%g9XqTRQCtlP]KU,d$RV-HCW-3"+e1lpr7lQAKi)+Bkm`/$$MV(Q\69 -a94lbH']XBB6V$Ui3e+d3Hj'Q&"djqgU-P2bM\%o"3*,VMjR4`H((NEqu-o_p?Cma34;IQZ!i -eBC.X"qJLqXh.>N/\c!o#krW=OhN.*OF56KFa3U$U=q@4QZ=$T%r/$@*SC -"Y/\AfQ/2U!.>5@mgMplVtZl#KhPAH4HZb>tUcRpM!t'gNONBkp3_ ->PmSe;o3baApO3R)PDJ&c#gU/).gN(6^k!Q$t3cJQWr,!D9NGI0lD#K=?Fd';;*A_0cqU9qp"*`l>$:lgXR2?3IBq"YIm,F^J!-)kaO>@S'=Wd -?SLhNR*kG;lr4^td?+K]7\bcfGo\Ph6:kfl3.8km,*UMPk0F+99aDjA)p+FV -"h-SL\(0+i!)/8pi0c]j2[PJQ)3]i/7O:" -K5G#!1hAT?4*+jb8WRTBFB^^*_0S8Y/(6SipC\*]*H\Ob;5s"s,t@s%eFBFhbWaNr#@)*8#\q -r`rUMn%l:TQ*gCROb#d09WU&X+=6.87L>MZc_=t)P -3:cV=,9H56m/Gjcgs^?6mG/.gmQ09pcM?iJHagHPGsUc/DmmkQVg52d/Xh)sdu7cUV]FGEGsV -E(h:d=&\Qnr3BmW+ZJ%pC*?9.at3TH1kg" -YUu^Qi;IQG[VX>'T_uJh%'!^T;qaO8AR\W4-YacQ:?e]7%A.f.V@9I!Wh.T5!3A`7A(N/MiE( -SpoapWUFYl]V'8]h@8N.e;p"p2er9Q&,`I$80A>Y]3MpDq>\Te<_cNidl@Zrin:nZqcfQUSCL<3(X -6&"NjQU5"I_KIX;n@06WG@9MFj<1RA*,N5gE#*RHUQ',6^stn\7jn"VJYKRNn -_*Qm#:egPO#Xu6^KUPr%:)*40OKu2=`dJPo%c7;;:3TWp3jY]e'k.Blr%ZQU&l,lg.,=*g;Ie -/6nOl^S]H@G\qo]f5$"WIR*V,(Z_"IjJ`mBqh4SmQ[9g;]C)$CG0>kNEn0X>nseb#lXfUOEpi -%0Aug=A,!#XMH2fhbLpLX,dt`,Dgu'f_%*Ul6J'J@K4+4J[LZ<]h5IPpiqmpA\ft#qN3bf1BT -6>2>PQ`Y&ju6)kF4#YHS&XjB3-JoOQmq^'[]LK/\ot+m\suLWFP6=u43]"/r_L3C>Go[0M*Z' -<6s1T"`uar'2)`fcWWG=[ocM17]9pn0b<_I<:u1?@Y;a5)6=*kH0<^[ArN^Ht4DDp4O2utJ96 -[jerEaBPt7HcdC8PNR'`g9kGMSG$fDCn38\A_bMlEOC_E:2Ln*Z#TF2L/H^TNuV.Y@K]u^/9A -D(^NdI_(h_i\G.CLr@c\>@=8)KQqR/qTjk"'V>XH*R=n>LWI[;Y,8[7CjdcFSq])8kHr1^j6; -H>t1:Hft`4

    [Aet7G;nU/fb^4Q>u2-it4jo+qsV28M3B/m)oGT^]al3up_f+L.E -+*8B:596WEDg$EdbF?8SiYd%08br7Yo([k.BXdp$:0I90l+0/u]0^DJ9Wkp&IWiG1qGk)aMfS -g=o!OP"Q]@;/hCck;+Wo?ckWQ6WO-heDfSoes[d-#"HLJ`)Scr')pRBU=n)Vd*8KE.OCu9Bif -"'gFFr],HrAKRGN+o:4h)K+J_mUfU[i&%%HE5a3F?-,eh;rmRa,]`eZKo_s*)"srfmf1qBlTMYHLJR4q -FDC^--FYUpfWstSc$PFW[-P6!S]W'#4Uq37H4C8UTOD!,@Ta&7 -BCQgl[e>dRj`d$m'YK7]3G(4?1t\:bF:D>S(,#^AbFOCir@,AJ!H;na -]!E,j1gdJDj#mYO[&kNQMjYJ^-K9TPM_rVSY)5f4t5+]Vu6I+q8qCPL\hKc[+F6q\q0Hsn,LD -?^AloppWU02?ehXXZTE>YHMc"JB6AT<7f.t<\%[>qbBp*C+#[h1rO,GtO)*NlRteJKlXt$>2g -%OUR$s.AX]It4V]DVM/g$k0;g+R7=A@3^:4=nhY8Y3I_ -5]kpZ2>Fjkd2as*dhV4sROd<.=E>\bVe:rII=;mm$U=r<@_V:]Ct"lML -RP]e-kjHtV(!s4X=8loCVDgp,m\gUDZQF:HM=546RFYX5H^\t9`:!HlDBW@h -1dOp'OA02EZSB'Im,brc?GU6Ir!$CeZtlU?+SW2,%aIF@*m^D(i4Pott[lgh(9a5L"Q`cTRQcfb$P(-^bc[A=[^FIP^P*MZ*'d&dV&'.]<*d[bR_2$ -o.nA%-^QQFrVa+_4A?-mZAIbe)oe(%dVft)ON7D$"#5I^=@*F$7bIIjEo(*-c:FPPrs,:>Ah1 -9Q)p0m,R=XIVbG1Q!ehHk'd1=iPYGb%%ij$V?\5rP*97'&!17O$bF/k\p$'KVsMan4=pTFKC&+BD16[Bi!Hd -B!M\pqJfldkm&*W'sVU9;1H?L(%$>J;tmq.m;QSMm8-jCsSqSD8)Eq"b/(lZV0sFrFZ3.(X6B -jZKj4Ef/%Jql/^%'r/tCr/e!"P.qGtn*BQ&lZ1l0\SIDaYt8ii.+`C%.lPOG?BZJD-;.[/Df1 -ZC2ot/@aJ]"`NW519%hAQY97o_t2t675q@C(3%XkSUmE9ecqEt".[s%._?0=CQG1?K#IJ<3 -[QdssZnkd<74DoE8>94mBr%4!(Y*D*#aDD$"j(c,JQ!FNM5I3U?r1n=$$QXr,s_npu4=eA(asI=!U2h>R8C?,,70b;ijL -cKO'Re;io\eNW:4XkOlJ;Z$IU.IUS"l&_bKq_sPiX's54oqQ-KNS&t:qit,hMrsI_JL)Gdgr)-/Z:.cFHA=]0SW+Xo.>sEqE/hD -6:,4pP/BF10F;,JN^a#5O[od]:RP7pPb\(TBkA(PcjCLka_=NNYrpRTDni@Bh,U*3NRMSgD4X -Q5h!5+)n26i0R?duel1m(N1nEt7@+%nLb;o./oQu^Kr?VC%(DUH>rcBKrpR4CYQ`ViFIea^][JJ-d?[hS7o'#-)i,VusJD@\/IWMFBn2pHbYN<'*jhc1$^J2FgTmZCFjl -HH)O*k)jC6H&u+F>(YgE/:0qd"i\NYn./B`F$8oM'g>DsbE5C&<*MS_l;MYKf^dG"eFX^?s_, -nT.mRD;W"NN(%6S2iXEW3,2@/f&Q$cN3:oM"C9;&\suhN^Hi[8$1[/ePTP-lq9:P,-83+b0>8 -hb=3?_&as2tg!tRrs4js!.\bTjJY![Zp/o?rts"':NSL7c)927QK:ABM?k6L+)_dq^-R6*p9: -E?I+1,s-n^spL);^_64RFjTHgRa68]!n6W2.:mqpi.>7[V6gB[WS&o/RugXNuGE>e>T7H[r*0 -GZ=1\-qQ73+X/Vf9=[e\KWbq>LZQNmQW=AJjW1hD6.s6.)bOX)>d_A[\4=SjVo#QH(J%'NDam -X/1hcqhd?QiML=FPXKr89ZbEfMu+6-_Sa52Rb9]LS!/RiFFahEG`=D)2D-RPAcsG5_;6n(W%i -n(uN>p70REqrFnc-[!_*fJ.$np?fo0c5P:iA"2Up@i%i\dkl&dj7lI\@n,%1)GrG&/%V6N20: -jVgA%n:gp,l6Y`ohCGa_9mmk/O+9a94lbH']XBB6V$Ui3gAX[e]7.hCG^J,69hh^Dc3a_dBf9 -c(uq/b4g@jelIO90OR:IR:d?IQ@-.q=8uTg298P]*s.7m_F[#qEM5`ha_kRrQj.[a3HTtdXuKQ:qiJ0+ -,o7UJ/UJ"VX)@DGHOQE#YQ(\0qn=bnpXGa\5.tJ#M*#g-FEZhe1HRe)?2Jta>7[@[ElaL-"", -_TG='ckEK*&@D:i`JrT(*H`f-kPMCrNT?-Xt3S3IcpFtgAJYJ2D'f#k$HakD2HdjM1Iq<,ZDs -!LrpO$%iG4E69]f?*S6je5?/Ja^d1kKCR%b2$]$=-MG=0tHro\`kfYIc8XR$O5A[+8GB?rBK) -Ln%uZmQ9BQ.\QefXmFq60SNBX)WT061gJ=3eg,Pkhf]gZLRBl%IPFE=]B\[B._jiIS1IfoSVo -tJsQh-(ekE#;e/ltfQ.Hd'N=2c+a*ni"]?]beuA[#OmXcPE$am)CW`V\bhh=B@ijk8P4hf"US -Ijn/u-BDLXs0l*r2p5RSPb-@bcR6f+4tK?fPe5d,FN;4M\(2)flG3C7%d7]#hg=$?4Vu^ms3D -`lhqG4(laq8/3N)h_*Et`gX6&@tRZFRVo\QQAn!MaP^k@GJa4>/n\o,AU\sucBfm!,^LF(_!U -@MSQ+n!je0^V -&TF;>QpZZkNAq.rF?+h%]e3BpQnDHoD#".pU"/`1oCD`Mg%75Ve12I[P`>FZCNmmTgL\:Inuq -@jrQf'RAb,-*1:UEj^EMpW,3r!h=&,'ha2pTad.?]Hr;2TYee.ik+4bYn4*pr$i1AgXm(V_7Y -,g`0[dW&B_`ccSB3sm_kI-no;tFX7004)BdkOc?h`\MYs7,coO0+m%a$^G'>Eg%GY1?@S>Pqe(2/Zo_!Jg[!&#N]jH6JO,X'6N6pPO$fDOkj`fkgE -u1@,S+dUq_lT&)s-eFjQ6nlr[ -WM=f=hRCugUR';*rdP0f?48KZ>?)eq23t9K8%GM2OK7&YlBrVEhONth1ZU!)!3<8gq#n&MT$@XCYm -jf4EOI*puTZ=9@ep9He9+Fd]D94*cF4>42;b7,u`QRh.&VrX#Ua^Ro3Hf_>!jKs^'`!>A@J!Q -jq%39K8i5'm[W5#HaiNN+o>h?UF07*?jBm8AZ?$fi/\_D>"Vjhh:p>9h]KH2+$&Vgc2>)7cMQIs.jS*97-!=f -R\tXSdF9D1-GQm,gB/D7mp/.i:>Mid[3N]?jc#qWcIH!<=`GtLS*6A1CN`inFb62<4"%$A9UF -4@H2mh`Bqj5&)%#amp3RdVbP!T8HpN(NQ&#>kbFXg-+-YG#Odg[XRQjAj\,>_j\_mrXml,:\Y -N>B-b/m`,LOL`AD3Ohb%ILiRYjORTH_/hRmq[?`S_^p$)*L'Rf"KN]>s"S33W%hW1I'YYj4Mr -:UKaT:d6-O;72$IqD*,LPh!PV]GHN#NUMfD>[3N]7\TbU>oiLtVrGppr\`ur#r-#XGAm'M6I,c\:o4QMD,<>aMo)AZT -,FW3DY7/\Qio$u;%d`c>rgc:(\'p2I4++,Bqi>jFqI%q!pNLM!<6+WT[nf)mFiqNPP7DE#3.K ->/4e'I[ei7inL+tLM7nos%\S^_7UIUb0-I>8LI>>]48SQogeZVA&YMd((fB^Ud5?5H>D7OfBq --^reZEJ+2 -aC:Wg]nsplF3D8E@hia2;,)rMDHVT`V5:X8e4Z*&?_-)O%b^=d;G4g:4(\ZGJh_T+upXFW&VX -2trC%mXE]/nm+*]J/ff^5-I9Pkb4WF=;bocprF)_npIWtBG6UZc`)nTeL;A'nlV -[5P&.X&lE,rJuH0?Emu4'2K$!qWO@QHe-uaCs?70^&5Ls?gbR2q.&sjfFDM:q2L(G1M4k0_]SmIa$9Rn:O -VM,TDe+hcT'sD1XA2TlX0\gH0:aMdaE0P"W(EaaX*9[HKjOX?[fs/='Tgk2:l2brQR:Yr0uUA -k)MOk\F\!-]=Y\A/R.q8^\m2eLE9X5I/.954ndB(:T[a(U;+JCq<+AW[;+6\2/CdF>IT([qG! -G;%1NbHHR'.,?-Xt3S3IcpG+d$#3Ig75?I@m4Z08Iq?)Gg@6^RD%0'A9aQQ>9F?-XP'S6+qsO -HG-8QeSmpjn-r36p[12W\ikZT:4]dJ)J:m9a*>b/B4X^80A>P$m8#])2O)$",IOp"sTeb!+J? -_JV`MFJ/H[F+JN=g=oZ1:k,A!@0n@X!7[J[>$JXYRDecBuUIL:FKE>E`,-!)2QX@rBX5]'+%D` -%]$XEr\U#1o6C37Z%-b(L@]4K3k>*s:_ -3pRp[rB+af/Rk&6'\7C,',jl//uOLX!tf+@bI38(J!U-'3^p`PqVDWn?Di$_j7.c0)?a%\W9<>R+([%Wo6pk]/;@6gVI9fO_P8qBpoub>XKTl -bC08Sr\0t(#qQGMhWkI:M#-k/gEiRla#XBG%/^o^<=^[qn=`@5?0W;n!Cr*+58enc;F6Q^_c[ -T>a80ok]2REEmE=sX8XJU@8rRl_oGcBK\k\s+M?(_4E4t7B*oiWbN?-?bt9Nk]Z:0\27f:sY/ -/Y\LsY@kq5h*4UAi@J"qXYYja?PiD:%MQJM*G<1+t-d+M?(_*)K$]glE!P>rJ4_>*F[*[q$dRe1Yf7?7C]*of*F?- -*Q@iFgdi/0,hL_3q<,5mHIED>*4AH4HZbP=VE;a?ZM`/$&/)dQ2>?-]K/jAaJb]VQUL2S,DoF -?'MH3Nq-ps!\V%-H(8SCZmP56^L_J6^MkoeE(HFE>%8AD>lohi?5a1>O$]P:7(R3/uO4Pk7q: -J+,_a5d,gM>jV6)']V!YbJ%8*4f^/1EBPl:S-V2hke(07$eK`,cTaga'kc!l$]9"67@1 -]"l^XI(Rak0-&M1ECQ\QT.7nG_q&L6FG?K!];j>n#25=ltM=9cRR_Jq5-h&s>5$/l -pa0(qAHUuLp`/?7GJ1ao0n2_f&4`@Ec9AcY9]t3R<7F[7V3p+.2*VO`p3F%oaC8.*_YiF58ED -9Pa?$989/gF\E3^$q*@IeX'3]IG+2TEp3<m;LIb5c!>Q[stV14U4hAKW2.S6,RUf1!-$Gb8*\%m7E36p[12Wbq>La<5+fW=AJjW1hC" -VUWuSS18[W7HB9DkDD7GA`OA-c7?Jr58IOJTZbCu\suiD3I`Tklp-o"5BJohk]6Z)Dsd+7`@# -9PP]KNbJ]u5UQb?EiIl5.2ns/[l8U6RO3P0Z^L!#6L8eLLR&b!*2/B@Rlf5=T;m*TAeF7S-uk -8FNHAV^Alh5#qK$uJ!4'Z+,%k-khpO -;cO]5l,$T?"A\lrfmtOJ'c^k2a8"Q?S@+T;88"&D-*MFbVF+mf6["el`4Mqm!i_l$R -*tpEi1ErZYVXbOXu)Zbgf%aIIj+=`ZjFS]pre0`(UN6I>ITkpJIM`#%ZY=I/^=0:+#3]po\Pm -\Ggp!tc9Ab>tPmL3n>/>aKk7fE3]mH-DK?Ek!o@?=+2e;Kg_N_/pR9S0E11MYqp>hrgD5VsE6 -,qGuluVuQM7Y4'DSICloYA5/f,M"pQ[rY?1qT?\r>F;bB -ZOCo>fk^YoW$`nqSj\'j]*,M_7*SbU<QXdo850`O%#BUkVD^a0'J"-#`MT/8\dW*Z>n0@fO)6u.43pK(6`- -fOCQ;]`Ah0bI]sqD+GKu)dGAQsuT16=M<3?6pKq@9D%q6J:6-a38mq4?6M(*WB(Hd0_-o -jt]sm+@RQVq<%'F;`.>\f=Ic?1utr[[I"VQ*#L"[TC5DhW5;mTmsg[BDH]'=^elMA.DlT8*?* -pd.>nm[gMu#FX><,I9#TYCu8C[hhD(.AtA&^pWKCi?8#re\SKQ'+I-2gn;jQn9S\.*4hY)(8$ZT5aR -TtFP.3d:MU2%Qh/7lb78V3q*UM?MD"(Q7@,%Y1@g2Qk7q:J+,_a5ct28K?-]MC&'.:-\]\jDk -VA5OF?-Ns@ugJd#ql/]?G+lhTZbCu\dT]NF;]mj/d$nA>m;LIb5c!>Q[stV14U4hAKW2.S6,R -Uf1!-$Gb8*\%m7E36p[12Wbq>La<5+fW=AJjW1hC"VUWuSS8.)*7<6H.F%%)41@g2Qk7q:J+, -_a5ct28K?-Xt3S3IcpG+d%"+1dtDF?+iP[s#<&MG6+OF;`.>\uZa:8o`*SkGPT?S[6MJpC7@t -kkqF>L:/27c:Tg@obG^6*#AK'.gEh1S1bD"lrN5'&7#JqLG%nON"sfJYM&#>fXgEq=b!/XFM* -(`2';"'`U<-V]nW%L.^9UC=SU!#JA@qkE26-F&?e`Gk`V"G -1qmsGc8ZLe+TB';<-MY0]TbLVt94!+uT)9;V4ge"W\OS(6l"=pVg?Cg0dI9Eg!6!$'UQ -RbkLot0RZ@(HbW%UIX')9_'>Ctf\0Vl63u\(hn(^+\AGQW3;>Qb@:2Su<;pf;Fs`=![#&b7iF -r<=b4/P_-(#YXbcHjl_'&m_t4h?jh+4cJ;b2,]A09C/d'cnQh.46k/a0` -i6m,5`Ht;_\r?Q\b5c!>Q[stV14U4hAKW2.$m8#])2O)$",IOp"sTeb!+J?_JV`MFJ/H[F+SbU<m;KFXig\OJh@.&UsnF6!(@O^E"VLD7[K5Vl#[dCD!3Y4MCo"0$G$Y -UU<o09?* -8IRd#6.T$"O`U#$b05bDLe(>CHPi6C.^S#'S\m,hb/QFLgt2l8_gM5IIa"TKnhE=/L,nFa:i0 -YYA[."cPd7!E\N8cXZ2H?EZ#_]<(diB%b@ohcPhPIiBGj:OJcK&4L>>[XA1Hf6o(d*V<=bG@I -tp$4k4[.#3^GkVD]Vbq=A!YQ")\Gof&eeHFfao49&=9QW:\f9]uP9`SM`1(]R^?+,?t+1lR)c -MOm,>"o!'kV<]H[CQbhQfp19&R>SP,J":O7$dqmLb8cAd:E;4U<>eiF;[?&kV<\]>m:ib\dUt -pQN>$\/cu^5AH4HZbf7s:/49>\kA>?M1*&G*t#Rf6q!B*;nuC.a;^24L_!88c.-ln -lVP?,$iL5:YqDoIbu",q=#h -GGFkO0BPnP[OWP8l'.$nhM8@.X[?!F)V8`M//VY&LFsg$k]1\N\B5+4U!$b@>ZIY(&S:nenXX>'\dUtpQ]k@`q'iHlM8AY-=Q\bKq$T*kt\%AKW2.S=BY`E^F7"E`Ef* -aqe7e,,7+M%tL7$j*9^f=,8?-X"m$q*LMP7u+oa8(m3TUVj&X$k@s%&(j07!( -FL&Q_!J7lj/Q8a'A)MCrNI>m;LIbK5UHb._5-jSN3eXrm-!H5!Ko[U$`FH\1iW^-"j_QTd^_j -U@j+5X]]S3=0h2s18^3^])#krfrUG1tq]MMf_ulN@niL>m;LIbK3>dbDM/QTCJko\SoMG-O*# -+1P@@_&^f_$,hHVjqn[AL?kkV?]kcN>CG%umGHY.k3E,,s&.r2C:($1-XqQGZkB]i5n\hq`@V -BjD6g-9:&RA.,6LVrQiH]6G?\TB.$q*LMPEXeZ071CCg3-W^rRe8sl?g?*6eAf).@)k?\sspc -)2O)$-`;Kq>SccoOtLAQ>m;LIbK23e.`_EgW^N10KJ!?=dH0F'E0[1_AaP@-B*_cI,,39&.Gu -['KJ$mC>m;LIbK23k.OQLR>qY&FJ1^p9dH0F'E0V*"d4PrJ;=+NY'jV"fUu",q=#hEAlE]F!f_%aV3TAk+EJOTP\t#8lY&Ziae7EFeIakf/jmmc#!aUh2G?Gn05` -IBDVgthAra;7aMRM2#AoeiF;[?&kV< -\]>m:ib\dUtpQN>$\/cu^5AH4HZbm=Q]jlCBR/eg3fGoS[(9U>c]F?)?$W!e=(>oj6q3R_QT'j -^MO%@o#9-q;+"T_:Eg45Z6sF/qtSW"%ha5,a;/FDc!"Xf;)pqBhW_giOEiLb=%6L?:Ad]<$M' -FZiccSc0_o)]mcuq8QI`.>m;LIb?grPRpLA4V0T'Uk^;(L$Di7#jb,V&STC9d0)M -5=e)g-[B[3"u"0Ujnf4_ZhF<1Q!LBY8*520-0g=@E*2dMI6RQ=Z7/gE==ZI`d":=M9f=0?\m0 -"XS5Kqiaa#ATH:G1l3XQ0<76*&QhPQN:00fkWDo-T[m*:8,jF*i0N5:n*Cra,VbS&^b0ndEnD -NBU@7fda$!dg15:cG'"UXLb=%6L?lcGc^2QJaSZ.Ja[3bVlpR2`j.JDF\dZ*CbI5f;I@%@nHZ -ZBIK6Fd!I;'a[l#K*W^E6ZmF$$#XE.'ooj6^$q*CJP>bZNCoR,qAJgoKEZF)PV?1$mrm53V0quiV7!';3N9E#.& -R>SP,J":O7$dqmW/=jbEl7\YO+!?GAs_7-W7kaI@Fa4VVJP\/.WlWM-+Y)"[`s:]P9C+b7PS@ -nQcFY0"*'1s#cGkS[BAJ@-45CM>oj6q3R_QT(L<%;#O4WaF-jp5F3\kFn3r](`IYTsf\GS.d$ -umt#(4h[G]BB/'K1/\*&QhPQN:I4l*B[c0Ua6EqGY@-S-S?%\(ir'J*MEV:)4Aie_R+f9c;tg -h6kF`Xld#odtt\*Q[p\9<0otRGf24]>upk[c1gUS>Ost#]\=IJR6l%!rVCQEM9`MhGeT^1iS)G -'Qdsj?$J"6oS"'$2=K\X[mRaJ`@#.-l=ac\jB21eVbDN@Rd,jgXB[3"u"29ZGALmOQg'VtqNq -g=A\f>^Z>')cic(0o[\Kni1=.3HKrZ+H(9hA]sNu6Sq;c"*JUf\]a$+3Thq7(4aWN; -jUu3%1^n,_<*A2KBA\^Gut&E7[It-c%3Gcf\GS.d%#/3%gtYFkd#'-U]9R]RL6Qa@`7C]NrrY -lbX%SdCRm'-*jZ8bF'"Ah][m8t)I3OSN\1E'U!#^;d:L*AF;ZJd\dTF0/cu8IQN,VC[?r7VW)o[WX>oj6^%%)Z"gX`rj&"4mT2KsEd2!8,f_ZGoT -\nkSd%b/J6jt;^Ik+%?T=9)5gQYgN_J\!hnguWP&S9$Cq$UDkuZ>H^(:_sA+]0$RlF"ZT`!D$ -@d0&,6:;E8$&(Tp!qRclg45XOATEZD$Kn%*ME:"Qq4;$ZAO@pZl9PX,e'f=m.WK!WY7)p\8SF -LHIi=R#@sC#E@)1FiPmuP^.mJ>^;!_!GX& -s6M9YEF%[qI9b4pCCi6Frd$umt##^Q.lcY0T"Id*N`#,-!Urte<3p>,Hgf<.b?K7\ -=B=\MI+LUrR4)a+@ApV/K=SX2\_V";.pK#QCd.r=F)S\4=Vt4Y5>R0Pe@pU3ek7bpo#DQI7m/")" -L1)$E#ZcPc!;@q\dXsY/j%ZG>H0hu)91gA*/AdB#p;(9$ks[e#)km8JV'Z?J5PMc:iLLo0 -FD(i$B?_@7\S!j_9li0.!-=T34]M8Kem?6SQYic$GtpAaXj=R -0+M%suKeD*oF0-*EQOQHO!Me"QRprOCE\dCF&-YIg!Me"QRprOCEp0h)kV?N[\nk3hWdd\!64Q-7e';on1.q<0SAPSh$6 -PH>COB_>)/Djd?CiDq5t`66S@o'mZL_CmX.YjD3\(;"k5/PZbLo=N!McI>A -T`;UYGp3\&9Fugo^ueg;Yf1?mj]/@rErI?QS+bg/d"R7m%bo9s60"MH.-&'*@h*M, -]cgZ>+'f)0_WQ@#'Q^C?6^Q%fQNrEd1#)km8D2PmTae? -o?UW\0bkd!o;f/bp6fmIlZ0FD*o.HXe]LG#'W/d"S:b;R=Elf?E(o?h-b.!4.^pB*5`'O;bAi5Qe1fRZ#,6\T)o!hA;ZH9oK!BRU+WY/C?58=\uboo[Utj,!6Ce*kKB,hFLiIOok!gHkV<,\a.d\/o)AM -thhed#=8SR-o6tKU5S6ENEr+uT!$K<;d:HWk"oo?*-G"#=4>@H`6/m%od,lg2T6UO4_3Ib=@RQJVSKQ9(X!4",)>qZ/`Zm'TP+-IT@>RhR#m)iItD+AO%1e7 -"Tjc^56U0tSE&RDiR]Q[6ER^jCj!844%A_/@Wc;rYj.aN+$CE269*&OF1jg^7%#MlJl*%h6Ej -kF@u]\9OH)tA$]m!:'\V`ETdgOA3GM0;X9ShHE_GhpsA90$8f\lj)7>QD&[h"e7t?$?3iF)kQ -0%B/CYNQF4A[`qY?Vf\=Z"3?IT\t%'0fTf_`hXV_(-UjKaHJb(@=g6o^^))/E\t[Ai)*k&fIs -kH?hiqJT%P$?0A,EusbP\u^`@""8uP?.LQF^:Wb)^+\)[l9C?3SfqC"GI-FP\,^&@&m\O& -bFMIrbPucYmWiW>/r+\"=a`0=9U>e@=OQ[89(RFU3;*#U>Ad52gST]r,U76Y'RilfD`3EuQiMpM:C7$i1I\L'nu?9&#\\"%Top.sS\=3=.%/ -WV:!Mpl5;.#8je\Zjsq0a%KtZCH'j.e`U!!W[6f+'mGX=gmNL!5NiJ75Muga.G#!Xt3i_!19i -%TPTIpZLM67!!%[>QN7(?#@0eeeUFYL9="3l)1\`[bD:sEKg*)L.>cBY93SaDN$6H,2S+i\GZ -8?kbM!n-X/IjU).NSO^lW.6>t.4E.Q#OaI;R[;@o^u3U_uLc&J:'29lsM[&Re5T+48!OVFTPLGc?"Y$3mnnQG;XRWY#=)_0XM.\>?1r#dZP;NElC4R -eOe?"2h]dV`R&;+P]mP%7<9,tZ8Er#^%a/1VPEc@mk=M!!&G*'[ -,i#pm0f\%(F#Y'6W^nQX+d;\FnEC]5rkTr<>5(LH#1H_W:/"lDI*PrYIXIHVH=U9]hN?"b[Q -q3f?s>d*pE,9+sO1fE[F2mpX`0tEHYAbB@B6ddUA`fY,]-X\MD;RMDWqtcA`&,fLkBtLj -bL#-7.o:0Y-mE/Gl9&SGUe.\o_Q98K.aC[p%@c(dp7.r?Y@>FCkBg7dO[^r4q'QaX)Sf!cpAg -G3+'sm>^"dk-r@75n/uqLm3EGs3M!KVjHpR^5$9HH9):I<`AXD:.[+Wm(9?U8j\6PKd]Q0Z3l#^)" -UVW#Z;m$!7?fCcUY>NsV";+WI)]'4/(`T/KQWDjH,GT><>G6]9?hp'G#+Tj&k7[;V.%QNcU592#$RsASXr-'iE8`;O -XY5Zo@\U@9Nf7^83T<&#Z^irlAM=1F2^#[Pk%og5D&cWZUMcH;k#q^,/Q+=W\6\idNR;U`!'` -/gF5j4XtiOZE=tSXH/1%`;!_P82GoO,9e0DRcq%@,/TG15GX-R/Bu_CbAbFq65*YU7mn1lo7o -0MNMX2^F;_6+<+r#LqD(!1k3iH^BnjuG6r\J3Zp@'f%ZFE;[eXU#/_(muL,;-KkVAm35nMT'> -Q@GfQN7(?#@.N6^`7G6!!%)eAH2_S&ZEkQ!$H!E?*L0L6I3F.%cX=11;L9=mdk?M3h7B6&P!s%9*ej7J -2D77H0h9bJVc?j[4aS..\7A@s*J93'mAa?I:Q?I\WR-QV8Gs0RBS/Cn#B^/$d_M/'k'N1/Ja25XW)7W -3;J:a^lQhB6^SJhSH#lmdeeN.'gJ)>B`$sY%X5g`R0H#*H\:e$cP!&+X`"ouFYF;Y@ag7JIX" -Q"t9,_RcP6*VY:r7M.5(qL+Y`K'H-d=rH'c01H].8T+9BIe -RDgGASmS"M/EB-!R=Ok4M1:3`ed3kd'0i796QBhCgC -A#$!Om(9Sc^W>:+V`YT$8!cq^CU#).^0S0)g=#k59D'@+^28n8,LC"sPbW&3hB*JHepQIMo5I -RBhoX>5Q]:*1@BVNRS1j2%<6SD+E^?oSct.8t7_(pLk1I:NmBt7f\ni_4WNkcM_KFQ+M.j*Yd -,f!q6C#r06TCiGig",eS-a;j=Dp=agGUQX.K*3FXk+0Z.G(+r0uN!Y8"e&f(trfjd\Z%SDd4n -hFC(@fB*)?s=_4$:;7;X5*h+d/@7R!67]B(f,0D3hN*ZKd:Mp7d`a=O%X%srO9QWWU=p!,W9A7KE""Q13s&\G'2d$[ -\dS_\N^/q^jNqH\.!>a)$m^T\"$s1:ct+=[F;Y@A*J#gFae?mC;!\I0)+Y6C#(g;STZ]T@kV< -\`3s&[lP!bReT\'k?16ri2t/,7aD-_o^lJuX%JFsut\IM8dA$]O_m)TcdWMWN5gOqa.)2" -_ofF$A]nZAMN0RD8SN'L/^)N,7mT6+cJ'>H^cZ]SYbKfLp=]W$U//ocqh+R;F1M??+/,G:r65 -_K,".l=$d,VXGW1I6\R9$!ju&_UXDmf7UWc[e@:2p&$ZXSgcdTCqH)'*iD2D/(Vm&Od`&F5BQ -1+)UKKSdr=,P_>T)8iduiH=qjp2+maO/6lT?KWr*rg=a!p^>k>I$%ZJtW/Lj'GEU>` -t3=oH_\dS_\N^/q^jNqH\.!>a)$m^T\"$s -1:ct+=[F;Y@A*J#gFae?mC;!\I0)+Y6Cc@dK:QDgu`o2_.*2=D`s_e]gCkNiIrfh=Ha!#tGn& -`k@uk,JA0m]O%AiWGGuRr?CaMX,M8GV<>t!]pHh2ULq/MX*Yp:jC57(,9tmdH+%?>rGreaDX2 -Je7htPDSBKQUAefe7+[iRh9,EI]bW%afFd>QC!&kFVcfq@^>B-k\?4%NFH.qZbH+eG`I4_HC^ --WW-7_U>gAHb)Ufjt73HlSYpuMRU.DW9b=8aYfk[=!@=lcS>M'POZ8l/?m$6]uY:odeJ?/J_LjhUfr#NTKqgd -f0/ON#L\ni^+PY8[;*;$^@`Pg,/G4+g@3NqYP+V^ioY!39c4EeXqa*9k*X37Z\P8K*.)f',nV -+[/@Vn@#[1spU1WcpK"XYPPMJM*GPN=F:D=a]5H;tXr.i1M5aMpZ8i,3J#O$1T<'AC_:3,rPLgWa2phqK;8j:U5BF=8D:gT1qlj.\N8.J -o0Jmq6Cb?n&Go-M]UnZRUm/R+dzzz!0A;Qro5R1!:XpWrlZkn!:XpW5$nNpzzzzz! -$I58s1Q/2C2.K#cPSC.nR=W@'m)Qh,Rj9A2G,-QHduG5UG8A1@Q`[>QXKsh;h_Zg2NE,=@Q`\ -iGfD8PGQLHE5?6XO(GEca?ArO0kVd:F/HrD\@.?G%-$GVPf[U<>5Y>l -/6[>BsLE4bpOJ.]unlIbaN8E75XfSsdK@`euIe&2A?2n]qbfLiHii1\nNsIDFGhkg8Gt+$Tj.=O(qK+`a(sdHSAJcVbo4?PnlFL5GUE&q"UQnu4>ibO%bG:bc -/V-W@0eog@+90L#L"8c\f=n0kHWPNeT7V2a>#`M@+90L#L"8c\f?G#?$"+^N!ipG+a!G,'`KF -Vs";`IVi<^W4Yt,+.!*DW9.X@$k52D6='to\C>7LsSX4Ud2@@`R5P=jn3(AJe,0em[EniHoI" -F+a4EH/FN#,cS+bFmjp*6-;X]cd\",FCE)@+G_,-P@^>o-)GmY2_UN#eO`$lRCH?p*I_$_`(8b+.L`RH"sF3THM/i4NF#RlDcFQuh%=F*rQpB0>d:nVe8iL*6o3T*F-9MK -[cJqOgfpnOsk]))&Q06f`\\%J39%9bED4;8su^,)g0'(sdHSAJh-Iql0R!_/0O"g^?8/5o!om -;o84)VZ>~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 647 647 -%%EOF diff --git a/doc/print-main.png b/doc/print-main.png deleted file mode 100644 index 2d78222..0000000 Binary files a/doc/print-main.png and /dev/null differ diff --git a/doc/print-main.txt b/doc/print-main.txt deleted file mode 100644 index 69fdede..0000000 --- a/doc/print-main.txt +++ /dev/null @@ -1 +0,0 @@ -[Figure not available in Info format] diff --git a/doc/print-setup.eps b/doc/print-setup.eps deleted file mode 100644 index 5488cda..0000000 --- a/doc/print-setup.eps +++ /dev/null @@ -1,225 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (print-setup.eps) -%%CreationDate: (Sun Feb 29 19:56:03 2004) -%%BoundingBox: 0 0 289 226 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 289 226 -userdict begin -%%BeginData: -DisplayImage -0 0 -290 227 -12.000000 -290 227 -1 -0 -0 -13 -000000 -ffffff -cccccc -7f7f7f -e5e5e5 -999999 -b2b2b2 -d6d6d6 -969696 -888888 -fdfdfd -c3c3c3 -00009c -GhVPUM.2r.%#/?AQ#=kD5OW(N+k[D=a*70"$T/KnrfE'R*rq*6.BGsdL9?kaGn=/@DBq*CD? -Rh^S>U6DU"aHZQI,Ws-:n(K3nK#2Qdp,'0KDkpKGK>='*:R6AjYp0cqOFdDfR:T7&Q&]aAC8u -]i/kAcW%,X6JjkW0:UC?FR$r%Ft]WjbarOe&^mM(!'7A./^4E>_O`]=NX.d_T>_II%%6^5#Rm -\X$.523>KlM:4/%F(I4\7[+nu$jMe\jPmluho2CUVl+`k,:07.h)?VMORU8cDb^4nk;\NpEm6]-&G!`7n7%=, -\TdLI>S:hG$+iHqXE@O9H@bNKRU>YpA/!IcusD63FE)tn&0n'&b+o=ha[t4,Q"I%$P4V[!d@@HebPj]J;XW(e_mB6-FRj64+=I(>F2AWQs=dQfX:q_0 -nQmTIt'%4%0)#IUjBqiMK.^5;Ak%Z2L=QFf!`>gq.ud,e!.Scq&g.8I,VG+Z(dE!W28R8$59i -Hf^`[_t=4&KG5Vp/[e/P%nER-^\sgY,*s\jgH1M=O[gdPMT,;Qgt;tpm^F:":rRm1EmHC08:Q -Toc'C;A#LVDt*E1#P&0m#;JUJt4W;kM!-ff_aZ`5#O=R35F_#EIk0P='"FT;X*9'qcl!GJDL7 -X;YJImV):*$,(j+_Wu5PK.t.A<6?#]`grjHPp=8U)#D@In9F+q&WGBQJ"1B$k64+= -I)qtlqW90KFGP]O0YbBuaQ\b%Ls7W4,Cd03h)3Z^`ni9#Cl9;Xp9rS*E^,;TRC-h&IP_>,0)O -Ab4j86hAmG;]T?g`,f`$F-hb2bm4"ip.G]gKkB9uZ9fj)UO8UWp7?;"0Sl6JMN=69$'0nFi1S -\O*YIF@V#^535JSlrTc%,%OACi>50Yh=D4.5Mt=`3VK`\6N.6;U_#T)9AT,`)""8T,*u-eEb! -]u(gCfDf[g0klJV]0KYi&V';>\ab_J/d*CA<-rO>8ZY!PJ3Qf;b;+[g"?&jiU%%p;DsGC*-Lm -dL1a\@1N+$/ng8GN7"?,r@lF0r99dCEPr\!&YqL3a1u:[VoG`+XD_)KM\N@p'ToQp3hB#]g3t -Am=!SXC7enh:F&3+$6VF,#dX!rmr#L.IoD^_!O?1lD.7IH&?G -B$Yk(+58==IZ%)%Zm;FYTb=Un\JC$TIUVBkIMbC3F/u+JES2k/Y8_1Bs+nf0RS,u'P7Z_!KK' -8]:-sc#&E4sg3!ga'6AUg:icL.kf_$-O`ZDpRU.hMDKN>QqL#8uZAkJm4_M`iQPs;,kQ/lM4d --bE%QUR<;f52qg"?(quVTG'^;!W]I;^rpt9=ueuK^SQ"d&5LFT.D/(8I0;K6C`]?-R$E"#]UJ -DS:hG$+iHqXE@N_)Aj"Tj"J\OO.8:[HX[c$t3k.cf#pCJA1SGW!Th"G0l]7#Z!?#G8GGt;TlU -0sD>`',\+nT:M.eV>TpH`J8:O_hpJaneR=n)Rt4)!%[TcH$!mR>bn*\SXi"@3uA`3[m\4XV5#gWbsH!,'=d$TR\aNIgY@TZR(M,%a\' -[X.[8gu*/<`A`^-q,er(qDHgZos,iaFsDO&F,?RcJ3053hb+_O^LV#$-ab>`(:5S&ji+A&18X ->8I0;K6C`]?-R$E"#]UJDS:hG$+iMJ8C-;j(?Wf^t^S'gmianX5&?#AXMGt@4&ZRsZF[SRlo+ -XN]KFfLS`+_\-q&4>UTtD8P,a9gkLeuZ]fC91GPTo`EKJ$iK$6^bV<,>;0Nd_o]` -:F<"[mdH^.SPR*TCNPigZO&+6'7q$AHU]EPMR&[B(F'UQk&.k'BVeX)Sm6qW#\E\724TP5f)c -XQG_-8KK^"Ig.*oR8/_GejWJp.S`U+uGaA&1:+AFK1>I;PJ&r7Lqi/:%V,]X`sjE#K>N -22u~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 289 226 -%%EOF diff --git a/doc/print-setup.png b/doc/print-setup.png deleted file mode 100644 index 904e03b..0000000 Binary files a/doc/print-setup.png and /dev/null differ diff --git a/doc/print-setup.txt b/doc/print-setup.txt deleted file mode 100644 index 69fdede..0000000 --- a/doc/print-setup.txt +++ /dev/null @@ -1 +0,0 @@ -[Figure not available in Info format] diff --git a/doc/problems.texi b/doc/problems.texi deleted file mode 100644 index 0e59e03..0000000 --- a/doc/problems.texi +++ /dev/null @@ -1,17 +0,0 @@ -@node Problems, Appendices, Programs, Top -@chapter Reporting Bugs -@cindex bugs -@cindex problems - -If you find a bug in GIMP-Print or have any suggestions for modification -or improvement, please send electronic mail to the GIMP-Print bug -reporting address @footnote{@value{BUGADDR}}. Include the version -number, which you can find by running @w{@samp{gimpprint-config ---version}}. Also include in your message the output that the program -produced and the output you expected, if applicable, otherwise the best -description of the problem that you can provide. - -If you have other questions, comments or suggestions about GIMP-Print, -contact the developers via electronic mail to the GIMP-Print mailing -list @footnote{@value{MAILLIST}}. They will try to help you out, -although they may not have time to fix your problems. diff --git a/doc/programs.texi b/doc/programs.texi deleted file mode 100644 index 4db47ee..0000000 --- a/doc/programs.texi +++ /dev/null @@ -1,278 +0,0 @@ -@node Programs, Problems, Functions, Top -@chapter Programs -@cindex programs - -This chapter of the manual describes the use of some of the programs -which use the GIMP-Print library (libgimpprint). Note that there is now -a user manual in DocBook/SGML format, currently provided in HTML, -PostScript and PDF formats which is distributed with GIMP-Print. This -manual currently covers the use of the GIMP Print plugin and CUPS -drivers. - - -@menu -* The GIMP plugin:: The print plugin for the GIMP -* Ghostscript:: Printer driver -* CUPS:: Printer driver -@end menu - -@node The GIMP plugin, Ghostscript, Programs, Programs -@section The GIMP Print plugin -@cindex GIMP Print plugin -@cindex Print plugin - -The GIMP Print plugin is the printing facility for the GNU Image -Manipulation Program@footnote{@uref{http://www.gimp.org}}. This section -examines the features offered by the Print plugin. - -The main window is divided into five panes: - - -@subsection Preview - -The Preview pane contains a positioning widget that allows interactively -positioning the output on the page. It contains an outer border, -representing the sheet of paper; an inner border, representing the -printable area of the printer; an arrow, pointing to the top of the page -(the end that's fed into the printer); and a black rectangle, -representing the position of the image on the page. The image can be -moved around on the paper. When the first (left) button is used, the -image is moved in screen pixels; when any other button is used, the -image is moved in points@footnote{The output resolution of the plugin.}. -The arrow resizes depending upon the media size chosen; the shaft of the -arrow is always equal to one inch on the output. - -@image{print-main,,4in} - - -@subsection Printer Settings - -The Printer Settings pane contains a dropdown menu for selecting a -printer to print to. There is a special `printer' named @samp{File} -that allows you to choose a file to print to, rather than a printer -queue. The Setup box to the right allows specification of a printer -type, a PPD file@footnote{For Postscript printers.}, and the command to -be used to print. Each distinct printer in the Printer list can have -different settings applied to it. Below that is a combo box allowing -choice of media size. The choices are constrained to those that the -printer supports. Below that are dropdown menus for choosing media type -(what kind of paper), media source (what input tray), ink type, and -resolution. All of these settings are printer-specific. - -@image{print-setup,,2in} - - -@subsection Position - -The Position pane contains various widgets to place the image on the -paper. These widgets work in conjunction with the Preview pane. At the -top of the pane is a button to center the image on the paper (not on the -printable area), and on either side buttons to center vertically and -horizontally. Below these are four boxes that allow entry of the left, -top, right, and bottom of the image. These positions are relative to -the top left of the paper@footnote{Again, that's relative to the paper -corner, not the printable area, which is usually smaller.}. There are -two additional boxes that allow specification of the right margin and -bottom margin if you prefer; these are relative to the bottom right -corner of the paper. Any of these may have values entered into them; -the preview image will be moved appropriately. - -@strong{Note}: These entries do not resize the image. - -Finally, there is a pick box for orientation (landscape or portrait). -There is an @samp{Auto} mode that picks the orientation that yields the -orientation that best matches that of the image to be printed. - -@subsection Scaling - -The Scaling pane contains a slider that allows scaling of the image. -The image can be scaled in either percent of the printable area -(@strong{not} the page in this case) or pixels per inch (PPI) via a -radio button below the slider. PPI allows matching image resolution to -printer resolution. The image may be scaled using either method to -between 5 and 100% of the imageable area. It is not possible to crop -with the Print plugin. In Percent mode, the image is scaled so that -neither axis will be longer than the percent of the printable area -specified. For example, if you print an image at 20%, it will be -possible to tile the image 5 times on one axis and at least 5 times on -the other. To the right of the radio button is a button called Set -Image Scale. This sets the scaling to PPI, and sets the resolution as -closely as possible to the resolution stored in the image. To the right -of the Set Image Scale button are two boxes that allow entry of width -and height of the image. These set the scaling mode to PPI. Specifying -one automatically sets the other, and the image is repositioned as -needed to prevent it from falling off the edge of the page. - -To its right is a button group that allows choosing English (inch) -units or metric (centimeter) units. - -@subsection Image Settings - -The Image Settings pane allows choice of Line Art, Solid Colors, or -Photograph image type. Line art or Solid Colors should be used for -graphics containing mostly solid areas of color. They're very similar -to each other. Photograph mode dithers more slowly, but produces more -accurate colors. To the right of these three radio buttons is a button -called Adjust Color. This pops up a new window that controls various -output quality settings. That will be described separately. Finally, -there is a choice of Black and White, Color and Monochrome output. -Monochrome output can be used to print absolute black and white very -quickly. - - -@subsubsection Adjust Output - -The Adjust Output button button pops up a non-modal dialog that allows -adjustment of various parameters related to the print quality. These -are independent of the controls within the GIMP itself and only affect -the print. - -@image{print-color,,2in} - -At the top of the window is a thumbnail of the image that changes to -reflect the color settings of the image. This enables you to get an -idea of how the image will print out as you adjust settings. - -Below that there are eight sliders: - -@table @emph -@item Brightness -(0--2.0, default 1.0) Adjust the brightness of the image. - -@item Contrast -(0--4.0, default 1.0) Adjust the output contrast. - -@item Cyan, Magenta, Yellow -(0--4.0, default 1.0) Adjust the cyan, magenta, and yellow in the -output. These should not normally need to be adjusted very much; even -very small adjustments can go quite a long way to restoring color -balance. - -@item Saturation -(0--9.0, default 1.0) Adjust the color brilliance (saturation) of the -output. Saturation of 0 means pure gray scale, with no color. -Saturation of 9.0 will make just about anything but pure grays -brilliantly colored. - -@item Density -(0.1--2.0, default 1.0) Adjust the density (amount of ink) in the print. -The density is automatically corrected for the particular printer, -resolution, and in some cases paper choices. If solid black in the -input is not solid in the print, the density needs to be increased; if -there is excessive ink bleed-through and muddy dark colors, the density -should be decreased. - -@strong{Note}: the density will not increase beyond a certain amount no -matter what the slider is set to. - -@item Gamma -(0.1--4.0, default 1.0) Adjust the output gamma. The gamma value is -automatically corrected for the choice of printer; this is used if you -believe the automatic setting is incorrect. -@end table - - -@subsubsection Dither Algorithm -There is also a selection box for the dither algorithm to be used in the -pop-up dialog. There are currently seven choices: - -@table @emph -@item Adaptive Hybrid -Adaptive Hybrid usually yields the best output quality; it chooses a -modified Floyd-Steinberg error diffusion algorithm or ordered dithering -depending upon the image characteristics. - -@item Ordered -Ordered uses a pure ordered dither. It generally yields excellent -quality for simple black and white or four color printers without -variable drop size or drop modulation; it is not recommended if high -quality is desired on six color printers. It is considerably faster -than Adaptive Hybrid. - -@item Fast -Fast also uses a pure ordered dither, but uses a very simple black model -and makes no attempt to handle multi-level (6-color, variable drop size, -or drop modulation) at all cleanly. It is substantially faster than -Ordered dither. The quality tends to be quite poor except on simple -four color printers. On three color printers, quality is probably -competitive with anything else. - -@item Very Fast -Very Fast is similar to Fast, except that it uses a very simple dither -matrix that can be looked up much more quickly than the matrix used in -the Fast dither. For simple pure black and white images dominated by -horizontal and vertical lines, this may actually yield the best results; -for other types of image, the quality will be poor. - -@item Adaptive Random -Adaptive Random is similar to Adaptive Hybrid, except that the -modifications to the Floyd-Steinberg algorithm are slightly different. -This is slower than Adaptive Hybrid on most systems. For some images -the quality may be better than Adaptive Hybrid, but generally Adaptive -Hybrid should yield slightly superior images. - -@item Hybrid Floyd-Steinberg -Hybrid Floyd-Steinberg uses the modified Floyd-Steinberg algorithm of -Adaptive Hybrid on the entire image. Generally, the results are poor in -pale regions. - -@item Random Floyd-Steinberg -Random Floyd-Steinberg uses the modified Floyd-Steinberg algorithm of -Adaptive Random on the entire image. Generally, the results are poor in -pale regions. -@end table - - -@subsection Action Buttons - -The last pane contains four action buttons: - -@table @emph -@item Print and Save Settings -Immediately print the image (or, if the File printer is chosen, display -a file selection window to pick the output file), and save all current -settings for all printers. - -@item Save Settings -Immediately save the settings, and continue working in the Print plugin. - -@item Print -Immediately print the image (or, if the @samp{File} printer is chosen, -display a file selection window to pick the output file), but do not -save settings. - -@item Cancel -Immediately quit without saving settings or printing. -@end table - - -@node Ghostscript, CUPS, The GIMP plugin, Programs -@section Ghostscript driver -@cindex ghostscript driver - - -@node CUPS, , Ghostscript, Programs -@section CUPS driver -@cindex CUPS driver - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/stamp-vti b/doc/stamp-vti deleted file mode 100644 index e9a4321..0000000 --- a/doc/stamp-vti +++ /dev/null @@ -1,3 +0,0 @@ -@set UPDATED 27 October 2001 -@set EDITION 4.2.7 -@set VERSION 4.2.7 diff --git a/doc/users_guide/Makefile.am b/doc/users_guide/Makefile.am index 406bc1f..c29c952 100644 --- a/doc/users_guide/Makefile.am +++ b/doc/users_guide/Makefile.am @@ -1,4 +1,4 @@ -## $Id: Makefile.am,v 1.28.2.4 2003/12/07 14:57:33 rlk Exp $ +## $Id: Makefile.am,v 1.42 2005/01/30 16:01:52 rleigh Exp $ ## Copyright (C) 2001 Andy Stewart and Roger Leigh ## ## This program is free software; you can redistribute it and/or modify @@ -23,9 +23,34 @@ AUTOMAKE_OPTIONS = 1.4 gnu MAINT_CHARSET = latin1 +include $(top_srcdir)/scripts/global.mk + ## Variables +EPSLEVEL = 2 + +UTIL_MANUAL = util-edition +UTIL_MANUAL_SRC_FILES = $(srcdir)/$(UTIL_MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/utils.sgml \ + $(srcdir)/gfdl.sgml + +GIMP_MANUAL = gimp-edition +GIMP_MANUAL_SRC_FILES = $(srcdir)/$(GIMP_MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/gimp.sgml \ + $(srcdir)/gfdl.sgml + +CUPS_MANUAL = cups-edition +CUPS_MANUAL_SRC_FILES = $(srcdir)/$(CUPS_MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/cups.sgml \ + $(srcdir)/gfdl.sgml + MANUAL = users-guide MANUAL_SRC_FILES = $(srcdir)/$(MANUAL).sgml \ $(srcdir)/title.sgml \ @@ -34,21 +59,43 @@ MANUAL_SRC_FILES = $(srcdir)/$(MANUAL).sgml \ $(srcdir)/cups.sgml \ $(srcdir)/utils.sgml \ $(srcdir)/gfdl.sgml + +UTIL_HTMLDIR = util_html +GIMP_HTMLDIR = gimp_html +CUPS_HTMLDIR = cups_html HTMLDIR = html +UTIL_OUTPUTS = \ + $(UTIL_MANUAL).pdf \ + util_html + +GIMP_OUTPUTS = \ + $(GIMP_MANUAL).pdf \ + gimp_html + +CUPS_OUTPUTS = \ + $(CUPS_MANUAL).pdf \ + cups_html + OUTPUTS = \ $(MANUAL).pdf \ - $(MANUAL).ps \ html -USER_GUIDE = $(MANUAL).pdf html $(MANUAL).ps +UTIL_GUIDE = $(UTIL_MANUAL).pdf util_html +GIMP_GUIDE = $(GIMP_MANUAL).pdf gimp_html +CUPS_GUIDE = $(CUPS_MANUAL).pdf cups_html +USER_GUIDE = $(MANUAL).pdf html -STANDARD_TARGETS=@USER_GUIDE@ +if INSTALL_USER_GUIDE +STANDARD_TARGETS = $(USER_GUIDE) +endif -DISTHOOKDIRS = figures $(HTMLDIR) -DISTHOOKFILES = $(STANDARD_TARGETS) +DISTHOOKDIRS = $(HTMLDIR)/stylesheet-images -PNG_IMAGES = figures/cups_admin.png \ +UTIL_PNG_IMAGES = + +CUPS_PNG_IMAGES = \ + figures/cups_admin.png \ figures/cups_admin_device.png \ figures/cups_admin_make.png \ figures/cups_admin_model.png \ @@ -56,7 +103,9 @@ PNG_IMAGES = figures/cups_admin.png \ figures/cups_config_printer.png \ figures/cups_my_printer.png \ figures/cups_printers.png \ - figures/cups_startup.png \ + figures/cups_startup.png + +GIMP_PNG_IMAGES = \ figures/gimp-print-gui-1.png \ figures/gimp-print-gui.png \ figures/gimp-print-new-printer.png \ @@ -65,6 +114,15 @@ PNG_IMAGES = figures/cups_admin.png \ figures/gimp_image.png \ figures/gimp_startup.png +PNG_IMAGES = \ + $(CUPS_PNG_IMAGES) \ + $(GIMP_PNG_IMAGES) + +DISTHOOKFILES = $(PNG_IMAGES) $(STANDARD_TARGETS) $(HTMLDIR)/*.html $(HTMLDIR)/*.css + +UTIL_EPS_IMAGES = $(addsuffix .eps,$(basename $(UTIL_PNG_IMAGES))) +GIMP_EPS_IMAGES = $(addsuffix .eps,$(basename $(GIMP_PNG_IMAGES))) +CUPS_EPS_IMAGES = $(addsuffix .eps,$(basename $(CUPS_PNG_IMAGES))) EPS_IMAGES = $(addsuffix .eps,$(basename $(PNG_IMAGES))) if MAINTAINER_MODE @@ -82,6 +140,14 @@ endif ## Rules dist-hook: $(USER_GUIDE) + for file in $(DISTHOOKFILES) ; do \ + if test -f $$file ; then \ + if ! test -d $(distdir)/`dirname $$file` ; then \ + mkdir $(distdir)/`dirname $$file` ; \ + fi ; \ + cp -p $$file $(distdir)/`dirname $$file` ; \ + fi ; \ + done for dir in $(DISTHOOKDIRS) ; do \ if test -d $(srcdir)/$$dir ; then \ mkdir $(distdir)/$$dir; \ @@ -95,11 +161,60 @@ dist-hook: $(USER_GUIDE) done \ fi \ done - for file in $(DISTHOOKFILES) ; do \ - if test -f $$file ; then \ - cp -p $$file $(distdir) ; \ + +$(UTIL_MANUAL).pdf: $(UTIL_MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(UTIL_MANUAL_SRC_FILES) . ; \ + if test -d figures ; then \ + : ; \ + else \ + mkdir figures ; \ + fi ; \ fi ; \ - done + $(DB2PDF) $(UTIL_MANUAL).sgml + +$(GIMP_MANUAL).pdf: $(GIMP_MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(GIMP_MANUAL_SRC_FILES) . ; \ + if test -d figures ; then \ + : ; \ + else \ + mkdir figures ; \ + fi ; \ + for image in $(addprefix $(srcdir)/, $(GIMP_PNG_IMAGES)) ; do \ + cp -p $$image figures/`basename $$image` ; \ + done ; \ + fi ; \ + $(DB2PDF) $(GIMP_MANUAL).sgml + +$(CUPS_MANUAL).pdf: $(CUPS_MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(CUPS_MANUAL_SRC_FILES) . ; \ + if test -d figures ; then \ + : ; \ + else \ + mkdir figures ; \ + fi ; \ + for image in $(addprefix $(srcdir)/, $(CUPS_PNG_IMAGES)) ; do \ + cp -p $$image figures/`basename $$image` ; \ + done ; \ + fi ; \ + $(DB2PDF) $(CUPS_MANUAL).sgml $(MANUAL).pdf: $(MANUAL_SRC_FILES) if test $(srcdir) = '.' ; then \ @@ -108,7 +223,7 @@ $(MANUAL).pdf: $(MANUAL_SRC_FILES) if test -L $(notdir $<) ; then \ $(RM) $(notdir $<) ; \ fi ; \ - $(LN_S) $< $(notdir $<) ; \ + $(LN_S) -f $(MANUAL_SRC_FILES) . ; \ if test -d figures ; then \ : ; \ else \ @@ -120,21 +235,79 @@ $(MANUAL).pdf: $(MANUAL_SRC_FILES) fi ; \ $(DB2PDF) $(MANUAL).sgml -docs: html ps pdf +editions: docs cups_docs gimp_docs util_docs + +util_docs: util_html util_pdf +gimp_docs: gimp_html gimp_pdf +cups_docs: cups_html cups_pdf +docs: html pdf + +all_util_docs: util_html util_ps util_pdf +all_gimp_docs: gimp_html gimp_ps gimp_pdf +all_cups_docs: cups_html cups_ps cups_pdf +all_docs: html ps pdf all-local: $(ALL_LOCAL_TARGETS) +util_pdf: $(UTIL_MANUAL).pdf +gimp_pdf: $(GIMP_MANUAL).pdf +cups_pdf: $(CUPS_MANUAL).pdf pdf: $(MANUAL).pdf +util_ps: $(UTIL_MANUAL).ps +gimp_ps: $(GIMP_MANUAL).ps +cups_ps: $(CUPS_MANUAL).ps ps: $(MANUAL).ps +$(UTIL_MANUAL).ps: $(UTIL_MANUAL_SRC_FILES) $(UTIL_EPS_IMAGES) + for i in $(UTIL_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + sed -e 's/\.png"/.eps"/g' \ + -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ + done + cat $(UTIL_MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(UTIL_MANUAL)-eps.sgml + $(DB2PS) $(UTIL_MANUAL)-eps.sgml + mv $(UTIL_MANUAL)-eps.ps $(UTIL_MANUAL).ps + for i in $(UTIL_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + $(RM) -f $${j}-eps.*; \ + done + +$(GIMP_MANUAL).ps: $(GIMP_MANUAL_SRC_FILES) $(GIMP_EPS_IMAGES) + for i in $(GIMP_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + sed -e 's/\.png"/.eps"/g' \ + -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ + done + cat $(GIMP_MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(GIMP_MANUAL)-eps.sgml + $(DB2PS) $(GIMP_MANUAL)-eps.sgml + mv $(GIMP_MANUAL)-eps.ps $(GIMP_MANUAL).ps + for i in $(GIMP_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + $(RM) -f $${j}-eps.*; \ + done + +$(CUPS_MANUAL).ps: $(CUPS_MANUAL_SRC_FILES) $(CUPS_EPS_IMAGES) + for i in $(CUPS_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + sed -e 's/\.png"/.eps"/g' \ + -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ + done + cat $(CUPS_MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(CUPS_MANUAL)-eps.sgml + $(DB2PS) $(CUPS_MANUAL)-eps.sgml + mv $(CUPS_MANUAL)-eps.ps $(CUPS_MANUAL).ps + for i in $(CUPS_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + $(RM) -f $${j}-eps.*; \ + done + $(MANUAL).ps: $(MANUAL_SRC_FILES) $(EPS_IMAGES) for i in $(MANUAL_SRC_FILES); do \ j=`basename $$i .sgml`; \ sed -e 's/\.png"/.eps"/g' \ -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ done - cat $(MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(MANUAL)-eps.sgml + cat $(MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(MANUAL)-eps.sgml $(DB2PS) $(MANUAL)-eps.sgml mv $(MANUAL)-eps.ps $(MANUAL).ps for i in $(MANUAL_SRC_FILES); do \ @@ -144,21 +317,78 @@ $(MANUAL).ps: $(MANUAL_SRC_FILES) $(EPS_IMAGES) %.eps: if test ! -d figures ; then mkdir figures ; fi - $(CONVERT) $(srcdir)/$(basename $@).png EPS2:$@ + $(CONVERT) $(srcdir)/$(basename $@).png EPS$(EPSLEVEL):$@ +util_html: util-html-stamp +gimp_html: gimp-html-stamp +cups_html: cups-html-stamp html: html-stamp # This ugly workaround with SOURCE is because db2html doesn't seem to like # "./users-guide.sgml". Note that db2ps does not have the same limitation. # html-stamp should *only* be called by html--it's just a timestamp! -html-stamp: $(srcdir)/$(MANUAL).sgml $(PNG_IMAGES) + +util-html-stamp: $(UTIL_MANUAL_SRC_FILES) $(UTIL_PNG_IMAGES) if test $(srcdir) = '.' ; then \ : ; \ else \ if test -L $(notdir $<) ; then \ $(RM) $(notdir $<) ; \ fi ; \ - $(LN_S) $< $(notdir $<) ; \ + $(LN_S) -f $(UTIL_MANUAL_SRC_FILES) . ; \ + fi + $(DB2HTML) $(UTIL_MANUAL).sgml + -$(RM) -rf $(UTIL_HTMLDIR) + mv $(UTIL_MANUAL) $(UTIL_HTMLDIR) + chmod a+rx $(UTIL_HTMLDIR) + touch util-html-stamp + +gimp-html-stamp: $(GIMP_MANUAL_SRC_FILES) $(GIMP_PNG_IMAGES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(GIMP_MANUAL_SRC_FILES) . ; \ + fi + $(DB2HTML) $(GIMP_MANUAL).sgml + -mkdir $(GIMP_MANUAL)/figures + for image in $(addprefix $(srcdir)/, $(GIMP_PNG_IMAGES)) ; do \ + cp -p $$image $(GIMP_MANUAL)/figures/`basename $$image` ; \ + done + -$(RM) -rf $(GIMP_HTMLDIR) + mv $(GIMP_MANUAL) $(GIMP_HTMLDIR) + chmod a+rx $(GIMP_HTMLDIR) + touch gimp-html-stamp + +cups-html-stamp: $(CUPS_MANUAL_SRC_FILES) $(CUPS_PNG_IMAGES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(CUPS_MANUAL_SRC_FILES) . ; \ + fi + $(DB2HTML) $(CUPS_MANUAL).sgml + -mkdir $(CUPS_MANUAL)/figures + for image in $(addprefix $(srcdir)/, $(CUPS_PNG_IMAGES)) ; do \ + cp -p $$image $(CUPS_MANUAL)/figures/`basename $$image` ; \ + done + -$(RM) -rf $(CUPS_HTMLDIR) + mv $(CUPS_MANUAL) $(CUPS_HTMLDIR) + chmod a+rx $(CUPS_HTMLDIR) + touch cups-html-stamp + +html-stamp: $(MANUAL_SRC_FILES) $(PNG_IMAGES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(MANUAL_SRC_FILES) . ; \ fi $(DB2HTML) $(MANUAL).sgml -mkdir $(MANUAL)/figures @@ -180,7 +410,7 @@ install-data-local: $(STANDARD_TARGETS) $(INSTALL_DATA) $(srcdir)/$(MANUAL).pdf $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ fi ; \ if test -d $(HTMLDIR) ; then \ - HTMLGENDIR="$(HTMLDIR)" ; \ + HTMLGENDIR="$(HTMLDIR)" ; \ elif test -d $(srcdir)/$(HTMLDIR) ; then \ HTMLGENDIR="$(srcdir)/$(HTMLDIR)" ; \ else \ @@ -191,7 +421,7 @@ install-data-local: $(STANDARD_TARGETS) $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/html ; \ fi ; \ done ; \ - for file in $$HTMLGENDIR/figures/*.png ; do \ + for file in $(srcdir)/figures/*.png ; do \ if test -f $$file ; then \ $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/html/figures ; \ fi ; \ @@ -210,8 +440,11 @@ uninstall-local: CLEAN_MANUALS = \ $(RM) -f $(MANUAL).pdf $(MANUAL).ps ; \ - $(RM) -rf html-stamp $(HTMLDIR) ; \ - $(RM) -f $(EPS_IMAGES) + $(RM) -f $(CUPS_MANUAL).pdf $(CUPS_MANUAL).ps ; \ + $(RM) -f $(GIMP_MANUAL).pdf $(GIMP_MANUAL).ps ; \ + $(RM) -f $(UTIL_MANUAL).pdf $(UTIL_MANUAL).ps ; \ + $(RM) -rf *html-stamp $(HTMLDIR) $(CUPS_HTMLDIR) $(GIMP_HTMLDIR) $(UTIL_HTMLDIR) ; \ + $(RM) -f $(EPS_IMAGES) $(CUPS_EPS_IMAGES) $(GIMP_EPS_IMAGES) $(UTIL_EPS_IMAGES) clean-local: if test $(srcdir) = "." -a $(MAINT_MODE) = false ; then \ @@ -225,7 +458,8 @@ clean-local: if test $(srcdir) = "." ; then \ : ; \ else \ - $(RM) -f $(MANUAL_SRC_FILES); \ + $(RM) -f $(MANUAL_SRC_FILES) $(CUPS_MANUAL_SRC_FILES) ; \ + $(RM) -f $(GIMP_MANUAL_SRC_FILES) $(UTIL_CUPS_MANUAL_SRC_FILES) ; \ $(RM) -rf figures ; \ fi -$(RM) -rf *.tex *.log *.aux *.dvi *.gz *.out *.junk *.out *.fot @@ -262,22 +496,52 @@ maintainer-clean-local: help: @echo " " - @echo "Supported targets in this Makefile:" + @echo "Targets for the complete user's guide:" + @echo " " @echo " docs - creates PS, PDF, and HTML documentation files" + @echo " all_docs - creates PS and HTML documentation files" @echo " ps - creates PostScript documentation" @echo " pdf - creates PDF documentation" @echo " html - creates HTML documentation" @echo " clean - deletes machine generated files, but not outputs" @echo " veryclean - deletes output files in addition" @echo " help - prints this help text" + @echo "" + @echo "Targets for specific manual editions:" + @echo " " + @echo " cups_html - generate HTML for CUPS edition of the manual" + @echo " cups_pdf - generate PDF for CUPS edition of the manual" + @echo " cups_ps - generate PS for CUPS edition of the manual" + @echo " " + @echo " gimp_docs - generate HTML, PDF, and PS for GIMP edition of the manual" + @echo " gimp_html - generate HTML for GIMP edition of the manual" + @echo " gimp_pdf - generate PDF for GIMP edition of the manual" + @echo " gimp_ps - generate PS for GIMP edition of the manual" + @echo " " + @echo " util_docs - generate HTML, PDF, and PS for UTIL edition of the manual" + @echo " util_html - generate HTML for UTIL edition of the manual" + @echo " util_pdf - generate PDF for UTIL edition of the manual" + @echo " util_ps - generate PS for UTIL edition of the manual" + @echo " " + @echo " editions - generates HTML, PDF, and PS for ALL editions of the manual" @echo " " ## Clean -MAINTAINERCLEANFILES = Makefile.in html-stamp +MAINTAINERCLEANFILES = Makefile.in *html-stamp -EXTRA_DIST = README $(MANUAL_SRC_FILES) html-stamp +EXTRA_DIST = README \ + $(MANUAL_SRC_FILES) \ + html-stamp \ + cups-edition.sgml \ + gimp-edition.sgml \ + util-edition.sgml -.PHONY: docs html ps pdf help +.PHONY: docs cups_docs gimp_docs util_docs +.PHONY: all_docs all_cups_docs all_gimp_docs all_util_docs +.PHONY: html cups_html gimp_html util_html +.PHONY: ps cups_ps gimp_ps util_ps +.PHONY: pdf cups_pdf gimp_pdf util_pdf +.PHONY: help diff --git a/doc/users_guide/Makefile.in b/doc/users_guide/Makefile.in index 23428df..424c245 100644 --- a/doc/users_guide/Makefile.in +++ b/doc/users_guide/Makefile.in @@ -1,6 +1,8 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated by automake 1.9.5 from Makefile.am. +# @configure_input@ -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -10,324 +12,600 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +@SET_MAKE@ -SHELL = @SHELL@ - +# Variables srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ - top_builddir = ../.. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : -host_alias = @host_alias@ +build_triplet = @build@ host_triplet = @host@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/scripts/global.mk +subdir = doc/users_guide +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gimp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/stp.m4 $(top_srcdir)/m4/stp_cups.m4 \ + $(top_srcdir)/m4/stp_gimp.m4 $(top_srcdir)/m4/stp_option.m4 \ + $(top_srcdir)/m4/stp_release.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ -AS = @AS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BISON_PROG = @BISON_PROG@ -BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ +BUILD_CUPS_FALSE = @BUILD_CUPS_FALSE@ +BUILD_CUPS_PPDS_FALSE = @BUILD_CUPS_PPDS_FALSE@ +BUILD_CUPS_PPDS_TRUE = @BUILD_CUPS_PPDS_TRUE@ +BUILD_CUPS_TRUE = @BUILD_CUPS_TRUE@ +BUILD_ESCPUTIL_FALSE = @BUILD_ESCPUTIL_FALSE@ +BUILD_ESCPUTIL_TRUE = @BUILD_ESCPUTIL_TRUE@ +BUILD_FOOMATIC_3_FALSE = @BUILD_FOOMATIC_3_FALSE@ +BUILD_FOOMATIC_3_TRUE = @BUILD_FOOMATIC_3_TRUE@ +BUILD_FOOMATIC_FALSE = @BUILD_FOOMATIC_FALSE@ +BUILD_FOOMATIC_TRUE = @BUILD_FOOMATIC_TRUE@ +BUILD_GENPPD_STATIC_FALSE = @BUILD_GENPPD_STATIC_FALSE@ +BUILD_GENPPD_STATIC_TRUE = @BUILD_GENPPD_STATIC_TRUE@ +BUILD_GHOSTSCRIPT_FALSE = @BUILD_GHOSTSCRIPT_FALSE@ +BUILD_GHOSTSCRIPT_TRUE = @BUILD_GHOSTSCRIPT_TRUE@ +BUILD_GIMP2_FALSE = @BUILD_GIMP2_FALSE@ +BUILD_GIMP2_TRUE = @BUILD_GIMP2_TRUE@ +BUILD_GIMP_FALSE = @BUILD_GIMP_FALSE@ +BUILD_GIMP_TRUE = @BUILD_GIMP_TRUE@ +BUILD_LIBGUTENPRINTUI2_FALSE = @BUILD_LIBGUTENPRINTUI2_FALSE@ +BUILD_LIBGUTENPRINTUI2_TRUE = @BUILD_LIBGUTENPRINTUI2_TRUE@ +BUILD_LIBGUTENPRINTUI_FALSE = @BUILD_LIBGUTENPRINTUI_FALSE@ +BUILD_LIBGUTENPRINTUI_TRUE = @BUILD_LIBGUTENPRINTUI_TRUE@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +BUILD_TESTPATTERN_FALSE = @BUILD_TESTPATTERN_FALSE@ +BUILD_TESTPATTERN_TRUE = @BUILD_TESTPATTERN_TRUE@ +BUILD_TEST_FALSE = @BUILD_TEST_FALSE@ +BUILD_TEST_TRUE = @BUILD_TEST_TRUE@ +BUILD_TRANSLATED_CUPS_PPDS_FALSE = @BUILD_TRANSLATED_CUPS_PPDS_FALSE@ +BUILD_TRANSLATED_CUPS_PPDS_TRUE = @BUILD_TRANSLATED_CUPS_PPDS_TRUE@ CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ -CUPS_BACKEND_BIN = @CUPS_BACKEND_BIN@ -CUPS_BIN = @CUPS_BIN@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ CUPS_CFLAGS = @CUPS_CFLAGS@ -CUPS_CONF = @CUPS_CONF@ CUPS_CONFIG = @CUPS_CONFIG@ -CUPS_FILTER_BIN = @CUPS_FILTER_BIN@ -CUPS_INSTALL = @CUPS_INSTALL@ CUPS_LIBS = @CUPS_LIBS@ -CUPS_MAN = @CUPS_MAN@ -CUPS_NOINST_BIN = @CUPS_NOINST_BIN@ -CUPS_PKG = @CUPS_PKG@ +CUPS_PPDS_AT_TOP_LEVEL_FALSE = @CUPS_PPDS_AT_TOP_LEVEL_FALSE@ +CUPS_PPDS_AT_TOP_LEVEL_TRUE = @CUPS_PPDS_AT_TOP_LEVEL_TRUE@ CUPS_PPD_PS_LEVEL = @CUPS_PPD_PS_LEVEL@ -DATADIRNAME = @DATADIRNAME@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ DB2HTML = @DB2HTML@ DB2PDF = @DB2PDF@ DB2PS = @DB2PS@ -DLLTOOL = @DLLTOOL@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIALOG = @DIALOG@ +DOXYGEN = @DOXYGEN@ DVIPDF = @DVIPDF@ DVIPS = @DVIPS@ ECHO = @ECHO@ -ESCPUTIL_BIN = @ESCPUTIL_BIN@ -ESCPUTIL_MAN = @ESCPUTIL_MAN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ -FOOMATIC_3_NOINST_BIN = @FOOMATIC_3_NOINST_BIN@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FIND = @FIND@ FOOMATIC_CONFIGURE = @FOOMATIC_CONFIGURE@ -FOOMATIC_INSTALL = @FOOMATIC_INSTALL@ FOOMATIC_KITLOAD = @FOOMATIC_KITLOAD@ -FOOMATIC_NOINST_BIN = @FOOMATIC_NOINST_BIN@ -FOOMATIC_OLDIDS_NOINST_BIN = @FOOMATIC_OLDIDS_NOINST_BIN@ FOOMATIC_PPDFILE = @FOOMATIC_PPDFILE@ -GENCAT = @GENCAT@ -GIMPPRINT_BINARY_AGE = @GIMPPRINT_BINARY_AGE@ -GIMPPRINT_CFLAGS = @GIMPPRINT_CFLAGS@ -GIMPPRINT_CURRENT_INTERFACE = @GIMPPRINT_CURRENT_INTERFACE@ -GIMPPRINT_DEPLIBS = @GIMPPRINT_DEPLIBS@ -GIMPPRINT_INTERFACE_AGE = @GIMPPRINT_INTERFACE_AGE@ -GIMPPRINT_LIBS = @GIMPPRINT_LIBS@ -GIMPPRINT_MAJOR_VERSION = @GIMPPRINT_MAJOR_VERSION@ -GIMPPRINT_MICRO_VERSION = @GIMPPRINT_MICRO_VERSION@ -GIMPPRINT_MINOR_VERSION = @GIMPPRINT_MINOR_VERSION@ -GIMPPRINT_VERSION = @GIMPPRINT_VERSION@ +GENPPD_LIBS = @GENPPD_LIBS@ +GIMP2_CFLAGS = @GIMP2_CFLAGS@ +GIMP2_LIBS = @GIMP2_LIBS@ GIMPTOOL = @GIMPTOOL@ +GIMPTOOL2_CHECK = @GIMPTOOL2_CHECK@ GIMPTOOL_CHECK = @GIMPTOOL_CHECK@ -GIMP_BIN = @GIMP_BIN@ GIMP_CFLAGS = @GIMP_CFLAGS@ GIMP_CFLAGS_NOUI = @GIMP_CFLAGS_NOUI@ GIMP_DATA_DIR = @GIMP_DATA_DIR@ GIMP_LIBS = @GIMP_LIBS@ GIMP_LIBS_NOUI = @GIMP_LIBS_NOUI@ GIMP_PLUGIN_DIR = @GIMP_PLUGIN_DIR@ -GLIBC21 = @GLIBC21@ -GMOFILES = @GMOFILES@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ GMSGFMT = @GMSGFMT@ GNUCFLAGS = @GNUCFLAGS@ -IJS_BIN = @IJS_BIN@ +GTK2_CFLAGS = @GTK2_CFLAGS@ +GTK2_LIBS = @GTK2_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GUTENPRINTUI2_BINARY_AGE = @GUTENPRINTUI2_BINARY_AGE@ +GUTENPRINTUI2_CFLAGS = @GUTENPRINTUI2_CFLAGS@ +GUTENPRINTUI2_CURRENT_INTERFACE = @GUTENPRINTUI2_CURRENT_INTERFACE@ +GUTENPRINTUI2_INTERFACE_AGE = @GUTENPRINTUI2_INTERFACE_AGE@ +GUTENPRINTUI2_LIBDEPS = @GUTENPRINTUI2_LIBDEPS@ +GUTENPRINTUI2_LIBS = $(top_builddir)/src/gutenprintui2/libgutenprintui2.la +GUTENPRINTUI2_VERSION = @GUTENPRINTUI2_VERSION@ +GUTENPRINTUI_BINARY_AGE = @GUTENPRINTUI_BINARY_AGE@ +GUTENPRINTUI_CFLAGS = @GUTENPRINTUI_CFLAGS@ +GUTENPRINTUI_CURRENT_INTERFACE = @GUTENPRINTUI_CURRENT_INTERFACE@ +GUTENPRINTUI_INTERFACE_AGE = @GUTENPRINTUI_INTERFACE_AGE@ +GUTENPRINTUI_LIBDEPS = @GUTENPRINTUI_LIBDEPS@ +GUTENPRINTUI_LIBS = $(top_builddir)/src/gutenprintui/libgutenprintui.la +GUTENPRINTUI_VERSION = @GUTENPRINTUI_VERSION@ +GUTENPRINT_BINARY_AGE = @GUTENPRINT_BINARY_AGE@ +GUTENPRINT_CFLAGS = @GUTENPRINT_CFLAGS@ +GUTENPRINT_CURRENT_INTERFACE = @GUTENPRINT_CURRENT_INTERFACE@ +GUTENPRINT_INTERFACE_AGE = @GUTENPRINT_INTERFACE_AGE@ +GUTENPRINT_LIBDEPS = @GUTENPRINT_LIBDEPS@ + +# Libraries +GUTENPRINT_LIBS = $(top_builddir)/src/main/libgutenprint.la +GUTENPRINT_MAJOR_VERSION = @GUTENPRINT_MAJOR_VERSION@ +GUTENPRINT_MICRO_VERSION = @GUTENPRINT_MICRO_VERSION@ +GUTENPRINT_MINOR_VERSION = @GUTENPRINT_MINOR_VERSION@ +GUTENPRINT_VERSION = @GUTENPRINT_VERSION@ IJS_CFLAGS = @IJS_CFLAGS@ IJS_CONFIG = @IJS_CONFIG@ -IJS_INSTALL = @IJS_INSTALL@ IJS_LIBS = @IJS_LIBS@ -INCLUDES = @INCLUDES@ -INSTOBJEXT = @INSTOBJEXT@ -INTLBISON = @INTLBISON@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SAMPLES_FALSE = @INSTALL_SAMPLES_FALSE@ +INSTALL_SAMPLES_TRUE = @INSTALL_SAMPLES_TRUE@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTALL_USER_GUIDE_FALSE = @INSTALL_USER_GUIDE_FALSE@ +INSTALL_USER_GUIDE_TRUE = @INSTALL_USER_GUIDE_TRUE@ INTLLIBS = @INTLLIBS@ -INTLOBJS = @INTLOBJS@ -INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +LDFLAGS = @LDFLAGS@ LEX = @LEX@ -LIBGIMPPRINT_LIBS = @LIBGIMPPRINT_LIBS@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ -LIBM = @LIBM@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ LIBREADLINE_DEPS = @LIBREADLINE_DEPS@ +LIBS = $(INTLLIBS) @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LN_S = @LN_S@ LTALLOCA = @LTALLOCA@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ -LT_AGE = @LT_AGE@ -LT_CURRENT = @LT_CURRENT@ -LT_RELEASE = @LT_RELEASE@ -LT_REVISION = @LT_REVISION@ MAINT = @MAINT@ MAINTAINER_CFLAGS = @MAINTAINER_CFLAGS@ -MAIN_BIN = @MAIN_BIN@ -MAIN_DAT = @MAIN_DAT@ -MAIN_MAN = @MAIN_MAN@ -MAIN_SCR = @MAIN_SCR@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ -OBJDUMP = @OBJDUMP@ +MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ PLUG_IN_PATH = @PLUG_IN_PATH@ -POFILES = @POFILES@ POSUB = @POSUB@ -PRINT_VASPRINTF = @PRINT_VASPRINTF@ RANLIB = @RANLIB@ RELEASE_DATE = @RELEASE_DATE@ RM = @RM@ -SAMPLE_IMAGES = @SAMPLE_IMAGES@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ STRIP = @STRIP@ -TESTPATTERN_BIN = @TESTPATTERN_BIN@ -TEST_BIN = @TEST_BIN@ TEXI2HTML = @TEXI2HTML@ -USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_LEVEL3_PS_FALSE = @USE_LEVEL3_PS_FALSE@ +USE_LEVEL3_PS_TRUE = @USE_LEVEL3_PS_TRUE@ USE_NLS = @USE_NLS@ +USE_NLS_FALSE = @USE_NLS_FALSE@ +USE_NLS_TRUE = @USE_NLS_TRUE@ VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ YACC = @YACC@ -YACC_PROG = @YACC_PROG@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ cups_bindir = @cups_bindir@ cups_conf_datadir = @cups_conf_datadir@ cups_conf_serverbin = @cups_conf_serverbin@ cups_conf_serverroot = @cups_conf_serverroot@ cups_exec_prefix = @cups_exec_prefix@ cups_prefix = @cups_prefix@ +cups_sbindir = @cups_sbindir@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +gimp2_plug_indir = @gimp2_plug_indir@ gimp_plug_indir = @gimp_plug_indir@ -gimpprint_cflags = @gimpprint_cflags@ -gimpprint_libs = @gimpprint_libs@ - +gutenprint_cflags = @gutenprint_cflags@ +gutenprint_libs = @gutenprint_libs@ +gutenprintui2_cflags = @gutenprintui2_cflags@ +gutenprintui2_libs = @gutenprintui2_libs@ +gutenprintui_cflags = @gutenprintui_cflags@ +gutenprintui_libs = @gutenprintui_libs@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ AUTOMAKE_OPTIONS = 1.4 gnu - MAINT_CHARSET = latin1 +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(LOCAL_CPPFLAGS) $(GNUCFLAGS) +EPSLEVEL = 2 +UTIL_MANUAL = util-edition +UTIL_MANUAL_SRC_FILES = $(srcdir)/$(UTIL_MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/utils.sgml \ + $(srcdir)/gfdl.sgml + +GIMP_MANUAL = gimp-edition +GIMP_MANUAL_SRC_FILES = $(srcdir)/$(GIMP_MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/gimp.sgml \ + $(srcdir)/gfdl.sgml + +CUPS_MANUAL = cups-edition +CUPS_MANUAL_SRC_FILES = $(srcdir)/$(CUPS_MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/cups.sgml \ + $(srcdir)/gfdl.sgml MANUAL = users-guide -MANUAL_SRC_FILES = $(srcdir)/$(MANUAL).sgml $(srcdir)/title.sgml $(srcdir)/history.sgml $(srcdir)/gimp.sgml $(srcdir)/cups.sgml $(srcdir)/utils.sgml $(srcdir)/gfdl.sgml - +MANUAL_SRC_FILES = $(srcdir)/$(MANUAL).sgml \ + $(srcdir)/title.sgml \ + $(srcdir)/history.sgml \ + $(srcdir)/gimp.sgml \ + $(srcdir)/cups.sgml \ + $(srcdir)/utils.sgml \ + $(srcdir)/gfdl.sgml + +UTIL_HTMLDIR = util_html +GIMP_HTMLDIR = gimp_html +CUPS_HTMLDIR = cups_html HTMLDIR = html - -OUTPUTS = $(MANUAL).pdf $(MANUAL).ps html - - -USER_GUIDE = $(MANUAL).pdf html $(MANUAL).ps - -STANDARD_TARGETS = @USER_GUIDE@ - -DISTHOOKDIRS = figures $(HTMLDIR) -DISTHOOKFILES = $(STANDARD_TARGETS) - -PNG_IMAGES = figures/cups_admin.png figures/cups_admin_device.png figures/cups_admin_make.png figures/cups_admin_model.png figures/cups_admin_success.png figures/cups_config_printer.png figures/cups_my_printer.png figures/cups_printers.png figures/cups_startup.png figures/gimp-print-gui-1.png figures/gimp-print-gui.png figures/gimp-print-new-printer.png figures/gimp-print-print-color-adjust.png figures/gimp-print-setup.png figures/gimp_image.png figures/gimp_startup.png - - +UTIL_OUTPUTS = \ + $(UTIL_MANUAL).pdf \ + util_html + +GIMP_OUTPUTS = \ + $(GIMP_MANUAL).pdf \ + gimp_html + +CUPS_OUTPUTS = \ + $(CUPS_MANUAL).pdf \ + cups_html + +OUTPUTS = \ + $(MANUAL).pdf \ + html + +UTIL_GUIDE = $(UTIL_MANUAL).pdf util_html +GIMP_GUIDE = $(GIMP_MANUAL).pdf gimp_html +CUPS_GUIDE = $(CUPS_MANUAL).pdf cups_html +USER_GUIDE = $(MANUAL).pdf html +@INSTALL_USER_GUIDE_TRUE@STANDARD_TARGETS = $(USER_GUIDE) +DISTHOOKDIRS = $(HTMLDIR)/stylesheet-images +UTIL_PNG_IMAGES = +CUPS_PNG_IMAGES = \ + figures/cups_admin.png \ + figures/cups_admin_device.png \ + figures/cups_admin_make.png \ + figures/cups_admin_model.png \ + figures/cups_admin_success.png \ + figures/cups_config_printer.png \ + figures/cups_my_printer.png \ + figures/cups_printers.png \ + figures/cups_startup.png + +GIMP_PNG_IMAGES = \ + figures/gimp-print-gui-1.png \ + figures/gimp-print-gui.png \ + figures/gimp-print-new-printer.png \ + figures/gimp-print-print-color-adjust.png \ + figures/gimp-print-setup.png \ + figures/gimp_image.png \ + figures/gimp_startup.png + +PNG_IMAGES = \ + $(CUPS_PNG_IMAGES) \ + $(GIMP_PNG_IMAGES) + +DISTHOOKFILES = $(PNG_IMAGES) $(STANDARD_TARGETS) $(HTMLDIR)/*.html $(HTMLDIR)/*.css +UTIL_EPS_IMAGES = $(addsuffix .eps,$(basename $(UTIL_PNG_IMAGES))) +GIMP_EPS_IMAGES = $(addsuffix .eps,$(basename $(GIMP_PNG_IMAGES))) +CUPS_EPS_IMAGES = $(addsuffix .eps,$(basename $(CUPS_PNG_IMAGES))) EPS_IMAGES = $(addsuffix .eps,$(basename $(PNG_IMAGES))) -@MAINTAINER_MODE_TRUE@MAINT_MODE = true @MAINTAINER_MODE_FALSE@MAINT_MODE = false -@MAINTAINER_MODE_TRUE@ALL_LOCAL_TARGETS = docs +@MAINTAINER_MODE_TRUE@MAINT_MODE = true @MAINTAINER_MODE_FALSE@ALL_LOCAL_TARGETS = $(STANDARD_TARGETS) +@MAINTAINER_MODE_TRUE@ALL_LOCAL_TARGETS = docs +CLEAN_MANUALS = \ + $(RM) -f $(MANUAL).pdf $(MANUAL).ps ; \ + $(RM) -f $(CUPS_MANUAL).pdf $(CUPS_MANUAL).ps ; \ + $(RM) -f $(GIMP_MANUAL).pdf $(GIMP_MANUAL).ps ; \ + $(RM) -f $(UTIL_MANUAL).pdf $(UTIL_MANUAL).ps ; \ + $(RM) -rf *html-stamp $(HTMLDIR) $(CUPS_HTMLDIR) $(GIMP_HTMLDIR) $(UTIL_HTMLDIR) ; \ + $(RM) -f $(EPS_IMAGES) $(CUPS_EPS_IMAGES) $(GIMP_EPS_IMAGES) $(UTIL_EPS_IMAGES) + +MAINTAINERCLEANFILES = Makefile.in *html-stamp +EXTRA_DIST = README \ + $(MANUAL_SRC_FILES) \ + html-stamp \ + cups-edition.sgml \ + gimp-edition.sgml \ + util-edition.sgml + +all: all-am -CLEAN_MANUALS = $(RM) -f $(MANUAL).pdf $(MANUAL).ps ; $(RM) -rf html-stamp $(HTMLDIR) ; $(RM) -f $(EPS_IMAGES) - - -MAINTAINERCLEANFILES = Makefile.in html-stamp - -EXTRA_DIST = README $(MANUAL_SRC_FILES) html-stamp -mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs -CONFIG_HEADER = ../../config.h -CONFIG_CLEAN_FILES = -DIST_COMMON = README Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP_ENV = --best -all: all-redirect .SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/users_guide/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/scripts/global.mk $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/users_guide/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/users_guide/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: tags: TAGS TAGS: +ctags: CTAGS +CTAGS: -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = doc/users_guide distdir: $(DISTFILES) - $(mkinstalldirs) $(distdir)/$(srcdir) - @for file in $(DISTFILES); do \ - d=$(srcdir); \ + $(mkdir_p) $(distdir)/$(srcdir) $(distdir)/../../scripts + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ fi; \ done - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook -info-am: -info: info-am -dvi-am: -dvi: dvi-am + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -installcheck-am: -installcheck: installcheck-am -install-exec-am: +all-am: Makefile all-local +installdirs: +install: install-am install-exec: install-exec-am - -install-data-am: install-data-local install-data: install-data-am +uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-am -uninstall-am: uninstall-local -uninstall: uninstall-am -all-am: Makefile all-local -all-redirect: all-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: - +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -mostlyclean-am: mostlyclean-generic +clean: clean-am -mostlyclean: mostlyclean-am +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool -clean-am: clean-generic mostlyclean-am clean-local +dvi: dvi-am -clean: clean-am +dvi-am: -distclean-am: distclean-generic clean-am - -rm -f libtool +info: info-am -distclean: distclean-am +info-am: -maintainer-clean-am: maintainer-clean-generic distclean-am \ - maintainer-clean-local - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." +install-data-am: install-data-local + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool -.PHONY: tags distdir info-am info dvi-am dvi check check-am \ -installcheck-am installcheck install-exec-am install-exec \ -install-data-local install-data-am install-data install-am install \ -uninstall-local uninstall-am uninstall all-local all-redirect all-am \ -all installdirs mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean +pdf-am: + +ps-am: + +uninstall-am: uninstall-info-am uninstall-local + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local dist-hook distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-local install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-local mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am uninstall-local @SET_MAKE@ +export STP_MODULE_PATH = $(top_builddir)/src/main/.libs:$(top_builddir)/src/main +export STP_DATA_PATH = $(top_srcdir)/src/main + +# Rules + +$(top_builddir)/src/main/libgutenprint.la: + cd $(top_builddir)/src/main; \ + $(MAKE) + +$(top_builddir)/src/gutenprintui/libgutenprintui.la: + cd $(top_builddir)/src/gutenprintui; \ + $(MAKE) + +$(top_builddir)/src/gutenprintui2/libgutenprintui2.la: + cd $(top_builddir)/src/gutenprintui2; \ + $(MAKE) + dist-hook: $(USER_GUIDE) + for file in $(DISTHOOKFILES) ; do \ + if test -f $$file ; then \ + if ! test -d $(distdir)/`dirname $$file` ; then \ + mkdir $(distdir)/`dirname $$file` ; \ + fi ; \ + cp -p $$file $(distdir)/`dirname $$file` ; \ + fi ; \ + done for dir in $(DISTHOOKDIRS) ; do \ if test -d $(srcdir)/$$dir ; then \ mkdir $(distdir)/$$dir; \ @@ -341,11 +619,60 @@ dist-hook: $(USER_GUIDE) done \ fi \ done - for file in $(DISTHOOKFILES) ; do \ - if test -f $$file ; then \ - cp -p $$file $(distdir) ; \ + +$(UTIL_MANUAL).pdf: $(UTIL_MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(UTIL_MANUAL_SRC_FILES) . ; \ + if test -d figures ; then \ + : ; \ + else \ + mkdir figures ; \ + fi ; \ fi ; \ - done + $(DB2PDF) $(UTIL_MANUAL).sgml + +$(GIMP_MANUAL).pdf: $(GIMP_MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(GIMP_MANUAL_SRC_FILES) . ; \ + if test -d figures ; then \ + : ; \ + else \ + mkdir figures ; \ + fi ; \ + for image in $(addprefix $(srcdir)/, $(GIMP_PNG_IMAGES)) ; do \ + cp -p $$image figures/`basename $$image` ; \ + done ; \ + fi ; \ + $(DB2PDF) $(GIMP_MANUAL).sgml + +$(CUPS_MANUAL).pdf: $(CUPS_MANUAL_SRC_FILES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(CUPS_MANUAL_SRC_FILES) . ; \ + if test -d figures ; then \ + : ; \ + else \ + mkdir figures ; \ + fi ; \ + for image in $(addprefix $(srcdir)/, $(CUPS_PNG_IMAGES)) ; do \ + cp -p $$image figures/`basename $$image` ; \ + done ; \ + fi ; \ + $(DB2PDF) $(CUPS_MANUAL).sgml $(MANUAL).pdf: $(MANUAL_SRC_FILES) if test $(srcdir) = '.' ; then \ @@ -354,7 +681,7 @@ $(MANUAL).pdf: $(MANUAL_SRC_FILES) if test -L $(notdir $<) ; then \ $(RM) $(notdir $<) ; \ fi ; \ - $(LN_S) $< $(notdir $<) ; \ + $(LN_S) -f $(MANUAL_SRC_FILES) . ; \ if test -d figures ; then \ : ; \ else \ @@ -366,21 +693,79 @@ $(MANUAL).pdf: $(MANUAL_SRC_FILES) fi ; \ $(DB2PDF) $(MANUAL).sgml -docs: html ps pdf +editions: docs cups_docs gimp_docs util_docs + +util_docs: util_html util_pdf +gimp_docs: gimp_html gimp_pdf +cups_docs: cups_html cups_pdf +docs: html pdf + +all_util_docs: util_html util_ps util_pdf +all_gimp_docs: gimp_html gimp_ps gimp_pdf +all_cups_docs: cups_html cups_ps cups_pdf +all_docs: html ps pdf all-local: $(ALL_LOCAL_TARGETS) +util_pdf: $(UTIL_MANUAL).pdf +gimp_pdf: $(GIMP_MANUAL).pdf +cups_pdf: $(CUPS_MANUAL).pdf pdf: $(MANUAL).pdf +util_ps: $(UTIL_MANUAL).ps +gimp_ps: $(GIMP_MANUAL).ps +cups_ps: $(CUPS_MANUAL).ps ps: $(MANUAL).ps +$(UTIL_MANUAL).ps: $(UTIL_MANUAL_SRC_FILES) $(UTIL_EPS_IMAGES) + for i in $(UTIL_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + sed -e 's/\.png"/.eps"/g' \ + -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ + done + cat $(UTIL_MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(UTIL_MANUAL)-eps.sgml + $(DB2PS) $(UTIL_MANUAL)-eps.sgml + mv $(UTIL_MANUAL)-eps.ps $(UTIL_MANUAL).ps + for i in $(UTIL_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + $(RM) -f $${j}-eps.*; \ + done + +$(GIMP_MANUAL).ps: $(GIMP_MANUAL_SRC_FILES) $(GIMP_EPS_IMAGES) + for i in $(GIMP_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + sed -e 's/\.png"/.eps"/g' \ + -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ + done + cat $(GIMP_MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(GIMP_MANUAL)-eps.sgml + $(DB2PS) $(GIMP_MANUAL)-eps.sgml + mv $(GIMP_MANUAL)-eps.ps $(GIMP_MANUAL).ps + for i in $(GIMP_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + $(RM) -f $${j}-eps.*; \ + done + +$(CUPS_MANUAL).ps: $(CUPS_MANUAL_SRC_FILES) $(CUPS_EPS_IMAGES) + for i in $(CUPS_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + sed -e 's/\.png"/.eps"/g' \ + -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ + done + cat $(CUPS_MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(CUPS_MANUAL)-eps.sgml + $(DB2PS) $(CUPS_MANUAL)-eps.sgml + mv $(CUPS_MANUAL)-eps.ps $(CUPS_MANUAL).ps + for i in $(CUPS_MANUAL_SRC_FILES); do \ + j=`basename $$i .sgml`; \ + $(RM) -f $${j}-eps.*; \ + done + $(MANUAL).ps: $(MANUAL_SRC_FILES) $(EPS_IMAGES) for i in $(MANUAL_SRC_FILES); do \ j=`basename $$i .sgml`; \ sed -e 's/\.png"/.eps"/g' \ -e 's/FORMAT="PNG"/FORMAT="EPS"/g' $$i > $$j-eps.sgml; \ done - cat $(MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(MANUAL)-eps.sgml + cat $(MANUAL).sgml | sed -e 's/\.sgml"/-eps.sgml"/g' > $(MANUAL)-eps.sgml $(DB2PS) $(MANUAL)-eps.sgml mv $(MANUAL)-eps.ps $(MANUAL).ps for i in $(MANUAL_SRC_FILES); do \ @@ -390,21 +775,78 @@ $(MANUAL).ps: $(MANUAL_SRC_FILES) $(EPS_IMAGES) %.eps: if test ! -d figures ; then mkdir figures ; fi - $(CONVERT) $(srcdir)/$(basename $@).png EPS2:$@ + $(CONVERT) $(srcdir)/$(basename $@).png EPS$(EPSLEVEL):$@ +util_html: util-html-stamp +gimp_html: gimp-html-stamp +cups_html: cups-html-stamp html: html-stamp # This ugly workaround with SOURCE is because db2html doesn't seem to like # "./users-guide.sgml". Note that db2ps does not have the same limitation. # html-stamp should *only* be called by html--it's just a timestamp! -html-stamp: $(srcdir)/$(MANUAL).sgml $(PNG_IMAGES) + +util-html-stamp: $(UTIL_MANUAL_SRC_FILES) $(UTIL_PNG_IMAGES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(UTIL_MANUAL_SRC_FILES) . ; \ + fi + $(DB2HTML) $(UTIL_MANUAL).sgml + -$(RM) -rf $(UTIL_HTMLDIR) + mv $(UTIL_MANUAL) $(UTIL_HTMLDIR) + chmod a+rx $(UTIL_HTMLDIR) + touch util-html-stamp + +gimp-html-stamp: $(GIMP_MANUAL_SRC_FILES) $(GIMP_PNG_IMAGES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(GIMP_MANUAL_SRC_FILES) . ; \ + fi + $(DB2HTML) $(GIMP_MANUAL).sgml + -mkdir $(GIMP_MANUAL)/figures + for image in $(addprefix $(srcdir)/, $(GIMP_PNG_IMAGES)) ; do \ + cp -p $$image $(GIMP_MANUAL)/figures/`basename $$image` ; \ + done + -$(RM) -rf $(GIMP_HTMLDIR) + mv $(GIMP_MANUAL) $(GIMP_HTMLDIR) + chmod a+rx $(GIMP_HTMLDIR) + touch gimp-html-stamp + +cups-html-stamp: $(CUPS_MANUAL_SRC_FILES) $(CUPS_PNG_IMAGES) if test $(srcdir) = '.' ; then \ : ; \ else \ if test -L $(notdir $<) ; then \ $(RM) $(notdir $<) ; \ fi ; \ - $(LN_S) $< $(notdir $<) ; \ + $(LN_S) -f $(CUPS_MANUAL_SRC_FILES) . ; \ + fi + $(DB2HTML) $(CUPS_MANUAL).sgml + -mkdir $(CUPS_MANUAL)/figures + for image in $(addprefix $(srcdir)/, $(CUPS_PNG_IMAGES)) ; do \ + cp -p $$image $(CUPS_MANUAL)/figures/`basename $$image` ; \ + done + -$(RM) -rf $(CUPS_HTMLDIR) + mv $(CUPS_MANUAL) $(CUPS_HTMLDIR) + chmod a+rx $(CUPS_HTMLDIR) + touch cups-html-stamp + +html-stamp: $(MANUAL_SRC_FILES) $(PNG_IMAGES) + if test $(srcdir) = '.' ; then \ + : ; \ + else \ + if test -L $(notdir $<) ; then \ + $(RM) $(notdir $<) ; \ + fi ; \ + $(LN_S) -f $(MANUAL_SRC_FILES) . ; \ fi $(DB2HTML) $(MANUAL).sgml -mkdir $(MANUAL)/figures @@ -426,7 +868,7 @@ install-data-local: $(STANDARD_TARGETS) $(INSTALL_DATA) $(srcdir)/$(MANUAL).pdf $(DESTDIR)$(datadir)/$(PACKAGE)/doc ; \ fi ; \ if test -d $(HTMLDIR) ; then \ - HTMLGENDIR="$(HTMLDIR)" ; \ + HTMLGENDIR="$(HTMLDIR)" ; \ elif test -d $(srcdir)/$(HTMLDIR) ; then \ HTMLGENDIR="$(srcdir)/$(HTMLDIR)" ; \ else \ @@ -437,7 +879,7 @@ install-data-local: $(STANDARD_TARGETS) $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/html ; \ fi ; \ done ; \ - for file in $$HTMLGENDIR/figures/*.png ; do \ + for file in $(srcdir)/figures/*.png ; do \ if test -f $$file ; then \ $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/$(PACKAGE)/doc/html/figures ; \ fi ; \ @@ -466,7 +908,8 @@ clean-local: if test $(srcdir) = "." ; then \ : ; \ else \ - $(RM) -f $(MANUAL_SRC_FILES); \ + $(RM) -f $(MANUAL_SRC_FILES) $(CUPS_MANUAL_SRC_FILES) ; \ + $(RM) -f $(GIMP_MANUAL_SRC_FILES) $(UTIL_CUPS_MANUAL_SRC_FILES) ; \ $(RM) -rf figures ; \ fi -$(RM) -rf *.tex *.log *.aux *.dvi *.gz *.out *.junk *.out *.fot @@ -503,18 +946,42 @@ maintainer-clean-local: help: @echo " " - @echo "Supported targets in this Makefile:" + @echo "Targets for the complete user's guide:" + @echo " " @echo " docs - creates PS, PDF, and HTML documentation files" + @echo " all_docs - creates PS and HTML documentation files" @echo " ps - creates PostScript documentation" @echo " pdf - creates PDF documentation" @echo " html - creates HTML documentation" @echo " clean - deletes machine generated files, but not outputs" @echo " veryclean - deletes output files in addition" @echo " help - prints this help text" + @echo "" + @echo "Targets for specific manual editions:" + @echo " " + @echo " cups_html - generate HTML for CUPS edition of the manual" + @echo " cups_pdf - generate PDF for CUPS edition of the manual" + @echo " cups_ps - generate PS for CUPS edition of the manual" + @echo " " + @echo " gimp_docs - generate HTML, PDF, and PS for GIMP edition of the manual" + @echo " gimp_html - generate HTML for GIMP edition of the manual" + @echo " gimp_pdf - generate PDF for GIMP edition of the manual" + @echo " gimp_ps - generate PS for GIMP edition of the manual" + @echo " " + @echo " util_docs - generate HTML, PDF, and PS for UTIL edition of the manual" + @echo " util_html - generate HTML for UTIL edition of the manual" + @echo " util_pdf - generate PDF for UTIL edition of the manual" + @echo " util_ps - generate PS for UTIL edition of the manual" + @echo " " + @echo " editions - generates HTML, PDF, and PS for ALL editions of the manual" @echo " " -.PHONY: docs html ps pdf help - +.PHONY: docs cups_docs gimp_docs util_docs +.PHONY: all_docs all_cups_docs all_gimp_docs all_util_docs +.PHONY: html cups_html gimp_html util_html +.PHONY: ps cups_ps gimp_ps util_ps +.PHONY: pdf cups_pdf gimp_pdf util_pdf +.PHONY: help # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/doc/users_guide/README b/doc/users_guide/README index 9dc1b90..c6f1025 100644 --- a/doc/users_guide/README +++ b/doc/users_guide/README @@ -1,6 +1,6 @@ The files contained in this directory are all of the source files necessary -to build "The User's Guide to the Gimp-Print Top Quality Printer Drivers". +to build "The User's Guide to the Gutenprint Top Quality Printer Drivers". Type: make pdf - to build the PDF documentation file make ps - to build the Postscript documentation file diff --git a/doc/users_guide/cups-edition.sgml b/doc/users_guide/cups-edition.sgml new file mode 100644 index 0000000..2056bbf --- /dev/null +++ b/doc/users_guide/cups-edition.sgml @@ -0,0 +1,58 @@ + + + + + + +]> + + + + The User's Guide to the Gutenprint - CUPS Edition + April 7, 2002 + April 7, 2002 + + Andy + Stewart + + + 2002 + Andy Stewart + + + The User's Guide to the Gutenprint - CUPS Edition, Copyright +2002, Andy Stewart. + + +&title; + +CUPS Edition + + PLEASE NOTE + + + This manual includes a subset of chapters from a more complete +manual entitled The User's Guide to the Gutenprint Top +Quality Printer Drivers. To obtain the complete manual, go +to the Gutenprint +Project home page. + + + This version of the manual has been specifically packaged in this +way in an attempt to better suit the needs of people interested only +in using the Gutenprint software with +CUPS (Common Unix Printing System). + + + + + + +&history; +∪︀ +&gfdl; + + + + diff --git a/doc/users_guide/cups.sgml b/doc/users_guide/cups.sgml index 60988a5..c39506f 100644 --- a/doc/users_guide/cups.sgml +++ b/doc/users_guide/cups.sgml @@ -1,14 +1,14 @@ - CUPS and Gimp-Print + CUPS and Gutenprint Introduction CUPS is an acronym which stands for Common Unix Printing System. It is assumed that the reader has -properly installed the CUPS software and the Gimp-Print software. +properly installed the CUPS software and the Gutenprint software. This section will discuss adding a printer to CUPS that uses a -Gimp-Print printer driver, as well as how to modify the various -settings supplied by Gimp-Print. This will be a rather quick +Gutenprint printer driver, as well as how to modify the various +settings supplied by Gutenprint. This will be a rather quick explanation, as the CUPS software is quite well documented, and it is not my intention to attempt to duplicate the CUPS documentation here. @@ -162,8 +162,8 @@ supported for each printer, as denoted by the initials in parenthesis. (en) would be for English, (da) for Danish, (sv) for Swedish, (fr) for French, (no) for Norwegian, (pl) for Polish, and (en_GB) for British English (see ). Also take note -of the Gimp-Print revision for the driver, and ensure that it is -indeed the version of Gimp-Print which you have most recently +of the Gutenprint revision for the driver, and ensure that it is +indeed the version of Gutenprint which you have most recently installed. Once you have made the proper selection, click on the Continue button. @@ -213,7 +213,7 @@ After clicking on your_printer (epson_870 in this example), a window will appear similar to that shown in . It would probably be a good idea at this point to click on the Print Test Page button to ensure that -everything is working properly. Take note of the Gimp-Print revision +everything is working properly. Take note of the Gutenprint revision printed on this screen and confirm once again that it is the expected revision. @@ -232,8 +232,10 @@ printer you selected when you configured CUPS for your printer. The screenshot shows the selections made by the author for his printer. The individual selections will not be explained in detail here, as they are the same selections which are available when using the -Gimp-Print plugin to the GIMP. These selections are explained in -detail in various sections of . +Gutenprint plugin to the GIMP. These selections are explained in +detail in various sections of the GIMP and +Gutenprint chapter of The User's Guide to the +Gutenprint Top Quality Printer Drivers.

    The CUPS Printer Cofiguration Window @@ -256,7 +258,7 @@ detail in various sections of . It is possible to use the CUPS printing system from the command line. While this document will not delve into all of the specifics of the CUPS command line interface, there are portions of this interface -which are specific to the Gimp-Print software. +which are specific to the Gutenprint software. @@ -265,7 +267,7 @@ printed output (e.g. when printing from a script). However, most people (including the author) cannot easily predict what a command line option of "-o stpCyan=1350" will do to the output. It is therefore a good idea to use the GIMP to view the image and the -Gimp-Print plugin to preview these settings before relying on the +Gutenprint plugin to preview these settings before relying on the command line. @@ -284,7 +286,7 @@ general format: When typing the command directly onto the command line, put all of the command line options on one line, and do not type the "\" characters. -The list of possible options which are specific to Gimp-Print, +The list of possible options which are specific to Gutenprint, followed by some of the supported choices, are shown below: @@ -308,7 +310,9 @@ followed by some of the supported choices, are shown below: ]]> -For more detailed information, consult the appropriate sections of . +For more detailed information, consult the appropriate sections of the GIMP and +Gutenprint chapter of The User's Guide to the +Gutenprint Top Quality Printer Drivers. diff --git a/doc/users_guide/figures/CVS/Entries b/doc/users_guide/figures/CVS/Entries deleted file mode 100644 index 9984d4b..0000000 --- a/doc/users_guide/figures/CVS/Entries +++ /dev/null @@ -1,19 +0,0 @@ -/.cvsignore/1.1/Sat Oct 6 22:10:48 2001//Tgimp-print-4_2_branch -/README/1.3/Sat Oct 27 17:08:14 2001//Tgimp-print-4_2_branch -/cups_admin.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/cups_admin_device.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/cups_admin_make.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/cups_admin_model.png/1.2/Sat Nov 24 00:42:16 2001//Tgimp-print-4_2_branch -/cups_admin_success.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/cups_config_printer.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/cups_my_printer.png/1.2/Sat Nov 24 00:42:18 2001//Tgimp-print-4_2_branch -/cups_printers.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/cups_startup.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp-print-gui-1.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp-print-gui.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp-print-new-printer.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp-print-print-color-adjust.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp-print-setup.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp_image.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -/gimp_startup.png/1.1/Tue Oct 2 02:08:45 2001//Tgimp-print-4_2_branch -D diff --git a/doc/users_guide/figures/CVS/Repository b/doc/users_guide/figures/CVS/Repository deleted file mode 100644 index 3897ed4..0000000 --- a/doc/users_guide/figures/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -print/doc/users_guide/figures diff --git a/doc/users_guide/figures/CVS/Root b/doc/users_guide/figures/CVS/Root deleted file mode 100644 index 437b605..0000000 --- a/doc/users_guide/figures/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -rlk@cvs.sourceforge.net:/cvsroot/gimp-print diff --git a/doc/users_guide/figures/CVS/Tag b/doc/users_guide/figures/CVS/Tag deleted file mode 100644 index 5e5b854..0000000 --- a/doc/users_guide/figures/CVS/Tag +++ /dev/null @@ -1 +0,0 @@ -Tgimp-print-4_2_branch diff --git a/doc/users_guide/figures/README b/doc/users_guide/figures/README deleted file mode 100644 index 4d37e87..0000000 --- a/doc/users_guide/figures/README +++ /dev/null @@ -1,24 +0,0 @@ - -Here's how I created the screen dumps shown in the documentation -================================================================ - -0) Bring up the interesting window to be dumped - -1) Bring up the GIMP - -2) In the GIMP, select File...Acquire...ScreenShot - -3) Click on the interesting window to be dumped - -4) Select File...SaveAs, PNG, and the file name - -The encapsulated postscript files are needed for generating the -final .ps file. These are created from the PNG files using the -convert utility. The PNG file is needed for the HTML output. - -The image scaling is done in the DocBook source code contained in -users-guide.sgml - -AMS 3-oct-2001 - - diff --git a/doc/users_guide/figures/cups_admin.eps b/doc/users_guide/figures/cups_admin.eps deleted file mode 100644 index d33f637..0000000 --- a/doc/users_guide/figures/cups_admin.eps +++ /dev/null @@ -1,594 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -b7b7b7 -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUBl`L]QA'PR;nhpV_@OJra;bQAF7B*?EZ@C#34#RMF(ZjG)TgXtZOK7Dgt=:HCaA*!^B -'^\"TT5+$+5?+JD.e\5]'miTJeJE:`Gc3VDclDGPta^"k)/5Yf%$D-Q'M_GU`$o*T168H]>Kc ->]#CFYi67pKr$Rpo"]ACnR5Dt-K#NE=eA[e."7dNWWO#h&cX)5G>o!B9@+_-T>*g2=(PqTA_j -0K?VClI5D%ToKtCBj<7P%#7MMfXlUE(;c$VutB+jk1a9g[@UtLT&:-sIm&riQ?[u)IP[k5n)/ -I_%_,Lk:/`f&VZYlp!?:qsM,Uc8Le,?.]6=`*,gK(`)pm(I%$6%6(eX-Ip?h_o['IhgOS_p7'j-'ZJ3Z'\$u+-N[a8@8aH`;2dL(2p")mV[kSZ)t/e!jrp2C ---Qfrqqq3V2=FL('E&54usJTL7-_PS#MAM"BSZ/f<,%Rrq#dPB4^:Ehj-]GC?t+U`Q(IrMdg2 -R1,E.jOm69N.Xja$R[VsAO6rS,T;TZWap.3Mhj-][Bfc9g1A+j/G?7_4ps>D0q$cOSBbn.+CM -`6k==glAdrp7m^)Ob.:HH!E-20kl;9Z:R2I0GEk+f&s;J(&jegWNnX,X<4343lNs7odqfll5Y -R?:@e/%p0TIC^Y;F=M+GT;9KNCF:(UHr+l^IE\[-.uYk)%PJH!@PMZrEGC^%W/gMW>cc3ikW< -C(Rqi(_hWeQ3e&jfSW:5Yf+&ald`6%Do+D(;6NN;I>g?VfZ\kt/?gX#I<>RTX,I[ZE2.^+nQO8cB+_iVN^CCt?"NjXSGeA2SbfS_rn]9UT PU> -+PYl0?1!%8'fKqPmQhD(k),>`WJX<\nkhI7D^mY%+3q7T#4[D<=-ArFMc_ -DTq1\N\7GrOL$3%f#^E_=:U`6PL$Pg]$n]LPoKlMq"3fC>- -;AWTNGT;q]U(4?cq1o2GU -Y5q7a%4-DLhe+AWY-';k`hQs;iMH"ZDLM`7?Sr[9@.]X@WQ;]Zhep0o?ig_.EZD#7J>pRY-rY -O0DaC6EDiQPnKI#fU#qdcMrL6`MdheLcoIB44-/hripc(!rp)l6_/e5 -kpn;RJrbUnC,)-uJE@f#3N4eQ.Q(<)dUd.rgC!r]J<*[,8?hC'tKk)iYq6>F=je^.laEW_LT0 -S3F#mbN>U_g9fMDh"fNJd\8M,2qEU>[>q_\*U2j2MTlo3SjC*X->JH-;"f6geWpJOXP0U$ZST -nnSp0lGtjX0=oUV%u9Ea*@ldR%>9D>Ep`$YiP/P`D)'3 -@*rl6#XZ]D>h2n[n>p3U:7ERl=qh_\e6ZaW:m3m,i,2h/lgXt%bdMMcNq7e)l9uY`bceFfopU -MSE]+S8#7TpcE4bEm$D&,3N8X#\f"0%U017&Q(03Qj:l%Ae`K=*R;k1W=;6K"G.impPqP@)&? -,q;2s4Yid7F$?h4bH+mSSlu#a^X@)2(Q_Obh5Yj1Ka`OBD$kr_SDY=*K-5Z2+($5>#f6o50De -2&!C&B+-=,BBQ)g@0GhbPiS3Zjm'-6-^CdAmRQ'u'$!STpn`)']I1COSneX3qG[cJ6\_L(2iM -'?gZd%!ol8EoXdeC'Ppa78APqkeV;,*PDIRatm%(`T[_#^Y]iX=a0S_BUX5(-Z7OmYs@[ -SGWJ%Z?j_g5=KR[q7L:Z''OKKLs-@]I/+QTJj^*geBf\]t63hWbi1ZEPp)X/g\fuEV'8/L=e%s_p -7'j-,.2Sr9""XpD7E/Ft)tVC'0MaGRb","LpNXi]GlPM_JHXrI++sg][ad(aU37l6h>bIeH8, -S@_&E$_sQY^+qb-f;Ykl"_n-fB^+0]F,+uuVm^U[W"&B-Ugq/,9ETa7g<*9c2UI)BcDWCtJ+c -A-S@_&E$Zj->>CVmJ$O"0t%0-A.zzi1@%-L47H="^DH*qBfS2cabG"K5\kDs*V*&c:`"+N4?h -&'`+*]2lX_LYj3I9B=s@/%ST[Y;bjr[)-.Wn8-^U#Aqna):9n0 -a\DE'5E_Sp)Wff3K$N4Zc+B+jS*;quYe3VU;Zemc^SNN)-O'6*GIbP;B[)MS]*5tC.a1.pD9$ -=)>%!TW-3SYhV,'K,46e)m"sSIM#K;!m+Dk+DiFj\Zkn3a"-if -'H9`VQpL9Ep<=oGh5PMW'fB*!`8:0)JcV_W]$=`9h2GeK\>Z+'eEC7^R[T<[g%pM55?X'A0(F -q5T^SnT.6kcf`$f7?M+0?FlL%>+`K^LuT;E2W@`f -bN;N8@QU&PN/\gfRJH!GSg!O)g&kJaJRZ8^/,7?LpK_r-AX/*.jY0/CP@O9'32N%sYLN3/dZl!([SBr7Hl*7?(<=03^L/ -?Q@?EG@((>H<3W4)X).)mS;$P>Q2>&@rS37W!&,?(3#qT^#j,mBPpB-gIM<:;$u0ESkWeG9-X -\>a4'DJo0Ara(JtpHVp9%b(-3DkO)*sWqH\C(@@ou53`/Sk;I!lNNujC?g?Bf*;aHbff8;_5F -[LR+3E#&P`&G&04#)C%9Y'Y'',?2\uhA$N[=G-lr_o'C$O)tfq\Dk.s<.a,!CFs_5) -mOF*Tgbo8bVCtQP'jS/V+Ue$V-_7C)6=9-8^oD8?eTPbnfU@tA;["qSNpOhjF"OfIf,[8[54? -bTk4g9OT^t=+Ees:JRO#(JA%]q/GVA-"77c75SOXDgW^iF^1:k]F>HLDQr2Hu?D072%2jF]a+ -[``iW8CUJ'=NpDiHuW?B:\u1ePX/+D_Cdaap06'pVd`hX/ltGVH#LOMJan:^:C?/C9(R'R=F? -VVCV8ge8MD-mu8)mUV\"h],K^TbAg.ZQQ%tW0\8D2lL"FBXe+q@5f%,,)gg8IVSCn:GICF[\5 -rVX]cE)N9C&ucMVI@_b`&+BB-gNB@FM^M+>)8r=OGi;PA%@Rs,2J0;S0k>nZE7<.IGCKGd4eV='*M7r4AUfWh$ADUX7SCWb^Wa4ja8 -+O3?nIbIX8aagHHGAA47SdepeVhPlhIVBUYV^5R,&Z"PAN%EUr*#YPV"/XbPpRHcSQmqH]hQV -<;^*8DDUV4af0#=FgZ0k)moF9pK1E+&r@Wm$=X?'5Y]5]$EPB\>QTF``HQ2FH$DpTZn(Vq]]/ -Mlj=GNHe46j9d]nE#rmB%c'eG9$D?(O^2D7E"dm>g#-!cARG1;`%\nego`np&1!`46BjI$02N -/qur?m9W0-O+Pf]:er6XcpGZ(XY8m0]/bZ>+"E=j>OU%-.ueB86uLO_ -kjP0BJB,PX0r10(mN]ndRl-_C/%K=*R=D/4JelI@MYl&,_fMofGNq6U1(FB?p,PBN;p1Uk2A>ahp58uQ,I -Ag<5X3C"o."ZBl]2PQbB;c]9DH'G4Pri3O:?W=kYcX=IX,V"2d^qk7GjNdg;.E;mjI?CpNi_,mK -t"u1k34Z5"XY]ER!1I,gQfJQd5Ns&.RFg\m@:s015'gr/I7k]og#%(b3dVc&e)QQ.5+rYr1k2 -)LG<8^0/2mN-qEWPA*-pYL`!r`b8*D[P2S\fQ5%jO6T=JC&me40?d"_1XrL]f`?Z#RLY/]h2i -7iif2lg=`miqOY=/5LtN:]dlG;d3aes$ns^YWm -!g6-UTE)rjlR%F-'MF\OIak_HD2E;Oh37T@`WA*K-TiEYG -Lhn`-;LLSnAfgm^\]DQ`XPX?JYmXjnl*fY)"2GMA#RcuiW[(tuZ_l%l1B>WFMo?@bZ+Lg8[$rq4P_K]Ooc1Kl6bTp$23Kgo(.IU-r=(uJ -krbg!oE'f:&[Z/Wf!J+]a-,*+/3j+`j_0ud*6!`o0 -?ARUC?6P%?u=91pmg -bh8C]2`tOok[azzzzzz!:V""Sh6o/40OAYnW,m7.$.%,C'/Z)o4:`;\/Q[B#/G?me-77P\@f3 ->oLHCP?HF5L7fXA2;]F=&P8<\:d?2!2%N^R&92&8YqGoWY^gJoL6#GOdpudGi:`Ho'?=*iCJN -Mlp"1<^W'ki%&0$uJL^d#``!.O -k@KR8FZ%34lV:paX-C$NG"\N9?9%NXT\SDOWc^iQ$[b6Ct>CZ9Q,?>aLD;TkJMX@t8RCLtXSE -fWS[1s1'8*:q.,I^6hZV501<*F:?FaKp)7 -iA5J="eS:K&j^AqamIU?7)7=Bb^7cNf:.rt<).qZ^pB)bRpkj&@ra*-L#0%(D9n>J1:9Oi-+, -$"_4tu\[FKTOkI=$0NZHXM[F$dXgI!bhD0g?HV6#PUi`et:H!uH!7fH<+l&XS=`EW[+sWRr=Q0Tp4I"onW'zzpi -b#FB("CQC!>DiZa-17p4!uKilA?Zg*R#="4I:YJa%^=^iVhYi!,SErRk?Q7;=(;/MmgBh%$3dF -%],lq6k2b2Q6"tOB1(pe>@kt,q?D&*Iuj]7o5]@<40?E/s#A8@FCk1pNu*5C:bM)I]_i#TARW -<7Tr@FA+3oM&%TuLf_32b[G?k9X5M+4bfEL#SD"VEQ0`MIbUN"-a:2mr*Ca/IT1*K&Tq'iH%q -FA!"=$/*n3Cj",H/isee5C04Xp,<7B)CTMM#gL0n*lqjp/j($F9m>[G)No%u,H$rgAILiPH -D:9.kB;gj)LYe]4WJT+o6W`0ZLYSQ2WVJI.,1Q;d5]'miTJeJE:`Gc3W!uE*dJ=)(GO>DeI^I -b#2?3^Wzz^r%r%,Lkjemb7\Tbh_-^JnkZ+K<+QN3hSAb*Dd]B%]Bh1#Lir1inTcib)p:Pm[:g -=#dmq?ocO$VC7G$7WDM>,cio3IC1DV2$K?V_AuP)8S>:t>n/=L%&(+t(VK8tQfbW/ZQ.2A, -hs1VV,W#eo^'@W-'Rk6HH^i"(s"AtW4p)fcN4O)`dkFMYt'_N+*?ShO\b@lS+P8o^Q5T0uJ-& -!k)oRXs1A(0.aOpH*K%Mo)lT*sSm3K'@g>^iVhY?ojr=0HEt/Qju51&5:-*()ta-zz!!!"D=Q -Y'cg:YX8q`g(NgNut?/R`+-#+)e2D,sEob[N#<2I?k^?lS:Q:9m>F0O)B5g.R,9Z_Qr^e3ZirIbb!U8Cg!f( -nr`1H0n'hGL%b2Y,[(e^KQ"1?C.;d85FJ40B67T=WB;;l5?d;r^.08Z;0'85VB,q-WO!r3KJh -"-OS`%*r7cpVJ9M*78]gO\)@a/b3@4g^#00X0`VD<9riEF4n((%738Gf"h#nQU8U*iST#Y/i@ -kd9D.TB#BV_perRo='OgNW_[W8W3,VY_7J@k<&1kX(8/+hn3aB+mn%qX?F95Q*/4?X-W,40(HCLBFY\=(`]?`\nONBi>?CcSra[\:.5c++"@F%['EAm)$ag:fJ?e2D]RI[3E2>YFkOd(.]aa1@RU>G/F(J_In]5]' -miTJeJE:`Gc34=q+VF"Q3^5Nc\8teetI'\Ui`;;im8aET1p0VRD3Un@/G -X:@Omdb5`T;JePJR'#Jddd0KB"XqZhi7r<`s[J^QBJZH=TD=N!_mP9;_iF:]!8LYM$5De163O -O^F-cIV;%"p;%])GRrq59^G]#eVL-cHDu(s:On['Rt^!q82-aq^9T>a5O-Jif".K]$`?0I=5- -)uos=zzzzzz!!!!E&:X+iZ_+Q0r8?a-56(Z`zzzzzzz!!#JSP2C!tMI!,g4[OZV?(dS=.uuXh@Qqa\,Z5`uFnJ9VLgcV^5@Zie]L3`j9c8ZJ7dC7@ -La9l-XQe@m*4Z;qqL%T:7+82cUg_mWdV*c9GD-WL"g#oiQ#f[1V_VF0A+cQ2$?nU+B3JS#70- -9)MQ90GNWQ-KY,ctA;'.G -?Y`25M1c+!6%CK*2aZ=Ah)pP?X9nmZRk'\)7`-uSWY0pr(NAZ*VAO>deW(oodi7k8?G2WM>I? -3QV#B7S^gi4%bRq\$E@g3@dc+kZVVS%,Q.UeJGf6hZC\hcpS@%&>Z4k^$H]9lJ"oR5C2;hcan`PHSIgN^,'_c#E-Mga_q[G>)'9bW7&d7BSu*k+3ObO_;Z -)-IS`#JE>EJ'a1OUY88*M\:O%k:s55rZ9<0Or8s\E8iV3d6*Is/3Ci8V:,sh^=D9^idR!BNKu -'Sl7Mrl8ZkCNo-Prh[oLVBb\BVM-!mC\jIL_1F40e8fqleb;>.37A8Rp?W89]!$eEV$!c#>S' -'V/@fRMM+n*[Ncb1g"C*Qefk!-9smIKR2[),4kuLVAS@bn4P@EU8>;$j^s=:.6+I1=X1>6Vm' -t&A&[8_]lFPVlZ!S\5#Ym3C.T?pf_r"ZfoY?Z2uo?m+AVq;];lYI#rF.m7Hp1?OEb15p]=O;_ -pfs'pD#Ye=5P0CMou:8$?BL],,&+>c>)>AuQ@'>iED]g,*Hmei`IupJtMWVM(Pp]8j,XkBa=F -75/eeP\b>B,\qML&hCT@D6HmWMiEA5Ah1iJ@C'DI=:LR]n]`_'\Dh9=M]iP/Zb^=*LeEQ4'0i=M!\i+7uK`Z -r`u\`^f3'.I8'e[ZJnt\lNia81FKo>k1?e'R.#S=R()RUDlYfGKqJcZ>=;@"lVU!-Y>fa%lPT -@hg3Eh-+d:mZ),BGAp"sB81KD\SXmM[+^@AY0#E4onh)T&"OhA>AAX.]ju5KrR]WTL-^NO*P, -=J9_t=Y_Qai4P8TdGV7'G=37_Bu*&pS^Pam=k2`8DB$am`V:S)&rL%u"4qP1kmGk;oI8RUI8D -,`H3EB.=63PGYCZD4K9M)mLroIPOVHM\HDPW]4ktM@C9L`\JP$b1(%84f0;[)fQ$4C4"scM+q -8GW%HS)G$:3^`WKSC2K(7KpcQBon`*g`,#_5SEIOn6TMZ$mbr0:U@Y*(t$n8'l,K75DA2uX^q -ULnmX\WerG.cNQX[L$Hqm)bM[6:c3=\i3\2>YjH)rDFgo\n*lm/DWVC.J#=1sXDM;aD`"*bn5':+ -COMAeN4E_Cs0=.SXdaiFU2M34TXa$k5tqAiVo=`Y8^g/0GB4>%?2Wm'km\hh"_IDtEYPOA\A$uCU_J((^LT+2a0crXpe[,08e ->j7VCjQ)$7Tu`4JCrKO*=>,pp8V^ZXTqjFNcW:)kLorW*RN6E -A"?Xjuhh4k:c8b/3MVMm@JFoR/Cd#,@Zf]`1<-09nn8-^l1m4I'9iF$t]blo*C5Fq@kipBEg; -N)4EAiaj#0,=`%j1Qa\4/sF&s5XY-]L]USb$^b^i6]HI9UHjglnV\]<\2p -@kaKiDM_c1eIK>#j2u]sEhh;QT>a@'a7hNg]jl(m@HeO5*Y3XHB[Ep=rDt?PIL8HmG-`,dTXL -K94mo!\Rih\2zzz!!(q)nf*,D=9(#eT26Jo%&LDY%!-(`VFp$`U?Z[bc>c6*Wn!D-d.k6!6#s -Yrh\2jX?2C#m!& -qAf1>:_$CQe@+bQ-+.HdM8`ANXjiQ'hH?jq[9+#,D%As/:V)cg=Dgp_^RYupSA]HY4T/@GkOb -,9V:69?]sJK^VC**#^XR2%2AJRCXQso7F]rJDkHs/V$YilPP/G"tZpDD;:tsU"dZ^8gdNpK!C -2r?G(*f@ZlWH(bilD -.HHZspQF;P!-W:*)919KFW"2Eb*I1P9R\-D+/8ei0RW<<$N=et'/agX8h25+-=NC#I_eMOlim -Bt9=8[`)-ZC+DHp.@UUE(gWpq2%R)NK5O[[ebV29$KcdIb+ -N$gO>&@l'E@S0$SWoYS?W2@K3N:OXdE37,CA[l"oVA$WfWnFWXh)u)S5jd0T_CEmbsVDUqKJX -_'^bh: - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF diff --git a/doc/users_guide/figures/cups_admin_device.eps b/doc/users_guide/figures/cups_admin_device.eps deleted file mode 100644 index 637fbf8..0000000 --- a/doc/users_guide/figures/cups_admin_device.eps +++ /dev/null @@ -1,581 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_device.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUl#u't[Y6#VRXOqgP(QJG*/[+HGMrGWUiH]MO*Z_b?>HMp2JoD:0*rIu>3_uO)Oma6^A -tb_1B?j]-e&@g#1NkF#LitG#LitG#LitG#>psEW-@i;_+-9$[CCgY5#!kYhYC(+6NQ+G#kH-! -*)pd]HF2ZL;2Zr"(s+"\o?WJ5!cSCi;4I/KAWIJ@e6*Hi(er@A+a?8ki2I.@GnJ1Xj*#QBAut -2SkO;qZJD1[djr<+MMPI2[Z8Pg\qP_S*i4Jft"(V#0HbXMF*!\(0c*T>#AO+D/@T%[G@G -,QYFo1#"R+A_'s,W!TLh.b=BuNpVrh#\ed(qD.h2L$6lM&o0[4TK&DC+^S2o)W9p0MR^^7[ZE -Qt2L=r+?p'*8^$cH1JQpM3l3",V#afLX28Yd8_$1+*/,R(Y&m<$etPr0uj=,1/A:`Hnj:`Hnd -:`FWn:`Hnd:`Hnd:`HndT>*Pj\/15*Jg'ni"=NqW2[fV05+c.uO1nf4.Za"a&tcpbc1-Y@-@g -eom%aHSKG%G&>fp^QD3+,GYJQ0@m%aHSKGI]DB9,pE6#j.AV)AXU>Wmqtpd'f(DjIpHg[\eu: -n+;a[U]@7pJ3YL\hecOCkUO'TdP]#=I?M/RbBTZmd,^-jprUp&n853q',H3d -FH;t]HqO3+@Rt9(JiYS;:)miXI>CTcT?N6VCk"?Mq^OBN*q.]'1M_`8aO!-2LSgrc*O1`d]KY\V)GpbiRQL$r]Vl_YP[82 -m*)E+NF%!q4q1%D>ni=o-`&Qpg8iN-+7u#OSF^K"9C']Y_dd.K/7tG;9l2@%4cg^$ZfPm'6g( -Oho6i%>>?u%m\pY]Q.!u[$O!n*=Uq+1m5!Qa7N_4/pIeiSZn8-3/I(\0J)QTi3q9P[*7I'OoO --PiL]ln^cla:"UAn$Z9MpaNgHne(bJpR@o5ST]/D/uo*$HfHi0>#]rh2/+dW_M!+4@F$B\#6: -Fk1-n>@QS8."j]*&[UP/]4'g3hZ*0PKeArrDg^[4(cUoGHHL1j5hhkknHjqRhXR[,"m-9]@@s -ba/Q-[14=8Jpsp2)Id2F!oBiSX4bP%i=Wg*gAp,j1]B4A'V+A87mZCg#Q[dM\H,p0X]*rcn3b -q>3E>>Iqkj^.ji?6]HS(ZM%9VrZ*MEd[K`A`k/4Hk4(,UN20Kk%]tP9\Xk,B+Zp?ii.[f.C2f -6GQA_.O8=,`_bPcbKX/!nJM(kN@4_5hqC@br./GMA@1Prtb7="HL)gMt97;htUC9qs0@e4@3] -faNhH?:TsR^1Yc/Gl>$W7pO-4r`dRfhp)X9Dif0`$f>b5 -kLZN@"-Y>0B"Z+&2P='(8M(MXFDCGuuKtd+m4'8m>\Oh"s-m)$[gh,ldZk6D=>Q2=qJm(!$XlI -Ae9aU].eD'bDgT]Bu(FOX"X<3dQ8m?2bLiM]5o? -?s4j*?6OR.3k5,H_0>rN>XA.Dm)gG'&mS"\fc-l,pc+uL8dJZu&&,:n:UVHj-7,_K9o/O1CmDXq:BFB^*$45<80+F"k`!UFQJ]0Le,&/#+><^"UV#TJeKWOc -FcLGDp2+C+CZ_g;"8#3po)J@`5HO><*#>"pQd0RIl4+cbUm!O00&h_ORmU2OrjU'`qa0"onW' -zzE(a7#A&%3%,HdhiHWRE9kM1RO+$;F:p>p+mSX.u%>&h[7Rsod4GG!sX"U@iGla=.oY&pLiS -D;Vf1nV2@hVVB!pX)tF&*+0![]5@T8mY85<,)>EV'H<'p:]-S'jFOKH=CLZB#dV-FF'X_OJ&*gRo_!)aRSh_,&Y9q&c(n'Z1b1Vh1j+V:oNSU-8!CU?HdpaGRshaYHa -b5t(05Bgms:]Th7'bVmZcYd*aN^R3/m!sbh]"#H]rWI[W6FG]e$B[o*YV@A4KLrV5B=4gV,fa -?(2i\c",)5]JXQ\(eqDT]5g4oIk.QYJp?o-UAFbuh0';^`#&@%m?.VhJd*T?E@@A3Q5X*GS=B -(_d=r98B9'Q'gr/TcJ+ge`n(:tpjd$&5FXrLqPWf!pNDTJ8WtCK2hlGQ[e5[?"s4#q,?<6nY& -oCq+]Wd&*(l6(7:T$p/8EFZtrEd%`c&(s-^hcd.b=!t6a?;qlAQ*Og?ZP^!MIOacbQp@8 -,"C'Q&VRL^^'+UEm?2?Tp,uV-qm9d=QF7g:]:>^TejI9nNmTk"k:3V`'M).*&hL%+0"LBdYF_ -TC2=`egrVe9YR*%N&4##_;2p9`Q'!)*baXVS#Y)`ZWO/,.m]IrIEO6#Fj&8F'n7H8Y^>]F]"H -qG1uFQ"!fCJ?^oLQud&of%?\g4l5Y7b>*0hR@2`td?.:l;-R\(>"dArlJL1;gZVul[p+88l9c -<(e=uF(@4+6t.A8+grTg?:2nf)6H=a82Dc2#=p0IQ(P4,f:Ee-8TpT`GeB[cp\53sa4MUl+G) -q1h,+*_"!UKmKK9^$eP+L]QD$-N6Fhe(p --QVAmBCGot5]M#\WQ.XRF(d":;1"3Vgb]gI+he3su\U*uZ7;$Mo8@=kT;LSjPDf2Mr]t6^GX,# -%\[l/2?gBP(Q)_JLqjP+d1m%pH]ZI[l*D9RD5g$6mfHb.nF.j*u':SSr)3i*Y7/(GO+C,"L:[ -9Shd2`bo]UFGk,)l/Xt!kd,S,j%n1I:oUi3PF`FKEDt$F[e_pJR5oG2O+YaXI`/V4&JLT^[W]==C3R,6F1Bg!BYEf8DbJimeV`\:E+\9.qQgs;0!HAN -9U&Sfs0/5?c)M_j[JqfQ?@UJJ!Y`?Ao/`"X]j(gD2DL9A)/\oG([[W0>1X]NQBP,Uohn:%;&dFFZ0AVU?H2.[b.QndqW[rdO#_WN -20Z&/KOJWNm)D+c<>*g:;Vsa':0"U^MU%GC#@gBVs:@lr3:7RS]Y\[K]Yd%2j0&Yr!>0:^?V& -e]tct@FMZ>i5AihLBe;h9f8/ZR -2T;V)A)n8WZQVe*2&q=052!bo&_rHpM"cU_$u0mT_cN#o.#i0-"CmmM!qu$]07sD.jU>Er3@m -HBBfe[29k&9sN4FG3(9<`\_kO0i^p'A+-)ng5pU$M)0T+?+IT5qHY`e[]RBjbrSe,Q$:EBQ(% -\dp@]lGH<0TZgRB_5%;36fmP9+]L%cCp*@"7#(h[u2i\eea$ ->YV^:),&UJp0cT@]I\j5Vr\[`)01B%Y0i3^dG?7tK]ecgHU$1 -6qer%&dSS5Zq&?BCQ+QAXDXTooLt_Kp3knR.(+lN2b09^gPu?;lI1H(ab -h[7/.U+P0inM[`CQnS&`[es.#[A@aM\1AAj1Rs`]E@hD8W*p?fPJF;OOsn#q1G9N,^1k?.EK: -X&@IeTR)[`*7NefFb@mD;kKCl9@49DJaYRHVW,LEHhmVW88Lg+e"KkVYVM(hlFEU;$G(:*qbd>hrF]30_[Za>4U*[/_Re\(#!>*9YTeB8PTZXXZXX_F-) -%@0fc<1<#6cSAYfp_Ip:dC2QRDKip!;9G0VKqm6YR29LIu\%%juo`V]ILl5-:SbDUEnIc&QQ40F0$uO2hY=m$HgPTumh=fAF$1:3`M"HV^[!V1,f^ -!.>`Rg\6p5F:15q]b#hWD32?'[MrpB6(4a1AsO@7VX0Uo[392&dIaQ^O)p-O:Hj-6L#ATgbqb -%$O!-0XQBEA%[i*HI&B3!TAYai7KnR/iUI0^ESak4m_]Jihi%gQEUK -C!/$c:4EB.k?c[H2GHJllFX`;hi4]r-%T/M_&Fq^\5KUaurb=@.:BuQ0](W1FJn!=K1\u(E[- -PW>EA>"pniU`fQ(O"OcCRcr`Y3X$p_&.*fDgUb2;q,o>XI2GP6V'<7-/Dt'8$?8# -d&&Is7&G6KZMGpXE\YrG@j??:LB)9,QTA!OS!/sAXj1-.Hd\WfY$J,l#j]^9H]":$=ccEJ1Ye(t'si"; -23!it%pAMjW7>1e[7`*7F]"Gm#>G,OT>D)08oJ3I,V'+22t-/=KbZ5FNLcg8S@2T8H=q3h7DK:At\WO6>n_[iH?aS(JYW -5bj6/9fllqW9_-9B0]Z)q&codX^Ct-cRbC2CC]W2T$-kYd -YkI6OEDJTr71uYBn7Uu'!2`'37Q!W1-"n,WoBc6[CuC==CuC==CuC==CuC==CuC=Y;/P`n4t<,%-9/Wm2Q)Ys"dZt&\> -F2Fom9+7.emh>=K)J3fjF7!\`Q.liLgGY[?atf,j_XgdZ.t3M&4]^$ms>$Mr(,C,eLC -M\tE,"ZpWLTXH6-(2@ob&Bsg'(T&Ap/;!SYLu*L+BL0p?g[fD0[0]((H=:9U$],G=`8Y8$'>[ -M>/+Grl#>j0]E#Z3=J4sfBH:_uDbr`UDD+nV>gXC+Y[3akhbKJP#1`.)O8Q-^DF247:3LHbRO -o&u>lAX'\q'mP8VAjYd&>ggGZnTf63P_sa#uefdYBpS;c^tKm#4BNB[G=>jj]c-N\X>'.gm87 -YEfScp2fKPqM%+J-B5k$++?)!Bo>LpMJOs)n2#mUVzzz!59!DpH%Ru^kJC:#Ae93]cB8pcSM/!^#c7\AY@^T2dE5(%^1S&+[=qWW?&;@,X!G]4qd5CQb'49hIU>4-GIda:i=#&nJV3%!p#pq`M:V\[nD^nXVM"(R`aMkLlYjQ^5n`9'I^>U25K%8>`4@2+>CQjD*!<+KI$k -')VOf)RoB02,FNAY"o$S/WmKjM'V(PSPa$V6AKSu4L/K^ -b!O_m!CAS%>JVuNaD1"M:kW46,iG@D+74FVJ5De1V.CI96,fM56N.c*:qXIG2oqu/\qSd-^-H --H#(sC%g[$*V`#2jdBSL\YLE*"+9&Nk%9mKfD]"SW$pM?JtU7*;[NYq:<7;oIC4K\iSA0I\X;g%78a0p+ -gAC2*L/Ok.M1N,5(HEkk]Q`R$@*I:(@[4)J0&H(A8WbL6i=8co5%M^P&(s"9EBB6O2CF7)T`7 -bn8lZLP%N,NQ_'Ri\tRGRD.iFCQ)QaBp?8Uk6XA_6EZbd>>:WN@&?2Vo@]oFAF<2NAAGhea+UXN:F2j"fp)A1ID7^#@`6" -NtkS*qKVk?Ka0!Xj,ebb']!,e>\XGTrZ[W%HZ_CT4rQ.Taq%[?8RLaV,.qE*]m!im:;ZlSip* -=`$a$B\f_(o)f79'1d"8?#@ft1-[g'D-V")X!_X4et&g'ESG3jM_pK8f(;k@1r0m6Kko-Bf", -\Un+n8CH3r3Q`d8l>[-95:1p"-?O&"QhQ(".gQ8GhC2F171CHdkf=`'m6pUlrKl=S.?d>MaLf -@tDTM2((Ve]*%"BXM,OCJ>J?*c*/RBS[0okON^?9P0SWA1*!o&E0FW9=*2?[u1lK(=k4q,^j; -UM.B$e2OnFf5+AJ7Mffgu^NB9;pU?U(5h$;W]54O22fIra8P0`PS9@bD^TC].A5tF*0C^U\-1 -BpDNO-?Ac-FT%*d.L?go\o/*S$YBI)b%=]n"gSQUSKF&]8OUn]cLU7:lA=V*hos!8u6uIbqm- -<3eq%q(S&;F?%,'3KAMeRLt[b18l$7F%\*F4uF^[`n7Cq*1*&Z4Csej`I1W]=q_=1NUE(S^95Os;H7A<2afZ'$'^mQMBCC`I"EgF9! -=Rggh8:epZI#?nFG`p'(r%rGFmGYC?+k?@ZSmG+aPmbc5JBKpgXAj3b5J!S(EkGd0;nD'FN2M -8gm)0JT5^r2]3IJf"Y5E2#BM(FL5 -=s@kWqj?_9dJB%_ah97Wg[ci+3H8M',kPU\UPGUiQ7*%d=`@#j^WbDn[n&!(bFMp`4sAcM&la -Mf[H0b^lj9EHVTFM-N91X7%%=;uNFnJ=)3X-H?c2OTo35Hks.h[geAS$6Ldlt@U(Wj>9/;u8N -u5R)2]:MRC3)mmnPFH5->?cB30u'GZjcJl-".Mb4]>4:R<2_'D:?]aD/`WWrFD?qQAA%=:!C4 -7E!$9OOTMk^9Pn\",Ppr2!IqDL[Q/J*AEc-@D-V#4AQ`%QNI6T:Jj%]SH%oJbo1':X.Ba.d?; -]o_,XjVS(+tST[9^h^ -nV9=+egeI+te5=2-!1E7Rg%e$1':i+nc;kS"MBZl]OX23`g_TigM) -5=]Y+_o;l6$?sk6hAD$N&9tE-.Bt4B$j-j5?.hrIt^f.6";POn`&$F-1O$r'dFW9i^`b!Im'V -A*mc^Kq>#ZA>_fmtG2RdNNQ'mG --s/.Q1uq.K#+ -d!!msPbeMg4]3Y,[jDQ+rAaHNNQ"gu>@4K)S`U^g+&K]M+*VQ@5-A?"9$Q54d.)lf%BO$oe#d -m[cpA#F\n3AFiWA`&dl/bh19q7o;A>;n'QdJKMg6t/X<"%GFtYkH4dp[Pg>uEYOH#sHuspopk7@ -m)lRT\:toPD\([.kA`*5YgU#hf-HuceRrZoGQ_Sk0*n+Z?j72Tg5("\l>L'#oo!4&)ScnN:H6]qk2PoaV;M?/.beYO*i8d-cK/F!Jo)Mq$US'#F!JB] -?VQ#$Uc&BS@QTAWnsQLPcG[K@2:V=NOHJ&6iKKd9.)#;3fs)ZSW4'5nb]D6+X1#plT0HtOX0% -_I63^Jc7Vm4Toud36LYA>SqFIX)[dI_1qQo+*W,Fcs<78j9S+8T9Ff$1TXJp'mY=iUd;NnG@& -R/rp[A1'+gN'_:!c!&p#"I$pP/:[V<;u9PW8T-@MoG3N>!L'BjA2m92YSt)=PJs;*e*D3<,F[ -NelgnnC?pl+oZqMH`>7"4PX8+ANlm(^Q%7T&5*_9&\54el+a&i]-SnD-DH^pICtc@$-Ul>W\X -F;dEb=.WEe83kp0MRTZRs%N:Tl[KIf1qLp.Wt*dUV0=hko8\EB;SiV&#Oa1"X9'b5&=REao#a -3Ep9^7=t,J`j+VMWKWeeS!BQ)1TGU,F -f/F";llD&8fq=6H(F3,8FJ0q1HiLi))d$D58G*=_LT:W:,Nf)(;Rqq,W\[2jLb20;cdf,N9"@F -K<`,@WSI6gRdLJh;D,Atc;'/BkXOlc8jk9:#oXHNQXcG\G0i<[j>`IJ(!omD>D`_\o;89"($u -8b=;^%I#&l@?7B4*"PQ,4%OD3'-NIJdUBp_F:J+&Eod+.l?hLVY(Jrr_9E0g#~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF diff --git a/doc/users_guide/figures/cups_admin_make.eps b/doc/users_guide/figures/cups_admin_make.eps deleted file mode 100644 index a3caa31..0000000 --- a/doc/users_guide/figures/cups_admin_make.eps +++ /dev/null @@ -1,599 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_make.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 510 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 510 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 511 -12.000000 -622 511 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -9a9a9a -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUlZ2!r[Y6#VRWWdnaMtG"%a?0=466@tUf0^alF/aaCJIGZ2Ad%;a-QpfXLj4b/saW*T) -_i#!C.sFTJfUUW"%5YC'4-Zg-@fo2GapY2ITGNk-kTaaW1'N($,!u@YE@(0;Uhm!:GO`YPcI- -e[F]9<]hW'r/(lEjIX?`kJpR'W5(9*F#L"6;1b8uCHNBG$2Q"PGNanQ;M+>L#l.]oG]d%&/F, -4Un7"b8q[qB@/)7UkUK;;DD(nca]e0tLDrqFB]9$EV:O&RgK/>Y@jhqD6,A[K/BWF,@ESKK9g ->_%.0gTZo@m"B&MBuBc&IjXK#3%h^*>)k*PgpQ,7FYW^+aG/s;2?p]@T/=\1Q$J.`[3iFg\lt -GR9%"2YUAgtE/NADK;biZ]I/,LC]*UrCD#%FG4iAI+JPJ&Hro%j61B]Q^S45':g6X@NSEGSRF -n>JL=)P7nI6``-A[Rd@1"`Ni$,83-)4'V,`ugm#-`0C&/1=[=NXOrVQ_i(6N/7kl^K,Mg -+<2;4*SGgrD8-Cb&drJ&SdN%*=4id%2t7AllT*/(^P24[=*IK[@NT:(>\i-Y@-%HEVOddokCL'D9@>,:b#AHB -6iq08U!7o2n@\r=^reeR'7u%1#TAe_?9)nq10qPBA2E]SRn&))BX.#qqXhC%oo+_$h=k:/_le -t&t;tW>)DWFM_/&>+gi&#]\M_&HAl^[e>@OEWTEh&p$nd+POa -`+R.oQ0/ah6&s[DH'>hNGh'LOEHaR0HLIf_$3--alrfX7?7V;8O7[G`j$%;hjC?s0; -s&oBu,aL#f@pi(GAP]8p#:B9TUN610jS#S9R\,MtSBfDIESI_OD!m*:Nk4* -ce(/rM(TT0F2H*h9Alrnj88TZXASS"*.4LCNU+mF0B0d^lX%h/CgTRI=8r%7fWj^Q![*e*j[" -YJ`Zu&EQ8o7aLo).`g>;dj?C,9>bEoYp3P89ELXg&bNl#jY(l:BOi1QSt`nVjbjZ`&j&_m8); -XYq65NnUkqN7^Hm]&$_sD6Z"j+\^T@Kl3s<XL?Ko8Xh%_LnZ0keX!#Het-CX"k>H<%d6;8'C<,I(pO@ASM*fIn^_6(0Q^@E! -c$VBs1%rjoZGq^DZNG_ng_L'el%)OB&B*N@=i,Ta1]n>#S5HWSTHJ:))[uT+L7Fmoag;nIH// -B&bV"Dh9dQ+:'A+I%2bOV0&Z/59uH*:ElB4^((b&l('oK!3E,n*I4oGK!8Sq_k;gI=E**%b\l[d9=8o;i>%o'aepj<6G;dXjF%G;N@)nC@E.=@jO\f%oj -*T3e!c#&(c#1ZomG4<:V7$i[n:l@5]9Kh0j6-gE$*cL8_`kY;9)Jlhpc\KLmr-@DgSMj[Wsq0 -%nU!N/,J`.2,G*9ehh:7Z)")I[*aKoXNR?0oX+#*En(1s/Y=BB7Ht/+Wr$.s]I_FIX6(g+iKT -V;LSNFisH*roi5]'m7.in?mYo*#seQ*.][=J@;F='/Tr\YPRld5k;hj>p[fnP,A\j50mdf9@J -zz!:ItkII)#=g>bZF[s.MFI]iXHJ+1s(%kh""mBY5"dY^\8hXp-g]DEjlcT$/I?K]nn]@)uDE -H5!5dX9WGH[jeKha\J#4HM)[gSVI#<:Y'mUIt,B)^RMs[Qg8!<3[0lV?^^6DmnQ1?)JLmAtpo -Hq;#`=[`@hYp+(fGlYboUNP=8/75G9t1W"3=V\uijMe5DUQ)5&=PQ$^2_pKaqp)\AMrat&i`8 -5@WWJ)'\g:JE)8b\IXd[_$+gS;q$*f&.uPd+H"CN%W2e2D3'VPaSuBmrBVNbg?u[FFh'Ctg&X -7+5ap8MaJT05jS>2F^V^gMWP.bhpG*N?B9*L?SSa4WLm@cbqd?eb,(c(Rt[7DQt^_d$GYT(6" -`gBJBuCY,s_:C*$6-icG#GL/;T2H2r5IhZj.K$m5AO9[UOmufT436/sI -mp#_CRQ%Tn>:fiH;P-i:<759a=D/0fJ`0CJH$e9BC/p(eb/2Q(>Og_j0V]Blso0F[_8;jCF[> -d#J.]:[Th3aa,'hPU:d#nI]a$R9(CWK*]E0G/HhTX!4A)1Wa<.&Em*Lr?5)#1Odhn[^6ojjR2 -Dm.[-H:;3k++I7qXk))ssdh;Ph)#ZJ&7_9J\l7'WiA@3*`F%pYIrXE'(6hD(ND`Z!S70eU/7I -&8s_nT3O$!`3GC)'@2oaS6<1rE+[;E$CCPgbKrS+o')u\O6_a. -XgqG?uAVV7+X%EM!`qXcL0YcXl)\"L@^:E`#I"25ig;U$>$ -IJiYYUGP/6PflttY@k=gHSQm=51cm%UXaW"B\'BqVFj.SJp,6p`mOO0TgpSHXAo:6:'jSG^Ta -LP^-Cq:,6JpSR^o?]4e95T6fU@t?dfm%DNp=\hHS;c]pDmeF59K7Vk4GfmTXR(D2MgX_Sg85RA -%\kfp`S+/74R,,a-64oe0D)Z$Ec/RhU`u,H`H+MEHO19GFaS0TR=4$dbn)tPHKp?iBeB^B9W: -rkXU!S^\cgP.Nar:+V[F)DlQQS1p*o@?$':RlHNt\<*Oj2.e>=#`_9sXg%oRYpq8CkCp]h0r6 -Srd&2R+=>Ih#&"FIo4Y24'Qp$14:%2>nP9Ot>^f(PF8D9hj$%+gpiXgaM%D/$\l>&dcqS_:93 -riCgR1MlqHj/!LY+',bO>'6[Mp1qK?qP0Vt)#p][[i#o$F?Cp62V^r.XA_NC_LiUod@d%FMPckcP.!=jbbX*91'/R -l1L]QhE-qTdMu?BkaIUF_"NOO#H-dV'J_f3cUUmn]S@eSbE"6>,n^TQ9R9>GH6lf)PQt5eFfV -H9E'V/7:5`2_-UNC>.2/&m1jB=Ok(F;lZIPnVV[3OFIg9@b8qY*MY,i%Q$X+_)Fsh55J";r4h -Ugag:KM^2%IlqrO&mTm*k@5_cbXRI*IjcMl_mX+9j6).7_:A2O:-KdPm9sP>O --eX58iAGh:Z_nW(][.L*`OI(WH9Z4NN2/4'4?bNc:#0:IT`Nl/GY!ZI^*haH]Bf_2Z -^JVHb'YQFBn0qPQ@,TBtjraO`dlXr,c]ku,%7kga>&?g+qZ0ZD_tZ8Hb#fc:Rb6M?F7^\X+S_ -+SQ/R;LFGs05u]q#aX/g1';)%-L5&Hl&NYWX>Nlp1hIO@3jIZQ0qA>OSdW@i%U8RhTi25LM^_ -s[,uJDfW6'?<_*6aj#/FIG/Gi:OhTs:qK`i:?RK&lWWE%:V,B@aPX9Iq`+-i)7VV:^V`&JJI" -gUuWQf2I'XVK/eM'4g,]<[khXEAY[b:)sADUO/CE7N5bU"'ARji+HDT3-Tk\.)nH&KL3KLst8 -=jg&PcS*mN,,`FC;(!f&SB?^k2I1-[M/;3X=CoSHS)N0'-,0bu^.)a -u3/$7@I7BX7rB\Sd$PQaor`qE7"rRC*UMles:;(ap$2cac7GLuHBhM'Yp[HU&$I\Z$V>#JQT1 -Mb;p8nBCE3MbsRGMUBACqUO=D)5t09kN,uY7*33E.7^77^R#l[iVZW%b.p52(EudZOc(_&m%W -G+*?9`\T=H85mDdiW+1+4@=3?p#>uKqO2dQ'IGVIg%,';]Bndl:[;@:'gC?=r8HDb[+Ebm\i. -joLg,>c_?+HGWA.;oZcYW@'`ALh9)g=g;bq5NTRg%N'WFDn'Yu]?)\6GG7]?aNI2=9_ZAog;r -rapt^cQ:!6m5Q-=GYciFDDQ:LU[iO7oG8oPI.4M;1%cSG+M`<=PQ""+8p0/?!ptm0c)9/iZ;^K-FJT][NmC%KeO85mdb#qO!-U4[OIoL1L -%I:&KANC1oA2bn`]l@?=n)B(*_u%`5$Mk@9V$LSCY(6N,>=kj49\14Y(qZg"i61Zu$%tWAO5S -[3O/&p8Y06mu#Xe;e#.'[Bjh#nDU6X-YD+,9cf/X=u.7LH.,\h)o(W3)`=J?$V2c>_!POpA_VqpZsh8;\9Z]d!M?p1=PbNk+&/_Me:eJK!DDA$ZQSFYAZ2B -cGlm82M>4\1@?7]p(YdQeVKD00Ouabq"2UU>c!F'tKFrB([S6r`Hg9/ER -H330#R0Z+5(JWGAu.`30Gmb(6Rt-QN0j'7YF03`6hoRq3-L=Db=sY:Db-e:E>C.uSlUqBGtrK -=l$Za>3nuI[rqkhaAftR['9kDM]aT!Uq@e?5N6cX/V -`3(k]WK2?1r)Y9c9?/-q74Y5TO]sc]cPce6sU-E:MD45dQ_%F]H90PX7'0_].Z\&Qh>e+\[R -f5%IO.PB1btN[[ikaV'aI\S9A'IoTg(e5*e!+FP%E&dSEj0rh?;WXn,`@G$:.$Fc8a%@@ilE: -N;L?F7Q#S\4\j8AG<+'BFcc(q+rR/GkQIoZU0kA7,7FJm\?@$u -WFaUt1tL%c;u;,!.*^UDiICA[u7C"&1YQb<;"\)eK#g[M7\&WpSZo2)!^unrHDIDpUsR1)ra1 -MO1C+_PK"IRQ4\afV3rgCUPUg2.tL_?)SjnQ1B$-g"Tj`6P$i#pOcIe'_KX'OI#aj68PG53i3 -D/iDGQ)%.#Wp5441hdVeMEr.c9UcU5>0b!eC<2go(;.oZ`);d[iEa6fRCG3T:R!<<*"zzzzzz -p`2o>>>XcMn+A^"++F8e+I*Mf#4=rmbFgb42^YI4JD1W3)lSLanhS?D+8q=O(&faI"2HaLg8L -m)ZikM]B-*Ufn76'5,+<8p\'c,o7[%NmC'42SI#gf#[=NZ!u6C>5XceR:m&n8dgsL>2s- -\QM\l-<8^u@G\?E%>RncNCL7#aV[;B,E>NVLu$[9C.3#M81eJb\j$Ym#_@!6:/UsmjPf$N2]O -)1\"6qeBIm4QmhS$bOg8%)+qG6fifD8I6`(]X%=?UE,t8t>i7p%FPq$\hMDD>3+2C5XhY>WU0 -Y:tt-/(jf<>#60JLe%]6X3J7DD;[l][F)-UA83?]Tf+SBW]'SG( -"bY,k^"1R;A7"4,q#BEE$`#\!9sTmJU0RuTH6o -KW!CfVl2e;DH9c>?*`*fS8%P0fn3)tQTf6e]o\.O(bS"Xm(J/dK-9EU8f/0^k^!m4#"/Fh!ji -JPZ6N_g"grpOoT%Z5 -C5[Ek7J%"rJ^K^*;i8F6T9^6N\j:2k,()Io;#C'1firseZiD&Ba5=\.\Nr%/f-6#GO -?*`*fS#LitC!O[K)OO[XQG?&84<&qV.$a -kPDn2j]nY>P9nQ%NZ[C',::1C%9uEfqqE`OjTj9>XoiD@omka]4if7uG_7' -t2K0Ii[LHsRG6)F\omka]4aR)2%+GLL!:D.`H9c>?*`*fS#LitC!O[K)5]*/8:`H>3Sri -m#]Aj66Ehr1./nK1LlD;ZW9>:6a14JMlE>I&1D8cC_0e-7O(R1"*02OiS"q.@t0%:#^u^L5L_2R`^&jSUQ2Gap_%FbJp"8.2u5Wtbu:_0K6e,sFfo -n^*/e$WC'q);<:SWs'PQU5Os,lGqfEefO#RiAn40;1:C%HRPc$*#8N2ZE`ke,K[`[=PRg_5p^ -;;"EF4ko$E/9IEi0kYW;n-FjN6#"Fa.[_*uQaZ$#Mh7`1@\"GWuOaPrMcOuCT62h5!JPd-DUn -nm+%Eq)OhSrpt^\TRt6>^*M\1=[=NWhD4hqH)lO"k#3l5sJU0Ru -TH6oKW!CfVl2e;DH9c>?*`*fS#LitC!O[K)5]*/8:`H>1=[=NWhD4hqH)lO"k#3l5sJU0 -RuTH6oKW!CfVl2e;DH9c>?*`*fS#LitC!O[K)5]*/8:`H>1=[=NWhD4hqH)lSN'S%3cc; -8BYR5-[Cjz!!)pl]_qBq(&[[ok^8$Gj5h2Y=eI]-NW6UsCk)K`IuhlmBdL>]&4L.0Yq2-]sn2Uc+Y6UmNHYOjM'Qh`j^ -os7CA158h`/Uf[WuA%B+>G*,:]!'Ce%Es4%F]CMU=fPq$DK&)Za-J0aWzzzzzzz!:W&nn:R@d -IP)i7K:eQ\zzzzzzzz!),^-"s4!_`,"V%0[B&Co1m]AC`Z!^:TBHdo3Ga<5:G-*fdm1JO.RPh7530S8DjYO#t8qZ[P)jIW>& -a]5T7"N^c;:TQ1\Ad"0SN(mt[AW8/H)4FoLJla5nOL021:D?Zo2RMCkqeR2l^9Y&$,Wdms5qQ -QQMR44"2?gMa#3'LF'pC)N:j0\AM$T53'1OHIKX3gV$ZYaJ<*f_k=3h/[OhktX&e63AYM*Z5B -HbIi)k+:<[\QU(m(I0**=1mC88:l6g6d"oG'(+F\DHd[:XiDr4&pQ8[aW54Bc?*/l(us0"]Nn -dY"eB;f44u5oCo'F-/>CVh?qB$9n-<=@C7u*GOkI1<7Td0UlKk<'-m^qjqIQUeL(.8Sen_0ga -j;cH;SPGHCM&qd?#'@g:5BIXgZojehhC1_+(_^\p3C[/5LW0A7R,WFu%\P&Pi2-1olUX\L=^q -@33=]V!i+HOj#5jJeJU08+SQbZ0[(?QVKd/qGremLtY--03bI;eQ_lcP$GseVbL,oDsK!!196 -hQQ?\\gP'?K]c:Qp*ACi/0U[6m#C2KQEW89]!/(W!]!O^`:M0'U[]&,C(]A)\Ao(JVqLN3Is^ -n[=1hnZ?nZ:PN$0GLa53$I!k%/ZtW,'!Y]8L8=?4(B?W01_uCrT#C-d".rrQTA<27M#X@o+nRh2 -ARPY#O/cBLO)cV8@X2[2CTsX]a(JpJtL,;o1feh*tZ@o=YrE&^1Zb8<0W"Ou5;/`(Foh]DGQT -Z#NaMfh*u)fPF*-LJjkY+)&sj&uTNNhR-cUj"^MJp9jDOgSIuld_D3!d!kV1c$XQWr[d[&cVq -5+kG=*R`>Kk9P$YW)"X]OoYN+Nq[F-WC0#>&>:\Pq>W%GGZU5UE%Ve%9Y]mH_5,LB`HAGjBe-fm:@!gOr,o$&pgj?hS[_r$^^!,c'f17BHgPoL -kT+LH7#qEfDg@?jL[KOutdq$='OldT)#,CQc)bhm:)3Uk]?c2ggk-qj`p.9BPBG?)6,8plCLe -;'c/BM^"/Rl)E50EZWX#>1?-P(n_0M1[&b.15\Tk9,"/.&*(m[8s,c_TfOe2Am^V@>/9?9=RP -PQg%f=;CES&3PPrg.6sd;l2J)m1K>KbIn.DD`;1pr6MlHLfg`LrU*%9*oYUBWmle^4obS5 -fpQtU`1/t3R9"A&lXH>:@pgQkUt]uE9tE*-CVBpUj-lL+R5+tai2P4LCSVWM%qatD/J7fbDBh -&JgpW!4\2T!,2'H*6Uj,V>!_ZQNfiA`s+/ZCK!o*Bd^l,"-P9Mn1]9,Cf6tCM"7W$!J@_HXi7 -360e(=,;jp/3?'FQa_aO]4g/q\?mLfY&V8ZX^F3ONW%B-B,fi`c6>Rnjo/Md[MjOp+-]B[?-D ->72I`abB=7],O&4c1kk6XL`s=*QA?arSiRY:(=.'"r]DKcR`h^R+ff!k[]\:N:/WI!iPGZ@3a.Xm$?okc5M'1Pfa)Ai)E=YJZBf=3=U-qT7;em@-q&1UA1A,cd2Xjp"*OQ_1hFr5("Yk>;)epo" -'J-Sciud3[;.p+>t0Lh^-d__R:!D:S@Uj2[47jD+!+UQC#VW"E7Kg,] -uIU4_0kLAmcDM/Ckd::4`Nnke(arh6-MgGWVao]ng_8D0oL?+2>`bt(P]<^po%T%*JZ8och&is(_M&s,oURg=Y'$87?.X;Yg,Us/'P[5.&VH/lu7iKVj7 -E$S&T`[^?fafQUA9LenAUmJGA]PFbju,d!k[EG]5%aiI3"c%o*K2J],0=[,s9!a@=ZR9ECjD< -K3&buhDS3:Z+\k/6ZeL"`,T^7OuPFk4"#GBKF!F_@\mVGAbNYg.:"mXgsr4^0R_RUhT>Cn!.q -Gu*_dVT!.YkP0pLg\n>Z#++UCthlC0IK#e(2D(%==Hu3PU/A''7i$7@qsKa:cC2oeqI(oD -0)a#KfQ,qgKAd+$"6O]Ctl;F5:8TedtOpr/7G[)87C'eUh7O\,icp[BTeFKYi;WiX,E=)~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 510 -%%EOF diff --git a/doc/users_guide/figures/cups_admin_model.eps b/doc/users_guide/figures/cups_admin_model.eps deleted file mode 100644 index 2d4f37c..0000000 --- a/doc/users_guide/figures/cups_admin_model.eps +++ /dev/null @@ -1,620 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_model.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 620 501 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 620 501 -userdict begin -%%BeginData: -DisplayImage -0 0 -621 502 -12.000000 -621 502 -1 -0 -0 -256 -000000 -ffffff -b03060 -d9d9d9 -c0c0c0 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -0000ff -990066 -ff0000 -ffffcc -00ff00 -e7e7e7 -6f6f6f -800000 -333366 -6666cc -808080 -9999ff -000080 -222222 -ffff00 -808000 -008080 -429aa7 -00ffff -00373c -008000 -ff6633 -ff66cc -7f7f7f -ccccff -ffffbf -d4d4ff -bbbbbb -8080ff -5151ba -cc9966 -996699 -33ff99 -0099ff -1a5f67 -0000ee -551a8b -a3a3a3 -8b8b8b -000033 -000066 -000099 -0000cc -003300 -003333 -003366 -003399 -0033cc -0033ff -006600 -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333300 -333333 -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339933 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -666633 -666666 -666699 -6666ff -669900 -669933 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -9966cc -9966ff -999900 -999933 -999966 -999999 -9999cc -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -cccc99 -cccccc -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff00ff -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -8c8c8c -cccca3 -8c8c70 -b5b5b5 -cdc0b0 -eedfcc -f6e7d4 -716a61 -8b8378 -a6a6a6 -GhVPU>B\`C[YCj&iQ5a.,YLCAS<^cXg]O-L5Ks#iLrgLG08A>>cKs^mpR8E@638=GrdWZFUo -IS,:U;Z'OtU/bBI_7LBGu:&CsZ,_CsZ\oCsZ\oCsZ\oCsZ]:YR)QIDLO,,J]r*cX<r;Y@_$']MJtJtY4I2 -YP/jfPLgoerFN+LhB*+!Fik[KFRq>0fEi`(W6N!9YhmrB9J^6ObpFsOn3:O(1&6(/g[EY8GbS -Cm$scpi"Ia)&(lYf21LC]J;-j#cE$MC"YOL:Z&qOa%/qEY;qCb-8j/&^a5\P4t!YKEsps2X<= -\R2?_u2W"OO(KYFq[-!o?]@!Xp+gAp!@TqFTDY2Ybn\LJC64AM6j=skiTo)"jO4FC=DQ*I`.V -o-o#rQD?(>m5u/i=J8G(SB482s9PB2pRhTIU>Q6'DVZ6'DVZ6'LR!Q`grWOfnXW6Kg3S\@?<9=m2XHleTI%m@3c.6Km<\/3.7l8FbiePg4km@`q*oJam<\/3.7l>HaOt]DHWE2^Lk8>fno,t\n -Uje]Fg8k"C\+ll!&gT5Cl@H1\"B_?`EKO@GDpKd.>?;McXe/<0<`&DS -.'[lf)ahG2(Hsrtc&]VgbeG`2_64a/85me`]B7QU8XkXT&c\XB&" -D:/[:\Nr@ll'3k?,54O*$/%*B$b2\,t$(ng*!(J,hJR2 -4@l``A?\p@2D7Dt^7?i'U&NV_.;oSfmc$+]Di:WVb, -RC^kl/Z>4nfFN`h"8[l=kY]J*k$"Yk6EjXS]c^f))a4mrcnnZ>J89o?-P-/4DW::XCur]ZcqR -PX>h/1YWXr:AtDb'.\85CNI2JujZMU7BcPmmGs6RY-"\scdVmW:@$=m#Puu4;U[XL5UmJ%!6J -!cEYqg-9,1sUmr&&ihp1u0oZ/')_dAps`o7(o!l,Vf(o0R^Q7@.9WE1SYNNDeC[CJF5CleQ4d -%-ibqJ8M/W5H.t2^0#?\KmT_aB,_"4mL%-DY;^8[qBW:Zg'hbj)kAXCGd^_Bq=#\IPsV*CBIX -O^P(l]YB',Mf;E%3^Rk7^d.USF>_3TS!\,_H<6=INQH;_YseNDjBJ'?IQ>A2uk8X%7`Obc&78 -I>m7Uq[\N'`ArS/_#=<6$WkT8>4TCK'eLORmKhlUFYHt)KkPEdZ%/V2HsnLAnh64@DWk0=S/o -S6'Ih?k%]c-;mV*:Ke7]*4uMaU*OEVm_6($M^>]mi#taI'%rj3FGr4K_"e.U[mnSe)#G7*K'Z -Bfu&<`G%+1Bi=b?A"\qke(3&^NAY)Dcr(r'LOlg!SJ$r>,_6Cim&tC,eEO;OB"WZ[F;"VaIQj>OgD1d]NYsk,Ur"bV-;6?nhk$*=q-oe`6JjK -D7m1S=:#99ZgNV[ed>Xjhe)[O$U\fKe5b`Sbq+,j+Bp+led]YP5q*"h/&[qekY$uUgQ8LL\lV -(F,SEdkR1M!ipD'ZAgusHI$O0S?h;!+?+X63\prA*]2AL852[TW9C#N('cX^n%>U^j_nF1.!d -#C0jLE`(g$eZNB,&,cM,!TW1ah?L*Vlm/fS_Wtp:0#_F0)Jfk>N+:*Rl9BbltpFABfi'GMP8+im2"SftO)9g2YONd]t/00DbA'd=%2@k8V!2]oA!)UV]Y'382lU1nQXIO"Ub2HgMG5=4D3XG,TSNMC -qC="jR&e'QNVYT3L'$X;*bEK//@Sm5/[pkrCgFP[?5]#OU3qq#+a<6MS%PoKLd_ok=8k!URdE -kP@n/?rR'K18dE:LZh2lV:OU=Li7X!Qp&19G>$S`m5?h'_4a$W6(2n&``C_@hHm?jD!61#a:/ -uq7BcD/m3(fS`b0Te?pXC*!HVe`:oR%8a7*o;?GdbPm39e?c+^it]3T36g?j%ga-l`b=PS_N[ -Drg.hm_urF7i5^i30;Mlu_2ckFaF#U]!8Pj2lmg;uS>::i(!mdH2"lDE$65D.68TZG2B`>B3' -V=Esn?m.!kcJC:&PoEZ01hX'g+/j`A2a8WO<]\K+jC$V5MSOGZA+LYTU"0i7)PWJBNojmIJSd -5$4Z>?srfkItQ*+@fR&N6e_PV)d"Koiq3VrD0C3QWKdd8oZnVQjG47dMmU4SNuh'M4SLXa/YB -bfs@J3.0h%,@=E`C`_\mgY&*+CtP]2c88nPjM8tG<)Ii(fM"4_i`2&`F>aX*]]qp#HFr4AWSX -!(HWVG7ZL>p'3^("ISb!'KlRfolm.I`7;PZ8)R.lq>q$5N0MXalkJ?^oKQud#nP=>j[Y_&/?Vtpp[cn$dGnT3TDY:#a.bg_fDXMWHq;S7T%^p5)D;T*Zg6-*tjfpb)lG[ -r?q.XW92TVHg]X=*\rM/q6hXe,.*NDbYH@/P+nYgcnX].(kWNabtpH"[n8(plk]#qfuXZL"K< -82W*)Oo0Mc9sWgTm+dq3)rd">nrjGKfBi\PPpK>9*\ZcqV:Bdn!2rl'M#SbW_TphSZXtYFB_o -5c"G!p>MZ$rr&_#8;jf;IIWp,)hAR/6*TgB$f&OAMRA[uO>gN4sIE#t;D%D\ReSM>l#o5+&lY -X8?S`Nm6ZaCjhmECX2D/VRA>-0jqgrAttG2/lXCJK#$D9$7?m"G7c.!DaoFe.se5PVqD+8(T. -K\uS[Rt57RmHjMUE%PY+9)6iR7+AYOe^;C4o^Wh0X;bCpU[_;Tb$AqpC+?^#3HB+uFYb7gmHb -d;md1^g8!9_gh:XW._9C1>h0"2j/%XHG/T0(*l**$OBcXMn]$[W'9:u'_Nm'!P-b0V-_J=$2-Vj-Y"ec]A`OOllHJ]d678fPn -N]3i@WE\^D1r(^h*`D"_h2NK2"*ORFk6Kb4OW0X(9X,(3c_)RYs0R.MPMJ;*q6k.arSmZ/>mP -Wf^%o>2aoo5)#7Iihcbr]jJdp/eg3_mPZ9^Ah"n< -Q.g\HS]Yb@2)f18(T(caSf>!YjFu%D'%8]Cf[u./#7]l0q2a!GMnb>8mh/pI6.e -,YJ%%peH#U*;CQHg9#7$0\EB7(JEEGEC?N%IQSs:SfIVXOJ=:ab,Q+X'r9_8hDQ!0!c1[DLn( -r1khk8/(DRcg`^J%4g7l+a:`08b2R^X-IUbI5O3^;?^]D:8B4J.d$n;CGh)>e1Qq#Q`*#`7Tb -A(b#JnZ7r5\W7=hP(f8eL/%@!?XqLX;P[G-*JIUBB;JIBS8m?k7F.i%;[u3@);@Bta8Jbo=)> -jLLa]EXtP'a4&5qJChAO3brf4r_ -(_&R(WJ+87*jG1hm$+oJU4c#6A=lBemV6CCk\,O6,O_+],$8<..C/&D<3@hn`>T.88Z:-)HX6 -7H/l%]A7qI/)3P]`ZgF/ng[_Ek"\e$&eP)b/`3X:j[R8d^ch?LUI!al@ -D"5D2_S5T?\>]MDcF.l%h+b+b;c5e**5qAK30ecW:!AZSb:17\gDO1/6#l;-J+Z0/GCOmE@P1 -QlP4N)lCf5&:B1oO.08-gHG0 -I,6;*GV$(j4WY0\FIj3cUV>ADDun[4knQF-nW+sm@\QrKBen1]2CN7'Ng.Hg$,t0q!BD@Hfj# -J(mn./1Ge"aQc#l5Dn=@t9r@R"Oc$i7HSlSJIJhZ*Bs1[/YAUc\De:pcoGQ>.Pl4;G[k7G[\8 -f7/ei$4JA+%Sej0p[d9[`ooEeG]*9CnTnZUgN";D+1/od^ugD,%][G+f>V0\^O%Pj;2V#EH(; -SBm-CM-/4VXhM$Ea6F8FD0u%pS`E8N16oeinS()VgKN*cB8^9.=*M]pf$XH[WuaAcD@PHu*shIlA-g[SpOHY9C=.>N(%Z)j/tnJ[GE?=]XuK8%l7KNWFQc0-ZpmsEqo&oVbQjJrQ&1(^@ -WAf:"1qsX:+HgXGnBfj\m*:T\ug2=?nT/N2+Ru7oLM4+h:(VNrF[L)-Rf)7/620>:"bj/h[Z$ -C,$9!=4I;CCN`*VaEOeVa`g35Q0H2T^J]9nW:)PMH$@U#=Jb*O8.JqkekO#%si]9=[4[cYpiV01tOS'W -TGN'(pY)u8sE/AV5N@eXS<5B^9TiH=VUO]1FB@Ydc!lg+>jZ=_j*b*)"&U0!V%eBt/jH8!0i< -OVKK-];j(0EYE5[-c)4:AsrZ]u9SI_j;I7jeV922d4E>)1c4c3OJhR6ncojh -)=(XGaU<'qnnT%909J?E)W7MGh1@,9B(ebZ^pS\r`KRZ"S`)P.+n`m]_F:C$^p]cRZCA8+`5& -;N53]PXWtIL45C`anD532m]f`-NcFl;JUK0Z$hJ:"3F;_1-*uo=(*S)_dcEtQ--[eWG%o188. -5PRYD=qZU\mI_%Xg:*Ds,Y`t79I3V0V-K#*Gr$u%f0[,Lo.Pd,Xg*C[&ua`>"p4'JXcInO\3I -a5-86P7"t._FEEk%.IAJ$/uj"#^KX[u$gi03?D\4/I!Ho6Q!mMsehCea=GmcDd*+:Ht@"AVo= -ClXNA^Lc=q:ZY!MIIIld!V,"DE$>I40kER%$MSA\4oo[S(lgB;1cQgWH0aIPrf.OXTd6`m42T -g]qi&K8-^4+mSGKrpR:)jC&&-P91"@3S%5nF/b&-P91"@3S%5nF/b&-P91"@3T@G=qkr5eY4N -)RBBmk5djPV$$fWkYfPc).8(LV#dedcrh!3%@Tn@dUg3M+8q=O(&f\r!^VH,@&$7)Z33>2Y$= -'Wd![?1M'1?GDl"rqe5mM[J.9)O_ESd`!]K8Z$?ulm#$k9$(Vg5\>\qM,RuOj.@"ZH3nRVh[\ -raqg7,\IU5nF/b&-P91"@3S%5nF/b&-P91"@3S%5nF/b&-P91F9?iETO@n9d$+TIcu]>)cu]> -)cu]>)cu]>)cu_;V2Z6)=pr:UWa5YqR'1arZ=2mZ&jnC!>`VY!QmgMk9Qo`R""k^-Pl*514%) -\*QWJ`,K@S$s3fjEt>3j0>?%U3:!F,i2bRJY'Al0eQrXu]cs&7*>ubOSp7Ci>26cQPoM4%J=;%Y7gH1DjcHqK!1^IL$+ -cQ_27lSTKi_p"=ge(u_VS_$SDDZ#+*OF-4dQ,e(f_0Db.Uk%HSBnh9!ooB"07qSMn*f$W?(UX -eYmVfoZU5`VFFEgom?X=dJ=cWP@"Te)J(SXo[d2@3*RK7`K?ZjudE -YX'(hLJ>Ga2X%FJCk-@X3S4fHl/&W"pjhbl$F"6sgm:Rf]0.=n]Dq)%j$bUEMH)03\C?29a+? -bojFSrF,dkdSYUFcllKp7!g&*6I>_e^jYUS/!Zj53#r2[Wql8?3^=3LTMX)]BJk9I+eRn?),\ -_XVq8I@R-=\-hi+Ao^Yj4D!/&3W$'A.u1Q!&ikN+p:I^*/2X9OMU'2M*fiMCbfX=(i2)!Xob) -$c-Z0@@AD'sdctGKKq?J1?FI'0/M9HJkQ*TXcX`$&_^="^OWJS2Bc^Q?fTG58FX\-^O@TQeJ8 -G_I4@AKtC9Wi/b[I7e'5oYk(kjNVQ?T)Y-f0o)fHW*rM@_m_V+cP5,0<1a[SX%[@/DTb@uXb4ZUI -,m=HPPSBZPXa-gAqY^P4[gSrG;3E -j_X(`Otog\^1RjS6k"^n+MMTq?9AJ,dii^\S0RjV,V7gi ->\q#T77YSG/TfK@86K)i=l@:R$p[0IY\J'uT*'!PXY2VM3:R7)5gj):NjNXZ!CM6LF[A9IJh2 -1?lfJ.7tqqjRS%=+h$P-\i#4@IrPj!c3)m5FDKj@%0i?%BrPR^]rF<'4:oYP6nI%o;"=,*S"Y -V,67dK*B*o,$C`E(U*SgI+Fn;/Crq>)njC`LSU\T&P;*\X3tF7'XOoWQ==/$aN!?*AKf3dPk/h0*A=/frec=GifU2,JmD0"pfK:%0#M;M!NODig=HQneA=FrX -aWb+3"rfHrp=_XN$kHt[Y[R.a+;9-5$eV>/m?;CY%-L#KJ1^j\Cn;V]q..s)%1hGG'4:oYP6n -Go[`J[)!8D#cCk-@X!B+bcoEMTG;RTFL[t"pW-Y\IkdA^nrJ8GR.ab0BZ6dL'GI#Q=67rB`jF -s:b0=g<6-4rP/fTFBJmJ.7tq;]eMb&:eUsfF$XeCn==0!4L9_A%p-o#911&_Te9pD$np/>K(1 -efu4K9GnR>e!&eYb/8q+*Ak-5")O/-Y[R.!2io'Q2Zq_/_oTHD,tJE$k>B^,9DCo^kU*t -//-..&!7V=Yal;/@2t!GPGJ<^[P;0"^<iql$a,!B,,,E.lK"rCm:#/&M":2G]?Bo>AFWG]L")]oim,3,G1V:7hME6 -=$(nSI$5l9HP(Z5T5F&3k3SWCsW013nV;\^c&_e0PnDF'R$p8DY/h_TWn7+d_<>]5qCS*^c&S -a-uAj9c',t/G!l]t`p=JF@Ika=0n%oE?3Y3^JLu-Y?[h3AL[@HGScijS_a^+1RjWgjmuK22lO -+Xi:Sp=9G3sfs<7hQ<-u>L9AcUS1YVG%sg4Kji5PaG5^ih0ZdRn,U0n73U=uO)iK&-%\8\d4s -CtLjQhE35USlNRL->]UG]I"Jh!AA(G*BB^0&[5^8A;?.\Z?hf:)`CJugl*%W_h7a+"P<_/A-- -RtD)),M^c%S\)do./J.7tq]n,OKY7\Q."?-7h$C`E$V8D8mbJBK,LbD!bX>e%Pg,o\o7YZm\. -lL0-QH;MSZY9MXfK@82_$[tD#&GO#8o46M11=@3g^kU*t%&Bsh(4behYgKo=r<^76_)G. -:4rLSa!?3pmQ8_UFg!89P!B+bcltZ[,>nsf/^Njj)Mgu8+-RTR8_h7a+"P<_/A--RtD)),M^c -%S\)do./J8NHRPC/Mc?M7/-Ms&?)!S`j.-du_#+qL7M+j9j6!:4uFa_EPgancm)E0VFYZ3f1' -L+RZ^?[h3ADh6p1af:'LhEM>!`eKJ]l(p:6Z8T@jrKADUH*dU\BfAi92D',i['.33rKH>`!Og -Hb.h&.)Z$DKu;h-Ig7Up&5[!siY&:eUSfU2,JNPS*O,A`r6@Ec_Q9GXoDRk,mhK^IFka`%p0Z -X!nrg/,&s72BAE,AlgQCDc&=OXZ1M0*/[!sj!?C\nO@(Y^ -daY=3/d^&(VAq0m9a4rd+a2(jtq)h?$m6bc_P`g6i[irPA#P!uaYQ;2S"P<_/A--RtD)),M^c -%S\)`CJ]Zh[IJ1OuSTD#A8f2G^V+A)kr@fW]W6YY>THD,Y8BUb%_>GS!(DCtLkl3>V6P83WsP -D!/W8(dqg(,f-s6*t?m!^rCbgCCE+9s1FgK-"+>1Cp]mF)iCn;VW!jGr<2Jes)-GYA\PEQ@ITe@+].^@e1jVRDb@G)ArJ")?Da4SkLrVb2@o -/oJ3o,)n#k![2]-fK;ap-,n%8I1gAmnCikO2;";bEfIn)mFXN=nli9K(H0fhRU^D\mD -cmMfP!Xk=r#`0caS0tQ7N*G!O-#(,k!DPRjXW_JZQBgJt^F1>eBO0!o)rX;V.6iE(S6IH;\hh -W9^)RsVnnj51Sf2pL'qE[OU>%G:.mIPU^f?2k,]TSj,\!Og)a*`r=7dls -oq5a1H=5H_S@rI6:C[=.G^LEHkS+:*RlZJPWWqZQlhIdMMMGGk168@&A8cli;MFOpHjq`i]X4 -`jI\M`&ic%F>u@.!ed)Qj>VHq-D"'1r!>-FpXggd6#7G!7hb1i7aj\qPQTDF`?nirMGXPs6t7 --UFu&.CR5(5',=c>,>(ScLU%HO%K.\380+r59k!oN+:*QA#_F0)Jfk>N+:*QA#_F0)Jfk>N+:*QA#_F0)3_ofAp_i>Z\0QOm1XZd:5nF -/b&-P91"@3S%5nF/b&-P91"@3S%5nF/b&-P91"@3S%5nI"];!Ru,T--EmQ\7@n?RobX9MgO[M -EEtpcdrc`MT(%,?"uF)&CK:\F;5fDQGoa*1T.[#^L'N -_T)3!!?:9Q8V]XG>4DLO.LS]AL/d3[FSAdW+Ih5h`1&N#W9B08gG,YK^g>,: -8V:9P^kNV!a_VPjf`Hu>/'NX6ZhlY+M(DPFR\n4Y- -/OHcMdSQHPs*B.D:B\#k;1bR>SUI2O?Bc:`94F17W<-R?p\WYCK+0Pd-.\??B=/7db(B+;+** -TCr+$?4<#_;4H3]!]AVqM1Cq("e`IaD?BEfN99d)897Lf -AX'"PlM+[)MeT*#NRXo71VkBBhP>;jg4HXq;2auD<;%o0UG&`]mI):d:!.j_daJ`\L:EOlkMcaGB84Jj4Q:):QYqr$FXn8G0;Zlct -_1S`.^3@kf#Fa%n@.5UuX@(Jm1j[ -AQFT!7T(5OG'.4`6@<_t."_]Uo):7""MqTb1G5'BI&fW4fd^epZ",LYRSnS>f1X>[CF.5h@O. -n/:=ogr_$s6C*Zdq<4]$VFIA/Y7)302_"L$!':H3;J;rTTh3DR(B]([S$g(R -)kNQPpcSl^q;]Z@=>u>92lSV7G[SaF7QkT?amMGjL1d\kUj88T;O<:\<]&]nQ-/BO#(9f@LJZ=R66`mH -M&^!diL6V#Um,,(S3'`E[8e8GB],Nsk@>u^CLhEGb@8q"2Y?)dDK31RQ!?#`A$+m!`V#3>9BD -%AoD"HBK[2aNDUh2r!i5C]-0nM1=APN[:0G`Xgh&3`$[Jurl!cHJfsK21$(_03!/J_>gueX;m -Lnh7EDfQM8kY)2.U"M23uA3l=:[E699=ib-C8*CGMd\[7cbs,L*Oi!<=fT,=_"ka$@4X01!m3 -8c\g9-:fBZq7<6G[uIPY!q.0o\^RU[X.F7L -#0g=B8#4AJN5;]g+bE72caRcM/e9KYO3nRuo'#>[!c7Bf5?6$.;MI*S6F'at/]3n9/;:3;EIl -lDU5067"Hc/KVi+-!*V4+.6@[Y1Sh2g%mRC.,>rbd(0f3"qCkDDWN+:*QA#_F2 -_b5)0*PA(4ee*&;iK;Ofdm;"%qB`_"oc3KW;^2*J%"1h;2>=tR]G$k+kH`FeRPg0NaQgeI,dl -$q9Yhc\egCOCoZZP*/c0+\qB`QnYaMB4J#>&_%WA-%6oeKmMdCt,1rj,r5F/SBA@^5^CkND#X -s7+,O*RTQJ(I"Y!c"BpcH/8P0qiLPgNT%"52(>"BWQm,fk,U&e^Rq+aa^7sF+WobebCXS*X6) -]P=j@t0am2a)k#X!I3^\e4B+`F"YfW=.F1qcnG9YIp)B*9`4t59UVqLfEk1BrU&(9Yb2a+XS4 -obHUF!`n`NFXNSAe?o%eR<6Xq:Q+Zh2CRSW+'VSOt5(Q3GZjFrVDj),PQ#sj65*_G)rp5gTjt -J?o+V#foojHe;`1b=i!"gc%Q.6pS!UboLY27Zs5F`X$qWpGPUn'o_mYc[pOX+IqdQf\BBu<[, -%[.ri(BGfQ7CY=juH9223pcZ^=V@,&DVoLZ6;OX!8Gc!dZ#lNPXBb[]"te4R3eUd9q,Qc -HT(2aaAkH"dsTDQek+*kGd^'$=YkNo.9m._q=r,t!S\Woer;;N`d5'noCRHrNS;*>c.]@ud:9 -VQr$0Rk0q832"^"<#IZ -e"9a[>cST_;2B8O5-cV!:(3>Q-%p7MTbJiE6i23aR'>4'-hg\r`fhH>8[WRkGP8_L -0h5R5_0H,fYno/8V.^UM$XC2HtQYEibOl5([DLD"j`O2_&I@n&hu=qAXQ2;r1:JVb(A -;Dk]3\](cC3nnjIdt2m'XZ.8:<^oF"6QlHac)[TY>q*R\]M;f)&:]0/;dC -PQc".@qipU"Dr?.[I!jLLn!8A%c[^1(BYa)s+oC[d=^VdMf:Qs'/Q%A>VHdhl\@E00jTZI>hT -ZQj!DS.ZFs8%3iiBOI~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 620 501 -%%EOF diff --git a/doc/users_guide/figures/cups_admin_success.eps b/doc/users_guide/figures/cups_admin_success.eps deleted file mode 100644 index 34e75e6..0000000 --- a/doc/users_guide/figures/cups_admin_success.eps +++ /dev/null @@ -1,573 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_success.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 510 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 510 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 511 -12.000000 -622 511 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -9a9a9a -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUBo_2q[Y;Ws2!807W/HXgE?UL8"7r-VV.:Us/8k*bG;R=:9rcd2$(,](Z+QiO_lmDI4H -0LE:Z;as"&B#6"4%'a"4%'a"4%'a"4)Uu9k`Ucr\*1ll0XX@6$?T^7!RPe>hWZti)'dNcF5?( -D2Y^/llK$p.kX5QH5>-$T2l-R$!a5`CQn<)`Oj7*g1/^'TJ%Iu6Qs<>$/5?pkAS2s#1l@%PNS/e`eOjpPq9OJ%Y132-5/3'/\Qa9Qr4C]l%tX'"A$gZ"CM_ -Vf;d6Z(jn4D+Su-!6rTNJf:ii]b-[&UAN[eJ:>;cs@\8q&Gf"#X@*R;iaR-MYjE59mWJ@`tR/ -^Y'S9):Ki]rNnT);GcocKT(LR8nY[&(7Ee]be`4)sL^N[_Y-dO]n;-Z8U*)(em?u0:[tRU5Z& -9k!UH:d$)bJ[X&/RcD$8I_%_QUF;UIl^U&Sip#0QSE['KhPgd<0LEk+i"4*I`Z/D;^OAD;]\) -D;\DZD;]\)D;]\)D;]\erV?TR=hOS86h"19NSLSZ/GS9$H@*'5qIoi1]XhBhI/W=E_],XN!!@ -/l=1:g4.C*j)Y27j?]t0?@$QIs,YAT[H8n;58G`CG&P+*\YC9'U"D;IZtHm>NR*gX;Mg\U&'T -Jf/?D+"'ppJ3eOH88dE@Y3=6F%6;h0f.SLDJE+_]!5U;;/KUJrk8o=\Petg6 -a.7bEp62p/Hs8Nd98PLg]R9DlpIi[S=8mYomZ9ZoFU`6)/'s;,!$318NXfqM/!RGQ,p6rHm:E -b@X45*Neu#Q1V=KeEA*_`P5!(RJ0H7[eZZ[UjAY3gU8l'9H-)@[OB.kn`QlGVP?3#@C93ENaQ -[qZ#-WQ"oB^+m6\.?GS$9]_Rt\V`CQB:X6o5rWGR`3>BK2'^V+3:`o5CsWNXkI[;X>(;k86Fs@(i\.BrW`%7s$.-b2/UlYSRdu()K'_rf=R6F?E,n\$M"h;/aSq -/'Ur%U>)M^K`9&Z+R+ei'So8^:4bgCSC6Le^V;ug&eFk*"srfTW).>3 -WQK.oQ0'cFhr7f0nh'LOEI5bJ[LIh-l3)_K`rfX7?7V;4#8!c,s)1DO%C?pWG -J(DB\`3R?t%.%l+j:4%r_dr"42L^^P7;>P#2/V11<-(#P1-MU6Rmed#>Ak;iXp^9n+aE,cX;K -aPDQD=)FJS6@[\\/\E9epYD8Q$[>Yg1^\Ct10=CpijNAL.BiX58;j#6JmK8VSOH`PE49o7,om -J$IiPk3:F2(8$1'8tr!),tJ77UM+^b@4;Co'.dfG#i\/o--7Dj_F,4h7>F\)crNN*O3UMpKML -g](:6QlCqr*[J=LUeQ.[//LRtpD,`YY-.6'U`_>hP87["R,hmJY[;f]D[sO=h -`e-KGD+\\LCq_9&D_KbO:n-\\->o,C\!:YXVm`p/S!7,gcPiWC.@&XsgZ91P957,g/'b(^0dn -'GFdqArJPsebl;$p!6;3rl7>k")YD30CYV6h,kPLNbp95V.sgWkH<8 -NUYZ3k95_oVC!Hj]A#OdRu\Mp%(s<@pp^QjJ6#'H,;mC&_9ouDIehsmUdMubg=2/[gBe>jX1F -5o7nu-6;d8\U@K\CX,IkOULn-M/g3#,#a5C\;]kB/e@,-``9,\+IOhsO`3q7\er8*JSh[HO>b -%#+LCqIG;Ba*ACKHku3N6Q&Faqr::2p]j`36!$UcmsbN1gUa;Q -Yk#`aW%@L&WKc/kb,ni3/:0anh0(_mD2-dDE86k^0D6RDo!^Gog9u.S"0\q"af@"?SoeaK!uG -b+k=PjKOR*DM&DP9/q7l6#IIXE:T[$^i+5Kl7Q<.;d4R%%9bKopE_umgj7u#FWgWYM-Vi#>;: -\mgOD2,O1RdsJ1mbS,H[LH(&L4+3VjLB0Jd2VQ_@^GQYIp/Wr;:;_MIath*YL+J"Y:^C]`b=VH>=L"<4141&5]'m;/K -K1\mM*k,eB#"HtfR%!TW-3SY7n2D2dT99YJLO@QUT*lGtDlWn96'b^fR8b@f'iUXZ]\'(bNo[;hY8WnH"B8(A)/LHa.g5:q_D4VP,6fTqgP<$hFt`\$W(^5+mYsf<@s90]dC%Q,<%F9r6R5&4Y`%0C# -l^oFLL2%7V=1m)s&\6;Q7@lZJ&go9J\l9'MUI8EP,1.p9V$ti-+g#D(NDXZ!S5ZY9*s%`(-O! -Zg1&73+Oe;j-^RK2/=PAWEna;SF8;`:3d94OkGN@O]IcK>AK1$6e'\cs2L)Rkc:i^?6+u>;u4 -k;kZYCIMGG7X:]m_8^MAjPB>99u7b=W#8q-0>[e\FhO30jn8*-lOg`1gBW4TasC^U?&`Z2TP? -)u[#\@BIPRd-Xhcuj4noJTV,Pe:J[VSh&)IG;?c$SS!+:ER[-#KoOgah:c.9LIBfWW]l/Mf.i -lkHf*-c,>uV,s0gI*,0S<4KWqY_m`C%G?)kidWQsWq<9AdNni?FC==Q,g^:2fglR4Ofh#hO]$ -LsL2m@&_^"SLS&mLp5D5ok`d#f>OA'Uq%qRf2GW:.FQ>oukj#!1L;.t]6oWCcYM2TA=3`dK/2 -/!\VDE]bgi;E^:bP/1]6:8K"gfi&X#NN4iaSQ$s6L@j3IT%%]pa7$0fLX0TmP1TdtE]b[T2Y#ViP5b>,*[YXj(`6P<*BN\R*eZUnT.gTmP2#HL& -fVk,Y>$g#&&/q`hDb[nWOmY8aOd=Z[(_s$d7oSf.+);kOg[8J(f(JP#bJ(;e]f]nL8 -g-b>l&U]]afl!brii`JgA0El[^3h^`0R;6_KXn>bm04pH9%Dr8*HJT!&Vek+I?X!l\*mF1!H5 -<<7VG:0iX)P@`crF@q-dLWT.u\a_[sm48B(oI,[=9cLd]MA'_ -(#mc!PM`CoVp@kp+2kB;u[>0\X._]*$m]&\9q@;mr,i5J+Y]#I8EXqGi;u#bG6&8o0uss3D-I -a_f,Q<>J68U#233G?p$3W\TOWgKoYLr(+!CQ0r`:TDQ;4d#TH_1Ge@2DgeD$25f`YA>OKQ+U- -)LgPgrX%Bn!eE](U/a.lK,3gr[)%H%^KR8Rs%o$Jlu:E?oYV:fp]b.P.H$HK&ES'g0ACJB<$@ -=D*Gc2b5snC5alRI3schH=c,*E9lI+m3^3/o#UYj+^9I1tGNRK]"lg,d+VBZr>$:%rLlB8oDN -uC2%bUp182q.$YAW`g+T#B:"?/AqoJ4"Rnup6Fm^TeW"nd76afscAEGf`6Oc$V:Ej\Y.C<7gS -E>p"d*E:oMF*&fVfsOWAmdQ2ELf*Wj[mMlZk6uTf,;UC/aQXa>o0A<,6#Vm+Fk.ltF02FD^$G -45!\pP6/"+HEFSMCg6:kTk=MZO'BR/[]O`(UQO,Yg:!qLL$NPuIU#G'ngV,/Ngh<+cPO^H^eG -A?/Gg!uPp^f![1Vu.NCiI,`f6\:lf: -#gY,A;&*73Rp6@E@_9nM)cR-jtT98FhE9hASSb'9R/sDI*.XiV$_7W]UBA/Fh&QVoEAN'.egq -r'r.f\F]X7cO7JdJuD3=pC!'@s/5bdKrC.2P,S:s1LbtpG9_%38 -nkNe?R-#XW_Sj65UjcLo*3IeVm'LW)7q:l/LROKWaR$@U.bM2d*@`p06I!TY8s` -ZUD9OP9D1(%dg6(&H?'>L;]11,%Ise2oW/4mUVR;plWbj.sOV5]R2_eP.mo@c.TWQbmGndcM[+G#&_,WQaZE -qB`+C8[e$YcYid&pV-0i:;Y#U+HCl[qHGe%5#IX6tk4q]J-Y5fH=V%h@!e&eG*-I744>j]GQ>bK^EDs4US/uD'Lhld2d\Df&%Oq45&8=pq -,r'Ms7`$";2nJT\-u-',G]?Y$hPCdBl:"@o=_%6UfO'e*DLhr([O.E0_*s%(D4[DdC -^Z+HC1#HDKP?Vi2R0FSD%^>r'-@DJGj7M%r)kG)NIU=2`ZB+l'>NF_%4BLE;t+7Z)_[2<:PKJ -;O*3j;*2LA;T,!R[bE8Z$*D?2o0+".c.$H'FXB_pKnW__0K20gV0;JoBf9%''TtF\/6'XX0)r -o2I1Sepj-J\&/LDh0;OH_dLXIFG_kk/\Z(7Tb%U$QYHmGPin'^[D;GK*V].<:u4W<'uXQtV01 -t-N7Bn=l?Jku3(cWo%0Qdn`sT\A3j:RPDL[@1?7Oiu?"'M8(FB$rfp7>Ab&Kq\nA8D^XDgcrai!89\$C -`E_OEAiJ.;PIfNOWO,7ZDe_oW%_::G[]Y'p9BDe1?tmtWK^(Pf2F-]]0k=3ekY$D3<0$Zzzzzzz!.P'tZN\m%k=)"!IeX"q%'b -JY2XiC5>6_KdLG;/5!8N5rMl?*66L=WccpS;Ag@3mgSh;RhGV,Pqaa+RitiU% -=6***r1JYq?3"&2Z=b4b@E\KdWf:paD(i])9t5]I6#N9<0#"*^FWX3O9BTh[>,&J#2J>CH"\g -RjE85NsH!Ys'mh\F\SNLeMppA-Ngjo?._Hk@]3Gu5Fe^S_95&;l_"f1h1qobh"f.s6^_'5rYA -!L5bmqIM -sWY^8dbo'+AM*=J$)q=e`[/aaGrK$l?4bji\YqF&e[ -E]I4=@+fFjdglO*?aRA3PrZ+c6k=l:FFE2CRurUsID^>u9&F\_bf=WmuQaYcR(-gG4!`OntIO -H-f:1bmt]#o/Va/&7HBCDt(Fs55JTL/@b.k%CLV&QESTLrIE8/0?YkjFe2+=W9k&hh@c7XQJ) -<=z!!%Pa#(]#:hkC:ok'!R3N\@o*a3K`.31abqg/G0^0i -!+,(4"=]I7Ej_Z?)(*lT31oW3b.mPO?^il`Fbp()=qq;H)6QI3AMto&Dq/VUnP5I=,qh7Z/O_\=-1crWYZWT*&nZH,]<1QFlV(ID[l^SaOS@rj/s_=15?MdE0g+_WY45Y0X!a -s-f>aT9-j.O_ifM6\K)aO4R@)C@8/eB%j#X+G\j0$%3uc0/Lr:AnJWQ2 -UVbm5)%]JqUfHWn7hThB9nZ`E+eoekIOE8(4Js?e.sg'.6Hp2l0mC5RRk[ZStt\9A\XInDipK -T3o53TD5;qp2&6/b%u]uZ5Ecab&c)S]iV-cn?:5h"-KLYQV'b.6[>!dh-[pH$d@D.T$]tRLS8 -"uSVT9g`L(PtlV6\.0/I`[fc95$/PcJVY#a,GTT3,BBbQo7/rVaTqhu9>,+47>KmDj(9ep+9c -3oiAi#UZD\gI?t%XDB*'Nep/#M\rN>/I%J77W#;ZGaicn,RVb[>qgULHmHO]Oie>dDaA5(:-P -":X.XG(9McZGr8oQh=9A4s)pJjE"?CpZ'Bdm]Q&1g?W&E7YO?S5k9Q&7ks#P4Y-sen:,(F\R<]7F5u&`AttKH1 -iI5ghI+Wm%hAsPPK&4?Q8NU;.S#N4GH?t5P\*pn/6peE2"NNBKlADS>be+V\`,nfFR2A)5;;9 -`64GrH1g<+Fd/q'kHp(dlYXU]8$eYPCPc,,0DZsO*h;kt96P/mcRA[7jCrJ&XJe?=VV8Kpgl`/tIl[jMGgS\ -f\;&hkn=rLiMFXhh@>nUl^Ws:F^C+K$h6Y[;n13(sQBo!]<3r\RdFl1r4%CQV7>F5ne]#3.q$ -XiUC\El.9;N;,2*[2p233;8r&B[c&k6X)2S -toTlb1r.?t*M4ZpeO\iIXCst'( -\e`#-]B$_[mWqq._s(2;j9O2j?KR1DY.@[RF*>==DW;-i`#eT_\P$l32Q6a/shrtielG;ercV&N2hkN`#BmMJ`SX7ZR*#8_(*#E_e2h`G)K-;17,dE[EC)`2P -p5<+Vlj]N,6*R.LJA7VCST^?F3BF>S]ai)5i]%iZ;2:o-P#2JrJDSL7(u72V[U2rOCO2gK@A- -Or>]'Fe,3aY.*Jrbc?_L^-um&5$%2fJk>"o9+G'':)Q1/,1E3dK]CJ2EQ5N(8lpaX;keiQXtj -.?%YSi07;R4c(2Zc57"4].L5_oBMFg!p&sGjTa?RAL-'Om]>?5BcLL4t(g0srC)QGJ%+N&UW3u=i -uK9;$Tfh?tJ;Phd;+LGt,"XeNR;FH]^\m(1IV=BLt-5KEOpKD%[9'dY92nfEiOPfp3X0 -#3tbO<9*.Sj-iH\maS].Za%Jl=h5;IA/Q!!!#ec8"=[XtXh^)79m.rl]cJ -ME#m;m4^B#^FbXm]=OR,@>\Ki@Z>;YRg$np2tY+\B2%GB`DaMaZ#AX!Zf@j@_ja?3f1b^c7"U -,>$oOpH)qcb9Z0F.RC*2&'c#9EFZT(ERo9#L/]58&V,0)1uM4"eq.SW3>O2EULdWSPkBaOTpj -e1MR'(./XJkebA*q^KQ6$0'PXAb5bE^cA*;H&`4]Z&@:AR:#T=2#J&EV1;>6On"FgeXeTSD0 -;kUS6QUb:J0fMAuzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz -zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!%PaQ!XMRNs,MZiX9K':ID,K/&CRu!maL%:I -WgkX#n?>]r4t9/4!e7^*^tp-@S*,SNiBHrlss*l3r[B"gu$&:tlt_[bH%F[B8'HY3VahGJU;] -dU+J-Q)dZp%J"@!`5.1:pc0pW[:PJWir@nZM=X-IZEWp63k=oG\O`3"D86)[no4He"[YG)skTll*cfZq@GI)Tj$(?46E( -2A1485H8In4!&QUu&]5@`X?KW,5[OQ>+iaUUKd?T0F,,='J`\1'neWC9a&Sf#d+l*Rsd@P^?: -W[V])gZ9:"0LYB2qVj'YcgSE(kmgE\LX-22Fh);/h/[]>udULDmUo&@%C0N@B69oC+_FRJ6P# ->D!#AN(M8.@qo>-3PZ.fBeU<'QZ%f[rhi@;C2;lMOTZa(eO:Pg6im[UZscUS;Ca[P2Bt<,= -&@ZFrtYRN[_3DcF&HS>](M^s6*t+"rDK3PcVEmcAkX*lU,G/8ZSR5OCF5Z)D'>;7l\*EEP.Am;@4VRFnc%EV"G:$@tue3)7+%(^R.Zn>n<^=<7KA,1>E_fjj -3]/"EQ;((GLM]e'?211P#r4'-Wmt].(dibcD,>8IG"qMgkG2.V6EGSYTXO=885Ir2KrmCYeuB -[to3uiT$:acRpXI6u_nQSU-Kb)WZh!S0H_6S$Kn.mk5>^)STXNU"9=$e-;MbfA"qdn-AGI<[LI4~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 510 -%%EOF diff --git a/doc/users_guide/figures/cups_config_printer.eps b/doc/users_guide/figures/cups_config_printer.eps deleted file mode 100644 index 8d2626d..0000000 --- a/doc/users_guide/figures/cups_config_printer.eps +++ /dev/null @@ -1,675 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_config_printer.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 618 994 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 618 994 -userdict begin -%%BeginData: -DisplayImage -0 0 -619 995 -12.000000 -619 995 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -9a9a9a -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUl#ri5eolasZM/Q453LQnb/ED4V!]E#Ij^L;4SG_cGh%"of!#_\R8n5o,6U[n8RP3+If -hsR%KHjMTc0R)WW=<:)B]*]!@"0T+Mq':8bfXihgej#^2@,?H*b,&$'(LIg323R0FQ*O$t!^r -eTT2q-0MM0AQ_MIonD)oq>Cd(R%#h1l"HEqc_3UiB^g%#M-K^p59jCcSF -fFLQFLqRR[Fa_r^mEi/>s4m)ZeS13&n!=o>)fn(m[6**iWQsXQ6la@%dV!(=`0VL!WA_>jQ8#6\4]?qj0>PGXdf3I&=\t*:6$5'Zlo -!h_"Ds-YH0M_QfJWtYNE.gcZGE*FXqoP54c\W+O0"-RHb+mn.P'Z"a]Okk= -Q@dO-=E2lta%M`"#4V,)+I*5]%noLVUt%',9A19,bBmS8G9<]iL"Q)GJ4Laf@W2U5%Ohjk$PC -K9b&rV?&K=-/6;,'H+K/&!KOjU!a7;G4b_n#:A`8%R,-!f9B[*PW?S?n8rqs2$CTePUVE^27IS)*e+>WUoSEm1H[GjiRZ=Ym@_a -nXtjtF9BjqPETRI]aA7fmPbf9WH0NbZd#[B61coh3abbP^FR=&DSt<(D@3oENRO>W)OZLJb2M -qTmdmcV%hZR]6fsrXhqT)a9i)ST0s?'u&^[WQ0mgC%Xs&5ik,'g.S,KQje+gBi0bq1I"Pj^)^ -("hO\ofmKD8+WMmhRo@A$[r7Pqb\7G],GfS=+V_;ggVk2c'$:)86YM/`[;=2A'gK"-CIr%f:. -c1,(CD*^?2'+c-EeX;KXgg5&TJ%s%[c6C;[1R2O\IGmp\,K)[RJf^fq[J'39aA)cBj]%sOK/2 -'])T0\0<%B?@nj!4;N2DY@p;:-S\B'd9f&g:\S5Ef1`Oot<(e;#oGM<@K'l#1Wpp.k&?^Eriq -4p(JA/[0gVd%=[)A#mXCMc)3j3sRMC4hcrlNpjg5kMs5Er2H&J(B#6-e#\36pn[)6VkIq_^l4L_g-_E\($ -\LfCXqg2ga1Ok#&5>EH0Cje[elE$S!\CGOc7]0p/.MKBr+C,YX):e`Q^]*5pc[Bd -HUfCp:=uR83C<^C=f61&82c1#;^:7rcU1O/.9=@)QeZ+&*DlTkGX/9q#`F1.mM[X@Nf7*Hn7E -O+[ZcTST.^-W$WR(J^q1?\Itj,>+r*I9uXL.NN2sQMjL+(;(YhnSMgG+q/bTF -lVDS!NP!21']!bDMau?MDC]ci*5H-CaekoSRCIW"p;5Nd/ -6;MrN,\e\%j3;`3O&1sHf/qj3>Ajpkt9g(L$A6tqoG;+@rHV&FQ[co6[D"fUnDm\NN]n7tq(r -aXl>.Y=.Oq!!W:"09,!XaaWY>r?t$+u9k>URD_"FFK5;^&(cDO -MKU7#aK>=(C2(0&&E8@KX9kc)Y#p:TUcZZ&?OE@6p>u17/NMVLWFska^@;j18OG2CWBF0^CG/ -2,Wulgu$72HX6$"E38]*g9,TK,LsFZ!Hu*#(9$,75hlEP]Fqq;#;Y*:jm6?u^LF@8(cNMkT6S -`T$d`n#gaup5G7D_j8H19Gqc7ntW-8'EhgaHm<3&RX7p4hiT'Xl/.!KO3>q>WTAa`[5]Ms*52 -F+[XE//2JZ#=t5s7!fNUKU[Apq;MFC"8C@5[W#@^YPIt[64**P+C>AVR>2s?ft/Y;7USWh0p" -rV8Nu]WG-(sRdYgAguL?T.=@KpI#4fcpqE3.0f(p\e(% -<0>$,X$[oLVWZJKO&,rM/a"=o+qi=MJTY-+H-#&08R!4N%c25n4<)UV3W)?@%AlXpAt5KdBmh!R*&qHC+K$_s!!S\nM%%#6LfIl(=nnXBQHd][&)OLu1g@*qV: -^tVV\/9iS#O&,brs"X#!S1`.J<9s8E:aiZ-_hWL -7psebiqf<3Ib$1'E[XZ,^C7f>dm,M%Be#r5-KmYPYT-QNkB^,!8JRj>KrUX`FM1AT"-dDp"X%0O_QsfFM:[Pu%o8*uIKB;E/n>r4\TuQ0[*Og(G -V#[fa5c]_/X(Yh-(>-D]&(g/s6Xhe/Y7e-s,5o8S",kq>$5nmBO$2teb%H;K=[M1@Q(=X=QU7 -SAtA"`e%o=h4k4j,Ocuubhl/"Vh?;4u%2WD7^$o=?5jGO4oN936]rB2+@Ma?fht;1Bm`YQbPq -Mp_49mCn[3OtHn.QM[.)m5OUK]D%%f4noq<)$14+80'>&W+J4$BQHaK[/9i,*=fin4#YH20j' -$s2`P;B/L'<*]a3fTp&lm[G*%'&SVVlKrVR+5Okm_lkqgM@Y/@:7oKS9]n5ZZ".^R;)MM6QV@ -P7'&YiljKE,.o>If+7OBm1&CYq#ai->bX2`=g5M*eriE5`CfR?4!qY@'7_>V#LeUmF>VESak2 -q]uK@il0W5PVbX26McEaE3.^V?<8ZldA;2:NnHj2)>!*8(P[DUdS*2WS0ptZ_OGP;>`ZD\siY -C.P;P-0bc;:&onegPB_@^^LU59<2-D%oC9MqoK-+Dj=9\!n@+bLFSmFdIi#pm:DA_XIN@:;7F -K_UG^4&&6laaTp+-`RN!(IZG32*e>uor7o7C7iU>D^"?Q@VW3r7[oF>BgSr96oQZ7Dp7&`b.D -aZ$7%hZc:liZR_lEnBu(3SWod_kp=*?O_A647V`O8#C>?&$j>YaZ?Rqfc7B*g,OR?#Kj6PSbf -93ml?fZ[,O+Nhm6,7`&rp?o0YG@Zt^DXg3Y8B.oT;>m#CkgnFGnDmZWt-c9cLbmk8F!q>SL2T -8>V*#_dYlBG)E^RJ>iSn>5(1PCcFP-GGDW\2o>4`)l+>phVF9Jk.B>f4e6"9:mCAp'"h"W"ZS -&&laQK^iJW)3_F"Pr=`s9/9_"L\JL%6f-W.oGDbsD*tsd\;&hU$lfqmJ-^,9jfU>b"R=FpkQo -p`XlM)DhS\:77Q=?7tnOqBtCs(_&_YD\P20Do"?_T]2MQ:9#?9(hkactX77o`5h6m+RLHJ;rEB8F+E*S`H)#52?S]!m`u+2^nn@eX$Y^^0O]uoK"aMfabU%QAT,=APGP7l'OQI5EE[r[h#RDMl=T^:b<0j/b8M2.#cB\?m91<3IE2W^jsW'[.\oQ8Im?5Y"]9W -#I#05n -hOfBS>ABdP55Z]$,4Feq_dq';$N;@c/"'*Qm4ep.gq.>S4VrDV5=Kd(FL?uj?Of+cmpO:[9O^ -,Rif&<>'6(;t[p'4(=b%RcD0,4u=p:7f7+]ISEi0Bo)P<7,ia;Marma1kLZ7]!aj5hs`PaCm& -($ff\bV&^U-\4j61%e=2`@_[7=Kp76nPV;Ye/Faf6V1/9cX(\UP(Ue -R^(/KDRp>,iCN#1YkZP'!F8oiR\?p)CXP2'gbK6@GprJH/.6O[&) -tLJ7)%O.6/s?.I'WO5/p^/K3FQm1\sh,Bhp3!fm8UifnOop["FR\Qa_+q`Y8neXd6F%\;jsY^ -8kGFl'=:bE&:5]fCc8<8rN&1o?/a]gWjjILh!->)PO5)SBI,jacSF.@/X[F;ifsqjAmPO;E=s -/ZehR&sbW4;,;ZS5h]j&RtHHWl6Gq4op"#$[ -r$`[biWg-$]f`][FQjXZ^Wg+oK*-kfYUKVb!R42Xk[P$d?A[c2V<+.K/oB\)4#>B28V"3[!1& -KuHn;`7HUC8@pPIE4Sg?b?)D;%]>5H;C%;=,!.-/-0PD50X)YP=#o_aQGcQoMU29+dZo\a`kQ -^?W*%WHQWIS3HR613krH`%Sic]I>C23m$V9R]03V-j#i>lMXh#!Lf3*X$pLce^i:->Z?'2U>" -jNdN;p7e_UWH%bsI[o="If*lH",gjaBNm@mgp-_$FU&s"F6Kr]FN8[ShFEqs/3!fDuZW`>@rJ -9]Z!?VM88J%CRj/f-6DDn9f[b,pppb]JoIn -d\>=1==3^*cQ"p]io$b#LNpg..iLGjAro`c]!f(HAIdk"Ah?t.M0'5N!qO^J^'g7CB`Gn$+IB -!Xb]40HgC2f(I^N>+p4c!kD0O?p*NjA?Tr#luM.XbHUQFm5E/emi`:W5E!JZI5tU81c[<16nE -`c*#1h&J6h\JUH'lgU7pos8D&?#@#&[Ron-0:N`lb`9;0W^"*;G*DV^LIY+K*;us`q^"%J^'9 -k1M``ViUYU^#D;ghmU%QP"X[RH\FM)^"ZC`B3f^BmF+h2gc<4eBM?WZ>!%qBthcSD(4jo858- -DR$1X'PCr7@tMrJmLmBiU`4GJHh`@Fko\l!p!W=om&XAVUAM]=<\^/ta]Ee; -9djj1>ljK0D`NP0;piSH4*>P^aFbqW*?.<6GZbFP[Bk*0jT&cW7$g?kj=-/^>:0d1e[u[8TSV -'g@SHsM38Y/Cmd,%L-lh88mGcq"`TLlOHBEG]@Vn?j>lhT/=/N8_s\Z(J3;SEE\,j'-YY^W*; -QT)U8%4&Ub,9FeB\[Rcnp3,kji`kM'm:>eI&i_tdTPnN'C6[%_6?e`U0?cL\-.?!+u/<`ru]e#4n0N/.PC'RkoC=pd;dlC&r3%&9O`[Q -9&>UXU5_a@W)r^85C=1:iH[OQ(U-@%bJ2T`&^Dt*,T/\+IOZ:U-WXeBo_Y(!D&k+eJ.,.1?K> -=D5!pi0W8C8EC9\SUh?L1gW.<=Q&mHA9,29KRKeZ$.;q8*WR/P**!7KXYg[gcR*T^-BN,[5cW -Pkmb_h3ORkS:FbP!e,24-ert1GSQn>VPN+ROb#6jL(M;R4BKDf_ -928EF94d<*jR(a1!tBo2q:p:$Y0;AN=$]d(BAsoLq7=QZU6es4\+Y=>G^hlc0BeaG=)WAR"7a -+m>B8t6]:*HnKfiT5@"^9mjnsKh?&gs:NDL(7.=c/`#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XL -k'5j#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XLk'5j#cIr`BN6YLp.p']]HN^*3<1I^W)c5B0V12 -QC/GD>JalF0)?='MW5bJKR#j5VI(,npnu[1K*grG^cN,/cT5)):Sla..(%jYVP%'Lok8)Ik$8;D^c7c^1U]P+0G0;ER:ji'#1^M6)H?=f -R&?@%i@K4_M)bP=i(HIg#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XLk'5j#cIr`J80T?W!8'.C4H -Sg#)IeEJ-`(XLk'5j#cIr`J80T?W!8&krQ0'$b'lQGnX$8Xd@*Jh]\u)0M1/khs7$3)C&N%C4 -CPpd@GWN#R`QIK@Vofh=3@atBh1f#L-!)EopN,:o/q_IU<6L)8eX1R?Op.)TaZcsbrTBJTd2M\7nL -R^F4ii=+l5>4h\^IWam"9bo5p[4qft&26mAdQW\W/.l=_/IeJq_qbT;&H>/Eg)8McA/:T3\nt -IIKTt3C:,QAFee3rA5CEC?qS,"^36QWu%E[386_>XW49CZ2jPQQ-;mZC9T9+g97QF]";%oB43 -S]/R!l\!`s@p)=naQ@C*fcLoulU>YhqN.jJ@`DN+@K7\r)cJOSuBgj/a)cROK\J;>LN]CV$pD -E+a3ghm?b5W(e03@W\'cWYXZX2[WJ+W3Z5*SdQ%MIAZ0?:k814d@B(oM>Hh]d:lT2e8PALfaH%dER^ -C:?NBoEu@u+koBdg<\)JEb-ePopdk"h8@qXr:K#kD@9e[/,t3BNKL`W=>;;,,$;kHON3YQcqJf -%"N80gmm,QqB4Vg-Wu)D/JNc"BdG;FZ!dMEpWn;"uNho!/Q/?J;?Lk_)3p8EgUT\%?.)&WZ#+ -EUF:nu#1pWrat]p42)(DJ8,1:CA._Y"p!3A -!NHT:=k,oY++4q6T(SRdWD;")p/of/A+EE:S2S3XW\OD/:Im$H:MP,lLT8A2,_gT-\o8&-#-a -n8U\AQN>e6f$1d@Mr,a5 -SgAbp;E;$Y]*JXW9-*AqG7&iF"($Pe]:I;CAlhMC*7/^)B]*]!@"0T+9JPD,+ohs!ic8FTGepSWW=<:)B] -*]!@"0T+9JPD,+ohs@T09Y0Q+_D/:GHl!7fZEWkL*p1"DT8!A3X6AgUJ]0i2^ATN]W+[1reo( -'CSu$rgFc:i-mu5BX#$D`YbAWE/>Nc"*210;spLmIorm)qFlC85lj@/2iu4IP6n&qgP0(mJ33 -&e:h,*2N@g<2)2:Lb^42J@QI)W<,JJ&iZ[4/oIJt.C,.gE"*##rb`W4$0.g1!=TS:PE*#-'6Z<6L\hW -CGd7r3@l%`.tQKeWrDj:p#FGWm4QlGg>$L8[6$uVPbA4r82X23Jl=J)OT4';H4RI/G# -WeuUe5=Ni>KMdb\TeW*sniEE%>86PB^B#2m;r$%t?g0hM4h3*Rte]9D_[&VXt;RGY]_R$$Za+ -?@C@1U"V7a\nYXU@d/5633GK+Gn239Cd%1iQj! -"i$:&CI?.1B>*+YM.Db#O>liC.m_.XH>6;/Y-OY:55gXFH41@)62E=q$$(qQtf:W(9Eoq<"hE -^5I6qc'[)(5A.$k_48f>7C6-IJeJaUtl9I5RcEsUndSUdXHD:/*l(Sik4XcMnp?Wbl4KHW[^n -MT\MMY;21+B,mh4K%4Q@Wc]b>_?`;sN&fbq?gDeK17XE$%TJWZ0aX$D:SJ5degdC9%?7j\.;,0n"kGJ#MIEGsGANN/8O$&pK`1g?a'aH-WBR0'Lo>IL6EDUKaR.F"j.o3RW[:&<8-M5to;lceU -B'JDld\7GU/V:0pRG^LHDdj:@JeKr>C+KtP8uOY>S5]lS.U,]T[[#ecZd_YP-u14r-er@k)R. -k26a`=:Kp,loB;MYklVkTNWqoE6!djLG!B(1#dPQ3G6+(id]*11seM76,XTGGe1JfYZT\:lGC -,lCH1'=PY!iVD@)cM`5J>J=d>\m'@V(I75/Sn$:O>B]B&-:;]&ProJ!S%/^:^ms:eGp1X%1iQ -j!"i$:&-:;]&ProJ!S%/^:^mu@.Fi%qhL4YEg'COBEG5k-7K_1QA3n`MN)L9L;OWB6*D7Ks2Y`"L2e@BnZ4&6,-T7B`cb*iHdm6,5&"dO^3@p.$D -"g(hG%MT6W+J/I&nkQ7bY"B=[gW_EUqlN4(\"B=[gW_EUqlN4(\"B=[gW_EUqlN4(\`5YbDn* -^"W/_)P:5fRV4239Uj%1iQj!"i$:&-:;]&ProJ!S%/^:^ms:eGp1X%1iQj!"i$:&-:;]&ProJ -Ypn48)Rj)\Q9LNh!7eAcMr0ZOQtf:W?m7N)F\Ja",>]t9TN]W+[2aa4\HCB&#--bj<1A`9@i0 -=f<,SdP-K/A0aX,#g#hc*=a?d65@i.%G&[*#leIqi,Zh+mZPIb]@e`NV#(^>Yn2(UIFW=-13D -(b[E@8N85!So,J\qAF.)(8do]V`0fT^,M-Dlu;9!fIj6_8CBfS==81@i0lIE\gan]3QJAJ](@ -iV;Kb3=X'BrEWXe&a[EP.@i,?KQ+Db4e@5\"1Z5+U!o:^>K"7J&j+1s0oGb]@FE>.%mADaoC+ -PB]_%P_^=Mn!$2+m_)@8Jk]2F.B/Sthth@b$(@_8aOd0OlEiTN]Yr%(lseqTW!aK&FLP37L5J -7Y8leYjje.\38&<#s"qBR&2AEFE\+)St&Pt&lY&\1qaWE.LU:c&RBA36ge=)^m= -=ST!mdfMC$c[#s5(H^bi40"RLGI-o_Cmtm5L)X':ZQ[k<]01)@U`-s8PVnq.%:>+=R;JpX077 -EVel2b)!n@8_:^ms:eGp1eW]^I2S+3L1STD#!`i6CgY/)"oUY=.A#4#g0C.m_,XHfKZ/Y-7Q? -A>GfFDep`R6idYchTAD2I2oD(JF38aGU@(P>XuioRAq+!65Z$)NmolM7BEFK5)ON'WN&(TGhM -&Iat#qc-1NdBcpjde\&];ls#h]+sn^'j[6!#dX)-QA>3Z:AqN3/H<9qJAQM/8DkjT*hu^F_,e)6'K*3W7hNGhtMg$2.ld -6eep>IrH5t"W0T[$W2:Y=l+Ld*;d(LtqbSkWZ;o-aTQSf/3jEKt/SB*%NJ4Bt_95BWmK/W\WQ -$JI"&NiH1/Z;dFtZ\&$*G#Y9"1&B.L9$qP8^U)H)"qN%9/f9W2>,\F0dUOfGuN6qlR1Vea>.$Wm/bbV2EY>$K2c+?(TNX9ND%`LF2c+?(TNX9ND%`LF2c+?(nl/>+V)ES+UhXBD0o0nWo^UQ:=fS@ -2nP2hs=B^kcX`G&+&.E8,)`aq<>VDr4oS1?PX4F4-=>b1K3A"C6k$G#N88CR/QnFe4Q_e`m8Q -9ccY.k$^OL8i3oCu_W!Z#som!/]`E[G;H@\n[*^\ues=+k9W4B3=,mM=jl<9jag9`e -;[#-(B!<9jag9`e;[#-(B!<9jag9`e;[#-(D7``0RN2gP$O5:bJdD'm`)g(\?q239Uj%1iQj! -"i$:&-:;]&ProJ!S%/^:^ms:eGp1X%1iQj!"i$:&-:;]&ProJYpn3WDF)Q522ka)`5YcG-!>U -QEY>$K2c+?(TNX9ND%`LF2c+?(TNX9ND%`LF2c+?(etZE0Ym`=(6-cQ$[>(pp!\eLXcE'IBVQ -gO20Q'2%X@>)=XEuHTj^@?Inr7ORF(T9h7BZDQ)F1^C=da$=AC43X,ui'WeYm*GC9035&%HIps"%5C35Qk$g6pNUp" -B5Ik5W(e0,<*YqaeKYD_j6c4*b%5de. -RC)X$/2c*3Ne`I(9BqX285W'!MS"#@:C]@[FC5,T&bYSI>D/M+0c#j`R1c(`$hAh6fP)J`7\4iYs7Z"d#;h(5ej'\HmE%Ts -@Aei?\1"t*N)N)f2#V[2]+jNPbH$\pHeC,rVDeH/%0>0a3S[1K:&1JgdJe`I(9BqX285W'!MS -"#D:L*#CHAQu0CE.X&%P\M=RTGepSWW=<:)B]*]!@"0T+9JPD,+ohs!ic8FTGepSWW=<:)B]* -]!@"0T+C\9Lh)B3P&PF4A`IM^A4RUh\2Q#3V3U#OT^OZ^ABRsnpN]WcYNt ->We]`fk+"E_C\`V?+%1,g[pZF\Rc3tJ"18T6(*HVhIP3G<);&k3@1).V&a9c]So?*-puNeD4, -Ws43;?8O(p64['Xq'TDDid``ZsRBF-TG*P[G$n'1rUWjr0b*.K*YK6OGUAX6HUMH91h\KMdG? -UJ/BY_-QB_h+Jr_VDMR=K!"?KPI>$J&(cHX;:?[&#fR`=Nd>29f3U/bR22@TY#0pJObst3&aZ -N&;5266sqIWEu"MhC5^rD>-(5YT2;pNQ)00/:i-aO[6Wac=/L?`TNYCtlKdEO_4#+qc*sb);- --,WocA5,ea0'1G^JH]pp9@0]2EtRTG$.U>*)i(4LlW`U9ZZ1DJ9lhVptp)7gR3.DLpE@*5M'U -"hciLPp&s5WjOK;R35Jl=f!";>0i1%kQb)1::3sWG'hM"2-QXk<$MIE5rBjZg/_1bX#G -;BQ9IitYq=Lled/:`YUS*fc9O6P"B5Ik5W(e02e#Q?dEPX)WoT\:YV[;MYk,XAbTT\:YV[;MYk,XAb -TT\:[PWg`i'gX&lh<6aa_N(&f@o?s)?S^D0+='(i*M;nl.4)p:*>h;/ -NOPkim(j10)R^R0(\D;@j=?coH![:t=oY:i0CAc+9JPD,+ohs!ic8FTGepSWW=<:)B]*]!@"0T+9JPD,+ohs!ic8FTGeq^;l\) -#D?7a2QiO(>0arljQtisG!ah-2%9+8N<#Z9G)[97\%9+8N<#Z9G)[97\%9+8N<#\O9WqH>\>P -AZi,1Z&.:$[bb#-*Y0"4d7>ES&TY'6-u]d<"W.=X#kb@5&jmX6-&-nZ"HaQaJH)0aoBT(Y+\$ -&HkmI8Z'YY1?nkP;)PO%djR*&jf[k91^%)<:J*7>,mGS"T=cICYB+W#U%SOE)X*jd?E.=U;c1 -dd"P)of+4\NljEmnPD1Or0q%U1M>#hW"Am[I(*MD,^jJ\LdFX?JJh+6K?%aKH"[;b%+<_Eh#& -Wro)_-dDR!jnh.HN@;ONO>H3$NAVJr:b?H<89sdB:rET5d_mDIKAVUD:\C?\DF6jAG,P>6G;`C'hj(\'V)I5i#:LX-su@^cMu-a":suht9P*%@5q -sB&9t$:-@(>0bB`0m:ed+ZTmVh-Rf^#>hNM.o7fPej.Q$$bFasGY0@*V1CLRjLYUCdm+WGr*V"itaIi^u'eef93OiTN]W+[7l*cWrf<_$rkCQW4"0H`\!R;V2sKgCeM14D1QFRC -e?RH1JeMl!S%/^:^ms:eGp1X%1iQj!"i$:&-:;]&ProJ!S%/^:^ms:eGp1X%1ocneRn.2IH_d -,"AfOp$4sHseRhBrqqkR&!NL8EeKtHL0^U,co> -a"M*d_O5ksM`_1/uNeJ@g6?GX>$1Y]oT@YK6p.3MZW]lVXd5_L&7_N`POu3clVj9@\D5]KS]X -Ep:i0Ak=0:=DZ5p1mkjK@gj\MJJ3R;g6dSlS6Y4UbF"KLQWk,MRj]RIMGDW^ -o3hP"-(A?)(_-@k]^?>>5dRoNtsY4e5M$ -BU@CC'g=5.YtmrJt.C,4gkjNVI1FEQ&PArhbYn;hMc -CZ"*>m)!jYZtpX\MO'^n)fp$??3_OuQsH'=;(AQem&p?40$&U!fLJ8.*.NG?$ECl3'!%&gTqn -kmX@p(ImdiC4l%"_//>%0C-r1:%.cD'^kl)rh^p:H#4I!U^`a$rlNsW_EOolNX@ -`!`\IiW_EOolNX@`!`\IiW_EOolNX@`_T#Pbo<@kID1ZW(2NqiOD$i1t)TWep#)IeEJ-`(XLk -'5j#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XLk'5j#cIr`fT^+f[if=V)TF?O@UlF_Ot=Hg6CX(G*e$ca]8UR62&`\;9r-=j=6&9,*$B:rEe:i-i<=uT8p&tiD -e:i-i<=uT8p&tiDe:i-i<=uT8p&iQU*RtmhaC_LVX[@'^@C/_>ceNhDF2*_:D"%5C35Qk$g6p -NUp"B5IkCe_>#+0Qpan[rtX++S4-p,p>N"_=*l9r[j4Ggfu+s&hDW>A$U/h.7L0S!skdG":eR -16d:uWTHcNE,$^7np_TOn%lHcNbZmk:%RSKTa=>GBGO.je;L00EsFoRf8;32MHU%bU%>Qm-VNpE[b6aW\1s7-l4WN'rNp=iE4\8O[\OhU7$KS*`mjbZDbLK,e]<^&cA -a7V^@7[FTkOLgYlfN.DlJ/Wj^W2T:XQN>>b<(r)N[nP"8e.+` -%^h]S),@L49BW/[;b.&3'!7fdYg`C;l53]75BHX2$5NV$l2;]I,=9osD=W9Q7$1-,9@ar)HO= -Y>kDqq=EdP#Z[p_JA_YVT[L2ZeLI0gY(CESTXb'aVS,qt`D:(ik4hg@p60i#O(pf2LrZ%lNCB -%G0@`]f2uY# -AY"@)1<)_btRqq;%_QNi4"fVBMW-55#BelPKfbr[:27*;*^JJc)1_l[mW_u]R5P*KH$$RnQBk -#(h_Q$i1f=nOC"d*W9HP&ZJ!Zfg%8?3Q"g,3<-E_c5n<."H@Jq"B_ejEXL<.q)_IhNV\Ub7,W -&nU@SMU,9'N/&cV2-E/m9nDRu2)U#glDPtc:\e'J=dI=`ZmXZbq"CH99nK=P*a2a?\#17MVsU -(c:bOp8h.ehI]gig9-LcSF?gpUn5e1YhAkZ]."^OO(8,fGZc8d(:!l2%\3hFV^'* -8;(%O[Y(?]__">;7XEHJ>uu>tLHBWoHn*QUNcEK/HE8JBWXtfkEQ]C;O%B7M"f4 -M2P;-gR(Z3=k0o[lG#Si3",N1?4S/#&(<(DPHYca=O7#@pC._$>2:9$WWE&CMsR'nHfDumI"r -7Zqu^t!u-^dLG6i$O!H^dLG6?m6^V0G.[,Hj*mjVLB9oHsVF#S([jpcc+MJQep5YmThMh,>!: -];JR%l/A;&c!kaerDBt'>EV4]ch6YY$\rgoo")m;#)bE@HY-)Bc8FND:j@EJ=-dq#[.F -muuM7:WsT,\05-W$,cUAjlRkAkRI2D).,Qjo-`otsAIN![gtRA]=ddaL;SVJbbTU+!^dSq!70 -qr-YkgescZ@74ah[E4j9J;qYUdQo$a -fO003$=FPGCnkuBr)0@oWH%*FV>PrA_:B<'XkQJQZP1a%CQrU!(#K<:a9Dd>Zq\RBK(^PYM,N -lj!Qq&Gh_bCl-%?!?dHX+1'Ea8F]@1>"]64jpR@_UAXe6_XQ,*:Zh,i9Y78[_2R3B=R)oQekY -PD4E>79R03gR1dM2Y>%O][u9G&]K_"NF4TV*hINIKUSk_-\&3h24t6A!g:g?DlD2nIQV--jl$ -`NqV71-72ll++^BL*.eQFI7P?ph"-0_h'ok,eSp2s4aXI7Qh`G*5\CT^8e7Y-cbatld -D!Z8jh3,WVL,^W@b4%k7*d0m>IX6(m*jcPqiLH4.d=CBR%E<:F2tQ6Wu"#"4ob5.fXsUur)p) -e@6X[`C$DT]rWJ[b'jb\EN8:Pgj-Q1\iEGJ+.]pAZdk$&t:I-1\r))*kYu"[&<'AQDIlkuX?> -f9@O5)Lka*Sf_+L4^@`(M#u27(f)Z+-N/q,gEm`;jJgM!ji'5GVIWV.[36Q05"s+Qc>Mgq -66f-!c*FN%U!bGA@+Nk!Zc.j2H7uDo?J:f_rF72"E1-?)l?PNg-U7j9QUm0bm=EH+aN9W#HHV -ZNm!5!eRn5:3p4@ngW\3O-b0-SNV'O0GT$"Z-VK!M:OWKjVMWTgF8We'Vp!W&AT_,r]r-S.cD -=pfk`E&cd8C+0Xc+i_anRM+LA^O\edk)(PF26-6gmej')lG]dJLHT>j$,)hTE*diB>' -d=EbhR=fFgtCtZ_qBJba3`Md`W`X(8R^.[%^kj5I\POjZJE=pfO_(HD+1KV'JtN6!djFPPS*9 ->eq%adSk`/ZVL\[#"rm^%eLfGCD*aU4\C#JN:gB5[2n\@[>/mOn>"@h;R8;dC@09or:)ECT[O -n;iH!sQEjD4E'9--Va-]fiKeG>T,PP-'R4uKsl[$ZL4j5ga<"ZL@;jB%o=70=LPC)7/Y;c]B. -IaeX*t8gq,[J!//nBe!N9;KZDt_."0l -jmG/1Z8U:C;pdIk6Q/X06RD/> -*VfEeiCaDsju6c'OdN4g8$P4Y9GFh?`@OS+EG)P4ZEL_Mtqu\(:$dX&iBQon6D0Sp1e?af[\M -k0$2!cS)WP@;ue=F_i.eG#Q5&;Elq&iq@plh&8KEUV8KW?1QpV'cM!oY=j -nNnchZ+Z@Y>:C[HjJ\bG/\HfCiJ6srm3=)DcL156]l72kKFpr`)@ZPkPQYW[-0RKq( -M\3Bi>FVD\+g)fgZYu9ec>W&f>ub+gTP)*rK50H,T2H3J?Zd4D.K"&LEhk>)_"dg+[af*&59e -J*29h-b4K0I3?J5Tm-`U\AaNO$#jW3-i$3*AYl1V<-/[^Se>AtCTa4XNo_`hZrWdXE$\6NM`H -(Z4eeUDA(mVQLMXsj0g?fn:PD(.C9ApZ4uZ4M!Qg=Ei]DkVqdT]ps[jTVYlefApldh4_u!2!?#TAo\hF -ECgT,X3Wn:D\+.$0=7f;'N!c*:Y[OtJ;Pl7FZc\-;1[d1>^^$t2?nLFaJotbYl-+O?1B[^Y\6 -ru^%A;]g?AJMN>Wm/O3YK"8f6G1e6R!@3Y`=2QW1IfqMqat)G`7oKC;091S5"9k\*gp@nf'=Z -"8KZb&G-?8H=#[[/db=uj]f0,?NF_^(l0Ljhp31k1T=6P!5,uI^MC0oXUdF%<'c0:tWb%fg]<_Tod@r*s9UGZX5o@;F\?B=n$UWc -4)H)lDYEFFZkVo7u[;6p[X0@h`n+!1))h5VK#=J;.M2qu%5=$.s\>[[ -l1pk*H12g>.$Ec[L4oup<*=mP.do+?,M$d4mMM4URkO(s*Hu]1QpJWGi&+K$CU@Mc.l;`lXRj"t -pW]Y^GIFZl1/(Q2o%?1Nl4sR3mPu=8/i?T\90KkQFM@be2hIGZ)NN2/4'4?g&/S%?Q[6Nc[BiZTVnOWEl -+D$//RHBthl)r,[UD$kR@H:;#nl(@+oraaX2U"XGgGV`p[uC^#mKO1R/u6LHcU -^pYK0Q(=gk\*K];[,uJDfW8n;<_*7fZ(=tfrkL%jWI2r4oYmeO^><_'[12&tZo4b_9.<9,'n+ -S6ccFDfO4Au'SM-T4Emh:GHk4(Mn*N4\X"eN2f%qZ0hWid#eWdukH##?\.F#iAp",caGPu3p) -MdNimA>/e_'Qs_E9h=VXfqAf0nqk.msW\oJ>9MD]oU4L==U'0g5O`Tkb%4>WH\[k"h6CWkL.]sY5u` -naf[gWT#m_:--TpXou(Mnoh&o\$]-f%WTnpRYL#otbg">@R7`DQ*>*9VJSI0HIF%I'R\U_lrB -Ch$eTMij(#@p*LctEEdD)/C6H?8&YY$@'f7%:KkP=\]`pU%rpFUk1(,dOn(us_n=^!ehF.kA> -NN:;_a=cO(Q0FZ4j?HX1J#Kg+I?_#-`uE.5<&qg]dh`3B+;QZ.3i+iVM:_YLpTOiFr`>X%0AB -[5TX_Nr.PmIJmJ@X1.a<;+%Nm41&:/YI\%AY)IL7MQd!Hm0$cF -)=hfQG(4$h='Q%.2>UcHT$s<_0bpk#ZJ;YdZL_ZJL?lm)'/sj!JZ)b2!DaQ0.FI9M*3lDUUX -AH>GB&Phri/r3GI,h3tl4_4@iTHh5uoi>J[4a*M[lC3"0fHe^PCk]kki1L,+jg3#>5LbO&3m. -IkI;mF%#]%\%]\G$ZN(n=obnQO`>HarMsXsU"[%Uu5<3g<40@m(IER^:-hZ&&Ue1sfa(A270U -2;_B4HFn/_JtZoA=8G?=%W9k6D6k,rj//\P7h`RBU0$YTD,Yb]?'75l[ -oL;;@i>ml$t5A@aK:YWd#*/BGp^)r!CFV\_)nl`d&`IA$j4SZ@V>omOmt2EoQ&0E3.qf+K1AW -kEp`*q":*Aa*h9>?SZGhhOeIs]c,V:cj`S(@ii<)4.Lt=!M+P.U0eB/$kLl?_oK?,ZHB"CY]T -]mZqq9#Meul4C3?]?B_3lTEVc7@9:5nVqq&=%e2@.E(l*t5"Q#tO'])2DuLkSjBdjc^QD.Z+) -/'hmIDf3\^)e88.>V.jKo4,@:GOM6C'sgG#/t#(F#mJ'oq*Ts"$KS>8L@eJ[B"[uW<:=NL1KA -\c$bYbbfiR(#k]\=C;Tehcs'.,::_UK&oi^'oC\?PRAl"DWm9o=o,)@lsAE-D0WT^Q!`D\*UG -h)+OBEDMZg&;O3?gQp=T=&9J-*CTc:-K@dE(0=E-Ku"5JrrM?=nTGT=Q@%:McQj?XGO5*g>TD -o+^8b)gPX=YS`hNAhN%)o4]1"HUq?fO>e#DIg9MNk-!JGT!Hb0D.\@@6V^E*oFEM'Q#G0Vn5U -si"7Pc&NZ=1nCaP$.K3PPF.NUVnpp1Ej5pU$pZh@gK!_%j:-\'h:Oh$3PrjC00B(l(!giD$?K -@T/b_FfG:k&hFLaW+ksg.l2"`iL:`HRoo?2ITprAUqJ!UClUO&T=]7Qb!c\dDqOCi.YEY[Pk3G[H -FnAjlWj8gzzzzzzz4qGeaO(?nCcWgL\&4U*r,t^tJ6@@^S"<3\"0:i:(&l@g]#=Vr"\-Pi96" -Ks>U^%)j`b8)6.bGt$M26'AP9O9_U^'BJ'uqWAV\&Kck`\\T)q+aQH=."U7>B$Af#9"2fqXi>l -eu)C[g#.>*2ieN(@biZ,9BDNd*.BH#Ys"2d]J^:G0bRCjjsH-&*Sn3\Fj\kM%bJ7?;^5^Hf^+ -?_Cfm&h0*zzzzzz\:<_OJOV$/Rs?LgE[R=8F-*:a,5M-1DtDuFVQMpu.bS=\b -r:VC7csTs`cS&Q>P1b:fKjg*#5[E`:&*]K7I6Q6%EW=W1e8<](-\ZWH81OB2&W[hDY:Kjg2BO -N6c$M2Jpun%;!B\ZfqaeU:9aoL%K#rg@mp(GMsGT``rK)K04UYTN:;#J$W70Q.*asSN`RM"^! -@;Z5bmS$?M'ln^HR>HR%IC+PEb%Emk,;j7ukbqm -E6NnV\nX+\Wl`fmXk)tmf5[1qh**9C/51&UZmb%4-P%%l7e'oE]bU_]1f.[j!".HEKtTK/e>M -^i`VO>oS0oHdF0a1qs&kpJC'O^-$T?:k:P)A95f"dl0X'[9nN/a'W&8`0>[**l1O+T-V.#af* -ueSoR:"ck/7s[eDK5LF`qrrpLrg1(5j1IX59CFMF]CB^nIt*$Jgj$D+A)q)BiF37iZhL2-,%. -0B@S7SCNWL]_%$0\0thZ\jf8C`"7cJ92$ -UF@%pFLefE.R=aI\ZH;#\kHJpQC*_F]@,a%&GHJ1A`/EGqL8<;sb9IG"?aFh5??@I.NQS>^B(d8!!= -dd;gM\,M%_%\g4tr_kdBkdS&a-_`D%k++?aA>X@L^V+5[r'D`-clgA^jlXr_:a3ASb-AWBgK] -!:U#)-XQ'ft-GeQ&?IQtS+I*KsejWfs5k]oeg!V3`JAQ]"0WmtE!`\A,r(aY&Vh45)EdQ:4[<,s>Zr8>;k$LgPIs8iP'rRUJ)d;C#,3Ve";mqe"iE-VSQI8FN -]thXToX"1<5n/mS4=MuKkiEt62_n!J#qoN\salI,'D_<<&UJS+?h65n/j2kR\VATM>i;'%V,J -FbQjH-dTl2a`i8m=Fja>^=[;3%&4##PEXh0iiJuzz(kLKEeENb"@hMXO9[4T8U(BXgItAc7=B -C*ss'&mms5>W@.9(QVndl>^d1M'L'_SBHEN'F44uJV;ZHU`uE*FTih!_^6U-YdO8^IDqo+!uP -V&+PGH5GY@?6utaMZ8@$r1j*8*k?cIhltQQL=!fbO%Ogi;;$EFor=_KoK>)EVXg`Y@Z$n#5tG -`66],GklK7oHZo)/ieWA`j'$e/trK@ma'Db8g*_t0B%D#D77#A)u1+!QEmSo>r&[.G*Qm8FM] -dmK4k85S]+MD05%,H`6YZ'FopmYK$V4&ZH$>+f3a+/MrB=0;.InDkEi<@;JG2UDm\8[Hl;POd4In/#XHY -eM=a\Nid<1eTMZE/VeSjs*?8q+ogEW!%fI96HjrB3bqYj^5!T=%.m6qGtL5LW_F#K -3W>YJK8SS^/T@W)CN5$*!p4qB\6hC"-^MI$c?DZ$mWE7Q)$p9JB;SPUIpW>,+D(:>s=:>\]UW -i$d%I*ASK+81I?>*%Fk@_nSs1oKiaG/E;Q\_UC+^).c8oRDJ@L3_QAdhNa22jDS2rhG]3iQ/W -*Ebj-p@fnG8to4ph*]dZInL"'=uXCd\m'r8pcRAfT!bGX!%n]+W7\(iidPlHV$GH/Zln;bVL0 -[R:R?n'^%o3WrtT5DMgk7c$CV2aCUlVLf_"n>]@6$QFj+CfEu*UR:Z\*H!)n:Y7m(EsLr(LD&2 -%8u>AjqCG7"DE)A*7ZuF&aW"6Kkf>(Ul0aaGR_V7ofgMV12AEG=71Kj2!*LE32LT:8Rn58=f= -O:S0AmL;#*W@rI!JMW88l,BWf&e1W!t2;hAq\KO,Hf$q53<$88kP_GA6<$;'%dC4!9_.'qaBJ -;A>^bT%2YnV$B1&K(P4QA6m($dbDe%W=&gr#uQ#bo^V>n$a"+q#-(YLBU)Uj/VKb@k#*-M6#mRP_;Q0l?]/+rPY,F#4*#:+gf*$- -8<4%4oX;`p-6;9:@\rH?.aLCJA!MXs$PT-$3OeYO4m_7AcE`ETm&NkUDA0UV-%(CRT7R@Gh;b -R)`20"V`6e$mFIB^C4p+)kK(r*IH<85eE?<34%n&;nm%N/'dSnUeYJ5'f+]aZ].sSq52_Z93U5J5u*o56g$a3uKq8?-Ni[\n8=XZ"4B+i>GEHHm-VPUMaX?*/tB= -.p%'oeCC&(:?.W3Z1dkp>'j<'bcq7Y>.j.Xc.Hkp`>Shtd+Q(j7tiI?9eEVg%q%%cS:s)bBE% -.#Lf^?N0oG`G]kj,"h<#nQVkaHU;=:'g9M>,mE8j+MF8pC@7ps'GCsSrP^;.O_TTn7fCe?/QDOIOK$PdT-bE: -9FqqHl7)`(UKgH?>3_pejLt@["F)%B;8jg&8PQ3e-)J!o\^PJFL?b5^6Zdc6L!XDK?\=]-O5fs81+[q![)V.6s -3R$e.h8`Z9+)iE\uuY-(>gJ"K)PQG5(OJDCt*j[4poW8O"B*j+],4eMHMsaH!*4j0Tdos1\]oM$Bk3K#PIbndTU=78^CI -UHEI(.j9fN_DNdUeckEg5U@bN64/D'>6:Ts3TCamsPkZh4;/S%F29>@ikugJJ05\B$E.[_^j.n -%r31dB$Q)>K_A%ffX)!gRpB -E^IUnoQ\'4)=E7)E;_d9U5D-E7?\Ht5Fa7LE-(7UYJ#iEndIGkKff"SE9SI:i?hh -r\HXQF6@nbKRgW&h%OS$%b#JB\7:uY$c*<5/Q_P1^]%M"QF5JZD05jSRNO7`Af6nn2B^(MhO` -j\b0RB1oCTindf?/qlk3\P9-U@+%W4J$!28(0T,mOSq,I;pk#;=/3QU-,8kKBf&N<`Jf/NSHqZf3(QOE/.&\OW; -/*?.@.s#ASKJZYM)%3^a.J9hW&9OgK82Sm\5't@=h@.aiX:rVAUa7ZpJVYAY,AF#0FYci8R'7 -2[eF;;I#q["#@ooe?&u%,kuH[o4(?X=fN[uB%H,`9$AQqO]a^="oGAAdlOA+diCN35`%&pD+h -`6_Gj32X`RoqG-0\QL8Oml%QV0",L@jnnPHdB$'rDk]-S:DP#'RMDB&!]77Cc#3'4_GB-b>dp/T9i?J7NXGoVoq@^@+oLW,O*@l' -M4T.]4'/a[O2^sj)+L,/*bRe2Er1#PM>L^_d>n*RL@b/$I-'/oh`(k\Eji/TK_W>2cM/]XclO%?=he8Yg&lsfo+r?5HXJ7$2q^E;:]:s)kU0 -g(npl(HI>o6@#'YS"rN(;]tt1:QX93S^&p'>c'b!24Q(+ -mNAN=(fKK;4!h6(&<+)aTQjdem#64`(zzzzzz!!"t_V,V]9cC)Ff?un#E3PbT%'1:`rAkoX\@T`_!q4htS#dGs@;W\040m&4M&]nP]:G]eLHD>ue^i!`24 -JT!Mak&lh%a!XI,hk(++49f66miDl+K#cIl1#kI&[.i7`*T]S6T8_Fl -Jl5Ku![MV"Ya8SS<>,MNXh!S>s^<.u*S,fFaHV$qu&Ca8L,LNfb`LBrKb,dd%SeMarl#e -A"db*T28)UU:c3=8@k;*d()9fgJC"'9Prg"R/pUC8BD7UiNTc:u!%b_u5hdHDJT`qk5*, -EM=cJ+*i9gI#dU0uf(J#b2!H]pMG/N!qY1JC,L:=m^mO)0DDp[N3^!iB\"A\egdjMjoO.;T([ -'0%H)(],I5YtS!s+Y\q7$n$6$](8Clel%zzz^s/VCK:e)"oII,^%t6/#!rr<$zzzzzzz!!&Mu -e^F9CU`s-A;p%)Kf7L&\#qAqKO_72W5L14A'V's/5k(jSN39ANguHbm:9pr>1#$HaF0%^A\_; -t,T"JSk,rV\=p#u;^aDnIkL$U5eDN!.(mYPcL%GPWUMhbQc]@Uc88N:;du_..k-e%;VBOCQGs_5EmL -PJj@X5#7In7l'77qU+N7h86Ps!*=edGi6bH!rH;m!CUSXl5Xca2ddncHL6na1VNSEBf\sta=3T*k&4n]rV".JE>EE0IP>B3h.O\Oo"/JEkb`[t -P8g%u6QqPDW`"CFmH(uZ0=*A7q=aEX?Bgi`4f=68VMMZM'9j)edmP5/3=F+5"GnVIO'?a,sc\ -`M$JlI%Y;H\)5&!^2DiZR#"tZ,8O"&)9Wr.V;K20jqTK -d?2o,uJ!^dU/4!.b6Us,&(>d=RK^'6q/t;'X8[Ar#K5AW">/:o')rpLSoMG"t+VSZJQim\bg. -#Zs&?X@8Af,?-\pV>Y*1j^2,+b[5I)qd=a.lql+kQjkO.Dgn1nc!!(r9\E-IDjWP_W!_S4mU- -6ML%gk,.doj6m'?Pm'j@>hg+J4D,>DR9$@'W=g'll^AY>C!?"N_jZ>G"fA5mn&]K;'BUola26Srl7`Mb6m-6?3Dt1@U/aOA^7sJKoF/F]CED -];91r(5%FJ%"jiY*GoTCH!O^q=EXj`F:7s>o2Y?29l2Ht'rX.qDSmZcoV%%=MM?U_Q19@cRX> -')P*=nkbCS:(kg]MosMS*;Qm7rRqA-g0jB111$nO4'CdlMTS7E,gU(66]3@r.HU9G0sok;/O_($gge-p=#$ -N)WJ"^Ufg<<]Bpd>1-NPW"b5c;gLhc_*h-`4?Q0'H_@f&g.NN!HnS+<*V%g#n1#^7kd*;p#/]&$3KjHRKqd+?blrk*/H`oo;F6IQHF`(8U[ibnc]QO -,tD!?ZqFOd\EC0YJVU((Mc.I&G`Q2SnD@93Fg%qNjd%;8_'[PMkrK])MhIVOQGQ'ka#P<[k?o -"+U.*bi@pOB\'2*&]a#/olYqRDUg&/>eN9W<8_]9U*nsQ?6k(YY>fi9D5">2G$em=ld5EgLie -Jf1UlgN`W>I%O0P"=`.ubgPdf(9$"bj;u4V?9<*o+EdJXWf&OWa6!W^.`*BqkDqhUtjRR?E4L -5\be3NAu%JOD]D*6QKM$7cT2sc-s0l63@UoL3kL,D#"l@c!.?K0*Yg*g+p[G_fQOk -k5=G"[t=J1s,SH=lEmQ?-&X1PEEbQr841N/c[l^TILA]Cl-LA54;hH -bE$L=u,9kq0*4Eg2O-Ia0^"L;5cf1U#$gFThJMCZ=GrN_THUJ#$`Uhla/3WD6KCc^N8Q8D6]e -!fqoGSJ\ik$LAk;6e3Lb(\H>'d1o4n33UDAFCe5'LQ:S7NV$+3>"eX5\:BY%bE^NO'RU3?QCG&/YE7TG!n&"iUj#;r>C, -o:]WQ$@mk/V.X3??Vf'@Bo?5DqOI$"X1rr)`?@0t-ufnm[WnZS:GQiI!R`uc><S8;< -Ge&b25GGWGcOmbp!pEUX89AA>o1iYAJXVscd124YH%GoHDpgf'&qKre`tMd4O%Ybb4DO.r_(D -&c;:RS(DU11kuBP4kPPY7]1Y\MCU?CnoskfErB0tkb`!U*hEtk!aJ5>2l+R#mq/]SVl.$M9OI -d2g;-mCOFW:9q$0g7njUSb"hUAc6[Z-b,O'002rhn:koSi4J9sa^T$ -k4%kYB(cD=S]e`i^FN%-JQDdKDd[/%Cp6\RilH?ViP_d,C6`p1+_c*,C#"X(TZn3 -U=_0>&El!2.6"f(qYC"D)sr'W[.=3rCH^7< - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 634 554 -%%EOF diff --git a/doc/users_guide/figures/cups_printers.eps b/doc/users_guide/figures/cups_printers.eps deleted file mode 100644 index f08ec0d..0000000 --- a/doc/users_guide/figures/cups_printers.eps +++ /dev/null @@ -1,572 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_printers.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -b7b7b7 -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUBp.Je[Y6#VRe(FdS/7Y#N/Jh#3ACK$'G6?=3K'qE>Fi$5PH+:e,oBe=lB\mtS#kM^!I -,Lj!1q+HC'.66C'2caC'2caC'2caC'2e7W/W7E]D>UE7T.:'\;ZrlN&Q";q-;cd!T6g/nerPe -W7i$KB\>2C'UN)ZP"''8T:a[;i!EY`2WL"l*lWhiZRTEB)Pb'+K`M@0QSLD\R4I/=Zn%'?#`> -d+FtYl[GT:%,[_Zga(lE(OCEnX7*d%PsfP\Er[L3s6HcuiQ*Q5o'EfOUZ#857R)!r&*4E"G/; -Oa<6/S:quI#]#Q^MF>pWM+J\bJdYd%uC'te?:tt% -#I2OuW@<;WB+6=R4>Higu.E_4(lM*#!c7q#+!^tf=#E2X4.&uZ7% -&#]rM$E+Cr&#]q"&#]q"O7Vfr!70ZT?SDV4(!aq7g;(:Z^.*P2lJPP72B22?l -!Ha1f,lEX7eMFj8gs\%TA:IgYMG@pe%F3Ma_W^3GXk:4esp#dnZfq>*h8(*:E`mU;LkZ.1cPJ -_Dql[11sdpFe7(H88dE@Y3>/W?[8g=I9Q4S(]-kmd-9=<*Ru)ht;JbVsdgFf3LYk'OX@eg=jMs1Z_J9@:9d=fC5`]=X6[pdq0;jpJ&W8J -8N1BPd)F?`]LR@5Ga8fRr$QD3KAeZYs>FoXSZoD-TQT#=mm;H`N.oIos+$VuN:PmnMt-S":L? -[*c3Ud`2AcVmFTEpdo-m^NQ?Xo`r#SV72D*4T;OT0NuU]GeY9co@-jEWD71 -rtn5^=ZL#*o.^bVOLrZqoc,d$r:O/hSp[V?b7g(mumle?]nBHB?CD'b1,e0b+V0;0T[3q/gsP -&<0IDg\n=X2[PD5%BoU`dfWfF'hcs1Tl_@lD1)(-]j)IrIm*A.FGRTCNK%>a)8Z'e)'NgG=NQliESHgnjS8ODmJ[Ve)'VuAjl -cPGt("Q(Ou^7cWT2N$9F8>blYZL2D-UpQ+d"aY'gtMg@qs0rNqmeM@5=T9QI4R&eM`4TgJ[eT'1ll>S -#*Ptk&%"^N23$6HC[#T'h2*dh"&)&DX/TTPIgFb?*OMbRZsVK`B%ENQ3]?JS"1EB`pLoYOdS7 -trO-C:m1p(,p\PJM6,CHLN4U%b4;0"\;6qbYT0rD9m*QM2arNrLd2Z>+DSPRCb,lo&D3=I&Uc -.d&"r<,TCJt#L#i[]j'6E`u[Ujn^.]><"LHk&>`unXb9"7VWP$Z2M]nDLOkp(IW7T7epI+S%* -:qj&Yapfjkr/AcB5EZAaeOFGhITZ,pDR8SFf%LP?4e('%c-#D>qXRk#2s&dTrkKm4;Y"SGhC% -.Ch7uH2`a%JQ*`ANe*b$)!/-"=Mp!:psGZT?UGHGD7m\s[=X0$cAF>Kl_kBfbZJ`)A0c04b9q -F8>#`AW,iI4([Gc.b?Tq5S(Omt+Bj)G%`*I(g@@h.2DBlONqj/>S++b(/YaG\6/=P;_CI[-4=6`$%Uu^QP]\RcW@c?> -%;SrN7Gie0Ck*Q?-b13Dni!>M;Df6?&R#XuCSG8oo(9DVhRFE]m9(RlQpB(20Pt"bA__UF;I, -PK300Im#SnRiWm+A50gd<_ZLA9f5YO2F:?WCTTMsHhAAQpi"dYmE5n-"96Jd8V/`aUD#RNPg1 -+=PqR4(9mAL56\qdC8+##KijQt$4]0&mi4%g\-NS8D)Fe,O?MGt0OSe/*$'F$3:2^fg.SR4!l -*oibQ2ZY/^$1uH+Q6$0dHr,=-of&HBd9[gWFB)$3s523CnESWNE"NT8Bcd#eJ?SP?3MF7(q_; -Hb3l7-^bF.>HJZ$/\+VTkNg[ObqD)+u'"-A7]7-lbhFtf^)c/-d'^a]#Q`uB/,*irMi7I -ouGu.q^g6HG.WPEqb.$TSN4]K>LU$X%])[F^JcdI`AOH'AtM[c8m+c'X`eFg;-P:F2.k]7Ip: -e(nm[i=,)3*df?2!sI48)g:8kb[[Q.=&Y*3d/I-eJRq,5B0tI8CTgc5s4H(aVJiDsZ4X)Y9qH>ALqACC9Un''])q8s.;;kL:XF&8`U -15ocl(Rs*JrigXQ/(A#.K#?-H]/WR-caqlp`ldU;`>.0F!eX;>>gJE"SekT26\g_37E965:W8 -,cO3ZC)4I[[Zq;-WM=G,V4hWgn!k("/G/(s!VD0==^P*I&enp\JuS3!pa@I8;.0U,XG8a_T9A -7kkkT>V&sdd#AGraCmn'>R-,HU&`6^L_TV_C#@S.FA>>/#^7D#2o_d(b0Y.W`i=&3NRkEcI`o -mTB\T:6]km72=n]!Z]_W=Z,0_sMj^cna@u3-K'\.#2Mk]\_[)H!SId6WDjSZ\h@]X+14o^[d4 -D-[u.J.XZ(CBqeVr#*m+6DqD<_O47[Zn%&hrsU9QgSZ?kAZFWOa9*&h\N\:,8Jh1iCqRgjC]o -@=^XD$W@/33s)1>9RT27\U]3%B6%5'A!YrJTo/?J7E\\`&kGCn$1.)jO7Rg5D_,jn*ij#M -Kc-Ki&qV6TFGH(CRf\QcPt"f%%'>5<:o]V:Y%3$!F9j[*a.Uc:h`JDFQlm'\R<_(0`M1>5-/m -D1-EZ8D5S.ae1;,Uio]2g2[kf`7-1rF.'8@gU;-ppA!l8SIG+$_hqA\!Ib8f*W -#+'eb/n:qNIGgZ,gu*lqYeuEC[5#Bb0MhI&5s[rQlEbD;\!P/6ojH=LT-Hk">n:q,+E0(g*CL -FK3pciE"dq/oF5<-=Q7#$)iLLHPoXX6'N=_Xd<._713Ya49HQjXk3fg.Q]$O2;4+msX6R+$DR -n:qP<[S`s!1[lRd^)J>qoqNPI3*2dEWNa?Kc]o:t8_7\lEkJg%E%iODUZ/lF]h?c.qoTm]B3-351@*Zj%%9C -[,2!o92YL%\U4iVm=$2&!s9>GgD4453RBZ[l>O/Gf<]aer%R -]*^$)n4A,2A+uU%n0)a=3$b37:XCSGJeV[^E[3H.7&3ejOBG:n1mN22d\uX(A1,fik?@?p;2M -:$-%Ig%!'SJbV.2f30K7Xg6)G.fpC)mUCFuL]Ck%Q7NM0-mu2:A1=g?'752WoR -\u(PpM^cDRr?nI\<-pbF=3db;!\cHm;=)s-=iACS(/!oMRa7>WK2@g"54RtP,m&+A8+b%0P8H -QI9Zauo4MHXgisg=GDHe>Lt^;`>)[(DG=5lXQoknuOjof -=\6Z+)[6hqRCq\\P:SHmrOu,i#MTm;; -n`9T<s4jpZ?\@:0:;[k)2&7VbnFb.#d!Z*j!eY"CoIESCTi^9+l28k#p[4Ypqd<8!L?;lu -(\)U#XM?A6RT0=+&."MRUogAD=\I2;OF!nCDth)dX]Oo -<2QdOL>Otp.h0!8jhP5!Gj#)6[mS]4O;oMe>K6urkD1/hkg2$KiB.!3E:gU8$s!k-.jkK^GD/ -ZQpdlh_"h9-,CZ-TLCK.BpiLRAI"]'Z>t\je9C)Drk"(DYTT-(7V)Y;CaJ2;ru3K<\GPSD8ZS -g='b-%%Xki1tlY`^%IZ07AYj$BpR.=a0q?Ao"NA\FhJ.u'I@+C]fXqro!CAlX]jNmC@b#>UM[ -Aj*IrQ4XMsS.Y9sH'!l#RPgM(":?QX.cD9)^Wa3[F!KQW.9gR_-7D>TkqinTAm&]kj"Bt%k`f -PWdqii]&74_7r;OL',^l(%I=$uOqD=BNV7gbWY9JGW^^3-C4Bb"Zd#YK#*i"ZTj&B*]UH?X3C595aDK6Vsu"1h?7OZ>gD*GjWd(#[%^4-pL3srpWGI>\g@rK --PVc5A>G4=nahqQB6N$ICRcZXXR"+!_'j4KDgTVg;<#Q5ga[m.q,o2TK,[CgV'<7-,iE..13' -f!&'jm?&bV-1MG((=\>W&7p`WD/B);BtM76tBIIlj4EOU3^Kg(k15qlpLH3#Os$6OB"0-ub@YG -u9,boH+-Pd>;lfe9CZekHl(TG[%%-u&5Cjk?2zzzzzz!!!"DF3(-=;=LVZ#6$lHXs1 -DfeHQ&+)mQucX>[RME%?4Aj^Z$9XPhp&X>Wc6^s15ORsd#t3#BRa]:>g)>a"7"<<-rif2C`&' -8H@)5!]l'J4Tn@+%Agi9eJ:#5Vr_RJ]S$>U&-N2D#d8l$FMm4#do5/>j:"kZiF?AT%_7('YY% -#B!0j8+OgU-'&8Rma,FoDd2f\=>&l8&H7NI>_H1F&H"h]moYk$(QJN`%oXC8 -VB`#KgkJn"s0em%Ao`,1rE1B9VmZSm#UB@!-b%5hb3I?E[VouJ;Zo@J;k"0g+2#ha+)&IIAH9 -'a.[mLuT;mM"^eCn-S+CJ37T(oF]AHXh_;@0YrYDO6>L)pbqC=B&>R_q]Sd3aLSd*2)zzzzz! -5L!)+1n$WOc\gH@UF#U?iDVu.O'H?*;`jr/&+?(t]PmWS5m$jdb-fW\L!C)s -45]"*+[]I"0C4gR07<3/'qLJ0>D-TTio$i]3(Fi@^%?u]sQ2+EHdVj]jGjlJ:a&!*qP#iT"&t -QLcB7_A,%:"Xf/ZU<]6VGt,P<`tm'(McicVn%[^$t;*JY1+U"5Azzzzz -zzzB#+VF?NjscC@2d7_=Y,Hb'\r&'lseA_^9b&d@/8^:MTtIR5&XJ;Vf6H;qj>_197_"As9s! -RC8T!4l>JN9@?_k%XfJ$fT_d:YjbrMWiF9%=7'dg%qS%A2NjO_cGVBTQ:t$[n[6IYQKt-&1#j%AV7(-Eg;;Ec[+\VYjD;98]$Dj5RXJ%MdsE?U4 -6d(fGe*?c9ljt?"g2.!2m1g/q/@kna3.S%@0&mJ7YY;+VGP%igcme<`$3*OCVq9^fc!lTa:_h -.3OS\"AElo[>"7eoBI6_]n0DA-/[\F=OXdGTI.i`Wa9WBb'K*_$cW*ru];gi!GBE3Cf:QpYfL -mr&oMB?M[4sE>Vd>LJ>f&F7M^=4S@%(k=.Iotpa0;4iV7O^$/PR3e/j*!8<2sbq0N*WJ54Q5# -28_arA8X_<.d9ou.FA%D`kmHU+/7W;NJYk0;l=59glcTNe(:71/1QZ<_Pfus?BJ9@asNlAgHf -8?LPeY;R&N.Tr!@F6]F,sDa5#@"g76E,/X84[iTci(2DY*QH,?fpm]/6L**NYhrOOW,X"C=bX -a\SKXuQF^nnp\lC -OHjQ.h(A:(:C"%PtU2dS@iTOhN?*:.ocOpJKeAb%:n=#F!QWG+VeNL$HVRf@)T]fOd"kVLV[B -YVM5h-YHbfOV3]@O"):Ha;t/>F@H31e=BOYE5,17"GPrd_PCFtOfB7_E"@q(oL?#u/kB?mQDe -.,9Oj9bG\5C&2Z%=dWR/r1Npk13%Z/3m.B'*FZTi<:UXq8Qfq*0NpBG=!"Fo7Z/) -M5g;5L\*i@J-A9X)E[e`5BU8'4K+.K(=]W^\MI[&@VhC;HjT0^G\Wt46@U-Z\APla4[V9>V-H -W+,r@#'&/ul$WdSGp)>NVW4Ok.,R^ZT6"Y@'jSENguTU9]UKk^kBeEhhCEV[>@%-^d\PMWr,m -7ER]X'7K_.Q7T.X]I.J^X!"9(VB:EQ>/K[]V,bRa^8Z*KJ$aZ!I58Y4C_4d]VeQTkQc=]`kmU -V?W1/,:`n)csa1ln5V2nlK%/na?IK!VBD8*b/AQ19BX\1!_Rb:A#U\e6BP9IL7j*8rj99Rr*- -2^fYN>Xi,>(1K=\sHuSHg-6n,YlR>KV#8mFEb)c&k0V^MpPA_09\:&>9oNPmEX!?TA]/]0e1& -!guNFiqh)%u+s?GkkCLUXdfreYd9W/4BZ&WJb?6m]'Bk%(or*m -o='CXTs6eRjiY`C&c"R&G/F`jnfXY% -J;"1_C*NllJeGJZ@?9WmXp477K%cO?3K^0(%(1e89.nE#g1]POeE6*$%A.7"FFO#+6"%hb,:k -LkFD+LgEO/YMYY\`(-UY1"d6s\21.@3UKQ4CgAK+QPTH0r=5V%DiCfhSk6Z\b^)4/qF,=@kn2$F_l_RP]=)K[q`#i8dX<1,M"d]9VSX*m -_o@@KkHWW$S>.`;UAHi(#I.jfO!Gg'WhNr#*/GnPmE=Qe9Bhqi\$."BDcHoqe2i!!(sFh"?ec -H]E>]=W)s$BC1-O!u#)V_raIgigo%4bJf&rY1\N>;o-6Y]Tq2g2*/)=i6L-Q84<;[[g98VDO4@!T#iip;-rQh^7%^92XbY4]`1pi7 -?t&I8#au8$I+Y6fdIC3pbUg:7!pBiD/qoeM>iHAIao_shG -F#.7m%1%Bake*4XIr:A6*E[KeV&*HK#on&)Gf,`B7-B7\<2-k"*SUUP6[G[b43ZaC)5\j>UXfSs+QsXr3gY5OG8VPeT*UcCGAipUsD8S"MNRYEDT-I -\ZdR!Geg,@b6V`#hY^/uhhj[N-23X`@GMjcB!m7eE88QS4cX3DdbgCU>mi2bCCpoi2nn.5OFe -J?BBPS?$%,itq2nmAIV)+3\jlVb-58ndd.=AZ8J[FLe(C#:%L0NSRZmH7Cb8V`RM8LlE?>WS9 -A1ink$;dts)9fjeEf$;gA_!6Vs;tURV2KVu9b-S5*M6g3O9u$K?C3q=#,O*Qtg:)o_E?#L3". -*J\-^IY4"(0WMP>gDclGZ4*/J="\;iWFM8WDN$fX0uRB1V:$;Yda`XOb)0C!J=6&&Z/kBSK.c`KA.lPDSl\08(GKO^LJZBr1-!(D\E$LcNV -j!P^S!/f%X(f!'EqR/KTJkaj=%7#:*>%DgTXM>(4Hf8(-eG-1ZcPZ#YfWlHo062/?A=/=Q.kj -3A'",J%8osNY=[#W9kndm=R@R=[JbJB7ab$[Ct6Y>q&eX$5Ibk[-OJ`f6[r1&06<0Z*CrOD^ra4g&8)"9Y\2XiiSDrZVh -+2ImVakY0?~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF diff --git a/doc/users_guide/figures/cups_startup.eps b/doc/users_guide/figures/cups_startup.eps deleted file mode 100644 index e83f6d9..0000000 --- a/doc/users_guide/figures/cups_startup.eps +++ /dev/null @@ -1,596 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_startup.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -b7b7b7 -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUl#,OmZ@sb-PkI90FW\d2XLJ]eH&''4RreX?UYk'MAeeI5jZ/1LQ]<:`A8td&%N>2i*r -t`K%"LG0$+5>r!O[LU!O[LU!O[LU!O[LU6.Db_qQKj!+U#+*[BPN.5#*kXhJk"3YoVb'..YKh -4B-1(H8+lFWeFGCN0JnDq8]C5!Or6pW6P2bfqZK6qPXiO##k.q.DDQdn5t;A\;L*OEP!PJ1R< -0MEr9l2_!O[-$Pa^d`D]d+X:5rDhWlp/KP!EB[Nc)JHR]:aDWKJZ.;'g>%:LJ079d`pO5"9ee -`1c-hf'T%SF2akdQOO]ZrWhd>`+Se)SUJPs?`MO]sAe`is)k6IbD7:n -#AR>&$d@R^[n.`:,*U:@R.so]7\&M2k?]-m&=^^RcQJ*)rJ_NL79Kl`O<;/# -h8"8X6hV=rVKe0QL;tY0q4iEk$oNrYF(`#F#C?C*o5HZVlI16=SuJ&Vu-8$E"(?:99G[s7XEM -Fj($G)nZf9cRC2EQD(g>M`j\6LFgVZ#lbDc#h5jiUJA_'7;WP;uL`[sBInXno275:`(72Fr60 -h4%Yk;41V'F6$DCls]'+BiUk\\j.fsdsMB.Sp%2U,h>X/LI.YJ=^rV`Pd$=B(^SeonH&=Tr'1maGAYTP;.Pno9b4kbqq[+.LT4)!U-(h\1V]ff`>6t -3csll+@Z-gp9Pn6ubDiZ<^slCYD7\nFN8-T8ZTXLude2<%cMS9n-9MJIF]Nd@]f:A-\[B,6!*i"O"Z(>N[/j'f#igHFD@W7C?DWWb,OY.!uF]U[mP7bO*3k2*Y^4SJf/pG5Q-f(u.CE#GQZh]]N/^tQ\N2s&u;k#& -@6>][bOqR"&C/O2c+#-9gW9nN$]@(]VQE)Sp*,RNY1iHg60DRLX2m"t_\*!2=I9SERASSP\)b -T9tmn#rZ:iC.TD.Xf,Xuk(NiP<\F-dO'qFqqE)B.3Yj0hP:kEVHs^FNTUiHAOAh;.pP -FN$h4\qI0.Dg\:/W:)Fj'h()'8@!G]hS$^Y;fZ-c-Q>pRSYh'RVLi9mR@K!HW4thnNaM,r]%1 -%osVV)D?KEGZ_B<5[?5YAb[sB.V"A4$q4(FK1&3$CV*$-U/CrdX\^`!dK6Hd+m5erWH6+<_&k -44D\)]8F2C`H'r*:j;%bA)uGI_)ramW)paZZVhgVV.9=kkQTLLIk;0%S__CAZtC.p&A0O)E.U -g:^YH2DdA*_kKP"Rs:KGm8a=%$f0u\#BZ0r*3LHnOfS'!FfiB(+#r>?,\.kXaZg_IB^ -o@f9!o[_&Z%+dJM\RKnR'qD0f"SSUfE6hr\h!8):e('su\\^q^o_dHr,tjGp!R^`SBW_]/8%4DppK&=/5,@q'^dipEo+]MaK.k++l58u259F/Rn:`UFnZ.,`[""^C;*H( --+Rk)idKttn:A>XT-:`X@^_g*5rpJPjSh6m8NWQV>0q<@`1W4%F^S!JF$If8LYgPPrJb@@:.% -cPQ&GX,4Z-5*Ijj=55?^MT/zz!!$t2Q>]]oo.^94:%S4Y5P<@1hY[nu's$`*ZaFs]C\9LQ@ -=d)V?K_/@7"A2>VFeJWL7Vu[\r:VfB.BN4'6PGYAN1+<`=G(0>5a!n'^H[TH67NW;_.sDH@@p -`#&>alD<,bll$nSV69HD^=<"bkhNO89/a/el?9CXdMCmXk^'dB6`!4?Q -JFhOm5RME<<3lfm0,<%R=I'ka54#,)nl1MKUFKX-=N6Y*\Q=do"8@A0fj(d$`0[9B,VAo<7oK2Yt%#[Tdf.RS=g>Q=DL[X)/Mt/@NhA9WsZX`C(b_I4Q%q[[O-QHVl8oi0qUo?+;gXl0M+\qWd5J?>\Gq[XDr0ek3[$'Zch+\g-Os[FEc6GA -)`@_8CpUlSF\K$a>KFLWnjuDj@r[t24:Q^^$-E7[2-lL"/eXIa;$5f%0X)LL02Y.ra1G -IB59\DI3%^$VA/bNlPpMHed%b`/1;G9^(N@Fr!A+MDgq%u/pXI&hUDDT$,WYk-iN0Q+3Hg)<& -"1H+#FNEE*+G[hs:>F-QVa',t$U>9MWaE-h4;%o,"4_ -aB5kbFR&(Z"h90e9-T`\"@cY\CYUIVG"O'7800Q'U+rY.*b4lHWQ#=\?j1U*i\LQ=8ItXOFns --;V$ig'ZTcmB1P/4"I\bMu'#EXiR]O^$(CMfX__I?3RTuZk^otGhUO\"fre76Bt9 -4o;iqrFoZ]kEZ,SDDCj*O06Ot9Q]F97)X3Xq<;G,@TrRI!83pt;3hedbG2K:WfrN$>Dn`=JLM -V\$LkC]5M62'`b;)[S\!_lRK'U%fmSa`*&VqKP&`Wr1Q;oSMTQN"L%HAeRSXdrinB@F6?>ASg -R-6?+F9^bQ>rp%)jCF0ABhVuRf.pK/fE6BaZ2=o;bh+r%a/=W!n@*]\ISXECNe*&)g5+Li>O0 -HT+]!A_cqDiB$p-]BP]me3TT;"to5_X,4p&Da:.>84:]>e?K2N5[%[\4)V?<,%nH$cf9qDaY= -G,6,s.H^UU7bE_H\T'Fkm<03`4g-kE0.nd0O;1YYC#%i=gb3qa[S<^rV)]W_ak,BLRVmXpEp8 -gs5,Dr?[$_H]gNa$&0RLr2he -%d-]\.;B1@92?dJc_b-/p1flTOK?cKAQcjb8r97Te0GmPl1"#_OOh&J?IUa,+G-`cH$Pk<;=j -8I@1>%%$67I&,h8gm-:Pi/O4D./>bQ2=3]:RrLSjo=",4OMt3>W@2]1r_?JJdU2 -ZpF'#'$6u?O7+(+:nMilN3aisReV,l:+Iuijj`-lk#de#g4`4+F-f!b'bD,>tX&bn%g'dNO_2 -L(9hHO&ijZ5Q`:Ze<9:+gDb\$6'(k8cDgC;NsJ7+;ua`.8D9e$:&>Njj?,Q&,JNJ#P&Jf!1R5T-2QQpqie?jXH!?K_[e*Xs?N&lO]i\[TQnG8-*u -d)>m!e-H>kcnj[q7toqdN;;g>Y<_N`/QSXMn9<\ZV($jBiQI*AiEML()Ai8q7A=cod3kMG@PC2+CS16*R6f#h*AV-ANh"Y=fN@hCAgUgUufm*6iZp""t[O-2dG.jFWs*?P$ -;.ne[VQHFfR0=iVHe%KUJD>;=>Gk,Z>UDuI?7:&/RcWRAH29I[qZaa?hu> -J"FtfTY$tmIG\gjJ/96:?.]6C;'St3iuQBQH!c'J'RiO0jX%h$m=E8_OQj]Tl*$;%g_N506c" -?G4O/;5$d5E>sbpS6"[9^-lF,)X4@t17RN])Y -:S(DbG!(Xb*gZaG&9cXd@Y:bg+Y9ehr+dI'V!6.W$7gi)GkIEHBRg$#E(m-DP`EmJYZ6YLnF" -U]YafBPTPO=`UsOXd[7E[=.RBU-$aY,4f4Ym9Wh5hofW#`Ku-Np8iPG5d"-@K1fo;p`rR#rXO -U#N&A57@#Ul9TPTl&C,Rn^a>:qdL_'r#NBVqM6F0S!(^G])@V>pX`crA.baQY2m"f"8#,f`Y9 -"C>nqBbA_QenLVhU;eZ.aP/U-G@M/FrtUhph%AaQ,_\6]V8MSR$Q04o]VY"X;d1Og0-`=hik$ -is63Gml4u[3:/#ph3IbSk-++Sbn'\r+p"O&qm]M[dnc?_*.N,4\ebJZ+L5"0db:9EGD9@1aF" -l17REM2a8sK@&gr3(j7,CWF^KVI]o&XWh\C?nP&3(q6k_+p=,qLT$pCAU>?5dau_V)if9"sQT@^GS"k -Of>3E:sgh@qnCR9pSi]OP\*c[=9fG.lC"?.TE@Zl2HV@dP;:fPc$>2@_E>H3g[M2E]na2q-PB -jBi#ok#""b`&3=UU@NX,25b">E\p&X->!Dm&HLBIsA'>a&:U?%uL#EJ_4peVT8%oOL^>bEAtk -ZB&Z"#A>^c[&\m#_B>0qQO4LD^HFq$+]$O\mqb235A(=i,%C6pdW_$LaN`=^XpG]LV#Wo#oX0 -$/%[O\?KSWpKI0+:$t?cOAYhbtDg& -0un,:`>Ook[azzzzzz!:\7t,3,AS89K7mG"p*0$!H`^!H(nUi%086N42K0lpA+>BqRPN!7+X- -5,Mrs4I"2:@ra)[?)G%:\q\pf-F$"BUUFl.Sp)^r)D_H&I2Aj97`IYo<81O9;[c$1hiH82A-A -65.gsm]%a8dDcRp368!8bcc8LF=L/QZKN+Ia3'QR!I$R$g*Sa?Ul,?%f_FW,pmmb0(DNj`Oi@ -u@nH#8K\ZAeB;LZH4BcB/?Xu>-_@=KVo9H*8YE.k1"/W;[*[A)BN03,Ef[?UHj'P_t -C'@`=k>bng`2A8i0RG*IV/1'0'5.\1p*Bm+-PX(R3cW==T1D7,K<%HrXJTb! -c;:"fd8ncJ$#6N1b]?Qsj=-A+_4ug]Z:]=.?!h?Ypq^#sf^`7TMqDV2R*">i^6/)BOq#.R(Y8 -_beN*]G:SiD-*aS"1zzzzzz!!$tJke5Hs\;e(?8+sKZ]qOjDGlnR)24q*-3^D?)$/9E^DjHdO^Uhu$?<,XU*d -#V^5HDsRH:+S-34;6.59hr=qmLTsg[R*gZN)4?$t -%pd1eNZg^^`I'HL,8SuC*HQgut[C)a*+qmPsCb,G"9,PAgngh"\K#kRME\7"o[7(IW^<0R[b= -%\6A[\8@01W1R@XKNhB.qo[m@EFpb.,Zd8X[ZO$9KCpjS$"&gOG+7"Aa3])FjU`T'0Zu&*Fp\!NH\YZ#WJ-#WN2"^aMgH#M0UF]XHj%\o4spLn-+WB8_]q7P28AOa=Z -_]fOu]A_sJ&f7BO`.'/E)K:*PQW_)J5Y2[.L"HNkNsal"@(%#Vk!JC=Juzzzzz!!'eFin1Aqo -^IN<-q!LP.W3%LHFsC#PgEDOh`DUd'-E3+FA-OW2:.1 -]!G9;BS#s8FqbV%Xi;`*&"%;Va=9c^0 -ajo8-JA8MQkUXJYusVD-cC\TJgaQ`@PFsD4Rc:CjENe>bsa:\nV7n4`f%E%cS3^Ft/;7 --]`gCi"j@GI&5hP\?5=Db4;Ck(dpKgFLmg=QZB4;GE\MBS=j5Ii/8$U(Z$2L8H@eXP=#?HS9pnl/Fb5j*('WdX5sKo[.4T -pEmGEX/`9bXukdJb$V9X/2q)9h/kf"$8//eUa-U6KaNA`N8<40!XB,7 -F\EJiK(>]$U=[S&FPXAH)H_0OuZrg=416=#OS)TV<=s9l282Md!cVC>q17Vr$l]*j -8n89.a\)c:!)mVBUb_:/4Z_JI%+_c[n[BZekVUJdW[Gk6Df2Pd9QIdL>X0(_mR+bF@Ijc- -hs.5-n7Q:DVH6Z`R3RVhL^m2ca-a;&^I@a#t*d-4_LnMrSR\7&_[;Yh*.HrOtI$dD?]p'?X+Cin]P@hqYH11Nb8o,WF=B\uBGl^R1cJPQN[9e"?!\%.i*rI[V,k[E=AT"5/a:'!H$"Z@zz -zzzzzzpaR]ii9*]s'?&J[#eauH/ -nKhRG,%&>68t.2q<@?DQ`&JD3SWgKujQcceV'>qs,A6+C`D8-;DTo2O5#Q=I. -`sA4j-Xk%0_/;sUQWdY*%H#<c>)mIaE=!QrR5]RoeaNg;q??nq:KZV!@Q2(iu -[T#R.W$?!a]3kShCF<%DS1CfP=/Z"-g-WJJIpYS%VEoUI6GAJlX<7b&9-AQ?dHG9+(+[<@\dM -ST^&f`\^je6THBe5bSBcD!ks?KR@bosi^N1X!/AAPr,aGtLLN*e4Q]]0sUI#\kl*?]os^[rnc -Bm4K=!(!36lJtA"'9uW/eD4,1,W]&GP6#GD$.PXPqAL*\<5MRMH!)U3;`2b@RY;oA[CK-hV,U.ZV^O8S8sW7Q=m(1,&V@8KM[/6fS"1FM;;@EaWF( -Oaa!nc'U.i"Ds8:ab2/1[AFn%k746,nOQcf@,'0j(/>,g<`%k>u/@>bk78G-i@npfhu-gYSDW -mi,k1B7D7)g`l_I%(sClFA92SoS2X.6S2ESPmlZ4pB+_+-G6N&re<9`k"Kc0?LR2WFBjVDan? -$Ht(kPbD83a:VX^G^ojAQl.`SaPfcC=_O`HR03=CtElkk,b?'_128A-3;7?+m$@=&9,Djm7qe -8urMTI;ons-S`%Vo'A`&Y5?Y6j3pX0&rE5N0>8nX<MG1:N@d#cV>,-K#$m%&;]a&b+CD:KpMnO]kA.l>hg='H5-99eAD=nhrEk..d^qd,h`dL7@4FL@L1l7GI,t3Y -B`q!Al4MTd+hZ$JcJm$7o;-#8*LUF-1MGb<^-u&\jkW2:I*PJj0h;74%KU?W2f%&olki@<T'([*SW1raEeYYlrU*l3GIGp1IWlV55lnOE3/F1nd>8lP"iBEN4\GG* -ka[p&nfhK"ERcU9grL%cB8+ -r:o,dJ:V>)UV)6KMh$r?GHF'[nX7C"^`R7>@u6hnBVH+%a1P]3<\f7rMGrB`YuO6FqM`Q/%OB -dS6ceI$OC5hhL^@eb6-'Md1)uF_c6WgfM3!jahWGzzzzzzhi'c"glE:r5)mlpW<@h\^/E)H[u5OlY]qr`uV'X"DE9rMDeoRb4:A$R%[4Q,=t02V36ok-K[_L8;8\Z#li,Ki?aHn)(l -m%9M<20SBS!7]k>.C)aPUfl2Ps]F0AG*^m[heRD_nc(Nfin3#40*I_d:=W^g.Y:'9l*Y\KoGZ"F"N+AqOmfA+]H:PREt&Oru1hUrb6g# -[B[!'Q,;8JUs6quo.O17$"7p6%&MY^.l?j=Qr1+7[4N;nLOBDE6cDB^YI8o>W"!LRPY+_tQtr -$FDbQ'.-Srq8DFSMECrWqE-Uj&MZ'l9W@clIqiWS.^(kUDAB:HpDT0[<;rqbONnJ+\!AeK#PQ2KPNI_E'O0@Yf&6rbO;n)mW%epMJKdPs)+5Rh;-RS`_f.D>jKhJ$7q -f<;6g.h3>0)WGt\Nia>eQXCA..17db"5p(5e9KO\t2EOt21P9-'-D)hhn!d!8C4?UGgJ0eeD= -/bYT>\2Z/6DF[:tn,MR?J]S1Hf?>c*aG"g(PKaM84]s0X[ - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF diff --git a/doc/users_guide/figures/gimp-print-gui-1.eps b/doc/users_guide/figures/gimp-print-gui-1.eps deleted file mode 100644 index a9319ed..0000000 --- a/doc/users_guide/figures/gimp-print-gui-1.eps +++ /dev/null @@ -1,825 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-gui-1.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 590 574 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 590 574 -userdict begin -%%BeginData: -DisplayImage -0 0 -591 575 -12.000000 -591 575 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPu4)Z?8[OrK_dcHH6G#pE!6qW3(o,#C`)Z'S)*M`YO51kD<5\$^^4o[c&>+(!n9Egu$\( -d>!"\-_U.AN'_3+k_K6_Q3:?J.=t:ff9er+\77ssO8UTSLo'pG5MA>H^>V[-)#(sa" -0Gk3&K>H1Ec4T$^pO_p;*7Z8JHTa@Jl'jgsr3B*<':h=FI3)[i04-Pbq>3AGjj?ZH$OJ:kQ^@ -reAM4hrVis(I4;j\XO[lrXju_&VEHF86,qej^m#+W2!D]XVjo2Qp_C,,$5/0?B9W+H.M$At5i -5D.M>*_[qp3)0pLE>OEDn)?=pa1cEndqLc8d2lQRrc7l2b?)WSOA67 -'U"ue\_@b&$'C2)":J%I\4YL5NbQ>'I6KghN]A\92fc[9ta_dq7&@IujL/&re\b'mtG&,hEqk -hgYO!:-0fi.!(BtLcX.aUb_O5'Z3MZ!MAE`lpEIXFjok(ZTas8DSG`ZCeB.^lQl3pe#sF;"4u -07kI3H-o:V9X=!R4l$.*cmDeFjldtU6=_&bR:ll#r)VK->G*nekmep;>PF!=ZtIn;8JL%R$Ba -krI^"aZhjR=eku8MZP\`/!AK@g>Id\19/b:`ufLU9t_0"BeC3?G5-7(_7[AQ&HrOmC?3]a)qR -%-TW\SOd6>,tDXt^'c>Fj_7.FQ!Um"oH^Xd7lIUP;)'b0D,?!gi -A9;aYYSk?!i"A)DRJS`r<1S`ce+Ra4KiA!VNY-MRneYQ -"Oh)2fE[rSJo&,B>3-,r^N#_NbdS^^:4'ueUf1\/k"D-Ero1a8"hVF.?Tap=:.G>^e"6)/F?1 -0kSb$Y##(r'?olhgl-pJBV]%7[g4JQg"/]"$0V)soFD;2\;[o*hD8C=o6%Me -*_%*I-cpm)6YZQC&;=j&9_/u]neoYZ>=l,EOr>q[E*:R4KFK.Wp:2,[@l5V1jLrs9mat3i@;o -U2I5CR0j@?9&;ll?=u:,SusBlf;ug&TrNCBL;/asW<9IOWB-+cSa1J>3@uWl-2J7nT3kYYQTMrPlAEbB)WIT@gfsJ2o';\^T"\bg4XR5B>Eh"](WGi4?9;2U_^iXQSSGr^C($n;%@Bn-_/u[Xe#=pd:,QE?[0>$Y##(r'?olhgl-pJBV]%7[g4JQg"/]"$0V -)soFD;2\;[o*hD8C=o!Rn#"QqfMH3jf.?WMCjA95FeR3<;qXmpPnO]+76B-Zb`B%V"TK9>O[hQmIM+MooE+2Kg_S54:Cg(Fu''? -#m8Yc&0>FjYL*3Fm'3n7V6F@%l;1Hq(=N+Hpm"a]cQ&8&t)Wl';LUtM"&8XSUK\X?433dOGrd -rWBtUsh!3r#K,DrlZtkX&s!&@Qg:IQQ.09:,U[jmY#s[g!k[M3K[:kZAoMjV]+o=A-[KSfi4i -4*PI;2U_^iXT1*?;[L3@iI+m.UY6uI=S -+19&kJBDWG!BRmSLQ&:8Ye#MmtDc_Y,OiR"'t`\c&QbU?oh:aU6A.*`):5s.jYSE`/@`p$]@% -,nu-/n>@uWHgo&SLcN6e<$9$812ITj.;nK8_PI_0Eq7R.456#=:!rUm%"7p)S=_@k[e6dde;]1m7TD/gs?5CD/[N@l"%/mniDC<)09WWKfkB -Kg:1P9*.-HB/[^:,h"[SEJR";Ckd)6_d-V)>nI)br3OYh(3.i#[eJe50p'g1VL7tR2(kChgKW+A.PB9o@/VG,AtXKGB\;"sA&H?e6=<`fT;XT`+gE<0V_#/% -Rn,%c*"Xc@!rXAmb$gH41ne$K3Y`Vbje.JVG'P4&U8u@;Zgo.U),7)r\hn<[j7sd!.\]iEc]9-KdLVY2&E,!DVN9=mq']#dbr"D[dNc]\;DX(fA*=']6GLS] -Vi-Tq:qd/K5!PIFthh.d%"9-,+n.rf?+b# -!EoNL#dQhn53e!o;,I%VdZf`u]jlqp)Q']SP3B9#8>kgmCaeimmUMAGo_]/*qP[Qrl8*Ja_R; -Qb@eg[@B)+m<:IT..>7I#:*>UcLXB\IpQ+FSZ=$(MXP+"q"C!Z!7]VMoDTJMEXTh=N%Sc?m0# -^&?G%>?;0J?;^<0W8q&faNT?us>/[4'Q%`+Y1N,]!?N+o\foJLg8\MI$_,lkZP/e+3.B/3r@@CnO;0K2oZ0\RJgA;J9cPG&u50.L9 -aV.MQm9XqDj#b'&lTa;BcKC%IO?1u=&Z$52QI4mFk"8%s$HunFn:)=ZHVhR_E_kNjeR^"d0HC ->e@Rhql`6PI-(\X>7A)h3LNSun^(S)XL,@VpAA^3Eh:Of;HO'Z;JU;*MT9Ft(>(*o-9+4aB+1ae5VO=S0&Qq> -C43])U0JqS_s]E`S^do!X%kK`K,BLjM+Uf4!m00&2$rVd,m$0W(F?1#3[f3Oe36q[#kGPJ6K# -NfX?4OtP04LS1tfW,V=m$8.SJ&EWoXCJ1"Lq@^hdL\@-kGO'j)"fc:2iFf/=kReQ= -K@i4L'"=N'YlX+f[16n''KWhtJ_bNo"5;A:W,gan[;#$NBaG;=o[-">@eD,Ap+cGJ.VJ$Pk:e -o_EC/K]q$]\rY"jO#&;qN4:FpC<31T"[E7Cj"8ki5K#+fDml)5lK1Ln_HJ`,o@Q3]\-2C&'R: -r?9U,4uB9>.aI1](3RtNCA5=",H&^FFa$=BG;>L5UVDA%OrYFN/=d9+k5J-::)Wl`5P-G-MAlP*WWu0^eaff1lV$*-HP&hE,>&V\^^MV'>Go[LWKC< -P5)3S3N5hSIU7kF*@2NU`T`U\G+;7:Yl,I\r0\F"LN7fiqR8ejV?34GBVCE]]S9)VmYoF1aO` -XjuIXs3N?Q,'.oBK'I*KiDE^&6(dZnjm9Ig^G9IbCS.7StbGT*-:),^J7`$]M.M%5]Ur"dM4oUQBU=aLP0f6f[m@eZ?--9@Y>_)3*q&ejO75okoVp -E5:j<'ohZFu1Gb`/OB1U-RNX0bJ!XI -4Q0ad`s@5/"M2a)4s=j5nlF:Qcjt>B>n$F8C>p`TO$D>'gK5jn)$@_3Md@,T?(!DV>82ZE39oVPTi1LN?sTRSRoZa&o]>;JCbL@O2b'=N3K<7WtFddICKA39fK`q6s&QfR#5CYm7gP+^P -YL9UL?pBY"?>#s(-\8LS@NEVb-/FVUT;S==f0>_RWO7@ko?pi6P]#"U`kInd>2-)X,T.3b+S0 -*t7]@ELk\nYGD)N>^5#UHguddl&ZM'VZ1=#^V\=MeJY[7LD@QC.&,NSRMI:bCDeLX$hkY_aK1u(Y;*/[B3'rrQ(mDl>?Qg9"tR89u-7X/3E\H@P:F_VI:WM\ --2YF&G?%DU3q/p-BK)B4=q8i]hQ`)_q"G="KAcL*aLDc'"PnUbm2/"IsL:-C8oH[_W[BWST`W -AS)3CQ),`OJ3j*ehq^YCbuMKhjP?G98`%oY/8Q;rg39;SH83KgXT:`\,sq!*CR>K*(i(Jqt^` -=(N;>N!bHqi8)2cLM,3r:/ki?Qm^&0]l*>Dra;,aC[`D==Ff4d)*R:qn-W[iSaS,tIU?#:CQ5 -o9%TM:hoqSe,L46b\IYsU<,`$3dXi5d9F]$A[-(LGL=fK1<]?%kbP.I&:?LiO7"%5"As-]q]u -l8fq(9HIt^LW;()o=?OIeFNUD%@uK(;Vn5,lVGNe?Ec]J3*Xl`/4KB3)1.UONOXP9%(XSM5]'PB$%s\!siD`C$I+Vob3NEJ?5;3QcYa]C*J&9)PP -?Q84o?2!Ye!,;i$@d@o35l*K+R5Mf^qqr'n$\F@01XSZtkGJ/I?)g#`KIUAO34D-\=jI]]pV^ -i/XSOK)?X5_1#42##YG4)1:$)GDnD81SRn+f8)VWY=COlCU!H1?m_?/TZ1F`V1:%3l&1HT\e> -6'XhtVrkQ-0SP)8"'@8t@/0/T)b3i'20nrpXF'd1je!Xok:Q>)h2d&4\9mGphL51V%hH,kTn> -4[QkuL#nP@Lq=V@O%rL7pF*K1'^8="m:$WS/[9W7IKcKgP3DnCSEfs0Q\W5*D#L0R&)(rb`5j -+5&e(ndI1U&cW=$)OmDqCY4\@Hp-="\&pN?uSPh/U'+b]=e(8iNEd$TV6N.qXNOj+$SP1\-"e -j5I6Qf9ge)jHC>CYI"e,^Sq)Be/MLBG8Z+7[HV9`$mEq:rg:905qu)`XjlL(3lSqMr')]NFhA -KXREcMc/fH%CB\8IO)UUc8$e-D$O<-?f4;*C!%:TbQG%`sOf$p`&]7ld5@0KogBr9&jIa[u!l -cQ=3G^RO&.r:o70iVER'XF5_b0XN(:0SJ;*WiZdf1_ckua4VIC>GYMW?7L?Wo=VQGYu-5hl^- -T\b)%jc3-/RW1'[;/SQq@m>"fK48OQ-n:tsC..Y)ThOA`'hh;I>T_o&)g*o?WUh#6WD+9-N]V -iQ%OrTh?km-IJ@P1TKOT:.2EhtPN50H?g#EtpH&C%o0Jm4Da-[7=^fiI<(TKL.o('p[IRf_[#DmqKLbNO+ -7+Qqq]/^5/LB_::C7LVSc2SA\DG;:n>[(0LW4m5S/N,UcH&sm4Da-[Ds%("dC=Y&+7H14'h]# --aC5rg8EmaOrsJPKr^"/`q&A]FG8sA?949_2MiHF]9c2]NZ36!S(j-F@4[1RI(0'IJ)0MLhVL -DC\=;HuDGG2"IVAZlc@#*ICoTk,6FRV^/g\QuOkjHmfN2==lr;@#:O85H39XP,Jg!kZUHnn)7 -i)uESMEc2PU=tJioQ,55kE$nSkmc@A'DUOGL=7Ga4rcuL@`7-\.AKuR7nkd?TLsG)sO.`F8?f -O'94_ob^1a"$4l@,)=nDQlC^IEETMp]YBSiUa6Qs1\<.C+S`(H.V^j?Vj?R/27WWd1+d2@<^k -aA%>+R'm.3_4,ilij&`glT&lQj0`9mD5W`0@%7N?/$ml"6h:8LNeE6'"P14jNM<5W!U[YuYk; -e#54i:BDP^J<"^)mM%+=kIp@AXV.H7oSd;?\i[AEQB''F*iG%/]%`_/pe9`]M60^?i*IA40]/ -Df(=0'^>QL8j1HCD:#<,TM4#F7,+mVmY5Z:ZfqdW)N]^(/klLtD]Ve -;K)AaWc:,3qCPF;h9p&\J@o6=F9(k]J9sK=\H)$6`+n&QM -KncuV+\s6JPf'G&q2tN@f=h!9%@#HF@D&)gA+J*nGBIHD7]&COl7240\<:NMAXMG3l[!C[?Z' -7K3']'pq+_>m>lEoK:AFkkb@siG5*Q=H/a+1uOp0FqUPf:>u3_UkGX8#NW:Au+Z;T!2orFi'? -7QMQpmZ`d='BZ-3bJfnPM!Rj#G@.i:'4?_X3uZe+BI5u*"m!K8)^tg9M/kU(hAK)&bm-<(q![ -!Oi$JPrd5Q+N$mR2NCPqhFZ.3.qgnbD>JUbU[,SPSnC1LJ5.5XVOH1%l -;".4@qU"e\l1K3:)!cn;K67i6X&BmXKJBu\rA\J^ZH<&*=3a)1.GR)o=I"5_,-Van1f7Gn$TV -@(c2nK/ -?$CZ[)$fnR-]QVD)0LYP#.39`epF7r2+8mW!H`Jebg261GQTs*EMDS*bHn.F*lV$fVR"$d,uj`Thcml]E/u775SMP?sDP&"ll;g3pKJC3bFG)Eh$E4G7rT,_F"lG[ -[Etks7l.fdE)YAN+D0ra.r1cUtbi.2*Bj8FPQtscH9,6Lp?jX8uDr-JTVHBS@eY><$Bjb>iH4 -bM`C\&Tu:.jlu@Kb>iYa5/O56(3+Ls&'A7tmY0g-g8_+K4.6=:$[m5L3=71Q=.9_T;J -4V38TRQo]QmuW`TbJ[D%pr*25o0Uc"<9bAJpu,N/4b!Gqpbh!qp@=6:E`=$[/H/6S3 -ggplAD=W+D=>-5n,9-iGFXIiq'ZT\3]rs]58Z_*FH1a=ZK>R^,L@@t*8hu56X]][>`^iUtHZo -&Yge#CeUpa?n_UG@jVhp#QX>4LaZo9>3ChK@&?HM/J3#tD)`s(9jalGBN4isuicL1M&H$MeJL -E:tJRS5?T.fIC=WgkCueGi2#ipKeP__4\XJ2SQ%Xl>n6QR4-*340]3@3@5sCJ%_oP;jW'j;+D -04.Bmda8.#'M2'#0Nqn(0FFr@%r7X5R6XoN"ocr\e3]IcM:#c">9;b.H)Y]*NFsh,2n>=ZC&( -MJ!KTT;&?'2oHOZFH(<#U$Nq(;kND[qM8+gDM:pPh,Bn0[2;"oc@,"gUpjs7(NC:gqcREst%d -G[_T$!hNj0Vk!bIU=C]=0<%k'5EAo-]jtqp(&-Xs^;bJ/BkjQ>0g?+gq49!$2bCnJm@U7ZT:RTL<)?(juHV9`$mBMWgP<(eJEA:7&4J+(_M(IW_6;M9+fM -I'UMsJ*4`S]j>OCSUHR0XFr0epu@7+oR*k\"P2.u-?_+Vj7;.!%&Qdf$'1/R^]Ja&[ag$-7s; -UiSb)AI)58:9A=]&1PohksO8M(-92iSYTC[_dTuf?M4i)c'7FC.]tS-?k)c=3mchR0feuc-J) -T,VGhhXPueqH=fg&dStI(3ZmLP&#qH)%4JS'Zg"E ->1)6WW62Dhr0-QViF-8#u317'iRdk0\'4]Z9:'\XN+*As28"Eab@k=, -^f`i-/Ug31J$"Im/)1,oSS4pSR1[6("JpLCnV8!h<&7S\7r3'RLjXYVYSlii['Oj1Hag]-c^7H4pJkmsI4f]NF>Cac^XJMCR-CuY'3LT_a2S((5?s^n*=$FX=P/eBah^L -T5(t7"O@'>q/Lc1)UGLO/-mj).0HBdjQajDOSI$=GrM@bX@/EGANUiV3HKV%8a;r;/ac!rW0> -,X2qd9C%TDolX^\RU'r8[hS^]2WprqjJ04*8F@r5V$V,/[HjK^#kE'3J3.5/I.kDWo-=<:"md -.^;3ja/n(WpCp@6LZG\?L@HC0Z+dQ&M4%d")='fq,q4IsXqtsO4&WOta7;kZb-=^/BaRn(?G4 -t(d@52:UuV8'"WOtug%f;BLoDfHb]Tg?5)?&]dch=q-9!::j/>%Rs0hBO5SmOEk$O6m8hegKO -bo6gZnMW+GUi>bP5$eh:c]$if_`3S^>,D*NUGbA`F56I`K[cON*!7D]'&7O2n]gg7MG,\#O#f -ZL4UTF&GS\3@J[Y_=Y!QO?LUYP"TRq`+Q7\R.)&Z[OHa*:b/+N7%Z -_$dH9)8r46(96R:B3QK=r8%"iD`J-g1MHaCAu!30\8KQU5Y-g7DF4jS1M3jlt;U1=F2kFk8dg -n45TkYRE[Z:7:NLWBf)M:I1nA_ftnbo'`6Z0:]9/dM!j&eZLmi:E;\I2+M3aI!f>flH6/`/oqI*me." -j"-e_,!WM'5`hh&/SL5J4Qk/Y;J$?l))uJK4dLu)^PaLVhHuTb+X;"3U(M,>/?3<6]r`M'esD -:VgC3uHJF6LV#^aV-'2Q'UH:Z[-Ea,&@nuZ.e9`utKC-Dp8"_5TB,@8;i!/OM,9I,T/s]RpXm -X]ur]U@R7.utdK3'8YZFAWCo&a_ZjoNggoH9kg3'[1k,uq3V#"^0i`i3*BO2R9IEt\SNX$*N- -#-LV1jM%Kl-Blr9#jK8Vj%+'%+\&;XZo1+>SA,pJ5LI/MLi1$PV3jk!5BO0:UWgE.N<4!=H_6 -U!F[;L+=aI.):-;`Ad4ABdM4gV0@clC?k=;>*]?$L5@Gq:[2^)D%c6;>g3hMVc$,M$477<9/% -L/Q#(lFR&'qRD5&#j_aKHnB2_+KS:O5m<(?DL%8d%@0JUt$h)!,BDV06rtM%5^/q.2Kj8e(I0>Ql`"P&'cl^**tG2.ZATafH#>r[b,(hh4Vs>4+P4sNjVaqs:bGq&:`( -M8Itk08W&O_2a"]`We'\V0XaW@Q*gC;D.,Ee$?6"_S?IK+#X.C]D#J0]Oo.UE[n&)rd]-=jc& -p5Xb`4lk5!U'$/Tuqk1 -Gd>tQ=M@qUh8,4qYFccQGR1g;M.H$XUnd55?T^AGpHN)IQlgBCT)ek(d5%,9X%VmhPAk(d'Rk -qf"HW6Zl2i;*4JW?Vp=!QND[#;F!0$Jh:%UQ^Y92TGYE]Q-:K_X]-18LGVg.8A8FoKfYfLYCD -jJ&rh)KIZPk$CMDu_dq_7SG6e>Eb!7N]e`KVc6kT.di2Rti*8&JjV2Z*c"7uuX@`.'j6W..)U -s0\W)s:_R*q\f;o=`gUYXhe3+n:GnnrM#QI4!R5R9FpLZh(],!Y;i9/iXkFbI3s'1+hCFV)H.de;S##p@nV -esVqo:'W%])fF#Hb59U.T:X[sj"e!!@;iF%I\4N3hFQp_F+G*s%&,#e@X:r^i?I"jfFPEJj"1 -u5dMR8Pj3Le@YlPR2V[$J=,=1FEQYP['<,)Qi!Q!cr$YcK&l'LW4ZNLM:hpSW\)0/kPF6o@+B -oBC8GgCto8),KbrMPS%fej2oY(m%'2DNF-/shk#$HOCfmGdOCW-aCjHja-dm1l(h`6"K:5*P_p -%_Vkf2KBao0L7'REI]G94uFEI,H9W`m`]f@*,*Z)iM7mLdDn[Z)<)IFl9JiKYP0%T!\5Wnn2p -0OH#!(N"JBRCEjOc3S55Qt/-%,2aCBk_9oq0C9tO$:V)Ts=J7EXB=Mi7!;#I?AXB,Rr!P.g=5 -gH=Whir2HX@>YJ,VKbPXL_8CD#P[TrXT&TDgRM0YULRD7mRXfD%Pd([=Yn#ts&2B^j`clq)8r -V&&9<(-K\p#-LA/(r_^0uDb\M;)&YtqMZ5]c1SV@/<;3g]Wko?^KF)BkY*&ZV0ob&C=RJM*.E -.+USrEf+``Y+A6QAI)7P3`33i6@ -#f)e,=[`P1/Ta/r2i+O1T%"&L/]2OS@:]leaTG1hLG8:]D=$Z-Kk_"_H-kpD]1Rr*gEcI*VUm -pi2N%q8?Y+FeIi#kRs36TO737cJ0P=p5A7D0>s,Ot%K]F'#!JaVp(jMB(-855=42jj^VNX -?9_=TR2QDX)A%u8K1(:YKMH^i)3"2BA.#(6P`+["7HR2496*Cjjr(3q]*XqOdAYl@'$Moo.-5 -(RGH!5BNJuZ?@, -h\t3#n]!9fn`oJA7U!CQ,g,s'0;LJBBW#(7_GBu*p*LS0iaq?m[^7N;,3:7n4Y[hYW$n"lI@m -c[W)0@22Xn+ld%g2T7I4.;QS)>Wo>ZR>@^RHH?LE24se3e=,oFhC6Qt*\M8LNQD1u^a6%;8XA -Wmt1j.0&P6S0,LUk@W7UrbQ2ElD0FQ]Bdi6<4?cMTUXZ@fEPUsAE,$qGLrf)e,MRW`jX:+/7/ -XCJl?POZL`XZ/3aAY'eg9ef@P1I!`0/C'b:Xi%Ygi&$]X;WG6MA=?F8>c`,gN/18LjG.ZPN,+ -+/quM\,+hBb/FIK*1=;[q^*HPqiH#57+nb\nnm`hm"Y$(*n) -j>7_M";O0U5+'*_;,r6<3AQ#3goWWZY1g;V(bN>Nl"aH\g@g6klB?oeS=ASI6aP=rM`q42?SX>L@mc((tgS#X[<][$gL"Er6)q[`l -,u5X:#6c8Xe!r&!d0Lr`/.EPH-4)S*/sr*"#MbP2+_2$r%C$UOE[40fSI_I"FRKB6Q(m:(m8= -DQg6p:tNLYCSV\mpu1q%CO#jhhgW5PrfL7/areio>M/!0qM3h[5N*u7s%slt`uA97bE/1b)r* -*p=V`BI^##g]$oKf]MW`@2RiQG#q3FQ9M[0Ml)HP6AuO -9k@Lj/r:amX0ctJ'^$h-/W"oO15lf!3<8P0`3a)K"pUjU)?f8W!(Q:%d;D:Er%rq'>+s]'^/f -Yldq_X7>A"%1=a(!FQQoRmrZK:1gVl)]$D\2(@V;F(F?ke8ruef!`/d+$iO':BYI^bMlnpmmQ -MadmQ]L`HjF]E[9ilC@#0K#]*;HpOD)30r'28"_/KiTG't=Jd\43[Um1W=eS*I%+L-50(?JG' -*mC#Xh5H6D9]M,S]$g],>WQTr&a3!N;3:'<>nA7hfBn=/m4D8K8cthlK'Cc+gJpBBrD6Q*Vp+,[0b!6_CDqjp*?+CYMqGYT\R/&,Z -0Wap@K@t-m:(Wa.PQ[>?o83B/=j(K80!R?r(u7A>^,Ya;$"T"3_I[5nI3;P3h6FfraGQt`m38 -]U[sTb]fO2i:X9u)(R#6.miu,A+5j(-A>H@3b]@q46K=:H3c223J0dRE:Xe:p-W%dG`.pMbL_ -SaYZNZeoI[6W\ao2`qMtH,J]t+,^EU*K2Z3LNa4ZrR9B81]K0us5Z/\:Zh]!M9O*5K!Bi0OgI -0&TR4T?/eW1FQ3]\cOERW%g_0Go0TFGnK0da-$\UmsG$scId[X8#]P:RuVWh"/'q.HH/DS08; -qW9uf6-$A4i&"\ORgYT`Sal"JJ0fDS-.WZ)L8rTic/l(^$8XQ_@sq\bFV4,[7k?/VMQ(Gp)m: -7tkn\`CG%n4BXI"Bs=BG#6@c=DrdGOD4@0_i^GO.:%giU_@inR#W-mV=J?cgOSP<*mJb9inu; -L+B":q1"m*bd+P+7]"[Q\^]E;?QX0d@`4rpt7BHf\"'P&)2o4k>Ai>:8hhTLY)uSIl7B6O%'? -HeR"tK?POA-a##[Lp&V?:k9gR5mP+Ila3YPZEcd=ZqkGB&YVm0(+/4HrV)>s&TNJ'&0/nC/>^ -h<@2W_L2n'j,,Uj5];G']p"?k[*]3drnL_QJ/.9Z1H -"OZB"s@k4/]#qFOAgH9UoIs@r!j00\(BN3,t^tWOL=[`J(2>,NaJO -lVLM#u_Uu0rYkjF!>SgM(j^(`g,j[^=-oCDZ*1Y-tTa/[N9-UCfYK='f.@eo,=Yj-G!(3M.Nn -NA-rpI[sCOZ1(lipmKnEDg?"jJOtq$(ar6(k,VDJsH2qR>)TgY4o2&lipl#+o7riq-h>"?gWb -`qH[k<&B;8G9G]oQ.g>T0'MF-AJ:!Vh@c\aHSh;q2UX&PKOu7q:PiCb/<"`!0h#4bo$33WN_, -OOWi]r/?@0l[I$`ELanQB;'47nj#uL=Aq*LU=3BA4-hV#le2cm6`PoG^J0`d^a@nUf<#3Rp_iKiX)],5I>m+`jR-ee_f$ -/IZ:ba$G$jH)8$=nNoOUHMf^U!(M@8,(k@q/SZ-u#3*:8P.:hl&)GI(&fYU]p9;fUV$@Yj?E; -+t^r?KfrTZ`6S;$X4a=AB:LRZ[,NqR"?/BHhF3=pE)RMG3qeC*S.&FaAsE90X\tp!CWg=NL[! -+(-rg?%t-F.Ep(sAnXnMhI7=p.WkJJXe!GP/0X.4(9<\OAG_G8U6biTo\;fF]ak\5fP%\K:mKV*j%Li?fMC\:jj0b_)%+9/\4 -PgjA;dG*N0iQl2oVDK0d;M%]`AdQfb!1k!bb35Q,CjQe>j/fm=#NS[9$m6"bsOG//,JI#k9e9 -;_lbEL`Rkhs>Q8fCuPC)"qeh9"`Mp;1/d6jai$5lh/8a[XrE>IV),1cuOI4#-0)")#.X$69>k -_#P^Q;qk,`l:[@p2OO3TM[:lHF:8mNd+,7k%DMZKp"[;h?=.iiYZ*_'nmt^,pF<=>e9ngJMVU -IiXh!V!:SWF-H^u`@crb[OL/q&-DnE<$eHeTJAB.bQ[DqkRdRWR^18gdTR@EiSk$QG7cZ[8E` -SCg3&)eFOTN)jCfF"b=)^`MbcO]jrW$<4o3<-I!iE*u(o]lhf/nbcI6Ms=lM!Lp(8 -$3Hq0B0q#IkA;U_@KN^s]hiLCsXV5WV%oY.,:(VU>d7d)u]:(c"H -goDpX\0KjdSl5Yg>&u0MiRHk+AIg[81&o-M#j[(S3h7%'q@hd*O9g0?#r)[0l,$7/qS#TJ%k`88*.!N*q\STm8&2GpY!LmcmGTP@OKaI:`& -?_]!n=oI/pqeaE6=Q#:1If(7N=L>9&9KHO!H01c?HdFD8F^Qqt9oLlV(5csOS -o#aS3)+GbW+kCGJ+:FEtqs2/+Y,ZFF>#Uo8>"Hn'!87quaFc"Q0r3nZ;l]9 -6f?nG@lbf&!4W`Uj:PMPhKZdfAk,;o"@4@SQPVMM?d]q4o+BBN(@i">IKD:[kGm+ed22gPm"h -e9O+o6/U]uYdWA'lXKaEi;49"o1R_)/<'5Y)h#Q!^J)DuKu<#gHN9DD4@*2*-6;K+EB((?W -n'1h@J3&2:?'m7f"V.=EX^Fm*K2%'ZTkU8t5#WumkI0`D.:;XiXlII))QFTMlt?(AosqX*$7+ -*nk_2i`J4T`V?pS7DC11ao'^ahIrnl4sL:C?*+*%k+7AK,Z(8ruI'L/kP^;3aH0)!V-SD^&4L/*USO6s<,6Wu>lBg+%0&!`i(tj8V2A.`Zfpnm -%mq3KR%M2a)D_BZ1s6WB17]B$th6hLBn.lZL*Dk7jcAV'!?o[<0!-pC="JgYP#RDC]/,aP -u)0)rP`ng.e:q],G@TRcS/5!6ukE*?"$r>oR056jgZ[X5TATsFi(iSl\"n'109#^X^/-gH]=^ -MO1m_352P`=HYVbPq/TNp:#"(SD'Iq`4ER*INHW'0(1(GN@D0j#:WT7)A]"="((66@S$I&p8J -[-8(86F?:-2pb'Dj*lS#c2o3oKNP&#d4./<]Da\GV?K]Z^kp&He:KXTR8':Q[RP".Rrb!qQh> -rW(5ghcb"ML$!n9Y,^IlD]H*tOpfBr,gIhKhFD,"j"+q&\b\T"q4irH"X]q/:g>kIogIZ9L@;!98BD0CMZU*fTDao^NRYUa -TOmI_>)ZVHQT6Wpf;?gt<:.8LGD?5[-f7Cfl3/`oL7SP,_`\o,OjO"Vc!TIpCU,e=4;k(Q0)! -*=Pm1^n*@mK3dDfU1-n*7q_>J_0jO?(Q@:)I9bP7%uC+oZke.c%dfqDVaVVp=el1BD/[O"3XM -\43]*WGG'.,i&uY?9rmtNVYJ:&QoQp-D9+I+^rei6ZO)!7qHrk*D\U%ClgrlsgYhP@'Vc.;?[ -k*O*Qqi:HgtX@g$dVl*sfhE,#8AF50)8;,r*4e/8W]t!G]@61ed6g98&/.- -0,riNLti]mAfFF>o.(Q5;jK#gu)YuQ6_S#\CuZBF94Vs+P)9bo*JE\'oY[E$dm10&pBq^A!`? -n*'^BBT(39;_lbZ#kjKWk$7/rp/P+^QEW4V"IJLQ0i8a"\7a4[[g?k!?/+>V?-Q?+c?nX\k#b -A9'YlM5(Z@S@1G[EkZ,3ESj'Ab:HMBj%+@BdF2]'8k_\Q_U"\?9VGhguQ;7&X@qQR)\G^@gKN --N!gCG\9:\n,gBV=-a'Ga2^JZ<"Zo&$4t>2)7*odInULoN#7]d6@Mp1PkFCgQYMMNfC7If*g&uJTS1n8*mNl@71d)\FQ9:( -6VP`[AtrY2d036m"F1B-D!Q,IC5bp:DF:\j]5acp:n;VRbsh@c\aHShN3\i72]8fV2)8m(*%G -NE::BC_tnC\fgqZ-9pnT0or1DBJa=M>_O#h_aQJ[i`S'C!OZ=<.@fig>3I>;gU@fm,/aoU;=t -U>K814A`DdH7R>nl9h\Zi>e>,*>".&r_5&ic_T]m8$.EBDWAn)7IUXgDjP*b`n^6UCVdm]@:O --/$VGl>:PU\2\7&HGa!lETLCc8gL?\[+nQ]$hA(+7c8cBLQCC7/l&+XVJ8X_pA+[XX7al,fcm -Gj5L&NpN"<0I`?uK-eNS60JHcBUcQ5&qtJkEK'!gbV8Si*MjB;;MS.q@1n,:_8(0F92Q<`WKT -)7l4im8NEmoE]ZM^h(DX-TrVWIb@`kI#aE0830?OPHaJZEY9'0f7<=!6hOXm`.SB6:E9A, -Wob-G($"t1(!!fqrI`<52'ZW8R0CUMjTElu%$?uiY(_&Qr\gd8g8WcqkcIs^ -GknLP=,tt4,1tbuTdZpPl;HaH+XsK9q(t4O62\G02<,A'm(c\V'7k8*e:4FBj5]-Q6nMh+Y%! -3KHMiaH.h[IIBd(qT7^=9G`4XP;`:15j?kZZJ-esdTK7GQQ:0qD9S*g_bYKYjN/Ps%FnI"^!ra*Z7*2(c*ar<66KA>b/Pg+X\!NWPF]P(ni^<.pOS!/8[987)aJ,7.3Ru]M[/l1 -BAJZl,I5O9cq+>KT*$U4-:#u_Bg['e'K$ -_@kI$#%7(o;ioj\(N'L.08ZD8kgNV'h@6mhQEPfjHr5_6HR&"8V -+HOVBME8>K[[333^ns2..4]0`,!"feAG@MC++'B%r2amH;tH-`'Y:U!pK!fU_U'^m06lnt53> -UQaG#eF'p.B=k>LYA(:N,`A-aMLmu^:N3gIA%!V+a4cuP[.?!ZFZOH8Va[\MSNA6"9!F$O,bM -6aOZ<%$_]a+,X'J"?UT_rU]mJuhd[/\$C-InZTp*4D7+.OFp$GRc]f]IZI8O*4-]u-"AMjNk' -OJpt24XTj$=r$$m&7"61-26_3W_?*q$A#c2G0k^Dp'%[AUES'KNL" -#^(<,sP9u")/JN?%W^8(14qQ3-7AID8>1RXZCdY+0a8#upSW4I)7X!ptnlGNb>YD$BBrSN6h2 -L]dC"`l?,c9%1@"[9,/CV1+jJ.4hIp4/Qh/j6sK(8gboCd7KR)[H6'rSSIXR3oR\" -UUeSbdO`kH?0K\%YUF$,md_H,Qq`n=q:a-4qC'[CQ`3ZX-qg#_EC3!s -n3GdQmD2Gnl-WV!7?=pLL+?l2g]0L`-AH&TIb;,XB7^?k;Z!=Gt:?Ag_oYsS&? -!nJ>h$Q2+3g+>QjA)]US[*6JbHNRq;[moI4"XO_W@Xa'JPM5(f"mbL42C8RG3e/ST%<=?A,gS -%9i2cVj=/q8$BXLOK:Q,`7HLIa(&p&ZBKCtre*1jrn0R&`d]"j-+OfQ_"]#.TSTY:9'@UZNi& -J?WB?,+o!QWm$4ZfN>%6-&A/XT9j?ok\!e#YN>lF=K0lNFP6sLd`MD -ehj/D:,5]Cs6EHn[.0*eCd]*2u0qJ#h24`Q(FNSI)XO&C:dN+3?2.ssOg'9P#:D]bgm1]0_WP*mSTn\Q4f2-eelfs\qkLGsr6*#. -3f,03Mh8i>B=5J(O;r)6V52u'Rg3Ae6feK$uU8?\FW3qH0Jm(4s2\EJ -?Z-,T46q-P!kjrDu;jP((\IG+P(EmOZeXdf1BdJeb.P>c)-6@H6r,qGi=<]gBe#>@QN%I?Zb!n -31Dni@kjNhYTGo_*TCqL(sa2Q$1H7(_0?7tkmN.6BSc#gi%3)[["0ArqC7d^XVfe;[;0BcP=Y_D6 -X*e5a,eZ=?#%q)q7&TDk8i:7b'4+=dV5,58d,O??u3jGolQphX?/-TU=MUVZTI]uNj0&GhheU -*0V'%B"Oi446SP&J3s=#hYsU49(cqlLM6TE%SJXEke*5&qA#=V=%``\fU@GdBM@7=e2$@ALI; -/I->.Y8XXuOC"M`[W]YDhY",GrqmEWe+g%);.^:6*R\[p(olSafZ]s-+HeM4N!b-ZdB(<)4lP -DhTuV[F5f^;JGjO.3gmaA6R#=.200/&G_m3?,%lLO\$]j7'GU(=)b(HE"GOiZ4,eL5>_gsj1rO/e^D5M`?.'5:U]=cAUZWItR+Y!^3V>Y2TVLW]n6Bm -O0U/TXdD;3_Y,3d(DlR^kR<>Tdc*(UfORI['jBjS;dGaFcMIC?^cFmJ%Mr#oh#-3mt.os*q.kH;%Gh5Qq8U,o -T\$:_POl!;T#kLa#[/s^gHo%=_>*G:f>f+`PGcfJJ.R+I=PVe,DhZXX>hMJK@Nh'9]'d:!3LQ -E04KIM8!s#.q0uMt2I,ZFg#o*4]'sB@lsD=P_Yqo]"tY3b=b`_2d_)Wf)%CQ]IY341ie9`!TL -L<:o23=uqN%I\`1[G)%Yglu[Q6BV[`OjAr^CGR?M!'25=[UMtpTMJU",f.>D=:fK8>_/s-I[= -q_tq?>?IFc/b4q0PE>.hp/[QqhLPPN*Y5jmN@)YAgh;d>Oh7@h%'0PHdJ/S[RC7j6Tg!l*UDC -ELbiW0V,Ye0K'WH7/70YUV1]3R&e#E@QHBBPA%0Hdu!=RqD=Ib4Y#;5fu?>mf3'euQqhf_/tG -?Y:=*Q7&pE;HAU_s5Irrh[#\Ru1f_\]G3h-$neUA/)_DF9Y3m%6+EL^pm%qBA?1T;NNVm+?nIq,me`i:>ENDm9f2:Pk_)_X$])o -qaR88VO8C`H^W?9CEaY-<+$(.>ZOfY%pj9M8XJ:t]QJ_7W?KC?M4n,',7(5.hchS7-)4e)!'q -*rrG"8-Y:=\YE3Aol2d>UgHh+8Sbmnm"\?u#2B$f;r(#EJuQ%O3Ndf`#93#^:?Cdm4e/:d -VU!Kd;_/,jpHqr3f!o]7._ft7a#&'NT24T$q_M=KrJFCOSJ9IIgi_/s/Q&1'@l -(lq"7:6-6$1Dkp8b=;bh_-er6$jM@#@-e)Q[T>.h'Fnu_@([m-=unDU$jM@#?n`E+#(sa"0YV -5eg\`A-]bf5U-9CO^Y*I2np7?DR)mJMSWPjF1HdB=;%=%-(cgC,.]a]5NQd>'d[_3,pl'K``m -C'\;30qb6(BqqS=a;a&"6?Re]MDZ6$s2E&8/le\%YimO)D-Y%c6%H*6[H%gq0N3WE`P?f5sWs2goN>7;UcHi/a5h -<""h8(M,X-(Tt?la/J"k\71Ab3!XrG9W)'Mgq230Vk**J@_"&<1jorTpHA<3I>2hV\_#P841K -[#HPZkIS!FDD',iqRfqij>+nC5!O!D7gNGOYiYGQYg$:gkksG/_\s0#",/tRem(!GDgIB -r1mh)V$ZI2,DPduN,q\TdQhFK01LPW!:)h?Id^-W+COg!naIGe?i.T#eU'IF>*2;d9(K\@i@( -7QQf("`*L^9eLpj9r,:MBQ2G0]A;3`s)IGf>"[[@`Q5L:p51ac@2hAbaR2o-GPNG2=`l6P)i+ -^EHE5fViqSRLD[/7HHQ-p;3mi_qWh6W4'K7^7Ys_nnVA>+;m8_NmptK'2;r>nKBl=(`H26S_M -.KD:?GD%>BlOlGc*j2![`@:jqO[P45"0f;E7i@[$R2jWd)g*cXV!Ep(0]?o@-44EU`Z -[i6[gOldttNM7e7)e.Jm,B@l/<>@68dhp6_[[fM98SOD>qDElZfY[%.:>Bb6BNk`j3m/mT3DZ -c#U:>(Q(h*=p]pZ$@n(<>=pqO[P45"U)?E*-+&D\G]26.WU-2p_XY;I4#Qf`(YM?/JT< -c_kGp".o>MQOgjsp;D^Y#CjB[Vd2S>pIhEqj$2Yu*G'R:n=2/HAr^K$m58ir48@iI3cTMm\@i ->rl'K``mC'\;E;!O?8oT,1WkAiQqZaP(U=s*2(^pV$_-er6$jM@#=T8?7-i"\~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 590 574 -%%EOF diff --git a/doc/users_guide/figures/gimp-print-gui.eps b/doc/users_guide/figures/gimp-print-gui.eps deleted file mode 100644 index 599c3eb..0000000 --- a/doc/users_guide/figures/gimp-print-gui.eps +++ /dev/null @@ -1,851 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-gui.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 590 574 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 590 574 -userdict begin -%%BeginData: -DisplayImage -0 0 -591 575 -12.000000 -591 575 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPu]lW4)ZKPM3l1,Q+B=`q;OcgmNrX3MCN:S6^]#OXUkJi>i-Xu+$cIr4_D2a")Vq;3E*I -#NVer*WB'6fB>]lia_G/q.HJWAD@G2p0[J!jG>5QN9^JH/9L.OFTe?\OQ5ZEgbkX0Ts,'e<=d -=Ku>SMA7XBXB>;H`9C6]IgI1&l_`T]2UgZ_8,=3C*#(G/qQoZQJ)lgd -Z9HsuY6MMeAZEe1[cMj9W]e)+;p=3BT^`_GtM50<7/VoJ9?E;C"&jL19G=1je^_68Eo001,1[RuEcbFip]S)L -:2CU92E9Us.$If%N9P(k-S2,5JR!Ol&=S>X3dVh]0oh2K)a#;]oM:7beWQbuW_r;-[1%fl-S6 -iiFEKZSK'+Ngr-*Qm-g0:\spO!3\-St9>b%QA?X6d^3gQ$,!a5YUJQuQT3\"\l*jBe8nf=,1C -:RR4Vb9+2m.?'SjU+$p[IA?JB"hsu10.;rN$O#1hW,`1[VZVb&G*7?oS$jGruUES8srf+f30%J)2c -CRhCN=I_F;,Bj0T4&WZ::6cGC:7[9%-tr39^3HnB[nj_eJ_`(G+$jR`UbgZs[m)PLMUQ:cdlA>?1`'rcS:3jMg-c ->FbDP[5bGa,@?\T\*sg/lkY:@bT5dhZJjL&.-F4'J`G<4n -Wb0h6^R*):VKFLi6cI:]6uau5<.+]cs*Aa#&hQ5;Le$ThEPRKbebS-0cHVgW,8S4r7L>85i>2 -G-%k'a*]RE.Z7LB5DSA=*DT?Z!@W?-4(+4aaE7uo4TXq#7LMAR*a3B[;0;ra&U$-NI?aa]B\I$I:>J> -0Tj&qmCl8[lY]$qL+3>3pOA#=II*P_BB(KoI.7FA!7lSAg=qV^KuT%0IAEP'YGZ*XFdQ.E:cGiVJ.QW]hR:3OFP[XJBTp#FQY -fh.c:D'@A20H?TcS5)Rt_hlppYHsd7a33@Cr<"RR(+X,iB(^e]%61W@[heF;l#7CcP&52JRA% -Tcrs9MZe%W)WPB,coXktQ\Ms3_iT4D!hUUc^`LUV`1K?-W2`S%Ll@%CDi%!'KMZ"'EA>-U%)j -FhM^a$,(I@W=0E$0--e@W=/Z`Moh=S.&kHC+9uHK63+%TlO$@?'`IO.%TC?R*/lm0$E6bPV3+ -dnRrG9QGpro(8kbU=e(F[EGAO?`Q9MDVe0LCS;_JjSB?-3bd>9rW=S*k@&Bu4lZR,E:/R=raX -@D5M<-Bnq:"VGenqEm"Z'Ef@r$7)<)-;V`Q9N`a,*!Y=;$q!5Wko^,8M#0%&jd!X'hg*@-%BS -r(HX%MR"d.7QGR%-f2.D9HG]S`YFDhYW6RLqGf5uTdQZ@th/5AYpZmhT%`A'_bYh3 -?qe;*Tp0On8Y?.j\g'P1F;N,n]Z*QoNN1ZDAMfN863^Oc=aVi=I_u2]@3 -%qn)Ks.hU+(U -jl)B&9#q%'F;6NYt-J.Egk^"`!8_^Lp.H=AkCAr'-:@dCIAoZO32H4in]o!?^N3n0]-9'8VXL -rNV-`46ZbLI,5-/>#"FU]'dhJo@rX)D`R><5NO=_;[-?ZsK3R-dc':+Roh%J[BPTgE4DgV>[]:Co>_A/t:jIi5?%'Xi4.`p]"Z<3VH-bIimQ+gCk/5 -?tY>QCC(WIs)J"'k;NDm31m.=UadpkKe6nr).-CasX^7:Ii"&VVQ#q -9F`c;k>Da(TI-?GMjddF6)?)SlfZ#E;A%..k:i!9/>T?k@.N&ddtsi!RnSkVO^+_,A( -#^@T!bib)!];=&V3+8W.02LUN"Vre/!LD)gBH?=&)e-2iaU''#geYm?7$X;mfl)Of#Fi.Y&*f_PS=ILq2h@Br\/,2/5P\ZX/\kq-c-36Mnrm0JcJh0l(^( -#B.V]El(hHMPJ6g[DQ#QfM8k4`Ndi_,L4+R!A*H6nhdhBKT1W1POi$p^^dC$MA)>*JOMd^HY= -d(4m)X><3qG!!ZA3^?R"ngm?I+Wi8R3$3Eo']bEK$XJ5W?=X:A<$i4ZuLbrMJa,0&#]m@UVbLS5iWp ->R;oPLTfags*/Nt^!'cDm^R3DRVrm(bdhP6pNRe/_f26cKA!\C.n,H7>.<2guqcK&9j[r:p17 -<(.+K\'u--'SZY$#P=^r(*b/-NPFt.Q_#T2NhXJFARb^`=no-W%uW@LXSXY4R/qX=2C -TQ7?s6d*hHWYnq9/I-;:+&[)`*fC7J7AD=(`]d`#XE3G)iX6u^QUnBVUUf1";OO"WW6(Ku?)G -c7a]f8,a(q*t-6VH"4C+/h;I^)%h?ibEh5,*JuN3`I(hV=MQ*o(Z(e(V1i]\>tpdc:[V2HB`\ -d=+8UKZ>FT]4QTqYcqaD9e5)f`i^^GJ;BCZE-&`,-(nMg4fLS,,+sFs%50k=SHLe>$P9>i%5W -hA.V'91:A5OeXg"Dg^TNSG2bKX -<.g8o-hKbZn3'#.I4t6+!8d6un%hol!WQOPGRIo[&AQ"]@P.#+97:(*M9YMp51#HhmK:(Gl6m -f-$?>gUPK0=:6touB-m(>M6OR\YcJ4eEJb>;alG_Ice=g!dBIZ7@XD3CVDEDDWLD.&]5Rg+_O -mAUp%u3rq%u*"bjq1to5/j.[4?>\3]ojplI/XH0QdISQN?VI:-[[qk/XE#p;>c8@ULcbrN0ZS -W"\COT-Hd96IZ!sl4Qj -*OrA(Il8;Grore3h%Na<5S46QGd)F/[p1nN<-\Q'$ej#O$iE[nX9EFL^^V'b.g9+'A"J_N\4JaDA,&L1CE>ocC0RRDc`UMomX -3Y=$J9UKX8D81KaGnQp[92AL6Ll?47g+Y(WtA2HHZl53=FB8$]BP70k)7S)@P,l[gCYbhoJ-u -+A*,dn1GK^cX\3Z%2P\IL(5kt!u*&unK]*Da`s>-*Bo6Z6;"[b8!VohA8gjG%eDjbSC#GIm5E -Q$gBfk1L;O>ge:0lF(9!f1-:u<'N4_*G"O"2$dOLCE-MRL!DYr<'qn8.;3a-E;QBK -IiNngY/EDs_+tC5oU:P6I<[6>JQ4DGp`"F*A;;HN9mXgHU`XN`1f<@=A)ljdMK?RA>HQKUu!S -c='$'2%B_]MXHWIG\RGnY+@duVUN:8SZLBZ)jVf[t%#L.^HDsGq@H37EluE -$W9p1#Rr10Y:>5U_ghn\QLBFee=/s1TWRSS4D_>*[WQ(@Z2Z6](g6I^dHh-qp0X'D2I&u"T`9XO4V`CE4\$``Wjg$]Uu;:9mqmDO?6G/"m]Zu+Z;2 -hu6L_"R:nprI^HpO>Dt!_R-`#K&`4dW6c6+R5Lcel^@<8nG'+#Zd)C/Z@5Fk/IOm['`gF.ZUM -k1@H7:_@qi+Bi:(>b0(%*^_H6+0(pCX00hT^8(kK"Nd`2?#=1$]]^pm,G9g.oaf&diEJL!qX#'I-A+8lAiKm&,R8i!H:kq -A`F'`geDd:>R)B76I/MkTkREW6ip?c0sFW8u/(n;&E8CL4]]J>"uF*,tb+ajGpMLREDrZGnd2 -<,SEsE4skXp`?KQgPdSu`REoaS:?%\8.=Uu03Pa3Of]/oiOsPFQ;p%Nqa#']=8l!3DZp?1Y0( -Bag)P[ec/:CrS3H].=8Bd%u?*r'a"_Eb/sAi83ujqO\NZgrtm%/^dV8@?; -s572D0t%u$;ifM6NNf=*`1/l"/rJ9,g30_EVbimQ5euq8r^l&PptO^NbelVAtJK`_5@j8Qm*UDZu)]WNg!-s8U9Y -+BBXU:.e$;rN.j!H[Wq#VZ[!N&:)"H)LZ0%t/oE>(-6H:dFqbO3ZZoM;-4r;!QP\Z)G@P)Rjs -2M+7%)uU8Y.n^&U/`mp#;RElk54TA"6_lcY`n]A3$LAGQ!;Pi2\#7VdWoXTi+HkG9fpKUkUtA -JO=\hA7G4V/E40nmW*a%^[N\::+EI%>B^ci@U1gJ,9G*AV-5TRd#Gfh'GgsrcD6MPpGnj90#pl -%Z(5"Y4o`OE#KVOlf&.h@hUX'MCBLKck-Hl(PUPq;_0-`A_9hcUnO+%!rGZ0GP?fE(!i7%IMI -^!Q%Y;c7+lcdGnM@)UcM0:+I1^s#5McQ_LYluf_pL&X!g+IXsHSk!sht?P(/ -TCjEShHgdX3Hi"4(""G7ppBQRNf?n]0%r31B2=P\^0YshVf8epGW^`.Sj(J`-M:t>5be1gOVfjG`CB^WEk-J9I;j,._2]WB_e&dRc/CCdL>m-OHi/2\Y.`+g -o.VX)MWk=%LW8UX3^cGn!k;l=*iAjK$jcnm6THIoY9AAgmeg2[H7a*#N_B=Wr>hkghF.ROj5, -Z89RDt+=cF\a.Bg&NUeFJ97/`O/;I!0+l$8]d'IK*Se8`X2\CGDn2CG;9#H,#mZSUV%LmlTuh;F4nk9`J;mGY;e:^P1J=H&Hk2uigX>O(,9R#g&[M -Tgk-Ms6F&M;0o7O@g0V,)T0:H%#[)bbBMc -H9oI=4C1H/&Q4O\cK8L0rrmd=7`5q7o(&15h0UHsio&otHjs:6WfcM>-\pf^uehp"eMc>VrKh -%iL;nLC,Ed]stQh;g:VIL%G+q?;J'c] -@CH-GqT3XWY+SQuGLVoV?^^kb@4XXKnPfK9alYh1>)Ok5MRlcOQ*(ODM-_jmB<,%;>C9EI$;j -d>CJed;XVXNBQ8N_oa-1?;MpMYM%o;AMdGn2cIs/3Uq4ZrE*+$T\mVl0EaTRrG`Qks55nW-L1 -GnRXNrL2%#>`jUX:YR[bU]ViTB8]:OdZ$# -7I[6Q_0lKo^SjVNt6cis"ckYWaY+=:NR6O`j]('M%1@^g(Hm`,OH0l*T4//qY9])pB1b[f\eRp!$2p$=I`edSQr]5PXL*l01u>:EP<5+9),'TDj0:a.FFPns?8HYd-?SK=iP?r_.L?pqDeqK -CKdYRi>KCtU&_c30XkY2W -%`Fs/"W1j"=J\B&P%Jo-T4ukCSrkm3'St8,4D)Zk+5Q15@TC0IBqVtB@'suG<5`t=#'AfbQQO -lh -!W6FRbd/e*hbik`;]*%0G*QLZF@%]=sDF;"4G7)>6Oq9^@9m\B)`=*9ql/kVPt9DNVV2'DZk6 -dMZULG=h%lh<-L`Q,6/4A=pjT?.Z>3h&l)"^a;ckY(:WJ`ZM]C+!h)qDdmdmmVIds0SOU4$3* -6Ee*uP;DA/`jG)N!E&iHhlRT0Ke.Nu\_DBh>[mCi";1s'2p"cGW,T/mu),G9dH0P[4N"jZtZ_ -.=U(,Sdj(o15f#qp9DZ,dOA`f>N\M.1*@Bd]p%_2cS*]oL-WC-t0,>6V-o>4d(*3$jFPM??UT -KB[=nLs,r0S.g@L321lYCJS?'7a[$`E?[bo(FmDPOe[m`H!meRp(f,B'3QNeFY3p/(Ci&;Dba -;j(Wn6L!DNIr+"*e7Rn"QHe?\,n.GIU)Y&%m2Mg3I5LC\g[:;^Mu9:3F,Fe1Z5OidRH7@6'tL -gDjV:)4<^M9In=T*fBcVeZkU,pF7ooT]hu.>FXbfa&cjfTA>6n0@hs^>lK]UF@g!QQ\&BJ)(: -,=P4fYA-!(A\2OQ`1q5hA5p"D_+%B+$.8A5)O!E(1fYNV4DsSY0r($+jqa3EA&Y@$P=E#6jo+ -.uK@s1e5`L2dJ!KB[P]+P@2`P!$29dV-hpfQ0DrWO-:j&sV)GTP,+FujKpl(k.Vq/q4OcqYF;) -%6_*;a:q2M:<02SS0S;e@WNA\&Cms4oSYE*kCM@]2dW@T8b72AK8O]:FR1_7j,^3<`L33(jdX -T7pA:"WN1cg-U50Z=5da>OrkcV;b%p\_bf,o -@"k&jAe2qjiOdK!-p%Y`-S!2#[S*(D6$MO-(LM]u(D\75P(b1kLT>Nni,)@9)FG\r15;$\Dm7 -,JRe0N@9[3k5%o*qOVdC`2K1k4/#_s(4u&Zk97OuaXQ7lCias2*$d7rE[9$V$2a/OE]OLJh-Q -\PM)so;-QYM)r^S9R#*c]j![KoKnD1g^r"TXi`Y7`?Pq"=?$n7IiaL`9# -S)#ll3"!V,4_GR@Q1q'*U(Jl@i)ti^_8$S@CSAP:2\Qe7"N=V'qD(?_G$8EIr[E7T(VtFkDgp -;R'&LpdlEStBI#S9!,ADKH\'-Qin/JL*LK0rPIe[Ae;MuY"7;>3Ya5fb+]2R5LlP^[\q74TYt -du_BJdUu?#IK%nl.HZVY-< -#lDXS1M`]m'LUt9#)].u_0g8kmL-u9@krV!7.@q+M%0O!$U8c`a3cC"gk3b/N4'"m6IKR5)JU -W3mKAj)D$X.tG@6>ao=,%&Ga*@e55.rol8m6d)9+dtip53/JWFr8Sn/es]$cl[K3K[+*g@RZ/ -oaiE-BKu-\hMdGR!o])$ZJ400'`'DL5P!o[,noc<],?\H-T_D)BG`E -0P[`a"J*.gF7\1ZBua3F86>C_9DC8'M7'.,<=nEnVpO$TTD?iclNr[+"IHd(lCF4,oF^`tdJe -[uM>mY//5MB6RN=Fd-O:*/gJ\P2piD=('j[.WS:uqB"e8@06p:G\:b;\\uP2/\*!:Ua(V@G/X -9pajXG'n5mbhVr]b*1(-QJ-&78ssfjY[oi(/miWYS3"s%6d6fQ%mV^@Vq:!pr^2fJ:)tD's%DV9mVN6S0-$D\I6op$MK_? -`RU@s^f5>hkM7cro7?NH`8Wn'[@0'hRB:4b;W-AGuBIo_731c2X:/K]!?[ET,8G%pI5DI=`LF -p>LV68]^A]N;9cA3o5>[`u`CT>K/>&^[fP;B&_Z22=Ii7(buSKi0t0ai4a)\:;CiFS/*C+NsB -:m,iR)Tn"3I7<1%N+fpcBVL2K*AI5I2nep^PNat(_='80-`6q6II^4nTEXm'E59Rp(2sYO@La -cXrTL!-.K7+sVR1i]W1CBAXink%WQL_(nT1k$1bD^%67=KL[!(^kc`ZbpHgk9Ij*YA4cq\*8I -N!"^4]-rOR\t;.r`VV:/0^``O81U5Q1#k\f7]AI6)#&f5T>`pil5Hu]1=b';a,U]7up!UkDm> -YUU51a;$/m_i,&G@T'`n%DOlV/*N)N$?&=nG)P(A?GRU*'bHmClr\WcrVrcRoC="UgjosA1)( -WC"-n[5J?*;.c%&^?91+t.@$ud4(V_7T-eEG/MSS3t?77utC_AH'o7D:;&KM%#Z`OD -YUmQ4PKSUQ7!32d[N+;H+J-JD3Og)((lm)!o@pd]G%,#/`0gl%kJ^M4:WD0"t-3,+7dAY.]bS -Ed]Nd'clNH$1[u)t_'"(1TQZ@gIijSLNAm!\)O`oWb>+99ikIGLES2E*R4Zlb5)T,:.YDMMi' -HE";O^#1-dK0a7=>EZ;I)Bl.`..lZCDD9=FlQK9;]&:gkr`? -GGAe;]E%Mb>l4Kn@W5:%DVX6LP2eb,0QGWq)VIk]N330M",*O:5b!2!kh232rl1GRQQgBu2QI/IE/_O&mL[SE),l# -9Jes=4*E7:GI$dLIk0;VUUi_&(%8mL)`)50$#nh.fdN_!#h1=hbb-5GWs\s0$pp$)V3-PZSD< -o?"sHWR4O>BZ8cudPFDIYSmS3=Sst_7fN13ZW[gJ#C31-J:i\PF,mkJI1cmO/YmZ,FpPl(),/ -4,t#)S*!h1gZ+,<^?muMF0*jMOKGn9GXLO:_Jne!f)Y[d_crdD]hB%PY8D3ai'ZD-Q`(CVc3 -'\JuVDB!J/?#Gam+-_/lXAU/IRg".h&=S`>q?N=]N0Q\t%B0E<(UL,emeU5J**9@ZEJWk6M)H -?&Pub,@\[;'X=5WY[K2"n1^)DDBPBjJNdo47IZ3mY- -rrbaY%cHh4/1r`M>kSs[NH(p@4.5Q<^OrWT3W=E/nGc(D?Ee,%\XET[Ef2.JPQDu*2(Li:Wg$ -A&0Ke.UAGu5WZgs&)GKf![ZN/Tj2Qn`@=7q_G[3mY.MaBD1=#aU;Q"\=)1mGoO&:^<]XZs>)f -Z:N*.+B+%o0tuEe+8d>)7tR%J(/Q'VU[375.M1.*R[+A3`akW=d'#BcKW?WCiM9p:SU`Kq!cd -KoEAb7M=.X5;<--`=oXVmT?L`i8+eFX**,JuP\\cB@EL0#*Yqm/:TYNr24XN9d6m>oidCGX,i -/0PY;AjpYEDI^rUeha2V1t(43XgXF_Q1N'jjaKrPjqKn(E.H6.?6FsCaZ=K`*e=rGUJgE,Sm< -?ZMf;90)j2oiUU7+39Z"3M(NEu3G;"#ViW_;16dCIir$:<3eNt'0eUHP_e-XjM9G(cPH!TB^/ -Qko`YJ&9^qd9C%TDon/^\Z4Tq8`O0J,c-jrV(g?GGp>tq2^#a -S#L1mB32/3>/prA.urNJL44/2c3-q=GLk!QA9p):Rb>eR\$6TUh-;R1i]Q(+V7)8CW*U_ciK*]YuEG7;dcN6T1\JQX9/eoE`$(hUTE>5Yj_8'^qictFq=.Ki6NgQMo4 -*.Ohn4MAeHG@&1,IL.?mmt:)! -'=8Hl@$:<@Q^6Ag#!9r=\.1MF2djTCqp;9`EI*=,fhT0.A9$lscOQO^9RUl/n-Q!l`V -D8[4#mUjc+9Vq(3.'M),OeNkG[m$M^_r=YITuk%dHGI3_<'dkq/UIB^-[JNDHFQ]:E,delgjE';Y@0c\=%?Gp@pa@SfP9);Aog%*i60GNI- -+JVRVQF`">aLJFOuIWt]'"3JeU!M2MDNI=NN=bYAD,cVY.jOW#`4FgrOAgmKn*%)W?O;JpcC' -[u*]dFAua:GWL7C'*-sJ)e'qRL^FfaeO."BspatGA9Inr]"aG\.jp*Tr#DD7D9d(&5HNmfc`p -hj7+fA-0+NIllp8T-.nEBBt@[p@F']GUc0WeBC)NQ0N5"*C8$9$[EquKoqfKTBAAUuSUd2"Gu -.?@P_J1c5UUe2%?QcAn_h[ReJ3f+:#fI):1-.\$.,!-K6I+@Mt6AJK>]i+$70?MPE$;,Xj.9- -R@*&DCp:JZd5g2"A?s^[aK,K -A?3p@HZI0h^OQ^PfTR5)JZ0^1c<(*'aY3oS61di>FB,*S[PFS717SR0[7ql;LZJ+o'ESX(/sR -DYl$n7iEXSRNEQ]OdSe!l2%I(g;AtVu*b^?SJN4r=N^_SkLnfIieFe3("@?T^Tkl1GTVYBCnt -;i?qJ]RW<84PDhE$L2])ss0hH[b*\sgHJ%)Mi'HLr5c+sZi%*mHqAPi&IJ=Rdt^.^1Ye<-l`n -_A(T9O@IV)S-lC+E>lJ*E9]:+/tmM;`$sb?SAo"]3aEtTm'@9.\%-m@"+m?j>#I>I(T)>-aW) -rHS<"tmk.?Zp,KVq94KRnt#U`09:cf8Aif:uW)I]!m$`k):*rTA!D6QC@`>jl8=-o:K1Vr"]D -d42XC)m!F@#E9Wq'6m=L,?;qPId<$;kDh=37TqN%&_DAm(e!$*@ZQEq3!qFu1@>&2=(m_Cf)RV.E+7uE%D -YY8^i<.&H5Z?&G/>EW\!aA`\>PD6O4m_uG/;IMV-)6H6#m`5F%*?&i;Lic.r/uk;#CU'I??4J -#^]`AQW".t512/+EhJ)6e2;:s>"4+)CRiPK],.]0_mM&@g*c)0&Gd2Qsn`i7EL405Pt";RBHJ -rFTnl`$l'7F5qP7];CnVJ8:h7s:.W\Z^jfRd3NTC#NHWE&,Yh=;*g5'#$Dnm4)K_$& -lOJdo\aO0YDcKA%]Vhh;DT*H;fN1#X"8hT<'4M.n?5l$u9/NY1P`bFpG_5YVr.+osUFVJ2GM] -0:gciS9e>>C47S;_%O*&c7]<'-q%f3FdA$Pp9#4=S.8S4&)B,Z9oL#Ul\-7)Y;-1E9Y+]pcUR -!IP./on^eg*,)6phP6Hl?_,9jQqViXV46>YF72X0Pd[PH=lL;n7Q@!%.8EfW@&P?NSXA_LE0l -Poo4.S)7^e%rl\_F2gO`K.c@9/*rX:eYL$JR/P#hUEZP12S6\+)$ -C]tA[Q3bjC?['%4^4G8KX?>p,GJ,0$48sKBt>tG:*-=1)3.=?ICpU].<58bZtHP>;E+qRAW[Sp3Cep-."]#H,qp3/J'oU+e;R% -J9jA@r-ENYk\)5f_m*8;1`he@,#/tt&:g'9]I(7==&@h2*C(67jX5'"\=io8$A53tCiS:gr&6 -OKJYM]dU>c,-2f<'g>`Y-'B1YIrWEgZ`8@*BED[?Hdc/2t+j+UJ>8N@#IslU1K\6!I:=j_:C_ -D1[m9/m*7&t+<#gn!i$%e]o-E[@g+-\O"m$cLdIpBQsi5&Xc%VGT\Xu#H]5cTF%&$[#7!Q=P% -%tQe5:d?KjGBT0$u1mH,X+GL:?,L0G:c69mJF:HX%$`m@Spr[,"G@0f_Xn>oqeea3g:;NWP4N -"QWsT7US;dOI^k%/U^<\_X)fo7JCF_mR`:/E^MS*1X82OVW^'2VfpBXEF`c2MYn[Y/s!uIet= -67ZD.S]Qsj+5'e#uSno,RVO]*!pkh\`L']l-9$VtA5N<`O'?G3oQbna& -\^IIl%C]-8\icD>s>fr:s0@&Eh"Vk%s)RC-)WpCnnYak:F@^4\OMKha&5C>iI\Am -19f153BiFmt_lZL@Ydn*37nnT6nV&+CCO&-RM1#*)Cdio$).>*pScDA\GH#nS\ -_'bC-5eq-kSACmRX//tDLs#]\"PUI:']`H4QA8o0P[LlKL<##3E])pVdno<*BVS"DqP:W0f0l -1&MTc+,&i/W\:9#._u5!;Hk.=X4o"d`":lT,O8[,5pjGK,&H,&hhL#e;'/]$)k0UD@_HW'V`0 -XGSWrA?]9T2Qko0c7hUcN3V+!Xba)obrb?;>EW`Rm:;LD3R8V@u2ib3m51$;f,XHcuqG@Q_IK -TsD;%E[MH"inFufG5>l0EY!NPhgL!(s$utimluUqr9t -b/i%d]aIY5[PhTOoSHn]efq24-QBAWY*G[X.\dc$k44WJ0Y0#n\kl)CLd3_luu%Yp2,T?qVq\ -dmmE8Ms-=X30o]0,+Vlhr&1i,,rUBf6fmB?emt\a8H`S*??pk=(!3'n9dd-XYeE%7,)QfEWljK+e!FU[K0d9^Li -g2VScR]-mhnpF0O("E^S4`SiG\S"!>a73/t_M -0j;0V!bQ"]+a097@/0?kB@'D`7K:8Qq"Qi;d -AV`iTGP67n)sYiqtE4FY&cXLKqWSP,2r%pe"U(`o]1f%Sqdm]rNP1Oa*D.D+`Lm?dPB"QGY@R -]?^\?)ca.,9B<48lQ!0!3Q]#Pi9"B0-&5?1eFKXnrS6nQ55")!5l8&bF:s9nS,DT&Ad$tX8W" -Bg>W4hXP'CYr!j)R1SGV9Mm9/)e%QV.`cJOY"qX$Laae1&Qea2Zc[&,H1W?2kK='elbm(\.;V -R:@.&YI=YX5O@:@=+)ubq!s;J]t2.@:X9u*f@+N*hhSi#0Yg^0kX[EEE9DXm$E!rtlBhA,i`i -+I9QcVdp9ZDH.dtZEHcI*^:=Y=t3-CL!Va`Q&49/!nTV#iVfoKNuVl:2L(k@i5](75ZV1.Q70 -_++KN#!<%V>L8[LZQ)@1[#lV>`\CCAp"L-@Q/ -OlFiPc(,XNoZD'HTX7Nt@a!\nV&%Fjrr($+Y!um8T>/b0dK@ip&2q^ZjME@k=G0EL@)5iAZUq -D^76jf#ViT.)\WT3g@j8_s1kKC-[:9t88YJT5rr=V!+*,(-k$p%Scq;$#Cj3`3M6,U=H,TU>J -!NbN=PK,\lk'P9sgg=Ng9ckp*cq[tS!F5OWMVo//&lNC_^Y_C/CT4$7-32NF.h>j%Sem6_a@J -BYAV\0c,>aLd9RUP5AU.Q/YUZue#>W8(.[/VgSOs4+76X%,jcq>X<[[/dH$6JH-0CjuOJW//L -Jt/<:cmLhpHN*hn$,Zl!Ee@=hVY*Y"3U_2a8,U?rq(Y'LSitLhRjs.g]KpE#IY<0T3r-UpIES -)4^87m@de^UoM!"YLIFKg^Dl#=dq(!Is"rTO-.]M'N-b"j4(37$,f&qKk3.>nb.)N-'?`.*/S -SR8`(@0!WqfN:ERG.Flb(c5S][nQ%Zk\MoDc1-d.W9X2/-5,SA`dJ0H,E+K1#gWF -eENBP]ZD?<3cRGAb[-TQqVQ7)j1fM&E8qBLcrM2#JLK!'8di3.!;<+Y9B\O9S*Icu90b!pL`t-%9&-aOH]a"4=Gm0ku -i9bq(Lp!$?qtKQ7pNOOPq]RYMVDna305f0VH?1qJ4)Qgino;+;GQtSDLqA)(C=A1>@%057RTR -ua:A[U1?Lb^iGrV<,0c2CO0gD@9LZ27lf@N[[?$,/'//W8VJP2"C/61!(+tS!O/LSQM<1uu@I -XoW>EY1rp\hDS]il$tSPHj:V>[Mu%$iAhm+XeXY'RWW??'KjO%]0n`'!T'@6#^bs39bSESiC< -e8Nh%RoO@e4PS64G)0GrfJ.s@=&]',n(G_)8L*EFu#o9M+:S<[DZ&6/X^*PCErCuA.YDENg_, -(3%#4L9"j1(KV_VOPBo`[>_7UW(ekKtMu*1V+#/WJQ_&o_S/Tj6u7#b4lX)Kl.BBYlEk-JZ;3 -GlJWJ(9$f`?JIp:,>KV@DTu9Q14<=Ao4T=-9;.!J2FJm@3*2N^k@/[oF+k\;W?O0=):%:Djc= -@=4>@:X&lP0h)pcp$H2u^ae8T.u%Y9h6(bCMQ^DDkr2^Y1AS5dDH=^*OAS29b_.d#-K9^sq:d -*!-dTmJp>9IGHAXF*1Ig$:$7_/qB!]S=G[c0tqO%pm`5.K72(-9-c$]M,2E5VYFbH^`a8&#Q( -K(UcakAeai^i1nEf(qFm/jAZClP]h@Z3%7#M!`!ggO*[agb&d2q0k'l"MXTH]g0$OjG1R#_fa -IlbbTDjuEgpKd*md1$C!HtlqujbZbRMVbn9BU.h,/hipk&+DNa/),$GB/!m6sF@!ET2iI$jMS -oF+V.?@&368l(>>rk-hnHZ:.j(Q^b=&Y's7H,[gE:2su@"!Ah%&V`i?LD`oJ(L;\+Di1P#a$U -P[+\acsn-k)C-B-`9kX*AK,ISUI&JX0`5$1^STJH.ZqI#F$,pj`rm?ZS5n=:PmS=aRP>7W!*f.N$!>KjlBBI=3/hI\C5_XY5Kg%Le7@XZHUUI -e#p[`Japu&MJ9%+R*_l/b(aKiT%ip$H"7oe7#]sB/TDbqulXg*JnJ*==TtuMeLgYho?dGcPP'&# -6AQe+8;VJ$r;5kM_A/?2T='UM;UD>5N$A;A0[cU&ZhDT&6`qt;S.;anG#1*ihk())^&9BW-c2 -OQWJgKpOM?eV,O&$jiSt>*9V`lXOP"#O?DC1"*GLOZQ0Y%=Ti7O6_)`ZR4#' -dho]);6U!WHJ2E:ES`h$r`2ThdiP"X^g2X`cacCd3a\\r7i'@2!:7UHo7Hg$Qbtf7V[n/o`Gu -/,!mf!%i>lnckHMZnJW>?4D[^QHN&is711a(]l5jD"%\G&:VoZ_*^I&hW*)Fa+"%5OEQAM!S@ -hE*"INB^aI(Rd0K,pY[T?jEo+X[Ts+Q8LgR$X#:Ej^3$HJ?#Cq]]K3#R6O.D=.*+^Xj*#o&Z% -*4(mdZ)4A1qNY>]7@p`\@R'/onL-hJiOZG"&Kti93=6bS9i@bDqPZ(5VYt6M#h94i!@Cb,6\6 -%I=1C6HM[Ed*sUq7!mAale9A\KBIC1&JC93ZNs -5Z'5s$)K*VXj%[b;#mU$"/_0][u.liSAF1qS#(l4T+t`NCgJA8W5lr%1lA#h5+uj@d4WpYW]= -)CYYgcHn]J!N#Z:eojC`lDaeCIf^C;i=oArLnIe<&imb($Va'gqecrd>l"pIHAeH2i'\k -3D=scLhO(G,UqHC(>tW=G[JAeHK^"r]Sn/+2MgrQlc-c@,usk65MX_M\FHVmm-3$`E1Dnn=7;[dHg$#7>Hb5o'!C[\r4V+n+IQ@l)LE@W7TUGWu5s\?n,s^V+,F]#3 -e.$/bb?nadYCC]:5hU_:]*-A85gI_5_s^O(=U3E)+,;4o;`sMgT,MtOG6(q$=&p\<&P`Y>b,< -.m7A&$#/:ckGI"H#0$A#edF['"UEUW;F(">DG'J$e(OMEX":>"@r-=DB8IhVHAW7?X<*5V90> -'@\[0RQ*t!Ko]2Te^p!X[16WB_l*]as$>M5Q -tXRSAl;;(c__"[d=>P+Sdi3C2k`4GC-e^[mR:;-GnmH%("GAj-?&%;:ZR[hFGj^:,;hrTN]S& -(LW`5Z*PnFY't58I4@?oqeY3T(&6&_]i9=)Y?h8=9Vu+F].sn.dV\%6:efhL^2#q[>'UC#;GJ -j@29P\eekXij^<%<3n6aX>XXE'sk"345iH;R!S8k!&YP#WBa5[:gZp%nb)&]kDg4pK7P,;-[Q3?&P*I,5QdRJ$.mXr]ERdp8niN++b.;>[ociEcusF_YL!Z'H -1gp$;UCiAZK<*X(NQU"&p7!U'Y'&i!c( -Ef@ZFA&)S=8Xb3JaBTW5a4Gfh?^V(OPD1h8rWusrIJlX_REVL8j.&#tK^B##5*Y];lj$;$_<) -SdnHN\*Y%U*X,A9n8O\!UX?VYo`ghqHjaOLq$`o[A7/E29?Ic"k)/p14a=js43lU/:?mOI -;;l:GI'"*g\dKAThf5N6m$FKg-0gQorA8aTJ7jaGbc%rfJ^90hdorUXS -%Po]&q(VAo9DdN0*Y[bt*nR-t=D0'A#SkT5%5G6hNL3F0\We:"NJ1aBokMQken0u(GiRie?;I -C0Hhk1Z["dcE!TrJ/'q3;1SeBK;N\1i9Ym;_4W?&URa&Go1?K#.hb]MIoVaS.BX/bG\7B/&R7!(IKlBqEV%_:a<_KDue&]6a,l:VGV1YBP,4*sD0G!HkFOc^1 -9`?>k&j/c!cn!%gL8hVRr&B/fQtB/bJB;\8m!do5b@rreeU%!K0G)o/A\_frr/iRn=s[pIDR+ -3k'LmtOp4#/_s7o:$o83P.f9$eTg9Gmc4BS$S_NK_&mVDE*$:n\Q]gHuGN/2DMra3Dp#H)Y -AXm@#^cf]sIS@@-`:4+8>NuDB;%r#p7"$o`"3+n.%^/lN(Z%b7Kd5!'%N%Yj'F%&s0^&2'?s# -#juVce$CJ72gB]@E&R6Z>o1IEh&oH)jXVVRgJ5&TV1OoAZHI&q8$\\/iiu%]jcmZ;'@9+9*%/ -1jfe"q'%T_Tk9">U"Xt*S2:#V"gP8D5%9N1/kT%"7&?/S(1B==72g]Zkq-%r'=0[#P:^dkWm2!IeEQq8s7PRTlS&8A[2qKM8q:HRIu12 -KA&B5&pLqf+="aqmG^89oXukRDj&BaGAYolC.pM!IqJPYFOd#\O2#[77^K`G1Yta9,UQ$aagB -9j2M@qr82HT4=Gh":9VV@"RS;l!i[UVB>qr'Y%fb,[Y_o<>V0Y;/%` -lG32M'po8G]O?[lB/l(A">qB=Q?TaW-3K76Gp*&1ftr)CHT-S@qI[W8T/WcD-^4=*j6msKOeP -TO?X0rA^qY`Cj;P,>_,im_5Ae5"Z8'&d)aJ*ei:jH"d#?([Y5j[iHn7AOO-;7$0IC96!6P*K# -DS.A\ok%&J[<22/)!q75THSRN\&q2iO_^30i`IdgN9__eH`X>Ljc` -u2MCad%QGo`1`8]9O[a\&e>k(dmPZ4^EoGT?Seufk96N:)Rk#>jTeRNU+<"ApQQ`+Wf.L/f)M -Et@@/amA:i\eCq(8p<#AL@jd/92X<+o67[\@=AV4=%=da:XojmHMLEcH8lqX4-o8^b.GgI39^pIgfT\;A@cKK+JdmcN@("We$,kBjUu -9^-#(bWPLCT\Zcn^++f7;#X34<(je&8j3k2V.LG!Q#Qa>`dEjQn=X:Fo`6Ke$1lN=&8*3&q<0:!1VoTX,Sg&+r(Se!JaL/['5IkRo8(.QC1?%D^Wl=;r%#2=If(5EbjEdHHUi!86A0?X'fsGl2'?U --5*lA'q;!R-4Ys]UE_#m]0DAmcl2s/*[aFq^rGoX(u_:dbttMC%^'X@jdpUp0rZpL8rZ,,bXJ -'<[Aeg4[[#YTitTK'ECFl;;OUQ)'i.X1+(=gWUMCc%5qb++Zc*LHkQcfSljE+_7fYuD`&(q=\4pmu`G(AW\#o#X,D/LXi(2%a"Ikj5Y8)&\7GA[0/G'2_#7;eO8ioZ](j:;kD*3QN5< -Qj2q^*Y52I&''!pR?tV&S5Kg#Gmh$PbS6;'6A5jNk'NsKW&9I-n()=.n5A5?TYOj`OM8n;akF -\M475$)D]og'8-&MA8uomZ2uD>^Tjl3!R+.he[7^`rD;2iCEqKe:m7IP:0':5<'nAWELgh2_/ -ROG3WY`\IKHDq)n".P\'0A$Z)<iHll_.kVsT0;MsW^`B>a/`tpD;Z>1p*-\GNkRYo)++Pkt_Y?fTH27IUL(+4`VKMur9j8 -g;p4(i2G1.YJ+2)]IcJlil(BkoYAtKHIWcN838Qtil]pt8.Ekiiae-oE+1Sd;e^lJ_MM9J$`` -4)*/d`gdL&`#X/)+aEK^"95qBRKS/\YkOC3(n9\RODN`U]olr_u@34[R>Z,N[gBa6"_bHY]:' -6>^"X\!<^.GJ6fT.WmEh.^kD5n6fGSHM](NUF1-W?p42-eXeaNMfI1d%br21l'OW9_!/Hc?+6 -\n'mf=(p>o7qs5k/#-g-jS6?VbPJsLiGqh:dIWcJSK34Wp:+](>3&TRc+?6cKFquHXFG*TAIt -,L!"AZ(hS]/\n2DM52=I]e/EG?s=-\L&64.Bm7U=_RiRqL?I=@[pb'XT8(-]:o]@WA\5[3ue< -Mc5P^%&Z55WE<&Eq^dAi==HM;j*7Io=rgh>)!)I"#L0OS/PZLaLf=:N>#LE*b\:f)n$o,l:5W -o*M,gM.na%f%#2'M7I$`;qB)4oaF#L7ZdRN@3&-m+gm7;D44W4Dc.Li&PANh;%6Cq3*V`(?1b&.AXHY9YO.,%70JQ'taCm_YBEAC(#[SsUQVlGJ4"e6R1C4f`\>*/ -G]G3e_c%dS=:\URdmPLUQY3oZ.)!%gqMBuMUJC.G[+-m4I4Q]$D2m#ql#SqXSX(+$j.4ne1/ -@Y'&lsKl[:@^QHtJYaUZJlLN)R7m[Ml("cHaf^qeS*$4(?,7hbE?VC4.OVNE)WF9_7Uam\rh5WG[UF544Z2CH,Zm;,\1**s;GS -$"&hi"i5UZ4g!7p`rd*nt_H>-id"R-W]*%P[@<]9$'`Z(8q'5=LKt/fn<:Dc7ISZ.kaRX4,_Q -[Bnd;EoGfbi9569AZuVd4>JRQ#ERG?4qeXXF(>kneWfWp(g]AQ\'pn=D8rlT)=jb+tai]oY$rADN::= -_HAJ_WA:0(O4Mj'DA`StF)7BngTBi-EVP@=L2'(!%oV1Ggo --#_3.r,-j35%0EbSl6H#ZdJd:lDI6oQMh3:JMb)[`/TYE\R;n.l]P(gpqTJqSgUNAGoH`qFS& -GP8MN;i5pokdT^49XU]Z_3#tiHs3!@<#p-Q`0o(p/`,'dj=T247a_I^eO:"bE#5dR136Ape+f -;$B"t)nU\eulpV2@2YJ(6<608n9[V2A4I$1<@CJ^F*M#nPO3S2)ZPMH+81@F\-hVZY-,i8eFs -XNu/qAVsQqb*a;6cDoj`(8h7,q`&"Af18!RA9H(ucoof4[lBq5FF[<=b&0;2=;e#WAS6!DZCD -D"N_6ui?eO['Z'@:_^''AC!MtC3F&Z(C*b9\1a%B&eH=LNVABU!9S.71;-b\0in&1`urD$SV[ -%1=dF;3ETH*ZgG%d4Yb%OI%^F-bDRlq2>M2UtR!DOA3=c-!AV[W#ur$eWUCQ'2VQZ1;.2J"1W -BA8uqS;M&=9;-ne$i@I_W>!=lF:6)Yb-]8]i4,_)"8rI/ql.Emr>'ZF>$E$%e;_'M&jN])5=!ZRZaXoe-rU`bgp' -])5=AijAT:=e&NM`G,&SZT,'$Mpq)1AoV!'8&8oiO;BF^Q/qDf(ejco$1D&\:=N?/+,4:8indg$^H0;`[ZQ&e[$]]hA5^OX`H_QIXGBo/_V+ek(G)S/(ddA`Z:`g-JkQJ& -Bs(Ufo@WEa]dY-WL%gA.8'CkpL)22:LOCgi3fD[e5acLS_JZ%)Z*0C\grb -i1*k.drT>Na3I-UEDc*>DEkjA'?oD?.Bpmnk%E9Z[=&MHU^!Z7\=jt9`=Qp`=N)N$Sdu"EFLF ->>+o-BG7F"^I[<\eC&=B[?'h[4.[r!K_Fg\'9/opIZ?DeYlT.$\iDdFA`LCI'RVoTXL"lBnW^ -C+B>BY/.#kp?obJeL]k'D*R;Nk)+VC]]+ZM_J7<;V*HeoFHuDKJ!Pji]<;aj_cB\^#R5IG^6P -'f]d*E2pXWg1i'RH,Wp/_;C-^]Ut_(=1ks,4J]']lmd0u[N;?`ns.W9:9;1.Xh/u?343q#LQi -ON331`OfijnJer=i^]C)nUS2sEk;7N3T0f[AbiEQVd[.^:&&k`K=a`ldV3=I^p;W] -)R!6Rd6+'c\s9EE;D_PL:IHHA$6'o>]Ln-C(pb0?O!GW='AY'_R58N*%-Dl`2O2R4*rEqk)0j-FBn)7"7o_?li,OV" -:Y8:*>\H%3-nB175T9oO,(_5VOIV*)WnmpUFG%O[QBht0"VFI_V$mKb2O`VFr5:S]kYR-?!iP=+Y8dgFe,'"ZIcN;C4OX-b,S>1 -NB7c>ZKhQYjN0:L*-N4.3:9I0hmI361VXUX,J(=2L0L3CXft0<`ETt"6d##%j0`6_%=A_p)h(Woe/jh&:+O[ufpN4aDbE1k#)&i_iJ''`RH$3Y:ZI5ILS?0(G(+1Ua8d-Rm/+(E_r=rAI-on`J_TEZ@a4?8OXB;`:`JPB\.oou`FRB':[_+8n]M1A.N,.hOD0aI=]FE]FFG.?bS+qh=h?H!*b@fNjX5R$K=K65.o'/ph>CBp -!G<>Z][5]%XC%&-\;gmW)X5(`0=3"l6b_^E5a(oZM$Idkb7\!YiSQM2C1!O(X`dNpIGb6-S9R -AY"C>n`Opq>P/?'i#dNbpj4h;te'))fQ:5OQOV?%_2+Ed_67dEC8e- -\PFg_MfG-(U0ag^Z[X3'eMhs'tII6S6 ->h?J8fQX;n'gZ>[Ll];$i/P^-hbIY[7FSnL4has-C6([]0)u=5O/T6Pt[\H&nMj#a])4.fu^@ -]UXjgA=L#&u\q>)M#(^8UT\#jYZ1H!aNr.or`RZ!t\0'e@u;%r&h0IK~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 590 574 -%%EOF diff --git a/doc/users_guide/figures/gimp-print-new-printer.eps b/doc/users_guide/figures/gimp-print-new-printer.eps deleted file mode 100644 index 2256de5..0000000 --- a/doc/users_guide/figures/gimp-print-new-printer.eps +++ /dev/null @@ -1,440 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-new-printer.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 248 72 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 248 72 -userdict begin -%%BeginData: -DisplayImage -0 0 -249 73 -12.000000 -249 73 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVQ=$a,(8&-^G(r\mu(@RU'rI*u^i;suRSUlt6g$cPZ-@i0r/R+&]IB-\ISZOMV,C?#RIr%I -%+C%%\7er#,&m<7G_:BTJ1d68QIj0QOM(`\HPCKSJcm;QLg/f`QeH)F^IG\dW5D0'[k*csCe" -/V"A7bl=%O#Q%T:F(Gg37Ka/1-2Q=DnTKFOaJoW_2BB/,J_HW3o]@omWTZ9U$qrg_8/i(KI[J -iKG,s=+'?076fGA`ot8TgL1-J21AaPl[*67_nnQHPbE*BW2X2(5fWAsU\9q#f22C]$KSt8n5Q -R3'49.!6Y(DQIedJ[]aVH4nE5KZ2rTo*Fk^fXQ&UqEe%X@L>^Fjc0VB1c%_UX-`"!.i'$!?%_DksN.=kHhQ1_7Kq2UefA&EMiu3O6YPf1LC8$.g> -G?3drE*F<(l*Y`e6PW^cZQC<"$!&Pb=Ek2AZ$:hmLN@?Dq!)achC'2J?!E6d'C< -9F_NqMbI~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 248 72 -%%EOF diff --git a/doc/users_guide/figures/gimp-print-print-color-adjust.eps b/doc/users_guide/figures/gimp-print-print-color-adjust.eps deleted file mode 100644 index 28770d9..0000000 --- a/doc/users_guide/figures/gimp-print-print-color-adjust.eps +++ /dev/null @@ -1,605 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-print-color-adjust.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 386 406 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 386 406 -userdict begin -%%BeginData: -DisplayImage -0 0 -387 407 -12.000000 -387 407 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVP5]l*/WQ7eRT-)q602p8X?"hLmW'UhYj'lGd)!sbKnGlp-APE!2*VP9W)-aOg5P7;UfV. -[;dDB];=3&C#C^K":0IOs7.[UdPK[;=##,u`CkCAl^bV<*koKnY57KnY57KnY57KnY57KnY57 -KnY57KnY57KnY5WAN:^%V^]>AQ1h8(jjOZVFbKqQ<`Q?Ok,ZqD\Y]W!>trB%]O0Wc5(72fQ_5 -RE&T++Cc11OM#sl=ZmV-*iX.Bm9REV_?hu=;0?kPtl3Y.D!!ZIS1F7&jGD%mX+`)dD86)q&/C8dGS8&I+V -<#25M*<7aY+MKE(GG6IZ,^XFNbD5obsH44;iPd9-?WNhgfEK2:g,1:`,NEH=al'5gEAmW\bct -=Co&5/sZ)s`p&S6TgTOZKIZOd4\^Q8)_XV1@26!5^is4??m$h.,"'m_"9OJRDIaBVbfdHPrt. -eDY0N4ZND^MQU/sik1\?%F*hY+]6!UO%XDX]:^<5D;A2^1'A/ -U^fdbYj!`#1P_RJcVap;kj03[^jMkJAm]DmDY;R/_+8OJ)k.XK-l$=\aRN"1sD1d:?CFSkoU@ -%])";4Qm'V,JC7f%_29/.sQI51rcU?8U$0Hf"&D25W\hO4H:l%.".#\NSTdsZ;g!c3jH -,)'Bg(S$^6.6Y:2?'#@j1o9Mi"DYu.4f5PK5mb6%o@>+EH'j!#>42M#.E$8cgIJb?^J!s'C0UdA9N6qnE7\"`@Lo7)[N\BKYfa%RAlU,);(;dPg080g[G.Jj?,hA&>^_Z>06Y -P"MJO$[!lV-#%[Y3:-X/.&/\D/mJBrOoZ(o687munJ/4q"e#,KPYg3( -cjiYjT)%'T%;\od-u7Q\`p22_?&PAZ^>Y#F*pOF\5)romSHU0V$'+"GIrUH4VG8&9=I]mjQKf -!$Pn$cYUKV.Is5#pO<;Ya3eHd,H)S4/RO*!cLcKeL/5`.DkN-`X6HT.c??K9o'A"@+pl1eM+?k9[Y_kte??@H3 -PY8`T?sJ,Y!sYP?/oc/%2OJ)]Y_S[:fi3MJ/ij+sQqEb>B4__EE)0F4GHBho#*.qhHF7S9.@C -gmNq8N7moUiV3B]URpk@$,u9P!'e#?i:UrDuT2irk+*UrqOO+T>07=h#WAY7:<`N[1sfQSXR[ -a1+73u!"be[$R9BXDj-nNTa9BlAbG]!XUn14REh0PRkVbe>nUb*'jVa.=k`]Kf?aK[mV;q5q" -*Y>h<2C7rk,cL!Y`E/[4DHK8hs,)a5%.)]C#?B">YP_LrZeGRMNjnUMdFUAN#`TbrNB5h\Bd- -2mn:/,1HK=8.gp5q';QMkp=4;pu_225B!?g"tc`2*$`mE1iobATI>H$hu=9Z(_MNI=S33=(b; -QWO8W)1hmGZ6::"N1\AHHa<)R:X:nAI`23VR6V -Z'j8KILJ@"Z4)]eK!A"(8f0\F"b*_"f(ghmp)?>SY<=5$X^N3LFFQd/:b3&a9j?jbFi65Zm6\ -i(b4:5d),%gbRhZ(6+$[mGmdJ"`7u12.98FkA*,CV_Lg]Xn#`^Rb3'5I`?+-iSuJ@Z,@j3l/< -Z/8'I<2o*+$JhW\6L?6_;Q'q-6i76!$u'hGfr#>i8YLGr_cMIIZKD1)!Z>FQ;6q7G[.0E]8P= -, -MY"Mgg+#oL7<[?d&n;R\tdAhXHi$D]g5$"R&t2CZo0Lq5G3,8+.b,D,P&_QaI5Ai3JO18/A48 -?3TE#mNDT"4W(V!'tg'Tk54D<-(VQ'f::Qr)I'+:le6;_.]$qk9J%H -C@(As#K2:h2N>qV+DV,_;6GaWpE60Xfl$Ot]Gr::3!AHM6ke^CIV6GD?PmUT\Q2 -\FS$ZRRX -8(+B7).9+f/@&MXlC[ANQcjb=f-[>$8nAtSeS#,!6mPe,<$a -Y^%.D.\TJX\YSkBpTd>e9/fc1f>68csUQrM)Jj@G8<"#Do!%`_%\3U0DADg1b@rfA#GKZn.B* -]]=iNiK!m19!u>m:m+i9kHrKH>OB`>trZ2=e.<(=g(g'IVG=D.QAk'RJ0/qC(\]As1q1K>Z-Q ->>UE*C6>I*F$@&@qUq,Cd?W4lDBp]XGS"A6oS'5EW>(tF!0H3.4RHRWr/n1^NOX>';6rN:KVa -?3s=,t?BcYR?@EJ>Xg,n;.hmYk8 -DB)Kr#:9R[bY8js:7_Ps772+,$9]h6jYZftU1)lQkae]j]/Z"u,*d&PB;"!ls7+h]7&7gB2o& -o_.;PT1_!sg6+&KFJNa+Gt]dAn7fJLE18rb+>;ZS9i3%)HsuMQ_:_l]k*>brR-p?ti-%e#Sj? -U/K(Ecs;fGID]-^>SUDgA>2O,K\RDg7t&pkc)GIkf+ONj/>[8'V.9`q=isn%n,E[3!8p4'>u` -Nde$bc]Amsu8(q[T3[jYDYU0HBWE\rgA9.]En,t+u0dAQcgjAYDk+CkYDiQ#T:aD[JL:#VHfM -EN[E'=53DB9n/Foc.'s/SSiJrUm-E^M9(l]>\BB#jc1"ICmMIXhueVfsM,B'Fn%k$ciZqaUhQ -)n9m^Z4O^lGMTcWWc/O!sD^HH@f91IIckgT9R;UXlAsTMApps$k]*q;1W@`e,',uTt2>Y_OBS -e8c6NAj4Ir6*(Pn.FtT?&?99pSLf@`p'a`2L$>GQpUJYhN)6>KnJ>u?lOM(Vd0+"i^o;H?aT`!F[lm[ -LQDJW^GV`CNWoD#69".qS+D^BfUm-U[Yc-2Y[hbj#7Nq6o2\&P15aD*sN\Y_%hD6F8$Ej[,14 -Q+AOF%!P@Nd"]QCO?%2U,g69g%tB`ZIj@W1\Y,Y@[]%K4Y,@q>VQs+!T``g4UM#7T*P+=ihr/;U*%ibV\p>XJ0%l,#q2@:D&*g+h`L,HJ`s& -)3K<=rW8%VaIsOok?h+/`8KZ#qIEKofY;Z!eIpp8^ia$f+D*p[JfX'h/n>T4FePu?d2seE*6e -:/g:X2eDkG6jZ8T.*O]f+-'=N(10cQ(N9nhOq5l2skqE6N"hgM(>\1M'/]]g%9Im:&WR:bIq1hQi_bUIkQFrs:F474dfPT)i -)g!DM&u?6Aj(0&8Muc):Ln$g:g8f1I11RYj9IEKatm4O9XQKq-tn0_.fC>Q+Tip_0&!>*/dJD -&1K4%5T+"K-a\4&[R30m/ -TSW:jW^N6)h)&7W8kJn"r!pc!b.so)3m[_%BN=39OJH7TIVU^BWQknZ#S5m%E&*qYZ`n@/IB\ -<1MOYi_2B@qt,$NBM\)WbE:CM3Sq]'HuOIIO;W"l6dcs95A9Tb!#pnOY-WG]fUh":F/>/0`Ab -&t0Ao7fUC3;--^g&O[d63[Tpa"AS\/'+OHXdJMFkEYL,l@-FiWsu+pflji2C$[p)]A&J(2+[, -SZ$+%AqX:@_2[Fc:/.?5#<)'S3P3[]G`<*@X-:4nX.DK*4TiZAeX)d#/@ojdPIU,H'&=RL:DR -uaHL&68B>F$o+:.*g2b:M;VQ6U0)M0MO"2USV7U_g8/ciKe@J"Msk$* -?0V9A;.LLWoe^8lG=JX2$d?&%V^Te:gh-k%A>L9i.G4'BDg67=*BlK5RVRpU*:DQ^ -,d]"+NPT5\k"F+^)A9u!RikF;,8D41Z9K-If7MW,DOquq3YEm.:V6f=B9Io7CD"WQud-\IW!E -2K]#0^^1F"7ckLkSLB0+LHu=78l*9Tga;!'5@@/k-l:]_LDH,6`BoTVs2q[KW!cH5N+0SlH5g -^Ia]HK(0%G)f&^:!4AiW_.5YgVB%3W/`UO24/BJ64*Z*ZNKpIOtY6kt@UdXfqAUhFk^u[Jf^: -U96oT^%]^]$iLJ%YnQl-6W`s%i80/.(KicI[usbohcqJq;:_*0)A'W%9-d-*NJqdNp39[,WtI -VLfOJdhadLNRB#a\k]R[%FUa'E -1'8P_)EoC*Ff*LI.2W1uT1g`ME=\5k`Qe0i'VoT[jU6)?&M?GUaA=du8 -l^uT/Fc*1m#7He$Q+@MIg.;?A\[j9/[1o1+aFQmU[Aq;oi0@251DM(=Tb&@jbD8e]KJ!ugUdH -g;L4JEHHaK2%@R1KBJ+FVB'K?_&7UJS3mA*gS`?He3o]g5T3`r2K77A0mV@,M'U#;_a`GK^>= -,B?Uh%s82=-Y)i:^^gAWL[$cYQ8\-=(4j^dYS[K8.fHq`nn!G>+/SM]0p..qB_l<9f`l#IkmE ->V4GBS"N_sd^SRQBio[`..qM;nKoiL469pLD9lFrfDshLp[-6H;l704=L^XM9*g,\d2FB/8Om -sibTJAlW`o3;J;YjW4B*E!a1EItElFP+0Ria*r9Mod%X3!PTrJC1(e8Y)IHOaN$"dK72#V3t* -M28+tW[hb6g+BG3Oh;RWd`)?p6*)8r&:J(WLXL?S(Q$PV93TQ!.OmruPo-udTsldB3Z4_4K%g -#=r[#7C?(DSh6Y,2J:C-;lA9<0j>e -9aGWM^C\k\&C]#pd8gMnWQ^<\A4O"3Q>lK5m5^Dh=hVc+Ct)m2m+QfmRPgk*hsq.X8iNZ-d(0 -o))1LY2]/P-dcc]O!an]5YCq- -p0.EAoAlI-d1&;'YSgJK@TPhRJg*_m9M2f_HmpW2PNQlEi;3d>adsa+@sY&>+5FFFYBGT>aeI -6atSW-3#%Wi[*:`b!,a/ZC&8 -g)A!^Q6JO`Y<\7F]D(?RBcei_0ek2%IMYI24]Nq?SK@"G1&QgFJm@"[,BTM;Q/**NEAo@PWpB -"?.P+')jF#S*a"HGT9.%Nm5;j\8t5=A;mI]6?:iLrs49?ZhYS0G]kP5,7:to_Z@D3Kjk -^H_iU7@dI:ss"r(N(M3:7-J9./>qg*TjTK%tq@h;Td,mA!r4$MunEXXeA0d??LEK!E-d -9)qeE("E'Z5(`fRJGpW*j+rL;,d:D(g#aj;"65%_\]\(7QG0Dp`#G6KbNNABc;A`9`M'a]equ%Uf"Hp3qTkITSVC0kjo*3+I'qIcJn=V?:.gX09'OBDF)9-P\l$mdrV!$ --NH375jCSJX^)I:7q`0#Wj)GnpSE(NK)l&>$sku:]F4#1h78W$EC#l8DQs!*Un,q6A?7;762n -4m?qK4056aPh]E+GD`"`rC1dd(qE+^j3s-JMkR]AJ(41\01pI0V7JhL>Rj/fpmbK%+_7'Hk2" -1__Y6C+iJUQVhd"1.gd4!&STmIs$n32aoW!kLbbDj86.G6L1fVeU4X$sAI6>-nY4HiC_4UCUu -t(hE("Y8#R-j8_A1l2\$olaj2pEXP4B["!bseo'IKk)4!55rCI;2n^nsLlk*9i]r?$Th#UA)K -(Sm.$kWqs=LN*55%0&0*#37mgFePXU2F.p@#cK_B/no2frJ[4riW02b$J(H)6H=__:K7Ck5m. -06W:3W>ad6YE1[8`%$4i9iMT[;oIY$nd.(C%gTdM[9@0N*3>/glM!"'`"BXJ[48iWl=%-B=<5 -GHXQa6/fL+dMm@eP1IV/X2Qt -86CPEnRVDY,XiE-P7D%1t09=`b#I!3!?`rt.eDDA33!%UVua$PFUnTt9MSB3>3dL7bXA7HI0A -"@sf'8ttN)7Gs!AIo"C/$S%1c!#N/@9$D_b"k;!F!N:LC*"/#9.LptE:WBX5^&`ejcUgYL@\ -%.B%PTHVZH3&BnTILgkp0:q+UU1]:.eYk=BJ[-=BJ[-=BJ[-=BJ[-=BJ[-=BJ[-=Pfa!H\Jj* -^OHgjk.OlEHNh1O\+&89S*.O_SF6?Pf>djh59E5K2ZteChW'auh?sHM?(r&>rj?Zir9`qPp&= -Wf]g1N1CHPgRAe2tT5d42;7g6_@`qSl9&?I_Ufq6Mr%n#:,s -5-HmnB;\OKtHLc$ZS]1fKS*G^)7%mpC@_L9$tt>^fC^oLVRt%39>)6ZVU2\I5;!V#lLM,mE`e -FNWgpRhp_AOY:]dm&2Y9P$`1+[-Qo@MZHlk[JK]7g#WD]jm63m64!JnHHq/8h!mc5C&U@TB*$ -,1]>sRn:N+b!_1`9/M`p12?CN\q`&;%rKP&CH=>(6==FhrtZGfVSQ>7LYL'A\=/6gt/&nHr.8!&-bcq9eq"3Gn,Lj&+7F7WjVCncoGZSc6<3= -,PI&rY@P4mP`7)Fmb^k2tIj+F%[Jcmp5PQUg[1q0iU@BG)9o">>jbnq[b^_%FjfnVEbI6/*(r -jq3"aH*>KX%j]@DC0d2se@L$SW=epL,@Y(i@:rHVt>:I.hWnsE@%+ -+jH18tWJB%4'R5[POW[a>sIdfLBM.TEPVd4\V2Y"ckVeGC4pKi#N()k*1<:#'F50eTY).GgD. -q3MipeLRl;P;ZBHNV2nlJ3Ml^ZE(V4a/osY`[bGmG8D\-gq?%%F8m<+oPdW4%?>9U,F%TS;=S -=#a,ALMO8(>,_f=IVl"q^B^Qq+N8J9aP"\*75T.J:,u5Ol+I5k+Q&Ns:3eGXV5[baUo64JKk= -n=!YHfbbTgk.Qq,Z;I!_h)prjsl@:GNHJN7o,aA%XZI_RdT^VX;YM"2 -8';tP?3oCLVt>gh5hcWq!eM3oF%VJq!p5_&Vt:)4HYlf5+CS#Zlb]1?f&bXZNPK1%.16O,SqM -AWXUF`V>*nte(UVEe@NH-QLfP','9D>lo(ZEP<(l_Z3i-Fb4S[ipqJY7&4T=6O"U&]2:$4AmO -$*Db&A/SYl)=+(O/R2HYB<.c$m=[E0oouO_3+>F*e+Q7\,),e;bFr:rt% -T3[u2uqW:U3GA(j)dT\m(3XCa]:P>M&&ZtF3[B+!jh0oXS_=@alU -(7dN*^A]5>9E"a:*/#AXY9nWSk1K&N5jZbCrC+Di,B6P%p=J(<3Q*79Yhp"^0!o+jd`O%6Q0h[.+4*J.dQi!%!p&KM)Z]H7aWLd$@%f4O[\''9e60$ -GPT?,"#%#^kbHZ*:I:Yct@9Zmr9<@3/a`;b+$.FWCU:[TQ^nah;fpK0o'bHKN#KgkO`sp(&!l -eqG8\?&ftXokF)b+Rj-gM77hM\`S0Q\+^tjn1SP_<_2#``-YnKgO&]+]a$1_!XK]nM:\12Gg4 -L.&9s7W8Y:UM>9h&Rdpi-;sl/HfBJsE# -g*6aXNX16up9,JJm/5s^?Y25"CC4B^I5_:OrNqbEodFtJ=V.[%%EAW<6PsslnnPr21'kPHoeb -N;)hQ)C1nJC:$J*Jc&.j4N63u-agpR%7ZQQdHeaH^.%DbY(X)RDG(4q:ocuqnNOFh]8oEkjFM -?W<6_$;+8p/l[!"Y43&1"6B`b3@N,k8jc\):@#BDP=9@_0ST32(=Qp#/RI$W4CT%Ap^k9qL-) -UlM18Ve]4]Mn(6K+9'ga0JbSjL*2q!LIX=KKCM;Q-JjZr6hCf#XP+usE0a%p$)aMdDJ+/9hgM -;.rq4E)?Hu")-5:ZD>PM9+S$O[=M$O[?c?VT8:F0Zd0_Z&/K[]PXFL#pD;n<'C2GBib#n:_Go -$(d<4G>/s,Vh?4,>o81EKct^;*?7J[k5#jF"2;n_JD_POopR*1_;S^S+kS5ZhWKD#*"q):'S` -9'@0g$QL7iZlIg;J8'5r$A>AcQ=o*X?&DX;Ef==noGNdO(t]]Nh:G-lDc^7Mu=6f:+HR4%'j6 -=:;Ig(QF!=1>6ZRqj55F5+k5?9NT"#PBPUDn17Qq>:7:=KX+/gKLE74h?SF>!l[s$]4l,LU#o[FBWJ[_M2j_ -cSND@]`cCXB47kBlm_XW;XJ?L]37i"1.&&9uBFK786nW4/V.QY/]*02fRM"7cI9B^,Ycn9E4"k -%M:t>J,91W997E;q - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 386 406 -%%EOF diff --git a/doc/users_guide/figures/gimp-print-setup.eps b/doc/users_guide/figures/gimp-print-setup.eps deleted file mode 100644 index 5556c77..0000000 --- a/doc/users_guide/figures/gimp-print-setup.eps +++ /dev/null @@ -1,463 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-setup.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 293 196 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 293 196 -userdict begin -%%BeginData: -DisplayImage -0 0 -294 197 -12.000000 -294 197 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPU%@X%7%#0uC?d_-/STF/)nrjWlTLcl\gYHV0VWKa(Uu3k`a^d/p9Vr^kVUXLSs5U\X&k -j^$;.^##S!Y$t[<-<`-^;H;^Ii5[9He -_MT/aVBedq91&D'fW[1f,t8':$[r+Ar:BeO)C'eG?RW@8Pjmdb*[U:?"spQZ:]_MSO>"_i'*t -[J.A_=3JY86j.`P7KY;I/VMEj`^dE5`d$!.XZ@Yl'hUZCEkn!6NK;Id24PiSa,&r;Ok7?GNlT -S2/*D+a'8#>-6DPu<3-O^T^7]G/Y1=aMT7/F:nHN1V9F3-)PtXD0Cs\@mJhPg64SlTJ'b[jNt -.l@4^ZmnfT=mndVJ1a=:M)'u%gPeMat+T4t*-m1AY5,^u.\tIfmPW>2.9g0==7\s>hdR9>,qN -lFA"nG!aNg#fOqNh7aGr.J^V-MI$mQ$En2J_(k9&aLgM5?/@HMpKgdYN0?SD^pJJPr9BV-te^ -e\@=ibp_tU1HKHJ;DV59%V\C)r?9EV8O5hf-lJkbTJT4>;YBg]!I@Mh-=\Tngq[`'&uG.FjfR -H7PSfZ/a"MjDs3_KOK_(Q&04DM5/#O)OkXLE\0Zo-h%#E^pW>t/0idk6(WS9C`Xe(^c8m=G+L -\mG#VPM\U1b>JsqNjf'g%_DiP_]rEmqmM:DACGaG#.66\*RIR/1F7j^+FFB^O"uqTj_d\I/<`$o@$ -C_eUaRnjD3W!<%8%gk^V>#qn8@JLr6c>Sc5ik&35G"a^E9;W&>/S@TnL2*-oKT\-1C+'-*g -`O65ad10,[;V6Rg8Q%Krg@]S].U"f2J)M=4S>XB#j-M:XH(L;aRYh3_)2C>>@/-2B!dKOQ1t* -Mp#F;bC+T:a-dUOqQ+!UJgZ..9*4Np/9UHfW0#,nM?tDKY3/hUqLjbV)'UjX0$!0e/ctrPkma -FTqpLKF@#qi;)1a5kmis-`\1mM`XPUu]$PNrOr1JZF=_8gG5:nZ5.I8Cdbf)1c8^BXj-SERY+ -c8i53HJ@s.#;0j-NlMAga[IP28!9BV\HHRu^o;6cid5K'+e,8l[*W`d(2,jl;[-;nOt>!Hb#W -s7&apM,?4g]CXMCc:DaKddu/hH'L0O@[%pT:f8@L"Eq79&>a10?_[PoES>t`/=QPdr@hrX30V -J6:B.1jG=jQ_]'!gS6,fbq[4#:j>+/9&L8Eg^8/Vq!&hX.]/. -0WHrPS!coND@T8;P8[abnQCgbcI'*M^\,.DqbR@V[k8sePH-.0j-1`0LelB-.rg>k-Rf'CB3i4t -"5C^m/kiarGlW5,M_FCoJ70J@#*`.$D[=-[(Aa8q\4.nnF8.M/aWq0R;("'uCaKr*1Ye3=-1Q -1^fJBXM2(n&f`]^TZfX3I2-CGj>R8BbPBhe&-PX=4qnhpUOY:&#VDco]f%,3NE-'"lOQ?In2- -(fgp'_>`gmHu/jjFO8+P[_P(?!\-DMC;J2#$\I$r1trGj2-F4(R!49?K5/]hO)CgA?OR"Z6,n -VnnmiqjR7nrka^d/p9QedTr\ -928Ig2B0g9GHLS^Sn,6eeU6P\r:pm93-LD&T5`)5Rr`V%VUL;R8h7,a@"$eu$s>S=nB]YaX9D' -%YbT[2c0onki:qf`eo8[`Vf.fSePnd?_?)p3=$S2 -Q8>iQlh)I8eo:gAS1D:hjcJ -R8R8Fop;Pa1.iiJ8gV%l,obEJqGR7smO'D\~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 293 196 -%%EOF diff --git a/doc/users_guide/figures/gimp_image.eps b/doc/users_guide/figures/gimp_image.eps deleted file mode 100644 index dad8a6c..0000000 --- a/doc/users_guide/figures/gimp_image.eps +++ /dev/null @@ -1,1024 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp_image.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 338 287 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 338 287 -userdict begin -%%BeginData: -DisplayImage -0 0 -339 288 -12.000000 -339 288 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVMt4d4W&Q8V:DC%V])?:7;H2d&Psi#:;k+dSJQCXc-.3D!2',!\fh>D=Cj+tBH6$?/K&Xt -`r1GU5](AMilYeeq1"Z\6^HZhlu\4O6#(9N?:ZA]Ai4m*'W"PK>)<"E%q1l.>!4MZ3VJX'^'B)Kk;:H.RQ4lN]s,DEb_;BbBq -X6XAd[u_/"FmaKGPQ,?cf]SFmV_1Y\TcXmQOKGNL2?)MXrk5@J,%h/qE'o(jN10RP@a=9b[p? -1*m468#5mcI6h%CF(S/5&peY;Bgu.\lns:=`DYuGBP^K?W"TI5Khuc&i_W*"2TC?*3S>lED%/ -LM4O.RGB^o*14GE)LXE,4M>&*2O,f!n1UOF'*HH[49/'3/1hj6r1YOVGBK]jCV[E?eH=c$)** -6JLKUO,HPJ>'M/kd,VTapHlrmB?rBYGd4F#$dibJWIqd,LaO1Gbi(<_L\&P4JtVm$+_9d&ZT; -@^Gc5HBoiIH=8*@_K)@J"a9epo8236)T`pr0,Gl0,A_gu&1Ii;.hM8]:aZirTY`=MN-lTeu(C -[2LBjkG]#-L'UXRY%?)1f&g((Q67lcuaIFjrmF3#8;5f`N0/KFsJE+FF`nrrS(8#>`"\nf`#bq_UP?nOLj(WoVPV[dP3] -fNN*Q"Q.AAol/dXb]GZFl=@`hlJ2D!YCE%d!=brut#^IlP&D[.rsX8GkMC(H[b-Oo+re+b[/$ -,:c*Vj8q(_Z.qB(-3o`C<7X+.Z;7LZ`cG5PX2$`nj90ImP06BTP(MK>.:pQ[lN6AA#;.Nfg^g -j;$,oFVK!7RC4[B^$4T=:*:i[HVohacpnNN%tUi0a0:HhcrD$F'qC3mOk-henND]V,LU`gO<9 -lj-P/p]D9`Bm5nNHt#dIQX`(nQnm]#"4nYoC+2Hipf&8 -:5>q9(Htq/!Pro!tM*)2X11^)=ZGokfqMjOI./XePN,0EC'A?jDZGt-l,95i]GCPc.f'CBP/m -Y9`M#BI9/P2H#6=m0]E^/hJQkEuQDMW>*.93Z%n0A72EDDAX5YJiRG_s(:[6h;5R51Z*eC5A2 -Ak'nYj@@dmCc*&9@q -%YMtBKgWMn>]m(/CQU26U5lY-4hPe*dsbWm$J:gL'Kb`(lW?uSu&ndS?t-rX_4of1Aqq8j(C6P -%jpI$8-'>]kVQqIm+CmYUn1S<\nE?gr;&93ilMH!BDSl;p.A_&RtajB0HHL?MJl2FA?#r -Ud@O*qa/hU._6?o%JAs(=.@,aMI):1B3JrG9$<0FM5RL=$/K0m!Rs[0jC-7fqlm$mpkek9SJca -%7qMuF]mt!2?YK.nbM*POaX_!4SP'23]DHt?7(qs2QCa)5Mu!Z/D'Tnms+$G&W6/Uu]XN/!0c -+b-BR,g)F7:SWX*@V>XuLZg.iM/B2!Q;t=`:Sfm0fJ[_3rcM7`hVQ(nWM.7BQ_&[5^ts-Y%T1!$)2l$Loi(o%$aS<*-al9_\0VJ4C -"-+ke0Bm[M%?ReMoLS^VI!4>RUD&87O%c7'og0PMU1JUh>b31LHAZ%kHj-Q1#P`6Y%>oBra&A -?MuYNWuAe_YMDQJn46+RVj_1tEVs7.V43-MSpDTk_pbGpO -lfo#k_PQq=UF4HZ6H`Xe6krJAl(3cY]fCJlrk9-9P[9Blk!2*ea2D\B1dh\Ng)i.R)P"(3M:O -BG/QE0N5iqR8)nV5J26aJudb?o,T?=#Q9H@[+"6a$b?BoO[\^H'mq`F*\C^m.5@!VV=peYn?! -a1Hljd(]T/`5+qa2pJ9qO8GORmi>cIs3,g.fE(,@64;k9,t'Yb! -iWX4YPc%8#5$gIf?5\UAco^gTVLc037^:i-gXr)=b#!eRj4IUBW=7pcj?\Nrf&3BJdqAA&Rqo -mV[j(>!ol>]nL.t;PYEGq#'J3/(PEu64YbMDK0kqB4(4K>GEBZ*)J`9ti$)H8L^+2G7a1TAc( -`S;*ch,b`=*< -7f6He*r2\/pU:A6-88A'2Blc1sUq2J5C"tCA@PL#9H\J#^G#!(h#G';!-%PlRiW]6adV-<(Vr -&]i1q#kCRM5q_6Tqb'fU[rDl(Y.**ml2EHb`Xb@9_G)uT-[=>0i[QGNViQ6NYe5fHSK-bKYtj -?R(4e"Jn5VVQWSWT97Quj6b'MEe&Ue!!kM?9W.j`BBE3m(*TQj0eDFc7bi<>aB&ZMi.5SlZ5G -Q,4M3:/iXK'_dWN'n%7c>U'.O/\77G7EJa,cAF(aH(#cn"iFNj8cuFf,"a8it:6NSJpl'o\W- -f.3>k>(H;fL5TO/02AF'H^gp`nFL7s(+9,OI"$@F&;#f+q[7eY#1Zl#T3.NeFO]ZEk0lAtl'] -^as4$%([92QmB.cY(lGuJf93IGH?kOQdpQ2XK/Lan.rg%JGp3n0'9u_(li8[mO/m$7pAYrSSKBeQNL>Ft,M5Z@jStJa&_FGE[.t5Qb -+j9oq(AXTqJL5!'.I*XoANF4TTp=of55N0EUacCM=r`PHp[6l`(&r!R7\PKXVr04eDW&8JA8H -!NWms^Ud^^NHEJonRE^Pk)gBP;r)[h.W-X4jbhT;7&Yc!M`119`gNG`j.ph+4ZBm)2BRqmjYh -FG=&KGg?UDWo+lQ[j]K\[i_+NV/J$BrOI$T?EY`GNPtMr78"7[A6aE -K!p##4D-Ec(ADVgC@a,j=0!['B"qh/H'AC\]8#$&a3i9`D(fFDB>\]maLg7WQ4+_1fTOYV,#"Ep&!8hCl>OOL/kcfm8s1uQga#l+`k>5QL0k+hC/1 -?q47G"bbuV^C'7$,Vq+Jd=q./tLT=FWi2G!I:-UD<;Hr3lB+``,bGNsug@+"S/R*FZN!;pt>F -'Vl:4mM5tmk!%/,6du=VrZMH#U=JN!,&KAUA1o=8S`@ToldPR:4 -\W^C>XN5&/@_3*(&Fd#hYB%$(WtNAEEcnd>[TkFN?E.5-ho=DF<6k?jRVejhB^5-_NU#bo\f/ -aYA`)-)=HPs!/r,W0%\.Yr+p)]&C;6U@Q$cQ.)05[jR4KL/=DBKMHITglccfKWNA.F50QfR99:2qI -]Bqb[-66.P]1SLS?o>([V=!VpC#Q'&;B?q)hFTFD4s[AZrL/J6[V?hhP?+*VXpB.(p>@0-PEd -[h+5J+jB$mKqSlP=M>1=`f3c3nVq`ai'p&:.StHUI1<uJ.&mE!\teTO-:CS61+RD97WVTL -V*!tQqk&tNd=VN$%1m+-tQRR(3^c!H&9S=Lh5-a#OXE.\< -:u8rME(,U%INh-SKpRC4a$qJ!kQjno7]U60Om^jE-6F;!p9)@<_]N^6ZEB_EApO'_U(+.]''[ -o[&E5^b%%jZL:Z)sk,<^/WhWSKl,N.f9[u$-7sDkF&3(a'j-mE9r(Qc9lW)\;h!puB2r]XL`J -'fJ/87JdXU`^S(\^Ke>N_Ss:B6T9jPML(LRS3gIFb8)s5orjU`Viiq+`dEQ'K>G#tQV.6"hE# -=r-lpRVD?"L^mP`-kr*WND&b^%ddIK7gj04HkeGPlBG'NrJRf57)qPgQdpued#/JKN^f0t,!1 -#lTQW-"LlDmMUWUd1WaVh\C64cC\M[;X'.A?W=j)6:oRVq"a0#S;O6s3dJ+WAXOcu:`3=AF5M -ai+9?$SK%HFcgA9/l"_U;j`BHApN_\Cl^^en&"bY]Cu*;+45rAdtS(XfFg@q$ELe6 -2\K\:R,u0$=(i.RC[^A>XB7HKK4+53o,6bCfdrbQ1`AS+:fo6=!-Q0iR6H;^RVc^]OpbqSBp67<9$e4:f'^42 -iK@p*E)4g3H_U=a'"Y*eC0Yfe#5cpa0)c>P-Zp8A_IgZkTi&AG%B]1^I49-_mR4DMON]Cc(QT -s\^B9M"MtZp.t=-S;F4_fJVXCP^,0^X3-jW"g+VE$e>dfYPYhago'L0R$ah]<*JNQ&(B:LAs8 ->NXVs?4dA="t#RqY#HH81)PUDpaK?%GXE>qEUKOriq(HL8_Bg<1;i):Oe3]e,XHP/fK$pbWmE -P\X!'N&9sd`&O<[mn@k/['cjr[iThOBdILtFiV/I79:];1LGQZ2$8tL)7QHBcc5;l(TW5/Sui -o*F_P\SR20l6erP9+IjZ^o]NHfH5`VhFReQ9P&6mc.i0(E'PP\Si\+kKMLWk/d -U@/Ij:Qc1.dP5qOmD'u0K-A,[k"&`E2(OLB9&J@59>qHghY2r3GSfZC -nUFd2I+P45\jgQbjUl_du$uYZRgW/?tBdLJ!V*E+kh4LL$c'j44#(aKJ[;?=>>LfP3SHrrETQ -qI+ACnoaN+J[G!lTaqoWhsj\5Q#?qI!t#T@cQ3>n0Oea**Z_W`5FIGK.Y-.\^s':!PZR:$?nF -aX9.13jHsd>/[%$8&OdD\!rn*D*sH;]\5/rImmIS\#a.=I=A,l;pjk(2G[a)p'G#9CN+%M/a_ -mu_.].!:3oHXY:$#Xn)3e]?VtD,j9"Kq_NZ$**G3ZSYogfIccAcSTU2)OY=eUrN-Pt[5B -!(C$JK\It^*iYi(I'`E:P/;&Z@(=R0CLp/H!1M7Q^UaK-?VMf[,mumI`p#B"@&Qah#$sbS^@j -+(WUV"-gJ#_6>JXYXbKVFMGb294J@g;>ADmB/75DT;^Q;Y?K,+lOhBBDpKSdbo83Ec[_1<4,A>TC4_DX]$\OQ*1c<;_t322X$16m$(JBn -Y]F6]XkCrR=IL547KlM7IjYTRd5f@obX?_N$^!q:[+7JL>%bGrjfFt1'/b,6p"Q=bZ&!09&H) -am/*a.c15Lih89h_BOp/IhRjMjLeG%t13sK-EdFsR[\=jidaSg94<`qcBn:gY4?gQa,C;KtR1 -Wm/+[j,2U_;&MK/[e?I,1f8#H$6;Z1prE%hem(6/Vhu9J3tE9nh?>2q:>cL4SJtfDAFX`MVVW -mUB\k76>=;Le>VY#,qSCnc"csebeDe["khLV#Z3p_UPc]*qRY;i8aNVI<=(9NYFKk&`p17K.8 -"&XD9],D98>,XQ42K&X%]-BeWoo%o>;a-V!G)+e`BdlHScBkkK&?o^AsO#qe*uuM2TeaXP.@q -^[IngQ="Kt17")BL`ViU\lWeZ -TO75;THFnSo-1k6]&L1i(Hc/br2r0+EI!g0Hg2LYY";Qq7:$TB>U3Pm^nj -\@s0,P*Y_.'25.s1I$:-u'okjdXb%kV@8tE%.Bbjfq25L*X\WAbnPmEk`!Ab[GfBYb`5ZCsI> -`i*^k\H7^I^cs7W=+cfg$^6$X;d#:)dZt%qA)3Jk.tb8J5^9Eq%t^1-!f/@+.tnBp?K>&`GYQjnXdM'Z3QZ,Ad2-Q4TZeWRLJ1S7:k*'8 -[!sFeZ9#(Wo@ktkDI7Wik.VqkYQkJm'Idf(D=SG4"j9e'_[A-de!YusCW'q[W&NFHdc9W0WY% -Ebm_&p&k0nhUG(.&JZ<4d7p7i1CLYs6&"hWCTJ,K*?e*!pkIlA+"5(3;(L\L7E^%hU*O5I[]h -+_1!-^#F[3kb)=.+Ra=\tVB[D-OGm%Q]O,69)R8ip?i>D4C92kV4>+obW!$LG5:')ON\3eUZb/G*2!L@+8@Va%g1?3Za2G+XU/&ITb]Akf?Ri7\g;PrMXa+gVIbq1jmtEpBf'&qJfQ6Ft6lU6m -?[Iu6(K(">(AckO%ATnA^[0(A4beIc?EO;@HY?kH*]Z+uHbZ#7]r9u9[X'a>eP$r0*.bdfM*"8P4FMXa5l9^0mpCMCmPWW2ErZ! -l]C4j)qs*4&+2>M&]m]kH]9!!gn\sn_X7njXn8rY0Fa$ar6aPW_/>EMe7&:Xa%5Wj4qSC/02` -\/.Lnr]%\b%V>q7@ZtktUT\P9@VO.ZXlLV5dSZ]`]>Ibj48'(03^<1jk!rg!f*rL3qCk8lncX -.$)M[Ga$Y38in;Q3d@@.gBpR]FVE_@0-p18;>Ge!g[\SshO!"66'PuDi`L%M1@N>oS4%@hD5R -=gQ'atRT)S6HoC%2'm]"8F\n/U(s6eFHn%ZParp&=#5MY*ZrV$3eIsC_Ul1F=*:41br_I2#n=qfmh-doE -&Mf_b0DCHL>f;jm%SG-"jp68"2QVgHa[@His*+5.um<[umUeOM0ZS'=g6![nlkglOEQ+Ihs^h -m/il>8"m:I<-c2M^]3f;oSQ+Dd05AY=KS9RhFS?efH5Mq;@YGQ6j,gP)#IVhb$8T0ERIMPU:< -X/B@VfDjU;O0>/4hS+77;7Q7%6Y'g=KTM%Yi*4/JZ3+S]>+tZVS@/OFbYo,O(Q4j:;B[KG-tg;!]RKn -N+.g7Dp>bK%[kGJo;/#nk3:u%IVml6qrl=j&ZQ[>."5AFd7%l)AI4uk69ArdrV/FNI**8&98+9iT.R6Y=.rA%N:P>DarIp\b,Ro2;"NMa -abudEefl82.h3;I>hCi3/4+Si;gGAq8d%)ijK2OjXRitmiR4WN3)K_%)^7#qdaqE[DNXf4mlp -`g5J?pmj1F'"KIa6UpJ*R25JMR>8d,+Q[pQlGh8b!X:44M$FSGG+EP=LWER&qTq6Y?I)m<=D> -P21Z;3\S&i"lU#S0P$gp+;G7Q1p%n8>/V5'LUrn]KF2o#d**#c(+HHiDOfm1=.Ldr0>p3)FUW -0M]\?1Je#(k8'HoI9#Ba"8>pWV-ZjMu4tnm$%=;ck)JOfM-3N&UJOT427V1/\ZjDZd%mRdXod --!tj$.tl:B#Jf<4`lpl.rt$rqQ#-hqncZ^:o$in_Ns>"6Ks!s8Dg20MetF;5Z"KdUu;W)JqGJ -?&HduW3<%@`kJ/)_`UZ4hGd^P.f#+.r5iUeG&(_f0KB$!`Iq;j^AjM"+d'gk^o=qt0FGp -EK@@Y?ntns8#4[o]`jBILhA:n^[$opHQBdC7+gJ99oC%0V02C$=E\s4IU#o=-uHmbq&u&_1?Yi)(G7jn1%d8uluY_e:-gATg -)CBNB!J\0eE]1:`_X\Up/Xq@4(fd^8PC9RDMpEJ_fr;VLl-j=24oXHjri!hQ!2sl2LR%p4.je -Q_]b)tIg^#q+)4YqkMq1pgFH]o7Q[e%r_&:`]0M=92@5l$E`E\]kWX4sQND_.AA1<&3j690\8 -^$\V%!Q2b/\Lg>>aUAb_+c2^$*mE*R"<'9WPtd8Mm(*dgWCIgiJnq[2/1jZ[5/jrARAKW]&6+ -9O`;!?3D@t*i<1rC2_@fC/ak[E#('A9%cn0-A^BR+k$6Q/WHjcK)&J$L:g)a\i0bRA,X$9 -ha/5r&@d7FsJ,6@20%j:*7;6=aV.5k*ml@pg'sdPE8sqddinT5 -FmdpFi,6Ymc+/-Pm088@#.;41kZ<_`]d:5_hW(HjoGc9&bb,Ae8O9DjS<^mp8S+o@Bk@n"-%l -d0V?)"jL//kVu?WrJq:nm%_C@&IO.:g;"W.YH,c"dD,lB*k_6%q+VnEYds?WXJ%_?&=s%Tpj# -+eeB-*meD]Zr5X?+_o@U$F/N -N6Di:-J7)hc:-l#U?%l-p*R3)_U?&c%]:#bb9._4Je^u:C=[[?)FWEo;Eq5$#Z>;2VBiVdt@%r>u&Q00,oC,VBWm&(rAm&,d% -I317mo[knd[nF_-.Tq^,X*g6olW2/;]PEie>D260uPadI0`'1]d&ioqO5'>I#boA%eU>u*AQIq1PU)^- -YO1N?,oT$neWUA&?aaX@kKL@R-]3Y`2".etl1Ed6! -s[D)p8@TH*YllBNK?:aC9G,jM+B^3Z0u-lS!Kr!#,F:O[C5=2l;D^Oe73o+jBgW?,%(-mp7aR -(Rfg4.HB;LFTg%:hFGP4BO0s\8enm`XV+.^\^PV&[jjJ8$SEr@lN#2p:8&Pr:1@2DK09]5g`S -NcpJKDnQPrF4B(E4H0N]Y_*BM(`U>-G:/kG6mXI,d5@KHp)2ETB^3.Ut!fE#k"CGUf_lgND]!?EVspk`_\?FZ5OYF9 -UTb$p3d^8N`]W[ap";&)@pVmTo5RcHIN8e%Ql33np1W`'&6(#=QlWn1mXpCI^__uo4."A_ij" -eGZL_E)Nb-e1'kYr]1s[Q&Jb9U&"AClLc(Qhf&_QL+%gBrtqpPb\iLd`#`+Fim=5`1n+g"OS; -I;\lcX`KRY%%lq$ISY7cJ3-ADG%QZE$ZHe]$WtI;h[a'2D\TRcRR^%cfo0XmfrF#R3m$4s/80 -pfZr_f!=<6nasNZ70(5g^6n9Z*OO:ef[I9J`(eTak/jYH@I4M?G_5r,]Q#VN![>p7Dag8EL;e'CpqCX3dEDjWF#GX6@!gHbdr>Z/m?d6b1Fl`6cIgic_Ur+t>:'sfYc#39`(X2$O+Lah$omnFZ=SS0<5T0nCM=?U9qa9dP+35_!Jt/1Qh/r]Q,.0A8K4UTAW!'a'Ac15h -IlTBEPG1W;#0@Y(+,GW3jj,tV$7I8Ye\EFC@NPquiD^F^aHf$`#2ai[+^?`$+WgZMdteVcm+M -kBCiGuI![QLNrc)Bqq[Zq//lY@!LID\UpO`SSbASchb98l1UVb)o,"+Uq8R7iW77:Bk^f'C+# -WDD_:b!M-nJq5[\q&q]pf+,U]!]ncBZ'&-d@djMfE[)S2Z%:WEChjGt`3W)eJ'NLKsgNIZk9:1 -%qT7G?mLHWNEE_%[*7ofuC,nGq$<\R3bgM=b-XY@0q]C2Xg*TNHR\g_/[R&JR=QOmC -+&TnuEaN+oRp::dU#rXZ8XFLt$=Crml[Vo4U.SbR?0D.9uf)'?Aa0&ND9V9s:L[%coj>PMZ!&2*?NW>q.8K5Qmpd[V3rM8D4Y1=1e2Ce5X=d4KDMmPjI+\)X,"0@NPq<'O=bcB&WrL>n\A'p&te.Kbl'D]eK+QjEat36p6 -D<;5^+GIDFhnf:,Z%0K7o#&V]."NEE+*-%7ZI6;E9u?#MVT6&qtP@25E`S$N0$\tgsD2cSe&$ -;HT3iVm(cbT9?3O/h&Srn6pGT+`McSSF.]OSqLVFRY;i0pq`a`i -r;`6%eG3G_=!X^&M?DBJ3/=qG83>c,K[`dB+k[P4:-8P%D2`"94egCRWn!CAgBH<^G8aN+'ge -WUB_?L#H7),!_Ug$o=f1;BUp;`E9rb^,,bJ[`b.62E"IVI?&Q)PGcmnd^:k5Kt)VjHE,YE8uM -9W&Y\ed<4%`)UBKk"4$mI26lo#+,^99QnQo-ll5'Duj.9S-?30nB>8G&(Rf[JDe.V;&SnNQ:_ -Tf\kL'CjX^75R5P?c.NF;P.VD)E2SX8qcXrT2_pFC15P[^uCpWhf3`U;Gar7(Gl/7;0A2MJT* -e-!9[>dK'3_k9mj!#$2ARiWW!89gFqX*qB6d4"7>_sZ\^k3!DUeL%)&M#2'P<.3*damnc,C=# -InFKc7EL$j[BEh0Tn.+.1N:"fXXh#!p:#[i!M=W%J!L@C3Wo2FMa+mA;$a -DjITD:Rh?`*&4aC4'GO*^>7EVu5LChRr_WNjpfo]ueXdafU2q6"E"`T2I]B735'25*!oSC2dM -dCJ.aIX.>fmIEB`9DR2,/SU_L!c#hFSebVC[nMpB(qL;jd%.M_NQ> -.@`]`=^^_!_g^!j'5e':L$h!&#=89.T3RP%h,SAeY(_$UW.naLdsBQCf#i6kfXol^5gnSa*Rl8Gh(uX,8B -*!^h(l?`r#3_h%VrG$T]NtaGuOZBVd(,l^<#4>"4tnrB-0ai=#$T\oq:LtbEfJ+apJ7+"g=(r -X6P]I3[u<-[+H>O;IXSG3jI?'mM:ZE:d^B4`dt?K\#/\+6mX*U:ZorB1i+cG_3lLPYt=SgTNS -OZs/PN/9LuMt@oK<\"l5h55b_)iB6"ul&_R7;X>j)W#AN?POBKu]T5@ZQef;L>$D\2'm -U]\1]bCu,:Nn!N3XDD#dalX,`r'SDAjUVK$aDeaNBqE(Q7F/p7FK4jN^60GHDW_oFIT>[,fdD -fJ``*,5%^NGTkl-UOnPSP>t:\4F%#\do,t*rW/R<+Htf,Q,??D.NC7iGH.()g"W_n)Ai%[((8 -5UgoQ$'e$9fk!I?;DQQ`at?piiDQ&3I@Yd\7?,SK_$cG/tPV\d;r"mk7^"kP>Y)n%'j#M'"q%e12mnc`+Jd1Ao*0pFRQWOdG)aQU6-n9Z*UfW1;lY>E?JF@Vp5pNj%*`LHu[4!).@'!P,NInDOK -C$19n9(U9&"&NpqE2H[@Bb!Ri%]m7?ogfV^&fcS$$'NNhCilTg=ZaOVBW/^j<1 -,hJ+77J2P:d4&T=RYB8q62"clO_["`mS8gI#JYW?LQQ -$\B$-tO6s_L"=37:I.U4HPkl[HS/8Ot6X3HpJp`(Y!SYj!'VFV_5CX0'_i3GaKoX7/6Q;f:6q -,"5M"=(K!_t"!$2.fHZI*$@d=$glrL#n].X-*1EYu*3ID8?`2b7Y(.Hbf>'P)L.4SDnBrYrTU -M?ELo@1P@?'>b123_[m\iGo#OV@gQi1;nl$e\"dQnQqkp+a2d*JuR`pZ,!D -\>eD>%&1(T5AYF/60\GX`8?@&O]T*$f2lD0Q+i.2mc-O;I.O)aar"j?2sUM`Qo-:?AQ/aA"*W -0SiFQpK+"M\6e,h;PHM!#Da-#dL!p),p`5>pgl,ug39I&/ttc\[]>8QZ_SLM5I'H875tm.SB[ --I/QPO>V19.flPV3KB\[q?QhJVQjt`4K$$!L9VT,2c8$2q1g4p="#oc;B`alQ]D)pqfTPKPJ5UGn[P'!k) -A2\S+HK"EOi(,)Z%]h[E&b/kUY&^@5;U7p8E[OCd:jCgJq8Q!4F^Hc0KmAjCH%6RY266B@i(m0,KY:93C@f[aGGSE[Or26mP]]t^d'9`X)s>`^;9UbamZ6a*g -2pTS`2n$Bgd^?:1G6D;ghkH/6'j%64j3.+!5ArPLT"sA;A"3Xhs9s(KUrICj[])nJg\tZPZ4- -1e(bW%DPgYg*/Yh>#?:<5M40nRh(m!I?X]0P*^k[?q]W#=p<[(amPX -,:SunMpWqoHfB*b70*$<:U!P;.]hbunjOoh+F94>M??S@>c*r;B/8;'`DY0R(F.>]VD[hX=`6 -TC!1chX\4/^fEueA"d@-Ar[)Gmep9W=ijJ)YGp`i\VLc/tfG7iXtS!X-%oZ?RB<[^>IM/C2s:s`nr6@(S&Db;?"7Z=0s[0Lbr.n/ -)h+P:W*XU`bc0srBS.nM*=E2!N>MXMFrQM"IX6AX?+61Z4!-[*<]tmOI;bR1JE;SEij:CSNLj -h5&Ta#Scnc?30SmG8=aECNlTIdRSU5d^R'XG\'@drJW/Cr,9q6a^LC,!#m)Z4H[A)YT[*dChP -a:uC&]Vj^@7H!(>gDW=8igh^1o+%PX,4sQLpg^f]G["/VoL.sRs5.WfPP-+q0;hI[#Ncf:-6b -R(pWbA-),JcZ4b!'4,)VMRnIU"5l6*G($G%TRR&s@c;I;]l9s/7c91+>79"@$Q^TsmF$r!k7p -ACpqCX%@">a)\amd`g<3.,[1`JK(=aPOblD^)W5PhT5iF4IBj4C2fP)%l//maM7hc$r2g9[D0Ub0 -nFTKW$hJ>FD)ID'l!K_1?'-&%/+j?ifLZ>^[7W%IUjB#AO\X+ketgraLfBi.@>23V#mu-'j&p -aEUNkEHt7SCE>n(6di`rW.j9"\M=%T8A7DmK^`?RF_g,.eGf"O;16P>;0^@8JR -@k1ho@b;0<:/'GnG#c!tR>V?Zd!U3G`jQSN'(">ouK%V5et^P?d-EN%aem5$NqZ:r`L2_u`5a -g\Bj/Qsln@M+;l8ZlT:i1b>KUl5I7+;DC[9TGg3M*81Re@nuG#Ke1h=5dS?!TqII#rlGD1I0c -,dL4b>`4'.VH=Z39HtR%K2ArQ6CRGCW#^,bCeL-B7!`Fk+c7E=r0*4ltr)-nG;9_I8q>UBgV* -\'&V=uJ>no7Xc+YB#*i9OM08.=Q:l&tYBX^rj6Qk(0h(:YC+4,mCn^b0k+4$fJmm=\sC3n8[f -J3IgPrEb]bOdK%J9Ot\J31(>pNI\VDP*Vm0/*`I6[%p?aJSg?Z:)e3.\APgF_=\\ebX`/YB4( -Il7LSHYT`p(H.A8oJjh8o;@[eWAQ1h>g?ATM`SP:7SM)CSICp$+V&W3hPQq"bFE2$dBhC6.M0 -m'F],BVdD. -:u'7"WESd[sCj+rG%lf:fN:aE)U$(J??4U`XZ,-+TR,pIOf`#N1ir6K-2O&fE)C7kUKJ9^@f/ -U#BVkjdg=Ti`2P;s5[qd)G4`r&cB>QbimeM_sRQ(>G=d6pASeKdRa>]=B5/*'CDkr4Ii[!LT"X[WI#QgUL -&eZj:RJQEMH[e99Rqd_F8TE].:*#_KHV.kZ+QNs!hX[W6JDk>$:g0hG[_+*c:Y?JQU@[6^O+m -$<\tLD4Yh[ACfGq`ot:5CKAgu3JNMM3N9asAK9kG0i=* -O^MqEaR'-hhaW.Ad^^,qFuB5$>(j6[U^]=)*i[aQT;0n)#`HY1Ti:$d]d;;N$7/\EC.R,L=A[ -.pJ9;,hmm`?20c"EjF@h(o];JCO\'Q&7*4G5?I-P3cCr'K;,+Sk.!3Kj_%qK;Q#_o-p'm-20+%(gNUo7A(0ZpnSWM@pm-V>tGJ@\&eG388H03Wq"#akl1M^srmVH$OV]i)1f!/l4:UZZ1 -'r`/B\48]?gZdM^)]:j55b.:c/DW3G*TG^G(1C[un$4[7/f'pn)7nIh@eMWeS&Q!d)^61PXbp -J<9Au/1,AL@cJJ<6i4A>"4K^tI$C:e$JSg5UEWD.Gd6hQ%2#SlFa*@Jc^6'L -:M2aT8#;`p.D9Pf][0,)(EidQSgSaUfh`K#F/uIH?m>(hIPNA"pU&F$JRCH5Bq8LdUrCCsX+F'5CH@Fp=9ecVE*ZCa]`P>/e?gZ>5&DhW-G -)qr$CQdABrr!E%5OamGR$D4SoTmm'H[dZuc"/'A0N,;k!*?&.k9PYob!RedM8QjO-8 -"O7!N)XD@>7Jp!jo*i?'dl^3I-RHKJ[dUKs!iMlD`2CSTmieG&I=KEG -'KAHAE5p:U\5eR2iqVhA70(+!m.TZ:"Va -\`7`1e$^q(5A;t\mAQ?ph/Ws_PeMA_C[E>>$!s6pA+9C*-/cNOD7.,@LK"ofPT#t$--Qtq5K0 -cu6[0\G]]g_o`!$,A)di&]f&8g\kR'4>68DT$De2\#!@8toi"JH=27'=TcNW\p6C)r$S8p>B& -Q*BP"A^Of3f3N#0^Wlto)r`K+W==Xj.E6-We'VZs% -bKXJ.tE6=4e+3u@LYY1"6U8;Gk1hW>_s*P\76>M"ueU9EM!/-$!Ri#U\sTQ2#nuG:&dkuBI+`^4$;4KcYpXoQ -QdOmh'7rWH7VK.j=dr2pM!lU1`eADPK4@EM=\W6p`'9Yh\n9sj(U5gO$C@XFafA\3AnBaoEf$ -2hcfAF.(V00Nd1a=5Hd+#4ln=&+[DA@FB!\YMNT8S'[8HZRG^\^BTe&>lAECY -.Aqm_$H7F:lIr[-j3`K'i85S>.?C&o@1_g!@"gH(;g4pqTD&Wr$5;Y]D9),Y*!od_j3<@PU"I -QN/@W@LTW'aVbJ:1nF*C!'ftTG$l;cdb/HWJ0EnGfa.4@uO=k\3r@=\Wj\-N*Y\r2RX7`VAe( -%I/>*Y1iZ(%"JV+\1^UHQR09UA,#5##JFLVZd7-0,J\6O_MR&jm2Y-<<`$P"&Eh-FEGp'#<#M -?1p#mD'g_O0r,4h`jFeu2a//*qo>'kQ&RjPWKnC\$egbMU*iR>XqTf!$FMgV&.>C_-4L!mXQ@ -M^lsHk^:<3\T86tr4,dm,U9^Y4-a6h)R@`HW"?CqF#3_W#Qo?c-?C-Sesj-X%Te,(f/M+.`e" -(2pp?q=X0#MgIZKUJU6RL^``+*q*+_=GA'u!4T)OZU4V.Du`kb5N^iZg ->Cm)4Fiel.X@*p:9b&a-#fe;I`D=dT[YXp;#pFh_PE^uU6E_jAe19+Pn+&ie([C0ttkr=SdU" -#Hi8Br7bM4I$c(8HP:R\CtT<-Q%X0J#nO8#Eq"aML_5FMo1\LK%PQB6?[f2f9rW2n'c*%;3,1 -8TJI-Bc+chMpK7jfLd?36CZOAiWFNt^@s(\n!/D4DFUV%#SNp`pD%qJGS6_(U3-)$VMNnT)`tuW\Q0?/`D2cCon237)B5,t/FPZb8P6Z -`5lua.#Z_=XdPhC?/b^L#>#\%f=;VF'0_-dBis(uR)bf[%41mXUZ9'* -(:r(L64l%!#@b6YZFr[&0SM^JaNRmEs#;SHVhe7!E^/Ro2+PJYS-cdNm^7]bF[e[ZJ(pSjH1$ -;@=jaVu[kIDr\JO=c5fQBd"#F?L:f:Q8Q[?uat=?\Cf%=QL'cs1M$"a2+D.$@7ElF;IF(2<2+ -N(AJ6b9I2:37Gg_o&6,'+7=Z$>NUUl=aAH2UI]T'eEc\27cmD#7W:a7+2aj-R;>^O6Y0'$C%! -?5c'kIsSue!uK$(dPWjO"h1`Z3E`3de&bnJ%P.5HC>]g:g&S>c+`k/E!H#F'EF8[hQ]0Wi.IR -6<:L#h`TAhE'2W<6.XSl@6e#k!@$IKTt,`803ZS*-DFf\+OW,MhSNbn'nBWGBt3L9Z]3k^dg=P4Jq(stT4UlD2&hbuWLTfK!B-_Cn;$,+@3GZp$`//6o`mE,?k,\boFQpL;;E-J@06 -@D(au1I69AAFZ!LA,t$Z+06=42>UGe'>*?-1d:,>)d.d.#,uCD+aug_[2Q5`LZRW47o@!s8Lm -(p=n!ZG7"C&6L$>&0I\BE:bHdE9Q%a*FC@HIK)@B0e'Rni/eGK0#FI*CH9WujT\ge` -#rkMNDs>1F!0EuJ1qm(MGe8(f=[T_SA%Mp&7)bF=i3Bic^-RPe9+k'":f.='inZa6&mG"%C;5 -SEUtRnnu*;5I`5j21k.L&G!*WS*j%V-/&qW!d6p-,8@[="@12&p3Ao2$9%YV1<#l[oT"knG': -[Yk\GePjqF)'l"eoX*T%;_D3)D*33E8$b#_cd9D+BR[b-;333b;A -%'n4U(jE"BpBOJlS9d\Q&J9Piq+[=)6dC!t>)_T/j0-!$W(^.fMq8pMHL[L6j%?!W&&n8S;"2H%p,in5$GcUD%tN!1k%EKm -#3nD`*^9o?g>#uR7^]eT4P+SKYV'7S(2'reo3+Mg]ROFLsRJ+bnG7Ao0F5'6lokHS)gd6WfhD -N,,B,jOY_OR!LIMm[d)t`knQJ_d`]>.+=\#'#[k-S!e;%CXHs*R'p7OC@2!++WgJk%!5uCc@_ -+TPYa7j9oSMIAEL[YefKa!8F"UJ1jY;/rfp%M]q5Y-oU>EfXiK=j3"sq]*)]Qls'Gti1qtm56 -/7]OdLu>&K)dI]K?.R.Kf=,gp0Bu*HY3'n%K4qp%XcVl:K8@]c-2a0r\DX/dMgk^`]d1dZUh9 -mnY%2r'6]CV5OqU?EaD5A7Y=GJ`rB.;seKZ -SJeKM`^Op0^(cR=?N3_WlZ'\?V[[-mDIt,&K$V,R*_fIfNe.O/PG(iMNKq`KM/`4LlVG86*#H -e>0!f.IZ<;99/9p4(^ITr`eQFE0HkNhd"+i4n@eE4CkEJ`I1CH6g^ -=*0TW&R:a.]-?N.,AhMA-AX4.XZ.p"%s0!Bq)\+=4k[ISN#UmB2m+9'UMK_dHLHKrp!>%_\iF -T#S'Aj`"&f9WBCO$r;,h&,dko\KD:.E3]M+Bg!:kidflpE>Wl&POF7nb=,[F%-kNXnELH].Q5 -GBbi?MTEnpHY04k.EO5e\>glpPM;]ehE*fJUpc@C]-qV$>01<\3nd0*4]\BUsi2E>$^R+sE2- ->PW*?k`]].AXu\ZDlMS^I>0W1UPPB`=uA1D&rUV(!"OOoJ#PI-JfG5p^Ic8;C$sZ1Xq$&!kB$ -(h0V&9(UOE30=u6S]0=nMZDg@_GMOAV?XIAL\%QH"V&u3@U+_l-e>?@L&Sk37 -H3!AVZ7-)P4i0E$X*KV>`#t-Y^'iJ>QqWI8?M())bufEd%*scGH3QV4!IkJ$;ol#nbsoq6"Lr -5Ve;UNFnE&$im!k;$J$$:XukD%WqUK`jnC]_Ji163!Ufa%.r4!;/\^mo*3, -%bp#_O$sVq,%.djZo5T"^fj[*c*l -I>IhdVVN' -`A*%OT%=gL%W73;kp<,'NQ5%2@U^^T[+JD17E+uX+roP,:T'g*^ACPKrA8isN@(A6S5@'b%P0 -6APBf7P/U7@Oc8N-nMu?58jdV"WE2-N([VLl1UM:$PArW[B3C:eMgVSC*"lqHO@c%e'i7"8\d -?KG\&Tqqd,=RIk?R=pW)@YWlkJrW@*4ABmD[K7QS.s8sqif2R$(o)K-6rSJ1=Wq&,jat6A/[O4MrZg -!9ZXntj$?rgE=NJ-Vco\*emi,d+1h=:#F&$U2Qg?otIqbHXeg%4tj1B':G]f8Aki:5YhMl.9e -#>F;0g(3;[Bg#\&7IU\EjKS$jR+@5@7S#fa#a7ReIbJs0`4]1-`/8sDjWDqS4mNcnmOFb"%R+6B:HFa"T;r:W -Lm38pW%WY9q8(T>fN?MO4K-<(DB6]Y=%_O"\('!*nst\Xg?S)VaDc7DJm\LBD%jG=nap?gY+s -*7]13?5i6]]DfcT/D$27\'&2Y%C4Y"cQ,S`BFDl-a_`(bj!EBS`ds<65?QamPC.-4,*o`ggOA -=ABm%VcD[-g><&EeS(.,e(]?JM0KR@_b1-MJD^U$u:HdWSh'aZ*'SW7<&EjcGiA@`bfT*?\\/ -SI/4uCirq^VD,Q?Y\qN;1^-B_Jr;+BjIdj,rd2pmBjYT(!-TnoppsR5;V*_jU;:s&eXL9\/2i -u/WXT/T:PU:Y5T4-2nY/kc0>q%"Tufu@j,H\X[`?&@g[a9`%j7k=BEif:Y!*(H,p5Y;ijpIQ- --F&_dB]JBF+@.:\;0k3%Gl(@+5sJrH'3%r,dGN_C];C=c2a`d%CXu4;qfOV[bW)$1G+HsS*5@ -C)oJ9D(N6R=P-MFM"?X2d[^fYMTs9u%RiY%*N>n4W=!,DE2,bn_Wgle0#uhtl6%.ML%7u!<8< -Gej<8V!:HbZIP[kbnYHPll_7Sa%+)r/QJ5cOj0H/c+'")qu^j?^':Fbd=_f"DDN0o+NNAP2][ -;m[0cU.!P_=F,dmE2d`6PLP952kLZiOt\I#PcnO^TZpR-\ZE<*`@=.8XM@WPe*4Sc2Vf%KV+h -&[,-am-lTDu;WD+\]^I5K:*pW^(/?U=?p7*LeI=#OO-kD[m@3Y"96TPeR%jWYDrbXtJLD/dRG -qIKWEi?c>W/to?^f4"aA"126^XM2$Sm,HSWh-ELoXQA6VSY+1j(jmS)U)?3>L:Rer/[ -m7iDXA235eSr6F.(`L<9ib,qiauVlH$%KS-R\Oe#)GtKE,o!1MeE?'Me!slXm]s=LH/?bLf@U -9^J/!6kJWa^'I-hMV->aeLDFBTp)lWpgJt94Jh+,4EK&EADgdbn@4r^dsUpI -iHclU;Y0O]s#2;0\.:tb8GW^S`0I^7+gMe5`U;)ZDu@qe#qc7o$lN`>jk\I,BSOKa$K1"P33_ -9;c7$#hR53I?8i'ic^[s(J"BgSMlU;eWVM#X2H9;(;PAfs_-Rc.4\d3-T%ok.^9 -V-?n6r^/D,5o,5DL$-KgS&D.h(p8'HL4tXtiqfTWk62fY3,`h?K-Uh1ENOfIqgXHJP@/8Gh55 -L`Q.,F-R=`IMA2`C&mRq`+G3X&*\V[oW\BtiJCs4\?jmA%$n^>XUQDT;p,$J/aBOnN71Iofto -oL&5$_Z'Xc.FB0bFjM=B;)mpTJ;956*''m9AV090#s#>^?G:dH!:n-1^g8#0>m -s:mE!djX/EIpfY]_-j[^EH\NM^#A3A/U]I$%Cn4fbZ_)0BK^Ahtf0hH.Lo -1_l,:=Ws?MrU+q1H$mU.r*W_I&onNF.K"kJ>il4`)(Ak>+:F1GDHWggSAJ]1mFcg9-&l:-ARI -8)9!^lX[-*jT?U1+`Re4"@kmXP9a\6IiTQ]9$9F3=_7Wg6O@DRmNqU/Z`n`=)aD;WrllmJfI( -7Tdt=EN[V1STkHZ1):D,;*`P-i7!a?GIW3O -:lsH7`VdenI^6FNn"?noQCgo)[RObYT"ZH=r(1.sMQU#:6Q-OYP[e.*_Z%!?6.-KDa>#>Gs75 -rA`9NJS>\_jKFPuM8:0Fu]j.nESA\pIQ^VO*"V#EE#F!"@MB%obm01mXB^SHcO=+tp8mMQ@a) -:_mDtd;4Q/G7^"(]utN4'T4X4iFErC4@]:O2@tKjX0!He5R/S=**s9S>NL:hnj)a;#3+[RCTM2ZeohW0/(7V(=)tCm!qI[e]>Y)CJ7[%UDqqn5 -]?7NRXtN6+kgJ`K(Xck<=LnLC9)L8HS[1B`]b#0#=]@@ZOE]Vih2P,E5qhh-VTrViNF.1\5#` -fp]rb"N,4WCLIqZsEr#coDnsN(g%J;e^X@sZl!UG9^uR9_!_"jV=<3K-SZ(kX>c$u*nqpGkHqC,7Et+/r,dk_CTj4Km6,ZVX -O3R+`fV:)m7q\tMt<%JH,=[IU1J>jD?0C^>6$3[;NXQWPCZ;<6K,&dNYq%J_)KR=XXu[3RF'H -5pAe8:4]**)W?Z_H&2p)PkMns3-&JB<6Q@<"75s:G;if-W>DCUM@WduJbPK;rM0%^I;fC?crX -L[a(*r<=WnSE`(A"lW:9uiGK^]hBHeS2^7e/unaUE5ZJ$SZj>(oWar27_27,DB\=#h`X_<\%k -kCr`+-qg7F"]]l=4p8AtAY+I%]3KCK2k:rDojFcIZ+"[gYVgVmr]%kO9bA(6T)maOrR9qi%n1 -ma!Rf`6SG=%.LXRU*g:$X*G%PTBK7;2C%t -6SOQADiD9mRUX/`"KX/cjMd_T;EF\,SNn&=8l,5btB/+%3L`S/fV_5>+k0CkA>*Ce7*09!VkN -9?X-l_mHL'/jq7%B@A(G6GD^UZrk3KE>oU5TR.\5\(-[pnmbq?L,MLX6@WK]omY1L%^Y:1Zcr4uOOQc)Ra>GS:I@a7_j6?$jCN`"]rm1(_' -Z(>DFO5b!rO/RM!E88Ss>i5u_iI1k(h="-E%f++6>$)9nrTf-BE'9rVFG\CGEM<"X1KehROpG -QnTNr/P7OJZ0MGU9U4k6VMlOa%fH_EH&Z6Z+oFJ,:FcPuX3q=L>,f4]1r,3X[C]d;PKb$ -=aAp7=%.]i-`#g^"C$.h;-r%ODjsn21B_XpjTK[eU.1Z8+Mr^0:qUm2P9GEbcqS^)D?g>o>>t -T;O??Hq49o?@08CnOYqMZM%1i[_6#T$g9:Y-Un"+!LY@VLpU_UM@I5&85!'4S4c`YEd0g1u*o'.U%0Jp*f#sAoDM2GVd/_9>K<"X?p4[CYdd.7HZ*^W -T+*Y;W()Ek+PC!?OFO^#A\Bh0tH`80:q#MNBdXB;uV"_8c,#BcfKnrT'A-*g=Poice!g'pY=gO3p\ -H2@2TO:IKX8Y4rhoQ_K\'*KNj)dRBIa@a..ds$2+Ia/=,*2,6grTZD8Oh\VZr`kcjs,D6koW> -SunY+:DNiR.=\Y!EIh*'H)4[l:$?p$Et.SRG1BL72(M&D['1">BR.&gnJZ1!pEISAm3N9n0OW -2SbH=3Gl]3)T=?pm\lF27;=8'IY3PTBpe/:SA6>$+EM2PBp,jP^T^o%N$u^r"M1sh^iCkbW@rsE?iBRC5)l.N&a%o78D97*A -?s"f/#ZPjHXRei0SePPWQSb,O6XiW%Nn&J^__/3cc<];1`Vm1OA*+o:t_4!K9Y&$jbg@=^_$W7l=)2ftL3YqCj8JZ@ql,7bn+j^6&;g -@_fd+W22;<[>B3)dO"\[nWdlL:4'p&V]"RP04]F`1OVbQFPgTf5l3^Y*KDlrIE^"Vs2JP)oP^X5rP!86GM -??q=,l,`C9_`/5.qbRdg<+It-+=8q.mfOQV]*Gr16$lc,oEeo4o/#UckN,o[E!?&j)6madYMD -K+`cW9P!,lP2PjnLs%q;a-kEVr^c&QGqAZ%`^cHoSBe+G48/>hAq)qRP$M_b6+\%(O,k_>JTA -BTO8SJQb3(ZK2Cq!iT9Bl@MoZrm\37+X)>\BSs%#4*iI'ETig6j@'=,FK_:s"=hMCO%/^M -b1t4[Eh=OWbsN6:FH1bV(lnk\eVAL8oSqDjS[Loe!+!e^b"J/'GH(r+T<=4Yaa:W]]QHdNYis -oZ?\lGe41)\+>ZBt2lGB+)Lq,`A,^Z2No>BhB?.\>d-UWt189Z]t04baXiN4ZNB's3/K_2Po# -E:1p042GXs20/rK_XtY57q_W,sTMdOnbS23*k*Q.Z7&A@Ee7p`a8Y4Mrq-;2eMi8BOI8C#!^p -f4d4Imj/ZVs(7h9&q[tKckM+0VjLYuQrtW81)!,^dP)@m"518?cdPOO9T.h^/-jcBNsgFu@HqHK -\pc/o.biF[XMnXm^dcShQVX3shtm2I!u\X2*V7dCP!dck`=8$u4m;Ca!=VOVa_:8fM'+pUDHkp,PkJNTG5&o!.p*Y*_+7g=:"/G+Q5GVVu]$ -"[s,JBanq&/TTl`q]5k>2jJZ=s;!15&`Tn-\WLg$AXOt_bR$(@_N47?.WXJ,lYpEioJg./jf? -omE$A%L-"[T*=g\,OWLZ$.;=f>S=LUZknEk`OjRqV$"uY_j>Dl:Ys)"U'7_,)kdsp9>[T>)?g*qV@"O@O7Gdi -a./9DSeiT(Bn6[,;]%jLfA@Vj@.Dd(b+]OqhX:AXi_LRi6I!l,^O?'5=Gc#5YS0e4e[i]db2G -0O2tNBF]75sDg?d[>Vsf/]F^49nV`)end2$Z(02Q3P5hqQQa>_SamDA,!%cKa?_$s?%[DYdl: -jKO;M_1#e1+`?BmA@'U.1.(/9m6B@nFZ8@r%uV.?#ju-oeE#/Noa'gIMXV3V[GN%qNtLumJKW -Q^W"]Ci[XS+(2_NTdHFWOc!7[5Pl!$[F@>Vjl,F9`SdUbEF2jtRUZl35n,8hK:.7Y3p]KeaEq -$PCj-0S.3::7tGNJ:KH,5$(JdH*rV,($\#7[h -PIqqJ?#n?Ndek6Ef])FZf2(Nn?"3nue+DS1,Wsagf9-dO(p?_dmb4!\Ts&#b]43n:)#WFRj9k -^UC46k$?(L93*WP$j^7MfR/8LGAM%(@G6t4^o:"s^(V#Q*-RHS2T+1*CL\UX^,K<=cgcupW(" -UZYW0Aip/>O+O=E&?1jc`jgX-VU)Wsd+f?]$\?P[R2gM@?m&>pkF`ML__XPL)+L5 -iRD&]L^T1m8E\W7)=8LZ[AeFdcdm_9.BBE/hWS^i0_tCDV@&T$hTX-k+=s(o]'?d'f7JA,QS\ -[r)3W6FF*Mq`S`*8M@"7e7nN/Jr)^\W<9XUmW%$$u;FD_k(8&i+h1P]LRg(hCpu$ssI6=,t8e -4JdK$'^p))Ql>\aEO593+AthIRU0SF@jVhq^teA.5*+Qi2KY-8cYe"j4/o,V6g*Fk9c&bU1B" -ef5lK6`Ub;(26ba,E,^Xe88%cBp6il,_S3!"s!EPb3E1dM]Ga,jK:VbSGssFifVUmb.EDE(3SPR -(#Vf>8`[>!0nV4&N"2SGWm!2E9f2I])(@eX,QaJ^4L"sbc/V*]T?MUm*jbWr#$W)P:fM($oQ( -[.]U81C:Y-Tc76]3!H(*RI;t!3P]h?Au?IOIuS_(kqFmk4cXl:72 -WFIRUP&**DNj+HuGI.?`TH-f7^TAE9Er#u,1d(Z7:,7(qur0n`UQ+Lr_M_:\;c-M.*3@F>E[Z -KIgEE(8(;)^\X;jB[pWWG`#"9S(/arpgp:SC(qm\TSuY7qMJ^<;S`f]^^:]ERa>faSUO$i7@K5#:M! -PPFJI\-*?b92TOiqJdZo0.[bpG"Xd@5@^Y=NGq96WVJqM_\N#0ALSRNT`$`R)9FIK5I/,HRo4 -n8j/d5B^L&c"YU%+W!+Zf&YEo]k.a=Dn")U=4a2;hTrj$WHN(+T''4^0e=VF]:):Qkk>a8bS, -=!KVp:38:6%^)auGO4NOIo/-`8?SYs($(hHJN`5u3fs>d37>eL4ih&Qm\R<%+0/<`lW`J9D`(<3qr -lTYKBfjl"d"i`e)GP:?l)+kPQXA(DWDH7C&mKaWW2VRaWjY4#]t)00A -_8_T73UM1'e[$3cn\.([tY=LKp@%9]1S$,'28)/0\3Y]GJf[\#$qmV`(24Re)S=i5_$6$t-7: -;i?#D]"(2Cp#Z+KbNaf,5U*Um+,*bJ*2[CX/Os61Ia;D.F_k>Ct)T69=,"XDAqY1c?I$%jJ5>r5Y9@:PT0/":e>a= --e6.Ia<#]?l[OqEqmP'U84Up;(4B]`&p\h$ZB6Sqc&c/iU,4W+VQj!8GVb^UMG-ql1\&K-C/" -99[m2/?d:7L5Ol0aFTd39pZh#+(?6(hj)>X>o^+N&5ohe=q4q=>St+8_2Uq(&Qfh*:nr9&1hr -l^sJPB`T(IGX@?.S;g$'s%DgILrCCKfG1r(j4mOsk^]5#u;7T;jriken4G*sN*6"lJhZ`bi7@ -ka>m6U'$EEGrRjX2cU>O4_bZkB]]L`TQ*Y]0n@'.lO-shO+L"S%-MJ0^hNO4't9F.6nNNPHWK -"WQcj&TdQcTl_AQ?bVAMR^RSGK!QUq$[o08_EYAi?/[[1QS%gJ*#&?R:>Z9;H*4CrS9;?FPA0 -)r2Wcltp*=ous8/TQ:*oKMSb%>!&6&T_D"W`@nTd7?-5$e.G'Ta;,AAtFsu#"!q@FiH$PMruI -GrtXZ/`[e4I^EftFfco%P98:Mm^hNNj.8Y`O8ip8gURK0DRre0h[@@'VbS4[PLZ#I0@&W_8p- -nsYq==p[/lSK`e@duR:'E8&DKetCZ"l:3Go^e=W2n:mlWR=l!_?,/N#u;k89N,A>-thp8=&l> -60W+8G&.SQbBJ%g9ih%0GEM4C?NcR/ad8lB$'WfrL6h_m92kmpA$f-3Ss<>J#sGtcdCk[9 -AKF66&iXHW5S[]bh9=?-RpK^D=<:QMEQ>`j/NWU+c7@I>8HX^l]hUODGZR3mHTjXkO0uXe%./ -L]rpjj;UR+3;n6X$Cd$Atn\]6/XS7b@]tNGhf!F8A/=p;qRTTIUYhf>N3n2aCSqWc')KFX"Ki -Oj&*+`Gd$D);$qHfg8j@MPiB6\J"ndIl]SD62/9#f?,lOIo+.cn&T3J[V^ufW;>pX6/*;lXd.Ug=CFh2Odk^r$h5C5m$DKm=TKVZe8%42Rt -biC(t)FSX'.;B>sI&`bVa*Yb;4S5a05<MSC/K^9.KjXg;O^O_;3mQ-m\@#=Up.;.;)c$'Kq_^@$>$4:>pE@:6lnX_e'uJ2 -""+,c*Re*.5^Nr%5=gYJ#+1@kR_#V',1lOk$?l1?b'9$:7A#RGF`^!uIMqk@VcBV%G5+0Iobp -9X6h*6XK/Ztc@C#(c@M\a[JcW?jN??*9kg8o+GcGmoIY+DTDM0`%*7<5]K^UKj%s%b8UARj7!^#9"el( -.[U4JoJ'm4iVE$OHr7``"]rcPF>n^.5U,L#s2%hs._8>AQRkD6jc8U(2COHakT2%3lC>$K:JB -^l[Gm`uDZUB&@`[^rFT -lq?(Y>)sW;T/'a4MNfRr_iikUalTL7LXT\@*m`)Kc3+*^s[>Zd.B$l4C:h/l:EmeMt,KCpiWb -Cq]H]I$MFjakdF&Dg8*[N]8kBZT^pk;o8DSj?D[%C(B(:tt.k3AsOGtj:nq+=VrQNVH=N?\I+ -XM$ -S[?mq@Z4t]/3KHenL4"N)/tC.m/]e(KaHVGRQQ+ZQ7JKDZU`)!L'Ac_9ELnfQ7"PD#n"qVH9n -`>uu,PL;pZCk7ji,$.hlh)akG?A'2h,UWi_=_c#gXccqh<\)X%FFW\6K\sH,iAkn\b8UFKrlb -<$_T?&+RjEbrYjT+m3IJ$N]8!qp?ED]Zl5%5=f:cB.:S)dA7>PkgNho;cc,f'VYKuP0P0g/E+ -dlptu"V%te>f?$:#"q]nY:m9.d9Z@]Y+%8S]l`ENfomW:Eu>6>B%*Y0,q-"2fW%<_]2&^^upoa_ ->(oK':LBV)0U/.$XNobHh/]I-n&@Baqeg9^8);PuaOFc?YEcJ.&k,rhQ+f73tG"$:$D,7;YZ -?Ctjtg*GFGdLe0@b_`Hh+C"j:(b@T@$iXlf=],LX`YXhUCQ;0A*dpZUN:@c!/S(->F!AZ?G9' -HWrffRXNB6MW5B3aVa1Ed%B"#LH:>[LlWJ'i1b^:=(Ylc)I$:aai'W)M<;iS9"1%;%[@meObq -Xg?C]l3L5;otA'6=n_*aCaH;-(3:1R)?Leg0KsrR\qRJ5^52_9_?6+@M[u7p\.jI"#>7+`Q)4 -U?PZ&2MWijs(^W9G7Ed9VrWjgBYs]82g+*#nUpD[G&l>;@H;X\@3HAEV[T"(e.:^X4`lV>$)> -ku(ON"R,)I#ncfP70SB$F%)JZ-n&@&[9U:-HCd@h'tX\o-jV5K29`;F4SZCAr5PdY1,T82`o0 -eMi%=Pe20Rju=Ok-8&5KXAm7V-`5>5^\ --[ZuB]6_dOn`$.r-]Nn@L$H=rN[@*:>]K0G'"gp)Sj8]1/1MrO'Mq\K2UN3siMWKYTBCQS?aN%Iuer7WcGeSELH-qkO -,\Y>fYlicF9\L>]i:W3&UD*r/!EVkQ.N?NpbIA`1=CWS_[$l8?Hpp[OiWR/'RG"!_V&]$3+b) -Mj3?YM`8nmCKpgdnE5^G>aH\l=2Z\C9tp[7k7[/()bmN&b[FE1E!aCP*KIueuE()0X`cjaH!8 -<,[hjoWVZ+@N(=:)i!%Jj)QWXLWn%a(8.\"f[0s`MLWje;76s>Ydp@*M8bj*A[57>I9SRX#.S -m+q=4e=QqX)"u/eT"%f`%*90W@5.hD"do['N;."\RGYsCD5'WfhZD37(PJ0k8"@@S$k<&d#2^ -K*MhZ[QhBrrUGd4j?UtlijiI5_mBLisJZ7=8`7cq>jJ<76-G/<&s#7t3l].hEES"^^8'GH:BK -4g)ilGKsB$?/iKjs%LpoDdU$Yu`3T(eK#/WN<+ -nD*22`o',!-N'eb>kA2/;9Ia_JHo -5f+r)`89K(+m#(qLoKf/mIK,KQPaICsY(K;?AE-_p6l,3$<0YXNaa&pP8LT)qd=6HF*]eKEaA -:.%N2O[[l*5oK\c"4Yl(]Pr4MRD;AF^'<-KL'&>"h*`7ei-+"R!OaOHH>e&K+ND=Q2d>,JBfR -9!P;b^sn6Sf@:Bu2V\J$&l$@93V/*ps8!gaRt(.5F/QoKV>o!+Sc=Ti2Gl*i)Vq=(Vj(N:NEh -M0OX<6kVU84.N,.GN0$#@hd3bYeZ/%es88r[L\^.\_jjE>fXYM-l'A$<:P"_TjoXe"-Pd]#L*b_&WO'1Zp[4W66Pm4t6$j62DV -CRh!jePt2LeSG>80k"3Y#*lTi,jH+u_bW,fY&ND1`0=1mg2N$L^MS!DLk1k=4/k3R`.8UE4kdSLUI-2@WL]k#L=9J5E -\f;K?E`oZ<[6#8LiOM*OP`iIPpls^iWH_)>1dHPZe-:0232>(kK/V)O?O'EJ5J_oSBj[#t7,: -?3D()9_h"!TD$d^:.0X9`,;N7_:E -j`">49q.sJa!$3hhRfbR5ccJg%CI/-()%'M#OS6&h0YU8QGeHZi4f3V3:Ti7^*3t"sl'>V*5Y -MUr]"L'T*7m*a*R;tsqbM5Nq?fuh95_:E-bd@Hst+d\0n#'Bf-.A#s#Ho -djq%[i="0(Eoo:>0/AWAYt/i&P+YMlqhLn-RS?PQ.eJ7.R9(!j+5#jq4OKrcg:JT_#3eiRnYS -ns#XZ1fY1HWJM-KPU&;aU-BQUi_q?'-LO=(,Z6>F$W;%77S=sjQ!QkZSqaq7NN=s?;CTR`/r` -XK0i"[q)gil]T*f$:674!%qi!o&;1o^&in$bH4];N!KClM)*eMmQm_slb6^??h"_iPE+\pL\h -!-YM?):>&5oKIs'reRc/PaGB%38G9$d!rl9O;GeRt?(BTeP@_^Q@ArYh-V;IC -cUFYF<+G?pFF"*7-(WYkWQ6[J4tEI7@IhSYV+FHFa%$2rLl/#eE[d2"a/ndCO[LE44lF9rQP1iikOdW_XUDR1S@otV]`] -=0q<4V^Ya:?Y_2GZ]h5kq\LHc;0TT7V7:J>mA&7pe4jb2=MXM8)V2;PV,TMW&,ko -)@@_P4p2ba\YE'3>*'*bjji8194ps+7.]A'@8ojQ:=F(D`Lj<#h8,MOE)tA>,bTu6faq^44VK -7l5#b&C<>\HjEI;N?]dWbfZ_#65.B-cjq]KMYmF28$8N#PW^Dgn((NOEV)C/5]-!qmpk@^s -GJk2RDk&\VA^0ah%TNS3Z.81]>rJ=,Oba)+52;O%fDJdQK:rV+L;^%,gV#Z?YK/!aV60.''%[ -9F8'M*XV'e:Jn3%CbkB(C]!)rj[e&7prj[8Hsl%>.N0^C-A -c7?1a; -\L_?mYo^GEUbrA=HcEarao]^:VF/-4kD>nHela -Z^/HW+j]\2T.Ut`gq8c/*Sg2Z2+I,=LQjX5LPWele`4-):e+'iE'sd#PV_j16fk.*S>EJ!.g'GFrq3u#gSV9X;-^_7qg!;,WBN[W$sWV3/[-\dQ? -3)*%U!uA9"8sG7QZlFTC'f7_e\]9l:9.cBgE71]gL:f%9S+oINEgLgs5hL)dBn=`t91V93%;D -f\IWVobMc^*35iq,_J%k*9cb(0b7PZn#g.XWO'"/CWkS.q\hk"n!7P6&P!RN%B\nS"?a]=&D* -_&CeXq/'mAPedheX.S=JtE#,`R7)F&ZmB?1elDS9gOgB&!7QZob>-&G`$;=dp#;pUYNW.F1'6 -9<_]EBo7l?.oZVTD.VRf];8KW"B_:K-1>>c;HU-OH\:^]D -uR]aiK:%mkS<0;ZWU77p=!:+ie&R>EP+2VZ@iHB]f'h%a_:p)AqJPGjjY+JqV%ZNI@@; -&@ld,HE,K@'C$&"V(ZKMT88`gcW]<,[W0hreSV.#U4ZUr(!U6/aDEY,dV$d(A;bK0E_[PgiJe -gO__jilc?@eqFMPd;E#gjh7eUmSAh,$Xr,G="`phF.B6P2P,S -69.)$a-^gah\qd&3\AHG:!EW/Z:'1o9>5h,<>j3:b[2hL21MrqiOuDSYk+ejd,q2fMN:)f,5# -SZl)=aJAUMKW$14t,*2^Bg`ut>nZ7.Y_c963rOYiPiip6,X/67k$>>@6Zd)K1Z4.;Ud0&'Hl: -.m7=le?b6Si#m@f1@?]Paou`2&2?N_i2_5,;F+2HQ7qr&f@>DSP[S!f)(Mm2j2>FBfQZ#eG8> -ck>O0mTV'aMH`@aS";=3.B9tbu9:dq<*pj0*>4MTkop_`u-!ZqkL4):&UpK%XhEs38pVh=Q*B -(WVIK&WsgOK.4ZJE64hdZK'l?:odft@"(?anS1Tt$=UKQLeRs17?\o%$!Sh,_!l4%/OI]$=W/ -\,U3lTG\kYBP?&mToeOD=lr_efap#icdH6h#^LKd0c -ZLoX"9!WF=0>h1O4hFc^q;43rPdf396_O1fZQ3)G+lcs/]gY!D88#&19MEk"@)[_tG(rd)1+Y -4Th#QMgFg8:/$'%en$"mUMpZh,cmgkBW]738>Tuqg:'Hj?5]sHb[Zq%FeHMQP^"Ts"Emf:gYC -5+E`2uTgV%:0*S::gugosk0`"td+'4:oq-"_I4"f?q!HAumc1^jo_&S^=2ne -8a_AGu,OD0>_WoCgf'Fo/c;lf?pSrpC_D^].m$hS.5,-V2!AlLhm^GMdZBr@b5GA[^fdRtL>` -8A"V]^\c%*mseInK[ein6WdQ?_l^O[h^9(sM-i`[G6jQ2.i83MaQngg<@8m1JAHM>2L32H9 -ZnHG_Lm.k7ThANO\;6/Omc/.9+H2piKf_Qk!L%L:[n(kb?'kAD?FR:%5T@/r@pjp&R's3AXBk1i4f=k&M!AiHM4-tGMUPe -n[+25K94qR%dE7[eq`EC8CpZ5!2RfUrEDNZ0m+SVDVkPXY2@=P6i%P1FQLIDO=nC3s)LXfa1m -.(k5F`YWHb!.Ur;`9qk_51T7(Lge4KSM%as*Y4*qJf;9unIVlnjfI3tc)n\s742b<&jF3h>/>E__RDXm?EUq_% -XO'hdJQBHI\d(aEqGq]0Xhom3kl'Yl6-4aprO?VudYE8atQh:^M[t4/TTdlW3o2fM)J*l^=nb -2ieQ;]H/^&>"2l?.I0T!SA[dd^T>~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 338 287 -%%EOF diff --git a/doc/users_guide/figures/gimp_startup.eps b/doc/users_guide/figures/gimp_startup.eps deleted file mode 100644 index a472b9e..0000000 --- a/doc/users_guide/figures/gimp_startup.eps +++ /dev/null @@ -1,483 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp_startup.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 141 219 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 141 219 -userdict begin -%%BeginData: -DisplayImage -0 0 -142 220 -12.000000 -142 220 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPT4`VK''#tqk'.Rt\;W`AQ@AeGZL!FcCT4"k\4#g.!8ZGgrP9A5"ZlCr/(!ZW8k!jD9%E&r$)pA@[^;;RpJ:-J9/Yj8M -'F"(%&iBF#UJ<-Fk(ZrbMu(FcP:DHtl;]I00qTQ9O!.ANAMtZRQ$:''7)Em)Bs`&jG7cd(X`@ -_e0MM`D?.fpUbcG_&94O3:JVaH0W28FV"c`3!S-J+iMVL_N(k&DB!XgT&A=ko0K"3gF/IdYeE -iQuFmkWaE?/!N")pOB)GaeAB8O,>s'r6o!:7M5AOf"l&F6!KC>I_Ep4<2Y/LG]%=dKIfVS0RJ -lo3jInZCF_Ykq>Ea3p<):DB*"k4Uj[CJN=5^]Z*'Q*A,1PeVk[^To#n:^OjJ9%T>gScfe8:K*2V"*@jBu'.8Y,rFGglo]:mFg^\G]B`E_Q=ktP -jqeW+2tD.hqM,X6bH-Au -s(?Tn>bt$4ke8M:W+%'Q#q6C:9$6#*%pS+o;piGL"R_S32q-APEa4a%U5bB@RSrU]AmA\Q@I! -mi#>`'CTj$d[&TSR*PLCJ!hbu8i;)Od%/dXY52bp7EbR5IoZRU.R?Z;gZ\..Lhcc_U)]$aFl' -a'hkc:(rt5ABgXX353l%)@uj_[5Q/cUs=8S*%2CmKk[nc$X:1]b%WVf1S0`I-nT/r4H<`.]J3 -H]P/\kd3YG5jTWp$O$-#!>g/MI9(O&(-dt+0KmmX#h'FPfrBgAS9;`"Vhbk'X-'hN7O_!DG'g -EI1Icn4@BV)0(t6ZuC?BMpoeM8YYGGN$M4)MNp^.,$qqNb1hO=6YXo,'lOS7b\Yc0I63@Y7>, -YBX"1(U[DL>0="#_%i!nt?tc)gZkYDt)R#-L,L%?89^R+JO.q?UBL&=1$I)CdQM'aU4dtQM3G -\YHDF56taUoO4`Q(HuYunlm4:/otJg?=&\T"g>R&:Yq.knBgGQG^`aHE@@)"A]_bYhcaY`ZaG -eWNCc/EJ1;DLVu!fh0a/h:oWf%9m)D0%S'tO.nXaMfU_ANGbX=hb-JK\&e#W:+XA)_iN!<6">`.TMZZFq`R -S[F-b+dj13(ahcd:9P7p)C_Ojgf["7a&6jtJP*DM4WOs\"QE80e-XjT\A6t(\ek8:k.M(g[4p?cSI]\ -c\&e6(HF;[Z9gQXRH6_eE`[PTRZ&Z*q,U=r9S)@Ff0\652So2eW=&[F>KBf4lO.]+:Ut8JpU/ -"_Ll=bleKHU'-Ih.kj5>)0jIe;&c^b`GsB`G6N`bK.4Rg'9+ulC1HFX2g5G2W]?^EN0@9V;gE -G(pd_Hp:=$Q"9[heVn66mH2XgLTpdXj6UgXW9=gHiH4JG8Sjj3\a>FKjOFB]Y@%YaG_:Sk&RB -POZrkpKs31hp!K0sN*MZNUePc_=;.m&6#]8=GR-U8<_@*T_]N72k2kdl;o]0V##0TqTou1g44 -:;9jR\NF1&-,3fsr%6>6MD*;.5iWpcC>*p%QWf]cI;=Z,oTG`9r#R^b1+-/8uC#ms1 -"gTajJJ6U$:'4Z)Wap70t44DcFCn\NT#=KVSW$NN?-R.:(]tW>:6V)"<6=UbU2uo5/Z1VHc?i -X>iBGT,F(dT@[c#fI+Sh1mU"\11Gc30!!]K.a:pTc!eOHWr<4E9IRcenf(Z]gI>l<6:mi5'5K"6mG`ni6:OCTR+oks%?28_s -'0MY"AN-\-ESn?st=h1'VjO"NDP\Vm<\'a#"XGNi:SP;I[QIfrRCg@Up4B'#1H%U%# -:un$VmVUbO.oTK#Yi/3Xp$FNCJmT1JXjrLo2@P5!O]8V4&u2j<^18+>.=gG#-&N;/Uu00hU!j -0165tBS-=lkIn<<0ZMWa -CDb(^76eYQ#E5(('BU!I^iQ;&:4T^qEe#4QMR&)2)':Q4s9'fDm621'2Q1)sch -E(@/)$$GrH+J;5PsrB:%LQ@`e*N*:$F'pfa_,Nd,MOA/l,C^B$.2MBT2pP%/[rGrI24?o_VpD -3'?U)IK+*?+&8SF5'h*,c(RAoI/qsfp\P%J"gHgshaAE)0pl2Fo6C9E^>2#&Xu%bF(V:aXJek?ic+[Hg@Wct:Z7otBKY`cN97Gpq`FP -O-hQ:]'L\k9lf6gBgd:!C&WpoT7bFns@8aI;13j(lQ -.n'a9I,SL':T3:7d$^0+.YN&^QW[FHWtjZXDL_FnS&rYT_OY#!4l>]kb*3;0TJdnjP&):pg`5 -5R25"n+`o_PDIe#`\`Zq!Tm@J,di5Z7a,t"td7+IB#N%YV'6NUTBB+QNYe8l>`s8K2,UL?Ubu -+e&UE#BG4oJ:>@(b5r6`\Kf$gs:?0p'o?h5\bjFhs1hbFC+[%qMr4qqLqRJiFR@$.;)Wq([bJLTcM4[!@ShI!RS^Pe1s+CBI"oLE]GN -QFfJ"OkM1nN`Djnkh>##2YuHtMAQ7gZlni&m_;t-ioVj\D'lB*MJ -"#W\>L>.>8Nb>LNO(UA2N]CFZAGDID.9-KUR$4OSaGC*d2\Y - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 141 219 -%%EOF diff --git a/doc/users_guide/gimp-edition.sgml b/doc/users_guide/gimp-edition.sgml new file mode 100644 index 0000000..6834bbd --- /dev/null +++ b/doc/users_guide/gimp-edition.sgml @@ -0,0 +1,58 @@ + + + + + + +]> + + + + The User's Guide to the Gutenprint - GIMP Edition + April 7, 2002 + April 7, 2002 + + Andy + Stewart + + + 2002 + Andy Stewart + + + The User's Guide to the Gutenprint - GIMP Edition, Copyright +2002, Andy Stewart. + + +&title; + +GIMP Edition + + PLEASE NOTE + + + This manual includes a subset of chapters from a more complete +manual entitled The User's Guide to the Gutenprint Top +Quality Printer Drivers. To obtain the complete manual, go +to the Gutenprint +Project home page. + + + This version of the manual has been specifically packaged in this +way in an attempt to better suit the needs of people interested only +in using the Gutenprint software with +GIMP (GNU Image Manipulation Program). + + + + + + +&history; +&gimp; +&gfdl; + + + + diff --git a/doc/users_guide/gimp.sgml b/doc/users_guide/gimp.sgml index 75eb803..d8e5ae3 100644 --- a/doc/users_guide/gimp.sgml +++ b/doc/users_guide/gimp.sgml @@ -1,5 +1,5 @@ - GIMP and Gimp-Print + GIMP and Gutenprint Running the GIMP @@ -154,7 +154,7 @@ When either the Print and Save Settings button or the Save Settings button is clicked, the settings are saved in a file called ~/.gimp-1.2/printrc. The user is cautioned about -hand editing this file since it is generated by Gimp-Print (although +hand editing this file since it is generated by Gutenprint (although it was the only way that the author found for removing bogus entries created while playing with the New Printer button). @@ -190,7 +190,7 @@ for a wide array of Postscript, inkjet, and laser printers. After you have selected a printer, you will see the printer command displayed. -The Gimp-Print software does all of the necessary conversion of the +The Gutenprint software does all of the necessary conversion of the image to be printed into the language of your printer. It is unnecessary and undesirable for any other sofware to manipulate this data. (This is why the command contains the "-l" switch or the "-o @@ -246,7 +246,7 @@ perforated parts of the paper which will be removed after printing the photo. By selecting the proper scaling percentage, printing can be constrained to the 4x6 part of the paper which will remain after the perforated sections are removed. The author has -saved this setting using this feature of the Gimp-Print software. +saved this setting using this feature of the Gutenprint software. @@ -384,18 +384,6 @@ space and prints more slowly, but does not require significantly more processing time. - Interleave - - Certain Epson printers (older models mostly) support a printing - mode called Interleave. This mode uses - special software within the printer to improve the print quality. - Interleave print modes will usually produce better quality - output than non-Interleave modes, with only a small performance - penalty. If Interleave is not listed at your chosen - resolution, fear not. In those cases, the non-Interleave print - modes offer similar printing quality improvements. - - DMT DMT is an acronym which stands for Dot @@ -876,7 +864,7 @@ Adjust window will close when the Save Settings, Print, and Cancel. The About -button will show information about the Gimp-Print software, such as +button will show information about the Gutenprint software, such as the version number, authors names, project web site, and software licensing. After clicking on the About, read the information, and then close the window by pressing the diff --git a/doc/users_guide/history.sgml b/doc/users_guide/history.sgml index 9f5bd29..2782f2b 100644 --- a/doc/users_guide/history.sgml +++ b/doc/users_guide/history.sgml @@ -6,13 +6,13 @@ This software package was first written by Michael Sweet of initially worked only as a print plugin to the GIMP (GNU Image Manipulation Program). In the summer of 1999, Robert Krawitz (the current -Gimp-Print project leader) purchased an Epson Stylus Photo EX printer +Gutenprint project leader) purchased an Epson Stylus Photo EX printer to feed his photography hobby. Finding no existing printer drivers, Robert -adapted Mike's Gimp-Print plugin to his six-color printer, and by the end +adapted Mike's GIMP Print plugin to his six-color printer, and by the end of the year released version 3.0 of the Gimp-Print software, which was included in version 1.1 of the GIMP. The intention was for this to be the stable plugin in version 1.2 of the GIMP while development of the -Gimp-Print plugin continued for later release. +GIMP Print plugin continued for later release. Robert put the Gimp-Print development tree on SourceForge starting @@ -101,8 +101,8 @@ team hopes to include the following: -The entire Gimp-Print team hopes you will really enjoy using this -software! For more information, please consult the GIMP-Print project +The entire Gutenprint team hopes you will really enjoy using this +software! For more information, please consult the Gutenprint project web page. diff --git a/doc/users_guide/html/HTML.manifest b/doc/users_guide/html/HTML.manifest deleted file mode 100644 index d09e506..0000000 --- a/doc/users_guide/html/HTML.manifest +++ /dev/null @@ -1,21 +0,0 @@ -book1.html -c29.html -ch-gimp-and-gimp-print.html -x85.html -c447.html -x456.html -x548.html -x562.html -c570.html -gfdl.html -x642.html -x652.html -x656.html -x662.html -x698.html -x703.html -x707.html -x711.html -x714.html -x717.html -x722.html diff --git a/doc/users_guide/html/a630.html b/doc/users_guide/html/a630.html new file mode 100644 index 0000000..5900395 --- /dev/null +++ b/doc/users_guide/html/a630.html @@ -0,0 +1,181 @@ + +GNU Free Documentation License
    The User's Guide to Gutenprint - Complete Edition
    PrevNext


    PrevHomeNext
    Gutenprint Utilities APPLICABILITY AND DEFINITIONS
    \ No newline at end of file diff --git a/doc/users_guide/html/book1.html b/doc/users_guide/html/book1.html deleted file mode 100644 index 2365338..0000000 --- a/doc/users_guide/html/book1.html +++ /dev/null @@ -1,483 +0,0 @@ -The User's Guide to the Gimp-Print Top Quality Printer Drivers

    The User's Guide to the Gimp-Print Top Quality Printer Drivers

    Andy Stewart

    Copyright © 2002 by Andy Stewart

    The Gimp-Print Top Quality Printer Drivers (hereafter -called Gimp-Print) are a set of printer drivers written to -take advantage of the full capabilities of a wide range of -printers. These drivers should work on any POSIX compliant operating -system (e.g. Linux, Solaris, IRIX, etc). This document will explain how to -use the Gimp-Print software to achieve high quality printouts from the -GIMP (GNU Image -Manipulation Program) and -CUPS (Common Unix Printing -System). -

    Please note that in addition to using the Gimp-Print software as a -print plugin for the GIMP, and as a set of printer drivers for CUPS, this -software can also be compiled and used with the -Ghostscript software -and with the -Foomatic -software. -

    Regardless of whether the Gimp-Print software is used with the GIMP, -CUPS, Ghostscript, or Foomatic, the print quality and printer settings -remain the same. However, use of the Gimp-Print with Ghostscript and -Foomatic is not covered in this document. These topics may be covered -in a future revision of this document. -

    This document corresponds to version 4.2.0 and later of the Gimp-Print -software. This document will serve as a guide to the user, and as such -will not explain how to install Gimp-Print, CUPS, GIMP, Ghostscript, -Foomatic, or any other related software. -

    Andy Stewart, the author, is the founder of the -Worcester Linux Users' Group in -Worcester, Massachusetts, USA. The group was founded in July 1997 and has -approximately 140 people on its mailing list. Monthly meetings are -held and all are invited. -

    In terms of "code", this is the author's first contribution to the -open source community, and definitely his first experience with DocBook. -Constructive comments, praise, words of encouragement, and the like -will be most appreciated if e-mailed to the -author. -


    Table of Contents
    1. Project History
    2. GIMP and Gimp-Print
    Running the GIMP
    The Gimp-Print Graphical User Interface
    Printer Settings
    Preview
    Position
    Size
    Image/Output Settings
    Printing and Saving Settings
    3. CUPS and Gimp-Print
    Introduction
    CUPS Printer Installation
    Configuring your Printer in CUPS
    Using CUPS from the Command Line
    4. Gimp-Print Utilities
    escputil
    Determining Ink Level
    Error During Ink Level Determination
    Nozzle Check
    Clean the Print Head
    Align the Print Head
    Printer Identification
    More Information
    A. GNU Free Documentation License
    0. PREAMBLE
    1. APPLICABILITY AND DEFINITIONS
    2. VERBATIM COPYING
    3. COPYING IN QUANTITY
    4. MODIFICATIONS
    5. COMBINING DOCUMENTS
    6. COLLECTIONS OF DOCUMENTS
    7. AGGREGATION WITH INDEPENDENT WORKS
    8. TRANSLATION
    9. TERMINATION
    10. FUTURE REVISIONS OF THIS LICENSE
    How to use this License for your documents

      Next
      Project History
    \ No newline at end of file diff --git a/doc/users_guide/html/c29.html b/doc/users_guide/html/c29.html index 38c2000..d20e203 100644 --- a/doc/users_guide/html/c29.html +++ b/doc/users_guide/html/c29.html @@ -1,25 +1,31 @@ + Project History +CUPS and Gutenprint
    The User's Guide to Gutenprint - Complete Edition
    PrevNext

    Chapter 3. CUPS and Gutenprint

    3.1. Introduction

    CUPS is an acronym which stands for Common +Unix Printing +System. It is assumed that the reader has +properly installed the CUPS software and the Gutenprint software. +This section will discuss adding a printer to CUPS that uses a +Gutenprint printer driver, as well as how to modify the various +settings supplied by Gutenprint. This will be a rather quick +explanation, as the CUPS software is quite well documented, and it is +not my intention to attempt to duplicate the CUPS documentation here. +


    PrevHomeNext
    The Gimp-Print Graphical User Interface CUPS Printer Installation
    \ No newline at end of file diff --git a/doc/users_guide/html/c447.html b/doc/users_guide/html/c447.html deleted file mode 100644 index d8dcce6..0000000 --- a/doc/users_guide/html/c447.html +++ /dev/null @@ -1,185 +0,0 @@ -CUPS and Gimp-Print
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevNext

    Chapter 3. CUPS and Gimp-Print

    Introduction

    CUPS is an acronym which stands for Common -Unix Printing -System. It is assumed that the reader has -properly installed the CUPS software and the Gimp-Print software. -This section will discuss adding a printer to CUPS that uses a -Gimp-Print printer driver, as well as how to modify the various -settings supplied by Gimp-Print. This will be a rather quick -explanation, as the CUPS software is quite well documented, and it is -not my intention to attempt to duplicate the CUPS documentation here. -


    PrevHomeNext
    The Gimp-Print Graphical User Interface CUPS Printer Installation
    \ No newline at end of file diff --git a/doc/users_guide/html/c568.html b/doc/users_guide/html/c568.html new file mode 100644 index 0000000..edbf2fa --- /dev/null +++ b/doc/users_guide/html/c568.html @@ -0,0 +1,709 @@ + +Gutenprint Utilities
    The User's Guide to Gutenprint - Complete Edition
    PrevNext

    Chapter 4. Gutenprint Utilities

    4.1. escputil

    escputil is a command line utility which +allows the user to perform a variety of maintenance tasks on Epson +Stylus inkjet printers. These tasks include head alignment, head +cleaning, nozzle check, printer identification, and retrieval of the ink +level from the printer. In order for many of the +escputil functions to work, the user must have +read/write access to the raw printer device (typically /dev/lp0, +/dev/usb/lp0, and the like). In general, these operations should be +performed by the root user. As always, the user must insure that the +directory containing the escputil utility is +listed in the $PATH environment variable, or that the full path is +specified on the command line. The examples in this section will +assume the former. +

    Caution
     

    The escputil utility was designed for use +ONLY with Epson Stylus inkjet printers supported by the Gutenprint +software. It is possible that damage MIGHT occur to your printer if +this utility is misused or if it is used with a printer other than an +Epson Stylus inkjet printer. It is the sole responsibility of the +user to insure that this utility is suitable for the task at hand. +

    In this section, specific examples of common usage will be +presented. A summary of the command line switches can be +found in the escputil(1) man page. +

    4.1.1. Determining Ink Level

    Perhaps the most basic function performed by +escputil is that of determining the amount of ink +remaining in the printer. To do this, the user must know the name of +the raw printer device. This is usually /dev/lp0 for a printer +connected to the parallel port, or /dev/usb/lp0 for a printer +connected to the USB. +

    If there are multiple printers connected, one of them may be referenced as +/dev/lp1 or perhaps /dev/usb/lp1. In the event of uncertainty, and if +CUPS is in use, view the following URL +with a web browser. At that URL, look for a line which reads "Device +URI". The author's USB printer is listed as "Device URI: usb:/dev/usb/lp0". +

    For this example, assume that the raw printer device is a USB printer +specified as /dev/usb/lp0. To get the ink level for this printer, +issue this command and notice the output. +

      
    +# escputil -r /dev/usb/lp0 -i
    +
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it 
    +under certain conditions; type 'escputil -l' for details. 
    +
    +           Ink color    Percent remaining
    +               Black     18
    +                Cyan     71
    +             Magenta     70
    +              Yellow     67
    +          Light Cyan     71
    +       Light Magenta     70
    +    
    +  

    The user would substitute their own raw printer device for the one +shown in the example after the "-r" switch. Notice that the printout +shows the percent of ink remaining for each color of the author's +Epson Stylus Photo 870. When the ink levels get too low, print +quality will suffer. In the author's personal experience, ink levels +approaching 10% begin to cause print quality degredation, but this +will vary depending on the precise printer model. +

    4.1.2. Error During Ink Level Determination

    What? The example above did not work? An error message was +printed? What does it mean? There are several possibilities, +depending on the specific error message. If the error message is +"Invalid argument" (see following example), the problem is that the +2.4.x kernel is not configured with the CONFIG_PARPORT_1284 option enabled. + +

      
    +# escputil -r /dev/lp0 -i
    +
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it 
    +under certain conditions; type 'escputil -l' for details.
    +
    +Cannot read from /dev/lp0: Invalid argument
    +    
    +  
    + + Another possibile cause for error is that the raw printer device +does not have both read and write permission for the user attempting +to access the device. In this case, the error message will read +"Permission denied". A final possibility is that the raw printer +device specified is incorrect, in which case the error message will +read "No such device". +

    4.1.3. Nozzle Check

    On an inkjet printer, there are several small holes on the +bottom of each ink cartridge through which the ink must flow smoothly +in order to create high quality images on paper. If these holes +become clogged, the printed image will show small gaps where there +should have been ink. One can easily test for the existence of this +condition by running a nozzle check. One need not be the root user to +issue this command. Note that as shown, the command will print a +nozzle test pattern on the default printer. If there are multiple +printers present, the desired printer must be specified with an +additional "-P printer_name" switch, where "printer_name" is the name +of the desired printer. +

    The printer will print a series of black (and colored) slanted +lines on the paper. Observe these lines carefully. If there are gaps +or spaces in these lines, then the corresponding nozzle is clogged and +the print head must be cleaned. However, if there are no gaps, the +nozzles are clean. +

      
    +# escputil -n       
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it 
    +under certain conditions; type 'escputil -l' for details. 
    +
    +Running nozzle check, please ensure paper is in the printer.
    +    
    +  

    4.1.4. Clean the Print Head

    If the printed output is showing gaps where there should have +been ink, it is likely that one or more nozzles are clogged and the +print head is in need of cleaning. One can verify this by first +running a nozzle check and looking for gaps in the printout. To clean +the print head, issue the following command. One need not be the root user to +issue this command. Note that as shown, the command will clean the +print head on the default printer. If there are multiple +printers present, the desired printer must be specified with an +additional "-P printer_name" switch, where "printer_name" is the name +of the desired printer. +

      
    +# escputil -c
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it 
    +under certain conditions; type 'escputil -l' for details. 
    +
    +Cleaning heads...
    +    
    +  

    Nothing will be printed on the paper. The printer will make +some noise as it cleans the print head. Wait until the printer is +finished cleaning the print head. Afterwards, execute another nozzle +check and insure that the print head is indeed completely clean. Note +that the process of cleaning the print head causes ink consumption, so +do not clean the print head any more than necessary. +

    For severely clogged nozzles, one may have to execute two or three cycles +of nozzle check followed by a cleaning of the print head. If the +printer had gone unused for a long time, the nozzles may be so clogged +with dried ink as to be unrecoverable, in which case, the best course +of action is to replace the ink cartridge. +

    4.1.5. Align the Print Head

    To insure the highest quality printouts, the print head must +be in proper physical alignment. One can check and realign the print +head by running this interactive alignment test. +

    The escputil utility must know the exact printer model in +use. One may specify the model on the command line using the "-m" +switch, or the utility can detect the printer model if the user passes +the "-r" switch and the name of the raw printer device. +

    Note that an unprivileged user may use this command with the "-m" switch, but that +(in general) the root user may only use the "-r" switch (which +requires read/write access to the raw printer device). In the case of +multiple printers in use, the "-P" switch is required to align the +print head on the non-default printer. +

    Caution
     

    This utility lets you align the print head of your Epson Stylus inkjet +printer. Misuse of this utility may cause your print quality to degrade +and possibly damage your printer. This utility has not been reviewed by +Seiko Epson for correctness, and is offered with no warranty at all. The +entire risk of using this utility lies with you. +

    Aligning the print head is an interactive process. The utility +will print out a set of instructions and ask you for responses. Please +read the instructions carefully and follow them precisely. A single +sheet of paper will be needed (one can print on both sides to save paper). +

    The following example illustrates the alignment process when issued by an +unprivileged user who specified the printer model on the command +line. (To obtain a list of printer models, issue the "escputil -M" +command). Of course, your responses will vary and should be +substituted for the responses shown in the following example. +

      
    +
    +*** NOTE - 870 is an illustrative example! ***
    +*** You MUST use the proper printer model! ***
    +*** Run:  escputil -M for a listing of     ***
    +*** supported printer models!              ***
    +
    +linuxpc> escputil -a -m 870
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it
    +under certain conditions; type 'escputil -l' for details.
    +
    +Please read these instructions very carefully before proceeding.
    +
    +This utility lets you align the print head of your Epson Stylus 
    +inkjet printer.  Misuse of this utility may cause your print 
    +quality to degrade and possibly damage your printer.  This utility
    +has not been reviewed by Seiko Epson for correctness, and is 
    +offered with no warranty at all.  The entire risk of using this 
    +utility lies with you.
    +
    +This utility prints 3 test patterns.  Each pattern looks very
    +similar.  The patterns consist of a series of pairs of vertical
    +lines that overlap.  Below each pair of lines is a number between 
    +1 and 15.
    +
    +When you inspect the pairs of lines, you should find the pair
    +of lines that is best in alignment, that is, that best forms 
    +a single vertical line.  Inspect the pairs very carefully to 
    +find the best match.  Using a loupe or magnifying glass is 
    +recommended for the most critical inspection.  It is also 
    +suggested that you use a good quality paper for the test, so 
    +that the lines are well-formed and do not spread through the 
    +paper.  After picking the number matching the best pair, place 
    +the paper back in the paper input tray before typing it in.
    +
    +Each pattern is similar, but later patterns use finer dots for
    +more critical alignment.  You must run all of the passes to 
    +correctly align your printer.  After running all the alignment
    +passes, the alignment patterns will be printed once more.  You 
    +should find that the middle-most pair (#8 out of the 15) is the
    +best for all patterns. 
    +
    +After the passes are printed once more, you will be offered the
    +choices of (s)aving the result in the printer, (r)epeating the
    +process, or (q)uitting without saving.  Quitting will not restore
    +the previous settings, but powering the printer off and back 
    +on will.  If you quit, you must repeat the entire process if 
    +you wish to later save the results.  It is essential that you 
    +not turn your printer off during this procedure.
    +
    +This procedure assumes that your printer is an Epson Stylus Photo
    +870.  If this is not your printer model, please type control-C now
    +and choose your actual printer model.
    +
    +Please place a sheet of paper in your printer to begin the head
    +alignment procedure. 
    +Press enter to continue > 
    +Please inspect the print, and choose the best pair of lines in 
    +each pattern.  Type a pair number, '?' for help, or 'r' to repeat
    +the procedure.
    +Pass #1> 8
    +Pass #2> 8
    +Pass #3> 8
    +Attempting to set alignment...succeeded.
    +Please verify that the alignment is correct.  After the alignment
    +pattern is printed again, please ensure that the best pattern 
    +for each line is pattern 8.  If it is not, you should repeat the 
    +process to get the best quality printing. 
    +Please insert a fresh sheet of paper.
    +Press enter to continue > 
    +Please inspect the final output very carefully to ensure that your
    +printer is in proper alignment. You may now: 
    +  (s)ave the results in the printer,
    +  (q)uit without saving the results, or
    +  (r)epeat the entire process from the beginning.
    +You will then be asked to confirm your choice.
    +What do you want to do (s, q, r)?
    +> s
    +This will permanently alter the configuration of your printer.
    +WARNING: this procedure has not been approved by Seiko Epson, 
    +and it may damage your printer. Proceed? 
    +Please confirm by typing 's' again that you wish to save the 
    +settings to your printer: 
    +> s
    +About to save settings...succeeded!
    +Your alignment settings have been saved to the printer.
    +    
    +  

    The following example shows what will happen if an unprivileged +user attempts to align the print head by specifying the raw printer +device on the command line. +

      
    +linuxpc> escputil -a -r /dev/usb/lp0
    +Escputil version 4.2.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it
    +under certain conditions; type 'escputil -l' for details.
    +
    +Attempting to detect printer model...
    +Cannot open /dev/usb/lp0 read/write: Permission denied
    +    
    +  

    This next example illustrates the results obtained when the root +user issues an alignment command while specifying the raw printer +device. Note that the output is truncated and only shows the printer +detection output. +

      
    +# escputil -a -r /dev/usb/lp0
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it
    +under certain conditions; type 'escputil -l' for details.
    +
    +Attempting to detect printer model...Stylus Photo 870
    +
    +Please read these instructions very carefully before proceeding.
    +    
    +  

    4.1.6. Printer Identification

    The printer identification command will query the printer for +make and model information. This command requires read/write access +to the raw printer device (generally limited to the root user). +Substitute your own raw printer device in place of the /dev/usb/lp0 +shown in the example. The output will vary depending on the precise +printer model. +

      
    +# escputil -d -r /dev/usb/lp0
    +Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    +Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    +'escputil -l'
    +This is free software, and you are welcome to redistribute it
    +under certain conditions; type 'escputil -l' for details.
    +
    +@EJL ID
    +MFG:EPSON;CMD:ESCPL2,BDC;MDL:Stylus Photo 870;CLS:PRINTER;DES:
    +EPSON Stylus Photo 870;
    +    
    +  

    4.1.7. More Information

    For more detailed information about the command line switches +accepted by the escputil utility, please consult +the man page which is supplied with the Gutenprint software. The user +may also issue the "escputil --help" command to get a listing of supported +command line switches. The command requires no special privileges to execute. +


    PrevHomeNext
    Using CUPS from the Command Line GNU Free Documentation License
    \ No newline at end of file diff --git a/doc/users_guide/html/c570.html b/doc/users_guide/html/c570.html deleted file mode 100644 index f1c142b..0000000 --- a/doc/users_guide/html/c570.html +++ /dev/null @@ -1,721 +0,0 @@ -Gimp-Print Utilities
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevNext

    Chapter 4. Gimp-Print Utilities

    escputil

    escputil is a command line utility which -allows the user to perform a variety of maintenance tasks on Epson -Stylus inkjet printers. These tasks include head alignment, head -cleaning, nozzle check, printer identification, and retrieval of the ink -level from the printer. In order for many of the -escputil functions to work, the user must have -read/write access to the raw printer device (typically /dev/lp0, -/dev/usb/lp0, and the like). In general, these operations should be -performed by the root user. As always, the user must insure that the -directory containing the escputil utility is -listed in the $PATH environment variable, or that the full path is -specified on the command line. The examples in this section will -assume the former. -

    Caution

    The escputil utility was designed for use -ONLY with Epson Stylus inkjet printers supported by the Gimp-Print -software. It is possible that damage MIGHT occur to your printer if -this utility is misused or if it is used with a printer other than an -Epson Stylus inkjet printer. It is the sole responsibility of the -user to insure that this utility is suitable for the task at hand. -

    In this section, specific examples of common usage will be -presented. A summary of the command line switches can be -found in the escputil(1) man page. -

    Determining Ink Level

    Perhaps the most basic function performed by -escputil is that of determining the amount of ink -remaining in the printer. To do this, the user must know the name of -the raw printer device. This is usually /dev/lp0 for a printer -connected to the parallel port, or /dev/usb/lp0 for a printer -connected to the USB. -

    If there are multiple printers connected, one of them may be referenced as -/dev/lp1 or perhaps /dev/usb/lp1. In the event of uncertainty, and if -CUPS is in use, view the following URL -with a web browser. At that URL, look for a line which reads "Device -URI". The author's USB printer is listed as "Device URI: usb:/dev/usb/lp0". -

    For this example, assume that the raw printer device is a USB printer -specified as /dev/usb/lp0. To get the ink level for this printer, -issue this command and notice the output. -

      
    -# escputil -r /dev/usb/lp0 -i
    -
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it 
    -under certain conditions; type 'escputil -l' for details. 
    -
    -           Ink color    Percent remaining
    -               Black     18
    -                Cyan     71
    -             Magenta     70
    -              Yellow     67
    -          Light Cyan     71
    -       Light Magenta     70
    -    
    -  

    The user would substitute their own raw printer device for the one -shown in the example after the "-r" switch. Notice that the printout -shows the percent of ink remaining for each color of the author's -Epson Stylus Photo 870. When the ink levels get too low, print -quality will suffer. In the author's personal experience, ink levels -approaching 10% begin to cause print quality degredation, but this -will vary depending on the precise printer model. -

    Error During Ink Level Determination

    What? The example above did not work? An error message was -printed? What does it mean? There are several possibilities, -depending on the specific error message. If the error message is -"Invalid argument" (see following example), the problem is that the -kernel is not configured with the CONFIG_PRINTER_READBACK option enabled. - -
      
    -# escputil -r /dev/lp0 -i
    -
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it 
    -under certain conditions; type 'escputil -l' for details.
    -
    -Cannot read from /dev/lp0: Invalid argument
    -    
    -  
    - - Another possibile cause for error is that the raw printer device -does not have both read and write permission for the user attempting -to access the device. In this case, the error message will read -"Permission denied". A final possibility is that the raw printer -device specified is incorrect, in which case the error message will -read "No such device". -

    Nozzle Check

    On an inkjet printer, there are several small holes on the -bottom of each ink cartridge through which the ink must flow smoothly -in order to create high quality images on paper. If these holes -become clogged, the printed image will show small gaps where there -should have been ink. One can easily test for the existence of this -condition by running a nozzle check. One need not be the root user to -issue this command. Note that as shown, the command will print a -nozzle test pattern on the default printer. If there are multiple -printers present, the desired printer must be specified with an -additional "-P printer_name" switch, where "printer_name" is the name -of the desired printer. -

    The printer will print a series of black (and colored) slanted -lines on the paper. Observe these lines carefully. If there are gaps -or spaces in these lines, then the corresponding nozzle is clogged and -the print head must be cleaned. However, if there are no gaps, the -nozzles are clean. -

      
    -# escputil -n       
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it 
    -under certain conditions; type 'escputil -l' for details. 
    -
    -Running nozzle check, please ensure paper is in the printer.
    -    
    -  

    Clean the Print Head

    If the printed output is showing gaps where there should have -been ink, it is likely that one or more nozzles are clogged and the -print head is in need of cleaning. One can verify this by first -running a nozzle check and looking for gaps in the printout. To clean -the print head, issue the following command. One need not be the root user to -issue this command. Note that as shown, the command will clean the -print head on the default printer. If there are multiple -printers present, the desired printer must be specified with an -additional "-P printer_name" switch, where "printer_name" is the name -of the desired printer. -

      
    -# escputil -c
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it 
    -under certain conditions; type 'escputil -l' for details. 
    -
    -Cleaning heads...
    -    
    -  

    Nothing will be printed on the paper. The printer will make -some noise as it cleans the print head. Wait until the printer is -finished cleaning the print head. Afterwards, execute another nozzle -check and insure that the print head is indeed completely clean. Note -that the process of cleaning the print head causes ink consumption, so -do not clean the print head any more than necessary. -

    For severely clogged nozzles, one may have to execute two or three cycles -of nozzle check followed by a cleaning of the print head. If the -printer had gone unused for a long time, the nozzles may be so clogged -with dried ink as to be unrecoverable, in which case, the best course -of action is to replace the ink cartridge. -

    Align the Print Head

    To insure the highest quality printouts, the print head must -be in proper physical alignment. One can check and realign the print -head by running this interactive alignment test. -

    The escputil utility must know the exact printer model in -use. One may specify the model on the command line using the "-m" -switch, or the utility can detect the printer model if the user passes -the "-r" switch and the name of the raw printer device. -

    Note that an unprivileged user may use this command with the "-m" switch, but that -(in general) the root user may only use the "-r" switch (which -requires read/write access to the raw printer device). In the case of -multiple printers in use, the "-P" switch is required to align the -print head on the non-default printer. -

    Caution

    This utility lets you align the print head of your Epson Stylus inkjet -printer. Misuse of this utility may cause your print quality to degrade -and possibly damage your printer. This utility has not been reviewed by -Seiko Epson for correctness, and is offered with no warranty at all. The -entire risk of using this utility lies with you. -

    Aligning the print head is an interactive process. The utility -will print out a set of instructions and ask you for responses. Please -read the instructions carefully and follow them precisely. A single -sheet of paper will be needed (one can print on both sides to save paper). -

    The following example illustrates the alignment process when issued by an -unprivileged user who specified the printer model on the command -line. (To obtain a list of printer models, issue the "escputil -M" -command). Of course, your responses will vary and should be -substituted for the responses shown in the following example. -

      
    -
    -*** NOTE - 870 is an illustrative example! ***
    -*** You MUST use the proper printer model! ***
    -*** Run:  escputil -M for a listing of     ***
    -*** supported printer models!              ***
    -
    -linuxpc> escputil -a -m 870
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it
    -under certain conditions; type 'escputil -l' for details.
    -
    -Please read these instructions very carefully before proceeding.
    -
    -This utility lets you align the print head of your Epson Stylus 
    -inkjet printer.  Misuse of this utility may cause your print 
    -quality to degrade and possibly damage your printer.  This utility
    -has not been reviewed by Seiko Epson for correctness, and is 
    -offered with no warranty at all.  The entire risk of using this 
    -utility lies with you.
    -
    -This utility prints 3 test patterns.  Each pattern looks very
    -similar.  The patterns consist of a series of pairs of vertical
    -lines that overlap.  Below each pair of lines is a number between 
    -1 and 15.
    -
    -When you inspect the pairs of lines, you should find the pair
    -of lines that is best in alignment, that is, that best forms 
    -a single vertical line.  Inspect the pairs very carefully to 
    -find the best match.  Using a loupe or magnifying glass is 
    -recommended for the most critical inspection.  It is also 
    -suggested that you use a good quality paper for the test, so 
    -that the lines are well-formed and do not spread through the 
    -paper.  After picking the number matching the best pair, place 
    -the paper back in the paper input tray before typing it in.
    -
    -Each pattern is similar, but later patterns use finer dots for
    -more critical alignment.  You must run all of the passes to 
    -correctly align your printer.  After running all the alignment
    -passes, the alignment patterns will be printed once more.  You 
    -should find that the middle-most pair (#8 out of the 15) is the
    -best for all patterns. 
    -
    -After the passes are printed once more, you will be offered the
    -choices of (s)aving the result in the printer, (r)epeating the
    -process, or (q)uitting without saving.  Quitting will not restore
    -the previous settings, but powering the printer off and back 
    -on will.  If you quit, you must repeat the entire process if 
    -you wish to later save the results.  It is essential that you 
    -not turn your printer off during this procedure.
    -
    -This procedure assumes that your printer is an Epson Stylus Photo
    -870.  If this is not your printer model, please type control-C now
    -and choose your actual printer model.
    -
    -Please place a sheet of paper in your printer to begin the head
    -alignment procedure. 
    -Press enter to continue > 
    -Please inspect the print, and choose the best pair of lines in 
    -each pattern.  Type a pair number, '?' for help, or 'r' to repeat
    -the procedure.
    -Pass #1> 8
    -Pass #2> 8
    -Pass #3> 8
    -Attempting to set alignment...succeeded.
    -Please verify that the alignment is correct.  After the alignment
    -pattern is printed again, please ensure that the best pattern 
    -for each line is pattern 8.  If it is not, you should repeat the 
    -process to get the best quality printing. 
    -Please insert a fresh sheet of paper.
    -Press enter to continue > 
    -Please inspect the final output very carefully to ensure that your
    -printer is in proper alignment. You may now: 
    -  (s)ave the results in the printer,
    -  (q)uit without saving the results, or
    -  (r)epeat the entire process from the beginning.
    -You will then be asked to confirm your choice.
    -What do you want to do (s, q, r)?
    -> s
    -This will permanently alter the configuration of your printer.
    -WARNING: this procedure has not been approved by Seiko Epson, 
    -and it may damage your printer. Proceed? 
    -Please confirm by typing 's' again that you wish to save the 
    -settings to your printer: 
    -> s
    -About to save settings...succeeded!
    -Your alignment settings have been saved to the printer.
    -    
    -  

    The following example shows what will happen if an unprivileged -user attempts to align the print head by specifying the raw printer -device on the command line. -

      
    -linuxpc> escputil -a -r /dev/usb/lp0
    -Escputil version 4.2.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it
    -under certain conditions; type 'escputil -l' for details.
    -
    -Attempting to detect printer model...
    -Cannot open /dev/usb/lp0 read/write: Permission denied
    -    
    -  

    This next example illustrates the results obtained when the root -user issues an alignment command while specifying the raw printer -device. Note that the output is truncated and only shows the printer -detection output. -

      
    -# escputil -a -r /dev/usb/lp0
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it
    -under certain conditions; type 'escputil -l' for details.
    -
    -Attempting to detect printer model...Stylus Photo 870
    -
    -Please read these instructions very carefully before proceeding.
    -    
    -  

    Printer Identification

    The printer identification command will query the printer for -make and model information. This command requires read/write access -to the raw printer device (generally limited to the root user). -Substitute your own raw printer device in place of the /dev/usb/lp0 -shown in the example. The output will vary depending on the precise -printer model. -

      
    -# escputil -d -r /dev/usb/lp0
    -Escputil version 4.3.0, Copyright (C) 2000-2001 Robert Krawitz
    -Escputil comes with ABSOLUTELY NO WARRANTY; for details type 
    -'escputil -l'
    -This is free software, and you are welcome to redistribute it
    -under certain conditions; type 'escputil -l' for details.
    -
    -@EJL ID
    -MFG:EPSON;CMD:ESCPL2,BDC;MDL:Stylus Photo 870;CLS:PRINTER;DES:
    -EPSON Stylus Photo 870;
    -    
    -  

    More Information

    For more detailed information about the command line switches -accepted by the escputil utility, please consult -the man page which is supplied with the Gimp-Print software. The user -may also issue the "escputil --help" command to get a listing of supported -command line switches. The command requires no special privileges to execute. -


    PrevHomeNext
    Using CUPS from the Command Line GNU Free Documentation License
    \ No newline at end of file diff --git a/doc/users_guide/html/c61.html b/doc/users_guide/html/c61.html new file mode 100644 index 0000000..00e31af --- /dev/null +++ b/doc/users_guide/html/c61.html @@ -0,0 +1,220 @@ + +GIMP and Gutenprint
    The User's Guide to Gutenprint - Complete Edition
    PrevNext

    Chapter 2. GIMP and Gutenprint

    2.1. Running the GIMP

    This section assumes that you have the GIMP version 1.2 installed +and working properly on your computer, and that you have an image of +some type that you desire to print. To get started quickly, log into +your system, start the X window system, and bring up your favorite terminal +window. At the $ prompt, type: + +

      
    +     $ gimp &
    +    
    +  
    + + This should start the GIMP for you. If it does not, check that +you have installed the GIMP properly, and that its binary is located +in one of the directories listed in your $PATH environment +variable. On the assumption that this worked, the screen should now +look something like this: + +

    Figure 2-1. The Startup Window for The GIMP

    + +

    At this point, you should use the + + File->Open + +menu option to open your favorite picture. We will print this picture +shortly. Your picture should be displayed next to the GIMP startup +window, perhaps looking similar to the following (sssh! Don't tell +anybody the secret!): + +

    Figure 2-2. A Sample Image Displayed by The GIMP

    + +


    PrevHomeNext
    Project History The Gimp-Print Graphical User Interface
    \ No newline at end of file diff --git a/doc/users_guide/html/ch-gimp-and-gimp-print.html b/doc/users_guide/html/ch-gimp-and-gimp-print.html deleted file mode 100644 index 174da29..0000000 --- a/doc/users_guide/html/ch-gimp-and-gimp-print.html +++ /dev/null @@ -1,242 +0,0 @@ -GIMP and Gimp-Print
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevNext

    Chapter 2. GIMP and Gimp-Print

    Running the GIMP

    This section assumes that you have the GIMP version 1.2 installed -and working properly on your computer, and that you have an image of -some type that you desire to print. To get started quickly, log into -your system, start the X window system, and bring up your favorite terminal -window. At the $ prompt, type: - -
      
    -     $ gimp &
    -    
    -  
    - - This should start the GIMP for you. If it does not, check that -you have installed the GIMP properly, and that its binary is located -in one of the directories listed in your $PATH environment -variable. On the assumption that this worked, the screen should now -look something like this: - -

    Figure 2-1. The Startup Window for The GIMP

    - -

    At this point, you should use the - - File->Open - -menu option to open your favorite picture. We will print this picture -shortly. Your picture should be displayed next to the GIMP startup -window, perhaps looking similar to the following (sssh! Don't tell -anybody the secret!): - -

    Figure 2-2. A Sample Image Displayed by The GIMP

    - -


    PrevHomeNext
    Project History The Gimp-Print Graphical User Interface
    \ No newline at end of file diff --git a/doc/users_guide/html/docbook.css b/doc/users_guide/html/docbook.css deleted file mode 100644 index b42fb27..0000000 --- a/doc/users_guide/html/docbook.css +++ /dev/null @@ -1,20 +0,0 @@ -.BOOK .TITLE { text-align: center } -.BOOK .SUBTITLE { text-align: center } -.BOOK .CORPAUTHOR { text-align: center } -.BOOK .AUTHOR { text-align: center } -.BOOK .AFFILIATION { text-align: center } -.BOOK .EDITEDBY { text-align: center } -.BOOK .EDITOR { text-align: center } -.BOOK .GRAPHIC { text-align: center } - -.ARTICLE .TITLE { text-align: center } -.ARTICLE .SUBTITLE { text-align: center } -.ARTICLE .CORPAUTHOR { text-align: center } -.ARTICLE .AUTHOR { text-align: center } -.ARTICLE .AFFILIATION { text-align: center } -.ARTICLE .EDITEDBY { text-align: center } -.ARTICLE .EDITOR { text-align: center } -.ARTICLE .GRAPHIC { text-align: center } -.ARTICLE .ABSTRACT { margin-left: 0.5in; - margin-right: 0.5in; - font-style: italic } diff --git a/doc/users_guide/html/figures/cups_admin.png b/doc/users_guide/html/figures/cups_admin.png deleted file mode 100644 index 464fcc4..0000000 Binary files a/doc/users_guide/html/figures/cups_admin.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_admin_device.png b/doc/users_guide/html/figures/cups_admin_device.png deleted file mode 100644 index b258263..0000000 Binary files a/doc/users_guide/html/figures/cups_admin_device.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_admin_make.png b/doc/users_guide/html/figures/cups_admin_make.png deleted file mode 100644 index 1948ba7..0000000 Binary files a/doc/users_guide/html/figures/cups_admin_make.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_admin_model.png b/doc/users_guide/html/figures/cups_admin_model.png deleted file mode 100644 index b476a75..0000000 Binary files a/doc/users_guide/html/figures/cups_admin_model.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_admin_success.png b/doc/users_guide/html/figures/cups_admin_success.png deleted file mode 100644 index edebafe..0000000 Binary files a/doc/users_guide/html/figures/cups_admin_success.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_config_printer.png b/doc/users_guide/html/figures/cups_config_printer.png deleted file mode 100644 index 1f980dc..0000000 Binary files a/doc/users_guide/html/figures/cups_config_printer.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_my_printer.png b/doc/users_guide/html/figures/cups_my_printer.png deleted file mode 100644 index d8441c8..0000000 Binary files a/doc/users_guide/html/figures/cups_my_printer.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_printers.png b/doc/users_guide/html/figures/cups_printers.png deleted file mode 100644 index 4d45d1c..0000000 Binary files a/doc/users_guide/html/figures/cups_printers.png and /dev/null differ diff --git a/doc/users_guide/html/figures/cups_startup.png b/doc/users_guide/html/figures/cups_startup.png deleted file mode 100644 index 22d01d0..0000000 Binary files a/doc/users_guide/html/figures/cups_startup.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp-print-gui-1.png b/doc/users_guide/html/figures/gimp-print-gui-1.png deleted file mode 100644 index 1c083bb..0000000 Binary files a/doc/users_guide/html/figures/gimp-print-gui-1.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp-print-gui.png b/doc/users_guide/html/figures/gimp-print-gui.png deleted file mode 100644 index a9739fb..0000000 Binary files a/doc/users_guide/html/figures/gimp-print-gui.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp-print-new-printer.png b/doc/users_guide/html/figures/gimp-print-new-printer.png deleted file mode 100644 index 39dd681..0000000 Binary files a/doc/users_guide/html/figures/gimp-print-new-printer.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp-print-print-color-adjust.png b/doc/users_guide/html/figures/gimp-print-print-color-adjust.png deleted file mode 100644 index 5ab1a33..0000000 Binary files a/doc/users_guide/html/figures/gimp-print-print-color-adjust.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp-print-setup.png b/doc/users_guide/html/figures/gimp-print-setup.png deleted file mode 100644 index e406c0b..0000000 Binary files a/doc/users_guide/html/figures/gimp-print-setup.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp_image.png b/doc/users_guide/html/figures/gimp_image.png deleted file mode 100644 index 9193558..0000000 Binary files a/doc/users_guide/html/figures/gimp_image.png and /dev/null differ diff --git a/doc/users_guide/html/figures/gimp_startup.png b/doc/users_guide/html/figures/gimp_startup.png deleted file mode 100644 index b6335e1..0000000 Binary files a/doc/users_guide/html/figures/gimp_startup.png and /dev/null differ diff --git a/doc/users_guide/html/gfdl.html b/doc/users_guide/html/gfdl.html deleted file mode 100644 index 1b639d3..0000000 --- a/doc/users_guide/html/gfdl.html +++ /dev/null @@ -1,238 +0,0 @@ -GNU Free Documentation License
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevNext

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, - or other written document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by - others.

    This License is a kind of "copyleft", which means that - derivative works of the document must themselves be free in the - same sense. It complements the GNU General Public License, which - is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals - for free software, because free software needs free documentation: - a free program should come with manuals providing the same - freedoms that the software does. But this License is not limited - to software manuals; it can be used for any textual work, - regardless of subject matter or whether it is published as a - printed book. We recommend this License principally for works - whose purpose is instruction or reference.


    PrevHomeNext
    Gimp-Print Utilities APPLICABILITY AND DEFINITIONS
    \ No newline at end of file diff --git a/doc/users_guide/html/index.html b/doc/users_guide/html/index.html new file mode 100644 index 0000000..4563d68 --- /dev/null +++ b/doc/users_guide/html/index.html @@ -0,0 +1,511 @@ + +The User's Guide to Gutenprint - Complete Edition

    The User's Guide to Gutenprint - Complete Edition

    Andy Stewart

    Copyright © 2002 Andy Stewart

    The Gutenprint Top Quality Printer Drivers (hereafter +called Gutenprint) are a set of printer drivers written to +take advantage of the full capabilities of a wide range of +printers. These drivers should work on any POSIX compliant operating +system (e.g. Linux, Solaris, IRIX, etc). This document will explain how to +use the Gutenprint software to achieve high quality printouts from the +GIMP (GNU Image +Manipulation Program) and +CUPS (Common Unix Printing +System). +

    Please note that in addition to using the Gutenprint software as a +print plugin for the GIMP, and as a set of printer drivers for CUPS, this +software can also be compiled and used with the +Ghostscript software +and with the +Foomatic +software. +

    Regardless of whether the Gutenprint software is used with the GIMP, +CUPS, Ghostscript, or Foomatic, the print quality and printer settings +remain the same. However, use of the Gutenprint with Ghostscript and +Foomatic is not covered in this document. These topics may be covered +in a future revision of this document. +

    This document corresponds to version 4.2.0 and later of the Gutenprint +software. This document will serve as a guide to the user, and as such +will not explain how to install Gutenprint, CUPS, GIMP, Ghostscript, +Foomatic, or any other related software. +

    Andy Stewart, the author, is the founder of the +Worcester Linux Users' Group in +Worcester, Massachusetts, USA. The group was founded in July 1997 and has +approximately 140 people on its mailing list. Monthly meetings are +held and all are invited. +

    In terms of "code", this is the author's first contribution to the +open source community, and definitely his first experience with DocBook. +Constructive comments, praise, words of encouragement, and the like +will be most appreciated if e-mailed to the +author. +

    The User's Guide to Gutenprint - Complete Edition, +Copyright 2002, Andy Stewart. +

    Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation with no invariant sections, no Front-Cover texts, and no +Back-Cover texts. A copy of the license is included in Appendix A. +


    Table of Contents
    1. Project History
    2. GIMP and Gutenprint
    2.1. Running the GIMP
    2.2. The Gimp-Print Graphical User Interface
    2.2.1. Printer Settings
    2.2.2. Preview
    2.2.3. Position
    2.2.4. Size
    2.2.5. Image/Output Settings
    2.2.6. Printing and Saving Settings
    3. CUPS and Gutenprint
    3.1. Introduction
    3.2. CUPS Printer Installation
    3.3. Configuring your Printer in CUPS
    3.4. Using CUPS from the Command Line
    4. Gutenprint Utilities
    4.1. escputil
    4.1.1. Determining Ink Level
    4.1.2. Error During Ink Level Determination
    4.1.3. Nozzle Check
    4.1.4. Clean the Print Head
    4.1.5. Align the Print Head
    4.1.6. Printer Identification
    4.1.7. More Information
    A. GNU Free Documentation License
    0. PREAMBLE
    1. APPLICABILITY AND DEFINITIONS
    2. VERBATIM COPYING
    3. COPYING IN QUANTITY
    4. MODIFICATIONS
    5. COMBINING DOCUMENTS
    6. COLLECTIONS OF DOCUMENTS
    7. AGGREGATION WITH INDEPENDENT WORKS
    8. TRANSLATION
    9. TERMINATION
    10. FUTURE REVISIONS OF THIS LICENSE
    How to use this License for your documents

      Next
      Project History
    \ No newline at end of file diff --git a/doc/users_guide/html/ln12.html b/doc/users_guide/html/ln12.html deleted file mode 100644 index 1f8242f..0000000 --- a/doc/users_guide/html/ln12.html +++ /dev/null @@ -1,88 +0,0 @@ -
    The User's Guide to the Gimp-Print Top Quality Printer Drivers

    The User's Guide to the Gimp-Print Top Quality Printer -Drivers, Copyright 2002, Andy Stewart. -

    Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, -Version 1.1 or any later version published by the Free Software -Foundation with no invariant sections, no Front-Cover texts, and no -Back-Cover texts. A copy of the license is included in Appendix A. -


     Home 
    \ No newline at end of file diff --git a/doc/users_guide/html/stylesheet-images/caution.gif b/doc/users_guide/html/stylesheet-images/caution.gif deleted file mode 100644 index 9cc2e15..0000000 Binary files a/doc/users_guide/html/stylesheet-images/caution.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/home.gif b/doc/users_guide/html/stylesheet-images/home.gif deleted file mode 100644 index 55e1d59..0000000 Binary files a/doc/users_guide/html/stylesheet-images/home.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/important.gif b/doc/users_guide/html/stylesheet-images/important.gif deleted file mode 100644 index 25e40c7..0000000 Binary files a/doc/users_guide/html/stylesheet-images/important.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/next.gif b/doc/users_guide/html/stylesheet-images/next.gif deleted file mode 100644 index 8c502e7..0000000 Binary files a/doc/users_guide/html/stylesheet-images/next.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/note.gif b/doc/users_guide/html/stylesheet-images/note.gif deleted file mode 100644 index 7322e8e..0000000 Binary files a/doc/users_guide/html/stylesheet-images/note.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/prev.gif b/doc/users_guide/html/stylesheet-images/prev.gif deleted file mode 100644 index 0894d9e..0000000 Binary files a/doc/users_guide/html/stylesheet-images/prev.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/tip.gif b/doc/users_guide/html/stylesheet-images/tip.gif deleted file mode 100644 index f062955..0000000 Binary files a/doc/users_guide/html/stylesheet-images/tip.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/toc-blank.gif b/doc/users_guide/html/stylesheet-images/toc-blank.gif deleted file mode 100644 index 6c65e3a..0000000 Binary files a/doc/users_guide/html/stylesheet-images/toc-blank.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/toc-minus.gif b/doc/users_guide/html/stylesheet-images/toc-minus.gif deleted file mode 100644 index 40ebe61..0000000 Binary files a/doc/users_guide/html/stylesheet-images/toc-minus.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/toc-plus.gif b/doc/users_guide/html/stylesheet-images/toc-plus.gif deleted file mode 100644 index 3e9e7d5..0000000 Binary files a/doc/users_guide/html/stylesheet-images/toc-plus.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/up.gif b/doc/users_guide/html/stylesheet-images/up.gif deleted file mode 100644 index e899a27..0000000 Binary files a/doc/users_guide/html/stylesheet-images/up.gif and /dev/null differ diff --git a/doc/users_guide/html/stylesheet-images/warning.gif b/doc/users_guide/html/stylesheet-images/warning.gif deleted file mode 100644 index a587079..0000000 Binary files a/doc/users_guide/html/stylesheet-images/warning.gif and /dev/null differ diff --git a/doc/users_guide/html/x452.html b/doc/users_guide/html/x452.html new file mode 100644 index 0000000..ce48444 --- /dev/null +++ b/doc/users_guide/html/x452.html @@ -0,0 +1,471 @@ + +CUPS Printer Installation
    The User's Guide to Gutenprint - Complete Edition
    PrevChapter 3. CUPS and GutenprintNext

    3.2. CUPS Printer Installation

    This explanation will use the web interface provided by CUPS. First, +aim your favorite web browser at +the CUPS server. The +following screen should appear within your browser. +

    Figure 3-1. The CUPS Startup Window

    Now, you may click on either the word Printers in the bar at the top +of the page, or you may click on the Manage Printers text. In +either case, the next screen you see will look like this one if you +have not yet configured any printers. +

    Figure 3-2. The CUPS Printers Window

    At this time, click on the Add Printer button. +You will then see the Admin screen (shown below). +

    Figure 3-3. The CUPS Admin Window

    Notice in the screenshot that the three boxes are shown after the +author filled them in for his printer at home. You will need to fill +in an appropriate name of your printer, its location, and a +description which meets your own needs. Once this is done, click on +the Continue button, and then this screen will appear. +

    Figure 3-4. The CUPS Admin Device Window

    Click on the drop down menu next to the word +Device and a list of possible printer devices +appears. Select the device appropriate for your printer. Note that +there are a range of serial, parallel, USB, and other devices from +which to choose. Once the selection is made, click the +Continue button. Now, this screen appears. +

    Figure 3-5. The CUPS Admin Model/Driver Window

    Caution Regarding USB Printers
     

    CUPS versions 1.1.11 and later REQUIRE +the user to insure that the desired USB printer is powered on +AND physically connected to the USB bus +BEFORE starting the CUPS software. +

    CUPS must see the USB printer when the software starts. The CUPS software +is typically started when the computer boots. Note that one cannot +simply plug in the USB printer and power it on after CUPS has started. +(Note that this does not apply to parallel port printers). +

    If the USB printer was not connected and powered on at the time CUPS was +started, there will not be a USB printer shown in the +list of devices on the CUPS Admin Device Window (see +Figure 3-4). In this event, stop the CUPS +software, properly connect and power on the USB printer, and restart +the CUPS software. +

    From the list of devices shown in the CUPS Admin Device Window +(see Figure 3-4), a clever user might +attempt to avoid this issue by selecting +Internet Printing Protocol +and then enter something similar to 'usb:/dev/usblp0' in the next +screen. However, this fails later in the configuration process with a +"client_error_not_possible" error message with no other explanation. +Note that entering 'file:/dev/usblp0' will not work either. While CUPS +will allow this, printing will not actually work in some situations. +

    CUPS versions 1.1.10 and earlier exhibit similar behavior with regard +to not displaying the USB printer if it was not connected to the USB +bus and powered up prior to starting the CUPS software. However, +these versions of CUPS will indeed allow the user to enter the name of +the USB connection, unlike versions 1.1.11 and later. +

    Select the manufacturer of your printer and click the +Continue button. A window will appear which +asks you to select the specific model number for your printer. +

    Scroll through the long list and find the model number for your +printer. Notice carefully that there are many different languages +supported for each printer, as denoted by the initials in parenthesis. +(en) would be for English, (da) for Danish, (sv) for Swedish, (fr) for +French, (no) for Norwegian, (pl) for Polish, and (en_GB) for British +English (see Figure 3-6). Also take note +of the Gutenprint revision for the driver, and ensure that it is +indeed the version of Gutenprint which you have most recently +installed. Once you have made the proper selection, click on the +Continue button. +

    Figure 3-6. The 2nd CUPS Admin Model/Driver Window

    Figure 3-7. The CUPS Admin Success Window

    Congratulations! You should now see the CUPS window indicating that +your printer was successfully installed. Notice the sentence which +reads "Printer your_printer has been added successfully". Click on +your_printer, which will be the underlined name for your printer. +

    Figure 3-8. The CUPS Window for Your Printer

    After clicking on your_printer (epson_870 in this example), a window +will appear similar to that shown in Figure 3-8. +It would probably be a good idea at this point to click on the +Print Test Page button to ensure that +everything is working properly. Take note of the Gutenprint revision +printed on this screen and confirm once again that it is the expected +revision. +


    PrevHomeNext
    CUPS and GutenprintUpConfiguring your Printer in CUPS
    \ No newline at end of file diff --git a/doc/users_guide/html/x456.html b/doc/users_guide/html/x456.html deleted file mode 100644 index 76cb3ca..0000000 --- a/doc/users_guide/html/x456.html +++ /dev/null @@ -1,461 +0,0 @@ -CUPS Printer Installation
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevChapter 3. CUPS and Gimp-PrintNext

    CUPS Printer Installation

    This explanation will use the web interface provided by CUPS. First, -aim your favorite web browser at -the CUPS server. The -following screen should appear within your browser. -

    Figure 3-1. The CUPS Startup Window

    Now, you may click on either the word Printers in the bar at the top -of the page, or you may click on the Manage Printers text. In -either case, the next screen you see will look like this one if you -have not yet configured any printers. -

    Figure 3-2. The CUPS Printers Window

    At this time, click on the Add Printer button. -You will then see the Admin screen (shown below). -

    Figure 3-3. The CUPS Admin Window

    Notice in the screenshot that the three boxes are shown after the -author filled them in for his printer at home. You will need to fill -in an appropriate name of your printer, its location, and a -description which meets your own needs. Once this is done, click on -the Continue button, and then this screen will appear. -

    Figure 3-4. The CUPS Admin Device Window

    Click on the drop down menu next to the word -Device and a list of possible printer devices -appears. Select the device appropriate for your printer. Note that -there are a range of serial, parallel, USB, and other devices from -which to choose. Once the selection is made, click the -Continue button. Now, this screen appears. -

    Figure 3-5. The CUPS Admin Model/Driver Window

    Caution Regarding USB Printers

    CUPS versions 1.1.11 and later REQUIRE -the user to insure that the desired USB printer is powered on -AND physically connected to the USB bus -BEFORE starting the CUPS software. -

    CUPS must see the USB printer when the software starts. The CUPS software -is typically started when the computer boots. Note that one cannot -simply plug in the USB printer and power it on after CUPS has started. -(Note that this does not apply to parallel port printers). -

    If the USB printer was not connected and powered on at the time CUPS was -started, there will not be a USB printer shown in the -list of devices on the CUPS Admin Device Window (see -Figure 3-4). In this event, stop the CUPS -software, properly connect and power on the USB printer, and restart -the CUPS software. -

    From the list of devices shown in the CUPS Admin Device Window -(see Figure 3-4), a clever user might -attempt to avoid this issue by selecting -Internet Printing Protocol -and then enter something similar to 'usb:/dev/usblp0' in the next -screen. However, this fails later in the configuration process with a -"client_error_not_possible" error message with no other explanation. -Note that entering 'file:/dev/usblp0' will not work either. While CUPS -will allow this, printing will not actually work in some situations. -

    CUPS versions 1.1.10 and earlier exhibit similar behavior with regard -to not displaying the USB printer if it was not connected to the USB -bus and powered up prior to starting the CUPS software. However, -these versions of CUPS will indeed allow the user to enter the name of -the USB connection, unlike versions 1.1.11 and later. -

    Select the manufacturer of your printer and click the -Continue button. A window will appear which -asks you to select the specific model number for your printer. -

    Scroll through the long list and find the model number for your -printer. Notice carefully that there are many different languages -supported for each printer, as denoted by the initials in parenthesis. -(en) would be for English, (da) for Danish, (sv) for Swedish, (fr) for -French, (no) for Norwegian, (pl) for Polish, and (en_GB) for British -English (see Figure 3-6). Also take note -of the Gimp-Print revision for the driver, and ensure that it is -indeed the version of Gimp-Print which you have most recently -installed. Once you have made the proper selection, click on the -Continue button. -

    Figure 3-6. The 2nd CUPS Admin Model/Driver Window

    Figure 3-7. The CUPS Admin Success Window

    Congratulations! You should now see the CUPS window indicating that -your printer was successfully installed. Notice the sentence which -reads "Printer your_printer has been added successfully". Click on -your_printer, which will be the underlined name for your printer. -

    Figure 3-8. The CUPS Window for Your Printer

    After clicking on your_printer (epson_870 in this example), a window -will appear similar to that shown in Figure 3-8. -It would probably be a good idea at this point to click on the -Print Test Page button to ensure that -everything is working properly. Take note of the Gimp-Print revision -printed on this screen and confirm once again that it is the expected -revision. -


    PrevHomeNext
    CUPS and Gimp-PrintUpConfiguring your Printer in CUPS
    \ No newline at end of file diff --git a/doc/users_guide/html/x544.html b/doc/users_guide/html/x544.html new file mode 100644 index 0000000..c787a27 --- /dev/null +++ b/doc/users_guide/html/x544.html @@ -0,0 +1,196 @@ + +Configuring your Printer in CUPS
    The User's Guide to Gutenprint - Complete Edition
    PrevChapter 3. CUPS and GutenprintNext

    3.3. Configuring your Printer in CUPS

    With reference to Figure 3-8, click +on the Configure Printer button. A partial +screenshot of the printer configuration window appears in +Figure 3-9. +The contents of this window will vary depending on precisely which +printer you selected when you configured CUPS for your printer. The +screenshot shows the selections made by the author for his printer. +The individual selections will not be explained in detail here, as +they are the same selections which are available when using the +Gutenprint plugin to the GIMP. These selections are explained in +detail in various sections of the GIMP and +Gutenprint chapter of The User's Guide to the +Gutenprint Top Quality Printer Drivers. +

    Figure 3-9. The CUPS Printer Cofiguration Window


    PrevHomeNext
    CUPS Printer InstallationUpUsing CUPS from the Command Line
    \ No newline at end of file diff --git a/doc/users_guide/html/x548.html b/doc/users_guide/html/x548.html deleted file mode 100644 index 9c8abbf..0000000 --- a/doc/users_guide/html/x548.html +++ /dev/null @@ -1,175 +0,0 @@ -Configuring your Printer in CUPS
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevChapter 3. CUPS and Gimp-PrintNext

    Configuring your Printer in CUPS

    With reference to Figure 3-8, click -on the Configure Printer button. A partial -screenshot of the printer configuration window appears in -Figure 3-9. -The contents of this window will vary depending on precisely which -printer you selected when you configured CUPS for your printer. The -screenshot shows the selections made by the author for his printer. -The individual selections will not be explained in detail here, as -they are the same selections which are available when using the -Gimp-Print plugin to the GIMP. These selections are explained in -detail in various sections of Chapter 2. -

    Figure 3-9. The CUPS Printer Cofiguration Window


    PrevHomeNext
    CUPS Printer InstallationUpUsing CUPS from the Command Line
    \ No newline at end of file diff --git a/doc/users_guide/html/x559.html b/doc/users_guide/html/x559.html new file mode 100644 index 0000000..ac9a1fd --- /dev/null +++ b/doc/users_guide/html/x559.html @@ -0,0 +1,218 @@ + +Using CUPS from the Command Line
    The User's Guide to Gutenprint - Complete Edition
    PrevChapter 3. CUPS and GutenprintNext

    3.4. Using CUPS from the Command Line

    It is possible to use the CUPS printing system from the command +line. While this document will not delve into all of the specifics of +the CUPS command line interface, there are portions of this interface +which are specific to the Gutenprint software. +

    The command line is in some cases a more convenient way to generate +printed output (e.g. when printing from a script). However, most +people (including the author) cannot easily predict what a command +line option of "-o stpCyan=1350" will do to the output. It is +therefore a good idea to use the GIMP to view the image and the +Gutenprint plugin to preview these settings before relying on the +command line. +

    When using CUPS from the command line, the command will have this +general format: + +

       
    +     lpr -P my_printer_name \
    +         -o option1=<choice1> \
    +         -o option2=<choice2> \
    +         /path/to/printfile
    +     
    +   
    + +When typing the command directly onto the command line, put all of the +command line options on one line, and do not type the "\" characters. +The list of possible options which are specific to Gutenprint, +followed by some of the supported choices, are shown below: + +
       
    +   -o PageSize=<...| A3 | A4 | A4 | ...>
    +   -o InputSlot=<Roll | Standard>
    +   -o MediaType=< ..| Inkjet | Plain | GlossyPaper | ...>
    +   -o Resolution=<360sw | 360swuni ...| 1440x720 >
    +   -o ColorModel=<Black | RGB | Gray | CMYK>
    +   -o stpBrightness=<0...2000>
    +   -o stpContrast=<0...2000>
    +   -o stpCyan=<0...4000>
    +   -o stpDensity=<0...2000>
    +   -o stpDither=<0...4000>
    +   -o stpGamma=<0...4000>
    +   -o stpImageType=<LineArt | Continuous | SolidTone>
    +   -o stpInkType=<PhotoCMY | CMYK | PhotoCMYK | RGB>
    +   -o stpMagenta=<0...4000>
    +   -o stpSaturation=<0...9000>
    +   -o stpYellow=<0...4000>
    +   
    +   
    + +For more detailed information, consult the appropriate sections of the GIMP and +Gutenprint chapter of The User's Guide to the +Gutenprint Top Quality Printer Drivers. +


    PrevHomeNext
    Configuring your Printer in CUPSUpGutenprint Utilities
    \ No newline at end of file diff --git a/doc/users_guide/html/x562.html b/doc/users_guide/html/x562.html deleted file mode 100644 index 60e2cb6..0000000 --- a/doc/users_guide/html/x562.html +++ /dev/null @@ -1,212 +0,0 @@ -Using CUPS from the Command Line
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevChapter 3. CUPS and Gimp-PrintNext

    Using CUPS from the Command Line

    It is possible to use the CUPS printing system from the command -line. While this document will not delve into all of the specifics of -the CUPS command line interface, there are portions of this interface -which are specific to the Gimp-Print software. -

    The command line is in some cases a more convenient way to generate -printed output (e.g. when printing from a script). However, most -people (including the author) cannot easily predict what a command -line option of "-o stpCyan=1350" will do to the output. It is -therefore a good idea to use the GIMP to view the image and the -Gimp-Print plugin to preview these settings before relying on the -command line. -

    When using CUPS from the command line, the command will have this -general format: - -
       
    -     lpr -P my_printer_name \
    -         -o option1=<choice1> \
    -         -o option2=<choice2> \
    -         /path/to/printfile
    -     
    -   
    - -When typing the command directly onto the command line, put all of the -command line options on one line, and do not type the "\" characters. -The list of possible options which are specific to Gimp-Print, -followed by some of the supported choices, are shown below: - -
       
    -   -o PageSize=<...| A3 | A4 | A4 | ...>
    -   -o InputSlot=<Roll | Standard>
    -   -o MediaType=< ..| Inkjet | Plain | GlossyPaper | ...>
    -   -o Resolution=<360sw | 360swuni ...| 1440x720 >
    -   -o ColorModel=<Black | RGB | Gray | CMYK>
    -   -o stpBrightness=<0...2000>
    -   -o stpContrast=<0...2000>
    -   -o stpCyan=<0...4000>
    -   -o stpDensity=<0...2000>
    -   -o stpDither=<0...4000>
    -   -o stpGamma=<0...4000>
    -   -o stpImageType=<LineArt | Continuous | SolidTone>
    -   -o stpInkType=<PhotoCMY | CMYK | PhotoCMYK | RGB>
    -   -o stpMagenta=<0...4000>
    -   -o stpSaturation=<0...9000>
    -   -o stpYellow=<0...4000>
    -   
    -   
    - -For more detailed information, consult the appropriate sections of Chapter 2. -


    PrevHomeNext
    Configuring your Printer in CUPSUpGimp-Print Utilities
    \ No newline at end of file diff --git a/doc/users_guide/html/x640.html b/doc/users_guide/html/x640.html new file mode 100644 index 0000000..e1ce43b --- /dev/null +++ b/doc/users_guide/html/x640.html @@ -0,0 +1,208 @@ + +APPLICABILITY AND DEFINITIONS
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. The "Document", + below, refers to any such manual or work. Any member of the + public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work + containing the Document or a portion of it, either copied + verbatim, or with modifications and/or translated into another + language.

    A "Secondary Section" is a named appendix or a front-matter + section of the Document that deals exclusively with the + relationship of the publishers or authors of the Document to the + Document's overall subject (or to related matters) and contains + nothing that could fall directly within that overall subject. + (For example, if the Document is in part a textbook of + mathematics, a Secondary Section may not explain any mathematics.) + The relationship could be a matter of historical connection with + the subject or with related matters, or of legal, commercial, + philosophical, ethical or political position regarding + them.

    The "Invariant Sections" are certain Secondary Sections + whose titles are designated, as being those of Invariant Sections, + in the notice that says that the Document is released under this + License.

    The "Cover Texts" are certain short passages of text that + are listed, as Front-Cover Texts or Back-Cover Texts, in the + notice that says that the Document is released under this + License.

    A "Transparent" copy of the Document means a + machine-readable copy, represented in a format whose specification + is available to the general public, whose contents can be viewed + and edited directly and straightforwardly with generic text + editors or (for images composed of pixels) generic paint programs + or (for drawings) some widely available drawing editor, and that + is suitable for input to text formatters or for automatic + translation to a variety of formats suitable for input to text + formatters. A copy made in an otherwise Transparent file format + whose markup has been designed to thwart or discourage subsequent + modification by readers is not Transparent. A copy that is not + "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include + plain ASCII without markup, Texinfo input format, LaTeX input + format, SGML or XML using a publicly available DTD, and + standard-conforming simple HTML designed for human modification. + Opaque formats include PostScript, PDF, proprietary formats that + can be read and edited only by proprietary word processors, SGML + or XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML produced by some word + processors for output purposes only.

    The "Title Page" means, for a printed book, the title page + itself, plus such following pages as are needed to hold, legibly, + the material this License requires to appear in the title page. + For works in formats which do not have any title page as such, + "Title Page" means the text near the most prominent appearance of + the work's title, preceding the beginning of the body of the + text.


    PrevHomeNext
    GNU Free Documentation LicenseUpVERBATIM COPYING
    \ No newline at end of file diff --git a/doc/users_guide/html/x642.html b/doc/users_guide/html/x642.html deleted file mode 100644 index 621c57b..0000000 --- a/doc/users_guide/html/x642.html +++ /dev/null @@ -1,195 +0,0 @@ -APPLICABILITY AND DEFINITIONS
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that - contains a notice placed by the copyright holder saying it can be - distributed under the terms of this License. The "Document", - below, refers to any such manual or work. Any member of the - public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work - containing the Document or a portion of it, either copied - verbatim, or with modifications and/or translated into another - language.

    A "Secondary Section" is a named appendix or a front-matter - section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the - Document's overall subject (or to related matters) and contains - nothing that could fall directly within that overall subject. - (For example, if the Document is in part a textbook of - mathematics, a Secondary Section may not explain any mathematics.) - The relationship could be a matter of historical connection with - the subject or with related matters, or of legal, commercial, - philosophical, ethical or political position regarding - them.

    The "Invariant Sections" are certain Secondary Sections - whose titles are designated, as being those of Invariant Sections, - in the notice that says that the Document is released under this - License.

    The "Cover Texts" are certain short passages of text that - are listed, as Front-Cover Texts or Back-Cover Texts, in the - notice that says that the Document is released under this - License.

    A "Transparent" copy of the Document means a - machine-readable copy, represented in a format whose specification - is available to the general public, whose contents can be viewed - and edited directly and straightforwardly with generic text - editors or (for images composed of pixels) generic paint programs - or (for drawings) some widely available drawing editor, and that - is suitable for input to text formatters or for automatic - translation to a variety of formats suitable for input to text - formatters. A copy made in an otherwise Transparent file format - whose markup has been designed to thwart or discourage subsequent - modification by readers is not Transparent. A copy that is not - "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include - plain ASCII without markup, Texinfo input format, LaTeX input - format, SGML or XML using a publicly available DTD, and - standard-conforming simple HTML designed for human modification. - Opaque formats include PostScript, PDF, proprietary formats that - can be read and edited only by proprietary word processors, SGML - or XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML produced by some word - processors for output purposes only.

    The "Title Page" means, for a printed book, the title page - itself, plus such following pages as are needed to hold, legibly, - the material this License requires to appear in the title page. - For works in formats which do not have any title page as such, - "Title Page" means the text near the most prominent appearance of - the work's title, preceding the beginning of the body of the - text.


    PrevHomeNext
    GNU Free Documentation LicenseUpVERBATIM COPYING
    \ No newline at end of file diff --git a/doc/users_guide/html/x650.html b/doc/users_guide/html/x650.html new file mode 100644 index 0000000..5f204ae --- /dev/null +++ b/doc/users_guide/html/x650.html @@ -0,0 +1,158 @@ + +VERBATIM COPYING
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, + either commercially or noncommercially, provided that this + License, the copyright notices, and the license notice saying this + License applies to the Document are reproduced in all copies, and + that you add no other conditions whatsoever to those of this + License. You may not use technical measures to obstruct or + control the reading or further copying of the copies you make or + distribute. However, you may accept compensation in exchange for + copies. If you distribute a large enough number of copies you + must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated + above, and you may publicly display copies.


    PrevHomeNext
    APPLICABILITY AND DEFINITIONSUpCOPYING IN QUANTITY
    \ No newline at end of file diff --git a/doc/users_guide/html/x652.html b/doc/users_guide/html/x652.html deleted file mode 100644 index 25fde10..0000000 --- a/doc/users_guide/html/x652.html +++ /dev/null @@ -1,145 +0,0 @@ -VERBATIM COPYING
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, - either commercially or noncommercially, provided that this - License, the copyright notices, and the license notice saying this - License applies to the Document are reproduced in all copies, and - that you add no other conditions whatsoever to those of this - License. You may not use technical measures to obstruct or - control the reading or further copying of the copies you make or - distribute. However, you may accept compensation in exchange for - copies. If you distribute a large enough number of copies you - must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated - above, and you may publicly display copies.


    PrevHomeNext
    APPLICABILITY AND DEFINITIONSUpCOPYING IN QUANTITY
    \ No newline at end of file diff --git a/doc/users_guide/html/x654.html b/doc/users_guide/html/x654.html new file mode 100644 index 0000000..17bac2f --- /dev/null +++ b/doc/users_guide/html/x654.html @@ -0,0 +1,182 @@ + +COPYING IN QUANTITY
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more + than 100, and the Document's license notice requires Cover Texts, + you must enclose the copies in covers that carry, clearly and + legibly, all these Cover Texts: Front-Cover Texts on the front + cover, and Back-Cover Texts on the back cover. Both covers must + also clearly and legibly identify you as the publisher of these + copies. The front cover must present the full title with all + words of the title equally prominent and visible. You may add + other material on the covers in addition. Copying with changes + limited to the covers, as long as they preserve the title of the + Document and satisfy these conditions, can be treated as verbatim + copying in other respects.

    If the required texts for either cover are too voluminous to + fit legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages.

    If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a publicly-accessible + computer-network location containing a complete Transparent copy + of the Document, free of added material, which the general + network-using public has access to download anonymously at no + charge using public-standard network protocols. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public.

    It is requested, but not required, that you contact the + authors of the Document well before redistributing any large + number of copies, to give them a chance to provide you with an + updated version of the Document.


    PrevHomeNext
    VERBATIM COPYINGUpMODIFICATIONS
    \ No newline at end of file diff --git a/doc/users_guide/html/x656.html b/doc/users_guide/html/x656.html deleted file mode 100644 index 78f15ca..0000000 --- a/doc/users_guide/html/x656.html +++ /dev/null @@ -1,169 +0,0 @@ -COPYING IN QUANTITY
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more - than 100, and the Document's license notice requires Cover Texts, - you must enclose the copies in covers that carry, clearly and - legibly, all these Cover Texts: Front-Cover Texts on the front - cover, and Back-Cover Texts on the back cover. Both covers must - also clearly and legibly identify you as the publisher of these - copies. The front cover must present the full title with all - words of the title equally prominent and visible. You may add - other material on the covers in addition. Copying with changes - limited to the covers, as long as they preserve the title of the - Document and satisfy these conditions, can be treated as verbatim - copying in other respects.

    If the required texts for either cover are too voluminous to - fit legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages.

    If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a publicly-accessible - computer-network location containing a complete Transparent copy - of the Document, free of added material, which the general - network-using public has access to download anonymously at no - charge using public-standard network protocols. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public.

    It is requested, but not required, that you contact the - authors of the Document well before redistributing any large - number of copies, to give them a chance to provide you with an - updated version of the Document.


    PrevHomeNext
    VERBATIM COPYINGUpMODIFICATIONS
    \ No newline at end of file diff --git a/doc/users_guide/html/x660.html b/doc/users_guide/html/x660.html new file mode 100644 index 0000000..37fa01c --- /dev/null +++ b/doc/users_guide/html/x660.html @@ -0,0 +1,288 @@ + +MODIFICATIONS
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the + Document under the conditions of sections 2 and 3 above, provided + that you release the Modified Version under precisely this + License, with the Modified Version filling the role of the + Document, thus licensing distribution and modification of the + Modified Version to whoever possesses a copy of it. In addition, + you must do these things in the Modified Version:

    1. Use in the Title Page + (and on the covers, if any) a title distinct from that of the + Document, and from those of previous versions (which should, if + there were any, be listed in the History section of the + Document). You may use the same title as a previous version if + the original publisher of that version gives permission.

    2. List on the Title Page, + as authors, one or more persons or entities responsible for + authorship of the modifications in the Modified Version, + together with at least five of the principal authors of the + Document (all of its principal authors, if it has less than + five).

    3. State on the Title page + the name of the publisher of the Modified Version, as the + publisher.

    4. Preserve all the + copyright notices of the Document.

    5. Add an appropriate + copyright notice for your modifications adjacent to the other + copyright notices.

    6. Include, immediately + after the copyright notices, a license notice giving the public + permission to use the Modified Version under the terms of this + License, in the form shown in the Addendum below.

    7. Preserve in that license + notice the full lists of Invariant Sections and required Cover + Texts given in the Document's license notice.

    8. Include an unaltered + copy of this License.

    9. Preserve the section + entitled "History", and its title, and add to it an item stating + at least the title, year, new authors, and publisher of the + Modified Version as given on the Title Page. If there is no + section entitled "History" in the Document, create one stating + the title, year, authors, and publisher of the Document as given + on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence.

    10. Preserve the network + location, if any, given in the Document for public access to a + Transparent copy of the Document, and likewise the network + locations given in the Document for previous versions it was + based on. These may be placed in the "History" section. You + may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission.

    11. In any section entitled + "Acknowledgements" or "Dedications", preserve the section's + title, and preserve in the section all the substance and tone of + each of the contributor acknowledgements and/or dedications + given therein.

    12. Preserve all the + Invariant Sections of the Document, unaltered in their text and + in their titles. Section numbers or the equivalent are not + considered part of the section titles.

    13. Delete any section + entitled "Endorsements". Such a section may not be included in + the Modified Version.

    14. Do not retitle any + existing section as "Endorsements" or to conflict in title with + any Invariant Section.

    If the Modified Version includes new front-matter sections + or appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles.

    You may add a section entitled "Endorsements", provided it + contains nothing but endorsements of your Modified Version by + various parties--for example, statements of peer review or that + the text has been approved by an organization as the authoritative + definition of a standard.

    You may add a passage of up to five words as a Front-Cover + Text, and a passage of up to 25 words as a Back-Cover Text, to the + end of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by + this License give permission to use their names for publicity for + or to assert or imply endorsement of any Modified Version.


    PrevHomeNext
    COPYING IN QUANTITYUpCOMBINING DOCUMENTS
    \ No newline at end of file diff --git a/doc/users_guide/html/x662.html b/doc/users_guide/html/x662.html deleted file mode 100644 index d76ee2e..0000000 --- a/doc/users_guide/html/x662.html +++ /dev/null @@ -1,275 +0,0 @@ -MODIFICATIONS
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the - Document under the conditions of sections 2 and 3 above, provided - that you release the Modified Version under precisely this - License, with the Modified Version filling the role of the - Document, thus licensing distribution and modification of the - Modified Version to whoever possesses a copy of it. In addition, - you must do these things in the Modified Version:

    1. Use in the Title Page - (and on the covers, if any) a title distinct from that of the - Document, and from those of previous versions (which should, if - there were any, be listed in the History section of the - Document). You may use the same title as a previous version if - the original publisher of that version gives permission.

    2. List on the Title Page, - as authors, one or more persons or entities responsible for - authorship of the modifications in the Modified Version, - together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than - five).

    3. State on the Title page - the name of the publisher of the Modified Version, as the - publisher.

    4. Preserve all the - copyright notices of the Document.

    5. Add an appropriate - copyright notice for your modifications adjacent to the other - copyright notices.

    6. Include, immediately - after the copyright notices, a license notice giving the public - permission to use the Modified Version under the terms of this - License, in the form shown in the Addendum below.

    7. Preserve in that license - notice the full lists of Invariant Sections and required Cover - Texts given in the Document's license notice.

    8. Include an unaltered - copy of this License.

    9. Preserve the section - entitled "History", and its title, and add to it an item stating - at least the title, year, new authors, and publisher of the - Modified Version as given on the Title Page. If there is no - section entitled "History" in the Document, create one stating - the title, year, authors, and publisher of the Document as given - on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence.

    10. Preserve the network - location, if any, given in the Document for public access to a - Transparent copy of the Document, and likewise the network - locations given in the Document for previous versions it was - based on. These may be placed in the "History" section. You - may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission.

    11. In any section entitled - "Acknowledgements" or "Dedications", preserve the section's - title, and preserve in the section all the substance and tone of - each of the contributor acknowledgements and/or dedications - given therein.

    12. Preserve all the - Invariant Sections of the Document, unaltered in their text and - in their titles. Section numbers or the equivalent are not - considered part of the section titles.

    13. Delete any section - entitled "Endorsements". Such a section may not be included in - the Modified Version.

    14. Do not retitle any - existing section as "Endorsements" or to conflict in title with - any Invariant Section.

    If the Modified Version includes new front-matter sections - or appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles.

    You may add a section entitled "Endorsements", provided it - contains nothing but endorsements of your Modified Version by - various parties--for example, statements of peer review or that - the text has been approved by an organization as the authoritative - definition of a standard.

    You may add a passage of up to five words as a Front-Cover - Text, and a passage of up to 25 words as a Back-Cover Text, to the - end of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by - this License give permission to use their names for publicity for - or to assert or imply endorsement of any Modified Version.


    PrevHomeNext
    COPYING IN QUANTITYUpCOMBINING DOCUMENTS
    \ No newline at end of file diff --git a/doc/users_guide/html/x696.html b/doc/users_guide/html/x696.html new file mode 100644 index 0000000..6646123 --- /dev/null +++ b/doc/users_guide/html/x696.html @@ -0,0 +1,167 @@ + +COMBINING DOCUMENTS
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released + under this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice.

    The combined work need only contain one copy of this + License, and multiple identical Invariant Sections may be replaced + with a single copy. If there are multiple Invariant Sections with + the same name but different contents, make the title of each such + section unique by adding at the end of it, in parentheses, the + name of the original author or publisher of that section if known, + or else a unique number. Make the same adjustment to the section + titles in the list of Invariant Sections in the license notice of + the combined work.

    In the combination, you must combine any sections entitled + "History" in the various original documents, forming one section + entitled "History"; likewise combine any sections entitled + "Acknowledgements", and any sections entitled "Dedications". You + must delete all sections entitled "Endorsements."


    PrevHomeNext
    MODIFICATIONSUpCOLLECTIONS OF DOCUMENTS
    \ No newline at end of file diff --git a/doc/users_guide/html/x698.html b/doc/users_guide/html/x698.html deleted file mode 100644 index 3fb386d..0000000 --- a/doc/users_guide/html/x698.html +++ /dev/null @@ -1,154 +0,0 @@ -COMBINING DOCUMENTS
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released - under this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice.

    The combined work need only contain one copy of this - License, and multiple identical Invariant Sections may be replaced - with a single copy. If there are multiple Invariant Sections with - the same name but different contents, make the title of each such - section unique by adding at the end of it, in parentheses, the - name of the original author or publisher of that section if known, - or else a unique number. Make the same adjustment to the section - titles in the list of Invariant Sections in the license notice of - the combined work.

    In the combination, you must combine any sections entitled - "History" in the various original documents, forming one section - entitled "History"; likewise combine any sections entitled - "Acknowledgements", and any sections entitled "Dedications". You - must delete all sections entitled "Endorsements."


    PrevHomeNext
    MODIFICATIONSUpCOLLECTIONS OF DOCUMENTS
    \ No newline at end of file diff --git a/doc/users_guide/html/x701.html b/doc/users_guide/html/x701.html new file mode 100644 index 0000000..19dedb7 --- /dev/null +++ b/doc/users_guide/html/x701.html @@ -0,0 +1,157 @@ + +COLLECTIONS OF DOCUMENTS
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and + other documents released under this License, and replace the + individual copies of this License in the various documents with a + single copy that is included in the collection, provided that you + follow the rules of this License for verbatim copying of each of + the documents in all other respects.

    You may extract a single document from such a collection, + and distribute it individually under this License, provided you + insert a copy of this License into the extracted document, and + follow this License in all other respects regarding verbatim + copying of that document.


    PrevHomeNext
    COMBINING DOCUMENTSUpAGGREGATION WITH INDEPENDENT WORKS
    \ No newline at end of file diff --git a/doc/users_guide/html/x703.html b/doc/users_guide/html/x703.html deleted file mode 100644 index aedff67..0000000 --- a/doc/users_guide/html/x703.html +++ /dev/null @@ -1,144 +0,0 @@ -COLLECTIONS OF DOCUMENTS
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and - other documents released under this License, and replace the - individual copies of this License in the various documents with a - single copy that is included in the collection, provided that you - follow the rules of this License for verbatim copying of each of - the documents in all other respects.

    You may extract a single document from such a collection, - and distribute it individually under this License, provided you - insert a copy of this License into the extracted document, and - follow this License in all other respects regarding verbatim - copying of that document.


    PrevHomeNext
    COMBINING DOCUMENTSUpAGGREGATION WITH INDEPENDENT WORKS
    \ No newline at end of file diff --git a/doc/users_guide/html/x705.html b/doc/users_guide/html/x705.html new file mode 100644 index 0000000..a27a409 --- /dev/null +++ b/doc/users_guide/html/x705.html @@ -0,0 +1,161 @@ + +AGGREGATION WITH INDEPENDENT WORKS
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, does not as a whole count as a + Modified Version of the Document, provided no compilation + copyright is claimed for the compilation. Such a compilation is + called an "aggregate", and this License does not apply to the + other self-contained works thus compiled with the Document, on + account of their being thus compiled, if they are not themselves + derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to + these copies of the Document, then if the Document is less than + one quarter of the entire aggregate, the Document's Cover Texts + may be placed on covers that surround only the Document within the + aggregate. Otherwise they must appear on covers around the whole + aggregate.


    PrevHomeNext
    COLLECTIONS OF DOCUMENTSUpTRANSLATION
    \ No newline at end of file diff --git a/doc/users_guide/html/x707.html b/doc/users_guide/html/x707.html deleted file mode 100644 index f7a2a34..0000000 --- a/doc/users_guide/html/x707.html +++ /dev/null @@ -1,148 +0,0 @@ -AGGREGATION WITH INDEPENDENT WORKS
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, does not as a whole count as a - Modified Version of the Document, provided no compilation - copyright is claimed for the compilation. Such a compilation is - called an "aggregate", and this License does not apply to the - other self-contained works thus compiled with the Document, on - account of their being thus compiled, if they are not themselves - derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to - these copies of the Document, then if the Document is less than - one quarter of the entire aggregate, the Document's Cover Texts - may be placed on covers that surround only the Document within the - aggregate. Otherwise they must appear on covers around the whole - aggregate.


    PrevHomeNext
    COLLECTIONS OF DOCUMENTSUpTRANSLATION
    \ No newline at end of file diff --git a/doc/users_guide/html/x709.html b/doc/users_guide/html/x709.html new file mode 100644 index 0000000..c0dd979 --- /dev/null +++ b/doc/users_guide/html/x709.html @@ -0,0 +1,156 @@ + +TRANSLATION
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    8. TRANSLATION

    Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires + special permission from their copyright holders, but you may + include translations of some or all Invariant Sections in addition + to the original versions of these Invariant Sections. You may + include a translation of this License provided that you also + include the original English version of this License. In case of + a disagreement between the translation and the original English + version of this License, the original English version will + prevail.


    PrevHomeNext
    AGGREGATION WITH INDEPENDENT WORKSUpTERMINATION
    \ No newline at end of file diff --git a/doc/users_guide/html/x711.html b/doc/users_guide/html/x711.html deleted file mode 100644 index c9178e4..0000000 --- a/doc/users_guide/html/x711.html +++ /dev/null @@ -1,143 +0,0 @@ -TRANSLATION
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    8. TRANSLATION

    Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires - special permission from their copyright holders, but you may - include translations of some or all Invariant Sections in addition - to the original versions of these Invariant Sections. You may - include a translation of this License provided that you also - include the original English version of this License. In case of - a disagreement between the translation and the original English - version of this License, the original English version will - prevail.


    PrevHomeNext
    AGGREGATION WITH INDEPENDENT WORKSUpTERMINATION
    \ No newline at end of file diff --git a/doc/users_guide/html/x712.html b/doc/users_guide/html/x712.html new file mode 100644 index 0000000..f7313d9 --- /dev/null +++ b/doc/users_guide/html/x712.html @@ -0,0 +1,153 @@ + +TERMINATION
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the + Document except as expressly provided for under this License. Any + other attempt to copy, modify, sublicense or distribute the + Document is void, and will automatically terminate your rights + under this License. However, parties who have received copies, or + rights, from you under this License will not have their licenses + terminated so long as such parties remain in full + compliance.


    PrevHomeNext
    TRANSLATIONUpFUTURE REVISIONS OF THIS LICENSE
    \ No newline at end of file diff --git a/doc/users_guide/html/x714.html b/doc/users_guide/html/x714.html deleted file mode 100644 index eaf6708..0000000 --- a/doc/users_guide/html/x714.html +++ /dev/null @@ -1,140 +0,0 @@ -TERMINATION
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the - Document except as expressly provided for under this License. Any - other attempt to copy, modify, sublicense or distribute the - Document is void, and will automatically terminate your rights - under this License. However, parties who have received copies, or - rights, from you under this License will not have their licenses - terminated so long as such parties remain in full - compliance.


    PrevHomeNext
    TRANSLATIONUpFUTURE REVISIONS OF THIS LICENSE
    \ No newline at end of file diff --git a/doc/users_guide/html/x715.html b/doc/users_guide/html/x715.html new file mode 100644 index 0000000..68e1489 --- /dev/null +++ b/doc/users_guide/html/x715.html @@ -0,0 +1,164 @@ + +FUTURE REVISIONS OF THIS LICENSE
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation LicenseNext

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised + versions of the GNU Free Documentation License from time to time. + Such new versions will be similar in spirit to the present + version, but may differ in detail to address new problems or + concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing + version number. If the Document specifies that a particular + numbered version of this License "or any later version" applies to + it, you have the option of following the terms and conditions + either of that specified version or of any later version that has + been published (not as a draft) by the Free Software Foundation. + If the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation.


    PrevHomeNext
    TERMINATIONUpHow to use this License for your documents
    \ No newline at end of file diff --git a/doc/users_guide/html/x717.html b/doc/users_guide/html/x717.html deleted file mode 100644 index 37b1e60..0000000 --- a/doc/users_guide/html/x717.html +++ /dev/null @@ -1,151 +0,0 @@ -FUTURE REVISIONS OF THIS LICENSE
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation LicenseNext

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised - versions of the GNU Free Documentation License from time to time. - Such new versions will be similar in spirit to the present - version, but may differ in detail to address new problems or - concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing - version number. If the Document specifies that a particular - numbered version of this License "or any later version" applies to - it, you have the option of following the terms and conditions - either of that specified version or of any later version that has - been published (not as a draft) by the Free Software Foundation. - If the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation.


    PrevHomeNext
    TERMINATIONUpHow to use this License for your documents
    \ No newline at end of file diff --git a/doc/users_guide/html/x720.html b/doc/users_guide/html/x720.html new file mode 100644 index 0000000..aa1afe7 --- /dev/null +++ b/doc/users_guide/html/x720.html @@ -0,0 +1,163 @@ + +How to use this License for your documents
    The User's Guide to Gutenprint - Complete Edition
    PrevAppendix A. GNU Free Documentation License 

    How to use this License for your documents

    To use this License in a document you have written, include + a copy of the License in the document and put the following + copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + A copy of the license is included in the section entitled "GNU + Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant + Sections" instead of saying which ones are invariant. If you have + no Front-Cover Texts, write "no Front-Cover Texts" instead of + "Front-Cover Texts being LIST"; likewise for Back-Cover + Texts.

    If your document contains nontrivial examples of program + code, we recommend releasing these examples in parallel under your + choice of free software license, such as the GNU General Public + License, to permit their use in free software.


    PrevHome 
    FUTURE REVISIONS OF THIS LICENSEUp 
    \ No newline at end of file diff --git a/doc/users_guide/html/x722.html b/doc/users_guide/html/x722.html deleted file mode 100644 index 8b3ac32..0000000 --- a/doc/users_guide/html/x722.html +++ /dev/null @@ -1,152 +0,0 @@ -How to use this License for your documents
    The User's Guide to the Gimp-Print Top Quality Printer Drivers
    PrevAppendix A. GNU Free Documentation License 

    How to use this License for your documents

    To use this License in a document you have written, include - a copy of the License in the document and put the following - copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - A copy of the license is included in the section entitled "GNU - Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant - Sections" instead of saying which ones are invariant. If you have - no Front-Cover Texts, write "no Front-Cover Texts" instead of - "Front-Cover Texts being LIST"; likewise for Back-Cover - Texts.

    If your document contains nontrivial examples of program - code, we recommend releasing these examples in parallel under your - choice of free software license, such as the GNU General Public - License, to permit their use in free software.


    PrevHome 
    FUTURE REVISIONS OF THIS LICENSEUp 
    \ No newline at end of file diff --git a/doc/users_guide/html/x85.html b/doc/users_guide/html/x85.html index 5f78ca5..8c2395c 100644 --- a/doc/users_guide/html/x85.html +++ b/doc/users_guide/html/x85.html @@ -1,28 +1,34 @@ + The Gimp-Print Graphical User Interface - The User's Guide to the Gimp-Print Top Quality Printer Drivers - April 2, 2002 - April 2, 2002 - - Andy - Stewart - - - 2002 - Andy Stewart - - - The User's Guide to the Gimp-Print Top Quality Printer -Drivers, Copyright 2002, Andy Stewart. - Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -26,19 +10,19 @@ Back-Cover texts. A copy of the license is included in . - The Gimp-Print Top Quality Printer Drivers (hereafter -called Gimp-Print) are a set of printer drivers written to + The Gutenprint Top Quality Printer Drivers (hereafter +called Gutenprint) are a set of printer drivers written to take advantage of the full capabilities of a wide range of printers. These drivers should work on any POSIX compliant operating system (e.g. Linux, Solaris, IRIX, etc). This document will explain how to -use the Gimp-Print software to achieve high quality printouts from the +use the Gutenprint software to achieve high quality printouts from the GIMP (GNU Image Manipulation Program) and CUPS (Common Unix Printing System). - Please note that in addition to using the Gimp-Print software as a + Please note that in addition to using the Gutenprint software as a print plugin for the GIMP, and as a set of printer drivers for CUPS, this software can also be compiled and used with the Ghostscript software @@ -48,16 +32,16 @@ url="http://www.linuxprinting.org/foomatic.html">Foomatic software. -Regardless of whether the Gimp-Print software is used with the GIMP, +Regardless of whether the Gutenprint software is used with the GIMP, CUPS, Ghostscript, or Foomatic, the print quality and printer settings -remain the same. However, use of the Gimp-Print with Ghostscript and +remain the same. However, use of the Gutenprint with Ghostscript and Foomatic is not covered in this document. These topics may be covered in a future revision of this document. - This document corresponds to version 4.2.0 and later of the Gimp-Print + This document corresponds to version 4.2.0 and later of the Gutenprint software. This document will serve as a guide to the user, and as such -will not explain how to install Gimp-Print, CUPS, GIMP, Ghostscript, +will not explain how to install Gutenprint, CUPS, GIMP, Ghostscript, Foomatic, or any other related software. diff --git a/doc/users_guide/users-guide.pdf b/doc/users_guide/users-guide.pdf index 0a3cbd2..f5a5c25 100644 Binary files a/doc/users_guide/users-guide.pdf and b/doc/users_guide/users-guide.pdf differ diff --git a/doc/users_guide/users-guide.ps b/doc/users_guide/users-guide.ps deleted file mode 100644 index d794f2e..0000000 --- a/doc/users_guide/users-guide.ps +++ /dev/null @@ -1,14972 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: users-guide-eps.dvi -%%Pages: 56 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%DocumentFonts: Helvetica-Bold Times-Roman Times-Bold Times-Italic -%%+ Courier Helvetica Helvetica-Oblique -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -o users-guide-eps.ps users-guide-eps.dvi -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2004.02.29:1955 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: 8r.enc -% @@psencodingfile@{ -% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", -% version = "0.6", -% date = "22 June 1996", -% filename = "8r.enc", -% email = "kb@@mail.tug.org", -% address = "135 Center Hill Rd. // Plymouth, MA 02360", -% codetable = "ISO/ASCII", -% checksum = "119 662 4424", -% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX." -% @} -% -% Idea is to have all the characters normally included in Type 1 fonts -% available for typesetting. This is effectively the characters in Adobe -% Standard Encoding + ISO Latin 1 + extra characters from Lucida. -% -% Character code assignments were made as follows: -% -% (1) the Windows ANSI characters are almost all in their Windows ANSI -% positions, because some Windows users cannot easily reencode the -% fonts, and it makes no difference on other systems. The only Windows -% ANSI characters not available are those that make no sense for -% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen -% (173). quotesingle and grave are moved just because it's such an -% irritation not having them in TeX positions. -% -% (2) Remaining characters are assigned arbitrarily to the lower part -% of the range, avoiding 0, 10 and 13 in case we meet dumb software. -% -% (3) Y&Y Lucida Bright includes some extra text characters; in the -% hopes that other PostScript fonts, perhaps created for public -% consumption, will include them, they are included starting at 0x12. -% -% (4) Remaining positions left undefined are for use in (hopefully) -% upward-compatible revisions, if someday more characters are generally -% available. -% -% (5) hyphen appears twice for compatibility with both ASCII and Windows. -% -/TeXBase1Encoding [ -% 0x00 (encoded characters from Adobe Standard not in Windows 3.1) - /.notdef /dotaccent /fi /fl - /fraction /hungarumlaut /Lslash /lslash - /ogonek /ring /.notdef - /breve /minus /.notdef -% These are the only two remaining unencoded characters, so may as -% well include them. - /Zcaron /zcaron -% 0x10 - /caron /dotlessi -% (unusual TeX characters available in, e.g., Lucida Bright) - /dotlessj /ff /ffi /ffl - /.notdef /.notdef /.notdef /.notdef - /.notdef /.notdef /.notdef /.notdef - % very contentious; it's so painful not having quoteleft and quoteright - % at 96 and 145 that we move the things normally found there down to here. - /grave /quotesingle -% 0x20 (ASCII begins) - /space /exclam /quotedbl /numbersign - /dollar /percent /ampersand /quoteright - /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash -% 0x30 - /zero /one /two /three /four /five /six /seven - /eight /nine /colon /semicolon /less /equal /greater /question -% 0x40 - /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O -% 0x50 - /P /Q /R /S /T /U /V /W - /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore -% 0x60 - /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o -% 0x70 - /p /q /r /s /t /u /v /w - /x /y /z /braceleft /bar /braceright /asciitilde - /.notdef % rubout; ASCII ends -% 0x80 - /.notdef /.notdef /quotesinglbase /florin - /quotedblbase /ellipsis /dagger /daggerdbl - /circumflex /perthousand /Scaron /guilsinglleft - /OE /.notdef /.notdef /.notdef -% 0x90 - /.notdef /.notdef /.notdef /quotedblleft - /quotedblright /bullet /endash /emdash - /tilde /trademark /scaron /guilsinglright - /oe /.notdef /.notdef /Ydieresis -% 0xA0 - /.notdef % nobreakspace - /exclamdown /cent /sterling - /currency /yen /brokenbar /section - /dieresis /copyright /ordfeminine /guillemotleft - /logicalnot - /hyphen % Y&Y (also at 45); Windows' softhyphen - /registered - /macron -% 0xD0 - /degree /plusminus /twosuperior /threesuperior - /acute /mu /paragraph /periodcentered - /cedilla /onesuperior /ordmasculine /guillemotright - /onequarter /onehalf /threequarters /questiondown -% 0xC0 - /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla - /Egrave /Eacute /Ecircumflex /Edieresis - /Igrave /Iacute /Icircumflex /Idieresis -% 0xD0 - /Eth /Ntilde /Ograve /Oacute - /Ocircumflex /Otilde /Odieresis /multiply - /Oslash /Ugrave /Uacute /Ucircumflex - /Udieresis /Yacute /Thorn /germandbls -% 0xE0 - /agrave /aacute /acircumflex /atilde - /adieresis /aring /ae /ccedilla - /egrave /eacute /ecircumflex /edieresis - /igrave /iacute /icircumflex /idieresis -% 0xF0 - /eth /ntilde /ograve /oacute - /ocircumflex /otilde /odieresis /divide - /oslash /ugrave /uacute /ucircumflex - /udieresis /yacute /thorn /ydieresis -] def - -%%EndProcSet -%%BeginProcSet: texps.pro -%! -TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 -index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll -exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics -exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub -dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} -ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict -end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ -dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 -roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def -dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} -if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} -def end - -%%EndProcSet -%%BeginProcSet: special.pro -%! -TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N -/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N -/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N -/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ -/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho -X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B -/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ -/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known -{userdict/md get type/dicttype eq{userdict begin md length 10 add md -maxlength ge{/md md dup length 20 add dict copy def}if end md begin -/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S -atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ -itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll -transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll -curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf -pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} -if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 --1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 -get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip -yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub -neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ -noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop -90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get -neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr -1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr -2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 --1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S -TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ -Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale -}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState -save N userdict maxlength dict begin/magscale true def normalscale -currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts -/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x -psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx -psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub -TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath -moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict -begin/SpecialSave save N gsave normalscale currentpoint TR -@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ -CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury -lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N -/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} -repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N -/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX -currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY -moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X -/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 -1 startangle endangle arc savematrix setmatrix}N end - -%%EndProcSet -%%BeginProcSet: color.pro -%! -TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop -setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll -}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def -/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ -setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ -/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch -known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC -/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC -/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 -setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 -setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 -0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC -/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 -setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 -0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ -0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ -0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC -/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 -setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 -setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 -0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC -/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 -setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 -0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ -0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ -0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC -/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 -setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC -/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 -0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 -0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 -0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 -setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 -0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC -/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 -setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 -0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 -1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC -/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 -setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ -0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} -DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 -setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 -setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 -setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 600 600 (users-guide-eps.dvi) -@start /Fa 134[45 45 65 45 45 25 35 30 1[45 45 45 70 -25 45 1[25 45 45 30 40 45 40 45 40 7[65 2[65 65 55 50 -60 1[50 65 65 80 55 2[30 65 65 50 55 65 60 60 65 5[25 -1[45 1[45 1[45 1[45 45 45 45 25 22 30 22 2[30 30 5[37 -34[{TeXBase1Encoding ReEncodeFont}58 89.6638 /Times-Roman -rf /Fb 138[51 25 46 2[51 3[20 2[20 3[51 1[46 13[66 2[66 -71 1[71 66 4[25 2[56 61 66 1[61 61 65[{TeXBase1Encoding ReEncodeFont}19 -91.3242 /Helvetica-Oblique rf /Fc 134[46 46 66 46 51 -25 46 30 51 51 51 51 76 20 46 20 20 51 51 25 51 51 46 -51 51 1[51 5[61 1[86 1[66 56 61 2[61 71 66 76 51 2[25 -66 71 56 61 66 66 61 61 6[25 5[51 51 1[51 51 25 25 30 -25 2[30 30 20 4[32 31[46 2[{TeXBase1Encoding ReEncodeFont}59 -91.3242 /Helvetica rf /Fd 133[60 66 66 93 1[73 40 66 -47 1[73 73 73 106 33 66 33 33 73 73 1[66 73 66 73 66 -9[113 1[86 73 80 86 1[80 93 86 100 3[33 86 4[86 86 86 -8[66 66 66 66 66 66 66 66 2[33 46[{TeXBase1Encoding ReEncodeFont}46 -119.552 /Helvetica-Bold rf /Fe 133[72 2[112 80 88 48 -80 56 1[88 88 88 128 40 80 1[40 88 88 48 80 88 80 1[80 -11[104 1[96 104 1[96 112 104 120 88 2[40 104 2[96 104 -104 104 104 9[80 80 80 80 80 80 80 1[40 40 43[88 2[{ -TeXBase1Encoding ReEncodeFont}46 143.462 /Helvetica-Bold -rf -%DVIPSBitmapFont: Ff cmsy10 12 2 -/Ff 2 34 df<007FB912E0BA12F0A26C18E03C04789A4D>0 D<1AF0A3861A78A21A7C1A -3CA21A3E1A1E1A1F747EA2747E747E87747E747E1B7E87757EF30FE0F303F8007FBC12FE -BE1280A26CF3FE00CEEA03F8F30FE0F31F8051C7FC1B7E63505A505A63505A505AA250C8 -FC1A1E1A3E1A3CA21A7C1A78A21AF862A359347BB264>33 D E -%EndDVIPSBitmapFont -/Fg 133[50 50 1[72 50 55 28 50 33 1[55 55 55 83 22 1[22 -22 55 55 28 55 55 50 55 55 10[66 72 61 66 72 1[66 78 -72 83 55 66 1[28 72 1[61 1[72 72 66 66 17[28 1[33 42[50 -2[{TeXBase1Encoding ReEncodeFont}44 99.6264 /Helvetica -rf /Fh 129[54 1[54 1[54 54 54 54 54 54 54 54 54 54 54 -54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 1[54 2[54 -2[54 1[54 1[54 54 54 54 54 54 54 54 54 54 54 54 54 1[54 -54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 -54 54 54 54 54 54 54 54 54 1[54 54 54 54 54 1[54 54 1[54 -33[{TeXBase1Encoding ReEncodeFont}81 89.6638 /Courier -rf /Fi 134[44 44 1[44 50 28 39 39 1[50 50 50 72 28 1[28 -28 50 50 28 44 50 44 1[50 11[72 55 50 61 1[61 1[66 83 -55 2[33 72 72 61 1[72 66 1[61 7[50 50 50 50 50 50 50 -50 50 50 1[25 33 45[{TeXBase1Encoding ReEncodeFont}48 -99.6264 /Times-Italic rf /Fj 134[50 1[72 50 55 33 39 -44 1[55 50 55 83 28 1[33 28 55 50 33 44 55 44 55 50 7[72 -1[100 1[72 66 55 2[61 1[72 94 66 2[39 78 78 61 1[72 72 -1[72 7[50 50 50 50 50 50 50 50 50 50 28 25 33 3[33 33 -37[55 2[{TeXBase1Encoding ReEncodeFont}54 99.6264 /Times-Bold -rf /Fk 134[115 115 2[126 69 115 80 1[126 126 126 184 -57 1[57 57 126 126 69 115 126 115 126 115 11[149 126 -138 2[138 1[149 172 126 2[57 149 161 126 1[149 149 1[149 -12[115 115 115 115 2[57 69 45[{TeXBase1Encoding ReEncodeFont}41 -206.584 /Helvetica-Bold rf /Fl 106[28 27[40 40 58 40 -40 22 31 27 1[40 40 40 62 22 40 1[22 40 40 27 35 40 35 -40 35 10[58 58 49 44 1[58 44 1[58 1[49 4[58 44 1[58 53 -53 58 14[40 40 40 22 20 27 20 4[27 39[{TeXBase1Encoding ReEncodeFont}46 -79.7012 /Times-Roman rf /Fm 86[76 46[44 50 50 72 50 50 -28 39 33 50 50 50 50 78 28 50 28 28 50 50 33 44 50 44 -50 44 1[50 2[28 2[72 72 94 72 72 61 55 66 72 55 72 72 -89 61 72 39 33 72 72 55 61 72 66 66 72 92 44 56 56 1[28 -28 50 50 50 50 50 50 50 50 50 50 28 25 33 25 2[33 33 -33 1[83 50 1[41 33 29[55 55 2[{TeXBase1Encoding ReEncodeFont}83 -99.6264 /Times-Roman rf /Fn 134[55 1[78 55 61 33 55 39 -1[61 61 61 89 28 2[28 61 61 33 55 61 55 1[55 7[66 3[72 -61 66 72 78 66 2[83 61 2[28 72 78 61 66 72 72 72 72 8[55 -55 55 55 55 55 55 55 2[28 33 28 2[33 33 28 39[{ -TeXBase1Encoding ReEncodeFont}52 99.6264 /Helvetica-Bold -rf /Fo 134[96 1[134 1[105 57 96 67 1[105 105 105 153 -48 2[48 105 105 57 96 105 96 1[96 7[115 1[163 115 124 -105 115 124 134 115 134 124 143 105 124 1[48 124 134 -105 115 124 124 124 124 7[96 96 96 96 96 96 96 96 96 -96 1[48 57 42[105 2[{TeXBase1Encoding ReEncodeFont}55 -172.154 /Helvetica-Bold rf /Fp 134[138 2[138 151 83 138 -96 1[151 151 151 220 69 2[69 151 2[138 151 2[138 11[179 -151 2[193 165 8[193 2[179 22[83 5[69 39[{TeXBase1Encoding ReEncodeFont} -24 247.895 /Helvetica-Bold rf end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin - -%%EndSetup -%%Page: 1 1 -1 0 bop Black 0 TeXcolorgray Black Black 487 677 a Fp(The)70 -b(User')-15 b(s)69 b(Guide)g(to)g(the)90 999 y(Gimp-Print)h(T)-20 -b(op)71 b(Quality)d(Printer)1446 1321 y(Driver)l(s)1322 -2666 y Fo(And)m(y)49 b(Ste)m(war)s(t)p Black Black eop -%%Page: 2 2 -2 1 bop Black 0 TeXcolorgray Black Black -2 579 a Fn(The)28 -b(User')-6 b(s)28 b(Guide)f(to)h(the)g(Gimp-Print)e(T)-8 -b(op)28 b(Quality)f(Printer)h(Driver)o(s)-2 708 y Fm(by)c(Andy)h(Ste)n -(w)o(art)-2 967 y(Published)f(April)g(2,)h(2002)-2 1097 -y(Cop)o(yright)f(\251)g(2002)h(by)f(Andy)g(Ste)n(w)o(art)-2 -1376 y(The)h(Gimp-Print)e(T)-8 b(op)25 b(Quality)f(Printer)h(Dri)n(v)o -(ers)e(\(hereafter)j(called)f(Gimp-Print\))f(are)i(a)f(set)f(of)h -(printer)-2 1505 y(dri)n(v)o(ers)e(written)h(to)h(tak)o(e)g(adv)n -(antage)f(of)h(the)g(full)f(capabilities)g(of)h(a)g(wide)f(range)h(of)g -(printers.)f(These)-2 1635 y(dri)n(v)o(ers)f(should)h(w)o(ork)h(on)f -(an)o(y)g(POSIX)i(compliant)e(operating)g(system)f(\(e.g.)i(Linux,)f -(Solaris,)h(IRIX,)-2 1764 y(etc\).)g(This)f(document)g(will)g(e)o -(xplain)f(ho)n(w)h(to)h(use)g(the)f(Gimp-Print)g(softw)o(are)h(to)f -(achie)n(v)o(e)g(high)h(quality)-2 1894 y(printouts)e(from)i(the)f -(GIMP)h(\(http://www)-6 b(.gimp.or)n(g\))21 b(\(GNU)k(Image)g -(Manipulation)e(Program\))i(and)-2 2023 y(CUPS)h(\(http://www)-6 -b(.cups.or)n(g\))22 b(\(Common)i(Unix)g(Printing)g(System\).)-2 -2203 y(Please)h(note)g(that)f(in)g(addition)g(to)g(using)g(the)h -(Gimp-Print)f(softw)o(are)g(as)h(a)h(print)e(plugin)f(for)i(the)g(GIMP) --11 b(,)-2 2332 y(and)25 b(as)f(a)i(set)e(of)h(printer)g(dri)n(v)o(ers) -e(for)i(CUPS,)h(this)e(softw)o(are)h(can)g(also)g(be)g(compiled)e(and)i -(used)g(with)f(the)-2 2462 y(Ghostscript)f(\(http://www)-6 -b(.ghostscript.com\))20 b(softw)o(are)25 b(and)g(with)f(the)h(F)o -(oomatic)-2 2591 y(\(http://www)-6 b(.linuxprinting.or)n(g/foomat)o -(ic.htm)o(l\))19 b(softw)o(are.)-2 2771 y(Re)o(gardless)24 -b(of)h(whether)g(the)f(Gimp-Print)g(softw)o(are)h(is)f(used)h(with)f -(the)g(GIMP)-11 b(,)25 b(CUPS,)h(Ghostscript,)d(or)-2 -2900 y(F)o(oomatic,)g(the)i(print)f(quality)g(and)h(printer)f(settings) -g(remain)g(the)h(same.)f(Ho)n(we)n(v)o(er)l(,)g(use)g(of)h(the)-2 -3030 y(Gimp-Print)f(with)g(Ghostscript)f(and)i(F)o(oomatic)e(is)i(not)f -(co)o(v)o(ered)g(in)h(this)f(document.)f(These)i(topics)f(may)-2 -3159 y(be)h(co)o(v)o(ered)f(in)g(a)i(future)e(re)n(vision)g(of)h(this)e -(document.)-2 3339 y(This)h(document)g(corresponds)g(to)g(v)o(ersion)g -(4.2.0)g(and)h(later)g(of)g(the)f(Gimp-Print)g(softw)o(are.)h(This)-2 -3468 y(document)f(will)g(serv)o(e)g(as)h(a)g(guide)f(to)h(the)g(user)l -(,)f(and)h(as)g(such)f(will)g(not)h(e)o(xplain)e(ho)n(w)h(to)h(install) --2 3598 y(Gimp-Print,)e(CUPS,)j(GIMP)-11 b(,)25 b(Ghostscript,)e(F)o -(oomatic,)h(or)h(an)o(y)f(other)h(related)g(softw)o(are.)-2 -3777 y(Andy)f(Ste)n(w)o(art,)h(the)f(author)l(,)h(is)f(the)h(founder)f -(of)h(the)g(W)-8 b(orcester)25 b(Linux)f(Users')h(Group)-2 -3906 y(\(http://www)-6 b(.wlug.or)n(g\))22 b(in)i(W)-8 -b(orcester)l(,)25 b(Massachusetts,)e(USA.)j(The)e(group)h(w)o(as)g -(founded)f(in)g(July)-2 4036 y(1997)g(and)h(has)f(approximately)g(140)g -(people)h(on)f(its)g(mailing)g(list.)f(Monthly)g(meetings)h(are)i(held) -e(and)h(all)-2 4165 y(are)g(in)l(vited.)-2 4345 y(In)g(terms)f(of)h -("code",)f(this)g(is)g(the)h(author')-5 b(s)24 b(\002rst)h(contrib)n -(ution)e(to)h(the)h(open)f(source)h(community)-6 b(,)22 -b(and)-2 4474 y(de\002nitely)i(his)g(\002rst)h(e)o(xperience)g(with)f -(DocBook.)h(Constructi)n(v)o(e)e(comments,)g(praise,)i(w)o(ords)f(of)-2 -4604 y(encouragement,)g(and)h(the)g(lik)o(e)f(will)g(be)h(most)e -(appreciated)j(if)e(e-mailed)h(to)f(the)h(author)-2 4733 -y(\(mailto:andyste)n(w)o(art@attbi.com\).)p Black Black -eop -%%Page: 3 3 -3 2 bop Black 0 TeXcolorgray Black Black -2 579 a Fl(The)20 -b(User')l(s)e(Guide)i(to)g(the)g(Gimp-Print)f(T)-6 b(op)19 -b(Quality)h(Printer)g(Dri)n(v)o(ers,)f(Cop)o(yright)g(2002,)g(Andy)g -(Ste)n(w)o(art.)-2 708 y(Permission)h(is)g(granted)g(to)g(cop)o(y)-5 -b(,)20 b(distrib)n(ute)g(and/or)g(modify)f(this)h(document)g(under)g -(the)g(terms)g(of)f(the)i(GNU)d(Free)-2 838 y(Documentation)i(License,) -g(V)-9 b(ersion)19 b(1.1)g(or)g(an)o(y)g(later)h(v)o(ersion)f -(published)h(by)f(the)h(Free)g(Softw)o(are)f(F)o(oundation)h(with)f(no) -g(in)m(v)n(ariant)-2 967 y(sections,)h(no)g(Front-Co)o(v)o(er)f(te)o -(xts,)h(and)g(no)f(Back-Co)o(v)o(er)h(te)o(xts.)g(A)g(cop)o(y)g(of)f -(the)h(license)i(is)e(included)g(in)p 0 TeXcolorgray -20 w(Appendix)f(A)p Black(.)p Black Black eop -%%Page: 4 4 -4 3 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(T)-17 -b(ab)n(le)58 b(of)g(Contents)p 0 TeXcolorgray 396 879 -a Fj(1.)25 b(Pr)n(oject)h(History)p Black Black 17 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(1)p Black 0 TeXcolorgray 396 1029 -a(2.)f(GIMP)f(and)h(Gimp-Print)p Black Black 17 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(1)p Black 0 TeXcolorgray 596 -1178 a Fm(2.1.)f(Running)g(the)h(GIMP)p Black Black 8 -w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(1)p Black 0 TeXcolorgray 596 1308 a(2.2.)f(The)h(Gimp-Print)e -(Graphical)i(User)g(Interf)o(ace)p Black Black 2 w(.)p -Black Black 1 w(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(2)p Black 0 TeXcolorgray 795 -1437 a(2.2.1.)f(Printer)h(Settings)p Black Black 5 w(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(4)p Black 0 TeXcolorgray 994 -1567 a(2.2.1.1.)f(Printer)p Black Black 3 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(4)p Black 0 TeXcolorgray 994 1696 a(2.2.1.2.)g(Setup)h(Printer)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(4)p Black 0 TeXcolorgray -994 1826 a(2.2.1.3.)f(Ne)n(w)g(Printer)p Black Black -16 w(.)p Black Black 1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(5)p Black 0 -TeXcolorgray 994 1955 a(2.2.1.4.)g(Media)g(Size)p Black -Black 23 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(6)p Black 0 TeXcolorgray 994 2085 a(2.2.1.5.)g(Media)g(T)-8 -b(ype)p Black Black 22 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(7)p Black 0 TeXcolorgray 994 2214 a(2.2.1.6.)24 -b(Media)g(Source)p Black Black 18 w(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(7)p Black 0 TeXcolorgray 994 -2344 a(2.2.1.7.)g(Ink)h(T)-8 b(ype)p Black Black 18 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(7)p Black 0 TeXcolorgray 994 2473 a(2.2.1.8.)24 -b(Resolution)p Black Black 17 w(.)p Black Black -2 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(7)p -Black 0 TeXcolorgray 1193 2603 a(2.2.1.8.1.)g(DPI)p Black -Black 14 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(8)p Black 0 TeXcolorgray 1193 -2732 a(2.2.1.8.2.)g(Draft)h(or)g(F)o(ast)f(Economy)g(Draft)p -Black Black 21 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(8)p Black 0 TeXcolorgray -1193 2862 a(2.2.1.8.3.)g(Unidirectional)p Black Black -21 w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(8)p Black 0 TeXcolorgray 1193 2991 a(2.2.1.8.4.)g(High\(est\))g -(Quality)p Black Black 21 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(9)p Black 0 TeXcolorgray 1193 3121 a(2.2.1.8.5.)g(Interlea)n(v)o -(e)p Black Black 4 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(9)p -Black 0 TeXcolorgray 1193 3251 a(2.2.1.8.6.)g(DMT)p Black -Black 3 w(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(9)p -Black 0 TeXcolorgray 795 3380 a(2.2.2.)g(Pre)n(vie)n(w)p -Black Black 2 w(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(9)p Black 0 TeXcolorgray 795 3510 -a(2.2.3.)g(Position)p Black Black 21 w(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(10)p -Black 0 TeXcolorgray 994 3639 a(2.2.3.1.)g(Orientation)p -Black Black 18 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(11)p Black -0 TeXcolorgray 994 3769 a(2.2.3.2.)g(Automatic)f(Centering)p -Black Black 8 w(.)p Black Black 1 w(.)p Black Black -1 -w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(11)p Black 0 TeXcolorgray 994 3898 -a(2.2.3.3.)h(Manual)g(Settings)p Black Black 21 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(11)p -Black 0 TeXcolorgray 1193 4028 a(2.2.3.3.1.)g(Left)p -Black Black 8 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(12)p -Black 0 TeXcolorgray 1193 4157 a(2.2.3.3.2.)g(Right)p -Black Black 3 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(12)p Black 0 TeXcolorgray 1193 -4287 a(2.2.3.3.3.)g(Right)g(Border)p Black Black(.)p -Black Black 1 w(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(12)p Black 0 TeXcolorgray 1193 -4416 a(2.2.3.3.4.)g(T)-8 b(op)p Black Black 21 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(12)p Black 0 TeXcolorgray -1193 4546 a(2.2.3.3.5.)24 b(Bottom)p Black Black 24 w(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(12)p -Black 0 TeXcolorgray 1193 4675 a(2.2.3.3.6.)g(Bottom)g(Border)p -Black Black 22 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(13)p Black 0 TeXcolorgray -795 4805 a(2.2.4.)g(Size)p Black Black 3 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(13)p Black 0 TeXcolorgray 994 4934 a(2.2.4.1.)g(Slider)h(Bar)g -(and)g(Spin)g(Box)p Black Black 22 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(13)p Black -0 TeXcolorgray 994 5064 a(2.2.4.2.)f(Scale)i(by)e(Percent)i(or)f(PPI)p -Black Black 6 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(13)p -Black 0 TeXcolorgray 994 5193 a(2.2.4.3.)f(Use)h(Original)f(Image)g -(Size)p Black Black 14 w(.)p Black Black 1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(14)p Black 0 TeXcolorgray -Black 3695 5692 a Fi(4)p 0 TeXcolorgray eop -%%Page: 5 5 -5 4 bop 0 TeXcolorgray Black 0 TeXcolorgray Black 0 TeXcolorgray -994 579 a Fm(2.2.4.4.)24 b(W)l(idth)g(and)h(Height)p -Black Black 12 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(14)p Black -0 TeXcolorgray 994 708 a(2.2.4.5.)f(Units)p Black Black -8 w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(14)p Black 0 TeXcolorgray 795 -838 a(2.2.5.)g(Image/Output)f(Settings)p Black Black -21 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(14)p Black 0 TeXcolorgray 994 967 -a(2.2.5.1.)h(Image)h(T)-8 b(ype)p Black Black 3 w(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(15)p Black 0 TeXcolorgray 1193 -1097 a(2.2.5.1.1.)24 b(Line)g(Art)p Black Black 8 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(15)p Black 0 TeXcolorgray 1193 -1226 a(2.2.5.1.2.)g(Solid)g(Colors)p Black Black 22 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(15)p Black 0 TeXcolorgray 1193 -1356 a(2.2.5.1.3.)g(Photograph)p Black Black 14 w(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(15)p Black 0 TeXcolorgray 994 1486 a(2.2.5.2.)g(Output)f(T)-8 -b(ype)p Black Black 25 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(15)p Black 0 TeXcolorgray 994 1615 a(2.2.5.3.)24 -b(Adjust)f(Output)p Black Black 5 w(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(15)p -Black 0 TeXcolorgray 1193 1745 a(2.2.5.3.1.)h(Brightness)p -Black Black 21 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(16)p Black -0 TeXcolorgray 1193 1874 a(2.2.5.3.2.)g(Contrast)p Black -Black 11 w(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(16)p Black -0 TeXcolorgray 1193 2004 a(2.2.5.3.3.)g(Cyan,)h(Magenta,)f(Y)-10 -b(ello)n(w)p Black Black 7 w(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(16)p Black 0 TeXcolorgray 1193 2133 a(2.2.5.3.4.)24 -b(Saturation)p Black Black 14 w(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(17)p Black 0 TeXcolorgray 1193 2263 -a(2.2.5.3.5.)g(Density)p Black Black 14 w(.)p Black Black --2 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(17)p Black 0 TeXcolorgray -1193 2392 a(2.2.5.3.6.)g(Gamma)p Black Black 8 w(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(17)p -Black 0 TeXcolorgray 1193 2522 a(2.2.5.3.7.)g(Dither)g(Algorithm)p -Black Black 3 w(.)p Black Black -2 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(17)p Black -0 TeXcolorgray 1193 2651 a(2.2.5.3.8.)g(Set)h(Def)o(aults)f(and)h -(Close)p Black Black 12 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(18)p Black 0 TeXcolorgray 795 2781 a(2.2.6.)f(Printing)g(and)h(Sa) -n(ving)f(Settings)p Black Black 10 w(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(18)p Black 0 TeXcolorgray 396 2930 -a Fj(3.)h(CUPS)g(and)g(Gimp-Print)p Black Black 3 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(20)p Black 0 TeXcolorgray 596 3080 a Fm(3.1.)f(Introduction)p -Black Black 6 w(.)p Black Black -2 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(20)p Black 0 TeXcolorgray 596 3209 a(3.2.)g(CUPS)i(Printer)f -(Installation)p Black Black 3 w(.)p Black Black -2 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(20)p Black 0 TeXcolorgray 596 3339 a(3.3.)f(Con\002guring)g(your)h -(Printer)g(in)f(CUPS)p Black Black 8 w(.)p Black Black -2 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(26)p -Black 0 TeXcolorgray 596 3468 a(3.4.)g(Using)g(CUPS)i(from)e(the)h -(Command)f(Line)p Black Black 19 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(27)p Black -0 TeXcolorgray 396 3618 a Fj(4.)h(Gimp-Print)g(Utilities)p -Black Black 16 w(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(30)p Black -0 TeXcolorgray 596 3767 a Fm(4.1.)f(escputil)p Black -Black 14 w(.)p Black Black -1 w(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(30)p Black 0 TeXcolorgray 795 3896 a(4.1.1.)g(Determining)f(Ink)i -(Le)n(v)o(el)p Black Black 12 w(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(30)p -Black 0 TeXcolorgray 795 4026 a(4.1.2.)f(Error)h(During)f(Ink)h(Le)n(v) -o(el)f(Determination)p Black Black 19 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(31)p Black 0 TeXcolorgray 795 -4156 a(4.1.3.)g(Nozzle)h(Check)p Black Black 11 w(.)p -Black Black 1 w(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(32)p Black 0 TeXcolorgray 795 -4285 a(4.1.4.)f(Clean)h(the)g(Print)f(Head)p Black Black -14 w(.)p Black Black 1 w(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(33)p Black 0 TeXcolorgray 795 4415 -a(4.1.5.)g(Align)g(the)g(Print)h(Head)p Black Black 20 -w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(34)p Black 0 TeXcolorgray 795 4544 a(4.1.6.)f(Printer)h -(Identi\002cation)p Black Black 19 w(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(38)p -Black 0 TeXcolorgray 795 4674 a(4.1.7.)f(More)h(Information)p -Black Black 6 w(.)p Black Black -2 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(38)p Black 0 TeXcolorgray 396 4823 a Fj(A.)g(GNU)f(Fr)n(ee)i -(Documentation)g(License)p Black Black 10 w(.)p Black -Black 1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black 0 TeXcolorgray 11 w(39)p Black -0 TeXcolorgray 596 4972 a Fm(0.)e(PREAMBLE)p Black Black -17 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(39)p Black 0 TeXcolorgray 596 5102 a(1.)g(APPLICABILITY)j(AND)d -(DEFINITIONS)p Black Black 18 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(39)p Black 0 TeXcolorgray 596 5231 -a(2.)g(VERB)m(A)-11 b(TIM)25 b(COPYING)p Black Black -23 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(41)p Black 0 TeXcolorgray -Black 3695 5692 a Fi(5)p 0 TeXcolorgray eop -%%Page: 6 6 -6 5 bop 0 TeXcolorgray Black 0 TeXcolorgray Black 0 TeXcolorgray -596 579 a Fm(3.)24 b(COPYING)i(IN)f(Q)o(U)l(ANTITY)p -Black Black 14 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(41)p Black 0 TeXcolorgray 596 -708 a(4.)f(MODIFICA)-11 b(TIONS)p Black Black 23 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(42)p -Black 0 TeXcolorgray 596 838 a(5.)24 b(COMBINING)i(DOCUMENTS)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(44)p Black 0 TeXcolorgray 596 967 a(6.)e(COLLECTIONS)i(OF)f -(DOCUMENTS)p Black Black 17 w(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(45)p Black 0 TeXcolorgray 596 1097 a(7.)f(A)l(GGREGA)-11 -b(TION)25 b(WITH)g(INDEPENDENT)f(W)o(ORKS)p Black Black -23 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(45)p Black 0 TeXcolorgray 596 1226 a(8.)g(TRANSLA)-11 -b(TION)p Black Black 11 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(46)p Black 0 TeXcolorgray 596 -1356 a(9.)24 b(TERMIN)m(A)-11 b(TION)p Black Black 20 -w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(46)p Black 0 TeXcolorgray 596 1486 a(10.)24 b(FUTURE)h(REVISIONS)h -(OF)g(THIS)f(LICENSE)p Black Black 3 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(46)p Black 0 TeXcolorgray 596 1615 -a(Ho)n(w)f(to)g(use)h(this)f(License)g(for)h(your)g(documents)p -Black Black 8 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(47)p -Black Black 3692 5692 a Fi(6)p Black eop -%%Page: 1 7 -1 6 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(List)57 -b(of)h(Figures)p 0 TeXcolorgray 396 879 a Fm(2-1.)25 -b(The)g(Startup)f(W)l(indo)n(w)g(for)h(The)g(GIMP)p Black -Black 12 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(1)p Black 0 TeXcolorgray 396 -1009 a(2-2.)g(A)g(Sample)f(Image)h(Displayed)f(by)h(The)g(GIMP)p -Black Black 9 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(2)p Black 0 TeXcolorgray -396 1138 a(2-3.)g(The)g(Gimp-Print)f(Graphical)g(User)h(Interf)o(ace)h -(1)f(\(GUI\))p Black Black 24 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(3)p -Black 0 TeXcolorgray 396 1268 a(2-4.)g(The)g(Gimp-Print)f(Graphical)g -(User)h(Interf)o(ace)h(2)f(\(GUI\))p Black Black 24 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(3)p Black 0 TeXcolorgray 396 1397 -a(2-5.)g(The)g(Setup)g(Printer)g(W)l(indo)n(w)p Black -Black 22 w(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black 0 TeXcolorgray 11 w(5)p Black 0 TeXcolorgray -396 1527 a(2-6.)g(The)g(Ne)n(w)f(Printer)h(W)l(indo)n(w)p -Black Black 15 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black 0 TeXcolorgray 11 w(6)p Black 0 TeXcolorgray 396 -1656 a(2-7.)g(The)g(Print)f(Color)h(Adjust)f(W)l(indo)n(w)p -Black Black 9 w(.)p Black Black -1 w(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(16)p -Black 0 TeXcolorgray 396 1786 a(3-1.)h(The)g(CUPS)h(Startup)e(W)l(indo) -n(w)p Black Black 9 w(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(20)p Black 0 TeXcolorgray 396 1916 a(3-2.)h(The)g(CUPS)h(Printers) -f(W)l(indo)n(w)p Black Black 12 w(.)p Black Black -2 -w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(21)p Black 0 TeXcolorgray 396 2045 a(3-3.)g(The)g(CUPS)h(Admin)d -(W)l(indo)n(w)p Black Black 19 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(21)p Black 0 TeXcolorgray 396 2175 a(3-4.)i(The)g(CUPS)h(Admin)d -(De)n(vice)i(W)l(indo)n(w)p Black Black 15 w(.)p Black -Black -2 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(22)p -Black 0 TeXcolorgray 396 2304 a(3-5.)g(The)g(CUPS)h(Admin)d(Model/Dri)n -(v)o(er)g(W)l(indo)n(w)p Black Black 23 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(22)p Black 0 TeXcolorgray 396 2434 -a(3-6.)i(The)g(2nd)f(CUPS)i(Admin)e(Model/Dri)n(v)o(er)f(W)l(indo)n(w)p -Black Black 23 w(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(24)p -Black 0 TeXcolorgray 396 2563 a(3-7.)i(The)g(CUPS)h(Admin)d(Success)j -(W)l(indo)n(w)p Black Black 4 w(.)p Black Black -2 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black --1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black -1 w(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -0 TeXcolorgray 11 w(24)p Black 0 TeXcolorgray 396 2693 -a(3-8.)f(The)g(CUPS)h(W)l(indo)n(w)d(for)i(Y)-11 b(our)25 -b(Printer)p Black Black 15 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black -1 w(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black -1 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black 0 TeXcolorgray 11 w(25)p -Black 0 TeXcolorgray 396 2822 a(3-9.)g(The)g(CUPS)h(Printer)f -(Co\002guration)f(W)l(indo)n(w)p Black Black 19 w(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black -1 w(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black -1 w(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p -Black Black(.)p Black Black(.)p Black Black(.)p Black -Black(.)p Black Black(.)p Black Black -1 w(.)p Black -Black(.)p Black Black(.)p Black Black(.)p Black 0 TeXcolorgray -11 w(27)p Black Black 3695 5692 a Fi(1)p Black eop -%%Page: 1 8 -1 7 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(Chapter)58 -b(1.)f(Pr)l(oject)h(Histor)r(y)396 944 y Fm(This)24 b(softw)o(are)h -(package)h(w)o(as)e(\002rst)h(written)f(by)h(Michael)f(Sweet)i(of)f -(Easy)f(Softw)o(are)396 1073 y(Products)h(\(http://www)-6 -b(.easysw)g(.com\))21 b(and)k(initially)e(w)o(ork)o(ed)i(only)f(as)g(a) -i(print)e(plugin)f(to)i(the)396 1203 y(GIMP)g(\(GNU)g(Image)g -(Manipulation)e(Program\).)i(In)g(the)f(summer)g(of)h(1999,)f(Robert) -396 1333 y(Kra)o(witz)h(\(the)f(current)h(Gimp-Print)f(project)h -(leader\))g(purchased)g(an)g(Epson)f(Stylus)g(Photo)396 -1462 y(EX)h(printer)f(to)h(feed)g(his)f(photography)f(hobby)-6 -b(.)24 b(Finding)g(no)g(e)o(xisting)f(printer)i(dri)n(v)o(ers,)396 -1592 y(Robert)g(adapted)g(Mik)o(e')-5 b(s)24 b(Gimp-Print)g(plugin)f -(to)i(his)f(six-color)g(printer)l(,)g(and)h(by)f(the)h(end)g(of)396 -1721 y(the)g(year)g(released)h(v)o(ersion)d(3.0)i(of)g(the)f -(Gimp-Print)g(softw)o(are,)h(which)f(w)o(as)h(included)f(in)396 -1851 y(v)o(ersion)g(1.1)f(of)i(the)f(GIMP)-11 b(.)24 -b(The)h(intention)e(w)o(as)h(for)h(this)e(to)h(be)g(the)h(stable)e -(plugin)h(in)g(v)o(ersion)396 1980 y(1.2)h(of)g(the)f(GIMP)h(while)f -(de)n(v)o(elopment)f(of)i(the)g(Gimp-Print)e(plugin)h(continued)g(for)h -(later)396 2110 y(release.)396 2289 y(Robert)g(put)g(the)f(Gimp-Print)g -(de)n(v)o(elopment)f(tree)i(on)f(SourceF)o(or)n(ge)i(starting)e(with)g -(v)o(ersion)396 2418 y(3.1,)h(and)f(quickly)g(found)g(a)i(group)e(of)h -(lik)o(e-minded)e(people)i(who)f(w)o(anted)h(to)f(print)g(high)396 -2548 y(quality)g(output)f(on)i(ine)o(xpensi)n(v)o(e)d(inkjet)i -(printers.)g(One)h(of)g(the)g(main)f(goals,)g(which)g(w)o(as)h(not)396 -2677 y(e)o(xpected)g(to)f(be)h(met)f(until)g(late)h(in)f(the)h(v)o -(ersion)f(3.1)g(c)o(ycle,)h(w)o(as)f(to)h(write)f(a)i(Ghostscript)396 -2807 y(dri)n(v)o(er)e(so)h(that)f(printing)f(w)o(ould)h(not)h(be)f -(restricted)h(to)g(the)f(GIMP)-11 b(.)25 b(Imagine)f(Robert')-5 -b(s)396 2936 y(surprise)25 b(when)f(Henryk)h("Buggs")f(Richter)h(wrote) -g(one)g(within)e(days!)396 3116 y(In)i(July)f(2000,)g(not)g(more)h -(than)g(a)g(year)g(after)g(Robert)h(bought)d(his)h(Epson)g(Stylus)g -(Photo)h(EX,)396 3245 y(he)g(w)o(as)g(in)l(vited)f(to)g(the)h(Linux)f -(Printing)g(Summit)f(hosted)h(by)h(V)-13 b(A)24 b(Linux)g(Systems.)g -(In)396 3375 y(preparation)h(for)g(that,)f(he)h(spent)f(long)g(hours)h -(printing)e(out)h(test)h(images.)f(Robert)h(went)f(back)396 -3504 y(to)h(the)f(Gimp-Print)g(v)o(ersion)g(3.0.9)g(release,)h(which)g -(seemed)f(lik)o(e)h(such)f(an)h(adv)n(ance)g(at)g(the)396 -3634 y(time,)f(and)h(w)o(as)g(\003oored)g(at)g(ho)n(w)f(f)o(ar)h(the)g -(project)f(had)h(come)g(in)f(four)h(months!)f(Output)f(that)396 -3763 y(had)i(been)g(considered)g(impressi)n(v)o(e)d(with)i(using)g(six) -g(colors)h(w)o(as)f(put)h(to)f(shame)g(by)h(four)396 -3893 y(color)g(output.)e(That)i(should)e(gi)n(v)o(e)h(you)g(an)h(idea)g -(what)g(six)f(color)h(and)f(v)n(ariable)h(dot)f(size)396 -4022 y(printers)h(can)g(do.)f(It)h(also)f(illustrates)g(what)g(a)h -(group)g(of)g(committed)e(people)h(can)h(do.)396 4202 -y(Robert)g(came)g(a)o(w)o(ay)g(from)g(the)f(Printing)g(Summit)g(with)g -(a)h(lot)f(of)h(ne)n(w)f(ideas,)h(and)g(in)396 4331 y(No)o(v)o(ember)f -(2000,)g(Gimp-Print)g(v)o(ersion)f(4.0)i(w)o(as)g(released,)g(the)f -(culmination)f(of)i(9)g(months)396 4461 y(of)g(w)o(ork)g(by)f(the)h -(team.)f(The)h(quality)f(w)o(as)h(already)g(tremendously)e(impro)o(v)o -(ed)g(o)o(v)o(er)h(what)g(the)396 4590 y(softw)o(are)h(could)f(do)h(at) -g(the)f(Printing)g(Summit.)396 4770 y(The)h(team)g(started)f(serious)g -(w)o(ork)h(on)f(v)o(ersion)g(4.1)h(in)f(December)h(2000,)f(and)h(v)o -(ersion)f(4.2.0)396 4899 y(w)o(as)h(released)g(in)g(No)o(v)o(ember)e -(2001.)h(Despite)h(the)f(f)o(act)h(that)g(v)o(ersion)f(4.2.0)g(is)g(a)h -("minor")396 5029 y(release)h(o)o(v)o(er)e(v)o(ersion)f(4.0,)i(there)g -(are)g(v)n(ast)f(impro)o(v)o(ements:)p Black 3695 5692 -a Fi(1)p Black eop -%%Page: 2 9 -2 8 bop Black 0 TeXcolorgray Black 2681 67 a Fi(Chapter)24 -b(1.)h(Pr)l(oject)e(History)p Black Black 396 579 a Fl(\225)p -Black 97 w Fm(The)i(dri)n(v)o(er)e(is)i(b)n(uilt)e(as)i(a)g(shared)g -(library)-6 b(,)24 b(making)g(it)g(much)h(easier)g(to)f(use)h(by)g -(higher)496 708 y(layers)g(of)g(softw)o(are)p Black 396 -888 a Fl(\225)p Black 97 w Fm(The)g(packaging)f(system)g(no)n(w)g -(follo)n(ws)f(GNU)i(standards)p Black 396 1067 a Fl(\225)p -Black 72 w Fm(The)g(print)f(quality)f(\(in)i(particular)l(,)g(color)f -(accurac)o(y)-6 b(,)25 b(a)g(well-kno)n(wn)f(weakness)g(in)h(4.0\))f -(is)496 1197 y(e)n(v)o(en)g(better)p Black 396 1376 a -Fl(\225)p Black 97 w Fm(Impro)o(v)o(ed)f(performance)p -Black 396 1555 a Fl(\225)p Black 97 w Fm(Man)o(y)h(more)g(options)p -Black 396 1735 a Fl(\225)p Black 97 w Fm(More)g(supported)g(printers) -396 2093 y(Releases)i(of)f(Gimp-Print)e(ha)n(v)o(e)i(been)g -(historically)e(numbered)h(in)h(a)g(f)o(ashion)f(similar)g(to)g(that) -396 2223 y(of)h(the)g(Linux)f(k)o(ernel,)h(where)g(major)f(releases)h -(are)h(denoted)e(by)h(the)f(\002rst)h(digit)f(\(in)h(this)e(case)396 -2352 y('4'\),)i(while)g(minor)f(releases)h(are)g(denoted)g(by)f -(subsequent)g(digits)f(\(such)i(as)g('4.2.0'\).)f(Ev)o(en)396 -2482 y(numbered)h(minor)e(releases)j(are)f(considered)g(stable,)f -(while)g(odd)h(numbered)f(minor)g(releases)396 2611 y(are)i(considered) -e(de)n(v)o(elopment)f(releases)i(\(whose)g(stability)e(may)h(v)n(ary)h -(for)g(an)o(y)f(gi)n(v)o(en)396 2741 y(release\).)396 -2920 y(This)g(project)f(is)h(by)g(no)g(means)f(\002nished.)h(In)g -(future)g(releases,)g(the)g(de)n(v)o(elopment)e(team)i(hopes)396 -3050 y(to)h(include)f(the)h(follo)n(wing:)p Black 396 -3329 a Fl(\225)p Black 72 w Fm(implementation)d(of)j(proper)g(color)g -(management)p Black 396 3508 a Fl(\225)p Black 72 w Fm(impro)o(v)o(ed)e -(dithering)p Black 396 3687 a Fl(\225)p Black 72 w Fm(impro)o(v)o -(ements)f(in)i(performance)396 4046 y(The)h(entire)g(Gimp-Print)f(team) -g(hopes)h(you)f(will)g(really)h(enjo)o(y)f(using)g(this)g(softw)o(are!) -h(F)o(or)396 4175 y(more)g(information,)e(please)i(consult)f(the)g -(GIMP-Print)h(project)g(web)g(page)396 4305 y -(\(http://gimp-print.sourcefor)n(ge.net\).)p Black 3695 -5692 a Fi(2)p Black eop -%%Page: 1 10 -1 9 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(Chapter)58 -b(2.)f(GIMP)h(and)g(Gimp-Print)-2 1167 y Fo(2.1.)47 b(Running)i(the)f -(GIMP)396 1383 y Fm(This)24 b(section)g(assumes)g(that)h(you)f(ha)n(v)o -(e)h(the)f(GIMP)h(v)o(ersion)f(1.2)g(installed)g(and)h(w)o(orking)396 -1512 y(properly)f(on)g(your)g(computer)l(,)f(and)i(that)e(you)h(ha)n(v) -o(e)g(an)g(image)g(of)g(some)g(type)g(that)g(you)f(desire)396 -1642 y(to)i(print.)f(T)-8 b(o)24 b(get)h(started)f(quickly)-6 -b(,)24 b(log)g(into)g(your)g(system,)g(start)g(the)h(X)g(windo)n(w)e -(system,)396 1771 y(and)i(bring)f(up)h(your)f(f)o(a)n(v)n(orite)h -(terminal)f(windo)n(w)-6 b(.)23 b(At)h(the)h($)g(prompt,)e(type:)665 -1988 y Fh($)54 b(gimp)f(&)396 2450 y Fm(This)24 b(should)g(start)g(the) -h(GIMP)g(for)g(you.)f(If)i(it)e(does)g(not,)h(check)g(that)f(you)g(ha)n -(v)o(e)h(installed)e(the)396 2579 y(GIMP)i(properly)-6 -b(,)24 b(and)h(that)f(its)g(binary)h(is)f(located)h(in)f(one)h(of)g -(the)f(directories)h(listed)f(in)g(your)396 2709 y($P)-9 -b(A)e(TH)25 b(en)l(vironment)e(v)n(ariable.)i(On)f(the)h(assumption)e -(that)h(this)g(w)o(ork)o(ed,)h(the)f(screen)396 2838 -y(should)g(no)n(w)g(look)g(something)f(lik)o(e)h(this:)396 -3167 y Fj(Figur)n(e)i(2-1.)e(The)i(Startup)h(W)n(indo)o(w)e(f)n(or)f -(The)i(GIMP)396 5112 y - currentpoint currentpoint translate 1 1 scale neg exch neg exch translate - 396 5112 a @beginspecial 0 @llx -0 @lly 141 @urx 219 @ury 1410 @rwi @setspecial -%%BeginDocument: figures/gimp_startup.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp_startup.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 141 219 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 141 219 -userdict begin -%%BeginData: -DisplayImage -0 0 -142 220 -12.000000 -142 220 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPT4`VK''#tqk'.Rt\;W`AQ@AeGZL!FcCT4"k\4#g.!8ZGgrP9A5"ZlCr/(!ZW8k!jD9%E&r$)pA@[^;;RpJ:-J9/Yj8M -'F"(%&iBF#UJ<-Fk(ZrbMu(FcP:DHtl;]I00qTQ9O!.ANAMtZRQ$:''7)Em)Bs`&jG7cd(X`@ -_e0MM`D?.fpUbcG_&94O3:JVaH0W28FV"c`3!S-J+iMVL_N(k&DB!XgT&A=ko0K"3gF/IdYeE -iQuFmkWaE?/!N")pOB)GaeAB8O,>s'r6o!:7M5AOf"l&F6!KC>I_Ep4<2Y/LG]%=dKIfVS0RJ -lo3jInZCF_Ykq>Ea3p<):DB*"k4Uj[CJN=5^]Z*'Q*A,1PeVk[^To#n:^OjJ9%T>gScfe8:K*2V"*@jBu'.8Y,rFGglo]:mFg^\G]B`E_Q=ktP -jqeW+2tD.hqM,X6bH-Au -s(?Tn>bt$4ke8M:W+%'Q#q6C:9$6#*%pS+o;piGL"R_S32q-APEa4a%U5bB@RSrU]AmA\Q@I! -mi#>`'CTj$d[&TSR*PLCJ!hbu8i;)Od%/dXY52bp7EbR5IoZRU.R?Z;gZ\..Lhcc_U)]$aFl' -a'hkc:(rt5ABgXX353l%)@uj_[5Q/cUs=8S*%2CmKk[nc$X:1]b%WVf1S0`I-nT/r4H<`.]J3 -H]P/\kd3YG5jTWp$O$-#!>g/MI9(O&(-dt+0KmmX#h'FPfrBgAS9;`"Vhbk'X-'hN7O_!DG'g -EI1Icn4@BV)0(t6ZuC?BMpoeM8YYGGN$M4)MNp^.,$qqNb1hO=6YXo,'lOS7b\Yc0I63@Y7>, -YBX"1(U[DL>0="#_%i!nt?tc)gZkYDt)R#-L,L%?89^R+JO.q?UBL&=1$I)CdQM'aU4dtQM3G -\YHDF56taUoO4`Q(HuYunlm4:/otJg?=&\T"g>R&:Yq.knBgGQG^`aHE@@)"A]_bYhcaY`ZaG -eWNCc/EJ1;DLVu!fh0a/h:oWf%9m)D0%S'tO.nXaMfU_ANGbX=hb-JK\&e#W:+XA)_iN!<6">`.TMZZFq`R -S[F-b+dj13(ahcd:9P7p)C_Ojgf["7a&6jtJP*DM4WOs\"QE80e-XjT\A6t(\ek8:k.M(g[4p?cSI]\ -c\&e6(HF;[Z9gQXRH6_eE`[PTRZ&Z*q,U=r9S)@Ff0\652So2eW=&[F>KBf4lO.]+:Ut8JpU/ -"_Ll=bleKHU'-Ih.kj5>)0jIe;&c^b`GsB`G6N`bK.4Rg'9+ulC1HFX2g5G2W]?^EN0@9V;gE -G(pd_Hp:=$Q"9[heVn66mH2XgLTpdXj6UgXW9=gHiH4JG8Sjj3\a>FKjOFB]Y@%YaG_:Sk&RB -POZrkpKs31hp!K0sN*MZNUePc_=;.m&6#]8=GR-U8<_@*T_]N72k2kdl;o]0V##0TqTou1g44 -:;9jR\NF1&-,3fsr%6>6MD*;.5iWpcC>*p%QWf]cI;=Z,oTG`9r#R^b1+-/8uC#ms1 -"gTajJJ6U$:'4Z)Wap70t44DcFCn\NT#=KVSW$NN?-R.:(]tW>:6V)"<6=UbU2uo5/Z1VHc?i -X>iBGT,F(dT@[c#fI+Sh1mU"\11Gc30!!]K.a:pTc!eOHWr<4E9IRcenf(Z]gI>l<6:mi5'5K"6mG`ni6:OCTR+oks%?28_s -'0MY"AN-\-ESn?st=h1'VjO"NDP\Vm<\'a#"XGNi:SP;I[QIfrRCg@Up4B'#1H%U%# -:un$VmVUbO.oTK#Yi/3Xp$FNCJmT1JXjrLo2@P5!O]8V4&u2j<^18+>.=gG#-&N;/Uu00hU!j -0165tBS-=lkIn<<0ZMWa -CDb(^76eYQ#E5(('BU!I^iQ;&:4T^qEe#4QMR&)2)':Q4s9'fDm621'2Q1)sch -E(@/)$$GrH+J;5PsrB:%LQ@`e*N*:$F'pfa_,Nd,MOA/l,C^B$.2MBT2pP%/[rGrI24?o_VpD -3'?U)IK+*?+&8SF5'h*,c(RAoI/qsfp\P%J"gHgshaAE)0pl2Fo6C9E^>2#&Xu%bF(V:aXJek?ic+[Hg@Wct:Z7otBKY`cN97Gpq`FP -O-hQ:]'L\k9lf6gBgd:!C&WpoT7bFns@8aI;13j(lQ -.n'a9I,SL':T3:7d$^0+.YN&^QW[FHWtjZXDL_FnS&rYT_OY#!4l>]kb*3;0TJdnjP&):pg`5 -5R25"n+`o_PDIe#`\`Zq!Tm@J,di5Z7a,t"td7+IB#N%YV'6NUTBB+QNYe8l>`s8K2,UL?Ubu -+e&UE#BG4oJ:>@(b5r6`\Kf$gs:?0p'o?h5\bjFhs1hbFC+[%qMr4qqLqRJiFR@$.;)Wq([bJLTcM4[!@ShI!RS^Pe1s+CBI"oLE]GN -QFfJ"OkM1nN`Djnkh>##2YuHtMAQ7gZlni&m_;t-ioVj\D'lB*MJ -"#W\>L>.>8Nb>LNO(UA2N]CFZAGDID.9-KUR$4OSaGC*d2\Y - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 141 219 -%%EOF - -%%EndDocument - @endspecial 396 5112 a - currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch -neg exch translate - 396 5112 a Black 3695 5762 a -Fi(1)p Black eop -%%Page: 2 11 -2 10 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 758 a Fm(At)h(this)f(point,) -f(you)i(should)e(use)i(the)g Fg(File)p Ff(\000)-16 b(!)p -Fg(Open)25 b Fm(menu)f(option)g(to)g(open)h(your)g(f)o(a)n(v)n(orite) -396 888 y(picture.)g(W)-8 b(e)25 b(will)f(print)g(this)g(picture)g -(shortly)-6 b(.)24 b(Y)-11 b(our)24 b(picture)h(should)e(be)i -(displayed)f(ne)o(xt)g(to)396 1017 y(the)h(GIMP)g(startup)f(windo)n(w) --6 b(,)23 b(perhaps)i(looking)e(similar)h(to)g(the)h(follo)n(wing)e -(\(sssh!)h(Don')n(t)g(tell)396 1147 y(an)o(ybody)g(the)g(secret!\):)396 -1426 y Fj(Figur)n(e)i(2-2.)e(A)h(Sample)g(Image)g(Display)o(ed)g(by)g -(The)h(GIMP)396 2741 y - currentpoint currentpoint translate 0.5 0.5 scale neg exch neg exch -translate - 396 2741 a @beginspecial 0 @llx -0 @lly 338 @urx 287 @ury 3380 @rwi @setspecial -%%BeginDocument: figures/gimp_image.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp_image.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 338 287 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 338 287 -userdict begin -%%BeginData: -DisplayImage -0 0 -339 288 -12.000000 -339 288 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVMt4d4W&Q8V:DC%V])?:7;H2d&Psi#:;k+dSJQCXc-.3D!2',!\fh>D=Cj+tBH6$?/K&Xt -`r1GU5](AMilYeeq1"Z\6^HZhlu\4O6#(9N?:ZA]Ai4m*'W"PK>)<"E%q1l.>!4MZ3VJX'^'B)Kk;:H.RQ4lN]s,DEb_;BbBq -X6XAd[u_/"FmaKGPQ,?cf]SFmV_1Y\TcXmQOKGNL2?)MXrk5@J,%h/qE'o(jN10RP@a=9b[p? -1*m468#5mcI6h%CF(S/5&peY;Bgu.\lns:=`DYuGBP^K?W"TI5Khuc&i_W*"2TC?*3S>lED%/ -LM4O.RGB^o*14GE)LXE,4M>&*2O,f!n1UOF'*HH[49/'3/1hj6r1YOVGBK]jCV[E?eH=c$)** -6JLKUO,HPJ>'M/kd,VTapHlrmB?rBYGd4F#$dibJWIqd,LaO1Gbi(<_L\&P4JtVm$+_9d&ZT; -@^Gc5HBoiIH=8*@_K)@J"a9epo8236)T`pr0,Gl0,A_gu&1Ii;.hM8]:aZirTY`=MN-lTeu(C -[2LBjkG]#-L'UXRY%?)1f&g((Q67lcuaIFjrmF3#8;5f`N0/KFsJE+FF`nrrS(8#>`"\nf`#bq_UP?nOLj(WoVPV[dP3] -fNN*Q"Q.AAol/dXb]GZFl=@`hlJ2D!YCE%d!=brut#^IlP&D[.rsX8GkMC(H[b-Oo+re+b[/$ -,:c*Vj8q(_Z.qB(-3o`C<7X+.Z;7LZ`cG5PX2$`nj90ImP06BTP(MK>.:pQ[lN6AA#;.Nfg^g -j;$,oFVK!7RC4[B^$4T=:*:i[HVohacpnNN%tUi0a0:HhcrD$F'qC3mOk-henND]V,LU`gO<9 -lj-P/p]D9`Bm5nNHt#dIQX`(nQnm]#"4nYoC+2Hipf&8 -:5>q9(Htq/!Pro!tM*)2X11^)=ZGokfqMjOI./XePN,0EC'A?jDZGt-l,95i]GCPc.f'CBP/m -Y9`M#BI9/P2H#6=m0]E^/hJQkEuQDMW>*.93Z%n0A72EDDAX5YJiRG_s(:[6h;5R51Z*eC5A2 -Ak'nYj@@dmCc*&9@q -%YMtBKgWMn>]m(/CQU26U5lY-4hPe*dsbWm$J:gL'Kb`(lW?uSu&ndS?t-rX_4of1Aqq8j(C6P -%jpI$8-'>]kVQqIm+CmYUn1S<\nE?gr;&93ilMH!BDSl;p.A_&RtajB0HHL?MJl2FA?#r -Ud@O*qa/hU._6?o%JAs(=.@,aMI):1B3JrG9$<0FM5RL=$/K0m!Rs[0jC-7fqlm$mpkek9SJca -%7qMuF]mt!2?YK.nbM*POaX_!4SP'23]DHt?7(qs2QCa)5Mu!Z/D'Tnms+$G&W6/Uu]XN/!0c -+b-BR,g)F7:SWX*@V>XuLZg.iM/B2!Q;t=`:Sfm0fJ[_3rcM7`hVQ(nWM.7BQ_&[5^ts-Y%T1!$)2l$Loi(o%$aS<*-al9_\0VJ4C -"-+ke0Bm[M%?ReMoLS^VI!4>RUD&87O%c7'og0PMU1JUh>b31LHAZ%kHj-Q1#P`6Y%>oBra&A -?MuYNWuAe_YMDQJn46+RVj_1tEVs7.V43-MSpDTk_pbGpO -lfo#k_PQq=UF4HZ6H`Xe6krJAl(3cY]fCJlrk9-9P[9Blk!2*ea2D\B1dh\Ng)i.R)P"(3M:O -BG/QE0N5iqR8)nV5J26aJudb?o,T?=#Q9H@[+"6a$b?BoO[\^H'mq`F*\C^m.5@!VV=peYn?! -a1Hljd(]T/`5+qa2pJ9qO8GORmi>cIs3,g.fE(,@64;k9,t'Yb! -iWX4YPc%8#5$gIf?5\UAco^gTVLc037^:i-gXr)=b#!eRj4IUBW=7pcj?\Nrf&3BJdqAA&Rqo -mV[j(>!ol>]nL.t;PYEGq#'J3/(PEu64YbMDK0kqB4(4K>GEBZ*)J`9ti$)H8L^+2G7a1TAc( -`S;*ch,b`=*< -7f6He*r2\/pU:A6-88A'2Blc1sUq2J5C"tCA@PL#9H\J#^G#!(h#G';!-%PlRiW]6adV-<(Vr -&]i1q#kCRM5q_6Tqb'fU[rDl(Y.**ml2EHb`Xb@9_G)uT-[=>0i[QGNViQ6NYe5fHSK-bKYtj -?R(4e"Jn5VVQWSWT97Quj6b'MEe&Ue!!kM?9W.j`BBE3m(*TQj0eDFc7bi<>aB&ZMi.5SlZ5G -Q,4M3:/iXK'_dWN'n%7c>U'.O/\77G7EJa,cAF(aH(#cn"iFNj8cuFf,"a8it:6NSJpl'o\W- -f.3>k>(H;fL5TO/02AF'H^gp`nFL7s(+9,OI"$@F&;#f+q[7eY#1Zl#T3.NeFO]ZEk0lAtl'] -^as4$%([92QmB.cY(lGuJf93IGH?kOQdpQ2XK/Lan.rg%JGp3n0'9u_(li8[mO/m$7pAYrSSKBeQNL>Ft,M5Z@jStJa&_FGE[.t5Qb -+j9oq(AXTqJL5!'.I*XoANF4TTp=of55N0EUacCM=r`PHp[6l`(&r!R7\PKXVr04eDW&8JA8H -!NWms^Ud^^NHEJonRE^Pk)gBP;r)[h.W-X4jbhT;7&Yc!M`119`gNG`j.ph+4ZBm)2BRqmjYh -FG=&KGg?UDWo+lQ[j]K\[i_+NV/J$BrOI$T?EY`GNPtMr78"7[A6aE -K!p##4D-Ec(ADVgC@a,j=0!['B"qh/H'AC\]8#$&a3i9`D(fFDB>\]maLg7WQ4+_1fTOYV,#"Ep&!8hCl>OOL/kcfm8s1uQga#l+`k>5QL0k+hC/1 -?q47G"bbuV^C'7$,Vq+Jd=q./tLT=FWi2G!I:-UD<;Hr3lB+``,bGNsug@+"S/R*FZN!;pt>F -'Vl:4mM5tmk!%/,6du=VrZMH#U=JN!,&KAUA1o=8S`@ToldPR:4 -\W^C>XN5&/@_3*(&Fd#hYB%$(WtNAEEcnd>[TkFN?E.5-ho=DF<6k?jRVejhB^5-_NU#bo\f/ -aYA`)-)=HPs!/r,W0%\.Yr+p)]&C;6U@Q$cQ.)05[jR4KL/=DBKMHITglccfKWNA.F50QfR99:2qI -]Bqb[-66.P]1SLS?o>([V=!VpC#Q'&;B?q)hFTFD4s[AZrL/J6[V?hhP?+*VXpB.(p>@0-PEd -[h+5J+jB$mKqSlP=M>1=`f3c3nVq`ai'p&:.StHUI1<uJ.&mE!\teTO-:CS61+RD97WVTL -V*!tQqk&tNd=VN$%1m+-tQRR(3^c!H&9S=Lh5-a#OXE.\< -:u8rME(,U%INh-SKpRC4a$qJ!kQjno7]U60Om^jE-6F;!p9)@<_]N^6ZEB_EApO'_U(+.]''[ -o[&E5^b%%jZL:Z)sk,<^/WhWSKl,N.f9[u$-7sDkF&3(a'j-mE9r(Qc9lW)\;h!puB2r]XL`J -'fJ/87JdXU`^S(\^Ke>N_Ss:B6T9jPML(LRS3gIFb8)s5orjU`Viiq+`dEQ'K>G#tQV.6"hE# -=r-lpRVD?"L^mP`-kr*WND&b^%ddIK7gj04HkeGPlBG'NrJRf57)qPgQdpued#/JKN^f0t,!1 -#lTQW-"LlDmMUWUd1WaVh\C64cC\M[;X'.A?W=j)6:oRVq"a0#S;O6s3dJ+WAXOcu:`3=AF5M -ai+9?$SK%HFcgA9/l"_U;j`BHApN_\Cl^^en&"bY]Cu*;+45rAdtS(XfFg@q$ELe6 -2\K\:R,u0$=(i.RC[^A>XB7HKK4+53o,6bCfdrbQ1`AS+:fo6=!-Q0iR6H;^RVc^]OpbqSBp67<9$e4:f'^42 -iK@p*E)4g3H_U=a'"Y*eC0Yfe#5cpa0)c>P-Zp8A_IgZkTi&AG%B]1^I49-_mR4DMON]Cc(QT -s\^B9M"MtZp.t=-S;F4_fJVXCP^,0^X3-jW"g+VE$e>dfYPYhago'L0R$ah]<*JNQ&(B:LAs8 ->NXVs?4dA="t#RqY#HH81)PUDpaK?%GXE>qEUKOriq(HL8_Bg<1;i):Oe3]e,XHP/fK$pbWmE -P\X!'N&9sd`&O<[mn@k/['cjr[iThOBdILtFiV/I79:];1LGQZ2$8tL)7QHBcc5;l(TW5/Sui -o*F_P\SR20l6erP9+IjZ^o]NHfH5`VhFReQ9P&6mc.i0(E'PP\Si\+kKMLWk/d -U@/Ij:Qc1.dP5qOmD'u0K-A,[k"&`E2(OLB9&J@59>qHghY2r3GSfZC -nUFd2I+P45\jgQbjUl_du$uYZRgW/?tBdLJ!V*E+kh4LL$c'j44#(aKJ[;?=>>LfP3SHrrETQ -qI+ACnoaN+J[G!lTaqoWhsj\5Q#?qI!t#T@cQ3>n0Oea**Z_W`5FIGK.Y-.\^s':!PZR:$?nF -aX9.13jHsd>/[%$8&OdD\!rn*D*sH;]\5/rImmIS\#a.=I=A,l;pjk(2G[a)p'G#9CN+%M/a_ -mu_.].!:3oHXY:$#Xn)3e]?VtD,j9"Kq_NZ$**G3ZSYogfIccAcSTU2)OY=eUrN-Pt[5B -!(C$JK\It^*iYi(I'`E:P/;&Z@(=R0CLp/H!1M7Q^UaK-?VMf[,mumI`p#B"@&Qah#$sbS^@j -+(WUV"-gJ#_6>JXYXbKVFMGb294J@g;>ADmB/75DT;^Q;Y?K,+lOhBBDpKSdbo83Ec[_1<4,A>TC4_DX]$\OQ*1c<;_t322X$16m$(JBn -Y]F6]XkCrR=IL547KlM7IjYTRd5f@obX?_N$^!q:[+7JL>%bGrjfFt1'/b,6p"Q=bZ&!09&H) -am/*a.c15Lih89h_BOp/IhRjMjLeG%t13sK-EdFsR[\=jidaSg94<`qcBn:gY4?gQa,C;KtR1 -Wm/+[j,2U_;&MK/[e?I,1f8#H$6;Z1prE%hem(6/Vhu9J3tE9nh?>2q:>cL4SJtfDAFX`MVVW -mUB\k76>=;Le>VY#,qSCnc"csebeDe["khLV#Z3p_UPc]*qRY;i8aNVI<=(9NYFKk&`p17K.8 -"&XD9],D98>,XQ42K&X%]-BeWoo%o>;a-V!G)+e`BdlHScBkkK&?o^AsO#qe*uuM2TeaXP.@q -^[IngQ="Kt17")BL`ViU\lWeZ -TO75;THFnSo-1k6]&L1i(Hc/br2r0+EI!g0Hg2LYY";Qq7:$TB>U3Pm^nj -\@s0,P*Y_.'25.s1I$:-u'okjdXb%kV@8tE%.Bbjfq25L*X\WAbnPmEk`!Ab[GfBYb`5ZCsI> -`i*^k\H7^I^cs7W=+cfg$^6$X;d#:)dZt%qA)3Jk.tb8J5^9Eq%t^1-!f/@+.tnBp?K>&`GYQjnXdM'Z3QZ,Ad2-Q4TZeWRLJ1S7:k*'8 -[!sFeZ9#(Wo@ktkDI7Wik.VqkYQkJm'Idf(D=SG4"j9e'_[A-de!YusCW'q[W&NFHdc9W0WY% -Ebm_&p&k0nhUG(.&JZ<4d7p7i1CLYs6&"hWCTJ,K*?e*!pkIlA+"5(3;(L\L7E^%hU*O5I[]h -+_1!-^#F[3kb)=.+Ra=\tVB[D-OGm%Q]O,69)R8ip?i>D4C92kV4>+obW!$LG5:')ON\3eUZb/G*2!L@+8@Va%g1?3Za2G+XU/&ITb]Akf?Ri7\g;PrMXa+gVIbq1jmtEpBf'&qJfQ6Ft6lU6m -?[Iu6(K(">(AckO%ATnA^[0(A4beIc?EO;@HY?kH*]Z+uHbZ#7]r9u9[X'a>eP$r0*.bdfM*"8P4FMXa5l9^0mpCMCmPWW2ErZ! -l]C4j)qs*4&+2>M&]m]kH]9!!gn\sn_X7njXn8rY0Fa$ar6aPW_/>EMe7&:Xa%5Wj4qSC/02` -\/.Lnr]%\b%V>q7@ZtktUT\P9@VO.ZXlLV5dSZ]`]>Ibj48'(03^<1jk!rg!f*rL3qCk8lncX -.$)M[Ga$Y38in;Q3d@@.gBpR]FVE_@0-p18;>Ge!g[\SshO!"66'PuDi`L%M1@N>oS4%@hD5R -=gQ'atRT)S6HoC%2'm]"8F\n/U(s6eFHn%ZParp&=#5MY*ZrV$3eIsC_Ul1F=*:41br_I2#n=qfmh-doE -&Mf_b0DCHL>f;jm%SG-"jp68"2QVgHa[@His*+5.um<[umUeOM0ZS'=g6![nlkglOEQ+Ihs^h -m/il>8"m:I<-c2M^]3f;oSQ+Dd05AY=KS9RhFS?efH5Mq;@YGQ6j,gP)#IVhb$8T0ERIMPU:< -X/B@VfDjU;O0>/4hS+77;7Q7%6Y'g=KTM%Yi*4/JZ3+S]>+tZVS@/OFbYo,O(Q4j:;B[KG-tg;!]RKn -N+.g7Dp>bK%[kGJo;/#nk3:u%IVml6qrl=j&ZQ[>."5AFd7%l)AI4uk69ArdrV/FNI**8&98+9iT.R6Y=.rA%N:P>DarIp\b,Ro2;"NMa -abudEefl82.h3;I>hCi3/4+Si;gGAq8d%)ijK2OjXRitmiR4WN3)K_%)^7#qdaqE[DNXf4mlp -`g5J?pmj1F'"KIa6UpJ*R25JMR>8d,+Q[pQlGh8b!X:44M$FSGG+EP=LWER&qTq6Y?I)m<=D> -P21Z;3\S&i"lU#S0P$gp+;G7Q1p%n8>/V5'LUrn]KF2o#d**#c(+HHiDOfm1=.Ldr0>p3)FUW -0M]\?1Je#(k8'HoI9#Ba"8>pWV-ZjMu4tnm$%=;ck)JOfM-3N&UJOT427V1/\ZjDZd%mRdXod --!tj$.tl:B#Jf<4`lpl.rt$rqQ#-hqncZ^:o$in_Ns>"6Ks!s8Dg20MetF;5Z"KdUu;W)JqGJ -?&HduW3<%@`kJ/)_`UZ4hGd^P.f#+.r5iUeG&(_f0KB$!`Iq;j^AjM"+d'gk^o=qt0FGp -EK@@Y?ntns8#4[o]`jBILhA:n^[$opHQBdC7+gJ99oC%0V02C$=E\s4IU#o=-uHmbq&u&_1?Yi)(G7jn1%d8uluY_e:-gATg -)CBNB!J\0eE]1:`_X\Up/Xq@4(fd^8PC9RDMpEJ_fr;VLl-j=24oXHjri!hQ!2sl2LR%p4.je -Q_]b)tIg^#q+)4YqkMq1pgFH]o7Q[e%r_&:`]0M=92@5l$E`E\]kWX4sQND_.AA1<&3j690\8 -^$\V%!Q2b/\Lg>>aUAb_+c2^$*mE*R"<'9WPtd8Mm(*dgWCIgiJnq[2/1jZ[5/jrARAKW]&6+ -9O`;!?3D@t*i<1rC2_@fC/ak[E#('A9%cn0-A^BR+k$6Q/WHjcK)&J$L:g)a\i0bRA,X$9 -ha/5r&@d7FsJ,6@20%j:*7;6=aV.5k*ml@pg'sdPE8sqddinT5 -FmdpFi,6Ymc+/-Pm088@#.;41kZ<_`]d:5_hW(HjoGc9&bb,Ae8O9DjS<^mp8S+o@Bk@n"-%l -d0V?)"jL//kVu?WrJq:nm%_C@&IO.:g;"W.YH,c"dD,lB*k_6%q+VnEYds?WXJ%_?&=s%Tpj# -+eeB-*meD]Zr5X?+_o@U$F/N -N6Di:-J7)hc:-l#U?%l-p*R3)_U?&c%]:#bb9._4Je^u:C=[[?)FWEo;Eq5$#Z>;2VBiVdt@%r>u&Q00,oC,VBWm&(rAm&,d% -I317mo[knd[nF_-.Tq^,X*g6olW2/;]PEie>D260uPadI0`'1]d&ioqO5'>I#boA%eU>u*AQIq1PU)^- -YO1N?,oT$neWUA&?aaX@kKL@R-]3Y`2".etl1Ed6! -s[D)p8@TH*YllBNK?:aC9G,jM+B^3Z0u-lS!Kr!#,F:O[C5=2l;D^Oe73o+jBgW?,%(-mp7aR -(Rfg4.HB;LFTg%:hFGP4BO0s\8enm`XV+.^\^PV&[jjJ8$SEr@lN#2p:8&Pr:1@2DK09]5g`S -NcpJKDnQPrF4B(E4H0N]Y_*BM(`U>-G:/kG6mXI,d5@KHp)2ETB^3.Ut!fE#k"CGUf_lgND]!?EVspk`_\?FZ5OYF9 -UTb$p3d^8N`]W[ap";&)@pVmTo5RcHIN8e%Ql33np1W`'&6(#=QlWn1mXpCI^__uo4."A_ij" -eGZL_E)Nb-e1'kYr]1s[Q&Jb9U&"AClLc(Qhf&_QL+%gBrtqpPb\iLd`#`+Fim=5`1n+g"OS; -I;\lcX`KRY%%lq$ISY7cJ3-ADG%QZE$ZHe]$WtI;h[a'2D\TRcRR^%cfo0XmfrF#R3m$4s/80 -pfZr_f!=<6nasNZ70(5g^6n9Z*OO:ef[I9J`(eTak/jYH@I4M?G_5r,]Q#VN![>p7Dag8EL;e'CpqCX3dEDjWF#GX6@!gHbdr>Z/m?d6b1Fl`6cIgic_Ur+t>:'sfYc#39`(X2$O+Lah$omnFZ=SS0<5T0nCM=?U9qa9dP+35_!Jt/1Qh/r]Q,.0A8K4UTAW!'a'Ac15h -IlTBEPG1W;#0@Y(+,GW3jj,tV$7I8Ye\EFC@NPquiD^F^aHf$`#2ai[+^?`$+WgZMdteVcm+M -kBCiGuI![QLNrc)Bqq[Zq//lY@!LID\UpO`SSbASchb98l1UVb)o,"+Uq8R7iW77:Bk^f'C+# -WDD_:b!M-nJq5[\q&q]pf+,U]!]ncBZ'&-d@djMfE[)S2Z%:WEChjGt`3W)eJ'NLKsgNIZk9:1 -%qT7G?mLHWNEE_%[*7ofuC,nGq$<\R3bgM=b-XY@0q]C2Xg*TNHR\g_/[R&JR=QOmC -+&TnuEaN+oRp::dU#rXZ8XFLt$=Crml[Vo4U.SbR?0D.9uf)'?Aa0&ND9V9s:L[%coj>PMZ!&2*?NW>q.8K5Qmpd[V3rM8D4Y1=1e2Ce5X=d4KDMmPjI+\)X,"0@NPq<'O=bcB&WrL>n\A'p&te.Kbl'D]eK+QjEat36p6 -D<;5^+GIDFhnf:,Z%0K7o#&V]."NEE+*-%7ZI6;E9u?#MVT6&qtP@25E`S$N0$\tgsD2cSe&$ -;HT3iVm(cbT9?3O/h&Srn6pGT+`McSSF.]OSqLVFRY;i0pq`a`i -r;`6%eG3G_=!X^&M?DBJ3/=qG83>c,K[`dB+k[P4:-8P%D2`"94egCRWn!CAgBH<^G8aN+'ge -WUB_?L#H7),!_Ug$o=f1;BUp;`E9rb^,,bJ[`b.62E"IVI?&Q)PGcmnd^:k5Kt)VjHE,YE8uM -9W&Y\ed<4%`)UBKk"4$mI26lo#+,^99QnQo-ll5'Duj.9S-?30nB>8G&(Rf[JDe.V;&SnNQ:_ -Tf\kL'CjX^75R5P?c.NF;P.VD)E2SX8qcXrT2_pFC15P[^uCpWhf3`U;Gar7(Gl/7;0A2MJT* -e-!9[>dK'3_k9mj!#$2ARiWW!89gFqX*qB6d4"7>_sZ\^k3!DUeL%)&M#2'P<.3*damnc,C=# -InFKc7EL$j[BEh0Tn.+.1N:"fXXh#!p:#[i!M=W%J!L@C3Wo2FMa+mA;$a -DjITD:Rh?`*&4aC4'GO*^>7EVu5LChRr_WNjpfo]ueXdafU2q6"E"`T2I]B735'25*!oSC2dM -dCJ.aIX.>fmIEB`9DR2,/SU_L!c#hFSebVC[nMpB(qL;jd%.M_NQ> -.@`]`=^^_!_g^!j'5e':L$h!&#=89.T3RP%h,SAeY(_$UW.naLdsBQCf#i6kfXol^5gnSa*Rl8Gh(uX,8B -*!^h(l?`r#3_h%VrG$T]NtaGuOZBVd(,l^<#4>"4tnrB-0ai=#$T\oq:LtbEfJ+apJ7+"g=(r -X6P]I3[u<-[+H>O;IXSG3jI?'mM:ZE:d^B4`dt?K\#/\+6mX*U:ZorB1i+cG_3lLPYt=SgTNS -OZs/PN/9LuMt@oK<\"l5h55b_)iB6"ul&_R7;X>j)W#AN?POBKu]T5@ZQef;L>$D\2'm -U]\1]bCu,:Nn!N3XDD#dalX,`r'SDAjUVK$aDeaNBqE(Q7F/p7FK4jN^60GHDW_oFIT>[,fdD -fJ``*,5%^NGTkl-UOnPSP>t:\4F%#\do,t*rW/R<+Htf,Q,??D.NC7iGH.()g"W_n)Ai%[((8 -5UgoQ$'e$9fk!I?;DQQ`at?piiDQ&3I@Yd\7?,SK_$cG/tPV\d;r"mk7^"kP>Y)n%'j#M'"q%e12mnc`+Jd1Ao*0pFRQWOdG)aQU6-n9Z*UfW1;lY>E?JF@Vp5pNj%*`LHu[4!).@'!P,NInDOK -C$19n9(U9&"&NpqE2H[@Bb!Ri%]m7?ogfV^&fcS$$'NNhCilTg=ZaOVBW/^j<1 -,hJ+77J2P:d4&T=RYB8q62"clO_["`mS8gI#JYW?LQQ -$\B$-tO6s_L"=37:I.U4HPkl[HS/8Ot6X3HpJp`(Y!SYj!'VFV_5CX0'_i3GaKoX7/6Q;f:6q -,"5M"=(K!_t"!$2.fHZI*$@d=$glrL#n].X-*1EYu*3ID8?`2b7Y(.Hbf>'P)L.4SDnBrYrTU -M?ELo@1P@?'>b123_[m\iGo#OV@gQi1;nl$e\"dQnQqkp+a2d*JuR`pZ,!D -\>eD>%&1(T5AYF/60\GX`8?@&O]T*$f2lD0Q+i.2mc-O;I.O)aar"j?2sUM`Qo-:?AQ/aA"*W -0SiFQpK+"M\6e,h;PHM!#Da-#dL!p),p`5>pgl,ug39I&/ttc\[]>8QZ_SLM5I'H875tm.SB[ --I/QPO>V19.flPV3KB\[q?QhJVQjt`4K$$!L9VT,2c8$2q1g4p="#oc;B`alQ]D)pqfTPKPJ5UGn[P'!k) -A2\S+HK"EOi(,)Z%]h[E&b/kUY&^@5;U7p8E[OCd:jCgJq8Q!4F^Hc0KmAjCH%6RY266B@i(m0,KY:93C@f[aGGSE[Or26mP]]t^d'9`X)s>`^;9UbamZ6a*g -2pTS`2n$Bgd^?:1G6D;ghkH/6'j%64j3.+!5ArPLT"sA;A"3Xhs9s(KUrICj[])nJg\tZPZ4- -1e(bW%DPgYg*/Yh>#?:<5M40nRh(m!I?X]0P*^k[?q]W#=p<[(amPX -,:SunMpWqoHfB*b70*$<:U!P;.]hbunjOoh+F94>M??S@>c*r;B/8;'`DY0R(F.>]VD[hX=`6 -TC!1chX\4/^fEueA"d@-Ar[)Gmep9W=ijJ)YGp`i\VLc/tfG7iXtS!X-%oZ?RB<[^>IM/C2s:s`nr6@(S&Db;?"7Z=0s[0Lbr.n/ -)h+P:W*XU`bc0srBS.nM*=E2!N>MXMFrQM"IX6AX?+61Z4!-[*<]tmOI;bR1JE;SEij:CSNLj -h5&Ta#Scnc?30SmG8=aECNlTIdRSU5d^R'XG\'@drJW/Cr,9q6a^LC,!#m)Z4H[A)YT[*dChP -a:uC&]Vj^@7H!(>gDW=8igh^1o+%PX,4sQLpg^f]G["/VoL.sRs5.WfPP-+q0;hI[#Ncf:-6b -R(pWbA-),JcZ4b!'4,)VMRnIU"5l6*G($G%TRR&s@c;I;]l9s/7c91+>79"@$Q^TsmF$r!k7p -ACpqCX%@">a)\amd`g<3.,[1`JK(=aPOblD^)W5PhT5iF4IBj4C2fP)%l//maM7hc$r2g9[D0Ub0 -nFTKW$hJ>FD)ID'l!K_1?'-&%/+j?ifLZ>^[7W%IUjB#AO\X+ketgraLfBi.@>23V#mu-'j&p -aEUNkEHt7SCE>n(6di`rW.j9"\M=%T8A7DmK^`?RF_g,.eGf"O;16P>;0^@8JR -@k1ho@b;0<:/'GnG#c!tR>V?Zd!U3G`jQSN'(">ouK%V5et^P?d-EN%aem5$NqZ:r`L2_u`5a -g\Bj/Qsln@M+;l8ZlT:i1b>KUl5I7+;DC[9TGg3M*81Re@nuG#Ke1h=5dS?!TqII#rlGD1I0c -,dL4b>`4'.VH=Z39HtR%K2ArQ6CRGCW#^,bCeL-B7!`Fk+c7E=r0*4ltr)-nG;9_I8q>UBgV* -\'&V=uJ>no7Xc+YB#*i9OM08.=Q:l&tYBX^rj6Qk(0h(:YC+4,mCn^b0k+4$fJmm=\sC3n8[f -J3IgPrEb]bOdK%J9Ot\J31(>pNI\VDP*Vm0/*`I6[%p?aJSg?Z:)e3.\APgF_=\\ebX`/YB4( -Il7LSHYT`p(H.A8oJjh8o;@[eWAQ1h>g?ATM`SP:7SM)CSICp$+V&W3hPQq"bFE2$dBhC6.M0 -m'F],BVdD. -:u'7"WESd[sCj+rG%lf:fN:aE)U$(J??4U`XZ,-+TR,pIOf`#N1ir6K-2O&fE)C7kUKJ9^@f/ -U#BVkjdg=Ti`2P;s5[qd)G4`r&cB>QbimeM_sRQ(>G=d6pASeKdRa>]=B5/*'CDkr4Ii[!LT"X[WI#QgUL -&eZj:RJQEMH[e99Rqd_F8TE].:*#_KHV.kZ+QNs!hX[W6JDk>$:g0hG[_+*c:Y?JQU@[6^O+m -$<\tLD4Yh[ACfGq`ot:5CKAgu3JNMM3N9asAK9kG0i=* -O^MqEaR'-hhaW.Ad^^,qFuB5$>(j6[U^]=)*i[aQT;0n)#`HY1Ti:$d]d;;N$7/\EC.R,L=A[ -.pJ9;,hmm`?20c"EjF@h(o];JCO\'Q&7*4G5?I-P3cCr'K;,+Sk.!3Kj_%qK;Q#_o-p'm-20+%(gNUo7A(0ZpnSWM@pm-V>tGJ@\&eG388H03Wq"#akl1M^srmVH$OV]i)1f!/l4:UZZ1 -'r`/B\48]?gZdM^)]:j55b.:c/DW3G*TG^G(1C[un$4[7/f'pn)7nIh@eMWeS&Q!d)^61PXbp -J<9Au/1,AL@cJJ<6i4A>"4K^tI$C:e$JSg5UEWD.Gd6hQ%2#SlFa*@Jc^6'L -:M2aT8#;`p.D9Pf][0,)(EidQSgSaUfh`K#F/uIH?m>(hIPNA"pU&F$JRCH5Bq8LdUrCCsX+F'5CH@Fp=9ecVE*ZCa]`P>/e?gZ>5&DhW-G -)qr$CQdABrr!E%5OamGR$D4SoTmm'H[dZuc"/'A0N,;k!*?&.k9PYob!RedM8QjO-8 -"O7!N)XD@>7Jp!jo*i?'dl^3I-RHKJ[dUKs!iMlD`2CSTmieG&I=KEG -'KAHAE5p:U\5eR2iqVhA70(+!m.TZ:"Va -\`7`1e$^q(5A;t\mAQ?ph/Ws_PeMA_C[E>>$!s6pA+9C*-/cNOD7.,@LK"ofPT#t$--Qtq5K0 -cu6[0\G]]g_o`!$,A)di&]f&8g\kR'4>68DT$De2\#!@8toi"JH=27'=TcNW\p6C)r$S8p>B& -Q*BP"A^Of3f3N#0^Wlto)r`K+W==Xj.E6-We'VZs% -bKXJ.tE6=4e+3u@LYY1"6U8;Gk1hW>_s*P\76>M"ueU9EM!/-$!Ri#U\sTQ2#nuG:&dkuBI+`^4$;4KcYpXoQ -QdOmh'7rWH7VK.j=dr2pM!lU1`eADPK4@EM=\W6p`'9Yh\n9sj(U5gO$C@XFafA\3AnBaoEf$ -2hcfAF.(V00Nd1a=5Hd+#4ln=&+[DA@FB!\YMNT8S'[8HZRG^\^BTe&>lAECY -.Aqm_$H7F:lIr[-j3`K'i85S>.?C&o@1_g!@"gH(;g4pqTD&Wr$5;Y]D9),Y*!od_j3<@PU"I -QN/@W@LTW'aVbJ:1nF*C!'ftTG$l;cdb/HWJ0EnGfa.4@uO=k\3r@=\Wj\-N*Y\r2RX7`VAe( -%I/>*Y1iZ(%"JV+\1^UHQR09UA,#5##JFLVZd7-0,J\6O_MR&jm2Y-<<`$P"&Eh-FEGp'#<#M -?1p#mD'g_O0r,4h`jFeu2a//*qo>'kQ&RjPWKnC\$egbMU*iR>XqTf!$FMgV&.>C_-4L!mXQ@ -M^lsHk^:<3\T86tr4,dm,U9^Y4-a6h)R@`HW"?CqF#3_W#Qo?c-?C-Sesj-X%Te,(f/M+.`e" -(2pp?q=X0#MgIZKUJU6RL^``+*q*+_=GA'u!4T)OZU4V.Du`kb5N^iZg ->Cm)4Fiel.X@*p:9b&a-#fe;I`D=dT[YXp;#pFh_PE^uU6E_jAe19+Pn+&ie([C0ttkr=SdU" -#Hi8Br7bM4I$c(8HP:R\CtT<-Q%X0J#nO8#Eq"aML_5FMo1\LK%PQB6?[f2f9rW2n'c*%;3,1 -8TJI-Bc+chMpK7jfLd?36CZOAiWFNt^@s(\n!/D4DFUV%#SNp`pD%qJGS6_(U3-)$VMNnT)`tuW\Q0?/`D2cCon237)B5,t/FPZb8P6Z -`5lua.#Z_=XdPhC?/b^L#>#\%f=;VF'0_-dBis(uR)bf[%41mXUZ9'* -(:r(L64l%!#@b6YZFr[&0SM^JaNRmEs#;SHVhe7!E^/Ro2+PJYS-cdNm^7]bF[e[ZJ(pSjH1$ -;@=jaVu[kIDr\JO=c5fQBd"#F?L:f:Q8Q[?uat=?\Cf%=QL'cs1M$"a2+D.$@7ElF;IF(2<2+ -N(AJ6b9I2:37Gg_o&6,'+7=Z$>NUUl=aAH2UI]T'eEc\27cmD#7W:a7+2aj-R;>^O6Y0'$C%! -?5c'kIsSue!uK$(dPWjO"h1`Z3E`3de&bnJ%P.5HC>]g:g&S>c+`k/E!H#F'EF8[hQ]0Wi.IR -6<:L#h`TAhE'2W<6.XSl@6e#k!@$IKTt,`803ZS*-DFf\+OW,MhSNbn'nBWGBt3L9Z]3k^dg=P4Jq(stT4UlD2&hbuWLTfK!B-_Cn;$,+@3GZp$`//6o`mE,?k,\boFQpL;;E-J@06 -@D(au1I69AAFZ!LA,t$Z+06=42>UGe'>*?-1d:,>)d.d.#,uCD+aug_[2Q5`LZRW47o@!s8Lm -(p=n!ZG7"C&6L$>&0I\BE:bHdE9Q%a*FC@HIK)@B0e'Rni/eGK0#FI*CH9WujT\ge` -#rkMNDs>1F!0EuJ1qm(MGe8(f=[T_SA%Mp&7)bF=i3Bic^-RPe9+k'":f.='inZa6&mG"%C;5 -SEUtRnnu*;5I`5j21k.L&G!*WS*j%V-/&qW!d6p-,8@[="@12&p3Ao2$9%YV1<#l[oT"knG': -[Yk\GePjqF)'l"eoX*T%;_D3)D*33E8$b#_cd9D+BR[b-;333b;A -%'n4U(jE"BpBOJlS9d\Q&J9Piq+[=)6dC!t>)_T/j0-!$W(^.fMq8pMHL[L6j%?!W&&n8S;"2H%p,in5$GcUD%tN!1k%EKm -#3nD`*^9o?g>#uR7^]eT4P+SKYV'7S(2'reo3+Mg]ROFLsRJ+bnG7Ao0F5'6lokHS)gd6WfhD -N,,B,jOY_OR!LIMm[d)t`knQJ_d`]>.+=\#'#[k-S!e;%CXHs*R'p7OC@2!++WgJk%!5uCc@_ -+TPYa7j9oSMIAEL[YefKa!8F"UJ1jY;/rfp%M]q5Y-oU>EfXiK=j3"sq]*)]Qls'Gti1qtm56 -/7]OdLu>&K)dI]K?.R.Kf=,gp0Bu*HY3'n%K4qp%XcVl:K8@]c-2a0r\DX/dMgk^`]d1dZUh9 -mnY%2r'6]CV5OqU?EaD5A7Y=GJ`rB.;seKZ -SJeKM`^Op0^(cR=?N3_WlZ'\?V[[-mDIt,&K$V,R*_fIfNe.O/PG(iMNKq`KM/`4LlVG86*#H -e>0!f.IZ<;99/9p4(^ITr`eQFE0HkNhd"+i4n@eE4CkEJ`I1CH6g^ -=*0TW&R:a.]-?N.,AhMA-AX4.XZ.p"%s0!Bq)\+=4k[ISN#UmB2m+9'UMK_dHLHKrp!>%_\iF -T#S'Aj`"&f9WBCO$r;,h&,dko\KD:.E3]M+Bg!:kidflpE>Wl&POF7nb=,[F%-kNXnELH].Q5 -GBbi?MTEnpHY04k.EO5e\>glpPM;]ehE*fJUpc@C]-qV$>01<\3nd0*4]\BUsi2E>$^R+sE2- ->PW*?k`]].AXu\ZDlMS^I>0W1UPPB`=uA1D&rUV(!"OOoJ#PI-JfG5p^Ic8;C$sZ1Xq$&!kB$ -(h0V&9(UOE30=u6S]0=nMZDg@_GMOAV?XIAL\%QH"V&u3@U+_l-e>?@L&Sk37 -H3!AVZ7-)P4i0E$X*KV>`#t-Y^'iJ>QqWI8?M())bufEd%*scGH3QV4!IkJ$;ol#nbsoq6"Lr -5Ve;UNFnE&$im!k;$J$$:XukD%WqUK`jnC]_Ji163!Ufa%.r4!;/\^mo*3, -%bp#_O$sVq,%.djZo5T"^fj[*c*l -I>IhdVVN' -`A*%OT%=gL%W73;kp<,'NQ5%2@U^^T[+JD17E+uX+roP,:T'g*^ACPKrA8isN@(A6S5@'b%P0 -6APBf7P/U7@Oc8N-nMu?58jdV"WE2-N([VLl1UM:$PArW[B3C:eMgVSC*"lqHO@c%e'i7"8\d -?KG\&Tqqd,=RIk?R=pW)@YWlkJrW@*4ABmD[K7QS.s8sqif2R$(o)K-6rSJ1=Wq&,jat6A/[O4MrZg -!9ZXntj$?rgE=NJ-Vco\*emi,d+1h=:#F&$U2Qg?otIqbHXeg%4tj1B':G]f8Aki:5YhMl.9e -#>F;0g(3;[Bg#\&7IU\EjKS$jR+@5@7S#fa#a7ReIbJs0`4]1-`/8sDjWDqS4mNcnmOFb"%R+6B:HFa"T;r:W -Lm38pW%WY9q8(T>fN?MO4K-<(DB6]Y=%_O"\('!*nst\Xg?S)VaDc7DJm\LBD%jG=nap?gY+s -*7]13?5i6]]DfcT/D$27\'&2Y%C4Y"cQ,S`BFDl-a_`(bj!EBS`ds<65?QamPC.-4,*o`ggOA -=ABm%VcD[-g><&EeS(.,e(]?JM0KR@_b1-MJD^U$u:HdWSh'aZ*'SW7<&EjcGiA@`bfT*?\\/ -SI/4uCirq^VD,Q?Y\qN;1^-B_Jr;+BjIdj,rd2pmBjYT(!-TnoppsR5;V*_jU;:s&eXL9\/2i -u/WXT/T:PU:Y5T4-2nY/kc0>q%"Tufu@j,H\X[`?&@g[a9`%j7k=BEif:Y!*(H,p5Y;ijpIQ- --F&_dB]JBF+@.:\;0k3%Gl(@+5sJrH'3%r,dGN_C];C=c2a`d%CXu4;qfOV[bW)$1G+HsS*5@ -C)oJ9D(N6R=P-MFM"?X2d[^fYMTs9u%RiY%*N>n4W=!,DE2,bn_Wgle0#uhtl6%.ML%7u!<8< -Gej<8V!:HbZIP[kbnYHPll_7Sa%+)r/QJ5cOj0H/c+'")qu^j?^':Fbd=_f"DDN0o+NNAP2][ -;m[0cU.!P_=F,dmE2d`6PLP952kLZiOt\I#PcnO^TZpR-\ZE<*`@=.8XM@WPe*4Sc2Vf%KV+h -&[,-am-lTDu;WD+\]^I5K:*pW^(/?U=?p7*LeI=#OO-kD[m@3Y"96TPeR%jWYDrbXtJLD/dRG -qIKWEi?c>W/to?^f4"aA"126^XM2$Sm,HSWh-ELoXQA6VSY+1j(jmS)U)?3>L:Rer/[ -m7iDXA235eSr6F.(`L<9ib,qiauVlH$%KS-R\Oe#)GtKE,o!1MeE?'Me!slXm]s=LH/?bLf@U -9^J/!6kJWa^'I-hMV->aeLDFBTp)lWpgJt94Jh+,4EK&EADgdbn@4r^dsUpI -iHclU;Y0O]s#2;0\.:tb8GW^S`0I^7+gMe5`U;)ZDu@qe#qc7o$lN`>jk\I,BSOKa$K1"P33_ -9;c7$#hR53I?8i'ic^[s(J"BgSMlU;eWVM#X2H9;(;PAfs_-Rc.4\d3-T%ok.^9 -V-?n6r^/D,5o,5DL$-KgS&D.h(p8'HL4tXtiqfTWk62fY3,`h?K-Uh1ENOfIqgXHJP@/8Gh55 -L`Q.,F-R=`IMA2`C&mRq`+G3X&*\V[oW\BtiJCs4\?jmA%$n^>XUQDT;p,$J/aBOnN71Iofto -oL&5$_Z'Xc.FB0bFjM=B;)mpTJ;956*''m9AV090#s#>^?G:dH!:n-1^g8#0>m -s:mE!djX/EIpfY]_-j[^EH\NM^#A3A/U]I$%Cn4fbZ_)0BK^Ahtf0hH.Lo -1_l,:=Ws?MrU+q1H$mU.r*W_I&onNF.K"kJ>il4`)(Ak>+:F1GDHWggSAJ]1mFcg9-&l:-ARI -8)9!^lX[-*jT?U1+`Re4"@kmXP9a\6IiTQ]9$9F3=_7Wg6O@DRmNqU/Z`n`=)aD;WrllmJfI( -7Tdt=EN[V1STkHZ1):D,;*`P-i7!a?GIW3O -:lsH7`VdenI^6FNn"?noQCgo)[RObYT"ZH=r(1.sMQU#:6Q-OYP[e.*_Z%!?6.-KDa>#>Gs75 -rA`9NJS>\_jKFPuM8:0Fu]j.nESA\pIQ^VO*"V#EE#F!"@MB%obm01mXB^SHcO=+tp8mMQ@a) -:_mDtd;4Q/G7^"(]utN4'T4X4iFErC4@]:O2@tKjX0!He5R/S=**s9S>NL:hnj)a;#3+[RCTM2ZeohW0/(7V(=)tCm!qI[e]>Y)CJ7[%UDqqn5 -]?7NRXtN6+kgJ`K(Xck<=LnLC9)L8HS[1B`]b#0#=]@@ZOE]Vih2P,E5qhh-VTrViNF.1\5#` -fp]rb"N,4WCLIqZsEr#coDnsN(g%J;e^X@sZl!UG9^uR9_!_"jV=<3K-SZ(kX>c$u*nqpGkHqC,7Et+/r,dk_CTj4Km6,ZVX -O3R+`fV:)m7q\tMt<%JH,=[IU1J>jD?0C^>6$3[;NXQWPCZ;<6K,&dNYq%J_)KR=XXu[3RF'H -5pAe8:4]**)W?Z_H&2p)PkMns3-&JB<6Q@<"75s:G;if-W>DCUM@WduJbPK;rM0%^I;fC?crX -L[a(*r<=WnSE`(A"lW:9uiGK^]hBHeS2^7e/unaUE5ZJ$SZj>(oWar27_27,DB\=#h`X_<\%k -kCr`+-qg7F"]]l=4p8AtAY+I%]3KCK2k:rDojFcIZ+"[gYVgVmr]%kO9bA(6T)maOrR9qi%n1 -ma!Rf`6SG=%.LXRU*g:$X*G%PTBK7;2C%t -6SOQADiD9mRUX/`"KX/cjMd_T;EF\,SNn&=8l,5btB/+%3L`S/fV_5>+k0CkA>*Ce7*09!VkN -9?X-l_mHL'/jq7%B@A(G6GD^UZrk3KE>oU5TR.\5\(-[pnmbq?L,MLX6@WK]omY1L%^Y:1Zcr4uOOQc)Ra>GS:I@a7_j6?$jCN`"]rm1(_' -Z(>DFO5b!rO/RM!E88Ss>i5u_iI1k(h="-E%f++6>$)9nrTf-BE'9rVFG\CGEM<"X1KehROpG -QnTNr/P7OJZ0MGU9U4k6VMlOa%fH_EH&Z6Z+oFJ,:FcPuX3q=L>,f4]1r,3X[C]d;PKb$ -=aAp7=%.]i-`#g^"C$.h;-r%ODjsn21B_XpjTK[eU.1Z8+Mr^0:qUm2P9GEbcqS^)D?g>o>>t -T;O??Hq49o?@08CnOYqMZM%1i[_6#T$g9:Y-Un"+!LY@VLpU_UM@I5&85!'4S4c`YEd0g1u*o'.U%0Jp*f#sAoDM2GVd/_9>K<"X?p4[CYdd.7HZ*^W -T+*Y;W()Ek+PC!?OFO^#A\Bh0tH`80:q#MNBdXB;uV"_8c,#BcfKnrT'A-*g=Poice!g'pY=gO3p\ -H2@2TO:IKX8Y4rhoQ_K\'*KNj)dRBIa@a..ds$2+Ia/=,*2,6grTZD8Oh\VZr`kcjs,D6koW> -SunY+:DNiR.=\Y!EIh*'H)4[l:$?p$Et.SRG1BL72(M&D['1">BR.&gnJZ1!pEISAm3N9n0OW -2SbH=3Gl]3)T=?pm\lF27;=8'IY3PTBpe/:SA6>$+EM2PBp,jP^T^o%N$u^r"M1sh^iCkbW@rsE?iBRC5)l.N&a%o78D97*A -?s"f/#ZPjHXRei0SePPWQSb,O6XiW%Nn&J^__/3cc<];1`Vm1OA*+o:t_4!K9Y&$jbg@=^_$W7l=)2ftL3YqCj8JZ@ql,7bn+j^6&;g -@_fd+W22;<[>B3)dO"\[nWdlL:4'p&V]"RP04]F`1OVbQFPgTf5l3^Y*KDlrIE^"Vs2JP)oP^X5rP!86GM -??q=,l,`C9_`/5.qbRdg<+It-+=8q.mfOQV]*Gr16$lc,oEeo4o/#UckN,o[E!?&j)6madYMD -K+`cW9P!,lP2PjnLs%q;a-kEVr^c&QGqAZ%`^cHoSBe+G48/>hAq)qRP$M_b6+\%(O,k_>JTA -BTO8SJQb3(ZK2Cq!iT9Bl@MoZrm\37+X)>\BSs%#4*iI'ETig6j@'=,FK_:s"=hMCO%/^M -b1t4[Eh=OWbsN6:FH1bV(lnk\eVAL8oSqDjS[Loe!+!e^b"J/'GH(r+T<=4Yaa:W]]QHdNYis -oZ?\lGe41)\+>ZBt2lGB+)Lq,`A,^Z2No>BhB?.\>d-UWt189Z]t04baXiN4ZNB's3/K_2Po# -E:1p042GXs20/rK_XtY57q_W,sTMdOnbS23*k*Q.Z7&A@Ee7p`a8Y4Mrq-;2eMi8BOI8C#!^p -f4d4Imj/ZVs(7h9&q[tKckM+0VjLYuQrtW81)!,^dP)@m"518?cdPOO9T.h^/-jcBNsgFu@HqHK -\pc/o.biF[XMnXm^dcShQVX3shtm2I!u\X2*V7dCP!dck`=8$u4m;Ca!=VOVa_:8fM'+pUDHkp,PkJNTG5&o!.p*Y*_+7g=:"/G+Q5GVVu]$ -"[s,JBanq&/TTl`q]5k>2jJZ=s;!15&`Tn-\WLg$AXOt_bR$(@_N47?.WXJ,lYpEioJg./jf? -omE$A%L-"[T*=g\,OWLZ$.;=f>S=LUZknEk`OjRqV$"uY_j>Dl:Ys)"U'7_,)kdsp9>[T>)?g*qV@"O@O7Gdi -a./9DSeiT(Bn6[,;]%jLfA@Vj@.Dd(b+]OqhX:AXi_LRi6I!l,^O?'5=Gc#5YS0e4e[i]db2G -0O2tNBF]75sDg?d[>Vsf/]F^49nV`)end2$Z(02Q3P5hqQQa>_SamDA,!%cKa?_$s?%[DYdl: -jKO;M_1#e1+`?BmA@'U.1.(/9m6B@nFZ8@r%uV.?#ju-oeE#/Noa'gIMXV3V[GN%qNtLumJKW -Q^W"]Ci[XS+(2_NTdHFWOc!7[5Pl!$[F@>Vjl,F9`SdUbEF2jtRUZl35n,8hK:.7Y3p]KeaEq -$PCj-0S.3::7tGNJ:KH,5$(JdH*rV,($\#7[h -PIqqJ?#n?Ndek6Ef])FZf2(Nn?"3nue+DS1,Wsagf9-dO(p?_dmb4!\Ts&#b]43n:)#WFRj9k -^UC46k$?(L93*WP$j^7MfR/8LGAM%(@G6t4^o:"s^(V#Q*-RHS2T+1*CL\UX^,K<=cgcupW(" -UZYW0Aip/>O+O=E&?1jc`jgX-VU)Wsd+f?]$\?P[R2gM@?m&>pkF`ML__XPL)+L5 -iRD&]L^T1m8E\W7)=8LZ[AeFdcdm_9.BBE/hWS^i0_tCDV@&T$hTX-k+=s(o]'?d'f7JA,QS\ -[r)3W6FF*Mq`S`*8M@"7e7nN/Jr)^\W<9XUmW%$$u;FD_k(8&i+h1P]LRg(hCpu$ssI6=,t8e -4JdK$'^p))Ql>\aEO593+AthIRU0SF@jVhq^teA.5*+Qi2KY-8cYe"j4/o,V6g*Fk9c&bU1B" -ef5lK6`Ub;(26ba,E,^Xe88%cBp6il,_S3!"s!EPb3E1dM]Ga,jK:VbSGssFifVUmb.EDE(3SPR -(#Vf>8`[>!0nV4&N"2SGWm!2E9f2I])(@eX,QaJ^4L"sbc/V*]T?MUm*jbWr#$W)P:fM($oQ( -[.]U81C:Y-Tc76]3!H(*RI;t!3P]h?Au?IOIuS_(kqFmk4cXl:72 -WFIRUP&**DNj+HuGI.?`TH-f7^TAE9Er#u,1d(Z7:,7(qur0n`UQ+Lr_M_:\;c-M.*3@F>E[Z -KIgEE(8(;)^\X;jB[pWWG`#"9S(/arpgp:SC(qm\TSuY7qMJ^<;S`f]^^:]ERa>faSUO$i7@K5#:M! -PPFJI\-*?b92TOiqJdZo0.[bpG"Xd@5@^Y=NGq96WVJqM_\N#0ALSRNT`$`R)9FIK5I/,HRo4 -n8j/d5B^L&c"YU%+W!+Zf&YEo]k.a=Dn")U=4a2;hTrj$WHN(+T''4^0e=VF]:):Qkk>a8bS, -=!KVp:38:6%^)auGO4NOIo/-`8?SYs($(hHJN`5u3fs>d37>eL4ih&Qm\R<%+0/<`lW`J9D`(<3qr -lTYKBfjl"d"i`e)GP:?l)+kPQXA(DWDH7C&mKaWW2VRaWjY4#]t)00A -_8_T73UM1'e[$3cn\.([tY=LKp@%9]1S$,'28)/0\3Y]GJf[\#$qmV`(24Re)S=i5_$6$t-7: -;i?#D]"(2Cp#Z+KbNaf,5U*Um+,*bJ*2[CX/Os61Ia;D.F_k>Ct)T69=,"XDAqY1c?I$%jJ5>r5Y9@:PT0/":e>a= --e6.Ia<#]?l[OqEqmP'U84Up;(4B]`&p\h$ZB6Sqc&c/iU,4W+VQj!8GVb^UMG-ql1\&K-C/" -99[m2/?d:7L5Ol0aFTd39pZh#+(?6(hj)>X>o^+N&5ohe=q4q=>St+8_2Uq(&Qfh*:nr9&1hr -l^sJPB`T(IGX@?.S;g$'s%DgILrCCKfG1r(j4mOsk^]5#u;7T;jriken4G*sN*6"lJhZ`bi7@ -ka>m6U'$EEGrRjX2cU>O4_bZkB]]L`TQ*Y]0n@'.lO-shO+L"S%-MJ0^hNO4't9F.6nNNPHWK -"WQcj&TdQcTl_AQ?bVAMR^RSGK!QUq$[o08_EYAi?/[[1QS%gJ*#&?R:>Z9;H*4CrS9;?FPA0 -)r2Wcltp*=ous8/TQ:*oKMSb%>!&6&T_D"W`@nTd7?-5$e.G'Ta;,AAtFsu#"!q@FiH$PMruI -GrtXZ/`[e4I^EftFfco%P98:Mm^hNNj.8Y`O8ip8gURK0DRre0h[@@'VbS4[PLZ#I0@&W_8p- -nsYq==p[/lSK`e@duR:'E8&DKetCZ"l:3Go^e=W2n:mlWR=l!_?,/N#u;k89N,A>-thp8=&l> -60W+8G&.SQbBJ%g9ih%0GEM4C?NcR/ad8lB$'WfrL6h_m92kmpA$f-3Ss<>J#sGtcdCk[9 -AKF66&iXHW5S[]bh9=?-RpK^D=<:QMEQ>`j/NWU+c7@I>8HX^l]hUODGZR3mHTjXkO0uXe%./ -L]rpjj;UR+3;n6X$Cd$Atn\]6/XS7b@]tNGhf!F8A/=p;qRTTIUYhf>N3n2aCSqWc')KFX"Ki -Oj&*+`Gd$D);$qHfg8j@MPiB6\J"ndIl]SD62/9#f?,lOIo+.cn&T3J[V^ufW;>pX6/*;lXd.Ug=CFh2Odk^r$h5C5m$DKm=TKVZe8%42Rt -biC(t)FSX'.;B>sI&`bVa*Yb;4S5a05<MSC/K^9.KjXg;O^O_;3mQ-m\@#=Up.;.;)c$'Kq_^@$>$4:>pE@:6lnX_e'uJ2 -""+,c*Re*.5^Nr%5=gYJ#+1@kR_#V',1lOk$?l1?b'9$:7A#RGF`^!uIMqk@VcBV%G5+0Iobp -9X6h*6XK/Ztc@C#(c@M\a[JcW?jN??*9kg8o+GcGmoIY+DTDM0`%*7<5]K^UKj%s%b8UARj7!^#9"el( -.[U4JoJ'm4iVE$OHr7``"]rcPF>n^.5U,L#s2%hs._8>AQRkD6jc8U(2COHakT2%3lC>$K:JB -^l[Gm`uDZUB&@`[^rFT -lq?(Y>)sW;T/'a4MNfRr_iikUalTL7LXT\@*m`)Kc3+*^s[>Zd.B$l4C:h/l:EmeMt,KCpiWb -Cq]H]I$MFjakdF&Dg8*[N]8kBZT^pk;o8DSj?D[%C(B(:tt.k3AsOGtj:nq+=VrQNVH=N?\I+ -XM$ -S[?mq@Z4t]/3KHenL4"N)/tC.m/]e(KaHVGRQQ+ZQ7JKDZU`)!L'Ac_9ELnfQ7"PD#n"qVH9n -`>uu,PL;pZCk7ji,$.hlh)akG?A'2h,UWi_=_c#gXccqh<\)X%FFW\6K\sH,iAkn\b8UFKrlb -<$_T?&+RjEbrYjT+m3IJ$N]8!qp?ED]Zl5%5=f:cB.:S)dA7>PkgNho;cc,f'VYKuP0P0g/E+ -dlptu"V%te>f?$:#"q]nY:m9.d9Z@]Y+%8S]l`ENfomW:Eu>6>B%*Y0,q-"2fW%<_]2&^^upoa_ ->(oK':LBV)0U/.$XNobHh/]I-n&@Baqeg9^8);PuaOFc?YEcJ.&k,rhQ+f73tG"$:$D,7;YZ -?Ctjtg*GFGdLe0@b_`Hh+C"j:(b@T@$iXlf=],LX`YXhUCQ;0A*dpZUN:@c!/S(->F!AZ?G9' -HWrffRXNB6MW5B3aVa1Ed%B"#LH:>[LlWJ'i1b^:=(Ylc)I$:aai'W)M<;iS9"1%;%[@meObq -Xg?C]l3L5;otA'6=n_*aCaH;-(3:1R)?Leg0KsrR\qRJ5^52_9_?6+@M[u7p\.jI"#>7+`Q)4 -U?PZ&2MWijs(^W9G7Ed9VrWjgBYs]82g+*#nUpD[G&l>;@H;X\@3HAEV[T"(e.:^X4`lV>$)> -ku(ON"R,)I#ncfP70SB$F%)JZ-n&@&[9U:-HCd@h'tX\o-jV5K29`;F4SZCAr5PdY1,T82`o0 -eMi%=Pe20Rju=Ok-8&5KXAm7V-`5>5^\ --[ZuB]6_dOn`$.r-]Nn@L$H=rN[@*:>]K0G'"gp)Sj8]1/1MrO'Mq\K2UN3siMWKYTBCQS?aN%Iuer7WcGeSELH-qkO -,\Y>fYlicF9\L>]i:W3&UD*r/!EVkQ.N?NpbIA`1=CWS_[$l8?Hpp[OiWR/'RG"!_V&]$3+b) -Mj3?YM`8nmCKpgdnE5^G>aH\l=2Z\C9tp[7k7[/()bmN&b[FE1E!aCP*KIueuE()0X`cjaH!8 -<,[hjoWVZ+@N(=:)i!%Jj)QWXLWn%a(8.\"f[0s`MLWje;76s>Ydp@*M8bj*A[57>I9SRX#.S -m+q=4e=QqX)"u/eT"%f`%*90W@5.hD"do['N;."\RGYsCD5'WfhZD37(PJ0k8"@@S$k<&d#2^ -K*MhZ[QhBrrUGd4j?UtlijiI5_mBLisJZ7=8`7cq>jJ<76-G/<&s#7t3l].hEES"^^8'GH:BK -4g)ilGKsB$?/iKjs%LpoDdU$Yu`3T(eK#/WN<+ -nD*22`o',!-N'eb>kA2/;9Ia_JHo -5f+r)`89K(+m#(qLoKf/mIK,KQPaICsY(K;?AE-_p6l,3$<0YXNaa&pP8LT)qd=6HF*]eKEaA -:.%N2O[[l*5oK\c"4Yl(]Pr4MRD;AF^'<-KL'&>"h*`7ei-+"R!OaOHH>e&K+ND=Q2d>,JBfR -9!P;b^sn6Sf@:Bu2V\J$&l$@93V/*ps8!gaRt(.5F/QoKV>o!+Sc=Ti2Gl*i)Vq=(Vj(N:NEh -M0OX<6kVU84.N,.GN0$#@hd3bYeZ/%es88r[L\^.\_jjE>fXYM-l'A$<:P"_TjoXe"-Pd]#L*b_&WO'1Zp[4W66Pm4t6$j62DV -CRh!jePt2LeSG>80k"3Y#*lTi,jH+u_bW,fY&ND1`0=1mg2N$L^MS!DLk1k=4/k3R`.8UE4kdSLUI-2@WL]k#L=9J5E -\f;K?E`oZ<[6#8LiOM*OP`iIPpls^iWH_)>1dHPZe-:0232>(kK/V)O?O'EJ5J_oSBj[#t7,: -?3D()9_h"!TD$d^:.0X9`,;N7_:E -j`">49q.sJa!$3hhRfbR5ccJg%CI/-()%'M#OS6&h0YU8QGeHZi4f3V3:Ti7^*3t"sl'>V*5Y -MUr]"L'T*7m*a*R;tsqbM5Nq?fuh95_:E-bd@Hst+d\0n#'Bf-.A#s#Ho -djq%[i="0(Eoo:>0/AWAYt/i&P+YMlqhLn-RS?PQ.eJ7.R9(!j+5#jq4OKrcg:JT_#3eiRnYS -ns#XZ1fY1HWJM-KPU&;aU-BQUi_q?'-LO=(,Z6>F$W;%77S=sjQ!QkZSqaq7NN=s?;CTR`/r` -XK0i"[q)gil]T*f$:674!%qi!o&;1o^&in$bH4];N!KClM)*eMmQm_slb6^??h"_iPE+\pL\h -!-YM?):>&5oKIs'reRc/PaGB%38G9$d!rl9O;GeRt?(BTeP@_^Q@ArYh-V;IC -cUFYF<+G?pFF"*7-(WYkWQ6[J4tEI7@IhSYV+FHFa%$2rLl/#eE[d2"a/ndCO[LE44lF9rQP1iikOdW_XUDR1S@otV]`] -=0q<4V^Ya:?Y_2GZ]h5kq\LHc;0TT7V7:J>mA&7pe4jb2=MXM8)V2;PV,TMW&,ko -)@@_P4p2ba\YE'3>*'*bjji8194ps+7.]A'@8ojQ:=F(D`Lj<#h8,MOE)tA>,bTu6faq^44VK -7l5#b&C<>\HjEI;N?]dWbfZ_#65.B-cjq]KMYmF28$8N#PW^Dgn((NOEV)C/5]-!qmpk@^s -GJk2RDk&\VA^0ah%TNS3Z.81]>rJ=,Oba)+52;O%fDJdQK:rV+L;^%,gV#Z?YK/!aV60.''%[ -9F8'M*XV'e:Jn3%CbkB(C]!)rj[e&7prj[8Hsl%>.N0^C-A -c7?1a; -\L_?mYo^GEUbrA=HcEarao]^:VF/-4kD>nHela -Z^/HW+j]\2T.Ut`gq8c/*Sg2Z2+I,=LQjX5LPWele`4-):e+'iE'sd#PV_j16fk.*S>EJ!.g'GFrq3u#gSV9X;-^_7qg!;,WBN[W$sWV3/[-\dQ? -3)*%U!uA9"8sG7QZlFTC'f7_e\]9l:9.cBgE71]gL:f%9S+oINEgLgs5hL)dBn=`t91V93%;D -f\IWVobMc^*35iq,_J%k*9cb(0b7PZn#g.XWO'"/CWkS.q\hk"n!7P6&P!RN%B\nS"?a]=&D* -_&CeXq/'mAPedheX.S=JtE#,`R7)F&ZmB?1elDS9gOgB&!7QZob>-&G`$;=dp#;pUYNW.F1'6 -9<_]EBo7l?.oZVTD.VRf];8KW"B_:K-1>>c;HU-OH\:^]D -uR]aiK:%mkS<0;ZWU77p=!:+ie&R>EP+2VZ@iHB]f'h%a_:p)AqJPGjjY+JqV%ZNI@@; -&@ld,HE,K@'C$&"V(ZKMT88`gcW]<,[W0hreSV.#U4ZUr(!U6/aDEY,dV$d(A;bK0E_[PgiJe -gO__jilc?@eqFMPd;E#gjh7eUmSAh,$Xr,G="`phF.B6P2P,S -69.)$a-^gah\qd&3\AHG:!EW/Z:'1o9>5h,<>j3:b[2hL21MrqiOuDSYk+ejd,q2fMN:)f,5# -SZl)=aJAUMKW$14t,*2^Bg`ut>nZ7.Y_c963rOYiPiip6,X/67k$>>@6Zd)K1Z4.;Ud0&'Hl: -.m7=le?b6Si#m@f1@?]Paou`2&2?N_i2_5,;F+2HQ7qr&f@>DSP[S!f)(Mm2j2>FBfQZ#eG8> -ck>O0mTV'aMH`@aS";=3.B9tbu9:dq<*pj0*>4MTkop_`u-!ZqkL4):&UpK%XhEs38pVh=Q*B -(WVIK&WsgOK.4ZJE64hdZK'l?:odft@"(?anS1Tt$=UKQLeRs17?\o%$!Sh,_!l4%/OI]$=W/ -\,U3lTG\kYBP?&mToeOD=lr_efap#icdH6h#^LKd0c -ZLoX"9!WF=0>h1O4hFc^q;43rPdf396_O1fZQ3)G+lcs/]gY!D88#&19MEk"@)[_tG(rd)1+Y -4Th#QMgFg8:/$'%en$"mUMpZh,cmgkBW]738>Tuqg:'Hj?5]sHb[Zq%FeHMQP^"Ts"Emf:gYC -5+E`2uTgV%:0*S::gugosk0`"td+'4:oq-"_I4"f?q!HAumc1^jo_&S^=2ne -8a_AGu,OD0>_WoCgf'Fo/c;lf?pSrpC_D^].m$hS.5,-V2!AlLhm^GMdZBr@b5GA[^fdRtL>` -8A"V]^\c%*mseInK[ein6WdQ?_l^O[h^9(sM-i`[G6jQ2.i83MaQngg<@8m1JAHM>2L32H9 -ZnHG_Lm.k7ThANO\;6/Omc/.9+H2piKf_Qk!L%L:[n(kb?'kAD?FR:%5T@/r@pjp&R's3AXBk1i4f=k&M!AiHM4-tGMUPe -n[+25K94qR%dE7[eq`EC8CpZ5!2RfUrEDNZ0m+SVDVkPXY2@=P6i%P1FQLIDO=nC3s)LXfa1m -.(k5F`YWHb!.Ur;`9qk_51T7(Lge4KSM%as*Y4*qJf;9unIVlnjfI3tc)n\s742b<&jF3h>/>E__RDXm?EUq_% -XO'hdJQBHI\d(aEqGq]0Xhom3kl'Yl6-4aprO?VudYE8atQh:^M[t4/TTdlW3o2fM)J*l^=nb -2ieQ;]H/^&>"2l?.I0T!SA[dd^T>~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 338 287 -%%EOF - -%%EndDocument - @endspecial 396 2741 a - currentpoint currentpoint translate 1 0.5 div 1 0.5 div scale neg -exch neg exch translate - 396 2741 a -2 3473 a Fo(2.2.)47 -b(The)h(Gimp-Print)g(Graphical)f(User)h(Interface)396 -3689 y Fm(No)n(w)24 b(that)h(the)f(GIMP)h(is)g(displaying)e(your)h -(picture,)h(put)f(your)g(mouse)g(o)o(v)o(er)g(the)h(picture)g(and)396 -3818 y(click)g(the)f(right)h(mouse)f(b)n(utton.)f(A)i(menu)f(will)g -(appear)-5 b(.)25 b(Choose)g(the)f Fg(File)p Ff(\000)-15 -b(!)p Fg(Pr)q(int)26 b Fm(menu)396 3948 y(option.)e(This)g(will)g -(cause)h(the)g(Gimp-Print)e(GUI)i(windo)n(w)f(to)g(appear)h(\(see)p -0 TeXcolorgray 26 w(Figure)g(2-3)p Black(\).)396 4077 -y(Mo)o(v)o(e)f(the)g(mouse)g(cursor)h(o)o(v)o(er)f(the)h(v)n(arious)e -(parts)i(of)g(the)g(Gimp-Print)e(GUI)i(windo)n(w)-6 b(,)23 -b(and)396 4207 y(notice)i(that)f(if)h(you)f(lea)n(v)o(e)h(your)f(mouse) -g(in)h(one)f(place)i(for)f(a)g(short)f(time)g(without)f(clicking)396 -4336 y(an)o(y)i(b)n(uttons,)e(a)i(small)f(box)g(appears.)h(This)f(box)g -(contains)g(helpful)h(te)o(xt.)e(These)i(small)f(box)o(es)396 -4466 y(are)i(called)f("tooltips")d(and)j(are)g(intended)f(to)h(remind)f -(you)g(about)g(the)h(function)f(of)h(each)g(part)396 -4595 y(of)g(the)g(graphical)f(interf)o(ace.)396 4774 -y(The)h(ne)o(xt)f(se)n(v)o(eral)g(sections)g(will)g(continuously)f -(refer)j(to)p 0 TeXcolorgray 24 w(Figure)f(2-3)p Black -25 w(and)p 0 TeXcolorgray 24 w(Figure)g(2-4)p Black(.)g(The)396 -4904 y(dif)n(ference)f(between)g(the)f(tw)o(o)g(\002gures)h(can)f(be)h -(seen)g(in)f(the)g(top)g(right)g(corner)h(of)f(the)g(windo)n(w)-6 -b(.)396 5033 y(Notice)25 b(that)f(there)h(are)h(tw)o(o)e(tabs,)g(one)h -(which)g(reads)g Fg(Pr)q(inter)k(Settings)d Fm(and)f(another)g(which) -396 5163 y(reads)g Fg(Image/Output)k(Settings)p Fm(.)c(Notice)g(also)f -(that)h(the)f(windo)n(w)g(is)g(di)n(vided)f(into)h(se)n(v)o(eral)396 -5292 y(major)h(sections)e(which)i(directly)f(map)h(to)f(the)h(major)f -(sections)g(of)h(this)f(document:)p Black 3695 5692 a -Fi(2)p Black eop -%%Page: 3 12 -3 11 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black Black 396 579 -a Fl(\225)p Black 0 TeXcolorgray 72 w Fm(Pre)n(vie)n(w)p -Black Black 396 758 a Fl(\225)p Black 0 TeXcolorgray -72 w Fm(Printer)h(Settings)p Black Black 396 938 a Fl(\225)p -Black 0 TeXcolorgray 72 w Fm(Image/Output)e(Settings)p -Black Black 396 1117 a Fl(\225)p Black 0 TeXcolorgray -72 w Fm(Position)p Black Black 396 1296 a Fl(\225)p Black -0 TeXcolorgray 72 w Fm(Size)p Black Black 396 1476 a -Fl(\225)p Black 0 TeXcolorgray 72 w Fm(Printing)h(and)h(Sa)n(ving)f -(Settings)p Black 396 1934 a Fj(Figur)n(e)i(2-3.)e(The)i(Gimp-Print)f -(Graphical)g(User)g(Interface)h(1)f(\(GUI\))396 3967 -y - currentpoint currentpoint translate 0.4 0.4 scale neg exch neg exch -translate - 396 3967 a @beginspecial 0 @llx 0 @lly 590 @urx 574 -@ury 5900 @rwi @setspecial -%%BeginDocument: figures/gimp-print-gui.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-gui.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 590 574 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 590 574 -userdict begin -%%BeginData: -DisplayImage -0 0 -591 575 -12.000000 -591 575 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPu]lW4)ZKPM3l1,Q+B=`q;OcgmNrX3MCN:S6^]#OXUkJi>i-Xu+$cIr4_D2a")Vq;3E*I -#NVer*WB'6fB>]lia_G/q.HJWAD@G2p0[J!jG>5QN9^JH/9L.OFTe?\OQ5ZEgbkX0Ts,'e<=d -=Ku>SMA7XBXB>;H`9C6]IgI1&l_`T]2UgZ_8,=3C*#(G/qQoZQJ)lgd -Z9HsuY6MMeAZEe1[cMj9W]e)+;p=3BT^`_GtM50<7/VoJ9?E;C"&jL19G=1je^_68Eo001,1[RuEcbFip]S)L -:2CU92E9Us.$If%N9P(k-S2,5JR!Ol&=S>X3dVh]0oh2K)a#;]oM:7beWQbuW_r;-[1%fl-S6 -iiFEKZSK'+Ngr-*Qm-g0:\spO!3\-St9>b%QA?X6d^3gQ$,!a5YUJQuQT3\"\l*jBe8nf=,1C -:RR4Vb9+2m.?'SjU+$p[IA?JB"hsu10.;rN$O#1hW,`1[VZVb&G*7?oS$jGruUES8srf+f30%J)2c -CRhCN=I_F;,Bj0T4&WZ::6cGC:7[9%-tr39^3HnB[nj_eJ_`(G+$jR`UbgZs[m)PLMUQ:cdlA>?1`'rcS:3jMg-c ->FbDP[5bGa,@?\T\*sg/lkY:@bT5dhZJjL&.-F4'J`G<4n -Wb0h6^R*):VKFLi6cI:]6uau5<.+]cs*Aa#&hQ5;Le$ThEPRKbebS-0cHVgW,8S4r7L>85i>2 -G-%k'a*]RE.Z7LB5DSA=*DT?Z!@W?-4(+4aaE7uo4TXq#7LMAR*a3B[;0;ra&U$-NI?aa]B\I$I:>J> -0Tj&qmCl8[lY]$qL+3>3pOA#=II*P_BB(KoI.7FA!7lSAg=qV^KuT%0IAEP'YGZ*XFdQ.E:cGiVJ.QW]hR:3OFP[XJBTp#FQY -fh.c:D'@A20H?TcS5)Rt_hlppYHsd7a33@Cr<"RR(+X,iB(^e]%61W@[heF;l#7CcP&52JRA% -Tcrs9MZe%W)WPB,coXktQ\Ms3_iT4D!hUUc^`LUV`1K?-W2`S%Ll@%CDi%!'KMZ"'EA>-U%)j -FhM^a$,(I@W=0E$0--e@W=/Z`Moh=S.&kHC+9uHK63+%TlO$@?'`IO.%TC?R*/lm0$E6bPV3+ -dnRrG9QGpro(8kbU=e(F[EGAO?`Q9MDVe0LCS;_JjSB?-3bd>9rW=S*k@&Bu4lZR,E:/R=raX -@D5M<-Bnq:"VGenqEm"Z'Ef@r$7)<)-;V`Q9N`a,*!Y=;$q!5Wko^,8M#0%&jd!X'hg*@-%BS -r(HX%MR"d.7QGR%-f2.D9HG]S`YFDhYW6RLqGf5uTdQZ@th/5AYpZmhT%`A'_bYh3 -?qe;*Tp0On8Y?.j\g'P1F;N,n]Z*QoNN1ZDAMfN863^Oc=aVi=I_u2]@3 -%qn)Ks.hU+(U -jl)B&9#q%'F;6NYt-J.Egk^"`!8_^Lp.H=AkCAr'-:@dCIAoZO32H4in]o!?^N3n0]-9'8VXL -rNV-`46ZbLI,5-/>#"FU]'dhJo@rX)D`R><5NO=_;[-?ZsK3R-dc':+Roh%J[BPTgE4DgV>[]:Co>_A/t:jIi5?%'Xi4.`p]"Z<3VH-bIimQ+gCk/5 -?tY>QCC(WIs)J"'k;NDm31m.=UadpkKe6nr).-CasX^7:Ii"&VVQ#q -9F`c;k>Da(TI-?GMjddF6)?)SlfZ#E;A%..k:i!9/>T?k@.N&ddtsi!RnSkVO^+_,A( -#^@T!bib)!];=&V3+8W.02LUN"Vre/!LD)gBH?=&)e-2iaU''#geYm?7$X;mfl)Of#Fi.Y&*f_PS=ILq2h@Br\/,2/5P\ZX/\kq-c-36Mnrm0JcJh0l(^( -#B.V]El(hHMPJ6g[DQ#QfM8k4`Ndi_,L4+R!A*H6nhdhBKT1W1POi$p^^dC$MA)>*JOMd^HY= -d(4m)X><3qG!!ZA3^?R"ngm?I+Wi8R3$3Eo']bEK$XJ5W?=X:A<$i4ZuLbrMJa,0&#]m@UVbLS5iWp ->R;oPLTfags*/Nt^!'cDm^R3DRVrm(bdhP6pNRe/_f26cKA!\C.n,H7>.<2guqcK&9j[r:p17 -<(.+K\'u--'SZY$#P=^r(*b/-NPFt.Q_#T2NhXJFARb^`=no-W%uW@LXSXY4R/qX=2C -TQ7?s6d*hHWYnq9/I-;:+&[)`*fC7J7AD=(`]d`#XE3G)iX6u^QUnBVUUf1";OO"WW6(Ku?)G -c7a]f8,a(q*t-6VH"4C+/h;I^)%h?ibEh5,*JuN3`I(hV=MQ*o(Z(e(V1i]\>tpdc:[V2HB`\ -d=+8UKZ>FT]4QTqYcqaD9e5)f`i^^GJ;BCZE-&`,-(nMg4fLS,,+sFs%50k=SHLe>$P9>i%5W -hA.V'91:A5OeXg"Dg^TNSG2bKX -<.g8o-hKbZn3'#.I4t6+!8d6un%hol!WQOPGRIo[&AQ"]@P.#+97:(*M9YMp51#HhmK:(Gl6m -f-$?>gUPK0=:6touB-m(>M6OR\YcJ4eEJb>;alG_Ice=g!dBIZ7@XD3CVDEDDWLD.&]5Rg+_O -mAUp%u3rq%u*"bjq1to5/j.[4?>\3]ojplI/XH0QdISQN?VI:-[[qk/XE#p;>c8@ULcbrN0ZS -W"\COT-Hd96IZ!sl4Qj -*OrA(Il8;Grore3h%Na<5S46QGd)F/[p1nN<-\Q'$ej#O$iE[nX9EFL^^V'b.g9+'A"J_N\4JaDA,&L1CE>ocC0RRDc`UMomX -3Y=$J9UKX8D81KaGnQp[92AL6Ll?47g+Y(WtA2HHZl53=FB8$]BP70k)7S)@P,l[gCYbhoJ-u -+A*,dn1GK^cX\3Z%2P\IL(5kt!u*&unK]*Da`s>-*Bo6Z6;"[b8!VohA8gjG%eDjbSC#GIm5E -Q$gBfk1L;O>ge:0lF(9!f1-:u<'N4_*G"O"2$dOLCE-MRL!DYr<'qn8.;3a-E;QBK -IiNngY/EDs_+tC5oU:P6I<[6>JQ4DGp`"F*A;;HN9mXgHU`XN`1f<@=A)ljdMK?RA>HQKUu!S -c='$'2%B_]MXHWIG\RGnY+@duVUN:8SZLBZ)jVf[t%#L.^HDsGq@H37EluE -$W9p1#Rr10Y:>5U_ghn\QLBFee=/s1TWRSS4D_>*[WQ(@Z2Z6](g6I^dHh-qp0X'D2I&u"T`9XO4V`CE4\$``Wjg$]Uu;:9mqmDO?6G/"m]Zu+Z;2 -hu6L_"R:nprI^HpO>Dt!_R-`#K&`4dW6c6+R5Lcel^@<8nG'+#Zd)C/Z@5Fk/IOm['`gF.ZUM -k1@H7:_@qi+Bi:(>b0(%*^_H6+0(pCX00hT^8(kK"Nd`2?#=1$]]^pm,G9g.oaf&diEJL!qX#'I-A+8lAiKm&,R8i!H:kq -A`F'`geDd:>R)B76I/MkTkREW6ip?c0sFW8u/(n;&E8CL4]]J>"uF*,tb+ajGpMLREDrZGnd2 -<,SEsE4skXp`?KQgPdSu`REoaS:?%\8.=Uu03Pa3Of]/oiOsPFQ;p%Nqa#']=8l!3DZp?1Y0( -Bag)P[ec/:CrS3H].=8Bd%u?*r'a"_Eb/sAi83ujqO\NZgrtm%/^dV8@?; -s572D0t%u$;ifM6NNf=*`1/l"/rJ9,g30_EVbimQ5euq8r^l&PptO^NbelVAtJK`_5@j8Qm*UDZu)]WNg!-s8U9Y -+BBXU:.e$;rN.j!H[Wq#VZ[!N&:)"H)LZ0%t/oE>(-6H:dFqbO3ZZoM;-4r;!QP\Z)G@P)Rjs -2M+7%)uU8Y.n^&U/`mp#;RElk54TA"6_lcY`n]A3$LAGQ!;Pi2\#7VdWoXTi+HkG9fpKUkUtA -JO=\hA7G4V/E40nmW*a%^[N\::+EI%>B^ci@U1gJ,9G*AV-5TRd#Gfh'GgsrcD6MPpGnj90#pl -%Z(5"Y4o`OE#KVOlf&.h@hUX'MCBLKck-Hl(PUPq;_0-`A_9hcUnO+%!rGZ0GP?fE(!i7%IMI -^!Q%Y;c7+lcdGnM@)UcM0:+I1^s#5McQ_LYluf_pL&X!g+IXsHSk!sht?P(/ -TCjEShHgdX3Hi"4(""G7ppBQRNf?n]0%r31B2=P\^0YshVf8epGW^`.Sj(J`-M:t>5be1gOVfjG`CB^WEk-J9I;j,._2]WB_e&dRc/CCdL>m-OHi/2\Y.`+g -o.VX)MWk=%LW8UX3^cGn!k;l=*iAjK$jcnm6THIoY9AAgmeg2[H7a*#N_B=Wr>hkghF.ROj5, -Z89RDt+=cF\a.Bg&NUeFJ97/`O/;I!0+l$8]d'IK*Se8`X2\CGDn2CG;9#H,#mZSUV%LmlTuh;F4nk9`J;mGY;e:^P1J=H&Hk2uigX>O(,9R#g&[M -Tgk-Ms6F&M;0o7O@g0V,)T0:H%#[)bbBMc -H9oI=4C1H/&Q4O\cK8L0rrmd=7`5q7o(&15h0UHsio&otHjs:6WfcM>-\pf^uehp"eMc>VrKh -%iL;nLC,Ed]stQh;g:VIL%G+q?;J'c] -@CH-GqT3XWY+SQuGLVoV?^^kb@4XXKnPfK9alYh1>)Ok5MRlcOQ*(ODM-_jmB<,%;>C9EI$;j -d>CJed;XVXNBQ8N_oa-1?;MpMYM%o;AMdGn2cIs/3Uq4ZrE*+$T\mVl0EaTRrG`Qks55nW-L1 -GnRXNrL2%#>`jUX:YR[bU]ViTB8]:OdZ$# -7I[6Q_0lKo^SjVNt6cis"ckYWaY+=:NR6O`j]('M%1@^g(Hm`,OH0l*T4//qY9])pB1b[f\eRp!$2p$=I`edSQr]5PXL*l01u>:EP<5+9),'TDj0:a.FFPns?8HYd-?SK=iP?r_.L?pqDeqK -CKdYRi>KCtU&_c30XkY2W -%`Fs/"W1j"=J\B&P%Jo-T4ukCSrkm3'St8,4D)Zk+5Q15@TC0IBqVtB@'suG<5`t=#'AfbQQO -lh -!W6FRbd/e*hbik`;]*%0G*QLZF@%]=sDF;"4G7)>6Oq9^@9m\B)`=*9ql/kVPt9DNVV2'DZk6 -dMZULG=h%lh<-L`Q,6/4A=pjT?.Z>3h&l)"^a;ckY(:WJ`ZM]C+!h)qDdmdmmVIds0SOU4$3* -6Ee*uP;DA/`jG)N!E&iHhlRT0Ke.Nu\_DBh>[mCi";1s'2p"cGW,T/mu),G9dH0P[4N"jZtZ_ -.=U(,Sdj(o15f#qp9DZ,dOA`f>N\M.1*@Bd]p%_2cS*]oL-WC-t0,>6V-o>4d(*3$jFPM??UT -KB[=nLs,r0S.g@L321lYCJS?'7a[$`E?[bo(FmDPOe[m`H!meRp(f,B'3QNeFY3p/(Ci&;Dba -;j(Wn6L!DNIr+"*e7Rn"QHe?\,n.GIU)Y&%m2Mg3I5LC\g[:;^Mu9:3F,Fe1Z5OidRH7@6'tL -gDjV:)4<^M9In=T*fBcVeZkU,pF7ooT]hu.>FXbfa&cjfTA>6n0@hs^>lK]UF@g!QQ\&BJ)(: -,=P4fYA-!(A\2OQ`1q5hA5p"D_+%B+$.8A5)O!E(1fYNV4DsSY0r($+jqa3EA&Y@$P=E#6jo+ -.uK@s1e5`L2dJ!KB[P]+P@2`P!$29dV-hpfQ0DrWO-:j&sV)GTP,+FujKpl(k.Vq/q4OcqYF;) -%6_*;a:q2M:<02SS0S;e@WNA\&Cms4oSYE*kCM@]2dW@T8b72AK8O]:FR1_7j,^3<`L33(jdX -T7pA:"WN1cg-U50Z=5da>OrkcV;b%p\_bf,o -@"k&jAe2qjiOdK!-p%Y`-S!2#[S*(D6$MO-(LM]u(D\75P(b1kLT>Nni,)@9)FG\r15;$\Dm7 -,JRe0N@9[3k5%o*qOVdC`2K1k4/#_s(4u&Zk97OuaXQ7lCias2*$d7rE[9$V$2a/OE]OLJh-Q -\PM)so;-QYM)r^S9R#*c]j![KoKnD1g^r"TXi`Y7`?Pq"=?$n7IiaL`9# -S)#ll3"!V,4_GR@Q1q'*U(Jl@i)ti^_8$S@CSAP:2\Qe7"N=V'qD(?_G$8EIr[E7T(VtFkDgp -;R'&LpdlEStBI#S9!,ADKH\'-Qin/JL*LK0rPIe[Ae;MuY"7;>3Ya5fb+]2R5LlP^[\q74TYt -du_BJdUu?#IK%nl.HZVY-< -#lDXS1M`]m'LUt9#)].u_0g8kmL-u9@krV!7.@q+M%0O!$U8c`a3cC"gk3b/N4'"m6IKR5)JU -W3mKAj)D$X.tG@6>ao=,%&Ga*@e55.rol8m6d)9+dtip53/JWFr8Sn/es]$cl[K3K[+*g@RZ/ -oaiE-BKu-\hMdGR!o])$ZJ400'`'DL5P!o[,noc<],?\H-T_D)BG`E -0P[`a"J*.gF7\1ZBua3F86>C_9DC8'M7'.,<=nEnVpO$TTD?iclNr[+"IHd(lCF4,oF^`tdJe -[uM>mY//5MB6RN=Fd-O:*/gJ\P2piD=('j[.WS:uqB"e8@06p:G\:b;\\uP2/\*!:Ua(V@G/X -9pajXG'n5mbhVr]b*1(-QJ-&78ssfjY[oi(/miWYS3"s%6d6fQ%mV^@Vq:!pr^2fJ:)tD's%DV9mVN6S0-$D\I6op$MK_? -`RU@s^f5>hkM7cro7?NH`8Wn'[@0'hRB:4b;W-AGuBIo_731c2X:/K]!?[ET,8G%pI5DI=`LF -p>LV68]^A]N;9cA3o5>[`u`CT>K/>&^[fP;B&_Z22=Ii7(buSKi0t0ai4a)\:;CiFS/*C+NsB -:m,iR)Tn"3I7<1%N+fpcBVL2K*AI5I2nep^PNat(_='80-`6q6II^4nTEXm'E59Rp(2sYO@La -cXrTL!-.K7+sVR1i]W1CBAXink%WQL_(nT1k$1bD^%67=KL[!(^kc`ZbpHgk9Ij*YA4cq\*8I -N!"^4]-rOR\t;.r`VV:/0^``O81U5Q1#k\f7]AI6)#&f5T>`pil5Hu]1=b';a,U]7up!UkDm> -YUU51a;$/m_i,&G@T'`n%DOlV/*N)N$?&=nG)P(A?GRU*'bHmClr\WcrVrcRoC="UgjosA1)( -WC"-n[5J?*;.c%&^?91+t.@$ud4(V_7T-eEG/MSS3t?77utC_AH'o7D:;&KM%#Z`OD -YUmQ4PKSUQ7!32d[N+;H+J-JD3Og)((lm)!o@pd]G%,#/`0gl%kJ^M4:WD0"t-3,+7dAY.]bS -Ed]Nd'clNH$1[u)t_'"(1TQZ@gIijSLNAm!\)O`oWb>+99ikIGLES2E*R4Zlb5)T,:.YDMMi' -HE";O^#1-dK0a7=>EZ;I)Bl.`..lZCDD9=FlQK9;]&:gkr`? -GGAe;]E%Mb>l4Kn@W5:%DVX6LP2eb,0QGWq)VIk]N330M",*O:5b!2!kh232rl1GRQQgBu2QI/IE/_O&mL[SE),l# -9Jes=4*E7:GI$dLIk0;VUUi_&(%8mL)`)50$#nh.fdN_!#h1=hbb-5GWs\s0$pp$)V3-PZSD< -o?"sHWR4O>BZ8cudPFDIYSmS3=Sst_7fN13ZW[gJ#C31-J:i\PF,mkJI1cmO/YmZ,FpPl(),/ -4,t#)S*!h1gZ+,<^?muMF0*jMOKGn9GXLO:_Jne!f)Y[d_crdD]hB%PY8D3ai'ZD-Q`(CVc3 -'\JuVDB!J/?#Gam+-_/lXAU/IRg".h&=S`>q?N=]N0Q\t%B0E<(UL,emeU5J**9@ZEJWk6M)H -?&Pub,@\[;'X=5WY[K2"n1^)DDBPBjJNdo47IZ3mY- -rrbaY%cHh4/1r`M>kSs[NH(p@4.5Q<^OrWT3W=E/nGc(D?Ee,%\XET[Ef2.JPQDu*2(Li:Wg$ -A&0Ke.UAGu5WZgs&)GKf![ZN/Tj2Qn`@=7q_G[3mY.MaBD1=#aU;Q"\=)1mGoO&:^<]XZs>)f -Z:N*.+B+%o0tuEe+8d>)7tR%J(/Q'VU[375.M1.*R[+A3`akW=d'#BcKW?WCiM9p:SU`Kq!cd -KoEAb7M=.X5;<--`=oXVmT?L`i8+eFX**,JuP\\cB@EL0#*Yqm/:TYNr24XN9d6m>oidCGX,i -/0PY;AjpYEDI^rUeha2V1t(43XgXF_Q1N'jjaKrPjqKn(E.H6.?6FsCaZ=K`*e=rGUJgE,Sm< -?ZMf;90)j2oiUU7+39Z"3M(NEu3G;"#ViW_;16dCIir$:<3eNt'0eUHP_e-XjM9G(cPH!TB^/ -Qko`YJ&9^qd9C%TDon/^\Z4Tq8`O0J,c-jrV(g?GGp>tq2^#a -S#L1mB32/3>/prA.urNJL44/2c3-q=GLk!QA9p):Rb>eR\$6TUh-;R1i]Q(+V7)8CW*U_ciK*]YuEG7;dcN6T1\JQX9/eoE`$(hUTE>5Yj_8'^qictFq=.Ki6NgQMo4 -*.Ohn4MAeHG@&1,IL.?mmt:)! -'=8Hl@$:<@Q^6Ag#!9r=\.1MF2djTCqp;9`EI*=,fhT0.A9$lscOQO^9RUl/n-Q!l`V -D8[4#mUjc+9Vq(3.'M),OeNkG[m$M^_r=YITuk%dHGI3_<'dkq/UIB^-[JNDHFQ]:E,delgjE';Y@0c\=%?Gp@pa@SfP9);Aog%*i60GNI- -+JVRVQF`">aLJFOuIWt]'"3JeU!M2MDNI=NN=bYAD,cVY.jOW#`4FgrOAgmKn*%)W?O;JpcC' -[u*]dFAua:GWL7C'*-sJ)e'qRL^FfaeO."BspatGA9Inr]"aG\.jp*Tr#DD7D9d(&5HNmfc`p -hj7+fA-0+NIllp8T-.nEBBt@[p@F']GUc0WeBC)NQ0N5"*C8$9$[EquKoqfKTBAAUuSUd2"Gu -.?@P_J1c5UUe2%?QcAn_h[ReJ3f+:#fI):1-.\$.,!-K6I+@Mt6AJK>]i+$70?MPE$;,Xj.9- -R@*&DCp:JZd5g2"A?s^[aK,K -A?3p@HZI0h^OQ^PfTR5)JZ0^1c<(*'aY3oS61di>FB,*S[PFS717SR0[7ql;LZJ+o'ESX(/sR -DYl$n7iEXSRNEQ]OdSe!l2%I(g;AtVu*b^?SJN4r=N^_SkLnfIieFe3("@?T^Tkl1GTVYBCnt -;i?qJ]RW<84PDhE$L2])ss0hH[b*\sgHJ%)Mi'HLr5c+sZi%*mHqAPi&IJ=Rdt^.^1Ye<-l`n -_A(T9O@IV)S-lC+E>lJ*E9]:+/tmM;`$sb?SAo"]3aEtTm'@9.\%-m@"+m?j>#I>I(T)>-aW) -rHS<"tmk.?Zp,KVq94KRnt#U`09:cf8Aif:uW)I]!m$`k):*rTA!D6QC@`>jl8=-o:K1Vr"]D -d42XC)m!F@#E9Wq'6m=L,?;qPId<$;kDh=37TqN%&_DAm(e!$*@ZQEq3!qFu1@>&2=(m_Cf)RV.E+7uE%D -YY8^i<.&H5Z?&G/>EW\!aA`\>PD6O4m_uG/;IMV-)6H6#m`5F%*?&i;Lic.r/uk;#CU'I??4J -#^]`AQW".t512/+EhJ)6e2;:s>"4+)CRiPK],.]0_mM&@g*c)0&Gd2Qsn`i7EL405Pt";RBHJ -rFTnl`$l'7F5qP7];CnVJ8:h7s:.W\Z^jfRd3NTC#NHWE&,Yh=;*g5'#$Dnm4)K_$& -lOJdo\aO0YDcKA%]Vhh;DT*H;fN1#X"8hT<'4M.n?5l$u9/NY1P`bFpG_5YVr.+osUFVJ2GM] -0:gciS9e>>C47S;_%O*&c7]<'-q%f3FdA$Pp9#4=S.8S4&)B,Z9oL#Ul\-7)Y;-1E9Y+]pcUR -!IP./on^eg*,)6phP6Hl?_,9jQqViXV46>YF72X0Pd[PH=lL;n7Q@!%.8EfW@&P?NSXA_LE0l -Poo4.S)7^e%rl\_F2gO`K.c@9/*rX:eYL$JR/P#hUEZP12S6\+)$ -C]tA[Q3bjC?['%4^4G8KX?>p,GJ,0$48sKBt>tG:*-=1)3.=?ICpU].<58bZtHP>;E+qRAW[Sp3Cep-."]#H,qp3/J'oU+e;R% -J9jA@r-ENYk\)5f_m*8;1`he@,#/tt&:g'9]I(7==&@h2*C(67jX5'"\=io8$A53tCiS:gr&6 -OKJYM]dU>c,-2f<'g>`Y-'B1YIrWEgZ`8@*BED[?Hdc/2t+j+UJ>8N@#IslU1K\6!I:=j_:C_ -D1[m9/m*7&t+<#gn!i$%e]o-E[@g+-\O"m$cLdIpBQsi5&Xc%VGT\Xu#H]5cTF%&$[#7!Q=P% -%tQe5:d?KjGBT0$u1mH,X+GL:?,L0G:c69mJF:HX%$`m@Spr[,"G@0f_Xn>oqeea3g:;NWP4N -"QWsT7US;dOI^k%/U^<\_X)fo7JCF_mR`:/E^MS*1X82OVW^'2VfpBXEF`c2MYn[Y/s!uIet= -67ZD.S]Qsj+5'e#uSno,RVO]*!pkh\`L']l-9$VtA5N<`O'?G3oQbna& -\^IIl%C]-8\icD>s>fr:s0@&Eh"Vk%s)RC-)WpCnnYak:F@^4\OMKha&5C>iI\Am -19f153BiFmt_lZL@Ydn*37nnT6nV&+CCO&-RM1#*)Cdio$).>*pScDA\GH#nS\ -_'bC-5eq-kSACmRX//tDLs#]\"PUI:']`H4QA8o0P[LlKL<##3E])pVdno<*BVS"DqP:W0f0l -1&MTc+,&i/W\:9#._u5!;Hk.=X4o"d`":lT,O8[,5pjGK,&H,&hhL#e;'/]$)k0UD@_HW'V`0 -XGSWrA?]9T2Qko0c7hUcN3V+!Xba)obrb?;>EW`Rm:;LD3R8V@u2ib3m51$;f,XHcuqG@Q_IK -TsD;%E[MH"inFufG5>l0EY!NPhgL!(s$utimluUqr9t -b/i%d]aIY5[PhTOoSHn]efq24-QBAWY*G[X.\dc$k44WJ0Y0#n\kl)CLd3_luu%Yp2,T?qVq\ -dmmE8Ms-=X30o]0,+Vlhr&1i,,rUBf6fmB?emt\a8H`S*??pk=(!3'n9dd-XYeE%7,)QfEWljK+e!FU[K0d9^Li -g2VScR]-mhnpF0O("E^S4`SiG\S"!>a73/t_M -0j;0V!bQ"]+a097@/0?kB@'D`7K:8Qq"Qi;d -AV`iTGP67n)sYiqtE4FY&cXLKqWSP,2r%pe"U(`o]1f%Sqdm]rNP1Oa*D.D+`Lm?dPB"QGY@R -]?^\?)ca.,9B<48lQ!0!3Q]#Pi9"B0-&5?1eFKXnrS6nQ55")!5l8&bF:s9nS,DT&Ad$tX8W" -Bg>W4hXP'CYr!j)R1SGV9Mm9/)e%QV.`cJOY"qX$Laae1&Qea2Zc[&,H1W?2kK='elbm(\.;V -R:@.&YI=YX5O@:@=+)ubq!s;J]t2.@:X9u*f@+N*hhSi#0Yg^0kX[EEE9DXm$E!rtlBhA,i`i -+I9QcVdp9ZDH.dtZEHcI*^:=Y=t3-CL!Va`Q&49/!nTV#iVfoKNuVl:2L(k@i5](75ZV1.Q70 -_++KN#!<%V>L8[LZQ)@1[#lV>`\CCAp"L-@Q/ -OlFiPc(,XNoZD'HTX7Nt@a!\nV&%Fjrr($+Y!um8T>/b0dK@ip&2q^ZjME@k=G0EL@)5iAZUq -D^76jf#ViT.)\WT3g@j8_s1kKC-[:9t88YJT5rr=V!+*,(-k$p%Scq;$#Cj3`3M6,U=H,TU>J -!NbN=PK,\lk'P9sgg=Ng9ckp*cq[tS!F5OWMVo//&lNC_^Y_C/CT4$7-32NF.h>j%Sem6_a@J -BYAV\0c,>aLd9RUP5AU.Q/YUZue#>W8(.[/VgSOs4+76X%,jcq>X<[[/dH$6JH-0CjuOJW//L -Jt/<:cmLhpHN*hn$,Zl!Ee@=hVY*Y"3U_2a8,U?rq(Y'LSitLhRjs.g]KpE#IY<0T3r-UpIES -)4^87m@de^UoM!"YLIFKg^Dl#=dq(!Is"rTO-.]M'N-b"j4(37$,f&qKk3.>nb.)N-'?`.*/S -SR8`(@0!WqfN:ERG.Flb(c5S][nQ%Zk\MoDc1-d.W9X2/-5,SA`dJ0H,E+K1#gWF -eENBP]ZD?<3cRGAb[-TQqVQ7)j1fM&E8qBLcrM2#JLK!'8di3.!;<+Y9B\O9S*Icu90b!pL`t-%9&-aOH]a"4=Gm0ku -i9bq(Lp!$?qtKQ7pNOOPq]RYMVDna305f0VH?1qJ4)Qgino;+;GQtSDLqA)(C=A1>@%057RTR -ua:A[U1?Lb^iGrV<,0c2CO0gD@9LZ27lf@N[[?$,/'//W8VJP2"C/61!(+tS!O/LSQM<1uu@I -XoW>EY1rp\hDS]il$tSPHj:V>[Mu%$iAhm+XeXY'RWW??'KjO%]0n`'!T'@6#^bs39bSESiC< -e8Nh%RoO@e4PS64G)0GrfJ.s@=&]',n(G_)8L*EFu#o9M+:S<[DZ&6/X^*PCErCuA.YDENg_, -(3%#4L9"j1(KV_VOPBo`[>_7UW(ekKtMu*1V+#/WJQ_&o_S/Tj6u7#b4lX)Kl.BBYlEk-JZ;3 -GlJWJ(9$f`?JIp:,>KV@DTu9Q14<=Ao4T=-9;.!J2FJm@3*2N^k@/[oF+k\;W?O0=):%:Djc= -@=4>@:X&lP0h)pcp$H2u^ae8T.u%Y9h6(bCMQ^DDkr2^Y1AS5dDH=^*OAS29b_.d#-K9^sq:d -*!-dTmJp>9IGHAXF*1Ig$:$7_/qB!]S=G[c0tqO%pm`5.K72(-9-c$]M,2E5VYFbH^`a8&#Q( -K(UcakAeai^i1nEf(qFm/jAZClP]h@Z3%7#M!`!ggO*[agb&d2q0k'l"MXTH]g0$OjG1R#_fa -IlbbTDjuEgpKd*md1$C!HtlqujbZbRMVbn9BU.h,/hipk&+DNa/),$GB/!m6sF@!ET2iI$jMS -oF+V.?@&368l(>>rk-hnHZ:.j(Q^b=&Y's7H,[gE:2su@"!Ah%&V`i?LD`oJ(L;\+Di1P#a$U -P[+\acsn-k)C-B-`9kX*AK,ISUI&JX0`5$1^STJH.ZqI#F$,pj`rm?ZS5n=:PmS=aRP>7W!*f.N$!>KjlBBI=3/hI\C5_XY5Kg%Le7@XZHUUI -e#p[`Japu&MJ9%+R*_l/b(aKiT%ip$H"7oe7#]sB/TDbqulXg*JnJ*==TtuMeLgYho?dGcPP'&# -6AQe+8;VJ$r;5kM_A/?2T='UM;UD>5N$A;A0[cU&ZhDT&6`qt;S.;anG#1*ihk())^&9BW-c2 -OQWJgKpOM?eV,O&$jiSt>*9V`lXOP"#O?DC1"*GLOZQ0Y%=Ti7O6_)`ZR4#' -dho]);6U!WHJ2E:ES`h$r`2ThdiP"X^g2X`cacCd3a\\r7i'@2!:7UHo7Hg$Qbtf7V[n/o`Gu -/,!mf!%i>lnckHMZnJW>?4D[^QHN&is711a(]l5jD"%\G&:VoZ_*^I&hW*)Fa+"%5OEQAM!S@ -hE*"INB^aI(Rd0K,pY[T?jEo+X[Ts+Q8LgR$X#:Ej^3$HJ?#Cq]]K3#R6O.D=.*+^Xj*#o&Z% -*4(mdZ)4A1qNY>]7@p`\@R'/onL-hJiOZG"&Kti93=6bS9i@bDqPZ(5VYt6M#h94i!@Cb,6\6 -%I=1C6HM[Ed*sUq7!mAale9A\KBIC1&JC93ZNs -5Z'5s$)K*VXj%[b;#mU$"/_0][u.liSAF1qS#(l4T+t`NCgJA8W5lr%1lA#h5+uj@d4WpYW]= -)CYYgcHn]J!N#Z:eojC`lDaeCIf^C;i=oArLnIe<&imb($Va'gqecrd>l"pIHAeH2i'\k -3D=scLhO(G,UqHC(>tW=G[JAeHK^"r]Sn/+2MgrQlc-c@,usk65MX_M\FHVmm-3$`E1Dnn=7;[dHg$#7>Hb5o'!C[\r4V+n+IQ@l)LE@W7TUGWu5s\?n,s^V+,F]#3 -e.$/bb?nadYCC]:5hU_:]*-A85gI_5_s^O(=U3E)+,;4o;`sMgT,MtOG6(q$=&p\<&P`Y>b,< -.m7A&$#/:ckGI"H#0$A#edF['"UEUW;F(">DG'J$e(OMEX":>"@r-=DB8IhVHAW7?X<*5V90> -'@\[0RQ*t!Ko]2Te^p!X[16WB_l*]as$>M5Q -tXRSAl;;(c__"[d=>P+Sdi3C2k`4GC-e^[mR:;-GnmH%("GAj-?&%;:ZR[hFGj^:,;hrTN]S& -(LW`5Z*PnFY't58I4@?oqeY3T(&6&_]i9=)Y?h8=9Vu+F].sn.dV\%6:efhL^2#q[>'UC#;GJ -j@29P\eekXij^<%<3n6aX>XXE'sk"345iH;R!S8k!&YP#WBa5[:gZp%nb)&]kDg4pK7P,;-[Q3?&P*I,5QdRJ$.mXr]ERdp8niN++b.;>[ociEcusF_YL!Z'H -1gp$;UCiAZK<*X(NQU"&p7!U'Y'&i!c( -Ef@ZFA&)S=8Xb3JaBTW5a4Gfh?^V(OPD1h8rWusrIJlX_REVL8j.&#tK^B##5*Y];lj$;$_<) -SdnHN\*Y%U*X,A9n8O\!UX?VYo`ghqHjaOLq$`o[A7/E29?Ic"k)/p14a=js43lU/:?mOI -;;l:GI'"*g\dKAThf5N6m$FKg-0gQorA8aTJ7jaGbc%rfJ^90hdorUXS -%Po]&q(VAo9DdN0*Y[bt*nR-t=D0'A#SkT5%5G6hNL3F0\We:"NJ1aBokMQken0u(GiRie?;I -C0Hhk1Z["dcE!TrJ/'q3;1SeBK;N\1i9Ym;_4W?&URa&Go1?K#.hb]MIoVaS.BX/bG\7B/&R7!(IKlBqEV%_:a<_KDue&]6a,l:VGV1YBP,4*sD0G!HkFOc^1 -9`?>k&j/c!cn!%gL8hVRr&B/fQtB/bJB;\8m!do5b@rreeU%!K0G)o/A\_frr/iRn=s[pIDR+ -3k'LmtOp4#/_s7o:$o83P.f9$eTg9Gmc4BS$S_NK_&mVDE*$:n\Q]gHuGN/2DMra3Dp#H)Y -AXm@#^cf]sIS@@-`:4+8>NuDB;%r#p7"$o`"3+n.%^/lN(Z%b7Kd5!'%N%Yj'F%&s0^&2'?s# -#juVce$CJ72gB]@E&R6Z>o1IEh&oH)jXVVRgJ5&TV1OoAZHI&q8$\\/iiu%]jcmZ;'@9+9*%/ -1jfe"q'%T_Tk9">U"Xt*S2:#V"gP8D5%9N1/kT%"7&?/S(1B==72g]Zkq-%r'=0[#P:^dkWm2!IeEQq8s7PRTlS&8A[2qKM8q:HRIu12 -KA&B5&pLqf+="aqmG^89oXukRDj&BaGAYolC.pM!IqJPYFOd#\O2#[77^K`G1Yta9,UQ$aagB -9j2M@qr82HT4=Gh":9VV@"RS;l!i[UVB>qr'Y%fb,[Y_o<>V0Y;/%` -lG32M'po8G]O?[lB/l(A">qB=Q?TaW-3K76Gp*&1ftr)CHT-S@qI[W8T/WcD-^4=*j6msKOeP -TO?X0rA^qY`Cj;P,>_,im_5Ae5"Z8'&d)aJ*ei:jH"d#?([Y5j[iHn7AOO-;7$0IC96!6P*K# -DS.A\ok%&J[<22/)!q75THSRN\&q2iO_^30i`IdgN9__eH`X>Ljc` -u2MCad%QGo`1`8]9O[a\&e>k(dmPZ4^EoGT?Seufk96N:)Rk#>jTeRNU+<"ApQQ`+Wf.L/f)M -Et@@/amA:i\eCq(8p<#AL@jd/92X<+o67[\@=AV4=%=da:XojmHMLEcH8lqX4-o8^b.GgI39^pIgfT\;A@cKK+JdmcN@("We$,kBjUu -9^-#(bWPLCT\Zcn^++f7;#X34<(je&8j3k2V.LG!Q#Qa>`dEjQn=X:Fo`6Ke$1lN=&8*3&q<0:!1VoTX,Sg&+r(Se!JaL/['5IkRo8(.QC1?%D^Wl=;r%#2=If(5EbjEdHHUi!86A0?X'fsGl2'?U --5*lA'q;!R-4Ys]UE_#m]0DAmcl2s/*[aFq^rGoX(u_:dbttMC%^'X@jdpUp0rZpL8rZ,,bXJ -'<[Aeg4[[#YTitTK'ECFl;;OUQ)'i.X1+(=gWUMCc%5qb++Zc*LHkQcfSljE+_7fYuD`&(q=\4pmu`G(AW\#o#X,D/LXi(2%a"Ikj5Y8)&\7GA[0/G'2_#7;eO8ioZ](j:;kD*3QN5< -Qj2q^*Y52I&''!pR?tV&S5Kg#Gmh$PbS6;'6A5jNk'NsKW&9I-n()=.n5A5?TYOj`OM8n;akF -\M475$)D]og'8-&MA8uomZ2uD>^Tjl3!R+.he[7^`rD;2iCEqKe:m7IP:0':5<'nAWELgh2_/ -ROG3WY`\IKHDq)n".P\'0A$Z)<iHll_.kVsT0;MsW^`B>a/`tpD;Z>1p*-\GNkRYo)++Pkt_Y?fTH27IUL(+4`VKMur9j8 -g;p4(i2G1.YJ+2)]IcJlil(BkoYAtKHIWcN838Qtil]pt8.Ekiiae-oE+1Sd;e^lJ_MM9J$`` -4)*/d`gdL&`#X/)+aEK^"95qBRKS/\YkOC3(n9\RODN`U]olr_u@34[R>Z,N[gBa6"_bHY]:' -6>^"X\!<^.GJ6fT.WmEh.^kD5n6fGSHM](NUF1-W?p42-eXeaNMfI1d%br21l'OW9_!/Hc?+6 -\n'mf=(p>o7qs5k/#-g-jS6?VbPJsLiGqh:dIWcJSK34Wp:+](>3&TRc+?6cKFquHXFG*TAIt -,L!"AZ(hS]/\n2DM52=I]e/EG?s=-\L&64.Bm7U=_RiRqL?I=@[pb'XT8(-]:o]@WA\5[3ue< -Mc5P^%&Z55WE<&Eq^dAi==HM;j*7Io=rgh>)!)I"#L0OS/PZLaLf=:N>#LE*b\:f)n$o,l:5W -o*M,gM.na%f%#2'M7I$`;qB)4oaF#L7ZdRN@3&-m+gm7;D44W4Dc.Li&PANh;%6Cq3*V`(?1b&.AXHY9YO.,%70JQ'taCm_YBEAC(#[SsUQVlGJ4"e6R1C4f`\>*/ -G]G3e_c%dS=:\URdmPLUQY3oZ.)!%gqMBuMUJC.G[+-m4I4Q]$D2m#ql#SqXSX(+$j.4ne1/ -@Y'&lsKl[:@^QHtJYaUZJlLN)R7m[Ml("cHaf^qeS*$4(?,7hbE?VC4.OVNE)WF9_7Uam\rh5WG[UF544Z2CH,Zm;,\1**s;GS -$"&hi"i5UZ4g!7p`rd*nt_H>-id"R-W]*%P[@<]9$'`Z(8q'5=LKt/fn<:Dc7ISZ.kaRX4,_Q -[Bnd;EoGfbi9569AZuVd4>JRQ#ERG?4qeXXF(>kneWfWp(g]AQ\'pn=D8rlT)=jb+tai]oY$rADN::= -_HAJ_WA:0(O4Mj'DA`StF)7BngTBi-EVP@=L2'(!%oV1Ggo --#_3.r,-j35%0EbSl6H#ZdJd:lDI6oQMh3:JMb)[`/TYE\R;n.l]P(gpqTJqSgUNAGoH`qFS& -GP8MN;i5pokdT^49XU]Z_3#tiHs3!@<#p-Q`0o(p/`,'dj=T247a_I^eO:"bE#5dR136Ape+f -;$B"t)nU\eulpV2@2YJ(6<608n9[V2A4I$1<@CJ^F*M#nPO3S2)ZPMH+81@F\-hVZY-,i8eFs -XNu/qAVsQqb*a;6cDoj`(8h7,q`&"Af18!RA9H(ucoof4[lBq5FF[<=b&0;2=;e#WAS6!DZCD -D"N_6ui?eO['Z'@:_^''AC!MtC3F&Z(C*b9\1a%B&eH=LNVABU!9S.71;-b\0in&1`urD$SV[ -%1=dF;3ETH*ZgG%d4Yb%OI%^F-bDRlq2>M2UtR!DOA3=c-!AV[W#ur$eWUCQ'2VQZ1;.2J"1W -BA8uqS;M&=9;-ne$i@I_W>!=lF:6)Yb-]8]i4,_)"8rI/ql.Emr>'ZF>$E$%e;_'M&jN])5=!ZRZaXoe-rU`bgp' -])5=AijAT:=e&NM`G,&SZT,'$Mpq)1AoV!'8&8oiO;BF^Q/qDf(ejco$1D&\:=N?/+,4:8indg$^H0;`[ZQ&e[$]]hA5^OX`H_QIXGBo/_V+ek(G)S/(ddA`Z:`g-JkQJ& -Bs(Ufo@WEa]dY-WL%gA.8'CkpL)22:LOCgi3fD[e5acLS_JZ%)Z*0C\grb -i1*k.drT>Na3I-UEDc*>DEkjA'?oD?.Bpmnk%E9Z[=&MHU^!Z7\=jt9`=Qp`=N)N$Sdu"EFLF ->>+o-BG7F"^I[<\eC&=B[?'h[4.[r!K_Fg\'9/opIZ?DeYlT.$\iDdFA`LCI'RVoTXL"lBnW^ -C+B>BY/.#kp?obJeL]k'D*R;Nk)+VC]]+ZM_J7<;V*HeoFHuDKJ!Pji]<;aj_cB\^#R5IG^6P -'f]d*E2pXWg1i'RH,Wp/_;C-^]Ut_(=1ks,4J]']lmd0u[N;?`ns.W9:9;1.Xh/u?343q#LQi -ON331`OfijnJer=i^]C)nUS2sEk;7N3T0f[AbiEQVd[.^:&&k`K=a`ldV3=I^p;W] -)R!6Rd6+'c\s9EE;D_PL:IHHA$6'o>]Ln-C(pb0?O!GW='AY'_R58N*%-Dl`2O2R4*rEqk)0j-FBn)7"7o_?li,OV" -:Y8:*>\H%3-nB175T9oO,(_5VOIV*)WnmpUFG%O[QBht0"VFI_V$mKb2O`VFr5:S]kYR-?!iP=+Y8dgFe,'"ZIcN;C4OX-b,S>1 -NB7c>ZKhQYjN0:L*-N4.3:9I0hmI361VXUX,J(=2L0L3CXft0<`ETt"6d##%j0`6_%=A_p)h(Woe/jh&:+O[ufpN4aDbE1k#)&i_iJ''`RH$3Y:ZI5ILS?0(G(+1Ua8d-Rm/+(E_r=rAI-on`J_TEZ@a4?8OXB;`:`JPB\.oou`FRB':[_+8n]M1A.N,.hOD0aI=]FE]FFG.?bS+qh=h?H!*b@fNjX5R$K=K65.o'/ph>CBp -!G<>Z][5]%XC%&-\;gmW)X5(`0=3"l6b_^E5a(oZM$Idkb7\!YiSQM2C1!O(X`dNpIGb6-S9R -AY"C>n`Opq>P/?'i#dNbpj4h;te'))fQ:5OQOV?%_2+Ed_67dEC8e- -\PFg_MfG-(U0ag^Z[X3'eMhs'tII6S6 ->h?J8fQX;n'gZ>[Ll];$i/P^-hbIY[7FSnL4has-C6([]0)u=5O/T6Pt[\H&nMj#a])4.fu^@ -]UXjgA=L#&u\q>)M#(^8UT\#jYZ1H!aNr.or`RZ!t\0'e@u;%r&h0IK~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 590 574 -%%EOF - -%%EndDocument - @endspecial 396 3967 a - currentpoint currentpoint translate 1 0.4 div 1 0.4 div scale neg -exch neg exch translate - 396 3967 a Black 3695 5692 a -Fi(3)p Black eop -%%Page: 4 13 -4 12 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fj(Figur)n(e)i(2-4.)e -(The)i(Gimp-Print)f(Graphical)g(User)g(Interface)h(2)f(\(GUI\))396 -2612 y - currentpoint currentpoint translate 0.4 0.4 scale neg exch neg exch -translate - 396 2612 a @beginspecial 0 @llx 0 @lly 590 @urx -574 @ury 5900 @rwi @setspecial -%%BeginDocument: figures/gimp-print-gui-1.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-gui-1.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 590 574 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 590 574 -userdict begin -%%BeginData: -DisplayImage -0 0 -591 575 -12.000000 -591 575 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPu4)Z?8[OrK_dcHH6G#pE!6qW3(o,#C`)Z'S)*M`YO51kD<5\$^^4o[c&>+(!n9Egu$\( -d>!"\-_U.AN'_3+k_K6_Q3:?J.=t:ff9er+\77ssO8UTSLo'pG5MA>H^>V[-)#(sa" -0Gk3&K>H1Ec4T$^pO_p;*7Z8JHTa@Jl'jgsr3B*<':h=FI3)[i04-Pbq>3AGjj?ZH$OJ:kQ^@ -reAM4hrVis(I4;j\XO[lrXju_&VEHF86,qej^m#+W2!D]XVjo2Qp_C,,$5/0?B9W+H.M$At5i -5D.M>*_[qp3)0pLE>OEDn)?=pa1cEndqLc8d2lQRrc7l2b?)WSOA67 -'U"ue\_@b&$'C2)":J%I\4YL5NbQ>'I6KghN]A\92fc[9ta_dq7&@IujL/&re\b'mtG&,hEqk -hgYO!:-0fi.!(BtLcX.aUb_O5'Z3MZ!MAE`lpEIXFjok(ZTas8DSG`ZCeB.^lQl3pe#sF;"4u -07kI3H-o:V9X=!R4l$.*cmDeFjldtU6=_&bR:ll#r)VK->G*nekmep;>PF!=ZtIn;8JL%R$Ba -krI^"aZhjR=eku8MZP\`/!AK@g>Id\19/b:`ufLU9t_0"BeC3?G5-7(_7[AQ&HrOmC?3]a)qR -%-TW\SOd6>,tDXt^'c>Fj_7.FQ!Um"oH^Xd7lIUP;)'b0D,?!gi -A9;aYYSk?!i"A)DRJS`r<1S`ce+Ra4KiA!VNY-MRneYQ -"Oh)2fE[rSJo&,B>3-,r^N#_NbdS^^:4'ueUf1\/k"D-Ero1a8"hVF.?Tap=:.G>^e"6)/F?1 -0kSb$Y##(r'?olhgl-pJBV]%7[g4JQg"/]"$0V)soFD;2\;[o*hD8C=o6%Me -*_%*I-cpm)6YZQC&;=j&9_/u]neoYZ>=l,EOr>q[E*:R4KFK.Wp:2,[@l5V1jLrs9mat3i@;o -U2I5CR0j@?9&;ll?=u:,SusBlf;ug&TrNCBL;/asW<9IOWB-+cSa1J>3@uWl-2J7nT3kYYQTMrPlAEbB)WIT@gfsJ2o';\^T"\bg4XR5B>Eh"](WGi4?9;2U_^iXQSSGr^C($n;%@Bn-_/u[Xe#=pd:,QE?[0>$Y##(r'?olhgl-pJBV]%7[g4JQg"/]"$0V -)soFD;2\;[o*hD8C=o!Rn#"QqfMH3jf.?WMCjA95FeR3<;qXmpPnO]+76B-Zb`B%V"TK9>O[hQmIM+MooE+2Kg_S54:Cg(Fu''? -#m8Yc&0>FjYL*3Fm'3n7V6F@%l;1Hq(=N+Hpm"a]cQ&8&t)Wl';LUtM"&8XSUK\X?433dOGrd -rWBtUsh!3r#K,DrlZtkX&s!&@Qg:IQQ.09:,U[jmY#s[g!k[M3K[:kZAoMjV]+o=A-[KSfi4i -4*PI;2U_^iXT1*?;[L3@iI+m.UY6uI=S -+19&kJBDWG!BRmSLQ&:8Ye#MmtDc_Y,OiR"'t`\c&QbU?oh:aU6A.*`):5s.jYSE`/@`p$]@% -,nu-/n>@uWHgo&SLcN6e<$9$812ITj.;nK8_PI_0Eq7R.456#=:!rUm%"7p)S=_@k[e6dde;]1m7TD/gs?5CD/[N@l"%/mniDC<)09WWKfkB -Kg:1P9*.-HB/[^:,h"[SEJR";Ckd)6_d-V)>nI)br3OYh(3.i#[eJe50p'g1VL7tR2(kChgKW+A.PB9o@/VG,AtXKGB\;"sA&H?e6=<`fT;XT`+gE<0V_#/% -Rn,%c*"Xc@!rXAmb$gH41ne$K3Y`Vbje.JVG'P4&U8u@;Zgo.U),7)r\hn<[j7sd!.\]iEc]9-KdLVY2&E,!DVN9=mq']#dbr"D[dNc]\;DX(fA*=']6GLS] -Vi-Tq:qd/K5!PIFthh.d%"9-,+n.rf?+b# -!EoNL#dQhn53e!o;,I%VdZf`u]jlqp)Q']SP3B9#8>kgmCaeimmUMAGo_]/*qP[Qrl8*Ja_R; -Qb@eg[@B)+m<:IT..>7I#:*>UcLXB\IpQ+FSZ=$(MXP+"q"C!Z!7]VMoDTJMEXTh=N%Sc?m0# -^&?G%>?;0J?;^<0W8q&faNT?us>/[4'Q%`+Y1N,]!?N+o\foJLg8\MI$_,lkZP/e+3.B/3r@@CnO;0K2oZ0\RJgA;J9cPG&u50.L9 -aV.MQm9XqDj#b'&lTa;BcKC%IO?1u=&Z$52QI4mFk"8%s$HunFn:)=ZHVhR_E_kNjeR^"d0HC ->e@Rhql`6PI-(\X>7A)h3LNSun^(S)XL,@VpAA^3Eh:Of;HO'Z;JU;*MT9Ft(>(*o-9+4aB+1ae5VO=S0&Qq> -C43])U0JqS_s]E`S^do!X%kK`K,BLjM+Uf4!m00&2$rVd,m$0W(F?1#3[f3Oe36q[#kGPJ6K# -NfX?4OtP04LS1tfW,V=m$8.SJ&EWoXCJ1"Lq@^hdL\@-kGO'j)"fc:2iFf/=kReQ= -K@i4L'"=N'YlX+f[16n''KWhtJ_bNo"5;A:W,gan[;#$NBaG;=o[-">@eD,Ap+cGJ.VJ$Pk:e -o_EC/K]q$]\rY"jO#&;qN4:FpC<31T"[E7Cj"8ki5K#+fDml)5lK1Ln_HJ`,o@Q3]\-2C&'R: -r?9U,4uB9>.aI1](3RtNCA5=",H&^FFa$=BG;>L5UVDA%OrYFN/=d9+k5J-::)Wl`5P-G-MAlP*WWu0^eaff1lV$*-HP&hE,>&V\^^MV'>Go[LWKC< -P5)3S3N5hSIU7kF*@2NU`T`U\G+;7:Yl,I\r0\F"LN7fiqR8ejV?34GBVCE]]S9)VmYoF1aO` -XjuIXs3N?Q,'.oBK'I*KiDE^&6(dZnjm9Ig^G9IbCS.7StbGT*-:),^J7`$]M.M%5]Ur"dM4oUQBU=aLP0f6f[m@eZ?--9@Y>_)3*q&ejO75okoVp -E5:j<'ohZFu1Gb`/OB1U-RNX0bJ!XI -4Q0ad`s@5/"M2a)4s=j5nlF:Qcjt>B>n$F8C>p`TO$D>'gK5jn)$@_3Md@,T?(!DV>82ZE39oVPTi1LN?sTRSRoZa&o]>;JCbL@O2b'=N3K<7WtFddICKA39fK`q6s&QfR#5CYm7gP+^P -YL9UL?pBY"?>#s(-\8LS@NEVb-/FVUT;S==f0>_RWO7@ko?pi6P]#"U`kInd>2-)X,T.3b+S0 -*t7]@ELk\nYGD)N>^5#UHguddl&ZM'VZ1=#^V\=MeJY[7LD@QC.&,NSRMI:bCDeLX$hkY_aK1u(Y;*/[B3'rrQ(mDl>?Qg9"tR89u-7X/3E\H@P:F_VI:WM\ --2YF&G?%DU3q/p-BK)B4=q8i]hQ`)_q"G="KAcL*aLDc'"PnUbm2/"IsL:-C8oH[_W[BWST`W -AS)3CQ),`OJ3j*ehq^YCbuMKhjP?G98`%oY/8Q;rg39;SH83KgXT:`\,sq!*CR>K*(i(Jqt^` -=(N;>N!bHqi8)2cLM,3r:/ki?Qm^&0]l*>Dra;,aC[`D==Ff4d)*R:qn-W[iSaS,tIU?#:CQ5 -o9%TM:hoqSe,L46b\IYsU<,`$3dXi5d9F]$A[-(LGL=fK1<]?%kbP.I&:?LiO7"%5"As-]q]u -l8fq(9HIt^LW;()o=?OIeFNUD%@uK(;Vn5,lVGNe?Ec]J3*Xl`/4KB3)1.UONOXP9%(XSM5]'PB$%s\!siD`C$I+Vob3NEJ?5;3QcYa]C*J&9)PP -?Q84o?2!Ye!,;i$@d@o35l*K+R5Mf^qqr'n$\F@01XSZtkGJ/I?)g#`KIUAO34D-\=jI]]pV^ -i/XSOK)?X5_1#42##YG4)1:$)GDnD81SRn+f8)VWY=COlCU!H1?m_?/TZ1F`V1:%3l&1HT\e> -6'XhtVrkQ-0SP)8"'@8t@/0/T)b3i'20nrpXF'd1je!Xok:Q>)h2d&4\9mGphL51V%hH,kTn> -4[QkuL#nP@Lq=V@O%rL7pF*K1'^8="m:$WS/[9W7IKcKgP3DnCSEfs0Q\W5*D#L0R&)(rb`5j -+5&e(ndI1U&cW=$)OmDqCY4\@Hp-="\&pN?uSPh/U'+b]=e(8iNEd$TV6N.qXNOj+$SP1\-"e -j5I6Qf9ge)jHC>CYI"e,^Sq)Be/MLBG8Z+7[HV9`$mEq:rg:905qu)`XjlL(3lSqMr')]NFhA -KXREcMc/fH%CB\8IO)UUc8$e-D$O<-?f4;*C!%:TbQG%`sOf$p`&]7ld5@0KogBr9&jIa[u!l -cQ=3G^RO&.r:o70iVER'XF5_b0XN(:0SJ;*WiZdf1_ckua4VIC>GYMW?7L?Wo=VQGYu-5hl^- -T\b)%jc3-/RW1'[;/SQq@m>"fK48OQ-n:tsC..Y)ThOA`'hh;I>T_o&)g*o?WUh#6WD+9-N]V -iQ%OrTh?km-IJ@P1TKOT:.2EhtPN50H?g#EtpH&C%o0Jm4Da-[7=^fiI<(TKL.o('p[IRf_[#DmqKLbNO+ -7+Qqq]/^5/LB_::C7LVSc2SA\DG;:n>[(0LW4m5S/N,UcH&sm4Da-[Ds%("dC=Y&+7H14'h]# --aC5rg8EmaOrsJPKr^"/`q&A]FG8sA?949_2MiHF]9c2]NZ36!S(j-F@4[1RI(0'IJ)0MLhVL -DC\=;HuDGG2"IVAZlc@#*ICoTk,6FRV^/g\QuOkjHmfN2==lr;@#:O85H39XP,Jg!kZUHnn)7 -i)uESMEc2PU=tJioQ,55kE$nSkmc@A'DUOGL=7Ga4rcuL@`7-\.AKuR7nkd?TLsG)sO.`F8?f -O'94_ob^1a"$4l@,)=nDQlC^IEETMp]YBSiUa6Qs1\<.C+S`(H.V^j?Vj?R/27WWd1+d2@<^k -aA%>+R'm.3_4,ilij&`glT&lQj0`9mD5W`0@%7N?/$ml"6h:8LNeE6'"P14jNM<5W!U[YuYk; -e#54i:BDP^J<"^)mM%+=kIp@AXV.H7oSd;?\i[AEQB''F*iG%/]%`_/pe9`]M60^?i*IA40]/ -Df(=0'^>QL8j1HCD:#<,TM4#F7,+mVmY5Z:ZfqdW)N]^(/klLtD]Ve -;K)AaWc:,3qCPF;h9p&\J@o6=F9(k]J9sK=\H)$6`+n&QM -KncuV+\s6JPf'G&q2tN@f=h!9%@#HF@D&)gA+J*nGBIHD7]&COl7240\<:NMAXMG3l[!C[?Z' -7K3']'pq+_>m>lEoK:AFkkb@siG5*Q=H/a+1uOp0FqUPf:>u3_UkGX8#NW:Au+Z;T!2orFi'? -7QMQpmZ`d='BZ-3bJfnPM!Rj#G@.i:'4?_X3uZe+BI5u*"m!K8)^tg9M/kU(hAK)&bm-<(q![ -!Oi$JPrd5Q+N$mR2NCPqhFZ.3.qgnbD>JUbU[,SPSnC1LJ5.5XVOH1%l -;".4@qU"e\l1K3:)!cn;K67i6X&BmXKJBu\rA\J^ZH<&*=3a)1.GR)o=I"5_,-Van1f7Gn$TV -@(c2nK/ -?$CZ[)$fnR-]QVD)0LYP#.39`epF7r2+8mW!H`Jebg261GQTs*EMDS*bHn.F*lV$fVR"$d,uj`Thcml]E/u775SMP?sDP&"ll;g3pKJC3bFG)Eh$E4G7rT,_F"lG[ -[Etks7l.fdE)YAN+D0ra.r1cUtbi.2*Bj8FPQtscH9,6Lp?jX8uDr-JTVHBS@eY><$Bjb>iH4 -bM`C\&Tu:.jlu@Kb>iYa5/O56(3+Ls&'A7tmY0g-g8_+K4.6=:$[m5L3=71Q=.9_T;J -4V38TRQo]QmuW`TbJ[D%pr*25o0Uc"<9bAJpu,N/4b!Gqpbh!qp@=6:E`=$[/H/6S3 -ggplAD=W+D=>-5n,9-iGFXIiq'ZT\3]rs]58Z_*FH1a=ZK>R^,L@@t*8hu56X]][>`^iUtHZo -&Yge#CeUpa?n_UG@jVhp#QX>4LaZo9>3ChK@&?HM/J3#tD)`s(9jalGBN4isuicL1M&H$MeJL -E:tJRS5?T.fIC=WgkCueGi2#ipKeP__4\XJ2SQ%Xl>n6QR4-*340]3@3@5sCJ%_oP;jW'j;+D -04.Bmda8.#'M2'#0Nqn(0FFr@%r7X5R6XoN"ocr\e3]IcM:#c">9;b.H)Y]*NFsh,2n>=ZC&( -MJ!KTT;&?'2oHOZFH(<#U$Nq(;kND[qM8+gDM:pPh,Bn0[2;"oc@,"gUpjs7(NC:gqcREst%d -G[_T$!hNj0Vk!bIU=C]=0<%k'5EAo-]jtqp(&-Xs^;bJ/BkjQ>0g?+gq49!$2bCnJm@U7ZT:RTL<)?(juHV9`$mBMWgP<(eJEA:7&4J+(_M(IW_6;M9+fM -I'UMsJ*4`S]j>OCSUHR0XFr0epu@7+oR*k\"P2.u-?_+Vj7;.!%&Qdf$'1/R^]Ja&[ag$-7s; -UiSb)AI)58:9A=]&1PohksO8M(-92iSYTC[_dTuf?M4i)c'7FC.]tS-?k)c=3mchR0feuc-J) -T,VGhhXPueqH=fg&dStI(3ZmLP&#qH)%4JS'Zg"E ->1)6WW62Dhr0-QViF-8#u317'iRdk0\'4]Z9:'\XN+*As28"Eab@k=, -^f`i-/Ug31J$"Im/)1,oSS4pSR1[6("JpLCnV8!h<&7S\7r3'RLjXYVYSlii['Oj1Hag]-c^7H4pJkmsI4f]NF>Cac^XJMCR-CuY'3LT_a2S((5?s^n*=$FX=P/eBah^L -T5(t7"O@'>q/Lc1)UGLO/-mj).0HBdjQajDOSI$=GrM@bX@/EGANUiV3HKV%8a;r;/ac!rW0> -,X2qd9C%TDolX^\RU'r8[hS^]2WprqjJ04*8F@r5V$V,/[HjK^#kE'3J3.5/I.kDWo-=<:"md -.^;3ja/n(WpCp@6LZG\?L@HC0Z+dQ&M4%d")='fq,q4IsXqtsO4&WOta7;kZb-=^/BaRn(?G4 -t(d@52:UuV8'"WOtug%f;BLoDfHb]Tg?5)?&]dch=q-9!::j/>%Rs0hBO5SmOEk$O6m8hegKO -bo6gZnMW+GUi>bP5$eh:c]$if_`3S^>,D*NUGbA`F56I`K[cON*!7D]'&7O2n]gg7MG,\#O#f -ZL4UTF&GS\3@J[Y_=Y!QO?LUYP"TRq`+Q7\R.)&Z[OHa*:b/+N7%Z -_$dH9)8r46(96R:B3QK=r8%"iD`J-g1MHaCAu!30\8KQU5Y-g7DF4jS1M3jlt;U1=F2kFk8dg -n45TkYRE[Z:7:NLWBf)M:I1nA_ftnbo'`6Z0:]9/dM!j&eZLmi:E;\I2+M3aI!f>flH6/`/oqI*me." -j"-e_,!WM'5`hh&/SL5J4Qk/Y;J$?l))uJK4dLu)^PaLVhHuTb+X;"3U(M,>/?3<6]r`M'esD -:VgC3uHJF6LV#^aV-'2Q'UH:Z[-Ea,&@nuZ.e9`utKC-Dp8"_5TB,@8;i!/OM,9I,T/s]RpXm -X]ur]U@R7.utdK3'8YZFAWCo&a_ZjoNggoH9kg3'[1k,uq3V#"^0i`i3*BO2R9IEt\SNX$*N- -#-LV1jM%Kl-Blr9#jK8Vj%+'%+\&;XZo1+>SA,pJ5LI/MLi1$PV3jk!5BO0:UWgE.N<4!=H_6 -U!F[;L+=aI.):-;`Ad4ABdM4gV0@clC?k=;>*]?$L5@Gq:[2^)D%c6;>g3hMVc$,M$477<9/% -L/Q#(lFR&'qRD5&#j_aKHnB2_+KS:O5m<(?DL%8d%@0JUt$h)!,BDV06rtM%5^/q.2Kj8e(I0>Ql`"P&'cl^**tG2.ZATafH#>r[b,(hh4Vs>4+P4sNjVaqs:bGq&:`( -M8Itk08W&O_2a"]`We'\V0XaW@Q*gC;D.,Ee$?6"_S?IK+#X.C]D#J0]Oo.UE[n&)rd]-=jc& -p5Xb`4lk5!U'$/Tuqk1 -Gd>tQ=M@qUh8,4qYFccQGR1g;M.H$XUnd55?T^AGpHN)IQlgBCT)ek(d5%,9X%VmhPAk(d'Rk -qf"HW6Zl2i;*4JW?Vp=!QND[#;F!0$Jh:%UQ^Y92TGYE]Q-:K_X]-18LGVg.8A8FoKfYfLYCD -jJ&rh)KIZPk$CMDu_dq_7SG6e>Eb!7N]e`KVc6kT.di2Rti*8&JjV2Z*c"7uuX@`.'j6W..)U -s0\W)s:_R*q\f;o=`gUYXhe3+n:GnnrM#QI4!R5R9FpLZh(],!Y;i9/iXkFbI3s'1+hCFV)H.de;S##p@nV -esVqo:'W%])fF#Hb59U.T:X[sj"e!!@;iF%I\4N3hFQp_F+G*s%&,#e@X:r^i?I"jfFPEJj"1 -u5dMR8Pj3Le@YlPR2V[$J=,=1FEQYP['<,)Qi!Q!cr$YcK&l'LW4ZNLM:hpSW\)0/kPF6o@+B -oBC8GgCto8),KbrMPS%fej2oY(m%'2DNF-/shk#$HOCfmGdOCW-aCjHja-dm1l(h`6"K:5*P_p -%_Vkf2KBao0L7'REI]G94uFEI,H9W`m`]f@*,*Z)iM7mLdDn[Z)<)IFl9JiKYP0%T!\5Wnn2p -0OH#!(N"JBRCEjOc3S55Qt/-%,2aCBk_9oq0C9tO$:V)Ts=J7EXB=Mi7!;#I?AXB,Rr!P.g=5 -gH=Whir2HX@>YJ,VKbPXL_8CD#P[TrXT&TDgRM0YULRD7mRXfD%Pd([=Yn#ts&2B^j`clq)8r -V&&9<(-K\p#-LA/(r_^0uDb\M;)&YtqMZ5]c1SV@/<;3g]Wko?^KF)BkY*&ZV0ob&C=RJM*.E -.+USrEf+``Y+A6QAI)7P3`33i6@ -#f)e,=[`P1/Ta/r2i+O1T%"&L/]2OS@:]leaTG1hLG8:]D=$Z-Kk_"_H-kpD]1Rr*gEcI*VUm -pi2N%q8?Y+FeIi#kRs36TO737cJ0P=p5A7D0>s,Ot%K]F'#!JaVp(jMB(-855=42jj^VNX -?9_=TR2QDX)A%u8K1(:YKMH^i)3"2BA.#(6P`+["7HR2496*Cjjr(3q]*XqOdAYl@'$Moo.-5 -(RGH!5BNJuZ?@, -h\t3#n]!9fn`oJA7U!CQ,g,s'0;LJBBW#(7_GBu*p*LS0iaq?m[^7N;,3:7n4Y[hYW$n"lI@m -c[W)0@22Xn+ld%g2T7I4.;QS)>Wo>ZR>@^RHH?LE24se3e=,oFhC6Qt*\M8LNQD1u^a6%;8XA -Wmt1j.0&P6S0,LUk@W7UrbQ2ElD0FQ]Bdi6<4?cMTUXZ@fEPUsAE,$qGLrf)e,MRW`jX:+/7/ -XCJl?POZL`XZ/3aAY'eg9ef@P1I!`0/C'b:Xi%Ygi&$]X;WG6MA=?F8>c`,gN/18LjG.ZPN,+ -+/quM\,+hBb/FIK*1=;[q^*HPqiH#57+nb\nnm`hm"Y$(*n) -j>7_M";O0U5+'*_;,r6<3AQ#3goWWZY1g;V(bN>Nl"aH\g@g6klB?oeS=ASI6aP=rM`q42?SX>L@mc((tgS#X[<][$gL"Er6)q[`l -,u5X:#6c8Xe!r&!d0Lr`/.EPH-4)S*/sr*"#MbP2+_2$r%C$UOE[40fSI_I"FRKB6Q(m:(m8= -DQg6p:tNLYCSV\mpu1q%CO#jhhgW5PrfL7/areio>M/!0qM3h[5N*u7s%slt`uA97bE/1b)r* -*p=V`BI^##g]$oKf]MW`@2RiQG#q3FQ9M[0Ml)HP6AuO -9k@Lj/r:amX0ctJ'^$h-/W"oO15lf!3<8P0`3a)K"pUjU)?f8W!(Q:%d;D:Er%rq'>+s]'^/f -Yldq_X7>A"%1=a(!FQQoRmrZK:1gVl)]$D\2(@V;F(F?ke8ruef!`/d+$iO':BYI^bMlnpmmQ -MadmQ]L`HjF]E[9ilC@#0K#]*;HpOD)30r'28"_/KiTG't=Jd\43[Um1W=eS*I%+L-50(?JG' -*mC#Xh5H6D9]M,S]$g],>WQTr&a3!N;3:'<>nA7hfBn=/m4D8K8cthlK'Cc+gJpBBrD6Q*Vp+,[0b!6_CDqjp*?+CYMqGYT\R/&,Z -0Wap@K@t-m:(Wa.PQ[>?o83B/=j(K80!R?r(u7A>^,Ya;$"T"3_I[5nI3;P3h6FfraGQt`m38 -]U[sTb]fO2i:X9u)(R#6.miu,A+5j(-A>H@3b]@q46K=:H3c223J0dRE:Xe:p-W%dG`.pMbL_ -SaYZNZeoI[6W\ao2`qMtH,J]t+,^EU*K2Z3LNa4ZrR9B81]K0us5Z/\:Zh]!M9O*5K!Bi0OgI -0&TR4T?/eW1FQ3]\cOERW%g_0Go0TFGnK0da-$\UmsG$scId[X8#]P:RuVWh"/'q.HH/DS08; -qW9uf6-$A4i&"\ORgYT`Sal"JJ0fDS-.WZ)L8rTic/l(^$8XQ_@sq\bFV4,[7k?/VMQ(Gp)m: -7tkn\`CG%n4BXI"Bs=BG#6@c=DrdGOD4@0_i^GO.:%giU_@inR#W-mV=J?cgOSP<*mJb9inu; -L+B":q1"m*bd+P+7]"[Q\^]E;?QX0d@`4rpt7BHf\"'P&)2o4k>Ai>:8hhTLY)uSIl7B6O%'? -HeR"tK?POA-a##[Lp&V?:k9gR5mP+Ila3YPZEcd=ZqkGB&YVm0(+/4HrV)>s&TNJ'&0/nC/>^ -h<@2W_L2n'j,,Uj5];G']p"?k[*]3drnL_QJ/.9Z1H -"OZB"s@k4/]#qFOAgH9UoIs@r!j00\(BN3,t^tWOL=[`J(2>,NaJO -lVLM#u_Uu0rYkjF!>SgM(j^(`g,j[^=-oCDZ*1Y-tTa/[N9-UCfYK='f.@eo,=Yj-G!(3M.Nn -NA-rpI[sCOZ1(lipmKnEDg?"jJOtq$(ar6(k,VDJsH2qR>)TgY4o2&lipl#+o7riq-h>"?gWb -`qH[k<&B;8G9G]oQ.g>T0'MF-AJ:!Vh@c\aHSh;q2UX&PKOu7q:PiCb/<"`!0h#4bo$33WN_, -OOWi]r/?@0l[I$`ELanQB;'47nj#uL=Aq*LU=3BA4-hV#le2cm6`PoG^J0`d^a@nUf<#3Rp_iKiX)],5I>m+`jR-ee_f$ -/IZ:ba$G$jH)8$=nNoOUHMf^U!(M@8,(k@q/SZ-u#3*:8P.:hl&)GI(&fYU]p9;fUV$@Yj?E; -+t^r?KfrTZ`6S;$X4a=AB:LRZ[,NqR"?/BHhF3=pE)RMG3qeC*S.&FaAsE90X\tp!CWg=NL[! -+(-rg?%t-F.Ep(sAnXnMhI7=p.WkJJXe!GP/0X.4(9<\OAG_G8U6biTo\;fF]ak\5fP%\K:mKV*j%Li?fMC\:jj0b_)%+9/\4 -PgjA;dG*N0iQl2oVDK0d;M%]`AdQfb!1k!bb35Q,CjQe>j/fm=#NS[9$m6"bsOG//,JI#k9e9 -;_lbEL`Rkhs>Q8fCuPC)"qeh9"`Mp;1/d6jai$5lh/8a[XrE>IV),1cuOI4#-0)")#.X$69>k -_#P^Q;qk,`l:[@p2OO3TM[:lHF:8mNd+,7k%DMZKp"[;h?=.iiYZ*_'nmt^,pF<=>e9ngJMVU -IiXh!V!:SWF-H^u`@crb[OL/q&-DnE<$eHeTJAB.bQ[DqkRdRWR^18gdTR@EiSk$QG7cZ[8E` -SCg3&)eFOTN)jCfF"b=)^`MbcO]jrW$<4o3<-I!iE*u(o]lhf/nbcI6Ms=lM!Lp(8 -$3Hq0B0q#IkA;U_@KN^s]hiLCsXV5WV%oY.,:(VU>d7d)u]:(c"H -goDpX\0KjdSl5Yg>&u0MiRHk+AIg[81&o-M#j[(S3h7%'q@hd*O9g0?#r)[0l,$7/qS#TJ%k`88*.!N*q\STm8&2GpY!LmcmGTP@OKaI:`& -?_]!n=oI/pqeaE6=Q#:1If(7N=L>9&9KHO!H01c?HdFD8F^Qqt9oLlV(5csOS -o#aS3)+GbW+kCGJ+:FEtqs2/+Y,ZFF>#Uo8>"Hn'!87quaFc"Q0r3nZ;l]9 -6f?nG@lbf&!4W`Uj:PMPhKZdfAk,;o"@4@SQPVMM?d]q4o+BBN(@i">IKD:[kGm+ed22gPm"h -e9O+o6/U]uYdWA'lXKaEi;49"o1R_)/<'5Y)h#Q!^J)DuKu<#gHN9DD4@*2*-6;K+EB((?W -n'1h@J3&2:?'m7f"V.=EX^Fm*K2%'ZTkU8t5#WumkI0`D.:;XiXlII))QFTMlt?(AosqX*$7+ -*nk_2i`J4T`V?pS7DC11ao'^ahIrnl4sL:C?*+*%k+7AK,Z(8ruI'L/kP^;3aH0)!V-SD^&4L/*USO6s<,6Wu>lBg+%0&!`i(tj8V2A.`Zfpnm -%mq3KR%M2a)D_BZ1s6WB17]B$th6hLBn.lZL*Dk7jcAV'!?o[<0!-pC="JgYP#RDC]/,aP -u)0)rP`ng.e:q],G@TRcS/5!6ukE*?"$r>oR056jgZ[X5TATsFi(iSl\"n'109#^X^/-gH]=^ -MO1m_352P`=HYVbPq/TNp:#"(SD'Iq`4ER*INHW'0(1(GN@D0j#:WT7)A]"="((66@S$I&p8J -[-8(86F?:-2pb'Dj*lS#c2o3oKNP&#d4./<]Da\GV?K]Z^kp&He:KXTR8':Q[RP".Rrb!qQh> -rW(5ghcb"ML$!n9Y,^IlD]H*tOpfBr,gIhKhFD,"j"+q&\b\T"q4irH"X]q/:g>kIogIZ9L@;!98BD0CMZU*fTDao^NRYUa -TOmI_>)ZVHQT6Wpf;?gt<:.8LGD?5[-f7Cfl3/`oL7SP,_`\o,OjO"Vc!TIpCU,e=4;k(Q0)! -*=Pm1^n*@mK3dDfU1-n*7q_>J_0jO?(Q@:)I9bP7%uC+oZke.c%dfqDVaVVp=el1BD/[O"3XM -\43]*WGG'.,i&uY?9rmtNVYJ:&QoQp-D9+I+^rei6ZO)!7qHrk*D\U%ClgrlsgYhP@'Vc.;?[ -k*O*Qqi:HgtX@g$dVl*sfhE,#8AF50)8;,r*4e/8W]t!G]@61ed6g98&/.- -0,riNLti]mAfFF>o.(Q5;jK#gu)YuQ6_S#\CuZBF94Vs+P)9bo*JE\'oY[E$dm10&pBq^A!`? -n*'^BBT(39;_lbZ#kjKWk$7/rp/P+^QEW4V"IJLQ0i8a"\7a4[[g?k!?/+>V?-Q?+c?nX\k#b -A9'YlM5(Z@S@1G[EkZ,3ESj'Ab:HMBj%+@BdF2]'8k_\Q_U"\?9VGhguQ;7&X@qQR)\G^@gKN --N!gCG\9:\n,gBV=-a'Ga2^JZ<"Zo&$4t>2)7*odInULoN#7]d6@Mp1PkFCgQYMMNfC7If*g&uJTS1n8*mNl@71d)\FQ9:( -6VP`[AtrY2d036m"F1B-D!Q,IC5bp:DF:\j]5acp:n;VRbsh@c\aHShN3\i72]8fV2)8m(*%G -NE::BC_tnC\fgqZ-9pnT0or1DBJa=M>_O#h_aQJ[i`S'C!OZ=<.@fig>3I>;gU@fm,/aoU;=t -U>K814A`DdH7R>nl9h\Zi>e>,*>".&r_5&ic_T]m8$.EBDWAn)7IUXgDjP*b`n^6UCVdm]@:O --/$VGl>:PU\2\7&HGa!lETLCc8gL?\[+nQ]$hA(+7c8cBLQCC7/l&+XVJ8X_pA+[XX7al,fcm -Gj5L&NpN"<0I`?uK-eNS60JHcBUcQ5&qtJkEK'!gbV8Si*MjB;;MS.q@1n,:_8(0F92Q<`WKT -)7l4im8NEmoE]ZM^h(DX-TrVWIb@`kI#aE0830?OPHaJZEY9'0f7<=!6hOXm`.SB6:E9A, -Wob-G($"t1(!!fqrI`<52'ZW8R0CUMjTElu%$?uiY(_&Qr\gd8g8WcqkcIs^ -GknLP=,tt4,1tbuTdZpPl;HaH+XsK9q(t4O62\G02<,A'm(c\V'7k8*e:4FBj5]-Q6nMh+Y%! -3KHMiaH.h[IIBd(qT7^=9G`4XP;`:15j?kZZJ-esdTK7GQQ:0qD9S*g_bYKYjN/Ps%FnI"^!ra*Z7*2(c*ar<66KA>b/Pg+X\!NWPF]P(ni^<.pOS!/8[987)aJ,7.3Ru]M[/l1 -BAJZl,I5O9cq+>KT*$U4-:#u_Bg['e'K$ -_@kI$#%7(o;ioj\(N'L.08ZD8kgNV'h@6mhQEPfjHr5_6HR&"8V -+HOVBME8>K[[333^ns2..4]0`,!"feAG@MC++'B%r2amH;tH-`'Y:U!pK!fU_U'^m06lnt53> -UQaG#eF'p.B=k>LYA(:N,`A-aMLmu^:N3gIA%!V+a4cuP[.?!ZFZOH8Va[\MSNA6"9!F$O,bM -6aOZ<%$_]a+,X'J"?UT_rU]mJuhd[/\$C-InZTp*4D7+.OFp$GRc]f]IZI8O*4-]u-"AMjNk' -OJpt24XTj$=r$$m&7"61-26_3W_?*q$A#c2G0k^Dp'%[AUES'KNL" -#^(<,sP9u")/JN?%W^8(14qQ3-7AID8>1RXZCdY+0a8#upSW4I)7X!ptnlGNb>YD$BBrSN6h2 -L]dC"`l?,c9%1@"[9,/CV1+jJ.4hIp4/Qh/j6sK(8gboCd7KR)[H6'rSSIXR3oR\" -UUeSbdO`kH?0K\%YUF$,md_H,Qq`n=q:a-4qC'[CQ`3ZX-qg#_EC3!s -n3GdQmD2Gnl-WV!7?=pLL+?l2g]0L`-AH&TIb;,XB7^?k;Z!=Gt:?Ag_oYsS&? -!nJ>h$Q2+3g+>QjA)]US[*6JbHNRq;[moI4"XO_W@Xa'JPM5(f"mbL42C8RG3e/ST%<=?A,gS -%9i2cVj=/q8$BXLOK:Q,`7HLIa(&p&ZBKCtre*1jrn0R&`d]"j-+OfQ_"]#.TSTY:9'@UZNi& -J?WB?,+o!QWm$4ZfN>%6-&A/XT9j?ok\!e#YN>lF=K0lNFP6sLd`MD -ehj/D:,5]Cs6EHn[.0*eCd]*2u0qJ#h24`Q(FNSI)XO&C:dN+3?2.ssOg'9P#:D]bgm1]0_WP*mSTn\Q4f2-eelfs\qkLGsr6*#. -3f,03Mh8i>B=5J(O;r)6V52u'Rg3Ae6feK$uU8?\FW3qH0Jm(4s2\EJ -?Z-,T46q-P!kjrDu;jP((\IG+P(EmOZeXdf1BdJeb.P>c)-6@H6r,qGi=<]gBe#>@QN%I?Zb!n -31Dni@kjNhYTGo_*TCqL(sa2Q$1H7(_0?7tkmN.6BSc#gi%3)[["0ArqC7d^XVfe;[;0BcP=Y_D6 -X*e5a,eZ=?#%q)q7&TDk8i:7b'4+=dV5,58d,O??u3jGolQphX?/-TU=MUVZTI]uNj0&GhheU -*0V'%B"Oi446SP&J3s=#hYsU49(cqlLM6TE%SJXEke*5&qA#=V=%``\fU@GdBM@7=e2$@ALI; -/I->.Y8XXuOC"M`[W]YDhY",GrqmEWe+g%);.^:6*R\[p(olSafZ]s-+HeM4N!b-ZdB(<)4lP -DhTuV[F5f^;JGjO.3gmaA6R#=.200/&G_m3?,%lLO\$]j7'GU(=)b(HE"GOiZ4,eL5>_gsj1rO/e^D5M`?.'5:U]=cAUZWItR+Y!^3V>Y2TVLW]n6Bm -O0U/TXdD;3_Y,3d(DlR^kR<>Tdc*(UfORI['jBjS;dGaFcMIC?^cFmJ%Mr#oh#-3mt.os*q.kH;%Gh5Qq8U,o -T\$:_POl!;T#kLa#[/s^gHo%=_>*G:f>f+`PGcfJJ.R+I=PVe,DhZXX>hMJK@Nh'9]'d:!3LQ -E04KIM8!s#.q0uMt2I,ZFg#o*4]'sB@lsD=P_Yqo]"tY3b=b`_2d_)Wf)%CQ]IY341ie9`!TL -L<:o23=uqN%I\`1[G)%Yglu[Q6BV[`OjAr^CGR?M!'25=[UMtpTMJU",f.>D=:fK8>_/s-I[= -q_tq?>?IFc/b4q0PE>.hp/[QqhLPPN*Y5jmN@)YAgh;d>Oh7@h%'0PHdJ/S[RC7j6Tg!l*UDC -ELbiW0V,Ye0K'WH7/70YUV1]3R&e#E@QHBBPA%0Hdu!=RqD=Ib4Y#;5fu?>mf3'euQqhf_/tG -?Y:=*Q7&pE;HAU_s5Irrh[#\Ru1f_\]G3h-$neUA/)_DF9Y3m%6+EL^pm%qBA?1T;NNVm+?nIq,me`i:>ENDm9f2:Pk_)_X$])o -qaR88VO8C`H^W?9CEaY-<+$(.>ZOfY%pj9M8XJ:t]QJ_7W?KC?M4n,',7(5.hchS7-)4e)!'q -*rrG"8-Y:=\YE3Aol2d>UgHh+8Sbmnm"\?u#2B$f;r(#EJuQ%O3Ndf`#93#^:?Cdm4e/:d -VU!Kd;_/,jpHqr3f!o]7._ft7a#&'NT24T$q_M=KrJFCOSJ9IIgi_/s/Q&1'@l -(lq"7:6-6$1Dkp8b=;bh_-er6$jM@#@-e)Q[T>.h'Fnu_@([m-=unDU$jM@#?n`E+#(sa"0YV -5eg\`A-]bf5U-9CO^Y*I2np7?DR)mJMSWPjF1HdB=;%=%-(cgC,.]a]5NQd>'d[_3,pl'K``m -C'\;30qb6(BqqS=a;a&"6?Re]MDZ6$s2E&8/le\%YimO)D-Y%c6%H*6[H%gq0N3WE`P?f5sWs2goN>7;UcHi/a5h -<""h8(M,X-(Tt?la/J"k\71Ab3!XrG9W)'Mgq230Vk**J@_"&<1jorTpHA<3I>2hV\_#P841K -[#HPZkIS!FDD',iqRfqij>+nC5!O!D7gNGOYiYGQYg$:gkksG/_\s0#",/tRem(!GDgIB -r1mh)V$ZI2,DPduN,q\TdQhFK01LPW!:)h?Id^-W+COg!naIGe?i.T#eU'IF>*2;d9(K\@i@( -7QQf("`*L^9eLpj9r,:MBQ2G0]A;3`s)IGf>"[[@`Q5L:p51ac@2hAbaR2o-GPNG2=`l6P)i+ -^EHE5fViqSRLD[/7HHQ-p;3mi_qWh6W4'K7^7Ys_nnVA>+;m8_NmptK'2;r>nKBl=(`H26S_M -.KD:?GD%>BlOlGc*j2![`@:jqO[P45"0f;E7i@[$R2jWd)g*cXV!Ep(0]?o@-44EU`Z -[i6[gOldttNM7e7)e.Jm,B@l/<>@68dhp6_[[fM98SOD>qDElZfY[%.:>Bb6BNk`j3m/mT3DZ -c#U:>(Q(h*=p]pZ$@n(<>=pqO[P45"U)?E*-+&D\G]26.WU-2p_XY;I4#Qf`(YM?/JT< -c_kGp".o>MQOgjsp;D^Y#CjB[Vd2S>pIhEqj$2Yu*G'R:n=2/HAr^K$m58ir48@iI3cTMm\@i ->rl'K``mC'\;E;!O?8oT,1WkAiQqZaP(U=s*2(^pV$_-er6$jM@#=T8?7-i"\~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 590 574 -%%EOF - -%%EndDocument - @endspecial 396 2612 a - currentpoint currentpoint translate 1 0.4 div 1 0.4 div scale neg -exch neg exch translate - 396 2612 a -2 3006 a Fe(2.2.1.)39 -b(Printer)f(Settings)396 3350 y Fd(2.2.1.1.)e(Printer)396 -3540 y Fm(Click)25 b(on)g(the)f Fg(Pr)q(inter)30 b(Settings)c -Fm(tab)e(near)i(the)e(top)h(right)f(hand)g(corner)i(of)e(the)h(windo)n -(w)f(\(see)p 0 TeXcolorgray 396 3669 a(Figure)h(2-3)p -Black(\).)g(Then,)g(click)f(on)h(the)f(do)n(wnw)o(ard)g(f)o(acing)h -(arro)n(w)g(to)f(the)h(right)f(of)h(the)g Fg(Pr)q(inter)396 -3799 y Fm(combo)f(box)h(to)f(see)h(a)g(list)f(of)h(the)g(system)e -(printer)i(queues.)f(Select)i(the)e(queue)h(to)g(which)f(you)396 -3928 y(w)o(ould)g(lik)o(e)h(the)f(printed)g(image)h(to)f(be)h(sent.)f -(One)h(may)g(also)f(print)g(the)h(image)f(directly)h(to)f(a)396 -4058 y(\002le)h(by)g(selecting)f Fg(File)p Fm(.)h(In)g(this)f(e)n(v)o -(ent,)g(the)g(user)h(will)f(be)h(prompted)f(for)h(the)g(\002lename)g -(when)396 4187 y(either)g(the)g Fg(Pr)q(int)h Fm(b)n(utton)d(or)i(the)g -Fg(Pr)q(int)k(and)g(Sa)n(v)n(e)f(Settings)e Fm(b)n(utton)e(is)g(click)o -(ed.)396 4367 y(When)h(either)g(the)f Fg(Pr)q(int)29 -b(and)g(Sa)n(v)n(e)g(Settings)c Fm(b)n(utton)f(or)h(the)g -Fg(Sa)n(v)n(e)j(Settings)e Fm(b)n(utton)d(is)396 4496 -y(click)o(ed,)i(the)f(settings)g(are)h(sa)n(v)o(ed)g(in)f(a)h(\002le)g -(called)g Fh(~/.gimp-1.2/printrc)p Fm(.)c(The)k(user)g(is)396 -4626 y(cautioned)g(about)f(hand)g(editing)g(this)g(\002le)h(since)g(it) -f(is)g(generated)i(by)e(Gimp-Print)g(\(although)396 4755 -y(it)h(w)o(as)f(the)h(only)f(w)o(ay)h(that)f(the)h(author)f(found)h -(for)g(remo)o(ving)e(bogus)h(entries)h(created)g(while)396 -4885 y(playing)f(with)g(the)h Fg(Ne)n(w)j(Pr)q(inter)e -Fm(b)n(utton\).)p Black 3695 5692 a Fi(4)p Black eop -%%Page: 5 14 -5 13 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 583 a Fd(2.2.1.2.)36 -b(Setup)e(Printer)396 772 y Fm(Before)26 b(an)o(y)f(useful)f(printing)f -(can)j(occur)l(,)f(the)f(user)h(needs)g(to)f(associate)h(the)g(named)f -(printer)396 902 y(with)g(the)g(actual)g(mak)o(e)h(and)f(model)f(of)i -(the)f(printer)-5 b(.)23 b(Click)i(the)f Fg(Setup)k(Pr)q(inter)f -Fm(b)n(utton)c(in)h(the)396 1031 y Fg(Pr)q(inter)j Fm(section)d(of)h -(the)g(windo)n(w)e(\(the)i(upper)g(right,)f(and)h(just)e(belo)n(w)h -(the)h(Printer)g(display)396 1161 y(box\).)g(When)g(this)e(is)i(done,)f -(the)h(follo)n(wing)e(windo)n(w)g(appears:)396 1450 y -Fj(Figur)n(e)j(2-5.)e(The)i(Setup)h(Printer)e(W)n(indo)o(w)396 -2550 y - currentpoint currentpoint translate 0.6 0.6 scale neg exch neg exch -translate - 396 2550 a @beginspecial 0 @llx 0 @lly 293 @urx -196 @ury 2930 @rwi @setspecial -%%BeginDocument: figures/gimp-print-setup.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-setup.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 293 196 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 293 196 -userdict begin -%%BeginData: -DisplayImage -0 0 -294 197 -12.000000 -294 197 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPU%@X%7%#0uC?d_-/STF/)nrjWlTLcl\gYHV0VWKa(Uu3k`a^d/p9Vr^kVUXLSs5U\X&k -j^$;.^##S!Y$t[<-<`-^;H;^Ii5[9He -_MT/aVBedq91&D'fW[1f,t8':$[r+Ar:BeO)C'eG?RW@8Pjmdb*[U:?"spQZ:]_MSO>"_i'*t -[J.A_=3JY86j.`P7KY;I/VMEj`^dE5`d$!.XZ@Yl'hUZCEkn!6NK;Id24PiSa,&r;Ok7?GNlT -S2/*D+a'8#>-6DPu<3-O^T^7]G/Y1=aMT7/F:nHN1V9F3-)PtXD0Cs\@mJhPg64SlTJ'b[jNt -.l@4^ZmnfT=mndVJ1a=:M)'u%gPeMat+T4t*-m1AY5,^u.\tIfmPW>2.9g0==7\s>hdR9>,qN -lFA"nG!aNg#fOqNh7aGr.J^V-MI$mQ$En2J_(k9&aLgM5?/@HMpKgdYN0?SD^pJJPr9BV-te^ -e\@=ibp_tU1HKHJ;DV59%V\C)r?9EV8O5hf-lJkbTJT4>;YBg]!I@Mh-=\Tngq[`'&uG.FjfR -H7PSfZ/a"MjDs3_KOK_(Q&04DM5/#O)OkXLE\0Zo-h%#E^pW>t/0idk6(WS9C`Xe(^c8m=G+L -\mG#VPM\U1b>JsqNjf'g%_DiP_]rEmqmM:DACGaG#.66\*RIR/1F7j^+FFB^O"uqTj_d\I/<`$o@$ -C_eUaRnjD3W!<%8%gk^V>#qn8@JLr6c>Sc5ik&35G"a^E9;W&>/S@TnL2*-oKT\-1C+'-*g -`O65ad10,[;V6Rg8Q%Krg@]S].U"f2J)M=4S>XB#j-M:XH(L;aRYh3_)2C>>@/-2B!dKOQ1t* -Mp#F;bC+T:a-dUOqQ+!UJgZ..9*4Np/9UHfW0#,nM?tDKY3/hUqLjbV)'UjX0$!0e/ctrPkma -FTqpLKF@#qi;)1a5kmis-`\1mM`XPUu]$PNrOr1JZF=_8gG5:nZ5.I8Cdbf)1c8^BXj-SERY+ -c8i53HJ@s.#;0j-NlMAga[IP28!9BV\HHRu^o;6cid5K'+e,8l[*W`d(2,jl;[-;nOt>!Hb#W -s7&apM,?4g]CXMCc:DaKddu/hH'L0O@[%pT:f8@L"Eq79&>a10?_[PoES>t`/=QPdr@hrX30V -J6:B.1jG=jQ_]'!gS6,fbq[4#:j>+/9&L8Eg^8/Vq!&hX.]/. -0WHrPS!coND@T8;P8[abnQCgbcI'*M^\,.DqbR@V[k8sePH-.0j-1`0LelB-.rg>k-Rf'CB3i4t -"5C^m/kiarGlW5,M_FCoJ70J@#*`.$D[=-[(Aa8q\4.nnF8.M/aWq0R;("'uCaKr*1Ye3=-1Q -1^fJBXM2(n&f`]^TZfX3I2-CGj>R8BbPBhe&-PX=4qnhpUOY:&#VDco]f%,3NE-'"lOQ?In2- -(fgp'_>`gmHu/jjFO8+P[_P(?!\-DMC;J2#$\I$r1trGj2-F4(R!49?K5/]hO)CgA?OR"Z6,n -VnnmiqjR7nrka^d/p9QedTr\ -928Ig2B0g9GHLS^Sn,6eeU6P\r:pm93-LD&T5`)5Rr`V%VUL;R8h7,a@"$eu$s>S=nB]YaX9D' -%YbT[2c0onki:qf`eo8[`Vf.fSePnd?_?)p3=$S2 -Q8>iQlh)I8eo:gAS1D:hjcJ -R8R8Fop;Pa1.iiJ8gV%l,obEJqGR7smO'D\~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 293 196 -%%EOF - -%%EndDocument - @endspecial 396 2550 a - currentpoint currentpoint translate 1 0.6 div 1 0.6 div scale neg -exch neg exch translate - 396 2550 a 408 x Fm(Scroll)g(through)f(the)h -(Printer)g(Model)f(section)g(of)h(the)f(windo)n(w)g(until)f(you)i -(\002nd)g(a)g(printer)396 3088 y(which)g(matches)f(yours.)g(If)h(you)g -(cannot)f(\002nd)h(the)g(precise)g(model,)f(pick)g(something)f(close) -396 3217 y(and)i(hope)g(for)g(the)f(best.)h(There)g(are)g(selections)f -(for)h(a)g(wide)g(array)h(of)e(Postscript,)g(inkjet,)g(and)396 -3347 y(laser)h(printers.)f(After)i(you)e(ha)n(v)o(e)g(selected)h(a)g -(printer)l(,)g(you)f(will)g(see)h(the)g(printer)f(command)396 -3476 y(displayed.)396 3656 y(The)h(Gimp-Print)f(softw)o(are)h(does)f -(all)h(of)g(the)f(necessary)i(con)l(v)o(ersion)d(of)i(the)g(image)f(to) -g(be)396 3785 y(printed)g(into)g(the)h(language)g(of)f(your)h(printer) --5 b(.)24 b(It)h(is)f(unnecessary)h(and)g(undesirable)f(for)h(an)o(y) -396 3915 y(other)g(sofw)o(are)g(to)g(manipulate)e(this)h(data.)h -(\(This)f(is)g(why)g(the)h(command)f(contains)g(the)g("-l")396 -4044 y(switch)g(or)h(the)g("-o)f(ra)o(w")h(switch\).)f(Please)h(use)g -(care)h(if)f(you)f(feel)h(the)g(need)g(to)f(edit)h(this)396 -4174 y(command.)f(Once)h(you)f(are)i(satis\002ed)e(with)h(your)f -(selection,)g(click)h(the)f Fg(OK)h Fm(b)n(utton.)396 -4578 y Fd(2.2.1.3.)36 b(Ne)n(w)f(Printer)396 4767 y Fm(In)25 -b(the)g(pre)n(vious)e(sections,)h(the)h(user)g(selected)f(an)h(e)o -(xisting)e(printer)i(queue)g(and)f(associated)h(a)396 -4897 y(particular)g(type)f(of)h(printer)g(to)f(that)h(queue.)f(F)o(or)h -(most)f(cases,)h(this)f(is)g(probably)g(all)h(that)f(is)396 -5026 y(required.)h(Ho)n(we)n(v)o(er)l(,)f(some)g(situations)f(might)g -(require)i(more)g(detailed)f(control)g(o)o(v)o(er)g(the)396 -5156 y(handling)g(of)h(the)f(printer)h(data.)p Black -3695 5692 a Fi(5)p Black eop -%%Page: 6 15 -6 14 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fm(Click)h(the)g -Fg(Ne)n(w)j(Pr)q(inter)e Fm(b)n(utton)e(to)g(tell)h(the)f(softw)o(are)h -(that)g(you)f(wish)g(to)g(create)i(a)f(ne)n(w)396 708 -y(name.)g(In)g(this)f(case,)h(the)g(ne)n(w)f(name)h(may)f(actually)g -(be)h(an)g(e)o(xisting)e(printer)i(with)f(dif)n(ferent)396 -838 y(settings)g(that)g(you)g(wish)g(to)h(sa)n(v)o(e,)f(or)h(it)f(may)h -(simply)e(be)i(a)g(name)g(associated)f(with)g(a)396 967 -y(particular)h(command)f(for)h(handling)e(the)i(printer)g(data.)f(A)h -(windo)n(w)f(will)g(appear)h(thus:)396 1246 y Fj(Figur)n(e)h(2-6.)e -(The)i(New)f(Printer)h(W)n(indo)o(w)396 1966 y - currentpoint currentpoint translate 1 1 scale neg exch neg exch translate - 396 1966 -a @beginspecial 0 @llx 0 @lly 248 @urx 72 @ury 2480 @rwi -@setspecial -%%BeginDocument: figures/gimp-print-new-printer.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-new-printer.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 248 72 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 248 72 -userdict begin -%%BeginData: -DisplayImage -0 0 -249 73 -12.000000 -249 73 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVQ=$a,(8&-^G(r\mu(@RU'rI*u^i;suRSUlt6g$cPZ-@i0r/R+&]IB-\ISZOMV,C?#RIr%I -%+C%%\7er#,&m<7G_:BTJ1d68QIj0QOM(`\HPCKSJcm;QLg/f`QeH)F^IG\dW5D0'[k*csCe" -/V"A7bl=%O#Q%T:F(Gg37Ka/1-2Q=DnTKFOaJoW_2BB/,J_HW3o]@omWTZ9U$qrg_8/i(KI[J -iKG,s=+'?076fGA`ot8TgL1-J21AaPl[*67_nnQHPbE*BW2X2(5fWAsU\9q#f22C]$KSt8n5Q -R3'49.!6Y(DQIedJ[]aVH4nE5KZ2rTo*Fk^fXQ&UqEe%X@L>^Fjc0VB1c%_UX-`"!.i'$!?%_DksN.=kHhQ1_7Kq2UefA&EMiu3O6YPf1LC8$.g> -G?3drE*F<(l*Y`e6PW^cZQC<"$!&Pb=Ek2AZ$:hmLN@?Dq!)achC'2J?!E6d'C< -9F_NqMbI~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 248 72 -%%EOF - -%%EndDocument - @endspecial 396 1966 a - currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch -neg exch translate - 396 1966 a 229 x Fm(T)-8 b(ype)25 -b(a)g(name)g(into)f(the)g(windo)n(w)g(and)h(click)f Fg(OK)h -Fm(\(or)g Fg(Cancel)h Fm(if)f(you)f(wish)g(not)g(to)h(do)f(this\).)396 -2325 y(Notice)h(that)f(the)h(ne)n(w)f(name)h(no)n(w)f(appears)h(as)g -(the)g(selected)f Fg(Pr)q(inter)p Fm(.)j(As)e(you)f(change)396 -2454 y(settings)g(in)g(the)h(rest)f(of)h(the)g(Gimp-Print)f(GUI,)h(the) -o(y)f(will)g(be)g(associated)h(with)f(this)g(printer)396 -2584 y(name.)h(When)g(the)f(settings)g(are)h(sa)n(v)o(ed,)f(the)o(y)g -(can)i(be)e(reco)o(v)o(ered)h(easily)f(by)h(simply)e(selecting)396 -2713 y(this)h(named)h(printer)f(from)h(the)f(Printer)h(combo)g(box.)396 -2893 y(One)g(e)o(xample)f(where)h(this)f(feature)i(might)d(be)i(used)g -(is)f(as)h(follo)n(ws.)e(The)i(author)f(frequently)396 -3022 y(prints)g(photos)g(on)g(Epson)g(4x6)h(photo)e(paper)-5 -b(.)25 b(Note)g(that)f(this)g(paper)h(is)f(physically)f(lar)n(ger)396 -3152 y(than)i(4x6)f(and)h(it)f(has)h(perforations)f(on)h(all)f(four)h -(sides.)f(The)h(author)f(dislik)o(es)g(printing)f(part)396 -3281 y(of)i(the)g(image)f(on)h(the)f(perforated)i(parts)e(of)h(the)g -(paper)g(which)f(will)g(be)h(remo)o(v)o(ed)f(after)396 -3411 y(printing)g(the)g(photo.)g(By)h(selecting)f(the)h(proper)g -(scaling)f(percentage,)h(printing)f(can)h(be)396 3540 -y(constrained)f(to)h(the)g(4x6)f(part)h(of)g(the)f(paper)h(which)g -(will)f(remain)g(after)i(the)e(perforated)396 3670 y(sections)g(are)i -(remo)o(v)o(ed.)d(The)i(author)f(has)h(sa)n(v)o(ed)f(this)g(setting)g -(using)g(this)g(feature)h(of)g(the)396 3799 y(Gimp-Print)f(softw)o -(are.)396 4204 y Fd(2.2.1.4.)36 b(Media)e(Siz)q(e)396 -4393 y Fm(The)24 b(term)g Fi(media)f Fm(refers)i(to)e(paper)l(,)i(card) -f(stock,)f(en)l(v)o(elopes,)g(or)h(whate)n(v)o(er)f(you)g(ha)n(v)o(e)h -(put)f(into)396 4523 y(your)i(printer)f(onto)g(which)h(something)e -(will)h(be)h(printed.)f(Click)g(the)h(arro)n(w)g(to)f(the)h(right)f(of) -396 4652 y(the)h Fg(Media)k(Siz)o(e)c Fm(box)f(to)h(see)g(a)g(long)f -(list)g(of)h(dif)n(ferent)f(sizes)h(of)g(media.)f(Choose)h(the)f(size) -396 4782 y(that)h(matches)f(the)h(media)f(which)g(you)h(ha)n(v)o(e)f -(loaded)h(into)f(your)g(printer)-5 b(.)24 b(Once)h(you)g(ha)n(v)o(e)396 -4911 y(made)g(your)f(choice,)h(the)g(drop)f(do)n(wn)g(menu)h(will)e -(disappear)l(,)i(and)g(your)f(choice)h(will)f(be)396 -5041 y(sho)n(wn)g(in)g(the)h Fg(Media)k(Siz)o(e)c Fm(box.)f(The)h(a)n -(v)n(ailable)f(paper)h(sizes)g(will)f(v)n(ary)g(depending)g(upon)396 -5170 y(the)h(printer)f(model)g(you)h(ha)n(v)o(e)f(selected.)p -Black 3692 5692 a Fi(6)p Black eop -%%Page: 7 16 -7 15 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fm(Some)h(printers)f -(support)g(arbitrary)h(\(within)f(limits!\))f(paper)i(sizes.)g(These)g -(printers)f(will)g(let)396 708 y(you)h(select)f Fi(Custom)h -Fm(or)g Fi(Roll)f Fm(paper)h(sizes.)f(When)h(you)g(select)f(such)h(a)g -(printer)l(,)f(one)h(or)g(both)396 838 y(of)g(the)g Fg(Dimensions)h -Fm(box)o(es)e(will)g(let)g(you)h(enter)g(your)f(paper)h(size)g(\(in)g -(inches)f(or)396 967 y(centimetres\).)h(The)f(box)o(es)g(will)g(not)g -(let)h(you)f(enter)h(sizes)g(that)f(your)h(printer)f(cannot)h(handle.) -396 1372 y Fd(2.2.1.5.)36 b(Media)e(T)-7 b(ype)396 1561 -y Fm(The)25 b(type)g(of)f(media)h(onto)f(which)g(your)h(image)f(will)g -(be)h(printed)f(should)g(be)h(selected)g(here.)396 1691 -y(Click)g(on)g(the)f(arro)n(w)h(to)f(the)h(right)f(of)h(the)g -Fg(Media)k(T)-12 b(ype)25 b Fm(box)f(to)h(see)g(a)g(long)f(list)g(of)h -(the)396 1820 y(dif)n(ferent)g(types)f(of)h(media)f(onto)g(which)h(you) -f(may)g(print)h(your)f(image.)g(Media)h(types)f(include)396 -1950 y(such)h(things)e(as)i(plain)f(paper)l(,)h(postcards,)f(photo)g -(quality)g(paper)l(,)h(transparencies,)g(and)f(more!)396 -2079 y(Once)h(you)g(ha)n(v)o(e)f(made)h(your)f(choice,)h(the)g(drop)f -(do)n(wn)g(menu)h(will)e(disappear)l(,)i(and)g(your)396 -2209 y(choice)g(will)f(be)h(sho)n(wn)f(in)g(the)h Fg(Media)k(T)-12 -b(ype)25 b Fm(box.)f(The)h(choices)g(a)n(v)n(ailable)f(will)g(v)n(ary) -396 2338 y(depending)g(upon)g(the)h(printer)g(model)e(you)i(ha)n(v)o(e) -f(selected.)396 2743 y Fd(2.2.1.6.)36 b(Media)e(Sour)n(ce)396 -2932 y Fm(The)25 b Fg(Media)k(Source)e Fm(box)d(allo)n(ws)f(the)i(user) -g(to)f(choose)h(the)g(paper)g(source,)g(sometimes)396 -3062 y(called)g Fi(Input)f(Slot)r Fm(,)g(that)g(the)h(paper)g(will)f -(be)h(fed)g(from.)g(Man)o(y)e(printers)i(only)f(ha)n(v)o(e)g(one)396 -3191 y(a)n(v)n(ailable)g(input)f(source)h(\(such)g(as)g(the)g(standard) -g(paper)h(tray\),)f(in)g(which)f(case)i(this)e(entry)h(will)396 -3321 y(be)h(grayed)g(out.)f(If)i(your)e(printer)h(does)f(support)g -(multiple)f(input)h(sources,)g(you)h(may)f(specify)396 -3450 y(the)h(source)g(of)g(your)f(choice)h(here.)g(Some)g(Epson)f -(printers)h(of)n(fer)g(a)g(roll)f(feed)h(option)f(in)396 -3580 y(addition)g(to)g(the)h(standard)f(paper)h(tray)-6 -b(,)25 b(and)f(man)o(y)g(HP)h(LaserJet)g(printers)g(ha)n(v)o(e)f -(multiple)396 3709 y(paper)h(trays.)396 4114 y Fd(2.2.1.7.)36 -b(Ink)e(T)-7 b(ype)396 4303 y Fm(Some)25 b(printers)f(of)n(fer)h(a)h -(choice)e(of)h(dif)n(ferent)g(types)f(of)h(ink)f(or)h(ink)f -(cartridges.)h(Man)o(y)f(Canon)396 4432 y(and)h(Le)o(xmark)f(printers)g -(support)g(v)n(arious)g(combinations)f(of)i(cartridges,)f(such)h(as)g -(black)396 4562 y(only)-6 b(,)24 b(black)g(and)h(color)l(,)g(photo)f -(color)l(,)g(and)h(so)f(forth.)h(Most)f(Epson)g(printers)g(let)g(you)h -(choose)396 4691 y(between)g(three)g(and)g(four)g(color)f(printing)g -(\(three)h(color)g(uses)f(only)g(color)h(ink,)f(while)g(four)396 -4821 y(color)h(uses)f(black)h(ink)f(as)h(well\).)g(Epson)f(printers)g -(that)g(support)g(six)g(color)h(photo)f(printing)396 -4951 y(allo)n(w)g(you)g(to)h(choose)f(\002)n(v)o(e)h(and)g(six)f(color) -g(printing)g(as)h(well.)p Black 3691 5692 a Fi(7)p Black -eop -%%Page: 8 17 -8 16 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 583 a Fd(2.2.1.8.)36 -b(Resolution)396 772 y Fm(Click)25 b(on)g(the)f(arro)n(w)h(to)f(the)h -(right)f(of)h(the)g Fg(Resolution)h Fm(box)f(to)f(see)h(a)g(long)f -(list)g(of)396 902 y(resolutions)f(at)i(which)g(you)f(can)h(print)f -(your)h(image.)f(The)h(list)f(is)g(written)g(with)g(the)h(lo)n(west)396 -1031 y(resolution)f(at)h(the)f(top,)g(with)g(increasing)h(resolution)e -(\(and)i(generally)g(impro)o(v)o(ed)d(printing)396 1161 -y(quality\))i(as)h(you)f(approach)h(the)g(bottom)e(of)i(the)g(list.)e -(Dif)n(ferent)i(printers)f(support)g(dif)n(ferent)396 -1290 y(resolution)g(options,)f(and)i(man)o(y)e(printers)i(support)e -(dif)n(ferent)i(quality)f(choices)g(using)g(the)396 1420 -y(same)h(basic)g(resolution.)e(In)i(this)f(menu)g(are)h(a)h(fe)n(w)e -(terms)h(which)f(may)g(be)h(unf)o(amiliar)f(to)396 1549 -y(you,)h(and)f(the)o(y)g(will)g(no)n(w)g(be)h(e)o(xplained.)396 -1853 y Fn(2.2.1.8.1.)j(DPI)396 2033 y Fm(DPI)e(is)e(an)h(acron)o(ym)f -(which)g(stands)g(for)h Fi(D)p Fm(ots)g Fi(P)p Fm(er)g -Fi(I)5 b Fm(nch.)25 b(This)f(term)g(refers)i(to)e(the)h(number)396 -2162 y(of)g(dots)f(that)g(your)h(printer)g(will)e(print)i(in)f(a)h -(space)g(of)g(one)g(inch)f(\(approximately)g(2.54)g(cm\).)396 -2292 y(This)g(is)h(highly)e(dependent)i(upon)f(the)g(capability)g(of)h -(your)g(printer)-5 b(.)24 b(Resolutions)f(belo)n(w)h(300)396 -2421 y(DPI)i(are)f(used)g(for)g(draft)g(quality)-6 b(.)23 -b(F)o(or)i(general)g(purpose)f(printing,)f(select)i(300)g(-)g(360)f -(DPI.)396 2551 y(Higher)h(quality)e(printing)h(can)h(be)g(achie)n(v)o -(ed)f(by)h(selecting)f(600)g(-)h(720)f(DPI.)i(Settings)e(higher)396 -2680 y(than)h(this)f(are)h(used)g(for)g(the)f(highest)g(possible)g -(quality)f(for)i(printing)f(photographs)f(and)i(other)396 -2810 y(high)f(quality)f(graphics.)h(Experiment)g(with)g(your)g(printer) -g(and)h(these)f(settings)f(with)h(dif)n(ferent)396 2939 -y(types)g(of)h(graphics)g(and)g(photographs)e(to)h(see)i(what)e -(results)g(you)h(can)g(obtain)f(with)g(your)396 3069 -y(printer)-5 b(.)24 b(High)g(resolutions)g(\(lar)n(ge)h(numbers)f(of)h -(dots)f(per)h(inch\))g(require)g(substantial)e(image)396 -3198 y(processing)h(time,)g(and)h(the)g(print)f(\002les)h(can)g(be)g(v) -o(ery)f(lar)n(ge;)h(it')-5 b(s)24 b(not)g(uncommon)f(for)j(a)f(full)396 -3328 y(page,)g(1440x720)f(DPI)h(image)f(to)h(require)g(100)f(MB)h(of)g -(temporary)f(storage!)396 3706 y Fn(2.2.1.8.2.)k(Draft)h(or)e(F)n(ast)h -(Econom)m(y)g(Draft)396 3886 y Fm(When)c(this)g(te)o(xt)f(appears)h(ne) -o(xt)g(to)g(the)g(resolution,)e(it)i(refers)h(to)f(the)g(f)o(act)h -(that)e(the)h(quality)f(will)396 4015 y(be)i(relati)n(v)o(ely)e(lo)n(w) --6 b(,)24 b(b)n(ut)g(suitable)g(for)h(rough)f(drafts.)h(Draft)g -(quality)f(is)g(higher)g(than)h(f)o(ast)396 4145 y(economy)f(draft.)h -(These)g(options)e(will)h(gi)n(v)o(e)g(you)g(the)h(f)o(astest)f -(printing)g(speed.)g(Economy)396 4274 y(Draft)h(uses)g(less)f(ink,)g -(and)h(as)g(a)g(result)f(the)h(image)f(will)g(be)h(pale.)g(These)g -(modes)f(are)396 4404 y(generally)h(not)f(v)o(ery)h(useful)f(for)h -(printing)e(photographs.)396 4782 y Fn(2.2.1.8.3.)28 -b(Unidirectional)396 4962 y Fm(When)d(printing)e(an)i(image,)g(you)f -(ha)n(v)o(e)h(probably)f(noticed)g(the)h(print)f(head)h(inside)f(the)g -(printer)396 5091 y(mo)o(ving)f(back)i(and)g(forth)f(across)h(the)g -(print)f(media.)g(Man)o(y)g(printers)g(are)i(capable)f(of)g(putting)396 -5221 y(ink)f(on)h(the)g(page)g(re)o(gardless)e(of)i(which)g(direction)f -(the)g(print)h(head)g(is)f(mo)o(ving.)f(Ho)n(we)n(v)o(er)l(,)p -Black 3695 5692 a Fi(8)p Black eop -%%Page: 9 18 -9 17 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fm(quality)f(can)h -(sometimes)e(be)i(impro)o(v)o(ed)e(by)i(only)f(putting)f(ink)h(on)h -(the)f(page)h(when)g(the)g(printer)396 708 y(head)g(is)g(mo)o(ving)e -(in)h(one)h(direction.)f(The)h Fg(Unidirectional)i Fm(setting)d -(instructs)f(the)i(softw)o(are)g(to)396 838 y(only)g(place)h(ink)g(on)f -(the)h(page)g(when)g(the)f(print)g(head)h(is)g(mo)o(ving)d(one)j(w)o -(ay)-6 b(.)25 b(When)f(the)h(print)396 967 y(head)g(returns,)g(it)f -(will)g(not)g(place)h(ink)g(on)f(the)h(page.)g(On)f(man)o(y)g -(printers,)g(the)h(print)f(quality)g(is)396 1097 y(better)l(,)h(at)g -(the)f(e)o(xpense)h(of)g(printing)e(speed.)396 1476 y -Fn(2.2.1.8.4.)28 b(High\(est\))h(Quality)396 1655 y Fm(W)l(ith)24 -b(lo)n(wer)h(quality)e(print)h(modes,)g(one)h(may)g(see)g(an)g(ef)n -(fect)g(where)g(the)g(printed)f(image)396 1784 y(looks)g(lik)o(e)g(it)h -(has)f(ro)n(ws)g(of)h(stripes)f(with)g(a)i(small)d(separation)i -(between)g(the)f(stripes.)g(This)396 1914 y(ef)n(fect)h(is)g(called)g -("banding")e(and)i(is)f(undesirable.)g(In)h(the)g Fi(high)f -Fm(and)g Fi(highest)i Fm(quality)e(modes,)396 2043 y(the)g(printer)g -(will)g(mak)o(e)g(more)g(passes)g(o)o(v)o(er)f(the)h(same)g(part)g(of)h -(the)f(page)g(in)g(order)g(to)g(impro)o(v)o(e)396 2173 -y(quality)g(and)h(\(reduce)g(or\))g(eliminate)f(banding.)g(This)g -(requires)h(more)f(temporary)h(disk)f(space)396 2302 -y(and)h(prints)f(more)h(slo)n(wly)-6 b(,)22 b(b)n(ut)i(does)h(not)f -(require)h(signi\002cantly)f(more)g(processing)g(time.)396 -2681 y Fn(2.2.1.8.5.)k(Interlea)o(ve)396 2860 y Fm(Certain)d(Epson)f -(printers)h(\(older)g(models)e(mostly\))h(support)f(a)j(printing)d -(mode)h(called)396 2990 y Fi(Interleave)p Fm(.)h(This)f(mode)g(uses)h -(special)f(softw)o(are)h(within)f(the)g(printer)h(to)f(impro)o(v)o(e)f -(the)i(print)396 3119 y(quality)-6 b(.)23 b(Interlea)n(v)o(e)i(print)f -(modes)g(will)g(usually)g(produce)h(better)f(quality)g(output)g(than) -396 3249 y(non-Interlea)n(v)o(e)h(modes,)f(with)g(only)g(a)h(small)f -(performance)h(penalty)-6 b(.)23 b(If)j(Interlea)n(v)o(e)e(is)h(not)396 -3378 y(listed)f(at)h(your)f(chosen)h(resolution,)e(fear)j(not.)e(In)h -(those)f(cases,)h(the)g(non-Interlea)n(v)o(e)f(print)396 -3508 y(modes)g(of)n(fer)h(similar)f(printing)f(quality)h(impro)o(v)o -(ements.)396 3887 y Fn(2.2.1.8.6.)k(DMT)396 4066 y Fm(DMT)d(is)f(an)h -(acron)o(ym)f(which)g(stands)g(for)h Fi(D)p Fm(ot)g Fi(M)t -Fm(odulation)e Fi(T)8 b Fm(echnology)-6 b(.)23 b(This)h(term)h(refers) -396 4195 y(to)g(a)g(print)f(mode)g(used)h(by)f(certain)h(Canon)g -(printers)g(to)f(impro)o(v)o(e)f(the)i(quality)e(of)i(the)g(printed)396 -4325 y(output.)f(Unfortunately)-6 b(,)23 b(at)i(this)f(time,)g(all)g -(of)h(the)g(a)n(v)n(ailable)f(DMT)g(modes)g(do)h(not)f(w)o(ork)396 -4454 y(correctly)-6 b(.)25 b(The)f(cases)i(which)e(do)h(w)o(ork)f -(correctly)h(will)f(of)n(fer)h(signi\002cantly)f(impro)o(v)o(ed)396 -4584 y(printing)g(quality)-6 b(.)p Black 3695 5692 a -Fi(9)p Black eop -%%Page: 10 19 -10 18 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black -2 601 a Fe(2.2.2.)39 -b(Pre)n(vie)n(w)396 802 y Fm(Notice)25 b(in)f(the)h(upper)g(left)f(of)h -(the)g(windo)n(w)e(is)i(a)g(pre)n(vie)n(w)f(of)g(your)h(image.)f(This)g -(pre)n(vie)n(w)g(is)g(a)396 931 y(representation)h(of)f(where)i(your)e -(picture)h(will)f(print)g(on)g(the)h(selected)g(media,)f(and)396 -1061 y(approximately)g(what)g(it)h(will)f(look)g(lik)o(e.)g(This)g(pre) -n(vie)n(w)g(will)g(be)h(updated)f(as)h(you)f(modify)396 -1190 y(selections)g(in)h(the)f Fg(P)-5 b(osition)p Fm(,)26 -b Fg(Siz)o(e)p Fm(,)f Fg(Media)k(Siz)o(e)p Fm(,)d(and)e -Fg(Output)k(T)-12 b(ype)25 b Fm(portions)f(of)h(the)396 -1320 y(windo)n(w)-6 b(.)23 b(Y)-11 b(ou)25 b(may)f(also)g(select)h(the) -g(image)f(with)g(your)h(mouse)f(and)h(mo)o(v)o(e)e(it)h(manually)g(if) -396 1449 y(you)h(wish.)f(In)h(doing)e(so,)i(you)f(will)g(note)g(that)h -(the)f Fg(P)-5 b(osition)27 b Fm(settings)c(are)j(updated)396 -1579 y(accordingly)-6 b(.)24 b(T)-8 b(ak)o(e)25 b(note)f(of)h(the)g -(arro)n(w)-6 b(,)24 b(which)h(points)e(to)n(w)o(ard)h(the)h(top)f(of)h -(the)g(media,)396 1708 y(where)h(top)e(is)g(the)h(\002rst)g(part)g(of)f -(the)h(media)f(to)h(enter)g(the)g(printer)-5 b(.)396 -1888 y(The)25 b(pre)n(vie)n(w)f(may)g(be)h(mo)o(v)o(ed)e(around)i(the)g -(page)g(as)g(follo)n(ws:)p Black 396 2167 a Fl(\225)p -Black 97 w Fm(Clicking)f(and)h(dragging)f(the)g Fi(left)i -Fm(\(primary\))f(mouse)f(b)n(utton)g(mo)o(v)o(es)f(the)h(image)h -(around)496 2296 y(the)g(page)g(as)f(you)h(w)o(ould)f(e)o(xpect;)g(the) -h(image)f(mo)o(v)o(es)f(with)h(the)h(mouse.)p Black 396 -2476 a Fl(\225)p Black 97 w Fm(Clicking)f(and)h(dragging)f(the)g -Fi(middle)g Fm(mouse)h(b)n(utton)e(mo)o(v)o(es)g(the)i(image)f(around)h -(the)496 2605 y(page)g(in)f(a)g(\002ner)h(f)o(ashion,)f(such)g(that)g -(each)h(pix)o(el)f(of)g(mouse)g(mo)o(v)o(ement)e(mo)o(v)o(es)h(the)h -(image)496 2735 y(by)g(one)h(point)f(\(1/72)g(inch\).)h(This)f(allo)n -(ws)f(v)o(ery)i(\002ne)g(placement)f(of)h(the)g(image)f(on)h(the)496 -2864 y(page.)p Black 396 3043 a Fl(\225)p Black 97 w -Fm(Clicking)f(and)h(dragging)f(the)g Fi(right)i Fm(\(secondary\))f -(mouse)f(b)n(utton)g(mo)o(v)o(es)f(the)h(image)496 3173 -y(around)g(the)h(page)g(much)f(the)h(same)g(as)g(with)f(the)g(left)h(b) -n(utton,)e(b)n(ut)i(the)f(image)h(will)f(only)496 3302 -y(mo)o(v)o(e)f(in)i(units)e(of)i(the)g(image)f(size.)h(Thus,)f(if)h -(the)f(image)h(is)f(one)h(inch)f(wide)h(and)g(tw)o(o)496 -3432 y(inches)f(tall,)g(the)h(image)g(will)e(not)i(mo)o(v)o(e)e(at)i -(all)f(until)g(you)g(ha)n(v)o(e)h(mo)o(v)o(ed)e(the)i(mouse)f(f)o(ar) -496 3561 y(enough)g(so)h(that)f(the)h(image)f(w)o(ould)g(be)h(mo)o(v)o -(ed)e(one)i(inch)f(v)o(ertically)g(and)h(tw)o(o)f(inches)496 -3691 y(horizontally)-6 b(.)23 b(This)h(is)g(handy)h(if)f(you)h(wish)f -(to)g(print)g(multiple)f(images)h(of)h(the)g(same)g(size)496 -3820 y(on)f(one)h(piece)g(of)g(paper)-5 b(.)p Black 396 -4000 a Fl(\225)p Black 97 w Fm(If)25 b(you)f(hold)g(do)n(wn)g(the)h -Fi(shift)g Fm(k)o(e)o(y)g(on)f(the)h(k)o(e)o(yboard)f(when)h(you)f -(click)g(and)h(drag)g(the)496 4129 y(mouse,)f(the)g(image)h(will)f -(only)g(mo)o(v)o(e)f(in)i(the)f(horizontal)g(or)h(v)o(ertical)f -(direction)496 4259 y(\(depending)g(upon)g(which)h(w)o(ay)f(you)h -(\002rst)g(mo)o(v)o(e)e(the)i(mouse\).)f(This)g(allo)n(ws)f(you)i(to) -496 4388 y(constrain)f(motion)f(to)i(the)f(horizontal)g(or)h(v)o -(ertical.)p Black 396 4568 a Fl(\225)p Black 97 w Fm(If)g(you)f(click)h -(another)g(b)n(utton)e(while)h(dragging)h(the)f(mouse,)g(the)h(image)f -(will)496 4697 y(immediately)f(return)i(to)f(the)h(position)e(it)h(w)o -(as)h(in)f(before)i(you)e(click)o(ed)h(the)f(mouse)g(the)h(\002rst)496 -4827 y(time.)f(This)g(allo)n(ws)f(you)i(to)f(not)g(mo)o(v)o(e)g(the)g -(image)h(if)g(you)f(ha)n(v)o(e)g(started)h(mo)o(ving)e(it)h(and)496 -4956 y(ha)n(v)o(e)g(decided)h(that)f(you)h(don')n(t)f(w)o(ant)h(to)f -(mo)o(v)o(e)g(it.)g(The)h(pre)n(vie)n(w)e(will)h(not)h(respond)f(to)g -(the)496 5086 y(mouse)g(until)g(you)g(release)h(all)g(of)g(the)f(mouse) -g(b)n(uttons)g(and)h(click)f(and)h(drag)g(afresh.)p Black -3645 5692 a Fi(10)p Black eop -%%Page: 11 20 -11 19 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black -2 601 a Fe(2.2.3.)39 -b(P)-6 b(osition)396 945 y Fd(2.2.3.1.)36 b(Orientation)396 -1135 y Fm(The)25 b(Orientation)f(menu)g(allo)n(ws)g(the)g(user)h(to)g -(choose)f(the)h(orientation)e(of)i(the)g(paper)-5 b(.)24 -b(The)396 1264 y(menu)h(selections)e(are)j Fg(A)m(uto)p -Fm(,)g Fg(P)-5 b(or)t(tr)o(ait)p Fm(,)26 b Fg(Landscape)p -Fm(,)h Fg(Upside)h(do)o(wn)p Fm(,)e(and)f Fg(Seascape)p -Fm(.)396 1394 y(Click)g(on)g(the)f(rectangular)h(tab)g(to)f(see)h -(these)g(choices)g(and)g(mak)o(e)f(your)h(selection.)f(When)396 -1523 y(you)h(ha)n(v)o(e)f(done)h(so,)f(the)h(pulldo)n(wn)e(menu)h(will) -g(ha)n(v)o(e)g(disappeared,)h(and)g(your)f(choice)h(will)396 -1653 y(appear)-5 b(.)25 b(Also,)f(note)h(that)f(the)h(pre)n(vie)n(w)e -(image)i(will)f(ha)n(v)o(e)g(changed)h(accordingly)-6 -b(.)396 1832 y(When)25 b(set)g(to)f Fg(A)m(uto)p Fm(,)i(the)e(softw)o -(are)h(will)f(mak)o(e)h(an)g(intelligent)e(choice)i(of)g(orientation)e -(based)396 1961 y(on)i(the)f(dimensions)f(of)i(the)g(image)f(to)h(be)g -(printed.)f Fg(P)-5 b(or)t(tr)o(ait)26 b Fm(orients)e(the)g(print)g -(media)h(with)396 2091 y(the)f(longest)g(edge)g(going)g(from)g(top)f -(to)h(bottom,)f(while)h Fg(Landscape)j Fm(orients)c(the)h(paper)h(with) -396 2220 y(the)g(longest)f(edge)h(going)e(from)i(side)f(to)h(side.)f -Fg(Upside)29 b(do)o(wn)c Fm(and)g Fg(Seascape)i Fm(orient)d(the)396 -2350 y(paper)h(the)g(same)g(as)g Fg(P)-5 b(or)t(tr)o(ait)26 -b Fm(and)e Fg(Landscape)k Fm(respecti)n(v)o(ely)-6 b(,)22 -b(with)i(the)h(dif)n(ference)g(being)396 2480 y(that)g(the)f(image)h -(is)f(rotated)h(180)f(de)o(grees.)396 2884 y Fd(2.2.3.2.)36 -b(A)l(utomatic)f(Centering)396 3073 y Fm(There)25 b(are)h(three)f(b)n -(uttons)e(that)i(deal)g(with)f(centering)g(an)h(image.)g(The)f -(leftmost)g(b)n(utton)f(is)i(the)396 3203 y Fg(V)-8 b(er)t(tically)26 -b Fm(b)n(utton,)e(the)g(middle)g(b)n(utton)g(is)g(the)h -Fg(Both)g Fm(b)n(utton,)f(and)h(the)f(rightmost)f(b)n(utton)h(is)396 -3332 y(the)g Fg(Hor)q(iz)o(ontally)h Fm(b)n(utton.)e(Use)h(the)g -Fg(Both)h Fm(b)n(utton)d(to)i(center)g(your)g(image)g(both)f -(horizontally)396 3462 y(and)i(v)o(ertically)-6 b(.)23 -b(This)h(will)g(cause)h(the)g(top)f(and)h(bottom)e(borders)i(to)f(be)h -(equal,)g(and)g(the)f(left)396 3591 y(and)h(right)f(borders)h(to)f(be)h -(equal.)g(If)g(you)f(ha)n(v)o(e)h(placed)g(your)f(image)h(manually)e -(by)i(using)f(the)396 3721 y(mouse)g(b)n(utton,)g(then)g(you)h(may)f -(center)h(the)g(image)f(in)h(the)f(horizontal)g(direction)g(only)g(by) -396 3850 y(clicking)g(on)h(the)f Fg(Hor)q(iz)o(ontally)j -Fm(b)n(utton.)c(Lik)o(e)n(wise,)h(to)g(adjust)g(the)h(image)f(only)g -(in)g(the)396 3980 y(v)o(ertical)g(direction,)g(click)h(on)f(the)h -Fg(V)-8 b(er)t(tically)26 b Fm(b)n(utton.)d(Note)i(that)f(in)g(each)i -(case,)f(the)g(image)f(is)396 4109 y(centered)i(with)e(re)o(gard)g(to)g -(the)h(edges)g(of)g(the)f(media,)h(and)f(without)g(re)o(gard)g(to)h -(the)f(printable)396 4239 y(portion)g(of)h(the)g(media.)f(Man)o(y)g -(printers)g(are)h(incapable)g(of)g(printing)e(to)i(each)g(edge)g(of)g -(the)396 4368 y(media.)g(Some)f(media)h(may)f(ha)n(v)o(e)h(edges)g -(which)f(detach.)h(Consult)f(your)g(printer)396 4498 -y(documentation)f(for)i(more)g(details)f(re)o(garding)g(your)g -(printer')-5 b(s)24 b(capabilities)g(in)g(this)g(re)o(gard.)396 -4902 y Fd(2.2.3.3.)36 b(Man)o(ual)e(Settings)396 5092 -y Fm(Y)-11 b(ou)25 b(will)f(notice)g(that)g(there)h(are)h(six)e(box)o -(es)g(that)g(contain)h(numbers)f(just)f(belo)n(w)h(the)396 -5221 y(Orientation)g(menu)g(and)h(just)f(abo)o(v)o(e)g(the)g(GUI)h(b)n -(uttons)f(related)h(to)f(centering)h(an)g(image.)p Black -3645 5692 a Fi(11)p Black eop -%%Page: 12 21 -12 20 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fm(When)h(you)f(mo)o -(v)o(e)g(the)g(pre)n(vie)n(w)g(image)h(manually)e(with)h(the)h(mouse,)f -(or)h(when)f(you)h(click)f(on)396 708 y(one)h(of)g(the)g(centering)f(b) -n(uttons,)f(the)i(pre)n(vie)n(w)f(image)g(mo)o(v)o(es)f(and)i(these)g -(six)f(box)o(es)g(get)396 838 y(updated.)396 1142 y Fn(2.2.3.3.1.)k -(Left)396 1321 y Fm(The)d(number)f(appearing)h(in)f(the)h -Fg(Left)g Fm(box)g(denotes)f(the)g(number)h(of)g(units)e(\(cm)i(or)g -(inches\))396 1451 y(that)g(the)f(left)h(side)f(of)h(the)g(image)f -(will)g(be)h(printed)f(a)o(w)o(ay)h(from)g(the)f(left)h(edge)g(of)g -(the)f(media.)396 1580 y(Y)-11 b(ou)24 b(may)f(select)h(the)g(units)f -(by)g(clicking)g(the)h Fg(Inch)g Fm(or)g Fg(cm)g Fm(b)n(uttons)e(in)i -(the)f Fg(Units)h Fm(section)f(just)396 1710 y(belo)n(w)h(these)h(GUI)g -(box)o(es.)396 2088 y Fn(2.2.3.3.2.)j(Right)396 2268 -y Fm(The)d(number)f(appearing)h(in)f(the)h Fg(Right)h -Fm(box)e(denotes)g(the)h(number)f(of)h(units)f(\(cm)g(or)h(inches\))396 -2397 y(that)g(the)f(right)g(side)h(of)g(the)f(image)h(will)f(be)h -(printed)f(a)o(w)o(ay)g(from)h(the)g(left)f(edge)h(of)g(the)g(media.) -396 2527 y(Y)-11 b(ou)24 b(may)f(select)h(the)g(units)f(by)g(clicking)g -(the)h Fg(Inch)g Fm(or)g Fg(cm)g Fm(b)n(uttons)e(in)i(the)f -Fg(Units)h Fm(section)f(just)396 2656 y(belo)n(w)h(these)h(GUI)g(box)o -(es.)396 3035 y Fn(2.2.3.3.3.)j(Right)g(Bor)n(der)396 -3214 y Fm(The)d(number)f(appearing)h(in)f(the)h Fg(Right)j(Border)f -Fm(box)e(denotes)f(the)h(number)f(of)h(units)e(\(cm)i(or)396 -3344 y(inches\))g(that)f(the)h(right)f(side)g(of)h(the)g(image)f(will)g -(be)h(printed)f(a)o(w)o(ay)h(from)g(the)f(right)g(edge)h(of)396 -3473 y(the)g(media.)f(Y)-11 b(ou)25 b(may)f(select)h(the)g(units)e(by)i -(clicking)f(the)g Fg(Inch)i Fm(or)e Fg(cm)h Fm(b)n(uttons)e(in)i(the)g -Fg(Units)396 3603 y Fm(section)f(just)g(belo)n(w)g(these)h(GUI)g(box)o -(es.)396 3981 y Fn(2.2.3.3.4.)j(T)-8 b(op)396 4160 y -Fm(The)25 b(number)f(appearing)h(in)f(the)h Fg(T)-12 -b(op)26 b Fm(box)e(denotes)g(the)h(number)f(of)h(units)f(\(cm)h(or)g -(inches\))396 4290 y(that)g(the)f(top)g(side)h(of)g(the)f(image)h(will) -f(be)h(printed)f(a)o(w)o(ay)g(from)h(the)g(top)f(edge)h(of)g(the)f -(media.)396 4420 y(Y)-11 b(ou)24 b(may)f(select)h(the)g(units)f(by)g -(clicking)g(the)h Fg(Inch)g Fm(or)g Fg(cm)g Fm(b)n(uttons)e(in)i(the)f -Fg(Units)h Fm(section)f(just)396 4549 y(belo)n(w)h(these)h(GUI)g(box)o -(es.)396 4928 y Fn(2.2.3.3.5.)j(Bottom)396 5107 y Fm(The)d(number)f -(appearing)h(in)f(the)h Fg(Bottom)h Fm(box)e(denotes)g(the)h(number)f -(of)h(units)f(\(cm)h(or)396 5236 y(inches\))g(that)f(the)h(bottom)e -(side)i(of)f(the)h(image)f(will)g(be)h(printed)f(a)o(w)o(ay)h(from)g -(the)f(top)h(edge)g(of)p Black 3645 5692 a Fi(12)p Black -eop -%%Page: 13 22 -13 21 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fm(the)h(media.)f(Y) --11 b(ou)25 b(may)f(select)h(the)g(units)e(by)i(clicking)f(the)g -Fg(Inch)i Fm(or)e Fg(cm)h Fm(b)n(uttons)e(in)i(the)g -Fg(Units)396 708 y Fm(section)f(just)g(belo)n(w)g(these)h(GUI)g(box)o -(es.)396 1087 y Fn(2.2.3.3.6.)j(Bottom)g(Bor)n(der)396 -1266 y Fm(The)d(number)f(appearing)h(in)f(the)h Fg(Bottom)j(Border)f -Fm(box)e(denotes)f(the)h(number)f(of)h(units)e(\(cm)396 -1396 y(or)i(inches\))g(that)f(the)h(bottom)e(side)h(of)h(the)g(image)f -(will)g(be)h(printed)f(a)o(w)o(ay)h(from)g(the)f(bottom)396 -1525 y(edge)h(of)g(the)g(media.)f(Y)-11 b(ou)25 b(may)f(select)h(the)f -(units)g(by)h(clicking)f(the)g Fg(Inch)h Fm(or)g Fg(cm)g -Fm(b)n(uttons)e(in)396 1655 y(the)i Fg(Units)g Fm(section)f(just)g -(belo)n(w)g(these)g(GUI)h(box)o(es.)-2 2298 y Fe(2.2.4.)39 -b(Siz)q(e)396 2642 y Fd(2.2.4.1.)d(Slider)e(Bar)f(and)h(Spin)f(Bo)l(x) -396 2832 y Fm(The)25 b(slider)f(bar)h(can)h(be)f(mo)o(v)o(ed)e(as)i -(desired)f(by)h(the)f(user)-5 b(.)25 b(Notice)f(that)h(while)f(sliding) -f(this)396 2961 y(bar)l(,)i(the)f(pre)n(vie)n(w)g(image)g(changes)h -(accordingly)-6 b(.)23 b(One)i(will)e(also)h(note)g(that)g(se)n(v)o -(eral)g(box)o(es)g(in)396 3091 y(the)h(Gimp-Print)f(GUI)h(change)g(v)n -(alues)f(when)g(this)g(bar)h(is)g(mo)o(v)o(ed.)e(These)i(box)o(es)e -(are)j(the)f(six)396 3220 y(position)e(box)o(es)h(\(left,)h(right,)f -(right)g(border)l(,)h(top,)f(bottom,)f(bottom)g(border\),)i(the)g(tw)o -(o)f(size)396 3350 y(box)o(es)g(\(width)g(and)h(height\),)f(and)h(the)f -(spin)g(box)h(to)f(the)h(right)f(of)h(the)f(slider)h(bar)-5 -b(.)396 3529 y(This)24 b(slider)h(bar)g(is)f(used)h(to)f(scale)h(the)g -(image)f(to)h(a)g(desirable)f(size,)h(b)n(ut)f(the)h(same)f(ef)n(fect)i -(can)396 3659 y(be)f(obtained)f(by)g(either)g(clicking)g(an)h(arro)n(w) -f(on)g(the)h(spin)f(box)g(to)g(the)g(right)g(of)h(this)e(slider)h(bar)l -(,)396 3788 y(or)h(by)g(manually)e(typing)h(a)h(number)f(into)g(this)g -(spin)g(box.)g(Notice)h(that)f(by)h(setting)e(the)i(spin)396 -3918 y(box)g(in)f(this)g(w)o(ay)-6 b(,)24 b(the)h(slider)f(bar)h(is)g -(also)f(mo)o(v)o(ed.)f(All)h(of)h(the)g(described)f(methods)g(will)396 -4047 y(cause)h(the)g(image)f(to)h(be)g(scaled)g(accordingly)-6 -b(.)396 4452 y Fd(2.2.4.2.)36 b(Scale)f(b)n(y)e(P)l(er)n(cent)h(or)f -(PPI)396 4641 y Fm(One)25 b(may)e(choose)h(to)g(scale)h(the)f(image)g -(by)g(a)g(percentage,)h(or)f(by)g(PPI,)h(which)f(means)g(")p -Fi(p)p Fm(ix)o(els)396 4770 y Fi(p)p Fm(er)h Fi(i)p Fm(nch".)f(Click)h -(the)g(radio)f(b)n(utton)g(ne)o(xt)g(to)g(the)h(w)o(ord)g(to)f(set)h -(the)f(desired)h(scaling)f(f)o(actor)-5 b(.)396 4950 -y(When)25 b(scaling)f(by)h(a)g(percentage,)g(the)g(number)f -(re\003ected)i(in)e(the)h(spin)f(box)g(ne)o(xt)g(to)h(the)396 -5079 y(slider)g(bar)g(represents)f(the)h(percentage)g(relati)n(v)o(e)f -(to)h(the)f(full)h(size)f(of)h(the)g(selected)g(print)396 -5209 y(medium.)f(F)o(or)g(e)o(xample,)g(with)g(this)g(spin)g(box)h(set) -f(to)h(50,)f(the)h(image)f(will)g(be)h(scaled)g(to)f(50\045)p -Black 3645 5692 a Fi(13)p Black eop -%%Page: 14 23 -14 22 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fm(of)h(the)g(size)g -(of)g(the)f(print)g(medium.)g(When)g(set)h(to)f(100,)h(the)f(image)h -(will)f(attempt)f(to)i(\002ll)g(the)396 708 y(print)f(medium,)g(within) -f(the)i(constraints)f(of)g(maintaining)f(the)i(proper)g(aspect)g(ratio) -f(and)h(the)396 838 y(mar)n(gins)f(of)h(the)g(selected)g(print)f -(medium.)f(This)h(ef)n(fect)h(can)h(be)f(seen)f(in)h(the)g(pre)n(vie)n -(w)396 967 y(windo)n(w)-6 b(.)396 1147 y(When)25 b(scaling)f(by)h(PPI,) -h(the)e(number)g(re\003ected)i(in)f(the)f(spin)g(box)h(ne)o(xt)f(to)g -(the)h(slider)f(bar)396 1276 y(represents)h(the)g(number)f(of)h(pix)o -(els)e(that)i(will)f(be)g(printed)h(per)g(inch.)f(F)o(or)h(e)o(xample,) -f(if)h(the)396 1406 y(user)g(is)g(printing)e(a)i(640x480)f(image)g(at)h -(a)g(size)g(of)g(6.4x4.8)f(inches)g(\(as)h(measured)g(by)f(the)396 -1535 y(size)h(box)o(es\),)f(the)h(image)f(will)g(be)h(printed)f(at)h -(100)f(DPI.)396 1940 y Fd(2.2.4.3.)36 b(Use)f(Original)f(Ima)o(g)q(e)h -(Siz)q(e)396 2129 y Fm(By)25 b(clicking)f(this)g(b)n(utton,)g(the)g -(image)h(will)f(be)h(scaled)f(to)h(as)g(close)f(to)h(the)f(nati)n(v)o -(e)g(size)h(of)g(the)396 2259 y(image)g(as)g(possible.)e(This)h(ef)n -(fect)h(can)g(immediately)e(be)i(seen)g(in)g(the)f(pre)n(vie)n(w)g -(image.)396 2438 y(The)h(nati)n(v)o(e)e(image)i(size)g(may)f(be)h -(found)f(or)h(set)g(in)f(the)h(GIMP)g(by)g(selecting)f -Fg(Image/Scale)396 2567 y(Image)i Fm(in)e(the)h(GIMP)-11 -b(.)25 b(Under)g(the)f Fg(Pr)q(int)29 b(Siz)o(e)f(and)h(Displa)m(y)g -(Unit)c Fm(group)f(in)g(the)h Fg(Scale)396 2697 y(Image)h -Fm(dialog,)e(you)g(can)h(determine)g(\(or)g(change\))g(the)g(width)f -(and)g(height)g(of)h(the)g(image,)f(or)396 2826 y(choose)h(the)f -(resolution.)396 3231 y Fd(2.2.4.4.)36 b(Width)e(and)f(Height)396 -3420 y Fm(These)25 b(box)o(es)f(sho)n(w)g(the)g(size)h(of)g(the)g -(printed)f(image)g(in)h(either)f(inches)h(or)g(centimeters)396 -3550 y(\(depending)f(on)h(which)f(unit)g(is)h(selected\).)f(The)h(user) -g(may)g(choose)f(to)h(manually)e(modify)396 3679 y(these)i(v)n(alues.)f -(When)h(one)f(v)n(alue)h(is)f(modi\002ed,)g(the)h(other)f(v)n(alue)g -(is)h(automatically)e(modi\002ed)396 3809 y(in)i(order)g(to)f(maintain) -g(the)g(aspect)h(ratio)g(\(the)g(ratio)f(of)h(width)f(to)g(height\).)g -(This)g(ef)n(fect)i(can)f(be)396 3938 y(immediately)e(seen)i(in)g(the)f -(pre)n(vie)n(w)g(image.)396 4343 y Fd(2.2.4.5.)36 b(Units)396 -4532 y Fm(The)25 b(units)f(can)h(be)g(set)f(to)h(inches)f(or)h -(centimeters)f(by)h(clicking)f(the)h(appropriate)f(radio)396 -4662 y(b)n(utton)g(ne)o(xt)g(to)g(the)h(desired)f(unit.)g(This)g -(setting)g(ef)n(fects)h(the)g(v)n(alues)e(printed)i(in)f(the)h(six)396 -4791 y(position)e(box)o(es)g(\(left,)i(right,)e(right)h(border)l(,)h -(top,)e(bottom,)g(bottom)g(border\))i(and)f(the)g(tw)o(o)g(size)396 -4921 y(box)o(es)g(\(width)g(and)h(height\).)p Black 3645 -5692 a Fi(14)p Black eop -%%Page: 15 24 -15 23 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black -2 601 a Fe(2.2.5.)39 -b(Ima)o(g)q(e/Output)d(Settings)396 802 y Fm(By)25 b(clicking)f(on)h -(the)g(tab)f(labeled)h Fg(Image/Output)j(Settings)p Fm(,)e(the)f -(Gimp-Print)e(windo)n(w)396 931 y(will)h(appear)i(as)e(sho)n(wn)g(in)p -0 TeXcolorgray 24 w(Figure)h(2-4)p Black(.)g(Notice)g(that)f(there)h -(are)h(tw)o(o)e(sections)g(to)g(this)g(portion)396 1061 -y(of)h(the)g(windo)n(w)-6 b(,)23 b(namely)-6 b(,)23 b -Fg(Image)29 b(T)-12 b(ype)25 b Fm(and)g Fg(Output)j(T)-12 -b(ype)p Fm(.)396 1406 y Fd(2.2.5.1.)36 b(Ima)o(g)q(e)f(T)-7 -b(ype)396 1709 y Fn(2.2.5.1.1.)28 b(Line)g(Ar)r(t)396 -1889 y Fm(This)c(setting)g(tells)g(the)h(printer)f(dri)n(v)o(er)g(to)g -(generate)i(color)e(quickly)-6 b(.)23 b(The)i(color)g(is)f(bold)g(and) -396 2018 y(bright,)g(b)n(ut)g(color)h(accurac)o(y)g(is)g(not)f(v)o(ery) -g(good.)g(There)i(may)e(also)h(be)f(some)h(une)o(xpectedly)396 -2148 y(sharp)g(transitions)e(in)h(colors.)h(This)f(mode)g(is)g -(acceptable)i(for)f(printing)e(te)o(xt)h(with)g(small)396 -2277 y(amounts)g(of)h(color)l(,)f(and)h(may)f(be)h(acceptable)h(for)f -(presentation)f(graphics.)396 2656 y Fn(2.2.5.1.2.)k(Solid)g(Color)o(s) -396 2835 y Fm(This)c(mode)h(produces)f(color)h(which)f(is)h -(considerably)f(more)g(accurate)i(than)e(the)h Fg(Line)k(Ar)t(t)396 -2965 y Fm(mode,)24 b(b)n(ut)h(with)f(a)h(reduction)f(in)g(performance.) -i(In)f(general,)g(hues)f(will)g(be)h(accurate)h(b)n(ut)396 -3094 y(tonalities)d(may)i(not)f(be)h(accurate.)h(There)f(should)f(be)h -(no)f(sharp)h(transitions)e(in)h(colors.)h(This)396 3224 -y(mode)g(is)f(good)g(for)h(printing)f(presentation)f(graphics)i(in)f -(most)g(cases.)396 3602 y Fn(2.2.5.1.3.)k(Photograph)396 -3782 y Fm(This)c(mode)h(produces)f(the)h(most)e(accurate)j(colors)f -(and)f(tonalities)g(at)g(a)i(greater)f(cost)f(in)396 -3911 y(performance.)h(This)g(is)f(the)h(mode)f(to)g(use)h(when)g -(printing)e(high)h(quality)g(photographs)f(or)396 4041 -y(other)i(high)f(quality)g(images.)396 4545 y Fd(2.2.5.2.)36 -b(Output)d(T)-7 b(ype)396 4734 y Fm(The)25 b(user)g(is)f(gi)n(v)o(en)g -(the)g(choice)h(of)g(color)l(,)g(black)f(and)h(white,)f(and)h -(grayscale.)g(Color)g(is)396 4864 y(selected)g(when)g(the)f(desired)h -(output)f(is)g(to)g(be)h(in)g(color)-5 b(.)24 b(Gre)o(yscale)g(will)g -(result)h(in)f(the)396 4993 y(printed)g(image)h(ha)n(ving)f(v)n(arious) -g(shades)g(of)h(gre)o(y)-6 b(.)24 b(Black)h(and)g(white)f(is)h(just)e -(that.)i(The)g(ef)n(fect)396 5123 y(of)g(this)f(setting)g(can)h(be)g -(seen)g(in)f(the)h(pre)n(vie)n(w)f(windo)n(w)-6 b(.)p -Black 3645 5692 a Fi(15)p Black eop -%%Page: 16 25 -16 24 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 583 a Fd(2.2.5.3.)36 -b(Adjust)e(Output)396 772 y Fm(Clicking)24 b(on)g(this)f(b)n(utton)h -(causes)g(the)g Fg(Pr)q(int)29 b(Color)f(Adjust)d Fm(windo)n(w)e(to)h -(appear)h(\(see)p 0 TeXcolorgray 25 w(Figure)396 902 -y(2-7)p Black(\).)g(In)g(this)f(windo)n(w)-6 b(,)23 b(one)h(will)g(see) -h(a)h(representation)e(of)h(the)f(image)h(to)f(be)h(printed)f(as)h -(well)396 1031 y(as)g(se)n(v)o(eral)f(slider)g(bars.)h(These)g(slider)f -(bars)h(collecti)n(v)o(ely)e(adjust)h(man)o(y)g(dif)n(ferent)g(aspects) -h(of)396 1161 y(the)g(image.)f(The)h(v)n(alues)f(can)h(also)g(be)g -(adjusted)e(by)i(clicking)f(the)h(arro)n(ws)f(or)h(by)f(typing)g(a)396 -1290 y(v)n(alue)g(into)g(the)h(appropriate)g(spin)f(box)g(on)h(the)f -(right)g(side)h(of)g(each)g(slider)f(bar)-5 b(.)396 1569 -y Fj(Figur)n(e)26 b(2-7.)e(The)i(Print)f(Color)g(Adjust)h(W)n(indo)o(w) -396 3381 y - currentpoint currentpoint translate 0.5 0.5 scale neg exch neg exch -translate - 396 3381 a @beginspecial 0 @llx 0 @lly 386 -@urx 406 @ury 3860 @rwi @setspecial -%%BeginDocument: figures/gimp-print-print-color-adjust.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/gimp-print-print-color-adjust.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 386 406 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 386 406 -userdict begin -%%BeginData: -DisplayImage -0 0 -387 407 -12.000000 -387 407 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -9a9a9a -cdcdcd -b7b7b7 -eeeeee -808080 -547098 -7393c0 -424f63 -5a7191 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVP5]l*/WQ7eRT-)q602p8X?"hLmW'UhYj'lGd)!sbKnGlp-APE!2*VP9W)-aOg5P7;UfV. -[;dDB];=3&C#C^K":0IOs7.[UdPK[;=##,u`CkCAl^bV<*koKnY57KnY57KnY57KnY57KnY57 -KnY57KnY57KnY5WAN:^%V^]>AQ1h8(jjOZVFbKqQ<`Q?Ok,ZqD\Y]W!>trB%]O0Wc5(72fQ_5 -RE&T++Cc11OM#sl=ZmV-*iX.Bm9REV_?hu=;0?kPtl3Y.D!!ZIS1F7&jGD%mX+`)dD86)q&/C8dGS8&I+V -<#25M*<7aY+MKE(GG6IZ,^XFNbD5obsH44;iPd9-?WNhgfEK2:g,1:`,NEH=al'5gEAmW\bct -=Co&5/sZ)s`p&S6TgTOZKIZOd4\^Q8)_XV1@26!5^is4??m$h.,"'m_"9OJRDIaBVbfdHPrt. -eDY0N4ZND^MQU/sik1\?%F*hY+]6!UO%XDX]:^<5D;A2^1'A/ -U^fdbYj!`#1P_RJcVap;kj03[^jMkJAm]DmDY;R/_+8OJ)k.XK-l$=\aRN"1sD1d:?CFSkoU@ -%])";4Qm'V,JC7f%_29/.sQI51rcU?8U$0Hf"&D25W\hO4H:l%.".#\NSTdsZ;g!c3jH -,)'Bg(S$^6.6Y:2?'#@j1o9Mi"DYu.4f5PK5mb6%o@>+EH'j!#>42M#.E$8cgIJb?^J!s'C0UdA9N6qnE7\"`@Lo7)[N\BKYfa%RAlU,);(;dPg080g[G.Jj?,hA&>^_Z>06Y -P"MJO$[!lV-#%[Y3:-X/.&/\D/mJBrOoZ(o687munJ/4q"e#,KPYg3( -cjiYjT)%'T%;\od-u7Q\`p22_?&PAZ^>Y#F*pOF\5)romSHU0V$'+"GIrUH4VG8&9=I]mjQKf -!$Pn$cYUKV.Is5#pO<;Ya3eHd,H)S4/RO*!cLcKeL/5`.DkN-`X6HT.c??K9o'A"@+pl1eM+?k9[Y_kte??@H3 -PY8`T?sJ,Y!sYP?/oc/%2OJ)]Y_S[:fi3MJ/ij+sQqEb>B4__EE)0F4GHBho#*.qhHF7S9.@C -gmNq8N7moUiV3B]URpk@$,u9P!'e#?i:UrDuT2irk+*UrqOO+T>07=h#WAY7:<`N[1sfQSXR[ -a1+73u!"be[$R9BXDj-nNTa9BlAbG]!XUn14REh0PRkVbe>nUb*'jVa.=k`]Kf?aK[mV;q5q" -*Y>h<2C7rk,cL!Y`E/[4DHK8hs,)a5%.)]C#?B">YP_LrZeGRMNjnUMdFUAN#`TbrNB5h\Bd- -2mn:/,1HK=8.gp5q';QMkp=4;pu_225B!?g"tc`2*$`mE1iobATI>H$hu=9Z(_MNI=S33=(b; -QWO8W)1hmGZ6::"N1\AHHa<)R:X:nAI`23VR6V -Z'j8KILJ@"Z4)]eK!A"(8f0\F"b*_"f(ghmp)?>SY<=5$X^N3LFFQd/:b3&a9j?jbFi65Zm6\ -i(b4:5d),%gbRhZ(6+$[mGmdJ"`7u12.98FkA*,CV_Lg]Xn#`^Rb3'5I`?+-iSuJ@Z,@j3l/< -Z/8'I<2o*+$JhW\6L?6_;Q'q-6i76!$u'hGfr#>i8YLGr_cMIIZKD1)!Z>FQ;6q7G[.0E]8P= -, -MY"Mgg+#oL7<[?d&n;R\tdAhXHi$D]g5$"R&t2CZo0Lq5G3,8+.b,D,P&_QaI5Ai3JO18/A48 -?3TE#mNDT"4W(V!'tg'Tk54D<-(VQ'f::Qr)I'+:le6;_.]$qk9J%H -C@(As#K2:h2N>qV+DV,_;6GaWpE60Xfl$Ot]Gr::3!AHM6ke^CIV6GD?PmUT\Q2 -\FS$ZRRX -8(+B7).9+f/@&MXlC[ANQcjb=f-[>$8nAtSeS#,!6mPe,<$a -Y^%.D.\TJX\YSkBpTd>e9/fc1f>68csUQrM)Jj@G8<"#Do!%`_%\3U0DADg1b@rfA#GKZn.B* -]]=iNiK!m19!u>m:m+i9kHrKH>OB`>trZ2=e.<(=g(g'IVG=D.QAk'RJ0/qC(\]As1q1K>Z-Q ->>UE*C6>I*F$@&@qUq,Cd?W4lDBp]XGS"A6oS'5EW>(tF!0H3.4RHRWr/n1^NOX>';6rN:KVa -?3s=,t?BcYR?@EJ>Xg,n;.hmYk8 -DB)Kr#:9R[bY8js:7_Ps772+,$9]h6jYZftU1)lQkae]j]/Z"u,*d&PB;"!ls7+h]7&7gB2o& -o_.;PT1_!sg6+&KFJNa+Gt]dAn7fJLE18rb+>;ZS9i3%)HsuMQ_:_l]k*>brR-p?ti-%e#Sj? -U/K(Ecs;fGID]-^>SUDgA>2O,K\RDg7t&pkc)GIkf+ONj/>[8'V.9`q=isn%n,E[3!8p4'>u` -Nde$bc]Amsu8(q[T3[jYDYU0HBWE\rgA9.]En,t+u0dAQcgjAYDk+CkYDiQ#T:aD[JL:#VHfM -EN[E'=53DB9n/Foc.'s/SSiJrUm-E^M9(l]>\BB#jc1"ICmMIXhueVfsM,B'Fn%k$ciZqaUhQ -)n9m^Z4O^lGMTcWWc/O!sD^HH@f91IIckgT9R;UXlAsTMApps$k]*q;1W@`e,',uTt2>Y_OBS -e8c6NAj4Ir6*(Pn.FtT?&?99pSLf@`p'a`2L$>GQpUJYhN)6>KnJ>u?lOM(Vd0+"i^o;H?aT`!F[lm[ -LQDJW^GV`CNWoD#69".qS+D^BfUm-U[Yc-2Y[hbj#7Nq6o2\&P15aD*sN\Y_%hD6F8$Ej[,14 -Q+AOF%!P@Nd"]QCO?%2U,g69g%tB`ZIj@W1\Y,Y@[]%K4Y,@q>VQs+!T``g4UM#7T*P+=ihr/;U*%ibV\p>XJ0%l,#q2@:D&*g+h`L,HJ`s& -)3K<=rW8%VaIsOok?h+/`8KZ#qIEKofY;Z!eIpp8^ia$f+D*p[JfX'h/n>T4FePu?d2seE*6e -:/g:X2eDkG6jZ8T.*O]f+-'=N(10cQ(N9nhOq5l2skqE6N"hgM(>\1M'/]]g%9Im:&WR:bIq1hQi_bUIkQFrs:F474dfPT)i -)g!DM&u?6Aj(0&8Muc):Ln$g:g8f1I11RYj9IEKatm4O9XQKq-tn0_.fC>Q+Tip_0&!>*/dJD -&1K4%5T+"K-a\4&[R30m/ -TSW:jW^N6)h)&7W8kJn"r!pc!b.so)3m[_%BN=39OJH7TIVU^BWQknZ#S5m%E&*qYZ`n@/IB\ -<1MOYi_2B@qt,$NBM\)WbE:CM3Sq]'HuOIIO;W"l6dcs95A9Tb!#pnOY-WG]fUh":F/>/0`Ab -&t0Ao7fUC3;--^g&O[d63[Tpa"AS\/'+OHXdJMFkEYL,l@-FiWsu+pflji2C$[p)]A&J(2+[, -SZ$+%AqX:@_2[Fc:/.?5#<)'S3P3[]G`<*@X-:4nX.DK*4TiZAeX)d#/@ojdPIU,H'&=RL:DR -uaHL&68B>F$o+:.*g2b:M;VQ6U0)M0MO"2USV7U_g8/ciKe@J"Msk$* -?0V9A;.LLWoe^8lG=JX2$d?&%V^Te:gh-k%A>L9i.G4'BDg67=*BlK5RVRpU*:DQ^ -,d]"+NPT5\k"F+^)A9u!RikF;,8D41Z9K-If7MW,DOquq3YEm.:V6f=B9Io7CD"WQud-\IW!E -2K]#0^^1F"7ckLkSLB0+LHu=78l*9Tga;!'5@@/k-l:]_LDH,6`BoTVs2q[KW!cH5N+0SlH5g -^Ia]HK(0%G)f&^:!4AiW_.5YgVB%3W/`UO24/BJ64*Z*ZNKpIOtY6kt@UdXfqAUhFk^u[Jf^: -U96oT^%]^]$iLJ%YnQl-6W`s%i80/.(KicI[usbohcqJq;:_*0)A'W%9-d-*NJqdNp39[,WtI -VLfOJdhadLNRB#a\k]R[%FUa'E -1'8P_)EoC*Ff*LI.2W1uT1g`ME=\5k`Qe0i'VoT[jU6)?&M?GUaA=du8 -l^uT/Fc*1m#7He$Q+@MIg.;?A\[j9/[1o1+aFQmU[Aq;oi0@251DM(=Tb&@jbD8e]KJ!ugUdH -g;L4JEHHaK2%@R1KBJ+FVB'K?_&7UJS3mA*gS`?He3o]g5T3`r2K77A0mV@,M'U#;_a`GK^>= -,B?Uh%s82=-Y)i:^^gAWL[$cYQ8\-=(4j^dYS[K8.fHq`nn!G>+/SM]0p..qB_l<9f`l#IkmE ->V4GBS"N_sd^SRQBio[`..qM;nKoiL469pLD9lFrfDshLp[-6H;l704=L^XM9*g,\d2FB/8Om -sibTJAlW`o3;J;YjW4B*E!a1EItElFP+0Ria*r9Mod%X3!PTrJC1(e8Y)IHOaN$"dK72#V3t* -M28+tW[hb6g+BG3Oh;RWd`)?p6*)8r&:J(WLXL?S(Q$PV93TQ!.OmruPo-udTsldB3Z4_4K%g -#=r[#7C?(DSh6Y,2J:C-;lA9<0j>e -9aGWM^C\k\&C]#pd8gMnWQ^<\A4O"3Q>lK5m5^Dh=hVc+Ct)m2m+QfmRPgk*hsq.X8iNZ-d(0 -o))1LY2]/P-dcc]O!an]5YCq- -p0.EAoAlI-d1&;'YSgJK@TPhRJg*_m9M2f_HmpW2PNQlEi;3d>adsa+@sY&>+5FFFYBGT>aeI -6atSW-3#%Wi[*:`b!,a/ZC&8 -g)A!^Q6JO`Y<\7F]D(?RBcei_0ek2%IMYI24]Nq?SK@"G1&QgFJm@"[,BTM;Q/**NEAo@PWpB -"?.P+')jF#S*a"HGT9.%Nm5;j\8t5=A;mI]6?:iLrs49?ZhYS0G]kP5,7:to_Z@D3Kjk -^H_iU7@dI:ss"r(N(M3:7-J9./>qg*TjTK%tq@h;Td,mA!r4$MunEXXeA0d??LEK!E-d -9)qeE("E'Z5(`fRJGpW*j+rL;,d:D(g#aj;"65%_\]\(7QG0Dp`#G6KbNNABc;A`9`M'a]equ%Uf"Hp3qTkITSVC0kjo*3+I'qIcJn=V?:.gX09'OBDF)9-P\l$mdrV!$ --NH375jCSJX^)I:7q`0#Wj)GnpSE(NK)l&>$sku:]F4#1h78W$EC#l8DQs!*Un,q6A?7;762n -4m?qK4056aPh]E+GD`"`rC1dd(qE+^j3s-JMkR]AJ(41\01pI0V7JhL>Rj/fpmbK%+_7'Hk2" -1__Y6C+iJUQVhd"1.gd4!&STmIs$n32aoW!kLbbDj86.G6L1fVeU4X$sAI6>-nY4HiC_4UCUu -t(hE("Y8#R-j8_A1l2\$olaj2pEXP4B["!bseo'IKk)4!55rCI;2n^nsLlk*9i]r?$Th#UA)K -(Sm.$kWqs=LN*55%0&0*#37mgFePXU2F.p@#cK_B/no2frJ[4riW02b$J(H)6H=__:K7Ck5m. -06W:3W>ad6YE1[8`%$4i9iMT[;oIY$nd.(C%gTdM[9@0N*3>/glM!"'`"BXJ[48iWl=%-B=<5 -GHXQa6/fL+dMm@eP1IV/X2Qt -86CPEnRVDY,XiE-P7D%1t09=`b#I!3!?`rt.eDDA33!%UVua$PFUnTt9MSB3>3dL7bXA7HI0A -"@sf'8ttN)7Gs!AIo"C/$S%1c!#N/@9$D_b"k;!F!N:LC*"/#9.LptE:WBX5^&`ejcUgYL@\ -%.B%PTHVZH3&BnTILgkp0:q+UU1]:.eYk=BJ[-=BJ[-=BJ[-=BJ[-=BJ[-=BJ[-=Pfa!H\Jj* -^OHgjk.OlEHNh1O\+&89S*.O_SF6?Pf>djh59E5K2ZteChW'auh?sHM?(r&>rj?Zir9`qPp&= -Wf]g1N1CHPgRAe2tT5d42;7g6_@`qSl9&?I_Ufq6Mr%n#:,s -5-HmnB;\OKtHLc$ZS]1fKS*G^)7%mpC@_L9$tt>^fC^oLVRt%39>)6ZVU2\I5;!V#lLM,mE`e -FNWgpRhp_AOY:]dm&2Y9P$`1+[-Qo@MZHlk[JK]7g#WD]jm63m64!JnHHq/8h!mc5C&U@TB*$ -,1]>sRn:N+b!_1`9/M`p12?CN\q`&;%rKP&CH=>(6==FhrtZGfVSQ>7LYL'A\=/6gt/&nHr.8!&-bcq9eq"3Gn,Lj&+7F7WjVCncoGZSc6<3= -,PI&rY@P4mP`7)Fmb^k2tIj+F%[Jcmp5PQUg[1q0iU@BG)9o">>jbnq[b^_%FjfnVEbI6/*(r -jq3"aH*>KX%j]@DC0d2se@L$SW=epL,@Y(i@:rHVt>:I.hWnsE@%+ -+jH18tWJB%4'R5[POW[a>sIdfLBM.TEPVd4\V2Y"ckVeGC4pKi#N()k*1<:#'F50eTY).GgD. -q3MipeLRl;P;ZBHNV2nlJ3Ml^ZE(V4a/osY`[bGmG8D\-gq?%%F8m<+oPdW4%?>9U,F%TS;=S -=#a,ALMO8(>,_f=IVl"q^B^Qq+N8J9aP"\*75T.J:,u5Ol+I5k+Q&Ns:3eGXV5[baUo64JKk= -n=!YHfbbTgk.Qq,Z;I!_h)prjsl@:GNHJN7o,aA%XZI_RdT^VX;YM"2 -8';tP?3oCLVt>gh5hcWq!eM3oF%VJq!p5_&Vt:)4HYlf5+CS#Zlb]1?f&bXZNPK1%.16O,SqM -AWXUF`V>*nte(UVEe@NH-QLfP','9D>lo(ZEP<(l_Z3i-Fb4S[ipqJY7&4T=6O"U&]2:$4AmO -$*Db&A/SYl)=+(O/R2HYB<.c$m=[E0oouO_3+>F*e+Q7\,),e;bFr:rt% -T3[u2uqW:U3GA(j)dT\m(3XCa]:P>M&&ZtF3[B+!jh0oXS_=@alU -(7dN*^A]5>9E"a:*/#AXY9nWSk1K&N5jZbCrC+Di,B6P%p=J(<3Q*79Yhp"^0!o+jd`O%6Q0h[.+4*J.dQi!%!p&KM)Z]H7aWLd$@%f4O[\''9e60$ -GPT?,"#%#^kbHZ*:I:Yct@9Zmr9<@3/a`;b+$.FWCU:[TQ^nah;fpK0o'bHKN#KgkO`sp(&!l -eqG8\?&ftXokF)b+Rj-gM77hM\`S0Q\+^tjn1SP_<_2#``-YnKgO&]+]a$1_!XK]nM:\12Gg4 -L.&9s7W8Y:UM>9h&Rdpi-;sl/HfBJsE# -g*6aXNX16up9,JJm/5s^?Y25"CC4B^I5_:OrNqbEodFtJ=V.[%%EAW<6PsslnnPr21'kPHoeb -N;)hQ)C1nJC:$J*Jc&.j4N63u-agpR%7ZQQdHeaH^.%DbY(X)RDG(4q:ocuqnNOFh]8oEkjFM -?W<6_$;+8p/l[!"Y43&1"6B`b3@N,k8jc\):@#BDP=9@_0ST32(=Qp#/RI$W4CT%Ap^k9qL-) -UlM18Ve]4]Mn(6K+9'ga0JbSjL*2q!LIX=KKCM;Q-JjZr6hCf#XP+usE0a%p$)aMdDJ+/9hgM -;.rq4E)?Hu")-5:ZD>PM9+S$O[=M$O[?c?VT8:F0Zd0_Z&/K[]PXFL#pD;n<'C2GBib#n:_Go -$(d<4G>/s,Vh?4,>o81EKct^;*?7J[k5#jF"2;n_JD_POopR*1_;S^S+kS5ZhWKD#*"q):'S` -9'@0g$QL7iZlIg;J8'5r$A>AcQ=o*X?&DX;Ef==noGNdO(t]]Nh:G-lDc^7Mu=6f:+HR4%'j6 -=:;Ig(QF!=1>6ZRqj55F5+k5?9NT"#PBPUDn17Qq>:7:=KX+/gKLE74h?SF>!l[s$]4l,LU#o[FBWJ[_M2j_ -cSND@]`cCXB47kBlm_XW;XJ?L]37i"1.&&9uBFK786nW4/V.QY/]*02fRM"7cI9B^,Ycn9E4"k -%M:t>J,91W997E;q - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 386 406 -%%EOF - -%%EndDocument - @endspecial 396 3381 a - currentpoint currentpoint translate 1 0.5 div 1 0.5 div scale neg -exch neg exch translate - 396 3381 a 329 x Fn(2.2.5.3.1.)i(Brightness)396 -3889 y Fm(Adjust)c(the)h(brightness)e(of)i(the)g(image.)f(A)h(setting)e -(of)i(0.0)g(gi)n(v)o(es)e(a)i(fully)f(black)h(image,)f(while)396 -4019 y(a)h(2.0)g(setting)e(gi)n(v)o(es)h(a)h(fully)f(white)g(image.)g -(V)-11 b(alues)25 b(greater)g(than)g(1.0)f(will)g(result)h(in)f(black) -396 4148 y(not)g(being)h(solid)e(and)i(highlights)e(turning)g(white;)h -(v)n(alues)g(less)h(than)f(1.0)h(will)f(result)g(in)g(white)396 -4278 y(not)g(being)h(perfectly)g(clear)g(and)g(shado)n(ws)f(turning)f -(black.)396 4656 y Fn(2.2.5.3.2.)28 b(Contrast)396 4835 -y Fm(Adjust)c(the)h(contrast)f(of)h(the)f(image.)h(A)g(setting)e(of)i -(0.0)f(gi)n(v)o(es)g(a)h(solid)f(gray)g(for)i(the)e(entire)396 -4965 y(image,)h(the)f(e)o(xact)h(gray)g(depending)f(upon)g(the)h -(brightness)e(chosen.)p Black 3643 5692 a Fi(16)p Black -eop -%%Page: 17 26 -17 25 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fn(2.2.5.3.3.)k(Cy)m -(an,)g(Ma)o(g)q(enta,)h(Y)-8 b(ello)o(w)396 758 y Fm(These)25 -b(three)g(options)e(allo)n(w)h(speci\002cation)h(of)g(the)f(c)o(yan,)h -(magenta,)f(and)h(yello)n(w)e(le)n(v)o(els)396 888 y(independently)-6 -b(,)23 b(for)i(rebalancing)g(the)f(le)n(v)o(els.)g(Normally)-6 -b(,)23 b(these)i(should)e(be)i(adjusted)f(to)396 1017 -y(yield)g(neutral)h(gray)-6 b(,)24 b(b)n(ut)h(the)o(y)f(can)h(be)g -(used)f(for)h(other)g(ef)n(fects.)396 1396 y Fn(2.2.5.3.4.)j -(Saturation)396 1575 y Fm(Adjust)c(the)h(brilliance)f(of)h(colors.)f(A) -h(setting)e(of)i(0.0)g(results)f(in)g(pure)h(grayscale.)g(A)396 -1705 y(saturation)f(setting)g(of)h(less)f(than)g(1.0)h(results)f(in)g -(more)h(muted)f(colors.)g(A)h(saturation)f(setting)396 -1834 y(of)h(greater)h(than)e(1.0)h(results)f(in)g(more)h(vibrant)f -(colors.)g(V)-11 b(ery)25 b(high)f(saturation)g(often)h(results)396 -1964 y(in)g(v)o(ery)f(strange)h(ef)n(fects,)g(including)e -(posterization)g(and)i(banding)f(that)g(might)g(not)g(be)396 -2093 y(e)o(xpected.)h(F)o(or)f(normal)h(purposes,)f(the)g(saturation)g -(should)g(generally)g(be)h(set)g(to)f(a)h(v)n(alue)g(less)396 -2223 y(than)g(1.5.)396 2601 y Fn(2.2.5.3.5.)j(Density)396 -2781 y Fm(Adjust)c(the)h(amount)e(of)i(ink)f(deposited)g(on)h(the)f -(paper)-5 b(.)25 b(If)g(you)g(ha)n(v)o(e)f(chosen)h(the)f(correct)396 -2910 y(paper)h(type)g(and)g(are)g(getting)f(ink)g(bleeding)g(through)g -(the)h(paper)g(or)g(puddling,)e(try)h(reducing)396 3040 -y(the)h(density)f(to)g(the)h(lo)n(west)e(v)n(alue)h(you)h(can)g(while)f -(still)g(achie)n(ving)f(solid)h(black.)h(If)g(black)g(is)396 -3169 y(not)f(solid)g(black,)h(e)n(v)o(en)f(with)g(the)g(contrast)h(and) -g(brightness)e(at)i(1.0,)f(try)h(increasing)f(the)396 -3299 y(density)-6 b(.)23 b(Note)i(that)f(changes)h(to)g(this)e(setting) -h(will)g(not)g(be)h(visible)f(in)g(the)h(image)f(pre)n(vie)n(w)-6 -b(.)396 3478 y(All)24 b(of)g(the)g(supported)f(printers)h(actually)g -(need)g(less)g(than)g(100\045)g(ink)f(density)g(in)h(most)f(cases,)396 -3608 y(so)i(the)f(actual)h(density)f(is)g(something)f(other)i(than)f -(the)h(nominal)f(density)f(setting.)h(The)396 3737 y(ef)n(fecti)n(v)o -(e)g(density)g(setting)g(cannot)g(go)h(abo)o(v)o(e)e(100\045,)i(so)f -(if)h(a)g(v)n(alue)f(speci\002ed)h(will)f(result)g(in)396 -3867 y(an)h(e)o(xcessi)n(v)o(ely)e(high)h(density)g(le)n(v)o(el,)f(it)h -(will)g(be)h(silently)f(limited)f(to)h(a)h(setting)f(of)h(1.0.)396 -4245 y Fn(2.2.5.3.6.)j(Gamma)396 4424 y Fm(Adjust)c(the)h(gamma)e(of)i -(the)g(image,)f(o)o(v)o(er)g(and)h(abo)o(v)o(e)f(the)g(printer)n -(-speci\002c)h(correction.)396 4554 y(Gamma)g(less)f(than)g(1.0)h(will) -f(result)g(in)g(a)i(dark)o(er)f(image;)f(gamma)g(greater)h(than)g(1.0)f -(will)396 4684 y(result)h(in)f(a)h(lighter)f(image.)g(Unlik)o(e)h -(brightness,)e(gamma)h(adjustment)f(does)h(not)g(change)i(the)396 -4813 y(endpoints;)d(it)i(merely)f(changes)h(the)g(shape)f(of)h(the)g -(input->output)e(curv)o(e.)p Black 3641 5692 a Fi(17)p -Black eop -%%Page: 18 27 -18 26 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black 396 579 a Fn(2.2.5.3.7.)k -(Dither)g(Algorithm)396 758 y Fm(The)d(recommended)f(dither)h -(algorithm)e(is)h Fg(Adaptiv)n(e)29 b(Hybr)q(id)d Fm(\(which)f(is)f -(the)h(def)o(ault\))g(for)396 888 y(te)o(xt)f(or)h(other)g(\002ne)g -(black)g(detail,)f(or)h(if)g(this)e(is)i(mix)o(ed)e(with)h(continuous)f -(tone)i(images.)f(The)396 1017 y Fg(Ordered)j Fm(dithering)c(algorithm) -h(is)g(just)g(as)h(good)f(\(and)h(some)n(what)e(f)o(aster\))j(for)f -(pure)396 1147 y(continuous-tone)e(images)h(and)h(photographs,)e(b)n -(ut)i(may)f(yield)g(poor)h(results)f(with)g(te)o(xt)g(or)396 -1276 y(other)h(\002ne)g(detail,)f(particularly)h(at)f(high)g(printing)g -(resolutions.)396 1456 y(The)h Fg(F)-5 b(ast)25 b Fm(algorithm)e(gi)n -(v)o(es)g(the)i(f)o(astest)f(results)g(at)h(the)g(e)o(xpense)f(of)h -(color)g(accurac)o(y)-6 b(.)25 b(It)f(is)h(a)396 1585 -y(simpli\002ed)f(ordered)h(dither)-5 b(.)24 b(On)g(simple)g(four)h -(color)f(printers)h(\(or)g(other)f(printers)h(used)f(in)396 -1715 y(four)h(color)g(mode\),)f(the)h(quality)e(is)i(similar)e(to)i -Fg(Ordered)p Fm(,)h(although)e(dark)h(gray)g(rendition)e(is)396 -1844 y(not)h(as)h(good)g(due)f(to)h(a)g(simpler)f(transfer)h(between)g -(black)f(and)h(colored)g(ink.)f(W)l(ith)g(six-color)396 -1974 y(printers,)g(color)h(rendition)f(is)g(some)n(what)f(w)o(orse,)i -(b)n(ut)f(it)h(should)e(be)i(quite)f(usable)h(in)f(cases)396 -2103 y(where)i(optimum)c(quality)i(is)g(not)h(critical.)f(In)h(black)g -(and)f(white,)h(it)f(is)g(an)h(ef)n(\002cient)g(w)o(ay)g(to)396 -2233 y(render)h(grayscale,)f(b)n(ut)f(it)g(may)h(not)f(gi)n(v)o(e)f -(best)i(results)f(when)g(used)h(with)f(v)n(ariable)g(dot)h(size)396 -2362 y(printers)g(\(modern)f(Epson)g(printers,)g(or)h(Canon)g(printers) -f(using)g(DMT\).)g(On)h(rare)h(three)f(color)396 2492 -y(printers)g(\(CMY)g(only\))f(the)g(results)g(should)g(be)h(identical)f -(to)g(ordered)i(dither)-5 b(.)396 2671 y Fg(V)d(er)s(y)29 -b(F)-5 b(ast)25 b Fm(is)f(e)n(v)o(en)g(f)o(aster)h(than)g -Fg(F)-5 b(ast)p Fm(,)24 b(with)g(e)n(v)o(en)g(more)h(loss)f(of)h -(quality)-6 b(.)23 b(Color)i(and)396 2801 y(grayscale)g(output)f(will)g -(sho)n(w)g(strong)g(patterning)f(that)i(resembles)f(screening,)h -(although)e(it)396 2930 y(isn')n(t.)h(On)h(laser)g(printers,)f(and)h -(possibly)e(on)i(certain)g(kinds)e(of)i(te)o(xt)f(and)h(line)f(art,)h -Fg(V)-8 b(er)s(y)29 b(F)-5 b(ast)396 3060 y Fm(dithering)24 -b(may)g(actually)h(yield)f(the)h(best)f(quality)-6 b(.)396 -3239 y(Error)25 b(dif)n(fusion)f(algorithms)f(\()p Fg(Hybr)q(id)29 -b(Flo)m(yd-Steinberg)f Fm(is)c(such)h(an)g(algorithm\))e(perform)396 -3368 y(v)o(ery)i(well)f(at)h(high)f(densities,)g(and)g(are)i(capable)f -(of)g(rendering)g(v)o(ery)f(\002ne)h(detail)g(rather)g(well,)396 -3498 y(b)n(ut)g(the)o(y)e(tend)i(to)f(e)o(xhibit)g(artif)o(acts)g(in)h -(the)f(form)h(of)g("w)o(a)n(v)o(es")f(or)g("w)o(orms")g(of)h(dots)f -(which)396 3627 y(results)g(in)h(noticeable)f(te)o(xturing)f(in)i(pale) -g(areas.)g(Furthermore,)g(pale)g(areas)g(immediately)396 -3757 y(adjacent)g(to)g(white)f(tak)o(e)h(a)g(while)f(to)h("b)n(uild)e -(up")h(suf)n(\002cient)g(error)i(to)e(print)g(at)h(all.)g(This)f(is)396 -3887 y(sometimes)f(called)i("tearing")f(or)h("w)o(aterf)o(alling".)396 -4265 y Fn(2.2.5.3.8.)j(Set)h(Defaults)g(and)f(Close)396 -4444 y Fm(When)d(the)g Fg(Set)j(Def)m(aults)d Fm(b)n(utton)f(is)g -(click)o(ed,)h(the)f(slider)h(bar)g(settings)e(will)h(return)h(to)f -(their)396 4574 y(def)o(ault)h(v)n(alues.)f(The)h(dither)f(algorithm)f -(setting)h(is)g(unef)n(fected.)h(The)g Fg(Pr)q(int)k(Color)f(Adjust)396 -4703 y Fm(windo)n(w)c(will)g(close)g(when)h(the)g Fg(Close)g -Fm(b)n(utton)f(is)g(click)o(ed.)p Black 3645 5692 a Fi(18)p -Black eop -%%Page: 19 28 -19 27 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(2.)h(GIMP)g(and)f(Gimp-Print)p Black -2 601 a Fe(2.2.6.)39 -b(Printing)e(and)i(Sa)n(ving)g(Settings)396 802 y Fm(At)24 -b(the)g(bottom)e(of)i(the)g(Gimp-Print)f(windo)n(w)-6 -b(,)21 b(there)k(are)f(\002)n(v)o(e)g(b)n(uttons)e(labeled)i -Fg(About)p Fm(,)h Fg(Pr)q(int)396 931 y(and)k(Sa)n(v)n(e)f(Settings)p -Fm(,)e Fg(Sa)n(v)n(e)i(Settings)p Fm(,)e Fg(Pr)q(int)p -Fm(,)g(and)f Fg(Cancel)p Fm(.)h(The)f Fg(About)h Fm(b)n(utton)e(will) -396 1061 y(sho)n(w)g(information)f(about)i(the)f(Gimp-Print)g(softw)o -(are,)h(such)f(as)h(the)g(v)o(ersion)f(number)l(,)396 -1190 y(authors)g(names,)h(project)f(web)h(site,)f(and)h(softw)o(are)g -(licensing.)f(After)h(clicking)f(on)g(the)396 1320 y -Fg(About)p Fm(,)i(read)g(the)e(information,)g(and)g(then)h(close)g(the) -f(windo)n(w)g(by)g(pressing)g(the)h Fg(OK)g Fm(b)n(utton.)396 -1499 y(The)g Fg(Pr)q(int)k(and)g(Sa)n(v)n(e)f(Settings)e -Fm(b)n(utton)e(will)g(sa)n(v)o(e)g(the)h(current)g(settings)e(and)i -(then)f(print)396 1629 y(the)h(desired)g(image.)f(Recall)h(that)g -(these)f(settings)g(are)h(sa)n(v)o(ed)f(in)h Fh(~/.gimp-1.2/printrc)p -Fm(.)396 1758 y(The)g Fg(Sa)n(v)n(e)j(Settings)e Fm(b)n(utton)e(will)g -(only)g(sa)n(v)o(e)g(the)h(settings.)e(The)i Fg(Pr)q(int)h -Fm(b)n(utton)e(will)g(print)396 1888 y(the)h(image)f(only)-6 -b(.)24 b(The)h Fg(Cancel)h Fm(will)d(close)i(the)g(Gimp-Print)f(GUI)g -(windo)n(w)-6 b(.)p Black 3645 5692 a Fi(19)p Black eop -%%Page: 20 29 -20 28 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(Chapter)58 -b(3.)f(CUPS)h(and)f(Gimp-Print)-2 1167 y Fo(3.1.)47 b(Intr)m(oduction) -396 1383 y Fm(CUPS)26 b(is)f(an)g(acron)o(ym)f(which)g(stands)g(for)h -Fi(C)r Fm(ommon)f Fi(U)t Fm(nix)h Fi(P)p Fm(rinting)e -Fi(S)q Fm(ystem.)g(It)i(is)396 1512 y(assumed)f(that)h(the)f(reader)i -(has)f(properly)f(installed)g(the)g(CUPS)i(softw)o(are)f(and)g(the)396 -1642 y(Gimp-Print)f(softw)o(are.)h(This)f(section)g(will)g(discuss)g -(adding)g(a)h(printer)f(to)h(CUPS)h(that)e(uses)h(a)396 -1771 y(Gimp-Print)f(printer)h(dri)n(v)o(er)l(,)e(as)i(well)g(as)g(ho)n -(w)f(to)g(modify)g(the)g(v)n(arious)g(settings)f(supplied)h(by)396 -1901 y(Gimp-Print.)g(This)g(will)g(be)h(a)g(rather)g(quick)g(e)o -(xplanation,)e(as)i(the)f(CUPS)i(softw)o(are)f(is)g(quite)396 -2031 y(well)g(documented,)f(and)g(it)h(is)f(not)g(my)g(intention)g(to)g -(attempt)g(to)g(duplicate)g(the)h(CUPS)396 2160 y(documentation)e -(here.)-2 2662 y Fo(3.2.)47 b(CUPS)h(Printer)g(Installation)396 -2878 y Fm(This)24 b(e)o(xplanation)g(will)f(use)i(the)g(web)g(interf)o -(ace)g(pro)o(vided)f(by)g(CUPS.)i(First,)f(aim)f(your)396 -3008 y(f)o(a)n(v)n(orite)h(web)g(bro)n(wser)f(at)h(the)g(CUPS)h(serv)o -(er)f(\(http://localhost:631\).)c(The)k(follo)n(wing)396 -3137 y(screen)h(should)d(appear)j(within)d(your)i(bro)n(wser)-5 -b(.)396 3416 y Fj(Figur)n(e)26 b(3-1.)e(The)i(CUPS)f(Startup)i(W)n -(indo)o(w)396 5096 y - currentpoint currentpoint translate 0.45 0.45 scale neg exch neg exch -translate - 396 5096 a @beginspecial 0 @llx -0 @lly 621 @urx 416 @ury 6210 @rwi @setspecial -%%BeginDocument: figures/cups_startup.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_startup.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -b7b7b7 -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUl#,OmZ@sb-PkI90FW\d2XLJ]eH&''4RreX?UYk'MAeeI5jZ/1LQ]<:`A8td&%N>2i*r -t`K%"LG0$+5>r!O[LU!O[LU!O[LU!O[LU6.Db_qQKj!+U#+*[BPN.5#*kXhJk"3YoVb'..YKh -4B-1(H8+lFWeFGCN0JnDq8]C5!Or6pW6P2bfqZK6qPXiO##k.q.DDQdn5t;A\;L*OEP!PJ1R< -0MEr9l2_!O[-$Pa^d`D]d+X:5rDhWlp/KP!EB[Nc)JHR]:aDWKJZ.;'g>%:LJ079d`pO5"9ee -`1c-hf'T%SF2akdQOO]ZrWhd>`+Se)SUJPs?`MO]sAe`is)k6IbD7:n -#AR>&$d@R^[n.`:,*U:@R.so]7\&M2k?]-m&=^^RcQJ*)rJ_NL79Kl`O<;/# -h8"8X6hV=rVKe0QL;tY0q4iEk$oNrYF(`#F#C?C*o5HZVlI16=SuJ&Vu-8$E"(?:99G[s7XEM -Fj($G)nZf9cRC2EQD(g>M`j\6LFgVZ#lbDc#h5jiUJA_'7;WP;uL`[sBInXno275:`(72Fr60 -h4%Yk;41V'F6$DCls]'+BiUk\\j.fsdsMB.Sp%2U,h>X/LI.YJ=^rV`Pd$=B(^SeonH&=Tr'1maGAYTP;.Pno9b4kbqq[+.LT4)!U-(h\1V]ff`>6t -3csll+@Z-gp9Pn6ubDiZ<^slCYD7\nFN8-T8ZTXLude2<%cMS9n-9MJIF]Nd@]f:A-\[B,6!*i"O"Z(>N[/j'f#igHFD@W7C?DWWb,OY.!uF]U[mP7bO*3k2*Y^4SJf/pG5Q-f(u.CE#GQZh]]N/^tQ\N2s&u;k#& -@6>][bOqR"&C/O2c+#-9gW9nN$]@(]VQE)Sp*,RNY1iHg60DRLX2m"t_\*!2=I9SERASSP\)b -T9tmn#rZ:iC.TD.Xf,Xuk(NiP<\F-dO'qFqqE)B.3Yj0hP:kEVHs^FNTUiHAOAh;.pP -FN$h4\qI0.Dg\:/W:)Fj'h()'8@!G]hS$^Y;fZ-c-Q>pRSYh'RVLi9mR@K!HW4thnNaM,r]%1 -%osVV)D?KEGZ_B<5[?5YAb[sB.V"A4$q4(FK1&3$CV*$-U/CrdX\^`!dK6Hd+m5erWH6+<_&k -44D\)]8F2C`H'r*:j;%bA)uGI_)ramW)paZZVhgVV.9=kkQTLLIk;0%S__CAZtC.p&A0O)E.U -g:^YH2DdA*_kKP"Rs:KGm8a=%$f0u\#BZ0r*3LHnOfS'!FfiB(+#r>?,\.kXaZg_IB^ -o@f9!o[_&Z%+dJM\RKnR'qD0f"SSUfE6hr\h!8):e('su\\^q^o_dHr,tjGp!R^`SBW_]/8%4DppK&=/5,@q'^dipEo+]MaK.k++l58u259F/Rn:`UFnZ.,`[""^C;*H( --+Rk)idKttn:A>XT-:`X@^_g*5rpJPjSh6m8NWQV>0q<@`1W4%F^S!JF$If8LYgPPrJb@@:.% -cPQ&GX,4Z-5*Ijj=55?^MT/zz!!$t2Q>]]oo.^94:%S4Y5P<@1hY[nu's$`*ZaFs]C\9LQ@ -=d)V?K_/@7"A2>VFeJWL7Vu[\r:VfB.BN4'6PGYAN1+<`=G(0>5a!n'^H[TH67NW;_.sDH@@p -`#&>alD<,bll$nSV69HD^=<"bkhNO89/a/el?9CXdMCmXk^'dB6`!4?Q -JFhOm5RME<<3lfm0,<%R=I'ka54#,)nl1MKUFKX-=N6Y*\Q=do"8@A0fj(d$`0[9B,VAo<7oK2Yt%#[Tdf.RS=g>Q=DL[X)/Mt/@NhA9WsZX`C(b_I4Q%q[[O-QHVl8oi0qUo?+;gXl0M+\qWd5J?>\Gq[XDr0ek3[$'Zch+\g-Os[FEc6GA -)`@_8CpUlSF\K$a>KFLWnjuDj@r[t24:Q^^$-E7[2-lL"/eXIa;$5f%0X)LL02Y.ra1G -IB59\DI3%^$VA/bNlPpMHed%b`/1;G9^(N@Fr!A+MDgq%u/pXI&hUDDT$,WYk-iN0Q+3Hg)<& -"1H+#FNEE*+G[hs:>F-QVa',t$U>9MWaE-h4;%o,"4_ -aB5kbFR&(Z"h90e9-T`\"@cY\CYUIVG"O'7800Q'U+rY.*b4lHWQ#=\?j1U*i\LQ=8ItXOFns --;V$ig'ZTcmB1P/4"I\bMu'#EXiR]O^$(CMfX__I?3RTuZk^otGhUO\"fre76Bt9 -4o;iqrFoZ]kEZ,SDDCj*O06Ot9Q]F97)X3Xq<;G,@TrRI!83pt;3hedbG2K:WfrN$>Dn`=JLM -V\$LkC]5M62'`b;)[S\!_lRK'U%fmSa`*&VqKP&`Wr1Q;oSMTQN"L%HAeRSXdrinB@F6?>ASg -R-6?+F9^bQ>rp%)jCF0ABhVuRf.pK/fE6BaZ2=o;bh+r%a/=W!n@*]\ISXECNe*&)g5+Li>O0 -HT+]!A_cqDiB$p-]BP]me3TT;"to5_X,4p&Da:.>84:]>e?K2N5[%[\4)V?<,%nH$cf9qDaY= -G,6,s.H^UU7bE_H\T'Fkm<03`4g-kE0.nd0O;1YYC#%i=gb3qa[S<^rV)]W_ak,BLRVmXpEp8 -gs5,Dr?[$_H]gNa$&0RLr2he -%d-]\.;B1@92?dJc_b-/p1flTOK?cKAQcjb8r97Te0GmPl1"#_OOh&J?IUa,+G-`cH$Pk<;=j -8I@1>%%$67I&,h8gm-:Pi/O4D./>bQ2=3]:RrLSjo=",4OMt3>W@2]1r_?JJdU2 -ZpF'#'$6u?O7+(+:nMilN3aisReV,l:+Iuijj`-lk#de#g4`4+F-f!b'bD,>tX&bn%g'dNO_2 -L(9hHO&ijZ5Q`:Ze<9:+gDb\$6'(k8cDgC;NsJ7+;ua`.8D9e$:&>Njj?,Q&,JNJ#P&Jf!1R5T-2QQpqie?jXH!?K_[e*Xs?N&lO]i\[TQnG8-*u -d)>m!e-H>kcnj[q7toqdN;;g>Y<_N`/QSXMn9<\ZV($jBiQI*AiEML()Ai8q7A=cod3kMG@PC2+CS16*R6f#h*AV-ANh"Y=fN@hCAgUgUufm*6iZp""t[O-2dG.jFWs*?P$ -;.ne[VQHFfR0=iVHe%KUJD>;=>Gk,Z>UDuI?7:&/RcWRAH29I[qZaa?hu> -J"FtfTY$tmIG\gjJ/96:?.]6C;'St3iuQBQH!c'J'RiO0jX%h$m=E8_OQj]Tl*$;%g_N506c" -?G4O/;5$d5E>sbpS6"[9^-lF,)X4@t17RN])Y -:S(DbG!(Xb*gZaG&9cXd@Y:bg+Y9ehr+dI'V!6.W$7gi)GkIEHBRg$#E(m-DP`EmJYZ6YLnF" -U]YafBPTPO=`UsOXd[7E[=.RBU-$aY,4f4Ym9Wh5hofW#`Ku-Np8iPG5d"-@K1fo;p`rR#rXO -U#N&A57@#Ul9TPTl&C,Rn^a>:qdL_'r#NBVqM6F0S!(^G])@V>pX`crA.baQY2m"f"8#,f`Y9 -"C>nqBbA_QenLVhU;eZ.aP/U-G@M/FrtUhph%AaQ,_\6]V8MSR$Q04o]VY"X;d1Og0-`=hik$ -is63Gml4u[3:/#ph3IbSk-++Sbn'\r+p"O&qm]M[dnc?_*.N,4\ebJZ+L5"0db:9EGD9@1aF" -l17REM2a8sK@&gr3(j7,CWF^KVI]o&XWh\C?nP&3(q6k_+p=,qLT$pCAU>?5dau_V)if9"sQT@^GS"k -Of>3E:sgh@qnCR9pSi]OP\*c[=9fG.lC"?.TE@Zl2HV@dP;:fPc$>2@_E>H3g[M2E]na2q-PB -jBi#ok#""b`&3=UU@NX,25b">E\p&X->!Dm&HLBIsA'>a&:U?%uL#EJ_4peVT8%oOL^>bEAtk -ZB&Z"#A>^c[&\m#_B>0qQO4LD^HFq$+]$O\mqb235A(=i,%C6pdW_$LaN`=^XpG]LV#Wo#oX0 -$/%[O\?KSWpKI0+:$t?cOAYhbtDg& -0un,:`>Ook[azzzzzz!:\7t,3,AS89K7mG"p*0$!H`^!H(nUi%086N42K0lpA+>BqRPN!7+X- -5,Mrs4I"2:@ra)[?)G%:\q\pf-F$"BUUFl.Sp)^r)D_H&I2Aj97`IYo<81O9;[c$1hiH82A-A -65.gsm]%a8dDcRp368!8bcc8LF=L/QZKN+Ia3'QR!I$R$g*Sa?Ul,?%f_FW,pmmb0(DNj`Oi@ -u@nH#8K\ZAeB;LZH4BcB/?Xu>-_@=KVo9H*8YE.k1"/W;[*[A)BN03,Ef[?UHj'P_t -C'@`=k>bng`2A8i0RG*IV/1'0'5.\1p*Bm+-PX(R3cW==T1D7,K<%HrXJTb! -c;:"fd8ncJ$#6N1b]?Qsj=-A+_4ug]Z:]=.?!h?Ypq^#sf^`7TMqDV2R*">i^6/)BOq#.R(Y8 -_beN*]G:SiD-*aS"1zzzzzz!!$tJke5Hs\;e(?8+sKZ]qOjDGlnR)24q*-3^D?)$/9E^DjHdO^Uhu$?<,XU*d -#V^5HDsRH:+S-34;6.59hr=qmLTsg[R*gZN)4?$t -%pd1eNZg^^`I'HL,8SuC*HQgut[C)a*+qmPsCb,G"9,PAgngh"\K#kRME\7"o[7(IW^<0R[b= -%\6A[\8@01W1R@XKNhB.qo[m@EFpb.,Zd8X[ZO$9KCpjS$"&gOG+7"Aa3])FjU`T'0Zu&*Fp\!NH\YZ#WJ-#WN2"^aMgH#M0UF]XHj%\o4spLn-+WB8_]q7P28AOa=Z -_]fOu]A_sJ&f7BO`.'/E)K:*PQW_)J5Y2[.L"HNkNsal"@(%#Vk!JC=Juzzzzz!!'eFin1Aqo -^IN<-q!LP.W3%LHFsC#PgEDOh`DUd'-E3+FA-OW2:.1 -]!G9;BS#s8FqbV%Xi;`*&"%;Va=9c^0 -ajo8-JA8MQkUXJYusVD-cC\TJgaQ`@PFsD4Rc:CjENe>bsa:\nV7n4`f%E%cS3^Ft/;7 --]`gCi"j@GI&5hP\?5=Db4;Ck(dpKgFLmg=QZB4;GE\MBS=j5Ii/8$U(Z$2L8H@eXP=#?HS9pnl/Fb5j*('WdX5sKo[.4T -pEmGEX/`9bXukdJb$V9X/2q)9h/kf"$8//eUa-U6KaNA`N8<40!XB,7 -F\EJiK(>]$U=[S&FPXAH)H_0OuZrg=416=#OS)TV<=s9l282Md!cVC>q17Vr$l]*j -8n89.a\)c:!)mVBUb_:/4Z_JI%+_c[n[BZekVUJdW[Gk6Df2Pd9QIdL>X0(_mR+bF@Ijc- -hs.5-n7Q:DVH6Z`R3RVhL^m2ca-a;&^I@a#t*d-4_LnMrSR\7&_[;Yh*.HrOtI$dD?]p'?X+Cin]P@hqYH11Nb8o,WF=B\uBGl^R1cJPQN[9e"?!\%.i*rI[V,k[E=AT"5/a:'!H$"Z@zz -zzzzzzpaR]ii9*]s'?&J[#eauH/ -nKhRG,%&>68t.2q<@?DQ`&JD3SWgKujQcceV'>qs,A6+C`D8-;DTo2O5#Q=I. -`sA4j-Xk%0_/;sUQWdY*%H#<c>)mIaE=!QrR5]RoeaNg;q??nq:KZV!@Q2(iu -[T#R.W$?!a]3kShCF<%DS1CfP=/Z"-g-WJJIpYS%VEoUI6GAJlX<7b&9-AQ?dHG9+(+[<@\dM -ST^&f`\^je6THBe5bSBcD!ks?KR@bosi^N1X!/AAPr,aGtLLN*e4Q]]0sUI#\kl*?]os^[rnc -Bm4K=!(!36lJtA"'9uW/eD4,1,W]&GP6#GD$.PXPqAL*\<5MRMH!)U3;`2b@RY;oA[CK-hV,U.ZV^O8S8sW7Q=m(1,&V@8KM[/6fS"1FM;;@EaWF( -Oaa!nc'U.i"Ds8:ab2/1[AFn%k746,nOQcf@,'0j(/>,g<`%k>u/@>bk78G-i@npfhu-gYSDW -mi,k1B7D7)g`l_I%(sClFA92SoS2X.6S2ESPmlZ4pB+_+-G6N&re<9`k"Kc0?LR2WFBjVDan? -$Ht(kPbD83a:VX^G^ojAQl.`SaPfcC=_O`HR03=CtElkk,b?'_128A-3;7?+m$@=&9,Djm7qe -8urMTI;ons-S`%Vo'A`&Y5?Y6j3pX0&rE5N0>8nX<MG1:N@d#cV>,-K#$m%&;]a&b+CD:KpMnO]kA.l>hg='H5-99eAD=nhrEk..d^qd,h`dL7@4FL@L1l7GI,t3Y -B`q!Al4MTd+hZ$JcJm$7o;-#8*LUF-1MGb<^-u&\jkW2:I*PJj0h;74%KU?W2f%&olki@<T'([*SW1raEeYYlrU*l3GIGp1IWlV55lnOE3/F1nd>8lP"iBEN4\GG* -ka[p&nfhK"ERcU9grL%cB8+ -r:o,dJ:V>)UV)6KMh$r?GHF'[nX7C"^`R7>@u6hnBVH+%a1P]3<\f7rMGrB`YuO6FqM`Q/%OB -dS6ceI$OC5hhL^@eb6-'Md1)uF_c6WgfM3!jahWGzzzzzzhi'c"glE:r5)mlpW<@h\^/E)H[u5OlY]qr`uV'X"DE9rMDeoRb4:A$R%[4Q,=t02V36ok-K[_L8;8\Z#li,Ki?aHn)(l -m%9M<20SBS!7]k>.C)aPUfl2Ps]F0AG*^m[heRD_nc(Nfin3#40*I_d:=W^g.Y:'9l*Y\KoGZ"F"N+AqOmfA+]H:PREt&Oru1hUrb6g# -[B[!'Q,;8JUs6quo.O17$"7p6%&MY^.l?j=Qr1+7[4N;nLOBDE6cDB^YI8o>W"!LRPY+_tQtr -$FDbQ'.-Srq8DFSMECrWqE-Uj&MZ'l9W@clIqiWS.^(kUDAB:HpDT0[<;rqbONnJ+\!AeK#PQ2KPNI_E'O0@Yf&6rbO;n)mW%epMJKdPs)+5Rh;-RS`_f.D>jKhJ$7q -f<;6g.h3>0)WGt\Nia>eQXCA..17db"5p(5e9KO\t2EOt21P9-'-D)hhn!d!8C4?UGgJ0eeD= -/bYT>\2Z/6DF[:tn,MR?J]S1Hf?>c*aG"g(PKaM84]s0X[ - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF - -%%EndDocument - @endspecial 396 5096 a - currentpoint currentpoint translate 1 0.45 div 1 0.45 div scale neg -exch neg exch translate - 396 5096 a Black 3645 5692 a -Fi(20)p Black eop -%%Page: 21 30 -21 29 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 579 a Fm(No)n(w)-6 -b(,)24 b(you)g(may)h(click)f(on)h(either)f(the)h(w)o(ord)g -Fg(Pr)q(inters)h Fm(in)f(the)f(bar)i(at)e(the)h(top)f(of)h(the)g(page,) -g(or)396 708 y(you)g(may)f(click)h(on)f(the)h Fg(Manage)k(Pr)q(inters)e -Fm(te)o(xt.)d(In)h(either)f(case,)i(the)e(ne)o(xt)g(screen)i(you)e(see) -396 838 y(will)g(look)g(lik)o(e)h(this)e(one)i(if)g(you)f(ha)n(v)o(e)h -(not)f(yet)h(con\002gured)g(an)o(y)f(printers.)396 1117 -y Fj(Figur)n(e)i(3-2.)e(The)i(CUPS)f(Printers)h(W)n(indo)o(w)396 -2797 y - currentpoint currentpoint translate 0.45 0.45 scale neg exch neg exch -translate - 396 2797 a @beginspecial 0 @llx 0 @lly 621 @urx -416 @ury 6210 @rwi @setspecial -%%BeginDocument: figures/cups_printers.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_printers.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -b7b7b7 -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUBp.Je[Y6#VRe(FdS/7Y#N/Jh#3ACK$'G6?=3K'qE>Fi$5PH+:e,oBe=lB\mtS#kM^!I -,Lj!1q+HC'.66C'2caC'2caC'2caC'2e7W/W7E]D>UE7T.:'\;ZrlN&Q";q-;cd!T6g/nerPe -W7i$KB\>2C'UN)ZP"''8T:a[;i!EY`2WL"l*lWhiZRTEB)Pb'+K`M@0QSLD\R4I/=Zn%'?#`> -d+FtYl[GT:%,[_Zga(lE(OCEnX7*d%PsfP\Er[L3s6HcuiQ*Q5o'EfOUZ#857R)!r&*4E"G/; -Oa<6/S:quI#]#Q^MF>pWM+J\bJdYd%uC'te?:tt% -#I2OuW@<;WB+6=R4>Higu.E_4(lM*#!c7q#+!^tf=#E2X4.&uZ7% -&#]rM$E+Cr&#]q"&#]q"O7Vfr!70ZT?SDV4(!aq7g;(:Z^.*P2lJPP72B22?l -!Ha1f,lEX7eMFj8gs\%TA:IgYMG@pe%F3Ma_W^3GXk:4esp#dnZfq>*h8(*:E`mU;LkZ.1cPJ -_Dql[11sdpFe7(H88dE@Y3>/W?[8g=I9Q4S(]-kmd-9=<*Ru)ht;JbVsdgFf3LYk'OX@eg=jMs1Z_J9@:9d=fC5`]=X6[pdq0;jpJ&W8J -8N1BPd)F?`]LR@5Ga8fRr$QD3KAeZYs>FoXSZoD-TQT#=mm;H`N.oIos+$VuN:PmnMt-S":L? -[*c3Ud`2AcVmFTEpdo-m^NQ?Xo`r#SV72D*4T;OT0NuU]GeY9co@-jEWD71 -rtn5^=ZL#*o.^bVOLrZqoc,d$r:O/hSp[V?b7g(mumle?]nBHB?CD'b1,e0b+V0;0T[3q/gsP -&<0IDg\n=X2[PD5%BoU`dfWfF'hcs1Tl_@lD1)(-]j)IrIm*A.FGRTCNK%>a)8Z'e)'NgG=NQliESHgnjS8ODmJ[Ve)'VuAjl -cPGt("Q(Ou^7cWT2N$9F8>blYZL2D-UpQ+d"aY'gtMg@qs0rNqmeM@5=T9QI4R&eM`4TgJ[eT'1ll>S -#*Ptk&%"^N23$6HC[#T'h2*dh"&)&DX/TTPIgFb?*OMbRZsVK`B%ENQ3]?JS"1EB`pLoYOdS7 -trO-C:m1p(,p\PJM6,CHLN4U%b4;0"\;6qbYT0rD9m*QM2arNrLd2Z>+DSPRCb,lo&D3=I&Uc -.d&"r<,TCJt#L#i[]j'6E`u[Ujn^.]><"LHk&>`unXb9"7VWP$Z2M]nDLOkp(IW7T7epI+S%* -:qj&Yapfjkr/AcB5EZAaeOFGhITZ,pDR8SFf%LP?4e('%c-#D>qXRk#2s&dTrkKm4;Y"SGhC% -.Ch7uH2`a%JQ*`ANe*b$)!/-"=Mp!:psGZT?UGHGD7m\s[=X0$cAF>Kl_kBfbZJ`)A0c04b9q -F8>#`AW,iI4([Gc.b?Tq5S(Omt+Bj)G%`*I(g@@h.2DBlONqj/>S++b(/YaG\6/=P;_CI[-4=6`$%Uu^QP]\RcW@c?> -%;SrN7Gie0Ck*Q?-b13Dni!>M;Df6?&R#XuCSG8oo(9DVhRFE]m9(RlQpB(20Pt"bA__UF;I, -PK300Im#SnRiWm+A50gd<_ZLA9f5YO2F:?WCTTMsHhAAQpi"dYmE5n-"96Jd8V/`aUD#RNPg1 -+=PqR4(9mAL56\qdC8+##KijQt$4]0&mi4%g\-NS8D)Fe,O?MGt0OSe/*$'F$3:2^fg.SR4!l -*oibQ2ZY/^$1uH+Q6$0dHr,=-of&HBd9[gWFB)$3s523CnESWNE"NT8Bcd#eJ?SP?3MF7(q_; -Hb3l7-^bF.>HJZ$/\+VTkNg[ObqD)+u'"-A7]7-lbhFtf^)c/-d'^a]#Q`uB/,*irMi7I -ouGu.q^g6HG.WPEqb.$TSN4]K>LU$X%])[F^JcdI`AOH'AtM[c8m+c'X`eFg;-P:F2.k]7Ip: -e(nm[i=,)3*df?2!sI48)g:8kb[[Q.=&Y*3d/I-eJRq,5B0tI8CTgc5s4H(aVJiDsZ4X)Y9qH>ALqACC9Un''])q8s.;;kL:XF&8`U -15ocl(Rs*JrigXQ/(A#.K#?-H]/WR-caqlp`ldU;`>.0F!eX;>>gJE"SekT26\g_37E965:W8 -,cO3ZC)4I[[Zq;-WM=G,V4hWgn!k("/G/(s!VD0==^P*I&enp\JuS3!pa@I8;.0U,XG8a_T9A -7kkkT>V&sdd#AGraCmn'>R-,HU&`6^L_TV_C#@S.FA>>/#^7D#2o_d(b0Y.W`i=&3NRkEcI`o -mTB\T:6]km72=n]!Z]_W=Z,0_sMj^cna@u3-K'\.#2Mk]\_[)H!SId6WDjSZ\h@]X+14o^[d4 -D-[u.J.XZ(CBqeVr#*m+6DqD<_O47[Zn%&hrsU9QgSZ?kAZFWOa9*&h\N\:,8Jh1iCqRgjC]o -@=^XD$W@/33s)1>9RT27\U]3%B6%5'A!YrJTo/?J7E\\`&kGCn$1.)jO7Rg5D_,jn*ij#M -Kc-Ki&qV6TFGH(CRf\QcPt"f%%'>5<:o]V:Y%3$!F9j[*a.Uc:h`JDFQlm'\R<_(0`M1>5-/m -D1-EZ8D5S.ae1;,Uio]2g2[kf`7-1rF.'8@gU;-ppA!l8SIG+$_hqA\!Ib8f*W -#+'eb/n:qNIGgZ,gu*lqYeuEC[5#Bb0MhI&5s[rQlEbD;\!P/6ojH=LT-Hk">n:q,+E0(g*CL -FK3pciE"dq/oF5<-=Q7#$)iLLHPoXX6'N=_Xd<._713Ya49HQjXk3fg.Q]$O2;4+msX6R+$DR -n:qP<[S`s!1[lRd^)J>qoqNPI3*2dEWNa?Kc]o:t8_7\lEkJg%E%iODUZ/lF]h?c.qoTm]B3-351@*Zj%%9C -[,2!o92YL%\U4iVm=$2&!s9>GgD4453RBZ[l>O/Gf<]aer%R -]*^$)n4A,2A+uU%n0)a=3$b37:XCSGJeV[^E[3H.7&3ejOBG:n1mN22d\uX(A1,fik?@?p;2M -:$-%Ig%!'SJbV.2f30K7Xg6)G.fpC)mUCFuL]Ck%Q7NM0-mu2:A1=g?'752WoR -\u(PpM^cDRr?nI\<-pbF=3db;!\cHm;=)s-=iACS(/!oMRa7>WK2@g"54RtP,m&+A8+b%0P8H -QI9Zauo4MHXgisg=GDHe>Lt^;`>)[(DG=5lXQoknuOjof -=\6Z+)[6hqRCq\\P:SHmrOu,i#MTm;; -n`9T<s4jpZ?\@:0:;[k)2&7VbnFb.#d!Z*j!eY"CoIESCTi^9+l28k#p[4Ypqd<8!L?;lu -(\)U#XM?A6RT0=+&."MRUogAD=\I2;OF!nCDth)dX]Oo -<2QdOL>Otp.h0!8jhP5!Gj#)6[mS]4O;oMe>K6urkD1/hkg2$KiB.!3E:gU8$s!k-.jkK^GD/ -ZQpdlh_"h9-,CZ-TLCK.BpiLRAI"]'Z>t\je9C)Drk"(DYTT-(7V)Y;CaJ2;ru3K<\GPSD8ZS -g='b-%%Xki1tlY`^%IZ07AYj$BpR.=a0q?Ao"NA\FhJ.u'I@+C]fXqro!CAlX]jNmC@b#>UM[ -Aj*IrQ4XMsS.Y9sH'!l#RPgM(":?QX.cD9)^Wa3[F!KQW.9gR_-7D>TkqinTAm&]kj"Bt%k`f -PWdqii]&74_7r;OL',^l(%I=$uOqD=BNV7gbWY9JGW^^3-C4Bb"Zd#YK#*i"ZTj&B*]UH?X3C595aDK6Vsu"1h?7OZ>gD*GjWd(#[%^4-pL3srpWGI>\g@rK --PVc5A>G4=nahqQB6N$ICRcZXXR"+!_'j4KDgTVg;<#Q5ga[m.q,o2TK,[CgV'<7-,iE..13' -f!&'jm?&bV-1MG((=\>W&7p`WD/B);BtM76tBIIlj4EOU3^Kg(k15qlpLH3#Os$6OB"0-ub@YG -u9,boH+-Pd>;lfe9CZekHl(TG[%%-u&5Cjk?2zzzzzz!!!"DF3(-=;=LVZ#6$lHXs1 -DfeHQ&+)mQucX>[RME%?4Aj^Z$9XPhp&X>Wc6^s15ORsd#t3#BRa]:>g)>a"7"<<-rif2C`&' -8H@)5!]l'J4Tn@+%Agi9eJ:#5Vr_RJ]S$>U&-N2D#d8l$FMm4#do5/>j:"kZiF?AT%_7('YY% -#B!0j8+OgU-'&8Rma,FoDd2f\=>&l8&H7NI>_H1F&H"h]moYk$(QJN`%oXC8 -VB`#KgkJn"s0em%Ao`,1rE1B9VmZSm#UB@!-b%5hb3I?E[VouJ;Zo@J;k"0g+2#ha+)&IIAH9 -'a.[mLuT;mM"^eCn-S+CJ37T(oF]AHXh_;@0YrYDO6>L)pbqC=B&>R_q]Sd3aLSd*2)zzzzz! -5L!)+1n$WOc\gH@UF#U?iDVu.O'H?*;`jr/&+?(t]PmWS5m$jdb-fW\L!C)s -45]"*+[]I"0C4gR07<3/'qLJ0>D-TTio$i]3(Fi@^%?u]sQ2+EHdVj]jGjlJ:a&!*qP#iT"&t -QLcB7_A,%:"Xf/ZU<]6VGt,P<`tm'(McicVn%[^$t;*JY1+U"5Azzzzz -zzzB#+VF?NjscC@2d7_=Y,Hb'\r&'lseA_^9b&d@/8^:MTtIR5&XJ;Vf6H;qj>_197_"As9s! -RC8T!4l>JN9@?_k%XfJ$fT_d:YjbrMWiF9%=7'dg%qS%A2NjO_cGVBTQ:t$[n[6IYQKt-&1#j%AV7(-Eg;;Ec[+\VYjD;98]$Dj5RXJ%MdsE?U4 -6d(fGe*?c9ljt?"g2.!2m1g/q/@kna3.S%@0&mJ7YY;+VGP%igcme<`$3*OCVq9^fc!lTa:_h -.3OS\"AElo[>"7eoBI6_]n0DA-/[\F=OXdGTI.i`Wa9WBb'K*_$cW*ru];gi!GBE3Cf:QpYfL -mr&oMB?M[4sE>Vd>LJ>f&F7M^=4S@%(k=.Iotpa0;4iV7O^$/PR3e/j*!8<2sbq0N*WJ54Q5# -28_arA8X_<.d9ou.FA%D`kmHU+/7W;NJYk0;l=59glcTNe(:71/1QZ<_Pfus?BJ9@asNlAgHf -8?LPeY;R&N.Tr!@F6]F,sDa5#@"g76E,/X84[iTci(2DY*QH,?fpm]/6L**NYhrOOW,X"C=bX -a\SKXuQF^nnp\lC -OHjQ.h(A:(:C"%PtU2dS@iTOhN?*:.ocOpJKeAb%:n=#F!QWG+VeNL$HVRf@)T]fOd"kVLV[B -YVM5h-YHbfOV3]@O"):Ha;t/>F@H31e=BOYE5,17"GPrd_PCFtOfB7_E"@q(oL?#u/kB?mQDe -.,9Oj9bG\5C&2Z%=dWR/r1Npk13%Z/3m.B'*FZTi<:UXq8Qfq*0NpBG=!"Fo7Z/) -M5g;5L\*i@J-A9X)E[e`5BU8'4K+.K(=]W^\MI[&@VhC;HjT0^G\Wt46@U-Z\APla4[V9>V-H -W+,r@#'&/ul$WdSGp)>NVW4Ok.,R^ZT6"Y@'jSENguTU9]UKk^kBeEhhCEV[>@%-^d\PMWr,m -7ER]X'7K_.Q7T.X]I.J^X!"9(VB:EQ>/K[]V,bRa^8Z*KJ$aZ!I58Y4C_4d]VeQTkQc=]`kmU -V?W1/,:`n)csa1ln5V2nlK%/na?IK!VBD8*b/AQ19BX\1!_Rb:A#U\e6BP9IL7j*8rj99Rr*- -2^fYN>Xi,>(1K=\sHuSHg-6n,YlR>KV#8mFEb)c&k0V^MpPA_09\:&>9oNPmEX!?TA]/]0e1& -!guNFiqh)%u+s?GkkCLUXdfreYd9W/4BZ&WJb?6m]'Bk%(or*m -o='CXTs6eRjiY`C&c"R&G/F`jnfXY% -J;"1_C*NllJeGJZ@?9WmXp477K%cO?3K^0(%(1e89.nE#g1]POeE6*$%A.7"FFO#+6"%hb,:k -LkFD+LgEO/YMYY\`(-UY1"d6s\21.@3UKQ4CgAK+QPTH0r=5V%DiCfhSk6Z\b^)4/qF,=@kn2$F_l_RP]=)K[q`#i8dX<1,M"d]9VSX*m -_o@@KkHWW$S>.`;UAHi(#I.jfO!Gg'WhNr#*/GnPmE=Qe9Bhqi\$."BDcHoqe2i!!(sFh"?ec -H]E>]=W)s$BC1-O!u#)V_raIgigo%4bJf&rY1\N>;o-6Y]Tq2g2*/)=i6L-Q84<;[[g98VDO4@!T#iip;-rQh^7%^92XbY4]`1pi7 -?t&I8#au8$I+Y6fdIC3pbUg:7!pBiD/qoeM>iHAIao_shG -F#.7m%1%Bake*4XIr:A6*E[KeV&*HK#on&)Gf,`B7-B7\<2-k"*SUUP6[G[b43ZaC)5\j>UXfSs+QsXr3gY5OG8VPeT*UcCGAipUsD8S"MNRYEDT-I -\ZdR!Geg,@b6V`#hY^/uhhj[N-23X`@GMjcB!m7eE88QS4cX3DdbgCU>mi2bCCpoi2nn.5OFe -J?BBPS?$%,itq2nmAIV)+3\jlVb-58ndd.=AZ8J[FLe(C#:%L0NSRZmH7Cb8V`RM8LlE?>WS9 -A1ink$;dts)9fjeEf$;gA_!6Vs;tURV2KVu9b-S5*M6g3O9u$K?C3q=#,O*Qtg:)o_E?#L3". -*J\-^IY4"(0WMP>gDclGZ4*/J="\;iWFM8WDN$fX0uRB1V:$;Yda`XOb)0C!J=6&&Z/kBSK.c`KA.lPDSl\08(GKO^LJZBr1-!(D\E$LcNV -j!P^S!/f%X(f!'EqR/KTJkaj=%7#:*>%DgTXM>(4Hf8(-eG-1ZcPZ#YfWlHo062/?A=/=Q.kj -3A'",J%8osNY=[#W9kndm=R@R=[JbJB7ab$[Ct6Y>q&eX$5Ibk[-OJ`f6[r1&06<0Z*CrOD^ra4g&8)"9Y\2XiiSDrZVh -+2ImVakY0?~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF - -%%EndDocument - @endspecial 396 2797 a - currentpoint currentpoint translate 1 0.45 div 1 0.45 div scale neg -exch neg exch translate - 396 2797 a 229 x Fm(At)f(this)f(time,)g(click)g -(on)h(the)f Fg(Add)29 b(Pr)q(inter)e Fm(b)n(utton.)d(Y)-11 -b(ou)24 b(will)g(then)g(see)i(the)e(Admin)g(screen)396 -3155 y(\(sho)n(wn)g(belo)n(w\).)396 3434 y Fj(Figur)n(e)i(3-3.)e(The)i -(CUPS)f(Admin)h(W)n(indo)o(w)396 5114 y - currentpoint currentpoint translate 0.45 0.45 scale neg exch neg exch -translate - 396 5114 a @beginspecial -0 @llx 0 @lly 621 @urx 416 @ury 6210 @rwi @setspecial -%%BeginDocument: figures/cups_admin.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -b7b7b7 -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUBl`L]QA'PR;nhpV_@OJra;bQAF7B*?EZ@C#34#RMF(ZjG)TgXtZOK7Dgt=:HCaA*!^B -'^\"TT5+$+5?+JD.e\5]'miTJeJE:`Gc3VDclDGPta^"k)/5Yf%$D-Q'M_GU`$o*T168H]>Kc ->]#CFYi67pKr$Rpo"]ACnR5Dt-K#NE=eA[e."7dNWWO#h&cX)5G>o!B9@+_-T>*g2=(PqTA_j -0K?VClI5D%ToKtCBj<7P%#7MMfXlUE(;c$VutB+jk1a9g[@UtLT&:-sIm&riQ?[u)IP[k5n)/ -I_%_,Lk:/`f&VZYlp!?:qsM,Uc8Le,?.]6=`*,gK(`)pm(I%$6%6(eX-Ip?h_o['IhgOS_p7'j-'ZJ3Z'\$u+-N[a8@8aH`;2dL(2p")mV[kSZ)t/e!jrp2C ---Qfrqqq3V2=FL('E&54usJTL7-_PS#MAM"BSZ/f<,%Rrq#dPB4^:Ehj-]GC?t+U`Q(IrMdg2 -R1,E.jOm69N.Xja$R[VsAO6rS,T;TZWap.3Mhj-][Bfc9g1A+j/G?7_4ps>D0q$cOSBbn.+CM -`6k==glAdrp7m^)Ob.:HH!E-20kl;9Z:R2I0GEk+f&s;J(&jegWNnX,X<4343lNs7odqfll5Y -R?:@e/%p0TIC^Y;F=M+GT;9KNCF:(UHr+l^IE\[-.uYk)%PJH!@PMZrEGC^%W/gMW>cc3ikW< -C(Rqi(_hWeQ3e&jfSW:5Yf+&ald`6%Do+D(;6NN;I>g?VfZ\kt/?gX#I<>RTX,I[ZE2.^+nQO8cB+_iVN^CCt?"NjXSGeA2SbfS_rn]9UT PU> -+PYl0?1!%8'fKqPmQhD(k),>`WJX<\nkhI7D^mY%+3q7T#4[D<=-ArFMc_ -DTq1\N\7GrOL$3%f#^E_=:U`6PL$Pg]$n]LPoKlMq"3fC>- -;AWTNGT;q]U(4?cq1o2GU -Y5q7a%4-DLhe+AWY-';k`hQs;iMH"ZDLM`7?Sr[9@.]X@WQ;]Zhep0o?ig_.EZD#7J>pRY-rY -O0DaC6EDiQPnKI#fU#qdcMrL6`MdheLcoIB44-/hripc(!rp)l6_/e5 -kpn;RJrbUnC,)-uJE@f#3N4eQ.Q(<)dUd.rgC!r]J<*[,8?hC'tKk)iYq6>F=je^.laEW_LT0 -S3F#mbN>U_g9fMDh"fNJd\8M,2qEU>[>q_\*U2j2MTlo3SjC*X->JH-;"f6geWpJOXP0U$ZST -nnSp0lGtjX0=oUV%u9Ea*@ldR%>9D>Ep`$YiP/P`D)'3 -@*rl6#XZ]D>h2n[n>p3U:7ERl=qh_\e6ZaW:m3m,i,2h/lgXt%bdMMcNq7e)l9uY`bceFfopU -MSE]+S8#7TpcE4bEm$D&,3N8X#\f"0%U017&Q(03Qj:l%Ae`K=*R;k1W=;6K"G.impPqP@)&? -,q;2s4Yid7F$?h4bH+mSSlu#a^X@)2(Q_Obh5Yj1Ka`OBD$kr_SDY=*K-5Z2+($5>#f6o50De -2&!C&B+-=,BBQ)g@0GhbPiS3Zjm'-6-^CdAmRQ'u'$!STpn`)']I1COSneX3qG[cJ6\_L(2iM -'?gZd%!ol8EoXdeC'Ppa78APqkeV;,*PDIRatm%(`T[_#^Y]iX=a0S_BUX5(-Z7OmYs@[ -SGWJ%Z?j_g5=KR[q7L:Z''OKKLs-@]I/+QTJj^*geBf\]t63hWbi1ZEPp)X/g\fuEV'8/L=e%s_p -7'j-,.2Sr9""XpD7E/Ft)tVC'0MaGRb","LpNXi]GlPM_JHXrI++sg][ad(aU37l6h>bIeH8, -S@_&E$_sQY^+qb-f;Ykl"_n-fB^+0]F,+uuVm^U[W"&B-Ugq/,9ETa7g<*9c2UI)BcDWCtJ+c -A-S@_&E$Zj->>CVmJ$O"0t%0-A.zzi1@%-L47H="^DH*qBfS2cabG"K5\kDs*V*&c:`"+N4?h -&'`+*]2lX_LYj3I9B=s@/%ST[Y;bjr[)-.Wn8-^U#Aqna):9n0 -a\DE'5E_Sp)Wff3K$N4Zc+B+jS*;quYe3VU;Zemc^SNN)-O'6*GIbP;B[)MS]*5tC.a1.pD9$ -=)>%!TW-3SYhV,'K,46e)m"sSIM#K;!m+Dk+DiFj\Zkn3a"-if -'H9`VQpL9Ep<=oGh5PMW'fB*!`8:0)JcV_W]$=`9h2GeK\>Z+'eEC7^R[T<[g%pM55?X'A0(F -q5T^SnT.6kcf`$f7?M+0?FlL%>+`K^LuT;E2W@`f -bN;N8@QU&PN/\gfRJH!GSg!O)g&kJaJRZ8^/,7?LpK_r-AX/*.jY0/CP@O9'32N%sYLN3/dZl!([SBr7Hl*7?(<=03^L/ -?Q@?EG@((>H<3W4)X).)mS;$P>Q2>&@rS37W!&,?(3#qT^#j,mBPpB-gIM<:;$u0ESkWeG9-X -\>a4'DJo0Ara(JtpHVp9%b(-3DkO)*sWqH\C(@@ou53`/Sk;I!lNNujC?g?Bf*;aHbff8;_5F -[LR+3E#&P`&G&04#)C%9Y'Y'',?2\uhA$N[=G-lr_o'C$O)tfq\Dk.s<.a,!CFs_5) -mOF*Tgbo8bVCtQP'jS/V+Ue$V-_7C)6=9-8^oD8?eTPbnfU@tA;["qSNpOhjF"OfIf,[8[54? -bTk4g9OT^t=+Ees:JRO#(JA%]q/GVA-"77c75SOXDgW^iF^1:k]F>HLDQr2Hu?D072%2jF]a+ -[``iW8CUJ'=NpDiHuW?B:\u1ePX/+D_Cdaap06'pVd`hX/ltGVH#LOMJan:^:C?/C9(R'R=F? -VVCV8ge8MD-mu8)mUV\"h],K^TbAg.ZQQ%tW0\8D2lL"FBXe+q@5f%,,)gg8IVSCn:GICF[\5 -rVX]cE)N9C&ucMVI@_b`&+BB-gNB@FM^M+>)8r=OGi;PA%@Rs,2J0;S0k>nZE7<.IGCKGd4eV='*M7r4AUfWh$ADUX7SCWb^Wa4ja8 -+O3?nIbIX8aagHHGAA47SdepeVhPlhIVBUYV^5R,&Z"PAN%EUr*#YPV"/XbPpRHcSQmqH]hQV -<;^*8DDUV4af0#=FgZ0k)moF9pK1E+&r@Wm$=X?'5Y]5]$EPB\>QTF``HQ2FH$DpTZn(Vq]]/ -Mlj=GNHe46j9d]nE#rmB%c'eG9$D?(O^2D7E"dm>g#-!cARG1;`%\nego`np&1!`46BjI$02N -/qur?m9W0-O+Pf]:er6XcpGZ(XY8m0]/bZ>+"E=j>OU%-.ueB86uLO_ -kjP0BJB,PX0r10(mN]ndRl-_C/%K=*R=D/4JelI@MYl&,_fMofGNq6U1(FB?p,PBN;p1Uk2A>ahp58uQ,I -Ag<5X3C"o."ZBl]2PQbB;c]9DH'G4Pri3O:?W=kYcX=IX,V"2d^qk7GjNdg;.E;mjI?CpNi_,mK -t"u1k34Z5"XY]ER!1I,gQfJQd5Ns&.RFg\m@:s015'gr/I7k]og#%(b3dVc&e)QQ.5+rYr1k2 -)LG<8^0/2mN-qEWPA*-pYL`!r`b8*D[P2S\fQ5%jO6T=JC&me40?d"_1XrL]f`?Z#RLY/]h2i -7iif2lg=`miqOY=/5LtN:]dlG;d3aes$ns^YWm -!g6-UTE)rjlR%F-'MF\OIak_HD2E;Oh37T@`WA*K-TiEYG -Lhn`-;LLSnAfgm^\]DQ`XPX?JYmXjnl*fY)"2GMA#RcuiW[(tuZ_l%l1B>WFMo?@bZ+Lg8[$rq4P_K]Ooc1Kl6bTp$23Kgo(.IU-r=(uJ -krbg!oE'f:&[Z/Wf!J+]a-,*+/3j+`j_0ud*6!`o0 -?ARUC?6P%?u=91pmg -bh8C]2`tOok[azzzzzz!:V""Sh6o/40OAYnW,m7.$.%,C'/Z)o4:`;\/Q[B#/G?me-77P\@f3 ->oLHCP?HF5L7fXA2;]F=&P8<\:d?2!2%N^R&92&8YqGoWY^gJoL6#GOdpudGi:`Ho'?=*iCJN -Mlp"1<^W'ki%&0$uJL^d#``!.O -k@KR8FZ%34lV:paX-C$NG"\N9?9%NXT\SDOWc^iQ$[b6Ct>CZ9Q,?>aLD;TkJMX@t8RCLtXSE -fWS[1s1'8*:q.,I^6hZV501<*F:?FaKp)7 -iA5J="eS:K&j^AqamIU?7)7=Bb^7cNf:.rt<).qZ^pB)bRpkj&@ra*-L#0%(D9n>J1:9Oi-+, -$"_4tu\[FKTOkI=$0NZHXM[F$dXgI!bhD0g?HV6#PUi`et:H!uH!7fH<+l&XS=`EW[+sWRr=Q0Tp4I"onW'zzpi -b#FB("CQC!>DiZa-17p4!uKilA?Zg*R#="4I:YJa%^=^iVhYi!,SErRk?Q7;=(;/MmgBh%$3dF -%],lq6k2b2Q6"tOB1(pe>@kt,q?D&*Iuj]7o5]@<40?E/s#A8@FCk1pNu*5C:bM)I]_i#TARW -<7Tr@FA+3oM&%TuLf_32b[G?k9X5M+4bfEL#SD"VEQ0`MIbUN"-a:2mr*Ca/IT1*K&Tq'iH%q -FA!"=$/*n3Cj",H/isee5C04Xp,<7B)CTMM#gL0n*lqjp/j($F9m>[G)No%u,H$rgAILiPH -D:9.kB;gj)LYe]4WJT+o6W`0ZLYSQ2WVJI.,1Q;d5]'miTJeJE:`Gc3W!uE*dJ=)(GO>DeI^I -b#2?3^Wzz^r%r%,Lkjemb7\Tbh_-^JnkZ+K<+QN3hSAb*Dd]B%]Bh1#Lir1inTcib)p:Pm[:g -=#dmq?ocO$VC7G$7WDM>,cio3IC1DV2$K?V_AuP)8S>:t>n/=L%&(+t(VK8tQfbW/ZQ.2A, -hs1VV,W#eo^'@W-'Rk6HH^i"(s"AtW4p)fcN4O)`dkFMYt'_N+*?ShO\b@lS+P8o^Q5T0uJ-& -!k)oRXs1A(0.aOpH*K%Mo)lT*sSm3K'@g>^iVhY?ojr=0HEt/Qju51&5:-*()ta-zz!!!"D=Q -Y'cg:YX8q`g(NgNut?/R`+-#+)e2D,sEob[N#<2I?k^?lS:Q:9m>F0O)B5g.R,9Z_Qr^e3ZirIbb!U8Cg!f( -nr`1H0n'hGL%b2Y,[(e^KQ"1?C.;d85FJ40B67T=WB;;l5?d;r^.08Z;0'85VB,q-WO!r3KJh -"-OS`%*r7cpVJ9M*78]gO\)@a/b3@4g^#00X0`VD<9riEF4n((%738Gf"h#nQU8U*iST#Y/i@ -kd9D.TB#BV_perRo='OgNW_[W8W3,VY_7J@k<&1kX(8/+hn3aB+mn%qX?F95Q*/4?X-W,40(HCLBFY\=(`]?`\nONBi>?CcSra[\:.5c++"@F%['EAm)$ag:fJ?e2D]RI[3E2>YFkOd(.]aa1@RU>G/F(J_In]5]' -miTJeJE:`Gc34=q+VF"Q3^5Nc\8teetI'\Ui`;;im8aET1p0VRD3Un@/G -X:@Omdb5`T;JePJR'#Jddd0KB"XqZhi7r<`s[J^QBJZH=TD=N!_mP9;_iF:]!8LYM$5De163O -O^F-cIV;%"p;%])GRrq59^G]#eVL-cHDu(s:On['Rt^!q82-aq^9T>a5O-Jif".K]$`?0I=5- -)uos=zzzzzz!!!!E&:X+iZ_+Q0r8?a-56(Z`zzzzzzz!!#JSP2C!tMI!,g4[OZV?(dS=.uuXh@Qqa\,Z5`uFnJ9VLgcV^5@Zie]L3`j9c8ZJ7dC7@ -La9l-XQe@m*4Z;qqL%T:7+82cUg_mWdV*c9GD-WL"g#oiQ#f[1V_VF0A+cQ2$?nU+B3JS#70- -9)MQ90GNWQ-KY,ctA;'.G -?Y`25M1c+!6%CK*2aZ=Ah)pP?X9nmZRk'\)7`-uSWY0pr(NAZ*VAO>deW(oodi7k8?G2WM>I? -3QV#B7S^gi4%bRq\$E@g3@dc+kZVVS%,Q.UeJGf6hZC\hcpS@%&>Z4k^$H]9lJ"oR5C2;hcan`PHSIgN^,'_c#E-Mga_q[G>)'9bW7&d7BSu*k+3ObO_;Z -)-IS`#JE>EJ'a1OUY88*M\:O%k:s55rZ9<0Or8s\E8iV3d6*Is/3Ci8V:,sh^=D9^idR!BNKu -'Sl7Mrl8ZkCNo-Prh[oLVBb\BVM-!mC\jIL_1F40e8fqleb;>.37A8Rp?W89]!$eEV$!c#>S' -'V/@fRMM+n*[Ncb1g"C*Qefk!-9smIKR2[),4kuLVAS@bn4P@EU8>;$j^s=:.6+I1=X1>6Vm' -t&A&[8_]lFPVlZ!S\5#Ym3C.T?pf_r"ZfoY?Z2uo?m+AVq;];lYI#rF.m7Hp1?OEb15p]=O;_ -pfs'pD#Ye=5P0CMou:8$?BL],,&+>c>)>AuQ@'>iED]g,*Hmei`IupJtMWVM(Pp]8j,XkBa=F -75/eeP\b>B,\qML&hCT@D6HmWMiEA5Ah1iJ@C'DI=:LR]n]`_'\Dh9=M]iP/Zb^=*LeEQ4'0i=M!\i+7uK`Z -r`u\`^f3'.I8'e[ZJnt\lNia81FKo>k1?e'R.#S=R()RUDlYfGKqJcZ>=;@"lVU!-Y>fa%lPT -@hg3Eh-+d:mZ),BGAp"sB81KD\SXmM[+^@AY0#E4onh)T&"OhA>AAX.]ju5KrR]WTL-^NO*P, -=J9_t=Y_Qai4P8TdGV7'G=37_Bu*&pS^Pam=k2`8DB$am`V:S)&rL%u"4qP1kmGk;oI8RUI8D -,`H3EB.=63PGYCZD4K9M)mLroIPOVHM\HDPW]4ktM@C9L`\JP$b1(%84f0;[)fQ$4C4"scM+q -8GW%HS)G$:3^`WKSC2K(7KpcQBon`*g`,#_5SEIOn6TMZ$mbr0:U@Y*(t$n8'l,K75DA2uX^q -ULnmX\WerG.cNQX[L$Hqm)bM[6:c3=\i3\2>YjH)rDFgo\n*lm/DWVC.J#=1sXDM;aD`"*bn5':+ -COMAeN4E_Cs0=.SXdaiFU2M34TXa$k5tqAiVo=`Y8^g/0GB4>%?2Wm'km\hh"_IDtEYPOA\A$uCU_J((^LT+2a0crXpe[,08e ->j7VCjQ)$7Tu`4JCrKO*=>,pp8V^ZXTqjFNcW:)kLorW*RN6E -A"?Xjuhh4k:c8b/3MVMm@JFoR/Cd#,@Zf]`1<-09nn8-^l1m4I'9iF$t]blo*C5Fq@kipBEg; -N)4EAiaj#0,=`%j1Qa\4/sF&s5XY-]L]USb$^b^i6]HI9UHjglnV\]<\2p -@kaKiDM_c1eIK>#j2u]sEhh;QT>a@'a7hNg]jl(m@HeO5*Y3XHB[Ep=rDt?PIL8HmG-`,dTXL -K94mo!\Rih\2zzz!!(q)nf*,D=9(#eT26Jo%&LDY%!-(`VFp$`U?Z[bc>c6*Wn!D-d.k6!6#s -Yrh\2jX?2C#m!& -qAf1>:_$CQe@+bQ-+.HdM8`ANXjiQ'hH?jq[9+#,D%As/:V)cg=Dgp_^RYupSA]HY4T/@GkOb -,9V:69?]sJK^VC**#^XR2%2AJRCXQso7F]rJDkHs/V$YilPP/G"tZpDD;:tsU"dZ^8gdNpK!C -2r?G(*f@ZlWH(bilD -.HHZspQF;P!-W:*)919KFW"2Eb*I1P9R\-D+/8ei0RW<<$N=et'/agX8h25+-=NC#I_eMOlim -Bt9=8[`)-ZC+DHp.@UUE(gWpq2%R)NK5O[[ebV29$KcdIb+ -N$gO>&@l'E@S0$SWoYS?W2@K3N:OXdE37,CA[l"oVA$WfWnFWXh)u)S5jd0T_CEmbsVDUqKJX -_'^bh: - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF - -%%EndDocument - @endspecial 396 5114 a - currentpoint currentpoint translate 1 0.45 div 1 0.45 div scale neg -exch neg exch translate - 396 5114 a Black 3645 5692 a -Fi(21)p Black eop -%%Page: 22 31 -22 30 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 579 a Fm(Notice)h(in)f(the)h -(screenshot)f(that)h(the)f(three)h(box)o(es)f(are)i(sho)n(wn)d(after)j -(the)e(author)h(\002lled)f(them)396 708 y(in)h(for)g(his)f(printer)g -(at)h(home.)f(Y)-11 b(ou)25 b(will)f(need)h(to)f(\002ll)h(in)f(an)h -(appropriate)g(name)g(of)g(your)396 838 y(printer)l(,)g(its)f -(location,)g(and)g(a)h(description)f(which)g(meets)h(your)f(o)n(wn)g -(needs.)h(Once)g(this)f(is)396 967 y(done,)h(click)f(on)h(the)g -Fg(Contin)o(ue)h Fm(b)n(utton,)e(and)g(then)h(this)f(screen)h(will)f -(appear)-5 b(.)396 1246 y Fj(Figur)n(e)26 b(3-4.)e(The)i(CUPS)f(Admin)h -(De)o(vice)e(W)n(indo)o(w)396 2580 y - currentpoint currentpoint translate 0.35 0.35 scale neg exch neg exch -translate - 396 2580 a @beginspecial -0 @llx 0 @lly 621 @urx 416 @ury 6210 @rwi @setspecial -%%BeginDocument: figures/cups_admin_device.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_device.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 416 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 416 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 417 -12.000000 -622 417 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -424f63 -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUl#u't[Y6#VRXOqgP(QJG*/[+HGMrGWUiH]MO*Z_b?>HMp2JoD:0*rIu>3_uO)Oma6^A -tb_1B?j]-e&@g#1NkF#LitG#LitG#LitG#>psEW-@i;_+-9$[CCgY5#!kYhYC(+6NQ+G#kH-! -*)pd]HF2ZL;2Zr"(s+"\o?WJ5!cSCi;4I/KAWIJ@e6*Hi(er@A+a?8ki2I.@GnJ1Xj*#QBAut -2SkO;qZJD1[djr<+MMPI2[Z8Pg\qP_S*i4Jft"(V#0HbXMF*!\(0c*T>#AO+D/@T%[G@G -,QYFo1#"R+A_'s,W!TLh.b=BuNpVrh#\ed(qD.h2L$6lM&o0[4TK&DC+^S2o)W9p0MR^^7[ZE -Qt2L=r+?p'*8^$cH1JQpM3l3",V#afLX28Yd8_$1+*/,R(Y&m<$etPr0uj=,1/A:`Hnj:`Hnd -:`FWn:`Hnd:`Hnd:`HndT>*Pj\/15*Jg'ni"=NqW2[fV05+c.uO1nf4.Za"a&tcpbc1-Y@-@g -eom%aHSKG%G&>fp^QD3+,GYJQ0@m%aHSKGI]DB9,pE6#j.AV)AXU>Wmqtpd'f(DjIpHg[\eu: -n+;a[U]@7pJ3YL\hecOCkUO'TdP]#=I?M/RbBTZmd,^-jprUp&n853q',H3d -FH;t]HqO3+@Rt9(JiYS;:)miXI>CTcT?N6VCk"?Mq^OBN*q.]'1M_`8aO!-2LSgrc*O1`d]KY\V)GpbiRQL$r]Vl_YP[82 -m*)E+NF%!q4q1%D>ni=o-`&Qpg8iN-+7u#OSF^K"9C']Y_dd.K/7tG;9l2@%4cg^$ZfPm'6g( -Oho6i%>>?u%m\pY]Q.!u[$O!n*=Uq+1m5!Qa7N_4/pIeiSZn8-3/I(\0J)QTi3q9P[*7I'OoO --PiL]ln^cla:"UAn$Z9MpaNgHne(bJpR@o5ST]/D/uo*$HfHi0>#]rh2/+dW_M!+4@F$B\#6: -Fk1-n>@QS8."j]*&[UP/]4'g3hZ*0PKeArrDg^[4(cUoGHHL1j5hhkknHjqRhXR[,"m-9]@@s -ba/Q-[14=8Jpsp2)Id2F!oBiSX4bP%i=Wg*gAp,j1]B4A'V+A87mZCg#Q[dM\H,p0X]*rcn3b -q>3E>>Iqkj^.ji?6]HS(ZM%9VrZ*MEd[K`A`k/4Hk4(,UN20Kk%]tP9\Xk,B+Zp?ii.[f.C2f -6GQA_.O8=,`_bPcbKX/!nJM(kN@4_5hqC@br./GMA@1Prtb7="HL)gMt97;htUC9qs0@e4@3] -faNhH?:TsR^1Yc/Gl>$W7pO-4r`dRfhp)X9Dif0`$f>b5 -kLZN@"-Y>0B"Z+&2P='(8M(MXFDCGuuKtd+m4'8m>\Oh"s-m)$[gh,ldZk6D=>Q2=qJm(!$XlI -Ae9aU].eD'bDgT]Bu(FOX"X<3dQ8m?2bLiM]5o? -?s4j*?6OR.3k5,H_0>rN>XA.Dm)gG'&mS"\fc-l,pc+uL8dJZu&&,:n:UVHj-7,_K9o/O1CmDXq:BFB^*$45<80+F"k`!UFQJ]0Le,&/#+><^"UV#TJeKWOc -FcLGDp2+C+CZ_g;"8#3po)J@`5HO><*#>"pQd0RIl4+cbUm!O00&h_ORmU2OrjU'`qa0"onW' -zzE(a7#A&%3%,HdhiHWRE9kM1RO+$;F:p>p+mSX.u%>&h[7Rsod4GG!sX"U@iGla=.oY&pLiS -D;Vf1nV2@hVVB!pX)tF&*+0![]5@T8mY85<,)>EV'H<'p:]-S'jFOKH=CLZB#dV-FF'X_OJ&*gRo_!)aRSh_,&Y9q&c(n'Z1b1Vh1j+V:oNSU-8!CU?HdpaGRshaYHa -b5t(05Bgms:]Th7'bVmZcYd*aN^R3/m!sbh]"#H]rWI[W6FG]e$B[o*YV@A4KLrV5B=4gV,fa -?(2i\c",)5]JXQ\(eqDT]5g4oIk.QYJp?o-UAFbuh0';^`#&@%m?.VhJd*T?E@@A3Q5X*GS=B -(_d=r98B9'Q'gr/TcJ+ge`n(:tpjd$&5FXrLqPWf!pNDTJ8WtCK2hlGQ[e5[?"s4#q,?<6nY& -oCq+]Wd&*(l6(7:T$p/8EFZtrEd%`c&(s-^hcd.b=!t6a?;qlAQ*Og?ZP^!MIOacbQp@8 -,"C'Q&VRL^^'+UEm?2?Tp,uV-qm9d=QF7g:]:>^TejI9nNmTk"k:3V`'M).*&hL%+0"LBdYF_ -TC2=`egrVe9YR*%N&4##_;2p9`Q'!)*baXVS#Y)`ZWO/,.m]IrIEO6#Fj&8F'n7H8Y^>]F]"H -qG1uFQ"!fCJ?^oLQud&of%?\g4l5Y7b>*0hR@2`td?.:l;-R\(>"dArlJL1;gZVul[p+88l9c -<(e=uF(@4+6t.A8+grTg?:2nf)6H=a82Dc2#=p0IQ(P4,f:Ee-8TpT`GeB[cp\53sa4MUl+G) -q1h,+*_"!UKmKK9^$eP+L]QD$-N6Fhe(p --QVAmBCGot5]M#\WQ.XRF(d":;1"3Vgb]gI+he3su\U*uZ7;$Mo8@=kT;LSjPDf2Mr]t6^GX,# -%\[l/2?gBP(Q)_JLqjP+d1m%pH]ZI[l*D9RD5g$6mfHb.nF.j*u':SSr)3i*Y7/(GO+C,"L:[ -9Shd2`bo]UFGk,)l/Xt!kd,S,j%n1I:oUi3PF`FKEDt$F[e_pJR5oG2O+YaXI`/V4&JLT^[W]==C3R,6F1Bg!BYEf8DbJimeV`\:E+\9.qQgs;0!HAN -9U&Sfs0/5?c)M_j[JqfQ?@UJJ!Y`?Ao/`"X]j(gD2DL9A)/\oG([[W0>1X]NQBP,Uohn:%;&dFFZ0AVU?H2.[b.QndqW[rdO#_WN -20Z&/KOJWNm)D+c<>*g:;Vsa':0"U^MU%GC#@gBVs:@lr3:7RS]Y\[K]Yd%2j0&Yr!>0:^?V& -e]tct@FMZ>i5AihLBe;h9f8/ZR -2T;V)A)n8WZQVe*2&q=052!bo&_rHpM"cU_$u0mT_cN#o.#i0-"CmmM!qu$]07sD.jU>Er3@m -HBBfe[29k&9sN4FG3(9<`\_kO0i^p'A+-)ng5pU$M)0T+?+IT5qHY`e[]RBjbrSe,Q$:EBQ(% -\dp@]lGH<0TZgRB_5%;36fmP9+]L%cCp*@"7#(h[u2i\eea$ ->YV^:),&UJp0cT@]I\j5Vr\[`)01B%Y0i3^dG?7tK]ecgHU$1 -6qer%&dSS5Zq&?BCQ+QAXDXTooLt_Kp3knR.(+lN2b09^gPu?;lI1H(ab -h[7/.U+P0inM[`CQnS&`[es.#[A@aM\1AAj1Rs`]E@hD8W*p?fPJF;OOsn#q1G9N,^1k?.EK: -X&@IeTR)[`*7NefFb@mD;kKCl9@49DJaYRHVW,LEHhmVW88Lg+e"KkVYVM(hlFEU;$G(:*qbd>hrF]30_[Za>4U*[/_Re\(#!>*9YTeB8PTZXXZXX_F-) -%@0fc<1<#6cSAYfp_Ip:dC2QRDKip!;9G0VKqm6YR29LIu\%%juo`V]ILl5-:SbDUEnIc&QQ40F0$uO2hY=m$HgPTumh=fAF$1:3`M"HV^[!V1,f^ -!.>`Rg\6p5F:15q]b#hWD32?'[MrpB6(4a1AsO@7VX0Uo[392&dIaQ^O)p-O:Hj-6L#ATgbqb -%$O!-0XQBEA%[i*HI&B3!TAYai7KnR/iUI0^ESak4m_]Jihi%gQEUK -C!/$c:4EB.k?c[H2GHJllFX`;hi4]r-%T/M_&Fq^\5KUaurb=@.:BuQ0](W1FJn!=K1\u(E[- -PW>EA>"pniU`fQ(O"OcCRcr`Y3X$p_&.*fDgUb2;q,o>XI2GP6V'<7-/Dt'8$?8# -d&&Is7&G6KZMGpXE\YrG@j??:LB)9,QTA!OS!/sAXj1-.Hd\WfY$J,l#j]^9H]":$=ccEJ1Ye(t'si"; -23!it%pAMjW7>1e[7`*7F]"Gm#>G,OT>D)08oJ3I,V'+22t-/=KbZ5FNLcg8S@2T8H=q3h7DK:At\WO6>n_[iH?aS(JYW -5bj6/9fllqW9_-9B0]Z)q&codX^Ct-cRbC2CC]W2T$-kYd -YkI6OEDJTr71uYBn7Uu'!2`'37Q!W1-"n,WoBc6[CuC==CuC==CuC==CuC==CuC=Y;/P`n4t<,%-9/Wm2Q)Ys"dZt&\> -F2Fom9+7.emh>=K)J3fjF7!\`Q.liLgGY[?atf,j_XgdZ.t3M&4]^$ms>$Mr(,C,eLC -M\tE,"ZpWLTXH6-(2@ob&Bsg'(T&Ap/;!SYLu*L+BL0p?g[fD0[0]((H=:9U$],G=`8Y8$'>[ -M>/+Grl#>j0]E#Z3=J4sfBH:_uDbr`UDD+nV>gXC+Y[3akhbKJP#1`.)O8Q-^DF247:3LHbRO -o&u>lAX'\q'mP8VAjYd&>ggGZnTf63P_sa#uefdYBpS;c^tKm#4BNB[G=>jj]c-N\X>'.gm87 -YEfScp2fKPqM%+J-B5k$++?)!Bo>LpMJOs)n2#mUVzzz!59!DpH%Ru^kJC:#Ae93]cB8pcSM/!^#c7\AY@^T2dE5(%^1S&+[=qWW?&;@,X!G]4qd5CQb'49hIU>4-GIda:i=#&nJV3%!p#pq`M:V\[nD^nXVM"(R`aMkLlYjQ^5n`9'I^>U25K%8>`4@2+>CQjD*!<+KI$k -')VOf)RoB02,FNAY"o$S/WmKjM'V(PSPa$V6AKSu4L/K^ -b!O_m!CAS%>JVuNaD1"M:kW46,iG@D+74FVJ5De1V.CI96,fM56N.c*:qXIG2oqu/\qSd-^-H --H#(sC%g[$*V`#2jdBSL\YLE*"+9&Nk%9mKfD]"SW$pM?JtU7*;[NYq:<7;oIC4K\iSA0I\X;g%78a0p+ -gAC2*L/Ok.M1N,5(HEkk]Q`R$@*I:(@[4)J0&H(A8WbL6i=8co5%M^P&(s"9EBB6O2CF7)T`7 -bn8lZLP%N,NQ_'Ri\tRGRD.iFCQ)QaBp?8Uk6XA_6EZbd>>:WN@&?2Vo@]oFAF<2NAAGhea+UXN:F2j"fp)A1ID7^#@`6" -NtkS*qKVk?Ka0!Xj,ebb']!,e>\XGTrZ[W%HZ_CT4rQ.Taq%[?8RLaV,.qE*]m!im:;ZlSip* -=`$a$B\f_(o)f79'1d"8?#@ft1-[g'D-V")X!_X4et&g'ESG3jM_pK8f(;k@1r0m6Kko-Bf", -\Un+n8CH3r3Q`d8l>[-95:1p"-?O&"QhQ(".gQ8GhC2F171CHdkf=`'m6pUlrKl=S.?d>MaLf -@tDTM2((Ve]*%"BXM,OCJ>J?*c*/RBS[0okON^?9P0SWA1*!o&E0FW9=*2?[u1lK(=k4q,^j; -UM.B$e2OnFf5+AJ7Mffgu^NB9;pU?U(5h$;W]54O22fIra8P0`PS9@bD^TC].A5tF*0C^U\-1 -BpDNO-?Ac-FT%*d.L?go\o/*S$YBI)b%=]n"gSQUSKF&]8OUn]cLU7:lA=V*hos!8u6uIbqm- -<3eq%q(S&;F?%,'3KAMeRLt[b18l$7F%\*F4uF^[`n7Cq*1*&Z4Csej`I1W]=q_=1NUE(S^95Os;H7A<2afZ'$'^mQMBCC`I"EgF9! -=Rggh8:epZI#?nFG`p'(r%rGFmGYC?+k?@ZSmG+aPmbc5JBKpgXAj3b5J!S(EkGd0;nD'FN2M -8gm)0JT5^r2]3IJf"Y5E2#BM(FL5 -=s@kWqj?_9dJB%_ah97Wg[ci+3H8M',kPU\UPGUiQ7*%d=`@#j^WbDn[n&!(bFMp`4sAcM&la -Mf[H0b^lj9EHVTFM-N91X7%%=;uNFnJ=)3X-H?c2OTo35Hks.h[geAS$6Ldlt@U(Wj>9/;u8N -u5R)2]:MRC3)mmnPFH5->?cB30u'GZjcJl-".Mb4]>4:R<2_'D:?]aD/`WWrFD?qQAA%=:!C4 -7E!$9OOTMk^9Pn\",Ppr2!IqDL[Q/J*AEc-@D-V#4AQ`%QNI6T:Jj%]SH%oJbo1':X.Ba.d?; -]o_,XjVS(+tST[9^h^ -nV9=+egeI+te5=2-!1E7Rg%e$1':i+nc;kS"MBZl]OX23`g_TigM) -5=]Y+_o;l6$?sk6hAD$N&9tE-.Bt4B$j-j5?.hrIt^f.6";POn`&$F-1O$r'dFW9i^`b!Im'V -A*mc^Kq>#ZA>_fmtG2RdNNQ'mG --s/.Q1uq.K#+ -d!!msPbeMg4]3Y,[jDQ+rAaHNNQ"gu>@4K)S`U^g+&K]M+*VQ@5-A?"9$Q54d.)lf%BO$oe#d -m[cpA#F\n3AFiWA`&dl/bh19q7o;A>;n'QdJKMg6t/X<"%GFtYkH4dp[Pg>uEYOH#sHuspopk7@ -m)lRT\:toPD\([.kA`*5YgU#hf-HuceRrZoGQ_Sk0*n+Z?j72Tg5("\l>L'#oo!4&)ScnN:H6]qk2PoaV;M?/.beYO*i8d-cK/F!Jo)Mq$US'#F!JB] -?VQ#$Uc&BS@QTAWnsQLPcG[K@2:V=NOHJ&6iKKd9.)#;3fs)ZSW4'5nb]D6+X1#plT0HtOX0% -_I63^Jc7Vm4Toud36LYA>SqFIX)[dI_1qQo+*W,Fcs<78j9S+8T9Ff$1TXJp'mY=iUd;NnG@& -R/rp[A1'+gN'_:!c!&p#"I$pP/:[V<;u9PW8T-@MoG3N>!L'BjA2m92YSt)=PJs;*e*D3<,F[ -NelgnnC?pl+oZqMH`>7"4PX8+ANlm(^Q%7T&5*_9&\54el+a&i]-SnD-DH^pICtc@$-Ul>W\X -F;dEb=.WEe83kp0MRTZRs%N:Tl[KIf1qLp.Wt*dUV0=hko8\EB;SiV&#Oa1"X9'b5&=REao#a -3Ep9^7=t,J`j+VMWKWeeS!BQ)1TGU,F -f/F";llD&8fq=6H(F3,8FJ0q1HiLi))d$D58G*=_LT:W:,Nf)(;Rqq,W\[2jLb20;cdf,N9"@F -K<`,@WSI6gRdLJh;D,Atc;'/BkXOlc8jk9:#oXHNQXcG\G0i<[j>`IJ(!omD>D`_\o;89"($u -8b=;^%I#&l@?7B4*"PQ,4%OD3'-NIJdUBp_F:J+&Eod+.l?hLVY(Jrr_9E0g#~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 416 -%%EOF - -%%EndDocument - @endspecial 396 2580 a - currentpoint currentpoint translate 1 0.35 div 1 0.35 div scale neg -exch neg exch translate - 396 2580 a 229 x Fm(Click)h(on)g(the)f(drop)h -(do)n(wn)f(menu)g(ne)o(xt)g(to)g(the)h(w)o(ord)f Fg(De)m(vice)i -Fm(and)f(a)g(list)f(of)g(possible)g(printer)396 2938 -y(de)n(vices)g(appears.)i(Select)f(the)g(de)n(vice)f(appropriate)h(for) -g(your)f(printer)-5 b(.)24 b(Note)h(that)f(there)h(are)h(a)396 -3068 y(range)f(of)g(serial,)g(parallel,)g(USB,)g(and)g(other)g(de)n -(vices)f(from)g(which)h(to)f(choose.)h(Once)g(the)396 -3197 y(selection)f(is)h(made,)f(click)h(the)g Fg(Contin)o(ue)h -Fm(b)n(utton.)e(No)n(w)-6 b(,)23 b(this)h(screen)h(appears.)396 -3476 y Fj(Figur)n(e)h(3-5.)e(The)i(CUPS)f(Admin)h(Model/Dri)o(v)o(er)e -(W)n(indo)o(w)396 5084 y - currentpoint currentpoint translate 0.35 0.35 scale neg exch neg exch -translate - 396 5084 a @beginspecial 0 @llx -0 @lly 621 @urx 510 @ury 6210 @rwi @setspecial -%%BeginDocument: figures/cups_admin_make.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_make.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 510 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 510 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 511 -12.000000 -622 511 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -9a9a9a -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUlZ2!r[Y6#VRWWdnaMtG"%a?0=466@tUf0^alF/aaCJIGZ2Ad%;a-QpfXLj4b/saW*T) -_i#!C.sFTJfUUW"%5YC'4-Zg-@fo2GapY2ITGNk-kTaaW1'N($,!u@YE@(0;Uhm!:GO`YPcI- -e[F]9<]hW'r/(lEjIX?`kJpR'W5(9*F#L"6;1b8uCHNBG$2Q"PGNanQ;M+>L#l.]oG]d%&/F, -4Un7"b8q[qB@/)7UkUK;;DD(nca]e0tLDrqFB]9$EV:O&RgK/>Y@jhqD6,A[K/BWF,@ESKK9g ->_%.0gTZo@m"B&MBuBc&IjXK#3%h^*>)k*PgpQ,7FYW^+aG/s;2?p]@T/=\1Q$J.`[3iFg\lt -GR9%"2YUAgtE/NADK;biZ]I/,LC]*UrCD#%FG4iAI+JPJ&Hro%j61B]Q^S45':g6X@NSEGSRF -n>JL=)P7nI6``-A[Rd@1"`Ni$,83-)4'V,`ugm#-`0C&/1=[=NXOrVQ_i(6N/7kl^K,Mg -+<2;4*SGgrD8-Cb&drJ&SdN%*=4id%2t7AllT*/(^P24[=*IK[@NT:(>\i-Y@-%HEVOddokCL'D9@>,:b#AHB -6iq08U!7o2n@\r=^reeR'7u%1#TAe_?9)nq10qPBA2E]SRn&))BX.#qqXhC%oo+_$h=k:/_le -t&t;tW>)DWFM_/&>+gi&#]\M_&HAl^[e>@OEWTEh&p$nd+POa -`+R.oQ0/ah6&s[DH'>hNGh'LOEHaR0HLIf_$3--alrfX7?7V;8O7[G`j$%;hjC?s0; -s&oBu,aL#f@pi(GAP]8p#:B9TUN610jS#S9R\,MtSBfDIESI_OD!m*:Nk4* -ce(/rM(TT0F2H*h9Alrnj88TZXASS"*.4LCNU+mF0B0d^lX%h/CgTRI=8r%7fWj^Q![*e*j[" -YJ`Zu&EQ8o7aLo).`g>;dj?C,9>bEoYp3P89ELXg&bNl#jY(l:BOi1QSt`nVjbjZ`&j&_m8); -XYq65NnUkqN7^Hm]&$_sD6Z"j+\^T@Kl3s<XL?Ko8Xh%_LnZ0keX!#Het-CX"k>H<%d6;8'C<,I(pO@ASM*fIn^_6(0Q^@E! -c$VBs1%rjoZGq^DZNG_ng_L'el%)OB&B*N@=i,Ta1]n>#S5HWSTHJ:))[uT+L7Fmoag;nIH// -B&bV"Dh9dQ+:'A+I%2bOV0&Z/59uH*:ElB4^((b&l('oK!3E,n*I4oGK!8Sq_k;gI=E**%b\l[d9=8o;i>%o'aepj<6G;dXjF%G;N@)nC@E.=@jO\f%oj -*T3e!c#&(c#1ZomG4<:V7$i[n:l@5]9Kh0j6-gE$*cL8_`kY;9)Jlhpc\KLmr-@DgSMj[Wsq0 -%nU!N/,J`.2,G*9ehh:7Z)")I[*aKoXNR?0oX+#*En(1s/Y=BB7Ht/+Wr$.s]I_FIX6(g+iKT -V;LSNFisH*roi5]'m7.in?mYo*#seQ*.][=J@;F='/Tr\YPRld5k;hj>p[fnP,A\j50mdf9@J -zz!:ItkII)#=g>bZF[s.MFI]iXHJ+1s(%kh""mBY5"dY^\8hXp-g]DEjlcT$/I?K]nn]@)uDE -H5!5dX9WGH[jeKha\J#4HM)[gSVI#<:Y'mUIt,B)^RMs[Qg8!<3[0lV?^^6DmnQ1?)JLmAtpo -Hq;#`=[`@hYp+(fGlYboUNP=8/75G9t1W"3=V\uijMe5DUQ)5&=PQ$^2_pKaqp)\AMrat&i`8 -5@WWJ)'\g:JE)8b\IXd[_$+gS;q$*f&.uPd+H"CN%W2e2D3'VPaSuBmrBVNbg?u[FFh'Ctg&X -7+5ap8MaJT05jS>2F^V^gMWP.bhpG*N?B9*L?SSa4WLm@cbqd?eb,(c(Rt[7DQt^_d$GYT(6" -`gBJBuCY,s_:C*$6-icG#GL/;T2H2r5IhZj.K$m5AO9[UOmufT436/sI -mp#_CRQ%Tn>:fiH;P-i:<759a=D/0fJ`0CJH$e9BC/p(eb/2Q(>Og_j0V]Blso0F[_8;jCF[> -d#J.]:[Th3aa,'hPU:d#nI]a$R9(CWK*]E0G/HhTX!4A)1Wa<.&Em*Lr?5)#1Odhn[^6ojjR2 -Dm.[-H:;3k++I7qXk))ssdh;Ph)#ZJ&7_9J\l7'WiA@3*`F%pYIrXE'(6hD(ND`Z!S70eU/7I -&8s_nT3O$!`3GC)'@2oaS6<1rE+[;E$CCPgbKrS+o')u\O6_a. -XgqG?uAVV7+X%EM!`qXcL0YcXl)\"L@^:E`#I"25ig;U$>$ -IJiYYUGP/6PflttY@k=gHSQm=51cm%UXaW"B\'BqVFj.SJp,6p`mOO0TgpSHXAo:6:'jSG^Ta -LP^-Cq:,6JpSR^o?]4e95T6fU@t?dfm%DNp=\hHS;c]pDmeF59K7Vk4GfmTXR(D2MgX_Sg85RA -%\kfp`S+/74R,,a-64oe0D)Z$Ec/RhU`u,H`H+MEHO19GFaS0TR=4$dbn)tPHKp?iBeB^B9W: -rkXU!S^\cgP.Nar:+V[F)DlQQS1p*o@?$':RlHNt\<*Oj2.e>=#`_9sXg%oRYpq8CkCp]h0r6 -Srd&2R+=>Ih#&"FIo4Y24'Qp$14:%2>nP9Ot>^f(PF8D9hj$%+gpiXgaM%D/$\l>&dcqS_:93 -riCgR1MlqHj/!LY+',bO>'6[Mp1qK?qP0Vt)#p][[i#o$F?Cp62V^r.XA_NC_LiUod@d%FMPckcP.!=jbbX*91'/R -l1L]QhE-qTdMu?BkaIUF_"NOO#H-dV'J_f3cUUmn]S@eSbE"6>,n^TQ9R9>GH6lf)PQt5eFfV -H9E'V/7:5`2_-UNC>.2/&m1jB=Ok(F;lZIPnVV[3OFIg9@b8qY*MY,i%Q$X+_)Fsh55J";r4h -Ugag:KM^2%IlqrO&mTm*k@5_cbXRI*IjcMl_mX+9j6).7_:A2O:-KdPm9sP>O --eX58iAGh:Z_nW(][.L*`OI(WH9Z4NN2/4'4?bNc:#0:IT`Nl/GY!ZI^*haH]Bf_2Z -^JVHb'YQFBn0qPQ@,TBtjraO`dlXr,c]ku,%7kga>&?g+qZ0ZD_tZ8Hb#fc:Rb6M?F7^\X+S_ -+SQ/R;LFGs05u]q#aX/g1';)%-L5&Hl&NYWX>Nlp1hIO@3jIZQ0qA>OSdW@i%U8RhTi25LM^_ -s[,uJDfW6'?<_*6aj#/FIG/Gi:OhTs:qK`i:?RK&lWWE%:V,B@aPX9Iq`+-i)7VV:^V`&JJI" -gUuWQf2I'XVK/eM'4g,]<[khXEAY[b:)sADUO/CE7N5bU"'ARji+HDT3-Tk\.)nH&KL3KLst8 -=jg&PcS*mN,,`FC;(!f&SB?^k2I1-[M/;3X=CoSHS)N0'-,0bu^.)a -u3/$7@I7BX7rB\Sd$PQaor`qE7"rRC*UMles:;(ap$2cac7GLuHBhM'Yp[HU&$I\Z$V>#JQT1 -Mb;p8nBCE3MbsRGMUBACqUO=D)5t09kN,uY7*33E.7^77^R#l[iVZW%b.p52(EudZOc(_&m%W -G+*?9`\T=H85mDdiW+1+4@=3?p#>uKqO2dQ'IGVIg%,';]Bndl:[;@:'gC?=r8HDb[+Ebm\i. -joLg,>c_?+HGWA.;oZcYW@'`ALh9)g=g;bq5NTRg%N'WFDn'Yu]?)\6GG7]?aNI2=9_ZAog;r -rapt^cQ:!6m5Q-=GYciFDDQ:LU[iO7oG8oPI.4M;1%cSG+M`<=PQ""+8p0/?!ptm0c)9/iZ;^K-FJT][NmC%KeO85mdb#qO!-U4[OIoL1L -%I:&KANC1oA2bn`]l@?=n)B(*_u%`5$Mk@9V$LSCY(6N,>=kj49\14Y(qZg"i61Zu$%tWAO5S -[3O/&p8Y06mu#Xe;e#.'[Bjh#nDU6X-YD+,9cf/X=u.7LH.,\h)o(W3)`=J?$V2c>_!POpA_VqpZsh8;\9Z]d!M?p1=PbNk+&/_Me:eJK!DDA$ZQSFYAZ2B -cGlm82M>4\1@?7]p(YdQeVKD00Ouabq"2UU>c!F'tKFrB([S6r`Hg9/ER -H330#R0Z+5(JWGAu.`30Gmb(6Rt-QN0j'7YF03`6hoRq3-L=Db=sY:Db-e:E>C.uSlUqBGtrK -=l$Za>3nuI[rqkhaAftR['9kDM]aT!Uq@e?5N6cX/V -`3(k]WK2?1r)Y9c9?/-q74Y5TO]sc]cPce6sU-E:MD45dQ_%F]H90PX7'0_].Z\&Qh>e+\[R -f5%IO.PB1btN[[ikaV'aI\S9A'IoTg(e5*e!+FP%E&dSEj0rh?;WXn,`@G$:.$Fc8a%@@ilE: -N;L?F7Q#S\4\j8AG<+'BFcc(q+rR/GkQIoZU0kA7,7FJm\?@$u -WFaUt1tL%c;u;,!.*^UDiICA[u7C"&1YQb<;"\)eK#g[M7\&WpSZo2)!^unrHDIDpUsR1)ra1 -MO1C+_PK"IRQ4\afV3rgCUPUg2.tL_?)SjnQ1B$-g"Tj`6P$i#pOcIe'_KX'OI#aj68PG53i3 -D/iDGQ)%.#Wp5441hdVeMEr.c9UcU5>0b!eC<2go(;.oZ`);d[iEa6fRCG3T:R!<<*"zzzzzz -p`2o>>>XcMn+A^"++F8e+I*Mf#4=rmbFgb42^YI4JD1W3)lSLanhS?D+8q=O(&faI"2HaLg8L -m)ZikM]B-*Ufn76'5,+<8p\'c,o7[%NmC'42SI#gf#[=NZ!u6C>5XceR:m&n8dgsL>2s- -\QM\l-<8^u@G\?E%>RncNCL7#aV[;B,E>NVLu$[9C.3#M81eJb\j$Ym#_@!6:/UsmjPf$N2]O -)1\"6qeBIm4QmhS$bOg8%)+qG6fifD8I6`(]X%=?UE,t8t>i7p%FPq$\hMDD>3+2C5XhY>WU0 -Y:tt-/(jf<>#60JLe%]6X3J7DD;[l][F)-UA83?]Tf+SBW]'SG( -"bY,k^"1R;A7"4,q#BEE$`#\!9sTmJU0RuTH6o -KW!CfVl2e;DH9c>?*`*fS8%P0fn3)tQTf6e]o\.O(bS"Xm(J/dK-9EU8f/0^k^!m4#"/Fh!ji -JPZ6N_g"grpOoT%Z5 -C5[Ek7J%"rJ^K^*;i8F6T9^6N\j:2k,()Io;#C'1firseZiD&Ba5=\.\Nr%/f-6#GO -?*`*fS#LitC!O[K)OO[XQG?&84<&qV.$a -kPDn2j]nY>P9nQ%NZ[C',::1C%9uEfqqE`OjTj9>XoiD@omka]4if7uG_7' -t2K0Ii[LHsRG6)F\omka]4aR)2%+GLL!:D.`H9c>?*`*fS#LitC!O[K)5]*/8:`H>3Sri -m#]Aj66Ehr1./nK1LlD;ZW9>:6a14JMlE>I&1D8cC_0e-7O(R1"*02OiS"q.@t0%:#^u^L5L_2R`^&jSUQ2Gap_%FbJp"8.2u5Wtbu:_0K6e,sFfo -n^*/e$WC'q);<:SWs'PQU5Os,lGqfEefO#RiAn40;1:C%HRPc$*#8N2ZE`ke,K[`[=PRg_5p^ -;;"EF4ko$E/9IEi0kYW;n-FjN6#"Fa.[_*uQaZ$#Mh7`1@\"GWuOaPrMcOuCT62h5!JPd-DUn -nm+%Eq)OhSrpt^\TRt6>^*M\1=[=NWhD4hqH)lO"k#3l5sJU0Ru -TH6oKW!CfVl2e;DH9c>?*`*fS#LitC!O[K)5]*/8:`H>1=[=NWhD4hqH)lO"k#3l5sJU0 -RuTH6oKW!CfVl2e;DH9c>?*`*fS#LitC!O[K)5]*/8:`H>1=[=NWhD4hqH)lSN'S%3cc; -8BYR5-[Cjz!!)pl]_qBq(&[[ok^8$Gj5h2Y=eI]-NW6UsCk)K`IuhlmBdL>]&4L.0Yq2-]sn2Uc+Y6UmNHYOjM'Qh`j^ -os7CA158h`/Uf[WuA%B+>G*,:]!'Ce%Es4%F]CMU=fPq$DK&)Za-J0aWzzzzzzz!:W&nn:R@d -IP)i7K:eQ\zzzzzzzz!),^-"s4!_`,"V%0[B&Co1m]AC`Z!^:TBHdo3Ga<5:G-*fdm1JO.RPh7530S8DjYO#t8qZ[P)jIW>& -a]5T7"N^c;:TQ1\Ad"0SN(mt[AW8/H)4FoLJla5nOL021:D?Zo2RMCkqeR2l^9Y&$,Wdms5qQ -QQMR44"2?gMa#3'LF'pC)N:j0\AM$T53'1OHIKX3gV$ZYaJ<*f_k=3h/[OhktX&e63AYM*Z5B -HbIi)k+:<[\QU(m(I0**=1mC88:l6g6d"oG'(+F\DHd[:XiDr4&pQ8[aW54Bc?*/l(us0"]Nn -dY"eB;f44u5oCo'F-/>CVh?qB$9n-<=@C7u*GOkI1<7Td0UlKk<'-m^qjqIQUeL(.8Sen_0ga -j;cH;SPGHCM&qd?#'@g:5BIXgZojehhC1_+(_^\p3C[/5LW0A7R,WFu%\P&Pi2-1olUX\L=^q -@33=]V!i+HOj#5jJeJU08+SQbZ0[(?QVKd/qGremLtY--03bI;eQ_lcP$GseVbL,oDsK!!196 -hQQ?\\gP'?K]c:Qp*ACi/0U[6m#C2KQEW89]!/(W!]!O^`:M0'U[]&,C(]A)\Ao(JVqLN3Is^ -n[=1hnZ?nZ:PN$0GLa53$I!k%/ZtW,'!Y]8L8=?4(B?W01_uCrT#C-d".rrQTA<27M#X@o+nRh2 -ARPY#O/cBLO)cV8@X2[2CTsX]a(JpJtL,;o1feh*tZ@o=YrE&^1Zb8<0W"Ou5;/`(Foh]DGQT -Z#NaMfh*u)fPF*-LJjkY+)&sj&uTNNhR-cUj"^MJp9jDOgSIuld_D3!d!kV1c$XQWr[d[&cVq -5+kG=*R`>Kk9P$YW)"X]OoYN+Nq[F-WC0#>&>:\Pq>W%GGZU5UE%Ve%9Y]mH_5,LB`HAGjBe-fm:@!gOr,o$&pgj?hS[_r$^^!,c'f17BHgPoL -kT+LH7#qEfDg@?jL[KOutdq$='OldT)#,CQc)bhm:)3Uk]?c2ggk-qj`p.9BPBG?)6,8plCLe -;'c/BM^"/Rl)E50EZWX#>1?-P(n_0M1[&b.15\Tk9,"/.&*(m[8s,c_TfOe2Am^V@>/9?9=RP -PQg%f=;CES&3PPrg.6sd;l2J)m1K>KbIn.DD`;1pr6MlHLfg`LrU*%9*oYUBWmle^4obS5 -fpQtU`1/t3R9"A&lXH>:@pgQkUt]uE9tE*-CVBpUj-lL+R5+tai2P4LCSVWM%qatD/J7fbDBh -&JgpW!4\2T!,2'H*6Uj,V>!_ZQNfiA`s+/ZCK!o*Bd^l,"-P9Mn1]9,Cf6tCM"7W$!J@_HXi7 -360e(=,;jp/3?'FQa_aO]4g/q\?mLfY&V8ZX^F3ONW%B-B,fi`c6>Rnjo/Md[MjOp+-]B[?-D ->72I`abB=7],O&4c1kk6XL`s=*QA?arSiRY:(=.'"r]DKcR`h^R+ff!k[]\:N:/WI!iPGZ@3a.Xm$?okc5M'1Pfa)Ai)E=YJZBf=3=U-qT7;em@-q&1UA1A,cd2Xjp"*OQ_1hFr5("Yk>;)epo" -'J-Sciud3[;.p+>t0Lh^-d__R:!D:S@Uj2[47jD+!+UQC#VW"E7Kg,] -uIU4_0kLAmcDM/Ckd::4`Nnke(arh6-MgGWVao]ng_8D0oL?+2>`bt(P]<^po%T%*JZ8och&is(_M&s,oURg=Y'$87?.X;Yg,Us/'P[5.&VH/lu7iKVj7 -E$S&T`[^?fafQUA9LenAUmJGA]PFbju,d!k[EG]5%aiI3"c%o*K2J],0=[,s9!a@=ZR9ECjD< -K3&buhDS3:Z+\k/6ZeL"`,T^7OuPFk4"#GBKF!F_@\mVGAbNYg.:"mXgsr4^0R_RUhT>Cn!.q -Gu*_dVT!.YkP0pLg\n>Z#++UCthlC0IK#e(2D(%==Hu3PU/A''7i$7@qsKa:cC2oeqI(oD -0)a#KfQ,qgKAd+$"6O]Ctl;F5:8TedtOpr/7G[)87C'eUh7O\,icp[BTeFKYi;WiX,E=)~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 510 -%%EOF - -%%EndDocument - @endspecial 396 5084 a - currentpoint currentpoint translate 1 0.35 div 1 0.35 div scale neg -exch neg exch translate - 396 5084 a Black 3645 5692 a -Fi(22)p Black eop -%%Page: 23 32 -23 31 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 778 512 2601 17 -v 778 4578 17 4066 v 977 742 a Fe(Caution)38 b(Regar)m(ding)f(USB)i -(Printer)n(s)820 910 y Fc(CUPS)25 b(v)n(ersions)f(1.1.11)h(and)g(later) -h Fb(REQ)o(UIRE)34 b Fc(the)25 b(user)g(to)h(insure)820 -1029 y(that)f(the)h(desired)f(USB)g(pr)q(inter)h(is)g(po)o(w)o(ered)e -(on)h Fb(AND)k Fc(ph)m(ysically)820 1148 y(connected)23 -b(to)j(the)f(USB)g(b)n(us)g Fb(BEFORE)34 b Fc(star)t(ting)25 -b(the)h(CUPS)820 1266 y(softw)o(are)o(.)820 1435 y(CUPS)e(m)o(ust)h -(see)f(the)h(USB)f(pr)q(inter)i(when)e(the)h(softw)o(are)f(star)t(ts)o -(.)h(The)820 1554 y(CUPS)g(softw)o(are)g(is)g(typically)g(star)t(ted)h -(when)e(the)i(computer)f(boots)o(.)820 1672 y(Note)f(that)h(one)f -(cannot)g(simply)g(plug)g(in)h(the)f(USB)h(pr)q(inter)g(and)f(po)o(w)o -(er)820 1791 y(it)i(on)f(after)h(CUPS)f(has)f(star)t(ted.)i(\(Note)g -(that)f(this)h(does)e(not)i(apply)e(to)820 1910 y(par)o(allel)h(por)t -(t)h(pr)q(inters\).)820 2078 y(If)g(the)f(USB)g(pr)q(inter)i(w)o(as)d -(not)i(connected)d(and)i(po)o(w)o(ered)f(on)h(at)h(the)820 -2197 y(time)g(CUPS)f(w)o(as)f(star)t(ted,)i(there)f(will)h(not)g(be)f -(a)g(USB)g(pr)q(inter)h(sho)o(wn)820 2316 y(in)f(the)g(list)h(of)g(de)m -(vices)e(on)h(the)g(CUPS)h(Admin)f(De)m(vice)f(Windo)o(w)h(\(see)p -0 TeXcolorgray 820 2435 a(Figure)g(3-4)p Black(\).)h(In)g(this)f(e)m(v) -n(ent,)g(stop)g(the)g(CUPS)h(softw)o(are)o(,)f(proper)q(ly)820 -2553 y(connect)f(and)h(po)o(w)o(er)f(on)h(the)h(USB)f(pr)q(inter)-5 -b(,)27 b(and)e(restar)t(t)h(the)f(CUPS)820 2672 y(softw)o(are)o(.)820 -2840 y(F)l(rom)g(the)g(list)h(of)g(de)m(vices)e(sho)o(wn)g(in)h(the)h -(CUPS)f(Admin)g(De)m(vice)820 2959 y(Windo)o(w)f(\(see)p -0 TeXcolorgray 25 w(Figure)i(3-4)p Black(\),)g(a)f(cle)m(v)n(er)g(user) -g(might)h(attempt)g(to)f(a)n(v)n(oid)820 3078 y(this)g(issue)g(b)n(y)g -(selecting)f(Inter)r(net)j(Pr)q(inting)f(Protocol)f(and)g(then)820 -3197 y(enter)g(something)g(similar)h(to)g('usb:/de)m(v/usb)n(lp0')f(in) -g(the)g(ne)m(xt)h(screen.)820 3315 y(Ho)o(w)o(e)m(v)n(er)-5 -b(,)25 b(this)g(f)m(ails)h(later)g(in)g(the)f(con\002gur)o(ation)f -(process)h(with)g(a)820 3434 y("client_error_not_possib)n(le")g(error)h -(message)e(with)i(no)f(other)820 3553 y(e)m(xplanation.)g(Note)g(that)h -(enter)q(ing)f('\002le:/de)m(v/usb)n(lp0')h(will)g(not)f(w)o(or)q(k)820 -3672 y(either)-5 b(.)26 b(While)g(CUPS)f(will)h(allo)o(w)f(this)o(,)h -(pr)q(inting)g(will)g(not)f(actually)820 3790 y(w)o(or)q(k)g(in)h(some) -e(situations)o(.)820 3959 y(CUPS)h(v)n(ersions)f(1.1.10)h(and)g(ear)q -(lier)h(e)m(xhibit)g(similar)g(beha)n(vior)f(with)820 -4078 y(regard)f(to)h(not)g(displa)m(ying)f(the)h(USB)f(pr)q(inter)i(if) -f(it)h(w)o(as)d(not)i(connected)820 4196 y(to)g(the)h(USB)f(b)n(us)f -(and)h(po)o(w)o(ered)g(up)f(pr)q(ior)j(to)e(star)t(ting)h(the)f(CUPS) -820 4315 y(softw)o(are)o(.)g(Ho)o(w)o(e)m(v)n(er)-5 b(,)25 -b(these)g(v)n(ersions)f(of)h(CUPS)g(will)i(indeed)d(allo)o(w)820 -4434 y(the)h(user)g(to)h(enter)f(the)g(name)g(of)h(the)f(USB)g -(connection,)g(unlik)n(e)820 4552 y(v)n(ersions)f(1.1.11)h(and)g(later) --5 b(.)p 3362 4578 V 778 4595 2601 17 v 396 4831 a Fm(Select)26 -b(the)e(manuf)o(acturer)h(of)g(your)g(printer)f(and)h(click)g(the)f -Fg(Contin)o(ue)j Fm(b)n(utton.)c(A)i(windo)n(w)396 4961 -y(will)f(appear)i(which)e(asks)g(you)h(to)f(select)h(the)g(speci\002c)g -(model)f(number)g(for)h(your)g(printer)-5 b(.)396 5140 -y(Scroll)25 b(through)f(the)h(long)f(list)f(and)i(\002nd)g(the)g(model) -f(number)g(for)h(your)g(printer)-5 b(.)24 b(Notice)396 -5270 y(carefully)h(that)g(there)g(are)g(man)o(y)f(dif)n(ferent)g -(languages)h(supported)f(for)h(each)g(printer)l(,)f(as)p -Black 3645 5692 a Fi(23)p Black eop -%%Page: 24 33 -24 32 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 579 a Fm(denoted)h(by)f(the) -h(initials)e(in)h(parenthesis.)g(\(en\))i(w)o(ould)e(be)h(for)g -(English,)e(\(da\))i(for)g(Danish,)396 708 y(\(sv\))g(for)g(Swedish,)g -(\(fr\))g(for)g(French,)h(\(no\))f(for)g(Norwe)o(gian,)f(\(pl\))g(for)h -(Polish,)f(and)h(\(en_GB\))396 838 y(for)g(British)g(English)e(\(see)p -0 TeXcolorgray 25 w(Figure)i(3-6)p Black(\).)g(Also)f(tak)o(e)h(note)f -(of)h(the)g(Gimp-Print)f(re)n(vision)f(for)396 967 y(the)i(dri)n(v)o -(er)l(,)f(and)g(ensure)h(that)g(it)f(is)g(indeed)h(the)g(v)o(ersion)e -(of)i(Gimp-Print)f(which)g(you)h(ha)n(v)o(e)396 1097 -y(most)f(recently)h(installed.)e(Once)i(you)g(ha)n(v)o(e)f(made)h(the)g -(proper)f(selection,)g(click)h(on)g(the)396 1226 y Fg(Contin)o(ue)i -Fm(b)n(utton.)396 1505 y Fj(Figur)n(e)f(3-6.)e(The)i(2nd)g(CUPS)f -(Admin)g(Model/Dri)o(v)o(er)g(W)n(indo)o(w)396 3922 y - currentpoint currentpoint translate 0.55 0.55 scale neg exch neg exch -translate - -396 3922 a @beginspecial 0 @llx 0 @lly 620 @urx 501 @ury -6200 @rwi @setspecial -%%BeginDocument: figures/cups_admin_model.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_model.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 620 501 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 620 501 -userdict begin -%%BeginData: -DisplayImage -0 0 -621 502 -12.000000 -621 502 -1 -0 -0 -256 -000000 -ffffff -b03060 -d9d9d9 -c0c0c0 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -0000ff -990066 -ff0000 -ffffcc -00ff00 -e7e7e7 -6f6f6f -800000 -333366 -6666cc -808080 -9999ff -000080 -222222 -ffff00 -808000 -008080 -429aa7 -00ffff -00373c -008000 -ff6633 -ff66cc -7f7f7f -ccccff -ffffbf -d4d4ff -bbbbbb -8080ff -5151ba -cc9966 -996699 -33ff99 -0099ff -1a5f67 -0000ee -551a8b -a3a3a3 -8b8b8b -000033 -000066 -000099 -0000cc -003300 -003333 -003366 -003399 -0033cc -0033ff -006600 -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333300 -333333 -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339933 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -666633 -666666 -666699 -6666ff -669900 -669933 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -9966cc -9966ff -999900 -999933 -999966 -999999 -9999cc -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -cccc99 -cccccc -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff00ff -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -8c8c8c -cccca3 -8c8c70 -b5b5b5 -cdc0b0 -eedfcc -f6e7d4 -716a61 -8b8378 -a6a6a6 -GhVPU>B\`C[YCj&iQ5a.,YLCAS<^cXg]O-L5Ks#iLrgLG08A>>cKs^mpR8E@638=GrdWZFUo -IS,:U;Z'OtU/bBI_7LBGu:&CsZ,_CsZ\oCsZ\oCsZ\oCsZ]:YR)QIDLO,,J]r*cX<r;Y@_$']MJtJtY4I2 -YP/jfPLgoerFN+LhB*+!Fik[KFRq>0fEi`(W6N!9YhmrB9J^6ObpFsOn3:O(1&6(/g[EY8GbS -Cm$scpi"Ia)&(lYf21LC]J;-j#cE$MC"YOL:Z&qOa%/qEY;qCb-8j/&^a5\P4t!YKEsps2X<= -\R2?_u2W"OO(KYFq[-!o?]@!Xp+gAp!@TqFTDY2Ybn\LJC64AM6j=skiTo)"jO4FC=DQ*I`.V -o-o#rQD?(>m5u/i=J8G(SB482s9PB2pRhTIU>Q6'DVZ6'DVZ6'LR!Q`grWOfnXW6Kg3S\@?<9=m2XHleTI%m@3c.6Km<\/3.7l8FbiePg4km@`q*oJam<\/3.7l>HaOt]DHWE2^Lk8>fno,t\n -Uje]Fg8k"C\+ll!&gT5Cl@H1\"B_?`EKO@GDpKd.>?;McXe/<0<`&DS -.'[lf)ahG2(Hsrtc&]VgbeG`2_64a/85me`]B7QU8XkXT&c\XB&" -D:/[:\Nr@ll'3k?,54O*$/%*B$b2\,t$(ng*!(J,hJR2 -4@l``A?\p@2D7Dt^7?i'U&NV_.;oSfmc$+]Di:WVb, -RC^kl/Z>4nfFN`h"8[l=kY]J*k$"Yk6EjXS]c^f))a4mrcnnZ>J89o?-P-/4DW::XCur]ZcqR -PX>h/1YWXr:AtDb'.\85CNI2JujZMU7BcPmmGs6RY-"\scdVmW:@$=m#Puu4;U[XL5UmJ%!6J -!cEYqg-9,1sUmr&&ihp1u0oZ/')_dAps`o7(o!l,Vf(o0R^Q7@.9WE1SYNNDeC[CJF5CleQ4d -%-ibqJ8M/W5H.t2^0#?\KmT_aB,_"4mL%-DY;^8[qBW:Zg'hbj)kAXCGd^_Bq=#\IPsV*CBIX -O^P(l]YB',Mf;E%3^Rk7^d.USF>_3TS!\,_H<6=INQH;_YseNDjBJ'?IQ>A2uk8X%7`Obc&78 -I>m7Uq[\N'`ArS/_#=<6$WkT8>4TCK'eLORmKhlUFYHt)KkPEdZ%/V2HsnLAnh64@DWk0=S/o -S6'Ih?k%]c-;mV*:Ke7]*4uMaU*OEVm_6($M^>]mi#taI'%rj3FGr4K_"e.U[mnSe)#G7*K'Z -Bfu&<`G%+1Bi=b?A"\qke(3&^NAY)Dcr(r'LOlg!SJ$r>,_6Cim&tC,eEO;OB"WZ[F;"VaIQj>OgD1d]NYsk,Ur"bV-;6?nhk$*=q-oe`6JjK -D7m1S=:#99ZgNV[ed>Xjhe)[O$U\fKe5b`Sbq+,j+Bp+led]YP5q*"h/&[qekY$uUgQ8LL\lV -(F,SEdkR1M!ipD'ZAgusHI$O0S?h;!+?+X63\prA*]2AL852[TW9C#N('cX^n%>U^j_nF1.!d -#C0jLE`(g$eZNB,&,cM,!TW1ah?L*Vlm/fS_Wtp:0#_F0)Jfk>N+:*Rl9BbltpFABfi'GMP8+im2"SftO)9g2YONd]t/00DbA'd=%2@k8V!2]oA!)UV]Y'382lU1nQXIO"Ub2HgMG5=4D3XG,TSNMC -qC="jR&e'QNVYT3L'$X;*bEK//@Sm5/[pkrCgFP[?5]#OU3qq#+a<6MS%PoKLd_ok=8k!URdE -kP@n/?rR'K18dE:LZh2lV:OU=Li7X!Qp&19G>$S`m5?h'_4a$W6(2n&``C_@hHm?jD!61#a:/ -uq7BcD/m3(fS`b0Te?pXC*!HVe`:oR%8a7*o;?GdbPm39e?c+^it]3T36g?j%ga-l`b=PS_N[ -Drg.hm_urF7i5^i30;Mlu_2ckFaF#U]!8Pj2lmg;uS>::i(!mdH2"lDE$65D.68TZG2B`>B3' -V=Esn?m.!kcJC:&PoEZ01hX'g+/j`A2a8WO<]\K+jC$V5MSOGZA+LYTU"0i7)PWJBNojmIJSd -5$4Z>?srfkItQ*+@fR&N6e_PV)d"Koiq3VrD0C3QWKdd8oZnVQjG47dMmU4SNuh'M4SLXa/YB -bfs@J3.0h%,@=E`C`_\mgY&*+CtP]2c88nPjM8tG<)Ii(fM"4_i`2&`F>aX*]]qp#HFr4AWSX -!(HWVG7ZL>p'3^("ISb!'KlRfolm.I`7;PZ8)R.lq>q$5N0MXalkJ?^oKQud#nP=>j[Y_&/?Vtpp[cn$dGnT3TDY:#a.bg_fDXMWHq;S7T%^p5)D;T*Zg6-*tjfpb)lG[ -r?q.XW92TVHg]X=*\rM/q6hXe,.*NDbYH@/P+nYgcnX].(kWNabtpH"[n8(plk]#qfuXZL"K< -82W*)Oo0Mc9sWgTm+dq3)rd">nrjGKfBi\PPpK>9*\ZcqV:Bdn!2rl'M#SbW_TphSZXtYFB_o -5c"G!p>MZ$rr&_#8;jf;IIWp,)hAR/6*TgB$f&OAMRA[uO>gN4sIE#t;D%D\ReSM>l#o5+&lY -X8?S`Nm6ZaCjhmECX2D/VRA>-0jqgrAttG2/lXCJK#$D9$7?m"G7c.!DaoFe.se5PVqD+8(T. -K\uS[Rt57RmHjMUE%PY+9)6iR7+AYOe^;C4o^Wh0X;bCpU[_;Tb$AqpC+?^#3HB+uFYb7gmHb -d;md1^g8!9_gh:XW._9C1>h0"2j/%XHG/T0(*l**$OBcXMn]$[W'9:u'_Nm'!P-b0V-_J=$2-Vj-Y"ec]A`OOllHJ]d678fPn -N]3i@WE\^D1r(^h*`D"_h2NK2"*ORFk6Kb4OW0X(9X,(3c_)RYs0R.MPMJ;*q6k.arSmZ/>mP -Wf^%o>2aoo5)#7Iihcbr]jJdp/eg3_mPZ9^Ah"n< -Q.g\HS]Yb@2)f18(T(caSf>!YjFu%D'%8]Cf[u./#7]l0q2a!GMnb>8mh/pI6.e -,YJ%%peH#U*;CQHg9#7$0\EB7(JEEGEC?N%IQSs:SfIVXOJ=:ab,Q+X'r9_8hDQ!0!c1[DLn( -r1khk8/(DRcg`^J%4g7l+a:`08b2R^X-IUbI5O3^;?^]D:8B4J.d$n;CGh)>e1Qq#Q`*#`7Tb -A(b#JnZ7r5\W7=hP(f8eL/%@!?XqLX;P[G-*JIUBB;JIBS8m?k7F.i%;[u3@);@Bta8Jbo=)> -jLLa]EXtP'a4&5qJChAO3brf4r_ -(_&R(WJ+87*jG1hm$+oJU4c#6A=lBemV6CCk\,O6,O_+],$8<..C/&D<3@hn`>T.88Z:-)HX6 -7H/l%]A7qI/)3P]`ZgF/ng[_Ek"\e$&eP)b/`3X:j[R8d^ch?LUI!al@ -D"5D2_S5T?\>]MDcF.l%h+b+b;c5e**5qAK30ecW:!AZSb:17\gDO1/6#l;-J+Z0/GCOmE@P1 -QlP4N)lCf5&:B1oO.08-gHG0 -I,6;*GV$(j4WY0\FIj3cUV>ADDun[4knQF-nW+sm@\QrKBen1]2CN7'Ng.Hg$,t0q!BD@Hfj# -J(mn./1Ge"aQc#l5Dn=@t9r@R"Oc$i7HSlSJIJhZ*Bs1[/YAUc\De:pcoGQ>.Pl4;G[k7G[\8 -f7/ei$4JA+%Sej0p[d9[`ooEeG]*9CnTnZUgN";D+1/od^ugD,%][G+f>V0\^O%Pj;2V#EH(; -SBm-CM-/4VXhM$Ea6F8FD0u%pS`E8N16oeinS()VgKN*cB8^9.=*M]pf$XH[WuaAcD@PHu*shIlA-g[SpOHY9C=.>N(%Z)j/tnJ[GE?=]XuK8%l7KNWFQc0-ZpmsEqo&oVbQjJrQ&1(^@ -WAf:"1qsX:+HgXGnBfj\m*:T\ug2=?nT/N2+Ru7oLM4+h:(VNrF[L)-Rf)7/620>:"bj/h[Z$ -C,$9!=4I;CCN`*VaEOeVa`g35Q0H2T^J]9nW:)PMH$@U#=Jb*O8.JqkekO#%si]9=[4[cYpiV01tOS'W -TGN'(pY)u8sE/AV5N@eXS<5B^9TiH=VUO]1FB@Ydc!lg+>jZ=_j*b*)"&U0!V%eBt/jH8!0i< -OVKK-];j(0EYE5[-c)4:AsrZ]u9SI_j;I7jeV922d4E>)1c4c3OJhR6ncojh -)=(XGaU<'qnnT%909J?E)W7MGh1@,9B(ebZ^pS\r`KRZ"S`)P.+n`m]_F:C$^p]cRZCA8+`5& -;N53]PXWtIL45C`anD532m]f`-NcFl;JUK0Z$hJ:"3F;_1-*uo=(*S)_dcEtQ--[eWG%o188. -5PRYD=qZU\mI_%Xg:*Ds,Y`t79I3V0V-K#*Gr$u%f0[,Lo.Pd,Xg*C[&ua`>"p4'JXcInO\3I -a5-86P7"t._FEEk%.IAJ$/uj"#^KX[u$gi03?D\4/I!Ho6Q!mMsehCea=GmcDd*+:Ht@"AVo= -ClXNA^Lc=q:ZY!MIIIld!V,"DE$>I40kER%$MSA\4oo[S(lgB;1cQgWH0aIPrf.OXTd6`m42T -g]qi&K8-^4+mSGKrpR:)jC&&-P91"@3S%5nF/b&-P91"@3S%5nF/b&-P91"@3T@G=qkr5eY4N -)RBBmk5djPV$$fWkYfPc).8(LV#dedcrh!3%@Tn@dUg3M+8q=O(&f\r!^VH,@&$7)Z33>2Y$= -'Wd![?1M'1?GDl"rqe5mM[J.9)O_ESd`!]K8Z$?ulm#$k9$(Vg5\>\qM,RuOj.@"ZH3nRVh[\ -raqg7,\IU5nF/b&-P91"@3S%5nF/b&-P91"@3S%5nF/b&-P91F9?iETO@n9d$+TIcu]>)cu]> -)cu]>)cu]>)cu_;V2Z6)=pr:UWa5YqR'1arZ=2mZ&jnC!>`VY!QmgMk9Qo`R""k^-Pl*514%) -\*QWJ`,K@S$s3fjEt>3j0>?%U3:!F,i2bRJY'Al0eQrXu]cs&7*>ubOSp7Ci>26cQPoM4%J=;%Y7gH1DjcHqK!1^IL$+ -cQ_27lSTKi_p"=ge(u_VS_$SDDZ#+*OF-4dQ,e(f_0Db.Uk%HSBnh9!ooB"07qSMn*f$W?(UX -eYmVfoZU5`VFFEgom?X=dJ=cWP@"Te)J(SXo[d2@3*RK7`K?ZjudE -YX'(hLJ>Ga2X%FJCk-@X3S4fHl/&W"pjhbl$F"6sgm:Rf]0.=n]Dq)%j$bUEMH)03\C?29a+? -bojFSrF,dkdSYUFcllKp7!g&*6I>_e^jYUS/!Zj53#r2[Wql8?3^=3LTMX)]BJk9I+eRn?),\ -_XVq8I@R-=\-hi+Ao^Yj4D!/&3W$'A.u1Q!&ikN+p:I^*/2X9OMU'2M*fiMCbfX=(i2)!Xob) -$c-Z0@@AD'sdctGKKq?J1?FI'0/M9HJkQ*TXcX`$&_^="^OWJS2Bc^Q?fTG58FX\-^O@TQeJ8 -G_I4@AKtC9Wi/b[I7e'5oYk(kjNVQ?T)Y-f0o)fHW*rM@_m_V+cP5,0<1a[SX%[@/DTb@uXb4ZUI -,m=HPPSBZPXa-gAqY^P4[gSrG;3E -j_X(`Otog\^1RjS6k"^n+MMTq?9AJ,dii^\S0RjV,V7gi ->\q#T77YSG/TfK@86K)i=l@:R$p[0IY\J'uT*'!PXY2VM3:R7)5gj):NjNXZ!CM6LF[A9IJh2 -1?lfJ.7tqqjRS%=+h$P-\i#4@IrPj!c3)m5FDKj@%0i?%BrPR^]rF<'4:oYP6nI%o;"=,*S"Y -V,67dK*B*o,$C`E(U*SgI+Fn;/Crq>)njC`LSU\T&P;*\X3tF7'XOoWQ==/$aN!?*AKf3dPk/h0*A=/frec=GifU2,JmD0"pfK:%0#M;M!NODig=HQneA=FrX -aWb+3"rfHrp=_XN$kHt[Y[R.a+;9-5$eV>/m?;CY%-L#KJ1^j\Cn;V]q..s)%1hGG'4:oYP6n -Go[`J[)!8D#cCk-@X!B+bcoEMTG;RTFL[t"pW-Y\IkdA^nrJ8GR.ab0BZ6dL'GI#Q=67rB`jF -s:b0=g<6-4rP/fTFBJmJ.7tq;]eMb&:eUsfF$XeCn==0!4L9_A%p-o#911&_Te9pD$np/>K(1 -efu4K9GnR>e!&eYb/8q+*Ak-5")O/-Y[R.!2io'Q2Zq_/_oTHD,tJE$k>B^,9DCo^kU*t -//-..&!7V=Yal;/@2t!GPGJ<^[P;0"^<iql$a,!B,,,E.lK"rCm:#/&M":2G]?Bo>AFWG]L")]oim,3,G1V:7hME6 -=$(nSI$5l9HP(Z5T5F&3k3SWCsW013nV;\^c&_e0PnDF'R$p8DY/h_TWn7+d_<>]5qCS*^c&S -a-uAj9c',t/G!l]t`p=JF@Ika=0n%oE?3Y3^JLu-Y?[h3AL[@HGScijS_a^+1RjWgjmuK22lO -+Xi:Sp=9G3sfs<7hQ<-u>L9AcUS1YVG%sg4Kji5PaG5^ih0ZdRn,U0n73U=uO)iK&-%\8\d4s -CtLjQhE35USlNRL->]UG]I"Jh!AA(G*BB^0&[5^8A;?.\Z?hf:)`CJugl*%W_h7a+"P<_/A-- -RtD)),M^c%S\)do./J.7tq]n,OKY7\Q."?-7h$C`E$V8D8mbJBK,LbD!bX>e%Pg,o\o7YZm\. -lL0-QH;MSZY9MXfK@82_$[tD#&GO#8o46M11=@3g^kU*t%&Bsh(4behYgKo=r<^76_)G. -:4rLSa!?3pmQ8_UFg!89P!B+bcltZ[,>nsf/^Njj)Mgu8+-RTR8_h7a+"P<_/A--RtD)),M^c -%S\)do./J8NHRPC/Mc?M7/-Ms&?)!S`j.-du_#+qL7M+j9j6!:4uFa_EPgancm)E0VFYZ3f1' -L+RZ^?[h3ADh6p1af:'LhEM>!`eKJ]l(p:6Z8T@jrKADUH*dU\BfAi92D',i['.33rKH>`!Og -Hb.h&.)Z$DKu;h-Ig7Up&5[!siY&:eUSfU2,JNPS*O,A`r6@Ec_Q9GXoDRk,mhK^IFka`%p0Z -X!nrg/,&s72BAE,AlgQCDc&=OXZ1M0*/[!sj!?C\nO@(Y^ -daY=3/d^&(VAq0m9a4rd+a2(jtq)h?$m6bc_P`g6i[irPA#P!uaYQ;2S"P<_/A--RtD)),M^c -%S\)`CJ]Zh[IJ1OuSTD#A8f2G^V+A)kr@fW]W6YY>THD,Y8BUb%_>GS!(DCtLkl3>V6P83WsP -D!/W8(dqg(,f-s6*t?m!^rCbgCCE+9s1FgK-"+>1Cp]mF)iCn;VW!jGr<2Jes)-GYA\PEQ@ITe@+].^@e1jVRDb@G)ArJ")?Da4SkLrVb2@o -/oJ3o,)n#k![2]-fK;ap-,n%8I1gAmnCikO2;";bEfIn)mFXN=nli9K(H0fhRU^D\mD -cmMfP!Xk=r#`0caS0tQ7N*G!O-#(,k!DPRjXW_JZQBgJt^F1>eBO0!o)rX;V.6iE(S6IH;\hh -W9^)RsVnnj51Sf2pL'qE[OU>%G:.mIPU^f?2k,]TSj,\!Og)a*`r=7dls -oq5a1H=5H_S@rI6:C[=.G^LEHkS+:*RlZJPWWqZQlhIdMMMGGk168@&A8cli;MFOpHjq`i]X4 -`jI\M`&ic%F>u@.!ed)Qj>VHq-D"'1r!>-FpXggd6#7G!7hb1i7aj\qPQTDF`?nirMGXPs6t7 --UFu&.CR5(5',=c>,>(ScLU%HO%K.\380+r59k!oN+:*QA#_F0)Jfk>N+:*QA#_F0)Jfk>N+:*QA#_F0)3_ofAp_i>Z\0QOm1XZd:5nF -/b&-P91"@3S%5nF/b&-P91"@3S%5nF/b&-P91"@3S%5nI"];!Ru,T--EmQ\7@n?RobX9MgO[M -EEtpcdrc`MT(%,?"uF)&CK:\F;5fDQGoa*1T.[#^L'N -_T)3!!?:9Q8V]XG>4DLO.LS]AL/d3[FSAdW+Ih5h`1&N#W9B08gG,YK^g>,: -8V:9P^kNV!a_VPjf`Hu>/'NX6ZhlY+M(DPFR\n4Y- -/OHcMdSQHPs*B.D:B\#k;1bR>SUI2O?Bc:`94F17W<-R?p\WYCK+0Pd-.\??B=/7db(B+;+** -TCr+$?4<#_;4H3]!]AVqM1Cq("e`IaD?BEfN99d)897Lf -AX'"PlM+[)MeT*#NRXo71VkBBhP>;jg4HXq;2auD<;%o0UG&`]mI):d:!.j_daJ`\L:EOlkMcaGB84Jj4Q:):QYqr$FXn8G0;Zlct -_1S`.^3@kf#Fa%n@.5UuX@(Jm1j[ -AQFT!7T(5OG'.4`6@<_t."_]Uo):7""MqTb1G5'BI&fW4fd^epZ",LYRSnS>f1X>[CF.5h@O. -n/:=ogr_$s6C*Zdq<4]$VFIA/Y7)302_"L$!':H3;J;rTTh3DR(B]([S$g(R -)kNQPpcSl^q;]Z@=>u>92lSV7G[SaF7QkT?amMGjL1d\kUj88T;O<:\<]&]nQ-/BO#(9f@LJZ=R66`mH -M&^!diL6V#Um,,(S3'`E[8e8GB],Nsk@>u^CLhEGb@8q"2Y?)dDK31RQ!?#`A$+m!`V#3>9BD -%AoD"HBK[2aNDUh2r!i5C]-0nM1=APN[:0G`Xgh&3`$[Jurl!cHJfsK21$(_03!/J_>gueX;m -Lnh7EDfQM8kY)2.U"M23uA3l=:[E699=ib-C8*CGMd\[7cbs,L*Oi!<=fT,=_"ka$@4X01!m3 -8c\g9-:fBZq7<6G[uIPY!q.0o\^RU[X.F7L -#0g=B8#4AJN5;]g+bE72caRcM/e9KYO3nRuo'#>[!c7Bf5?6$.;MI*S6F'at/]3n9/;:3;EIl -lDU5067"Hc/KVi+-!*V4+.6@[Y1Sh2g%mRC.,>rbd(0f3"qCkDDWN+:*QA#_F2 -_b5)0*PA(4ee*&;iK;Ofdm;"%qB`_"oc3KW;^2*J%"1h;2>=tR]G$k+kH`FeRPg0NaQgeI,dl -$q9Yhc\egCOCoZZP*/c0+\qB`QnYaMB4J#>&_%WA-%6oeKmMdCt,1rj,r5F/SBA@^5^CkND#X -s7+,O*RTQJ(I"Y!c"BpcH/8P0qiLPgNT%"52(>"BWQm,fk,U&e^Rq+aa^7sF+WobebCXS*X6) -]P=j@t0am2a)k#X!I3^\e4B+`F"YfW=.F1qcnG9YIp)B*9`4t59UVqLfEk1BrU&(9Yb2a+XS4 -obHUF!`n`NFXNSAe?o%eR<6Xq:Q+Zh2CRSW+'VSOt5(Q3GZjFrVDj),PQ#sj65*_G)rp5gTjt -J?o+V#foojHe;`1b=i!"gc%Q.6pS!UboLY27Zs5F`X$qWpGPUn'o_mYc[pOX+IqdQf\BBu<[, -%[.ri(BGfQ7CY=juH9223pcZ^=V@,&DVoLZ6;OX!8Gc!dZ#lNPXBb[]"te4R3eUd9q,Qc -HT(2aaAkH"dsTDQek+*kGd^'$=YkNo.9m._q=r,t!S\Woer;;N`d5'noCRHrNS;*>c.]@ud:9 -VQr$0Rk0q832"^"<#IZ -e"9a[>cST_;2B8O5-cV!:(3>Q-%p7MTbJiE6i23aR'>4'-hg\r`fhH>8[WRkGP8_L -0h5R5_0H,fYno/8V.^UM$XC2HtQYEibOl5([DLD"j`O2_&I@n&hu=qAXQ2;r1:JVb(A -;Dk]3\](cC3nnjIdt2m'XZ.8:<^oF"6QlHac)[TY>q*R\]M;f)&:]0/;dC -PQc".@qipU"Dr?.[I!jLLn!8A%c[^1(BYa)s+oC[d=^VdMf:Qs'/Q%A>VHdhl\@E00jTZI>hT -ZQj!DS.ZFs8%3iiBOI~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 620 501 -%%EOF - -%%EndDocument - @endspecial 396 3922 a - currentpoint currentpoint translate 1 0.55 div 1 0.55 div scale neg -exch neg exch translate - 396 3922 a Black 3645 5692 a -Fi(24)p Black eop -%%Page: 25 34 -25 33 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 579 a Fj(Figur)n(e)i(3-7.)e -(The)i(CUPS)f(Admin)h(Success)f(W)n(indo)o(w)396 2356 -y - currentpoint currentpoint translate 0.39 0.39 scale neg exch neg exch -translate - 396 2356 a @beginspecial 0 @llx 0 @lly 621 @urx 510 -@ury 6210 @rwi @setspecial -%%BeginDocument: figures/cups_admin_success.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_admin_success.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 621 510 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 621 510 -userdict begin -%%BeginData: -DisplayImage -0 0 -622 511 -12.000000 -622 511 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -9a9a9a -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUBo_2q[Y;Ws2!807W/HXgE?UL8"7r-VV.:Us/8k*bG;R=:9rcd2$(,](Z+QiO_lmDI4H -0LE:Z;as"&B#6"4%'a"4%'a"4%'a"4)Uu9k`Ucr\*1ll0XX@6$?T^7!RPe>hWZti)'dNcF5?( -D2Y^/llK$p.kX5QH5>-$T2l-R$!a5`CQn<)`Oj7*g1/^'TJ%Iu6Qs<>$/5?pkAS2s#1l@%PNS/e`eOjpPq9OJ%Y132-5/3'/\Qa9Qr4C]l%tX'"A$gZ"CM_ -Vf;d6Z(jn4D+Su-!6rTNJf:ii]b-[&UAN[eJ:>;cs@\8q&Gf"#X@*R;iaR-MYjE59mWJ@`tR/ -^Y'S9):Ki]rNnT);GcocKT(LR8nY[&(7Ee]be`4)sL^N[_Y-dO]n;-Z8U*)(em?u0:[tRU5Z& -9k!UH:d$)bJ[X&/RcD$8I_%_QUF;UIl^U&Sip#0QSE['KhPgd<0LEk+i"4*I`Z/D;^OAD;]\) -D;\DZD;]\)D;]\)D;]\erV?TR=hOS86h"19NSLSZ/GS9$H@*'5qIoi1]XhBhI/W=E_],XN!!@ -/l=1:g4.C*j)Y27j?]t0?@$QIs,YAT[H8n;58G`CG&P+*\YC9'U"D;IZtHm>NR*gX;Mg\U&'T -Jf/?D+"'ppJ3eOH88dE@Y3=6F%6;h0f.SLDJE+_]!5U;;/KUJrk8o=\Petg6 -a.7bEp62p/Hs8Nd98PLg]R9DlpIi[S=8mYomZ9ZoFU`6)/'s;,!$318NXfqM/!RGQ,p6rHm:E -b@X45*Neu#Q1V=KeEA*_`P5!(RJ0H7[eZZ[UjAY3gU8l'9H-)@[OB.kn`QlGVP?3#@C93ENaQ -[qZ#-WQ"oB^+m6\.?GS$9]_Rt\V`CQB:X6o5rWGR`3>BK2'^V+3:`o5CsWNXkI[;X>(;k86Fs@(i\.BrW`%7s$.-b2/UlYSRdu()K'_rf=R6F?E,n\$M"h;/aSq -/'Ur%U>)M^K`9&Z+R+ei'So8^:4bgCSC6Le^V;ug&eFk*"srfTW).>3 -WQK.oQ0'cFhr7f0nh'LOEI5bJ[LIh-l3)_K`rfX7?7V;4#8!c,s)1DO%C?pWG -J(DB\`3R?t%.%l+j:4%r_dr"42L^^P7;>P#2/V11<-(#P1-MU6Rmed#>Ak;iXp^9n+aE,cX;K -aPDQD=)FJS6@[\\/\E9epYD8Q$[>Yg1^\Ct10=CpijNAL.BiX58;j#6JmK8VSOH`PE49o7,om -J$IiPk3:F2(8$1'8tr!),tJ77UM+^b@4;Co'.dfG#i\/o--7Dj_F,4h7>F\)crNN*O3UMpKML -g](:6QlCqr*[J=LUeQ.[//LRtpD,`YY-.6'U`_>hP87["R,hmJY[;f]D[sO=h -`e-KGD+\\LCq_9&D_KbO:n-\\->o,C\!:YXVm`p/S!7,gcPiWC.@&XsgZ91P957,g/'b(^0dn -'GFdqArJPsebl;$p!6;3rl7>k")YD30CYV6h,kPLNbp95V.sgWkH<8 -NUYZ3k95_oVC!Hj]A#OdRu\Mp%(s<@pp^QjJ6#'H,;mC&_9ouDIehsmUdMubg=2/[gBe>jX1F -5o7nu-6;d8\U@K\CX,IkOULn-M/g3#,#a5C\;]kB/e@,-``9,\+IOhsO`3q7\er8*JSh[HO>b -%#+LCqIG;Ba*ACKHku3N6Q&Faqr::2p]j`36!$UcmsbN1gUa;Q -Yk#`aW%@L&WKc/kb,ni3/:0anh0(_mD2-dDE86k^0D6RDo!^Gog9u.S"0\q"af@"?SoeaK!uG -b+k=PjKOR*DM&DP9/q7l6#IIXE:T[$^i+5Kl7Q<.;d4R%%9bKopE_umgj7u#FWgWYM-Vi#>;: -\mgOD2,O1RdsJ1mbS,H[LH(&L4+3VjLB0Jd2VQ_@^GQYIp/Wr;:;_MIath*YL+J"Y:^C]`b=VH>=L"<4141&5]'m;/K -K1\mM*k,eB#"HtfR%!TW-3SY7n2D2dT99YJLO@QUT*lGtDlWn96'b^fR8b@f'iUXZ]\'(bNo[;hY8WnH"B8(A)/LHa.g5:q_D4VP,6fTqgP<$hFt`\$W(^5+mYsf<@s90]dC%Q,<%F9r6R5&4Y`%0C# -l^oFLL2%7V=1m)s&\6;Q7@lZJ&go9J\l9'MUI8EP,1.p9V$ti-+g#D(NDXZ!S5ZY9*s%`(-O! -Zg1&73+Oe;j-^RK2/=PAWEna;SF8;`:3d94OkGN@O]IcK>AK1$6e'\cs2L)Rkc:i^?6+u>;u4 -k;kZYCIMGG7X:]m_8^MAjPB>99u7b=W#8q-0>[e\FhO30jn8*-lOg`1gBW4TasC^U?&`Z2TP? -)u[#\@BIPRd-Xhcuj4noJTV,Pe:J[VSh&)IG;?c$SS!+:ER[-#KoOgah:c.9LIBfWW]l/Mf.i -lkHf*-c,>uV,s0gI*,0S<4KWqY_m`C%G?)kidWQsWq<9AdNni?FC==Q,g^:2fglR4Ofh#hO]$ -LsL2m@&_^"SLS&mLp5D5ok`d#f>OA'Uq%qRf2GW:.FQ>oukj#!1L;.t]6oWCcYM2TA=3`dK/2 -/!\VDE]bgi;E^:bP/1]6:8K"gfi&X#NN4iaSQ$s6L@j3IT%%]pa7$0fLX0TmP1TdtE]b[T2Y#ViP5b>,*[YXj(`6P<*BN\R*eZUnT.gTmP2#HL& -fVk,Y>$g#&&/q`hDb[nWOmY8aOd=Z[(_s$d7oSf.+);kOg[8J(f(JP#bJ(;e]f]nL8 -g-b>l&U]]afl!brii`JgA0El[^3h^`0R;6_KXn>bm04pH9%Dr8*HJT!&Vek+I?X!l\*mF1!H5 -<<7VG:0iX)P@`crF@q-dLWT.u\a_[sm48B(oI,[=9cLd]MA'_ -(#mc!PM`CoVp@kp+2kB;u[>0\X._]*$m]&\9q@;mr,i5J+Y]#I8EXqGi;u#bG6&8o0uss3D-I -a_f,Q<>J68U#233G?p$3W\TOWgKoYLr(+!CQ0r`:TDQ;4d#TH_1Ge@2DgeD$25f`YA>OKQ+U- -)LgPgrX%Bn!eE](U/a.lK,3gr[)%H%^KR8Rs%o$Jlu:E?oYV:fp]b.P.H$HK&ES'g0ACJB<$@ -=D*Gc2b5snC5alRI3schH=c,*E9lI+m3^3/o#UYj+^9I1tGNRK]"lg,d+VBZr>$:%rLlB8oDN -uC2%bUp182q.$YAW`g+T#B:"?/AqoJ4"Rnup6Fm^TeW"nd76afscAEGf`6Oc$V:Ej\Y.C<7gS -E>p"d*E:oMF*&fVfsOWAmdQ2ELf*Wj[mMlZk6uTf,;UC/aQXa>o0A<,6#Vm+Fk.ltF02FD^$G -45!\pP6/"+HEFSMCg6:kTk=MZO'BR/[]O`(UQO,Yg:!qLL$NPuIU#G'ngV,/Ngh<+cPO^H^eG -A?/Gg!uPp^f![1Vu.NCiI,`f6\:lf: -#gY,A;&*73Rp6@E@_9nM)cR-jtT98FhE9hASSb'9R/sDI*.XiV$_7W]UBA/Fh&QVoEAN'.egq -r'r.f\F]X7cO7JdJuD3=pC!'@s/5bdKrC.2P,S:s1LbtpG9_%38 -nkNe?R-#XW_Sj65UjcLo*3IeVm'LW)7q:l/LROKWaR$@U.bM2d*@`p06I!TY8s` -ZUD9OP9D1(%dg6(&H?'>L;]11,%Ise2oW/4mUVR;plWbj.sOV5]R2_eP.mo@c.TWQbmGndcM[+G#&_,WQaZE -qB`+C8[e$YcYid&pV-0i:;Y#U+HCl[qHGe%5#IX6tk4q]J-Y5fH=V%h@!e&eG*-I744>j]GQ>bK^EDs4US/uD'Lhld2d\Df&%Oq45&8=pq -,r'Ms7`$";2nJT\-u-',G]?Y$hPCdBl:"@o=_%6UfO'e*DLhr([O.E0_*s%(D4[DdC -^Z+HC1#HDKP?Vi2R0FSD%^>r'-@DJGj7M%r)kG)NIU=2`ZB+l'>NF_%4BLE;t+7Z)_[2<:PKJ -;O*3j;*2LA;T,!R[bE8Z$*D?2o0+".c.$H'FXB_pKnW__0K20gV0;JoBf9%''TtF\/6'XX0)r -o2I1Sepj-J\&/LDh0;OH_dLXIFG_kk/\Z(7Tb%U$QYHmGPin'^[D;GK*V].<:u4W<'uXQtV01 -t-N7Bn=l?Jku3(cWo%0Qdn`sT\A3j:RPDL[@1?7Oiu?"'M8(FB$rfp7>Ab&Kq\nA8D^XDgcrai!89\$C -`E_OEAiJ.;PIfNOWO,7ZDe_oW%_::G[]Y'p9BDe1?tmtWK^(Pf2F-]]0k=3ekY$D3<0$Zzzzzzz!.P'tZN\m%k=)"!IeX"q%'b -JY2XiC5>6_KdLG;/5!8N5rMl?*66L=WccpS;Ag@3mgSh;RhGV,Pqaa+RitiU% -=6***r1JYq?3"&2Z=b4b@E\KdWf:paD(i])9t5]I6#N9<0#"*^FWX3O9BTh[>,&J#2J>CH"\g -RjE85NsH!Ys'mh\F\SNLeMppA-Ngjo?._Hk@]3Gu5Fe^S_95&;l_"f1h1qobh"f.s6^_'5rYA -!L5bmqIM -sWY^8dbo'+AM*=J$)q=e`[/aaGrK$l?4bji\YqF&e[ -E]I4=@+fFjdglO*?aRA3PrZ+c6k=l:FFE2CRurUsID^>u9&F\_bf=WmuQaYcR(-gG4!`OntIO -H-f:1bmt]#o/Va/&7HBCDt(Fs55JTL/@b.k%CLV&QESTLrIE8/0?YkjFe2+=W9k&hh@c7XQJ) -<=z!!%Pa#(]#:hkC:ok'!R3N\@o*a3K`.31abqg/G0^0i -!+,(4"=]I7Ej_Z?)(*lT31oW3b.mPO?^il`Fbp()=qq;H)6QI3AMto&Dq/VUnP5I=,qh7Z/O_\=-1crWYZWT*&nZH,]<1QFlV(ID[l^SaOS@rj/s_=15?MdE0g+_WY45Y0X!a -s-f>aT9-j.O_ifM6\K)aO4R@)C@8/eB%j#X+G\j0$%3uc0/Lr:AnJWQ2 -UVbm5)%]JqUfHWn7hThB9nZ`E+eoekIOE8(4Js?e.sg'.6Hp2l0mC5RRk[ZStt\9A\XInDipK -T3o53TD5;qp2&6/b%u]uZ5Ecab&c)S]iV-cn?:5h"-KLYQV'b.6[>!dh-[pH$d@D.T$]tRLS8 -"uSVT9g`L(PtlV6\.0/I`[fc95$/PcJVY#a,GTT3,BBbQo7/rVaTqhu9>,+47>KmDj(9ep+9c -3oiAi#UZD\gI?t%XDB*'Nep/#M\rN>/I%J77W#;ZGaicn,RVb[>qgULHmHO]Oie>dDaA5(:-P -":X.XG(9McZGr8oQh=9A4s)pJjE"?CpZ'Bdm]Q&1g?W&E7YO?S5k9Q&7ks#P4Y-sen:,(F\R<]7F5u&`AttKH1 -iI5ghI+Wm%hAsPPK&4?Q8NU;.S#N4GH?t5P\*pn/6peE2"NNBKlADS>be+V\`,nfFR2A)5;;9 -`64GrH1g<+Fd/q'kHp(dlYXU]8$eYPCPc,,0DZsO*h;kt96P/mcRA[7jCrJ&XJe?=VV8Kpgl`/tIl[jMGgS\ -f\;&hkn=rLiMFXhh@>nUl^Ws:F^C+K$h6Y[;n13(sQBo!]<3r\RdFl1r4%CQV7>F5ne]#3.q$ -XiUC\El.9;N;,2*[2p233;8r&B[c&k6X)2S -toTlb1r.?t*M4ZpeO\iIXCst'( -\e`#-]B$_[mWqq._s(2;j9O2j?KR1DY.@[RF*>==DW;-i`#eT_\P$l32Q6a/shrtielG;ercV&N2hkN`#BmMJ`SX7ZR*#8_(*#E_e2h`G)K-;17,dE[EC)`2P -p5<+Vlj]N,6*R.LJA7VCST^?F3BF>S]ai)5i]%iZ;2:o-P#2JrJDSL7(u72V[U2rOCO2gK@A- -Or>]'Fe,3aY.*Jrbc?_L^-um&5$%2fJk>"o9+G'':)Q1/,1E3dK]CJ2EQ5N(8lpaX;keiQXtj -.?%YSi07;R4c(2Zc57"4].L5_oBMFg!p&sGjTa?RAL-'Om]>?5BcLL4t(g0srC)QGJ%+N&UW3u=i -uK9;$Tfh?tJ;Phd;+LGt,"XeNR;FH]^\m(1IV=BLt-5KEOpKD%[9'dY92nfEiOPfp3X0 -#3tbO<9*.Sj-iH\maS].Za%Jl=h5;IA/Q!!!#ec8"=[XtXh^)79m.rl]cJ -ME#m;m4^B#^FbXm]=OR,@>\Ki@Z>;YRg$np2tY+\B2%GB`DaMaZ#AX!Zf@j@_ja?3f1b^c7"U -,>$oOpH)qcb9Z0F.RC*2&'c#9EFZT(ERo9#L/]58&V,0)1uM4"eq.SW3>O2EULdWSPkBaOTpj -e1MR'(./XJkebA*q^KQ6$0'PXAb5bE^cA*;H&`4]Z&@:AR:#T=2#J&EV1;>6On"FgeXeTSD0 -;kUS6QUb:J0fMAuzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz -zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!%PaQ!XMRNs,MZiX9K':ID,K/&CRu!maL%:I -WgkX#n?>]r4t9/4!e7^*^tp-@S*,SNiBHrlss*l3r[B"gu$&:tlt_[bH%F[B8'HY3VahGJU;] -dU+J-Q)dZp%J"@!`5.1:pc0pW[:PJWir@nZM=X-IZEWp63k=oG\O`3"D86)[no4He"[YG)skTll*cfZq@GI)Tj$(?46E( -2A1485H8In4!&QUu&]5@`X?KW,5[OQ>+iaUUKd?T0F,,='J`\1'neWC9a&Sf#d+l*Rsd@P^?: -W[V])gZ9:"0LYB2qVj'YcgSE(kmgE\LX-22Fh);/h/[]>udULDmUo&@%C0N@B69oC+_FRJ6P# ->D!#AN(M8.@qo>-3PZ.fBeU<'QZ%f[rhi@;C2;lMOTZa(eO:Pg6im[UZscUS;Ca[P2Bt<,= -&@ZFrtYRN[_3DcF&HS>](M^s6*t+"rDK3PcVEmcAkX*lU,G/8ZSR5OCF5Z)D'>;7l\*EEP.Am;@4VRFnc%EV"G:$@tue3)7+%(^R.Zn>n<^=<7KA,1>E_fjj -3]/"EQ;((GLM]e'?211P#r4'-Wmt].(dibcD,>8IG"qMgkG2.V6EGSYTXO=885Ir2KrmCYeuB -[to3uiT$:acRpXI6u_nQSU-Kb)WZh!S0H_6S$Kn.mk5>^)STXNU"9=$e-;MbfA"qdn-AGI<[LI4~> - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 621 510 -%%EOF - -%%EndDocument - @endspecial 396 2356 a - currentpoint currentpoint translate 1 0.39 div 1 0.39 div scale neg -exch neg exch translate - 396 2356 a 229 x Fm(Congratulations!)f(Y)-11 -b(ou)24 b(should)f(no)n(w)h(see)g(the)h(CUPS)g(windo)n(w)e(indicating)h -(that)g(your)g(printer)396 2715 y(w)o(as)h(successfully)f(installed.)f -(Notice)i(the)g(sentence)f(which)h(reads)g("Printer)g(your_printer)396 -2844 y(has)g(been)g(added)g(successfully".)e(Click)i(on)g(your_printer) -l(,)e(which)i(will)f(be)h(the)f(underlined)396 2974 y(name)h(for)g -(your)g(printer)-5 b(.)p Black 3645 5692 a Fi(25)p Black -eop -%%Page: 26 35 -26 34 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 579 a Fj(Figur)n(e)i(3-8.)e -(The)i(CUPS)f(W)n(indo)o(w)g(f)n(or)g(Y)-11 b(our)25 -b(Printer)396 3700 y - currentpoint currentpoint translate 0.65 0.65 scale neg exch neg exch -translate - 396 3700 a @beginspecial 0 @llx -0 @lly 634 @urx 554 @ury 6340 @rwi @setspecial -%%BeginDocument: figures/cups_my_printer.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_my_printer.eps) -%%CreationDate: (Sun Feb 29 19:55:37 2004) -%%BoundingBox: 0 0 634 554 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 634 554 -userdict begin -%%BeginData: -DisplayImage -0 0 -635 555 -12.000000 -635 555 -1 -0 -0 -256 -000000 -ffffff -b03060 -d9d9d9 -c0c0c0 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -0000ff -990066 -ff0000 -ffffcc -00ff00 -e7e7e7 -6f6f6f -800000 -333366 -6666cc -808080 -9999ff -000080 -222222 -ffff00 -808000 -008080 -429aa7 -00ffff -00373c -008000 -ff6633 -ff66cc -7f7f7f -ccccff -ffffbf -d4d4ff -bbbbbb -8080ff -5151ba -cc9966 -996699 -33ff99 -0099ff -1a5f67 -0000ee -551a8b -a3a3a3 -8b8b8b -000033 -000066 -000099 -0000cc -003300 -003333 -003366 -003399 -0033cc -0033ff -006600 -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333300 -333333 -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339933 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -666633 -666666 -666699 -6666ff -669900 -669933 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -9966cc -9966ff -999900 -999933 -999966 -999999 -9999cc -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -cccc99 -cccccc -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff00ff -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -8c8c8c -cccca3 -8c8c70 -b5b5b5 -cdc0b0 -eedfcc -f6e7d4 -716a61 -8b8378 -a6a6a6 -GhVPU8Ts.([][HSeFH8)Lns*n_f=\-Q#:/7PHfie`FpMm+FC#/-U@?7*4Pm&H>d2DKdo^gs4 -N\d&2eoS'EmMN?N?IJ)$!V)("*35!9o&kJFpWF5^Hf^+?_Cj7!d#&^74!]hNKrPq,QKt5;C%8 -c:_kq3In0'a=BJq;!H6IhS_4MjB)"BP'^6MT-%);i7].q4_Lm->8,fGZc8d(:!l2%\3hFV^'* -8;(%O[Y(?]__">;7XEHJ>uu>tLHBWoHn*QUNcEK/HE8JBWXtfkEQ]C;O%B7M"f4 -M2P;-gR(Z3=k0o[lG#Si3",N1?4S/#&(<(DPHYca=O7#@pC._$>2:9$WWE&CMsR'nHfDumI"r -7Zqu^t!u-^dLG6i$O!H^dLG6?m6^V0G.[,Hj*mjVLB9oHsVF#S([jpcc+MJQep5YmThMh,>!: -];JR%l/A;&c!kaerDBt'>EV4]ch6YY$\rgoo")m;#)bE@HY-)Bc8FND:j@EJ=-dq#[.F -muuM7:WsT,\05-W$,cUAjlRkAkRI2D).,Qjo-`otsAIN![gtRA]=ddaL;SVJbbTU+!^dSq!70 -qr-YkgescZ@74ah[E4j9J;qYUdQo$a -fO003$=FPGCnkuBr)0@oWH%*FV>PrA_:B<'XkQJQZP1a%CQrU!(#K<:a9Dd>Zq\RBK(^PYM,N -lj!Qq&Gh_bCl-%?!?dHX+1'Ea8F]@1>"]64jpR@_UAXe6_XQ,*:Zh,i9Y78[_2R3B=R)oQekY -PD4E>79R03gR1dM2Y>%O][u9G&]K_"NF4TV*hINIKUSk_-\&3h24t6A!g:g?DlD2nIQV--jl$ -`NqV71-72ll++^BL*.eQFI7P?ph"-0_h'ok,eSp2s4aXI7Qh`G*5\CT^8e7Y-cbatld -D!Z8jh3,WVL,^W@b4%k7*d0m>IX6(m*jcPqiLH4.d=CBR%E<:F2tQ6Wu"#"4ob5.fXsUur)p) -e@6X[`C$DT]rWJ[b'jb\EN8:Pgj-Q1\iEGJ+.]pAZdk$&t:I-1\r))*kYu"[&<'AQDIlkuX?> -f9@O5)Lka*Sf_+L4^@`(M#u27(f)Z+-N/q,gEm`;jJgM!ji'5GVIWV.[36Q05"s+Qc>Mgq -66f-!c*FN%U!bGA@+Nk!Zc.j2H7uDo?J:f_rF72"E1-?)l?PNg-U7j9QUm0bm=EH+aN9W#HHV -ZNm!5!eRn5:3p4@ngW\3O-b0-SNV'O0GT$"Z-VK!M:OWKjVMWTgF8We'Vp!W&AT_,r]r-S.cD -=pfk`E&cd8C+0Xc+i_anRM+LA^O\edk)(PF26-6gmej')lG]dJLHT>j$,)hTE*diB>' -d=EbhR=fFgtCtZ_qBJba3`Md`W`X(8R^.[%^kj5I\POjZJE=pfO_(HD+1KV'JtN6!djFPPS*9 ->eq%adSk`/ZVL\[#"rm^%eLfGCD*aU4\C#JN:gB5[2n\@[>/mOn>"@h;R8;dC@09or:)ECT[O -n;iH!sQEjD4E'9--Va-]fiKeG>T,PP-'R4uKsl[$ZL4j5ga<"ZL@;jB%o=70=LPC)7/Y;c]B. -IaeX*t8gq,[J!//nBe!N9;KZDt_."0l -jmG/1Z8U:C;pdIk6Q/X06RD/> -*VfEeiCaDsju6c'OdN4g8$P4Y9GFh?`@OS+EG)P4ZEL_Mtqu\(:$dX&iBQon6D0Sp1e?af[\M -k0$2!cS)WP@;ue=F_i.eG#Q5&;Elq&iq@plh&8KEUV8KW?1QpV'cM!oY=j -nNnchZ+Z@Y>:C[HjJ\bG/\HfCiJ6srm3=)DcL156]l72kKFpr`)@ZPkPQYW[-0RKq( -M\3Bi>FVD\+g)fgZYu9ec>W&f>ub+gTP)*rK50H,T2H3J?Zd4D.K"&LEhk>)_"dg+[af*&59e -J*29h-b4K0I3?J5Tm-`U\AaNO$#jW3-i$3*AYl1V<-/[^Se>AtCTa4XNo_`hZrWdXE$\6NM`H -(Z4eeUDA(mVQLMXsj0g?fn:PD(.C9ApZ4uZ4M!Qg=Ei]DkVqdT]ps[jTVYlefApldh4_u!2!?#TAo\hF -ECgT,X3Wn:D\+.$0=7f;'N!c*:Y[OtJ;Pl7FZc\-;1[d1>^^$t2?nLFaJotbYl-+O?1B[^Y\6 -ru^%A;]g?AJMN>Wm/O3YK"8f6G1e6R!@3Y`=2QW1IfqMqat)G`7oKC;091S5"9k\*gp@nf'=Z -"8KZb&G-?8H=#[[/db=uj]f0,?NF_^(l0Ljhp31k1T=6P!5,uI^MC0oXUdF%<'c0:tWb%fg]<_Tod@r*s9UGZX5o@;F\?B=n$UWc -4)H)lDYEFFZkVo7u[;6p[X0@h`n+!1))h5VK#=J;.M2qu%5=$.s\>[[ -l1pk*H12g>.$Ec[L4oup<*=mP.do+?,M$d4mMM4URkO(s*Hu]1QpJWGi&+K$CU@Mc.l;`lXRj"t -pW]Y^GIFZl1/(Q2o%?1Nl4sR3mPu=8/i?T\90KkQFM@be2hIGZ)NN2/4'4?g&/S%?Q[6Nc[BiZTVnOWEl -+D$//RHBthl)r,[UD$kR@H:;#nl(@+oraaX2U"XGgGV`p[uC^#mKO1R/u6LHcU -^pYK0Q(=gk\*K];[,uJDfW8n;<_*7fZ(=tfrkL%jWI2r4oYmeO^><_'[12&tZo4b_9.<9,'n+ -S6ccFDfO4Au'SM-T4Emh:GHk4(Mn*N4\X"eN2f%qZ0hWid#eWdukH##?\.F#iAp",caGPu3p) -MdNimA>/e_'Qs_E9h=VXfqAf0nqk.msW\oJ>9MD]oU4L==U'0g5O`Tkb%4>WH\[k"h6CWkL.]sY5u` -naf[gWT#m_:--TpXou(Mnoh&o\$]-f%WTnpRYL#otbg">@R7`DQ*>*9VJSI0HIF%I'R\U_lrB -Ch$eTMij(#@p*LctEEdD)/C6H?8&YY$@'f7%:KkP=\]`pU%rpFUk1(,dOn(us_n=^!ehF.kA> -NN:;_a=cO(Q0FZ4j?HX1J#Kg+I?_#-`uE.5<&qg]dh`3B+;QZ.3i+iVM:_YLpTOiFr`>X%0AB -[5TX_Nr.PmIJmJ@X1.a<;+%Nm41&:/YI\%AY)IL7MQd!Hm0$cF -)=hfQG(4$h='Q%.2>UcHT$s<_0bpk#ZJ;YdZL_ZJL?lm)'/sj!JZ)b2!DaQ0.FI9M*3lDUUX -AH>GB&Phri/r3GI,h3tl4_4@iTHh5uoi>J[4a*M[lC3"0fHe^PCk]kki1L,+jg3#>5LbO&3m. -IkI;mF%#]%\%]\G$ZN(n=obnQO`>HarMsXsU"[%Uu5<3g<40@m(IER^:-hZ&&Ue1sfa(A270U -2;_B4HFn/_JtZoA=8G?=%W9k6D6k,rj//\P7h`RBU0$YTD,Yb]?'75l[ -oL;;@i>ml$t5A@aK:YWd#*/BGp^)r!CFV\_)nl`d&`IA$j4SZ@V>omOmt2EoQ&0E3.qf+K1AW -kEp`*q":*Aa*h9>?SZGhhOeIs]c,V:cj`S(@ii<)4.Lt=!M+P.U0eB/$kLl?_oK?,ZHB"CY]T -]mZqq9#Meul4C3?]?B_3lTEVc7@9:5nVqq&=%e2@.E(l*t5"Q#tO'])2DuLkSjBdjc^QD.Z+) -/'hmIDf3\^)e88.>V.jKo4,@:GOM6C'sgG#/t#(F#mJ'oq*Ts"$KS>8L@eJ[B"[uW<:=NL1KA -\c$bYbbfiR(#k]\=C;Tehcs'.,::_UK&oi^'oC\?PRAl"DWm9o=o,)@lsAE-D0WT^Q!`D\*UG -h)+OBEDMZg&;O3?gQp=T=&9J-*CTc:-K@dE(0=E-Ku"5JrrM?=nTGT=Q@%:McQj?XGO5*g>TD -o+^8b)gPX=YS`hNAhN%)o4]1"HUq?fO>e#DIg9MNk-!JGT!Hb0D.\@@6V^E*oFEM'Q#G0Vn5U -si"7Pc&NZ=1nCaP$.K3PPF.NUVnpp1Ej5pU$pZh@gK!_%j:-\'h:Oh$3PrjC00B(l(!giD$?K -@T/b_FfG:k&hFLaW+ksg.l2"`iL:`HRoo?2ITprAUqJ!UClUO&T=]7Qb!c\dDqOCi.YEY[Pk3G[H -FnAjlWj8gzzzzzzz4qGeaO(?nCcWgL\&4U*r,t^tJ6@@^S"<3\"0:i:(&l@g]#=Vr"\-Pi96" -Ks>U^%)j`b8)6.bGt$M26'AP9O9_U^'BJ'uqWAV\&Kck`\\T)q+aQH=."U7>B$Af#9"2fqXi>l -eu)C[g#.>*2ieN(@biZ,9BDNd*.BH#Ys"2d]J^:G0bRCjjsH-&*Sn3\Fj\kM%bJ7?;^5^Hf^+ -?_Cfm&h0*zzzzzz\:<_OJOV$/Rs?LgE[R=8F-*:a,5M-1DtDuFVQMpu.bS=\b -r:VC7csTs`cS&Q>P1b:fKjg*#5[E`:&*]K7I6Q6%EW=W1e8<](-\ZWH81OB2&W[hDY:Kjg2BO -N6c$M2Jpun%;!B\ZfqaeU:9aoL%K#rg@mp(GMsGT``rK)K04UYTN:;#J$W70Q.*asSN`RM"^! -@;Z5bmS$?M'ln^HR>HR%IC+PEb%Emk,;j7ukbqm -E6NnV\nX+\Wl`fmXk)tmf5[1qh**9C/51&UZmb%4-P%%l7e'oE]bU_]1f.[j!".HEKtTK/e>M -^i`VO>oS0oHdF0a1qs&kpJC'O^-$T?:k:P)A95f"dl0X'[9nN/a'W&8`0>[**l1O+T-V.#af* -ueSoR:"ck/7s[eDK5LF`qrrpLrg1(5j1IX59CFMF]CB^nIt*$Jgj$D+A)q)BiF37iZhL2-,%. -0B@S7SCNWL]_%$0\0thZ\jf8C`"7cJ92$ -UF@%pFLefE.R=aI\ZH;#\kHJpQC*_F]@,a%&GHJ1A`/EGqL8<;sb9IG"?aFh5??@I.NQS>^B(d8!!= -dd;gM\,M%_%\g4tr_kdBkdS&a-_`D%k++?aA>X@L^V+5[r'D`-clgA^jlXr_:a3ASb-AWBgK] -!:U#)-XQ'ft-GeQ&?IQtS+I*KsejWfs5k]oeg!V3`JAQ]"0WmtE!`\A,r(aY&Vh45)EdQ:4[<,s>Zr8>;k$LgPIs8iP'rRUJ)d;C#,3Ve";mqe"iE-VSQI8FN -]thXToX"1<5n/mS4=MuKkiEt62_n!J#qoN\salI,'D_<<&UJS+?h65n/j2kR\VATM>i;'%V,J -FbQjH-dTl2a`i8m=Fja>^=[;3%&4##PEXh0iiJuzz(kLKEeENb"@hMXO9[4T8U(BXgItAc7=B -C*ss'&mms5>W@.9(QVndl>^d1M'L'_SBHEN'F44uJV;ZHU`uE*FTih!_^6U-YdO8^IDqo+!uP -V&+PGH5GY@?6utaMZ8@$r1j*8*k?cIhltQQL=!fbO%Ogi;;$EFor=_KoK>)EVXg`Y@Z$n#5tG -`66],GklK7oHZo)/ieWA`j'$e/trK@ma'Db8g*_t0B%D#D77#A)u1+!QEmSo>r&[.G*Qm8FM] -dmK4k85S]+MD05%,H`6YZ'FopmYK$V4&ZH$>+f3a+/MrB=0;.InDkEi<@;JG2UDm\8[Hl;POd4In/#XHY -eM=a\Nid<1eTMZE/VeSjs*?8q+ogEW!%fI96HjrB3bqYj^5!T=%.m6qGtL5LW_F#K -3W>YJK8SS^/T@W)CN5$*!p4qB\6hC"-^MI$c?DZ$mWE7Q)$p9JB;SPUIpW>,+D(:>s=:>\]UW -i$d%I*ASK+81I?>*%Fk@_nSs1oKiaG/E;Q\_UC+^).c8oRDJ@L3_QAdhNa22jDS2rhG]3iQ/W -*Ebj-p@fnG8to4ph*]dZInL"'=uXCd\m'r8pcRAfT!bGX!%n]+W7\(iidPlHV$GH/Zln;bVL0 -[R:R?n'^%o3WrtT5DMgk7c$CV2aCUlVLf_"n>]@6$QFj+CfEu*UR:Z\*H!)n:Y7m(EsLr(LD&2 -%8u>AjqCG7"DE)A*7ZuF&aW"6Kkf>(Ul0aaGR_V7ofgMV12AEG=71Kj2!*LE32LT:8Rn58=f= -O:S0AmL;#*W@rI!JMW88l,BWf&e1W!t2;hAq\KO,Hf$q53<$88kP_GA6<$;'%dC4!9_.'qaBJ -;A>^bT%2YnV$B1&K(P4QA6m($dbDe%W=&gr#uQ#bo^V>n$a"+q#-(YLBU)Uj/VKb@k#*-M6#mRP_;Q0l?]/+rPY,F#4*#:+gf*$- -8<4%4oX;`p-6;9:@\rH?.aLCJA!MXs$PT-$3OeYO4m_7AcE`ETm&NkUDA0UV-%(CRT7R@Gh;b -R)`20"V`6e$mFIB^C4p+)kK(r*IH<85eE?<34%n&;nm%N/'dSnUeYJ5'f+]aZ].sSq52_Z93U5J5u*o56g$a3uKq8?-Ni[\n8=XZ"4B+i>GEHHm-VPUMaX?*/tB= -.p%'oeCC&(:?.W3Z1dkp>'j<'bcq7Y>.j.Xc.Hkp`>Shtd+Q(j7tiI?9eEVg%q%%cS:s)bBE% -.#Lf^?N0oG`G]kj,"h<#nQVkaHU;=:'g9M>,mE8j+MF8pC@7ps'GCsSrP^;.O_TTn7fCe?/QDOIOK$PdT-bE: -9FqqHl7)`(UKgH?>3_pejLt@["F)%B;8jg&8PQ3e-)J!o\^PJFL?b5^6Zdc6L!XDK?\=]-O5fs81+[q![)V.6s -3R$e.h8`Z9+)iE\uuY-(>gJ"K)PQG5(OJDCt*j[4poW8O"B*j+],4eMHMsaH!*4j0Tdos1\]oM$Bk3K#PIbndTU=78^CI -UHEI(.j9fN_DNdUeckEg5U@bN64/D'>6:Ts3TCamsPkZh4;/S%F29>@ikugJJ05\B$E.[_^j.n -%r31dB$Q)>K_A%ffX)!gRpB -E^IUnoQ\'4)=E7)E;_d9U5D-E7?\Ht5Fa7LE-(7UYJ#iEndIGkKff"SE9SI:i?hh -r\HXQF6@nbKRgW&h%OS$%b#JB\7:uY$c*<5/Q_P1^]%M"QF5JZD05jSRNO7`Af6nn2B^(MhO` -j\b0RB1oCTindf?/qlk3\P9-U@+%W4J$!28(0T,mOSq,I;pk#;=/3QU-,8kKBf&N<`Jf/NSHqZf3(QOE/.&\OW; -/*?.@.s#ASKJZYM)%3^a.J9hW&9OgK82Sm\5't@=h@.aiX:rVAUa7ZpJVYAY,AF#0FYci8R'7 -2[eF;;I#q["#@ooe?&u%,kuH[o4(?X=fN[uB%H,`9$AQqO]a^="oGAAdlOA+diCN35`%&pD+h -`6_Gj32X`RoqG-0\QL8Oml%QV0",L@jnnPHdB$'rDk]-S:DP#'RMDB&!]77Cc#3'4_GB-b>dp/T9i?J7NXGoVoq@^@+oLW,O*@l' -M4T.]4'/a[O2^sj)+L,/*bRe2Er1#PM>L^_d>n*RL@b/$I-'/oh`(k\Eji/TK_W>2cM/]XclO%?=he8Yg&lsfo+r?5HXJ7$2q^E;:]:s)kU0 -g(npl(HI>o6@#'YS"rN(;]tt1:QX93S^&p'>c'b!24Q(+ -mNAN=(fKK;4!h6(&<+)aTQjdem#64`(zzzzzz!!"t_V,V]9cC)Ff?un#E3PbT%'1:`rAkoX\@T`_!q4htS#dGs@;W\040m&4M&]nP]:G]eLHD>ue^i!`24 -JT!Mak&lh%a!XI,hk(++49f66miDl+K#cIl1#kI&[.i7`*T]S6T8_Fl -Jl5Ku![MV"Ya8SS<>,MNXh!S>s^<.u*S,fFaHV$qu&Ca8L,LNfb`LBrKb,dd%SeMarl#e -A"db*T28)UU:c3=8@k;*d()9fgJC"'9Prg"R/pUC8BD7UiNTc:u!%b_u5hdHDJT`qk5*, -EM=cJ+*i9gI#dU0uf(J#b2!H]pMG/N!qY1JC,L:=m^mO)0DDp[N3^!iB\"A\egdjMjoO.;T([ -'0%H)(],I5YtS!s+Y\q7$n$6$](8Clel%zzz^s/VCK:e)"oII,^%t6/#!rr<$zzzzzzz!!&Mu -e^F9CU`s-A;p%)Kf7L&\#qAqKO_72W5L14A'V's/5k(jSN39ANguHbm:9pr>1#$HaF0%^A\_; -t,T"JSk,rV\=p#u;^aDnIkL$U5eDN!.(mYPcL%GPWUMhbQc]@Uc88N:;du_..k-e%;VBOCQGs_5EmL -PJj@X5#7In7l'77qU+N7h86Ps!*=edGi6bH!rH;m!CUSXl5Xca2ddncHL6na1VNSEBf\sta=3T*k&4n]rV".JE>EE0IP>B3h.O\Oo"/JEkb`[t -P8g%u6QqPDW`"CFmH(uZ0=*A7q=aEX?Bgi`4f=68VMMZM'9j)edmP5/3=F+5"GnVIO'?a,sc\ -`M$JlI%Y;H\)5&!^2DiZR#"tZ,8O"&)9Wr.V;K20jqTK -d?2o,uJ!^dU/4!.b6Us,&(>d=RK^'6q/t;'X8[Ar#K5AW">/:o')rpLSoMG"t+VSZJQim\bg. -#Zs&?X@8Af,?-\pV>Y*1j^2,+b[5I)qd=a.lql+kQjkO.Dgn1nc!!(r9\E-IDjWP_W!_S4mU- -6ML%gk,.doj6m'?Pm'j@>hg+J4D,>DR9$@'W=g'll^AY>C!?"N_jZ>G"fA5mn&]K;'BUola26Srl7`Mb6m-6?3Dt1@U/aOA^7sJKoF/F]CED -];91r(5%FJ%"jiY*GoTCH!O^q=EXj`F:7s>o2Y?29l2Ht'rX.qDSmZcoV%%=MM?U_Q19@cRX> -')P*=nkbCS:(kg]MosMS*;Qm7rRqA-g0jB111$nO4'CdlMTS7E,gU(66]3@r.HU9G0sok;/O_($gge-p=#$ -N)WJ"^Ufg<<]Bpd>1-NPW"b5c;gLhc_*h-`4?Q0'H_@f&g.NN!HnS+<*V%g#n1#^7kd*;p#/]&$3KjHRKqd+?blrk*/H`oo;F6IQHF`(8U[ibnc]QO -,tD!?ZqFOd\EC0YJVU((Mc.I&G`Q2SnD@93Fg%qNjd%;8_'[PMkrK])MhIVOQGQ'ka#P<[k?o -"+U.*bi@pOB\'2*&]a#/olYqRDUg&/>eN9W<8_]9U*nsQ?6k(YY>fi9D5">2G$em=ld5EgLie -Jf1UlgN`W>I%O0P"=`.ubgPdf(9$"bj;u4V?9<*o+EdJXWf&OWa6!W^.`*BqkDqhUtjRR?E4L -5\be3NAu%JOD]D*6QKM$7cT2sc-s0l63@UoL3kL,D#"l@c!.?K0*Yg*g+p[G_fQOk -k5=G"[t=J1s,SH=lEmQ?-&X1PEEbQr841N/c[l^TILA]Cl-LA54;hH -bE$L=u,9kq0*4Eg2O-Ia0^"L;5cf1U#$gFThJMCZ=GrN_THUJ#$`Uhla/3WD6KCc^N8Q8D6]e -!fqoGSJ\ik$LAk;6e3Lb(\H>'d1o4n33UDAFCe5'LQ:S7NV$+3>"eX5\:BY%bE^NO'RU3?QCG&/YE7TG!n&"iUj#;r>C, -o:]WQ$@mk/V.X3??Vf'@Bo?5DqOI$"X1rr)`?@0t-ufnm[WnZS:GQiI!R`uc><S8;< -Ge&b25GGWGcOmbp!pEUX89AA>o1iYAJXVscd124YH%GoHDpgf'&qKre`tMd4O%Ybb4DO.r_(D -&c;:RS(DU11kuBP4kPPY7]1Y\MCU?CnoskfErB0tkb`!U*hEtk!aJ5>2l+R#mq/]SVl.$M9OI -d2g;-mCOFW:9q$0g7njUSb"hUAc6[Z-b,O'002rhn:koSi4J9sa^T$ -k4%kYB(cD=S]e`i^FN%-JQDdKDd[/%Cp6\RilH?ViP_d,C6`p1+_c*,C#"X(TZn3 -U=_0>&El!2.6"f(qYC"D)sr'W[.=3rCH^7< - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 634 554 -%%EOF - -%%EndDocument - @endspecial 396 3700 a - currentpoint currentpoint translate 1 0.65 div 1 0.65 div scale neg -exch neg exch translate - 396 3700 a 229 x Fm(After)g(clicking)f(on)h -(your_printer)f(\(epson_870)g(in)g(this)g(e)o(xample\),)g(a)h(windo)n -(w)e(will)h(appear)396 4058 y(similar)g(to)g(that)h(sho)n(wn)e(in)p -0 TeXcolorgray 25 w(Figure)i(3-8)p Black(.)f(It)h(w)o(ould)f(probably)g -(be)h(a)g(good)f(idea)h(at)g(this)f(point)g(to)396 4188 -y(click)h(on)f(the)h Fg(Pr)q(int)k(T)-12 b(est)28 b(P)l(age)e -Fm(b)n(utton)e(to)g(ensure)h(that)f(e)n(v)o(erything)f(is)i(w)o(orking) -f(properly)-6 b(.)396 4317 y(T)e(ak)o(e)25 b(note)g(of)g(the)f -(Gimp-Print)g(re)n(vision)g(printed)g(on)g(this)g(screen)h(and)g -(con\002rm)g(once)g(again)396 4447 y(that)g(it)f(is)g(the)h(e)o -(xpected)f(re)n(vision.)-2 4949 y Fo(3.3.)47 b(Con\002guring)i(y)l(our) -f(Printer)f(in)h(CUPS)396 5165 y Fm(W)l(ith)24 b(reference)j(to)p -0 TeXcolorgray 24 w(Figure)e(3-8)p Black(,)g(click)f(on)h(the)g -Fg(Con\002gure)k(Pr)q(inter)e Fm(b)n(utton.)c(A)i(partial)p -Black 3643 5692 a Fi(26)p Black eop -%%Page: 27 36 -27 35 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 579 a Fm(screenshot)h(of)g -(the)f(printer)h(con\002guration)f(windo)n(w)f(appears)j(in)p -0 TeXcolorgray 24 w(Figure)f(3-9)p Black(.)g(The)f(contents)396 -708 y(of)h(this)f(windo)n(w)f(will)h(v)n(ary)h(depending)f(on)g -(precisely)h(which)f(printer)h(you)f(selected)h(when)396 -838 y(you)f(con\002gured)g(CUPS)h(for)f(your)g(printer)-5 -b(.)23 b(The)g(screenshot)h(sho)n(ws)e(the)i(selections)f(made)h(by)396 -967 y(the)h(author)f(for)h(his)g(printer)-5 b(.)24 b(The)g(indi)n -(vidual)f(selections)h(will)g(not)g(be)h(e)o(xplained)f(in)g(detail)396 -1097 y(here,)i(as)e(the)o(y)g(are)i(the)f(same)f(selections)g(which)g -(are)i(a)n(v)n(ailable)e(when)h(using)f(the)g(Gimp-Print)396 -1226 y(plugin)g(to)g(the)h(GIMP)-11 b(.)25 b(These)g(selections)e(are)j -(e)o(xplained)e(in)g(detail)g(in)h(v)n(arious)e(sections)h(of)p -0 TeXcolorgray 396 1356 a(Chapter)i(2)p Black(.)396 1635 -y Fj(Figur)n(e)g(3-9.)e(The)i(CUPS)f(Printer)h(Co\002guration)f(W)n -(indo)o(w)396 4240 y - currentpoint currentpoint translate 0.3 0.3 scale neg exch neg exch -translate - 396 4240 a @beginspecial 0 @llx -0 @lly 618 @urx 994 @ury 6180 @rwi @setspecial -%%BeginDocument: figures/cups_config_printer.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%Title: (figures/cups_config_printer.eps) -%%CreationDate: (Sun Feb 29 19:55:36 2004) -%%BoundingBox: 0 0 618 994 -%%LanguageLevel: 2 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/pixel_stream currentfile /ASCII85Decode filter def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - colorspace 0 eq - { - /DeviceRGB setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } - { - /DeviceCMYK setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 1 0 1 0 1 0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % colors: number of colors in the colormap. - % - currentfile buffer readline pop - token pop /colors exch def pop - colors 0 eq - { - % - % Image is grayscale. - % - /DeviceGray setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 1 - /Decode [0 1] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { - /DataSource pixel_stream - << - /K -1 - /Columns columns - /Rows rows - >> /CCITTFaxDecode filter - } ifelse - >> image - } - { - % - % Parameters: - % colormap: red, green, blue color packets. - % - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - << - /ImageType 1 - /Width columns - /Height rows - /BitsPerComponent 8 - /Decode [0 255] - /ImageMatrix [columns 0 0 rows neg 0 rows] - compression 0 gt - { /DataSource pixel_stream } - { /DataSource pixel_stream /FlateDecode filter } ifelse - >> image - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % colorspace: 0-RGB or 1-CMYK. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /colorspace exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 618 994 -userdict begin -%%BeginData: -DisplayImage -0 0 -619 995 -12.000000 -619 995 -1 -0 -0 -256 -000000 -ffffff -c0c0c0 -b03060 -d9d9d9 -b3b3b3 -c4c4c4 -ababab -ececec -6c6c6c -cccc99 -0000ff -ff0000 -00ff00 -00ffff -ff00ff -ffff00 -990066 -6666cc -999966 -ff6633 -cccccc -999999 -333333 -9999ff -006600 -339933 -000033 -333366 -666633 -666666 -00373c -333300 -669933 -9999cc -ccccff -ffffcc -666699 -000066 -000099 -0000cc -003300 -003366 -003399 -0033cc -0033ff -006633 -006666 -006699 -0066cc -0066ff -009900 -009933 -009966 -009999 -0099cc -0099ff -00cc00 -00cc33 -00cc66 -00cc99 -00cccc -00ccff -00ff33 -00ff66 -00ff99 -00ffcc -330000 -330033 -330066 -330099 -3300cc -3300ff -333399 -3333cc -3333ff -336600 -336633 -336666 -336699 -3366cc -3366ff -339900 -339966 -339999 -3399cc -3399ff -33cc00 -33cc33 -33cc66 -33cc99 -33cccc -33ccff -33ff00 -33ff33 -33ff66 -33ff99 -33ffcc -33ffff -660000 -660033 -660066 -660099 -6600cc -6600ff -663300 -663333 -663366 -663399 -6633cc -6633ff -666600 -6666ff -669900 -669966 -669999 -6699cc -6699ff -66cc00 -66cc33 -66cc66 -66cc99 -66cccc -66ccff -66ff00 -66ff33 -66ff66 -66ff99 -66ffcc -66ffff -990000 -990033 -990099 -9900cc -9900ff -993300 -993333 -993366 -993399 -9933cc -9933ff -996600 -996633 -996666 -996699 -9966cc -9966ff -999900 -999933 -99cc00 -99cc33 -99cc66 -99cc99 -99cccc -99ccff -99ff00 -99ff33 -99ff66 -99ff99 -99ffcc -99ffff -cc0000 -cc0033 -cc0066 -cc0099 -cc00cc -cc00ff -cc3300 -cc3333 -cc3366 -cc3399 -cc33cc -cc33ff -cc6600 -cc6633 -cc6666 -cc6699 -cc66cc -cc66ff -cc9900 -cc9933 -cc9966 -cc9999 -cc99cc -cc99ff -cccc00 -cccc33 -cccc66 -ccff00 -ccff33 -ccff66 -ccff99 -ccffcc -ccffff -ff0033 -ff0066 -ff0099 -ff00cc -ff3300 -ff3333 -ff3366 -ff3399 -ff33cc -ff33ff -ff6600 -ff6666 -ff6699 -ff66cc -ff66ff -ff9900 -ff9933 -ff9966 -ff9999 -ff99cc -ff99ff -ffcc00 -ffcc33 -ffcc66 -ffcc99 -ffcccc -ffccff -ffff33 -ffff66 -ffff99 -dcdcdc -e7e7e7 -6f6f6f -ededda -eeeeee -808080 -547098 -800000 -9a9a9a -000080 -797561 -797161 -cfbe9e -797159 -d7cbb6 -cfbea6 -969286 -716d59 -dfdbd7 -beb296 -beb6a6 -beae96 -b6aa8e -b6ae96 -716951 -716959 -cfc7b6 -b6a68e -ae9e86 -a69e8e -696951 -696959 -GhVPUl#ri5eolasZM/Q453LQnb/ED4V!]E#Ij^L;4SG_cGh%"of!#_\R8n5o,6U[n8RP3+If -hsR%KHjMTc0R)WW=<:)B]*]!@"0T+Mq':8bfXihgej#^2@,?H*b,&$'(LIg323R0FQ*O$t!^r -eTT2q-0MM0AQ_MIonD)oq>Cd(R%#h1l"HEqc_3UiB^g%#M-K^p59jCcSF -fFLQFLqRR[Fa_r^mEi/>s4m)ZeS13&n!=o>)fn(m[6**iWQsXQ6la@%dV!(=`0VL!WA_>jQ8#6\4]?qj0>PGXdf3I&=\t*:6$5'Zlo -!h_"Ds-YH0M_QfJWtYNE.gcZGE*FXqoP54c\W+O0"-RHb+mn.P'Z"a]Okk= -Q@dO-=E2lta%M`"#4V,)+I*5]%noLVUt%',9A19,bBmS8G9<]iL"Q)GJ4Laf@W2U5%Ohjk$PC -K9b&rV?&K=-/6;,'H+K/&!KOjU!a7;G4b_n#:A`8%R,-!f9B[*PW?S?n8rqs2$CTePUVE^27IS)*e+>WUoSEm1H[GjiRZ=Ym@_a -nXtjtF9BjqPETRI]aA7fmPbf9WH0NbZd#[B61coh3abbP^FR=&DSt<(D@3oENRO>W)OZLJb2M -qTmdmcV%hZR]6fsrXhqT)a9i)ST0s?'u&^[WQ0mgC%Xs&5ik,'g.S,KQje+gBi0bq1I"Pj^)^ -("hO\ofmKD8+WMmhRo@A$[r7Pqb\7G],GfS=+V_;ggVk2c'$:)86YM/`[;=2A'gK"-CIr%f:. -c1,(CD*^?2'+c-EeX;KXgg5&TJ%s%[c6C;[1R2O\IGmp\,K)[RJf^fq[J'39aA)cBj]%sOK/2 -'])T0\0<%B?@nj!4;N2DY@p;:-S\B'd9f&g:\S5Ef1`Oot<(e;#oGM<@K'l#1Wpp.k&?^Eriq -4p(JA/[0gVd%=[)A#mXCMc)3j3sRMC4hcrlNpjg5kMs5Er2H&J(B#6-e#\36pn[)6VkIq_^l4L_g-_E\($ -\LfCXqg2ga1Ok#&5>EH0Cje[elE$S!\CGOc7]0p/.MKBr+C,YX):e`Q^]*5pc[Bd -HUfCp:=uR83C<^C=f61&82c1#;^:7rcU1O/.9=@)QeZ+&*DlTkGX/9q#`F1.mM[X@Nf7*Hn7E -O+[ZcTST.^-W$WR(J^q1?\Itj,>+r*I9uXL.NN2sQMjL+(;(YhnSMgG+q/bTF -lVDS!NP!21']!bDMau?MDC]ci*5H-CaekoSRCIW"p;5Nd/ -6;MrN,\e\%j3;`3O&1sHf/qj3>Ajpkt9g(L$A6tqoG;+@rHV&FQ[co6[D"fUnDm\NN]n7tq(r -aXl>.Y=.Oq!!W:"09,!XaaWY>r?t$+u9k>URD_"FFK5;^&(cDO -MKU7#aK>=(C2(0&&E8@KX9kc)Y#p:TUcZZ&?OE@6p>u17/NMVLWFska^@;j18OG2CWBF0^CG/ -2,Wulgu$72HX6$"E38]*g9,TK,LsFZ!Hu*#(9$,75hlEP]Fqq;#;Y*:jm6?u^LF@8(cNMkT6S -`T$d`n#gaup5G7D_j8H19Gqc7ntW-8'EhgaHm<3&RX7p4hiT'Xl/.!KO3>q>WTAa`[5]Ms*52 -F+[XE//2JZ#=t5s7!fNUKU[Apq;MFC"8C@5[W#@^YPIt[64**P+C>AVR>2s?ft/Y;7USWh0p" -rV8Nu]WG-(sRdYgAguL?T.=@KpI#4fcpqE3.0f(p\e(% -<0>$,X$[oLVWZJKO&,rM/a"=o+qi=MJTY-+H-#&08R!4N%c25n4<)UV3W)?@%AlXpAt5KdBmh!R*&qHC+K$_s!!S\nM%%#6LfIl(=nnXBQHd][&)OLu1g@*qV: -^tVV\/9iS#O&,brs"X#!S1`.J<9s8E:aiZ-_hWL -7psebiqf<3Ib$1'E[XZ,^C7f>dm,M%Be#r5-KmYPYT-QNkB^,!8JRj>KrUX`FM1AT"-dDp"X%0O_QsfFM:[Pu%o8*uIKB;E/n>r4\TuQ0[*Og(G -V#[fa5c]_/X(Yh-(>-D]&(g/s6Xhe/Y7e-s,5o8S",kq>$5nmBO$2teb%H;K=[M1@Q(=X=QU7 -SAtA"`e%o=h4k4j,Ocuubhl/"Vh?;4u%2WD7^$o=?5jGO4oN936]rB2+@Ma?fht;1Bm`YQbPq -Mp_49mCn[3OtHn.QM[.)m5OUK]D%%f4noq<)$14+80'>&W+J4$BQHaK[/9i,*=fin4#YH20j' -$s2`P;B/L'<*]a3fTp&lm[G*%'&SVVlKrVR+5Okm_lkqgM@Y/@:7oKS9]n5ZZ".^R;)MM6QV@ -P7'&YiljKE,.o>If+7OBm1&CYq#ai->bX2`=g5M*eriE5`CfR?4!qY@'7_>V#LeUmF>VESak2 -q]uK@il0W5PVbX26McEaE3.^V?<8ZldA;2:NnHj2)>!*8(P[DUdS*2WS0ptZ_OGP;>`ZD\siY -C.P;P-0bc;:&onegPB_@^^LU59<2-D%oC9MqoK-+Dj=9\!n@+bLFSmFdIi#pm:DA_XIN@:;7F -K_UG^4&&6laaTp+-`RN!(IZG32*e>uor7o7C7iU>D^"?Q@VW3r7[oF>BgSr96oQZ7Dp7&`b.D -aZ$7%hZc:liZR_lEnBu(3SWod_kp=*?O_A647V`O8#C>?&$j>YaZ?Rqfc7B*g,OR?#Kj6PSbf -93ml?fZ[,O+Nhm6,7`&rp?o0YG@Zt^DXg3Y8B.oT;>m#CkgnFGnDmZWt-c9cLbmk8F!q>SL2T -8>V*#_dYlBG)E^RJ>iSn>5(1PCcFP-GGDW\2o>4`)l+>phVF9Jk.B>f4e6"9:mCAp'"h"W"ZS -&&laQK^iJW)3_F"Pr=`s9/9_"L\JL%6f-W.oGDbsD*tsd\;&hU$lfqmJ-^,9jfU>b"R=FpkQo -p`XlM)DhS\:77Q=?7tnOqBtCs(_&_YD\P20Do"?_T]2MQ:9#?9(hkactX77o`5h6m+RLHJ;rEB8F+E*S`H)#52?S]!m`u+2^nn@eX$Y^^0O]uoK"aMfabU%QAT,=APGP7l'OQI5EE[r[h#RDMl=T^:b<0j/b8M2.#cB\?m91<3IE2W^jsW'[.\oQ8Im?5Y"]9W -#I#05n -hOfBS>ABdP55Z]$,4Feq_dq';$N;@c/"'*Qm4ep.gq.>S4VrDV5=Kd(FL?uj?Of+cmpO:[9O^ -,Rif&<>'6(;t[p'4(=b%RcD0,4u=p:7f7+]ISEi0Bo)P<7,ia;Marma1kLZ7]!aj5hs`PaCm& -($ff\bV&^U-\4j61%e=2`@_[7=Kp76nPV;Ye/Faf6V1/9cX(\UP(Ue -R^(/KDRp>,iCN#1YkZP'!F8oiR\?p)CXP2'gbK6@GprJH/.6O[&) -tLJ7)%O.6/s?.I'WO5/p^/K3FQm1\sh,Bhp3!fm8UifnOop["FR\Qa_+q`Y8neXd6F%\;jsY^ -8kGFl'=:bE&:5]fCc8<8rN&1o?/a]gWjjILh!->)PO5)SBI,jacSF.@/X[F;ifsqjAmPO;E=s -/ZehR&sbW4;,;ZS5h]j&RtHHWl6Gq4op"#$[ -r$`[biWg-$]f`][FQjXZ^Wg+oK*-kfYUKVb!R42Xk[P$d?A[c2V<+.K/oB\)4#>B28V"3[!1& -KuHn;`7HUC8@pPIE4Sg?b?)D;%]>5H;C%;=,!.-/-0PD50X)YP=#o_aQGcQoMU29+dZo\a`kQ -^?W*%WHQWIS3HR613krH`%Sic]I>C23m$V9R]03V-j#i>lMXh#!Lf3*X$pLce^i:->Z?'2U>" -jNdN;p7e_UWH%bsI[o="If*lH",gjaBNm@mgp-_$FU&s"F6Kr]FN8[ShFEqs/3!fDuZW`>@rJ -9]Z!?VM88J%CRj/f-6DDn9f[b,pppb]JoIn -d\>=1==3^*cQ"p]io$b#LNpg..iLGjAro`c]!f(HAIdk"Ah?t.M0'5N!qO^J^'g7CB`Gn$+IB -!Xb]40HgC2f(I^N>+p4c!kD0O?p*NjA?Tr#luM.XbHUQFm5E/emi`:W5E!JZI5tU81c[<16nE -`c*#1h&J6h\JUH'lgU7pos8D&?#@#&[Ron-0:N`lb`9;0W^"*;G*DV^LIY+K*;us`q^"%J^'9 -k1M``ViUYU^#D;ghmU%QP"X[RH\FM)^"ZC`B3f^BmF+h2gc<4eBM?WZ>!%qBthcSD(4jo858- -DR$1X'PCr7@tMrJmLmBiU`4GJHh`@Fko\l!p!W=om&XAVUAM]=<\^/ta]Ee; -9djj1>ljK0D`NP0;piSH4*>P^aFbqW*?.<6GZbFP[Bk*0jT&cW7$g?kj=-/^>:0d1e[u[8TSV -'g@SHsM38Y/Cmd,%L-lh88mGcq"`TLlOHBEG]@Vn?j>lhT/=/N8_s\Z(J3;SEE\,j'-YY^W*; -QT)U8%4&Ub,9FeB\[Rcnp3,kji`kM'm:>eI&i_tdTPnN'C6[%_6?e`U0?cL\-.?!+u/<`ru]e#4n0N/.PC'RkoC=pd;dlC&r3%&9O`[Q -9&>UXU5_a@W)r^85C=1:iH[OQ(U-@%bJ2T`&^Dt*,T/\+IOZ:U-WXeBo_Y(!D&k+eJ.,.1?K> -=D5!pi0W8C8EC9\SUh?L1gW.<=Q&mHA9,29KRKeZ$.;q8*WR/P**!7KXYg[gcR*T^-BN,[5cW -Pkmb_h3ORkS:FbP!e,24-ert1GSQn>VPN+ROb#6jL(M;R4BKDf_ -928EF94d<*jR(a1!tBo2q:p:$Y0;AN=$]d(BAsoLq7=QZU6es4\+Y=>G^hlc0BeaG=)WAR"7a -+m>B8t6]:*HnKfiT5@"^9mjnsKh?&gs:NDL(7.=c/`#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XL -k'5j#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XLk'5j#cIr`BN6YLp.p']]HN^*3<1I^W)c5B0V12 -QC/GD>JalF0)?='MW5bJKR#j5VI(,npnu[1K*grG^cN,/cT5)):Sla..(%jYVP%'Lok8)Ik$8;D^c7c^1U]P+0G0;ER:ji'#1^M6)H?=f -R&?@%i@K4_M)bP=i(HIg#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XLk'5j#cIr`J80T?W!8'.C4H -Sg#)IeEJ-`(XLk'5j#cIr`J80T?W!8&krQ0'$b'lQGnX$8Xd@*Jh]\u)0M1/khs7$3)C&N%C4 -CPpd@GWN#R`QIK@Vofh=3@atBh1f#L-!)EopN,:o/q_IU<6L)8eX1R?Op.)TaZcsbrTBJTd2M\7nL -R^F4ii=+l5>4h\^IWam"9bo5p[4qft&26mAdQW\W/.l=_/IeJq_qbT;&H>/Eg)8McA/:T3\nt -IIKTt3C:,QAFee3rA5CEC?qS,"^36QWu%E[386_>XW49CZ2jPQQ-;mZC9T9+g97QF]";%oB43 -S]/R!l\!`s@p)=naQ@C*fcLoulU>YhqN.jJ@`DN+@K7\r)cJOSuBgj/a)cROK\J;>LN]CV$pD -E+a3ghm?b5W(e03@W\'cWYXZX2[WJ+W3Z5*SdQ%MIAZ0?:k814d@B(oM>Hh]d:lT2e8PALfaH%dER^ -C:?NBoEu@u+koBdg<\)JEb-ePopdk"h8@qXr:K#kD@9e[/,t3BNKL`W=>;;,,$;kHON3YQcqJf -%"N80gmm,QqB4Vg-Wu)D/JNc"BdG;FZ!dMEpWn;"uNho!/Q/?J;?Lk_)3p8EgUT\%?.)&WZ#+ -EUF:nu#1pWrat]p42)(DJ8,1:CA._Y"p!3A -!NHT:=k,oY++4q6T(SRdWD;")p/of/A+EE:S2S3XW\OD/:Im$H:MP,lLT8A2,_gT-\o8&-#-a -n8U\AQN>e6f$1d@Mr,a5 -SgAbp;E;$Y]*JXW9-*AqG7&iF"($Pe]:I;CAlhMC*7/^)B]*]!@"0T+9JPD,+ohs!ic8FTGepSWW=<:)B] -*]!@"0T+9JPD,+ohs@T09Y0Q+_D/:GHl!7fZEWkL*p1"DT8!A3X6AgUJ]0i2^ATN]W+[1reo( -'CSu$rgFc:i-mu5BX#$D`YbAWE/>Nc"*210;spLmIorm)qFlC85lj@/2iu4IP6n&qgP0(mJ33 -&e:h,*2N@g<2)2:Lb^42J@QI)W<,JJ&iZ[4/oIJt.C,.gE"*##rb`W4$0.g1!=TS:PE*#-'6Z<6L\hW -CGd7r3@l%`.tQKeWrDj:p#FGWm4QlGg>$L8[6$uVPbA4r82X23Jl=J)OT4';H4RI/G# -WeuUe5=Ni>KMdb\TeW*sniEE%>86PB^B#2m;r$%t?g0hM4h3*Rte]9D_[&VXt;RGY]_R$$Za+ -?@C@1U"V7a\nYXU@d/5633GK+Gn239Cd%1iQj! -"i$:&CI?.1B>*+YM.Db#O>liC.m_.XH>6;/Y-OY:55gXFH41@)62E=q$$(qQtf:W(9Eoq<"hE -^5I6qc'[)(5A.$k_48f>7C6-IJeJaUtl9I5RcEsUndSUdXHD:/*l(Sik4XcMnp?Wbl4KHW[^n -MT\MMY;21+B,mh4K%4Q@Wc]b>_?`;sN&fbq?gDeK17XE$%TJWZ0aX$D:SJ5degdC9%?7j\.;,0n"kGJ#MIEGsGANN/8O$&pK`1g?a'aH-WBR0'Lo>IL6EDUKaR.F"j.o3RW[:&<8-M5to;lceU -B'JDld\7GU/V:0pRG^LHDdj:@JeKr>C+KtP8uOY>S5]lS.U,]T[[#ecZd_YP-u14r-er@k)R. -k26a`=:Kp,loB;MYklVkTNWqoE6!djLG!B(1#dPQ3G6+(id]*11seM76,XTGGe1JfYZT\:lGC -,lCH1'=PY!iVD@)cM`5J>J=d>\m'@V(I75/Sn$:O>B]B&-:;]&ProJ!S%/^:^ms:eGp1X%1iQ -j!"i$:&-:;]&ProJ!S%/^:^mu@.Fi%qhL4YEg'COBEG5k-7K_1QA3n`MN)L9L;OWB6*D7Ks2Y`"L2e@BnZ4&6,-T7B`cb*iHdm6,5&"dO^3@p.$D -"g(hG%MT6W+J/I&nkQ7bY"B=[gW_EUqlN4(\"B=[gW_EUqlN4(\"B=[gW_EUqlN4(\`5YbDn* -^"W/_)P:5fRV4239Uj%1iQj!"i$:&-:;]&ProJ!S%/^:^ms:eGp1X%1iQj!"i$:&-:;]&ProJ -Ypn48)Rj)\Q9LNh!7eAcMr0ZOQtf:W?m7N)F\Ja",>]t9TN]W+[2aa4\HCB&#--bj<1A`9@i0 -=f<,SdP-K/A0aX,#g#hc*=a?d65@i.%G&[*#leIqi,Zh+mZPIb]@e`NV#(^>Yn2(UIFW=-13D -(b[E@8N85!So,J\qAF.)(8do]V`0fT^,M-Dlu;9!fIj6_8CBfS==81@i0lIE\gan]3QJAJ](@ -iV;Kb3=X'BrEWXe&a[EP.@i,?KQ+Db4e@5\"1Z5+U!o:^>K"7J&j+1s0oGb]@FE>.%mADaoC+ -PB]_%P_^=Mn!$2+m_)@8Jk]2F.B/Sthth@b$(@_8aOd0OlEiTN]Yr%(lseqTW!aK&FLP37L5J -7Y8leYjje.\38&<#s"qBR&2AEFE\+)St&Pt&lY&\1qaWE.LU:c&RBA36ge=)^m= -=ST!mdfMC$c[#s5(H^bi40"RLGI-o_Cmtm5L)X':ZQ[k<]01)@U`-s8PVnq.%:>+=R;JpX077 -EVel2b)!n@8_:^ms:eGp1eW]^I2S+3L1STD#!`i6CgY/)"oUY=.A#4#g0C.m_,XHfKZ/Y-7Q? -A>GfFDep`R6idYchTAD2I2oD(JF38aGU@(P>XuioRAq+!65Z$)NmolM7BEFK5)ON'WN&(TGhM -&Iat#qc-1NdBcpjde\&];ls#h]+sn^'j[6!#dX)-QA>3Z:AqN3/H<9qJAQM/8DkjT*hu^F_,e)6'K*3W7hNGhtMg$2.ld -6eep>IrH5t"W0T[$W2:Y=l+Ld*;d(LtqbSkWZ;o-aTQSf/3jEKt/SB*%NJ4Bt_95BWmK/W\WQ -$JI"&NiH1/Z;dFtZ\&$*G#Y9"1&B.L9$qP8^U)H)"qN%9/f9W2>,\F0dUOfGuN6qlR1Vea>.$Wm/bbV2EY>$K2c+?(TNX9ND%`LF2c+?(TNX9ND%`LF2c+?(nl/>+V)ES+UhXBD0o0nWo^UQ:=fS@ -2nP2hs=B^kcX`G&+&.E8,)`aq<>VDr4oS1?PX4F4-=>b1K3A"C6k$G#N88CR/QnFe4Q_e`m8Q -9ccY.k$^OL8i3oCu_W!Z#som!/]`E[G;H@\n[*^\ues=+k9W4B3=,mM=jl<9jag9`e -;[#-(B!<9jag9`e;[#-(B!<9jag9`e;[#-(D7``0RN2gP$O5:bJdD'm`)g(\?q239Uj%1iQj! -"i$:&-:;]&ProJ!S%/^:^ms:eGp1X%1iQj!"i$:&-:;]&ProJYpn3WDF)Q522ka)`5YcG-!>U -QEY>$K2c+?(TNX9ND%`LF2c+?(TNX9ND%`LF2c+?(etZE0Ym`=(6-cQ$[>(pp!\eLXcE'IBVQ -gO20Q'2%X@>)=XEuHTj^@?Inr7ORF(T9h7BZDQ)F1^C=da$=AC43X,ui'WeYm*GC9035&%HIps"%5C35Qk$g6pNUp" -B5Ik5W(e0,<*YqaeKYD_j6c4*b%5de. -RC)X$/2c*3Ne`I(9BqX285W'!MS"#@:C]@[FC5,T&bYSI>D/M+0c#j`R1c(`$hAh6fP)J`7\4iYs7Z"d#;h(5ej'\HmE%Ts -@Aei?\1"t*N)N)f2#V[2]+jNPbH$\pHeC,rVDeH/%0>0a3S[1K:&1JgdJe`I(9BqX285W'!MS -"#D:L*#CHAQu0CE.X&%P\M=RTGepSWW=<:)B]*]!@"0T+9JPD,+ohs!ic8FTGepSWW=<:)B]* -]!@"0T+C\9Lh)B3P&PF4A`IM^A4RUh\2Q#3V3U#OT^OZ^ABRsnpN]WcYNt ->We]`fk+"E_C\`V?+%1,g[pZF\Rc3tJ"18T6(*HVhIP3G<);&k3@1).V&a9c]So?*-puNeD4, -Ws43;?8O(p64['Xq'TDDid``ZsRBF-TG*P[G$n'1rUWjr0b*.K*YK6OGUAX6HUMH91h\KMdG? -UJ/BY_-QB_h+Jr_VDMR=K!"?KPI>$J&(cHX;:?[&#fR`=Nd>29f3U/bR22@TY#0pJObst3&aZ -N&;5266sqIWEu"MhC5^rD>-(5YT2;pNQ)00/:i-aO[6Wac=/L?`TNYCtlKdEO_4#+qc*sb);- --,WocA5,ea0'1G^JH]pp9@0]2EtRTG$.U>*)i(4LlW`U9ZZ1DJ9lhVptp)7gR3.DLpE@*5M'U -"hciLPp&s5WjOK;R35Jl=f!";>0i1%kQb)1::3sWG'hM"2-QXk<$MIE5rBjZg/_1bX#G -;BQ9IitYq=Lled/:`YUS*fc9O6P"B5Ik5W(e02e#Q?dEPX)WoT\:YV[;MYk,XAbTT\:YV[;MYk,XAb -TT\:[PWg`i'gX&lh<6aa_N(&f@o?s)?S^D0+='(i*M;nl.4)p:*>h;/ -NOPkim(j10)R^R0(\D;@j=?coH![:t=oY:i0CAc+9JPD,+ohs!ic8FTGepSWW=<:)B]*]!@"0T+9JPD,+ohs!ic8FTGeq^;l\) -#D?7a2QiO(>0arljQtisG!ah-2%9+8N<#Z9G)[97\%9+8N<#Z9G)[97\%9+8N<#\O9WqH>\>P -AZi,1Z&.:$[bb#-*Y0"4d7>ES&TY'6-u]d<"W.=X#kb@5&jmX6-&-nZ"HaQaJH)0aoBT(Y+\$ -&HkmI8Z'YY1?nkP;)PO%djR*&jf[k91^%)<:J*7>,mGS"T=cICYB+W#U%SOE)X*jd?E.=U;c1 -dd"P)of+4\NljEmnPD1Or0q%U1M>#hW"Am[I(*MD,^jJ\LdFX?JJh+6K?%aKH"[;b%+<_Eh#& -Wro)_-dDR!jnh.HN@;ONO>H3$NAVJr:b?H<89sdB:rET5d_mDIKAVUD:\C?\DF6jAG,P>6G;`C'hj(\'V)I5i#:LX-su@^cMu-a":suht9P*%@5q -sB&9t$:-@(>0bB`0m:ed+ZTmVh-Rf^#>hNM.o7fPej.Q$$bFasGY0@*V1CLRjLYUCdm+WGr*V"itaIi^u'eef93OiTN]W+[7l*cWrf<_$rkCQW4"0H`\!R;V2sKgCeM14D1QFRC -e?RH1JeMl!S%/^:^ms:eGp1X%1iQj!"i$:&-:;]&ProJ!S%/^:^ms:eGp1X%1ocneRn.2IH_d -,"AfOp$4sHseRhBrqqkR&!NL8EeKtHL0^U,co> -a"M*d_O5ksM`_1/uNeJ@g6?GX>$1Y]oT@YK6p.3MZW]lVXd5_L&7_N`POu3clVj9@\D5]KS]X -Ep:i0Ak=0:=DZ5p1mkjK@gj\MJJ3R;g6dSlS6Y4UbF"KLQWk,MRj]RIMGDW^ -o3hP"-(A?)(_-@k]^?>>5dRoNtsY4e5M$ -BU@CC'g=5.YtmrJt.C,4gkjNVI1FEQ&PArhbYn;hMc -CZ"*>m)!jYZtpX\MO'^n)fp$??3_OuQsH'=;(AQem&p?40$&U!fLJ8.*.NG?$ECl3'!%&gTqn -kmX@p(ImdiC4l%"_//>%0C-r1:%.cD'^kl)rh^p:H#4I!U^`a$rlNsW_EOolNX@ -`!`\IiW_EOolNX@`!`\IiW_EOolNX@`_T#Pbo<@kID1ZW(2NqiOD$i1t)TWep#)IeEJ-`(XLk -'5j#cIr`J80T?W!8'.C4HSg#)IeEJ-`(XLk'5j#cIr`fT^+f[if=V)TF?O@UlF_Ot=Hg6CX(G*e$ca]8UR62&`\;9r-=j=6&9,*$B:rEe:i-i<=uT8p&tiD -e:i-i<=uT8p&tiDe:i-i<=uT8p&iQU*RtmhaC_LVX[@'^@C/_>ceNhDF2*_:D"%5C35Qk$g6p -NUp"B5IkCe_>#+0Qpan[rtX++S4-p,p>N"_=*l9r[j4Ggfu+s&hDW>A$U/h.7L0S!skdG":eR -16d:uWTHcNE,$^7np_TOn%lHcNbZmk:%RSKTa=>GBGO.je;L00EsFoRf8;32MHU%bU%>Qm-VNpE[b6aW\1s7-l4WN'rNp=iE4\8O[\OhU7$KS*`mjbZDbLK,e]<^&cA -a7V^@7[FTkOLgYlfN.DlJ/Wj^W2T:XQN>>b<(r)N[nP"8e.+` -%^h]S),@L49BW/[;b.&3'!7fdYg`C;l53]75BHX2$5NV$l2;]I,=9osD=W9Q7$1-,9@ar)HO= -Y>kDqq=EdP#Z[p_JA_YVT[L2ZeLI0gY(CESTXb'aVS,qt`D:(ik4hg@p60i#O(pf2LrZ%lNCB -%G0@`]f2uY# -AY"@)1<)_btRqq;%_QNi4"fVBMW-55#BelPKfbr[:27*;*^JJc)1_l[mW_u]R5P*KH$$RnQBk -#(h_Q$i1f=nOC"d*W9HP&ZJ!Zfg%8?3Q"g,3<-E_c5n<."H@Jq"B_ejEXL<.q)_IhNV\Ub7,W -&nU@SMU,9'N/&cV2-E/m9nDRu2)U#glDPtc:\e'J=dI=`ZmXZbq"CH99nK=P*a2a?\#17MVsU -(c:bOp8h.ehI]gig9-LcSF?gpUn5e1YhAkZ]."^OO()c(\\)880 -2293 y(-o)k(option2=)c(\\)880 2410 y(/path/to/printfile)396 -2872 y Fm(When)25 b(typing)f(the)g(command)g(directly)g(onto)g(the)h -(command)f(line,)g(put)g(all)h(of)g(the)f(command)396 -3002 y(line)h(options)e(on)h(one)h(line,)f(and)h(do)g(not)f(type)g(the) -h("\\")f(characters.)i(The)e(list)g(of)h(possible)396 -3131 y(options)f(which)g(are)i(speci\002c)f(to)f(Gimp-Print,)g(follo)n -(wed)f(by)i(some)f(of)h(the)g(supported)396 3261 y(choices,)g(are)g -(sho)n(wn)f(belo)n(w:)558 3477 y Fh(-o)53 b(PageSize=<...|)e(A3)i(|)h -(A4)f(|)h(A4)f(|)h(...>)558 3594 y(-o)f(InputSlot=)558 3710 y(-o)g(MediaType=<)f(..|)h(Inkjet)f(|)i(Plain)f(|)g -(GlossyPaper)f(|)i(...>)558 3827 y(-o)f(Resolution=<360sw)d(|)k -(360swuni)e(...|)h(1440x720)f(>)558 3943 y(-o)h(ColorModel=)558 4060 y(-o)g(stpBrightness=<0...2000>) -558 4176 y(-o)g(stpContrast=<0...2000>)558 4293 y(-o)g -(stpCyan=<0...4000>)558 4410 y(-o)g(stpDensity=<0...2000>)558 -4526 y(-o)g(stpDither=<0...4000>)558 4643 y(-o)g(stpGamma=<0...4000>) -558 4759 y(-o)g(stpImageType=)558 4876 y(-o)f(stpInkType=)558 4992 y(-o)f(stpMagenta=<0...4000>)558 -5109 y(-o)g(stpSaturation=<0...9000>)558 5225 y(-o)g -(stpYellow=<0...4000>)p Black 3645 5692 a Fi(28)p Black -eop -%%Page: 29 38 -29 37 bop Black 0 TeXcolorgray Black 2384 67 a Fi(Chapter)24 -b(3.)h(CUPS)g(and)f(Gimp-Print)p Black 396 925 a Fm(F)o(or)h(more)g -(detailed)f(information,)f(consult)h(the)h(appropriate)f(sections)g(of) -p 0 TeXcolorgray 25 w(Chapter)h(2)p Black(.)p Black 3645 -5692 a Fi(29)p Black eop -%%Page: 30 39 -30 38 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(Chapter)58 -b(4.)f(Gimp-Print)h(Utilities)-2 1167 y Fo(4.1.)47 b(escputil)396 -1383 y Fi(escputil)24 b Fm(is)h(a)g(command)f(line)g(utility)f(which)h -(allo)n(ws)g(the)g(user)h(to)g(perform)g(a)g(v)n(ariety)f(of)396 -1512 y(maintenance)h(tasks)f(on)g(Epson)g(Stylus)g(inkjet)g(printers.)g -(These)h(tasks)f(include)h(head)396 1642 y(alignment,)f(head)h -(cleaning,)f(nozzle)h(check,)g(printer)f(identi\002cation,)g(and)h -(retrie)n(v)n(al)f(of)h(the)396 1771 y(ink)f(le)n(v)o(el)g(from)h(the)f -(printer)-5 b(.)24 b(In)h(order)g(for)g(man)o(y)f(of)h(the)g -Fi(escputil)f Fm(functions)f(to)i(w)o(ork,)f(the)396 -1901 y(user)h(must)f(ha)n(v)o(e)g(read/write)h(access)g(to)g(the)g(ra)o -(w)f(printer)h(de)n(vice)f(\(typically)g(/de)n(v/lp0,)396 -2031 y(/de)n(v/usb/lp0,)e(and)j(the)g(lik)o(e\).)f(In)h(general,)g -(these)g(operations)f(should)f(be)i(performed)g(by)g(the)396 -2160 y(root)g(user)-5 b(.)24 b(As)h(al)o(w)o(ays,)f(the)h(user)g(must)e -(insure)i(that)f(the)h(directory)f(containing)g(the)g -Fi(escputil)396 2290 y Fm(utility)f(is)i(listed)e(in)i(the)f($P)-9 -b(A)e(TH)25 b(en)l(vironment)f(v)n(ariable,)g(or)h(that)f(the)h(full)f -(path)g(is)h(speci\002ed)396 2419 y(on)g(the)f(command)g(line.)h(The)f -(e)o(xamples)g(in)g(this)g(section)g(will)g(assume)h(the)f(former)-5 -b(.)p 778 2557 2601 17 v 778 3543 17 986 v 1812 2736 -a Fe(Caution)820 2905 y Fc(The)24 b Fb(escputil)33 b -Fc(utility)27 b(w)o(as)d(designed)g(f)m(or)i(use)f(ONL)-13 -b(Y)25 b(with)h(Epson)820 3024 y(Stylus)f(inkjet)g(pr)q(inters)h -(suppor)t(ted)f(b)n(y)g(the)g(Gimp-Pr)q(int)i(softw)o(are)o(.)e(It)820 -3142 y(is)g(possib)n(le)g(that)g(damage)g(MIGHT)g(occur)g(to)g(y)n(our) -h(pr)q(inter)g(if)g(this)820 3261 y(utility)g(is)f(misused)g(or)g(if)h -(it)g(is)g(used)e(with)i(a)f(pr)q(inter)i(other)e(than)g(an)820 -3380 y(Epson)f(Stylus)h(inkjet)h(pr)q(inter)-5 b(.)27 -b(It)f(is)f(the)h(sole)f(responsibility)g(of)g(the)820 -3498 y(user)g(to)g(insure)g(that)h(this)f(utility)i(is)e(suitab)n(le)g -(f)m(or)i(the)e(task)g(at)g(hand.)p 3362 3543 V 778 3559 -2601 17 v 396 3777 a Fm(In)g(this)f(section,)g(speci\002c)h(e)o -(xamples)f(of)h(common)f(usage)g(will)g(be)h(presented.)g(A)g(summary) -396 3907 y(of)g(the)g(command)f(line)g(switches)g(can)h(be)g(found)f -(in)h(the)g Fi(escputil)p Fm(\(1\))f(man)g(page.)-2 4301 -y Fe(4.1.1.)39 b(Determining)d(Ink)k(Le)n(vel)396 4502 -y Fm(Perhaps)26 b(the)e(most)g(basic)h(function)f(performed)g(by)h -Fi(escputil)f Fm(is)g(that)h(of)f(determining)g(the)396 -4631 y(amount)g(of)h(ink)f(remaining)g(in)g(the)h(printer)-5 -b(.)24 b(T)-8 b(o)25 b(do)f(this,)g(the)h(user)g(must)e(kno)n(w)h(the)h -(name)f(of)396 4761 y(the)h(ra)o(w)f(printer)h(de)n(vice.)f(This)g(is)g -(usually)g(/de)n(v/lp0)f(for)i(a)g(printer)f(connected)h(to)f(the)h -(parallel)396 4890 y(port,)g(or)f(/de)n(v/usb/lp0)f(for)i(a)g(printer)f -(connected)h(to)f(the)h(USB.)396 5070 y(If)h(there)f(are)g(multiple)e -(printers)h(connected,)h(one)g(of)g(them)f(may)g(be)h(referenced)i(as)d -(/de)n(v/lp1)396 5199 y(or)h(perhaps)g(/de)n(v/usb/lp1.)d(In)j(the)f(e) -n(v)o(ent)g(of)h(uncertainty)-6 b(,)24 b(and)g(if)h(CUPS)h(is)f(in)f -(use,)h(vie)n(w)f(the)p Black 3645 5692 a Fi(30)p Black -eop -%%Page: 31 40 -31 39 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fm(follo)n(wing)g(URL)i -(\(http://localhost:631/printers\))c(with)j(a)h(web)g(bro)n(wser)-5 -b(.)23 b(At)i(that)f(URL,)396 708 y(look)g(for)h(a)h(line)e(which)g -(reads)h("De)n(vice)g(URI".)g(The)f(author')-5 b(s)24 -b(USB)i(printer)e(is)h(listed)f(as)396 838 y("De)n(vice)g(URI:)i -(usb:/de)n(v/usb/lp0".)396 1017 y(F)o(or)f(this)f(e)o(xample,)g(assume) -g(that)g(the)h(ra)o(w)g(printer)f(de)n(vice)h(is)f(a)h(USB)h(printer)e -(speci\002ed)h(as)396 1147 y(/de)n(v/usb/lp0.)d(T)-8 -b(o)25 b(get)g(the)f(ink)g(le)n(v)o(el)g(for)h(this)f(printer)l(,)g -(issue)g(this)g(command)g(and)h(notice)f(the)396 1276 -y(output.)396 1492 y Fh(#)54 b(escputil)e(-r)h(/dev/usb/lp0)f(-i)396 -1726 y(Escputil)g(version)h(4.3.0,)f(Copyright)g(\(C\))i(2000-2001)e -(Robert)g(Krawitz)396 1842 y(Escputil)g(comes)h(with)g(ABSOLUTELY)f(NO) -h(WARRANTY;)f(for)i(details)e(type)396 1959 y('escputil)g(-l')396 -2075 y(This)h(is)h(free)f(software,)f(and)h(you)g(are)g(welcome)g(to)g -(redistribute)e(it)396 2192 y(under)i(certain)f(conditions;)g(type)h -('escputil)f(-l')h(for)g(details.)988 2425 y(Ink)g(color)214 -b(Percent)53 b(remaining)1203 2542 y(Black)268 b(18)1257 -2658 y(Cyan)g(71)1096 2775 y(Magenta)f(70)1149 2891 y(Yellow)h(67)934 -3008 y(Light)53 b(Cyan)268 b(71)773 3124 y(Light)53 b(Magenta)267 -b(70)396 3587 y Fm(The)25 b(user)g(w)o(ould)f(substitute)f(their)h(o)n -(wn)g(ra)o(w)h(printer)g(de)n(vice)f(for)h(the)g(one)f(sho)n(wn)g(in)g -(the)396 3716 y(e)o(xample)g(after)i(the)e("-r")h(switch.)f(Notice)g -(that)h(the)f(printout)g(sho)n(ws)f(the)i(percent)g(of)g(ink)396 -3846 y(remaining)f(for)h(each)h(color)e(of)h(the)g(author')-5 -b(s)24 b(Epson)g(Stylus)g(Photo)g(870.)g(When)h(the)g(ink)396 -3975 y(le)n(v)o(els)f(get)g(too)g(lo)n(w)-6 b(,)24 b(print)g(quality)g -(will)f(suf)n(fer)-5 b(.)25 b(In)g(the)f(author')-5 b(s)24 -b(personal)h(e)o(xperience,)f(ink)396 4105 y(le)n(v)o(els)g -(approaching)g(10\045)g(be)o(gin)g(to)h(cause)g(print)f(quality)g(de)o -(gredation,)f(b)n(ut)i(this)e(will)h(v)n(ary)396 4234 -y(depending)g(on)h(the)f(precise)h(printer)g(model.)-2 -4678 y Fe(4.1.2.)39 b(Err)m(or)f(During)g(Ink)i(Le)n(vel)e -(Determination)396 4879 y Fm(What?)25 b(The)g(e)o(xample)f(abo)o(v)o(e) -g(did)g(not)g(w)o(ork?)h(An)g(error)g(message)g(w)o(as)g(printed?)f -(What)h(does)396 5009 y(it)g(mean?)f(There)i(are)f(se)n(v)o(eral)f -(possibilities,)e(depending)i(on)h(the)f(speci\002c)i(error)f(message.) -f(If)396 5138 y(the)g(error)h(message)e(is)h("In)l(v)n(alid)e(ar)n -(gument")h(\(see)i(follo)n(wing)d(e)o(xample\),)h(the)g(problem)g(is)h -(that)p Black 3645 5692 a Fi(31)p Black eop -%%Page: 32 41 -32 40 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fm(the)i(k)o(ernel)g -(is)f(not)g(con\002gured)h(with)f(the)h(CONFIG_PRINTER_READB)m(A)l(CK)i -(option)396 708 y(enabled.)396 925 y Fh(#)54 b(escputil)e(-r)h -(/dev/lp0)g(-i)396 1158 y(Escputil)f(version)h(4.3.0,)f(Copyright)g -(\(C\))i(2000-2001)e(Robert)g(Krawitz)396 1274 y(Escputil)g(comes)h -(with)g(ABSOLUTELY)f(NO)h(WARRANTY;)f(for)i(details)e(type)396 -1391 y('escputil)g(-l')396 1507 y(This)h(is)h(free)f(software,)f(and)h -(you)g(are)g(welcome)g(to)g(redistribute)e(it)396 1624 -y(under)i(certain)f(conditions;)g(type)h('escputil)f(-l')h(for)g -(details.)396 1857 y(Cannot)g(read)g(from)g(/dev/lp0:)f(Invalid)g -(argument)396 2319 y Fm(Another)25 b(possibile)e(cause)i(for)g(error)h -(is)e(that)g(the)h(ra)o(w)g(printer)f(de)n(vice)h(does)f(not)g(ha)n(v)o -(e)h(both)396 2449 y(read)h(and)e(write)h(permission)e(for)i(the)g -(user)g(attempting)e(to)h(access)i(the)e(de)n(vice.)h(In)g(this)e -(case,)396 2578 y(the)i(error)g(message)g(will)f(read)h("Permission)e -(denied".)i(A)f(\002nal)h(possibility)e(is)h(that)g(the)h(ra)o(w)396 -2708 y(printer)g(de)n(vice)f(speci\002ed)h(is)g(incorrect,)g(in)f -(which)g(case)i(the)e(error)i(message)e(will)g(read)i("No)396 -2837 y(such)f(de)n(vice".)-2 3281 y Fe(4.1.3.)39 b(Nozzle)f(Chec)m(k) -396 3482 y Fm(On)25 b(an)g(inkjet)f(printer)l(,)g(there)h(are)h(se)n(v) -o(eral)e(small)g(holes)g(on)g(the)h(bottom)e(of)i(each)h(ink)396 -3612 y(cartridge)f(through)f(which)g(the)h(ink)f(must)g(\003o)n(w)h -(smoothly)d(in)j(order)g(to)f(create)i(high)e(quality)396 -3741 y(images)g(on)h(paper)-5 b(.)25 b(If)g(these)f(holes)h(become)f -(clogged,)h(the)f(printed)g(image)h(will)f(sho)n(w)f(small)396 -3871 y(gaps)h(where)i(there)f(should)e(ha)n(v)o(e)i(been)g(ink.)f(One)h -(can)g(easily)f(test)h(for)g(the)f(e)o(xistence)g(of)h(this)396 -4000 y(condition)f(by)g(running)g(a)h(nozzle)g(check.)g(One)g(need)g -(not)f(be)h(the)g(root)f(user)h(to)g(issue)f(this)396 -4130 y(command.)g(Note)h(that)f(as)h(sho)n(wn,)e(the)i(command)f(will)g -(print)g(a)h(nozzle)g(test)f(pattern)h(on)f(the)396 4259 -y(def)o(ault)h(printer)-5 b(.)24 b(If)h(there)g(are)h(multiple)d -(printers)h(present,)g(the)h(desired)g(printer)f(must)g(be)396 -4389 y(speci\002ed)h(with)f(an)h(additional)f("-P)h(printer_name")f -(switch,)g(where)h("printer_name")e(is)i(the)396 4518 -y(name)g(of)g(the)g(desired)f(printer)-5 b(.)396 4698 -y(The)25 b(printer)g(will)f(print)g(a)h(series)g(of)f(black)h(\(and)g -(colored\))g(slanted)f(lines)g(on)h(the)f(paper)-5 b(.)396 -4827 y(Observ)o(e)25 b(these)f(lines)g(carefully)-6 b(.)25 -b(If)g(there)g(are)h(gaps)e(or)h(spaces)f(in)h(these)g(lines,)f(then)g -(the)396 4957 y(corresponding)g(nozzle)h(is)f(clogged)h(and)g(the)f -(print)g(head)h(must)f(be)h(cleaned.)g(Ho)n(we)n(v)o(er)l(,)e(if)396 -5086 y(there)i(are)h(no)e(gaps,)g(the)h(nozzles)g(are)g(clean.)p -Black 3645 5692 a Fi(32)p Black eop -%%Page: 33 42 -33 41 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fh(#)54 -b(escputil)e(-n)396 695 y(Escputil)g(version)h(4.3.0,)f(Copyright)g -(\(C\))i(2000-2001)e(Robert)g(Krawitz)396 812 y(Escputil)g(comes)h -(with)g(ABSOLUTELY)f(NO)h(WARRANTY;)f(for)i(details)e(type)396 -929 y('escputil)g(-l')396 1045 y(This)h(is)h(free)f(software,)f(and)h -(you)g(are)g(welcome)g(to)g(redistribute)e(it)396 1162 -y(under)i(certain)f(conditions;)g(type)h('escputil)f(-l')h(for)g -(details.)396 1395 y(Running)g(nozzle)f(check,)h(please)f(ensure)h -(paper)g(is)g(in)h(the)f(printer.)-2 2121 y Fe(4.1.4.)39 -b(Clean)f(the)h(Print)g(Head)396 2323 y Fm(If)26 b(the)e(printed)g -(output)g(is)g(sho)n(wing)f(gaps)h(where)i(there)f(should)e(ha)n(v)o(e) -i(been)g(ink,)f(it)g(is)h(lik)o(ely)396 2452 y(that)g(one)f(or)h(more)g -(nozzles)g(are)g(clogged)f(and)h(the)g(print)f(head)h(is)f(in)h(need)g -(of)g(cleaning.)f(One)396 2582 y(can)h(v)o(erify)g(this)f(by)g(\002rst) -h(running)f(a)h(nozzle)g(check)g(and)g(looking)e(for)i(gaps)f(in)h(the) -g(printout.)396 2711 y(T)-8 b(o)24 b(clean)h(the)f(print)f(head,)i -(issue)e(the)h(follo)n(wing)f(command.)g(One)h(need)g(not)g(be)g(the)h -(root)e(user)396 2841 y(to)i(issue)f(this)g(command.)f(Note)i(that)f -(as)h(sho)n(wn,)f(the)g(command)g(will)g(clean)h(the)g(print)f(head)396 -2970 y(on)h(the)f(def)o(ault)h(printer)-5 b(.)24 b(If)h(there)g(are)h -(multiple)d(printers)h(present,)h(the)f(desired)h(printer)f(must)396 -3100 y(be)h(speci\002ed)g(with)f(an)h(additional)f("-P)h(printer_name") -f(switch,)g(where)h("printer_name")e(is)396 3229 y(the)i(name)g(of)g -(the)f(desired)h(printer)-5 b(.)396 3445 y Fh(#)54 b(escputil)e(-c)396 -3562 y(Escputil)g(version)h(4.3.0,)f(Copyright)g(\(C\))i(2000-2001)e -(Robert)g(Krawitz)396 3678 y(Escputil)g(comes)h(with)g(ABSOLUTELY)f(NO) -h(WARRANTY;)f(for)i(details)e(type)396 3795 y('escputil)g(-l')396 -3912 y(This)h(is)h(free)f(software,)f(and)h(you)g(are)g(welcome)g(to)g -(redistribute)e(it)396 4028 y(under)i(certain)f(conditions;)g(type)h -('escputil)f(-l')h(for)g(details.)396 4261 y(Cleaning)f(heads...)396 -4724 y Fm(Nothing)24 b(will)g(be)h(printed)f(on)g(the)h(paper)-5 -b(.)25 b(The)f(printer)h(will)f(mak)o(e)h(some)f(noise)g(as)h(it)f -(cleans)396 4853 y(the)h(print)f(head.)h(W)-8 b(ait)25 -b(until)e(the)i(printer)f(is)h(\002nished)f(cleaning)h(the)f(print)g -(head.)h(Afterw)o(ards,)396 4983 y(e)o(x)o(ecute)f(another)h(nozzle)g -(check)g(and)g(insure)f(that)h(the)f(print)h(head)g(is)f(indeed)g -(completely)396 5112 y(clean.)h(Note)g(that)f(the)h(process)g(of)f -(cleaning)h(the)g(print)f(head)h(causes)g(ink)f(consumption,)e(so)396 -5242 y(do)j(not)f(clean)h(the)g(print)f(head)h(an)o(y)f(more)h(than)f -(necessary)-6 b(.)p Black 3645 5692 a Fi(33)p Black eop -%%Page: 34 43 -34 42 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fm(F)o(or)i(se)n(v)o -(erely)e(clogged)h(nozzles,)h(one)f(may)g(ha)n(v)o(e)g(to)g(e)o(x)o -(ecute)g(tw)o(o)g(or)h(three)g(c)o(ycles)f(of)g(nozzle)396 -708 y(check)h(follo)n(wed)f(by)h(a)g(cleaning)f(of)h(the)g(print)f -(head.)h(If)g(the)g(printer)f(had)h(gone)f(unused)h(for)g(a)396 -838 y(long)f(time,)g(the)h(nozzles)g(may)f(be)h(so)f(clogged)h(with)f -(dried)g(ink)h(as)g(to)f(be)h(unreco)o(v)o(erable,)f(in)396 -967 y(which)h(case,)g(the)g(best)f(course)h(of)g(action)f(is)h(to)f -(replace)h(the)g(ink)f(cartridge.)-2 1411 y Fe(4.1.5.)39 -b(Align)f(the)h(Print)g(Head)396 1612 y Fm(T)-8 b(o)25 -b(insure)f(the)h(highest)f(quality)f(printouts,)g(the)i(print)f(head)h -(must)f(be)h(in)f(proper)h(physical)396 1742 y(alignment.)f(One)g(can)i -(check)f(and)g(realign)f(the)h(print)f(head)h(by)f(running)g(this)g -(interacti)n(v)o(e)396 1871 y(alignment)g(test.)396 2051 -y(The)h Fi(escputil)f Fm(utility)f(must)h(kno)n(w)f(the)i(e)o(xact)g -(printer)f(model)g(in)h(use.)f(One)h(may)g(specify)f(the)396 -2180 y(model)g(on)h(the)f(command)g(line)h(using)e(the)i("-m")f -(switch,)g(or)h(the)f(utility)f(can)j(detect)e(the)396 -2310 y(printer)h(model)f(if)h(the)f(user)h(passes)f(the)h("-r")g -(switch)f(and)g(the)h(name)g(of)g(the)f(ra)o(w)h(printer)396 -2439 y(de)n(vice.)396 2618 y(Note)g(that)f(an)h(unpri)n(vile)o(ged)e -(user)i(may)f(use)h(this)f(command)f(with)h(the)h("-m")f(switch,)g(b)n -(ut)g(that)396 2748 y(\(in)h(general\))g(the)g(root)f(user)h(may)g -(only)f(use)g(the)h("-r")f(switch)h(\(which)f(requires)h(read/write)396 -2877 y(access)h(to)e(the)h(ra)o(w)f(printer)h(de)n(vice\).)f(In)h(the)g -(case)g(of)g(multiple)e(printers)i(in)f(use,)h(the)f("-P")396 -3007 y(switch)g(is)h(required)g(to)f(align)g(the)h(print)f(head)h(on)f -(the)h(non-def)o(ault)f(printer)-5 b(.)p 778 3145 2601 -17 v 778 4130 17 986 v 1812 3324 a Fe(Caution)820 3493 -y Fc(This)25 b(utility)h(lets)f(y)n(ou)g(align)h(the)f(pr)q(int)h(head) -f(of)g(y)n(our)g(Epson)g(Stylus)820 3611 y(inkjet)g(pr)q(inter)-5 -b(.)28 b(Misuse)c(of)i(this)f(utility)i(ma)m(y)e(cause)f(y)n(our)h(pr)q -(int)h(quality)820 3730 y(to)f(deg)o(r)o(ade)g(and)g(possib)n(ly)f -(damage)g(y)n(our)i(pr)q(inter)-5 b(.)27 b(This)e(utility)h(has)820 -3849 y(not)f(been)f(re)m(vie)n(w)o(ed)i(b)n(y)f(Seik)n(o)g(Epson)f(f)m -(or)i(correctness)o(,)f(and)f(is)820 3968 y(off)m(ered)i(with)f(no)g(w) -o(arr)o(anty)h(at)f(all.)h(The)f(entire)h(r)q(isk)f(of)h(using)f(this) -820 4086 y(utility)h(lies)f(with)h(y)n(ou.)p 3362 4130 -V 778 4147 2601 17 v 396 4365 a Fm(Aligning)d(the)i(print)f(head)h(is)g -(an)f(interacti)n(v)o(e)g(process.)h(The)f(utility)f(will)h(print)g -(out)h(a)g(set)f(of)396 4495 y(instructions)f(and)i(ask)g(you)f(for)h -(responses.)f(Please)i(read)f(the)g(instructions)d(carefully)j(and)396 -4624 y(follo)n(w)f(them)g(precisely)-6 b(.)24 b(A)h(single)f(sheet)g -(of)h(paper)g(will)f(be)h(needed)g(\(one)g(can)g(print)g(on)f(both)396 -4754 y(sides)g(to)h(sa)n(v)o(e)f(paper\).)396 4933 y(The)h(follo)n -(wing)e(e)o(xample)h(illustrates)f(the)i(alignment)e(process)i(when)g -(issued)f(by)g(an)396 5063 y(unpri)n(vile)o(ged)f(user)i(who)f -(speci\002ed)h(the)g(printer)f(model)g(on)h(the)g(command)e(line.)i -(\(T)-8 b(o)24 b(obtain)396 5192 y(a)h(list)f(of)h(printer)g(models,)e -(issue)h(the)h("escputil)e(-M")i(command\).)f(Of)h(course,)g(your)p -Black 3645 5692 a Fi(34)p Black eop -%%Page: 35 44 -35 43 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fm(responses)i(will)e -(v)n(ary)i(and)g(should)e(be)i(substituted)e(for)i(the)g(responses)f -(sho)n(wn)f(in)i(the)396 708 y(follo)n(wing)e(e)o(xample.)396 -1041 y Fh(***)53 b(NOTE)g(-)h(870)f(is)h(an)f(illustrative)e(example!)i -(***)396 1158 y(***)g(You)h(MUST)f(use)g(the)g(proper)g(printer)f -(model!)h(***)396 1274 y(***)g(Run:)107 b(escputil)52 -b(-M)i(for)f(a)h(listing)e(of)269 b(***)396 1391 y(***)53 -b(supported)f(printer)h(models!)752 b(***)396 1624 y(linuxpc>)52 -b(escputil)h(-a)g(-m)g(870)396 1741 y(Escputil)f(version)h(4.3.0,)f -(Copyright)g(\(C\))i(2000-2001)e(Robert)g(Krawitz)396 -1857 y(Escputil)g(comes)h(with)g(ABSOLUTELY)f(NO)h(WARRANTY;)f(for)i -(details)e(type)396 1974 y('escputil)g(-l')396 2090 y(This)h(is)h(free) -f(software,)f(and)h(you)g(are)g(welcome)g(to)g(redistribute)e(it)396 -2207 y(under)i(certain)f(conditions;)g(type)h('escputil)f(-l')h(for)g -(details.)396 2440 y(Please)g(read)g(these)g(instructions)e(very)i -(carefully)f(before)h(proceeding.)396 2673 y(This)g(utility)g(lets)g -(you)g(align)g(the)g(print)g(head)g(of)g(your)g(Epson)g(Stylus)396 -2790 y(inkjet)g(printer.)106 b(Misuse)52 b(of)i(this)f(utility)f(may)h -(cause)g(your)g(print)396 2906 y(quality)g(to)g(degrade)f(and)i -(possibly)e(damage)g(your)h(printer.)106 b(This)53 b(utility)396 -3023 y(has)g(not)h(been)f(reviewed)f(by)h(Seiko)g(Epson)g(for)g -(correctness,)e(and)j(is)396 3139 y(offered)f(with)g(no)g(warranty)f -(at)i(all.)106 b(The)54 b(entire)e(risk)h(of)h(using)e(this)396 -3256 y(utility)h(lies)g(with)g(you.)396 3489 y(This)g(utility)g(prints) -f(3)i(test)f(patterns.)106 b(Each)53 b(pattern)f(looks)h(very)396 -3606 y(similar.)106 b(The)53 b(patterns)g(consist)f(of)h(a)h(series)f -(of)g(pairs)g(of)g(vertical)396 3722 y(lines)g(that)g(overlap.)106 -b(Below)53 b(each)g(pair)g(of)g(lines)g(is)g(a)h(number)f(between)396 -3839 y(1)h(and)f(15.)396 4072 y(When)g(you)g(inspect)g(the)g(pairs)g -(of)g(lines,)g(you)g(should)g(find)g(the)g(pair)396 4188 -y(of)h(lines)e(that)h(is)h(best)f(in)g(alignment,)f(that)h(is,)g(that)g -(best)g(forms)396 4305 y(a)h(single)e(vertical)h(line.)106 -b(Inspect)53 b(the)g(pairs)g(very)g(carefully)f(to)396 -4422 y(find)h(the)g(best)g(match.)107 b(Using)53 b(a)g(loupe)g(or)g -(magnifying)f(glass)h(is)396 4538 y(recommended)f(for)h(the)g(most)g -(critical)f(inspection.)106 b(It)53 b(is)h(also)396 4655 -y(suggested)e(that)h(you)g(use)h(a)f(good)g(quality)g(paper)f(for)i -(the)f(test,)g(so)396 4771 y(that)g(the)g(lines)g(are)g(well-formed)f -(and)h(do)h(not)f(spread)f(through)h(the)396 4888 y(paper.)107 -b(After)52 b(picking)h(the)g(number)g(matching)f(the)h(best)g(pair,)g -(place)396 5004 y(the)g(paper)g(back)g(in)h(the)f(paper)g(input)f(tray) -h(before)g(typing)g(it)g(in.)396 5237 y(Each)g(pattern)g(is)g(similar,) -f(but)h(later)g(patterns)f(use)i(finer)e(dots)h(for)p -Black 3645 5692 a Fi(35)p Black eop -%%Page: 36 45 -36 44 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fh(more)53 -b(critical)f(alignment.)106 b(You)53 b(must)g(run)g(all)h(of)f(the)g -(passes)g(to)396 695 y(correctly)f(align)h(your)g(printer.)106 -b(After)53 b(running)f(all)h(the)h(alignment)396 812 -y(passes,)f(the)g(alignment)f(patterns)g(will)h(be)g(printed)g(once)g -(more.)106 b(You)396 929 y(should)53 b(find)g(that)g(the)g(middle-most) -f(pair)h(\(#8)g(out)g(of)g(the)h(15\))f(is)g(the)396 -1045 y(best)g(for)g(all)h(patterns.)396 1278 y(After)f(the)g(passes)g -(are)g(printed)f(once)h(more,)g(you)g(will)g(be)h(offered)e(the)396 -1395 y(choices)h(of)g(\(s\)aving)f(the)h(result)g(in)g(the)h(printer,)e -(\(r\)epeating)f(the)396 1511 y(process,)h(or)i(\(q\)uitting)e(without) -g(saving.)106 b(Quitting)52 b(will)h(not)h(restore)396 -1628 y(the)f(previous)g(settings,)f(but)h(powering)f(the)h(printer)g -(off)g(and)g(back)396 1745 y(on)h(will.)106 b(If)54 b(you)f(quit,)g -(you)g(must)g(repeat)f(the)i(entire)e(process)h(if)396 -1861 y(you)g(wish)g(to)h(later)f(save)g(the)g(results.)106 -b(It)53 b(is)h(essential)e(that)h(you)396 1978 y(not)g(turn)g(your)g -(printer)g(off)g(during)g(this)g(procedure.)396 2211 -y(This)g(procedure)f(assumes)h(that)g(your)g(printer)f(is)h(an)h(Epson) -f(Stylus)f(Photo)396 2327 y(870.)107 b(If)53 b(this)g(is)h(not)f(your)g -(printer)f(model,)h(please)g(type)g(control-C)f(now)396 -2444 y(and)h(choose)g(your)g(actual)g(printer)f(model.)396 -2677 y(Please)h(place)g(a)g(sheet)g(of)g(paper)g(in)h(your)f(printer)f -(to)h(begin)g(the)g(head)396 2794 y(alignment)f(procedure.)396 -2910 y(Press)h(enter)g(to)g(continue)f(>)396 3027 y(Please)h(inspect)f -(the)h(print,)g(and)g(choose)g(the)g(best)g(pair)g(of)g(lines)g(in)396 -3143 y(each)g(pattern.)106 b(Type)53 b(a)h(pair)f(number,)f('?')h(for)h -(help,)e(or)i('r')f(to)g(repeat)396 3260 y(the)g(procedure.)396 -3376 y(Pass)g(#1>)g(8)396 3493 y(Pass)g(#2>)g(8)396 3610 -y(Pass)g(#3>)g(8)396 3726 y(Attempting)f(to)h(set)h -(alignment...succeeded.)396 3843 y(Please)f(verify)f(that)h(the)h -(alignment)e(is)h(correct.)106 b(After)53 b(the)g(alignment)396 -3959 y(pattern)g(is)g(printed)f(again,)h(please)g(ensure)f(that)h(the)g -(best)g(pattern)396 4076 y(for)g(each)g(line)g(is)h(pattern)e(8.)107 -b(If)54 b(it)f(is)h(not,)f(you)g(should)f(repeat)h(the)396 -4192 y(process)g(to)g(get)g(the)g(best)g(quality)g(printing.)396 -4309 y(Please)g(insert)f(a)i(fresh)f(sheet)g(of)g(paper.)396 -4425 y(Press)g(enter)g(to)g(continue)f(>)396 4542 y(Please)h(inspect)f -(the)h(final)g(output)g(very)g(carefully)f(to)h(ensure)g(that)g(your) -396 4659 y(printer)g(is)g(in)g(proper)g(alignment.)f(You)h(may)g(now:) -504 4775 y(\(s\)ave)f(the)i(results)e(in)h(the)h(printer,)504 -4892 y(\(q\)uit)e(without)h(saving)f(the)i(results,)e(or)504 -5008 y(\(r\)epeat)g(the)h(entire)g(process)f(from)h(the)g(beginning.) -396 5125 y(You)g(will)g(then)g(be)h(asked)f(to)g(confirm)f(your)h -(choice.)396 5241 y(What)g(do)h(you)f(want)g(to)g(do)h(\(s,)f(q,)g -(r\)?)p Black 3643 5692 a Fi(36)p Black eop -%%Page: 37 46 -37 45 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black 396 579 a Fh(>)54 -b(s)396 695 y(This)f(will)g(permanently)f(alter)h(the)g(configuration)e -(of)i(your)g(printer.)396 812 y(WARNING:)f(this)h(procedure)f(has)i -(not)f(been)g(approved)f(by)h(Seiko)g(Epson,)396 929 -y(and)g(it)h(may)f(damage)g(your)g(printer.)f(Proceed?)396 -1045 y(Please)h(confirm)f(by)i(typing)e('s')h(again)g(that)g(you)g -(wish)g(to)h(save)f(the)396 1162 y(settings)f(to)i(your)f(printer:)396 -1278 y(>)h(s)396 1395 y(About)f(to)g(save)g(settings...succeeded!)396 -1511 y(Your)g(alignment)f(settings)g(have)h(been)g(saved)g(to)h(the)f -(printer.)396 1974 y Fm(The)25 b(follo)n(wing)e(e)o(xample)h(sho)n(ws)f -(what)i(will)f(happen)g(if)h(an)g(unpri)n(vile)o(ged)e(user)i(attempts) -e(to)396 2103 y(align)h(the)h(print)f(head)h(by)g(specifying)f(the)g -(ra)o(w)h(printer)g(de)n(vice)f(on)h(the)f(command)g(line.)396 -2319 y Fh(linuxpc>)52 b(escputil)h(-a)g(-r)g(/dev/usb/lp0)396 -2436 y(Escputil)f(version)h(4.2.0,)f(Copyright)g(\(C\))i(2000-2001)e -(Robert)g(Krawitz)396 2553 y(Escputil)g(comes)h(with)g(ABSOLUTELY)f(NO) -h(WARRANTY;)f(for)i(details)e(type)396 2669 y('escputil)g(-l')396 -2786 y(This)h(is)h(free)f(software,)f(and)h(you)g(are)g(welcome)g(to)g -(redistribute)e(it)396 2902 y(under)i(certain)f(conditions;)g(type)h -('escputil)f(-l')h(for)g(details.)396 3135 y(Attempting)f(to)h(detect)g -(printer)f(model...)396 3252 y(Cannot)h(open)g(/dev/usb/lp0)e -(read/write:)h(Permission)g(denied)396 3714 y Fm(This)24 -b(ne)o(xt)g(e)o(xample)g(illustrates)g(the)g(results)g(obtained)g(when) -h(the)g(root)f(user)h(issues)f(an)396 3844 y(alignment)g(command)g -(while)g(specifying)g(the)g(ra)o(w)h(printer)g(de)n(vice.)f(Note)h -(that)f(the)h(output)e(is)396 3973 y(truncated)i(and)g(only)f(sho)n(ws) -f(the)i(printer)f(detection)g(output.)396 4189 y Fh(#)54 -b(escputil)e(-a)h(-r)h(/dev/usb/lp0)396 4306 y(Escputil)e(version)h -(4.3.0,)f(Copyright)g(\(C\))i(2000-2001)e(Robert)g(Krawitz)396 -4422 y(Escputil)g(comes)h(with)g(ABSOLUTELY)f(NO)h(WARRANTY;)f(for)i -(details)e(type)396 4539 y('escputil)g(-l')396 4656 y(This)h(is)h(free) -f(software,)f(and)h(you)g(are)g(welcome)g(to)g(redistribute)e(it)396 -4772 y(under)i(certain)f(conditions;)g(type)h('escputil)f(-l')h(for)g -(details.)396 5005 y(Attempting)f(to)h(detect)g(printer)f -(model...Stylus)f(Photo)i(870)396 5238 y(Please)g(read)g(these)g -(instructions)e(very)i(carefully)f(before)h(proceeding.)p -Black 3641 5692 a Fi(37)p Black eop -%%Page: 38 47 -38 46 bop Black 0 TeXcolorgray Black 2488 67 a Fi(Chapter)24 -b(4.)h(Gimp-Print)e(Utilities)p Black -2 1189 a Fe(4.1.6.)39 -b(Printer)f(Identi\002cation)396 1390 y Fm(The)25 b(printer)g -(identi\002cation)e(command)h(will)g(query)h(the)f(printer)h(for)g(mak) -o(e)g(and)g(model)396 1520 y(information.)f(This)g(command)f(requires)i -(read/write)g(access)g(to)g(the)f(ra)o(w)h(printer)g(de)n(vice)396 -1649 y(\(generally)g(limited)e(to)i(the)f(root)h(user\).)g(Substitute)e -(your)i(o)n(wn)f(ra)o(w)g(printer)h(de)n(vice)f(in)h(place)396 -1779 y(of)g(the)g(/de)n(v/usb/lp0)d(sho)n(wn)h(in)i(the)f(e)o(xample.)g -(The)h(output)f(will)g(v)n(ary)g(depending)g(on)h(the)396 -1908 y(precise)g(printer)g(model.)396 2124 y Fh(#)54 -b(escputil)e(-d)h(-r)h(/dev/usb/lp0)396 2241 y(Escputil)e(version)h -(4.3.0,)f(Copyright)g(\(C\))i(2000-2001)e(Robert)g(Krawitz)396 -2357 y(Escputil)g(comes)h(with)g(ABSOLUTELY)f(NO)h(WARRANTY;)f(for)i -(details)e(type)396 2474 y('escputil)g(-l')396 2591 y(This)h(is)h(free) -f(software,)f(and)h(you)g(are)g(welcome)g(to)g(redistribute)e(it)396 -2707 y(under)i(certain)f(conditions;)g(type)h('escputil)f(-l')h(for)g -(details.)396 2940 y(@EJL)g(ID)396 3057 y -(MFG:EPSON;CMD:ESCPL2,BDC;MDL:Stylu)o(s)48 b(Photo)53 -b(870;CLS:PRINTER;DES:)396 3173 y(EPSON)g(Stylus)g(Photo)f(870;)-2 -3900 y Fe(4.1.7.)39 b(More)f(Inf)m(ormation)396 4101 -y Fm(F)o(or)25 b(more)g(detailed)f(information)f(about)i(the)f(command) -g(line)g(switches)g(accepted)i(by)e(the)396 4231 y Fi(escputil)g -Fm(utility)-6 b(,)23 b(please)i(consult)e(the)i(man)f(page)h(which)g -(is)f(supplied)g(with)g(the)g(Gimp-Print)396 4360 y(softw)o(are.)h(The) -g(user)g(may)f(also)h(issue)f(the)g("escputil)g(--help")g(command)g(to) -h(get)f(a)h(listing)f(of)396 4490 y(supported)g(command)g(line)g -(switches.)g(The)h(command)f(requires)h(no)f(special)h(pri)n(vile)o -(ges)e(to)396 4619 y(e)o(x)o(ecute.)p Black 3645 5692 -a Fi(38)p Black eop -%%Page: 39 48 -39 47 bop Black 0 TeXcolorgray Black Black -2 647 a Fk(Appendix)58 -b(A.)g(GNU)g(Free)-2 915 y(Documentation)g(License)396 -1213 y Fm(V)-11 b(ersion)25 b(1.1,)f(March)h(2000)496 -1429 y Fa(Cop)o(yright)c(\(C\))h(2000)g(Free)g(Softw)o(are)f(F)o -(oundation,)g(Inc.)h(59)g(T)-6 b(emple)21 b(Place,)h(Suite)g(330,)496 -1545 y(Boston,)g(MA)g(02111-1307)e(USA)i(Ev)o(eryone)f(is)h(permitted)f -(to)h(cop)o(y)g(and)g(distrib)n(ute)f(v)o(erbatim)496 -1662 y(copies)g(of)h(this)g(license)g(document,)f(b)n(ut)i(changing)e -(it)h(is)g(not)g(allo)n(wed.)-2 2294 y Fo(0.)47 b(PREAMBLE)396 -2509 y Fm(The)25 b(purpose)f(of)h(this)f(License)h(is)f(to)h(mak)o(e)f -(a)i(manual,)e(te)o(xtbook,)f(or)i(other)f(written)396 -2639 y(document)g("free")h(in)g(the)f(sense)h(of)g(freedom:)f(to)h -(assure)g(e)n(v)o(eryone)f(the)g(ef)n(fecti)n(v)o(e)g(freedom)396 -2768 y(to)h(cop)o(y)f(and)h(redistrib)n(ute)f(it,)g(with)g(or)h -(without)e(modifying)g(it,)h(either)h(commercially)f(or)396 -2898 y(noncommercially)-6 b(.)23 b(Secondarily)-6 b(,)24 -b(this)g(License)h(preserv)o(es)f(for)h(the)g(author)f(and)h(publisher) -f(a)396 3027 y(w)o(ay)h(to)g(get)f(credit)h(for)g(their)g(w)o(ork,)f -(while)g(not)h(being)f(considered)g(responsible)g(for)396 -3157 y(modi\002cations)g(made)g(by)h(others.)396 3336 -y(This)f(License)h(is)f(a)i(kind)e(of)g("cop)o(yleft",)g(which)g(means) -h(that)f(deri)n(v)n(ati)n(v)o(e)f(w)o(orks)h(of)h(the)396 -3466 y(document)f(must)g(themselv)o(es)f(be)i(free)h(in)e(the)h(same)f -(sense.)h(It)g(complements)e(the)i(GNU)396 3595 y(General)g(Public)g -(License,)g(which)f(is)g(a)i(cop)o(yleft)e(license)h(designed)f(for)h -(free)g(softw)o(are.)396 3775 y(W)-8 b(e)25 b(ha)n(v)o(e)g(designed)f -(this)g(License)h(in)f(order)h(to)g(use)f(it)h(for)g(manuals)f(for)h -(free)g(softw)o(are,)396 3904 y(because)g(free)h(softw)o(are)f(needs)g -(free)h(documentation:)c(a)k(free)f(program)g(should)e(come)i(with)396 -4034 y(manuals)f(pro)o(viding)f(the)h(same)g(freedoms)h(that)f(the)g -(softw)o(are)h(does.)f(But)h(this)e(License)i(is)f(not)396 -4163 y(limited)g(to)g(softw)o(are)h(manuals;)e(it)i(can)g(be)g(used)f -(for)i(an)o(y)e(te)o(xtual)f(w)o(ork,)i(re)o(gardless)f(of)396 -4293 y(subject)g(matter)h(or)g(whether)g(it)f(is)g(published)g(as)g(a)i -(printed)e(book.)g(W)-8 b(e)25 b(recommend)f(this)396 -4422 y(License)h(principally)f(for)h(w)o(orks)f(whose)h(purpose)f(is)g -(instruction)f(or)i(reference.)-2 4924 y Fo(1.)47 b(APPLICABILITY)i -(AND)g(DEFINITIONS)396 5140 y Fm(This)24 b(License)h(applies)f(to)h(an) -o(y)f(manual)g(or)h(other)g(w)o(ork)f(that)h(contains)f(a)h(notice)f -(placed)h(by)396 5270 y(the)g(cop)o(yright)f(holder)g(saying)g(it)g -(can)i(be)f(distrib)n(uted)e(under)h(the)h(terms)f(of)h(this)f -(License.)p Black 3645 5692 a Fi(39)p Black eop -%%Page: 40 49 -40 48 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(The)i("Document",)e(belo)n(w)-6 b(,)24 -b(refers)h(to)g(an)o(y)f(such)g(manual)h(or)g(w)o(ork.)f(An)o(y)g -(member)g(of)h(the)396 708 y(public)f(is)h(a)g(licensee,)f(and)h(is)g -(addressed)f(as)h("you".)396 888 y(A)g("Modi\002ed)f(V)-11 -b(ersion")24 b(of)h(the)f(Document)g(means)h(an)o(y)f(w)o(ork)h -(containing)e(the)i(Document)396 1017 y(or)g(a)g(portion)f(of)h(it,)f -(either)h(copied)f(v)o(erbatim,)g(or)h(with)f(modi\002cations)f(and/or) -i(translated)396 1147 y(into)f(another)h(language.)396 -1326 y(A)g("Secondary)g(Section")g(is)f(a)h(named)g(appendix)f(or)h(a)g -(front-matter)f(section)g(of)h(the)396 1456 y(Document)e(that)h(deals)f -(e)o(xclusi)n(v)o(ely)f(with)h(the)h(relationship)e(of)i(the)g -(publishers)e(or)i(authors)f(of)396 1585 y(the)i(Document)f(to)g(the)h -(Document')-5 b(s)23 b(o)o(v)o(erall)h(subject)g(\(or)h(to)g(related)g -(matters\))f(and)h(contains)396 1715 y(nothing)f(that)g(could)g(f)o -(all)h(directly)f(within)g(that)g(o)o(v)o(erall)g(subject.)g(\(F)o(or)h -(e)o(xample,)f(if)g(the)396 1844 y(Document)g(is)h(in)f(part)h(a)g(te)o -(xtbook)e(of)i(mathematics,)e(a)i(Secondary)h(Section)f(may)f(not)396 -1974 y(e)o(xplain)g(an)o(y)g(mathematics.\))g(The)h(relationship)e -(could)h(be)h(a)g(matter)g(of)g(historical)396 2103 y(connection)f -(with)g(the)h(subject)f(or)h(with)f(related)h(matters,)f(or)h(of)g(le)o -(gal,)e(commercial,)396 2233 y(philosophical,)g(ethical)h(or)h -(political)f(position)f(re)o(garding)h(them.)396 2412 -y(The)h("In)l(v)n(ariant)f(Sections")g(are)i(certain)f(Secondary)g -(Sections)f(whose)h(titles)f(are)h(designated,)396 2542 -y(as)g(being)f(those)h(of)g(In)l(v)n(ariant)f(Sections,)g(in)g(the)h -(notice)g(that)f(says)g(that)h(the)f(Document)g(is)396 -2671 y(released)i(under)e(this)g(License.)396 2850 y(The)h("Co)o(v)o -(er)f(T)-7 b(e)o(xts")24 b(are)h(certain)g(short)f(passages)h(of)g(te)o -(xt)f(that)g(are)h(listed,)f(as)h(Front-Co)o(v)o(er)396 -2980 y(T)-7 b(e)o(xts)24 b(or)h(Back-Co)o(v)o(er)g(T)-7 -b(e)o(xts,)24 b(in)g(the)h(notice)f(that)h(says)f(that)h(the)f -(Document)g(is)h(released)396 3109 y(under)g(this)f(License.)396 -3289 y(A)h("T)m(ransparent")f(cop)o(y)g(of)h(the)g(Document)f(means)g -(a)h(machine-readable)g(cop)o(y)-6 b(,)396 3418 y(represented)25 -b(in)g(a)g(format)f(whose)h(speci\002cation)f(is)h(a)n(v)n(ailable)f -(to)g(the)h(general)g(public,)f(whose)396 3548 y(contents)g(can)h(be)g -(vie)n(wed)f(and)h(edited)g(directly)f(and)h(straightforw)o(ardly)e -(with)h(generic)h(te)o(xt)396 3677 y(editors)f(or)h(\(for)g(images)g -(composed)f(of)g(pix)o(els\))g(generic)h(paint)f(programs)g(or)h(\(for) -h(dra)o(wings\))396 3807 y(some)e(widely)h(a)n(v)n(ailable)f(dra)o -(wing)g(editor)l(,)g(and)h(that)f(is)g(suitable)g(for)h(input)f(to)g -(te)o(xt)396 3936 y(formatters)h(or)g(for)g(automatic)e(translation)h -(to)g(a)h(v)n(ariety)g(of)f(formats)h(suitable)f(for)h(input)e(to)396 -4066 y(te)o(xt)h(formatters.)g(A)h(cop)o(y)g(made)g(in)f(an)h -(otherwise)f(T)m(ransparent)g(\002le)i(format)e(whose)h(markup)396 -4195 y(has)g(been)g(designed)f(to)g(thw)o(art)h(or)g(discourage)f -(subsequent)g(modi\002cation)g(by)g(readers)i(is)e(not)396 -4325 y(T)m(ransparent.)g(A)h(cop)o(y)g(that)f(is)h(not)f("T)m -(ransparent")f(is)i(called)f("Opaque".)396 4504 y(Examples)g(of)h -(suitable)f(formats)g(for)h(T)m(ransparent)f(copies)h(include)f(plain)g -(ASCII)i(without)396 4634 y(markup,)e(T)-7 b(e)o(xinfo)24 -b(input)g(format,)g(LaT)-7 b(eX)26 b(input)d(format,)i(SGML)f(or)h(XML) -f(using)g(a)396 4763 y(publicly)g(a)n(v)n(ailable)g(DTD,)g(and)h -(standard-conforming)f(simple)f(HTML)h(designed)g(for)396 -4893 y(human)g(modi\002cation.)g(Opaque)h(formats)f(include)g -(PostScript,)h(PDF)-8 b(,)25 b(proprietary)g(formats)396 -5022 y(that)f(can)h(be)f(read)h(and)f(edited)g(only)g(by)g(proprietary) -g(w)o(ord)g(processors,)g(SGML)g(or)g(XML)g(for)396 5152 -y(which)h(the)f(DTD)h(and/or)f(processing)g(tools)g(are)i(not)e -(generally)g(a)n(v)n(ailable,)g(and)h(the)396 5281 y(machine-generated) -g(HTML)f(produced)h(by)f(some)h(w)o(ord)f(processors)h(for)g(output)e -(purposes)p Black 3645 5692 a Fi(40)p Black eop -%%Page: 41 50 -41 49 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(only)-6 b(.)396 758 y(The)25 b("T)m(itle)e(P)o(age") -i(means,)f(for)i(a)f(printed)f(book,)g(the)h(title)e(page)i(itself,)f -(plus)g(such)h(follo)n(wing)396 888 y(pages)g(as)g(are)g(needed)h(to)e -(hold,)g(le)o(gibly)-6 b(,)22 b(the)j(material)f(this)g(License)h -(requires)g(to)f(appear)i(in)396 1017 y(the)f(title)f(page.)h(F)o(or)g -(w)o(orks)f(in)g(formats)h(which)f(do)h(not)f(ha)n(v)o(e)g(an)o(y)h -(title)e(page)i(as)g(such,)g("T)m(itle)396 1147 y(P)o(age")g(means)f -(the)h(te)o(xt)f(near)h(the)g(most)f(prominent)f(appearance)j(of)f(the) -g(w)o(ork')-5 b(s)24 b(title,)396 1276 y(preceding)h(the)g(be)o -(ginning)e(of)h(the)h(body)f(of)h(the)g(te)o(xt.)-2 1779 -y Fo(2.)47 b(VERB)-5 b(A)-15 b(TIM)48 b(COPYING)396 1994 -y Fm(Y)-11 b(ou)25 b(may)f(cop)o(y)h(and)g(distrib)n(ute)e(the)i -(Document)e(in)i(an)o(y)f(medium,)g(either)g(commercially)g(or)396 -2124 y(noncommercially)-6 b(,)23 b(pro)o(vided)g(that)i(this)f -(License,)g(the)h(cop)o(yright)f(notices,)g(and)h(the)f(license)396 -2253 y(notice)h(saying)f(this)g(License)g(applies)g(to)h(the)f -(Document)g(are)i(reproduced)f(in)f(all)h(copies,)f(and)396 -2383 y(that)h(you)f(add)h(no)f(other)h(conditions)e(whatsoe)n(v)o(er)h -(to)g(those)g(of)h(this)f(License.)h(Y)-11 b(ou)24 b(may)h(not)396 -2512 y(use)g(technical)g(measures)f(to)h(obstruct)e(or)i(control)f(the) -h(reading)g(or)g(further)g(cop)o(ying)f(of)h(the)396 -2642 y(copies)g(you)f(mak)o(e)h(or)g(distrib)n(ute.)e(Ho)n(we)n(v)o(er) -l(,)g(you)i(may)f(accept)h(compensation)f(in)g(e)o(xchange)396 -2771 y(for)h(copies.)g(If)g(you)f(distrib)n(ute)g(a)h(lar)n(ge)g -(enough)f(number)g(of)h(copies)g(you)f(must)g(also)g(follo)n(w)396 -2901 y(the)h(conditions)e(in)h(section)h(3.)396 3080 -y(Y)-11 b(ou)25 b(may)f(also)h(lend)f(copies,)g(under)h(the)g(same)f -(conditions)g(stated)g(abo)o(v)o(e,)g(and)g(you)h(may)396 -3210 y(publicly)f(display)f(copies.)-2 3712 y Fo(3.)47 -b(COPYING)h(IN)g(Q)n(U)-9 b(ANTITY)396 3928 y Fm(If)26 -b(you)e(publish)f(printed)h(copies)h(of)g(the)f(Document)g(numbering)g -(more)g(than)h(100,)f(and)h(the)396 4057 y(Document')-5 -b(s)24 b(license)g(notice)h(requires)f(Co)o(v)o(er)h(T)-7 -b(e)o(xts,)24 b(you)g(must)g(enclose)g(the)h(copies)f(in)396 -4187 y(co)o(v)o(ers)g(that)h(carry)-6 b(,)25 b(clearly)g(and)f(le)o -(gibly)-6 b(,)23 b(all)h(these)h(Co)o(v)o(er)f(T)-7 b(e)o(xts:)24 -b(Front-Co)o(v)o(er)g(T)-7 b(e)o(xts)24 b(on)396 4316 -y(the)h(front)f(co)o(v)o(er)l(,)h(and)f(Back-Co)o(v)o(er)i(T)-7 -b(e)o(xts)23 b(on)i(the)g(back)g(co)o(v)o(er)-5 b(.)23 -b(Both)i(co)o(v)o(ers)f(must)g(also)396 4446 y(clearly)h(and)g(le)o -(gibly)e(identify)h(you)g(as)h(the)g(publisher)f(of)h(these)f(copies.)h -(The)f(front)h(co)o(v)o(er)396 4575 y(must)f(present)h(the)f(full)g -(title)g(with)g(all)h(w)o(ords)f(of)h(the)g(title)f(equally)g -(prominent)g(and)g(visible.)396 4705 y(Y)-11 b(ou)24 -b(may)f(add)h(other)g(material)f(on)h(the)f(co)o(v)o(ers)g(in)h -(addition.)e(Cop)o(ying)h(with)g(changes)h(limited)396 -4834 y(to)h(the)f(co)o(v)o(ers,)g(as)h(long)f(as)h(the)o(y)f(preserv)o -(e)h(the)f(title)g(of)h(the)g(Document)f(and)h(satisfy)f(these)396 -4964 y(conditions,)f(can)i(be)g(treated)g(as)g(v)o(erbatim)f(cop)o -(ying)g(in)g(other)h(respects.)396 5143 y(If)g(the)f(required)g(te)o -(xts)g(for)g(either)g(co)o(v)o(er)g(are)h(too)f(v)n(oluminous)e(to)i -(\002t)g(le)o(gibly)-6 b(,)22 b(you)i(should)f(put)396 -5273 y(the)i(\002rst)g(ones)f(listed)g(\(as)h(man)o(y)f(as)h(\002t)g -(reasonably\))g(on)f(the)h(actual)g(co)o(v)o(er)l(,)f(and)g(continue)g -(the)p Black 3645 5692 a Fi(41)p Black eop -%%Page: 42 51 -42 50 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(rest)i(onto)f(adjacent)h(pages.)396 -758 y(If)h(you)e(publish)f(or)i(distrib)n(ute)e(Opaque)i(copies)g(of)f -(the)h(Document)f(numbering)g(more)g(than)396 888 y(100,)h(you)f(must)g -(either)g(include)g(a)i(machine-readable)f(T)m(ransparent)f(cop)o(y)g -(along)h(with)f(each)396 1017 y(Opaque)h(cop)o(y)-6 b(,)24 -b(or)h(state)f(in)h(or)g(with)f(each)h(Opaque)g(cop)o(y)g(a)g -(publicly-accessible)396 1147 y(computer)n(-netw)o(ork)f(location)g -(containing)g(a)h(complete)f(T)m(ransparent)g(cop)o(y)h(of)g(the)396 -1276 y(Document,)f(free)i(of)f(added)g(material,)f(which)g(the)h -(general)g(netw)o(ork-using)e(public)h(has)396 1406 y(access)i(to)e(do) -n(wnload)f(anon)o(ymously)g(at)h(no)h(char)n(ge)h(using)d -(public-standard)h(netw)o(ork)396 1535 y(protocols.)f(If)i(you)e(use)h -(the)g(latter)g(option,)e(you)i(must)f(tak)o(e)h(reasonably)g(prudent)f -(steps,)h(when)396 1665 y(you)h(be)o(gin)e(distrib)n(ution)g(of)i -(Opaque)f(copies)h(in)f(quantity)-6 b(,)23 b(to)i(ensure)g(that)f(this) -g(T)m(ransparent)396 1794 y(cop)o(y)h(will)f(remain)g(thus)g -(accessible)h(at)g(the)g(stated)f(location)g(until)f(at)i(least)g(one)g -(year)g(after)396 1924 y(the)g(last)f(time)g(you)h(distrib)n(ute)e(an)i -(Opaque)g(cop)o(y)f(\(directly)h(or)f(through)g(your)h(agents)f(or)396 -2053 y(retailers\))h(of)g(that)f(edition)g(to)h(the)f(public.)396 -2233 y(It)h(is)f(requested,)h(b)n(ut)f(not)g(required,)h(that)g(you)f -(contact)h(the)f(authors)g(of)h(the)g(Document)f(well)396 -2362 y(before)i(redistrib)n(uting)c(an)o(y)j(lar)n(ge)g(number)f(of)h -(copies,)f(to)h(gi)n(v)o(e)e(them)i(a)g(chance)g(to)g(pro)o(vide)396 -2492 y(you)g(with)f(an)h(updated)f(v)o(ersion)g(of)h(the)f(Document.)-2 -2994 y Fo(4.)47 b(MODIFICA)-15 b(TIONS)396 3210 y Fm(Y)k(ou)25 -b(may)f(cop)o(y)h(and)g(distrib)n(ute)e(a)i(Modi\002ed)f(V)-11 -b(ersion)25 b(of)f(the)h(Document)f(under)h(the)396 3339 -y(conditions)e(of)i(sections)f(2)h(and)g(3)f(abo)o(v)o(e,)g(pro)o -(vided)g(that)g(you)g(release)i(the)e(Modi\002ed)396 -3469 y(V)-11 b(ersion)25 b(under)f(precisely)h(this)f(License,)g(with)g -(the)h(Modi\002ed)f(V)-11 b(ersion)25 b(\002lling)f(the)g(role)h(of)396 -3598 y(the)g(Document,)f(thus)g(licensing)f(distrib)n(ution)g(and)i -(modi\002cation)e(of)i(the)g(Modi\002ed)f(V)-11 b(ersion)396 -3728 y(to)25 b(whoe)n(v)o(er)f(possesses)f(a)j(cop)o(y)e(of)h(it.)f(In) -h(addition,)e(you)i(must)f(do)g(these)h(things)e(in)i(the)396 -3857 y(Modi\002ed)f(V)-11 b(ersion:)p Black 454 4136 -a(A.)p Black 25 w(Use)24 b(in)h(the)f(T)m(itle)g(P)o(age)h(\(and)g(on)g -(the)f(co)o(v)o(ers,)g(if)h(an)o(y\))f(a)i(title)d(distinct)h(from)g -(that)h(of)g(the)576 4266 y(Document,)e(and)i(from)g(those)f(of)h(pre)n -(vious)e(v)o(ersions)h(\(which)g(should,)g(if)h(there)g(were)576 -4395 y(an)o(y)-6 b(,)23 b(be)i(listed)f(in)g(the)h(History)f(section)g -(of)h(the)g(Document\).)f(Y)-11 b(ou)24 b(may)h(use)f(the)h(same)576 -4525 y(title)f(as)g(a)i(pre)n(vious)d(v)o(ersion)h(if)h(the)f(original) -g(publisher)g(of)h(that)f(v)o(ersion)g(gi)n(v)o(es)576 -4654 y(permission.)p Black 459 4834 a(B.)p Black 26 w(List)g(on)g(the)h -(T)m(itle)e(P)o(age,)i(as)g(authors,)f(one)h(or)g(more)g(persons)f(or)h -(entities)e(responsible)576 4963 y(for)i(authorship)e(of)i(the)g -(modi\002cations)e(in)i(the)f(Modi\002ed)g(V)-11 b(ersion,)25 -b(together)f(with)g(at)576 5093 y(least)g(\002)n(v)o(e)g(of)h(the)g -(principal)f(authors)g(of)h(the)g(Document)f(\(all)g(of)h(its)f -(principal)h(authors,)576 5222 y(if)f(it)h(has)f(less)h(than)f(\002)n -(v)o(e\).)p Black 3645 5692 a Fi(42)p Black eop -%%Page: 43 52 -43 51 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black Black 459 579 a Fm(C.)p Black 26 w(State)h(on)f(the)h(T)m(itle)e -(page)i(the)g(name)g(of)g(the)f(publisher)g(of)h(the)f(Modi\002ed)h(V) --11 b(ersion,)23 b(as)h(the)576 708 y(publisher)-5 b(.)p -Black 454 888 a(D.)p Black 25 w(Preserv)o(e)25 b(all)g(the)f(cop)o -(yright)g(notices)g(of)h(the)g(Document.)p Black 465 -1067 a(E.)p Black 25 w(Add)f(an)h(appropriate)g(cop)o(yright)e(notice)i -(for)g(your)f(modi\002cations)g(adjacent)h(to)f(the)576 -1197 y(other)g(cop)o(yright)g(notices.)p Black 478 1376 -a(F)-8 b(.)p Black 26 w(Include,)24 b(immediately)f(after)j(the)e(cop)o -(yright)g(notices,)g(a)h(license)g(notice)f(gi)n(ving)f(the)576 -1505 y(public)h(permission)f(to)h(use)h(the)f(Modi\002ed)h(V)-11 -b(ersion)24 b(under)h(the)f(terms)h(of)g(this)e(License,)576 -1635 y(in)h(the)h(form)f(sho)n(wn)g(in)g(the)h(Addendum)e(belo)n(w)-6 -b(.)p Black 454 1814 a(G.)p Black 25 w(Preserv)o(e)25 -b(in)f(that)h(license)f(notice)h(the)f(full)h(lists)e(of)i(In)l(v)n -(ariant)f(Sections)h(and)f(required)576 1944 y(Co)o(v)o(er)g(T)-7 -b(e)o(xts)24 b(gi)n(v)o(en)f(in)i(the)f(Document')-5 -b(s)24 b(license)g(notice.)p Black 454 2123 a(H.)p Black -25 w(Include)g(an)h(unaltered)g(cop)o(y)f(of)h(this)f(License.)p -Black 493 2302 a(I.)p Black 25 w(Preserv)o(e)h(the)f(section)g -(entitled)f("History",)g(and)h(its)g(title,)f(and)i(add)f(to)g(it)g(an) -h(item)f(stating)576 2432 y(at)g(least)h(the)g(title,)e(year)l(,)j(ne)n -(w)e(authors,)g(and)h(publisher)f(of)h(the)f(Modi\002ed)g(V)-11 -b(ersion)25 b(as)576 2561 y(gi)n(v)o(en)e(on)h(the)h(T)m(itle)f(P)o -(age.)h(If)g(there)g(is)f(no)h(section)f(entitled)g("History")f(in)h -(the)576 2691 y(Document,)f(create)j(one)f(stating)f(the)g(title,)g -(year)l(,)h(authors,)f(and)h(publisher)f(of)h(the)576 -2821 y(Document)f(as)g(gi)n(v)o(en)g(on)g(its)g(T)m(itle)g(P)o(age,)h -(then)f(add)h(an)g(item)f(describing)g(the)h(Modi\002ed)576 -2950 y(V)-11 b(ersion)24 b(as)h(stated)f(in)g(the)h(pre)n(vious)f -(sentence.)p Black 487 3129 a(J.)p Black 25 w(Preserv)o(e)h(the)g(netw) -o(ork)f(location,)g(if)h(an)o(y)-6 b(,)23 b(gi)n(v)o(en)h(in)g(the)h -(Document)f(for)h(public)f(access)576 3259 y(to)g(a)h(T)m(ransparent)f -(cop)o(y)h(of)g(the)g(Document,)e(and)i(lik)o(e)n(wise)f(the)g(netw)o -(ork)h(locations)576 3388 y(gi)n(v)o(en)e(in)h(the)h(Document)f(for)h -(pre)n(vious)e(v)o(ersions)h(it)g(w)o(as)h(based)g(on.)f(These)h(may)g -(be)576 3518 y(placed)g(in)f(the)h("History")e(section.)h(Y)-11 -b(ou)24 b(may)h(omit)e(a)i(netw)o(ork)g(location)f(for)h(a)g(w)o(ork) -576 3647 y(that)f(w)o(as)h(published)e(at)i(least)f(four)h(years)g -(before)h(the)e(Document)g(itself,)g(or)h(if)g(the)576 -3777 y(original)e(publisher)h(of)h(the)g(v)o(ersion)e(it)i(refers)g(to) -g(gi)n(v)o(es)e(permission.)p Black 454 3956 a(K.)p Black -25 w(In)h(an)o(y)h(section)f(entitled)g("Ackno)n(wledgements")e(or)j -("Dedications",)e(preserv)o(e)h(the)576 4086 y(section')-5 -b(s)23 b(title,)h(and)h(preserv)o(e)g(in)f(the)h(section)f(all)g(the)h -(substance)f(and)h(tone)f(of)h(each)h(of)576 4215 y(the)e(contrib)n -(utor)g(ackno)n(wledgements)f(and/or)h(dedications)g(gi)n(v)o(en)f -(therein.)p Black 465 4395 a(L.)p Black 25 w(Preserv)o(e)i(all)g(the)f -(In)l(v)n(ariant)g(Sections)h(of)g(the)f(Document,)g(unaltered)h(in)f -(their)h(te)o(xt)f(and)576 4524 y(in)g(their)h(titles.)e(Section)i -(numbers)f(or)h(the)f(equi)n(v)n(alent)f(are)j(not)e(considered)h(part) -f(of)h(the)576 4654 y(section)f(titles.)p Black 437 4833 -a(M.)p Black 25 w(Delete)h(an)o(y)f(section)g(entitled)g -("Endorsements".)e(Such)j(a)h(section)e(may)g(not)g(be)576 -4962 y(included)g(in)g(the)h(Modi\002ed)f(V)-11 b(ersion.)p -Black 454 5142 a(N.)p Black 25 w(Do)24 b(not)g(retitle)h(an)o(y)f(e)o -(xisting)f(section)h(as)h("Endorsements")e(or)i(to)f(con\003ict)h(in)f -(title)g(with)576 5271 y(an)o(y)g(In)l(v)n(ariant)g(Section.)p -Black 3645 5692 a Fi(43)p Black eop -%%Page: 44 53 -44 52 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(If)j(the)e(Modi\002ed)g(V)-11 b(ersion)25 -b(includes)f(ne)n(w)g(front-matter)g(sections)g(or)h(appendices)g(that) -396 708 y(qualify)f(as)h(Secondary)h(Sections)e(and)h(contain)f(no)h -(material)f(copied)h(from)f(the)h(Document,)396 838 y(you)g(may)f(at)h -(your)f(option)g(designate)g(some)g(or)h(all)g(of)g(these)f(sections)g -(as)h(in)l(v)n(ariant.)f(T)-8 b(o)24 b(do)396 967 y(this,)g(add)h -(their)f(titles)g(to)g(the)h(list)f(of)h(In)l(v)n(ariant)f(Sections)g -(in)h(the)f(Modi\002ed)h(V)-11 b(ersion')-5 b(s)23 b(license)396 -1097 y(notice.)i(These)f(titles)g(must)g(be)h(distinct)e(from)i(an)o(y) -f(other)g(section)h(titles.)396 1276 y(Y)-11 b(ou)25 -b(may)f(add)h(a)g(section)f(entitled)g("Endorsements",)f(pro)o(vided)g -(it)i(contains)e(nothing)h(b)n(ut)396 1406 y(endorsements)g(of)h(your)f -(Modi\002ed)h(V)-11 b(ersion)24 b(by)g(v)n(arious)g(parties--for)h(e)o -(xample,)f(statements)396 1535 y(of)h(peer)h(re)n(vie)n(w)e(or)g(that)h -(the)f(te)o(xt)g(has)h(been)g(appro)o(v)o(ed)f(by)g(an)h(or)n -(ganization)f(as)h(the)396 1665 y(authoritati)n(v)o(e)e(de\002nition)h -(of)h(a)g(standard.)396 1844 y(Y)-11 b(ou)25 b(may)f(add)h(a)g(passage) -g(of)g(up)f(to)h(\002)n(v)o(e)f(w)o(ords)g(as)h(a)h(Front-Co)o(v)o(er)e -(T)-7 b(e)o(xt,)24 b(and)h(a)g(passage)g(of)396 1974 -y(up)g(to)f(25)h(w)o(ords)f(as)h(a)g(Back-Co)o(v)o(er)g(T)-7 -b(e)o(xt,)24 b(to)h(the)g(end)f(of)h(the)g(list)f(of)g(Co)o(v)o(er)h(T) --7 b(e)o(xts)24 b(in)g(the)396 2103 y(Modi\002ed)g(V)-11 -b(ersion.)25 b(Only)f(one)h(passage)f(of)h(Front-Co)o(v)o(er)g(T)-7 -b(e)o(xt)24 b(and)h(one)f(of)h(Back-Co)o(v)o(er)396 2233 -y(T)-7 b(e)o(xt)24 b(may)h(be)g(added)g(by)f(\(or)h(through)f -(arrangements)h(made)f(by\))h(an)o(y)f(one)h(entity)-6 -b(.)23 b(If)j(the)396 2362 y(Document)e(already)h(includes)f(a)h(co)o -(v)o(er)g(te)o(xt)e(for)j(the)e(same)h(co)o(v)o(er)l(,)f(pre)n(viously) -f(added)i(by)396 2492 y(you)g(or)g(by)f(arrangement)h(made)g(by)f(the)h -(same)f(entity)g(you)h(are)g(acting)g(on)f(behalf)h(of,)g(you)396 -2621 y(may)g(not)f(add)h(another;)f(b)n(ut)g(you)h(may)f(replace)i(the) -e(old)h(one,)f(on)h(e)o(xplicit)e(permission)g(from)396 -2751 y(the)i(pre)n(vious)e(publisher)h(that)g(added)h(the)g(old)f(one.) -396 2930 y(The)h(author\(s\))g(and)f(publisher\(s\))g(of)h(the)g -(Document)f(do)g(not)g(by)h(this)f(License)h(gi)n(v)o(e)396 -3060 y(permission)e(to)i(use)g(their)f(names)h(for)g(publicity)e(for)i -(or)g(to)f(assert)h(or)g(imply)e(endorsement)h(of)396 -3189 y(an)o(y)h(Modi\002ed)f(V)-11 b(ersion.)-2 3691 -y Fo(5.)47 b(COMBINING)i(DOCUMENTS)396 3907 y Fm(Y)-11 -b(ou)25 b(may)f(combine)g(the)h(Document)f(with)g(other)h(documents)e -(released)i(under)g(this)f(License,)396 4037 y(under)h(the)g(terms)f -(de\002ned)h(in)g(section)f(4)g(abo)o(v)o(e)g(for)h(modi\002ed)f(v)o -(ersions,)g(pro)o(vided)f(that)i(you)396 4166 y(include)f(in)h(the)g -(combination)e(all)h(of)h(the)g(In)l(v)n(ariant)f(Sections)g(of)h(all)g -(of)g(the)f(original)396 4296 y(documents,)g(unmodi\002ed,)f(and)i -(list)f(them)g(all)h(as)g(In)l(v)n(ariant)f(Sections)g(of)h(your)g -(combined)396 4425 y(w)o(ork)g(in)f(its)g(license)h(notice.)396 -4604 y(The)g(combined)f(w)o(ork)h(need)g(only)f(contain)g(one)h(cop)o -(y)f(of)h(this)f(License,)h(and)f(multiple)396 4734 y(identical)g(In)l -(v)n(ariant)g(Sections)g(may)h(be)f(replaced)i(with)d(a)i(single)f(cop) -o(y)-6 b(.)24 b(If)h(there)g(are)g(multiple)396 4863 -y(In)l(v)n(ariant)f(Sections)h(with)f(the)h(same)f(name)h(b)n(ut)f(dif) -n(ferent)h(contents,)e(mak)o(e)i(the)g(title)f(of)h(each)396 -4993 y(such)g(section)f(unique)g(by)h(adding)f(at)g(the)h(end)g(of)g -(it,)f(in)g(parentheses,)h(the)g(name)f(of)h(the)396 -5123 y(original)f(author)h(or)f(publisher)g(of)h(that)f(section)h(if)f -(kno)n(wn,)g(or)h(else)g(a)g(unique)f(number)-5 b(.)23 -b(Mak)o(e)p Black 3645 5692 a Fi(44)p Black eop -%%Page: 45 54 -45 53 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(the)i(same)g(adjustment)e(to)h(the)h(section)f -(titles)g(in)g(the)h(list)e(of)i(In)l(v)n(ariant)f(Sections)h(in)f(the) -396 708 y(license)h(notice)f(of)h(the)g(combined)f(w)o(ork.)396 -888 y(In)h(the)g(combination,)e(you)h(must)g(combine)g(an)o(y)g -(sections)g(entitled)g("History")f(in)h(the)h(v)n(arious)396 -1017 y(original)f(documents,)g(forming)f(one)i(section)f(entitled)g -("History";)f(lik)o(e)n(wise)g(combine)h(an)o(y)396 1147 -y(sections)g(entitled)g("Ackno)n(wledgements",)e(and)j(an)o(y)f -(sections)g(entitled)g("Dedications".)396 1276 y(Y)-11 -b(ou)25 b(must)e(delete)i(all)g(sections)f(entitled)f("Endorsements.") --2 1779 y Fo(6.)47 b(COLLECTIONS)i(OF)f(DOCUMENTS)396 -1994 y Fm(Y)-11 b(ou)25 b(may)f(mak)o(e)h(a)g(collection)f(consisting)f -(of)i(the)f(Document)g(and)h(other)g(documents)396 2124 -y(released)h(under)e(this)g(License,)h(and)g(replace)g(the)g(indi)n -(vidual)d(copies)j(of)g(this)e(License)i(in)g(the)396 -2253 y(v)n(arious)f(documents)g(with)g(a)h(single)f(cop)o(y)g(that)h -(is)f(included)g(in)g(the)h(collection,)f(pro)o(vided)396 -2383 y(that)h(you)f(follo)n(w)f(the)i(rules)g(of)g(this)e(License)i -(for)g(v)o(erbatim)f(cop)o(ying)g(of)h(each)g(of)g(the)396 -2512 y(documents)f(in)g(all)h(other)f(respects.)396 2692 -y(Y)-11 b(ou)25 b(may)f(e)o(xtract)h(a)g(single)f(document)g(from)g -(such)h(a)g(collection,)f(and)g(distrib)n(ute)g(it)396 -2821 y(indi)n(vidually)e(under)j(this)f(License,)h(pro)o(vided)e(you)h -(insert)h(a)g(cop)o(y)f(of)h(this)f(License)h(into)f(the)396 -2951 y(e)o(xtracted)h(document,)f(and)g(follo)n(w)g(this)g(License)g -(in)h(all)f(other)h(respects)g(re)o(garding)f(v)o(erbatim)396 -3080 y(cop)o(ying)g(of)h(that)f(document.)-2 3583 y Fo(7.)47 -b(A)-9 b(GGREGA)-15 b(TION)49 b(WITH)e(INDEPENDENT)-2 -3806 y(W)m(ORKS)396 4022 y Fm(A)25 b(compilation)e(of)i(the)g(Document) -f(or)g(its)g(deri)n(v)n(ati)n(v)o(es)f(with)h(other)g(separate)i(and) -396 4151 y(independent)e(documents)g(or)h(w)o(orks,)f(in)g(or)h(on)g(a) -g(v)n(olume)f(of)h(a)g(storage)f(or)h(distrib)n(ution)396 -4281 y(medium,)f(does)g(not)g(as)h(a)g(whole)g(count)f(as)h(a)g -(Modi\002ed)f(V)-11 b(ersion)25 b(of)g(the)f(Document,)396 -4410 y(pro)o(vided)g(no)g(compilation)f(cop)o(yright)h(is)g(claimed)h -(for)g(the)f(compilation.)f(Such)i(a)396 4540 y(compilation)e(is)i -(called)f(an)h("aggre)o(gate",)f(and)g(this)g(License)h(does)g(not)f -(apply)g(to)g(the)h(other)396 4669 y(self-contained)g(w)o(orks)f(thus)g -(compiled)g(with)g(the)g(Document,)g(on)h(account)f(of)h(their)g(being) -396 4799 y(thus)f(compiled,)g(if)h(the)o(y)f(are)h(not)f(themselv)o(es) -g(deri)n(v)n(ati)n(v)o(e)e(w)o(orks)i(of)h(the)g(Document.)396 -4978 y(If)h(the)e(Co)o(v)o(er)h(T)-7 b(e)o(xt)24 b(requirement)g(of)h -(section)f(3)h(is)f(applicable)g(to)h(these)f(copies)h(of)g(the)396 -5108 y(Document,)f(then)h(if)f(the)h(Document)f(is)g(less)h(than)f(one) -h(quarter)g(of)g(the)f(entire)h(aggre)o(gate,)f(the)396 -5237 y(Document')-5 b(s)24 b(Co)o(v)o(er)g(T)-7 b(e)o(xts)24 -b(may)g(be)h(placed)g(on)g(co)o(v)o(ers)f(that)g(surround)g(only)g(the) -h(Document)p Black 3645 5692 a Fi(45)p Black eop -%%Page: 46 55 -46 54 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(within)h(the)g(aggre)o(gate.)h(Otherwise)f(the)o(y)g -(must)g(appear)h(on)f(co)o(v)o(ers)g(around)h(the)g(whole)396 -708 y(aggre)o(gate.)-2 1211 y Fo(8.)47 b(TRANSLA)-15 -b(TION)396 1426 y Fm(T)m(ranslation)23 b(is)i(considered)f(a)h(kind)f -(of)h(modi\002cation,)f(so)g(you)h(may)f(distrib)n(ute)f(translations) -396 1556 y(of)i(the)g(Document)f(under)h(the)f(terms)g(of)h(section)f -(4.)h(Replacing)g(In)l(v)n(ariant)f(Sections)h(with)396 -1685 y(translations)f(requires)g(special)h(permission)e(from)i(their)f -(cop)o(yright)g(holders,)g(b)n(ut)g(you)h(may)396 1815 -y(include)f(translations)g(of)h(some)f(or)h(all)f(In)l(v)n(ariant)g -(Sections)h(in)f(addition)g(to)g(the)h(original)396 1944 -y(v)o(ersions)f(of)h(these)f(In)l(v)n(ariant)g(Sections.)h(Y)-11 -b(ou)24 b(may)h(include)f(a)h(translation)f(of)h(this)e(License)396 -2074 y(pro)o(vided)h(that)g(you)h(also)f(include)g(the)h(original)f -(English)f(v)o(ersion)h(of)h(this)e(License.)i(In)g(case)396 -2203 y(of)g(a)g(disagreement)f(between)h(the)g(translation)e(and)i(the) -g(original)f(English)f(v)o(ersion)h(of)h(this)396 2333 -y(License,)g(the)g(original)e(English)h(v)o(ersion)f(will)h(pre)n(v)n -(ail.)-2 2835 y Fo(9.)47 b(TERMINA)-15 b(TION)396 3051 -y Fm(Y)k(ou)25 b(may)f(not)g(cop)o(y)-6 b(,)24 b(modify)-6 -b(,)24 b(sublicense,)f(or)i(distrib)n(ute)f(the)g(Document)g(e)o(xcept) -h(as)396 3180 y(e)o(xpressly)f(pro)o(vided)g(for)h(under)f(this)g -(License.)h(An)o(y)f(other)g(attempt)g(to)h(cop)o(y)-6 -b(,)24 b(modify)-6 b(,)396 3310 y(sublicense)24 b(or)h(distrib)n(ute)e -(the)h(Document)g(is)g(v)n(oid,)g(and)h(will)f(automatically)f -(terminate)h(your)396 3439 y(rights)g(under)h(this)f(License.)g(Ho)n -(we)n(v)o(er)l(,)g(parties)g(who)h(ha)n(v)o(e)f(recei)n(v)o(ed)h -(copies,)f(or)h(rights,)396 3569 y(from)g(you)f(under)h(this)f(License) -h(will)e(not)i(ha)n(v)o(e)f(their)h(licenses)f(terminated)g(so)h(long)f -(as)g(such)396 3698 y(parties)h(remain)f(in)h(full)f(compliance.)-2 -4201 y Fo(10.)47 b(FUTURE)i(REVISIONS)e(OF)h(THIS)g(LICENSE)396 -4416 y Fm(The)25 b(Free)h(Softw)o(are)g(F)o(oundation)d(may)h(publish)g -(ne)n(w)-6 b(,)23 b(re)n(vised)i(v)o(ersions)e(of)i(the)g(GNU)f(Free) -396 4546 y(Documentation)f(License)i(from)g(time)f(to)g(time.)g(Such)h -(ne)n(w)g(v)o(ersions)e(will)h(be)h(similar)f(in)396 -4675 y(spirit)g(to)g(the)h(present)g(v)o(ersion,)e(b)n(ut)i(may)f(dif)n -(fer)h(in)f(detail)g(to)h(address)f(ne)n(w)h(problems)f(or)396 -4805 y(concerns.)h(See)h(http://www)-6 b(.gnu.or)n(g/cop)o(yleft/.)396 -4984 y(Each)25 b(v)o(ersion)f(of)h(the)g(License)f(is)h(gi)n(v)o(en)e -(a)i(distinguishing)d(v)o(ersion)h(number)-5 b(.)24 b(If)h(the)396 -5114 y(Document)f(speci\002es)h(that)g(a)g(particular)f(numbered)h(v)o -(ersion)e(of)i(this)f(License)h("or)f(an)o(y)h(later)396 -5243 y(v)o(ersion")f(applies)g(to)g(it,)g(you)h(ha)n(v)o(e)f(the)h -(option)e(of)i(follo)n(wing)e(the)i(terms)f(and)h(conditions)p -Black 3643 5692 a Fi(46)p Black eop -%%Page: 47 56 -47 55 bop Black 0 TeXcolorgray Black 1850 67 a Fi(Appendix)24 -b(A.)h(GNU)g(F)-5 b(r)l(ee)25 b(Documentation)e(License)p -Black 396 579 a Fm(either)h(of)h(that)e(speci\002ed)i(v)o(ersion)e(or)h -(of)h(an)o(y)e(later)i(v)o(ersion)e(that)g(has)h(been)h(published)e -(\(not)g(as)396 708 y(a)i(draft\))h(by)e(the)h(Free)h(Softw)o(are)f(F)o -(oundation.)e(If)j(the)e(Document)g(does)h(not)f(specify)h(a)396 -838 y(v)o(ersion)f(number)g(of)h(this)f(License,)h(you)f(may)g(choose)h -(an)o(y)f(v)o(ersion)g(e)n(v)o(er)g(published)g(\(not)g(as)396 -967 y(a)h(draft\))h(by)e(the)h(Free)h(Softw)o(are)f(F)o(oundation.)-2 -1470 y Fo(Ho)m(w)48 b(to)h(use)e(this)h(License)f(f)m(or)h(y)l(our)g -(documents)396 1685 y Fm(T)-8 b(o)25 b(use)g(this)e(License)i(in)g(a)g -(document)f(you)g(ha)n(v)o(e)g(written,)g(include)h(a)g(cop)o(y)f(of)h -(the)g(License)396 1815 y(in)g(the)f(document)g(and)h(put)f(the)h -(follo)n(wing)e(cop)o(yright)g(and)i(license)g(notices)f(just)g(after)h -(the)396 1944 y(title)f(page:)496 2161 y Fa(Cop)o(yright)d(\(c\))h -(YEAR)g(Y)m(OUR)f(N)m(AME.)h(Permission)f(is)h(granted)f(to)i(cop)o(y) --6 b(,)22 b(distrib)n(ute)f(and/or)496 2277 y(modify)g(this)h(document) -f(under)h(the)g(terms)g(of)g(the)g(GNU)f(Free)h(Documentation)e -(License,)496 2394 y(V)-10 b(ersion)21 b(1.1)i(or)f(an)o(y)f(later)h(v) -o(ersion)f(published)g(by)h(the)g(Free)g(Softw)o(are)f(F)o(oundation;)g -(with)h(the)496 2510 y(In)l(v)n(ariant)f(Sections)g(being)h(LIST)g -(THEIR)f(TITLES,)h(with)g(the)g(Front-Co)o(v)o(er)e(T)-6 -b(e)o(xts)21 b(being)g(LIST)-7 b(,)496 2627 y(and)22 -b(with)g(the)g(Back-Co)o(v)o(er)e(T)-6 b(e)o(xts)21 b(being)g(LIST)-7 -b(.)23 b(A)f(cop)o(y)g(of)g(the)g(license)f(is)h(included)g(in)g(the) -496 2743 y(section)f(entitled)h("GNU)f(Free)h(Documentation)e -(License".)396 3102 y Fm(If)26 b(you)e(ha)n(v)o(e)g(no)h(In)l(v)n -(ariant)f(Sections,)g(write)h("with)f(no)g(In)l(v)n(ariant)g(Sections") -h(instead)f(of)396 3232 y(saying)g(which)h(ones)f(are)i(in)l(v)n -(ariant.)d(If)j(you)e(ha)n(v)o(e)g(no)h(Front-Co)o(v)o(er)f(T)-7 -b(e)o(xts,)24 b(write)h("no)396 3361 y(Front-Co)o(v)o(er)g(T)-7 -b(e)o(xts")23 b(instead)h(of)h("Front-Co)o(v)o(er)f(T)-7 -b(e)o(xts)24 b(being)g(LIST";)h(lik)o(e)n(wise)e(for)396 -3491 y(Back-Co)o(v)o(er)j(T)-7 b(e)o(xts.)396 3670 y(If)26 -b(your)e(document)g(contains)g(nontri)n(vial)f(e)o(xamples)g(of)i -(program)g(code,)g(we)g(recommend)396 3799 y(releasing)g(these)f(e)o -(xamples)g(in)h(parallel)f(under)h(your)g(choice)f(of)h(free)h(softw)o -(are)f(license,)f(such)396 3929 y(as)h(the)g(GNU)g(General)g(Public)f -(License,)h(to)f(permit)g(their)h(use)g(in)f(free)i(softw)o(are.)p -Black 3641 5692 a Fi(47)p Black eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/doc/users_guide/users-guide.sgml b/doc/users_guide/users-guide.sgml index 33843c3..7a22810 100644 --- a/doc/users_guide/users-guide.sgml +++ b/doc/users_guide/users-guide.sgml @@ -7,6 +7,24 @@ ]> + + + The User's Guide to Gutenprint - Complete Edition + April 7, 2002 + April 7, 2002 + + Andy + Stewart + + + 2002 + Andy Stewart + + + The User's Guide to Gutenprint - Complete Edition, +Copyright 2002, Andy Stewart. + + &title; &history; &gimp; diff --git a/doc/users_guide/util-edition.sgml b/doc/users_guide/util-edition.sgml new file mode 100644 index 0000000..ed45d6c --- /dev/null +++ b/doc/users_guide/util-edition.sgml @@ -0,0 +1,57 @@ + + + + + + +]> + + + + The User's Guide to the Gutenprint - UTIL Edition + April 7, 2002 + April 7, 2002 + + Andy + Stewart + + + 2002 + Andy Stewart + + + The User's Guide to the Gutenprint - UTIL Edition, Copyright +2002, Andy Stewart. + + +&title; + +UTIL Edition + + PLEASE NOTE + + + This manual includes a subset of chapters from a more complete +manual entitled The User's Guide to the Gutenprint Top +Quality Printer Drivers. To obtain the complete manual, go +to the Gutenprint +Project home page. + + + This version of the manual has been specifically packaged in this +way in an attempt to better suit the needs of people interested only +in utility programs packaged with the Gutenprint software. + + + + + + +&history; +&utils; +&gfdl; + + + + diff --git a/doc/users_guide/utils.sgml b/doc/users_guide/utils.sgml index e0fe75c..36f6a18 100644 --- a/doc/users_guide/utils.sgml +++ b/doc/users_guide/utils.sgml @@ -1,5 +1,5 @@ - Gimp-Print Utilities + Gutenprint Utilities escputil escputil is a command line utility which @@ -21,7 +21,7 @@ assume the former. Caution The escputil utility was designed for use -ONLY with Epson Stylus inkjet printers supported by the Gimp-Print +ONLY with Epson Stylus inkjet printers supported by the Gutenprint software. It is possible that damage MIGHT occur to your printer if this utility is misused or if it is used with a printer other than an Epson Stylus inkjet printer. It is the sole responsibility of the @@ -95,7 +95,7 @@ will vary depending on the precise printer model. printed? What does it mean? There are several possibilities, depending on the specific error message. If the error message is "Invalid argument" (see following example), the problem is that the -kernel is not configured with the CONFIG_PRINTER_READBACK option enabled. +2.4.x kernel is not configured with the CONFIG_PARPORT_1284 option enabled. For more detailed information about the command line switches accepted by the escputil utility, please consult -the man page which is supplied with the Gimp-Print software. The user +the man page which is supplied with the Gutenprint software. The user may also issue the "escputil --help" command to get a listing of supported command line switches. The command requires no special privileges to execute. diff --git a/doc/using.texi b/doc/using.texi deleted file mode 100644 index 70b7147..0000000 --- a/doc/using.texi +++ /dev/null @@ -1,46 +0,0 @@ -@node Using libgimpprint, Integrating libgimpprint, Overview, Top -@chapter Using libgimpprint -@cindex using - -This chapter describes how to write programs that use libgimpprint. - - -@section Code prerequisites -To use libgimpprint with a program, several steps must be taken: - -@enumerate -@item Include the master libgimpprint header @code{.} -@item Call @code{stp_init()}. -@item Link with libgimpprint. -@end enumerate - -The following is a short example program. It does not do anything useful, -but it does everything required to link with libgimpprint and call other -functions from libgimpprint. - -@example -#include - -int -main (int argc, char *argv[]) -@{ - stp_init (); - return (0); -@} -@end example - -@section Linking with libgimpprint - -To link a program with libgimpprint, then @samp{-lgimpprint} needs to be passed -to the compiler when linking. For example, to compile and link @file{prog.c} -the following commands would be used: - -@example -gcc -c prog.c -gcc -o prog -lgimpprint prog.o -@end example - -The compiler and linker flags needed may vary depending on the options -GIMP-Print was configured with when it was built. The -@command{gimpprint-config} script will give the correct parameters for -the local installation (@pxref{gimpprint-config}). diff --git a/doc/version.texi b/doc/version.texi deleted file mode 100644 index e9a4321..0000000 --- a/doc/version.texi +++ /dev/null @@ -1,3 +0,0 @@ -@set UPDATED 27 October 2001 -@set EDITION 4.2.7 -@set VERSION 4.2.7 diff --git a/doc/weave.texi b/doc/weave.texi deleted file mode 100644 index 19e9854..0000000 --- a/doc/weave.texi +++ /dev/null @@ -1,1290 +0,0 @@ -@node Weaving, ESC/P2, Dithering, Appendices -@appendix Weaving for inkjet printers -@cindex weaving - -@noindent -by Charles Briscoe-Smith and Robert Krawitz. - -@menu -* Weaving introduction:: Just what is weaving? -* Weaving algorithms:: How to weave. -@end menu - - -@node Weaving introduction, Weaving algorithms, , Weaving -@appendixsection Introduction - -The Epson Stylus Color/Photo printers don't have memory to print using -all of the nozzles in the print head. For example, the Stylus Photo -700/EX has 32 nozzles. At 720 dpi, with an 8" wide image, a single line -requires @math{(8 * 720 * 6 / 8)} bytes, or 4320 bytes (because the -Stylus Photo printers have 6 ink colors). To use 32 nozzles per color -would require 138240 bytes. It's actually worse than that, though, -because the nozzles are spaced 8 rows apart. Therefore, in order to -store enough data to permit sending the page as a simple raster, the -printer would require enough memory to store 256 rows, or 1105920 bytes. -Considering that the Photo EX can print 11" wide, we're looking at more -like 1.5 MB. In fact, these printers are capable of 1440 dpi horizontal -resolution. This would require 3 MB. The printers actually have -64K-256K. - -With the newer (740/750 and later) printers it's even worse, since these -printers support multiple dot sizes; of course, the even newer -2880x720 printers don't help either. - -Older Epson printers had a mode called @dfn{MicroWeave} (tm). In this -mode, the host fed the printer individual rows of dots, and the printer -bundled them up and sent them to the print head in the correct order to -achieve high quality. This MicroWeave mode still works in new printers, -but in some cases the implementation is very minimal: the printer uses -exactly one nozzle of each color (the first one). This makes printing -extremely slow (more than 30 minutes for one 8.5x11" page), although the -quality is extremely high with no visible banding whatsoever. It's not -good for the print head, though, since no ink is flowing through the -other nozzles. This leads to drying of ink and possible permanent -damage to the print head. - -By the way, although the Epson manual says that microweave mode should be -used at 720 dpi, 360 dpi continues to work in much the same way. At 360 -dpi, data is fed to the printer one row at a time on all Epson printers. -The pattern that the printer uses to print is very prone to banding. -However, 360 dpi is inherently a low quality mode; if you're using it, -presumably you don't much care about quality. It is possible to do -microweave at 360 DPI, with significantly improved quality. - -Except for the Stylus Pro printers (5000, 5500, 7000, 7500, 9000, -9500, and when it's released the 10000), which can do microweave at -any resolution, printers from roughly the Stylus Color 600 and later -do not have the capability to do MicroWeave correctly in many cases -(some printers can do MicroWeave correctly at 720 DPI). Instead, the -host must arrange the output in the order that it will be sent to the -print head. This is a very complex process; the jets in the print -head are spaced more than one row (1/720") apart, so we can't simply -send consecutive rows of dots to the printer. Instead, we have to -pass e. g. the first, ninth, 17th, 25th... rows in order for them to -print in the correct position on the paper. This interleaving process -is called "soft" weaving. - -This decision was probably made to save money on memory in the -printer. It certainly makes the driver code far more complicated than -it would be if the printer could arrange the output. Is that a bad -thing? Usually this takes far less CPU time than the dithering -process, and it does allow us more control over the printing process, -e.g. to reduce banding. Conceivably, we could even use this ability -to map out bad jets. - -Interestingly, apparently the Windows (and presumably Macintosh) drivers -for most or all Epson printers still list a ``microweave'' mode. -Experiments have demonstrated that this does not in fact use the -``microweave'' mode of the printer. Possibly it does nothing, or it -uses a different weave pattern from what the non-``microweave'' mode -does. This is unnecessarily confusing, at least for people who write -drivers who try to explain them to people who don't. - -What makes this interesting is that there are many different ways of of -accomplishing this goal. The naive way would be to divide the image up -into groups of 256 rows (for a printer with 32 jets and a separation of -8 rows), and print all the mod8=0 rows in the first pass, mod8=1 rows in -the second, and so forth. The problem with this approach is that the -individual ink jets are not perfectly uniform; some emit slightly bigger -or smaller drops than others. Since each group of 8 adjacent rows is -printed with the same nozzle, that means that there will be distinct -streaks of lighter and darker bands within the image (8 rows is 1/90", -which is visible; 1/720" is not). Possibly worse is that these patterns -will repeat every 256 rows. This creates banding patterns that are -about 1/3" wide. - -So we have to do something to break up this patterning. - -Epson does not publish the weaving algorithms that they use in their -bundled drivers. Indeed, their developer web site -(http://www.ercipd.com/isv/edr_docs.htm) does not even describe how to -do this weaving at all; it says that the only way to achieve 720 dpi is -to use MicroWeave. It does note (correctly) that 1440 dpi horizontal -can only be achieved by the driver (i. e. in software). The manual -actually makes it fairly clear how to do this (it requires two passes -with horizontal head movement between passes), and it is presumably -possible to do this with MicroWeave. - -The information about how to do this is apparently available under -non-disclosure agreement (NDA). It's actually easy enough to reverse -engineer what's inside a print file with a simple Perl script, which is -supplied with the Gimp-Print distribution as tests/parse-escp2. In any -event, we weren't particularly interested in the weaving patterns Epson -used. There are many factors that go into choosing a good weaving -pattern; we're learning them as we go along. Issues such as drying time -(giving the ink a few seconds more or less to dry can have highly -visible effects) affect the quality of the output. - -The Uniprint GhostScript driver has been able to do weaving for a long -time. It uses patterns that must be specified for each choice of -resolution and printer. We preferred an algorithmic approach that -computes a weave pattern for any given choice of inputs. This -obviously requires extensive testing; we developed a test suite -specifically for this purpose. - - -@node Weaving algorithms, , Weaving introduction, Weaving -@appendixsection Weaving algorithms -@cindex weaving algorithms - -I considered a few algorithms to perform the weave. The first one I -devised let me use only @math{(jets-distance_between_jets+1)} -nozzles, or 25. This is OK in principle, but it's slower than using all -nozzles. By playing around with it some more, I came up with an -algorithm that lets me use all of the nozzles, except near the top and -bottom of the page. - -This still produces some banding, though. Even better quality can be -achieved by using multiple nozzles on the same line. How do we do -this? In 1440x720 mode, we're printing two output lines at the same -vertical position. However, if we want four passes, we have to -effectively print each line twice. Actually doing this would increase -the density, so what we do is print half the dots on each pass. This -produces near-perfect output, and it's far faster than using (pseudo) -``MicroWeave''. - -Yet another complication is how to get near the top and bottom of the -page. This algorithm lets us print to within one head width of the -top of the page, and a bit more than one head width from the bottom. -That leaves a lot of blank space. Doing the weave properly outside of -this region is increasingly difficult as we get closer to the edge of -the paper; in the interior region, any nozzle can print any line, but -near the top and bottom edges, only some nozzles can print. We -originally handled this by using the naive way mentioned above near -the borders, and switching over to the high quality method in the -interior. Unfortunately, this meant that the quality is quite visibly -degraded near the top and bottom of the page. We have since devised -better algorithms that allow printing to the extreme top and bottom of -the region that can physically be printed, with only minimal loss of -quality. - -Epson does not advertise that the printers can print at the very top -of the page, although in practice most of them can. The quality is -degraded to some degree, and we have observed that in some cases not -all of the dots get printed. Epson may have decided that the -degradation in quality is sufficient that printing in that region -should not be allowed. That is a valid decision, although we have -taken another approach. - -@menu -* Simple weaving algorithms:: Starting to weave. -* Perfect weaving:: Improving the weave. -* Weaving collisions:: Bang! -* What is perfect weaving?:: What makes a ``perfect'' weave? -* Oversampling:: Increasing resolution, reducing banding -@end menu - -@node Simple weaving algorithms, Perfect weaving, Weaving algorithms, Weaving algorithms -@appendixsubsec Simple weaving algorithms - -The initial problem is to calculate the starting position of each -pass; the row number of the printer's top jet when printing that pass. -Since we assume the paper cannot be reverse-fed, the print head must, -for each pass, start either further down the page than the previous -pass or at the same position. Each pass's start point is therefore at -a non-negative offset from the previous pass's start point. - -Once we have a formula for the starting row of each pass, we then turn -that ``inside out'' to get a formula for the pass number containing each -row. - -First, let's define how our printer works. We measure vertical -position on the paper in ``rows''; the resolution with which the printer -can position the paper vertically. The print head contains @math{J} ink -jets, which are spaced @math{S} rows apart. - -Consider a very simple case: we want to print a page as quickly as -possible, and we mostly don't care how sparse the printing is, so long -as it's fairly even. - -It's pretty obvious how to do this. We make one pass with the print -head, printing @math{J} lines of data, each line @math{S} rows after the -previous one. We then advance the paper by @math{S*J} rows and print -the next row. For example, if @math{J=7} and @math{S=4}, this method -can be illustrated like this: - -@example -pass number -| row number-------> -| | 111111111122222222223333333333444444444455555555556666666666 -| 0123456789012345678901234567890123456789012345678901234567890123456789 -0 *---*---*---*---*---*---* -1 *---*---*---*---*---*---* -2 \-----------------------/ *---*---*---*---*---*- - 7 jets \---/ - 4 rows offset from one jet to the next - \---------------------------/ - 7*4=28 rows offset from one pass to the next -@end example - -In these examples, the vertical axis can be thought of as the time axis, -with the pass number shown at the left margin, while the row number runs -horizontally. A @samp{*} shows each row printed by a pass, and a row of -@samp{-} is used to link together the rows printed by one pass of the -print head. The first pass is numbered @samp{0} and starts at row 0. -Each subsequent pass @math{p} starts at row @math{p*S*J}. Each pass -prints @math{J} lines, each line being @math{S} rows after the previous -one. (For ease of viewing this file on a standard terminal, I'm -clipping the examples at column 80.) - -This method covers the whole page with lines printed evenly @math{S} -rows apart. However, we want to fill in all the other rows with -printing to get a full-density page (we're ignoring oversampling at this -stage). Where we have previously printed a single pass, we'll now print -a ``pass block'': we print extra passes to fill in the empty rows. A -naive implementation might look like this: - -@example -0 *---*---*---*---*---*---* -1 *---*---*---*---*---*---* -2 *---*---*---*---*---*---* -3 *---*---*---*---*---*---* -4 *---*---*---*---*---*---* -5 *---*---*---*---*---*---* -6 *---*---*---*---*---*---* -7 *---*---*---*---*---*---* -8 *---*---*---*---*---*- -9 *---*---*---*---*---* -10 *---*---*---*---*--- -11 *---*---*---*---*-- -@end example - -@noindent -(Now you can see why this process is called ``weaving''!) - - -@node Perfect weaving, Weaving collisions, Simple weaving algorithms, Weaving algorithms -@appendixsubsec Perfect weaving -@cindex perfect weave - -This simple weave pattern prints every row, but will give conspicuous -banding patterns for the reasons discussed above. - -Let's start improving this for our simple case. We can reduce banding -by making sure that any given jet never prints a row too close to -another row printed by the same jet. This means we want to space the -rows printed by a given jet evenly down the page. In turn, this -implies we want to advance the paper by as nearly an equal amount -after each pass as possible. - -Each pass block prints @math{S*J} lines in @math{S} passes. The first -line printed in each pass block is @math{S*J} rows lower on the page -than the first line printed in the previous pass block. Therefore, if -we advance the paper by @math{J} rows between each pass, we can print -the right number of passes in each block and advance the paper perfectly -evenly. - -Here's what this ``perfect'' weave looks like: - -@example - start of full weave - | -0 *---*---*---*---*---*---* -1 *---*---*---*---*---*---* -2 *---*---*---*---*---*---* -3 *---*---*---*---*---*---* -4 *---*---*---*---*---*---* -5 *---*---*---*---*---*---* -6 *---*---*---*---*---*---* -7 *---*---*---*---*---*---* -8 *---*---*---*---*---*- -9 *---*---*---*-- -10 *---*--- -11 * -@end example - -You'll notice that, for the first few rows, this weave is too sparse. -It is not until the row marked ``start of full weave'' that every -subsequent row is printed. We can calculate this start position as -follows: - -@example -@math{start = (S-1) * (J-1)} -@end example - -For the moment, we will ignore this problem with the weave. We'll -consider later how to fill in the missing rows. - -Let's look at a few more examples of perfect weaves: - - -@noindent -@math{S=2}, @math{J=7}, @math{start=(2-1)*(7-1)=6}: - -@example - starting row of full weave - | -0 *-*-*-*-*-*-* -1 *-*-*-*-*-*-* -2 *-*-*-*-*-*-* -3 *-*-*-*-*-*-* -4 *-*-*-*-*-*-* -5 *-*-*-*-*-*-* -6 *-*-*-*-*-*-* -7 *-*-*-*-*-*-* -@end example - -@noindent -@math{S=7}, @math{J=2}, @math{start=6}: - -@example - start - | -0 *------* -1 *------* -2 *------* -3 *------* -4 *------* -5 *------* -6 *------* -7 *------* -8 *------* -9 *------* -@end example - -@noindent -@math{S=4}, @math{J=13}, @math{start=36}: - -@example - start - | -0 *---*---*---*---*---*---*---*---*---*---*---*---* -1 *---*---*---*---*---*---*---*---*---*---*---*---* -2 *---*---*---*---*---*---*---*---*---*---*---*---* -3 *---*---*---*---*---*---*---*---*---*-- -4 *---*---*---*---*---*---*- -5 *---*---*---* -@end example - -@noindent -@math{S=13}, @math{J=4}, @math{start=36}: - -@example - start - | -0 *------------*------------*------------* -1 *------------*------------*------------* -2 *------------*------------*------------* -3 *------------*------------*------------* -4 *------------*------------*------------* -5 *------------*------------*------------* -6 *------------*------------*------------* -7 *------------*------------*------------* -8 *------------*------------*------------* -9 *------------*------------*------------* -10 *------------*------------*----------- -11 *------------*------------*------- -12 *------------*------------*--- -13 *------------*------------ -14 *------------*-------- -15 *------------*---- -16 *------------* -17 *--------- -18 *----- -19 *- -@end example - -@noindent -@math{S=8}, @math{J=5}, @math{start=28}: - -@example - start - | -0 *-------*-------*-------*-------* -1 *-------*-------*-------*-------* -2 *-------*-------*-------*-------* -3 *-------*-------*-------*-------* -4 *-------*-------*-------*-------* -5 *-------*-------*-------*-------* -6 *-------*-------*-------*-------* -7 *-------*-------*-------*-------* -8 *-------*-------*-------*-------* -9 *-------*-------*-------*-------* -10 *-------*-------*-------*--- -11 *-------*-------*------ -12 *-------*-------*- -13 *-------*---- -14 *------- -15 *-- -@end example - -@noindent -@math{S=9}, @math{J=5}, @math{start=32}: - -@example - start - | -0 *--------*--------*--------*--------* -1 *--------*--------*--------*--------* -2 *--------*--------*--------*--------* -3 *--------*--------*--------*--------* -4 *--------*--------*--------*--------* -5 *--------*--------*--------*--------* -6 *--------*--------*--------*--------* -7 *--------*--------*--------*--------* -8 *--------*--------*--------*--------* -9 *--------*--------*--------*----- -10 *--------*--------*--------* -11 *--------*--------*---- -12 *--------*-------- -13 *--------*--- -14 *------- -15 *-- -@end example - -@noindent -@math{S=6}, @math{J=7}, @math{start=30}: - -@example - start - | -0 *-----*-----*-----*-----*-----*-----* -1 *-----*-----*-----*-----*-----*-----* -2 *-----*-----*-----*-----*-----*-----* -3 *-----*-----*-----*-----*-----*-----* -4 *-----*-----*-----*-----*-----*-----* -5 *-----*-----*-----*-----*-----*-----* -6 *-----*-----*-----*-----*-----*----- -7 *-----*-----*-----*-----*---- -8 *-----*-----*-----*--- -9 *-----*-----*-- -10 *-----*- -11 * -@end example - - -@node Weaving collisions, What is perfect weaving?, Perfect weaving, Weaving algorithms -@appendixsubsec Weaving collisions -@cindex collisions -@cindex weaving collisions - -This perfect weave is not possible in all cases. Let's look at another -example: - -@noindent -@math{S=6}, @math{J=4}: - -@example -0 *-----*-----*-----* -1 *-----*-----*-----* -2 *-----*-----*-----* -3 *-----*-----*-----* -4 ^ *-^---*-----*-----* -5 | ^ | *-^---*-----*-----* - OUCH! ^ | ^ - | | -@end example - -@noindent -Here we have a collision. Some lines printed in later passes overprint -lines printed by earlier passes. We can see why by considering which -row number is printed by a given jet number @math{j} (numbered from 0) -of a given pass, @math{p}: - -@example -@math{row(p, j) = p*J + j*S} -@end example - -Because @math{J=4} and @math{S=6} have a common factor of 2, jet 2 of -pass 0 prints the same row as jet 0 of pass 3: - -@example -@math{row(0, 2) = 0*4 + 2*6 = 12} -@math{row(3, 0) = 3*4 + 0*6 = 12} -@end example - -In fact, with this particular weave pattern, jets 0 and 1 of pass -@math{p+3} always overprint jets 2 and 3 of pass @math{p}. We'll -represent overprinting rows by a @samp{^} in our diagrams, and correct -rows by @samp{*}: - -@noindent -@math{S=6} @math{J=4}: - -@example -0 *-----*-----*-----* -1 *-----*-----*-----* -2 *-----*-----*-----* -3 ^-----^-----*-----* -4 ^-----^-----*-----* -5 ^-----^-----*-----* -@end example - -@node What is perfect weaving?, Oversampling, Weaving collisions, Weaving algorithms -@appendixsubsec What makes a ``perfect'' weave? -@cindex perfect weave - -So what causes the perfect weave cases to be perfect, and the other -cases not to be? In all the perfect cases above, @math{S} and @math{J} -are relatively prime (i.e. their greatest common divisor (GCD) is 1). -As we mentioned above, @math{S=6} and @math{J=4} have a common factor, -which causes the overprinting. Where @math{S} and @math{J} have a GCD -of 1, they have no common factor other than 1 and, as a result, no -overprinting occurs. If @math{S} and @math{J} are not relatively prime, -their common factor will cause overprinting. - -We can work out the greatest common divisor of a pair of natural numbers -using Euler's algorithm: - -@itemize -@item Start with the two numbers: (e.g.) 9, 24 -@item Swap them if necessary so that the larger one comes first: 24, 9 -@item Subtract the second number from the first: 15, 9 -@item Repeat until the first number becomes smaller: 6, 9 - -@item Swap the numbers again, so the larger one comes first: 9, 6 -@item Subtract again: 3, 6 - -@item Swap: 6, 3 -@item Subtract: 3, 3 -@item And again: 0, 3 -@item When one of the numbers becomes 0, the other number is the GCD of the two numbers you started with. -@end itemize - -These repeated subtractions can be done with C's @samp{%} operator, so we -can write this in C as follows: - -@example -unsigned int -gcd(unsigned int x, unsigned int y) -@{ - if (y == 0) - return x; - while (x != 0) @{ - if (y > x) - swap (&x, &y); - x %= y; - @} - return y; -@} -@end example - -@samp{gcd(S,J)} will feature quite prominently in our weaving algorithm. - -If @math{0 <= j < J}, there should only be a single pair @math{(p, j)} -for any given row number. If @math{S} and @math{J} are not relatively -prime, this assumption breaks down. (For conciseness, let -@math{G=@r{GCD}(S,J)}.) - -@noindent -@math{S=8}, @math{J=6}, @math{G=2}: - -@example -0 *-------*-------*-------*-------*-------* -1 *-------*-------*-------*-------*-------* -2 *-------*-------*-------*-------*-------* -3 *-------*-------*-------*-------*-------* -4 ^-------^-------^-------*-------*-------* -5 ^-------^-------^-------*-------*-------* -@end example - -In this case, jets 0, 1 and 2 of pass @math{p+4} collide with jets 3, 4 -and 5 of pass @math{p}. - -How can we calculate these numbers? Suppose we were to print using -fewer jets, say @math{J/G} jets. The greatest common divisor of -@math{J/G} and @math{S} is 1, enabling a perfect weave. But to get a -perfect weave, we also have to advance the paper by a factor of @math{G} -less: - -@example -0 *-------*-------* - - - -1 *-------*-------* - - - -2 *-------*-------* - - - -3 *-------*-------* - - - -4 *-------*-------* - - - -5 *-------*-------* - - - -@end example - -If we left the paper advance alone, we'd get a sparse weave; only one -row can be printed every @math{G} rows: - -@example -0 *-------*-------* - - - -1 *-------*-------* - - - -2 *-------*-------* - - - -3 *-------*-------* - - - -4 *-------*-------* - - - -5 *-------*-------* - - - - ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ - These rows need filling in. -@end example - -The rows that would have been printed by the jets we've now omitted -(shown as @samp{-}) are printed by other jets on later passes. - -Let's analyse this. Consider how a pass @math{p} could collide with -pass 0. Pass @math{p} starts at offset @math{p*J}. Pass 0 prints at -rows which are multiples of @math{S}. If @math{p*J} is exactly -divisible by @math{S}, a collision has occurred, unless @math{p*J >= -J*S} (which will happen when we finish a pass block). - -So, we want to find @math{p} and @math{q} such that @math{p*J=q*S} and -@math{p} is minimised. Then @math{p} is the number of rows before a -collision, and @math{q} is the number of jets in pass 0 which are not -involved in the collision. To do this, we find the lowest common -multiple of @math{J} and @math{S}, which is @math{L=J*S/G}. @math{L/J} -is the number of rows before a collision, and @math{L/S} is the number -of jets in the first pass not involved in the collision. - -Thus, we see that the first @math{J/G} rows printed by a given pass are -not overprinted by any later pass. However, the rest of the rows -printed by pass @math{p} are overprinted by the first -@math{J-(J/G)} jets of pass @math{p+(S/G)}. We will use @math{C} -to refer to @math{S/G}, the number of rows after which a collision -occurs. - -Another example: - -@noindent -@math{S=6}, @math{J=9}, @math{G=3}, @math{C=S/G=2}: - -@example -0 *-----*-----*-----*-----*-----*-----*-----*-----* -1 *-----*-----*-----*-----*-----*-----*-----*-----* -2 ^-----^-----^-----^-----^-----^-----*-----*-----* -3 ^-----^-----^-----^-----^-----^-----*-----*-----* -4 ^-----^-----^-----^-----^-----^-----*----- -5 ^-----^-----^-----^-----^-----^-- - ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ - These rows need filling in. -@end example - -@noindent -In this case, the first @math{J-(J/G) = 9-9/3 = 6} jets of pass -@math{p+(6/3)=p+2} collide with the last 6 jets of pass @math{p}. Only -one row in every @math{G=2} rows is printed by this weave. - -@noindent -@math{S=9}, @math{J=6}, @math{G=3}, @math{C=3}: - -@example -0 *--------*--------*--------*--------*--------* -1 *--------*--------*--------*--------*--------* -2 *--------*--------*--------*--------*--------* -3 ^--------^--------^--------^--------*--------* -4 ^--------^--------^--------^--------*--------* -5 ^--------^--------^--------^--------*--------* -@end example - -@noindent -Here, the first @math{J-(J/G) = 6-6/3 = 4} jets of pass -@math{p+(9/3)=p+3} collide with the last 4 jets of pass @math{p}. - -Note that, in these overprinting cases, only rows divisible by @math{G} -are ever printed. The other rows, those not divisible by @math{G}, are -not touched by this weave. - -We can modify our weave pattern to avoid overprinting any rows and -simultaneously fill in the missing rows. Instead of using @math{J} -alone to determine the start of each pass from the previous pass, we -adjust the starting position of some passes. As mentioned before, we -will divide the page into pass blocks, with @math{S} passes in each -block. This ensures that the first jet of the first pass in a block -prints the row which the @math{J}th jet of the first pass of the -previous block would have printed, if the print head had one extra jet. - -Looking back at an example of a perfect weave, we can divide it into -pass blocks: - -@noindent -@math{S=7}, @math{J=2}, @math{G=1}: - -@example - imaginary extra jet - | -0 *------* * <--start of pass block 0 -1 *------* | -2 *------* | -3 *------*| -4 *-----|* -5 *---|--* -6 *-|----* - | -7 *------* <--start of pass block 1 -8 *------* -9 *------* -@end example - -We can now calculate the start of a given pass by reference to its pass -block. The first pass of pass block @math{b} always starts at row -@math{(b*S*J)}. The start row of each of the other passes in the block -are calculated using offsets from this row. - -For the example above, there are 7 passes in each pass block, and their -offsets are 0, 2, 4, 6, 8, 10 and 12. The next pass block is offset -@math{S*J=14} rows from the start of the current pass block. - -The simplest way to modify the ``perfect'' weave pattern to give a -correct weave in cases where @math{G!=1} is to simply change any offsets -which would result in a collision, until the collision disappears. -Every printed row in the weave, as we have shown it up to now, is -separated from each of its neighbouring printed rows by @math{G} blank -rows. We will add an extra offset to each colliding pass in such a way -that we push the pass onto these otherwise blank rows. - -We have seen that, unless @math{G=1}, the plain weave pattern results in -each pass colliding with the pass @math{S/G} passes before. We will now -subdivide our pass block into subblocks, each consisting of @math{B=S/G} -passes. There are therefore @math{G} subblocks in a pass block. - -For each subblock, the passes in that subblock have a constant offset -added to them. The offset is different for each subblock in a block. -There are many ways we can choose the offsets, but the simplest is to -make the offset equal to the subblock number (starting from 0). - -Thus, the passes in the first subblock in each pass block remain at the -offsets we've already calculated from @math{J}. The passes in the -second subblock each have 1 added to their offset, the passes in the -third subblock have 2 added, and so on. Thus, the offset of pass -@math{p} (numbered relative to the start of its pass block) is @math{p*J -+ @r{floor}(p/B)}. - -This gives us a weave pattern looking like this: - -@noindent -@math{S=6}, @math{J=9}, @math{G=3}, @math{B=2}: - -@example -0 *-----*-----*-----*-----*-----*-----*-----*-----* -1 ^ *-----*-----*-----*-----*-----*-----*-----*-----* -2 | +-> *-----*-----*-----*-----*-----*-----*-----*-----* -3 | | *-----*-----*-----*-----*-----*-----*-----*-----* -4 | | +-> *-----*-----*-----*-----*-----*-----*--- -5 | | | *-----*-----*-----*-----*-----* -6 | | | +-> *-----*-----*-----*----- -7 | | | | *-----*-----*-- - | | | start of pass block 1 - | | | (offset returns to 0) - | | start of subblock 2 (offset 2 rows) - | start of subblock 1 (following passes offset by 1 row) - start of passblock 0, subblock 0 (pass start calculated as p*J) -@end example - -@noindent -@math{S=9}, @math{J=6}, @math{G=3}, @math{B=3}: - -@example -0 *--------*--------*--------*--------*--------* -1 *--------*--------*--------*--------*--------* -2 *--------*--------*--------*--------*--------* -3 *--------*--------*--------*--------*--------* -4 *--------*--------*--------*--------*--------* -5 *--------*--------*--------*--------*--------* -6 *--------*--------*--------*--------*--- -7 *--------*--------*--------*------ -8 *--------*--------*--------* -9 *--------*--------*----- -10 \---/ *--------*-------- -11 small offset *--------*-- -12 *---- -@end example - -This method of choosing offsets for subblocks can result in an occasional -small offset (as shown above) between one pass and the next, particularly -when @math{G} is large compared to @math{J}. For example: - -@noindent -@math{S=8}, @math{J=4}, @math{G=4}, @math{B=2}: - -@example -0 *-------*-------*-------* -1 *-------*-------*-------* -2 *-------*-------*-------* -3 *-------*-------*-------* -4 *-------*-------*-------* -5 *-------*-------*-------* -6 *-------*-------*-------* -7 *-------*-------*-------* -8 *-------*-------*-------* -9 \/ *-------*-------*-------* - very small offset! -@end example - -We can plot the offset against the subblock number as follows: - -@example -subblock number -| offset -| | -| 0123 -0 * -1 * -2 * -3 * -0 * -1 * -2 * -3 * -@end example - -@noindent -The discontinuity in this plot results in the small offset between -passes. - -As we said at the beginning, we want the offsets from each pass to the -next to be as similar as possible. We can fix this by calculating the -offset for a given subblock b as follows: - -@example - offset(b) = 2*b , if b < ceiling(G/2) - = 2*(G-b)-1 , otherwise -@end example - -We can visualise this as follows, for @math{G=10}: - -@example - 0123456789 -0 * -1 * -2 * -3 * -4 * -5 * -6 * -7 * -8 * -9 * -0 * -1 * -2 * -3 * -4 * -5 * -6 * -7 * -8 * -9 * -@end example - -@noindent -and for @math{G=11}: - -@example - 1 - 01234567890 - 0 * - 1 * - 2 * - 3 * - 4 * - 5 * - 6 * - 7 * - 8 * - 9 * -10 * - 0 * - 1 * - 2 * - 3 * - 4 * - 5 * - 6 * - 7 * - 8 * - 9 * -10 * -@end example - -@noindent -This gives a weave looking like this: - -@noindent -@math{S=12}, @math{J=6}, @math{G=6}, @math{B=2}: - -@example -0 *-----------*-----------*-----------*-----------*-----------* -1 *-----------*-----------*-----------*-----------*-----------* -2 *-----------*-----------*-----------*-----------*-----------* -3 *-----------*-----------*-----------*-----------*--------- -4 *-----------*-----------*-----------*-----------*- -5 *-----------*-----------*-----------*------- -6 *-----------*-----------*-----------* -7 *-----------*-----------*------ -8 *-----------*-----------*-- -9 *-----------*-------- -10 *-----------*---- -11 *---------- -12 *----- -@end example - -This method ensures that the offset between passes is always in the range -@math{[J-2,J+2]}. - -(This might seem odd, but it occurs to me that a good weave pattern -might also make a good score for bell ringers. When church bells are -rung, a list of ``changes'' are used. For example, if 8 bells are being -used, they will, at first, be rung in order: 12345678. If the first -change is for bells 5 and 6, the bells will then be rung in the order -12346578. If the second change is 1 and 2, the next notes are 21346578. -After a long list of changes, the order the bells are rung in can become -quite complex. - -For a group of bell-ringers to change the order of the notes, they must -each either delay their bell's next ring, hasten it, or keep it the same -as the time it takes to ring all the bells once. The length of time -between each ring of a given bell can only be changed a little each -time, though; with an ink-jet weave pattern, we want the same to apply -to the distance between passes.) - -Finally, knowing the number of jets @math{J} and their separation -@math{S}, we can calculate the starting row of any given pass @math{p} -as follows: - -@example -passesperblock = S -passblock = floor(p / passesperblock) -offsetinpassblock = p - passblock * passesperblock -subblocksperblock = gcd(S, J) -passespersubblock = S / subblocksperblock -subpassblock = floor(offsetinpassblock / passespersubblock) -if subpassblock < ceiling(subblocksperblock/2) - subblockoffset = 2*subpassblock -else - subblockoffset = 2*(subblocksperblock-subpassblock)-1 -startingrow = passblock * S * J + offsetinpassblock * J + subblockoffset -@end example - -We can simplify this down to the following: - -@example -subblocksperblock = gcd(S, J) -subpassblock = floor((p % S) * subblocksperblock / S) -if subpassblock * 2 < subblocksperblock - subblockoffset = 2*subpassblock -else - subblockoffset = 2*(subblocksperblock-subpassblock)-1 -startingrow = p * J + subblockoffset -@end example - -So the row number of jet @math{j} of pass @math{p} is - -@example -subblocksperblock = gcd(S, J) - -subblockoffset(p) - = 2*subpassblock , if subpassblock * 2 < subblocksperblock - = 2*(subblocksperblock-subpassblock)-1 , otherwise - where - subpassblock = floor((p % S) * subblocksperblock / S) - -row(j, p) = p * J + subblockoffset(p) + j * S -@end example - -Together with the inequality @math{0 <= j < J}, we can use this -definition in reverse to calculate the pass number containing a given -row, @math{r}. Working out the inverse definition involves a little -guesswork, but one possible result is as follows. Given a row, -@math{r}, which is known to be the first row of a pass, we can calculate -the pass number as follows: - -@example -subblocksperblock = gcd(S, J) -subblockoffset = r % subblocksperblock -pass = (r - subblockoffset) / J -@end example - -If @math{G==1}, we can determine the pass number with this algorithm: - -@example -offset = r % J -pass = (r - offset) / J -while (offset % S != 0) -@{ - pass-- - offset += J -@} -jet = offset / S -@end example - -Generalising, we come up with this algorithm. Given @math{r}, @math{S} -and @math{J}: - -@example -G = gcd(S, J) -passespersubblock = S/G -subblockoffset = r % G -subpassblock = subblockoffset / 2 , if subblockoffset % 2 == 0 - = G - (subblockoffset+1)/2 , otherwise -baserow = r - subblockoffset - (subpassblock * passespersubblock * J) -offset = baserow % J -pass = (baserow - offset) / J -while (offset % S != 0) -@{ - offset += J - pass -= 1 -@} -subblockretreat = floor(pass / passespersubblock) % G -pass -= subblockretreat * passespersubblock -pass += subpassblock * passespersubblock -jet = (r - subblockoffset - pass * J) / S -@end example - -Let's look at some examples of imperfect but correct weave patterns: - -@noindent -@math{S=6}, @math{J=4}, @math{@r{GCD}=2}, -@*passesperblock=@math{S}=6, -@*passespersubblock=@math{S/G}=6/2=3: - -@example -0 *-----*-----*-----* -1 *-----*-----*-----* -2 *-----*-----*-----* -3 *-----*-----*-----* -4 *-----*-----*-----* -5 *-----*-----*-----* -6 *-----*-----*-----* -7 *-----*-----*-----* -8 *-----*-----*-----* -9 *-----*-----*-----* -10 *-----*-----*-----* -11 *-----*-----*-----* -12 *-----*-----*-----* -13 *-----*-----*-----* -14 *-----*-----*-----* -15 *-----*-----*---- -16 *-----*-----* -17 *-----*-- -18 *----- -19 *- -@end example - -@noindent -@math{S=8}, @math{J=6}, @math{G=2}, -@*passesperblock=@math{S}=8, -@*passespersubblock=@math{S/G}=8/2=4: - -@example -0 *-------*-------*-------*-------*-------* -1 *-------*-------*-------*-------*-------* -2 *-------*-------*-------*-------*-------* -3 *-------*-------*-------*-------*-------* -4 *-------*-------*-------*-------*-------* -5 *-------*-------*-------*-------*-------* -6 *-------*-------*-------*-------*-------* -7 *-------*-------*-------*-------*-- -8 *-------*-------*-------*----- -9 *-------*-------*------- -10 *-------*-------*- -11 *-------*--- -12 *---- -@end example - -@noindent -@math{S=6}, @math{J=12}, @math{G=6}, -@*passesperblock=@math{S}=6, -@*passespersubblock=@math{S/G}=6/6=1: - -@example -0 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*-----* -1 *-----*-----*-----*-----*-----*-----*-----*-----*-----*-----*--- -2 *-----*-----*-----*-----*-----*-----*-----*-----*- -3 *-----*-----*-----*-----*-----*-----* -4 *-----*-----*-----*-----*-- -5 *-----*-----*---- -6 *----- -@end example - -We have now solved the basic weaving problem. There are two further -refinements we need to consider: oversampling, and filling in the -missing rows at the start of the weave. - -@node Oversampling, , What is perfect weaving?, Weaving algorithms -@appendixsubsec Oversampling -@cindex oversampling - -By oversampling, we mean printing on the same row more than once. -There are two reasons for oversampling: to increase the horizontal -resolution of the printout and to reduce banding. - -Oversampling to increase horizontal resolution is necessary because, -although the printer might be able to position an ink drop to, for -example, 1/1440" horizontally, it may not be able to lay down two such -drops 1/1440" apart. If it can print two drops 1/720" apart, 2x -oversampling will be necessary to get a 1/1440" horizontal resolution. -If it can only print two drops 1/360" apart, 4x oversampling will be -necessary for a 1/1440" horizontal resolution. The printer enforces -this ``drop spacing'' by only accepting raster passes with a horizontal -resolution matching the spacing with which it can print dots, so we -must print passes at different horizontal positions if we are to -obtain a higher horizontal resolution. (Another reason it does this -may be to reduce the amount of memory needed in the printer.) - -Oversampling can also be done to decrease the banding apparent in an -image. By splitting a row into two or more sets of dots (``lines'') and -printing each line on the same row, but with a different nozzle for -each line, we can get a smoother print. - -To quantify these two kinds of oversampling, we'll introduce two new -constants: @math{H} shows how many different horizontal offsets we want -to print at (the ``horizontal oversampling'') while @math{O} shows how -many times we want to print each row, over and above the number of times -necessary for horizontal oversampling (the ``extra oversampling''). - -It is necessary for all the lines printed by a given pass to have the -same horizontal offset, but there need not be any relation between -them in terms of extra oversampling. For the moment, however, we will -treat all oversampling as potentially requiring this alignment; all -lines in one pass must be derived from the original row data in the -same way. Thus, we'll assume @math{O=1} for now. - -So, how do we do this oversampling? In fact, it can be done easily: -advance the paper by a factor of @math{H} less between each pass. We'll -define a new variable, @math{A}, to show how much we advance the paper -between passes. Previously, we'd have defined @math{A=J}; we now let -@math{A=J/H}. This also affects our pass blocks. Printing one pass -block used to involve advancing the paper @math{S*J} rows; it now -advances the paper @math{S*J/H} rows. We therefore name a group of -@math{H} pass blocks a ``band''. Printing one band involves advancing -the paper @math{S*J} rows, as a pass block did before. - -To keep our weave pattern working correctly, so that overprinting does -not occur within a pass block, we also have to redefine @math{G} as -@math{@r{GCD}(S,A)}. Here's an example of an oversampled weave pattern: - -@noindent -@math{S=4}, @math{J=10}, @math{H=2}, @math{A=J/H=10/2=5}, -@math{G=@r{GCD}(4,5)=1}, -@*passesperblock=@math{S}=4, -@*passespersubblock=@math{S/G}=4/1=4: - -@example -0 *---*---*---*---*---*---*---*---*---* -1 *---*---*---*---*---*---*---*---*---* -2 *---*---*---*---*---*---*---*---*---* -3 *---*---*---*---*---*---*---*---*---* -4 *---*---*---*---*---*---*---*---*---* -5 *---*---*---*---*---*---*---*---*---* -6 *---*---*---*---*---*---*---*---*---* -7 *---*---*---*---*---*---*---*---*---* -8 *---*---*---*---*---*---*---*---*---* -9 *---*---*---*---*---*---*---*---* -10 *---*---*---*---*---*---*--- -11 *---*---*---*---*---*-- -12 *---*---*---*---*- -13 *---*---*---* -14 *---*--- -15 *-- -@end example - -Now we have to determine which line is printed by each jet on each -pass. If we number each line generated as we split up a row, we can -use these numbers. We'll number the lines in our diagram by replacing -the @samp{*}s with integers in the range [0@dots{}@math{H-1}]. - -Overprinting occurs once per pass block, so we can simply print pass -block 0 with line 0, pass block 1 with line 1, pass block 2 with line -2, etc, wrapping to 0 when we've run out of lines: - -@example -0 0---0---0---0---0---0---0---0---0---0 -1 0---0---0---0---0---0---0---0---0---0 -2 0---0---0---0---0---0---0---0---0---0 -3 0---0---0---0---0---0---0---0---0---0 -4 1---1---1---1---1---1---1---1---1---1 -5 1---1---1---1---1---1---1---1---1---1 -6 1---1---1---1---1---1---1---1---1---1 -7 1---1---1---1---1---1---1---1---1---1 -8 0---0---0---0---0---0---0---0---0---0 -9 0---0---0---0---0---0---0---0---0 -10 0---0---0---0---0---0---0--- -11 0---0---0---0---0---0-- -12 1---1---1---1---1- -13 1---1---1---1 -14 1---1--- -15 1-- -@end example - -@noindent -@math{S=4}, @math{J=12}, @math{H=2}, @math{A=J/H=12/2=6}, @math{G=@r{GCD}(4,6)=2}, -@*passesperblock=@math{S}=4, -@*passespersubblock=@math{S/G}=4/2=2: - -@example -0 0---0---0---0---0---0---0---0---0---0---0---0 -1 0---0---0---0---0---0---0---0---0---0---0---0 -2 0---0---0---0---0---0---0---0---0---0---0---0 -3 0---0---0---0---0---0---0---0---0---0---0---0 -4 1---1---1---1---1---1---1---1---1---1---1---1 -5 1---1---1---1---1---1---1---1---1---1---1---1 -6 1---1---1---1---1---1---1---1---1---1---1 -7 1---1---1---1---1---1---1---1---1-- -8 0---0---0---0---0---0---0---0- -9 0---0---0---0---0---0--- -10 0---0---0---0---0 -11 0---0---0-- -12 1---1- -@end example - -But what do we do if @math{J} is not an exact multiple of @math{H}? -This is a difficult problem, which I struggled with for quite a few days -before giving in and taking the easy (but less elegant) way out. The -easy solution is to round @math{J/H} down, then add on the accumulated -error at the end of each band. - -@noindent -@math{S=4}, @math{J=11}, @math{H=2} @math{A=@r{floor}(J/H)=@r{floor}(11/2)=5}, @math{G=@r{GCD}(4,5)}, -@*passesperblock=@math{S}=4, -@*passespersubblock=@math{S/G}=4/1=4 - -@example -Band 0: -0 0---0---0---0---0---0---0---0---0---0---0 -1 0---0---0---0---0---0---0---0---0---0---0 -2 0---0---0---0---0---0---0---0---0---0---0 -3 0---0---0---0---0---0---0---0---0---0---0 -4 1---1---1---1---1---1---1---1---1---1---1 -5 1---1---1---1---1---1---1---1---1---1---1 -6 1---1---1---1---1---1---1---1---1---1---1 -7 1---1---1---1---1---1---1---1---1---1--- - -Band 1: -8 | 0---0---0---0---0---0---0---0---0- -9 \-----------------------------------------/ 0---0---0---0---0---0---0---0 -10 S*J rows 0---0---0---0---0---0--- -11 0---0---0---0---0-- -12 1---1---1---1- -13 1---1---1 -14 1--- -@end example - -We can calculate the starting row and subpass number of a given pass -in this scheme as follows: - -@example -A = floor(J / H) -subblocksperblock = gcd(S, A) -subpassblock = floor((p % S) * subblocksperblock / S) -if subpassblock * 2 < subblocksperblock - subblockoffset = 2*subpassblock -else - subblockoffset = 2*(subblocksperblock-subpassblock)-1 -band = floor(P / (S * H)) -passinband = P % (S * H) -startingrow = band * S * J + passinband * A + subblockoffset -subpass = passinband / S -@end example - -So the row number of jet @math{j} of pass @math{p} is - -@example -A = floor(J / H) -subblocksperblock = gcd(S, A) - -subblockoffset(p) - = 2*subpassblock , if subpassblock * 2 < subblocksperblock - = 2*(subblocksperblock-subpassblock)-1 , otherwise - where - subpassblock = floor((p % S) * subblocksperblock / S) - -band(p) = floor(p / (S * H)) -passinband(p) = p % (S * H) - -row(j, p) = band(p) * S * J + passinband(p) * A + subblockoffset(p) + j * S -row(j, p) = p * J + subblockoffset(p) + j * S -@end example - -To be continued@enddots{} -- cgit v1.2.3

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, + or other written document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by + others.

    This License is a kind of "copyleft", which means that + derivative works of the document must themselves be free in the + same sense. It complements the GNU General Public License, which + is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals + for free software, because free software needs free documentation: + a free program should come with manuals providing the same + freedoms that the software does. But this License is not limited + to software manuals; it can be used for any textual work, + regardless of subject matter or whether it is published as a + printed book. We recommend this License principally for works + whose purpose is instruction or reference.