From b529f046c9a64ac5fcfa60747af940cf972b3ebc Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 6 Nov 2011 15:56:34 -0600 Subject: Actually move the kde files that were renamed in the last commit --- doc/glossary/kdeprintingglossary.docbook | 1387 ---- doc/glossary/tdeprintingglossary.docbook | 1387 ++++ doc/kdeprint/CMakeLists.txt | 12 - doc/kdeprint/Makefile.am | 3 - doc/kdeprint/add-printer-wiz.docbook | 290 - doc/kdeprint/cr32-action-wizard.png | Bin 606 -> 0 bytes doc/kdeprint/cups-config.docbook | 2072 ------ ...s-filterarchitecture-kivio-70Percent-scaled.png | Bin 100464 -> 0 bytes doc/kdeprint/cupsaddprinterwizard1.png | Bin 70554 -> 0 bytes .../cupsaddprinterwizard2_backendselection.png | Bin 76444 -> 0 bytes doc/kdeprint/cupsaddprinterwizard3_networkscan.png | Bin 70820 -> 0 bytes .../cupsaddprinterwizard3_networkscan_results.png | Bin 90883 -> 0 bytes .../cupsaddprinterwizard4_networkscan_config.png | Bin 10607 -> 0 bytes doc/kdeprint/cupsoptions.docbook | 602 -- .../cupsserverconfig_browse_relay_add_button.png | Bin 2562 -> 0 bytes .../cupsserverconfig_browsingmasks_add_button.png | Bin 2294 -> 0 bytes .../cupsserverconfiguration10_browsinggeneral.png | Bin 14678 -> 0 bytes ...psserverconfiguration11_browsingconnections.png | Bin 15433 -> 0 bytes .../cupsserverconfiguration11_browsingmasks.png | Bin 15493 -> 0 bytes .../cupsserverconfiguration12_browsingtimeouts.png | Bin 14109 -> 0 bytes .../cupsserverconfiguration14_browsingrelay.png | Bin 14903 -> 0 bytes ...uration15a_resourceallprinters_defineaccess.png | Bin 15822 -> 0 bytes ...uration15b_resourceallprinters_defineaccess.png | Bin 5870 -> 0 bytes ...uration15c_resourceallprinters_defineaccess.png | Bin 5470 -> 0 bytes doc/kdeprint/cupsserverconfiguration1_welcome.png | Bin 31316 -> 0 bytes doc/kdeprint/cupsserverconfiguration2_general.png | Bin 15870 -> 0 bytes doc/kdeprint/cupsserverconfiguration3_logging.png | Bin 16490 -> 0 bytes .../cupsserverconfiguration4_directories.png | Bin 17728 -> 0 bytes doc/kdeprint/cupsserverconfiguration5_HTTP.png | Bin 15010 -> 0 bytes .../cupsserverconfiguration6_encryption.png | Bin 15083 -> 0 bytes .../cupsserverconfiguration7_miscellanious.png | Bin 15943 -> 0 bytes .../cupsserverconfiguration8_networkgeneral.png | Bin 15538 -> 0 bytes .../cupsserverconfiguration9_networkclients.png | Bin 14998 -> 0 bytes ...erverconfiguration_resourceadminaccessmasks.png | Bin 47480 -> 0 bytes ...erverconfiguration_resourceadminaddprinters.png | Bin 30334 -> 0 bytes ...ation_resourceadminaddprinters_defineaccess.png | Bin 43890 -> 0 bytes ...verconfiguration_resourceadminauthorization.png | Bin 30503 -> 0 bytes .../cupsserverconfiguration_securityoverview.png | Bin 16804 -> 0 bytes doc/kdeprint/extensions.docbook | 57 - doc/kdeprint/external-command.docbook | 25 - doc/kdeprint/final-word.docbook | 117 - doc/kdeprint/getting-started.docbook | 143 - doc/kdeprint/highlights.docbook | 518 -- doc/kdeprint/index.docbook | 200 - doc/kdeprint/kcontrol-icon.png | Bin 1202 -> 0 bytes .../kcontrolcenter-printmanager-jobcontrol-2.png | Bin 10761 -> 0 bytes doc/kdeprint/kcron_to_be_printed.png | Bin 10637 -> 0 bytes doc/kdeprint/kdeprint-jobviewer.png | Bin 11220 -> 0 bytes doc/kdeprint/kprinter-as-netscape-printcommand.png | Bin 8210 -> 0 bytes doc/kdeprint/kprinter-kivio.png | Bin 11149 -> 0 bytes doc/kdeprint/kprinter.png | Bin 12568 -> 0 bytes doc/kdeprint/kprinter_called_from_run_command.png | Bin 6068 -> 0 bytes .../kprinter_with_kcron_developer_special.png | Bin 11245 -> 0 bytes doc/kdeprint/lpd.docbook | 18 - doc/kdeprint/lpr-bsd.docbook | 25 - doc/kdeprint/lprng.docbook | 7 - doc/kdeprint/ps-boxes.png | Bin 441 -> 0 bytes doc/kdeprint/rlpr.docbook | 18 - doc/kdeprint/steinbruch_scaled.png | Bin 116567 -> 0 bytes doc/kdeprint/tech-overview.docbook | 280 - doc/kdeprint/theory.docbook | 690 -- doc/kdesu/CMakeLists.txt | 12 - doc/kdesu/Makefile.am | 5 - doc/kdesu/index.docbook | 320 - doc/kdesu/man-kdesu.1.docbook | 179 - doc/tdeprint/CMakeLists.txt | 12 + doc/tdeprint/Makefile.am | 3 + doc/tdeprint/add-printer-wiz.docbook | 290 + doc/tdeprint/cr32-action-wizard.png | Bin 0 -> 606 bytes doc/tdeprint/cups-config.docbook | 2072 ++++++ ...s-filterarchitecture-kivio-70Percent-scaled.png | Bin 0 -> 100464 bytes doc/tdeprint/cupsaddprinterwizard1.png | Bin 0 -> 70554 bytes .../cupsaddprinterwizard2_backendselection.png | Bin 0 -> 76444 bytes doc/tdeprint/cupsaddprinterwizard3_networkscan.png | Bin 0 -> 70820 bytes .../cupsaddprinterwizard3_networkscan_results.png | Bin 0 -> 90883 bytes .../cupsaddprinterwizard4_networkscan_config.png | Bin 0 -> 10607 bytes doc/tdeprint/cupsoptions.docbook | 602 ++ .../cupsserverconfig_browse_relay_add_button.png | Bin 0 -> 2562 bytes .../cupsserverconfig_browsingmasks_add_button.png | Bin 0 -> 2294 bytes .../cupsserverconfiguration10_browsinggeneral.png | Bin 0 -> 14678 bytes ...psserverconfiguration11_browsingconnections.png | Bin 0 -> 15433 bytes .../cupsserverconfiguration11_browsingmasks.png | Bin 0 -> 15493 bytes .../cupsserverconfiguration12_browsingtimeouts.png | Bin 0 -> 14109 bytes .../cupsserverconfiguration14_browsingrelay.png | Bin 0 -> 14903 bytes ...uration15a_resourceallprinters_defineaccess.png | Bin 0 -> 15822 bytes ...uration15b_resourceallprinters_defineaccess.png | Bin 0 -> 5870 bytes ...uration15c_resourceallprinters_defineaccess.png | Bin 0 -> 5470 bytes doc/tdeprint/cupsserverconfiguration1_welcome.png | Bin 0 -> 31316 bytes doc/tdeprint/cupsserverconfiguration2_general.png | Bin 0 -> 15870 bytes doc/tdeprint/cupsserverconfiguration3_logging.png | Bin 0 -> 16490 bytes .../cupsserverconfiguration4_directories.png | Bin 0 -> 17728 bytes doc/tdeprint/cupsserverconfiguration5_HTTP.png | Bin 0 -> 15010 bytes .../cupsserverconfiguration6_encryption.png | Bin 0 -> 15083 bytes .../cupsserverconfiguration7_miscellanious.png | Bin 0 -> 15943 bytes .../cupsserverconfiguration8_networkgeneral.png | Bin 0 -> 15538 bytes .../cupsserverconfiguration9_networkclients.png | Bin 0 -> 14998 bytes ...erverconfiguration_resourceadminaccessmasks.png | Bin 0 -> 47480 bytes ...erverconfiguration_resourceadminaddprinters.png | Bin 0 -> 30334 bytes ...ation_resourceadminaddprinters_defineaccess.png | Bin 0 -> 43890 bytes ...verconfiguration_resourceadminauthorization.png | Bin 0 -> 30503 bytes .../cupsserverconfiguration_securityoverview.png | Bin 0 -> 16804 bytes doc/tdeprint/extensions.docbook | 57 + doc/tdeprint/external-command.docbook | 25 + doc/tdeprint/final-word.docbook | 117 + doc/tdeprint/getting-started.docbook | 143 + doc/tdeprint/highlights.docbook | 518 ++ doc/tdeprint/index.docbook | 200 + doc/tdeprint/kcontrol-icon.png | Bin 0 -> 1202 bytes .../kcontrolcenter-printmanager-jobcontrol-2.png | Bin 0 -> 10761 bytes doc/tdeprint/kcron_to_be_printed.png | Bin 0 -> 10637 bytes doc/tdeprint/kprinter-as-netscape-printcommand.png | Bin 0 -> 8210 bytes doc/tdeprint/kprinter-kivio.png | Bin 0 -> 11149 bytes doc/tdeprint/kprinter.png | Bin 0 -> 12568 bytes doc/tdeprint/kprinter_called_from_run_command.png | Bin 0 -> 6068 bytes .../kprinter_with_kcron_developer_special.png | Bin 0 -> 11245 bytes doc/tdeprint/lpd.docbook | 18 + doc/tdeprint/lpr-bsd.docbook | 25 + doc/tdeprint/lprng.docbook | 7 + doc/tdeprint/ps-boxes.png | Bin 0 -> 441 bytes doc/tdeprint/rlpr.docbook | 18 + doc/tdeprint/steinbruch_scaled.png | Bin 0 -> 116567 bytes doc/tdeprint/tdeprint-jobviewer.png | Bin 0 -> 11220 bytes doc/tdeprint/tech-overview.docbook | 280 + doc/tdeprint/theory.docbook | 690 ++ doc/tdesu/CMakeLists.txt | 12 + doc/tdesu/Makefile.am | 5 + doc/tdesu/index.docbook | 320 + doc/tdesu/man-tdesu.1.docbook | 179 + kdeprint/CMakeLists.txt | 17 - kdeprint/Makefile.am | 1 - kdeprint/configure.in.in | 1 - kdeprint/descriptions/Makefile.am | 24 - kdeprint/descriptions/printers.cpp | 7084 -------------------- kdeprint/descriptions/readppd | 83 - kdeprint/descriptions/sortthem.cpp | 28 - kdeprint/kdeprint_part/CMakeLists.txt | 37 - kdeprint/kdeprint_part/Makefile.am | 24 - kdeprint/kdeprint_part/kdeprint_part.desktop | 85 - kdeprint/kdeprint_part/kdeprint_part.rc | 28 - kdeprint/kdeprint_part/printpart.cpp | 81 - kdeprint/kdeprint_part/printpart.h | 59 - kdeprint/kdeprintfax/CMakeLists.txt | 42 - kdeprint/kdeprintfax/Makefile.am | 23 - kdeprint/kdeprintfax/anytops | 98 - kdeprint/kdeprintfax/conffax.cpp | 80 - kdeprint/kdeprintfax/conffax.h | 40 - kdeprint/kdeprintfax/conffilters.cpp | 192 - kdeprint/kdeprintfax/conffilters.h | 48 - kdeprint/kdeprintfax/confgeneral.cpp | 90 - kdeprint/kdeprintfax/confgeneral.h | 43 - kdeprint/kdeprintfax/configdlg.cpp | 75 - kdeprint/kdeprintfax/configdlg.h | 48 - kdeprint/kdeprintfax/confsystem.cpp | 199 - kdeprint/kdeprintfax/confsystem.h | 50 - kdeprint/kdeprintfax/cr16-action-abentry.png | Bin 864 -> 0 bytes kdeprint/kdeprintfax/defcmds.cpp | 38 - kdeprint/kdeprintfax/defcmds.h | 32 - kdeprint/kdeprintfax/faxab.cpp | 212 - kdeprint/kdeprintfax/faxab.h | 64 - kdeprint/kdeprintfax/faxctrl.cpp | 669 -- kdeprint/kdeprintfax/faxctrl.h | 73 - kdeprint/kdeprintfax/faxfilters | 3 - kdeprint/kdeprintfax/filterdlg.cpp | 72 - kdeprint/kdeprintfax/filterdlg.h | 41 - kdeprint/kdeprintfax/hi128-app-kdeprintfax.png | Bin 10612 -> 0 bytes kdeprint/kdeprintfax/hi16-app-kdeprintfax.png | Bin 787 -> 0 bytes kdeprint/kdeprintfax/hi22-app-kdeprintfax.png | Bin 1241 -> 0 bytes kdeprint/kdeprintfax/hi32-app-kdeprintfax.png | Bin 1928 -> 0 bytes kdeprint/kdeprintfax/hi48-app-kdeprintfax.png | Bin 3352 -> 0 bytes kdeprint/kdeprintfax/hi64-app-kdeprintfax.png | Bin 4669 -> 0 bytes kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz | Bin 11876 -> 0 bytes kdeprint/kdeprintfax/kdeprintfax.cpp | 607 -- kdeprint/kdeprintfax/kdeprintfax.desktop | 97 - kdeprint/kdeprintfax/kdeprintfax.h | 115 - kdeprint/kdeprintfax/kdeprintfaxui.rc | 31 - kdeprint/kdeprintfax/main.cpp | 78 - kdeprint/kjobviewer/CMakeLists.txt | 37 - kdeprint/kjobviewer/Makefile.am | 24 - kdeprint/kjobviewer/hi128-app-kjobviewer.png | Bin 8472 -> 0 bytes kdeprint/kjobviewer/hi16-app-kjobviewer.png | Bin 684 -> 0 bytes kdeprint/kjobviewer/hi22-app-kjobviewer.png | Bin 1003 -> 0 bytes kdeprint/kjobviewer/hi32-app-kjobviewer.png | Bin 1633 -> 0 bytes kdeprint/kjobviewer/hi48-app-kjobviewer.png | Bin 2588 -> 0 bytes kdeprint/kjobviewer/hi64-app-kjobviewer.png | Bin 3720 -> 0 bytes kdeprint/kjobviewer/hisc-app-kjobviewer.svgz | Bin 17679 -> 0 bytes kdeprint/kjobviewer/kjobviewer.cpp | 233 - kdeprint/kjobviewer/kjobviewer.desktop | 92 - kdeprint/kjobviewer/kjobviewer.h | 57 - kdeprint/kjobviewer/kjobviewerui.rc | 35 - kdeprint/kjobviewer/main.cpp | 49 - kdeprint/kprinter/CMakeLists.txt | 34 - kdeprint/kprinter/Makefile.am | 18 - kdeprint/kprinter/configure.in.in | 1 - kdeprint/kprinter/kprinter.desktop | 107 - kdeprint/kprinter/main.cpp | 58 - kdeprint/kprinter/printwrapper.cpp | 403 -- kdeprint/kprinter/printwrapper.h | 49 - kdeprint/printmgr/CMakeLists.txt | 37 - kdeprint/printmgr/Makefile.am | 18 - kdeprint/printmgr/hi128-app-printmgr.png | Bin 8472 -> 0 bytes kdeprint/printmgr/hi16-app-printmgr.png | Bin 684 -> 0 bytes kdeprint/printmgr/hi22-app-printmgr.png | Bin 1003 -> 0 bytes kdeprint/printmgr/hi32-app-printmgr.png | Bin 1633 -> 0 bytes kdeprint/printmgr/hi48-app-printmgr.png | Bin 2588 -> 0 bytes kdeprint/printmgr/hi64-app-printmgr.png | Bin 3720 -> 0 bytes kdeprint/printmgr/hisc-app-printmgr.svgz | Bin 17679 -> 0 bytes kdeprint/printmgr/kcmprintmgr.cpp | 73 - kdeprint/printmgr/kcmprintmgr.h | 39 - kdeprint/printmgr/printers.desktop | 235 - kdeprint/slave/CMakeLists.txt | 39 - kdeprint/slave/Makefile.am | 22 - kdeprint/slave/kio_print.cpp | 920 --- kdeprint/slave/kio_print.h | 70 - kdeprint/slave/mimetypes/CMakeLists.txt | 16 - kdeprint/slave/mimetypes/Makefile.am | 3 - kdeprint/slave/mimetypes/class.desktop | 75 - kdeprint/slave/mimetypes/driver.desktop | 76 - kdeprint/slave/mimetypes/folder.desktop | 76 - kdeprint/slave/mimetypes/jobs.desktop | 85 - kdeprint/slave/mimetypes/manager.desktop | 87 - kdeprint/slave/mimetypes/printer.desktop | 79 - kdeprint/slave/mimetypes/printermodel.desktop | 78 - kdeprint/slave/pics/.gitignore | 0 kdeprint/slave/print.protocol | 15 - kdeprint/slave/printdb.protocol | 14 - kdeprint/slave/templates/CMakeLists.txt | 25 - kdeprint/slave/templates/Makefile.am | 31 - kdeprint/slave/templates/bar-bottom-left.png | Bin 369 -> 0 bytes kdeprint/slave/templates/bar-bottom-middle.png | Bin 160 -> 0 bytes kdeprint/slave/templates/bar-bottom-right.png | Bin 346 -> 0 bytes kdeprint/slave/templates/bar-middle-left.png | Bin 126 -> 0 bytes kdeprint/slave/templates/bar-middle-right.png | Bin 141 -> 0 bytes kdeprint/slave/templates/bar-top-left.png | Bin 358 -> 0 bytes kdeprint/slave/templates/bar-top-middle.png | Bin 145 -> 0 bytes kdeprint/slave/templates/bar-top-right.png | Bin 359 -> 0 bytes kdeprint/slave/templates/bottom-left.png | Bin 665 -> 0 bytes kdeprint/slave/templates/bottom-middle.png | Bin 174 -> 0 bytes kdeprint/slave/templates/bottom-right.png | Bin 4922 -> 0 bytes kdeprint/slave/templates/box-bottom-left.png | Bin 616 -> 0 bytes kdeprint/slave/templates/box-bottom-middle.png | Bin 171 -> 0 bytes kdeprint/slave/templates/box-bottom-right.png | Bin 578 -> 0 bytes kdeprint/slave/templates/box-centre-kdeprint.png | Bin 9633 -> 0 bytes kdeprint/slave/templates/box-middle-left.png | Bin 157 -> 0 bytes kdeprint/slave/templates/box-middle-right.png | Bin 161 -> 0 bytes kdeprint/slave/templates/box-top-left.png | Bin 673 -> 0 bytes kdeprint/slave/templates/box-top-middle.png | Bin 181 -> 0 bytes kdeprint/slave/templates/box-top-right.png | Bin 679 -> 0 bytes kdeprint/slave/templates/class.template | 188 - kdeprint/slave/templates/driver.template | 133 - kdeprint/slave/templates/htmlstyles.css | 38 - kdeprint/slave/templates/jobs.template | 140 - kdeprint/slave/templates/printer.template | 205 - kdeprint/slave/templates/pseudo.template | 188 - kdeprint/slave/templates/top-left.png | Bin 15484 -> 0 bytes kdeprint/slave/templates/top-middle.png | Bin 233 -> 0 bytes kdeprint/slave/templates/top-right-kdeprint.png | Bin 13466 -> 0 bytes kdesu/AUTHORS | 2 - kdesu/CMakeLists.txt | 53 - kdesu/ChangeLog | 128 - kdesu/FAQ | 46 - kdesu/LICENSE.readme | 125 - kdesu/Makefile.am | 1 - kdesu/README | 34 - kdesu/TODO | 3 - kdesu/configure.in.in | 62 - kdesu/kdesu/CMakeLists.txt | 30 - kdesu/kdesu/Makefile.am | 15 - kdesu/kdesu/kdesu.cpp | 431 -- kdesu/kdesu/sudlg.cpp | 103 - kdesu/kdesu/sudlg.h | 32 - kdesu/kdesud/CMakeLists.txt | 35 - kdesu/kdesud/Makefile.am | 31 - kdesu/kdesud/handler.cpp | 512 -- kdesu/kdesud/handler.h | 52 - kdesu/kdesud/kdesud.cpp | 418 -- kdesu/kdesud/lexer.cpp | 134 - kdesu/kdesud/lexer.h | 42 - kdesu/kdesud/repo.cpp | 188 - kdesu/kdesud/repo.h | 68 - kdesu/kdesud/secure.cpp | 80 - kdesu/kdesud/secure.h | 52 - kicker/menuext/kdeprint/CMakeLists.txt | 33 - kicker/menuext/kdeprint/Makefile.am | 15 - kicker/menuext/kdeprint/print_mnu.cpp | 139 - kicker/menuext/kdeprint/print_mnu.h | 46 - kicker/menuext/kdeprint/printmenu.desktop | 144 - kicker/menuext/tdeprint/CMakeLists.txt | 33 + kicker/menuext/tdeprint/Makefile.am | 15 + kicker/menuext/tdeprint/print_mnu.cpp | 139 + kicker/menuext/tdeprint/print_mnu.h | 46 + kicker/menuext/tdeprint/printmenu.desktop | 144 + tdeprint/CMakeLists.txt | 17 + tdeprint/Makefile.am | 1 + tdeprint/configure.in.in | 1 + tdeprint/descriptions/Makefile.am | 24 + tdeprint/descriptions/printers.cpp | 7084 ++++++++++++++++++++ tdeprint/descriptions/readppd | 83 + tdeprint/descriptions/sortthem.cpp | 28 + tdeprint/kjobviewer/CMakeLists.txt | 37 + tdeprint/kjobviewer/Makefile.am | 24 + tdeprint/kjobviewer/hi128-app-kjobviewer.png | Bin 0 -> 8472 bytes tdeprint/kjobviewer/hi16-app-kjobviewer.png | Bin 0 -> 684 bytes tdeprint/kjobviewer/hi22-app-kjobviewer.png | Bin 0 -> 1003 bytes tdeprint/kjobviewer/hi32-app-kjobviewer.png | Bin 0 -> 1633 bytes tdeprint/kjobviewer/hi48-app-kjobviewer.png | Bin 0 -> 2588 bytes tdeprint/kjobviewer/hi64-app-kjobviewer.png | Bin 0 -> 3720 bytes tdeprint/kjobviewer/hisc-app-kjobviewer.svgz | Bin 0 -> 17679 bytes tdeprint/kjobviewer/kjobviewer.cpp | 233 + tdeprint/kjobviewer/kjobviewer.desktop | 92 + tdeprint/kjobviewer/kjobviewer.h | 57 + tdeprint/kjobviewer/kjobviewerui.rc | 35 + tdeprint/kjobviewer/main.cpp | 49 + tdeprint/kprinter/CMakeLists.txt | 34 + tdeprint/kprinter/Makefile.am | 18 + tdeprint/kprinter/configure.in.in | 1 + tdeprint/kprinter/kprinter.desktop | 107 + tdeprint/kprinter/main.cpp | 58 + tdeprint/kprinter/printwrapper.cpp | 403 ++ tdeprint/kprinter/printwrapper.h | 49 + tdeprint/printmgr/CMakeLists.txt | 37 + tdeprint/printmgr/Makefile.am | 18 + tdeprint/printmgr/hi128-app-printmgr.png | Bin 0 -> 8472 bytes tdeprint/printmgr/hi16-app-printmgr.png | Bin 0 -> 684 bytes tdeprint/printmgr/hi22-app-printmgr.png | Bin 0 -> 1003 bytes tdeprint/printmgr/hi32-app-printmgr.png | Bin 0 -> 1633 bytes tdeprint/printmgr/hi48-app-printmgr.png | Bin 0 -> 2588 bytes tdeprint/printmgr/hi64-app-printmgr.png | Bin 0 -> 3720 bytes tdeprint/printmgr/hisc-app-printmgr.svgz | Bin 0 -> 17679 bytes tdeprint/printmgr/kcmprintmgr.cpp | 73 + tdeprint/printmgr/kcmprintmgr.h | 39 + tdeprint/printmgr/printers.desktop | 235 + tdeprint/slave/CMakeLists.txt | 39 + tdeprint/slave/Makefile.am | 22 + tdeprint/slave/kio_print.cpp | 920 +++ tdeprint/slave/kio_print.h | 70 + tdeprint/slave/mimetypes/CMakeLists.txt | 16 + tdeprint/slave/mimetypes/Makefile.am | 3 + tdeprint/slave/mimetypes/class.desktop | 75 + tdeprint/slave/mimetypes/driver.desktop | 76 + tdeprint/slave/mimetypes/folder.desktop | 76 + tdeprint/slave/mimetypes/jobs.desktop | 85 + tdeprint/slave/mimetypes/manager.desktop | 87 + tdeprint/slave/mimetypes/printer.desktop | 79 + tdeprint/slave/mimetypes/printermodel.desktop | 78 + tdeprint/slave/pics/.gitignore | 0 tdeprint/slave/print.protocol | 15 + tdeprint/slave/printdb.protocol | 14 + tdeprint/slave/templates/CMakeLists.txt | 25 + tdeprint/slave/templates/Makefile.am | 31 + tdeprint/slave/templates/bar-bottom-left.png | Bin 0 -> 369 bytes tdeprint/slave/templates/bar-bottom-middle.png | Bin 0 -> 160 bytes tdeprint/slave/templates/bar-bottom-right.png | Bin 0 -> 346 bytes tdeprint/slave/templates/bar-middle-left.png | Bin 0 -> 126 bytes tdeprint/slave/templates/bar-middle-right.png | Bin 0 -> 141 bytes tdeprint/slave/templates/bar-top-left.png | Bin 0 -> 358 bytes tdeprint/slave/templates/bar-top-middle.png | Bin 0 -> 145 bytes tdeprint/slave/templates/bar-top-right.png | Bin 0 -> 359 bytes tdeprint/slave/templates/bottom-left.png | Bin 0 -> 665 bytes tdeprint/slave/templates/bottom-middle.png | Bin 0 -> 174 bytes tdeprint/slave/templates/bottom-right.png | Bin 0 -> 4922 bytes tdeprint/slave/templates/box-bottom-left.png | Bin 0 -> 616 bytes tdeprint/slave/templates/box-bottom-middle.png | Bin 0 -> 171 bytes tdeprint/slave/templates/box-bottom-right.png | Bin 0 -> 578 bytes tdeprint/slave/templates/box-centre-tdeprint.png | Bin 0 -> 9633 bytes tdeprint/slave/templates/box-middle-left.png | Bin 0 -> 157 bytes tdeprint/slave/templates/box-middle-right.png | Bin 0 -> 161 bytes tdeprint/slave/templates/box-top-left.png | Bin 0 -> 673 bytes tdeprint/slave/templates/box-top-middle.png | Bin 0 -> 181 bytes tdeprint/slave/templates/box-top-right.png | Bin 0 -> 679 bytes tdeprint/slave/templates/class.template | 188 + tdeprint/slave/templates/driver.template | 133 + tdeprint/slave/templates/htmlstyles.css | 38 + tdeprint/slave/templates/jobs.template | 140 + tdeprint/slave/templates/printer.template | 205 + tdeprint/slave/templates/pseudo.template | 188 + tdeprint/slave/templates/top-left.png | Bin 0 -> 15484 bytes tdeprint/slave/templates/top-middle.png | Bin 0 -> 233 bytes tdeprint/slave/templates/top-right-tdeprint.png | Bin 0 -> 13466 bytes tdeprint/tdeprint_part/CMakeLists.txt | 37 + tdeprint/tdeprint_part/Makefile.am | 24 + tdeprint/tdeprint_part/printpart.cpp | 81 + tdeprint/tdeprint_part/printpart.h | 59 + tdeprint/tdeprint_part/tdeprint_part.desktop | 85 + tdeprint/tdeprint_part/tdeprint_part.rc | 28 + tdeprint/tdeprintfax/CMakeLists.txt | 42 + tdeprint/tdeprintfax/Makefile.am | 23 + tdeprint/tdeprintfax/anytops | 98 + tdeprint/tdeprintfax/conffax.cpp | 80 + tdeprint/tdeprintfax/conffax.h | 40 + tdeprint/tdeprintfax/conffilters.cpp | 192 + tdeprint/tdeprintfax/conffilters.h | 48 + tdeprint/tdeprintfax/confgeneral.cpp | 90 + tdeprint/tdeprintfax/confgeneral.h | 43 + tdeprint/tdeprintfax/configdlg.cpp | 75 + tdeprint/tdeprintfax/configdlg.h | 48 + tdeprint/tdeprintfax/confsystem.cpp | 199 + tdeprint/tdeprintfax/confsystem.h | 50 + tdeprint/tdeprintfax/cr16-action-abentry.png | Bin 0 -> 864 bytes tdeprint/tdeprintfax/defcmds.cpp | 38 + tdeprint/tdeprintfax/defcmds.h | 32 + tdeprint/tdeprintfax/faxab.cpp | 212 + tdeprint/tdeprintfax/faxab.h | 64 + tdeprint/tdeprintfax/faxctrl.cpp | 669 ++ tdeprint/tdeprintfax/faxctrl.h | 73 + tdeprint/tdeprintfax/faxfilters | 3 + tdeprint/tdeprintfax/filterdlg.cpp | 72 + tdeprint/tdeprintfax/filterdlg.h | 41 + tdeprint/tdeprintfax/hi128-app-tdeprintfax.png | Bin 0 -> 10612 bytes tdeprint/tdeprintfax/hi16-app-tdeprintfax.png | Bin 0 -> 787 bytes tdeprint/tdeprintfax/hi22-app-tdeprintfax.png | Bin 0 -> 1241 bytes tdeprint/tdeprintfax/hi32-app-tdeprintfax.png | Bin 0 -> 1928 bytes tdeprint/tdeprintfax/hi48-app-tdeprintfax.png | Bin 0 -> 3352 bytes tdeprint/tdeprintfax/hi64-app-tdeprintfax.png | Bin 0 -> 4669 bytes tdeprint/tdeprintfax/hisc-app-tdeprintfax.svgz | Bin 0 -> 11876 bytes tdeprint/tdeprintfax/main.cpp | 78 + tdeprint/tdeprintfax/tdeprintfax.cpp | 607 ++ tdeprint/tdeprintfax/tdeprintfax.desktop | 97 + tdeprint/tdeprintfax/tdeprintfax.h | 115 + tdeprint/tdeprintfax/tdeprintfaxui.rc | 31 + tdesu/AUTHORS | 2 + tdesu/CMakeLists.txt | 53 + tdesu/ChangeLog | 128 + tdesu/FAQ | 46 + tdesu/LICENSE.readme | 125 + tdesu/Makefile.am | 1 + tdesu/README | 34 + tdesu/TODO | 3 + tdesu/configure.in.in | 62 + tdesu/tdesu/CMakeLists.txt | 30 + tdesu/tdesu/Makefile.am | 15 + tdesu/tdesu/sudlg.cpp | 103 + tdesu/tdesu/sudlg.h | 32 + tdesu/tdesu/tdesu.cpp | 431 ++ tdesu/tdesud/CMakeLists.txt | 35 + tdesu/tdesud/Makefile.am | 31 + tdesu/tdesud/handler.cpp | 512 ++ tdesu/tdesud/handler.h | 52 + tdesu/tdesud/lexer.cpp | 134 + tdesu/tdesud/lexer.h | 42 + tdesu/tdesud/repo.cpp | 188 + tdesu/tdesud/repo.h | 68 + tdesu/tdesud/secure.cpp | 80 + tdesu/tdesud/secure.h | 52 + tdesu/tdesud/tdesud.cpp | 418 ++ 444 files changed, 24948 insertions(+), 24948 deletions(-) delete mode 100644 doc/glossary/kdeprintingglossary.docbook create mode 100644 doc/glossary/tdeprintingglossary.docbook delete mode 100644 doc/kdeprint/CMakeLists.txt delete mode 100644 doc/kdeprint/Makefile.am delete mode 100644 doc/kdeprint/add-printer-wiz.docbook delete mode 100644 doc/kdeprint/cr32-action-wizard.png delete mode 100644 doc/kdeprint/cups-config.docbook delete mode 100644 doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png delete mode 100644 doc/kdeprint/cupsaddprinterwizard1.png delete mode 100644 doc/kdeprint/cupsaddprinterwizard2_backendselection.png delete mode 100644 doc/kdeprint/cupsaddprinterwizard3_networkscan.png delete mode 100644 doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png delete mode 100644 doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png delete mode 100644 doc/kdeprint/cupsoptions.docbook delete mode 100644 doc/kdeprint/cupsserverconfig_browse_relay_add_button.png delete mode 100644 doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png delete mode 100644 doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png delete mode 100644 doc/kdeprint/cupsserverconfiguration11_browsingconnections.png delete mode 100644 doc/kdeprint/cupsserverconfiguration11_browsingmasks.png delete mode 100644 doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png delete mode 100644 doc/kdeprint/cupsserverconfiguration14_browsingrelay.png delete mode 100644 doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png delete mode 100644 doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png delete mode 100644 doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png delete mode 100644 doc/kdeprint/cupsserverconfiguration1_welcome.png delete mode 100644 doc/kdeprint/cupsserverconfiguration2_general.png delete mode 100644 doc/kdeprint/cupsserverconfiguration3_logging.png delete mode 100644 doc/kdeprint/cupsserverconfiguration4_directories.png delete mode 100644 doc/kdeprint/cupsserverconfiguration5_HTTP.png delete mode 100644 doc/kdeprint/cupsserverconfiguration6_encryption.png delete mode 100644 doc/kdeprint/cupsserverconfiguration7_miscellanious.png delete mode 100644 doc/kdeprint/cupsserverconfiguration8_networkgeneral.png delete mode 100644 doc/kdeprint/cupsserverconfiguration9_networkclients.png delete mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png delete mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png delete mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png delete mode 100644 doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png delete mode 100644 doc/kdeprint/cupsserverconfiguration_securityoverview.png delete mode 100644 doc/kdeprint/extensions.docbook delete mode 100644 doc/kdeprint/external-command.docbook delete mode 100644 doc/kdeprint/final-word.docbook delete mode 100644 doc/kdeprint/getting-started.docbook delete mode 100644 doc/kdeprint/highlights.docbook delete mode 100644 doc/kdeprint/index.docbook delete mode 100644 doc/kdeprint/kcontrol-icon.png delete mode 100644 doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png delete mode 100644 doc/kdeprint/kcron_to_be_printed.png delete mode 100644 doc/kdeprint/kdeprint-jobviewer.png delete mode 100644 doc/kdeprint/kprinter-as-netscape-printcommand.png delete mode 100644 doc/kdeprint/kprinter-kivio.png delete mode 100644 doc/kdeprint/kprinter.png delete mode 100644 doc/kdeprint/kprinter_called_from_run_command.png delete mode 100644 doc/kdeprint/kprinter_with_kcron_developer_special.png delete mode 100644 doc/kdeprint/lpd.docbook delete mode 100644 doc/kdeprint/lpr-bsd.docbook delete mode 100644 doc/kdeprint/lprng.docbook delete mode 100644 doc/kdeprint/ps-boxes.png delete mode 100644 doc/kdeprint/rlpr.docbook delete mode 100644 doc/kdeprint/steinbruch_scaled.png delete mode 100644 doc/kdeprint/tech-overview.docbook delete mode 100644 doc/kdeprint/theory.docbook delete mode 100644 doc/kdesu/CMakeLists.txt delete mode 100644 doc/kdesu/Makefile.am delete mode 100644 doc/kdesu/index.docbook delete mode 100644 doc/kdesu/man-kdesu.1.docbook create mode 100644 doc/tdeprint/CMakeLists.txt create mode 100644 doc/tdeprint/Makefile.am create mode 100644 doc/tdeprint/add-printer-wiz.docbook create mode 100644 doc/tdeprint/cr32-action-wizard.png create mode 100644 doc/tdeprint/cups-config.docbook create mode 100644 doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png create mode 100644 doc/tdeprint/cupsaddprinterwizard1.png create mode 100644 doc/tdeprint/cupsaddprinterwizard2_backendselection.png create mode 100644 doc/tdeprint/cupsaddprinterwizard3_networkscan.png create mode 100644 doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png create mode 100644 doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png create mode 100644 doc/tdeprint/cupsoptions.docbook create mode 100644 doc/tdeprint/cupsserverconfig_browse_relay_add_button.png create mode 100644 doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png create mode 100644 doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png create mode 100644 doc/tdeprint/cupsserverconfiguration11_browsingconnections.png create mode 100644 doc/tdeprint/cupsserverconfiguration11_browsingmasks.png create mode 100644 doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png create mode 100644 doc/tdeprint/cupsserverconfiguration14_browsingrelay.png create mode 100644 doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png create mode 100644 doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png create mode 100644 doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png create mode 100644 doc/tdeprint/cupsserverconfiguration1_welcome.png create mode 100644 doc/tdeprint/cupsserverconfiguration2_general.png create mode 100644 doc/tdeprint/cupsserverconfiguration3_logging.png create mode 100644 doc/tdeprint/cupsserverconfiguration4_directories.png create mode 100644 doc/tdeprint/cupsserverconfiguration5_HTTP.png create mode 100644 doc/tdeprint/cupsserverconfiguration6_encryption.png create mode 100644 doc/tdeprint/cupsserverconfiguration7_miscellanious.png create mode 100644 doc/tdeprint/cupsserverconfiguration8_networkgeneral.png create mode 100644 doc/tdeprint/cupsserverconfiguration9_networkclients.png create mode 100644 doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png create mode 100644 doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png create mode 100644 doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png create mode 100644 doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png create mode 100644 doc/tdeprint/cupsserverconfiguration_securityoverview.png create mode 100644 doc/tdeprint/extensions.docbook create mode 100644 doc/tdeprint/external-command.docbook create mode 100644 doc/tdeprint/final-word.docbook create mode 100644 doc/tdeprint/getting-started.docbook create mode 100644 doc/tdeprint/highlights.docbook create mode 100644 doc/tdeprint/index.docbook create mode 100644 doc/tdeprint/kcontrol-icon.png create mode 100644 doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png create mode 100644 doc/tdeprint/kcron_to_be_printed.png create mode 100644 doc/tdeprint/kprinter-as-netscape-printcommand.png create mode 100644 doc/tdeprint/kprinter-kivio.png create mode 100644 doc/tdeprint/kprinter.png create mode 100644 doc/tdeprint/kprinter_called_from_run_command.png create mode 100644 doc/tdeprint/kprinter_with_kcron_developer_special.png create mode 100644 doc/tdeprint/lpd.docbook create mode 100644 doc/tdeprint/lpr-bsd.docbook create mode 100644 doc/tdeprint/lprng.docbook create mode 100644 doc/tdeprint/ps-boxes.png create mode 100644 doc/tdeprint/rlpr.docbook create mode 100644 doc/tdeprint/steinbruch_scaled.png create mode 100644 doc/tdeprint/tdeprint-jobviewer.png create mode 100644 doc/tdeprint/tech-overview.docbook create mode 100644 doc/tdeprint/theory.docbook create mode 100644 doc/tdesu/CMakeLists.txt create mode 100644 doc/tdesu/Makefile.am create mode 100644 doc/tdesu/index.docbook create mode 100644 doc/tdesu/man-tdesu.1.docbook delete mode 100644 kdeprint/CMakeLists.txt delete mode 100644 kdeprint/Makefile.am delete mode 100644 kdeprint/configure.in.in delete mode 100644 kdeprint/descriptions/Makefile.am delete mode 100644 kdeprint/descriptions/printers.cpp delete mode 100755 kdeprint/descriptions/readppd delete mode 100644 kdeprint/descriptions/sortthem.cpp delete mode 100644 kdeprint/kdeprint_part/CMakeLists.txt delete mode 100644 kdeprint/kdeprint_part/Makefile.am delete mode 100644 kdeprint/kdeprint_part/kdeprint_part.desktop delete mode 100644 kdeprint/kdeprint_part/kdeprint_part.rc delete mode 100644 kdeprint/kdeprint_part/printpart.cpp delete mode 100644 kdeprint/kdeprint_part/printpart.h delete mode 100644 kdeprint/kdeprintfax/CMakeLists.txt delete mode 100644 kdeprint/kdeprintfax/Makefile.am delete mode 100755 kdeprint/kdeprintfax/anytops delete mode 100644 kdeprint/kdeprintfax/conffax.cpp delete mode 100644 kdeprint/kdeprintfax/conffax.h delete mode 100644 kdeprint/kdeprintfax/conffilters.cpp delete mode 100644 kdeprint/kdeprintfax/conffilters.h delete mode 100644 kdeprint/kdeprintfax/confgeneral.cpp delete mode 100644 kdeprint/kdeprintfax/confgeneral.h delete mode 100644 kdeprint/kdeprintfax/configdlg.cpp delete mode 100644 kdeprint/kdeprintfax/configdlg.h delete mode 100644 kdeprint/kdeprintfax/confsystem.cpp delete mode 100644 kdeprint/kdeprintfax/confsystem.h delete mode 100644 kdeprint/kdeprintfax/cr16-action-abentry.png delete mode 100644 kdeprint/kdeprintfax/defcmds.cpp delete mode 100644 kdeprint/kdeprintfax/defcmds.h delete mode 100644 kdeprint/kdeprintfax/faxab.cpp delete mode 100644 kdeprint/kdeprintfax/faxab.h delete mode 100644 kdeprint/kdeprintfax/faxctrl.cpp delete mode 100644 kdeprint/kdeprintfax/faxctrl.h delete mode 100644 kdeprint/kdeprintfax/faxfilters delete mode 100644 kdeprint/kdeprintfax/filterdlg.cpp delete mode 100644 kdeprint/kdeprintfax/filterdlg.h delete mode 100644 kdeprint/kdeprintfax/hi128-app-kdeprintfax.png delete mode 100644 kdeprint/kdeprintfax/hi16-app-kdeprintfax.png delete mode 100644 kdeprint/kdeprintfax/hi22-app-kdeprintfax.png delete mode 100644 kdeprint/kdeprintfax/hi32-app-kdeprintfax.png delete mode 100644 kdeprint/kdeprintfax/hi48-app-kdeprintfax.png delete mode 100644 kdeprint/kdeprintfax/hi64-app-kdeprintfax.png delete mode 100644 kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz delete mode 100644 kdeprint/kdeprintfax/kdeprintfax.cpp delete mode 100644 kdeprint/kdeprintfax/kdeprintfax.desktop delete mode 100644 kdeprint/kdeprintfax/kdeprintfax.h delete mode 100644 kdeprint/kdeprintfax/kdeprintfaxui.rc delete mode 100644 kdeprint/kdeprintfax/main.cpp delete mode 100644 kdeprint/kjobviewer/CMakeLists.txt delete mode 100644 kdeprint/kjobviewer/Makefile.am delete mode 100644 kdeprint/kjobviewer/hi128-app-kjobviewer.png delete mode 100644 kdeprint/kjobviewer/hi16-app-kjobviewer.png delete mode 100644 kdeprint/kjobviewer/hi22-app-kjobviewer.png delete mode 100644 kdeprint/kjobviewer/hi32-app-kjobviewer.png delete mode 100644 kdeprint/kjobviewer/hi48-app-kjobviewer.png delete mode 100644 kdeprint/kjobviewer/hi64-app-kjobviewer.png delete mode 100644 kdeprint/kjobviewer/hisc-app-kjobviewer.svgz delete mode 100644 kdeprint/kjobviewer/kjobviewer.cpp delete mode 100644 kdeprint/kjobviewer/kjobviewer.desktop delete mode 100644 kdeprint/kjobviewer/kjobviewer.h delete mode 100644 kdeprint/kjobviewer/kjobviewerui.rc delete mode 100644 kdeprint/kjobviewer/main.cpp delete mode 100644 kdeprint/kprinter/CMakeLists.txt delete mode 100644 kdeprint/kprinter/Makefile.am delete mode 100644 kdeprint/kprinter/configure.in.in delete mode 100644 kdeprint/kprinter/kprinter.desktop delete mode 100644 kdeprint/kprinter/main.cpp delete mode 100644 kdeprint/kprinter/printwrapper.cpp delete mode 100644 kdeprint/kprinter/printwrapper.h delete mode 100644 kdeprint/printmgr/CMakeLists.txt delete mode 100644 kdeprint/printmgr/Makefile.am delete mode 100644 kdeprint/printmgr/hi128-app-printmgr.png delete mode 100644 kdeprint/printmgr/hi16-app-printmgr.png delete mode 100644 kdeprint/printmgr/hi22-app-printmgr.png delete mode 100644 kdeprint/printmgr/hi32-app-printmgr.png delete mode 100644 kdeprint/printmgr/hi48-app-printmgr.png delete mode 100644 kdeprint/printmgr/hi64-app-printmgr.png delete mode 100644 kdeprint/printmgr/hisc-app-printmgr.svgz delete mode 100644 kdeprint/printmgr/kcmprintmgr.cpp delete mode 100644 kdeprint/printmgr/kcmprintmgr.h delete mode 100644 kdeprint/printmgr/printers.desktop delete mode 100644 kdeprint/slave/CMakeLists.txt delete mode 100644 kdeprint/slave/Makefile.am delete mode 100644 kdeprint/slave/kio_print.cpp delete mode 100644 kdeprint/slave/kio_print.h delete mode 100644 kdeprint/slave/mimetypes/CMakeLists.txt delete mode 100644 kdeprint/slave/mimetypes/Makefile.am delete mode 100644 kdeprint/slave/mimetypes/class.desktop delete mode 100644 kdeprint/slave/mimetypes/driver.desktop delete mode 100644 kdeprint/slave/mimetypes/folder.desktop delete mode 100644 kdeprint/slave/mimetypes/jobs.desktop delete mode 100644 kdeprint/slave/mimetypes/manager.desktop delete mode 100644 kdeprint/slave/mimetypes/printer.desktop delete mode 100644 kdeprint/slave/mimetypes/printermodel.desktop delete mode 100644 kdeprint/slave/pics/.gitignore delete mode 100644 kdeprint/slave/print.protocol delete mode 100644 kdeprint/slave/printdb.protocol delete mode 100644 kdeprint/slave/templates/CMakeLists.txt delete mode 100644 kdeprint/slave/templates/Makefile.am delete mode 100644 kdeprint/slave/templates/bar-bottom-left.png delete mode 100644 kdeprint/slave/templates/bar-bottom-middle.png delete mode 100644 kdeprint/slave/templates/bar-bottom-right.png delete mode 100644 kdeprint/slave/templates/bar-middle-left.png delete mode 100644 kdeprint/slave/templates/bar-middle-right.png delete mode 100644 kdeprint/slave/templates/bar-top-left.png delete mode 100644 kdeprint/slave/templates/bar-top-middle.png delete mode 100644 kdeprint/slave/templates/bar-top-right.png delete mode 100644 kdeprint/slave/templates/bottom-left.png delete mode 100644 kdeprint/slave/templates/bottom-middle.png delete mode 100644 kdeprint/slave/templates/bottom-right.png delete mode 100644 kdeprint/slave/templates/box-bottom-left.png delete mode 100644 kdeprint/slave/templates/box-bottom-middle.png delete mode 100644 kdeprint/slave/templates/box-bottom-right.png delete mode 100644 kdeprint/slave/templates/box-centre-kdeprint.png delete mode 100644 kdeprint/slave/templates/box-middle-left.png delete mode 100644 kdeprint/slave/templates/box-middle-right.png delete mode 100644 kdeprint/slave/templates/box-top-left.png delete mode 100644 kdeprint/slave/templates/box-top-middle.png delete mode 100644 kdeprint/slave/templates/box-top-right.png delete mode 100644 kdeprint/slave/templates/class.template delete mode 100644 kdeprint/slave/templates/driver.template delete mode 100644 kdeprint/slave/templates/htmlstyles.css delete mode 100644 kdeprint/slave/templates/jobs.template delete mode 100644 kdeprint/slave/templates/printer.template delete mode 100644 kdeprint/slave/templates/pseudo.template delete mode 100644 kdeprint/slave/templates/top-left.png delete mode 100644 kdeprint/slave/templates/top-middle.png delete mode 100644 kdeprint/slave/templates/top-right-kdeprint.png delete mode 100644 kdesu/AUTHORS delete mode 100644 kdesu/CMakeLists.txt delete mode 100644 kdesu/ChangeLog delete mode 100644 kdesu/FAQ delete mode 100644 kdesu/LICENSE.readme delete mode 100644 kdesu/Makefile.am delete mode 100644 kdesu/README delete mode 100644 kdesu/TODO delete mode 100644 kdesu/configure.in.in delete mode 100644 kdesu/kdesu/CMakeLists.txt delete mode 100644 kdesu/kdesu/Makefile.am delete mode 100644 kdesu/kdesu/kdesu.cpp delete mode 100644 kdesu/kdesu/sudlg.cpp delete mode 100644 kdesu/kdesu/sudlg.h delete mode 100644 kdesu/kdesud/CMakeLists.txt delete mode 100644 kdesu/kdesud/Makefile.am delete mode 100644 kdesu/kdesud/handler.cpp delete mode 100644 kdesu/kdesud/handler.h delete mode 100644 kdesu/kdesud/kdesud.cpp delete mode 100644 kdesu/kdesud/lexer.cpp delete mode 100644 kdesu/kdesud/lexer.h delete mode 100644 kdesu/kdesud/repo.cpp delete mode 100644 kdesu/kdesud/repo.h delete mode 100644 kdesu/kdesud/secure.cpp delete mode 100644 kdesu/kdesud/secure.h delete mode 100644 kicker/menuext/kdeprint/CMakeLists.txt delete mode 100644 kicker/menuext/kdeprint/Makefile.am delete mode 100644 kicker/menuext/kdeprint/print_mnu.cpp delete mode 100644 kicker/menuext/kdeprint/print_mnu.h delete mode 100644 kicker/menuext/kdeprint/printmenu.desktop create mode 100644 kicker/menuext/tdeprint/CMakeLists.txt create mode 100644 kicker/menuext/tdeprint/Makefile.am create mode 100644 kicker/menuext/tdeprint/print_mnu.cpp create mode 100644 kicker/menuext/tdeprint/print_mnu.h create mode 100644 kicker/menuext/tdeprint/printmenu.desktop create mode 100644 tdeprint/CMakeLists.txt create mode 100644 tdeprint/Makefile.am create mode 100644 tdeprint/configure.in.in create mode 100644 tdeprint/descriptions/Makefile.am create mode 100644 tdeprint/descriptions/printers.cpp create mode 100755 tdeprint/descriptions/readppd create mode 100644 tdeprint/descriptions/sortthem.cpp create mode 100644 tdeprint/kjobviewer/CMakeLists.txt create mode 100644 tdeprint/kjobviewer/Makefile.am create mode 100644 tdeprint/kjobviewer/hi128-app-kjobviewer.png create mode 100644 tdeprint/kjobviewer/hi16-app-kjobviewer.png create mode 100644 tdeprint/kjobviewer/hi22-app-kjobviewer.png create mode 100644 tdeprint/kjobviewer/hi32-app-kjobviewer.png create mode 100644 tdeprint/kjobviewer/hi48-app-kjobviewer.png create mode 100644 tdeprint/kjobviewer/hi64-app-kjobviewer.png create mode 100644 tdeprint/kjobviewer/hisc-app-kjobviewer.svgz create mode 100644 tdeprint/kjobviewer/kjobviewer.cpp create mode 100644 tdeprint/kjobviewer/kjobviewer.desktop create mode 100644 tdeprint/kjobviewer/kjobviewer.h create mode 100644 tdeprint/kjobviewer/kjobviewerui.rc create mode 100644 tdeprint/kjobviewer/main.cpp create mode 100644 tdeprint/kprinter/CMakeLists.txt create mode 100644 tdeprint/kprinter/Makefile.am create mode 100644 tdeprint/kprinter/configure.in.in create mode 100644 tdeprint/kprinter/kprinter.desktop create mode 100644 tdeprint/kprinter/main.cpp create mode 100644 tdeprint/kprinter/printwrapper.cpp create mode 100644 tdeprint/kprinter/printwrapper.h create mode 100644 tdeprint/printmgr/CMakeLists.txt create mode 100644 tdeprint/printmgr/Makefile.am create mode 100644 tdeprint/printmgr/hi128-app-printmgr.png create mode 100644 tdeprint/printmgr/hi16-app-printmgr.png create mode 100644 tdeprint/printmgr/hi22-app-printmgr.png create mode 100644 tdeprint/printmgr/hi32-app-printmgr.png create mode 100644 tdeprint/printmgr/hi48-app-printmgr.png create mode 100644 tdeprint/printmgr/hi64-app-printmgr.png create mode 100644 tdeprint/printmgr/hisc-app-printmgr.svgz create mode 100644 tdeprint/printmgr/kcmprintmgr.cpp create mode 100644 tdeprint/printmgr/kcmprintmgr.h create mode 100644 tdeprint/printmgr/printers.desktop create mode 100644 tdeprint/slave/CMakeLists.txt create mode 100644 tdeprint/slave/Makefile.am create mode 100644 tdeprint/slave/kio_print.cpp create mode 100644 tdeprint/slave/kio_print.h create mode 100644 tdeprint/slave/mimetypes/CMakeLists.txt create mode 100644 tdeprint/slave/mimetypes/Makefile.am create mode 100644 tdeprint/slave/mimetypes/class.desktop create mode 100644 tdeprint/slave/mimetypes/driver.desktop create mode 100644 tdeprint/slave/mimetypes/folder.desktop create mode 100644 tdeprint/slave/mimetypes/jobs.desktop create mode 100644 tdeprint/slave/mimetypes/manager.desktop create mode 100644 tdeprint/slave/mimetypes/printer.desktop create mode 100644 tdeprint/slave/mimetypes/printermodel.desktop create mode 100644 tdeprint/slave/pics/.gitignore create mode 100644 tdeprint/slave/print.protocol create mode 100644 tdeprint/slave/printdb.protocol create mode 100644 tdeprint/slave/templates/CMakeLists.txt create mode 100644 tdeprint/slave/templates/Makefile.am create mode 100644 tdeprint/slave/templates/bar-bottom-left.png create mode 100644 tdeprint/slave/templates/bar-bottom-middle.png create mode 100644 tdeprint/slave/templates/bar-bottom-right.png create mode 100644 tdeprint/slave/templates/bar-middle-left.png create mode 100644 tdeprint/slave/templates/bar-middle-right.png create mode 100644 tdeprint/slave/templates/bar-top-left.png create mode 100644 tdeprint/slave/templates/bar-top-middle.png create mode 100644 tdeprint/slave/templates/bar-top-right.png create mode 100644 tdeprint/slave/templates/bottom-left.png create mode 100644 tdeprint/slave/templates/bottom-middle.png create mode 100644 tdeprint/slave/templates/bottom-right.png create mode 100644 tdeprint/slave/templates/box-bottom-left.png create mode 100644 tdeprint/slave/templates/box-bottom-middle.png create mode 100644 tdeprint/slave/templates/box-bottom-right.png create mode 100644 tdeprint/slave/templates/box-centre-tdeprint.png create mode 100644 tdeprint/slave/templates/box-middle-left.png create mode 100644 tdeprint/slave/templates/box-middle-right.png create mode 100644 tdeprint/slave/templates/box-top-left.png create mode 100644 tdeprint/slave/templates/box-top-middle.png create mode 100644 tdeprint/slave/templates/box-top-right.png create mode 100644 tdeprint/slave/templates/class.template create mode 100644 tdeprint/slave/templates/driver.template create mode 100644 tdeprint/slave/templates/htmlstyles.css create mode 100644 tdeprint/slave/templates/jobs.template create mode 100644 tdeprint/slave/templates/printer.template create mode 100644 tdeprint/slave/templates/pseudo.template create mode 100644 tdeprint/slave/templates/top-left.png create mode 100644 tdeprint/slave/templates/top-middle.png create mode 100644 tdeprint/slave/templates/top-right-tdeprint.png create mode 100644 tdeprint/tdeprint_part/CMakeLists.txt create mode 100644 tdeprint/tdeprint_part/Makefile.am create mode 100644 tdeprint/tdeprint_part/printpart.cpp create mode 100644 tdeprint/tdeprint_part/printpart.h create mode 100644 tdeprint/tdeprint_part/tdeprint_part.desktop create mode 100644 tdeprint/tdeprint_part/tdeprint_part.rc create mode 100644 tdeprint/tdeprintfax/CMakeLists.txt create mode 100644 tdeprint/tdeprintfax/Makefile.am create mode 100755 tdeprint/tdeprintfax/anytops create mode 100644 tdeprint/tdeprintfax/conffax.cpp create mode 100644 tdeprint/tdeprintfax/conffax.h create mode 100644 tdeprint/tdeprintfax/conffilters.cpp create mode 100644 tdeprint/tdeprintfax/conffilters.h create mode 100644 tdeprint/tdeprintfax/confgeneral.cpp create mode 100644 tdeprint/tdeprintfax/confgeneral.h create mode 100644 tdeprint/tdeprintfax/configdlg.cpp create mode 100644 tdeprint/tdeprintfax/configdlg.h create mode 100644 tdeprint/tdeprintfax/confsystem.cpp create mode 100644 tdeprint/tdeprintfax/confsystem.h create mode 100644 tdeprint/tdeprintfax/cr16-action-abentry.png create mode 100644 tdeprint/tdeprintfax/defcmds.cpp create mode 100644 tdeprint/tdeprintfax/defcmds.h create mode 100644 tdeprint/tdeprintfax/faxab.cpp create mode 100644 tdeprint/tdeprintfax/faxab.h create mode 100644 tdeprint/tdeprintfax/faxctrl.cpp create mode 100644 tdeprint/tdeprintfax/faxctrl.h create mode 100644 tdeprint/tdeprintfax/faxfilters create mode 100644 tdeprint/tdeprintfax/filterdlg.cpp create mode 100644 tdeprint/tdeprintfax/filterdlg.h create mode 100644 tdeprint/tdeprintfax/hi128-app-tdeprintfax.png create mode 100644 tdeprint/tdeprintfax/hi16-app-tdeprintfax.png create mode 100644 tdeprint/tdeprintfax/hi22-app-tdeprintfax.png create mode 100644 tdeprint/tdeprintfax/hi32-app-tdeprintfax.png create mode 100644 tdeprint/tdeprintfax/hi48-app-tdeprintfax.png create mode 100644 tdeprint/tdeprintfax/hi64-app-tdeprintfax.png create mode 100644 tdeprint/tdeprintfax/hisc-app-tdeprintfax.svgz create mode 100644 tdeprint/tdeprintfax/main.cpp create mode 100644 tdeprint/tdeprintfax/tdeprintfax.cpp create mode 100644 tdeprint/tdeprintfax/tdeprintfax.desktop create mode 100644 tdeprint/tdeprintfax/tdeprintfax.h create mode 100644 tdeprint/tdeprintfax/tdeprintfaxui.rc create mode 100644 tdesu/AUTHORS create mode 100644 tdesu/CMakeLists.txt create mode 100644 tdesu/ChangeLog create mode 100644 tdesu/FAQ create mode 100644 tdesu/LICENSE.readme create mode 100644 tdesu/Makefile.am create mode 100644 tdesu/README create mode 100644 tdesu/TODO create mode 100644 tdesu/configure.in.in create mode 100644 tdesu/tdesu/CMakeLists.txt create mode 100644 tdesu/tdesu/Makefile.am create mode 100644 tdesu/tdesu/sudlg.cpp create mode 100644 tdesu/tdesu/sudlg.h create mode 100644 tdesu/tdesu/tdesu.cpp create mode 100644 tdesu/tdesud/CMakeLists.txt create mode 100644 tdesu/tdesud/Makefile.am create mode 100644 tdesu/tdesud/handler.cpp create mode 100644 tdesu/tdesud/handler.h create mode 100644 tdesu/tdesud/lexer.cpp create mode 100644 tdesu/tdesud/lexer.h create mode 100644 tdesu/tdesud/repo.cpp create mode 100644 tdesu/tdesud/repo.h create mode 100644 tdesu/tdesud/secure.cpp create mode 100644 tdesu/tdesud/secure.h create mode 100644 tdesu/tdesud/tdesud.cpp diff --git a/doc/glossary/kdeprintingglossary.docbook b/doc/glossary/kdeprintingglossary.docbook deleted file mode 100644 index 6a0f35a34..000000000 --- a/doc/glossary/kdeprintingglossary.docbook +++ /dev/null @@ -1,1387 +0,0 @@ - - - - Printing - - - - ACLs - Abbreviation for Access - Control Lists; - ACLs are used to check for the access by a given - (authenticated) user. A first rough support for ACLs - for printing is available from &CUPS;; this will be refined - in future versions. - Authentication - - - - - AppSocket Protocol - AppSocket is a protocol for the transfer of - print data, also frequently called "Direct TCP/IP Printing". - &Hewlett-Packard; have taken AppSocket, added a few minor - extensions around it and been very successful in renaming - and marketing it under the brand "&HP; JetDirect"... - &HP; JetDirect Protocol - Direct TCP/IP Printing - - - - - APSfilter - APSfilter is used mainly in the context of "classical" - &UNIX; printing (BSD-style LPD). It is a sophisticated shell script, - disguised as an "all-in-one" filtering program. In reality, - APSfilter calls "real filters" to do the jobs needed. It sends - printjobs automatically through these other filters, based on an - initial file-type analysis of the printfile. - It is written and maintained by Andreas Klemm. - - It is - similar to Magicfilter and mostly uses Ghostscript for file conversions. - Some Linux Distributions (like &SuSE;) use APSfilter, others - Magicfilter (like &RedHat;), some have both for preference selection - (like *BSD). - - &CUPS; has no need for APSfilter, - as it runs its own file type recognition (based on &MIME; types) - and applies its own filtering logic. - Ghostscript - Magicfilter - &MIME;-Types - printcap - - - - - Authentication - Proving the identity of a certain person (maybe via username/password - or by means of a certificate) is often called authentication. Once you are - authenticated, you may or may not get access to a requested ressource, - possibly based on ACLs. - ACLs - - - - - Bi-directional communication - In the context of printing, a server or a host may receive additional - information sent back from the printer (status messages &etc;), either - upon a query or unrequested. AppSocket ( = &HP; JetDirect), &CUPS; and IPP - support bi-directional communication, LPR/LPD and BSD-style printing - do not... - AppSocket Protocol - &CUPS; - Direct TCP/IP Printing - &HP; JetDirect - IPP - LPR/LPD - - - - - BSD-style Printing - Generic term for different variants of the traditional &UNIX; - printing method. Its first version appeared in the early 70s on - BSD &UNIX; and was formally described in RFC 1179 only as late - as 1990. - - At the time when BSD "remote" printing was first designed, printers - were serially or otherwise directly connected devices to a host - (with the Internet hardly consisting of more than 100 nodes!); printers - used hole-punched, continuous paper, fed through by a tractor - mechanism, with simple rows of ASCII text mechanically hammered on to - the medium, drawn from a cardboard box beneath the table. It came out - like a zig-zag folded paper "snake". Remote printing consisted of a - neighboring host in the next room sending a file - asking for printout. - - How technology has changed! Printers generally use cut-sheet media, they have - built-in intelligence to compute the raster images of pages after pages - that are sent to them using one of the powerful page description - languages (PDL). Many are network nodes in their own right, - with CPU, RAM, a hard disk and their own Operation System, and - are hooked to a net with potentially millions of users... - - It is a vast proof of the flexible &UNIX; concept for doing things, - that it made "Line Printing" reliably work even under these modern - conditions. But time has finally come now to go for something new - -- the IPP. - - It is strong proof of the flexibility of &UNIX;; that "Line Printing" works - reliably, even under these modern conditions. But time has finally come now - to go for something new -- the IPP. - - - IPP - &CUPS; - LPR/LPD printing - - - - - &CUPS; - Abbreviation for Common - UNIX Printing - System; &CUPS; is the most modern &UNIX; and Linux - printing system, also providing cross-platform print services - to &Microsoft; &Windows; and Apple &MacOS; clients. Based on IPP, it does - away with all the pitfalls of old-style BSD printing, - providing authentication, encryption and ACLs, plus many more - features. At the same time it is backward-compatible enough - to serve all legacy clients that are not yet up to IPP, via - LPR/LPD (BSD-style). - - &CUPS; is able to control any &PostScript; printer by - utilizing the vendor-supplied PPD (PostScript Printer - Description file), targeted originally for &Microsoft; Windows NT - printing only. &kde; Printing is most powerful if based on - &CUPS;. - ACLs - Authentication - BSD-style printing - IPP - KDEPrint - LPR/LPD - PPD - - - - - - &CUPS;-FAQ - Currently only available in German (translation is on the way), - the &CUPS;-FAQ - is a valuable resource to answer many questions that anyone new to - &CUPS; printing might have at first. - - KDEPrint Handbook - - - - - - &CUPS;-O-Matic - &CUPS;-O-Matic was the first "Third Party" plugin for - the &CUPS; printing software. It is available on the Linuxprinting.org - website to provide an online PPD-generating service. - - - Together with the companion cupsomatic Perl-Script, - that needs to be installed as an additional &CUPS; backend, - it redirects output from the native pstops filter into - a chain of suitable Ghostscript filters. Upon completion, it - passes the resulting data back to a &CUPS; "backend" for sending - to the printer. - - In this way, &CUPS;-O-Matic enables support for any printer known to - have worked previously in a "classical" Ghostscript environment. - If no native &CUPS; support for that printer is in sight... &CUPS;-O-Matic - is now replaced by the more capable PPD-O-Matic. - cupsomatic - PPD-O-Matic - Foomatic - - - - - - cupsomatic - The Perl script cupsomatic (plus a working Perl installation - on your system) is needed to make any &CUPS;-O-Matic (or PPD-O-Matic) - generated PPD work with &CUPS;. It was written by Grant Taylor, author of - the Linux Printing HOWTO and Maintainer of the printer - database at the Linuxprinting.org website. - &CUPS;-O-Matic - Foomatic - cupsomatic - - - - - Daemon - Abbreviation for Disk - and execution - monitor; Daemons are present - on all &UNIX; systems to perform tasks independent of user - intervention. Readers more familiar with &Microsoft; &Windows; might - want to compare daemons and the tasks they are responsible - with "services". - - One example of a daemon present on most - legacy &UNIX; systems is the LPD (Line Printer Daemon); &CUPS; is - widely seen as the successor to LPD in the &UNIX; world and - it also operates through a daemon. - SPOOLing - - - - - Database, Linuxprinting.org - Already years ago, when Linux printing was still really difficult - (only command line printing was known to most Linux users, no device - specific print options were available for doing the jobs), Grant Taylor, - author of the "Linux Printing HOWTO", collected most of the available - information about printers, drivers and filters in his database. - - With the emerging - &CUPS; concept, extending the use of PPDs even to non-PostScript printers, - he realized the potential of this database: if one puts the different - datablobs (with content that could be described along the lines - "Which device prints with which Ghostscript or other - filter?", "How well?", and "What command line switches are available?") into - PPD-compatible files, he could have all the power of &CUPS; on top of - the traditional printer "drivers". - - This has now developed into a broader - concept, known as "Foomatic". Foomatic extends the capabilities - of spoolers other than &CUPS; (LPR/LPD, LPRng, PDQ, PPR) to a certain - degree ("stealing" some concepts from &CUPS;). The Linuxprinting - Database is not a Linux-only stop -- people running other &UNIX; - based OSes (like *BSD or &MacOS; X) will also find valuable information - and software there. - - Foomatic - Linuxprinting database - - - - - Direct TCP/IP Printing - This is a method that often uses TCP/IP port 9100 to connect - to the printer. It works with many modern network printers and has - a few advantages over LPR/LPD, as it is faster and provides some - "backchannel feedback data" from the printer to the host sending - the job. - AppSocket Protocol - &HP; JetDirect Protocol - - - - - - Drivers, Printer Drivers - The term "printer drivers", used in the same sense - as on the &Microsoft; &Windows; platform, is not entirely applicable - to a Linux or &UNIX; platform. A "driver" functionality - is supplied on &UNIX; by different modular components working - together. At the core of the printer drivers are "filters". Filters convert - print files from a given input format to another format that is acceptable - to the target printer. In many cases filters may be connected to a whole - filter "chain", where only the result of the last conversion is sent to the - printer. The actual transfer of the print data to the device is performed by - a "backend". - - Filter - PPDs - - - - - Easy Software Products - Mike Sweet's company, which has contributed a few substantial - software products towards the Free Software community; amongst - them the initial version of Gimp-Print, the EPM software packaging tool - and HTMLDOC - (used by the "Linux Documentation Project" to build the PDF versions - of the HOWTOs) -- but most importantly: &CUPS; (the 'Common &UNIX; Printing - System'). - - ESP finance themselves by selling a commercial version - of &CUPS;, called ESP PrintPro, - that includes some professional enhancements. - - &CUPS; - ESP PrintPro - ESP - Gimp-Print - - - - - Encryption - Encryption of confidential data is an all-important issue if - you transfer it over the Internet or even within intranets. - - Printing - via traditional protocols is not encrypted at all -- it is very easy - to tap and eavesdrop ⪚ into &PostScript; or PCL data transfered - over the wire. - - Therefore, in the design of IPP, provision was made for the easy - plugin of encryption mechanisms (which can be provided by the same - means as the encryption standards for HTTP traffic: SSL and TLS). - Authentication - &CUPS; - IPP - SSL - TLS - - - - - - Epson - Epson inkjets are among the best supported models by Free software - drivers, as the company was not necessarily as secretive about their - devices and handed technical specification documents to developers. - The excellent print quality achieved by Gimp-Print on the Stylus - series of printers can be attributed to this openness. - - They have also - contracted Easy Software Products to maintain an enhanced version - of Ghostscript ("ESP GhostScript") for improved support of their - printer portfolio. - - ESP Ghostscript - - - - - - Escape Sequences - The first ever printers printed ASCII data only. To - initiate a new line, or eject a page, they included special - command sequences, often carrying a leading [ESC]-character. - &HP; evolved this concept through its series of PCL language - editions until today, having now developed a full-blown - Page Description Language (PDL) from these humble beginnings. - - PCL - PDL - - - - - ESC/P - Abbreviation for Epson - Standard Codes for - Printers. Besides &PostScript; and PCL, Epson's ESC/P - printer language is one of the best known. - PCL - &PostScript; - hpgl - - - - - ESP - Abbreviation for Easy - Software Products; - the company that developed &CUPS; (the "Common &UNIX; Printing System"). - - Easy Software Products - &CUPS; - ESP PrintPro - - - - - - ESP Ghostscript - A Ghostscript version that is maintained by Easy Software - Products. It includes pre-compiled Gimp-Print drivers for - many inkjets (plus some other goodies). ESP Ghostscript - will produce photographic quality prints in many cases, especially - with the Epson Stylus model series. ESP Ghostscript is GPL-software. - - Easy Software Products - &CUPS; - ESP PrintPro - - - - - ESP PrintPro - This professional enhancement to &CUPS; (the "Common &UNIX; - Printing System") is sold by the developers - of &CUPS; complete with more than 2,300 printer drivers for several commercial - &UNIX; platforms. ESP PrintPro - is supposed to work "out of the box" with little or no configuration - for users or admins. ESP also sell support contracts for - &CUPS; and PrintPro. These sales help to feed the programmers who - develop the Free version of &CUPS;. - - &CUPS; - - - - - Filter - Filters, in general, are programs that take some input - data, work on it and pass it on as their output data. Filters - may or may not change the data. - - Filters in the context of printing, are programs that convert - a given file (destined for printing, but not suitable in the - format it is presently) into a printable format. Sometimes - whole "filter chains" have to be constructed to achieve the - goal, piping the output of one filter as the input to the next. - - Ghostscript - RIP - - - - - Foomatic - Foomatic started out as the wrapper name for a set of - different tools available from Linuxprinting.org - These tools aimed to make the usage of traditional - Ghostscript and other print filters easier for users and - extend the filters' capabilities by adding more command line - switches or explain the driver's execution data. - - Foomatic's different incarnations are &CUPS;-O-Matic, PPD-O-Matic, - PDQ-O-Matic, LPD-O-Matic, PPR-O-Matic, MF-O-Matic and - Direct-O-Matic. All of these allow the generation - of appropriate printer configuration files online, by simply - selection the suitable model and suggested (or alternate) driver - for that machine. - - More recently, Foomatic gravitated towards becoming a "meta-spooling" - system, that allows configuration of the underlying print subsystem - through a unified set of commands (however, this is much more - complicated than KDEPrint's &GUI; interface, which performs a similar - task with regards to different print subsystems). - &CUPS;-O-Matic - PPD-O-Matic - cupsomatic - - - - - Ghostscript - Ghostscript is a &PostScript; Raster Image Processor (RIP) in software, originally - developed by L. Peter Deutsch. There is always a GPL version - of Ghostscript available for free usage and distribution - (mostly 1 year old) while - the current version is commercially sold under another license. - - Ghostscript is widely used inside the Linux and &UNIX; world - for transforming &PostScript; into raster data suitable - for sending to non-&PostScript; devices. - &PostScript; - RIP - - - - - Gimp-Print - Contrary to its name, Gimp-Print is no longer - just the plugin to be used for printing from the popular - Gimp program -- its codebase can also serve to be compiled - into... - - *...a set of PPDs and associated filters that integrate seamlessly - into &CUPS;, supporting around 130 different printer models, providing - photographic output quality in many cases; - - - *...a Ghostscript filter that can be used with any other - program that needs a software-RIP; - - - *...a library that can be used by other software applications - in need of rasterization functions. - - - - - Lexmark Drivers - RIP - Ghostscript - - - - - &HP; - Abbreviation for Hewlett-Packard; - one of the first companies to distribute their own Linux printer - drivers. -- More recently, the Company has released their - "HPIJS" package of drivers, including source code and a Free license. - This is the first printer manufacturer to do so. HPIJS supports most - current models of HP Ink- and DeskJets. - - - - - - - &HP;/GL - Abbreviation for &HP; - Graphical Language; - a &HP; printer language mainly used for plotters; many CAD - (Computer Aided Design) software programs output &HP;/GL files for - printing. - ESC/P - PCL - &PostScript; - - - - - &HP; JetDirect Protocol - A term branded by &HP; to describe their implementation - of print data transfer to the printer via an otherwise "AppSocket" or - "Direct TCP/IP Printing" named protocol. - AppSocket Protocol - Direct TCP/IP Printing - - - - - IETF - Abbreviation for Internet - Engineering Task - Force; an assembly of Internet, software - and hardware experts that discuss - new networking technologies and very often arrive at - conclusions that are regarded by many as standards. "TCP/IP" - is the most famous example. - - - IETF standards, as well as - drafts, discussions, ideas and useful tutorials, are - put in writing in the famous series of "RFCs", which - are available to the public and included in most Linux and - BSD distributions. - IPP - PWG - RFC - - - - - IPP - Abbreviation for Internet - Printing Protocol; - defined in a series of RFCs accepted by the IETF with - status "proposed standard"; was designed - by the PWG. -- IPP is a completely new design for network printing, - but it utilizes a very well-known and proven method for the - actual data transfer: HTTP 1.1! By not "re-inventing the wheel", - and basing itself on an existing and robust Internet standard, - IPP is able to relatively easily bolt other HTTP-compatible standard - mechanisms into its framework: - - * Basic, Digest or Certificate authentication - mechanisms; - - * SSL or TLS for encryption of transferred - data; - - * LDAP for directory services (to publish - data on printers, device-options, drivers, costs or - also to the network; or to check for passwords while - performing authentication). - - - - - - &CUPS; - PWG - IETF - RFC - TLS - - - - - KDEPrint - The new printing functionality of &kde; since version 2.2 - consists of several modules that translate the features and settings - of different available print subsystems (&CUPS;, BSD-style LPR/LPD, RLPR...) - into nice &kde; desktop &GUI; windows and dialogs to ease their - usage. - - Most important for day-to-day usage is "kprinter", the new - &GUI; print command. -- Note: KDEPrint does not implement its own - spooling mechanism or its own &PostScript; processing; for this it - relies on the selected print subsystem - -- however it does add some functionality of its own on top of this - foundation... - - BSD-style printing - &CUPS; - kprinter - KDEPrint Handbook - - - - - - KDEPrint Handbook... - ...is the name of the reference document that describes KDEPrint - functions to users and administrators. You can load it into Konqueror by - typing "help:/tdeprint" into the address field. The KDEPrint website - is the resource for updates to this documentation, as well as PDF - versions suitable for printing it. It is authored and maintained by Kurt - Pfeifle. - - &CUPS;-FAQ - - - - - kprinter - kprinter is the new powerful - print utility that is natively used by all &kde; applications. - - Contrary to some common misconceptions, - kprinter is not a &CUPS;-only tool, - but supports different print subsystems. You can even switch - to a different print subsystem "on the fly", in between two jobs, - without re-configuration. Of course, due to the powerful - features of &CUPS;, kprinter is - best suited for use with a &CUPS; frontend. - - kprinter is the successor - to "qtcups", which is no longer being actively maintained. It has - inherited all the best features of qtcups and added several new ones. - - - MOST IMPORTANT: you can use kprinter - with all its features in all non-&kde; applications that allow - a customized print command, like gv, Acrobat Reader, Netscape, - Mozilla, Galeon, StarOffice, OpenOffice and all GNOME programs. - - kprinter can act as a "standalone" - utility, started from an X-Terminal or a "Mini-CLI" to - print many different files, from different folders, with different - formats, in one job and simultaneously, without the need to first open the - files in the applications! (File formats supported this way are &PostScript;, - PDF, International and ASCII Text, as well as many different popular graphic - formats, such as PNG, TIFF, JPEG, PNM, Sun RASTER, &etc;) - - QtCUPS - - - - - Lexmark - was one of the first companies to distribute their own Linux printer - drivers for some of their models. However, those drivers are binary only - (no source code available), and therefore cannot be used to integrate into - other Free printing software projects. - - - - - - Linuxprinting.org - Linuxprinting.org = not just for Linux; all &UNIX;-like OS-es, - like *BSD and commercial Unices may find useful printing - information on this site. This web site is the home for the interesting - Foomatic project, that strives to develop the "Meta Print Spool and Driver - Configuration Toolset" (being able to configure, through one common - interface, different print subsystems and their required drivers) with the - ability to transfer all queues, printers and configuration files seamlessly - to another spooler without new configuration effort. -- Also, they maintain - the Printing Database; a collection of driver and device information that - enables everybody to find the most current information about printer models, - and also generate online the configuration files for any - spooler/driver/device combo known to work with one of the common Linux or - &UNIX; print subsystems. - - Linuxprinting database - - - - - - Linuxprinting.org Database - ....Database containing printers and drivers that are suitable - for them... ...a lot of information and documentation to be found... ...it - is now also providing some tools and utilities for easing the integration - of those drivers into a given system... ...the "Foomatic" family - of utilities; being the toolset to make use of the database - for most of the commonly used print subsystems, for generating "on the fly" - working configurations for your printer model. - - Foomatic - - - - - LPR/LPD printing - LPR == some people translate Line - Printing Request, others: - Line Printer - Remote. - BSD-style printing - - - - - Magicfilter - Similarly to the APSfilter program, Magicfilter - provides automatic file type recognition functions and, base - on that, automatic file conversion to a printable format, - depending on the target printer. - APSfilter - - - - - &MIME;-Types - Abbreviation for Multipurpose (or - Multimedia) Internet Mail - Extensions; &MIME;-Types were first used to allow - the transport of binary data (like mail attachments containing - graphics) over mail connections that were normally only transmitting - ASCII characters: the data had to be encoded into an ASCII representation. - - Later this concept was extended to describe a data format in - a platform independent, but at the same time non-ambiguous, way. - From &Windows; everybody knows the .doc extensions for &Microsoft; Word files. - This is handled ambiguously on the &Windows; platform: .doc extensions are also - used for simple text files or for Adobe Framemaker files. And if a real - Word file is renamed with a different extension, it can no longer be - opened by the program. - - &MIME; typed files carry a recognition string with them, describing - their file format based on main_category/sub_category. - Inside IPP, print files are also described using the &MIME; type scheme. - &MIME; types are registered with the IANA (Internet Assigning Numbers - Association) to keep them unambiguous. - - &CUPS; has some &MIME; types of its own registered, like - application/vnd.cups-raster (for the &CUPS;-internal - raster image format). - - - &CUPS; - Easy Software Products - ESP PrintPro - Gimp-Print - - - - - PCL - Abbreviation for Printer - Control Language; - developed by &HP;. PCL started off in version 1 as a simple - command set for ASCII printing; now, - in its versions PCL6 and PCL-X, it is capable of printing graphics - and color -- but outside the &Microsoft; &Windows; realm and &HP-UX; - (&HP;'s own brand of &UNIX;), it is not commonly used... - ESC/P - &HP;/GL - PDL - &PostScript; - - - - - PDL - Abbreviation for Page - Description Language; - PDLs describe, in an abstract way, the graphical representation - of a page. - Before it is actually transferred into - toner or ink laid down on to paper, a PDL needs to be - "interpreted" first. In &UNIX;, the most important PDL - is &PostScript;. - - ESC/P - &HP;/GL - PCL - &PostScript; - - - - - Pixel - Abbreviation for Picture - Element; this term describes the smallest - part of a raster picture (either as printed on paper - or as displayed on a monitor by cathode rays or LCD elements). As - any graphical or image representation on those types of output - devices is composed of pixels, the values of "ppi" (pixel per inch) - and &dpi; (dots per inch) are one important parameter for the - overall quality and resolution of an image. - Filter - Ghostscript - &PostScript; - Raster - - - - - PJL - Abbreviation for Print - Job Language; - developed by &HP; to control and influence default and per-job - settings of a printer. It may not only be used - for &HP;'s own (PCL-)printers; also many &PostScript; - and other printers understand PJL commands sent to them - inside a print job, or in a separate signal. - PCL - - - - - &PostScript; - &PostScript; (often shortened to "PS") is the de-facto - standard in the &UNIX; world for printing files. It was - developed by Adobe and licensed to printer manufacturers - and software companies. - - As the &PostScript; specifications were - published by Adobe, there are also "Third Party" implementations - of &PostScript; generating and &PostScript; interpreting software - available (one of the best-known in the Free software world - being Ghostscript, a powerful PS-interpreter). - - ESC/P - &HP;/GL - PCL - PPD - - - - - PPD - Abbreviation for PostScript - Printer Description; - PPDs are ASCII files storing all information about the special - capabilities of a printer, plus definitions of the (PostScript- - or PJL-) commands to call on a certain capability (like print - duplexing). - - - As the explanation of the acronym reveals, PPDs were originally - only used for &PostScript; printers. &CUPS; has extended the - PPD concept to all types of printers. - - - PPDs for &PostScript; printers are provided by the printer - vendors. They can be used with &CUPS; and KDEPrint to have access - to the full features of any &PostScript; printer. The KDEPrint Team - recommends using a PPD originally intended for use with - &Microsoft; Windows NT. - - - PPDs for non-PostScript printers need a - companion "filter" to process the &PostScript; print files into - a format digestible for the non-PostScript target device. Those - PPD/filter combos are not (yet) available from the vendors. After - the initiative by the &CUPS; developers to utilize PPDs, the Free - Software community was creative enough to quickly come up with - support for most of the currently used printer models, through - PPDs and classical Ghostscript filters. But note: the printout - quality varies from "hi-quality photographic output" (using - Gimp-Print with most Epson inkjets) to "hardly readable" (using - Foomatic-enabled Ghostscript filters for models rated as - "paperweight" in the Linuxprinting.org database). - - &CUPS; - Linuxprinting.org - &PostScript; - - - - - PPD-O-Matic - PPD-O-Matic is a set of Perl scripts that run on the Linuxprinting.org - web server and can be used online to generate PPDs for any printer that is known - to print with Ghostscript. - - - These PPDs can be hooked up to &CUPS;/KDEPrint, as well as - used inside PPD-aware applications like StarOffice to determine all different - parameters of your printjobs. It is now recommended, in most cases, to - use "PPD-O-Matic" instead of the older &CUPS;-O-Matic. - - - To generate a PPD, go to the printer - database, select your printer model, follow - the link to show the available Ghostscript filters for that printer, select - one, click "generate" and finally save the file to your local system. - Be sure to read the instructions. Make sure that your local system - does indeed have Ghostscript and the filter, which you chose - before generating the PPD, installed. - - &PostScript; - &CUPS;-O-Matic - Linuxprinting.org - Foomatic - - - - - printcap - In BSD-style print systems, the "printcap" file holds - the configuration information; the printing daemon reads this file - to determine which printers are available, what filters are to be - user for each, where the spooling folder is located, - if there are banner pages to be used, and so on... - Some applications also depend on read access to the printcap - file, to obtain the names of available printers. - BSD-style printing - - - - - - Printer-MIB - Abbreviation for - Printer-Management - Information Base; the - Printer-MIB defines a set of parameters that are to be - stored inside the printer for access - through the network. This is useful if many (in some cases, literally - thousands) network printers are managed centrally - with the help of SNMP (Simple Network Management Protocol). - PWG - SNMP - - - - - PWG - Abbreviation for - Printer Working - Group; the PWG is a loose grouping of - representatives of the printer industry that has, in the past - years, developed different standards - in relation to network printing. These were later accepted by the - IETF as RFC standards, like the "Printer-MIB" and the IPP. - &PostScript; - IPP - Printer-MIB - SNMP - - - - - print:/ KIO Slave - You can use a syntax of "print:/..." to get quick access - to KDEPrint resources. Typing "print:/manager" as a Konqueror URL - address gives administrative access to KDEPrint. Konqueror uses &kde;'s - famous "KParts" technology to achieve that. - IO Slave - KParts - - - - - - Printer Database - . - Linuxprinting Database - - - - - Qt&CUPS; - Qt&CUPS; and KUPS were the predecessors of KDEPrint; they are now - deprecated and no longer maintained. What was good in qtcups is all inherited - by "kprinter", the new KDE print dialog (which is much improved over qtcups); - what you liked about kups is now all in the KDEPrint Manager (accessible - via the KDE Control Center or via the URL "print:/manager" from Konqueror) -- - with more functionality and less bugs... Its former developer, Michael Goffioul, is now - the developer of KDEPrint -- a very nice and productive guy and quick bug fixer... - - kprinter - - - - - Raster Image - Every picture on a physical medium - is composed of a pattern of discrete dots in different colors and (maybe) - sizes. This is called a "raster image". - - - This is as opposed to a "vector image" - where the graphic is described in terms of continuous curves, shades, - forms and filled areas, represented by mathematical formula. Vector images - normally have a smaller file size and may be scaled in size - without any loss of information and quality --- but they cannot be - output directly, but always have to be "rendered" or "rasterized" - first to the given resolution that the output device is capable of... - - - - The rasterization is done by a Raster Image Processor (RIP, - often the Ghostscript software) or some other filtering - instance. - Pixel - Ghostscript - &PostScript; - Filter - RIP - - - - - RIP - Abbreviation for - Raster Image - Process(or); if used in the context of - printing, "RIP" means a hardware or software - instance that converts &PostScript; (or other print formats - that are represented in one of the non-Raster PDLs) into a - raster image format in such a way that it is acceptable - for the "marking engine" of the printer. - - - &PostScript; printers - contain their own PostScript-RIPs. A RIP may or may not be located - inside a printer. - - - For many &UNIX; systems, Ghostscript is the package that provides - a "RIP in software", running on the host computer, and pre-digesting - the &PostScript; or other data to become ready to be sent to the - printing device (hence you may perceive a "grain of truth" in the - slogan "Ghostscript turns your printer into a &PostScript; - machine", which of course is not correct in the true sense of the - meaning). - Filter - Ghostscript - &PostScript; - PDL - Raster - - - - - - RLPR (Remote LPR) - Abbreviation for Remote - Line Printing - Request; this is a BSD-style printing system, - that needs no root privileges to be installed, and no "printcap" to - work: all parameters may be specified on the command - line. - - - RLPR comes in handy for many laptop users who are - working in frequently changing environments. This is because it - may be installed concurrently with every other printing - sub system, and allows a very flexible and quick - way to install a printer for direct access via LPR/LPD. - - - KDEPrint - has an "Add Printer Wizard" to make RLPR usage even easier. - The kprinter command allows switching to RLPR "on - the fly" at any time. - KDEPrint - kprinter - printcap - - - - - - SNMP - Abbreviation for Simple - Network Management - Protocol; SNMP is widely used to control - all types of network node (Hosts, Routers, Switches, Gateways, - Printers...) remotely. - PWG - Printer-MIB - - - - - SSL(3) encryption - Abbreviation for Secure - Socket Layer; - SSL is a proprietary encryption method for data - transfer over HTTP that was developed by Netscape. It is now being - replaced by an IETF standard named TLS. - - TLS - - - - - - SPOOLing - Abbreviation for Synchronous - Peripheral Operations - OnLine; - SPOOLing enables printing applications - (and users) to continue their work - as the job is being taken care of by a system daemon, - which stores the file at a temporary location until the printer is ready - to print. - Daemon - - - - - - TLS encryption - Abbreviation for Transport - Layer Security; - TLS is an encryption standard for - data transfered over HTTP 1.1; it is defined in RFC 2246; - although based on the former SSL development - (from Netscape) it is not fully compatible with it. - - SSL(3) - - - - - - System V-style printing - This is the second flavor of traditional &UNIX; - printing (as opposed to BSD-style printing). It uses - a different command set (lp, lpadmin,...) to BSD, - but is not fundamentally different from it. However, the - gap between the two is big enough to make the two - incompatible, so that a BSD-client cannot simply print - to a System V style print server without additional - tweaking... IPP is supposed to resolve this weakness - and more. - - BSD-style printing - IPP - - - - - TurboPrint - Shareware software providing photo quality printing for many - inkjet printers. It is useful if you are unable to find a driver for your - printer and may be hooked into either a traditional Ghostscript system - or a modern &CUPS; system. - Gimp-Print - - - - - XPP - Abbreviation for X - Printing Panel; - XPP was the first Free - graphical print command for &CUPS;, written by Till Kamppeter, - and in some ways a model for the "kprinter" utility in &kde;. - - - - - - - diff --git a/doc/glossary/tdeprintingglossary.docbook b/doc/glossary/tdeprintingglossary.docbook new file mode 100644 index 000000000..6a0f35a34 --- /dev/null +++ b/doc/glossary/tdeprintingglossary.docbook @@ -0,0 +1,1387 @@ + + + + Printing + + + + ACLs + Abbreviation for Access + Control Lists; + ACLs are used to check for the access by a given + (authenticated) user. A first rough support for ACLs + for printing is available from &CUPS;; this will be refined + in future versions. + Authentication + + + + + AppSocket Protocol + AppSocket is a protocol for the transfer of + print data, also frequently called "Direct TCP/IP Printing". + &Hewlett-Packard; have taken AppSocket, added a few minor + extensions around it and been very successful in renaming + and marketing it under the brand "&HP; JetDirect"... + &HP; JetDirect Protocol + Direct TCP/IP Printing + + + + + APSfilter + APSfilter is used mainly in the context of "classical" + &UNIX; printing (BSD-style LPD). It is a sophisticated shell script, + disguised as an "all-in-one" filtering program. In reality, + APSfilter calls "real filters" to do the jobs needed. It sends + printjobs automatically through these other filters, based on an + initial file-type analysis of the printfile. + It is written and maintained by Andreas Klemm. + + It is + similar to Magicfilter and mostly uses Ghostscript for file conversions. + Some Linux Distributions (like &SuSE;) use APSfilter, others + Magicfilter (like &RedHat;), some have both for preference selection + (like *BSD). + + &CUPS; has no need for APSfilter, + as it runs its own file type recognition (based on &MIME; types) + and applies its own filtering logic. + Ghostscript + Magicfilter + &MIME;-Types + printcap + + + + + Authentication + Proving the identity of a certain person (maybe via username/password + or by means of a certificate) is often called authentication. Once you are + authenticated, you may or may not get access to a requested ressource, + possibly based on ACLs. + ACLs + + + + + Bi-directional communication + In the context of printing, a server or a host may receive additional + information sent back from the printer (status messages &etc;), either + upon a query or unrequested. AppSocket ( = &HP; JetDirect), &CUPS; and IPP + support bi-directional communication, LPR/LPD and BSD-style printing + do not... + AppSocket Protocol + &CUPS; + Direct TCP/IP Printing + &HP; JetDirect + IPP + LPR/LPD + + + + + BSD-style Printing + Generic term for different variants of the traditional &UNIX; + printing method. Its first version appeared in the early 70s on + BSD &UNIX; and was formally described in RFC 1179 only as late + as 1990. + + At the time when BSD "remote" printing was first designed, printers + were serially or otherwise directly connected devices to a host + (with the Internet hardly consisting of more than 100 nodes!); printers + used hole-punched, continuous paper, fed through by a tractor + mechanism, with simple rows of ASCII text mechanically hammered on to + the medium, drawn from a cardboard box beneath the table. It came out + like a zig-zag folded paper "snake". Remote printing consisted of a + neighboring host in the next room sending a file + asking for printout. + + How technology has changed! Printers generally use cut-sheet media, they have + built-in intelligence to compute the raster images of pages after pages + that are sent to them using one of the powerful page description + languages (PDL). Many are network nodes in their own right, + with CPU, RAM, a hard disk and their own Operation System, and + are hooked to a net with potentially millions of users... + + It is a vast proof of the flexible &UNIX; concept for doing things, + that it made "Line Printing" reliably work even under these modern + conditions. But time has finally come now to go for something new + -- the IPP. + + It is strong proof of the flexibility of &UNIX;; that "Line Printing" works + reliably, even under these modern conditions. But time has finally come now + to go for something new -- the IPP. + + + IPP + &CUPS; + LPR/LPD printing + + + + + &CUPS; + Abbreviation for Common + UNIX Printing + System; &CUPS; is the most modern &UNIX; and Linux + printing system, also providing cross-platform print services + to &Microsoft; &Windows; and Apple &MacOS; clients. Based on IPP, it does + away with all the pitfalls of old-style BSD printing, + providing authentication, encryption and ACLs, plus many more + features. At the same time it is backward-compatible enough + to serve all legacy clients that are not yet up to IPP, via + LPR/LPD (BSD-style). + + &CUPS; is able to control any &PostScript; printer by + utilizing the vendor-supplied PPD (PostScript Printer + Description file), targeted originally for &Microsoft; Windows NT + printing only. &kde; Printing is most powerful if based on + &CUPS;. + ACLs + Authentication + BSD-style printing + IPP + KDEPrint + LPR/LPD + PPD + + + + + + &CUPS;-FAQ + Currently only available in German (translation is on the way), + the &CUPS;-FAQ + is a valuable resource to answer many questions that anyone new to + &CUPS; printing might have at first. + + KDEPrint Handbook + + + + + + &CUPS;-O-Matic + &CUPS;-O-Matic was the first "Third Party" plugin for + the &CUPS; printing software. It is available on the Linuxprinting.org + website to provide an online PPD-generating service. + + + Together with the companion cupsomatic Perl-Script, + that needs to be installed as an additional &CUPS; backend, + it redirects output from the native pstops filter into + a chain of suitable Ghostscript filters. Upon completion, it + passes the resulting data back to a &CUPS; "backend" for sending + to the printer. + + In this way, &CUPS;-O-Matic enables support for any printer known to + have worked previously in a "classical" Ghostscript environment. + If no native &CUPS; support for that printer is in sight... &CUPS;-O-Matic + is now replaced by the more capable PPD-O-Matic. + cupsomatic + PPD-O-Matic + Foomatic + + + + + + cupsomatic + The Perl script cupsomatic (plus a working Perl installation + on your system) is needed to make any &CUPS;-O-Matic (or PPD-O-Matic) + generated PPD work with &CUPS;. It was written by Grant Taylor, author of + the Linux Printing HOWTO and Maintainer of the printer + database at the Linuxprinting.org website. + &CUPS;-O-Matic + Foomatic + cupsomatic + + + + + Daemon + Abbreviation for Disk + and execution + monitor; Daemons are present + on all &UNIX; systems to perform tasks independent of user + intervention. Readers more familiar with &Microsoft; &Windows; might + want to compare daemons and the tasks they are responsible + with "services". + + One example of a daemon present on most + legacy &UNIX; systems is the LPD (Line Printer Daemon); &CUPS; is + widely seen as the successor to LPD in the &UNIX; world and + it also operates through a daemon. + SPOOLing + + + + + Database, Linuxprinting.org + Already years ago, when Linux printing was still really difficult + (only command line printing was known to most Linux users, no device + specific print options were available for doing the jobs), Grant Taylor, + author of the "Linux Printing HOWTO", collected most of the available + information about printers, drivers and filters in his database. + + With the emerging + &CUPS; concept, extending the use of PPDs even to non-PostScript printers, + he realized the potential of this database: if one puts the different + datablobs (with content that could be described along the lines + "Which device prints with which Ghostscript or other + filter?", "How well?", and "What command line switches are available?") into + PPD-compatible files, he could have all the power of &CUPS; on top of + the traditional printer "drivers". + + This has now developed into a broader + concept, known as "Foomatic". Foomatic extends the capabilities + of spoolers other than &CUPS; (LPR/LPD, LPRng, PDQ, PPR) to a certain + degree ("stealing" some concepts from &CUPS;). The Linuxprinting + Database is not a Linux-only stop -- people running other &UNIX; + based OSes (like *BSD or &MacOS; X) will also find valuable information + and software there. + + Foomatic + Linuxprinting database + + + + + Direct TCP/IP Printing + This is a method that often uses TCP/IP port 9100 to connect + to the printer. It works with many modern network printers and has + a few advantages over LPR/LPD, as it is faster and provides some + "backchannel feedback data" from the printer to the host sending + the job. + AppSocket Protocol + &HP; JetDirect Protocol + + + + + + Drivers, Printer Drivers + The term "printer drivers", used in the same sense + as on the &Microsoft; &Windows; platform, is not entirely applicable + to a Linux or &UNIX; platform. A "driver" functionality + is supplied on &UNIX; by different modular components working + together. At the core of the printer drivers are "filters". Filters convert + print files from a given input format to another format that is acceptable + to the target printer. In many cases filters may be connected to a whole + filter "chain", where only the result of the last conversion is sent to the + printer. The actual transfer of the print data to the device is performed by + a "backend". + + Filter + PPDs + + + + + Easy Software Products + Mike Sweet's company, which has contributed a few substantial + software products towards the Free Software community; amongst + them the initial version of Gimp-Print, the EPM software packaging tool + and HTMLDOC + (used by the "Linux Documentation Project" to build the PDF versions + of the HOWTOs) -- but most importantly: &CUPS; (the 'Common &UNIX; Printing + System'). + + ESP finance themselves by selling a commercial version + of &CUPS;, called ESP PrintPro, + that includes some professional enhancements. + + &CUPS; + ESP PrintPro + ESP + Gimp-Print + + + + + Encryption + Encryption of confidential data is an all-important issue if + you transfer it over the Internet or even within intranets. + + Printing + via traditional protocols is not encrypted at all -- it is very easy + to tap and eavesdrop ⪚ into &PostScript; or PCL data transfered + over the wire. + + Therefore, in the design of IPP, provision was made for the easy + plugin of encryption mechanisms (which can be provided by the same + means as the encryption standards for HTTP traffic: SSL and TLS). + Authentication + &CUPS; + IPP + SSL + TLS + + + + + + Epson + Epson inkjets are among the best supported models by Free software + drivers, as the company was not necessarily as secretive about their + devices and handed technical specification documents to developers. + The excellent print quality achieved by Gimp-Print on the Stylus + series of printers can be attributed to this openness. + + They have also + contracted Easy Software Products to maintain an enhanced version + of Ghostscript ("ESP GhostScript") for improved support of their + printer portfolio. + + ESP Ghostscript + + + + + + Escape Sequences + The first ever printers printed ASCII data only. To + initiate a new line, or eject a page, they included special + command sequences, often carrying a leading [ESC]-character. + &HP; evolved this concept through its series of PCL language + editions until today, having now developed a full-blown + Page Description Language (PDL) from these humble beginnings. + + PCL + PDL + + + + + ESC/P + Abbreviation for Epson + Standard Codes for + Printers. Besides &PostScript; and PCL, Epson's ESC/P + printer language is one of the best known. + PCL + &PostScript; + hpgl + + + + + ESP + Abbreviation for Easy + Software Products; + the company that developed &CUPS; (the "Common &UNIX; Printing System"). + + Easy Software Products + &CUPS; + ESP PrintPro + + + + + + ESP Ghostscript + A Ghostscript version that is maintained by Easy Software + Products. It includes pre-compiled Gimp-Print drivers for + many inkjets (plus some other goodies). ESP Ghostscript + will produce photographic quality prints in many cases, especially + with the Epson Stylus model series. ESP Ghostscript is GPL-software. + + Easy Software Products + &CUPS; + ESP PrintPro + + + + + ESP PrintPro + This professional enhancement to &CUPS; (the "Common &UNIX; + Printing System") is sold by the developers + of &CUPS; complete with more than 2,300 printer drivers for several commercial + &UNIX; platforms. ESP PrintPro + is supposed to work "out of the box" with little or no configuration + for users or admins. ESP also sell support contracts for + &CUPS; and PrintPro. These sales help to feed the programmers who + develop the Free version of &CUPS;. + + &CUPS; + + + + + Filter + Filters, in general, are programs that take some input + data, work on it and pass it on as their output data. Filters + may or may not change the data. + + Filters in the context of printing, are programs that convert + a given file (destined for printing, but not suitable in the + format it is presently) into a printable format. Sometimes + whole "filter chains" have to be constructed to achieve the + goal, piping the output of one filter as the input to the next. + + Ghostscript + RIP + + + + + Foomatic + Foomatic started out as the wrapper name for a set of + different tools available from Linuxprinting.org + These tools aimed to make the usage of traditional + Ghostscript and other print filters easier for users and + extend the filters' capabilities by adding more command line + switches or explain the driver's execution data. + + Foomatic's different incarnations are &CUPS;-O-Matic, PPD-O-Matic, + PDQ-O-Matic, LPD-O-Matic, PPR-O-Matic, MF-O-Matic and + Direct-O-Matic. All of these allow the generation + of appropriate printer configuration files online, by simply + selection the suitable model and suggested (or alternate) driver + for that machine. + + More recently, Foomatic gravitated towards becoming a "meta-spooling" + system, that allows configuration of the underlying print subsystem + through a unified set of commands (however, this is much more + complicated than KDEPrint's &GUI; interface, which performs a similar + task with regards to different print subsystems). + &CUPS;-O-Matic + PPD-O-Matic + cupsomatic + + + + + Ghostscript + Ghostscript is a &PostScript; Raster Image Processor (RIP) in software, originally + developed by L. Peter Deutsch. There is always a GPL version + of Ghostscript available for free usage and distribution + (mostly 1 year old) while + the current version is commercially sold under another license. + + Ghostscript is widely used inside the Linux and &UNIX; world + for transforming &PostScript; into raster data suitable + for sending to non-&PostScript; devices. + &PostScript; + RIP + + + + + Gimp-Print + Contrary to its name, Gimp-Print is no longer + just the plugin to be used for printing from the popular + Gimp program -- its codebase can also serve to be compiled + into... + + *...a set of PPDs and associated filters that integrate seamlessly + into &CUPS;, supporting around 130 different printer models, providing + photographic output quality in many cases; + + + *...a Ghostscript filter that can be used with any other + program that needs a software-RIP; + + + *...a library that can be used by other software applications + in need of rasterization functions. + + + + + Lexmark Drivers + RIP + Ghostscript + + + + + &HP; + Abbreviation for Hewlett-Packard; + one of the first companies to distribute their own Linux printer + drivers. -- More recently, the Company has released their + "HPIJS" package of drivers, including source code and a Free license. + This is the first printer manufacturer to do so. HPIJS supports most + current models of HP Ink- and DeskJets. + + + + + + + &HP;/GL + Abbreviation for &HP; + Graphical Language; + a &HP; printer language mainly used for plotters; many CAD + (Computer Aided Design) software programs output &HP;/GL files for + printing. + ESC/P + PCL + &PostScript; + + + + + &HP; JetDirect Protocol + A term branded by &HP; to describe their implementation + of print data transfer to the printer via an otherwise "AppSocket" or + "Direct TCP/IP Printing" named protocol. + AppSocket Protocol + Direct TCP/IP Printing + + + + + IETF + Abbreviation for Internet + Engineering Task + Force; an assembly of Internet, software + and hardware experts that discuss + new networking technologies and very often arrive at + conclusions that are regarded by many as standards. "TCP/IP" + is the most famous example. + + + IETF standards, as well as + drafts, discussions, ideas and useful tutorials, are + put in writing in the famous series of "RFCs", which + are available to the public and included in most Linux and + BSD distributions. + IPP + PWG + RFC + + + + + IPP + Abbreviation for Internet + Printing Protocol; + defined in a series of RFCs accepted by the IETF with + status "proposed standard"; was designed + by the PWG. -- IPP is a completely new design for network printing, + but it utilizes a very well-known and proven method for the + actual data transfer: HTTP 1.1! By not "re-inventing the wheel", + and basing itself on an existing and robust Internet standard, + IPP is able to relatively easily bolt other HTTP-compatible standard + mechanisms into its framework: + + * Basic, Digest or Certificate authentication + mechanisms; + + * SSL or TLS for encryption of transferred + data; + + * LDAP for directory services (to publish + data on printers, device-options, drivers, costs or + also to the network; or to check for passwords while + performing authentication). + + + + + + &CUPS; + PWG + IETF + RFC + TLS + + + + + KDEPrint + The new printing functionality of &kde; since version 2.2 + consists of several modules that translate the features and settings + of different available print subsystems (&CUPS;, BSD-style LPR/LPD, RLPR...) + into nice &kde; desktop &GUI; windows and dialogs to ease their + usage. + + Most important for day-to-day usage is "kprinter", the new + &GUI; print command. -- Note: KDEPrint does not implement its own + spooling mechanism or its own &PostScript; processing; for this it + relies on the selected print subsystem + -- however it does add some functionality of its own on top of this + foundation... + + BSD-style printing + &CUPS; + kprinter + KDEPrint Handbook + + + + + + KDEPrint Handbook... + ...is the name of the reference document that describes KDEPrint + functions to users and administrators. You can load it into Konqueror by + typing "help:/tdeprint" into the address field. The KDEPrint website + is the resource for updates to this documentation, as well as PDF + versions suitable for printing it. It is authored and maintained by Kurt + Pfeifle. + + &CUPS;-FAQ + + + + + kprinter + kprinter is the new powerful + print utility that is natively used by all &kde; applications. + + Contrary to some common misconceptions, + kprinter is not a &CUPS;-only tool, + but supports different print subsystems. You can even switch + to a different print subsystem "on the fly", in between two jobs, + without re-configuration. Of course, due to the powerful + features of &CUPS;, kprinter is + best suited for use with a &CUPS; frontend. + + kprinter is the successor + to "qtcups", which is no longer being actively maintained. It has + inherited all the best features of qtcups and added several new ones. + + + MOST IMPORTANT: you can use kprinter + with all its features in all non-&kde; applications that allow + a customized print command, like gv, Acrobat Reader, Netscape, + Mozilla, Galeon, StarOffice, OpenOffice and all GNOME programs. + + kprinter can act as a "standalone" + utility, started from an X-Terminal or a "Mini-CLI" to + print many different files, from different folders, with different + formats, in one job and simultaneously, without the need to first open the + files in the applications! (File formats supported this way are &PostScript;, + PDF, International and ASCII Text, as well as many different popular graphic + formats, such as PNG, TIFF, JPEG, PNM, Sun RASTER, &etc;) + + QtCUPS + + + + + Lexmark + was one of the first companies to distribute their own Linux printer + drivers for some of their models. However, those drivers are binary only + (no source code available), and therefore cannot be used to integrate into + other Free printing software projects. + + + + + + Linuxprinting.org + Linuxprinting.org = not just for Linux; all &UNIX;-like OS-es, + like *BSD and commercial Unices may find useful printing + information on this site. This web site is the home for the interesting + Foomatic project, that strives to develop the "Meta Print Spool and Driver + Configuration Toolset" (being able to configure, through one common + interface, different print subsystems and their required drivers) with the + ability to transfer all queues, printers and configuration files seamlessly + to another spooler without new configuration effort. -- Also, they maintain + the Printing Database; a collection of driver and device information that + enables everybody to find the most current information about printer models, + and also generate online the configuration files for any + spooler/driver/device combo known to work with one of the common Linux or + &UNIX; print subsystems. + + Linuxprinting database + + + + + + Linuxprinting.org Database + ....Database containing printers and drivers that are suitable + for them... ...a lot of information and documentation to be found... ...it + is now also providing some tools and utilities for easing the integration + of those drivers into a given system... ...the "Foomatic" family + of utilities; being the toolset to make use of the database + for most of the commonly used print subsystems, for generating "on the fly" + working configurations for your printer model. + + Foomatic + + + + + LPR/LPD printing + LPR == some people translate Line + Printing Request, others: + Line Printer + Remote. + BSD-style printing + + + + + Magicfilter + Similarly to the APSfilter program, Magicfilter + provides automatic file type recognition functions and, base + on that, automatic file conversion to a printable format, + depending on the target printer. + APSfilter + + + + + &MIME;-Types + Abbreviation for Multipurpose (or + Multimedia) Internet Mail + Extensions; &MIME;-Types were first used to allow + the transport of binary data (like mail attachments containing + graphics) over mail connections that were normally only transmitting + ASCII characters: the data had to be encoded into an ASCII representation. + + Later this concept was extended to describe a data format in + a platform independent, but at the same time non-ambiguous, way. + From &Windows; everybody knows the .doc extensions for &Microsoft; Word files. + This is handled ambiguously on the &Windows; platform: .doc extensions are also + used for simple text files or for Adobe Framemaker files. And if a real + Word file is renamed with a different extension, it can no longer be + opened by the program. + + &MIME; typed files carry a recognition string with them, describing + their file format based on main_category/sub_category. + Inside IPP, print files are also described using the &MIME; type scheme. + &MIME; types are registered with the IANA (Internet Assigning Numbers + Association) to keep them unambiguous. + + &CUPS; has some &MIME; types of its own registered, like + application/vnd.cups-raster (for the &CUPS;-internal + raster image format). + + + &CUPS; + Easy Software Products + ESP PrintPro + Gimp-Print + + + + + PCL + Abbreviation for Printer + Control Language; + developed by &HP;. PCL started off in version 1 as a simple + command set for ASCII printing; now, + in its versions PCL6 and PCL-X, it is capable of printing graphics + and color -- but outside the &Microsoft; &Windows; realm and &HP-UX; + (&HP;'s own brand of &UNIX;), it is not commonly used... + ESC/P + &HP;/GL + PDL + &PostScript; + + + + + PDL + Abbreviation for Page + Description Language; + PDLs describe, in an abstract way, the graphical representation + of a page. - Before it is actually transferred into + toner or ink laid down on to paper, a PDL needs to be + "interpreted" first. In &UNIX;, the most important PDL + is &PostScript;. + + ESC/P + &HP;/GL + PCL + &PostScript; + + + + + Pixel + Abbreviation for Picture + Element; this term describes the smallest + part of a raster picture (either as printed on paper + or as displayed on a monitor by cathode rays or LCD elements). As + any graphical or image representation on those types of output + devices is composed of pixels, the values of "ppi" (pixel per inch) + and &dpi; (dots per inch) are one important parameter for the + overall quality and resolution of an image. + Filter + Ghostscript + &PostScript; + Raster + + + + + PJL + Abbreviation for Print + Job Language; + developed by &HP; to control and influence default and per-job + settings of a printer. It may not only be used + for &HP;'s own (PCL-)printers; also many &PostScript; + and other printers understand PJL commands sent to them + inside a print job, or in a separate signal. + PCL + + + + + &PostScript; + &PostScript; (often shortened to "PS") is the de-facto + standard in the &UNIX; world for printing files. It was + developed by Adobe and licensed to printer manufacturers + and software companies. + + As the &PostScript; specifications were + published by Adobe, there are also "Third Party" implementations + of &PostScript; generating and &PostScript; interpreting software + available (one of the best-known in the Free software world + being Ghostscript, a powerful PS-interpreter). + + ESC/P + &HP;/GL + PCL + PPD + + + + + PPD + Abbreviation for PostScript + Printer Description; + PPDs are ASCII files storing all information about the special + capabilities of a printer, plus definitions of the (PostScript- + or PJL-) commands to call on a certain capability (like print + duplexing). + + + As the explanation of the acronym reveals, PPDs were originally + only used for &PostScript; printers. &CUPS; has extended the + PPD concept to all types of printers. + + + PPDs for &PostScript; printers are provided by the printer + vendors. They can be used with &CUPS; and KDEPrint to have access + to the full features of any &PostScript; printer. The KDEPrint Team + recommends using a PPD originally intended for use with + &Microsoft; Windows NT. + + + PPDs for non-PostScript printers need a + companion "filter" to process the &PostScript; print files into + a format digestible for the non-PostScript target device. Those + PPD/filter combos are not (yet) available from the vendors. After + the initiative by the &CUPS; developers to utilize PPDs, the Free + Software community was creative enough to quickly come up with + support for most of the currently used printer models, through + PPDs and classical Ghostscript filters. But note: the printout + quality varies from "hi-quality photographic output" (using + Gimp-Print with most Epson inkjets) to "hardly readable" (using + Foomatic-enabled Ghostscript filters for models rated as + "paperweight" in the Linuxprinting.org database). + + &CUPS; + Linuxprinting.org + &PostScript; + + + + + PPD-O-Matic + PPD-O-Matic is a set of Perl scripts that run on the Linuxprinting.org + web server and can be used online to generate PPDs for any printer that is known + to print with Ghostscript. + + + These PPDs can be hooked up to &CUPS;/KDEPrint, as well as + used inside PPD-aware applications like StarOffice to determine all different + parameters of your printjobs. It is now recommended, in most cases, to + use "PPD-O-Matic" instead of the older &CUPS;-O-Matic. + + + To generate a PPD, go to the printer + database, select your printer model, follow + the link to show the available Ghostscript filters for that printer, select + one, click "generate" and finally save the file to your local system. + Be sure to read the instructions. Make sure that your local system + does indeed have Ghostscript and the filter, which you chose + before generating the PPD, installed. + + &PostScript; + &CUPS;-O-Matic + Linuxprinting.org + Foomatic + + + + + printcap + In BSD-style print systems, the "printcap" file holds + the configuration information; the printing daemon reads this file + to determine which printers are available, what filters are to be + user for each, where the spooling folder is located, + if there are banner pages to be used, and so on... + Some applications also depend on read access to the printcap + file, to obtain the names of available printers. + BSD-style printing + + + + + + Printer-MIB + Abbreviation for + Printer-Management + Information Base; the + Printer-MIB defines a set of parameters that are to be + stored inside the printer for access + through the network. This is useful if many (in some cases, literally + thousands) network printers are managed centrally + with the help of SNMP (Simple Network Management Protocol). + PWG + SNMP + + + + + PWG + Abbreviation for + Printer Working + Group; the PWG is a loose grouping of + representatives of the printer industry that has, in the past + years, developed different standards + in relation to network printing. These were later accepted by the + IETF as RFC standards, like the "Printer-MIB" and the IPP. + &PostScript; + IPP + Printer-MIB + SNMP + + + + + print:/ KIO Slave + You can use a syntax of "print:/..." to get quick access + to KDEPrint resources. Typing "print:/manager" as a Konqueror URL + address gives administrative access to KDEPrint. Konqueror uses &kde;'s + famous "KParts" technology to achieve that. + IO Slave + KParts + + + + + + Printer Database + . + Linuxprinting Database + + + + + Qt&CUPS; + Qt&CUPS; and KUPS were the predecessors of KDEPrint; they are now + deprecated and no longer maintained. What was good in qtcups is all inherited + by "kprinter", the new KDE print dialog (which is much improved over qtcups); + what you liked about kups is now all in the KDEPrint Manager (accessible + via the KDE Control Center or via the URL "print:/manager" from Konqueror) -- + with more functionality and less bugs... Its former developer, Michael Goffioul, is now + the developer of KDEPrint -- a very nice and productive guy and quick bug fixer... + + kprinter + + + + + Raster Image + Every picture on a physical medium + is composed of a pattern of discrete dots in different colors and (maybe) + sizes. This is called a "raster image". + + + This is as opposed to a "vector image" + where the graphic is described in terms of continuous curves, shades, + forms and filled areas, represented by mathematical formula. Vector images + normally have a smaller file size and may be scaled in size + without any loss of information and quality --- but they cannot be + output directly, but always have to be "rendered" or "rasterized" + first to the given resolution that the output device is capable of... + + + + The rasterization is done by a Raster Image Processor (RIP, + often the Ghostscript software) or some other filtering + instance. + Pixel + Ghostscript + &PostScript; + Filter + RIP + + + + + RIP + Abbreviation for + Raster Image + Process(or); if used in the context of + printing, "RIP" means a hardware or software + instance that converts &PostScript; (or other print formats + that are represented in one of the non-Raster PDLs) into a + raster image format in such a way that it is acceptable + for the "marking engine" of the printer. + + + &PostScript; printers + contain their own PostScript-RIPs. A RIP may or may not be located + inside a printer. + + + For many &UNIX; systems, Ghostscript is the package that provides + a "RIP in software", running on the host computer, and pre-digesting + the &PostScript; or other data to become ready to be sent to the + printing device (hence you may perceive a "grain of truth" in the + slogan "Ghostscript turns your printer into a &PostScript; + machine", which of course is not correct in the true sense of the + meaning). + Filter + Ghostscript + &PostScript; + PDL + Raster + + + + + + RLPR (Remote LPR) + Abbreviation for Remote + Line Printing + Request; this is a BSD-style printing system, + that needs no root privileges to be installed, and no "printcap" to + work: all parameters may be specified on the command + line. + + + RLPR comes in handy for many laptop users who are + working in frequently changing environments. This is because it + may be installed concurrently with every other printing + sub system, and allows a very flexible and quick + way to install a printer for direct access via LPR/LPD. + + + KDEPrint + has an "Add Printer Wizard" to make RLPR usage even easier. + The kprinter command allows switching to RLPR "on + the fly" at any time. + KDEPrint + kprinter + printcap + + + + + + SNMP + Abbreviation for Simple + Network Management + Protocol; SNMP is widely used to control + all types of network node (Hosts, Routers, Switches, Gateways, + Printers...) remotely. + PWG + Printer-MIB + + + + + SSL(3) encryption + Abbreviation for Secure + Socket Layer; + SSL is a proprietary encryption method for data + transfer over HTTP that was developed by Netscape. It is now being + replaced by an IETF standard named TLS. + + TLS + + + + + + SPOOLing + Abbreviation for Synchronous + Peripheral Operations + OnLine; + SPOOLing enables printing applications + (and users) to continue their work + as the job is being taken care of by a system daemon, + which stores the file at a temporary location until the printer is ready + to print. + Daemon + + + + + + TLS encryption + Abbreviation for Transport + Layer Security; + TLS is an encryption standard for + data transfered over HTTP 1.1; it is defined in RFC 2246; + although based on the former SSL development + (from Netscape) it is not fully compatible with it. + + SSL(3) + + + + + + System V-style printing + This is the second flavor of traditional &UNIX; + printing (as opposed to BSD-style printing). It uses + a different command set (lp, lpadmin,...) to BSD, + but is not fundamentally different from it. However, the + gap between the two is big enough to make the two + incompatible, so that a BSD-client cannot simply print + to a System V style print server without additional + tweaking... IPP is supposed to resolve this weakness + and more. + + BSD-style printing + IPP + + + + + TurboPrint + Shareware software providing photo quality printing for many + inkjet printers. It is useful if you are unable to find a driver for your + printer and may be hooked into either a traditional Ghostscript system + or a modern &CUPS; system. + Gimp-Print + + + + + XPP + Abbreviation for X + Printing Panel; + XPP was the first Free + graphical print command for &CUPS;, written by Till Kamppeter, + and in some ways a model for the "kprinter" utility in &kde;. + + + + + + + diff --git a/doc/kdeprint/CMakeLists.txt b/doc/kdeprint/CMakeLists.txt deleted file mode 100644 index 3a1f95d9e..000000000 --- a/doc/kdeprint/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -tde_create_handbook( DESTINATION tdeprint ) diff --git a/doc/kdeprint/Makefile.am b/doc/kdeprint/Makefile.am deleted file mode 100644 index e786da562..000000000 --- a/doc/kdeprint/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ - -KDE_LANG = en -KDE_DOCS = AUTO diff --git a/doc/kdeprint/add-printer-wiz.docbook b/doc/kdeprint/add-printer-wiz.docbook deleted file mode 100644 index 28d5791d2..000000000 --- a/doc/kdeprint/add-printer-wiz.docbook +++ /dev/null @@ -1,290 +0,0 @@ - -The <quote>Add Printer Wizard</quote> for &CUPS; - -Clicking on the leftmost icon on the toolbar - - in the upper part of the window starts the -Add Printer Wizard. - -This wizard steps you through various screens to install a new -printer. At present this Wizard works for &CUPS; and the -RLPR environment module. The number of steps depend -on the actual print-subsystem which is active and available to you on -your box. - - -Starting - -The welcome screen informs you that you can go back any time to -change a setting. - - -The &tdeprint; wizard introduction screen - - - - -The introduction screen of the printer wizard - - - - - -Backend Selection - -Choose the backend protocol that &CUPS; is supposed to -use with your new printer. There are: - - - -local printer (serial, parallel, USB) - - -remote LPD queue - - -SMB shared printer (&Windows;) - - -Network Printer (TCP, &HP; JetDirect, -AppSocket) - - -Network printer with &IPP; (&IPP;/HTTP) - - -File printer - - -serial fax /modem printer - - -Class of Printers - - - -If some choices are grayed out, they are not available. For -example, you may have no FAX backend software or no modem installed to -use it. - - -Choosing your Printer system - - - - -Choosing your Printer System - - - - - - -Direct Network Setting - -The contents of your next screen is dependent on your choice in -the previous screen. If you know the details, just type them in to -configure your network settings directly. - -In other cases the wizard can scan the network for you, to help you -decide which setting could be useful. - - -&tdeprint; wizard network scan - - - - -In the &tdeprint; wizard, you can enter network details -directly, or you can scan the network -automatically. - - - - - -Information Retrieval by Scanning the Network - -If you use one of the network connections (remote -LPD, SMB, remote &CUPS;, network -printer with &IPP;), you have an option for scanning the network. Be careful -when applying this; in some environments network scanning is considered -to be hostile and harmful! - -In the case of SMB, &tdeprint; will use the -Samba utilities nmblookup and -smbclient (which need to be installed for this to -work) to retrieve the information it presents in a tree -structure. - -In the case of &IPP; (Port 631) and TCP -Network/AppSocket (Port 9100) &tdeprint; will try to open the port and, -if successful, send an ipp-get-printer-attribute -request to the printer. For newer &HP; printers the latter usually -works, because they support both AppSocket and &IPP;. - -Some printers or manufacturers use other port numbers for direct -TCP/IP printing. You may need to look up which one to use. The -Settings button in the dialog lets you configure -your scan, including IP addresses, ports and -timeout to use. - -Once again: be careful not to be mistaken for an intruder on -your network, if you use the scanning technique. - - -&tdeprint; wizard network configuration dialog - - - - -In the &tdeprint; wizard, you can enter parameters to have the -wizard scan parts of your network. - - - - - -Printer Model Selection - -The hardest part is probably the Printer Model -Selection. In former years the situation was difficult, because -there were hardly any drivers to find. The difficulty now is there are too -many; though some of them are very good, many are quite broken. - -If you have a current database of available drivers -on your system, select the manufacturer in the left part of the window -first, then the device model in the right part. This split window shows -all &PPD;s found by &CUPS; in its standard repository of installable -&PPD;s. This repository normally is /usr/share/cups/model/. If you want your -driver to be found automatically by &CUPS; and &tdeprint;, place it in -there. - - - - - - -Driver Selection - -On the next screen you will see a description of the driver -selected previously. This description is extracted from the actual &PPD; -used. - - -For a real &PostScript; printer never try to -install a Foomatic or Gimp-Print &PPD;, -even if it is offered. You won't be happy with it. Instead find the -original &PPD; from the manufacturer, preferably the one written for -&Windows; NT and use it. - - -Some &Linux; distributions have supplied for &CUPS; every -possible combination of Ghostscript filters -and foomatic &PPD; files they could find on the net. -Many of these are quite useless; they were generated a year ago, when -the people at www.linuxprinting.org began -their first experiments with supplying third party &PPD;s for -&CUPS;. Although dubbed Alpha at the time, these -started to take on a life of their own and can now be found at various -places on the net, doing &CUPS; no favors. - -If you are not sure which ones to use go to: - - - -http://www.linuxprinting.org - - - - - -http://www.cups.org - - - - -And ask for help. At a later stage, a document detailing the -differences between the different driver and &PPD; models will appear at -http://tdeprint.sourceforge.net/ -Watch out for this! - -Via the Other... button you are able to -retrieve any &PPD; located somewhere on your available file -system. - - - - - -Printer Test and Finding the Right Settings - -Specify your first driver settings now. The most important one is the -default paper size. In many cases this is set to -Letter. If you live in an A4 -country and don't want your first test page to jam: now is the time to -prevent this. - -You are ready to start a test print. Hit the -Test button. - - - - - - - - -Finally: Baptizing Your New Printer - -The last screen lets you insert a name for your new -printer. - -The name must start with a letter and may contain numbers and -underscores with a maximum size of 128 characters. Conform to this if you -want to avoid erratic behavior of your &CUPS; daemon. The printer -names in &CUPS; are not case sensitive! This is a -requirement of &IPP;. So the names DANKA_infotec, Danka_Infotec and danka_infotec all represent the same -printer. - - - - - - -The Final Confirmation Screen - - - - - - - - diff --git a/doc/kdeprint/cr32-action-wizard.png b/doc/kdeprint/cr32-action-wizard.png deleted file mode 100644 index b00db2499..000000000 Binary files a/doc/kdeprint/cr32-action-wizard.png and /dev/null differ diff --git a/doc/kdeprint/cups-config.docbook b/doc/kdeprint/cups-config.docbook deleted file mode 100644 index 304fe9514..000000000 --- a/doc/kdeprint/cups-config.docbook +++ /dev/null @@ -1,2072 +0,0 @@ - -Print Server Configuration: CUPS - -Start the print server configuration (now that you have chosen -&CUPS;, this is equivalent to the configuration of the &CUPS; daemon) by -clicking on the appropriate button. You can find it by moving the mouse -slowly over the buttons and reading the tooltips. It should be the 11th -from the left , or third from the right; its icon is a -wrench. - -The &CUPS; Server Configuration window pops up. It gives you a -structured view of all the settings that apply to the &CUPS; daemon. The -configuration file for that daemon is normally located in -/etc/cups/cupsd.conf. This is a plain -ASCII file with a syntax similar to the configuration -file of the Apache web server. It is a good -idea to create a backup copy, just in case something goes wrong with the -configuration through &tdeprint;/&CUPS; Server Configuration -dialogs: - -cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bak - -As this graphical user interface to edit the configuration file is -such a new feature, you should have the second chance of resorting to -the original file. So back it up, please. - - -Quick Help - -One very nice feature is the Quick Help -available. If you click on the little question mark (What's -this?) on your window title bar, you'll see the cursor -changing its form. Now click on a cupsd -configuration setting field to find out what it means and what your -options are. In most cases you should understand the meaning -immediately, otherwise turn to the excellent &CUPS; documentation. (If -your &CUPS; Daemon is running, you have it online on your own host at -http://localhost:631/documentation.html. -If &CUPS; is not running, but installed on your system you could -find it in your own host's file system. The exact location depends on -your &OS;, but on &Linux; the default is /usr/share/doc/cups/ or - -/usr/share/doc/cups/documentation.html. - - - -Longer Help - -For the best, most detailed and most recent information you should -always refer to the original &CUPS; documentation. &CUPS; is, much like -&kde; in a rapid development process. There are constantly new features -being added. New features might for times be only configurable by -directly editing the configuration files. The &tdeprint; &GUI; might not -have caught up with &CUPS; development. - -Just in case you want to look at the original configuration files -of your &CUPS; system -- they are here: - - -These paths are based on the default installation. Your &OS; -may have installed them to a different prefix, for example, /usr/local/, but the hierarchy should -still match that shown below. - - - - -/etc/cups/ - -The folder with the configuration files - - - - -/etc/cups/cupsd.conf - -The configuration file for the &CUPS; daemon - - - - -/etc/cups/printers.conf - -The configuration file that contains the information about your -locally installed printers. - - - - -/etc/cups/ppd/ - -The folder with &PPD; files of your installed -printers. - - - - -The following links only work if your &CUPS; daemon is up and -running. To access all the original &CUPS; documentation, go -to: - - - - -http://localhost:631/documentation.html - -A page with all the links to the other documents. - - - - - -http://localhost:631/sam.html - -Direct access to the &CUPS; Software Administrator Manual -in HTML format. - - - - - -http://localhost:631/sam.pdf - -Direct access to the &CUPS; Software Administrator Manual in -PDF format. - - - - - -http://www.cups.org/documentation.html - -The latest on line documentation from the &CUPS; web -site. - - - -The following links give you access to the same files (probably -icons and graphics will be missing) even if your CUPS daemon is not up -and running. You need, however, CUPS installed on your system. (Some -distributions might place the files somewhere else -- you're on your -own then to find out where...) To access all the original CUPS -documentation, go to: - -This documentation is available even when the &CUPS; daemon is -not installed, although you may find images and icons are missing when -you view the HTML files. - -As noted above, the hierarchy below should be intact, but your -&OS; may have installed &CUPS; to a different location. - - - -/usr/share/doc/cups/documentation.html - -A page with all the links to the other documents. - - - - -/usr/share/doc/cups/sam.html - -Direct access to the &CUPS; Software Administrator Manual in -HTML format. - - - - -/usr/share/doc/cups/sam.pdf - -Direct access to the &CUPS; Software Administrator Manual in -PDF format. - - - - -There are a few WebSites and Newsgroups discussing &CUPS; (and -&Linux; Printing in General) and giving help to newbies at: - - - - -http://www.cups.org/newsgroups.php - -The &CUPS; website. - - - - - -http://www.linuxprinting.org/newsportal/ - -LinuxPrinting.org, the home of the Linuxprinting HOWTO and the -&Linux; Printer Database - - - - -And finally, there will be a WebSite for &tdeprint; and related -documentation, at -http://tdeprint.sourceforge.net/ - -In the next section I will step you through most of the -configuration options of &tdeprint; with &CUPS;. - - - -Explaining different elements of the &GUI; - - -Upper Window: View on Printers, both Real and Virtual - -This section is not yet complete - - - -Tree view, icon view and list view - - -The icons of the task bar - - -Different fonts for different printers - - -Different printer icons mean different things - - - - - - -Lower Window: Tabbed View of Details - -This section is not yet complete. - - - -The icons of the task bar - - -The Tabs - - -Changing printer settings - - - - - - - - - -Welcome to the &CUPS; Server Configuration - -This is the Welcome Screen for your server configuration -dialogs. Clicking onto one of the items of the tree view on left -side of the screen opens the appropriate part of the configuration -settings. - -Every setting has a default value. The defaults let &CUPS; -normally work as a fully functional client. The clients listen on -TCP/IP Port 631 for infos broadcast by &CUPS; servers on the -LAN. This information let the clients print -immediately after receiving them, without installing any driver or -configuring any printer on the clients. - -To configure a &CUPS; server (which is broadcasting its service -to the LAN) you need to change settings from the -defaults. - -The dialog to configure the &CUPS; server: welcome screen. - -CUPS server configuration dialog: welcome screen - - - - -The dialog to configure the &CUPS; server: welcome -screen -The dialog to configure the &CUPS; server: welcome -screen - - - -To select the default setting of any item just enable the -checkbox on the right side of the screen. To set an item to a -different value, disable the checkbox and then go on to do the setting -you want on the left side of the screen. - -The complete server configuration includes: - - - -Server -General Configuration - - -Server -Logging Configuration - - -Server -Folders and Path Definitions - - -Server -HTTP Configuration - - -Server -Encryption and Certificate Support -Configuration - - -Server -Miscellaneous Configuration - - -Network General Configuration - - -Network -Clients Configuration - - -Browsing -General Configuration - - -Browsing -Connection Configuration - - -Browsing -Masks Configuration - - -Browsing -Timeouts Configuration - - -Browsing -Relay Configuration - - -Security -Configuration - - - -Each of these configuration items will be described in the -following sections of the manual. - - - - -Server General Configuration - -The server general configuration is done on this screen. It -includes: - - -Server name -Administrators email -Server user -Server group -Remote user name - - -The tab window to configure the &CUPS; server general settings -lets you the change the default values. Click on the little question -mark and then on one of the fields to get a Quick Help -about the meaning of the setting. - -If you are unsure, leave alone and turn to the original &CUPS; -documentation first. If your &CUPS; daemon is already running, it is -readable from the &konqueror; by pointing it to &URL; -http://localhost:631/documentation.html. - -There, first make friends with the Software -Administrator Manual. Otherwise, for example, if the &CUPS; daemon is -not running, try looking in your local file system, by default at -/usr/share/doc/cups/ or -/usr/share/doc/cups/documentation.html. - - -&CUPS; server general configuration dialog: ServerName, AdminMail, -ServerUser, ServerGroup, RemoteUserName - - - - -The dialog to configure the &CUPS; server general settings: -ServerName, AdminMail, ServerUser, ServerGroup, RemoteUserName - - - - - - -Server Name - -The hostname of your server, as advertised to the world. By -default, &CUPS; will use the hostname of the system. To set the -default server usd by clients, see the -client.conf file. - - -For example, enter myhost.domain.com - - -This is the hostname that is reported to clients. Should you -ever encounter strange problems in accessing the server, put here its -IP address for troubleshooting. This way you -eliminate any potential name resolution problems; and you can more -easily nail the real problem down. - - - - -Administrators email - -This is the email address to send all complaints or problems -to. By default &CUPS; will use root@hostname. - - -For example, enter -root@myhost.com. - - - -Contrary to what the quickhelp suggests, it is also legal to -send an email full of praise and enthusiasm about &CUPS; and -&tdeprint; to the server administrator. - - - - - -Server User - -The user the server runs under. Normally this must be -lp, however you can -configure things for another user if needed. - - -The server must be initially run as root to support the default -IPP port of 631. It changes users whenever an -external program is run. - - - -Enter for example lp. - - -This is the &UNIX; user account for filters and -CGI programs to run under. CGI -programs are responsible for showing you the nice web administration -interface accessible via http://localhost:631/). - - -There is no need to set the User directive -to root, so never do this, -as it only involves dangers. Should anyone discover security -vulnerabilities in one of the used file filters, printer drivers or -CGI programs, he could remotely execute arbitrary -commands on your system with root user privileges. Always use an -unprivileged account for the server directive -User. - - - - - -Server group - -The group the server runs under. Normally this must be -lpadmin, however you can -configure things for another group as needed. - - -Enter for example lpadmin. - - - - - -Remote user name - -The name of the user assigned to unauthenticated accesses from -remote systems. By default remroot. - -This name will appear in log files and in queries about the job -owner &etc;, for all resources and locations of the &CUPS; server that -are configured to allow access without -authentication. Authenticated entries will carry the authenticated -names. - - - - - - -Server Logging Configuration - -The server logging configuration is done on this screen. It -includes: - - -Access log file setting -Error log file setting -Page log file setting -Log level setting -Max log file size -setting - - -This is an important screen for you. Should you ever encounter -problems: here is the place to set the Log level to -debug, restart the &CUPS; daemon and then look at the -Error log file defined here for entries that might give you an insight -to the trouble. - - -&CUPS; server configuration dialog: Server -logging - - - - -The dialog to configure the &CUPS; server: Server -logging - - - - - -Access log file - -This is where accesses to the server are logged. If this does -not start with a leading /, then it is assumed to -be relative to the server root. - -You can also use the special name syslog -to send the output to the syslog file or daemon. - - -Enter a path, for example -/var/log/cups/acces_log. - - -The format of this file is stored in the so-called Common -Log Format. This way you can use programs such as -Webalyzer or any other Web access reporting -tool to generate reports on the &CUPS; server activities. - -To include the server name in the file name use a -%s in the name. Example: -/var/log/cups/access_log-%s. - -kurt@transmeta:~ >tail /var/log/cups/access_log - -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /printers/ HTTP/1.1" 200 109 -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /admin/ HTTP/1.1" 401 0 -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 210 -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "GET /ppd/DANKA_P450.ppd HTTP/1.1" 200 51021 -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /jobs/ HTTP/1.1" 200 246 -10.160.16.45 - - [04/Aug/2001:20:11:39 +0100] "GET /printers/DANKA_P450 HTTP/1.0" 200 0 -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 80 -127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 139 -10.160.16.45 - - [04/Aug/2001:20:11:40 +0100] "GET /cups.css HTTP/1.0" 200 198 -127.0.0.1 - - [04/Aug/2001:20:11:40 +0100] "POST / HTTP/1.1" 200 139 -10.160.16.45 - - [04/Aug/2001:20:11:39 +0100] "GET /printers/DANKA_P450 HTTP/1.0" 200 7319 -10.160.16.45 - - [04/Aug/2001:20:11:40 +0100] "GET /images/title-logo.gif HTTP/1.0" 200 5729 - - -You see a separate line for each single access, showing the -IP address of the accessing client, date and time -of access, method of access (POST or -GET), the requested ressource, the &HTTP; version -used by the client, status code and the number of transferred -bytes. Status code 200 means -successful-OK the 401 in -the above example was an unauthorized access -which was denied. For a detailed explanation of the log format go to -the &CUPS; Software -Administrator Manual. - - - - -Error log file - -If this does not start with a leading /, then -it is assumed to be relative to the server root. The default setting -is /var/log/cups/error_log. - -You can also use the special name syslog -to send the output to the syslog file or daemon. - - -Enter the path, for example -/var/log/cups/error_log. - - -The error log excerpt below shows you the part logged for printing the test page -with the default setting of Log level to -info. For an explanation of the Log -Level setting see further below. - -kurt@transmeta:~ > tail /var/log/cups/error_log - -I [04/Aug/2001:23:15:10 +0100] Job 213 queued on 'DANKA_P450' by 'root' -I [04/Aug/2001:23:15:10 +0100] Started filter /usr/lib/cups/filter/pstops (PID 18891) for job 213. -I [04/Aug/2001:23:15:10 +0100] Started backend /usr/lib/cups/backend/lpd (PID 18892) for job 213. - - - - - -Page log file - -If this does not start with a leading / then -it is assumed to be relative to the server root. The default is -/var/log/cups/page_log - -You can also use the special name syslog -to send the output to the syslog file or daemon. - - -Enter the path, for example -/var/log/cups/page_log. - -The page log file has a line for every single page of every job -printed. - - Here is what some entries look like: - -kurt@transmeta:~ > tail /var/log/cups/page_log - -GIMP_print_stp_HP kdetest 201 [03/Aug/2001:03:18:03 +0100] 4 1 -GIMP_print_stp_HP kdetest 201 [03/Aug/2001:03:18:03 +0100] 5 1 -GIMP_print_stp_HP kdetest 202 [03/Aug/2001:11:46:49 +0100] 1 1 -GIMP_print_stp_HP kdetest 203 [03/Aug/2001:11:46:54 +0100] 1 1 -DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 1 33 -DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 2 33 -DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 3 33 -DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 4 33 -DANKA_infotec_P450 root 205 [04/Aug/2001:19:12:34 +0100] 1 14 -DANKA_infotec_P450 root 206 [04/Aug/2001:19:15:20 +0100] 1 1 - - -In this excerpt of the file you find information on the name of -the printers (GIMP_print_stp_HP and DANKA_infotec_P450) used through this -server, the user names (kdetest, kurt and root), the job-IDs (201 -to 205), time of printing, page number inside the job -and the number of copies for the pages. For example, job-ID 204 had 4 -pages and 33 copies printed, job-ID 205 had 14 copies of just 1 page) -. - - -&CUPS; is dependent (for its calculation of the number of pages -in a job) on passing the &PostScript; through the -pstops filter. See the &kivio; Flowchart on the &CUPS; -filter architecture for an idea about were this filter fits into the -whole printing process). More, pstops depends for -the counting on a DSC conforming -(DSC is Document Structuring Conventions, a -standard defined by Adobe) to be sent by the client. In most cases -this is working. - -However, this page accounting does not work for any -raw printer queues (as those, by definition, don't use -any filtering on the &CUPS; host and are by-passing -pstops.) Every job going through a -raw queue is counted as a 1-page-job (with possibly -multiple copies). This is especially true for all Jobs send from -&Microsoft; &Windows; clients via Samba to -the &CUPS; server, as those jobs are already arriving in the correct -format for the printer, because the clients use the original printer -driver. - - - -I am still looking for someone who will write a nice &CUPS; page -log analysing tool. It should generate a report with a graphical -output similar to the Webalizer's access -log reports. This way you could have nice statistics to be used for -accounting about usage of printers, load dependent on daytime or -weekday, users &etc; Anyone? - - - - - -Log level - -This setting controls the number of messages logged to the error -log file. It can be one of the following: - - - -debug2 - -Log everything. - - - - -debug - -Log almost everything. - - - - -info - -Log all requests and state changes. - - - - -warn - -Log errors and warnings. - - - - -error - -Log only errors. - - - - -none - -Log nothing. - - - - - -If you need to troubleshoot (or if you want to study the inner -workings of &CUPS;), set the log level to debug or debug2. Then the -error_log will have a lot more entries (not just errors, but also -informational entries). - -You can use this to watch live what &CUPS; is -doing when you send a print job. In a &konsole; type: - -kurt@transmeta:~ >tail 100 /var/log/cups/error_log - -This will give you the last 100 lines ( -100) of the file onto the screen and a -realtime update ()of what is -happening. The following listing shows the printing of a test page -(some pieces have been cut off for space reasons... Try it yourself if -you need more info): - - -I [04/Aug/2001:23:15:12 +0100] Job 214 queued on 'DANKA_P450' by 'root' -D [04/Aug/2001:23:15:12 +0100] StartJob(214, 08426fe0) -D [04/Aug/2001:23:15:12 +0100] StartJob() id = 214, file = 0/1 -D [04/Aug/2001:23:15:12 +0100] job-sheets=none,none -D [04/Aug/2001:23:15:12 +0100] banner_page = 0 -D [04/Aug/2001:23:15:12 +0100] StartJob: argv = "DANKA_P450","214","root","KDE Print Test", -[....] -D [04/Aug/2001:23:15:12 +0100] StartJob: envp = "PATH=/usr/lib/cups/filter:/bin:/usr/bin", [....] -D [04/Aug/2001:23:15:12 +0100] StartJob: statusfds = 5, 6 -D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[1] = 7, -1 -D [04/Aug/2001:23:15:12 +0100] StartJob: filter = "/usr/lib/cups/filter/pstops" -D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[0] = 8, 9 -D [04/Aug/2001:23:15:12 +0100] start_process("/usr/lib/cups/filter/pstops", [....] -I [04/Aug/2001:23:15:12 +0100] Started filter /usr/lib/cups/filter/pstops (PID 18991) for job 214. -D [04/Aug/2001:23:15:12 +0100] StartJob: backend = "/usr/lib/cups/backend/lpd" -D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[1] = -1, 7 -D [04/Aug/2001:23:15:12 +0100] start_process("/usr/lib/cups/backend/lpd", [....] -I [04/Aug/2001:23:15:12 +0100] Started backend /usr/lib/cups/backend/lpd (PID 18992) for job 214. -D [04/Aug/2001:23:15:12 +0100] Page = 595x842; 15,16 to 580,833 [....] - -The lines tagged D at the beginning are debug -level entries, the ones tagged I are there in -info level. - - - - -Max log file size - - -Controls the maximum size of each log file before they are -rotated. Defaults to 1048576 (1 Mb). Set this to 0 to disable log -rotation. - - -Enter an size in bytes, for example 1048576 - - - - - - - - -Server Folders Configuration - -The dialog to configure the &CUPS; server. Different -folders are to be set here. Normally you don't need to change -anything in this section. In case you play around with fancy -(TrueType, &PostScript; or other) fonts on your system, this qis the -place to do the settings for using those fonts when printing. Server -folder settings include: - - - -Executables: where to find the server -executables - - -Configuration: where to find the server -configuration files - - -Data: where to find the server data -files - - -Temporary files: where to put the server -temporary print files - - -Temporary Requests: where to find the -server - - -Font Path: where to find the -server fonts - - - -&CUPS; server configuration dialog: &HTTP; configuration - - - - -The dialog to configure the &CUPS; server: &HTTP; configuration - - - - - -Executables - -The root folder for the scheduler executables. By default -this is /usr/lib/cups (or -/usr/lib32/cups on IRIX -6.5) - - - - -Configuration - -The root folder for the scheduler. By default, /etc/cups. -On the authors SuSE system, this is /usr/share/doc/cups. It contains all the -HTML or PDF documentation for -&CUPS; which is available through the Web interface at -http://localhost:631/documentation.html - - - - -Data - -The root folder for the &CUPS; data files. By default this -is /usr/share/cups -It contains such things as banners, charsets, data, drivers, -fonts, and pstoraster templates. - - - - -Temporary files - -The folder to put temporary files in. This folder must be -writable by the user defined on the previous screen. This defaults to -either /var/spool/cups/tmp or -the value of the TMPDIR environment variable. - - - - -Temporary Requests - -The folder where request files are stored. By default this -is /var/spool/cups - - - - -Font path - -The place to configure the &CUPS; server for handling your fancy -fonts (TrueType or &PostScript;). &CUPS; will look here for fonts to -embed in printfiles. This currently only affects the -pstoraster filter, and the default is /usr/share/cups/fonts. - -To specify more than one folder, list them with double colons as -separator. Do it like this: - - -/path/to/first/fontdir/:/path/to/second/fontdir/:/path/to/last/fontdir/ - - -For the Font path directive to work as intended, the application -that wants to print needs to: - - - -Either correctly reference its desired fonts in the header of the -generated &PostScript; - - -Or embed the font into the &PostScript; file. - - - -Referencing the font by name leaves it up -to the RIP and print device to respect and actually -use it. RIP or printer can -only use the desired font, if it is available on the system. - - In the case of a &PostScript; printer, this needs to be a -printer-resident font. If the printers doesn't have this font, it will -try and replace it by an adequately similar font. - -In the case of a non &PostScript; printer, this is done by -&CUPS; and its RIP-ing filtering system. &CUPS; -will use the font path directive to grab the correct font when -RIP-ing the &PostScript; in the -pstoraster filter. - -In the case of a &PostScript; output device, &CUPS; is just -spooling the file (actually, it is passing it through the -pstops filter for accounting or n-up purposes), not -working on it. Therefore, if you print to a -&PostScript; printer it is solely the printer's responsibility to use -the font asked for. It can't, if the font is neither loaded into the -printer nor embedded in the &PostScript;. - - - - - - - -Server <acronym>HTTP</acronym> -Configuration - -The dialog to configure the &CUPS; server &HTTP; settings -is shown here. -&CUPS; server &HTTP; settings are the following ones: - -the Document folder -the Default Language -the Default Charset - - - -Dialog to configure the &CUPS; server &HTTP; settings - - - - - -Dialog to configure the &CUPS; server &HTTP; settings - - - - - - -Document folder - -The root folder for &HTTP; documents that are served. By -default the compiled in folder, /usr/share/cups/doc-root - - - - -Default Language - -The default language, if not specified by the browser. If not -specified, the current locale is used. - -Use the two letter locale codes, for example -en or de. - - - - - - -Default charset - -The default character set to use. If not specified, this -defaults to UTF-8. This can also be overridden directly in the -HTML documents. - - - - - - -<guilabel>Server encryption support configuration</guilabel> - -This is the dialog to configure the &CUPS; server security -settings. The server encryption support settings are these: - - -Server certificate: the file to -read containing the server's certificate -Server key: the file to read containing the server's -key - - -&CUPS; server configuration dialog: security overview - - - - -The dialog to configure the &CUPS; server: security settings - - - - - -Server certificate - -The file to read containing the server's certificate. Defaults -to /etc/cups/ssl/server.crt. - - - - -Server key - -The file to read containing the server's key. Defaults to -/etc/cups/ssl/server.key - - - - - - - -Server Miscellaneous Configuration - -The dialog to configure the &CUPS; server miscellaneous settings -is shown here. The following server settings are done through this -screen: - - -Preserve job history: whether to -preserve a job history for later re-view -Preserve job files: whether to -preserve fully RIP-ed job files for later -re-print -Printcap file: setting the name -of and the path to a printcap file -RIP Cache: setting the size of -the RIP cache in memory -Filter Limit: defining a filter -limit - - - -Dialog to configure the &CUPS; server miscellaneous settings - - - - -Dialog to configure the &CUPS; server miscellaneous -settings - - - - - -Preserve job history (after completion) - -Whether or not to preserve the job history after a job is -completed, canceled, or stopped. The default is yes - - - - -Preserve job file (after completion) - -Whether or not to preserve the job files after a job is -completed, canceled, or stopped. The default is no. - - - - -Printcap file - -The name of the printcap file. The default is no filename. -Leave this blank, to disable printcap file generation. -The printcap setting is only needed to satisfy older -applications in need of such a file. - - - - -RIP cache - -The amount of memory that each RIP should use -to cache bitmaps. The value can be any real number, followed by -k for kilobytes, m for megabytes, -gfor gigabytes, or t for tiles, where -one tile is 256 x 256 pixels. The default value is 8m. - - - - -Filter limit - -Sets the maximum cost of all job filters that can be run at the -same time. A limit of 0 means no limit. A typical job may need a -filter limit of at least 200. Limits less than the minimum required -by a job force a single job to be printed at any time. The default -limit is 0 (unlimited). - - - - - - -Network General Configuration - -The dialog to configure the &CUPS; server network settings is -shown here. It includes: - - -Look for hostname on IP -addresses -Port -Max request size -Timeout - - - -Dialog to configure the &CUPS; server network settings - - - - -Dialog to configure the &CUPS; server network -settings - - - - -Look for hostname on IP addresses - -Whether or not to do lookups on IP addresses -to get a fully-qualified hostname. This defaults to off, for -performance reasons. - - - - -Port - -Enter here Ports and addresses that the server will listen to. -The default port 631 is reserved for the Internet Printing Protocol, -and is what we use here. -You can have multiple entries, to listen to more than one port -or address, or to restrict access. - -Unfortunately, most web browsers don't support -TLS or &HTTP; upgrades for encryption. If you want -to support web-based encryption, you'll probably need to listen on -port 443, the HTTPS port. - -Use the Add and -Remove buttons to add and remove entries from -the list. - -You can enter ports on their own, ⪚ -631, or hostnames with ports, ⪚ -myhost:80 or 1.2.3.4:631. - - - - - -Max request size - -Controls the maximum size of &HTTP; requests and print files. -The default setting is 0, which disables this feature. - - - - -Timeout - -The timeout (in seconds) before requests time out. The default -is 300 seconds. - - - - - - - -Network Clients Configuration - -The dialog to configure the &CUPS; network client settings is -shown here. It includes: - - -Accept "Keep Alive" -requests -KeepAliveTimeout: -MaxClients: - - -dialog to configure the &CUPS; network client settings - - - - -Dialog to configure the &CUPS; network client settings - - - - - -Accept "Keep Alive" requests - -Whether or not to support the Keep-Alive connection option. The -default is on. - - - - -Keep alive timeout - -The timeout (in seconds) before Keep-Alive connections are -automatically closed. The default is 60 seconds. - - - - -Max number of clients - -Controls the maximum number of simultaneous clients that will be -handled. Defaults to 100. - - - - - - - -Browsing General Configuration - -The dialog to configure the &CUPS; browsing general settings -is shown here. It includes: - - -Enable browsing -Use short names when -possible -Use implicit -classes - - - - -Dialog to configure the &CUPS; browsing general -settings - - - - -Dialog to configure the &CUPS; browsing general -settings - - - - - -Enable browsing - -Whether or not to broadcast printer information to other &CUPS; -servers. Enabled by default. - - - - -Use short names when possible - -Whether or not to use short names for remote -printers when possible (⪚ printer instead of printer@host). Enabled by -default. - - - - -Use implicit classes - -Whether or not to use implicit classes. -Printer classes can be specified explicitly, in the -classes.conf file, implicitly based upon the -printers available on the LAN, or both. -When Implicit classes are enabled, printers on the -LAN with the same name (⪚ Acme-LaserPrint-1000) will be put into -a class with the same name. This allows you to setup multiple -redundant queues on a LAN without a lot of -administrative difficulties. If a user sends a job to Acme-LaserPrint-1000, the job will go to -the first available queue. -This option is enabled by default. - - - - - - -Browsing Connection Configuration - -The dialog to configure the &CUPS; server browsing connection is -shown here. Browsing connection settings include: - - -Broadcast addresses: The -(UDP) broadcast address to transmit printer -information to -Broadcast Port: The port number -to use for broadcasting -Poll addresses: The address(es) -to poll for information about printers on servers that might not -broadcast (or whose broadcasts might not reach your -LAN due to routers in between). - - - -Dialog to configure the &CUPS; server browsing -connection - - - - -Dialog to configure the &CUPS; server browsing -connection - - - - - -Broadcast addresses - -After pressing the Add button, you will -see the following dialog to enter a new value for outgoing -broadcasting browse packets. It is the same kind of dialog as for -adding other &CUPS; server addresses to be polled for printer -information. - - -Dialog to enter a new value for broadcasting browse -packets to - - - - -Dialog to enter a new value for broadcasting browse packets -to - - - -This option specifies a broadcast address to be used. By -default, browsing information is broadcast to all active -interfaces. - - -&HP-UX; 10.20 and earlier do not properly handle broadcast -unless you have a Class A, B, C or D netmask (&ie;, there is no -CIDR support). - - - - - -Broadcast port - -The port used for UDP broadcasts. By default -this is the IPP port; if you change this, you need -to do it on all servers. Only one BrowsePort is recognized. - - - - -Poll addresses - -Poll the named server(s) for printers. - - - - - - -Browsing Masks Configuration - -The dialog to configure the &CUPS; server allowed and/or denied browse -packets from other servers is shown here. - - -Browse allow: -Browse deny: -Browse order: - - - -Dialog to configure the &CUPS; server allowed and/or -denied browse packets from other servers - - - - -Dialog to configure the &CUPS; server allowed and/or denied -browse packets from other servers - - - - - -Add Browse Address dialog - -The dialog to enter a new value for the address of another -&CUPS; server to accept browse packets from is shown here. It is opened -by clicking on the Add... button beside the -field named Browse Allow:. It is the same dialog -as for adding denied broadcast sending -addresses. - -The dialog to enter a new value for the address of another -&CUPS; server to accept browse packets from is shown here. - - -Dialog to enter a new value for the address of another -&CUPS; server to accept browse packets from - - - - -Dialog to enter a new value for the address of another &CUPS; -server to accept browse packets from - - - - - - -Browse allow and Browse -deny - -Browse allow specifies an address mask to -allow for incoming browser packets. The default is to allow packets -from all addresses. -Browse deny specifies an address mask to -deny for incoming browser packets. The default is to deny packets -from no addresses. -Both Browse allow and Browse -deny accept the following notations for addresses: - - - - -All - - -None - - -*.domain.com - - -.domain.com - - -host.domain.com - - -nnn.* - - -nnn.nnn.* - - -nnn.nnn.nnn.* - - -nnn.nnn.nnn.nnn - - -nnn.nnn.nnn.nnn/mmm - - -nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm - - - - -The hostname/domain name restrictions will only work if you have -turned hostname lookups on! - - - - -Browse order - -Specifies the order of the allow/deny comparisons. - - - - - - - -Browsing Timeouts Configuration - -The dialog to configure the &CUPS; server browse timeout settings -is shown here. Browse timeout settings include: - -Browse Interval -Browse Timeout - - -Dialog to configure the &CUPS; server browse timeout -settings - - - - -dialog to configure the &CUPS; server browse timeout -settings - - - - - -Browse interval - -The time between browsing updates in seconds. The default is 30 -seconds. -Note that browsing information is sent whenever a printer's -state changes as well, so this represents the maximum time between -updates. -Set this to 0 to disable outgoing broadcasts so your local -printers are not advertised, but you can still see printers on other -hosts. - - - - -Browse timeouts - -The timeout (in seconds) for network printers - if we don't get -an update within this time, the printer will be removed from the -printer list. -This number definitely should not be less than the browse -interval period, for obvious reasons. Defaults to 300 seconds. - - - - - - -Browsing Relay Configuration - -The dialog to configure the &CUPS; server as a browsing relay is -shown here. Browsing relay settings include: - - -Browser packets relay - - - -Dialog to configure the &CUPS; server as a browsing -relay - - - - -Dialog to configure the &CUPS; server as a browsing -relay - - - - - -Add Browse Relay dialog - -The dialog to enter a new value for an address pair to define -browsing relaying between a &CUPS; server and a network is shown -here. - - -The dialog to enter a new value for an address pair to -define browsing relaying between a &CUPS; server and a -network - - - - -The dialog to enter a new value for an address pair to define -browsing relaying between a &CUPS; server and a -network - - - - - - -Browser packets relay - -Relay browser packets from one address or network to -another. - - - - - - - -Security Configuration - -The dialog to configure the &CUPS; server security settings for -any of the defined server locations is shown here. It contains the -following settings, which may be defined separately for any valid -resource (or location) of the &CUPS; server: - - -System Group: -Access Permissions: -Auth Type: -Auth Class: -Auth Group Name: -Encryption: -Allow: -Deny: -Order: - - -Valid resources (or locations) of the &CUPS; server are: - - -Server Root Location: / -Server Administration Location: /admin -All printers on the server: /printers -Any individual printer on the server: -⪚ /printers/infotec_P320 -All printer classes on the server: /classes: -Any individual printer class on the server: -⪚ /classes/all_infotecs_P320_or_P450 - - - -Dialog to configure the &CUPS; server security settings -for any of the defined server locations - - - - -dialog to configure the &CUPS; server security settings for -any of the defined server locations - - - - - -For all locations that are not defined separately the setting of -the location above it is valid. - -For example, you have a printer named infotec_P450 with no set security -options. Then the security of the location /printers will take the responsibility -for this printer as it is a sub-location of/printers. If, in turn there is no -security set for /printers, -then the security for / (the -general security) of the server takes responsibility. Either you have -set this for your purpose or the compiled-in default value takes -over. - - - - -SystemGroup - -The group name for System or printer administration -access. The default varies depending on the operating system, but -will be lpadmin, system or root (checked for in that order). - - - - -Access Permissions - -Access permissions for each folder served by the scheduler. -Locations are relative to the document root. - - - - -Authorization Type - -The authorization to use: - - - -None - -Perform no authentication. - - - -Basic - -Perform authentication using the &HTTP; Basic method. - - - -Digest - -Perform authentication using the &HTTP; Digest method. - - - - - -Local certificate authentication can be substituted by the -client for Basic or Digest, when connecting to the localhost -interface. - - - - - -Authorization Class - -The authorization class. Currently only -Anonymous, User, System -(valid user belonging to the group set as system group), and -group (valid user belonging to the specified group) are -supported. - - - - -Authorization Group Name - -The group name for Group authorization - - - - -Encryption - -Whether or not to use encryption. This depends on having the -OpenSSL linked into the &CUPS; library and -scheduler. -Possible values are: - - -Always - -Always use encryption (SSL) - - - -Never - -Never use encryption. - - - -Required - -Use TLS encryption upgrade. - - - -IfRequested - -Use encryption if the server requests it. - - - - - - - -Allow - -Allows access from the specified hostname, domain, -IP address or network. Possible values are: - - - - -All - - -None - - -*.domain.com - - -.domain.com - - -host.domain.com - - -nnn.* - - -nnn.nnn.* - - -nnn.nnn.nnn.* - - -nnn.nnn.nnn.nnn - - -nnn.nnn.nnn.nnn/mmm - - -nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm - - - - -The host and domain address require that you enable hostname -lookups, as described earlier. - - - - -Deny - -Denies access from the specified hostname, domain, -IP address or network. Possible values are: - - - -All - - -None - - -*.domain.com - - -.domain.com - - -host.domain.com - - -nnn.* - - -nnn.nnn.* - - -nnn.nnn.nnn.* - - -nnn.nnn.nnn.nnn - - -nnn.nnn.nnn.nnn/mmm - - -nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm - - - -The host and domain address require that you enable hostname -lookups, as described earlier. - - - - -Order - -The order of the allow and deny processing. - - - - - - -Example: How To Define The Security For All Printers - -The dialog to configure the &CUPS; server security settings is -discussed here. We use the example to add security definitions other -than the default ones for the resource named all printers. For the &CUPS; web server, -this is the location you access through -http://localhost:631/printers/ or (remotely) through -http://cups.server.name:631/printers/ - -The first screenshot shows the general location for this -setting. Select Add or -Modify a resource for which you want to decide -about its security settings. - - -Dialog to configure the &CUPS; server security -settings - - - -Dialog to configure the &CUPS; server security -settings - - - -This dialog is to add a new resource. It looks similar if you -want to modify an already existing resource. Here are the general -options: - - -Dialog to add a new resource. - - - - -Dialog to add a new resource. - - - -.This is the second part or the dialog is to add a new -ressource. It looks similar if you want to modify an already existing -resource. Here you define the actual access masks for the resource in -question. - - -Dialog to add a new resource. - - - - -Dialog to add a new resource. - - - -Resource dialog - - - - -Resource dialog - - - - -Resource dialog - - - - -Resource dialog - - - - -Resource dialog - - - - -Resource dialog - - - - -Resource dialog - - - - -Resource dialog - - - - - - diff --git a/doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png b/doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png deleted file mode 100644 index 9f5a73d39..000000000 Binary files a/doc/kdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png and /dev/null differ diff --git a/doc/kdeprint/cupsaddprinterwizard1.png b/doc/kdeprint/cupsaddprinterwizard1.png deleted file mode 100644 index cf20e087c..000000000 Binary files a/doc/kdeprint/cupsaddprinterwizard1.png and /dev/null differ diff --git a/doc/kdeprint/cupsaddprinterwizard2_backendselection.png b/doc/kdeprint/cupsaddprinterwizard2_backendselection.png deleted file mode 100644 index 3e4b2f126..000000000 Binary files a/doc/kdeprint/cupsaddprinterwizard2_backendselection.png and /dev/null differ diff --git a/doc/kdeprint/cupsaddprinterwizard3_networkscan.png b/doc/kdeprint/cupsaddprinterwizard3_networkscan.png deleted file mode 100644 index 160834ee9..000000000 Binary files a/doc/kdeprint/cupsaddprinterwizard3_networkscan.png and /dev/null differ diff --git a/doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png b/doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png deleted file mode 100644 index aa6cd87f1..000000000 Binary files a/doc/kdeprint/cupsaddprinterwizard3_networkscan_results.png and /dev/null differ diff --git a/doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png b/doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png deleted file mode 100644 index 7fff7de52..000000000 Binary files a/doc/kdeprint/cupsaddprinterwizard4_networkscan_config.png and /dev/null differ diff --git a/doc/kdeprint/cupsoptions.docbook b/doc/kdeprint/cupsoptions.docbook deleted file mode 100644 index bd0ba95a3..000000000 --- a/doc/kdeprint/cupsoptions.docbook +++ /dev/null @@ -1,602 +0,0 @@ - -&CUPS; options presently not available through &kcontrol; - -This chapter gives you some hints about further configuration -possibilities which may not be available through the &tdeprint; &GUI; -interface to &CUPS;. - - -Overview of provided features - -All of the most often used features and functions &CUPS; provides -are supported in &tdeprint;. - - - -Printer management is supported: add, remove, modify, configure, -test, disable, enable ... - - -Job management is supported: cancel, hold, release, move to -different printer - - -Print options: for full control as provided by &CUPS;. - - - - - - -Where to find help when using &CUPS; - -A lot of information about the inner workings of &CUPS; is -available through the web interface, which &CUPS; will always -support. It works with any browser (yes, even text-based ones). Just go -to http://localhost:631/ for -a start. There you find a link to locally available &CUPS; documentation -in HTML and PDF if you are new to -&CUPS;. - -&CUPS; is accessible through other means than &tdeprint;: -commandline and browser are two native &CUPS; interfaces. The many -commandline utilities add up to the most complete control you have on -&CUPS;. The web interface is only a subset of all available -configuration or control options. - -This is also true for &tdeprint;. Generally, as &CUPS; develops, -most new features will first be implemented through the commandline. Be -sure to check the latest versions of the man pages for &CUPS; to stay -up-to-date with new features after you install a new version. - - -Depending on your update method for &CUPS;, your active -configuration file might not have been re-placed by a new one; thus your -new, more capable &CUPS;-daemon might not have been told by the old -configuration file about the new features to use. - - -A complete list of available files and man pages should always be -in the &CUPS; Software Administrator Manual (http://localhost:631/sam.html#FILES. -In the &konqueror; &URL;/location field, type -man:/lpadmin and -man:/cupsd.conf to find out about the most -important command and configuration file. You knew already about -&konqueror;'s nice abilities to show you the traditional &UNIX; man -pages, didn't you? Read this. From there you find more interesting -hints and links to other man pages and documentation. - - -How to find &CUPS; related man pages - -Here is a way to find out which &CUPS; related man pages there -are on your system: - -kurt@transmeta:~ > apropos cups - -cups-calibrate (8)- ESP Printer Calibration Tool -lpstat (1) - print cups status information -cups-lpd (8) - receive print jobs + report printer status to lpd clients -classes.conf (5) - class configuration file for cups -backend (1) - cups backend transmission interfaces -filter (1) - cups file conversion filter interfaces -cups-polld (8) - cups printer polling daemon -mime.types (5) - mime type description file for cups -cupsd (8) - common unix printing system daemon -lpadmin (8) - configure cups printers and classes -cupsd.conf (5) - server configuration file for cups -mime.convs (5) - mime type conversion file for cups -printers.conf (5) - printer configuration file for cups -mime.convs (5) - mime type conversion file for cups -cups-polld (8) - cups printer polling daemon -lpstat (1) - print cups status information -backend (1) - cups backend transmission interfaces -mime.types (5) - mime type description file for cups -cupsd (8) - common unix printing system daemon -lpadmin (8) - configure cups printers and classes -printers.conf (5) - printer configuration file for cups -cupsd.conf (5) - server configuration file for cups -filter (1) - cups file conversion filter interfaces - - - - - -Outside &tdeprint;: Hints & Tips Tricks with &CUPS; on the -Commandline - -Here are a few examples of options that are presently only -available if you use the commandline. - - -Allowing or denying printer access for certain users - -When installing (or modifying) a printer through the command line, -you can either deny or allow the usage of that printer to certain -users: - -lpadmin HeidelbergDigimaster9110 lpd:/10.160.16.99/mqueue allow:kurt,sylvi,hansjoerg /home/kurt/PPDs/DVHV.ppd - -will allow the usage of this (believe me: very nice and also very -professional) printer to only the three mentioned users and at the same -time deny it to all others. If another user wants to print on the -DigiMaster via this &CUPS; server, he will receive an error message -along the lines client-error-not-possible. - -lpadmin HeidelbergDigimaster9110 lpd:/10.160.16.99/mqueue deny:tackat,boss,waba /home/kurt/PPDs/DVHV.ppd - -will deny the usage of this same printer to the three mentioned -users and at the same time allow it to all others. If -denied user wants to print on the DigiMaster via this -&CUPS; server, he will receive an error message along the lines -client-error-not-possible. - - -Only one of the two options may be used at one time; at present -there is no support to have a similar option in a per-group based -way. This will be implemented in the future. - - - - -Imposing Quotas for certain printers - -Sometimes you want to impose quotas for certain printers. With -quotas you can set upper limits for the number of pages or the amount of -data to be printed over a certain period to a certain printer. - -Quotas can be set with the option when -installing a printer with the lpadmin command, or -afterwards for an already existing printer. Following are some -guidelines (which are missing at the time of writing in the, official -&CUPS; documentation): - - - -With &CUPS; you may have pagecount- and filesize-based quotas for -individual printers. - - - -Quotas are calculated for each user individually (so a single set -of limits applies to all users for the printer concerned). - - - -Quotas include banner pages (if those are used). - - - -This means: you can limit every user to 20 pages per day on an -expensive printer, but you cannot limit every user except Kurt or root. - - - -There are , -, and -options to give when setting up a printer. - - - - sets a time interval for quota -computing (intervals are determined in seconds; so a day is -60x60x24=86.400, a week is 60x60x24x7=604,800, and a month is -60x60x24x30=2.592.000 seconds.) - - - -For quotas to be enforced, the time-period -plus at least one job-limit must be set to -non-zero. - - - -The default value of 0 for specifies -that there is no limit. - - - -The default value of 0 for -specifies that there is no limit. - - - -The default value of 0 for -specifies that the limits apply to all jobs that have been printed by a -user that are still known to the system. - - - - -Working Examples: - -Working, as both, time-period plus one or -both job-limits are defined - -lpadmin danka_infotec_4850 job-quota-period=604800 job-k-limit=1024 - -This sets a limit of a file size of 1 MB (in total) for each user -of existing printer danka_infotec_4850 during one week. - -lpadmin danka_infotec_4105 job-quota-period=604800 job-page-limit=100 - -This sets a limit of 100 pages (in total) for each user of -existing printer danka_infotec_4105 during one week. - -lpadmin danka_infotec_P450 job-quota-period=604800 job-k-limit=1024 job-page-limit=100 - -This sets a combined limit of 1 MB (in total) and 100 pages (in -total) for each user of existing printer danka_infotec_P450 during one -week. Whichever limit is reached first will take effect. - - - - -Not working examples - -NOT working, as only -one, time-period or job-limit -is defined) - -lpadmin danka_infotec_P320 job-quota-period=604800 - -lpadmin danka_infotec_FullColor job-page-limit=100 - -lpadmin danka_infotec_HiSpeed job-k-limit=1024 - - - - -Related Error Messages - -Once a user reaches his quota limit, he'll get a -client-error-not-possible message, if he wants to -print. - - - - - - -Installing a <quote>raw</quote> printer - -There are different ways to define a raw -printer. One comfortable one is to use the lpadmin -command. Just don't define a &PPD; file to be used for that printer and -it will be a raw one: - -lpadmin Raw_Danka_infotec lpd://10.160.16.137/PORT1 - -Raw printer queues are those which don't touch the print file to -transform it to a different file format. You need this for example when -printing from &Windows; clients via Samba through a &CUPS; server to a -PCL printer: in this case the &Windows; side printer -driver would generate the finished print file format for the target -printer and filtering it through &CUPS; filters would only harm the -purpose. Under certain circumstances (if you want to make sure that the -file goes to the printer unfiltered by &CUPS;) the -lpadmin without a &PPD; comes in -handy. - - - - - -Troubleshooting &CUPS; in &tdeprint; - -This section of the &tdeprint; Handbook will live from the -readers' feedback. Here is just a small beginning. - - -Error Messages - - - - -What does the error -client-error-bad-request mean? - - -The user sent a file to the &CUPS; which the server could not -process. You get this also upon sending an empty -file. - - - - - -And client-error-not-possible? - - -User is either not allowed to print to a certain printer or has -achieved his quota (based on file size and/or page number) - - - - - -How about client-error-not-found? - - -The user tried to access a nonexistent resource on the &CUPS; -server, such as trying to print a nonexistent file, or one that you are -denied permission to read. - - - - - - - - -Questions and Answers - - - - -Why can't I re-start my jobs? - - -To be able to re-start your completed jobs from the -web interface, you need a setting in the -/etc/cups/cupsd.conf file: set -PreserveJobFiles True. - - - - - -How do I get rid of the long list of completed jobs in the web -interface? - - -TODO - - - - - -How does page accounting work? - - -&CUPS; does the print accounting by passing nearly -every job through the pstops filter. This one does, -amongst other things, the page counting. Output of this filter there may -be piped into other filters (like pstoraster --> rastertopcl) or sent to -the printer directly (if it is a &PostScript; printer). - -In any case, this works for network, parallel, serial or -USB printers the same. For pstops to work, it needs -DSC, Document Structuring Convention compliant -&PostScript; (or near-equivalent) as input. So it calculates the pages -during filtering on the print server and writes info about every single -page (what time, which user, which job-ID and -name, which printer, how -many copies of which pages of the document, how many kilo-bytes?) into -/var/log/cups/page_log. - -By the way: on my personal wishlist is a hack of -webalizer to read and analyze the page_log and give a -similar output. Anyone? - -However, it is not giving correct results in -the following cases: - - - -The printer jams and maybe therefor throw away the job (real live -experience; or maybe throwing away the job because of problems with the -data format) - - -Jobs printed as raw are always counted as size of 1 -page (and maybe multiple copies). - - - -Therefore the page accounting of &CUPS; is only -an approximation (in many cases an excellent or at least good one, in -others a quite poor one). The only reliable print count is the one -done by the internal printer counter. (Because this is the one you pay -for, if you are on a click price or similar.) Some, by -far not most, printers can be queried remotely for that information -via SNMP (Simple Network Management Protocol). That -means, in a bigger network with many different printers there -is just no completely reliable and accurate page -accounting tool! - - - - - -Why doesn't page-accounting work with &Windows; clients? - - -From &Windows; clients jobs nearly always need to be sent as -raw. Why? If &CUPS; works as a print server for &Windows; -clients using the original native &Windows; driver for the target print -device, this guarantees the correct formatting of the job on the clients -already; therefor the server should not touch it and print -raw; therefor no filtering is started (and this is not -even possible as the input from the clients is not &PostScript; as -pstops expects; hence no page-count other than the default -1. - - - - - -How do I get a list of available options for a given printer or a -&PPD; file? - - -See the man page for the lpoptions command. You -may investigate a &CUPS;-enabled box about any option of its available -printers. There is no need to have the printer installed locally. As -long as the printer is available locally (through the &CUPS; -printer browsing feature), it will also work -remote. - -To query for a printers' option typing -lpoptions -HitachiDDP70MicroPress - will give a long listing of all -available options as read from the &PPD; file for the given -Hitachi-Printer (in my case installed on remote server -transmeta). Remote server Transmeta and its &CUPS; daemon as well -as the localhost's &CUPS; daemon need to be up and running for this to -succeed. - - - - - -How do I read the listing retrieved by the -lpoptions command? - - - -You know that for &PostScript; printer manufacturers it is -legal to define their own internal names and procedures -even for standard &PostScript; options. As long as the driver is able to -retrieve the option from the &PPD; and show it to the user in a way that -he understands it everything is OK. But what do you -do, if you want to use some obscure printer options on the command line? -How do you find out its exact syntax? - -Let's take an example. Looking at Hitachi's DDP70 printer and how -it implements duplex printing is revealing somehow. How do you tell how -to print double sided? duplex or Duplex? Or another name altogether?. - -lpoptions transmeta Hitachi_DDP70_ClusterPrintingSystem | grep uplex - -This leads to the output - -TR-Duplex/Duplex: False *True - -This is to be interpreted like follows: - - - -The name of the investigated option is -; - - -Behind the slash you see the translation of the option, as it -should be shown in a &GUI; or Web interface -(Duplex); - - -The option may take one of the two values -False or True; - - -The present setting is True to be -recognized by the marking with a star *. - - - -To override the present default setting (duplex) and print a job -in simplex, you need to use the following command: - -lpr Hitachi_DDP70_ClusterPrintingSystem TR-Duplex=False /path/to/your/printjob - - - - - -How do I get a nicely formatted listing of available options for a -given printer or &PPD;? - - -Use the lphelp command which may be installed -on your system locally. There is not yet a man page for -lphelp. - -lphelp infotecP450 - -This lists the available options for the named printer. It is -nicely formatted and does explain every available option and how to use -it. You can query different printers' options at once: - -lphelp infotec7410color DANKA_fullcolor_D2000 HP_ColorLaserJet8550 - -It also works for &PPD; files. Just specify the path to the -&PPD;: - -lphelp /home/kurt/PPDs/HP-ColorLaserJet8550.ppd - - - - - - -Solving Problems - -No system is perfect. Here are some commonly seen traps people -have fallen into. - - - - -My printer named 3-lp-duplex shows erratic -behavior. What's wrong? - - -The printer names used in &CUPS; shall start with a letter and may -contain up to 128 letters, numbers or underscores. Using dashes may lead -to problems. Speaking about naming: printer names in &CUPS; are not case -sensitive. So a printer named Best_of_Danka will be the same as -best_of_danka or BEST_OF_DANKA. (This is a requirement of -&IPP;, which &CUPS; is fully compliant with). - - - - - -Why do I get Unable to connect to SAMBA host: -Success with my printer shares from &Windows; accessed via -Samba? - - -Are the rights on the remote &Windows; box set correctly for you? -Are you actually allowed to print on the &Windows; shared -printer? - - - - - -My files for printer lp -sometimes mysteriously disappear and two days later I am told they got -printed on a printer three floors below my office. What is going on? - - -Believe me, it is very unlikely that your printer is the only one -with the name lp. Maybe -&CUPS; is playing a trick on you. As you might have the setting -ImplicitClasses On activated, &CUPS; tries to stuff all -printers it sees on the network into a Class name lp. All -jobs destined to lp are sent to this class and the first available -member prints it. So if you had this nice fellow (who listened closely -when you raved about &CUPS; and &tdeprint;) install &CUPS; and poke -around the system...get the idea? - -Take my advice: choose a unique name for any network printer! -(Mind you, the one on your parallel port also turns out to be a network -printer for the rest of the world if you don't take care of your -settings). - - - - - - diff --git a/doc/kdeprint/cupsserverconfig_browse_relay_add_button.png b/doc/kdeprint/cupsserverconfig_browse_relay_add_button.png deleted file mode 100644 index 391cf06ee..000000000 Binary files a/doc/kdeprint/cupsserverconfig_browse_relay_add_button.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png b/doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png deleted file mode 100644 index f5767faad..000000000 Binary files a/doc/kdeprint/cupsserverconfig_browsingmasks_add_button.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png b/doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png deleted file mode 100644 index 3775f4d2a..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration10_browsinggeneral.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration11_browsingconnections.png b/doc/kdeprint/cupsserverconfiguration11_browsingconnections.png deleted file mode 100644 index d3ca6971f..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration11_browsingconnections.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration11_browsingmasks.png b/doc/kdeprint/cupsserverconfiguration11_browsingmasks.png deleted file mode 100644 index a662dd117..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration11_browsingmasks.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png b/doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png deleted file mode 100644 index d9e9528d6..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration12_browsingtimeouts.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration14_browsingrelay.png b/doc/kdeprint/cupsserverconfiguration14_browsingrelay.png deleted file mode 100644 index 0030b4d7c..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration14_browsingrelay.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png deleted file mode 100644 index fab7bc65b..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png deleted file mode 100644 index 2cc4bf8ae..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png deleted file mode 100644 index cfd09e543..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration1_welcome.png b/doc/kdeprint/cupsserverconfiguration1_welcome.png deleted file mode 100644 index 50bd9ba3a..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration1_welcome.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration2_general.png b/doc/kdeprint/cupsserverconfiguration2_general.png deleted file mode 100644 index c8e8b01c0..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration2_general.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration3_logging.png b/doc/kdeprint/cupsserverconfiguration3_logging.png deleted file mode 100644 index 300c31943..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration3_logging.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration4_directories.png b/doc/kdeprint/cupsserverconfiguration4_directories.png deleted file mode 100644 index e55ab35fc..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration4_directories.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration5_HTTP.png b/doc/kdeprint/cupsserverconfiguration5_HTTP.png deleted file mode 100644 index 3e46eb17b..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration5_HTTP.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration6_encryption.png b/doc/kdeprint/cupsserverconfiguration6_encryption.png deleted file mode 100644 index aca75adf0..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration6_encryption.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration7_miscellanious.png b/doc/kdeprint/cupsserverconfiguration7_miscellanious.png deleted file mode 100644 index 6a30d103e..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration7_miscellanious.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration8_networkgeneral.png b/doc/kdeprint/cupsserverconfiguration8_networkgeneral.png deleted file mode 100644 index a0a40da20..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration8_networkgeneral.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration9_networkclients.png b/doc/kdeprint/cupsserverconfiguration9_networkclients.png deleted file mode 100644 index 89b30dfe9..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration9_networkclients.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png b/doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png deleted file mode 100644 index 147830184..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration_resourceadminaccessmasks.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png b/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png deleted file mode 100644 index 295a0970a..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png b/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png deleted file mode 100644 index 3b3b4eb04..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png b/doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png deleted file mode 100644 index 1b388a6cb..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration_resourceadminauthorization.png and /dev/null differ diff --git a/doc/kdeprint/cupsserverconfiguration_securityoverview.png b/doc/kdeprint/cupsserverconfiguration_securityoverview.png deleted file mode 100644 index bed1d3df6..000000000 Binary files a/doc/kdeprint/cupsserverconfiguration_securityoverview.png and /dev/null differ diff --git a/doc/kdeprint/extensions.docbook b/doc/kdeprint/extensions.docbook deleted file mode 100644 index c14691d51..000000000 --- a/doc/kdeprint/extensions.docbook +++ /dev/null @@ -1,57 +0,0 @@ - -&tdeprint; Extensions To All Print Subsystems - - -<quote>Virtual</quote> Printers - - -The <quote>Fax</quote> Printer - -To be written - - - - -The <quote>File</quote> Printer - -To be written - - - - -The <quote><acronym>PDF</acronym></quote> Printer - -To be written - - - - - - -<quote>External</quote> Filters - - -The <command>enscript</command> Filter for Text Files - -To be written - - - - -The <quote>n-up</quote> Filter for Any File - -To be written - - - - -Three different <quote>Make Pamphlet</quote> Filters for -&PostScript; Files - -To be written - - - - - - diff --git a/doc/kdeprint/external-command.docbook b/doc/kdeprint/external-command.docbook deleted file mode 100644 index 1a1135d7c..000000000 --- a/doc/kdeprint/external-command.docbook +++ /dev/null @@ -1,25 +0,0 @@ - -Module For External Print Command (&Netscape;-like) - -This module allows the print command to be specified completely -(&Netscape;-like). An edit line is added in the print dialog for that -purpose. Can be used in many cases, for example with a self-made print -program. - - -Overview of provided features - - - -Printer management: not supported - - -Job management: not supported. - - -Print options: basic control, depending on your knowledge of the -print command - - - - diff --git a/doc/kdeprint/final-word.docbook b/doc/kdeprint/final-word.docbook deleted file mode 100644 index 175afb2f1..000000000 --- a/doc/kdeprint/final-word.docbook +++ /dev/null @@ -1,117 +0,0 @@ - -Final word from the Author - - -Who am I, what is my business? - - -My employer is Danka Deutschland GmbH, a leading and -manufacturer-independent provider of professional and hi-speed digital -printing systems, black-and-white as well as color. Danka provides -hardware, software, service, maintenance, consumables and customized -solutions for the products in its portfolio. I work there as a -System Engineer. Amongst the brands Danka offers are Heidelberg -(formerly Kodak), Canon, &Hewlett-Packard;, Hitachi, Infotec and -EfI. - - -My acquaintance with &Linux; and the Free Software community is not -too old. When I started to play around with &Linux; at the beginning -of 1999, my deepest disappointment was the poor support for -printing. True, I made all our machines spit out simplex prints -- but -what about duplex? What about punching the output? How to make sorting -work? Or stapling, cover sheets and all the other beautiful finishing -options our engines offer to customers? No way -- at least for me as a -non-geek! - - -I began a search on the Internet for a solution. Fortunately not -much later, in May 1999, Mike Sweet, principal developer of &CUPS;, -announced the first Beta release of this superb piece of printing -software. After trying it briefly, I knew this was it! - - -Next thing I attempted: to make &Linux; distributions interested in -this new stuff. Believe me -- it was more than tenacious! They seemed -to think they already had the best thing they could get in -printing. One reason probably was that they (and many &Linux; -developers) never had to think about how to best support a printer -duplexer -- because one had never come near their own -desks... - - -Finally, my attempts to make some &Linux; print publications -interested in &CUPS; backfired on me - one editor -squeezed me into writing a series on the subject myself. And this is -how some people started to give me the nickname CUPS -Evangelist. I will not get rid of this nick anytime soon, now -that even the &kde; people wedged me into their timeframe of -releases. Oh, boy... - -Anyway, &CUPS; is now making its way around the world and it -might well become a triumphal one: I am a little bit proud to have -supported and contributed to this from near the beginning. - -It should encourage you: even if some more experienced &Linux; -users than you are skeptical about it, and even if your programming -skills are next to zero (like mine) - there are a lot of tasks and -jobs and ideas, and talent that you can contribute to the Free Software -community. Not least within the &kde; project... ;-) - - - - - -Credits - -I'd like to thank... - - -Mike Sweet for developing &CUPS; in the first place - - -Jean-Eric Cuendet for starting kups -and qtcups, the predecessors of -&tdeprint; - - -Michael Goffioul for doing all the hard work recently - - -Martin Konold for thinking twice - - -Sven Guckes for teaching me a few things about the art of survival -on the terminal (just in case &kde; is not there ;-) ) - - -...too numerous others to mention who also let me snatch bits -and bytes of knowledge -off them - - - and last, but not least: Tom Schwaller for encouraging me -to get into documentation -writing - - - - - - -Caveats - -&tdeprint; has been developed on a system using &CUPS; 1.1.6. -&tdeprint; has been tested on other versions of &CUPS; and so -far no incompatibilities are known. By the time of writing -this Handbook, &CUPS; 1.1.9 is out with a few new features -not yet supported by &tdeprint;. Of course you are able to -access these features, but you will need to bypass &tdeprint; -and use the &CUPS; command-line tools or edit configuration -files manually. &tdeprint;'s development will go on and this -Handbook strives to always be the best available user documentation -resource for it. - - - - diff --git a/doc/kdeprint/getting-started.docbook b/doc/kdeprint/getting-started.docbook deleted file mode 100644 index 9ef1500b7..000000000 --- a/doc/kdeprint/getting-started.docbook +++ /dev/null @@ -1,143 +0,0 @@ - -Getting Started - -This chapter of the &tdeprint; Handbook will walk you through most -of the configuration or selection options of &tdeprint;. It will mainly -deal with &CUPS; in this version, as the author is most familiar with -it, and also because &tdeprint; started off with supporting &CUPS; -best. Later versions of the &tdeprint; software and editions of this -handbook will support and explore other printing -systems more closely. - - -Selecting Your Print Subsystem - -You need to define your print subsystem, before you are able to -install any printer with the &tdeprint; framework. There are two areas -where you can define this: either in &kcontrol; (The Printing -Manager section), or directly and on the fly -from the print dialog. - -Navigate to K Menu -Preferences System -Printing Manager. At the bottom -you can see a button that lets you select which printing subsystem you -want to use. In &kde; 2.2 you can choose from the following -alternatives: - - - -&CUPS; (Common &UNIX; Printing System) - - -Print through an external program (generic) - - -LPR (Standard BSD Print -System) - - -Generic &UNIX; LPD print system (the -default) - - -RLPR environment (print to remote -LPD servers from the command line) - - - -Of course, the chosen system must be installed, and up and running on -your box prior to your selection, or before it takes effect. - - - -On it's first startup, &tdeprint; will try an autodetection. This -only works for: - - - -&CUPS;, as it is checking first for a running &CUPS; daemon - - -LPD, as it is checking for a running -LPD daemon, plus a printcap -file. - - - - - -The system you choose must be installed on your system prior to -your selection. The author's personal recommendation is -&CUPS;. - -Once autodetected, chosen, or changed, the active print -subsystem will take effect for all &kde; applications. Different -users may have different print subsystems in use, if those do exist on -the computer and are compliant with each other. Their settings are -stored in the tdeprintrc. This file is unique to -every user, and is normally installed in -$HOME/.kde/share/config/tdeprintrc. - - -This file is not intended to be directly editable, and all -available options can be set from the &tdeprint; &GUI;. - - -You may even select a different printer subsystem, on the fly, from -the &kprinter; dialog box. - - - - -Working with the Printing Manager - -Once you have chosen your preferred and installed print subsystem, -you are ready to investigate, configure administer and work with this -system through the &tdeprint; framework. - -Navigate to K Menu -Preferences System -Printing Manager. In the right -part of the window you will see at least 4 printers predefined. These -are the virtual or special purpose printers, explained in section . You will probably see a toolbar with 13 icons at the -top of the window, and at least 4 tabs in the lower half of the window, -labeled Information, Jobs, -Properties and -Instances. - - - - - - - - - - - - - - - - - - diff --git a/doc/kdeprint/highlights.docbook b/doc/kdeprint/highlights.docbook deleted file mode 100644 index 72982c10c..000000000 --- a/doc/kdeprint/highlights.docbook +++ /dev/null @@ -1,518 +0,0 @@ - -&tdeprint;'s Highlights - -The new &tdeprint; system includes more than one highlight. -Having worked in an environment in the past that is not exactly -sophisticated, as far as printing is concerned, take a look at some of -the benefits that come with &tdeprint; - - -The <quote>Add Printer</quote> Wizard - -&tdeprint; has an Add Printer Wizard. The Add -Printer Wizard helps you with adding and configuring a new printer. Of -course, you may do this manually as well. - -&tdeprint; helps you discover printers. It is able -to scan the environment for available devices and queues. This works for -network connections using TCP (AppSocket, -aka &HP; JetDirect, or IPP) or -SMB/Samba (shared &Windows;) printers -and partially for directly attached printers over parallel, serial, or -USB connections. - - -A screenshot of the new Add Printer -Wizard - - - - - -Here's a screenshot of the Add Printer Wizard -(this one is not very exciting yet; but...) - - - - -The wizard makes the installation and handling of the drivers -a snap. Selecting, configuring and testing should be easy -as never before on any &Linux;-like system. - - - - - - - -Full Print Job Control - -The Print Job Viewer is automatically started by &kprinter;. It -may be docked into the &kde; panel (in the system tray). The Print Job -Viewer allows full job management, if supported by the print -subsystem. - -You can: - - - -Hold and release jobs, - - -Move pending jobs to another printer, - - -Cancel pending or processing jobs. - - - -A screenshot of the &tdeprint; PrintJob Viewer shows the information -you get: Job-ID, target printer, job name, job owner, job status and job -size. In the next &tdeprint; release you will also see information about the -number of pages (as &CUPS; calculates it; see chapter on page accounting -for more information about its merits and limitations). - - -A screenshot of the &tdeprint; PrintJob Viewer - - - - - -Here's a screenshot of the &tdeprint; PrintJob Viewer. - -A screenshot of the &tdeprint; PrintJob -Viewer. - - - -An alternative way to looking at the same information (and having the -same amount of control is through the - - &kcontrolcenter; selecting -SystemPrinting -Manager. If you don't see the -Printer Information, -right click on the window -background and select View Printer -Information. Then go to the Jobs tab -to see this: - - - - - - - - -Here's a screenshot of the &tdeprint; PrintJob Viewer. - - - - - - - -Modules for different print subsystems - -&tdeprint; uses different modules to realize the interface to the -possible print subsystems. Not all the modules are yet developed fully, -but you will have basic printing functionality with: - - - -LPD (BSD style) - - -LPRng (&RedHat;, if you just use it's -BSD style subset), - - -RLPR (a command-line LPR -utility, which doesn't need a printcap file. - - -external print commands (&Netscape; like). - - - -Most importantly, full support for &CUPS; is already there. -Modules for other print subsystems, such as PLP, -PPR and PDQ may be available -later. - -&tdeprint; makes &kde; much more flexible. It gives freedom of -choice to &kde; 2.2 users. To use different available print subsystems, -these must, of course, be installed independently from &kde;. In -former versions, users were stuck with the old LPD -style print subsystems. Now they can even use &CUPS;. In the future, -there will be easy integration of new subsystems, as they -appear on the scene. - - - - -More &tdeprint; <quote>Goodies</quote> -Benefitting all Print SubSystems. - -Some specific features of &tdeprint; depend on the chosen print -subsystem. This dependency might exist because those features are only -implemented there; remember, &tdeprint; is an intermediate layer between -&kde; applications, and the print subsystem, but it's no replacement for -any print subsystem by itself. Such dependency may exist for another -reason: that &tdeprint; has not yet implemented an interface to all the -features of all the subsystems. - -Other features include benefits from &tdeprint; that are -independent of the chosen print subsystem, and are available with all of -them. At present there are special or -virtual printers, and some generic -pre-filters. - - - -Print Preview - -From the Print Dialog, you can select to look at a preview. For -this, the print file is passed through filters which make it suitable for -displaying on screen using &kghostview;. - - - - -Special Printers - -Amongst these additional &tdeprint; features are a few -special or virtual printers: - -These special printers may: - - - -Print to PDF - -Convert your document into a PDF file with the -help of an external program. - - - - -Print to email - -Send your document as an email attached PDF -file. - - - - -Print to PS file - -Save your document as a &PostScript; file. - - - - -Print to Fax - -Send it through an available backend, such as -Hylafax as a fax. - - - - - -These special printers appear in the user print -dialog just like normal printers. They are entirely -configurable on a per-user basis. - - - - - -Generic Pre-Filtering - -&tdeprint; provides you with a framework to define and configure -your own pre-filters. These pre-filters may take effect -before they are passed to your print subsystem for -further processing, but after the (&PostScript;, -plain text or other) print files have been generated by your -application. - -There are a few useful filters already predefined. These -are: - - - -The multiple pages per sheet filter, - - - -the enscript text filter, - - - -and three filters to help print pamphlets. - - - -You may create your own filters based on any third party program -that is able to process &PostScript;, plain text or image files, and output -any one of those formats. - -These filters are configured through XML files. -This makes an extension of the concept very easy for experienced developers, -but end-user configuration is also done through an intuitive graphical -user interface. So, fear not, you don't need to learn -XML because of &tdeprint;! - - - -Multiple Pages Per Sheet Filter - -This is a predefined filter that installs with &tdeprint;. It -allows you to create a modified &PostScript; output, from &PostScript; -input, that prints 1, 2, or 4 logical pages on a single sheet of -paper. - - - - -Enscript Text Filter - -This is a predefined filter that installs with &tdeprint;. It -allows you to create &PostScript; output from any text file input, that -includes syntax highlighting for program listings, pretty-printing, and -nice configurable page frames and headers. - - - - -Pamphlet Printing Filters - -If your printer is able to produce duplex output, using either -one-pass or two-pass technology, you may be able to use one, or a -combination, of the pamphlet filters. - -For duplexing printers, make sure you use the duplex option that -turns the output along the short paper edge. Folding the -printed paper along the middle turns your document into a nice pamphlet. - -If you are stuck with using a simplex-only device, you can do the -same, using two different filters and a few additional steps. - -Depending on your model, first use the filter for printing the -odd pages, then insert the paper in the correct order -back into the paper tray to get the even pages printed on the reverse -side. These can then be folded to make a pamphlet. - - - - - - - - - - -&CUPS; Support: the Most Important Module in &tdeprint; - -&tdeprint; contains a module for &CUPS;. &CUPS;, the -Common &UNIX; Printing System (http://www.cups.org/), is the most -advanced, powerful and flexible of all print subsystems on &UNIX; and -other &UNIX;-like operating systems. It is still quite new on the -horizon, but is based on IPP, the Internet Printing -Protocol, the newly emerging standard for the future of network -printing. &CUPS; is clearly the print system of choice for Michael -Goffioul, the principal &tdeprint; developer. - -Experienced &kde; users may already be familiar with Michael's -utilities qtcups and -kups (co-developed with Jean-Eric Cuendet). -These were, up until now, the graphical -&GUI; front ends for &CUPS; with a strong relation to &kde;. - - -<application>qtcups</application> and -<application>kups</application> — The Predecessors - -Both utilities are probably still widely used. For those -not familiar with them, -here are brief explanations. - -qtcups was a graphical front end for -the lp or lpr print commands as -installed by &CUPS;. Using qtcups opened a -dialog. This dialog let you comfortably select your printer and the -print job options. qtcups -worked from the command line, or from -within applications, when the application in question had a configurable -print command. - -kups was a graphical wrapper to do the -administration tasks for your &CUPS; server, and the &CUPS; daemon at -the heart of it. You could add, delete, modify, configure, start, and -stop printers. You could cancel, delete, move, stop and restart print -jobs, and you could change the settings of the daemon, start, stop, and -restart it. - - - - -&tdeprint; — The Heir - -The &CUPS; Module in &tdeprint; now contains all (and more) -functions that were provided by qtcups and -kups in former &kde; versions. - -Instead of qtcups you can now use the -kprinter command. And in place of -kups you will probably use -kcmshell printers from now on. - - -The &tdeprint; module for &CUPS; also lets you fully administer -the print subsystem, just like kups did -before. It can start, stop and configure your &CUPS; daemon. It can also -start, stop, add and delete printers (&ie; printer -queues) and printer instances. Printer instances are -printer queues that point to the same physical output device but with a -different default setting of print options. - - - - -&kprinter; — Graphical Print Command - -&tdeprint;'s &CUPS; module gives you access to a graphical -print command, like qtcups did -before. - -Use &kprinter; in any application, even a non-&kde; -application, that lets you configure your print command. Examples of -these are &Netscape; and StarOffice, but -not most pre-&kde; 2.2 programs. - -A screenshot how to use the new kprinter -print command instead of the old-fashioned lpr... -Of course you need to have kprinter in your -$PATH, or give the full path in the dialog; ⪚ -/opt/kde/bin/kprinter. -&Netscape; will remember this and with further print jobs you will get -the kprinter dialog to configure your printouts. - - -A screenshot of the kprinter print -command in action. - - - - - -Here's a screenshot showing how to use the new -kprinter print command -instead of the old-fashioned lp or -lpr in &Netscape;. - - - - -You can also use &kprinter; from the -command line and see the resulting dialog box pop up: - - -Screenshot of the kprinter command - - - - -Screenshot showing use of the kprinter command -from the command line. - - - -Just make sure you give at least the file to be printed -from the command line as well: kprinter -. -This will hand over the &CUPS; Software Administrator Manual to the -kprinter dialog, which will then pop up with the -default printer pre-selected. - -To pre-select a specific printer from the command line, use the - option, ⪚: -kprinter -. You -can still de-select the printer and -choose a different one. - - You cannot however call -kprinter -without a print file and hope to open a file selection -dialog box from the &kprinter; window. This is a feature that will be -implemented only in the next version. - - -Using kprinter you are able to ring -all the bells and blow all the whistles of your printer. You -will need a device-specific so-called &PPD; (&PostScript; Printer -Description) to enable &CUPS; to make this nice tandem team do this -for you. Read more about this in . - - - - - - -Plans for Future Development - -What you have now is the first, already very feature-rich -version of &tdeprint;. This version is, of course, fully usable for -printing. You might even think that it was never so -easy (not even back in the days when you had to use -&Microsoft; &Windows;). - - In the future, &tdeprint; will become even better. It will do a -better job of detecting your installed print subsystem -itself. Already &tdeprint; is doing quite well in automatically -sensing if you have &CUPS; on your system. But in many cases you will -have to tell &tdeprint; what you are using, if you want to keep a -legacy print system. - -The most important improvement in the near future will be a -completion of the LPRng plugin. This at -present is still very basic. It is restricted to the pure classical -LPD part of -LPRng. - -Also, you may be able to add printers directly from the print -dialog to your system just in time, without going to -&kcontrol; first. - -Some smaller improvements already planned are: - - -add a file selection dialog from the &kprinter; window -to allow combining of additional files to the present -printjob add a -history button to the -KJobViewer window and also a column to show -the number of pages &CUPS; calculates for the job. - - -Finally, there will be an IO slave that will give -you access to your print subsystem, via &konqueror; for example. With -this you will soon be able to browse your print subsystem from -&konqueror; through a &URL; like shortcut such as -print://printers/printername. A KPart will add -a virtual folder to the services section of the &konqueror; navigation -panel, giving a nice integrated way to browse and manage your print -system via the &URL; print:/manager. - -Please contact Michael Goffioul at tdeprint@swing.be -with any further user or developer suggestions. - - - diff --git a/doc/kdeprint/index.docbook b/doc/kdeprint/index.docbook deleted file mode 100644 index 977d9a6f4..000000000 --- a/doc/kdeprint/index.docbook +++ /dev/null @@ -1,200 +0,0 @@ - -CUPS"> - PPD"> - IPP"> - ghostscript"> - - - - - - - - - - - - - - - - - -]> - - - - -The &tdeprint; Handbook - - - -Kurt -Pfeifle - -
kpfeifle@danka.de
-
-
- - -Michael -Goffioul - -
tdeprint@swing.be
-
-Developer -
- - -Lauri -Watts - -
lauri@kde.org
-
-Reviewer -
- - - -
- - -2001 -Kurt Pfeifle - - -&FDLNotice; - -2001-08-09 -1.00.04 - - -This handbook describes &tdeprint;. &tdeprint; is not a standalone -program. It is the new printing framework for &kde; 2.2. &tdeprint; -is an intermediate layer between &kde; (or other) applications and the selected -(and installed) print subsystem of your OS (&OS;). - - - -KDE -kdebase -tdeprint -print -printing -CUPS -LPR - - -
- - -Introduction - -This handbook describes &tdeprint;. &tdeprint; is not a standalone -program. It is the new printing framework for &kde; 2.2. &tdeprint; -is an intermediate layer between &kde; (or other) applications and the selected -(and installed) print subsystem of your OS (&OS;). - -It should be noted that both the developer of this application, -and the author of this document are most familiar with &CUPS; as a -printing system. At the time of writing, &CUPS; is the best supported -printing subsystem, and it is the best documented. - -This handbook is a work in progress, and later versions of the -&tdeprint; software and editions of this handbook will support and -explore more closely other printing systems. - -In the meantime, even if your printing subsystem is not yet well -covered, you are encouraged to explore the Printing -Manager module in &kcontrol;, and you will find its -operation to hopefully be fairly self evident, no matter what printing -subsystem you use. - -Lauri Watts, &kde; documentation team - - - - -To configure your printing subsystem from &kcontrol; - -To configure your printing subsystem from &kcontrol;, go to -SystemPrinting -Manager and select your subsystem. Or you can -let &tdeprint; try to determine it... - - -&CUPS; Printing Manager dialog: overview via &kcontrol; - - - - -The dialog to configure the &CUPS; server: security -settings -Configuration of printing subsystem from -&kcontrol; - - - - - - -&tech-overview-doc; - -&highlights-doc; - -&theory-doc; - -&getting-started-doc; - -&cups-configuration-doc; - -&add-printer-wizard-2-doc; - -&cupsoptions-presently-outside-kcontrol-doc; - -&rlpr-doc; - -&lpd-doc; - -&lpr-bsd-doc; - -&lprng-doc; - -&external-command-doc; - -&extensions-doc; - -&final-word-doc; - - -Credits And Licenses - -&tdeprint; copyright 2001, Michael Goffioul -tdeprint@swing.be -&underGPL; - -Documentation copyright 2001, Kurt Pfeifle, -kpfeifle@danka.de -&underFDL; - - - - - -
- - diff --git a/doc/kdeprint/kcontrol-icon.png b/doc/kdeprint/kcontrol-icon.png deleted file mode 100644 index 8fbaacd79..000000000 Binary files a/doc/kdeprint/kcontrol-icon.png and /dev/null differ diff --git a/doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png b/doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png deleted file mode 100644 index d7132b1cd..000000000 Binary files a/doc/kdeprint/kcontrolcenter-printmanager-jobcontrol-2.png and /dev/null differ diff --git a/doc/kdeprint/kcron_to_be_printed.png b/doc/kdeprint/kcron_to_be_printed.png deleted file mode 100644 index 114b26b3c..000000000 Binary files a/doc/kdeprint/kcron_to_be_printed.png and /dev/null differ diff --git a/doc/kdeprint/kdeprint-jobviewer.png b/doc/kdeprint/kdeprint-jobviewer.png deleted file mode 100644 index 8182e4317..000000000 Binary files a/doc/kdeprint/kdeprint-jobviewer.png and /dev/null differ diff --git a/doc/kdeprint/kprinter-as-netscape-printcommand.png b/doc/kdeprint/kprinter-as-netscape-printcommand.png deleted file mode 100644 index 0780e2a80..000000000 Binary files a/doc/kdeprint/kprinter-as-netscape-printcommand.png and /dev/null differ diff --git a/doc/kdeprint/kprinter-kivio.png b/doc/kdeprint/kprinter-kivio.png deleted file mode 100644 index b36b49b89..000000000 Binary files a/doc/kdeprint/kprinter-kivio.png and /dev/null differ diff --git a/doc/kdeprint/kprinter.png b/doc/kdeprint/kprinter.png deleted file mode 100644 index f83cfcd4b..000000000 Binary files a/doc/kdeprint/kprinter.png and /dev/null differ diff --git a/doc/kdeprint/kprinter_called_from_run_command.png b/doc/kdeprint/kprinter_called_from_run_command.png deleted file mode 100644 index b02070c1d..000000000 Binary files a/doc/kdeprint/kprinter_called_from_run_command.png and /dev/null differ diff --git a/doc/kdeprint/kprinter_with_kcron_developer_special.png b/doc/kdeprint/kprinter_with_kcron_developer_special.png deleted file mode 100644 index dc9b785cf..000000000 Binary files a/doc/kdeprint/kprinter_with_kcron_developer_special.png and /dev/null differ diff --git a/doc/kdeprint/lpd.docbook b/doc/kdeprint/lpd.docbook deleted file mode 100644 index cc555e399..000000000 --- a/doc/kdeprint/lpd.docbook +++ /dev/null @@ -1,18 +0,0 @@ - -Generic <acronym>LPD</acronym> Module (&UNIX;) - - - -Overview of Provided Features - -Module used by default (on first start for example). - -Generic module that only allows sending of print jobs. No printer or -job management supported. It is made to work on a wide variety of &UNIX; -flavors: &Linux;/LPR, &HP-UX;, Solaris, &IRIX;. -It also supports some LPRng extensions (like -the absence of continuation character \ in -printcap files). - - - diff --git a/doc/kdeprint/lpr-bsd.docbook b/doc/kdeprint/lpr-bsd.docbook deleted file mode 100644 index 007fbc6e5..000000000 --- a/doc/kdeprint/lpr-bsd.docbook +++ /dev/null @@ -1,25 +0,0 @@ - -<acronym>LPR</acronym> (<acronym>BSD</acronym>) - -Plain (old?) LPR support. An -LPRng module is in development, and hopefully -available for 2.3 release. - - -Overview of Provided Features - - - -Printer management: basic support to add/remove/configure a -printer, compatible with &RedHat;-6.x systems -(printtool + rhs-printfilers packages). - - -Job management: not supported - - -Print options: basic control - - - - diff --git a/doc/kdeprint/lprng.docbook b/doc/kdeprint/lprng.docbook deleted file mode 100644 index 78db2615b..000000000 --- a/doc/kdeprint/lprng.docbook +++ /dev/null @@ -1,7 +0,0 @@ - -<application>LPRng</application> - -An LPRng module for &tdeprint; is in -development, and hopefully available for the &kde; 2.3 release. - - diff --git a/doc/kdeprint/ps-boxes.png b/doc/kdeprint/ps-boxes.png deleted file mode 100644 index a24f845a7..000000000 Binary files a/doc/kdeprint/ps-boxes.png and /dev/null differ diff --git a/doc/kdeprint/rlpr.docbook b/doc/kdeprint/rlpr.docbook deleted file mode 100644 index fab48d7bb..000000000 --- a/doc/kdeprint/rlpr.docbook +++ /dev/null @@ -1,18 +0,0 @@ - -Module Built Around <application>rlpr</application> -Utility - - -Overview of provided features - -Printer management: basic operations are supported -(add/remove/modify). - -Each user can predefine the printers he wants to use by specifying -the host and related printer queues. Printers are stored on a per -user basis. This module is built around the -rlpr utility rlpr - - - diff --git a/doc/kdeprint/steinbruch_scaled.png b/doc/kdeprint/steinbruch_scaled.png deleted file mode 100644 index 57e6fde76..000000000 Binary files a/doc/kdeprint/steinbruch_scaled.png and /dev/null differ diff --git a/doc/kdeprint/tech-overview.docbook b/doc/kdeprint/tech-overview.docbook deleted file mode 100644 index 7a81a48a2..000000000 --- a/doc/kdeprint/tech-overview.docbook +++ /dev/null @@ -1,280 +0,0 @@ - -Technical Overview - -This chapter aims to give a technical overview of &tdeprint; which -non-programmers can comprehend. - -&tdeprint; is a new and revolutionary tool to give easy access to -printing services for both &kde; users and &kde; developers. - - -A Brief Description of &tdeprint; - -You can access the functions of &tdeprint; in different ways: -through the Printing Manger in the &kcontrol;, through the -kprinter command or through the dialog that pops up -if you want to print. - - -What it is <emphasis>not</emphasis> - -&tdeprint; is not a replacement for the -printing subsystem itself. &tdeprint; does not -therefore give provision for spooling, and it does -not do the basic processing of &PostScript; or -other print data. - - - - -What it <emphasis>is</emphasis> -&tdeprint; is an intermediate layer between the spooling and the -data processing print subsystem (as installed), and the application that -seeks to print. &tdeprint; provides a common interface for &kde; -developers and &kde; users, to various supported print subsystems. At -the same time, it is customizable, and highly configurable. - -&tdeprint; is easy to use for both &kde; developers and end-users. -Developers can port their applications, with minimal changes, to use -&tdeprint; instead of the old &Qt; print system. Users -can easily choose and configure their print subsystem. - -For a reference to new &kde; users: &Qt; is the basic library and -graphical toolkit, which is used by all &kde; applications; &Qt; is -developed by TrollTech, a Norwegian software company. - - - - - - -&tdeprint; -- Different Usage for Different People - -&tdeprint; has different faces for different people. - - -What users and administrators can do with &tdeprint; - -&tdeprint; allows users and/or administrators, depending on their -rights, access to printing subsystems (&CUPS;, LPD, -RLPR, LPRng, -PDQ &etc;) through a &kde; graphical user -interface (&GUI;). Using &tdeprint;, they can print, administer jobs, -printers and the printing daemon, all in a comfortable manner. - -Experienced users will like the capability to plug any working -filter for the print data between the output of their application and -the input, into the chosen print subsystem. Some examples for this -already ship with plain vanilla &tdeprint;. Read -on. - - - - - -What &kde; developers can do with it... - -If a &kde; developer needs printing access for his application, he -does not code the printing functions from scratch. Before &kde; 2.2 this -service was provided by the QPrinter class, a -library function of the &Qt; Toolkit. The -QPrinter class relied on the out-moded -Line Printer Daemon (LPD). The -&tdeprint; library bases itself firmly on the more modern Common &UNIX; -Printing System (&CUPS;), while at the same time keeping backward -compatibility with LPD and other legacy, or less -elaborate, print systems. It also leaves the door open -for any new development that might occur. - -For &kde; developers to use the new &tdeprint; class in their -applications, they require only minimal changes to their code: for every -call of QPrinter, they just need to change this to -KPrinter. Replacing one (!) letter in a few -spots, and automatically they are done; their application can then use -all of the features of the new &tdeprint; library. - -More ambitious developers, or ones with special requirements, can -do more: despite &tdeprint;'s feature-rich framework, they are still able -to customize the print dialog of their application -by creating an additional Tab, where their -extensions to the standard &tdeprint; will feel right at home. - - -This last mentioned feature has not been used widely inside -&kde; so far, as developers are not yet fully aware of &tdeprint;'s -power. Expect more of this in the near future. One example I -discovered is the &kcron; application. It lets you edit the crontab -through a &GUI;. The developers have implemented a printing feature -that lets you (or root) -choose if you want to print the whole of crontab (for all users) or -just the part that is marked. You can see the effects on &tdeprint; -in the following screenshots. - -This shot shows a sample from the &kcron; utility. - -&kcron; utility: a small sample of a system's cronjobs as -shown through the &kde; GUI&GUI;. - - - - -The &kcron; developers let you choose to print the whole of the -cron table or just the marked part of it. - - - - -The dialog to configure &kcron;'s printing options: the -additional tab titled Cron Options is from inside -&kcron;, not &tdeprint;; it is a special extension added by the -&kcron; developers for printing purposes, not originating from, but -executed by &tdeprint;. Developers of other applications are free -to implement their own goodies, if they feel need for it. - - - -&kcron;'s addition to the &tdeprint; dialog. - - - - -&kcron;'s addition to the &tdeprint; dialog. - -&kcron;'s addition to the &tdeprint; dialog. - - - - - - - -What &tdeprint; offers to everybody... - -&tdeprint;'s easy-to-use interface for all supported print subsystems -of course does not eliminate basic traditional weaknesses of some of -those systems. But it smooths some rough edges. Different users may use -different printing systems on the same box. A user is free to even -switch on the fly, from the print dialog, the print -subsystem to be used for the next job. (This is possible if different -systems are installed in a way that they don't get in each -other's way.) - -Most &UNIX; users are used to -LPD printing. LPD provides only -basic printing functions, is very inflexible and does not utilize the -many options of more modern print systems like &CUPS;. While also -working remotely over any distance (like every TCP/IP based protocol), -LPD lacks bi-directional communication, -authentication, access control and encryption support. - -&tdeprint; can use &CUPS; to support: - - - -Querying the LAN for available printers, - - -Basic, Digest, and Certificate Authentication, - - -Access Control based on IP addresses, net -addresses, netmasks, host- and domain names, - - -and 128-Bit TLS or SSL3 encryption of print data, to prevent -eavesdropping, or at least make it much more difficult. - - - -This makes &tdeprint; a much more robust and reliable solution -than using the venerable LPD. - - - -How to access &tdeprint; - -You get access to &tdeprint;, or parts of it, in four different -ways: - - -through your applications: if you call the printing -dialog (either File -Print...) or the button with the -little printer icon on it; this opens the printing -dialog. - -through the typed command kprinter -in a terminal or a &konsole; window or from -the Run Command... mini-CLI -window: this also opens the printing dialog. - -from the - button, starting &kcontrol;, and then go to -SystemPrinting -Manager. This opens the &tdeprint; -administration which is part of the &kcontrolcenter; and also lets -you switch to other parts of the &kcontrol; - -from a command line (&konsole; or -mini-CLI) type -kcmshell . -This opens just the &tdeprint; part of &kcontrol; to change your settings - - - -&kprinter; dialog to be started from Run Command... window - - - - -Starting the &kprinter; dialog from -a Run Command... window. -Starting the &kprinter; dialog from a Run -Command... window. - - - - Here is a -&kivio; drawing of the &kprinter; dialog as it pops up after being -started... You can always add a new printer by clicking on the small -Wizard button (marked red/yellow in this -drawing). - - -&kprinter; dialog started (&kivio; draft drawing) - - - - - -&kprinter; dialog started (&kivio; draft drawing) -&kprinter; dialog started (&kivio; draft -drawing) - - - - - - - - - - diff --git a/doc/kdeprint/theory.docbook b/doc/kdeprint/theory.docbook deleted file mode 100644 index 7b137f1c3..000000000 --- a/doc/kdeprint/theory.docbook +++ /dev/null @@ -1,690 +0,0 @@ - -Some Theoretical Background: &CUPS;, <acronym>IPP</acronym>, -&PostScript; and <application>Ghostscript</application> - -This chapter aims to give a bit of theoretical background to -printing in general, and to &CUPS; especially. If you are not in need -of this, you might like to skip ahead to the next chapter. Chances are you will -come back to this chapter at some point anyway, because sometimes one -needs extra theory to solve a practical problem. - - -Basics About Printing - -Printing is one of the more complicated chapters in -IT technology. - - -Earlier on in history, every developer of a program that was -capable of producing printable output had to write his own printer -drivers too. That was quite complicated, because different programs -have different file formats. Even programs with the same purpose, for -example: word processors, often do not understand each other's formats. -There was therefore no common interface to all printers, hence the -programmers often supported only a few selected models. - -A new device appearing on the market required the program authors -to write a new driver if they wanted their program to support it. Also -for manufacturers, it was impossible to make sure their device was -supported by any program known to the world (although there were far -fewer than today). - -Having to support ten application programs and a dozen printers, -meant a system administrator had to deal with 120 drivers. So the -development of unified interfaces between programs and printers became -an urgent need. - -The appearance of Page Description Languages, -describing the graphical representation of ink and toner on sheets of -paper (or other output devices, like monitors, photo typesetters, &etc;) -in a common way, was a move that filled a big gap. - -One such development was &PostScript; by Adobe. It meant that an -application programmer could concentrate on making his program generate -a &PostScript; language description of his printable page, while -printing device developers could focus on making their devices -&PostScript; literate. - -Of course, over time, there came the development of other description -methods. The most important competitors to &PostScript; were -PCL (Print Control Language, from -&Hewlett-Packard;), ESC/P (from Epson) and -GDI (Graphical Device Interface from -&Microsoft;). - -The appearance of these page description languages made life easier, -and facilitated further development for everybody. Yet the fact that there -still remained different, incompatible, and competing page description -languages keeps life for users, administrators, developers and -manufacturers difficult enough. - - -&PostScript; in memory - Bitmaps on Paper - -&PostScript; is most heavily used in professional printing -environments such as PrePress and printing service industries. In the -&UNIX; and &Linux; domains, &PostScript; is the predominant standard -as a PDL. Here, nearly every program generates a -&PostScript; representation of its pages once you push the -Print button. Let us look at a simple example of -(hand-made) &PostScript; code. The following listing describes two -simple drawings: - - -&PostScript; Code -%!PS -100 100 moveto -0 50 rlineto -50 0 rlineto -0 -50 rlineto -closepath -.7 setgray fill -% first box over; next -160 100 moveto -0 60 rlineto -45 10 rlineto -0 -40 rlineto -closepath -.2 setgray fill - - -This tells the imaginary &PostScript; pen to draw -a path of a certain shape, and then fill it with different shades of -gray. The first part translates into more comprehensive English as -Go to coordinate (100,100), draw a line with length 50 upward; -then one from there to the right, then down again, and finally close -this part. Now fill the drawn shape with 70% darkness gray. - - -Rendered &PostScript; - - - - - - example rendered as an -image. - - - - -Of course, &PostScript; can be much more complicated than this -simplistic example. It is a fully fledged programming language with -many different operators and functions. You may even write -&PostScript; programs to compute the value of Pi, format a hard disk or -write to a file. The main value and strength of &PostScript; however -lies in the field to describe the layout of graphical objects on a -page: it also can scale, mirror, translate, transform, rotate and -distort everything you can imagine on a piece of paper -- such as -letters in different font representations, figures, shapes, shades, -colors, lines, dots, raster... - -A &PostScript; file is a representation of one or more pages -to be printed, in a relatively abstract way. Ideally, it is meant -to describe the pages in a device-independent way. &PostScript; is -not directly visible; it only lives on hard disks -and in RAM as a coded representation of -future printouts. - - - - -Raster Images on Paper Sheets - -What you see on a piece of paper is nearly always a -raster image. Even if your brain suggests to you that -your eyes see a line: take a good magnifying glass and you will -discover lots of small dots... (One example to the contrary are -lines that have been drawn by pen plotters). And that -is the only thing that the marking engines of today's -printers can put on paper: simple dots of different colors, size and -resolution, to make up a complete page image composed of -different bitmap patterns. - -Different printers need the raster image prepared in different -ways. Thinking about an inkjet device: depending on its resolution, -the number of inks used (the very good ones need 7 different inks, while -cheaper ones might only use 3), the number of available jets (some print -heads have more than 100!) dispensing ink simultaneously, the -dithering algorithm used, and many other things, the -final raster format and transfer order to the marking engine is heavily -dependent on the exact model used. - -Back in the early life of the Line Printer Daemon, -printers were machines that hammered rows of ASCII -text mechanically on to long media, folded as a zig-zag paper -snake, drawn from a cardboard box beneath the -table... What a difference from today! - - - - - -<acronym>RIP</acronym>: From &PostScript; to Raster - -Before the final raster images are put on paper cut-sheets, they -have to be calculated somehow out of their abstract &PostScript; -representation. This is a very computing-intensive process. It is called -the Raster Imaging Process, more commonly -RIP). - -With &PostScript; printers the RIP-ping is -taken care of by the device itself. You just send the &PostScript; -file to it. The Raster Imaging Processor (also called the -RIP) inside the printer is responsible (and -specialized) to fulfill quite well this task of interpreting the -&PostScript;-page descriptions and put the raster image on paper. - -Smaller &PostScript; devices have a -hardware-RIP built in; it is etched in silicon, on a -special chip. Big professional printers often have their -RIP implemented as a software-RIP -inside a dedicated fast &UNIX; run computer, often a Sun SPARC Solaris -or a &SGI; &IRIX; machine. - - - - -<application>Ghostscript</application> as a Software -<acronym>RIP</acronym> - -But what happens, if you are not lucky enough to have a -&PostScript; printer available? - -You need to do the RIP-ing before you send -the print data to the marking engine. You need to digest the &PostScript; -generated by your application on the host machine (the print client) -itself. You need to know how the exact raster format of the target -printer's marking engine must be composed. - -In other words, as you can't rely on the printer to understand -and interpret the &PostScript; itself, the issue becomes quite a bit -more complicated. You need software that tries to solve for you the -issues involved. - -This is exactly what the omnipresent &ghostscript; package is -doing for many &Linux;, *BSD and other &UNIX; boxes that need to print -to non-&PostScript; printers: &ghostscript; is a &PostScript; -interpreter, a software RIP capable of running many -different devices. - - - - -<quote>Drivers</quote> and <quote>Filters</quote> in General - -To produce rasterized bitmaps from &PostScript; input, the -concept of filters is used by &ghostscript;. There are -many different filters in &ghostscript;, some of them specialized for -a certain model of printer. &ghostscript; filterspecializedin devices -have often been developed without the consent or support of the -manufacturer concerned. Without access to the specifications and -documentation, it was a very painstaking process to reverse engineer -protocols and data formats. - -Not all &ghostscript; filters work equally well for their -printers. Yet, some of the newer ones, like the -stp Filter of the -Gimp Print project, produce excellent -results leading to photographic quality on a par or even superior to -their &Microsoft; &Windows; driver counterparts. - -&PostScript; is what most application programs produce for -printing in &UNIX; and &Linux;. Filters are the true workhorses of -any printing system there. Essentially they produce the right bitmaps -from any &PostScript; input for non-&PostScript; target -engines. - - - - -Drivers and Filters and Backends in CUPS - -&CUPS; uses its own filters, though the filtering system is -based on Ghostscript. Namely the pstoraster and the imagetoraster -filters are directly derived from Ghostscript code. &CUPS; has -reorganized and streamlined the whole mechanics of this legacy code -and organized it into a few clear and distinct modules. - -This next drawing (done with the help of &kivio;) gives an -overview of the filters and backends inside &CUPS; and how they fit -together. The flow is from top to bottom. Backends -are special filters: they don't convert date to a different format, -but they send the ready files to the printer. There are different -backends for different transfer protocols. - - -&kprinter; dialog started (&kivio; draft drawing) - - - - - -&kprinter; dialog started (&kivio; draft -drawing) - - - - - -Spoolers and Printing Daemons - -Besides the heavy part of the filtering task to generate a -print-ready bitmap, any printing software needs to use a SPOOLing -mechanism: this is to line up different jobs from different users for -different printers and different filters and send them accordingly to -the destinations. The printing daemon takes care of all this. - -This daemon is keeping the house in order: it is also -responsible for the job control: users should be allowed to cancel, -stop, restart, &etc; their jobs (but not other peoples's jobs) and so -on. - - - - - - - - -Excursion: How <quote>CUPS</quote> uses the power of -&PPD;s - -Now that you know how a &PostScript; language file (which -describes the page layout in a largely device independent way) is -transformed into a Raster Image, you might ask: -Well, there are different kinds of raster output devices: first -they differ in their resolution; then there are the different paper -sizes; it goes on with many finishing options (duplex prints, -pamphlets, punched and stapled output with different sheets of colored -paper being drawn from different trays, &etc;). How does this fit into -our model of device-independent &PostScript;? - -The answer comes with so called &PostScript; Printer Description -(&PPD; files. A &PPD; describes all the device dependent features -which can be utilized by a certain printer model. It also contains -the coded commands that must be used to call certain features of the -device. But &PPD;s are not a closed book, they are simple -ASCII text files. - -&PPD;s were invented by Adobe to make it easy for -manufacturers to implement their own features into &PostScript; -printers, and at the same time retain a standard way of doing so. -&PPD;s are well documented and described by Adobe. Their -specification is a de-facto open standard. - - -Device Dependent Print Options - -Remember, advanced &PostScript; printing was originally only -developed for use on &Microsoft; &Windows; and Apple &Mac; systems. -For a long time, all of the feature rich printing on modern devices -was simply unavailable for &Linux; and &UNIX;. &CUPS; changes this -decisively. &CUPS; is closely tied with &PPD;s, and therefore existing -&PPD;s can be utilized to the full by all systems powered by -&CUPS;. - -Using &PPD;s, printer manufacturers were able to insert -device-specific hardware features into their products, for features such -as duplexing, stapling, punching, finishing, &etc;. The printer drivers -load this &PPD; just like an additional configuration file. Thus the -printer driver learns about the available device options and how to -call them; the driver also presents them in a &GUI; to the user. Through -this mechanism you are still able to print -device-independent &PostScript; page description -language files and specify device-dependent finishing options on top, -which are added to the application-generated &PostScript;. - - - - -Where to get the &PPD;s for &PostScript; Printers - -&PPD;s originally were not used routinely in &UNIX; and &Linux; -systems. The vendors providing those &PPD;s never intended them for -anything other than the originally supported &OS;s: &Microsoft; &Windows; and -&MacOS;. Through its brilliant move to fully support and utilize -the existing &PPD; specification, &CUPS; now gives the power to use -all features of modern printers to users of &Linux; and &Linux;-like -systems. &tdeprint; makes its usage even more comfortable than the -&CUPS; developers ever dreamed of. - -&CUPS; can use original &Windows; &PPD;s, distributed by the -vendors in the case of &PostScript; printers. Those normally don't -cost any money, and they can be grabbed from any &Windows; computer -with an installed &PostScript; driver for the model concerned, or from -the disks provided with the printer. There are also several places on -the web to download them. - - - - -How Special &PPD;s are Now Useful Even For Non-&PostScript; -Printers. - -Now you know how &PostScript;-Printers can use &PPD;s. But what -about non-&PostScript; printers? &CUPS; has done a very good trick: by -using the same format and data structure as the &PostScript; Printer -Descriptions (&PPD;s) in the &PostScript; world, it can describe the -available print job options for non-&PostScript; printers just the -same. For its own special purposes &CUPS; just added a few special -options (namely the line which defines the filter to be used for -further processing of the &PostScript; file). - -So, the developers could use the same software engine to parse -the Printer Description Files for available options for all sorts of -printers. Of course the &CUPS; developers could not rely on the -non-&PostScript; hardware manufacturers to suddenly develop &PPD;s. -They had to do the difficult start themselves and write them from -scratch. More than 1000 of these are available through the commercial -version of &CUPS;, called ESP -PrintPro. - -Meanwhile there are a lot of &CUPS;-specific &PPD;s available. -Even now those are in most cases not originating from the printer -manufacturers, but from Free software developers. The &CUPS; folks -proofed it, and others followed suit: where &Linux; and &UNIX; -printing one or two years ago still was a kludge, it is now able to -support a big range of printers, including 7-color inkjets capable of -pushing them to Photo Quality output. - - - - -Different Ways to get &PPD;s for non-&PostScript; -Printers - -You can get &PPD;s to be used with &CUPS; and non-&PostScript; -printers from different areas in the Web: - - - - first, there is the repository at www.linuxprinting.org, -which lets you generate a CUPS-O-Matic-&PPD; online for -any printer that had been supported by traditional &ghostscript; -printing already. This helps you to switch over to &CUPS; with little -effort, if you wish so. If your printer was doing well with the -traditional way of &ghostscript; printing, take CUPS-O-Matic to plug -your driver into th e &CUPS; system and you'll have the best of both -worlds. - - - -second, there are &CUPS;-&PPD;s for the more than 120 printer -models, which are driven by the new universal -stp driver. stp -(stood originally for Stylus Photo) is now developed by the gimp-print -project; it was started by Mike Sweet, the leading &CUPS; developer -and is now available through gimp-print.sourceforge.net. -This driver prints real Photo quality on many modern inkjets and can -be configured to make 120 &CUPS;-&PPD;s along its own -compilation. &HP; Laser- and DeskJet, Epson Stylus and Photo Color models as -well as some Canon and -Lexmark are covered. - - - -third, there is the commercial extension to &CUPS; from the -&CUPS; developers themselves: it is called ESP -PrintPro and comes with more than 2.300 printer -drivers. There are even improved imagetoraster and pstoraster filters -included. - - - -&CUPS; makes it really easy for manufacturers to start -supporting &Linux; and &UNIX; printing for their models at reasonably -low cost. The modular framework of &CUPS; facilitates to plug in any -filter (=driver) with minimal effort and to access and utilize the -whole printing framework that &CUPS; is creating. - -Read more about the exciting &CUPS; features in the available -&CUPS; documentation at http://www.cups.org/documentation.html -and http://www.danka.de/printpro/faq.html. -Also at http://www.linuxprinting.org/ -is a universal repository for all issues related to &Linux; and &UNIX; -printing. - - - - - - -How &IPP; Support Makes &CUPS; the Best Choice Around - - -<quote><acronym>LPD</acronym> Must Die!</quote> - -For a long time many developers were deeply dissatisfied with good -old LPD. Quite a few new projects were started to -improve printing: LPRng is the best known -example. Others are PDQ, PPR, -PLP, GNUlpr and -RLPR. But none of the new programs were seen as a -big shot; most of them are just implementing the same old -LPD specification with a few (or many) new -extensions, which again make them incompatible with each other. - -Having seen the development of not just one, but different -viable alternatives to venerable BSD-style -LPD, Grant Taylor, author of the Linux -Printing HOWTO, finally rallied the call LPD -Must Die! in his Campaign To Abolish The Line -Printer Daemon. - - - - - - -How the &IPP; Came to Be - -Along with the above, on the industry side of things, there were -efforts to overcome the well-known weaknesses of -LPD. It started with proprietary extensions to -plain old LPD, and stretched as far as -&Hewlett-Packard;'s attempt to establish &HP; JetDirect as a new -standard for a network printing protocol. The result were even more -incompatibilities. - -In the end, an initiative to define a new common industry and -IETF standard took shape. The Printer -Working Group or PWG, a loose aggregation -of vendors in hardware, software, and operating systems, drafted the -new Internet Printing Protocol, &IPP;. &IPP; v1.1 has -now been approved by the IETF (Internet Engineering -Task Force) as a proposed standard, and now enjoys the unanimous -support throughout the industry in Europe, USA and Japan. Most -current network printer models have now built in &IPP; support on top -of traditional LPR/LPD or -JetDirect Printing. - - - - -Why &IPP; is Solving Many Problems - -&IPP; promises to solve a lot of problems network administrators -face. This trade normally deals with heterogeneous network -environments and spends more than half of its working hours dealing -with printing problems. - -By creating a unified set of query functions for &IPP; enabled -printers and servers, for transferring files and setting job-control -attributes &etc;, &IPP; is destined to work across all &OS; platforms. -It's rollout however, will not happen overnight, as many legacy print -devices will still be in use for many years to come. Therefore, in -&IPP; there is a provision made for backwards compatibility of all -&IPP; implementations. &CUPS; is proving the viability of &IPP; -printing in all environments. - -The most striking advantage will be it's integration into the -existing set of other robust IP protocols. Being -an extension of the proven and robust HTTP 1.1 -protocol, for the special task of handling print file and related -data, it is also very easy to plug in other standards as they are -being developed and deployed: - - - -Basic, Digest, and Certificate Authentication for users seeking -access to print services. - - -SSL3 and TLS encryption for transferring -data. - - -Bi directional communication of clients with print devices, using -the HTTP/&IPP; GET and -POST mechanism. - - -LDAP directory service integration to keep a consistent database -of available printers, their capabilities and page-costs, &etc;, as well -as user passwords, ACLs &etc;. - - -Pull (as opposed to the usual Push -model) printing, where a server or printer just needs to be told the -&URL; of a document, whereupon it is retrieved from the resource on the -internet and printed. - - - - - - - - -Printer <quote>Plug'n'Play</quote> for Clients - -Have you ever seen a demonstration about &CUPS; capabilities in -the network? You must have been quite impressed if you didn't know in -advance what to expect. - -Imagine you as the administrator of a LAN. For -testing purposes you fully installed one &kde;/&CUPS; box on your net, -complete with a dozen printers configured and functional: -&PostScript;, LaserJets, InkJets and BubbleJets, and so on. Your -&kde; users on that box are very happy, they can print like never -before, ringing all the bells and whistles of every -printer. It took you 2 hours to make everything run perfectly... and -now all the other 100 users on the network want the same. Two hours -again for every box? No way you could do that before next year, you -think? - -Wrong. Just change one setting in the original &CUPS; box to -make it a server. Install &CUPS; on five other boxes, -as clients. By the time you turn back to your first -client, you find the users happily playing with the settings for the -dozen printers you had defined earlier on the server. -Somehow magically the printers had appeared on all the -Print dialogs of the five new &CUPS; client -boxes. - -Your users print, but not a single driver had been installed on -the clients, nor a printer queue defined. - -So, how does this magic work? - - - - -<quote>Seeing</quote> Printers Not Installed Locally? - -The answer is not complicated at all. - -If a &CUPS; server is on the LAN, it -broadcasts the names of all available printers to the -LAN, using the UDP protocol and -port 631. Port 631 is reserved as a well-known port by -IANA (the Internet Assigning Numbers -Authority) for &IPP; purposes. All &CUPS; clients listen to -&CUPS; server info sent to their port 631. That's how they know about -available printers, and that's how they learn about the -path to the printers as well. - -Using &IPP;, which is really a clever extension to -HTTP v1.1, &CUPS; is able to address all objects -related to the printing system via Universal Resource -Locators or URLs. Print jobs to be deleted -or restarted, printers to be queried or modified, admin tasks to be -performed on the server, with &IPP; and &CUPS;, everything is -addressable by a certain URL. Many important -things can be done through the web interface to &CUPS;, accessible for -example with &konqueror;. - - - - -Printing Without Installing a Driver - -And more, the clients basically can administer -and use any printer they see, just as if it was a -locally installed one. Of course, you can set restrictions on it with -access control lists &etc;, so that not any -clients may use any printer as it likes. - -The clients even are able to print without the appropriate filter -(or driver) installed locally. - -So how does this work? If a client wants to know about and -select printer-specific options, it sends a request (called -CUPS-get-ppd) to the server. The server tells the -client all about all printer-specific options, as read from the server -side &PPD;. The user on the client side can see the options and -select the required ones. He then sends the print file, usually -unfiltered raw &PostScript;, spiced up with the -printer-options to the printer server, using &IPP; as the transport -protocol. All further processing, especially the filtering to -generate the final format for the target printer, is then done by the -server. The server has the necessary programs (drivers -or filters) to do this. - -This way a client prints without needing to install a driver -locally. - -Any change on the server, such as adding or modifying a printer, -is instantly known to the clients with no further -configuration. - - - - -<quote>Zero Administration</quote>, Load Balancing, and -<quote>Failover Switching</quote> - -Some other advanced features built into &CUPS; are the capacity to -do load balancing. - -If you define the same printer queues on two or more different -servers, the clients will send their jobs to the first responding or -available server. This implies an automatic load balancing amongst -servers. If you have to take one server off the network for -maintenance, the others will just take over its tasks without the users -even noticing the difference. - - - - - - diff --git a/doc/kdesu/CMakeLists.txt b/doc/kdesu/CMakeLists.txt deleted file mode 100644 index 9c562330f..000000000 --- a/doc/kdesu/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -tde_create_handbook( DESTINATION tdesu ) diff --git a/doc/kdesu/Makefile.am b/doc/kdesu/Makefile.am deleted file mode 100644 index bafa3f6c3..000000000 --- a/doc/kdesu/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ - -KDE_LANG = en -KDE_DOCS = AUTO -KDE_MANS = AUTO - diff --git a/doc/kdesu/index.docbook b/doc/kdesu/index.docbook deleted file mode 100644 index 81c71cf17..000000000 --- a/doc/kdesu/index.docbook +++ /dev/null @@ -1,320 +0,0 @@ - - - - - -]> - - - - -The &tdesu; handbook - - -&Geert.Jansen; &Geert.Jansen.mail; - - - - -2000 -&Geert.Jansen; - - -&FDLNotice; - -2005-06-07 -1.00.00 - - -&tdesu; is a graphical front end for the &UNIX; -su command. - - -KDE -su -password -root - - - - - -Introduction - -Welcome to &tdesu;! &tdesu; is a graphical front end for the -&UNIX; su command for the K Desktop Environment. -It allows you to run a program as different user by supplying the -password for that user. &tdesu; is an unprivileged program; it uses -the system's su. - -&tdesu; has one additional feature: it can remember passwords -for you. If you are using this feature, you only need to enter the -password once for each command. See for more information on this and a -security analysis. - -This program is meant to be started from the command line or -from .desktop files. Although it asks for the -root password using a &GUI; -dialog, I consider it to be more of a command line <-> &GUI; -glue instead of a pure &GUI; program. - - - - -Using &tdesu; - -Usage of &tdesu; is easy. The syntax is like this: - - -tdesu - - - - file - icon name - - priority - - - - -user - - -command arg1 - arg2 - - - -tdesu -&kde; Generic Options -Qt Generic Options - - -The command line options are explained below. - - - - -This specifies the program to run as root. It has to be passed -in one argument. So if, for example, you want to start a new file manager, you -would enter at the prompt: tdesu - - - -Show debug information. - - - -This option allow efficient use of &tdesu; in -.desktop files. It tells &tdesu; to examine the -file specified by file. If this file is -writable by the current user, &tdesu; will execute the command as the -current user. If it is not writable, the command is executed as user -user (defaults to root). -file is evaluated like this: if -FILE starts with a /, it is -taken as an absolute filename. Otherwise, it is taken as the name of a -global &kde; configuration file. For example: to configure the K display -manager, kdm, you could issue -tdesu - - - icon name -Specify icon to use in the password dialog. You may specify -just the name, without any extension. -For instance to run kfmclient and show the -&konqueror; icon in the password dialog: -tdesu kfmclient - - - - - -Do not keep the password. This disables the keep -password checkbox in the password dialog. - - - priority - -Set priority value. The priority is an arbitrary number between 0 and -100, where 100 means highest priority, and 0 means lowest. The default is -50. - - - - -Use realtime scheduling. - - - - - -Stop the tdesu daemon. See . - - - -Enable terminal output. This disables password keeping. This is -largely for debugging purposes; if you want to run a console mode app, use the -standard su instead. - - - user -While the most common use for &tdesu; is to run a command as -the superuser, you can supply any user name and the appropriate -password. - - - - - - - - -Internals - - -X authentication - -The program you execute will run under the root user id and will -generally have no authority to access your X display. &tdesu; gets -around this by adding an authentication cookie for your display to a -temporary .Xauthority file. After the command -exits, this file is removed. - -If you don't use X cookies, you are on your own. &tdesu; will -detect this and will not add a cookie but you will have to make sure -that root is allowed to access to your display. - - - - -Interface to <command>su</command> - -&tdesu; uses the sytem's su for acquiring -priviliges. In this section, I explain the details of how &tdesu; does -this. - -Because some su implementations (&ie; the one -from &RedHat;) don't want to read the password from -stdin, &tdesu; creates a pty/tty pair and executes -su with it's standard filedescriptors connected to -the tty. - -To execute the command the user selected, rather than an -interactive shell, &tdesu; uses the argument with -su. This argument is understood by every shell that -I know of so it should work portably. su passes -this argument to the target user's shell, and the -shell executes the program. Example command: su . - -Instead of executing the user command directly with -su, &tdesu; executes a little stub program called -tdesu_stub. This stub (running as the -target user), requests some information from &tdesu; over the pty/tty -channel (the stub's stdin and stdout) and then executes the user's -program. The information passed over is: the X display, an X -authentication cookie (if available), the PATH and the -command to run. The reason why a stub program is used is that the X -cookie is private information and therefore cannot be passed on the -command line. - - - - -Password Checking - -&tdesu; will check the password you entered and gives an error -message if it is not correct. The checking is done by executing a test -program: /bin/true. If this succeeds, the -password is assumed to be correct. - - - - -Password Keeping - -For your comfort, &tdesu; implements a keep -password feature. If you are interested in security, you -should read this paragraph. - -Allowing &tdesu; to remember passwords opens up a (small) -security hole in your system. Obviously, &tdesu; does not allow -anybody but your user id to use the passwords, but, if done without -caution, this would lowers root's security level to that of a -normal user (you). A hacker who breaks into your account, would get -root access. &tdesu; tries -to prevent this. The security scheme it uses is, in my opinion at -least, reasonably safe and is explained here. - -&tdesu; uses a daemon, called -tdesud. The daemon listens to a &UNIX; -socket in /tmp for commands. The mode of the -socket is 0600 so that only your user id can connect to it. If -password keeping is enabled, &tdesu; executes commands through this -daemon. It writes the command and root's password to the socket and the -daemon executes the command using su, as describe -before. After this, the command and the password are not thrown -away. Instead, they are kept for a specified amount of time. This is -the timeout value from in the control module. If another request for -the same command is coming within this time period, the client does -not have to supply the password. To keep hackers who broke into your -account from stealing passwords from the daemon (for example, by -attaching a debugger), the daemon is installed set-group-id -nogroup. This should prevent all normal users (including you) from -getting passwords from the tdesud -process. Also, the daemon sets the DISPLAY environment -variable to the value it had when it was started. The only thing a -hacker can do is execute an application on your display. - -One weak spot in this scheme is that the programs you execute -are probably not written with security in mind (like setuid -root programs). This means -that they might have buffer overruns or other problems and a hacker -could exploit those. - -The use of the password keeping feature is a tradeoff between -security and comfort. I encourage you to think it over and decide for -yourself if you want to use it or not. - - - - - -Author - -&tdesu; - -Copyright 2000 &Geert.Jansen; - -&tdesu; is written by &Geert.Jansen;. It is somewhat based on -Pietro Iglio's &tdesu;, version 0.3. Pietro and I agreed that I will -maintain this program in the future. - -The author can be reached through email at &Geert.Jansen.mail;. -Please report any bugs you find to me so that I can fix them. If you -have a suggestion, feel free to contact me. - -&underFDL; -&underArtisticLicense; - - - - - - diff --git a/doc/kdesu/man-kdesu.1.docbook b/doc/kdesu/man-kdesu.1.docbook deleted file mode 100644 index fd99812fd..000000000 --- a/doc/kdesu/man-kdesu.1.docbook +++ /dev/null @@ -1,179 +0,0 @@ - - -]> - - - -KDE User's Manual -&Lauri.Watts; &Lauri.Watts.mail; -Jun 7, 2005 -K Desktop Environment - - - -tdesu -1 - - - -tdesu -Runs a program with elevated privileges - - - - -tdesu - - - - file - icon name - - priority - - - - -user - - -command arg1 - arg2 - - - -tdesu -KDE Generic Options -Qt Generic Options - - - - -Description -&tdesu; is a graphical front end for the -&UNIX; su command for the K Desktop Environment. -It allows you to run a program as different user by supplying the -password for that user. &tdesu; is an unprivileged program; it uses -the system's su. - -&tdesu; has one additional feature: it can optionally remember passwords -for you. If you are using this feature, you only need to enter the -password once for each command. - -This program is meant to be started from the command line or -from .desktop files. - - - -Options - - - - -This specifies the program to run as root. It has to be passed -in one argument. So if, for example, you want to start a new file manager, you -would enter at the prompt: tdesu - - - -Show debug information. - - - -This option allow efficient use of &tdesu; in -.desktop files. It tells &tdesu; to examine the -file specified by file. If this file is -writable by the current user, &tdesu; will execute the command as the -current user. If it is not writable, the command is executed as user -user (defaults to root). -file is evaluated like this: if -file starts with a /, it is -taken as an absolute filename. Otherwise, it is taken as the name of a -global &kde; configuration file. For example: to configure the K display -manager, kdm, you could issue -tdesu - - - icon name -Specify icon to use in the password dialog. You may specify -just the name, without any extension. - - - - - -Do not keep the password. This disables the keep -password checkbox in the password dialog. - - - priority - -Set priority value. The priority is an arbitrary number between 0 and -100, where 100 means highest priority, and 0 means lowest. The default is -50. - - - - -Use realtime scheduling. - - - - - -Stop the tdesu daemon. This is the daemon that caches -successful passwords in the background. This feature may also be disabled with - when &tdesu; is initially run. - - - -Enable terminal output. This disables password keeping. This is -largely for debugging purposes; if you want to run a console mode app, use the -standard su instead. - - - user -While the most common use for &tdesu; is to run a command as -the superuser, you can supply any user name and the appropriate -password. - - - - - - - - -See Also -su(1) - -More detailed user documentation is available from help:/tdesu -(either enter this URL into &konqueror;, or run -khelpcenter -help:/tdesu). - - - - -Examples -Run kfmclient as user jim, and show the &konqueror; icon in the -password dialog: -tdesu kfmclient - - - - -Authors -&tdesu; was written by -GeertJansen jansen@kde.org -and PietroIglio -iglio@fub.it. - - - - diff --git a/doc/tdeprint/CMakeLists.txt b/doc/tdeprint/CMakeLists.txt new file mode 100644 index 000000000..3a1f95d9e --- /dev/null +++ b/doc/tdeprint/CMakeLists.txt @@ -0,0 +1,12 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +tde_create_handbook( DESTINATION tdeprint ) diff --git a/doc/tdeprint/Makefile.am b/doc/tdeprint/Makefile.am new file mode 100644 index 000000000..e786da562 --- /dev/null +++ b/doc/tdeprint/Makefile.am @@ -0,0 +1,3 @@ + +KDE_LANG = en +KDE_DOCS = AUTO diff --git a/doc/tdeprint/add-printer-wiz.docbook b/doc/tdeprint/add-printer-wiz.docbook new file mode 100644 index 000000000..28d5791d2 --- /dev/null +++ b/doc/tdeprint/add-printer-wiz.docbook @@ -0,0 +1,290 @@ + +The <quote>Add Printer Wizard</quote> for &CUPS; + +Clicking on the leftmost icon on the toolbar + + in the upper part of the window starts the +Add Printer Wizard. + +This wizard steps you through various screens to install a new +printer. At present this Wizard works for &CUPS; and the +RLPR environment module. The number of steps depend +on the actual print-subsystem which is active and available to you on +your box. + + +Starting + +The welcome screen informs you that you can go back any time to +change a setting. + + +The &tdeprint; wizard introduction screen + + + + +The introduction screen of the printer wizard + + + + + +Backend Selection + +Choose the backend protocol that &CUPS; is supposed to +use with your new printer. There are: + + + +local printer (serial, parallel, USB) + + +remote LPD queue + + +SMB shared printer (&Windows;) + + +Network Printer (TCP, &HP; JetDirect, +AppSocket) + + +Network printer with &IPP; (&IPP;/HTTP) + + +File printer + + +serial fax /modem printer + + +Class of Printers + + + +If some choices are grayed out, they are not available. For +example, you may have no FAX backend software or no modem installed to +use it. + + +Choosing your Printer system + + + + +Choosing your Printer System + + + + + + +Direct Network Setting + +The contents of your next screen is dependent on your choice in +the previous screen. If you know the details, just type them in to +configure your network settings directly. + +In other cases the wizard can scan the network for you, to help you +decide which setting could be useful. + + +&tdeprint; wizard network scan + + + + +In the &tdeprint; wizard, you can enter network details +directly, or you can scan the network +automatically. + + + + + +Information Retrieval by Scanning the Network + +If you use one of the network connections (remote +LPD, SMB, remote &CUPS;, network +printer with &IPP;), you have an option for scanning the network. Be careful +when applying this; in some environments network scanning is considered +to be hostile and harmful! + +In the case of SMB, &tdeprint; will use the +Samba utilities nmblookup and +smbclient (which need to be installed for this to +work) to retrieve the information it presents in a tree +structure. + +In the case of &IPP; (Port 631) and TCP +Network/AppSocket (Port 9100) &tdeprint; will try to open the port and, +if successful, send an ipp-get-printer-attribute +request to the printer. For newer &HP; printers the latter usually +works, because they support both AppSocket and &IPP;. + +Some printers or manufacturers use other port numbers for direct +TCP/IP printing. You may need to look up which one to use. The +Settings button in the dialog lets you configure +your scan, including IP addresses, ports and +timeout to use. + +Once again: be careful not to be mistaken for an intruder on +your network, if you use the scanning technique. + + +&tdeprint; wizard network configuration dialog + + + + +In the &tdeprint; wizard, you can enter parameters to have the +wizard scan parts of your network. + + + + + +Printer Model Selection + +The hardest part is probably the Printer Model +Selection. In former years the situation was difficult, because +there were hardly any drivers to find. The difficulty now is there are too +many; though some of them are very good, many are quite broken. + +If you have a current database of available drivers +on your system, select the manufacturer in the left part of the window +first, then the device model in the right part. This split window shows +all &PPD;s found by &CUPS; in its standard repository of installable +&PPD;s. This repository normally is /usr/share/cups/model/. If you want your +driver to be found automatically by &CUPS; and &tdeprint;, place it in +there. + + + + + + +Driver Selection + +On the next screen you will see a description of the driver +selected previously. This description is extracted from the actual &PPD; +used. + + +For a real &PostScript; printer never try to +install a Foomatic or Gimp-Print &PPD;, +even if it is offered. You won't be happy with it. Instead find the +original &PPD; from the manufacturer, preferably the one written for +&Windows; NT and use it. + + +Some &Linux; distributions have supplied for &CUPS; every +possible combination of Ghostscript filters +and foomatic &PPD; files they could find on the net. +Many of these are quite useless; they were generated a year ago, when +the people at www.linuxprinting.org began +their first experiments with supplying third party &PPD;s for +&CUPS;. Although dubbed Alpha at the time, these +started to take on a life of their own and can now be found at various +places on the net, doing &CUPS; no favors. + +If you are not sure which ones to use go to: + + + +http://www.linuxprinting.org + + + + + +http://www.cups.org + + + + +And ask for help. At a later stage, a document detailing the +differences between the different driver and &PPD; models will appear at +http://tdeprint.sourceforge.net/ +Watch out for this! + +Via the Other... button you are able to +retrieve any &PPD; located somewhere on your available file +system. + + + + + +Printer Test and Finding the Right Settings + +Specify your first driver settings now. The most important one is the +default paper size. In many cases this is set to +Letter. If you live in an A4 +country and don't want your first test page to jam: now is the time to +prevent this. + +You are ready to start a test print. Hit the +Test button. + + + + + + + + +Finally: Baptizing Your New Printer + +The last screen lets you insert a name for your new +printer. + +The name must start with a letter and may contain numbers and +underscores with a maximum size of 128 characters. Conform to this if you +want to avoid erratic behavior of your &CUPS; daemon. The printer +names in &CUPS; are not case sensitive! This is a +requirement of &IPP;. So the names DANKA_infotec, Danka_Infotec and danka_infotec all represent the same +printer. + + + + + + +The Final Confirmation Screen + + + + + + + + diff --git a/doc/tdeprint/cr32-action-wizard.png b/doc/tdeprint/cr32-action-wizard.png new file mode 100644 index 000000000..b00db2499 Binary files /dev/null and b/doc/tdeprint/cr32-action-wizard.png differ diff --git a/doc/tdeprint/cups-config.docbook b/doc/tdeprint/cups-config.docbook new file mode 100644 index 000000000..304fe9514 --- /dev/null +++ b/doc/tdeprint/cups-config.docbook @@ -0,0 +1,2072 @@ + +Print Server Configuration: CUPS + +Start the print server configuration (now that you have chosen +&CUPS;, this is equivalent to the configuration of the &CUPS; daemon) by +clicking on the appropriate button. You can find it by moving the mouse +slowly over the buttons and reading the tooltips. It should be the 11th +from the left , or third from the right; its icon is a +wrench. + +The &CUPS; Server Configuration window pops up. It gives you a +structured view of all the settings that apply to the &CUPS; daemon. The +configuration file for that daemon is normally located in +/etc/cups/cupsd.conf. This is a plain +ASCII file with a syntax similar to the configuration +file of the Apache web server. It is a good +idea to create a backup copy, just in case something goes wrong with the +configuration through &tdeprint;/&CUPS; Server Configuration +dialogs: + +cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bak + +As this graphical user interface to edit the configuration file is +such a new feature, you should have the second chance of resorting to +the original file. So back it up, please. + + +Quick Help + +One very nice feature is the Quick Help +available. If you click on the little question mark (What's +this?) on your window title bar, you'll see the cursor +changing its form. Now click on a cupsd +configuration setting field to find out what it means and what your +options are. In most cases you should understand the meaning +immediately, otherwise turn to the excellent &CUPS; documentation. (If +your &CUPS; Daemon is running, you have it online on your own host at +http://localhost:631/documentation.html. +If &CUPS; is not running, but installed on your system you could +find it in your own host's file system. The exact location depends on +your &OS;, but on &Linux; the default is /usr/share/doc/cups/ or + +/usr/share/doc/cups/documentation.html. + + + +Longer Help + +For the best, most detailed and most recent information you should +always refer to the original &CUPS; documentation. &CUPS; is, much like +&kde; in a rapid development process. There are constantly new features +being added. New features might for times be only configurable by +directly editing the configuration files. The &tdeprint; &GUI; might not +have caught up with &CUPS; development. + +Just in case you want to look at the original configuration files +of your &CUPS; system -- they are here: + + +These paths are based on the default installation. Your &OS; +may have installed them to a different prefix, for example, /usr/local/, but the hierarchy should +still match that shown below. + + + + +/etc/cups/ + +The folder with the configuration files + + + + +/etc/cups/cupsd.conf + +The configuration file for the &CUPS; daemon + + + + +/etc/cups/printers.conf + +The configuration file that contains the information about your +locally installed printers. + + + + +/etc/cups/ppd/ + +The folder with &PPD; files of your installed +printers. + + + + +The following links only work if your &CUPS; daemon is up and +running. To access all the original &CUPS; documentation, go +to: + + + + +http://localhost:631/documentation.html + +A page with all the links to the other documents. + + + + + +http://localhost:631/sam.html + +Direct access to the &CUPS; Software Administrator Manual +in HTML format. + + + + + +http://localhost:631/sam.pdf + +Direct access to the &CUPS; Software Administrator Manual in +PDF format. + + + + + +http://www.cups.org/documentation.html + +The latest on line documentation from the &CUPS; web +site. + + + +The following links give you access to the same files (probably +icons and graphics will be missing) even if your CUPS daemon is not up +and running. You need, however, CUPS installed on your system. (Some +distributions might place the files somewhere else -- you're on your +own then to find out where...) To access all the original CUPS +documentation, go to: + +This documentation is available even when the &CUPS; daemon is +not installed, although you may find images and icons are missing when +you view the HTML files. + +As noted above, the hierarchy below should be intact, but your +&OS; may have installed &CUPS; to a different location. + + + +/usr/share/doc/cups/documentation.html + +A page with all the links to the other documents. + + + + +/usr/share/doc/cups/sam.html + +Direct access to the &CUPS; Software Administrator Manual in +HTML format. + + + + +/usr/share/doc/cups/sam.pdf + +Direct access to the &CUPS; Software Administrator Manual in +PDF format. + + + + +There are a few WebSites and Newsgroups discussing &CUPS; (and +&Linux; Printing in General) and giving help to newbies at: + + + + +http://www.cups.org/newsgroups.php + +The &CUPS; website. + + + + + +http://www.linuxprinting.org/newsportal/ + +LinuxPrinting.org, the home of the Linuxprinting HOWTO and the +&Linux; Printer Database + + + + +And finally, there will be a WebSite for &tdeprint; and related +documentation, at +http://tdeprint.sourceforge.net/ + +In the next section I will step you through most of the +configuration options of &tdeprint; with &CUPS;. + + + +Explaining different elements of the &GUI; + + +Upper Window: View on Printers, both Real and Virtual + +This section is not yet complete + + + +Tree view, icon view and list view + + +The icons of the task bar + + +Different fonts for different printers + + +Different printer icons mean different things + + + + + + +Lower Window: Tabbed View of Details + +This section is not yet complete. + + + +The icons of the task bar + + +The Tabs + + +Changing printer settings + + + + + + + + + +Welcome to the &CUPS; Server Configuration + +This is the Welcome Screen for your server configuration +dialogs. Clicking onto one of the items of the tree view on left +side of the screen opens the appropriate part of the configuration +settings. + +Every setting has a default value. The defaults let &CUPS; +normally work as a fully functional client. The clients listen on +TCP/IP Port 631 for infos broadcast by &CUPS; servers on the +LAN. This information let the clients print +immediately after receiving them, without installing any driver or +configuring any printer on the clients. + +To configure a &CUPS; server (which is broadcasting its service +to the LAN) you need to change settings from the +defaults. + +The dialog to configure the &CUPS; server: welcome screen. + +CUPS server configuration dialog: welcome screen + + + + +The dialog to configure the &CUPS; server: welcome +screen +The dialog to configure the &CUPS; server: welcome +screen + + + +To select the default setting of any item just enable the +checkbox on the right side of the screen. To set an item to a +different value, disable the checkbox and then go on to do the setting +you want on the left side of the screen. + +The complete server configuration includes: + + + +Server +General Configuration + + +Server +Logging Configuration + + +Server +Folders and Path Definitions + + +Server +HTTP Configuration + + +Server +Encryption and Certificate Support +Configuration + + +Server +Miscellaneous Configuration + + +Network General Configuration + + +Network +Clients Configuration + + +Browsing +General Configuration + + +Browsing +Connection Configuration + + +Browsing +Masks Configuration + + +Browsing +Timeouts Configuration + + +Browsing +Relay Configuration + + +Security +Configuration + + + +Each of these configuration items will be described in the +following sections of the manual. + + + + +Server General Configuration + +The server general configuration is done on this screen. It +includes: + + +Server name +Administrators email +Server user +Server group +Remote user name + + +The tab window to configure the &CUPS; server general settings +lets you the change the default values. Click on the little question +mark and then on one of the fields to get a Quick Help +about the meaning of the setting. + +If you are unsure, leave alone and turn to the original &CUPS; +documentation first. If your &CUPS; daemon is already running, it is +readable from the &konqueror; by pointing it to &URL; +http://localhost:631/documentation.html. + +There, first make friends with the Software +Administrator Manual. Otherwise, for example, if the &CUPS; daemon is +not running, try looking in your local file system, by default at +/usr/share/doc/cups/ or +/usr/share/doc/cups/documentation.html. + + +&CUPS; server general configuration dialog: ServerName, AdminMail, +ServerUser, ServerGroup, RemoteUserName + + + + +The dialog to configure the &CUPS; server general settings: +ServerName, AdminMail, ServerUser, ServerGroup, RemoteUserName + + + + + + +Server Name + +The hostname of your server, as advertised to the world. By +default, &CUPS; will use the hostname of the system. To set the +default server usd by clients, see the +client.conf file. + + +For example, enter myhost.domain.com + + +This is the hostname that is reported to clients. Should you +ever encounter strange problems in accessing the server, put here its +IP address for troubleshooting. This way you +eliminate any potential name resolution problems; and you can more +easily nail the real problem down. + + + + +Administrators email + +This is the email address to send all complaints or problems +to. By default &CUPS; will use root@hostname. + + +For example, enter +root@myhost.com. + + + +Contrary to what the quickhelp suggests, it is also legal to +send an email full of praise and enthusiasm about &CUPS; and +&tdeprint; to the server administrator. + + + + + +Server User + +The user the server runs under. Normally this must be +lp, however you can +configure things for another user if needed. + + +The server must be initially run as root to support the default +IPP port of 631. It changes users whenever an +external program is run. + + + +Enter for example lp. + + +This is the &UNIX; user account for filters and +CGI programs to run under. CGI +programs are responsible for showing you the nice web administration +interface accessible via http://localhost:631/). + + +There is no need to set the User directive +to root, so never do this, +as it only involves dangers. Should anyone discover security +vulnerabilities in one of the used file filters, printer drivers or +CGI programs, he could remotely execute arbitrary +commands on your system with root user privileges. Always use an +unprivileged account for the server directive +User. + + + + + +Server group + +The group the server runs under. Normally this must be +lpadmin, however you can +configure things for another group as needed. + + +Enter for example lpadmin. + + + + + +Remote user name + +The name of the user assigned to unauthenticated accesses from +remote systems. By default remroot. + +This name will appear in log files and in queries about the job +owner &etc;, for all resources and locations of the &CUPS; server that +are configured to allow access without +authentication. Authenticated entries will carry the authenticated +names. + + + + + + +Server Logging Configuration + +The server logging configuration is done on this screen. It +includes: + + +Access log file setting +Error log file setting +Page log file setting +Log level setting +Max log file size +setting + + +This is an important screen for you. Should you ever encounter +problems: here is the place to set the Log level to +debug, restart the &CUPS; daemon and then look at the +Error log file defined here for entries that might give you an insight +to the trouble. + + +&CUPS; server configuration dialog: Server +logging + + + + +The dialog to configure the &CUPS; server: Server +logging + + + + + +Access log file + +This is where accesses to the server are logged. If this does +not start with a leading /, then it is assumed to +be relative to the server root. + +You can also use the special name syslog +to send the output to the syslog file or daemon. + + +Enter a path, for example +/var/log/cups/acces_log. + + +The format of this file is stored in the so-called Common +Log Format. This way you can use programs such as +Webalyzer or any other Web access reporting +tool to generate reports on the &CUPS; server activities. + +To include the server name in the file name use a +%s in the name. Example: +/var/log/cups/access_log-%s. + +kurt@transmeta:~ >tail /var/log/cups/access_log + +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /printers/ HTTP/1.1" 200 109 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /admin/ HTTP/1.1" 401 0 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 210 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "GET /ppd/DANKA_P450.ppd HTTP/1.1" 200 51021 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST /jobs/ HTTP/1.1" 200 246 +10.160.16.45 - - [04/Aug/2001:20:11:39 +0100] "GET /printers/DANKA_P450 HTTP/1.0" 200 0 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 80 +127.0.0.1 - - [04/Aug/2001:20:11:39 +0100] "POST / HTTP/1.1" 200 139 +10.160.16.45 - - [04/Aug/2001:20:11:40 +0100] "GET /cups.css HTTP/1.0" 200 198 +127.0.0.1 - - [04/Aug/2001:20:11:40 +0100] "POST / HTTP/1.1" 200 139 +10.160.16.45 - - [04/Aug/2001:20:11:39 +0100] "GET /printers/DANKA_P450 HTTP/1.0" 200 7319 +10.160.16.45 - - [04/Aug/2001:20:11:40 +0100] "GET /images/title-logo.gif HTTP/1.0" 200 5729 + + +You see a separate line for each single access, showing the +IP address of the accessing client, date and time +of access, method of access (POST or +GET), the requested ressource, the &HTTP; version +used by the client, status code and the number of transferred +bytes. Status code 200 means +successful-OK the 401 in +the above example was an unauthorized access +which was denied. For a detailed explanation of the log format go to +the &CUPS; Software +Administrator Manual. + + + + +Error log file + +If this does not start with a leading /, then +it is assumed to be relative to the server root. The default setting +is /var/log/cups/error_log. + +You can also use the special name syslog +to send the output to the syslog file or daemon. + + +Enter the path, for example +/var/log/cups/error_log. + + +The error log excerpt below shows you the part logged for printing the test page +with the default setting of Log level to +info. For an explanation of the Log +Level setting see further below. + +kurt@transmeta:~ > tail /var/log/cups/error_log + +I [04/Aug/2001:23:15:10 +0100] Job 213 queued on 'DANKA_P450' by 'root' +I [04/Aug/2001:23:15:10 +0100] Started filter /usr/lib/cups/filter/pstops (PID 18891) for job 213. +I [04/Aug/2001:23:15:10 +0100] Started backend /usr/lib/cups/backend/lpd (PID 18892) for job 213. + + + + + +Page log file + +If this does not start with a leading / then +it is assumed to be relative to the server root. The default is +/var/log/cups/page_log + +You can also use the special name syslog +to send the output to the syslog file or daemon. + + +Enter the path, for example +/var/log/cups/page_log. + +The page log file has a line for every single page of every job +printed. + + Here is what some entries look like: + +kurt@transmeta:~ > tail /var/log/cups/page_log + +GIMP_print_stp_HP kdetest 201 [03/Aug/2001:03:18:03 +0100] 4 1 +GIMP_print_stp_HP kdetest 201 [03/Aug/2001:03:18:03 +0100] 5 1 +GIMP_print_stp_HP kdetest 202 [03/Aug/2001:11:46:49 +0100] 1 1 +GIMP_print_stp_HP kdetest 203 [03/Aug/2001:11:46:54 +0100] 1 1 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 1 33 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 2 33 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 3 33 +DANKA_infotec_P450 kurt 204 [04/Aug/2001:03:29:00 +0100] 4 33 +DANKA_infotec_P450 root 205 [04/Aug/2001:19:12:34 +0100] 1 14 +DANKA_infotec_P450 root 206 [04/Aug/2001:19:15:20 +0100] 1 1 + + +In this excerpt of the file you find information on the name of +the printers (GIMP_print_stp_HP and DANKA_infotec_P450) used through this +server, the user names (kdetest, kurt and root), the job-IDs (201 +to 205), time of printing, page number inside the job +and the number of copies for the pages. For example, job-ID 204 had 4 +pages and 33 copies printed, job-ID 205 had 14 copies of just 1 page) +. + + +&CUPS; is dependent (for its calculation of the number of pages +in a job) on passing the &PostScript; through the +pstops filter. See the &kivio; Flowchart on the &CUPS; +filter architecture for an idea about were this filter fits into the +whole printing process). More, pstops depends for +the counting on a DSC conforming +(DSC is Document Structuring Conventions, a +standard defined by Adobe) to be sent by the client. In most cases +this is working. + +However, this page accounting does not work for any +raw printer queues (as those, by definition, don't use +any filtering on the &CUPS; host and are by-passing +pstops.) Every job going through a +raw queue is counted as a 1-page-job (with possibly +multiple copies). This is especially true for all Jobs send from +&Microsoft; &Windows; clients via Samba to +the &CUPS; server, as those jobs are already arriving in the correct +format for the printer, because the clients use the original printer +driver. + + + +I am still looking for someone who will write a nice &CUPS; page +log analysing tool. It should generate a report with a graphical +output similar to the Webalizer's access +log reports. This way you could have nice statistics to be used for +accounting about usage of printers, load dependent on daytime or +weekday, users &etc; Anyone? + + + + + +Log level + +This setting controls the number of messages logged to the error +log file. It can be one of the following: + + + +debug2 + +Log everything. + + + + +debug + +Log almost everything. + + + + +info + +Log all requests and state changes. + + + + +warn + +Log errors and warnings. + + + + +error + +Log only errors. + + + + +none + +Log nothing. + + + + + +If you need to troubleshoot (or if you want to study the inner +workings of &CUPS;), set the log level to debug or debug2. Then the +error_log will have a lot more entries (not just errors, but also +informational entries). + +You can use this to watch live what &CUPS; is +doing when you send a print job. In a &konsole; type: + +kurt@transmeta:~ >tail 100 /var/log/cups/error_log + +This will give you the last 100 lines ( +100) of the file onto the screen and a +realtime update ()of what is +happening. The following listing shows the printing of a test page +(some pieces have been cut off for space reasons... Try it yourself if +you need more info): + + +I [04/Aug/2001:23:15:12 +0100] Job 214 queued on 'DANKA_P450' by 'root' +D [04/Aug/2001:23:15:12 +0100] StartJob(214, 08426fe0) +D [04/Aug/2001:23:15:12 +0100] StartJob() id = 214, file = 0/1 +D [04/Aug/2001:23:15:12 +0100] job-sheets=none,none +D [04/Aug/2001:23:15:12 +0100] banner_page = 0 +D [04/Aug/2001:23:15:12 +0100] StartJob: argv = "DANKA_P450","214","root","KDE Print Test", +[....] +D [04/Aug/2001:23:15:12 +0100] StartJob: envp = "PATH=/usr/lib/cups/filter:/bin:/usr/bin", [....] +D [04/Aug/2001:23:15:12 +0100] StartJob: statusfds = 5, 6 +D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[1] = 7, -1 +D [04/Aug/2001:23:15:12 +0100] StartJob: filter = "/usr/lib/cups/filter/pstops" +D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[0] = 8, 9 +D [04/Aug/2001:23:15:12 +0100] start_process("/usr/lib/cups/filter/pstops", [....] +I [04/Aug/2001:23:15:12 +0100] Started filter /usr/lib/cups/filter/pstops (PID 18991) for job 214. +D [04/Aug/2001:23:15:12 +0100] StartJob: backend = "/usr/lib/cups/backend/lpd" +D [04/Aug/2001:23:15:12 +0100] StartJob: filterfds[1] = -1, 7 +D [04/Aug/2001:23:15:12 +0100] start_process("/usr/lib/cups/backend/lpd", [....] +I [04/Aug/2001:23:15:12 +0100] Started backend /usr/lib/cups/backend/lpd (PID 18992) for job 214. +D [04/Aug/2001:23:15:12 +0100] Page = 595x842; 15,16 to 580,833 [....] + +The lines tagged D at the beginning are debug +level entries, the ones tagged I are there in +info level. + + + + +Max log file size + + +Controls the maximum size of each log file before they are +rotated. Defaults to 1048576 (1 Mb). Set this to 0 to disable log +rotation. + + +Enter an size in bytes, for example 1048576 + + + + + + + + +Server Folders Configuration + +The dialog to configure the &CUPS; server. Different +folders are to be set here. Normally you don't need to change +anything in this section. In case you play around with fancy +(TrueType, &PostScript; or other) fonts on your system, this qis the +place to do the settings for using those fonts when printing. Server +folder settings include: + + + +Executables: where to find the server +executables + + +Configuration: where to find the server +configuration files + + +Data: where to find the server data +files + + +Temporary files: where to put the server +temporary print files + + +Temporary Requests: where to find the +server + + +Font Path: where to find the +server fonts + + + +&CUPS; server configuration dialog: &HTTP; configuration + + + + +The dialog to configure the &CUPS; server: &HTTP; configuration + + + + + +Executables + +The root folder for the scheduler executables. By default +this is /usr/lib/cups (or +/usr/lib32/cups on IRIX +6.5) + + + + +Configuration + +The root folder for the scheduler. By default, /etc/cups. +On the authors SuSE system, this is /usr/share/doc/cups. It contains all the +HTML or PDF documentation for +&CUPS; which is available through the Web interface at +http://localhost:631/documentation.html + + + + +Data + +The root folder for the &CUPS; data files. By default this +is /usr/share/cups +It contains such things as banners, charsets, data, drivers, +fonts, and pstoraster templates. + + + + +Temporary files + +The folder to put temporary files in. This folder must be +writable by the user defined on the previous screen. This defaults to +either /var/spool/cups/tmp or +the value of the TMPDIR environment variable. + + + + +Temporary Requests + +The folder where request files are stored. By default this +is /var/spool/cups + + + + +Font path + +The place to configure the &CUPS; server for handling your fancy +fonts (TrueType or &PostScript;). &CUPS; will look here for fonts to +embed in printfiles. This currently only affects the +pstoraster filter, and the default is /usr/share/cups/fonts. + +To specify more than one folder, list them with double colons as +separator. Do it like this: + + +/path/to/first/fontdir/:/path/to/second/fontdir/:/path/to/last/fontdir/ + + +For the Font path directive to work as intended, the application +that wants to print needs to: + + + +Either correctly reference its desired fonts in the header of the +generated &PostScript; + + +Or embed the font into the &PostScript; file. + + + +Referencing the font by name leaves it up +to the RIP and print device to respect and actually +use it. RIP or printer can +only use the desired font, if it is available on the system. + + In the case of a &PostScript; printer, this needs to be a +printer-resident font. If the printers doesn't have this font, it will +try and replace it by an adequately similar font. + +In the case of a non &PostScript; printer, this is done by +&CUPS; and its RIP-ing filtering system. &CUPS; +will use the font path directive to grab the correct font when +RIP-ing the &PostScript; in the +pstoraster filter. + +In the case of a &PostScript; output device, &CUPS; is just +spooling the file (actually, it is passing it through the +pstops filter for accounting or n-up purposes), not +working on it. Therefore, if you print to a +&PostScript; printer it is solely the printer's responsibility to use +the font asked for. It can't, if the font is neither loaded into the +printer nor embedded in the &PostScript;. + + + + + + + +Server <acronym>HTTP</acronym> +Configuration + +The dialog to configure the &CUPS; server &HTTP; settings +is shown here. +&CUPS; server &HTTP; settings are the following ones: + +the Document folder +the Default Language +the Default Charset + + + +Dialog to configure the &CUPS; server &HTTP; settings + + + + + +Dialog to configure the &CUPS; server &HTTP; settings + + + + + + +Document folder + +The root folder for &HTTP; documents that are served. By +default the compiled in folder, /usr/share/cups/doc-root + + + + +Default Language + +The default language, if not specified by the browser. If not +specified, the current locale is used. + +Use the two letter locale codes, for example +en or de. + + + + + + +Default charset + +The default character set to use. If not specified, this +defaults to UTF-8. This can also be overridden directly in the +HTML documents. + + + + + + +<guilabel>Server encryption support configuration</guilabel> + +This is the dialog to configure the &CUPS; server security +settings. The server encryption support settings are these: + + +Server certificate: the file to +read containing the server's certificate +Server key: the file to read containing the server's +key + + +&CUPS; server configuration dialog: security overview + + + + +The dialog to configure the &CUPS; server: security settings + + + + + +Server certificate + +The file to read containing the server's certificate. Defaults +to /etc/cups/ssl/server.crt. + + + + +Server key + +The file to read containing the server's key. Defaults to +/etc/cups/ssl/server.key + + + + + + + +Server Miscellaneous Configuration + +The dialog to configure the &CUPS; server miscellaneous settings +is shown here. The following server settings are done through this +screen: + + +Preserve job history: whether to +preserve a job history for later re-view +Preserve job files: whether to +preserve fully RIP-ed job files for later +re-print +Printcap file: setting the name +of and the path to a printcap file +RIP Cache: setting the size of +the RIP cache in memory +Filter Limit: defining a filter +limit + + + +Dialog to configure the &CUPS; server miscellaneous settings + + + + +Dialog to configure the &CUPS; server miscellaneous +settings + + + + + +Preserve job history (after completion) + +Whether or not to preserve the job history after a job is +completed, canceled, or stopped. The default is yes + + + + +Preserve job file (after completion) + +Whether or not to preserve the job files after a job is +completed, canceled, or stopped. The default is no. + + + + +Printcap file + +The name of the printcap file. The default is no filename. +Leave this blank, to disable printcap file generation. +The printcap setting is only needed to satisfy older +applications in need of such a file. + + + + +RIP cache + +The amount of memory that each RIP should use +to cache bitmaps. The value can be any real number, followed by +k for kilobytes, m for megabytes, +gfor gigabytes, or t for tiles, where +one tile is 256 x 256 pixels. The default value is 8m. + + + + +Filter limit + +Sets the maximum cost of all job filters that can be run at the +same time. A limit of 0 means no limit. A typical job may need a +filter limit of at least 200. Limits less than the minimum required +by a job force a single job to be printed at any time. The default +limit is 0 (unlimited). + + + + + + +Network General Configuration + +The dialog to configure the &CUPS; server network settings is +shown here. It includes: + + +Look for hostname on IP +addresses +Port +Max request size +Timeout + + + +Dialog to configure the &CUPS; server network settings + + + + +Dialog to configure the &CUPS; server network +settings + + + + +Look for hostname on IP addresses + +Whether or not to do lookups on IP addresses +to get a fully-qualified hostname. This defaults to off, for +performance reasons. + + + + +Port + +Enter here Ports and addresses that the server will listen to. +The default port 631 is reserved for the Internet Printing Protocol, +and is what we use here. +You can have multiple entries, to listen to more than one port +or address, or to restrict access. + +Unfortunately, most web browsers don't support +TLS or &HTTP; upgrades for encryption. If you want +to support web-based encryption, you'll probably need to listen on +port 443, the HTTPS port. + +Use the Add and +Remove buttons to add and remove entries from +the list. + +You can enter ports on their own, ⪚ +631, or hostnames with ports, ⪚ +myhost:80 or 1.2.3.4:631. + + + + + +Max request size + +Controls the maximum size of &HTTP; requests and print files. +The default setting is 0, which disables this feature. + + + + +Timeout + +The timeout (in seconds) before requests time out. The default +is 300 seconds. + + + + + + + +Network Clients Configuration + +The dialog to configure the &CUPS; network client settings is +shown here. It includes: + + +Accept "Keep Alive" +requests +KeepAliveTimeout: +MaxClients: + + +dialog to configure the &CUPS; network client settings + + + + +Dialog to configure the &CUPS; network client settings + + + + + +Accept "Keep Alive" requests + +Whether or not to support the Keep-Alive connection option. The +default is on. + + + + +Keep alive timeout + +The timeout (in seconds) before Keep-Alive connections are +automatically closed. The default is 60 seconds. + + + + +Max number of clients + +Controls the maximum number of simultaneous clients that will be +handled. Defaults to 100. + + + + + + + +Browsing General Configuration + +The dialog to configure the &CUPS; browsing general settings +is shown here. It includes: + + +Enable browsing +Use short names when +possible +Use implicit +classes + + + + +Dialog to configure the &CUPS; browsing general +settings + + + + +Dialog to configure the &CUPS; browsing general +settings + + + + + +Enable browsing + +Whether or not to broadcast printer information to other &CUPS; +servers. Enabled by default. + + + + +Use short names when possible + +Whether or not to use short names for remote +printers when possible (⪚ printer instead of printer@host). Enabled by +default. + + + + +Use implicit classes + +Whether or not to use implicit classes. +Printer classes can be specified explicitly, in the +classes.conf file, implicitly based upon the +printers available on the LAN, or both. +When Implicit classes are enabled, printers on the +LAN with the same name (⪚ Acme-LaserPrint-1000) will be put into +a class with the same name. This allows you to setup multiple +redundant queues on a LAN without a lot of +administrative difficulties. If a user sends a job to Acme-LaserPrint-1000, the job will go to +the first available queue. +This option is enabled by default. + + + + + + +Browsing Connection Configuration + +The dialog to configure the &CUPS; server browsing connection is +shown here. Browsing connection settings include: + + +Broadcast addresses: The +(UDP) broadcast address to transmit printer +information to +Broadcast Port: The port number +to use for broadcasting +Poll addresses: The address(es) +to poll for information about printers on servers that might not +broadcast (or whose broadcasts might not reach your +LAN due to routers in between). + + + +Dialog to configure the &CUPS; server browsing +connection + + + + +Dialog to configure the &CUPS; server browsing +connection + + + + + +Broadcast addresses + +After pressing the Add button, you will +see the following dialog to enter a new value for outgoing +broadcasting browse packets. It is the same kind of dialog as for +adding other &CUPS; server addresses to be polled for printer +information. + + +Dialog to enter a new value for broadcasting browse +packets to + + + + +Dialog to enter a new value for broadcasting browse packets +to + + + +This option specifies a broadcast address to be used. By +default, browsing information is broadcast to all active +interfaces. + + +&HP-UX; 10.20 and earlier do not properly handle broadcast +unless you have a Class A, B, C or D netmask (&ie;, there is no +CIDR support). + + + + + +Broadcast port + +The port used for UDP broadcasts. By default +this is the IPP port; if you change this, you need +to do it on all servers. Only one BrowsePort is recognized. + + + + +Poll addresses + +Poll the named server(s) for printers. + + + + + + +Browsing Masks Configuration + +The dialog to configure the &CUPS; server allowed and/or denied browse +packets from other servers is shown here. + + +Browse allow: +Browse deny: +Browse order: + + + +Dialog to configure the &CUPS; server allowed and/or +denied browse packets from other servers + + + + +Dialog to configure the &CUPS; server allowed and/or denied +browse packets from other servers + + + + + +Add Browse Address dialog + +The dialog to enter a new value for the address of another +&CUPS; server to accept browse packets from is shown here. It is opened +by clicking on the Add... button beside the +field named Browse Allow:. It is the same dialog +as for adding denied broadcast sending +addresses. + +The dialog to enter a new value for the address of another +&CUPS; server to accept browse packets from is shown here. + + +Dialog to enter a new value for the address of another +&CUPS; server to accept browse packets from + + + + +Dialog to enter a new value for the address of another &CUPS; +server to accept browse packets from + + + + + + +Browse allow and Browse +deny + +Browse allow specifies an address mask to +allow for incoming browser packets. The default is to allow packets +from all addresses. +Browse deny specifies an address mask to +deny for incoming browser packets. The default is to deny packets +from no addresses. +Both Browse allow and Browse +deny accept the following notations for addresses: + + + + +All + + +None + + +*.domain.com + + +.domain.com + + +host.domain.com + + +nnn.* + + +nnn.nnn.* + + +nnn.nnn.nnn.* + + +nnn.nnn.nnn.nnn + + +nnn.nnn.nnn.nnn/mmm + + +nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm + + + + +The hostname/domain name restrictions will only work if you have +turned hostname lookups on! + + + + +Browse order + +Specifies the order of the allow/deny comparisons. + + + + + + + +Browsing Timeouts Configuration + +The dialog to configure the &CUPS; server browse timeout settings +is shown here. Browse timeout settings include: + +Browse Interval +Browse Timeout + + +Dialog to configure the &CUPS; server browse timeout +settings + + + + +dialog to configure the &CUPS; server browse timeout +settings + + + + + +Browse interval + +The time between browsing updates in seconds. The default is 30 +seconds. +Note that browsing information is sent whenever a printer's +state changes as well, so this represents the maximum time between +updates. +Set this to 0 to disable outgoing broadcasts so your local +printers are not advertised, but you can still see printers on other +hosts. + + + + +Browse timeouts + +The timeout (in seconds) for network printers - if we don't get +an update within this time, the printer will be removed from the +printer list. +This number definitely should not be less than the browse +interval period, for obvious reasons. Defaults to 300 seconds. + + + + + + +Browsing Relay Configuration + +The dialog to configure the &CUPS; server as a browsing relay is +shown here. Browsing relay settings include: + + +Browser packets relay + + + +Dialog to configure the &CUPS; server as a browsing +relay + + + + +Dialog to configure the &CUPS; server as a browsing +relay + + + + + +Add Browse Relay dialog + +The dialog to enter a new value for an address pair to define +browsing relaying between a &CUPS; server and a network is shown +here. + + +The dialog to enter a new value for an address pair to +define browsing relaying between a &CUPS; server and a +network + + + + +The dialog to enter a new value for an address pair to define +browsing relaying between a &CUPS; server and a +network + + + + + + +Browser packets relay + +Relay browser packets from one address or network to +another. + + + + + + + +Security Configuration + +The dialog to configure the &CUPS; server security settings for +any of the defined server locations is shown here. It contains the +following settings, which may be defined separately for any valid +resource (or location) of the &CUPS; server: + + +System Group: +Access Permissions: +Auth Type: +Auth Class: +Auth Group Name: +Encryption: +Allow: +Deny: +Order: + + +Valid resources (or locations) of the &CUPS; server are: + + +Server Root Location: / +Server Administration Location: /admin +All printers on the server: /printers +Any individual printer on the server: +⪚ /printers/infotec_P320 +All printer classes on the server: /classes: +Any individual printer class on the server: +⪚ /classes/all_infotecs_P320_or_P450 + + + +Dialog to configure the &CUPS; server security settings +for any of the defined server locations + + + + +dialog to configure the &CUPS; server security settings for +any of the defined server locations + + + + + +For all locations that are not defined separately the setting of +the location above it is valid. + +For example, you have a printer named infotec_P450 with no set security +options. Then the security of the location /printers will take the responsibility +for this printer as it is a sub-location of/printers. If, in turn there is no +security set for /printers, +then the security for / (the +general security) of the server takes responsibility. Either you have +set this for your purpose or the compiled-in default value takes +over. + + + + +SystemGroup + +The group name for System or printer administration +access. The default varies depending on the operating system, but +will be lpadmin, system or root (checked for in that order). + + + + +Access Permissions + +Access permissions for each folder served by the scheduler. +Locations are relative to the document root. + + + + +Authorization Type + +The authorization to use: + + + +None + +Perform no authentication. + + + +Basic + +Perform authentication using the &HTTP; Basic method. + + + +Digest + +Perform authentication using the &HTTP; Digest method. + + + + + +Local certificate authentication can be substituted by the +client for Basic or Digest, when connecting to the localhost +interface. + + + + + +Authorization Class + +The authorization class. Currently only +Anonymous, User, System +(valid user belonging to the group set as system group), and +group (valid user belonging to the specified group) are +supported. + + + + +Authorization Group Name + +The group name for Group authorization + + + + +Encryption + +Whether or not to use encryption. This depends on having the +OpenSSL linked into the &CUPS; library and +scheduler. +Possible values are: + + +Always + +Always use encryption (SSL) + + + +Never + +Never use encryption. + + + +Required + +Use TLS encryption upgrade. + + + +IfRequested + +Use encryption if the server requests it. + + + + + + + +Allow + +Allows access from the specified hostname, domain, +IP address or network. Possible values are: + + + + +All + + +None + + +*.domain.com + + +.domain.com + + +host.domain.com + + +nnn.* + + +nnn.nnn.* + + +nnn.nnn.nnn.* + + +nnn.nnn.nnn.nnn + + +nnn.nnn.nnn.nnn/mmm + + +nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm + + + + +The host and domain address require that you enable hostname +lookups, as described earlier. + + + + +Deny + +Denies access from the specified hostname, domain, +IP address or network. Possible values are: + + + +All + + +None + + +*.domain.com + + +.domain.com + + +host.domain.com + + +nnn.* + + +nnn.nnn.* + + +nnn.nnn.nnn.* + + +nnn.nnn.nnn.nnn + + +nnn.nnn.nnn.nnn/mmm + + +nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm + + + +The host and domain address require that you enable hostname +lookups, as described earlier. + + + + +Order + +The order of the allow and deny processing. + + + + + + +Example: How To Define The Security For All Printers + +The dialog to configure the &CUPS; server security settings is +discussed here. We use the example to add security definitions other +than the default ones for the resource named all printers. For the &CUPS; web server, +this is the location you access through +http://localhost:631/printers/ or (remotely) through +http://cups.server.name:631/printers/ + +The first screenshot shows the general location for this +setting. Select Add or +Modify a resource for which you want to decide +about its security settings. + + +Dialog to configure the &CUPS; server security +settings + + + +Dialog to configure the &CUPS; server security +settings + + + +This dialog is to add a new resource. It looks similar if you +want to modify an already existing resource. Here are the general +options: + + +Dialog to add a new resource. + + + + +Dialog to add a new resource. + + + +.This is the second part or the dialog is to add a new +ressource. It looks similar if you want to modify an already existing +resource. Here you define the actual access masks for the resource in +question. + + +Dialog to add a new resource. + + + + +Dialog to add a new resource. + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + +Resource dialog + + + + + + diff --git a/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png b/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png new file mode 100644 index 000000000..9f5a73d39 Binary files /dev/null and b/doc/tdeprint/cups-filterarchitecture-kivio-70Percent-scaled.png differ diff --git a/doc/tdeprint/cupsaddprinterwizard1.png b/doc/tdeprint/cupsaddprinterwizard1.png new file mode 100644 index 000000000..cf20e087c Binary files /dev/null and b/doc/tdeprint/cupsaddprinterwizard1.png differ diff --git a/doc/tdeprint/cupsaddprinterwizard2_backendselection.png b/doc/tdeprint/cupsaddprinterwizard2_backendselection.png new file mode 100644 index 000000000..3e4b2f126 Binary files /dev/null and b/doc/tdeprint/cupsaddprinterwizard2_backendselection.png differ diff --git a/doc/tdeprint/cupsaddprinterwizard3_networkscan.png b/doc/tdeprint/cupsaddprinterwizard3_networkscan.png new file mode 100644 index 000000000..160834ee9 Binary files /dev/null and b/doc/tdeprint/cupsaddprinterwizard3_networkscan.png differ diff --git a/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png b/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png new file mode 100644 index 000000000..aa6cd87f1 Binary files /dev/null and b/doc/tdeprint/cupsaddprinterwizard3_networkscan_results.png differ diff --git a/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png b/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png new file mode 100644 index 000000000..7fff7de52 Binary files /dev/null and b/doc/tdeprint/cupsaddprinterwizard4_networkscan_config.png differ diff --git a/doc/tdeprint/cupsoptions.docbook b/doc/tdeprint/cupsoptions.docbook new file mode 100644 index 000000000..bd0ba95a3 --- /dev/null +++ b/doc/tdeprint/cupsoptions.docbook @@ -0,0 +1,602 @@ + +&CUPS; options presently not available through &kcontrol; + +This chapter gives you some hints about further configuration +possibilities which may not be available through the &tdeprint; &GUI; +interface to &CUPS;. + + +Overview of provided features + +All of the most often used features and functions &CUPS; provides +are supported in &tdeprint;. + + + +Printer management is supported: add, remove, modify, configure, +test, disable, enable ... + + +Job management is supported: cancel, hold, release, move to +different printer + + +Print options: for full control as provided by &CUPS;. + + + + + + +Where to find help when using &CUPS; + +A lot of information about the inner workings of &CUPS; is +available through the web interface, which &CUPS; will always +support. It works with any browser (yes, even text-based ones). Just go +to http://localhost:631/ for +a start. There you find a link to locally available &CUPS; documentation +in HTML and PDF if you are new to +&CUPS;. + +&CUPS; is accessible through other means than &tdeprint;: +commandline and browser are two native &CUPS; interfaces. The many +commandline utilities add up to the most complete control you have on +&CUPS;. The web interface is only a subset of all available +configuration or control options. + +This is also true for &tdeprint;. Generally, as &CUPS; develops, +most new features will first be implemented through the commandline. Be +sure to check the latest versions of the man pages for &CUPS; to stay +up-to-date with new features after you install a new version. + + +Depending on your update method for &CUPS;, your active +configuration file might not have been re-placed by a new one; thus your +new, more capable &CUPS;-daemon might not have been told by the old +configuration file about the new features to use. + + +A complete list of available files and man pages should always be +in the &CUPS; Software Administrator Manual (http://localhost:631/sam.html#FILES. +In the &konqueror; &URL;/location field, type +man:/lpadmin and +man:/cupsd.conf to find out about the most +important command and configuration file. You knew already about +&konqueror;'s nice abilities to show you the traditional &UNIX; man +pages, didn't you? Read this. From there you find more interesting +hints and links to other man pages and documentation. + + +How to find &CUPS; related man pages + +Here is a way to find out which &CUPS; related man pages there +are on your system: + +kurt@transmeta:~ > apropos cups + +cups-calibrate (8)- ESP Printer Calibration Tool +lpstat (1) - print cups status information +cups-lpd (8) - receive print jobs + report printer status to lpd clients +classes.conf (5) - class configuration file for cups +backend (1) - cups backend transmission interfaces +filter (1) - cups file conversion filter interfaces +cups-polld (8) - cups printer polling daemon +mime.types (5) - mime type description file for cups +cupsd (8) - common unix printing system daemon +lpadmin (8) - configure cups printers and classes +cupsd.conf (5) - server configuration file for cups +mime.convs (5) - mime type conversion file for cups +printers.conf (5) - printer configuration file for cups +mime.convs (5) - mime type conversion file for cups +cups-polld (8) - cups printer polling daemon +lpstat (1) - print cups status information +backend (1) - cups backend transmission interfaces +mime.types (5) - mime type description file for cups +cupsd (8) - common unix printing system daemon +lpadmin (8) - configure cups printers and classes +printers.conf (5) - printer configuration file for cups +cupsd.conf (5) - server configuration file for cups +filter (1) - cups file conversion filter interfaces + + + + + +Outside &tdeprint;: Hints & Tips Tricks with &CUPS; on the +Commandline + +Here are a few examples of options that are presently only +available if you use the commandline. + + +Allowing or denying printer access for certain users + +When installing (or modifying) a printer through the command line, +you can either deny or allow the usage of that printer to certain +users: + +lpadmin HeidelbergDigimaster9110 lpd:/10.160.16.99/mqueue allow:kurt,sylvi,hansjoerg /home/kurt/PPDs/DVHV.ppd + +will allow the usage of this (believe me: very nice and also very +professional) printer to only the three mentioned users and at the same +time deny it to all others. If another user wants to print on the +DigiMaster via this &CUPS; server, he will receive an error message +along the lines client-error-not-possible. + +lpadmin HeidelbergDigimaster9110 lpd:/10.160.16.99/mqueue deny:tackat,boss,waba /home/kurt/PPDs/DVHV.ppd + +will deny the usage of this same printer to the three mentioned +users and at the same time allow it to all others. If +denied user wants to print on the DigiMaster via this +&CUPS; server, he will receive an error message along the lines +client-error-not-possible. + + +Only one of the two options may be used at one time; at present +there is no support to have a similar option in a per-group based +way. This will be implemented in the future. + + + + +Imposing Quotas for certain printers + +Sometimes you want to impose quotas for certain printers. With +quotas you can set upper limits for the number of pages or the amount of +data to be printed over a certain period to a certain printer. + +Quotas can be set with the option when +installing a printer with the lpadmin command, or +afterwards for an already existing printer. Following are some +guidelines (which are missing at the time of writing in the, official +&CUPS; documentation): + + + +With &CUPS; you may have pagecount- and filesize-based quotas for +individual printers. + + + +Quotas are calculated for each user individually (so a single set +of limits applies to all users for the printer concerned). + + + +Quotas include banner pages (if those are used). + + + +This means: you can limit every user to 20 pages per day on an +expensive printer, but you cannot limit every user except Kurt or root. + + + +There are , +, and +options to give when setting up a printer. + + + + sets a time interval for quota +computing (intervals are determined in seconds; so a day is +60x60x24=86.400, a week is 60x60x24x7=604,800, and a month is +60x60x24x30=2.592.000 seconds.) + + + +For quotas to be enforced, the time-period +plus at least one job-limit must be set to +non-zero. + + + +The default value of 0 for specifies +that there is no limit. + + + +The default value of 0 for +specifies that there is no limit. + + + +The default value of 0 for +specifies that the limits apply to all jobs that have been printed by a +user that are still known to the system. + + + + +Working Examples: + +Working, as both, time-period plus one or +both job-limits are defined + +lpadmin danka_infotec_4850 job-quota-period=604800 job-k-limit=1024 + +This sets a limit of a file size of 1 MB (in total) for each user +of existing printer danka_infotec_4850 during one week. + +lpadmin danka_infotec_4105 job-quota-period=604800 job-page-limit=100 + +This sets a limit of 100 pages (in total) for each user of +existing printer danka_infotec_4105 during one week. + +lpadmin danka_infotec_P450 job-quota-period=604800 job-k-limit=1024 job-page-limit=100 + +This sets a combined limit of 1 MB (in total) and 100 pages (in +total) for each user of existing printer danka_infotec_P450 during one +week. Whichever limit is reached first will take effect. + + + + +Not working examples + +NOT working, as only +one, time-period or job-limit +is defined) + +lpadmin danka_infotec_P320 job-quota-period=604800 + +lpadmin danka_infotec_FullColor job-page-limit=100 + +lpadmin danka_infotec_HiSpeed job-k-limit=1024 + + + + +Related Error Messages + +Once a user reaches his quota limit, he'll get a +client-error-not-possible message, if he wants to +print. + + + + + + +Installing a <quote>raw</quote> printer + +There are different ways to define a raw +printer. One comfortable one is to use the lpadmin +command. Just don't define a &PPD; file to be used for that printer and +it will be a raw one: + +lpadmin Raw_Danka_infotec lpd://10.160.16.137/PORT1 + +Raw printer queues are those which don't touch the print file to +transform it to a different file format. You need this for example when +printing from &Windows; clients via Samba through a &CUPS; server to a +PCL printer: in this case the &Windows; side printer +driver would generate the finished print file format for the target +printer and filtering it through &CUPS; filters would only harm the +purpose. Under certain circumstances (if you want to make sure that the +file goes to the printer unfiltered by &CUPS;) the +lpadmin without a &PPD; comes in +handy. + + + + + +Troubleshooting &CUPS; in &tdeprint; + +This section of the &tdeprint; Handbook will live from the +readers' feedback. Here is just a small beginning. + + +Error Messages + + + + +What does the error +client-error-bad-request mean? + + +The user sent a file to the &CUPS; which the server could not +process. You get this also upon sending an empty +file. + + + + + +And client-error-not-possible? + + +User is either not allowed to print to a certain printer or has +achieved his quota (based on file size and/or page number) + + + + + +How about client-error-not-found? + + +The user tried to access a nonexistent resource on the &CUPS; +server, such as trying to print a nonexistent file, or one that you are +denied permission to read. + + + + + + + + +Questions and Answers + + + + +Why can't I re-start my jobs? + + +To be able to re-start your completed jobs from the +web interface, you need a setting in the +/etc/cups/cupsd.conf file: set +PreserveJobFiles True. + + + + + +How do I get rid of the long list of completed jobs in the web +interface? + + +TODO + + + + + +How does page accounting work? + + +&CUPS; does the print accounting by passing nearly +every job through the pstops filter. This one does, +amongst other things, the page counting. Output of this filter there may +be piped into other filters (like pstoraster --> rastertopcl) or sent to +the printer directly (if it is a &PostScript; printer). + +In any case, this works for network, parallel, serial or +USB printers the same. For pstops to work, it needs +DSC, Document Structuring Convention compliant +&PostScript; (or near-equivalent) as input. So it calculates the pages +during filtering on the print server and writes info about every single +page (what time, which user, which job-ID and -name, which printer, how +many copies of which pages of the document, how many kilo-bytes?) into +/var/log/cups/page_log. + +By the way: on my personal wishlist is a hack of +webalizer to read and analyze the page_log and give a +similar output. Anyone? + +However, it is not giving correct results in +the following cases: + + + +The printer jams and maybe therefor throw away the job (real live +experience; or maybe throwing away the job because of problems with the +data format) + + +Jobs printed as raw are always counted as size of 1 +page (and maybe multiple copies). + + + +Therefore the page accounting of &CUPS; is only +an approximation (in many cases an excellent or at least good one, in +others a quite poor one). The only reliable print count is the one +done by the internal printer counter. (Because this is the one you pay +for, if you are on a click price or similar.) Some, by +far not most, printers can be queried remotely for that information +via SNMP (Simple Network Management Protocol). That +means, in a bigger network with many different printers there +is just no completely reliable and accurate page +accounting tool! + + + + + +Why doesn't page-accounting work with &Windows; clients? + + +From &Windows; clients jobs nearly always need to be sent as +raw. Why? If &CUPS; works as a print server for &Windows; +clients using the original native &Windows; driver for the target print +device, this guarantees the correct formatting of the job on the clients +already; therefor the server should not touch it and print +raw; therefor no filtering is started (and this is not +even possible as the input from the clients is not &PostScript; as +pstops expects; hence no page-count other than the default +1. + + + + + +How do I get a list of available options for a given printer or a +&PPD; file? + + +See the man page for the lpoptions command. You +may investigate a &CUPS;-enabled box about any option of its available +printers. There is no need to have the printer installed locally. As +long as the printer is available locally (through the &CUPS; +printer browsing feature), it will also work +remote. + +To query for a printers' option typing +lpoptions +HitachiDDP70MicroPress + will give a long listing of all +available options as read from the &PPD; file for the given +Hitachi-Printer (in my case installed on remote server +transmeta). Remote server Transmeta and its &CUPS; daemon as well +as the localhost's &CUPS; daemon need to be up and running for this to +succeed. + + + + + +How do I read the listing retrieved by the +lpoptions command? + + + +You know that for &PostScript; printer manufacturers it is +legal to define their own internal names and procedures +even for standard &PostScript; options. As long as the driver is able to +retrieve the option from the &PPD; and show it to the user in a way that +he understands it everything is OK. But what do you +do, if you want to use some obscure printer options on the command line? +How do you find out its exact syntax? + +Let's take an example. Looking at Hitachi's DDP70 printer and how +it implements duplex printing is revealing somehow. How do you tell how +to print double sided? duplex or Duplex? Or another name altogether?. + +lpoptions transmeta Hitachi_DDP70_ClusterPrintingSystem | grep uplex + +This leads to the output + +TR-Duplex/Duplex: False *True + +This is to be interpreted like follows: + + + +The name of the investigated option is +; + + +Behind the slash you see the translation of the option, as it +should be shown in a &GUI; or Web interface +(Duplex); + + +The option may take one of the two values +False or True; + + +The present setting is True to be +recognized by the marking with a star *. + + + +To override the present default setting (duplex) and print a job +in simplex, you need to use the following command: + +lpr Hitachi_DDP70_ClusterPrintingSystem TR-Duplex=False /path/to/your/printjob + + + + + +How do I get a nicely formatted listing of available options for a +given printer or &PPD;? + + +Use the lphelp command which may be installed +on your system locally. There is not yet a man page for +lphelp. + +lphelp infotecP450 + +This lists the available options for the named printer. It is +nicely formatted and does explain every available option and how to use +it. You can query different printers' options at once: + +lphelp infotec7410color DANKA_fullcolor_D2000 HP_ColorLaserJet8550 + +It also works for &PPD; files. Just specify the path to the +&PPD;: + +lphelp /home/kurt/PPDs/HP-ColorLaserJet8550.ppd + + + + + + +Solving Problems + +No system is perfect. Here are some commonly seen traps people +have fallen into. + + + + +My printer named 3-lp-duplex shows erratic +behavior. What's wrong? + + +The printer names used in &CUPS; shall start with a letter and may +contain up to 128 letters, numbers or underscores. Using dashes may lead +to problems. Speaking about naming: printer names in &CUPS; are not case +sensitive. So a printer named Best_of_Danka will be the same as +best_of_danka or BEST_OF_DANKA. (This is a requirement of +&IPP;, which &CUPS; is fully compliant with). + + + + + +Why do I get Unable to connect to SAMBA host: +Success with my printer shares from &Windows; accessed via +Samba? + + +Are the rights on the remote &Windows; box set correctly for you? +Are you actually allowed to print on the &Windows; shared +printer? + + + + + +My files for printer lp +sometimes mysteriously disappear and two days later I am told they got +printed on a printer three floors below my office. What is going on? + + +Believe me, it is very unlikely that your printer is the only one +with the name lp. Maybe +&CUPS; is playing a trick on you. As you might have the setting +ImplicitClasses On activated, &CUPS; tries to stuff all +printers it sees on the network into a Class name lp. All +jobs destined to lp are sent to this class and the first available +member prints it. So if you had this nice fellow (who listened closely +when you raved about &CUPS; and &tdeprint;) install &CUPS; and poke +around the system...get the idea? + +Take my advice: choose a unique name for any network printer! +(Mind you, the one on your parallel port also turns out to be a network +printer for the rest of the world if you don't take care of your +settings). + + + + + + diff --git a/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png b/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png new file mode 100644 index 000000000..391cf06ee Binary files /dev/null and b/doc/tdeprint/cupsserverconfig_browse_relay_add_button.png differ diff --git a/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png b/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png new file mode 100644 index 000000000..f5767faad Binary files /dev/null and b/doc/tdeprint/cupsserverconfig_browsingmasks_add_button.png differ diff --git a/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png b/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png new file mode 100644 index 000000000..3775f4d2a Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration10_browsinggeneral.png differ diff --git a/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png b/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png new file mode 100644 index 000000000..d3ca6971f Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration11_browsingconnections.png differ diff --git a/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png b/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png new file mode 100644 index 000000000..a662dd117 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration11_browsingmasks.png differ diff --git a/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png b/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png new file mode 100644 index 000000000..d9e9528d6 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration12_browsingtimeouts.png differ diff --git a/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png b/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png new file mode 100644 index 000000000..0030b4d7c Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration14_browsingrelay.png differ diff --git a/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png new file mode 100644 index 000000000..fab7bc65b Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration15a_resourceallprinters_defineaccess.png differ diff --git a/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png new file mode 100644 index 000000000..2cc4bf8ae Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration15b_resourceallprinters_defineaccess.png differ diff --git a/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png new file mode 100644 index 000000000..cfd09e543 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration15c_resourceallprinters_defineaccess.png differ diff --git a/doc/tdeprint/cupsserverconfiguration1_welcome.png b/doc/tdeprint/cupsserverconfiguration1_welcome.png new file mode 100644 index 000000000..50bd9ba3a Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration1_welcome.png differ diff --git a/doc/tdeprint/cupsserverconfiguration2_general.png b/doc/tdeprint/cupsserverconfiguration2_general.png new file mode 100644 index 000000000..c8e8b01c0 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration2_general.png differ diff --git a/doc/tdeprint/cupsserverconfiguration3_logging.png b/doc/tdeprint/cupsserverconfiguration3_logging.png new file mode 100644 index 000000000..300c31943 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration3_logging.png differ diff --git a/doc/tdeprint/cupsserverconfiguration4_directories.png b/doc/tdeprint/cupsserverconfiguration4_directories.png new file mode 100644 index 000000000..e55ab35fc Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration4_directories.png differ diff --git a/doc/tdeprint/cupsserverconfiguration5_HTTP.png b/doc/tdeprint/cupsserverconfiguration5_HTTP.png new file mode 100644 index 000000000..3e46eb17b Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration5_HTTP.png differ diff --git a/doc/tdeprint/cupsserverconfiguration6_encryption.png b/doc/tdeprint/cupsserverconfiguration6_encryption.png new file mode 100644 index 000000000..aca75adf0 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration6_encryption.png differ diff --git a/doc/tdeprint/cupsserverconfiguration7_miscellanious.png b/doc/tdeprint/cupsserverconfiguration7_miscellanious.png new file mode 100644 index 000000000..6a30d103e Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration7_miscellanious.png differ diff --git a/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png b/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png new file mode 100644 index 000000000..a0a40da20 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration8_networkgeneral.png differ diff --git a/doc/tdeprint/cupsserverconfiguration9_networkclients.png b/doc/tdeprint/cupsserverconfiguration9_networkclients.png new file mode 100644 index 000000000..89b30dfe9 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration9_networkclients.png differ diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png new file mode 100644 index 000000000..147830184 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration_resourceadminaccessmasks.png differ diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png new file mode 100644 index 000000000..295a0970a Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters.png differ diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png new file mode 100644 index 000000000..3b3b4eb04 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration_resourceadminaddprinters_defineaccess.png differ diff --git a/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png b/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png new file mode 100644 index 000000000..1b388a6cb Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration_resourceadminauthorization.png differ diff --git a/doc/tdeprint/cupsserverconfiguration_securityoverview.png b/doc/tdeprint/cupsserverconfiguration_securityoverview.png new file mode 100644 index 000000000..bed1d3df6 Binary files /dev/null and b/doc/tdeprint/cupsserverconfiguration_securityoverview.png differ diff --git a/doc/tdeprint/extensions.docbook b/doc/tdeprint/extensions.docbook new file mode 100644 index 000000000..c14691d51 --- /dev/null +++ b/doc/tdeprint/extensions.docbook @@ -0,0 +1,57 @@ + +&tdeprint; Extensions To All Print Subsystems + + +<quote>Virtual</quote> Printers + + +The <quote>Fax</quote> Printer + +To be written + + + + +The <quote>File</quote> Printer + +To be written + + + + +The <quote><acronym>PDF</acronym></quote> Printer + +To be written + + + + + + +<quote>External</quote> Filters + + +The <command>enscript</command> Filter for Text Files + +To be written + + + + +The <quote>n-up</quote> Filter for Any File + +To be written + + + + +Three different <quote>Make Pamphlet</quote> Filters for +&PostScript; Files + +To be written + + + + + + diff --git a/doc/tdeprint/external-command.docbook b/doc/tdeprint/external-command.docbook new file mode 100644 index 000000000..1a1135d7c --- /dev/null +++ b/doc/tdeprint/external-command.docbook @@ -0,0 +1,25 @@ + +Module For External Print Command (&Netscape;-like) + +This module allows the print command to be specified completely +(&Netscape;-like). An edit line is added in the print dialog for that +purpose. Can be used in many cases, for example with a self-made print +program. + + +Overview of provided features + + + +Printer management: not supported + + +Job management: not supported. + + +Print options: basic control, depending on your knowledge of the +print command + + + + diff --git a/doc/tdeprint/final-word.docbook b/doc/tdeprint/final-word.docbook new file mode 100644 index 000000000..175afb2f1 --- /dev/null +++ b/doc/tdeprint/final-word.docbook @@ -0,0 +1,117 @@ + +Final word from the Author + + +Who am I, what is my business? + + +My employer is Danka Deutschland GmbH, a leading and +manufacturer-independent provider of professional and hi-speed digital +printing systems, black-and-white as well as color. Danka provides +hardware, software, service, maintenance, consumables and customized +solutions for the products in its portfolio. I work there as a +System Engineer. Amongst the brands Danka offers are Heidelberg +(formerly Kodak), Canon, &Hewlett-Packard;, Hitachi, Infotec and +EfI. + + +My acquaintance with &Linux; and the Free Software community is not +too old. When I started to play around with &Linux; at the beginning +of 1999, my deepest disappointment was the poor support for +printing. True, I made all our machines spit out simplex prints -- but +what about duplex? What about punching the output? How to make sorting +work? Or stapling, cover sheets and all the other beautiful finishing +options our engines offer to customers? No way -- at least for me as a +non-geek! + + +I began a search on the Internet for a solution. Fortunately not +much later, in May 1999, Mike Sweet, principal developer of &CUPS;, +announced the first Beta release of this superb piece of printing +software. After trying it briefly, I knew this was it! + + +Next thing I attempted: to make &Linux; distributions interested in +this new stuff. Believe me -- it was more than tenacious! They seemed +to think they already had the best thing they could get in +printing. One reason probably was that they (and many &Linux; +developers) never had to think about how to best support a printer +duplexer -- because one had never come near their own +desks... + + +Finally, my attempts to make some &Linux; print publications +interested in &CUPS; backfired on me - one editor +squeezed me into writing a series on the subject myself. And this is +how some people started to give me the nickname CUPS +Evangelist. I will not get rid of this nick anytime soon, now +that even the &kde; people wedged me into their timeframe of +releases. Oh, boy... + +Anyway, &CUPS; is now making its way around the world and it +might well become a triumphal one: I am a little bit proud to have +supported and contributed to this from near the beginning. + +It should encourage you: even if some more experienced &Linux; +users than you are skeptical about it, and even if your programming +skills are next to zero (like mine) - there are a lot of tasks and +jobs and ideas, and talent that you can contribute to the Free Software +community. Not least within the &kde; project... ;-) + + + + + +Credits + +I'd like to thank... + + +Mike Sweet for developing &CUPS; in the first place + + +Jean-Eric Cuendet for starting kups +and qtcups, the predecessors of +&tdeprint; + + +Michael Goffioul for doing all the hard work recently + + +Martin Konold for thinking twice + + +Sven Guckes for teaching me a few things about the art of survival +on the terminal (just in case &kde; is not there ;-) ) + + +...too numerous others to mention who also let me snatch bits +and bytes of knowledge +off them + + + and last, but not least: Tom Schwaller for encouraging me +to get into documentation +writing + + + + + + +Caveats + +&tdeprint; has been developed on a system using &CUPS; 1.1.6. +&tdeprint; has been tested on other versions of &CUPS; and so +far no incompatibilities are known. By the time of writing +this Handbook, &CUPS; 1.1.9 is out with a few new features +not yet supported by &tdeprint;. Of course you are able to +access these features, but you will need to bypass &tdeprint; +and use the &CUPS; command-line tools or edit configuration +files manually. &tdeprint;'s development will go on and this +Handbook strives to always be the best available user documentation +resource for it. + + + + diff --git a/doc/tdeprint/getting-started.docbook b/doc/tdeprint/getting-started.docbook new file mode 100644 index 000000000..9ef1500b7 --- /dev/null +++ b/doc/tdeprint/getting-started.docbook @@ -0,0 +1,143 @@ + +Getting Started + +This chapter of the &tdeprint; Handbook will walk you through most +of the configuration or selection options of &tdeprint;. It will mainly +deal with &CUPS; in this version, as the author is most familiar with +it, and also because &tdeprint; started off with supporting &CUPS; +best. Later versions of the &tdeprint; software and editions of this +handbook will support and explore other printing +systems more closely. + + +Selecting Your Print Subsystem + +You need to define your print subsystem, before you are able to +install any printer with the &tdeprint; framework. There are two areas +where you can define this: either in &kcontrol; (The Printing +Manager section), or directly and on the fly +from the print dialog. + +Navigate to K Menu +Preferences System +Printing Manager. At the bottom +you can see a button that lets you select which printing subsystem you +want to use. In &kde; 2.2 you can choose from the following +alternatives: + + + +&CUPS; (Common &UNIX; Printing System) + + +Print through an external program (generic) + + +LPR (Standard BSD Print +System) + + +Generic &UNIX; LPD print system (the +default) + + +RLPR environment (print to remote +LPD servers from the command line) + + + +Of course, the chosen system must be installed, and up and running on +your box prior to your selection, or before it takes effect. + + + +On it's first startup, &tdeprint; will try an autodetection. This +only works for: + + + +&CUPS;, as it is checking first for a running &CUPS; daemon + + +LPD, as it is checking for a running +LPD daemon, plus a printcap +file. + + + + + +The system you choose must be installed on your system prior to +your selection. The author's personal recommendation is +&CUPS;. + +Once autodetected, chosen, or changed, the active print +subsystem will take effect for all &kde; applications. Different +users may have different print subsystems in use, if those do exist on +the computer and are compliant with each other. Their settings are +stored in the tdeprintrc. This file is unique to +every user, and is normally installed in +$HOME/.kde/share/config/tdeprintrc. + + +This file is not intended to be directly editable, and all +available options can be set from the &tdeprint; &GUI;. + + +You may even select a different printer subsystem, on the fly, from +the &kprinter; dialog box. + + + + +Working with the Printing Manager + +Once you have chosen your preferred and installed print subsystem, +you are ready to investigate, configure administer and work with this +system through the &tdeprint; framework. + +Navigate to K Menu +Preferences System +Printing Manager. In the right +part of the window you will see at least 4 printers predefined. These +are the virtual or special purpose printers, explained in section . You will probably see a toolbar with 13 icons at the +top of the window, and at least 4 tabs in the lower half of the window, +labeled Information, Jobs, +Properties and +Instances. + + + + + + + + + + + + + + + + + + diff --git a/doc/tdeprint/highlights.docbook b/doc/tdeprint/highlights.docbook new file mode 100644 index 000000000..72982c10c --- /dev/null +++ b/doc/tdeprint/highlights.docbook @@ -0,0 +1,518 @@ + +&tdeprint;'s Highlights + +The new &tdeprint; system includes more than one highlight. +Having worked in an environment in the past that is not exactly +sophisticated, as far as printing is concerned, take a look at some of +the benefits that come with &tdeprint; + + +The <quote>Add Printer</quote> Wizard + +&tdeprint; has an Add Printer Wizard. The Add +Printer Wizard helps you with adding and configuring a new printer. Of +course, you may do this manually as well. + +&tdeprint; helps you discover printers. It is able +to scan the environment for available devices and queues. This works for +network connections using TCP (AppSocket, +aka &HP; JetDirect, or IPP) or +SMB/Samba (shared &Windows;) printers +and partially for directly attached printers over parallel, serial, or +USB connections. + + +A screenshot of the new Add Printer +Wizard + + + + + +Here's a screenshot of the Add Printer Wizard +(this one is not very exciting yet; but...) + + + + +The wizard makes the installation and handling of the drivers +a snap. Selecting, configuring and testing should be easy +as never before on any &Linux;-like system. + + + + + + + +Full Print Job Control + +The Print Job Viewer is automatically started by &kprinter;. It +may be docked into the &kde; panel (in the system tray). The Print Job +Viewer allows full job management, if supported by the print +subsystem. + +You can: + + + +Hold and release jobs, + + +Move pending jobs to another printer, + + +Cancel pending or processing jobs. + + + +A screenshot of the &tdeprint; PrintJob Viewer shows the information +you get: Job-ID, target printer, job name, job owner, job status and job +size. In the next &tdeprint; release you will also see information about the +number of pages (as &CUPS; calculates it; see chapter on page accounting +for more information about its merits and limitations). + + +A screenshot of the &tdeprint; PrintJob Viewer + + + + + +Here's a screenshot of the &tdeprint; PrintJob Viewer. + +A screenshot of the &tdeprint; PrintJob +Viewer. + + + +An alternative way to looking at the same information (and having the +same amount of control is through the + + &kcontrolcenter; selecting +SystemPrinting +Manager. If you don't see the +Printer Information, +right click on the window +background and select View Printer +Information. Then go to the Jobs tab +to see this: + + + + + + + + +Here's a screenshot of the &tdeprint; PrintJob Viewer. + + + + + + + +Modules for different print subsystems + +&tdeprint; uses different modules to realize the interface to the +possible print subsystems. Not all the modules are yet developed fully, +but you will have basic printing functionality with: + + + +LPD (BSD style) + + +LPRng (&RedHat;, if you just use it's +BSD style subset), + + +RLPR (a command-line LPR +utility, which doesn't need a printcap file. + + +external print commands (&Netscape; like). + + + +Most importantly, full support for &CUPS; is already there. +Modules for other print subsystems, such as PLP, +PPR and PDQ may be available +later. + +&tdeprint; makes &kde; much more flexible. It gives freedom of +choice to &kde; 2.2 users. To use different available print subsystems, +these must, of course, be installed independently from &kde;. In +former versions, users were stuck with the old LPD +style print subsystems. Now they can even use &CUPS;. In the future, +there will be easy integration of new subsystems, as they +appear on the scene. + + + + +More &tdeprint; <quote>Goodies</quote> +Benefitting all Print SubSystems. + +Some specific features of &tdeprint; depend on the chosen print +subsystem. This dependency might exist because those features are only +implemented there; remember, &tdeprint; is an intermediate layer between +&kde; applications, and the print subsystem, but it's no replacement for +any print subsystem by itself. Such dependency may exist for another +reason: that &tdeprint; has not yet implemented an interface to all the +features of all the subsystems. + +Other features include benefits from &tdeprint; that are +independent of the chosen print subsystem, and are available with all of +them. At present there are special or +virtual printers, and some generic +pre-filters. + + + +Print Preview + +From the Print Dialog, you can select to look at a preview. For +this, the print file is passed through filters which make it suitable for +displaying on screen using &kghostview;. + + + + +Special Printers + +Amongst these additional &tdeprint; features are a few +special or virtual printers: + +These special printers may: + + + +Print to PDF + +Convert your document into a PDF file with the +help of an external program. + + + + +Print to email + +Send your document as an email attached PDF +file. + + + + +Print to PS file + +Save your document as a &PostScript; file. + + + + +Print to Fax + +Send it through an available backend, such as +Hylafax as a fax. + + + + + +These special printers appear in the user print +dialog just like normal printers. They are entirely +configurable on a per-user basis. + + + + + +Generic Pre-Filtering + +&tdeprint; provides you with a framework to define and configure +your own pre-filters. These pre-filters may take effect +before they are passed to your print subsystem for +further processing, but after the (&PostScript;, +plain text or other) print files have been generated by your +application. + +There are a few useful filters already predefined. These +are: + + + +The multiple pages per sheet filter, + + + +the enscript text filter, + + + +and three filters to help print pamphlets. + + + +You may create your own filters based on any third party program +that is able to process &PostScript;, plain text or image files, and output +any one of those formats. + +These filters are configured through XML files. +This makes an extension of the concept very easy for experienced developers, +but end-user configuration is also done through an intuitive graphical +user interface. So, fear not, you don't need to learn +XML because of &tdeprint;! + + + +Multiple Pages Per Sheet Filter + +This is a predefined filter that installs with &tdeprint;. It +allows you to create a modified &PostScript; output, from &PostScript; +input, that prints 1, 2, or 4 logical pages on a single sheet of +paper. + + + + +Enscript Text Filter + +This is a predefined filter that installs with &tdeprint;. It +allows you to create &PostScript; output from any text file input, that +includes syntax highlighting for program listings, pretty-printing, and +nice configurable page frames and headers. + + + + +Pamphlet Printing Filters + +If your printer is able to produce duplex output, using either +one-pass or two-pass technology, you may be able to use one, or a +combination, of the pamphlet filters. + +For duplexing printers, make sure you use the duplex option that +turns the output along the short paper edge. Folding the +printed paper along the middle turns your document into a nice pamphlet. + +If you are stuck with using a simplex-only device, you can do the +same, using two different filters and a few additional steps. + +Depending on your model, first use the filter for printing the +odd pages, then insert the paper in the correct order +back into the paper tray to get the even pages printed on the reverse +side. These can then be folded to make a pamphlet. + + + + + + + + + + +&CUPS; Support: the Most Important Module in &tdeprint; + +&tdeprint; contains a module for &CUPS;. &CUPS;, the +Common &UNIX; Printing System (http://www.cups.org/), is the most +advanced, powerful and flexible of all print subsystems on &UNIX; and +other &UNIX;-like operating systems. It is still quite new on the +horizon, but is based on IPP, the Internet Printing +Protocol, the newly emerging standard for the future of network +printing. &CUPS; is clearly the print system of choice for Michael +Goffioul, the principal &tdeprint; developer. + +Experienced &kde; users may already be familiar with Michael's +utilities qtcups and +kups (co-developed with Jean-Eric Cuendet). +These were, up until now, the graphical +&GUI; front ends for &CUPS; with a strong relation to &kde;. + + +<application>qtcups</application> and +<application>kups</application> — The Predecessors + +Both utilities are probably still widely used. For those +not familiar with them, +here are brief explanations. + +qtcups was a graphical front end for +the lp or lpr print commands as +installed by &CUPS;. Using qtcups opened a +dialog. This dialog let you comfortably select your printer and the +print job options. qtcups +worked from the command line, or from +within applications, when the application in question had a configurable +print command. + +kups was a graphical wrapper to do the +administration tasks for your &CUPS; server, and the &CUPS; daemon at +the heart of it. You could add, delete, modify, configure, start, and +stop printers. You could cancel, delete, move, stop and restart print +jobs, and you could change the settings of the daemon, start, stop, and +restart it. + + + + +&tdeprint; — The Heir + +The &CUPS; Module in &tdeprint; now contains all (and more) +functions that were provided by qtcups and +kups in former &kde; versions. + +Instead of qtcups you can now use the +kprinter command. And in place of +kups you will probably use +kcmshell printers from now on. + + +The &tdeprint; module for &CUPS; also lets you fully administer +the print subsystem, just like kups did +before. It can start, stop and configure your &CUPS; daemon. It can also +start, stop, add and delete printers (&ie; printer +queues) and printer instances. Printer instances are +printer queues that point to the same physical output device but with a +different default setting of print options. + + + + +&kprinter; — Graphical Print Command + +&tdeprint;'s &CUPS; module gives you access to a graphical +print command, like qtcups did +before. + +Use &kprinter; in any application, even a non-&kde; +application, that lets you configure your print command. Examples of +these are &Netscape; and StarOffice, but +not most pre-&kde; 2.2 programs. + +A screenshot how to use the new kprinter +print command instead of the old-fashioned lpr... +Of course you need to have kprinter in your +$PATH, or give the full path in the dialog; ⪚ +/opt/kde/bin/kprinter. +&Netscape; will remember this and with further print jobs you will get +the kprinter dialog to configure your printouts. + + +A screenshot of the kprinter print +command in action. + + + + + +Here's a screenshot showing how to use the new +kprinter print command +instead of the old-fashioned lp or +lpr in &Netscape;. + + + + +You can also use &kprinter; from the +command line and see the resulting dialog box pop up: + + +Screenshot of the kprinter command + + + + +Screenshot showing use of the kprinter command +from the command line. + + + +Just make sure you give at least the file to be printed +from the command line as well: kprinter +. +This will hand over the &CUPS; Software Administrator Manual to the +kprinter dialog, which will then pop up with the +default printer pre-selected. + +To pre-select a specific printer from the command line, use the + option, ⪚: +kprinter +. You +can still de-select the printer and +choose a different one. + + You cannot however call +kprinter +without a print file and hope to open a file selection +dialog box from the &kprinter; window. This is a feature that will be +implemented only in the next version. + + +Using kprinter you are able to ring +all the bells and blow all the whistles of your printer. You +will need a device-specific so-called &PPD; (&PostScript; Printer +Description) to enable &CUPS; to make this nice tandem team do this +for you. Read more about this in . + + + + + + +Plans for Future Development + +What you have now is the first, already very feature-rich +version of &tdeprint;. This version is, of course, fully usable for +printing. You might even think that it was never so +easy (not even back in the days when you had to use +&Microsoft; &Windows;). + + In the future, &tdeprint; will become even better. It will do a +better job of detecting your installed print subsystem +itself. Already &tdeprint; is doing quite well in automatically +sensing if you have &CUPS; on your system. But in many cases you will +have to tell &tdeprint; what you are using, if you want to keep a +legacy print system. + +The most important improvement in the near future will be a +completion of the LPRng plugin. This at +present is still very basic. It is restricted to the pure classical +LPD part of +LPRng. + +Also, you may be able to add printers directly from the print +dialog to your system just in time, without going to +&kcontrol; first. + +Some smaller improvements already planned are: + + +add a file selection dialog from the &kprinter; window +to allow combining of additional files to the present +printjob add a +history button to the +KJobViewer window and also a column to show +the number of pages &CUPS; calculates for the job. + + +Finally, there will be an IO slave that will give +you access to your print subsystem, via &konqueror; for example. With +this you will soon be able to browse your print subsystem from +&konqueror; through a &URL; like shortcut such as +print://printers/printername. A KPart will add +a virtual folder to the services section of the &konqueror; navigation +panel, giving a nice integrated way to browse and manage your print +system via the &URL; print:/manager. + +Please contact Michael Goffioul at tdeprint@swing.be +with any further user or developer suggestions. + + + diff --git a/doc/tdeprint/index.docbook b/doc/tdeprint/index.docbook new file mode 100644 index 000000000..977d9a6f4 --- /dev/null +++ b/doc/tdeprint/index.docbook @@ -0,0 +1,200 @@ + +CUPS"> + PPD"> + IPP"> + ghostscript"> + + + + + + + + + + + + + + + + + +]> + + + + +The &tdeprint; Handbook + + + +Kurt +Pfeifle + +
kpfeifle@danka.de
+
+
+ + +Michael +Goffioul + +
tdeprint@swing.be
+
+Developer +
+ + +Lauri +Watts + +
lauri@kde.org
+
+Reviewer +
+ + + +
+ + +2001 +Kurt Pfeifle + + +&FDLNotice; + +2001-08-09 +1.00.04 + + +This handbook describes &tdeprint;. &tdeprint; is not a standalone +program. It is the new printing framework for &kde; 2.2. &tdeprint; +is an intermediate layer between &kde; (or other) applications and the selected +(and installed) print subsystem of your OS (&OS;). + + + +KDE +kdebase +tdeprint +print +printing +CUPS +LPR + + +
+ + +Introduction + +This handbook describes &tdeprint;. &tdeprint; is not a standalone +program. It is the new printing framework for &kde; 2.2. &tdeprint; +is an intermediate layer between &kde; (or other) applications and the selected +(and installed) print subsystem of your OS (&OS;). + +It should be noted that both the developer of this application, +and the author of this document are most familiar with &CUPS; as a +printing system. At the time of writing, &CUPS; is the best supported +printing subsystem, and it is the best documented. + +This handbook is a work in progress, and later versions of the +&tdeprint; software and editions of this handbook will support and +explore more closely other printing systems. + +In the meantime, even if your printing subsystem is not yet well +covered, you are encouraged to explore the Printing +Manager module in &kcontrol;, and you will find its +operation to hopefully be fairly self evident, no matter what printing +subsystem you use. + +Lauri Watts, &kde; documentation team + + + + +To configure your printing subsystem from &kcontrol; + +To configure your printing subsystem from &kcontrol;, go to +SystemPrinting +Manager and select your subsystem. Or you can +let &tdeprint; try to determine it... + + +&CUPS; Printing Manager dialog: overview via &kcontrol; + + + + +The dialog to configure the &CUPS; server: security +settings +Configuration of printing subsystem from +&kcontrol; + + + + + + +&tech-overview-doc; + +&highlights-doc; + +&theory-doc; + +&getting-started-doc; + +&cups-configuration-doc; + +&add-printer-wizard-2-doc; + +&cupsoptions-presently-outside-kcontrol-doc; + +&rlpr-doc; + +&lpd-doc; + +&lpr-bsd-doc; + +&lprng-doc; + +&external-command-doc; + +&extensions-doc; + +&final-word-doc; + + +Credits And Licenses + +&tdeprint; copyright 2001, Michael Goffioul +tdeprint@swing.be +&underGPL; + +Documentation copyright 2001, Kurt Pfeifle, +kpfeifle@danka.de +&underFDL; + + + + + +
+ + diff --git a/doc/tdeprint/kcontrol-icon.png b/doc/tdeprint/kcontrol-icon.png new file mode 100644 index 000000000..8fbaacd79 Binary files /dev/null and b/doc/tdeprint/kcontrol-icon.png differ diff --git a/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png b/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png new file mode 100644 index 000000000..d7132b1cd Binary files /dev/null and b/doc/tdeprint/kcontrolcenter-printmanager-jobcontrol-2.png differ diff --git a/doc/tdeprint/kcron_to_be_printed.png b/doc/tdeprint/kcron_to_be_printed.png new file mode 100644 index 000000000..114b26b3c Binary files /dev/null and b/doc/tdeprint/kcron_to_be_printed.png differ diff --git a/doc/tdeprint/kprinter-as-netscape-printcommand.png b/doc/tdeprint/kprinter-as-netscape-printcommand.png new file mode 100644 index 000000000..0780e2a80 Binary files /dev/null and b/doc/tdeprint/kprinter-as-netscape-printcommand.png differ diff --git a/doc/tdeprint/kprinter-kivio.png b/doc/tdeprint/kprinter-kivio.png new file mode 100644 index 000000000..b36b49b89 Binary files /dev/null and b/doc/tdeprint/kprinter-kivio.png differ diff --git a/doc/tdeprint/kprinter.png b/doc/tdeprint/kprinter.png new file mode 100644 index 000000000..f83cfcd4b Binary files /dev/null and b/doc/tdeprint/kprinter.png differ diff --git a/doc/tdeprint/kprinter_called_from_run_command.png b/doc/tdeprint/kprinter_called_from_run_command.png new file mode 100644 index 000000000..b02070c1d Binary files /dev/null and b/doc/tdeprint/kprinter_called_from_run_command.png differ diff --git a/doc/tdeprint/kprinter_with_kcron_developer_special.png b/doc/tdeprint/kprinter_with_kcron_developer_special.png new file mode 100644 index 000000000..dc9b785cf Binary files /dev/null and b/doc/tdeprint/kprinter_with_kcron_developer_special.png differ diff --git a/doc/tdeprint/lpd.docbook b/doc/tdeprint/lpd.docbook new file mode 100644 index 000000000..cc555e399 --- /dev/null +++ b/doc/tdeprint/lpd.docbook @@ -0,0 +1,18 @@ + +Generic <acronym>LPD</acronym> Module (&UNIX;) + + + +Overview of Provided Features + +Module used by default (on first start for example). + +Generic module that only allows sending of print jobs. No printer or +job management supported. It is made to work on a wide variety of &UNIX; +flavors: &Linux;/LPR, &HP-UX;, Solaris, &IRIX;. +It also supports some LPRng extensions (like +the absence of continuation character \ in +printcap files). + + + diff --git a/doc/tdeprint/lpr-bsd.docbook b/doc/tdeprint/lpr-bsd.docbook new file mode 100644 index 000000000..007fbc6e5 --- /dev/null +++ b/doc/tdeprint/lpr-bsd.docbook @@ -0,0 +1,25 @@ + +<acronym>LPR</acronym> (<acronym>BSD</acronym>) + +Plain (old?) LPR support. An +LPRng module is in development, and hopefully +available for 2.3 release. + + +Overview of Provided Features + + + +Printer management: basic support to add/remove/configure a +printer, compatible with &RedHat;-6.x systems +(printtool + rhs-printfilers packages). + + +Job management: not supported + + +Print options: basic control + + + + diff --git a/doc/tdeprint/lprng.docbook b/doc/tdeprint/lprng.docbook new file mode 100644 index 000000000..78db2615b --- /dev/null +++ b/doc/tdeprint/lprng.docbook @@ -0,0 +1,7 @@ + +<application>LPRng</application> + +An LPRng module for &tdeprint; is in +development, and hopefully available for the &kde; 2.3 release. + + diff --git a/doc/tdeprint/ps-boxes.png b/doc/tdeprint/ps-boxes.png new file mode 100644 index 000000000..a24f845a7 Binary files /dev/null and b/doc/tdeprint/ps-boxes.png differ diff --git a/doc/tdeprint/rlpr.docbook b/doc/tdeprint/rlpr.docbook new file mode 100644 index 000000000..fab48d7bb --- /dev/null +++ b/doc/tdeprint/rlpr.docbook @@ -0,0 +1,18 @@ + +Module Built Around <application>rlpr</application> +Utility + + +Overview of provided features + +Printer management: basic operations are supported +(add/remove/modify). + +Each user can predefine the printers he wants to use by specifying +the host and related printer queues. Printers are stored on a per +user basis. This module is built around the +rlpr utility rlpr + + + diff --git a/doc/tdeprint/steinbruch_scaled.png b/doc/tdeprint/steinbruch_scaled.png new file mode 100644 index 000000000..57e6fde76 Binary files /dev/null and b/doc/tdeprint/steinbruch_scaled.png differ diff --git a/doc/tdeprint/tdeprint-jobviewer.png b/doc/tdeprint/tdeprint-jobviewer.png new file mode 100644 index 000000000..8182e4317 Binary files /dev/null and b/doc/tdeprint/tdeprint-jobviewer.png differ diff --git a/doc/tdeprint/tech-overview.docbook b/doc/tdeprint/tech-overview.docbook new file mode 100644 index 000000000..7a81a48a2 --- /dev/null +++ b/doc/tdeprint/tech-overview.docbook @@ -0,0 +1,280 @@ + +Technical Overview + +This chapter aims to give a technical overview of &tdeprint; which +non-programmers can comprehend. + +&tdeprint; is a new and revolutionary tool to give easy access to +printing services for both &kde; users and &kde; developers. + + +A Brief Description of &tdeprint; + +You can access the functions of &tdeprint; in different ways: +through the Printing Manger in the &kcontrol;, through the +kprinter command or through the dialog that pops up +if you want to print. + + +What it is <emphasis>not</emphasis> + +&tdeprint; is not a replacement for the +printing subsystem itself. &tdeprint; does not +therefore give provision for spooling, and it does +not do the basic processing of &PostScript; or +other print data. + + + + +What it <emphasis>is</emphasis> +&tdeprint; is an intermediate layer between the spooling and the +data processing print subsystem (as installed), and the application that +seeks to print. &tdeprint; provides a common interface for &kde; +developers and &kde; users, to various supported print subsystems. At +the same time, it is customizable, and highly configurable. + +&tdeprint; is easy to use for both &kde; developers and end-users. +Developers can port their applications, with minimal changes, to use +&tdeprint; instead of the old &Qt; print system. Users +can easily choose and configure their print subsystem. + +For a reference to new &kde; users: &Qt; is the basic library and +graphical toolkit, which is used by all &kde; applications; &Qt; is +developed by TrollTech, a Norwegian software company. + + + + + + +&tdeprint; -- Different Usage for Different People + +&tdeprint; has different faces for different people. + + +What users and administrators can do with &tdeprint; + +&tdeprint; allows users and/or administrators, depending on their +rights, access to printing subsystems (&CUPS;, LPD, +RLPR, LPRng, +PDQ &etc;) through a &kde; graphical user +interface (&GUI;). Using &tdeprint;, they can print, administer jobs, +printers and the printing daemon, all in a comfortable manner. + +Experienced users will like the capability to plug any working +filter for the print data between the output of their application and +the input, into the chosen print subsystem. Some examples for this +already ship with plain vanilla &tdeprint;. Read +on. + + + + + +What &kde; developers can do with it... + +If a &kde; developer needs printing access for his application, he +does not code the printing functions from scratch. Before &kde; 2.2 this +service was provided by the QPrinter class, a +library function of the &Qt; Toolkit. The +QPrinter class relied on the out-moded +Line Printer Daemon (LPD). The +&tdeprint; library bases itself firmly on the more modern Common &UNIX; +Printing System (&CUPS;), while at the same time keeping backward +compatibility with LPD and other legacy, or less +elaborate, print systems. It also leaves the door open +for any new development that might occur. + +For &kde; developers to use the new &tdeprint; class in their +applications, they require only minimal changes to their code: for every +call of QPrinter, they just need to change this to +KPrinter. Replacing one (!) letter in a few +spots, and automatically they are done; their application can then use +all of the features of the new &tdeprint; library. + +More ambitious developers, or ones with special requirements, can +do more: despite &tdeprint;'s feature-rich framework, they are still able +to customize the print dialog of their application +by creating an additional Tab, where their +extensions to the standard &tdeprint; will feel right at home. + + +This last mentioned feature has not been used widely inside +&kde; so far, as developers are not yet fully aware of &tdeprint;'s +power. Expect more of this in the near future. One example I +discovered is the &kcron; application. It lets you edit the crontab +through a &GUI;. The developers have implemented a printing feature +that lets you (or root) +choose if you want to print the whole of crontab (for all users) or +just the part that is marked. You can see the effects on &tdeprint; +in the following screenshots. + +This shot shows a sample from the &kcron; utility. + +&kcron; utility: a small sample of a system's cronjobs as +shown through the &kde; GUI&GUI;. + + + + +The &kcron; developers let you choose to print the whole of the +cron table or just the marked part of it. + + + + +The dialog to configure &kcron;'s printing options: the +additional tab titled Cron Options is from inside +&kcron;, not &tdeprint;; it is a special extension added by the +&kcron; developers for printing purposes, not originating from, but +executed by &tdeprint;. Developers of other applications are free +to implement their own goodies, if they feel need for it. + + + +&kcron;'s addition to the &tdeprint; dialog. + + + + +&kcron;'s addition to the &tdeprint; dialog. + +&kcron;'s addition to the &tdeprint; dialog. + + + + + + + +What &tdeprint; offers to everybody... + +&tdeprint;'s easy-to-use interface for all supported print subsystems +of course does not eliminate basic traditional weaknesses of some of +those systems. But it smooths some rough edges. Different users may use +different printing systems on the same box. A user is free to even +switch on the fly, from the print dialog, the print +subsystem to be used for the next job. (This is possible if different +systems are installed in a way that they don't get in each +other's way.) + +Most &UNIX; users are used to +LPD printing. LPD provides only +basic printing functions, is very inflexible and does not utilize the +many options of more modern print systems like &CUPS;. While also +working remotely over any distance (like every TCP/IP based protocol), +LPD lacks bi-directional communication, +authentication, access control and encryption support. + +&tdeprint; can use &CUPS; to support: + + + +Querying the LAN for available printers, + + +Basic, Digest, and Certificate Authentication, + + +Access Control based on IP addresses, net +addresses, netmasks, host- and domain names, + + +and 128-Bit TLS or SSL3 encryption of print data, to prevent +eavesdropping, or at least make it much more difficult. + + + +This makes &tdeprint; a much more robust and reliable solution +than using the venerable LPD. + + + +How to access &tdeprint; + +You get access to &tdeprint;, or parts of it, in four different +ways: + + +through your applications: if you call the printing +dialog (either File +Print...) or the button with the +little printer icon on it; this opens the printing +dialog. + +through the typed command kprinter +in a terminal or a &konsole; window or from +the Run Command... mini-CLI +window: this also opens the printing dialog. + +from the + button, starting &kcontrol;, and then go to +SystemPrinting +Manager. This opens the &tdeprint; +administration which is part of the &kcontrolcenter; and also lets +you switch to other parts of the &kcontrol; + +from a command line (&konsole; or +mini-CLI) type +kcmshell . +This opens just the &tdeprint; part of &kcontrol; to change your settings + + + +&kprinter; dialog to be started from Run Command... window + + + + +Starting the &kprinter; dialog from +a Run Command... window. +Starting the &kprinter; dialog from a Run +Command... window. + + + + Here is a +&kivio; drawing of the &kprinter; dialog as it pops up after being +started... You can always add a new printer by clicking on the small +Wizard button (marked red/yellow in this +drawing). + + +&kprinter; dialog started (&kivio; draft drawing) + + + + + +&kprinter; dialog started (&kivio; draft drawing) +&kprinter; dialog started (&kivio; draft +drawing) + + + + + + + + + + diff --git a/doc/tdeprint/theory.docbook b/doc/tdeprint/theory.docbook new file mode 100644 index 000000000..7b137f1c3 --- /dev/null +++ b/doc/tdeprint/theory.docbook @@ -0,0 +1,690 @@ + +Some Theoretical Background: &CUPS;, <acronym>IPP</acronym>, +&PostScript; and <application>Ghostscript</application> + +This chapter aims to give a bit of theoretical background to +printing in general, and to &CUPS; especially. If you are not in need +of this, you might like to skip ahead to the next chapter. Chances are you will +come back to this chapter at some point anyway, because sometimes one +needs extra theory to solve a practical problem. + + +Basics About Printing + +Printing is one of the more complicated chapters in +IT technology. + + +Earlier on in history, every developer of a program that was +capable of producing printable output had to write his own printer +drivers too. That was quite complicated, because different programs +have different file formats. Even programs with the same purpose, for +example: word processors, often do not understand each other's formats. +There was therefore no common interface to all printers, hence the +programmers often supported only a few selected models. + +A new device appearing on the market required the program authors +to write a new driver if they wanted their program to support it. Also +for manufacturers, it was impossible to make sure their device was +supported by any program known to the world (although there were far +fewer than today). + +Having to support ten application programs and a dozen printers, +meant a system administrator had to deal with 120 drivers. So the +development of unified interfaces between programs and printers became +an urgent need. + +The appearance of Page Description Languages, +describing the graphical representation of ink and toner on sheets of +paper (or other output devices, like monitors, photo typesetters, &etc;) +in a common way, was a move that filled a big gap. + +One such development was &PostScript; by Adobe. It meant that an +application programmer could concentrate on making his program generate +a &PostScript; language description of his printable page, while +printing device developers could focus on making their devices +&PostScript; literate. + +Of course, over time, there came the development of other description +methods. The most important competitors to &PostScript; were +PCL (Print Control Language, from +&Hewlett-Packard;), ESC/P (from Epson) and +GDI (Graphical Device Interface from +&Microsoft;). + +The appearance of these page description languages made life easier, +and facilitated further development for everybody. Yet the fact that there +still remained different, incompatible, and competing page description +languages keeps life for users, administrators, developers and +manufacturers difficult enough. + + +&PostScript; in memory - Bitmaps on Paper + +&PostScript; is most heavily used in professional printing +environments such as PrePress and printing service industries. In the +&UNIX; and &Linux; domains, &PostScript; is the predominant standard +as a PDL. Here, nearly every program generates a +&PostScript; representation of its pages once you push the +Print button. Let us look at a simple example of +(hand-made) &PostScript; code. The following listing describes two +simple drawings: + + +&PostScript; Code +%!PS +100 100 moveto +0 50 rlineto +50 0 rlineto +0 -50 rlineto +closepath +.7 setgray fill +% first box over; next +160 100 moveto +0 60 rlineto +45 10 rlineto +0 -40 rlineto +closepath +.2 setgray fill + + +This tells the imaginary &PostScript; pen to draw +a path of a certain shape, and then fill it with different shades of +gray. The first part translates into more comprehensive English as +Go to coordinate (100,100), draw a line with length 50 upward; +then one from there to the right, then down again, and finally close +this part. Now fill the drawn shape with 70% darkness gray. + + +Rendered &PostScript; + + + + + + example rendered as an +image. + + + + +Of course, &PostScript; can be much more complicated than this +simplistic example. It is a fully fledged programming language with +many different operators and functions. You may even write +&PostScript; programs to compute the value of Pi, format a hard disk or +write to a file. The main value and strength of &PostScript; however +lies in the field to describe the layout of graphical objects on a +page: it also can scale, mirror, translate, transform, rotate and +distort everything you can imagine on a piece of paper -- such as +letters in different font representations, figures, shapes, shades, +colors, lines, dots, raster... + +A &PostScript; file is a representation of one or more pages +to be printed, in a relatively abstract way. Ideally, it is meant +to describe the pages in a device-independent way. &PostScript; is +not directly visible; it only lives on hard disks +and in RAM as a coded representation of +future printouts. + + + + +Raster Images on Paper Sheets + +What you see on a piece of paper is nearly always a +raster image. Even if your brain suggests to you that +your eyes see a line: take a good magnifying glass and you will +discover lots of small dots... (One example to the contrary are +lines that have been drawn by pen plotters). And that +is the only thing that the marking engines of today's +printers can put on paper: simple dots of different colors, size and +resolution, to make up a complete page image composed of +different bitmap patterns. + +Different printers need the raster image prepared in different +ways. Thinking about an inkjet device: depending on its resolution, +the number of inks used (the very good ones need 7 different inks, while +cheaper ones might only use 3), the number of available jets (some print +heads have more than 100!) dispensing ink simultaneously, the +dithering algorithm used, and many other things, the +final raster format and transfer order to the marking engine is heavily +dependent on the exact model used. + +Back in the early life of the Line Printer Daemon, +printers were machines that hammered rows of ASCII +text mechanically on to long media, folded as a zig-zag paper +snake, drawn from a cardboard box beneath the +table... What a difference from today! + + + + + +<acronym>RIP</acronym>: From &PostScript; to Raster + +Before the final raster images are put on paper cut-sheets, they +have to be calculated somehow out of their abstract &PostScript; +representation. This is a very computing-intensive process. It is called +the Raster Imaging Process, more commonly +RIP). + +With &PostScript; printers the RIP-ping is +taken care of by the device itself. You just send the &PostScript; +file to it. The Raster Imaging Processor (also called the +RIP) inside the printer is responsible (and +specialized) to fulfill quite well this task of interpreting the +&PostScript;-page descriptions and put the raster image on paper. + +Smaller &PostScript; devices have a +hardware-RIP built in; it is etched in silicon, on a +special chip. Big professional printers often have their +RIP implemented as a software-RIP +inside a dedicated fast &UNIX; run computer, often a Sun SPARC Solaris +or a &SGI; &IRIX; machine. + + + + +<application>Ghostscript</application> as a Software +<acronym>RIP</acronym> + +But what happens, if you are not lucky enough to have a +&PostScript; printer available? + +You need to do the RIP-ing before you send +the print data to the marking engine. You need to digest the &PostScript; +generated by your application on the host machine (the print client) +itself. You need to know how the exact raster format of the target +printer's marking engine must be composed. + +In other words, as you can't rely on the printer to understand +and interpret the &PostScript; itself, the issue becomes quite a bit +more complicated. You need software that tries to solve for you the +issues involved. + +This is exactly what the omnipresent &ghostscript; package is +doing for many &Linux;, *BSD and other &UNIX; boxes that need to print +to non-&PostScript; printers: &ghostscript; is a &PostScript; +interpreter, a software RIP capable of running many +different devices. + + + + +<quote>Drivers</quote> and <quote>Filters</quote> in General + +To produce rasterized bitmaps from &PostScript; input, the +concept of filters is used by &ghostscript;. There are +many different filters in &ghostscript;, some of them specialized for +a certain model of printer. &ghostscript; filterspecializedin devices +have often been developed without the consent or support of the +manufacturer concerned. Without access to the specifications and +documentation, it was a very painstaking process to reverse engineer +protocols and data formats. + +Not all &ghostscript; filters work equally well for their +printers. Yet, some of the newer ones, like the +stp Filter of the +Gimp Print project, produce excellent +results leading to photographic quality on a par or even superior to +their &Microsoft; &Windows; driver counterparts. + +&PostScript; is what most application programs produce for +printing in &UNIX; and &Linux;. Filters are the true workhorses of +any printing system there. Essentially they produce the right bitmaps +from any &PostScript; input for non-&PostScript; target +engines. + + + + +Drivers and Filters and Backends in CUPS + +&CUPS; uses its own filters, though the filtering system is +based on Ghostscript. Namely the pstoraster and the imagetoraster +filters are directly derived from Ghostscript code. &CUPS; has +reorganized and streamlined the whole mechanics of this legacy code +and organized it into a few clear and distinct modules. + +This next drawing (done with the help of &kivio;) gives an +overview of the filters and backends inside &CUPS; and how they fit +together. The flow is from top to bottom. Backends +are special filters: they don't convert date to a different format, +but they send the ready files to the printer. There are different +backends for different transfer protocols. + + +&kprinter; dialog started (&kivio; draft drawing) + + + + + +&kprinter; dialog started (&kivio; draft +drawing) + + + + + +Spoolers and Printing Daemons + +Besides the heavy part of the filtering task to generate a +print-ready bitmap, any printing software needs to use a SPOOLing +mechanism: this is to line up different jobs from different users for +different printers and different filters and send them accordingly to +the destinations. The printing daemon takes care of all this. + +This daemon is keeping the house in order: it is also +responsible for the job control: users should be allowed to cancel, +stop, restart, &etc; their jobs (but not other peoples's jobs) and so +on. + + + + + + + + +Excursion: How <quote>CUPS</quote> uses the power of +&PPD;s + +Now that you know how a &PostScript; language file (which +describes the page layout in a largely device independent way) is +transformed into a Raster Image, you might ask: +Well, there are different kinds of raster output devices: first +they differ in their resolution; then there are the different paper +sizes; it goes on with many finishing options (duplex prints, +pamphlets, punched and stapled output with different sheets of colored +paper being drawn from different trays, &etc;). How does this fit into +our model of device-independent &PostScript;? + +The answer comes with so called &PostScript; Printer Description +(&PPD; files. A &PPD; describes all the device dependent features +which can be utilized by a certain printer model. It also contains +the coded commands that must be used to call certain features of the +device. But &PPD;s are not a closed book, they are simple +ASCII text files. + +&PPD;s were invented by Adobe to make it easy for +manufacturers to implement their own features into &PostScript; +printers, and at the same time retain a standard way of doing so. +&PPD;s are well documented and described by Adobe. Their +specification is a de-facto open standard. + + +Device Dependent Print Options + +Remember, advanced &PostScript; printing was originally only +developed for use on &Microsoft; &Windows; and Apple &Mac; systems. +For a long time, all of the feature rich printing on modern devices +was simply unavailable for &Linux; and &UNIX;. &CUPS; changes this +decisively. &CUPS; is closely tied with &PPD;s, and therefore existing +&PPD;s can be utilized to the full by all systems powered by +&CUPS;. + +Using &PPD;s, printer manufacturers were able to insert +device-specific hardware features into their products, for features such +as duplexing, stapling, punching, finishing, &etc;. The printer drivers +load this &PPD; just like an additional configuration file. Thus the +printer driver learns about the available device options and how to +call them; the driver also presents them in a &GUI; to the user. Through +this mechanism you are still able to print +device-independent &PostScript; page description +language files and specify device-dependent finishing options on top, +which are added to the application-generated &PostScript;. + + + + +Where to get the &PPD;s for &PostScript; Printers + +&PPD;s originally were not used routinely in &UNIX; and &Linux; +systems. The vendors providing those &PPD;s never intended them for +anything other than the originally supported &OS;s: &Microsoft; &Windows; and +&MacOS;. Through its brilliant move to fully support and utilize +the existing &PPD; specification, &CUPS; now gives the power to use +all features of modern printers to users of &Linux; and &Linux;-like +systems. &tdeprint; makes its usage even more comfortable than the +&CUPS; developers ever dreamed of. + +&CUPS; can use original &Windows; &PPD;s, distributed by the +vendors in the case of &PostScript; printers. Those normally don't +cost any money, and they can be grabbed from any &Windows; computer +with an installed &PostScript; driver for the model concerned, or from +the disks provided with the printer. There are also several places on +the web to download them. + + + + +How Special &PPD;s are Now Useful Even For Non-&PostScript; +Printers. + +Now you know how &PostScript;-Printers can use &PPD;s. But what +about non-&PostScript; printers? &CUPS; has done a very good trick: by +using the same format and data structure as the &PostScript; Printer +Descriptions (&PPD;s) in the &PostScript; world, it can describe the +available print job options for non-&PostScript; printers just the +same. For its own special purposes &CUPS; just added a few special +options (namely the line which defines the filter to be used for +further processing of the &PostScript; file). + +So, the developers could use the same software engine to parse +the Printer Description Files for available options for all sorts of +printers. Of course the &CUPS; developers could not rely on the +non-&PostScript; hardware manufacturers to suddenly develop &PPD;s. +They had to do the difficult start themselves and write them from +scratch. More than 1000 of these are available through the commercial +version of &CUPS;, called ESP +PrintPro. + +Meanwhile there are a lot of &CUPS;-specific &PPD;s available. +Even now those are in most cases not originating from the printer +manufacturers, but from Free software developers. The &CUPS; folks +proofed it, and others followed suit: where &Linux; and &UNIX; +printing one or two years ago still was a kludge, it is now able to +support a big range of printers, including 7-color inkjets capable of +pushing them to Photo Quality output. + + + + +Different Ways to get &PPD;s for non-&PostScript; +Printers + +You can get &PPD;s to be used with &CUPS; and non-&PostScript; +printers from different areas in the Web: + + + + first, there is the repository at www.linuxprinting.org, +which lets you generate a CUPS-O-Matic-&PPD; online for +any printer that had been supported by traditional &ghostscript; +printing already. This helps you to switch over to &CUPS; with little +effort, if you wish so. If your printer was doing well with the +traditional way of &ghostscript; printing, take CUPS-O-Matic to plug +your driver into th e &CUPS; system and you'll have the best of both +worlds. + + + +second, there are &CUPS;-&PPD;s for the more than 120 printer +models, which are driven by the new universal +stp driver. stp +(stood originally for Stylus Photo) is now developed by the gimp-print +project; it was started by Mike Sweet, the leading &CUPS; developer +and is now available through gimp-print.sourceforge.net. +This driver prints real Photo quality on many modern inkjets and can +be configured to make 120 &CUPS;-&PPD;s along its own +compilation. &HP; Laser- and DeskJet, Epson Stylus and Photo Color models as +well as some Canon and +Lexmark are covered. + + + +third, there is the commercial extension to &CUPS; from the +&CUPS; developers themselves: it is called ESP +PrintPro and comes with more than 2.300 printer +drivers. There are even improved imagetoraster and pstoraster filters +included. + + + +&CUPS; makes it really easy for manufacturers to start +supporting &Linux; and &UNIX; printing for their models at reasonably +low cost. The modular framework of &CUPS; facilitates to plug in any +filter (=driver) with minimal effort and to access and utilize the +whole printing framework that &CUPS; is creating. + +Read more about the exciting &CUPS; features in the available +&CUPS; documentation at http://www.cups.org/documentation.html +and http://www.danka.de/printpro/faq.html. +Also at http://www.linuxprinting.org/ +is a universal repository for all issues related to &Linux; and &UNIX; +printing. + + + + + + +How &IPP; Support Makes &CUPS; the Best Choice Around + + +<quote><acronym>LPD</acronym> Must Die!</quote> + +For a long time many developers were deeply dissatisfied with good +old LPD. Quite a few new projects were started to +improve printing: LPRng is the best known +example. Others are PDQ, PPR, +PLP, GNUlpr and +RLPR. But none of the new programs were seen as a +big shot; most of them are just implementing the same old +LPD specification with a few (or many) new +extensions, which again make them incompatible with each other. + +Having seen the development of not just one, but different +viable alternatives to venerable BSD-style +LPD, Grant Taylor, author of the Linux +Printing HOWTO, finally rallied the call LPD +Must Die! in his Campaign To Abolish The Line +Printer Daemon. + + + + + + +How the &IPP; Came to Be + +Along with the above, on the industry side of things, there were +efforts to overcome the well-known weaknesses of +LPD. It started with proprietary extensions to +plain old LPD, and stretched as far as +&Hewlett-Packard;'s attempt to establish &HP; JetDirect as a new +standard for a network printing protocol. The result were even more +incompatibilities. + +In the end, an initiative to define a new common industry and +IETF standard took shape. The Printer +Working Group or PWG, a loose aggregation +of vendors in hardware, software, and operating systems, drafted the +new Internet Printing Protocol, &IPP;. &IPP; v1.1 has +now been approved by the IETF (Internet Engineering +Task Force) as a proposed standard, and now enjoys the unanimous +support throughout the industry in Europe, USA and Japan. Most +current network printer models have now built in &IPP; support on top +of traditional LPR/LPD or +JetDirect Printing. + + + + +Why &IPP; is Solving Many Problems + +&IPP; promises to solve a lot of problems network administrators +face. This trade normally deals with heterogeneous network +environments and spends more than half of its working hours dealing +with printing problems. + +By creating a unified set of query functions for &IPP; enabled +printers and servers, for transferring files and setting job-control +attributes &etc;, &IPP; is destined to work across all &OS; platforms. +It's rollout however, will not happen overnight, as many legacy print +devices will still be in use for many years to come. Therefore, in +&IPP; there is a provision made for backwards compatibility of all +&IPP; implementations. &CUPS; is proving the viability of &IPP; +printing in all environments. + +The most striking advantage will be it's integration into the +existing set of other robust IP protocols. Being +an extension of the proven and robust HTTP 1.1 +protocol, for the special task of handling print file and related +data, it is also very easy to plug in other standards as they are +being developed and deployed: + + + +Basic, Digest, and Certificate Authentication for users seeking +access to print services. + + +SSL3 and TLS encryption for transferring +data. + + +Bi directional communication of clients with print devices, using +the HTTP/&IPP; GET and +POST mechanism. + + +LDAP directory service integration to keep a consistent database +of available printers, their capabilities and page-costs, &etc;, as well +as user passwords, ACLs &etc;. + + +Pull (as opposed to the usual Push +model) printing, where a server or printer just needs to be told the +&URL; of a document, whereupon it is retrieved from the resource on the +internet and printed. + + + + + + + + +Printer <quote>Plug'n'Play</quote> for Clients + +Have you ever seen a demonstration about &CUPS; capabilities in +the network? You must have been quite impressed if you didn't know in +advance what to expect. + +Imagine you as the administrator of a LAN. For +testing purposes you fully installed one &kde;/&CUPS; box on your net, +complete with a dozen printers configured and functional: +&PostScript;, LaserJets, InkJets and BubbleJets, and so on. Your +&kde; users on that box are very happy, they can print like never +before, ringing all the bells and whistles of every +printer. It took you 2 hours to make everything run perfectly... and +now all the other 100 users on the network want the same. Two hours +again for every box? No way you could do that before next year, you +think? + +Wrong. Just change one setting in the original &CUPS; box to +make it a server. Install &CUPS; on five other boxes, +as clients. By the time you turn back to your first +client, you find the users happily playing with the settings for the +dozen printers you had defined earlier on the server. +Somehow magically the printers had appeared on all the +Print dialogs of the five new &CUPS; client +boxes. + +Your users print, but not a single driver had been installed on +the clients, nor a printer queue defined. + +So, how does this magic work? + + + + +<quote>Seeing</quote> Printers Not Installed Locally? + +The answer is not complicated at all. + +If a &CUPS; server is on the LAN, it +broadcasts the names of all available printers to the +LAN, using the UDP protocol and +port 631. Port 631 is reserved as a well-known port by +IANA (the Internet Assigning Numbers +Authority) for &IPP; purposes. All &CUPS; clients listen to +&CUPS; server info sent to their port 631. That's how they know about +available printers, and that's how they learn about the +path to the printers as well. + +Using &IPP;, which is really a clever extension to +HTTP v1.1, &CUPS; is able to address all objects +related to the printing system via Universal Resource +Locators or URLs. Print jobs to be deleted +or restarted, printers to be queried or modified, admin tasks to be +performed on the server, with &IPP; and &CUPS;, everything is +addressable by a certain URL. Many important +things can be done through the web interface to &CUPS;, accessible for +example with &konqueror;. + + + + +Printing Without Installing a Driver + +And more, the clients basically can administer +and use any printer they see, just as if it was a +locally installed one. Of course, you can set restrictions on it with +access control lists &etc;, so that not any +clients may use any printer as it likes. + +The clients even are able to print without the appropriate filter +(or driver) installed locally. + +So how does this work? If a client wants to know about and +select printer-specific options, it sends a request (called +CUPS-get-ppd) to the server. The server tells the +client all about all printer-specific options, as read from the server +side &PPD;. The user on the client side can see the options and +select the required ones. He then sends the print file, usually +unfiltered raw &PostScript;, spiced up with the +printer-options to the printer server, using &IPP; as the transport +protocol. All further processing, especially the filtering to +generate the final format for the target printer, is then done by the +server. The server has the necessary programs (drivers +or filters) to do this. + +This way a client prints without needing to install a driver +locally. + +Any change on the server, such as adding or modifying a printer, +is instantly known to the clients with no further +configuration. + + + + +<quote>Zero Administration</quote>, Load Balancing, and +<quote>Failover Switching</quote> + +Some other advanced features built into &CUPS; are the capacity to +do load balancing. + +If you define the same printer queues on two or more different +servers, the clients will send their jobs to the first responding or +available server. This implies an automatic load balancing amongst +servers. If you have to take one server off the network for +maintenance, the others will just take over its tasks without the users +even noticing the difference. + + + + + + diff --git a/doc/tdesu/CMakeLists.txt b/doc/tdesu/CMakeLists.txt new file mode 100644 index 000000000..9c562330f --- /dev/null +++ b/doc/tdesu/CMakeLists.txt @@ -0,0 +1,12 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +tde_create_handbook( DESTINATION tdesu ) diff --git a/doc/tdesu/Makefile.am b/doc/tdesu/Makefile.am new file mode 100644 index 000000000..bafa3f6c3 --- /dev/null +++ b/doc/tdesu/Makefile.am @@ -0,0 +1,5 @@ + +KDE_LANG = en +KDE_DOCS = AUTO +KDE_MANS = AUTO + diff --git a/doc/tdesu/index.docbook b/doc/tdesu/index.docbook new file mode 100644 index 000000000..81c71cf17 --- /dev/null +++ b/doc/tdesu/index.docbook @@ -0,0 +1,320 @@ + + + + + +]> + + + + +The &tdesu; handbook + + +&Geert.Jansen; &Geert.Jansen.mail; + + + + +2000 +&Geert.Jansen; + + +&FDLNotice; + +2005-06-07 +1.00.00 + + +&tdesu; is a graphical front end for the &UNIX; +su command. + + +KDE +su +password +root + + + + + +Introduction + +Welcome to &tdesu;! &tdesu; is a graphical front end for the +&UNIX; su command for the K Desktop Environment. +It allows you to run a program as different user by supplying the +password for that user. &tdesu; is an unprivileged program; it uses +the system's su. + +&tdesu; has one additional feature: it can remember passwords +for you. If you are using this feature, you only need to enter the +password once for each command. See for more information on this and a +security analysis. + +This program is meant to be started from the command line or +from .desktop files. Although it asks for the +root password using a &GUI; +dialog, I consider it to be more of a command line <-> &GUI; +glue instead of a pure &GUI; program. + + + + +Using &tdesu; + +Usage of &tdesu; is easy. The syntax is like this: + + +tdesu + + + + file + icon name + + priority + + + + +user + + +command arg1 + arg2 + + + +tdesu +&kde; Generic Options +Qt Generic Options + + +The command line options are explained below. + + + + +This specifies the program to run as root. It has to be passed +in one argument. So if, for example, you want to start a new file manager, you +would enter at the prompt: tdesu + + + +Show debug information. + + + +This option allow efficient use of &tdesu; in +.desktop files. It tells &tdesu; to examine the +file specified by file. If this file is +writable by the current user, &tdesu; will execute the command as the +current user. If it is not writable, the command is executed as user +user (defaults to root). +file is evaluated like this: if +FILE starts with a /, it is +taken as an absolute filename. Otherwise, it is taken as the name of a +global &kde; configuration file. For example: to configure the K display +manager, kdm, you could issue +tdesu + + + icon name +Specify icon to use in the password dialog. You may specify +just the name, without any extension. +For instance to run kfmclient and show the +&konqueror; icon in the password dialog: +tdesu kfmclient + + + + + +Do not keep the password. This disables the keep +password checkbox in the password dialog. + + + priority + +Set priority value. The priority is an arbitrary number between 0 and +100, where 100 means highest priority, and 0 means lowest. The default is +50. + + + + +Use realtime scheduling. + + + + + +Stop the tdesu daemon. See . + + + +Enable terminal output. This disables password keeping. This is +largely for debugging purposes; if you want to run a console mode app, use the +standard su instead. + + + user +While the most common use for &tdesu; is to run a command as +the superuser, you can supply any user name and the appropriate +password. + + + + + + + + +Internals + + +X authentication + +The program you execute will run under the root user id and will +generally have no authority to access your X display. &tdesu; gets +around this by adding an authentication cookie for your display to a +temporary .Xauthority file. After the command +exits, this file is removed. + +If you don't use X cookies, you are on your own. &tdesu; will +detect this and will not add a cookie but you will have to make sure +that root is allowed to access to your display. + + + + +Interface to <command>su</command> + +&tdesu; uses the sytem's su for acquiring +priviliges. In this section, I explain the details of how &tdesu; does +this. + +Because some su implementations (&ie; the one +from &RedHat;) don't want to read the password from +stdin, &tdesu; creates a pty/tty pair and executes +su with it's standard filedescriptors connected to +the tty. + +To execute the command the user selected, rather than an +interactive shell, &tdesu; uses the argument with +su. This argument is understood by every shell that +I know of so it should work portably. su passes +this argument to the target user's shell, and the +shell executes the program. Example command: su . + +Instead of executing the user command directly with +su, &tdesu; executes a little stub program called +tdesu_stub. This stub (running as the +target user), requests some information from &tdesu; over the pty/tty +channel (the stub's stdin and stdout) and then executes the user's +program. The information passed over is: the X display, an X +authentication cookie (if available), the PATH and the +command to run. The reason why a stub program is used is that the X +cookie is private information and therefore cannot be passed on the +command line. + + + + +Password Checking + +&tdesu; will check the password you entered and gives an error +message if it is not correct. The checking is done by executing a test +program: /bin/true. If this succeeds, the +password is assumed to be correct. + + + + +Password Keeping + +For your comfort, &tdesu; implements a keep +password feature. If you are interested in security, you +should read this paragraph. + +Allowing &tdesu; to remember passwords opens up a (small) +security hole in your system. Obviously, &tdesu; does not allow +anybody but your user id to use the passwords, but, if done without +caution, this would lowers root's security level to that of a +normal user (you). A hacker who breaks into your account, would get +root access. &tdesu; tries +to prevent this. The security scheme it uses is, in my opinion at +least, reasonably safe and is explained here. + +&tdesu; uses a daemon, called +tdesud. The daemon listens to a &UNIX; +socket in /tmp for commands. The mode of the +socket is 0600 so that only your user id can connect to it. If +password keeping is enabled, &tdesu; executes commands through this +daemon. It writes the command and root's password to the socket and the +daemon executes the command using su, as describe +before. After this, the command and the password are not thrown +away. Instead, they are kept for a specified amount of time. This is +the timeout value from in the control module. If another request for +the same command is coming within this time period, the client does +not have to supply the password. To keep hackers who broke into your +account from stealing passwords from the daemon (for example, by +attaching a debugger), the daemon is installed set-group-id +nogroup. This should prevent all normal users (including you) from +getting passwords from the tdesud +process. Also, the daemon sets the DISPLAY environment +variable to the value it had when it was started. The only thing a +hacker can do is execute an application on your display. + +One weak spot in this scheme is that the programs you execute +are probably not written with security in mind (like setuid +root programs). This means +that they might have buffer overruns or other problems and a hacker +could exploit those. + +The use of the password keeping feature is a tradeoff between +security and comfort. I encourage you to think it over and decide for +yourself if you want to use it or not. + + + + + +Author + +&tdesu; + +Copyright 2000 &Geert.Jansen; + +&tdesu; is written by &Geert.Jansen;. It is somewhat based on +Pietro Iglio's &tdesu;, version 0.3. Pietro and I agreed that I will +maintain this program in the future. + +The author can be reached through email at &Geert.Jansen.mail;. +Please report any bugs you find to me so that I can fix them. If you +have a suggestion, feel free to contact me. + +&underFDL; +&underArtisticLicense; + + + + + + diff --git a/doc/tdesu/man-tdesu.1.docbook b/doc/tdesu/man-tdesu.1.docbook new file mode 100644 index 000000000..fd99812fd --- /dev/null +++ b/doc/tdesu/man-tdesu.1.docbook @@ -0,0 +1,179 @@ + + +]> + + + +KDE User's Manual +&Lauri.Watts; &Lauri.Watts.mail; +Jun 7, 2005 +K Desktop Environment + + + +tdesu +1 + + + +tdesu +Runs a program with elevated privileges + + + + +tdesu + + + + file + icon name + + priority + + + + +user + + +command arg1 + arg2 + + + +tdesu +KDE Generic Options +Qt Generic Options + + + + +Description +&tdesu; is a graphical front end for the +&UNIX; su command for the K Desktop Environment. +It allows you to run a program as different user by supplying the +password for that user. &tdesu; is an unprivileged program; it uses +the system's su. + +&tdesu; has one additional feature: it can optionally remember passwords +for you. If you are using this feature, you only need to enter the +password once for each command. + +This program is meant to be started from the command line or +from .desktop files. + + + +Options + + + + +This specifies the program to run as root. It has to be passed +in one argument. So if, for example, you want to start a new file manager, you +would enter at the prompt: tdesu + + + +Show debug information. + + + +This option allow efficient use of &tdesu; in +.desktop files. It tells &tdesu; to examine the +file specified by file. If this file is +writable by the current user, &tdesu; will execute the command as the +current user. If it is not writable, the command is executed as user +user (defaults to root). +file is evaluated like this: if +file starts with a /, it is +taken as an absolute filename. Otherwise, it is taken as the name of a +global &kde; configuration file. For example: to configure the K display +manager, kdm, you could issue +tdesu + + + icon name +Specify icon to use in the password dialog. You may specify +just the name, without any extension. + + + + + +Do not keep the password. This disables the keep +password checkbox in the password dialog. + + + priority + +Set priority value. The priority is an arbitrary number between 0 and +100, where 100 means highest priority, and 0 means lowest. The default is +50. + + + + +Use realtime scheduling. + + + + + +Stop the tdesu daemon. This is the daemon that caches +successful passwords in the background. This feature may also be disabled with + when &tdesu; is initially run. + + + +Enable terminal output. This disables password keeping. This is +largely for debugging purposes; if you want to run a console mode app, use the +standard su instead. + + + user +While the most common use for &tdesu; is to run a command as +the superuser, you can supply any user name and the appropriate +password. + + + + + + + + +See Also +su(1) + +More detailed user documentation is available from help:/tdesu +(either enter this URL into &konqueror;, or run +khelpcenter +help:/tdesu). + + + + +Examples +Run kfmclient as user jim, and show the &konqueror; icon in the +password dialog: +tdesu kfmclient + + + + +Authors +&tdesu; was written by +GeertJansen jansen@kde.org +and PietroIglio +iglio@fub.it. + + + + diff --git a/kdeprint/CMakeLists.txt b/kdeprint/CMakeLists.txt deleted file mode 100644 index 1065c69af..000000000 --- a/kdeprint/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -add_subdirectory( printmgr ) -add_subdirectory( kjobviewer ) -add_subdirectory( kprinter ) -add_subdirectory( tdeprintfax ) -add_subdirectory( slave ) -add_subdirectory( tdeprint_part ) diff --git a/kdeprint/Makefile.am b/kdeprint/Makefile.am deleted file mode 100644 index 1bbc21ff7..000000000 --- a/kdeprint/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = printmgr kjobviewer kprinter tdeprintfax slave tdeprint_part diff --git a/kdeprint/configure.in.in b/kdeprint/configure.in.in deleted file mode 100644 index 255d82a9b..000000000 --- a/kdeprint/configure.in.in +++ /dev/null @@ -1 +0,0 @@ -dnl nothing special diff --git a/kdeprint/descriptions/Makefile.am b/kdeprint/descriptions/Makefile.am deleted file mode 100644 index 66b8205e6..000000000 --- a/kdeprint/descriptions/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -KDE_OPTIONS = qtonly -# Note: sortthem does not sort! (It is just a sort of uniq(1) - -INCLUDES = $(all_includes) - -EXTRA_PROGRAMS = sortthem - -sortthem_SOURCES = sortthem.cpp -sortthem_LDFLAGS = $(all_libraries) $(LIB_QT) - -printers.cpp: sortthem - : > printers.cpp - for i in `find /usr/share/cups/model -type f ! -name '*.gz'`; do perl $(srcdir)/readppd < $$i >> printers.cpp; done - for i in `find /usr/share/cups/model -type f -name '*.gz'`; do \ - gzip -cd $$i | perl $(srcdir)/readppd >> printers.cpp; done - iconv -flatin1 -tutf-8 printers.cpp | grep -v '"[-0-9][0-9]*")' > printers.new - mv printers.new printers.cpp - ./sortthem < printers.cpp | perl -n -e "print \"// xgettext: no-c-format\n\".\$$_;" > printers.new && mv printers.new $(srcdir)/printers.cpp - -messages: - $(XGETTEXT) printers.cpp -o $(podir)/ppdtranslations.pot - -.PHONY: printers.cpp - diff --git a/kdeprint/descriptions/printers.cpp b/kdeprint/descriptions/printers.cpp deleted file mode 100644 index 274c5084b..000000000 --- a/kdeprint/descriptions/printers.cpp +++ /dev/null @@ -1,7084 +0,0 @@ -// xgettext: no-c-format -i18n("Executive"); -// xgettext: no-c-format -i18n("Envelope B5"); -// xgettext: no-c-format -i18n("Envelope #10"); -// xgettext: no-c-format -i18n("Envelope DL"); -// xgettext: no-c-format -i18n("PageRegion"); -// xgettext: no-c-format -i18n("Media Source"); -// xgettext: no-c-format -i18n("Default"); -// xgettext: no-c-format -i18n("Manual Feed"); -// xgettext: no-c-format -i18n("Output Resolution"); -// xgettext: no-c-format -i18n("150 DPI"); -// xgettext: no-c-format -i18n("300 DPI"); -// xgettext: no-c-format -i18n("600 DPI"); -// xgettext: no-c-format -i18n("1200 DPI"); -// xgettext: no-c-format -i18n("2400 DPI"); -// xgettext: no-c-format -i18n("Double-Sided Printing"); -// xgettext: no-c-format -i18n("Off"); -// xgettext: no-c-format -i18n("Long Edge (Standard)"); -// xgettext: no-c-format -i18n("Short Edge (Flip)"); -// xgettext: no-c-format -i18n("US Letter"); -// xgettext: no-c-format -i18n("US Legal"); -// xgettext: no-c-format -i18n("US Executive"); -// xgettext: no-c-format -i18n("US Tabloid"); -// xgettext: no-c-format -i18n("A3"); -// xgettext: no-c-format -i18n("Media Type"); -// xgettext: no-c-format -i18n("Plain Paper"); -// xgettext: no-c-format -i18n("Bond Paper"); -// xgettext: no-c-format -i18n("Special Paper"); -// xgettext: no-c-format -i18n("Transparency"); -// xgettext: no-c-format -i18n("Glossy Paper"); -// xgettext: no-c-format -i18n("Tray"); -// xgettext: no-c-format -i18n("Envelope Feed"); -// xgettext: no-c-format -i18n("Output Mode"); -// xgettext: no-c-format -i18n("CMYK Color"); -// xgettext: no-c-format -i18n("CMY Color"); -// xgettext: no-c-format -i18n("Grayscale"); -// xgettext: no-c-format -i18n("600x300 DPI"); -// xgettext: no-c-format -i18n("CRET Color"); -// xgettext: no-c-format -i18n("Duplexer"); -// xgettext: no-c-format -i18n("Address - 1 1/8 x 3 1/2\""); -// xgettext: no-c-format -i18n("Large Address - 1 4/10 x 3 1/2\""); -// xgettext: no-c-format -i18n("Return Address - 3/4 x 2\""); -// xgettext: no-c-format -i18n("Shipping Address - 2 5/16 x 4\""); -// xgettext: no-c-format -i18n("Internet Postage 2-Part - 2 1/4 x 7 1/2\""); -// xgettext: no-c-format -i18n("Internet Postage 3-Part - 2 1/4 x 7\""); -// xgettext: no-c-format -i18n("File Folder - 9/16 x 3 7/16\""); -// xgettext: no-c-format -i18n("Hanging Folder - 9/16 x 2\""); -// xgettext: no-c-format -i18n("3.5\" Disk - 2 1/8 x 2 3/4\""); -// xgettext: no-c-format -i18n("136 DPI"); -// xgettext: no-c-format -i18n("203 DPI"); -// xgettext: no-c-format -i18n("Output Darkness"); -// xgettext: no-c-format -i18n("Normal"); -// xgettext: no-c-format -i18n("FanFoldUS"); -// xgettext: no-c-format -i18n("60 DPI"); -// xgettext: no-c-format -i18n("120x60 DPI"); -// xgettext: no-c-format -i18n("180 DPI"); -// xgettext: no-c-format -i18n("360x180 DPI"); -// xgettext: no-c-format -i18n("360 DPI"); -// xgettext: no-c-format -i18n("60x72 DPI"); -// xgettext: no-c-format -i18n("120x72 DPI"); -// xgettext: no-c-format -i18n("240x72 DPI"); -// xgettext: no-c-format -i18n("Tray 4"); -// xgettext: no-c-format -i18n("720 DPI"); -// xgettext: no-c-format -i18n("Page Size and Printing Quality"); -// xgettext: no-c-format -i18n("A4, 600x600 DPI"); -// xgettext: no-c-format -i18n("Letter, 600x600 DPI"); -// xgettext: no-c-format -i18n("A4, 1200x600 DPI"); -// xgettext: no-c-format -i18n("B5, 600x600 DPI"); -// xgettext: no-c-format -i18n("B5, 1200x600 DPI"); -// xgettext: no-c-format -i18n("Legal, 600x600 DPI"); -// xgettext: no-c-format -i18n("Legal, 1200x600 DPI"); -// xgettext: no-c-format -i18n("Letter, 1200x600 DPI"); -// xgettext: no-c-format -i18n("High Grade Paper"); -// xgettext: no-c-format -i18n("Back Print Media"); -// xgettext: no-c-format -i18n("Iron-On Transfer Sheet"); -// xgettext: no-c-format -i18n("Hot OHP Media"); -// xgettext: no-c-format -i18n("Post Card"); -// xgettext: no-c-format -i18n("Thick Paper"); -// xgettext: no-c-format -i18n("Printing Mode"); -// xgettext: no-c-format -i18n("BlackOnly"); -// xgettext: no-c-format -i18n("Colour"); -// xgettext: no-c-format -i18n("HalfTone"); -// xgettext: no-c-format -i18n("NoHalfTone"); -// xgettext: no-c-format -i18n("Dithering"); -// xgettext: no-c-format -i18n("FloydSteinberg"); -// xgettext: no-c-format -i18n("NoFloydSteinberg"); -// xgettext: no-c-format -i18n("Banding"); -// xgettext: no-c-format -i18n("NoBanding"); -// xgettext: no-c-format -i18n("Colour Mode"); -// xgettext: no-c-format -i18n("CMY"); -// xgettext: no-c-format -i18n("Colour Correction Mode"); -// xgettext: no-c-format -i18n("FullBlack"); -// xgettext: no-c-format -i18n("Colour correction"); -// xgettext: no-c-format -i18n("NoColourCorrection"); -// xgettext: no-c-format -i18n("ColourCorrection"); -// xgettext: no-c-format -i18n("How often every dot is printed"); -// xgettext: no-c-format -i18n("PrintTwice"); -// xgettext: no-c-format -i18n("PrintOnce"); -// xgettext: no-c-format -i18n("Black Printing Mode"); -// xgettext: no-c-format -i18n("SolidBlack"); -// xgettext: no-c-format -i18n("MixedBlack"); -// xgettext: no-c-format -i18n("Square Dithering"); -// xgettext: no-c-format -i18n("SquareDithering"); -// xgettext: no-c-format -i18n("NoSquareDithering"); -// xgettext: no-c-format -i18n("Do Curl Correction"); -// xgettext: no-c-format -i18n("CurlCorrectionAlways"); -// xgettext: no-c-format -i18n("CurlCorrectionAfterFinal"); -// xgettext: no-c-format -i18n("Curl Correction on current pass"); -// xgettext: no-c-format -i18n("NoCurlCorrectionOnCurrent"); -// xgettext: no-c-format -i18n("CurlCorrectionOnCurrent"); -// xgettext: no-c-format -i18n("Colour Intensity"); -// xgettext: no-c-format -i18n("Line Feed Adjustment"); -// xgettext: no-c-format -i18n("Gamma"); -// xgettext: no-c-format -i18n("0.00"); -// xgettext: no-c-format -i18n("0.05"); -// xgettext: no-c-format -i18n("0.10"); -// xgettext: no-c-format -i18n("0.15"); -// xgettext: no-c-format -i18n("0.20"); -// xgettext: no-c-format -i18n("0.25"); -// xgettext: no-c-format -i18n("0.30"); -// xgettext: no-c-format -i18n("0.35"); -// xgettext: no-c-format -i18n("0.40"); -// xgettext: no-c-format -i18n("0.45"); -// xgettext: no-c-format -i18n("0.50"); -// xgettext: no-c-format -i18n("0.55"); -// xgettext: no-c-format -i18n("0.60"); -// xgettext: no-c-format -i18n("0.65"); -// xgettext: no-c-format -i18n("0.70"); -// xgettext: no-c-format -i18n("0.75"); -// xgettext: no-c-format -i18n("0.80"); -// xgettext: no-c-format -i18n("0.85"); -// xgettext: no-c-format -i18n("0.90"); -// xgettext: no-c-format -i18n("0.95"); -// xgettext: no-c-format -i18n("1.00"); -// xgettext: no-c-format -i18n("1.05"); -// xgettext: no-c-format -i18n("1.10"); -// xgettext: no-c-format -i18n("1.15"); -// xgettext: no-c-format -i18n("1.20"); -// xgettext: no-c-format -i18n("1.25"); -// xgettext: no-c-format -i18n("1.30"); -// xgettext: no-c-format -i18n("1.35"); -// xgettext: no-c-format -i18n("1.40"); -// xgettext: no-c-format -i18n("1.45"); -// xgettext: no-c-format -i18n("1.50"); -// xgettext: no-c-format -i18n("1.55"); -// xgettext: no-c-format -i18n("1.60"); -// xgettext: no-c-format -i18n("1.65"); -// xgettext: no-c-format -i18n("1.70"); -// xgettext: no-c-format -i18n("1.75"); -// xgettext: no-c-format -i18n("1.80"); -// xgettext: no-c-format -i18n("1.85"); -// xgettext: no-c-format -i18n("1.90"); -// xgettext: no-c-format -i18n("1.95"); -// xgettext: no-c-format -i18n("2.00"); -// xgettext: no-c-format -i18n("2.05"); -// xgettext: no-c-format -i18n("2.10"); -// xgettext: no-c-format -i18n("2.15"); -// xgettext: no-c-format -i18n("2.20"); -// xgettext: no-c-format -i18n("2.25"); -// xgettext: no-c-format -i18n("2.30"); -// xgettext: no-c-format -i18n("2.35"); -// xgettext: no-c-format -i18n("2.40"); -// xgettext: no-c-format -i18n("2.45"); -// xgettext: no-c-format -i18n("2.50"); -// xgettext: no-c-format -i18n("2.55"); -// xgettext: no-c-format -i18n("2.60"); -// xgettext: no-c-format -i18n("2.65"); -// xgettext: no-c-format -i18n("2.70"); -// xgettext: no-c-format -i18n("2.75"); -// xgettext: no-c-format -i18n("2.80"); -// xgettext: no-c-format -i18n("2.85"); -// xgettext: no-c-format -i18n("2.90"); -// xgettext: no-c-format -i18n("2.95"); -// xgettext: no-c-format -i18n("3.00"); -// xgettext: no-c-format -i18n("3.05"); -// xgettext: no-c-format -i18n("3.10"); -// xgettext: no-c-format -i18n("3.15"); -// xgettext: no-c-format -i18n("3.20"); -// xgettext: no-c-format -i18n("3.25"); -// xgettext: no-c-format -i18n("3.30"); -// xgettext: no-c-format -i18n("3.35"); -// xgettext: no-c-format -i18n("3.40"); -// xgettext: no-c-format -i18n("3.45"); -// xgettext: no-c-format -i18n("3.50"); -// xgettext: no-c-format -i18n("3.55"); -// xgettext: no-c-format -i18n("3.60"); -// xgettext: no-c-format -i18n("3.65"); -// xgettext: no-c-format -i18n("3.70"); -// xgettext: no-c-format -i18n("3.75"); -// xgettext: no-c-format -i18n("3.80"); -// xgettext: no-c-format -i18n("3.85"); -// xgettext: no-c-format -i18n("3.90"); -// xgettext: no-c-format -i18n("3.95"); -// xgettext: no-c-format -i18n("4.00"); -// xgettext: no-c-format -i18n("Horizontal (X-)Shift (in dots)"); -// xgettext: no-c-format -i18n("Vertical (Y-)Shift (in dots)"); -// xgettext: no-c-format -i18n("Next Job"); -// xgettext: no-c-format -i18n("NextJobOnSameSheet"); -// xgettext: no-c-format -i18n("NextJobOnNewSheet"); -// xgettext: no-c-format -i18n("Next Job is spot colour page"); -// xgettext: no-c-format -i18n("NextSpotColourPage"); -// xgettext: no-c-format -i18n("NextNotSpotColourPage"); -// xgettext: no-c-format -i18n("This Job is spot colour page"); -// xgettext: no-c-format -i18n("ThisSpotColourPage"); -// xgettext: no-c-format -i18n("ThisNotSpotColourPage"); -// xgettext: no-c-format -i18n("Page Size"); -// xgettext: no-c-format -i18n("B5"); -// xgettext: no-c-format -i18n("Manual"); -// xgettext: no-c-format -i18n("Automatic"); -// xgettext: no-c-format -i18n("Cardboard"); -// xgettext: no-c-format -i18n("Coated Film"); -// xgettext: no-c-format -i18n("Fine Paper"); -// xgettext: no-c-format -i18n("Iron Seal"); -// xgettext: no-c-format -i18n("OHP"); -// xgettext: no-c-format -i18n("OHP (MD 2000)"); -// xgettext: no-c-format -i18n("Rebeca Free"); -// xgettext: no-c-format -i18n("Resolution"); -// xgettext: no-c-format -i18n("1200x600 DPI"); -// xgettext: no-c-format -i18n("Color Mode"); -// xgettext: no-c-format -i18n("Colour Depth"); -// xgettext: no-c-format -i18n("Floyd Steinb. High Qual. (32 bpp)"); -// xgettext: no-c-format -i18n("Floyd Steinberg Simple (8 bpp)"); -// xgettext: no-c-format -i18n("Monochrome (1 bpp)"); -// xgettext: no-c-format -i18n("Simple Colour (4 bpp)"); -// xgettext: no-c-format -i18n("On"); -// xgettext: no-c-format -i18n("Duplex"); -// xgettext: no-c-format -i18n("DoubleSided"); -// xgettext: no-c-format -i18n("SingleSided"); -// xgettext: no-c-format -i18n("Black color saving"); -// xgettext: no-c-format -i18n("EcoBlack"); -// xgettext: no-c-format -i18n("NormalBlack"); -// xgettext: no-c-format -i18n("Black Level"); -// xgettext: no-c-format -i18n("Cyan Level"); -// xgettext: no-c-format -i18n("Magenta Level"); -// xgettext: no-c-format -i18n("Yellow Level"); -// xgettext: no-c-format -i18n("B4 (JIS)"); -// xgettext: no-c-format -i18n("B6 (JIS)"); -// xgettext: no-c-format -i18n("Envelope You 4"); -// xgettext: no-c-format -i18n("Hagaki"); -// xgettext: no-c-format -i18n("Ledger"); -// xgettext: no-c-format -i18n("Oufuku"); -// xgettext: no-c-format -i18n("600x600 DPI"); -// xgettext: no-c-format -i18n("300x300 DPI"); -// xgettext: no-c-format -i18n("3x5"); -// xgettext: no-c-format -i18n("4x6"); -// xgettext: no-c-format -i18n("5x7"); -// xgettext: no-c-format -i18n("5x8"); -// xgettext: no-c-format -i18n("6x8"); -// xgettext: no-c-format -i18n("8x10"); -// xgettext: no-c-format -i18n("8x12"); -// xgettext: no-c-format -i18n("11x14"); -// xgettext: no-c-format -i18n("13x19"); -// xgettext: no-c-format -i18n("16x20"); -// xgettext: no-c-format -i18n("16x24"); -// xgettext: no-c-format -i18n("60x60 dpi"); -// xgettext: no-c-format -i18n("60x72 dpi"); -// xgettext: no-c-format -i18n("60x180 dpi"); -// xgettext: no-c-format -i18n("60x216 dpi"); -// xgettext: no-c-format -i18n("120x60 dpi"); -// xgettext: no-c-format -i18n("120x72 dpi"); -// xgettext: no-c-format -i18n("120x180 dpi"); -// xgettext: no-c-format -i18n("120x216 dpi"); -// xgettext: no-c-format -i18n("180x60 dpi"); -// xgettext: no-c-format -i18n("180x72 dpi"); -// xgettext: no-c-format -i18n("180x180 dpi"); -// xgettext: no-c-format -i18n("180x216 dpi"); -// xgettext: no-c-format -i18n("240x60 dpi"); -// xgettext: no-c-format -i18n("240x72 dpi"); -// xgettext: no-c-format -i18n("240x180 dpi"); -// xgettext: no-c-format -i18n("240x216 dpi"); -// xgettext: no-c-format -i18n("360x60 dpi"); -// xgettext: no-c-format -i18n("360x72 dpi"); -// xgettext: no-c-format -i18n("360x180 dpi"); -// xgettext: no-c-format -i18n("360x216 dpi"); -// xgettext: no-c-format -i18n("11x17"); -// xgettext: no-c-format -i18n("Photo Paper"); -// xgettext: no-c-format -i18n("HP Premium Paper"); -// xgettext: no-c-format -i18n("Transparency Paper"); -// xgettext: no-c-format -i18n("Print Quality"); -// xgettext: no-c-format -i18n("Draft Quality"); -// xgettext: no-c-format -i18n("Normal Quality"); -// xgettext: no-c-format -i18n("Presentation Quality"); -// xgettext: no-c-format -i18n("Monochrome"); -// xgettext: no-c-format -i18n("Dithering Pixels Per Inch"); -// xgettext: no-c-format -i18n("Generic DeskJet"); -// xgettext: no-c-format -i18n("Standard Tray"); -// xgettext: no-c-format -i18n("Banner Printing"); -// xgettext: no-c-format -i18n("Envelope Feeder"); -// xgettext: no-c-format -i18n("Manual Feeder"); -// xgettext: no-c-format -i18n("Quick-Dry Glossy"); -// xgettext: no-c-format -i18n("Quick-Dry Transparency"); -// xgettext: no-c-format -i18n("Quality"); -// xgettext: no-c-format -i18n("Default Setting"); -// xgettext: no-c-format -i18n("Draft"); -// xgettext: no-c-format -i18n("Presentation"); -// xgettext: no-c-format -i18n("Ink Drying Time (sec)"); -// xgettext: no-c-format -i18n("Memory Limit (Bytes)"); -// xgettext: no-c-format -i18n("Black Levels"); -// xgettext: no-c-format -i18n("2 Levels"); -// xgettext: no-c-format -i18n("3 Levels"); -// xgettext: no-c-format -i18n("4 Levels"); -// xgettext: no-c-format -i18n("No Black"); -// xgettext: no-c-format -i18n("CMY Levels"); -// xgettext: no-c-format -i18n("No CMY"); -// xgettext: no-c-format -i18n("Printout Mode"); -// xgettext: no-c-format -i18n("Draft (Color cartridge)"); -// xgettext: no-c-format -i18n("Draft Grayscale (Black + color cartridge)"); -// xgettext: no-c-format -i18n("Normal (Color cartridge)"); -// xgettext: no-c-format -i18n("Normal Grayscale (Black + color cartridge)"); -// xgettext: no-c-format -i18n("High Quality Grayscale (Black + color cartridge)"); -// xgettext: no-c-format -i18n("Photo (Photo + color cartridge, photo paper)"); -// xgettext: no-c-format -i18n("Photo/4x6 inch index card"); -// xgettext: no-c-format -i18n("Photo with tear-off tab"); -// xgettext: no-c-format -i18n("3x5 inch index card"); -// xgettext: no-c-format -i18n("5x8 inch index card"); -// xgettext: no-c-format -i18n("A6"); -// xgettext: no-c-format -i18n("A6 with tear-off tab"); -// xgettext: no-c-format -i18n("Envelope C6"); -// xgettext: no-c-format -i18n("American Foolscap"); -// xgettext: no-c-format -i18n("Oufuku-Hagaki"); -// xgettext: no-c-format -i18n("16K"); -// xgettext: no-c-format -i18n("Executive (JIS)"); -// xgettext: no-c-format -i18n("Resolution, Quality, Ink Type, Media Type"); -// xgettext: no-c-format -i18n("Controlled by 'Printout Mode'"); -// xgettext: no-c-format -i18n("300 dpi, Color, Color Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Draft, Color, Color Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Draft, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Draft, Grayscale, Black + Color Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Grayscale, Black + Color Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Photo, Photo + Color Cartr., Premium Paper"); -// xgettext: no-c-format -i18n("600x300 dpi, Best, Grayscale, Black + Color Cartr."); -// xgettext: no-c-format -i18n("Normal Color"); -// xgettext: no-c-format -i18n("Best Quality Color"); -// xgettext: no-c-format -i18n("Black and White"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Color"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Color (Low Memory)"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Gray"); -// xgettext: no-c-format -i18n("Black correction (Cyan reduction)"); -// xgettext: no-c-format -i18n("Ink Reduction"); -// xgettext: no-c-format -i18n("25 %"); -// xgettext: no-c-format -i18n("50 %"); -// xgettext: no-c-format -i18n("No"); -// xgettext: no-c-format -i18n("Draft (Economy)"); -// xgettext: no-c-format -i18n("Draft Grayscale (Economy)"); -// xgettext: no-c-format -i18n("Normal Grayscale"); -// xgettext: no-c-format -i18n("High Quality"); -// xgettext: no-c-format -i18n("High Quality Grayscale"); -// xgettext: no-c-format -i18n("Photo"); -// xgettext: no-c-format -i18n("Photo Grayscale"); -// xgettext: no-c-format -i18n("C5"); -// xgettext: no-c-format -i18n("Commercial 10"); -// xgettext: no-c-format -i18n("DL"); -// xgettext: no-c-format -i18n("B5 ISO"); -// xgettext: no-c-format -i18n("B6 ISO"); -// xgettext: no-c-format -i18n("B7 ISO"); -// xgettext: no-c-format -i18n("B8 ISO"); -// xgettext: no-c-format -i18n("B9 ISO"); -// xgettext: no-c-format -i18n("B10 ISO"); -// xgettext: no-c-format -i18n("Monarch Envelope"); -// xgettext: no-c-format -i18n("Postcard"); -// xgettext: no-c-format -i18n("C7-6"); -// xgettext: no-c-format -i18n("Japanese long envelope #4"); -// xgettext: no-c-format -i18n("Hagaki Card"); -// xgettext: no-c-format -i18n("Small paperback"); -// xgettext: no-c-format -i18n("Penguin small paperback"); -// xgettext: no-c-format -i18n("A2 Invitation"); -// xgettext: no-c-format -i18n("Epson 4x6 Photo Paper"); -// xgettext: no-c-format -i18n("Japanese long envelope #3"); -// xgettext: no-c-format -i18n("B6-C4"); -// xgettext: no-c-format -i18n("Penguin large paperback"); -// xgettext: no-c-format -i18n("Crown Quarto"); -// xgettext: no-c-format -i18n("Large Crown Quarto"); -// xgettext: no-c-format -i18n("RA4"); -// xgettext: no-c-format -i18n("American foolscap"); -// xgettext: no-c-format -i18n("Bond"); -// xgettext: no-c-format -i18n("Glossy Photo"); -// xgettext: no-c-format -i18n("Transparencies"); -// xgettext: no-c-format -i18n("Ink Type"); -// xgettext: no-c-format -i18n("Color + Photo Cartridges"); -// xgettext: no-c-format -i18n("Four Color Standard"); -// xgettext: no-c-format -i18n("stpGamma"); -// xgettext: no-c-format -i18n("Density"); -// xgettext: no-c-format -i18n("0.12"); -// xgettext: no-c-format -i18n("0.14"); -// xgettext: no-c-format -i18n("0.16"); -// xgettext: no-c-format -i18n("0.18"); -// xgettext: no-c-format -i18n("0.22"); -// xgettext: no-c-format -i18n("0.24"); -// xgettext: no-c-format -i18n("0.26"); -// xgettext: no-c-format -i18n("0.28"); -// xgettext: no-c-format -i18n("0.32"); -// xgettext: no-c-format -i18n("0.34"); -// xgettext: no-c-format -i18n("0.36"); -// xgettext: no-c-format -i18n("0.38"); -// xgettext: no-c-format -i18n("0.42"); -// xgettext: no-c-format -i18n("0.44"); -// xgettext: no-c-format -i18n("0.46"); -// xgettext: no-c-format -i18n("0.48"); -// xgettext: no-c-format -i18n("0.52"); -// xgettext: no-c-format -i18n("0.54"); -// xgettext: no-c-format -i18n("0.56"); -// xgettext: no-c-format -i18n("0.58"); -// xgettext: no-c-format -i18n("0.62"); -// xgettext: no-c-format -i18n("0.64"); -// xgettext: no-c-format -i18n("0.66"); -// xgettext: no-c-format -i18n("0.68"); -// xgettext: no-c-format -i18n("0.72"); -// xgettext: no-c-format -i18n("0.74"); -// xgettext: no-c-format -i18n("0.76"); -// xgettext: no-c-format -i18n("0.78"); -// xgettext: no-c-format -i18n("0.82"); -// xgettext: no-c-format -i18n("0.84"); -// xgettext: no-c-format -i18n("0.86"); -// xgettext: no-c-format -i18n("0.88"); -// xgettext: no-c-format -i18n("0.92"); -// xgettext: no-c-format -i18n("0.94"); -// xgettext: no-c-format -i18n("0.96"); -// xgettext: no-c-format -i18n("0.98"); -// xgettext: no-c-format -i18n("1.02"); -// xgettext: no-c-format -i18n("1.04"); -// xgettext: no-c-format -i18n("1.06"); -// xgettext: no-c-format -i18n("1.08"); -// xgettext: no-c-format -i18n("1.12"); -// xgettext: no-c-format -i18n("1.14"); -// xgettext: no-c-format -i18n("1.16"); -// xgettext: no-c-format -i18n("1.18"); -// xgettext: no-c-format -i18n("1.22"); -// xgettext: no-c-format -i18n("1.24"); -// xgettext: no-c-format -i18n("1.26"); -// xgettext: no-c-format -i18n("1.28"); -// xgettext: no-c-format -i18n("1.32"); -// xgettext: no-c-format -i18n("1.34"); -// xgettext: no-c-format -i18n("1.36"); -// xgettext: no-c-format -i18n("1.38"); -// xgettext: no-c-format -i18n("1.42"); -// xgettext: no-c-format -i18n("1.44"); -// xgettext: no-c-format -i18n("1.46"); -// xgettext: no-c-format -i18n("1.48"); -// xgettext: no-c-format -i18n("1.52"); -// xgettext: no-c-format -i18n("1.54"); -// xgettext: no-c-format -i18n("1.56"); -// xgettext: no-c-format -i18n("1.58"); -// xgettext: no-c-format -i18n("1.62"); -// xgettext: no-c-format -i18n("1.64"); -// xgettext: no-c-format -i18n("1.66"); -// xgettext: no-c-format -i18n("1.68"); -// xgettext: no-c-format -i18n("1.72"); -// xgettext: no-c-format -i18n("1.74"); -// xgettext: no-c-format -i18n("1.76"); -// xgettext: no-c-format -i18n("1.78"); -// xgettext: no-c-format -i18n("1.82"); -// xgettext: no-c-format -i18n("1.84"); -// xgettext: no-c-format -i18n("1.86"); -// xgettext: no-c-format -i18n("1.88"); -// xgettext: no-c-format -i18n("1.92"); -// xgettext: no-c-format -i18n("1.94"); -// xgettext: no-c-format -i18n("1.96"); -// xgettext: no-c-format -i18n("1.98"); -// xgettext: no-c-format -i18n("stpBrightness"); -// xgettext: no-c-format -i18n("0.02"); -// xgettext: no-c-format -i18n("0.04"); -// xgettext: no-c-format -i18n("0.06"); -// xgettext: no-c-format -i18n("0.08"); -// xgettext: no-c-format -i18n("stpSaturation"); -// xgettext: no-c-format -i18n("0.0"); -// xgettext: no-c-format -i18n("0.1"); -// xgettext: no-c-format -i18n("0.2"); -// xgettext: no-c-format -i18n("0.3"); -// xgettext: no-c-format -i18n("0.4"); -// xgettext: no-c-format -i18n("0.5"); -// xgettext: no-c-format -i18n("0.6"); -// xgettext: no-c-format -i18n("0.7"); -// xgettext: no-c-format -i18n("0.8"); -// xgettext: no-c-format -i18n("0.9"); -// xgettext: no-c-format -i18n("1.0"); -// xgettext: no-c-format -i18n("1.1"); -// xgettext: no-c-format -i18n("1.2"); -// xgettext: no-c-format -i18n("1.3"); -// xgettext: no-c-format -i18n("1.4"); -// xgettext: no-c-format -i18n("1.5"); -// xgettext: no-c-format -i18n("1.6"); -// xgettext: no-c-format -i18n("1.7"); -// xgettext: no-c-format -i18n("1.8"); -// xgettext: no-c-format -i18n("1.9"); -// xgettext: no-c-format -i18n("2.0"); -// xgettext: no-c-format -i18n("2.1"); -// xgettext: no-c-format -i18n("2.2"); -// xgettext: no-c-format -i18n("2.3"); -// xgettext: no-c-format -i18n("2.4"); -// xgettext: no-c-format -i18n("2.5"); -// xgettext: no-c-format -i18n("2.6"); -// xgettext: no-c-format -i18n("2.7"); -// xgettext: no-c-format -i18n("2.8"); -// xgettext: no-c-format -i18n("2.9"); -// xgettext: no-c-format -i18n("3.0"); -// xgettext: no-c-format -i18n("3.1"); -// xgettext: no-c-format -i18n("3.2"); -// xgettext: no-c-format -i18n("3.3"); -// xgettext: no-c-format -i18n("3.4"); -// xgettext: no-c-format -i18n("3.5"); -// xgettext: no-c-format -i18n("3.6"); -// xgettext: no-c-format -i18n("3.7"); -// xgettext: no-c-format -i18n("3.8"); -// xgettext: no-c-format -i18n("3.9"); -// xgettext: no-c-format -i18n("4.0"); -// xgettext: no-c-format -i18n("4.1"); -// xgettext: no-c-format -i18n("4.2"); -// xgettext: no-c-format -i18n("4.3"); -// xgettext: no-c-format -i18n("4.4"); -// xgettext: no-c-format -i18n("4.5"); -// xgettext: no-c-format -i18n("4.6"); -// xgettext: no-c-format -i18n("4.7"); -// xgettext: no-c-format -i18n("4.8"); -// xgettext: no-c-format -i18n("4.9"); -// xgettext: no-c-format -i18n("5.0"); -// xgettext: no-c-format -i18n("5.1"); -// xgettext: no-c-format -i18n("5.2"); -// xgettext: no-c-format -i18n("5.3"); -// xgettext: no-c-format -i18n("5.4"); -// xgettext: no-c-format -i18n("5.5"); -// xgettext: no-c-format -i18n("5.6"); -// xgettext: no-c-format -i18n("5.7"); -// xgettext: no-c-format -i18n("5.8"); -// xgettext: no-c-format -i18n("5.9"); -// xgettext: no-c-format -i18n("6.0"); -// xgettext: no-c-format -i18n("6.1"); -// xgettext: no-c-format -i18n("6.2"); -// xgettext: no-c-format -i18n("6.3"); -// xgettext: no-c-format -i18n("6.4"); -// xgettext: no-c-format -i18n("6.5"); -// xgettext: no-c-format -i18n("6.6"); -// xgettext: no-c-format -i18n("6.7"); -// xgettext: no-c-format -i18n("6.8"); -// xgettext: no-c-format -i18n("6.9"); -// xgettext: no-c-format -i18n("7.0"); -// xgettext: no-c-format -i18n("7.1"); -// xgettext: no-c-format -i18n("7.2"); -// xgettext: no-c-format -i18n("7.3"); -// xgettext: no-c-format -i18n("7.4"); -// xgettext: no-c-format -i18n("7.5"); -// xgettext: no-c-format -i18n("7.6"); -// xgettext: no-c-format -i18n("7.7"); -// xgettext: no-c-format -i18n("7.8"); -// xgettext: no-c-format -i18n("7.9"); -// xgettext: no-c-format -i18n("8.0"); -// xgettext: no-c-format -i18n("8.1"); -// xgettext: no-c-format -i18n("8.2"); -// xgettext: no-c-format -i18n("8.3"); -// xgettext: no-c-format -i18n("8.4"); -// xgettext: no-c-format -i18n("8.5"); -// xgettext: no-c-format -i18n("8.6"); -// xgettext: no-c-format -i18n("8.7"); -// xgettext: no-c-format -i18n("8.8"); -// xgettext: no-c-format -i18n("8.9"); -// xgettext: no-c-format -i18n("9.0"); -// xgettext: no-c-format -i18n("Contrast Level"); -// xgettext: no-c-format -i18n("150 x 150 DPI"); -// xgettext: no-c-format -i18n("300 x 300 DPI"); -// xgettext: no-c-format -i18n("600 x 300 DPI"); -// xgettext: no-c-format -i18n("600 x 600 DPI"); -// xgettext: no-c-format -i18n("Output Type"); -// xgettext: no-c-format -i18n("Gray Scale"); -// xgettext: no-c-format -i18n("Continuous-tone photographs"); -// xgettext: no-c-format -i18n("Line art"); -// xgettext: no-c-format -i18n("Primarily solid colors or smooth gradients"); -// xgettext: no-c-format -i18n("Dither Algorithm"); -// xgettext: no-c-format -i18n("EvenTone"); -// xgettext: no-c-format -i18n("Fast"); -// xgettext: no-c-format -i18n("Raw CMYK"); -// xgettext: no-c-format -i18n("Not capable"); -// xgettext: no-c-format -i18n("Printer Default"); -// xgettext: no-c-format -i18n("GhostScript pre-filtering"); -// xgettext: no-c-format -i18n("Embed GhostScript fonts only"); -// xgettext: no-c-format -i18n("Convert to PS level 1"); -// xgettext: no-c-format -i18n("Convert to PS level 2"); -// xgettext: no-c-format -i18n("No pre-filtering"); -// xgettext: no-c-format -i18n("160x72 dpi"); -// xgettext: no-c-format -i18n("160x144 dpi"); -// xgettext: no-c-format -i18n("320x216 dpi"); -// xgettext: no-c-format -i18n("Input Slot"); -// xgettext: no-c-format -i18n("Standard"); -// xgettext: no-c-format -i18n("Printer default"); -// xgettext: no-c-format -i18n("PageSize"); -// xgettext: no-c-format -i18n("Tabloid"); -// xgettext: no-c-format -i18n("SRA4"); -// xgettext: no-c-format -i18n("C4"); -// xgettext: no-c-format -i18n("ArchA"); -// xgettext: no-c-format -i18n("European foolscap"); -// xgettext: no-c-format -i18n("Large Crown Octavo"); -// xgettext: no-c-format -i18n("Japanese Kaku envelope #4"); -// xgettext: no-c-format -i18n("ColorModel"); -// xgettext: no-c-format -i18n("Black & White"); -// xgettext: no-c-format -i18n("Back Print Film"); -// xgettext: no-c-format -i18n("Fabric Sheets"); -// xgettext: no-c-format -i18n("Envelope"); -// xgettext: no-c-format -i18n("High Resolution Paper"); -// xgettext: no-c-format -i18n("T-Shirt Transfers"); -// xgettext: no-c-format -i18n("High Gloss Film"); -// xgettext: no-c-format -i18n("Glossy Photo Paper"); -// xgettext: no-c-format -i18n("Glossy Photo Cards"); -// xgettext: no-c-format -i18n("Photo Paper Pro"); -// xgettext: no-c-format -i18n("Other"); -// xgettext: no-c-format -i18n("Auto Sheet Feeder"); -// xgettext: no-c-format -i18n("Manual with Pause"); -// xgettext: no-c-format -i18n("Manual without Pause"); -// xgettext: no-c-format -i18n("90x90 DPI"); -// xgettext: no-c-format -i18n("180x180 DPI"); -// xgettext: no-c-format -i18n("360x360 DPI"); -// xgettext: no-c-format -i18n("360x360 DPI DMT"); -// xgettext: no-c-format -i18n("720x360 DPI"); -// xgettext: no-c-format -i18n("Line Art"); -// xgettext: no-c-format -i18n("Solid Colors"); -// xgettext: no-c-format -i18n("Photograph"); -// xgettext: no-c-format -i18n("Black"); -// xgettext: no-c-format -i18n("Brightness"); -// xgettext: no-c-format -i18n("0.000"); -// xgettext: no-c-format -i18n("0.050"); -// xgettext: no-c-format -i18n("0.100"); -// xgettext: no-c-format -i18n("0.150"); -// xgettext: no-c-format -i18n("0.200"); -// xgettext: no-c-format -i18n("0.250"); -// xgettext: no-c-format -i18n("0.300"); -// xgettext: no-c-format -i18n("0.350"); -// xgettext: no-c-format -i18n("0.400"); -// xgettext: no-c-format -i18n("0.450"); -// xgettext: no-c-format -i18n("0.500"); -// xgettext: no-c-format -i18n("0.550"); -// xgettext: no-c-format -i18n("0.600"); -// xgettext: no-c-format -i18n("0.650"); -// xgettext: no-c-format -i18n("0.700"); -// xgettext: no-c-format -i18n("0.750"); -// xgettext: no-c-format -i18n("0.800"); -// xgettext: no-c-format -i18n("0.850"); -// xgettext: no-c-format -i18n("0.900"); -// xgettext: no-c-format -i18n("0.950"); -// xgettext: no-c-format -i18n("1.000"); -// xgettext: no-c-format -i18n("1.050"); -// xgettext: no-c-format -i18n("1.100"); -// xgettext: no-c-format -i18n("1.150"); -// xgettext: no-c-format -i18n("1.200"); -// xgettext: no-c-format -i18n("1.250"); -// xgettext: no-c-format -i18n("1.300"); -// xgettext: no-c-format -i18n("1.350"); -// xgettext: no-c-format -i18n("1.400"); -// xgettext: no-c-format -i18n("1.450"); -// xgettext: no-c-format -i18n("1.500"); -// xgettext: no-c-format -i18n("1.550"); -// xgettext: no-c-format -i18n("1.600"); -// xgettext: no-c-format -i18n("1.650"); -// xgettext: no-c-format -i18n("1.700"); -// xgettext: no-c-format -i18n("1.750"); -// xgettext: no-c-format -i18n("1.800"); -// xgettext: no-c-format -i18n("1.850"); -// xgettext: no-c-format -i18n("1.900"); -// xgettext: no-c-format -i18n("1.950"); -// xgettext: no-c-format -i18n("2.000"); -// xgettext: no-c-format -i18n("Contrast"); -// xgettext: no-c-format -i18n("2.050"); -// xgettext: no-c-format -i18n("2.100"); -// xgettext: no-c-format -i18n("2.150"); -// xgettext: no-c-format -i18n("2.200"); -// xgettext: no-c-format -i18n("2.250"); -// xgettext: no-c-format -i18n("2.300"); -// xgettext: no-c-format -i18n("2.350"); -// xgettext: no-c-format -i18n("2.400"); -// xgettext: no-c-format -i18n("2.450"); -// xgettext: no-c-format -i18n("2.500"); -// xgettext: no-c-format -i18n("2.550"); -// xgettext: no-c-format -i18n("2.600"); -// xgettext: no-c-format -i18n("2.650"); -// xgettext: no-c-format -i18n("2.700"); -// xgettext: no-c-format -i18n("2.750"); -// xgettext: no-c-format -i18n("2.800"); -// xgettext: no-c-format -i18n("2.850"); -// xgettext: no-c-format -i18n("2.900"); -// xgettext: no-c-format -i18n("2.950"); -// xgettext: no-c-format -i18n("3.000"); -// xgettext: no-c-format -i18n("3.050"); -// xgettext: no-c-format -i18n("3.100"); -// xgettext: no-c-format -i18n("3.150"); -// xgettext: no-c-format -i18n("3.200"); -// xgettext: no-c-format -i18n("3.250"); -// xgettext: no-c-format -i18n("3.300"); -// xgettext: no-c-format -i18n("3.350"); -// xgettext: no-c-format -i18n("3.400"); -// xgettext: no-c-format -i18n("3.450"); -// xgettext: no-c-format -i18n("3.500"); -// xgettext: no-c-format -i18n("3.550"); -// xgettext: no-c-format -i18n("3.600"); -// xgettext: no-c-format -i18n("3.650"); -// xgettext: no-c-format -i18n("3.700"); -// xgettext: no-c-format -i18n("3.750"); -// xgettext: no-c-format -i18n("3.800"); -// xgettext: no-c-format -i18n("3.850"); -// xgettext: no-c-format -i18n("3.900"); -// xgettext: no-c-format -i18n("3.950"); -// xgettext: no-c-format -i18n("4.000"); -// xgettext: no-c-format -i18n("Cyan"); -// xgettext: no-c-format -i18n("Magenta"); -// xgettext: no-c-format -i18n("Yellow"); -// xgettext: no-c-format -i18n("Saturation"); -// xgettext: no-c-format -i18n("4.050"); -// xgettext: no-c-format -i18n("4.100"); -// xgettext: no-c-format -i18n("4.150"); -// xgettext: no-c-format -i18n("4.200"); -// xgettext: no-c-format -i18n("4.250"); -// xgettext: no-c-format -i18n("4.300"); -// xgettext: no-c-format -i18n("4.350"); -// xgettext: no-c-format -i18n("4.400"); -// xgettext: no-c-format -i18n("4.450"); -// xgettext: no-c-format -i18n("4.500"); -// xgettext: no-c-format -i18n("4.550"); -// xgettext: no-c-format -i18n("4.600"); -// xgettext: no-c-format -i18n("4.650"); -// xgettext: no-c-format -i18n("4.700"); -// xgettext: no-c-format -i18n("4.750"); -// xgettext: no-c-format -i18n("4.800"); -// xgettext: no-c-format -i18n("4.850"); -// xgettext: no-c-format -i18n("4.900"); -// xgettext: no-c-format -i18n("4.950"); -// xgettext: no-c-format -i18n("5.000"); -// xgettext: no-c-format -i18n("5.050"); -// xgettext: no-c-format -i18n("5.100"); -// xgettext: no-c-format -i18n("5.150"); -// xgettext: no-c-format -i18n("5.200"); -// xgettext: no-c-format -i18n("5.250"); -// xgettext: no-c-format -i18n("5.300"); -// xgettext: no-c-format -i18n("5.350"); -// xgettext: no-c-format -i18n("5.400"); -// xgettext: no-c-format -i18n("5.450"); -// xgettext: no-c-format -i18n("5.500"); -// xgettext: no-c-format -i18n("5.550"); -// xgettext: no-c-format -i18n("5.600"); -// xgettext: no-c-format -i18n("5.650"); -// xgettext: no-c-format -i18n("5.700"); -// xgettext: no-c-format -i18n("5.750"); -// xgettext: no-c-format -i18n("5.800"); -// xgettext: no-c-format -i18n("5.850"); -// xgettext: no-c-format -i18n("5.900"); -// xgettext: no-c-format -i18n("5.950"); -// xgettext: no-c-format -i18n("6.000"); -// xgettext: no-c-format -i18n("6.050"); -// xgettext: no-c-format -i18n("6.100"); -// xgettext: no-c-format -i18n("6.150"); -// xgettext: no-c-format -i18n("6.200"); -// xgettext: no-c-format -i18n("6.250"); -// xgettext: no-c-format -i18n("6.300"); -// xgettext: no-c-format -i18n("6.350"); -// xgettext: no-c-format -i18n("6.400"); -// xgettext: no-c-format -i18n("6.450"); -// xgettext: no-c-format -i18n("6.500"); -// xgettext: no-c-format -i18n("6.550"); -// xgettext: no-c-format -i18n("6.600"); -// xgettext: no-c-format -i18n("6.650"); -// xgettext: no-c-format -i18n("6.700"); -// xgettext: no-c-format -i18n("6.750"); -// xgettext: no-c-format -i18n("6.800"); -// xgettext: no-c-format -i18n("6.850"); -// xgettext: no-c-format -i18n("6.900"); -// xgettext: no-c-format -i18n("6.950"); -// xgettext: no-c-format -i18n("7.000"); -// xgettext: no-c-format -i18n("7.050"); -// xgettext: no-c-format -i18n("7.100"); -// xgettext: no-c-format -i18n("7.150"); -// xgettext: no-c-format -i18n("7.200"); -// xgettext: no-c-format -i18n("7.250"); -// xgettext: no-c-format -i18n("7.300"); -// xgettext: no-c-format -i18n("7.350"); -// xgettext: no-c-format -i18n("7.400"); -// xgettext: no-c-format -i18n("7.450"); -// xgettext: no-c-format -i18n("7.500"); -// xgettext: no-c-format -i18n("7.550"); -// xgettext: no-c-format -i18n("7.600"); -// xgettext: no-c-format -i18n("7.650"); -// xgettext: no-c-format -i18n("7.700"); -// xgettext: no-c-format -i18n("7.750"); -// xgettext: no-c-format -i18n("7.800"); -// xgettext: no-c-format -i18n("7.850"); -// xgettext: no-c-format -i18n("7.900"); -// xgettext: no-c-format -i18n("7.950"); -// xgettext: no-c-format -i18n("8.000"); -// xgettext: no-c-format -i18n("8.050"); -// xgettext: no-c-format -i18n("8.100"); -// xgettext: no-c-format -i18n("8.150"); -// xgettext: no-c-format -i18n("8.200"); -// xgettext: no-c-format -i18n("8.250"); -// xgettext: no-c-format -i18n("8.300"); -// xgettext: no-c-format -i18n("8.350"); -// xgettext: no-c-format -i18n("8.400"); -// xgettext: no-c-format -i18n("8.450"); -// xgettext: no-c-format -i18n("8.500"); -// xgettext: no-c-format -i18n("8.550"); -// xgettext: no-c-format -i18n("8.600"); -// xgettext: no-c-format -i18n("8.650"); -// xgettext: no-c-format -i18n("8.700"); -// xgettext: no-c-format -i18n("8.750"); -// xgettext: no-c-format -i18n("8.800"); -// xgettext: no-c-format -i18n("8.850"); -// xgettext: no-c-format -i18n("8.900"); -// xgettext: no-c-format -i18n("8.950"); -// xgettext: no-c-format -i18n("9.000"); -// xgettext: no-c-format -i18n("720x720 DPI"); -// xgettext: no-c-format -i18n("1440x720 DPI"); -// xgettext: no-c-format -i18n("Photo CcMmY Color"); -// xgettext: no-c-format -i18n("Photo CcMmYK Color"); -// xgettext: no-c-format -i18n("1200x1200 DPI"); -// xgettext: no-c-format -i18n("12x18"); -// xgettext: no-c-format -i18n("Super B 13x19"); -// xgettext: no-c-format -i18n("20x24"); -// xgettext: no-c-format -i18n("20x30"); -// xgettext: no-c-format -i18n("22x30"); -// xgettext: no-c-format -i18n("24x30"); -// xgettext: no-c-format -i18n("24x36"); -// xgettext: no-c-format -i18n("30x40"); -// xgettext: no-c-format -i18n("A0"); -// xgettext: no-c-format -i18n("A1"); -// xgettext: no-c-format -i18n("A2"); -// xgettext: no-c-format -i18n("RA0"); -// xgettext: no-c-format -i18n("RA1"); -// xgettext: no-c-format -i18n("RA2"); -// xgettext: no-c-format -i18n("RA3"); -// xgettext: no-c-format -i18n("SRA0"); -// xgettext: no-c-format -i18n("SRA1"); -// xgettext: no-c-format -i18n("SRA2"); -// xgettext: no-c-format -i18n("B0 ISO"); -// xgettext: no-c-format -i18n("B1 ISO"); -// xgettext: no-c-format -i18n("B2 ISO"); -// xgettext: no-c-format -i18n("B3 ISO"); -// xgettext: no-c-format -i18n("B0 JIS"); -// xgettext: no-c-format -i18n("B1 JIS"); -// xgettext: no-c-format -i18n("B2 JIS"); -// xgettext: no-c-format -i18n("B3 JIS"); -// xgettext: no-c-format -i18n("C0"); -// xgettext: no-c-format -i18n("C1"); -// xgettext: no-c-format -i18n("C2"); -// xgettext: no-c-format -i18n("C3"); -// xgettext: no-c-format -i18n("ArchA Transverse"); -// xgettext: no-c-format -i18n("ArchB"); -// xgettext: no-c-format -i18n("ArchB Transverse"); -// xgettext: no-c-format -i18n("ArchC"); -// xgettext: no-c-format -i18n("ArchC Transverse"); -// xgettext: no-c-format -i18n("ArchD"); -// xgettext: no-c-format -i18n("ArchD Transverse"); -// xgettext: no-c-format -i18n("ArchE"); -// xgettext: no-c-format -i18n("Plain Paper Fast Load"); -// xgettext: no-c-format -i18n("Glossy Film"); -// xgettext: no-c-format -i18n("Envelopes"); -// xgettext: no-c-format -i18n("Back Light Film"); -// xgettext: no-c-format -i18n("Matte Paper"); -// xgettext: no-c-format -i18n("Inkjet Paper"); -// xgettext: no-c-format -i18n("Photo Quality Inkjet Paper"); -// xgettext: no-c-format -i18n("Premium Glossy Photo Paper"); -// xgettext: no-c-format -i18n("Premium Luster Photo Paper"); -// xgettext: no-c-format -i18n("Photo Quality Glossy Paper"); -// xgettext: no-c-format -i18n("Ilford Heavy Paper"); -// xgettext: no-c-format -i18n("ColorLife Paper"); -// xgettext: no-c-format -i18n("Roll Feed"); -// xgettext: no-c-format -i18n("360 x 90 DPI Fast Economy Draft"); -// xgettext: no-c-format -i18n("360 x 120 DPI Economy Draft"); -// xgettext: no-c-format -i18n("180 DPI Economy Draft"); -// xgettext: no-c-format -i18n("360 x 240 DPI Draft"); -// xgettext: no-c-format -i18n("360 x 180 DPI Draft"); -// xgettext: no-c-format -i18n("360 DPI Microweave"); -// xgettext: no-c-format -i18n("360 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI Full Overlap"); -// xgettext: no-c-format -i18n("360 DPI Full Overlap Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI FOL2"); -// xgettext: no-c-format -i18n("360 DPI FOL2 Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI MW2"); -// xgettext: no-c-format -i18n("360 DPI MW2 Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI"); -// xgettext: no-c-format -i18n("720 x 360 DPI Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI Microweave"); -// xgettext: no-c-format -i18n("720 x 360 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL2"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL2 Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI MW2"); -// xgettext: no-c-format -i18n("720 x 360 DPI MW2 Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Microweave"); -// xgettext: no-c-format -i18n("720 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Full Overlap"); -// xgettext: no-c-format -i18n("720 DPI Full Overlap Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Four Pass"); -// xgettext: no-c-format -i18n("720 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Microweave"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI FOL"); -// xgettext: no-c-format -i18n("1440 x 720 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Four Pass"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("Six Color Photo"); -// xgettext: no-c-format -i18n("Five Color Photo Composite"); -// xgettext: no-c-format -i18n("Three Color Composite"); -// xgettext: no-c-format -i18n("Quadtone"); -// xgettext: no-c-format -i18n("720 DPI Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI High Quality"); -// xgettext: no-c-format -i18n("720 DPI High Quality Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Highest Quality"); -// xgettext: no-c-format -i18n("1440 x 720 DPI"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Highest Quality"); -// xgettext: no-c-format -i18n("2880 x 720 DPI"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Unidirectional"); -// xgettext: no-c-format -i18n("Roll Feed (cut each page)"); -// xgettext: no-c-format -i18n("Roll Feed (do not cut)"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Highest Quality"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI"); -// xgettext: no-c-format -i18n("Seven Color Photo"); -// xgettext: no-c-format -i18n("Two Level Grayscale"); -// xgettext: no-c-format -i18n("Cut Sheet Bin 1"); -// xgettext: no-c-format -i18n("Cut Sheet Bin 2"); -// xgettext: no-c-format -i18n("Cut Sheet Autoselect"); -// xgettext: no-c-format -i18n("Manual Selection"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Microweave"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("2880 x 720 DPI FOL"); -// xgettext: no-c-format -i18n("2880 x 720 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Four Pass"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Microweave"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI FOL"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Four Pass"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI Microweave"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI FOL"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI Four Pass"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("Seven Color Enhanced"); -// xgettext: no-c-format -i18n("Six Color Enhanced Composite"); -// xgettext: no-c-format -i18n("Plain"); -// xgettext: no-c-format -i18n("300 DPI x 600 DPI"); -// xgettext: no-c-format -i18n("600 DPI high quality"); -// xgettext: no-c-format -i18n("600 DPI Unidirectional"); -// xgettext: no-c-format -i18n("1200 DPI high quality"); -// xgettext: no-c-format -i18n("1200 DPI highest quality"); -// xgettext: no-c-format -i18n("1200 DPI Unidirectional"); -// xgettext: no-c-format -i18n("2400 DPI x 1200 DPI"); -// xgettext: no-c-format -i18n("2400 DPI x 1200 DPI high quality"); -// xgettext: no-c-format -i18n("2400 DPI x 1200 DPI highest quality"); -// xgettext: no-c-format -i18n("600x600 DPI monochrome"); -// xgettext: no-c-format -i18n("Quick-dry Photo"); -// xgettext: no-c-format -i18n("Quick-dry Transparency"); -// xgettext: no-c-format -i18n("Portable Sheet Feeder"); -// xgettext: no-c-format -i18n("Desktop Sheet Feeder"); -// xgettext: no-c-format -i18n("Color + Black Cartridges"); -// xgettext: no-c-format -i18n("Upper Tray"); -// xgettext: no-c-format -i18n("Lower Tray"); -// xgettext: no-c-format -i18n("Dual"); -// xgettext: no-c-format -i18n("Thicker Paper"); -// xgettext: no-c-format -i18n("Thin Paper"); -// xgettext: no-c-format -i18n("Toner Saving"); -// xgettext: no-c-format -i18n("High (50%)"); -// xgettext: no-c-format -i18n("Low (25%)"); -// xgettext: no-c-format -i18n("Standard printing"); -// xgettext: no-c-format -i18n("Floyd-Steinberg dithered printing"); -// xgettext: no-c-format -i18n("Tray 5"); -// xgettext: no-c-format -i18n("2400x600 DPI"); -// xgettext: no-c-format -i18n("Draft Grayscale"); -// xgettext: no-c-format -i18n("Printer Model"); -// xgettext: no-c-format -i18n("HP LaserJet II series"); -// xgettext: no-c-format -i18n("HP LaserJet III series"); -// xgettext: no-c-format -i18n("8K"); -// xgettext: no-c-format -i18n("Large Capacity Tray"); -// xgettext: no-c-format -i18n("Multi Purpose Tray"); -// xgettext: no-c-format -i18n("300 dpi, Draft, Grayscale, Black Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Grayscale, Black Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Grayscale, Black Cartr."); -// xgettext: no-c-format -i18n("180x360 dpi"); -// xgettext: no-c-format -i18n("360x360 dpi"); -// xgettext: no-c-format -i18n("180 x 180 DPI"); -// xgettext: no-c-format -i18n("360 x 360 DPI"); -// xgettext: no-c-format -i18n("Plain paper"); -// xgettext: no-c-format -i18n("Bond paper"); -// xgettext: no-c-format -i18n("Media Weight"); -// xgettext: no-c-format -i18n("Normal paper"); -// xgettext: no-c-format -i18n("Thick paper"); -// xgettext: no-c-format -i18n("90 DPI"); -// xgettext: no-c-format -i18n("Ghostscript Bits Per Pixel"); -// xgettext: no-c-format -i18n("Monochrome (1bpp)"); -// xgettext: no-c-format -i18n("CMYK with Ghostscript dithering (8bpp)"); -// xgettext: no-c-format -i18n("CMYK with Ghostscript FS dithering (16bpp)"); -// xgettext: no-c-format -i18n("CMYK with FS dithering (24 bpp)"); -// xgettext: no-c-format -i18n("CMYK with FS dithering (32 bpp)"); -// xgettext: no-c-format -i18n("Color Model"); -// xgettext: no-c-format -i18n("Four-color CMYK"); -// xgettext: no-c-format -i18n("Greyscale"); -// xgettext: no-c-format -i18n("Three-color RGB"); -// xgettext: no-c-format -i18n("Colours to be used"); -// xgettext: no-c-format -i18n("Cyan only"); -// xgettext: no-c-format -i18n("Cyan, Black"); -// xgettext: no-c-format -i18n("Cyan, Magenta"); -// xgettext: no-c-format -i18n("Cyan, Magenta, Black"); -// xgettext: no-c-format -i18n("Cyan, Magenta, Yellow"); -// xgettext: no-c-format -i18n("Cyan, Magenta, Yellow, Black"); -// xgettext: no-c-format -i18n("Cyan, Yellow"); -// xgettext: no-c-format -i18n("Cyan, Yellow, Black"); -// xgettext: no-c-format -i18n("Black only"); -// xgettext: no-c-format -i18n("Black for any colour"); -// xgettext: no-c-format -i18n("Magenta only"); -// xgettext: no-c-format -i18n("Magenta, Black"); -// xgettext: no-c-format -i18n("Magenta, Yellow"); -// xgettext: no-c-format -i18n("Magenta, Yellow, Black"); -// xgettext: no-c-format -i18n("Yellow only"); -// xgettext: no-c-format -i18n("Yellow, Black"); -// xgettext: no-c-format -i18n("90 x 90 DPI"); -// xgettext: no-c-format -i18n("Resolution, Media Type"); -// xgettext: no-c-format -i18n("360x360dpi, back print film"); -// xgettext: no-c-format -i18n("360x360dpi, coated paper"); -// xgettext: no-c-format -i18n("360x360dpi, fabric sheet"); -// xgettext: no-c-format -i18n("360x360dpi, glossy paper"); -// xgettext: no-c-format -i18n("360x360dpi, high gloss film"); -// xgettext: no-c-format -i18n("360x360dpi, high resolution paper"); -// xgettext: no-c-format -i18n("360x360dpi, plain paper"); -// xgettext: no-c-format -i18n("360x360dpi, plain paper, high speed"); -// xgettext: no-c-format -i18n("360x360dpi, transparency film"); -// xgettext: no-c-format -i18n("Very High Quality"); -// xgettext: no-c-format -i18n("Very High Quality Grayscale"); -// xgettext: no-c-format -i18n("720 x 720 DPI"); -// xgettext: no-c-format -i18n("360 dpi"); -// xgettext: no-c-format -i18n("720 dpi"); -// xgettext: no-c-format -i18n("Low Quality"); -// xgettext: no-c-format -i18n("720x720dpi, back print film"); -// xgettext: no-c-format -i18n("720x720dpi, coated paper"); -// xgettext: no-c-format -i18n("720x720dpi, glossy paper"); -// xgettext: no-c-format -i18n("720x720dpi, high-gloss paper"); -// xgettext: no-c-format -i18n("720x720dpi, high resolution paper"); -// xgettext: no-c-format -i18n("720x720dpi, plain paper"); -// xgettext: no-c-format -i18n("720x720dpi, transparency film"); -// xgettext: no-c-format -i18n("1200 x 600 DPI"); -// xgettext: no-c-format -i18n("Resolution, Quality, Media Type"); -// xgettext: no-c-format -i18n("600x600dpi, iron-on transfer sheets, normal quality"); -// xgettext: no-c-format -i18n("600x600dpi, plain paper, normal quality"); -// xgettext: no-c-format -i18n("600x600dpi, transparencies, normal quality"); -// xgettext: no-c-format -i18n("1200x1200dpi, glossy photo cards, high quality"); -// xgettext: no-c-format -i18n("1200x1200dpi, high gloss photo paper, high quality"); -// xgettext: no-c-format -i18n("1200x1200dpi, professional photo paper, highest quality"); -// xgettext: no-c-format -i18n("1200 x 1200 DPI"); -// xgettext: no-c-format -i18n("Number of Copies"); -// xgettext: no-c-format -i18n("REt Setting"); -// xgettext: no-c-format -i18n("Halftoning"); -// xgettext: no-c-format -i18n("HP LaserJet 4L"); -// xgettext: no-c-format -i18n("Shift output horizontally (in 1/300 inch)"); -// xgettext: no-c-format -i18n("Shift output vertically (in 1/300 inch)"); -// xgettext: no-c-format -i18n("Full Paint"); -// xgettext: no-c-format -i18n("FullPaint"); -// xgettext: no-c-format -i18n("PartialPaint"); -// xgettext: no-c-format -i18n("Printer's paper size"); -// xgettext: no-c-format -i18n("IgnoreSize"); -// xgettext: no-c-format -i18n("RequireSize"); -// xgettext: no-c-format -i18n("240x240 DPI"); -// xgettext: no-c-format -i18n("300x300 dpi"); -// xgettext: no-c-format -i18n("300x600 dpi"); -// xgettext: no-c-format -i18n("600x600 dpi"); -// xgettext: no-c-format -i18n("600x1200 dpi"); -// xgettext: no-c-format -i18n("1200x1200 dpi"); -// xgettext: no-c-format -i18n("Head Separation"); -// xgettext: no-c-format -i18n("300x600 DPI"); -// xgettext: no-c-format -i18n("300x1200 DPI"); -// xgettext: no-c-format -i18n("600x1200 DPI"); -// xgettext: no-c-format -i18n("1200x300 DPI"); -// xgettext: no-c-format -i18n("Photo Quality Colour (6-ink)"); -// xgettext: no-c-format -i18n("Normal Quality Colour (4-ink)"); -// xgettext: no-c-format -i18n("Bidirectional printing"); -// xgettext: no-c-format -i18n("off"); -// xgettext: no-c-format -i18n("on"); -// xgettext: no-c-format -i18n("Horz. align. betw. cartr."); -// xgettext: no-c-format -i18n("Vert. align. betw. cartr."); -// xgettext: no-c-format -i18n("Distance even/odd nozzles left cartr."); -// xgettext: no-c-format -i18n("Distance even/odd nozzles right cartr."); -// xgettext: no-c-format -i18n("Number of passes per line"); -// xgettext: no-c-format -i18n("Paper Source"); -// xgettext: no-c-format -i18n("Tray 8"); -// xgettext: no-c-format -i18n("Tray 9"); -// xgettext: no-c-format -i18n("Tray 10"); -// xgettext: no-c-format -i18n("Tray 11"); -// xgettext: no-c-format -i18n("Tray 12"); -// xgettext: no-c-format -i18n("Tray 13"); -// xgettext: no-c-format -i18n("Tray 14"); -// xgettext: no-c-format -i18n("Tray 15"); -// xgettext: no-c-format -i18n("Page Output"); -// xgettext: no-c-format -i18n("FaceUp"); -// xgettext: no-c-format -i18n("FaceDown"); -// xgettext: no-c-format -i18n("Thick Paper/Card Board"); -// xgettext: no-c-format -i18n("Toner Density"); -// xgettext: no-c-format -i18n("TonerSaving"); -// xgettext: no-c-format -i18n("Output Order"); -// xgettext: no-c-format -i18n("Collate"); -// xgettext: no-c-format -i18n("Orientation"); -// xgettext: no-c-format -i18n("Landscape"); -// xgettext: no-c-format -i18n("Portrait"); -// xgettext: no-c-format -i18n("RIT Control"); -// xgettext: no-c-format -i18n("RITOff"); -// xgettext: no-c-format -i18n("RITOn"); -// xgettext: no-c-format -i18n("Monochrome, fast"); -// xgettext: no-c-format -i18n("Monochrome, Floyd-Steinberg"); -// xgettext: no-c-format -i18n("Head motion"); -// xgettext: no-c-format -i18n("Unidirectional"); -// xgettext: no-c-format -i18n("Bidirectional"); -// xgettext: no-c-format -i18n("Weaving"); -// xgettext: no-c-format -i18n("Microweave (Printer internal)"); -// xgettext: no-c-format -i18n("Softweave (Driver internal)"); -// xgettext: no-c-format -i18n("ESC/P2 Encoding"); -// xgettext: no-c-format -i18n("Delta Row"); -// xgettext: no-c-format -i18n("Run Length"); -// xgettext: no-c-format -i18n("Uncompressed"); -// xgettext: no-c-format -i18n("Preconfiguration file"); -// xgettext: no-c-format -i18n("stcolor"); -// xgettext: no-c-format -i18n("none"); -// xgettext: no-c-format -i18n("Initialization values for dithering"); -// xgettext: no-c-format -i18n("Uniform"); -// xgettext: no-c-format -i18n("Random"); -// xgettext: no-c-format -i18n("360 x 120 DPI"); -// xgettext: no-c-format -i18n("360 x 240 DPI"); -// xgettext: no-c-format -i18n("360 x 180 DPI"); -// xgettext: no-c-format -i18n("360 x 90 DPI"); -// xgettext: no-c-format -i18n("360x360dpi, 4-bit, PostScript halftoning, weaved"); -// xgettext: no-c-format -i18n("360x360dpi, 32-bit CMYK"); -// xgettext: no-c-format -i18n("720x720dpi, 32-bit CMYK, weaved"); -// xgettext: no-c-format -i18n("Colour, Floyd-Steinberg, CMYK, better"); -// xgettext: no-c-format -i18n("Colour, fast, CMYK"); -// xgettext: no-c-format -i18n("Colour, modif. Floyd-Steinberg, CMYK, faster"); -// xgettext: no-c-format -i18n("Colour, fast, RGB"); -// xgettext: no-c-format -i18n("Colour, Floyd-Steinberg, RGB"); -// xgettext: no-c-format -i18n("Colour, Floyd-Steinberg, CMYK, simpler"); -// xgettext: no-c-format -i18n("Colour, Stefan-Singer algorithm, RGB"); -// xgettext: no-c-format -i18n("360 dpi, plain paper"); -// xgettext: no-c-format -i18n("720 dpi, plain paper"); -// xgettext: no-c-format -i18n("1440x720dpi, inkjet paper"); -// xgettext: no-c-format -i18n("Resolution, Color Mode, Media Type"); -// xgettext: no-c-format -i18n("360x360dpi, plain paper, grayscale"); -// xgettext: no-c-format -i18n("720x720dpi, inkjet paper"); -// xgettext: no-c-format -i18n("720x720dpi, plain paper, grayscale"); -// xgettext: no-c-format -i18n("1440x720dpi, inkjet paper, grayscale"); -// xgettext: no-c-format -i18n("360x360dpi, plain paper low quality"); -// xgettext: no-c-format -i18n("360x360dpi"); -// xgettext: no-c-format -i18n("720x720dpi"); -// xgettext: no-c-format -i18n("F4"); -// xgettext: no-c-format -i18n("Government Legal"); -// xgettext: no-c-format -i18n("Government Letter"); -// xgettext: no-c-format -i18n("Half Letter"); -// xgettext: no-c-format -i18n("TonerSave"); -// xgettext: no-c-format -i18n("Dpi"); -// xgettext: no-c-format -i18n("600x300 dpi (Class600)"); -// xgettext: no-c-format -i18n("1200x600 dpi (Class1200)"); -// xgettext: no-c-format -i18n("Ritech"); -// xgettext: no-c-format -i18n("Resolution, Color Mode"); -// xgettext: no-c-format -i18n("180x180dpi, Grayscale, plain paper"); -// xgettext: no-c-format -i18n("360x360dpi, Color, plain paper"); -// xgettext: no-c-format -i18n("360x360dpi, Grayscale, plain paper"); -// xgettext: no-c-format -i18n("360x720 DPI"); -// xgettext: no-c-format -i18n("400x400 DPI"); -// xgettext: no-c-format -i18n("300 dpi, Best, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Best, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Grayscale, Black + Color Cartr."); -// xgettext: no-c-format -i18n("Super B"); -// xgettext: no-c-format -i18n("Manual Feeding"); -// xgettext: no-c-format -i18n("Paper type"); -// xgettext: no-c-format -i18n("Glossy film"); -// xgettext: no-c-format -i18n("Special paper"); -// xgettext: no-c-format -i18n("Transparency film"); -// xgettext: no-c-format -i18n("Printing Quality"); -// xgettext: no-c-format -i18n("RET (Resolution Enhancement)"); -// xgettext: no-c-format -i18n("Draft (auto-detect paper type)"); -// xgettext: no-c-format -i18n("Photo (on photo paper)"); -// xgettext: no-c-format -i18n("300 dpi, Photo, Black + Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("600 dpi, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Photo, Black + Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("Draft Grayscale (auto-detect paper type)"); -// xgettext: no-c-format -i18n("Normal (auto-detect paper type)"); -// xgettext: no-c-format -i18n("Normal Grayscale (auto-detect paper type)"); -// xgettext: no-c-format -i18n("High Quality (auto-detect paper type)"); -// xgettext: no-c-format -i18n("High Quality Grayscale (auto-detect paper type)"); -// xgettext: no-c-format -i18n("1200 dpi, Photo, Black + Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("Binding for Double-Sided Pr."); -// xgettext: no-c-format -i18n("Long Edge"); -// xgettext: no-c-format -i18n("Short Edge"); -// xgettext: no-c-format -i18n("Auto"); -// xgettext: no-c-format -i18n("Contone (4096 colors)"); -// xgettext: no-c-format -i18n("2A"); -// xgettext: no-c-format -i18n("4A"); -// xgettext: no-c-format -i18n("Arch A"); -// xgettext: no-c-format -i18n("Arch B"); -// xgettext: no-c-format -i18n("Arch C"); -// xgettext: no-c-format -i18n("Arch D"); -// xgettext: no-c-format -i18n("Arch E"); -// xgettext: no-c-format -i18n("B0 (ISO)"); -// xgettext: no-c-format -i18n("B1 (ISO)"); -// xgettext: no-c-format -i18n("B2 (ISO)"); -// xgettext: no-c-format -i18n("B3 (ISO)"); -// xgettext: no-c-format -i18n("B4 (ISO)"); -// xgettext: no-c-format -i18n("B5 (ISO)"); -// xgettext: no-c-format -i18n("B0 (JIS)"); -// xgettext: no-c-format -i18n("B1 (JIS)"); -// xgettext: no-c-format -i18n("B2 (JIS)"); -// xgettext: no-c-format -i18n("B3 (JIS)"); -// xgettext: no-c-format -i18n("Super A"); -// xgettext: no-c-format -i18n("Tabloid Extra"); -// xgettext: no-c-format -i18n("EconoFast Mode"); -// xgettext: no-c-format -i18n("Color (Color Cartridge, for photos)"); -// xgettext: no-c-format -i18n("Color (both cartridges, for text with images)"); -// xgettext: no-c-format -i18n("Grayscale (black cartridge)"); -// xgettext: no-c-format -i18n("Dithering Algorithm"); -// xgettext: no-c-format -i18n("Floyd Steinberg (higher quality)"); -// xgettext: no-c-format -i18n("Ordered (faster)"); -// xgettext: no-c-format -i18n("Off (better quality)"); -// xgettext: no-c-format -i18n("On (faster)"); -// xgettext: no-c-format -i18n("Black ink density adjustment."); -// xgettext: no-c-format -i18n("Bottom Margin"); -// xgettext: no-c-format -i18n("Left Margin"); -// xgettext: no-c-format -i18n("Right Margin"); -// xgettext: no-c-format -i18n("Top Margin"); -// xgettext: no-c-format -i18n("X Offset"); -// xgettext: no-c-format -i18n("Y Offset"); -// xgettext: no-c-format -i18n("Gamma Correction File"); -// xgettext: no-c-format -i18n("Default (/etc/pnm2ppa.gamma)"); -// xgettext: no-c-format -i18n("Normal Quality (/etc/pnm2ppa.gamma_normal)"); -// xgettext: no-c-format -i18n("Best Quality (/etc/pnm2ppa.gamma_best)"); -// xgettext: no-c-format -i18n("None"); -// xgettext: no-c-format -i18n("GhostScript Rendering Format"); -// xgettext: no-c-format -i18n("Gamma Correction"); -// xgettext: no-c-format -i18n("Gamma Black"); -// xgettext: no-c-format -i18n("Gamma Cyan"); -// xgettext: no-c-format -i18n("Gamma Magenta"); -// xgettext: no-c-format -i18n("Gamma Yellow"); -// xgettext: no-c-format -i18n("Draft Grayscale (Black cartridge)"); -// xgettext: no-c-format -i18n("Normal Grayscale (Black cartridge)"); -// xgettext: no-c-format -i18n("High Quality Grayscale (Black cartridge)"); -// xgettext: no-c-format -i18n("600x300 dpi, Best, Grayscale, Black Cartr."); -// xgettext: no-c-format -i18n("300 dpi, Color, Full Bleed, Black + Color Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Color, Full Bleed, Black + Color Cartr."); -// xgettext: no-c-format -i18n("1200 dpi, Photo, Full Bleed, Black + Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("Photo (Color cartridge, on photo paper)"); -// xgettext: no-c-format -i18n("300 dpi, Photo, Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("600 dpi, Photo, Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("Glossy"); -// xgettext: no-c-format -i18n("Paper"); -// xgettext: no-c-format -i18n("Behaviour when Toner Low"); -// xgettext: no-c-format -i18n("Output Bin"); -// xgettext: no-c-format -i18n("Upper"); -// xgettext: no-c-format -i18n("Lower"); -// xgettext: no-c-format -i18n("MP Tray"); -// xgettext: no-c-format -i18n("300 dpi, Color, Full Bleed, Color Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Color, Color Cartr."); -// xgettext: no-c-format -i18n("600 dpi, Color, Full Bleed, Color Cartr."); -// xgettext: no-c-format -i18n("1200 dpi, Photo, Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("1200 dpi, Photo, Full Bleed, Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("150 dpi, Best, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("150 dpi, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("150 dpi, Draft, Color, Black + Color Cartr."); -// xgettext: no-c-format -i18n("150 dpi, Draft, Grayscale, Black + Color Cartr."); -// xgettext: no-c-format -i18n("150 dpi, Grayscale, Black + Color Cartr."); -// xgettext: no-c-format -i18n("2400x1200 DPI"); -// xgettext: no-c-format -i18n("High Quality (Color cartridge)"); -// xgettext: no-c-format -i18n("Cover for HP DeskJet 3425"); -// xgettext: no-c-format -i18n("75x75 dpi"); -// xgettext: no-c-format -i18n("150x150 dpi"); -// xgettext: no-c-format -i18n("Black cartridge"); -// xgettext: no-c-format -i18n("Color cartridge"); -// xgettext: no-c-format -i18n("Folio"); -// xgettext: no-c-format -i18n("Normal Paper"); -// xgettext: no-c-format -i18n("Card Stock"); -// xgettext: no-c-format -i18n("Adhesive Labels"); -// xgettext: no-c-format -i18n("Pre-printed paper"); -// xgettext: no-c-format -i18n("Allow use of 'Reprint' button"); -// xgettext: no-c-format -i18n("Yes"); -// xgettext: no-c-format -i18n("Altitude Correction"); -// xgettext: no-c-format -i18n("High Altitude (Low Air Pressure)"); -// xgettext: no-c-format -i18n("Low Altitude (High Air Pressure)"); -// xgettext: no-c-format -i18n("Reprint Page after Paper Jam"); -// xgettext: no-c-format -i18n("Page Timeout"); -// xgettext: no-c-format -i18n("15 sec"); -// xgettext: no-c-format -i18n("30 sec"); -// xgettext: no-c-format -i18n("45 sec"); -// xgettext: no-c-format -i18n("Idle time to start power save mode (min)"); -// xgettext: no-c-format -i18n("5 min"); -// xgettext: no-c-format -i18n("10 min"); -// xgettext: no-c-format -i18n("15 min"); -// xgettext: no-c-format -i18n("30 min"); -// xgettext: no-c-format -i18n("45 min"); -// xgettext: no-c-format -i18n("60 min"); -// xgettext: no-c-format -i18n("Use Power Saving Mode"); -// xgettext: no-c-format -i18n("Dithering PPI"); -// xgettext: no-c-format -i18n("300 x 600 DPI"); -// xgettext: no-c-format -i18n("2400 x 1200 DPI"); -// xgettext: no-c-format -i18n("2-passes x-weaving"); -// xgettext: no-c-format -i18n("3-passes x-weaving"); -// xgettext: no-c-format -i18n("320x320 DPI"); -// xgettext: no-c-format -i18n("160x160 DPI"); -// xgettext: no-c-format -i18n("Darkness"); -// xgettext: no-c-format -i18n("Darkest"); -// xgettext: no-c-format -i18n("Lightest"); -// xgettext: no-c-format -i18n("Black toner saving"); -// xgettext: no-c-format -i18n("DeskJet"); -// xgettext: no-c-format -i18n("DeskJet 310"); -// xgettext: no-c-format -i18n("DeskJet 320"); -// xgettext: no-c-format -i18n("DeskJet 340"); -// xgettext: no-c-format -i18n("DeskJet 400"); -// xgettext: no-c-format -i18n("DeskJet 600"); -// xgettext: no-c-format -i18n("DeskJet 660C"); -// xgettext: no-c-format -i18n("DeskJet 670C"); -// xgettext: no-c-format -i18n("DeskJet 680C"); -// xgettext: no-c-format -i18n("DeskJet 690C"); -// xgettext: no-c-format -i18n("DeskJet 870C"); -// xgettext: no-c-format -i18n("DeskJet 890C"); -// xgettext: no-c-format -i18n("DeskJet 970C with Duplexer"); -// xgettext: no-c-format -i18n("DeskJet 1120C"); -// xgettext: no-c-format -i18n("DeskJet Plus"); -// xgettext: no-c-format -i18n("DeskJet Portable"); -// xgettext: no-c-format -i18n("Olivetti (Black sent after CMY)"); -// xgettext: no-c-format -i18n("Unspecified Model"); -// xgettext: no-c-format -i18n("Unspecified Old Model"); -// xgettext: no-c-format -i18n("Configure Every Page"); -// xgettext: no-c-format -i18n("Media Size"); -// xgettext: no-c-format -i18n("Letter"); -// xgettext: no-c-format -i18n("Legal"); -// xgettext: no-c-format -i18n("A4"); -// xgettext: no-c-format -i18n("PageRegion"); -// xgettext: no-c-format -i18n("Output Resolution"); -// xgettext: no-c-format -i18n("204x196 DPI"); -// xgettext: no-c-format -i18n("204x98 DPI"); -// xgettext: no-c-format -i18n("your fax for replies"); -// xgettext: no-c-format -i18n("ID"); -// xgettext: no-c-format -i18n("your fax header"); -// xgettext: no-c-format -i18n("Default"); -// xgettext: no-c-format -i18n("Resolution"); -// xgettext: no-c-format -i18n("72dpi"); -// xgettext: no-c-format -i18n("144dpi"); -// xgettext: no-c-format -i18n("300dpi"); -// xgettext: no-c-format -i18n("360dpi"); -// xgettext: no-c-format -i18n("600dpi"); -// xgettext: no-c-format -i18n("720dpi"); -// xgettext: no-c-format -i18n("1200dpi"); -// xgettext: no-c-format -i18n("1440dpi"); -// xgettext: no-c-format -i18n("2400dpi"); -// xgettext: no-c-format -i18n("PageSize"); -// xgettext: no-c-format -i18n("A0"); -// xgettext: no-c-format -i18n("A1"); -// xgettext: no-c-format -i18n("A2"); -// xgettext: no-c-format -i18n("A3"); -// xgettext: no-c-format -i18n("A5"); -// xgettext: no-c-format -i18n("A6"); -// xgettext: no-c-format -i18n("B4"); -// xgettext: no-c-format -i18n("B5"); -// xgettext: no-c-format -i18n("B6"); -// xgettext: no-c-format -i18n("US Legal"); -// xgettext: no-c-format -i18n("US Letter"); -// xgettext: no-c-format -i18n("Executive"); -// xgettext: no-c-format -i18n("Statement"); -// xgettext: no-c-format -i18n("US Tabloid"); -// xgettext: no-c-format -i18n("Ledger Landscape"); -// xgettext: no-c-format -i18n("US C"); -// xgettext: no-c-format -i18n("US D"); -// xgettext: no-c-format -i18n("US E"); -// xgettext: no-c-format -i18n("ARCH A"); -// xgettext: no-c-format -i18n("ARCH B"); -// xgettext: no-c-format -i18n("ARCH C"); -// xgettext: no-c-format -i18n("ARCH D"); -// xgettext: no-c-format -i18n("ARCH E"); -// xgettext: no-c-format -i18n("Monarch Envelope"); -// xgettext: no-c-format -i18n("DL Envelope"); -// xgettext: no-c-format -i18n("C4 Envelope"); -// xgettext: no-c-format -i18n("C5 Envelope"); -// xgettext: no-c-format -i18n("C6 Envelope"); -// xgettext: no-c-format -i18n("C10 Envelope"); -// xgettext: no-c-format -i18n("C65 Envelope"); -// xgettext: no-c-format -i18n("Folio"); -// xgettext: no-c-format -i18n("InputSlot"); -// xgettext: no-c-format -i18n("Autotray"); -// xgettext: no-c-format -i18n("Tray 2 Paper Tray"); -// xgettext: no-c-format -i18n("Installed Memory"); -// xgettext: no-c-format -i18n("Standard 16MB"); -// xgettext: no-c-format -i18n("80 MB"); -// xgettext: no-c-format -i18n("B5 (JIS)"); -// xgettext: no-c-format -i18n("Envelope 10"); -// xgettext: no-c-format -i18n("Envelope DL"); -// xgettext: no-c-format -i18n("Envelope C5"); -// xgettext: no-c-format -i18n("Envelope C6"); -// xgettext: no-c-format -i18n("Envelope Monarch"); -// xgettext: no-c-format -i18n("Envelope A2"); -// xgettext: no-c-format -i18n("4x6"); -// xgettext: no-c-format -i18n("5x8"); -// xgettext: no-c-format -i18n("A6 Card"); -// xgettext: no-c-format -i18n("Print Color as Gray"); -// xgettext: no-c-format -i18n("On"); -// xgettext: no-c-format -i18n("Off"); -// xgettext: no-c-format -i18n("Media Type"); -// xgettext: no-c-format -i18n("Plain Paper"); -// xgettext: no-c-format -i18n("HP Premium Inkjet Paper"); -// xgettext: no-c-format -i18n("HP Premium Inkjet Heavyweight Paper"); -// xgettext: no-c-format -i18n("HP Premium Transparency"); -// xgettext: no-c-format -i18n("HP Premium Photo Paper"); -// xgettext: no-c-format -i18n("HP Photo Paper"); -// xgettext: no-c-format -i18n("HP Professional Brochure Paper, Glossy"); -// xgettext: no-c-format -i18n("HP Professional Brochure Paper, Matte"); -// xgettext: no-c-format -i18n(" Paper Source"); -// xgettext: no-c-format -i18n("Tray 1"); -// xgettext: no-c-format -i18n("Tray 2"); -// xgettext: no-c-format -i18n("Manual Feed"); -// xgettext: no-c-format -i18n("HP ColorSmart"); -// xgettext: no-c-format -i18n("Automatic"); -// xgettext: no-c-format -i18n("Manual"); -// xgettext: no-c-format -i18n("Text"); -// xgettext: no-c-format -i18n("ScreenMatch(sRGB)"); -// xgettext: no-c-format -i18n("Vivid"); -// xgettext: no-c-format -i18n("Graphics"); -// xgettext: no-c-format -i18n("Image"); -// xgettext: no-c-format -i18n(" Print Quality"); -// xgettext: no-c-format -i18n("Best"); -// xgettext: no-c-format -i18n("Normal"); -// xgettext: no-c-format -i18n("Fast"); -// xgettext: no-c-format -i18n("CMYK Inks"); -// xgettext: no-c-format -i18n("FAST"); -// xgettext: no-c-format -i18n("SWOP Emulation"); -// xgettext: no-c-format -i18n("Eurostandard"); -// xgettext: no-c-format -i18n("TOYO"); -// xgettext: no-c-format -i18n("Pages per Sheet"); -// xgettext: no-c-format -i18n("1 (Portrait)"); -// xgettext: no-c-format -i18n("1 (Landscape)"); -// xgettext: no-c-format -i18n("2 (Portrait)"); -// xgettext: no-c-format -i18n("2 (Landscape)"); -// xgettext: no-c-format -i18n("4 (Portrait)"); -// xgettext: no-c-format -i18n("4 (Landscape)"); -// xgettext: no-c-format -i18n("6 (Portrait)"); -// xgettext: no-c-format -i18n("6 (Landscape)"); -// xgettext: no-c-format -i18n("9 (Portrait)"); -// xgettext: no-c-format -i18n("9 (Landscape)"); -// xgettext: no-c-format -i18n("16 (Portrait)"); -// xgettext: no-c-format -i18n("16 (Landscape)"); -// xgettext: no-c-format -i18n("Watermark"); -// xgettext: no-c-format -i18n("None"); -// xgettext: no-c-format -i18n("Company Confidential"); -// xgettext: no-c-format -i18n("Company Proprietary"); -// xgettext: no-c-format -i18n("Company Private"); -// xgettext: no-c-format -i18n("Confidential"); -// xgettext: no-c-format -i18n("Copy"); -// xgettext: no-c-format -i18n("Copyright"); -// xgettext: no-c-format -i18n("Draft"); -// xgettext: no-c-format -i18n("File Copy"); -// xgettext: no-c-format -i18n("Final"); -// xgettext: no-c-format -i18n("For Internal Use Only"); -// xgettext: no-c-format -i18n("Preliminary"); -// xgettext: no-c-format -i18n("Proof"); -// xgettext: no-c-format -i18n("Review Copy"); -// xgettext: no-c-format -i18n("Sample"); -// xgettext: no-c-format -i18n("Top Secret"); -// xgettext: no-c-format -i18n("Urgent"); -// xgettext: no-c-format -i18n("Watermark Font"); -// xgettext: no-c-format -i18n("Courier Bold"); -// xgettext: no-c-format -i18n("Times Bold"); -// xgettext: no-c-format -i18n("Helvetica Bold"); -// xgettext: no-c-format -i18n("Watermark Size"); -// xgettext: no-c-format -i18n("24 Points"); -// xgettext: no-c-format -i18n("30 Points"); -// xgettext: no-c-format -i18n("36 Points"); -// xgettext: no-c-format -i18n("42 Points"); -// xgettext: no-c-format -i18n("48 Points"); -// xgettext: no-c-format -i18n("54 Points"); -// xgettext: no-c-format -i18n("60 Points"); -// xgettext: no-c-format -i18n("66 Points"); -// xgettext: no-c-format -i18n("72 Points"); -// xgettext: no-c-format -i18n("78 Points"); -// xgettext: no-c-format -i18n("84 Points"); -// xgettext: no-c-format -i18n("90 Points"); -// xgettext: no-c-format -i18n("Watermark Angle"); -// xgettext: no-c-format -i18n("90 Degrees"); -// xgettext: no-c-format -i18n("75 Degrees"); -// xgettext: no-c-format -i18n("60 Degrees"); -// xgettext: no-c-format -i18n("45 Degrees"); -// xgettext: no-c-format -i18n("30 Degrees"); -// xgettext: no-c-format -i18n("15 Degrees"); -// xgettext: no-c-format -i18n("0 Degrees"); -// xgettext: no-c-format -i18n("-15 Degrees"); -// xgettext: no-c-format -i18n("-30 Degrees"); -// xgettext: no-c-format -i18n("-45 Degrees"); -// xgettext: no-c-format -i18n("-60 Degrees"); -// xgettext: no-c-format -i18n("-75 Degrees"); -// xgettext: no-c-format -i18n("-90 Degrees"); -// xgettext: no-c-format -i18n("Watermark Style"); -// xgettext: no-c-format -i18n("Narrow Outline"); -// xgettext: no-c-format -i18n("Medium Outline"); -// xgettext: no-c-format -i18n("Wide Outline"); -// xgettext: no-c-format -i18n("Wide Halo Outline"); -// xgettext: no-c-format -i18n("Print Watermark"); -// xgettext: no-c-format -i18n("All Pages"); -// xgettext: no-c-format -i18n("First Page Only"); -// xgettext: no-c-format -i18n("32 MB"); -// xgettext: no-c-format -i18n("48 MB"); -// xgettext: no-c-format -i18n("64 MB"); -// xgettext: no-c-format -i18n("72 MB"); -// xgettext: no-c-format -i18n("Tabloid"); -// xgettext: no-c-format -i18n("4x6 Index Card"); -// xgettext: no-c-format -i18n("5x8 Index Card"); -// xgettext: no-c-format -i18n("Super B"); -// xgettext: no-c-format -i18n("Super A3"); -// xgettext: no-c-format -i18n("Input Slot"); -// xgettext: no-c-format -i18n("Tray 3"); -// xgettext: no-c-format -i18n("Rear Manual Feed"); -// xgettext: no-c-format -i18n("True"); -// xgettext: no-c-format -i18n("False"); -// xgettext: no-c-format -i18n("HP Rapid-Dry Transparency"); -// xgettext: no-c-format -i18n("HP Transparency"); -// xgettext: no-c-format -i18n("HP Iron-on T-shirt Transfers"); -// xgettext: no-c-format -i18n("Fit to Page"); -// xgettext: no-c-format -i18n("Prompt User"); -// xgettext: no-c-format -i18n("Nearest Size and Scale"); -// xgettext: no-c-format -i18n("Nearest Size and Crop"); -// xgettext: no-c-format -i18n("Print Quality"); -// xgettext: no-c-format -i18n("EconoFast"); -// xgettext: no-c-format -i18n("Color Control"); -// xgettext: no-c-format -i18n("Enhanced Native"); -// xgettext: no-c-format -i18n("ColorSmart Business Graphics"); -// xgettext: no-c-format -i18n("No Color Adjustment"); -// xgettext: no-c-format -i18n("Pantone"); -// xgettext: no-c-format -i18n("Rendering Intent"); -// xgettext: no-c-format -i18n("Contrast"); -// xgettext: no-c-format -i18n("Colorimetric"); -// xgettext: no-c-format -i18n("Saturation"); -// xgettext: no-c-format -i18n(" -25% Lighter"); -// xgettext: no-c-format -i18n(" -20%"); -// xgettext: no-c-format -i18n(" -15%"); -// xgettext: no-c-format -i18n(" -10%"); -// xgettext: no-c-format -i18n(" -5%"); -// xgettext: no-c-format -i18n(" 0% No Change"); -// xgettext: no-c-format -i18n(" +5%"); -// xgettext: no-c-format -i18n(" +10%"); -// xgettext: no-c-format -i18n(" +15%"); -// xgettext: no-c-format -i18n(" +20%"); -// xgettext: no-c-format -i18n(" +25% Darker"); -// xgettext: no-c-format -i18n("Application Halftoning"); -// xgettext: no-c-format -i18n("Yes"); -// xgettext: no-c-format -i18n("No"); -// xgettext: no-c-format -i18n("Scale to"); -// xgettext: no-c-format -i18n("No Change"); -// xgettext: no-c-format -i18n("PPD Version"); -// xgettext: no-c-format -i18n("2.0"); -// xgettext: no-c-format -i18n("Rear Feed Unit"); -// xgettext: no-c-format -i18n("Installed"); -// xgettext: no-c-format -i18n("Not Installed"); -// xgettext: no-c-format -i18n("Memory Configuration"); -// xgettext: no-c-format -i18n("36 - 43 MB RAM"); -// xgettext: no-c-format -i18n("44 - 51 MB RAM"); -// xgettext: no-c-format -i18n("52 - 59 MB RAM"); -// xgettext: no-c-format -i18n("60 - 67 MB RAM"); -// xgettext: no-c-format -i18n(">= 68 MB RAM"); -// xgettext: no-c-format -i18n("Print as Grayscale"); -// xgettext: no-c-format -i18n("ColorSmart"); -// xgettext: no-c-format -i18n("Auto"); -// xgettext: no-c-format -i18n("Pantone"); -// xgettext: no-c-format -i18n("ColorSmart Text"); -// xgettext: no-c-format -i18n("Vivid Color"); -// xgettext: no-c-format -i18n("Match Color Across Printers"); -// xgettext: no-c-format -i18n("No Adjustment"); -// xgettext: no-c-format -i18n("ColorSmart Graphics"); -// xgettext: no-c-format -i18n("ColorSmart Photos"); -// xgettext: no-c-format -i18n("Text Halftone"); -// xgettext: no-c-format -i18n("Detail"); -// xgettext: no-c-format -i18n("Smooth"); -// xgettext: no-c-format -i18n("Basic"); -// xgettext: no-c-format -i18n("Graphics Halftone"); -// xgettext: no-c-format -i18n("Image Halftone"); -// xgettext: no-c-format -i18n("Transparency/HP Special Paper"); -// xgettext: no-c-format -i18n("Media Source"); -// xgettext: no-c-format -i18n("Auto Select"); -// xgettext: no-c-format -i18n("Front Tray"); -// xgettext: no-c-format -i18n("Rear Tray"); -// xgettext: no-c-format -i18n("Output Bin"); -// xgettext: no-c-format -i18n("Upper"); -// xgettext: no-c-format -i18n("Lower"); -// xgettext: no-c-format -i18n(" 8 - 15 MB Total RAM"); -// xgettext: no-c-format -i18n(" 16 - 23 MB Total RAM"); -// xgettext: no-c-format -i18n(" 24 - 31 MB Total RAM"); -// xgettext: no-c-format -i18n(" 32 - 39 MB Total RAM"); -// xgettext: no-c-format -i18n(" 40 - 56 MB Total RAM"); -// xgettext: no-c-format -i18n("Letter 8 1/2 x 11 in"); -// xgettext: no-c-format -i18n("Legal 8 1/2 x 14 in"); -// xgettext: no-c-format -i18n("Tabloid 11 x 17 in"); -// xgettext: no-c-format -i18n("Executive 7 1/4 x 10 1/2 in"); -// xgettext: no-c-format -i18n("A4 210 x 297 mm"); -// xgettext: no-c-format -i18n("A3 297 x 420 mm"); -// xgettext: no-c-format -i18n("Halftone"); -// xgettext: no-c-format -i18n("Cluster (Standard)"); -// xgettext: no-c-format -i18n("Scatter (Enhanced)"); -// xgettext: no-c-format -i18n("Printer's Current Setting"); -// xgettext: no-c-format -i18n("Full Color"); -// xgettext: no-c-format -i18n("Paper"); -// xgettext: no-c-format -i18n("Transparency"); -// xgettext: no-c-format -i18n("Resolution Enhancement (REt)"); -// xgettext: no-c-format -i18n("Light"); -// xgettext: no-c-format -i18n("Medium"); -// xgettext: no-c-format -i18n("Dark"); -// xgettext: no-c-format -i18n("Printer Default"); -// xgettext: no-c-format -i18n("Tray3"); -// xgettext: no-c-format -i18n("32 - 39 MB RAM"); -// xgettext: no-c-format -i18n("40 - 63 MB RAM"); -// xgettext: no-c-format -i18n("64 - 95 MB RAM"); -// xgettext: no-c-format -i18n("96 - 127 MB RAM"); -// xgettext: no-c-format -i18n("128 - 159 MB RAM"); -// xgettext: no-c-format -i18n("160 - 191 MB RAM"); -// xgettext: no-c-format -i18n(" 192 MB RAM"); -// xgettext: no-c-format -i18n("Duplex Unit (for 2-Sided Printing)"); -// xgettext: no-c-format -i18n("Envelope B5"); -// xgettext: no-c-format -i18n("Envelope #10"); -// xgettext: no-c-format -i18n("Plain"); -// xgettext: no-c-format -i18n("Preprinted"); -// xgettext: no-c-format -i18n("Letterhead"); -// xgettext: no-c-format -i18n("Glossy"); -// xgettext: no-c-format -i18n("Prepunched"); -// xgettext: no-c-format -i18n("Labels"); -// xgettext: no-c-format -i18n("Bond"); -// xgettext: no-c-format -i18n("Recycled"); -// xgettext: no-c-format -i18n("Color"); -// xgettext: no-c-format -i18n("Heavy"); -// xgettext: no-c-format -i18n("Card Stock"); -// xgettext: no-c-format -i18n("Print Finish"); -// xgettext: no-c-format -i18n("Matte"); -// xgettext: no-c-format -i18n("Paper Source"); -// xgettext: no-c-format -i18n("Tray2"); -// xgettext: no-c-format -i18n("Tray1"); -// xgettext: no-c-format -i18n("2-Sided Printing"); -// xgettext: no-c-format -i18n("Long-Edge Binding"); -// xgettext: no-c-format -i18n("Short-Edge Binding"); -// xgettext: no-c-format -i18n("SWOP"); -// xgettext: no-c-format -i18n("ColorSmart II"); -// xgettext: no-c-format -i18n("ScreenMatch(sRGB)-Detail"); -// xgettext: no-c-format -i18n("ScreenMatch(sRGB)-Smooth"); -// xgettext: no-c-format -i18n("Vivid-Detail"); -// xgettext: no-c-format -i18n("Vivid-Smooth"); -// xgettext: no-c-format -i18n("500-Sheet Paper Feeder"); -// xgettext: no-c-format -i18n("Printer Disk"); -// xgettext: no-c-format -i18n("RAM Disk"); -// xgettext: no-c-format -i18n("Hard Disk"); -// xgettext: no-c-format -i18n("32 - 63 MB RAM"); -// xgettext: no-c-format -i18n("192 - 223 MB RAM"); -// xgettext: no-c-format -i18n("224 - 256 MB RAM"); -// xgettext: no-c-format -i18n("Duplex Printing Accessory"); -// xgettext: no-c-format -i18n("Paper Matching"); -// xgettext: no-c-format -i18n("Prompt User for correct size"); -// xgettext: no-c-format -i18n("Nearest Size & Scale"); -// xgettext: no-c-format -i18n("Nearest Size & Crop"); -// xgettext: no-c-format -i18n("Job Retention"); -// xgettext: no-c-format -i18n("Quick Copy"); -// xgettext: no-c-format -i18n("Proof and Hold"); -// xgettext: no-c-format -i18n("Stored Job"); -// xgettext: no-c-format -i18n("Private Job"); -// xgettext: no-c-format -i18n("PIN (for Private Job)"); -// xgettext: no-c-format -i18n("User Specified PIN"); -// xgettext: no-c-format -i18n("User Name"); -// xgettext: no-c-format -i18n("Use file sharing name"); -// xgettext: no-c-format -i18n("Forms"); -// xgettext: no-c-format -i18n("Custom user name"); -// xgettext: no-c-format -i18n("Job Name"); -// xgettext: no-c-format -i18n("Use Document Name"); -// xgettext: no-c-format -i18n("User Specified Job Name"); -// xgettext: no-c-format -i18n("US Letter (Small)"); -// xgettext: no-c-format -i18n("US Legal (Small)"); -// xgettext: no-c-format -i18n("A4 (Small)"); -// xgettext: no-c-format -i18n("JB5"); -// xgettext: no-c-format -i18n("Env ISO B5"); -// xgettext: no-c-format -i18n("Env Comm10"); -// xgettext: no-c-format -i18n("Env C5"); -// xgettext: no-c-format -i18n("Env DL"); -// xgettext: no-c-format -i18n("Env Monarch"); -// xgettext: no-c-format -i18n("Tray 3 (Optional)"); -// xgettext: no-c-format -i18n("Glossy Finish"); -// xgettext: no-c-format -i18n("Automatic PANTONE¨ Color Calibration"); -// xgettext: no-c-format -i18n("EuroScale"); -// xgettext: no-c-format -i18n("DIC"); -// xgettext: no-c-format -i18n("Manual Text"); -// xgettext: no-c-format -i18n("Calibrated-Detail"); -// xgettext: no-c-format -i18n("Calibrated-Smooth"); -// xgettext: no-c-format -i18n("Manual Graphics"); -// xgettext: no-c-format -i18n("Manual Image"); -// xgettext: no-c-format -i18n("Watermark/Overlay"); -// xgettext: no-c-format -i18n("Overlay"); -// xgettext: no-c-format -i18n("Watermark Pages"); -// xgettext: no-c-format -i18n("All"); -// xgettext: no-c-format -i18n("First Only"); -// xgettext: no-c-format -i18n("Watermark Text"); -// xgettext: no-c-format -i18n("Custom"); -// xgettext: no-c-format -i18n("Watermark Size (points)"); -// xgettext: no-c-format -i18n("90"); -// xgettext: no-c-format -i18n("75"); -// xgettext: no-c-format -i18n("60"); -// xgettext: no-c-format -i18n("45"); -// xgettext: no-c-format -i18n("30"); -// xgettext: no-c-format -i18n("15"); -// xgettext: no-c-format -i18n("0"); -// xgettext: no-c-format -i18n("Ð15"); -// xgettext: no-c-format -i18n("Ð30"); -// xgettext: no-c-format -i18n("Ð45"); -// xgettext: no-c-format -i18n("Ð60"); -// xgettext: no-c-format -i18n("Ð75"); -// xgettext: no-c-format -i18n("Ð90"); -// xgettext: no-c-format -i18n("Thin Outline"); -// xgettext: no-c-format -i18n("Thick Outline"); -// xgettext: no-c-format -i18n("Thick Outline with Halo"); -// xgettext: no-c-format -i18n("Filled"); -// xgettext: no-c-format -i18n("Watermark Color"); -// xgettext: no-c-format -i18n("Gray"); -// xgettext: no-c-format -i18n("Red"); -// xgettext: no-c-format -i18n("Orange"); -// xgettext: no-c-format -i18n("Yellow"); -// xgettext: no-c-format -i18n("Green"); -// xgettext: no-c-format -i18n("Blue"); -// xgettext: no-c-format -i18n("Violet"); -// xgettext: no-c-format -i18n("Watermark Intensity"); -// xgettext: no-c-format -i18n("Darkest"); -// xgettext: no-c-format -i18n("Darker"); -// xgettext: no-c-format -i18n("Medium Dark"); -// xgettext: no-c-format -i18n("Medium Light"); -// xgettext: no-c-format -i18n("Lighter"); -// xgettext: no-c-format -i18n("Lightest"); -// xgettext: no-c-format -i18n("Collate"); -// xgettext: no-c-format -i18n("On (turn off in application)"); -// xgettext: no-c-format -i18n("2000 sheet input Tray 4"); -// xgettext: no-c-format -i18n("Multi-Bin Mailbox"); -// xgettext: no-c-format -i18n("Printer hard disk"); -// xgettext: no-c-format -i18n("Printer Memory"); -// xgettext: no-c-format -i18n("Multi-Bin Mailbox Mode"); -// xgettext: no-c-format -i18n("Mailbox"); -// xgettext: no-c-format -i18n("Stacking"); -// xgettext: no-c-format -i18n("Job Separation"); -// xgettext: no-c-format -i18n("Color Mode"); -// xgettext: no-c-format -i18n("CMYK"); -// xgettext: no-c-format -i18n("Grayscale"); -// xgettext: no-c-format -i18n("Duplex"); -// xgettext: no-c-format -i18n("Duplex Tumble"); -// xgettext: no-c-format -i18n("Duplex (Two-Sided)"); -// xgettext: no-c-format -i18n("One Sided"); -// xgettext: no-c-format -i18n("ColorSmartCRD Text"); -// xgettext: no-c-format -i18n("Screen Match"); -// xgettext: no-c-format -i18n("OHT"); -// xgettext: no-c-format -i18n("ColorSmartCRD Graphics"); -// xgettext: no-c-format -i18n("ColorSmartCRD Images"); -// xgettext: no-c-format -i18n("HalftoneText"); -// xgettext: no-c-format -i18n("Halftone Graphics"); -// xgettext: no-c-format -i18n("Halftone Images"); -// xgettext: no-c-format -i18n("Cardstock"); -// xgettext: no-c-format -i18n("Heavy Media >= 28lbs"); -// xgettext: no-c-format -i18n("Envelope"); -// xgettext: no-c-format -i18n("28 Lb Type1"); -// xgettext: no-c-format -i18n("28 Lb Type2"); -// xgettext: no-c-format -i18n("Media Type First"); -// xgettext: no-c-format -i18n("Media Type Rest"); -// xgettext: no-c-format -i18n("Staple"); -// xgettext: no-c-format -i18n("Manual Feed (Tray 1)"); -// xgettext: no-c-format -i18n("Tray 4"); -// xgettext: no-c-format -i18n("Paper Source First"); -// xgettext: no-c-format -i18n("Paper Source Rest"); -// xgettext: no-c-format -i18n("Output Destination"); -// xgettext: no-c-format -i18n("Top Output Bin (Face-Down)"); -// xgettext: no-c-format -i18n("Left Output Bin (Face-Up)"); -// xgettext: no-c-format -i18n("Stacker"); -// xgettext: no-c-format -i18n("Job Separator"); -// xgettext: no-c-format -i18n("Mailbox 1"); -// xgettext: no-c-format -i18n("Mailbox 2"); -// xgettext: no-c-format -i18n("Mailbox 3"); -// xgettext: no-c-format -i18n("Mailbox 4"); -// xgettext: no-c-format -i18n("Mailbox 5"); -// xgettext: no-c-format -i18n("Mailbox 6"); -// xgettext: no-c-format -i18n("Mailbox 7"); -// xgettext: no-c-format -i18n("Mailbox 8"); -// xgettext: no-c-format -i18n("Page Size"); -// xgettext: no-c-format -i18n("Exec"); -// xgettext: no-c-format -i18n("11x17"); -// xgettext: no-c-format -i18n("Com-10"); -// xgettext: no-c-format -i18n("DL"); -// xgettext: no-c-format -i18n("Monarch"); -// xgettext: no-c-format -i18n("C5"); -// xgettext: no-c-format -i18n("JIS B5"); -// xgettext: no-c-format -i18n("JPostD"); -// xgettext: no-c-format -i18n("12x18"); -// xgettext: no-c-format -i18n("9x12"); -// xgettext: no-c-format -i18n("C4"); -// xgettext: no-c-format -i18n("N-UP AND WATERMARK SETTINGS"); -// xgettext: no-c-format -i18n(""); -// xgettext: no-c-format -i18n("(None)"); -// xgettext: no-c-format -i18n("Optional Tray 2"); -// xgettext: no-c-format -i18n("Optional Tray 4"); -// xgettext: no-c-format -i18n("1000 sheet input Tray 4"); -// xgettext: no-c-format -i18n("Accessory Output Bins"); -// xgettext: no-c-format -i18n("8 Bin Mailbox (Mailbox mode)"); -// xgettext: no-c-format -i18n("8 Bin Mailbox (Stacker-Separator-Collator)"); -// xgettext: no-c-format -i18n("HP 3000-Sheet Stapler-Stacker"); -// xgettext: no-c-format -i18n("HP 3000-Sheet Stacker"); -// xgettext: no-c-format -i18n("Enabled"); -// xgettext: no-c-format -i18n("Disabled"); -// xgettext: no-c-format -i18n("Color Treatment"); -// xgettext: no-c-format -i18n("High Print Quality"); -// xgettext: no-c-format -i18n("SWOP-Coated"); -// xgettext: no-c-format -i18n("Euroscale"); -// xgettext: no-c-format -i18n("Manually Print on 2nd Side"); -// xgettext: no-c-format -i18n("Manual Images"); -// xgettext: no-c-format -i18n("Private Stored Job"); -// xgettext: no-c-format -i18n("PrinterÕs Current Setting"); -// xgettext: no-c-format -i18n("Stacker-Separator-Collator"); -// xgettext: no-c-format -i18n("Stapler"); -// xgettext: no-c-format -i18n("Bin 1"); -// xgettext: no-c-format -i18n("Bin 2"); -// xgettext: no-c-format -i18n("Bin 3"); -// xgettext: no-c-format -i18n("Bin 4"); -// xgettext: no-c-format -i18n("Bin 5"); -// xgettext: no-c-format -i18n("Bin 6"); -// xgettext: no-c-format -i18n("Bin 7"); -// xgettext: no-c-format -i18n("Bin 8"); -// xgettext: no-c-format -i18n("Stapler Option"); -// xgettext: no-c-format -i18n("1 Staple, diagonal"); -// xgettext: no-c-format -i18n("1 Staple, parallel"); -// xgettext: no-c-format -i18n("2 Staples, parallel"); -// xgettext: no-c-format -i18n("3 Staples, parallel"); -// xgettext: no-c-format -i18n("6 Staples, parallel"); -// xgettext: no-c-format -i18n("JIS B4"); -// xgettext: no-c-format -i18n("A3 (Oversize 12x18.11)"); -// xgettext: no-c-format -i18n("Executive (JIS)"); -// xgettext: no-c-format -i18n("16K"); -// xgettext: no-c-format -i18n("8K"); -// xgettext: no-c-format -i18n("Double Postcard (JIS)"); -// xgettext: no-c-format -i18n("EconoMode"); -// xgettext: no-c-format -i18n("Total Memory"); -// xgettext: no-c-format -i18n("6 - 7 MB"); -// xgettext: no-c-format -i18n("8 - 11 MB"); -// xgettext: no-c-format -i18n("12 - 19 MB"); -// xgettext: no-c-format -i18n("20 - 27 MB"); -// xgettext: no-c-format -i18n("28 - 35 MB"); -// xgettext: no-c-format -i18n("36 MB or more"); -// xgettext: no-c-format -i18n("8.5 x 13"); -// xgettext: no-c-format -i18n("Postcard (JIS)"); -// xgettext: no-c-format -i18n("B5 (ISO)"); -// xgettext: no-c-format -i18n("Tray 1 (Manual)"); -// xgettext: no-c-format -i18n("Manual Duplex"); -// xgettext: no-c-format -i18n("Odd Pages"); -// xgettext: no-c-format -i18n("Even Pages"); -// xgettext: no-c-format -i18n("Levels of Gray"); -// xgettext: no-c-format -i18n("Enhanced"); -// xgettext: no-c-format -i18n("Standard"); -// xgettext: no-c-format -i18n("Resolution Enhancement"); -// xgettext: no-c-format -i18n("Optional Lower Tray"); -// xgettext: no-c-format -i18n("Optional Envelope Feeder"); -// xgettext: no-c-format -i18n("JCLOpenUI *JCLResolution"); -// xgettext: no-c-format -i18n("Legal Frame Size"); -// xgettext: no-c-format -i18n("Com-10 Env"); -// xgettext: no-c-format -i18n("Monarch Env"); -// xgettext: no-c-format -i18n("DL Env"); -// xgettext: no-c-format -i18n("C5 Env"); -// xgettext: no-c-format -i18n("B5 Env"); -// xgettext: no-c-format -i18n("Multipurpose Tray"); -// xgettext: no-c-format -i18n("Paper Cassette"); -// xgettext: no-c-format -i18n("Lower Cassette"); -// xgettext: no-c-format -i18n("Envelope Feeder"); -// xgettext: no-c-format -i18n("Rough"); -// xgettext: no-c-format -i18n("Duplex Unit"); -// xgettext: no-c-format -i18n("Printer Hard Disk"); -// xgettext: no-c-format -i18n("Total Printer Memory"); -// xgettext: no-c-format -i18n("4 - 7 MB"); -// xgettext: no-c-format -i18n(" Tray 1"); -// xgettext: no-c-format -i18n(" Tray 1 (Manual)"); -// xgettext: no-c-format -i18n(" Tray 2"); -// xgettext: no-c-format -i18n(" Tray 3"); -// xgettext: no-c-format -i18n(" Tray 4"); -// xgettext: no-c-format -i18n(" Envelope Feeder"); -// xgettext: no-c-format -i18n("Scale Patterns"); -// xgettext: no-c-format -i18n("Off (1-Sided)"); -// xgettext: no-c-format -i18n("Flip on Long Edge (Standard)"); -// xgettext: no-c-format -i18n("Flip on Short Edge"); -// xgettext: no-c-format -i18n("User"); -// xgettext: no-c-format -i18n("FastRes 1200"); -// xgettext: no-c-format -i18n("Number of Input Trays"); -// xgettext: no-c-format -i18n(" 2"); -// xgettext: no-c-format -i18n(" 3"); -// xgettext: no-c-format -i18n(" 4"); -// xgettext: no-c-format -i18n(" 5"); -// xgettext: no-c-format -i18n(" 6"); -// xgettext: no-c-format -i18n(" 7"); -// xgettext: no-c-format -i18n(" 8"); -// xgettext: no-c-format -i18n(" 9"); -// xgettext: no-c-format -i18n("12 - 15 MB"); -// xgettext: no-c-format -i18n("16 - 19 MB"); -// xgettext: no-c-format -i18n(" Tray 5"); -// xgettext: no-c-format -i18n(" Tray 6"); -// xgettext: no-c-format -i18n(" Tray 7"); -// xgettext: no-c-format -i18n(" Tray 8"); -// xgettext: no-c-format -i18n(" Tray 9"); -// xgettext: no-c-format -i18n(" Tray 10"); -// xgettext: no-c-format -i18n("ManualFeed"); -// xgettext: no-c-format -i18n("Page Protection"); -// xgettext: no-c-format -i18n(" 2 - 3 MB Total RAM"); -// xgettext: no-c-format -i18n(" 4 - 5 MB Total RAM"); -// xgettext: no-c-format -i18n(" 6 - 9 MB Total RAM"); -// xgettext: no-c-format -i18n("10 - 14 MB Total RAM"); -// xgettext: no-c-format -i18n("15 - 26 MB Total RAM"); -// xgettext: no-c-format -i18n("Upper Tray"); -// xgettext: no-c-format -i18n("Lower Tray"); -// xgettext: no-c-format -i18n("Long Edge Binding"); -// xgettext: no-c-format -i18n("Short Edge Binding"); -// xgettext: no-c-format -i18n("Upper - Face Down"); -// xgettext: no-c-format -i18n("Lower - Face Up"); -// xgettext: no-c-format -i18n("12 - 27 MB Total RAM"); -// xgettext: no-c-format -i18n("28 - 35 MB Total RAM"); -// xgettext: no-c-format -i18n("36 - 52 MB Total RAM"); -// xgettext: no-c-format -i18n("11x17 (Oversize)"); -// xgettext: no-c-format -i18n("ISO B5 Env"); -// xgettext: no-c-format -i18n("MP Tray"); -// xgettext: no-c-format -i18n("Printer<27>s Current Setting"); -// xgettext: no-c-format -i18n("Optional Lower Cassette"); -// xgettext: no-c-format -i18n("Optional Duplex Unit"); -// xgettext: no-c-format -i18n("Long-edge Binding"); -// xgettext: no-c-format -i18n("Short-edge Binding"); -// xgettext: no-c-format -i18n("500-Sheet Tray 3"); -// xgettext: no-c-format -i18n("12 MB or more"); -// xgettext: no-c-format -i18n("Vellum"); -// xgettext: no-c-format -i18n("11x17 (Oversize 12x18.5)"); -// xgettext: no-c-format -i18n("A3 (Oversize 312x440)"); -// xgettext: no-c-format -i18n("B4 (JIS)"); -// xgettext: no-c-format -i18n("B6 (JIS)"); -// xgettext: no-c-format -i18n("Tray 1 (MultiPurpose Tray)"); -// xgettext: no-c-format -i18n("Tray 2 (Paper Cassette)"); -// xgettext: no-c-format -i18n("Letter (8 1/2 x 11 in)"); -// xgettext: no-c-format -i18n("Legal (8 1/2 x 14 in)"); -// xgettext: no-c-format -i18n("A4 (210 x 297 mm)"); -// xgettext: no-c-format -i18n("Executive (7 1/4 x 10 1/2 in)"); -// xgettext: no-c-format -i18n("A5 (148 x 210 mm)"); -// xgettext: no-c-format -i18n("Com-10 Env (4 1/8 x 9 1/2 in)"); -// xgettext: no-c-format -i18n("Monarch Env (3 7/8 x 7 1/2 in)"); -// xgettext: no-c-format -i18n("DL Env (110 x 220 mm)"); -// xgettext: no-c-format -i18n("C5 Env (162 x 229 mm)"); -// xgettext: no-c-format -i18n("B5 Env (176 x 250 mm)"); -// xgettext: no-c-format -i18n("2000-Sheet Input Tray (Tray 4)"); -// xgettext: no-c-format -i18n("28 - 43 MB Total RAM"); -// xgettext: no-c-format -i18n("44 - 59 MB Total RAM"); -// xgettext: no-c-format -i18n("60 - 75 MB Total RAM"); -// xgettext: no-c-format -i18n("76 -100 MB Total RAM"); -// xgettext: no-c-format -i18n("Double Postcard"); -// xgettext: no-c-format -i18n("Page Region"); -// xgettext: no-c-format -i18n("Top Output Bin (Face Down)"); -// xgettext: no-c-format -i18n("Left Output Bin (Face Up)"); -// xgettext: no-c-format -i18n("Stacker (Face Down)"); -// xgettext: no-c-format -i18n("Job Seperator (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 1 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 2 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 3 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 4 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 5 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 6 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 7 (Face Down)"); -// xgettext: no-c-format -i18n("Mailbox 8 (Face Down)"); -// xgettext: no-c-format -i18n("Printer Resolution"); -// xgettext: no-c-format -i18n("600 dpi"); -// xgettext: no-c-format -i18n("300 dpi"); -// xgettext: no-c-format -i18n("Mailbox with Stapler"); -// xgettext: no-c-format -i18n("Mailbox with Stapler Mode"); -// xgettext: no-c-format -i18n("Job Separator (Face Down)"); -// xgettext: no-c-format -i18n("Stapler (Face Down)"); -// xgettext: no-c-format -i18n("3 MB"); -// xgettext: no-c-format -i18n("4 - 5 MB"); -// xgettext: no-c-format -i18n("6 MB or more"); -// xgettext: no-c-format -i18n("Top Bin"); -// xgettext: no-c-format -i18n("Left Bin (Face Up)"); -// xgettext: no-c-format -i18n("Stapler (max 50 Sheets)"); -// xgettext: no-c-format -i18n("Stapler Opposing (max 50)"); -// xgettext: no-c-format -i18n("Stapler (max 20 Letter or A4)"); -// xgettext: no-c-format -i18n("Collator"); -// xgettext: no-c-format -i18n("Stapling Options"); -// xgettext: no-c-format -i18n("One Staple Angled"); -// xgettext: no-c-format -i18n("One Staple"); -// xgettext: no-c-format -i18n("Two Staples"); -// xgettext: no-c-format -i18n("Three Staples"); -// xgettext: no-c-format -i18n("Six Staples"); -// xgettext: no-c-format -i18n("Administrator Defined"); -// xgettext: no-c-format -i18n("Tray 5"); -// xgettext: no-c-format -i18n("5 Bin Mailbox with Stapler"); -// xgettext: no-c-format -i18n("7 Bin Mailbox"); -// xgettext: no-c-format -i18n("8 Bin Mailbox"); -// xgettext: no-c-format -i18n("HP 3000-Sheet Stapler/Stacker"); -// xgettext: no-c-format -i18n("Standard Mailbox"); -// xgettext: no-c-format -i18n("20 - 23 MB"); -// xgettext: no-c-format -i18n("24 - 27 MB"); -// xgettext: no-c-format -i18n("11x17 (Oversize 11.7x17.7)"); -// xgettext: no-c-format -i18n("System Name (if available)"); -// xgettext: no-c-format -i18n(" 1"); -// xgettext: no-c-format -i18n("PIN digit 1 (for Private Job)"); -// xgettext: no-c-format -i18n("PIN digit 2 (for Private Job)"); -// xgettext: no-c-format -i18n("PIN digit 3 (for Private Job)"); -// xgettext: no-c-format -i18n("PIN digit 4 (for Private Job)"); -// xgettext: no-c-format -i18n("Edge-to-Edge Printing"); -// xgettext: no-c-format -i18n("32 - 39 MB"); -// xgettext: no-c-format -i18n("40 - 47 MB"); -// xgettext: no-c-format -i18n("48 - 55 MB"); -// xgettext: no-c-format -i18n("56 - 63 MB"); -// xgettext: no-c-format -i18n("64 - 71 MB"); -// xgettext: no-c-format -i18n("72 MB or more"); -// xgettext: no-c-format -i18n("Banner Printing"); -// xgettext: no-c-format -i18n("Manual Feeder"); -// xgettext: no-c-format -i18n("Standard Tray"); -// xgettext: no-c-format -i18n("Sheet Feeder"); -// xgettext: no-c-format -i18n("Bond Paper"); -// xgettext: no-c-format -i18n("Glossy Paper"); -// xgettext: no-c-format -i18n("HP Premium Paper"); -// xgettext: no-c-format -i18n("Quick-Dry Glossy"); -// xgettext: no-c-format -i18n("Quick-Dry Transparency"); -// xgettext: no-c-format -i18n("Transparency Film"); -// xgettext: no-c-format -i18n("75 DPI"); -// xgettext: no-c-format -i18n("150 DPI"); -// xgettext: no-c-format -i18n("300 DPI"); -// xgettext: no-c-format -i18n("600 DPI"); -// xgettext: no-c-format -i18n("600x300 DPI"); -// xgettext: no-c-format -i18n("Quality"); -// xgettext: no-c-format -i18n("Default Setting"); -// xgettext: no-c-format -i18n("Presentation"); -// xgettext: no-c-format -i18n("CMY"); -// xgettext: no-c-format -i18n("CMY+K"); -// xgettext: no-c-format -i18n("Model"); -// xgettext: no-c-format -i18n("DeskJet"); -// xgettext: no-c-format -i18n("DeskJet 310"); -// xgettext: no-c-format -i18n("DeskJet 320"); -// xgettext: no-c-format -i18n("DeskJet 340"); -// xgettext: no-c-format -i18n("DeskJet 400"); -// xgettext: no-c-format -i18n("DeskJet 500"); -// xgettext: no-c-format -i18n("DeskJet 500C"); -// xgettext: no-c-format -i18n("DeskJet 510"); -// xgettext: no-c-format -i18n("DeskJet 520"); -// xgettext: no-c-format -i18n("DeskJet 540"); -// xgettext: no-c-format -i18n("DeskJet 550C"); -// xgettext: no-c-format -i18n("DeskJet 560C"); -// xgettext: no-c-format -i18n("DeskJet 600"); -// xgettext: no-c-format -i18n("DeskJet 660C"); -// xgettext: no-c-format -i18n("DeskJet 670C"); -// xgettext: no-c-format -i18n("DeskJet 680C"); -// xgettext: no-c-format -i18n("DeskJet 690C"); -// xgettext: no-c-format -i18n("DeskJet 850C"); -// xgettext: no-c-format -i18n("DeskJet 855C"); -// xgettext: no-c-format -i18n("DeskJet 870C"); -// xgettext: no-c-format -i18n("DeskJet 890C"); -// xgettext: no-c-format -i18n("DeskJet 970C with Duplexer"); -// xgettext: no-c-format -i18n("DeskJet 1120C"); -// xgettext: no-c-format -i18n("DeskJet Plus"); -// xgettext: no-c-format -i18n("DeskJet Portable"); -// xgettext: no-c-format -i18n("Olivetti (Black sent after CMY)"); -// xgettext: no-c-format -i18n("Unspecified Model"); -// xgettext: no-c-format -i18n("Unspecified Old Model"); -// xgettext: no-c-format -i18n("Black Levels"); -// xgettext: no-c-format -i18n("2 Levels"); -// xgettext: no-c-format -i18n("3 Levels"); -// xgettext: no-c-format -i18n("4 Levels"); -// xgettext: no-c-format -i18n("No Black"); -// xgettext: no-c-format -i18n("CMY Levels"); -// xgettext: no-c-format -i18n("No CMY"); -// xgettext: no-c-format -i18n("Compression Method"); -// xgettext: no-c-format -i18n("Compressed Replacement Delta Row Encoding"); -// xgettext: no-c-format -i18n("Delta Row Compression"); -// xgettext: no-c-format -i18n("Runlength Encoding"); -// xgettext: no-c-format -i18n("Tagged Image File Format"); -// xgettext: no-c-format -i18n("Unencoded"); -// xgettext: no-c-format -i18n("Intensity Rendering"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Dithering"); -// xgettext: no-c-format -i18n("Half Tones"); -// xgettext: no-c-format -i18n("Printer-internal"); -// xgettext: no-c-format -i18n("Leading Edge"); -// xgettext: no-c-format -i18n("Long edge; left side of canonical page"); -// xgettext: no-c-format -i18n("Long edge; right side of canonical page"); -// xgettext: no-c-format -i18n("Short edge; bottom of canonical page"); -// xgettext: no-c-format -i18n("Short edge; top of canonical page"); -// xgettext: no-c-format -i18n("Generate only PCL with 'Configure Raster Data'"); -// xgettext: no-c-format -i18n("OnlyCRD"); -// xgettext: no-c-format -i18n("GeneralPCL"); -// xgettext: no-c-format -i18n("Print Head Passes per Line"); -// xgettext: no-c-format -i18n("1 Pass (Fastest)"); -// xgettext: no-c-format -i18n("2 Passes (50% of the dots/pass)"); -// xgettext: no-c-format -i18n("4 Passes (25% of the dots/pass)"); -// xgettext: no-c-format -i18n("PCL3GUI Language Mode"); -// xgettext: no-c-format -i18n("PCL3GUI"); -// xgettext: no-c-format -i18n("NoPCL3GUI"); -// xgettext: no-c-format -i18n("3x5"); -// xgettext: no-c-format -i18n("5x7"); -// xgettext: no-c-format -i18n("6x8"); -// xgettext: no-c-format -i18n("8x10"); -// xgettext: no-c-format -i18n("8x12"); -// xgettext: no-c-format -i18n("US A2 Invitation"); -// xgettext: no-c-format -i18n("A7"); -// xgettext: no-c-format -i18n("A8"); -// xgettext: no-c-format -i18n("A9"); -// xgettext: no-c-format -i18n("A10"); -// xgettext: no-c-format -i18n("B5 ISO"); -// xgettext: no-c-format -i18n("B5 JIS"); -// xgettext: no-c-format -i18n("B6 aka C4"); -// xgettext: no-c-format -i18n("B6 ISO"); -// xgettext: no-c-format -i18n("B6 JIS"); -// xgettext: no-c-format -i18n("B7 ISO"); -// xgettext: no-c-format -i18n("B7 JIS"); -// xgettext: no-c-format -i18n("B8 ISO"); -// xgettext: no-c-format -i18n("B8 JIS"); -// xgettext: no-c-format -i18n("B9 ISO"); -// xgettext: no-c-format -i18n("B9 JIS"); -// xgettext: no-c-format -i18n("B10 ISO"); -// xgettext: no-c-format -i18n("B10 JIS"); -// xgettext: no-c-format -i18n("C6"); -// xgettext: no-c-format -i18n("C7"); -// xgettext: no-c-format -i18n("C7 by C6"); -// xgettext: no-c-format -i18n("C8"); -// xgettext: no-c-format -i18n("C9"); -// xgettext: no-c-format -i18n("C10"); -// xgettext: no-c-format -i18n("US Commercial 10 Envelope"); -// xgettext: no-c-format -i18n("Crown Octavo"); -// xgettext: no-c-format -i18n("Crown Quarto"); -// xgettext: no-c-format -i18n("Demy Octavo"); -// xgettext: no-c-format -i18n("Epson 4x6 Photo Paper"); -// xgettext: no-c-format -i18n("American Foolscap"); -// xgettext: no-c-format -i18n("Hagaki Card"); -// xgettext: no-c-format -i18n("Half Letter"); -// xgettext: no-c-format -i18n("Large Crown Octavo"); -// xgettext: no-c-format -i18n("Large Crown Quarto"); -// xgettext: no-c-format -i18n("Japanese Long Envelope Number 3"); -// xgettext: no-c-format -i18n("Japanese Long Envelope Number 4"); -// xgettext: no-c-format -i18n("Oufuku Card"); -// xgettext: no-c-format -i18n("Penguin Small Paperback"); -// xgettext: no-c-format -i18n("Postcard"); -// xgettext: no-c-format -i18n("RA4"); -// xgettext: no-c-format -i18n("Royal Octavo"); -// xgettext: no-c-format -i18n("Small Paperback"); -// xgettext: no-c-format -i18n("Tray"); -// xgettext: no-c-format -i18n("Glossy/Photo"); -// xgettext: no-c-format -i18n("Premium"); -// xgettext: no-c-format -i18n("Quick-dry Photo"); -// xgettext: no-c-format -i18n("Quick-dry Transparency"); -// xgettext: no-c-format -i18n("Ghostscript Resolution"); -// xgettext: no-c-format -i18n("1200 DPI"); -// xgettext: no-c-format -i18n("150x150 DPI"); -// xgettext: no-c-format -i18n("300x300 DPI"); -// xgettext: no-c-format -i18n("600x600 DPI"); -// xgettext: no-c-format -i18n("Grayscale only"); -// xgettext: no-c-format -i18n("Image Type"); -// xgettext: no-c-format -i18n("Pure bw or prescreened (currently black-only)"); -// xgettext: no-c-format -i18n("Line art (color or gray scale)"); -// xgettext: no-c-format -i18n("Continuous-tone photographs (color or gray scale)"); -// xgettext: no-c-format -i18n("Primarily solid colors ro smooth gradients (color or gray scale)"); -// xgettext: no-c-format -i18n("Dithering Algorithm"); -// xgettext: no-c-format -i18n("Adaptive Hybrid"); -// xgettext: no-c-format -i18n("Adaptive Random"); -// xgettext: no-c-format -i18n("Hybrid Floyd-Steinberg"); -// xgettext: no-c-format -i18n("Ordered"); -// xgettext: no-c-format -i18n("Random Floyd-Steinberg"); -// xgettext: no-c-format -i18n("Very Fast"); -// xgettext: no-c-format -i18n("11x14"); -// xgettext: no-c-format -i18n("13x19"); -// xgettext: no-c-format -i18n("Arch A"); -// xgettext: no-c-format -i18n("Arch B"); -// xgettext: no-c-format -i18n("B4 ISO"); -// xgettext: no-c-format -i18n("B4 JIS"); -// xgettext: no-c-format -i18n("C3"); -// xgettext: no-c-format -i18n("Demy Quarto"); -// xgettext: no-c-format -i18n("European Foolscap"); -// xgettext: no-c-format -i18n("Japanese Kaku Envelope Number 4"); -// xgettext: no-c-format -i18n("RA3"); -// xgettext: no-c-format -i18n("Royal Quarto"); -// xgettext: no-c-format -i18n("SRA3"); -// xgettext: no-c-format -i18n("SRA4"); -// xgettext: no-c-format -i18n("Autoselect"); -// xgettext: no-c-format -i18n("Optional Source"); -// xgettext: no-c-format -i18n("Paper type"); -// xgettext: no-c-format -i18n("Bond paper"); -// xgettext: no-c-format -i18n("Glossy film"); -// xgettext: no-c-format -i18n("Plain paper"); -// xgettext: no-c-format -i18n("Special paper"); -// xgettext: no-c-format -i18n("Transparency film"); -// xgettext: no-c-format -i18n("Printing Quality"); -// xgettext: no-c-format -i18n("RET (Resolution Enhancement)"); -// xgettext: no-c-format -i18n("Manual Feeding"); -// xgettext: no-c-format -i18n("Double-Sided Printing"); -// xgettext: no-c-format -i18n("Long Edge (Standard)"); -// xgettext: no-c-format -i18n("Short Edge (Flip)"); -// xgettext: no-c-format -i18n("1200x600 DPI"); -// xgettext: no-c-format -i18n("GhostScript pre-filtering"); -// xgettext: no-c-format -i18n("Convert to PS level 1"); -// xgettext: no-c-format -i18n("Convert to PS level 2"); -// xgettext: no-c-format -i18n("No pre-filtering"); -// xgettext: no-c-format -i18n("Printer default"); -// xgettext: no-c-format -i18n("Tray 6"); -// xgettext: no-c-format -i18n("Tray 7"); -// xgettext: no-c-format -i18n("Printing Mode"); -// xgettext: no-c-format -i18n("Manual Feed of Paper"); -// xgettext: no-c-format -i18n("Binding for Double-Sided Pr."); -// xgettext: no-c-format -i18n("Long Edge"); -// xgettext: no-c-format -i18n("Short Edge"); -// xgettext: no-c-format -i18n("REt Setting"); -// xgettext: no-c-format -i18n("Density"); -// xgettext: no-c-format -i18n("Economy mode"); -// xgettext: no-c-format -i18n("Economy Mode"); -// xgettext: no-c-format -i18n("Standard Mode"); -// xgettext: no-c-format -i18n("Fast Res."); -// xgettext: no-c-format -i18n("Memory Booster Technology"); -// xgettext: no-c-format -i18n("Monochrome"); -// xgettext: no-c-format -i18n("Floyd-Steinberg dithered printing"); -// xgettext: no-c-format -i18n("Standard printing"); -// xgettext: no-c-format -i18n("Color mode"); -// xgettext: no-c-format -i18n("Contone (4096 colors)"); -// xgettext: no-c-format -i18n("Normal (8 colors)"); -// xgettext: no-c-format -i18n("16x20"); -// xgettext: no-c-format -i18n("16x24"); -// xgettext: no-c-format -i18n("Black and White"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Color"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Color (Low Memory)"); -// xgettext: no-c-format -i18n("Floyd-Steinberg Gray"); -// xgettext: no-c-format -i18n("Normal Color"); -// xgettext: no-c-format -i18n("Raster Graphics Quality"); -// xgettext: no-c-format -i18n("High"); -// xgettext: no-c-format -i18n("Black, draft quality, ink economy mode"); -// xgettext: no-c-format -i18n("Black, normal quality"); -// xgettext: no-c-format -i18n("Color, best quality, optional color correction"); -// xgettext: no-c-format -i18n("Color, best quality, black ink disabled, optional color correction"); -// xgettext: no-c-format -i18n("Color, draft quality, ink economy, fast dither, no color correction"); -// xgettext: no-c-format -i18n("Color, normal quality, optional color correction"); -// xgettext: no-c-format -i18n("Color, normal quality, black ink disabled, optional color correction"); -// xgettext: no-c-format -i18n("Do not use Color Correction"); -// xgettext: no-c-format -i18n("DisableColorCorrection"); -// xgettext: no-c-format -i18n("EnableColorCorrection"); -// xgettext: no-c-format -i18n("Choice of Ghostscript Driver"); -// xgettext: no-c-format -i18n("Attempts to choose best PNM format for document; not always reliable."); -// xgettext: no-c-format -i18n("Attempts to choose best monochrome PNM format for document; not always reliable."); -// xgettext: no-c-format -i18n("A fast monochrome format; best for B&W text and line images."); -// xgettext: no-c-format -i18n("256-shade greyscale format"); -// xgettext: no-c-format -i18n("Format for color images (includes monochrome)."); -// xgettext: no-c-format -i18n("Force left-to-right print sweeps only (reduce striping)"); -// xgettext: no-c-format -i18n("Unidirectional"); -// xgettext: no-c-format -i18n("Bidirectional"); -// xgettext: no-c-format -i18n("Ink Reduction"); -// xgettext: no-c-format -i18n("25 %"); -// xgettext: no-c-format -i18n("25 % with Gamma Correction"); -// xgettext: no-c-format -i18n("50 %"); -// xgettext: no-c-format -i18n("50 % with Gamma Correction"); -// xgettext: no-c-format -i18n("600x600 DPI monochrome"); -// xgettext: no-c-format -i18n("A6 (Post card)"); -// xgettext: no-c-format -i18n("Photo (4 x 6 in., 10 x 15 cm)"); -// xgettext: no-c-format -i18n("300 DPI Grayscale"); -// xgettext: no-c-format -i18n("300 DPI Normal"); -// xgettext: no-c-format -i18n("300 DPI Photo"); -// xgettext: no-c-format -i18n("600 DPI Photo"); -// xgettext: no-c-format -i18n("Use Postcards"); -// xgettext: no-c-format -i18n("Postcards"); -// xgettext: no-c-format -i18n("Sheets"); -// xgettext: no-c-format -i18n("Rendering type"); -// xgettext: no-c-format -i18n("Snap black to white, others to black"); -// xgettext: no-c-format -i18n("Cluster ordered dither"); -// xgettext: no-c-format -i18n("Monochrome cluster ordered dither"); -// xgettext: no-c-format -i18n("Driver does dithering"); -// xgettext: no-c-format -i18n("Error diffusion"); -// xgettext: no-c-format -i18n("Monochrome error diffusion"); -// xgettext: no-c-format -i18n("Ordered dithering"); -// xgettext: no-c-format -i18n("Monochrome ordered dithering"); -// xgettext: no-c-format -i18n("Snap to primaries"); -// xgettext: no-c-format -i18n("Best Quality Color"); -// xgettext: no-c-format -i18n("Desktop CSF"); -// xgettext: no-c-format -i18n("Desktop Sheet Feeder"); -// xgettext: no-c-format -i18n("Portable Sheet Feeder"); -// xgettext: no-c-format -i18n("Ink Type"); -// xgettext: no-c-format -i18n("Color + Black Cartridges"); -// xgettext: no-c-format -i18n("Color + Photo Cartridges"); -// xgettext: no-c-format -i18n("300 DPI Color"); -// xgettext: no-c-format -i18n("300 DPI Draft"); -// xgettext: no-c-format -i18n("On (Flip on Long Edge)"); -// xgettext: no-c-format -i18n("On (Flip on Short Edge)"); -// xgettext: no-c-format -i18n("600 DPI Normal"); -// xgettext: no-c-format -i18n("Special"); -// xgettext: no-c-format -i18n("Transparent"); -// xgettext: no-c-format -i18n("Quality Type"); -// xgettext: no-c-format -i18n("Double-sided printing"); -// xgettext: no-c-format -i18n("Behavior when Toner Low"); -// xgettext: no-c-format -i18n("Continue Printing"); -// xgettext: no-c-format -i18n("Stop Printing"); -// xgettext: no-c-format -i18n("Job Offset"); -// xgettext: no-c-format -i18n("Cassette"); -// xgettext: no-c-format -i18n("First"); -// xgettext: no-c-format -i18n("90 DPI"); -// xgettext: no-c-format -i18n("180 DPI"); -// xgettext: no-c-format -i18n("16MB RAM"); -// xgettext: no-c-format -i18n("32MB RAM"); -// xgettext: no-c-format -i18n("48MB RAM"); -// xgettext: no-c-format -i18n("64MB RAM"); -// xgettext: no-c-format -i18n("80MB RAM"); -// xgettext: no-c-format -i18n("96MB RAM"); -// xgettext: no-c-format -i18n("128MB RAM"); -// xgettext: no-c-format -i18n("144MB RAM"); -// xgettext: no-c-format -i18n("160MB RAM"); -// xgettext: no-c-format -i18n("192MB - 224MB RAM"); -// xgettext: no-c-format -i18n("256MB - 512MB RAM"); -// xgettext: no-c-format -i18n("Drawer Base"); -// xgettext: no-c-format -i18n("DB-208 (3 Trays)"); -// xgettext: no-c-format -i18n("DB-608 (2 Trays)"); -// xgettext: no-c-format -i18n("DB-208A (1 Tray)"); -// xgettext: no-c-format -i18n("Finisher Installed"); -// xgettext: no-c-format -i18n("FS-105"); -// xgettext: no-c-format -i18n("400dpi"); -// xgettext: no-c-format -i18n("Edge Smoothing"); -// xgettext: no-c-format -i18n("Text Only"); -// xgettext: no-c-format -i18n("All Objects"); -// xgettext: no-c-format -i18n("Print Density"); -// xgettext: no-c-format -i18n("Toner Save"); -// xgettext: no-c-format -i18n("OHP Transparency"); -// xgettext: no-c-format -i18n("Thin Paper"); -// xgettext: no-c-format -i18n("Thick Paper"); -// xgettext: no-c-format -i18n("Duplex Mode"); -// xgettext: no-c-format -i18n("Sort"); -// xgettext: no-c-format -i18n("Group"); -// xgettext: no-c-format -i18n("Special Modes"); -// xgettext: no-c-format -i18n("2-in-1"); -// xgettext: no-c-format -i18n("Booklet"); -// xgettext: no-c-format -i18n("Stapling"); -// xgettext: no-c-format -i18n("Single (Portrait)"); -// xgettext: no-c-format -i18n("Single (Landscape)"); -// xgettext: no-c-format -i18n("Double Side (Portrait)"); -// xgettext: no-c-format -i18n("Double Side (Landscape)"); -// xgettext: no-c-format -i18n("Double Top (Portrait)"); -// xgettext: no-c-format -i18n("Double Top (Landscape)"); -// xgettext: no-c-format -i18n("Wait Mode"); -// xgettext: no-c-format -i18n("Front Cover"); -// xgettext: no-c-format -i18n("Printed"); -// xgettext: no-c-format -i18n("Blank"); -// xgettext: no-c-format -i18n("Front Cover Tray"); -// xgettext: no-c-format -i18n("Back Cover"); -// xgettext: no-c-format -i18n("Cover Tray"); -// xgettext: no-c-format -i18n("Manual Feed (Thick)"); -// xgettext: no-c-format -i18n("Middle"); -// xgettext: no-c-format -i18n("Output Order"); -// xgettext: no-c-format -i18n("Half-letter (5 1/2 x 8 1/2 in)"); -// xgettext: no-c-format -i18n("Letter (8 1/2 x 11 in)"); -// xgettext: no-c-format -i18n("Legal (8 1/2 x 14 in)"); -// xgettext: no-c-format -i18n("Tabloid (11 x 17 in)"); -// xgettext: no-c-format -i18n("F4"); -// xgettext: no-c-format -i18n("Half-letter"); -// xgettext: no-c-format -i18n("No Finisher"); -// xgettext: no-c-format -i18n("FS-106"); -// xgettext: no-c-format -i18n("FS-108B (BookletMaker)"); -// xgettext: no-c-format -i18n("PI-108"); -// xgettext: no-c-format -i18n("Large Capacity Tray"); -// xgettext: no-c-format -i18n("Tandem Configuration"); -// xgettext: no-c-format -i18n("Fold & Stitch"); -// xgettext: no-c-format -i18n("Fold only"); -// xgettext: no-c-format -i18n("Fold & Saddle Stitch"); -// xgettext: no-c-format -i18n("Wait"); -// xgettext: no-c-format -i18n("Wait with Proof"); -// xgettext: no-c-format -i18n("Back Cover Tray"); -// xgettext: no-c-format -i18n("Tandem Printing"); -// xgettext: no-c-format -i18n("Normal Mode (Auto Select)"); -// xgettext: no-c-format -i18n("Split Mode (Auto Split)"); -// xgettext: no-c-format -i18n("Split Mode (Equal Split)"); -// xgettext: no-c-format -i18n("Print Engine Select (Printer 1)"); -// xgettext: no-c-format -i18n("Print Engine Select (Printer 2)"); -// xgettext: no-c-format -i18n("EcoPrint"); -// xgettext: no-c-format -i18n("PF-8 Paper Feeder"); -// xgettext: no-c-format -i18n("Memory"); -// xgettext: no-c-format -i18n("1MB Upgrade"); -// xgettext: no-c-format -i18n("2MB Upgrade"); -// xgettext: no-c-format -i18n("4MB Upgrade"); -// xgettext: no-c-format -i18n("300 Dots per Inch (dpi)"); -// xgettext: no-c-format -i18n("KIR"); -// xgettext: no-c-format -i18n("Envelope #6"); -// xgettext: no-c-format -i18n("Envelope #9"); -// xgettext: no-c-format -i18n("Cassette 1 (Internal)"); -// xgettext: no-c-format -i18n("Cassette 2"); -// xgettext: no-c-format -i18n("Auto Tray Switch"); -// xgettext: no-c-format -i18n("1.6.0 [08-13-99]"); -// xgettext: no-c-format -i18n("PF-16 Paper Feeder"); -// xgettext: no-c-format -i18n("8MB Upgrade"); -// xgettext: no-c-format -i18n("16MB Upgrade"); -// xgettext: no-c-format -i18n("32MB Upgrade"); -// xgettext: no-c-format -i18n("600 Dots per Inch (dpi)"); -// xgettext: no-c-format -i18n("1.6.1 [02-28-2000]"); -// xgettext: no-c-format -i18n("PF-4 Paper Feeder"); -// xgettext: no-c-format -i18n("3MB Upgrade"); -// xgettext: no-c-format -i18n("PF-17 Paper Feeder"); -// xgettext: no-c-format -i18n("Optional Disk"); -// xgettext: no-c-format -i18n("PostCard"); -// xgettext: no-c-format -i18n("DoublePostCard"); -// xgettext: no-c-format -i18n("Multi-Purpose Feeder"); -// xgettext: no-c-format -i18n("Job Spooling"); -// xgettext: no-c-format -i18n("Optional Feeder"); -// xgettext: no-c-format -i18n("PF-21 Paper Feeders"); -// xgettext: no-c-format -i18n("One"); -// xgettext: no-c-format -i18n("Two"); -// xgettext: no-c-format -i18n("Output Device"); -// xgettext: no-c-format -i18n("SO-6 Bulk Sorter"); -// xgettext: no-c-format -i18n("ST-20 Bulk Stacker"); -// xgettext: no-c-format -i18n("12MB Upgrade"); -// xgettext: no-c-format -i18n("20MB Upgrade"); -// xgettext: no-c-format -i18n("24MB Upgrade"); -// xgettext: no-c-format -i18n("36MB Upgrade"); -// xgettext: no-c-format -i18n("40MB Upgrade"); -// xgettext: no-c-format -i18n("48MB Upgrade"); -// xgettext: no-c-format -i18n("64MB Upgrade"); -// xgettext: no-c-format -i18n("Cassette 3"); -// xgettext: no-c-format -i18n("Custom 1"); -// xgettext: no-c-format -i18n("Custom 2"); -// xgettext: no-c-format -i18n("Custom 3"); -// xgettext: no-c-format -i18n("Custom 4"); -// xgettext: no-c-format -i18n("Custom 5"); -// xgettext: no-c-format -i18n("Custom 6"); -// xgettext: no-c-format -i18n("Custom 7"); -// xgettext: no-c-format -i18n("Custom 8"); -// xgettext: no-c-format -i18n("Top Tray (Face-Down)"); -// xgettext: no-c-format -i18n("Rear Tray (Face-Up)"); -// xgettext: no-c-format -i18n("Stacker Mode (Face-Down)"); -// xgettext: no-c-format -i18n("Sorter Mode (Face-Down)"); -// xgettext: no-c-format -i18n("Collator Mode (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 1 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 2 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 3 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 4 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 5 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 6 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 7 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 8 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 9 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 10 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 11 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 12 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 13 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 14 (Face-Down)"); -// xgettext: no-c-format -i18n("Mailbox 15 (Face-Down)"); -// xgettext: no-c-format -i18n("Duplexing"); -// xgettext: no-c-format -i18n("Temporary"); -// xgettext: no-c-format -i18n("EF-1 Envelope Feeder"); -// xgettext: no-c-format -i18n("UF-1 Universal Feeder"); -// xgettext: no-c-format -i18n("PF-7 Bulk Feeder"); -// xgettext: no-c-format -i18n("PF-5 Paper Feeders"); -// xgettext: no-c-format -i18n("HS-3 Bulk Stacker"); -// xgettext: no-c-format -i18n("Bulk Feeder"); -// xgettext: no-c-format -i18n("Universal Feeder"); -// xgettext: no-c-format -i18n("Stacker Mode (Face-Up)"); -// xgettext: no-c-format -i18n("5MB Upgrade"); -// xgettext: no-c-format -i18n("6MB Upgrade"); -// xgettext: no-c-format -i18n("9MB Upgrade"); -// xgettext: no-c-format -i18n("10MB Upgrade"); -// xgettext: no-c-format -i18n("17MB Upgrade"); -// xgettext: no-c-format -i18n("18MB Upgrade"); -// xgettext: no-c-format -i18n("33MB Upgrade"); -// xgettext: no-c-format -i18n("34MB Upgrade"); -// xgettext: no-c-format -i18n("PF-7E Bulk Feeder"); -// xgettext: no-c-format -i18n("PF-20 Paper Feeders"); -// xgettext: no-c-format -i18n("HS-3E Bulk Stacker"); -// xgettext: no-c-format -i18n("60MB Upgrade"); -// xgettext: no-c-format -i18n("1200 Dots per Inch (dpi)"); -// xgettext: no-c-format -i18n("PF-1 Paper Feeder"); -// xgettext: no-c-format -i18n("Cassette 1"); -// xgettext: no-c-format -i18n("7MB Upgrade"); -// xgettext: no-c-format -i18n("13MB Upgrade"); -// xgettext: no-c-format -i18n("PF-2 Paper Feeder"); -// xgettext: no-c-format -i18n("11x17 (Ledger)"); -// xgettext: no-c-format -i18n("Side Tray (Face-Up)"); -// xgettext: no-c-format -i18n("PF-80 Paper Feeder"); -// xgettext: no-c-format -i18n("Process Color (CMYK)"); -// xgettext: no-c-format -i18n("Quick Color (CMY)"); -// xgettext: no-c-format -i18n("Color Matching"); -// xgettext: no-c-format -i18n("Simulate Display"); -// xgettext: no-c-format -i18n("Side Tray (Face-Down)"); -// xgettext: no-c-format -i18n("Permanent"); -// xgettext: no-c-format -i18n("Barcode"); -// xgettext: no-c-format -i18n("First Page"); -// xgettext: no-c-format -i18n("Barcode ID"); -// xgettext: no-c-format -i18n("Barcode Position"); -// xgettext: no-c-format -i18n("Upper Left"); -// xgettext: no-c-format -i18n("Upper Right"); -// xgettext: no-c-format -i18n("Lower Left"); -// xgettext: no-c-format -i18n("Lower Right"); -// xgettext: no-c-format -i18n("Upper Left Vertical"); -// xgettext: no-c-format -i18n("Upper Right Vertical"); -// xgettext: no-c-format -i18n("Lower Left Vertical"); -// xgettext: no-c-format -i18n("Lower Right Vertical"); -// xgettext: no-c-format -i18n("PF-81 Paper Feeder"); -// xgettext: no-c-format -i18n("Color Correction"); -// xgettext: no-c-format -i18n("Application Corrected"); -// xgettext: no-c-format -i18n("Printer Corrected"); -// xgettext: no-c-format -i18n("Ink Simulation (CMYK)"); -// xgettext: no-c-format -i18n("Euroscale Press"); -// xgettext: no-c-format -i18n("SWOP Press"); -// xgettext: no-c-format -i18n("Monitor Simulation (RGB)"); -// xgettext: no-c-format -i18n("SMPTE240M"); -// xgettext: no-c-format -i18n("sRGB (HDTV)"); -// xgettext: no-c-format -i18n("Trinitron"); -// xgettext: no-c-format -i18n("Apple RGB"); -// xgettext: no-c-format -i18n("NTSC"); -// xgettext: no-c-format -i18n("Duplex Paper"); -// xgettext: no-c-format -i18n("Coated Paper"); -// xgettext: no-c-format -i18n("Temporary (RAM Disk)"); -// xgettext: no-c-format -i18n("Temporary (Hard Disk)"); -// xgettext: no-c-format -i18n("Permanent (Hard Disk)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (Administrator)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 1)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 2)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 3)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 4)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 5)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 6)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 7)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 8)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 9)"); -// xgettext: no-c-format -i18n("Virtual Mailbox (User 10)"); -// xgettext: no-c-format -i18n("PF-26 Paper Feeders"); -// xgettext: no-c-format -i18n("PF-9 Paper Feeders"); -// xgettext: no-c-format -i18n("11MB Upgrade"); -// xgettext: no-c-format -i18n("15MB Upgrade"); -// xgettext: no-c-format -i18n("19MB Upgrade"); -// xgettext: no-c-format -i18n("23MB Upgrade"); -// xgettext: no-c-format -i18n("31MB Upgrade"); -// xgettext: no-c-format -i18n("35MB Upgrade"); -// xgettext: no-c-format -i18n("39MB Upgrade"); -// xgettext: no-c-format -i18n("47MB Upgrade"); -// xgettext: no-c-format -i18n("63MB Upgrade"); -// xgettext: no-c-format -i18n("PF-25 Paper Feeders"); -// xgettext: no-c-format -i18n("38MB Upgrade"); -// xgettext: no-c-format -i18n("PF-30 Paper Feeders"); -// xgettext: no-c-format -i18n("One (2 Cassettes)"); -// xgettext: no-c-format -i18n("Two (4 Cassettes)"); -// xgettext: no-c-format -i18n("Three (6 Cassettes)"); -// xgettext: no-c-format -i18n("SO-30 Bulk Sorter"); -// xgettext: no-c-format -i18n("ST-30 Bulk Stacker"); -// xgettext: no-c-format -i18n("DF-30 Document Finisher"); -// xgettext: no-c-format -i18n("Cassette 4"); -// xgettext: no-c-format -i18n("Cassette 5"); -// xgettext: no-c-format -i18n("Cassette 6"); -// xgettext: no-c-format -i18n("Staple Method"); -// xgettext: no-c-format -i18n("Staple Job up to 20 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 20 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 19 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 18 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 17 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 16 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 15 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 14 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 13 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 12 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 11 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 10 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 9 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 8 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 7 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 6 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 5 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 4 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 3 Sheets"); -// xgettext: no-c-format -i18n("Staple Every 2 Sheets"); -// xgettext: no-c-format -i18n("DF-31 Document Finisher"); -// xgettext: no-c-format -i18n("44MB Upgrade"); -// xgettext: no-c-format -i18n("Lower Tray - Option"); -// xgettext: no-c-format -i18n("Envelope Feeder - Option"); -// xgettext: no-c-format -i18n("Printer Memory - Option"); -// xgettext: no-c-format -i18n("1.5 Mb Printer Memory"); -// xgettext: no-c-format -i18n("2.5 Mb Printer Memory"); -// xgettext: no-c-format -i18n("4 Mb Printer Memory"); -// xgettext: no-c-format -i18n("C9 Envelope"); -// xgettext: no-c-format -i18n("B5 Envelope"); -// xgettext: no-c-format -i18n("Manual Envelope"); -// xgettext: no-c-format -i18n("Manual Paper"); -// xgettext: no-c-format -i18n("Tray Linking"); -// xgettext: no-c-format -i18n("2 Mb Printer Memory"); -// xgettext: no-c-format -i18n("3 Mb Printer Memory"); -// xgettext: no-c-format -i18n("5+ Mb Printer Memory"); -// xgettext: no-c-format -i18n("Smoothing"); -// xgettext: no-c-format -i18n("Other Envelope"); -// xgettext: no-c-format -i18n("Duplex - Option"); -// xgettext: no-c-format -i18n("Simplex"); -// xgettext: no-c-format -i18n("Duplex - Long Edge"); -// xgettext: no-c-format -i18n("Duplex - Short Edge"); -// xgettext: no-c-format -i18n("Flash Memory Card - Option"); -// xgettext: no-c-format -i18n("Printer Hard Disk - Option"); -// xgettext: no-c-format -i18n("2 MB Printer Memory"); -// xgettext: no-c-format -i18n("4 MB Printer Memory"); -// xgettext: no-c-format -i18n("6 MB Printer Memory"); -// xgettext: no-c-format -i18n("8 MB Printer Memory"); -// xgettext: no-c-format -i18n("10 MB Printer Memory"); -// xgettext: no-c-format -i18n("12 MB Printer Memory"); -// xgettext: no-c-format -i18n("16 MB Printer Memory"); -// xgettext: no-c-format -i18n("8 Mb Printer Memory"); -// xgettext: no-c-format -i18n("12 Mb Printer Memory"); -// xgettext: no-c-format -i18n("16 Mb Printer Memory"); -// xgettext: no-c-format -i18n("Printer Software Version"); -// xgettext: no-c-format -i18n("250.0x"); -// xgettext: no-c-format -i18n("250.2x"); -// xgettext: no-c-format -i18n("360 dpi"); -// xgettext: no-c-format -i18n("High Quality"); -// xgettext: no-c-format -i18n("Bold Black"); -// xgettext: no-c-format -i18n("Screening"); -// xgettext: no-c-format -i18n("Color Balance"); -// xgettext: no-c-format -i18n("Blue Adjust"); -// xgettext: no-c-format -i18n("Line Art && Text"); -// xgettext: no-c-format -i18n("Images"); -// xgettext: no-c-format -i18n("Color Model"); -// xgettext: no-c-format -i18n("RGB"); -// xgettext: no-c-format -i18n("Image Brightness"); -// xgettext: no-c-format -i18n("+5"); -// xgettext: no-c-format -i18n("+10"); -// xgettext: no-c-format -i18n("+15"); -// xgettext: no-c-format -i18n("+20"); -// xgettext: no-c-format -i18n("+25"); -// xgettext: no-c-format -i18n("+30"); -// xgettext: no-c-format -i18n("+35"); -// xgettext: no-c-format -i18n("+40"); -// xgettext: no-c-format -i18n("+45"); -// xgettext: no-c-format -i18n("+50"); -// xgettext: no-c-format -i18n("Image Contrast"); -// xgettext: no-c-format -i18n("20 MB Printer Memory"); -// xgettext: no-c-format -i18n("32 or more MB Printer Memory"); -// xgettext: no-c-format -i18n("Pause Mode"); -// xgettext: no-c-format -i18n("ColorGrade"); -// xgettext: no-c-format -i18n("Image Diffusion"); -// xgettext: no-c-format -i18n("Oversize 11.7 x 22 in"); -// xgettext: no-c-format -i18n("Duplexer - Option"); -// xgettext: no-c-format -i18n("Tray 3 - Option"); -// xgettext: no-c-format -i18n("Feeder 2 - Option"); -// xgettext: no-c-format -i18n("1 MB Flash Memory"); -// xgettext: no-c-format -i18n("2 MB Flash Memory"); -// xgettext: no-c-format -i18n("4 MB Flash Memory"); -// xgettext: no-c-format -i18n("18 MB Printer Memory"); -// xgettext: no-c-format -i18n("24 MB Printer Memory"); -// xgettext: no-c-format -i18n("Print Darkness"); -// xgettext: no-c-format -i18n("1200 dpi"); -// xgettext: no-c-format -i18n("Feeder"); -// xgettext: no-c-format -i18n("Feeder 2"); -// xgettext: no-c-format -i18n("Tray 2 - Option"); -// xgettext: no-c-format -i18n("32 MB Printer Memory"); -// xgettext: no-c-format -i18n("64 MB Printer Memory"); -// xgettext: no-c-format -i18n("96 MB Printer Memory"); -// xgettext: no-c-format -i18n("128 MB Printer Memory"); -// xgettext: no-c-format -i18n("Toner Saver"); -// xgettext: no-c-format -i18n("Image Smoothing"); -// xgettext: no-c-format -i18n("Colored Paper"); -// xgettext: no-c-format -i18n("Custom Type 1"); -// xgettext: no-c-format -i18n("Custom Type 2"); -// xgettext: no-c-format -i18n("Custom Type 3"); -// xgettext: no-c-format -i18n("Custom Type 4"); -// xgettext: no-c-format -i18n("Port Rotation"); -// xgettext: no-c-format -i18n("Collate Copies"); -// xgettext: no-c-format -i18n("Top"); -// xgettext: no-c-format -i18n("Rear"); -// xgettext: no-c-format -i18n("Black & White"); -// xgettext: no-c-format -i18n("Display"); -// xgettext: no-c-format -i18n("1200 Image Quality"); -// xgettext: no-c-format -i18n("B5 182 x 257 mm"); -// xgettext: no-c-format -i18n("A5 148 x 210 mm"); -// xgettext: no-c-format -i18n("B4 257 x 364 mm"); -// xgettext: no-c-format -i18n("A3 297 x 419 mm"); -// xgettext: no-c-format -i18n("Universal 11.7 x 17 in"); -// xgettext: no-c-format -i18n("7 3/4 Envelope 3 7/8 x 7 1/2 in"); -// xgettext: no-c-format -i18n("9 Envelope 3 7/8 x 8 7/8 in"); -// xgettext: no-c-format -i18n("10 Envelope 4 1/8 x 9 1/2 in"); -// xgettext: no-c-format -i18n("DL Envelope 110 x 220 mm"); -// xgettext: no-c-format -i18n("C5 Envelope 162 x 229 mm"); -// xgettext: no-c-format -i18n("B5 Envelope 176 x 250 mm"); -// xgettext: no-c-format -i18n("Other Envelope 8 1/2 x 14 in"); -// xgettext: no-c-format -i18n("Universal"); -// xgettext: no-c-format -i18n("Comm10"); -// xgettext: no-c-format -i18n("ISOB5"); -// xgettext: no-c-format -i18n("Other"); -// xgettext: no-c-format -i18n("MP Feeder"); -// xgettext: no-c-format -i18n("36 MB Printer Memory"); -// xgettext: no-c-format -i18n("68 or more MB Printer Memory"); -// xgettext: no-c-format -i18n("Left Cartridge"); -// xgettext: no-c-format -i18n("Unknown Cartridge"); -// xgettext: no-c-format -i18n("Standard Black Cartridge"); -// xgettext: no-c-format -i18n("High Capacity Black Cartridge"); -// xgettext: no-c-format -i18n("Photo Cartridge"); -// xgettext: no-c-format -i18n("Right Cartridge"); -// xgettext: no-c-format -i18n("Standard Color Cartridge"); -// xgettext: no-c-format -i18n("High Capacity Color Cartridge"); -// xgettext: no-c-format -i18n("Greeting Card"); -// xgettext: no-c-format -i18n("Iron On"); -// xgettext: no-c-format -i18n("Photo Paper"); -// xgettext: no-c-format -i18n("QuickPrint"); -// xgettext: no-c-format -i18n("Universal 8 1/2 x 14 in"); -// xgettext: no-c-format -i18n("40 MB Printer Memory"); -// xgettext: no-c-format -i18n("72 or more MB Printer Memory"); -// xgettext: no-c-format -i18n("SA3 320 x 450 mm"); -// xgettext: no-c-format -i18n("Universal 12.6 x 22 in"); -// xgettext: no-c-format -i18n("SA3"); -// xgettext: no-c-format -i18n("Duplex Option - Option"); -// xgettext: no-c-format -i18n("Fax Card"); -// xgettext: no-c-format -i18n("Printer Setting"); -// xgettext: no-c-format -i18n("Black && White"); -// xgettext: no-c-format -i18n("2 Color Draft"); -// xgettext: no-c-format -i18n("Image Enhancement"); -// xgettext: no-c-format -i18n("PictureGrade"); -// xgettext: no-c-format -i18n("Custom Type 5"); -// xgettext: no-c-format -i18n("Custom Type 6"); -// xgettext: no-c-format -i18n("14 MB Printer Memory"); -// xgettext: no-c-format -i18n("28 MB Printer Memory"); -// xgettext: no-c-format -i18n("Toner Darkness"); -// xgettext: no-c-format -i18n("Printer's default"); -// xgettext: no-c-format -i18n("Tray 4 - Option"); -// xgettext: no-c-format -i18n("Tray 5 - Option"); -// xgettext: no-c-format -i18n("MP Feeder - Option"); -// xgettext: no-c-format -i18n("Number of Output Bins - Option"); -// xgettext: no-c-format -i18n("Standard Bin Only"); -// xgettext: no-c-format -i18n("1 Extra Bin"); -// xgettext: no-c-format -i18n("2 Extra Bins"); -// xgettext: no-c-format -i18n("3 Extra Bins"); -// xgettext: no-c-format -i18n("4 Extra Bins"); -// xgettext: no-c-format -i18n("5 Extra Bins"); -// xgettext: no-c-format -i18n("6 Extra Bins"); -// xgettext: no-c-format -i18n("7 Extra Bins"); -// xgettext: no-c-format -i18n("8 Extra Bins"); -// xgettext: no-c-format -i18n("9 Extra Bins"); -// xgettext: no-c-format -i18n("10 Extra Bins"); -// xgettext: no-c-format -i18n("11 Extra Bins"); -// xgettext: no-c-format -i18n("12 Extra Bins"); -// xgettext: no-c-format -i18n("13 Extra Bins"); -// xgettext: no-c-format -i18n("14 Extra Bins"); -// xgettext: no-c-format -i18n("15 Extra Bins"); -// xgettext: no-c-format -i18n("22 MB Printer Memory"); -// xgettext: no-c-format -i18n("Standard Bin"); -// xgettext: no-c-format -i18n("Bin 9"); -// xgettext: no-c-format -i18n("Bin 10"); -// xgettext: no-c-format -i18n("Bin 11"); -// xgettext: no-c-format -i18n("Bin 12"); -// xgettext: no-c-format -i18n("Bin 13"); -// xgettext: no-c-format -i18n("Bin 14"); -// xgettext: no-c-format -i18n("Bin 15"); -// xgettext: no-c-format -i18n("250-Sheet Drawer"); -// xgettext: no-c-format -i18n("500-Sheet Drawer"); -// xgettext: no-c-format -i18n("2000-Sheet Drawer"); -// xgettext: no-c-format -i18n("1 - Output Expander"); -// xgettext: no-c-format -i18n("1 - Hi-Capacity Output Expander"); -// xgettext: no-c-format -i18n("2 - 2 Output Expanders"); -// xgettext: no-c-format -i18n("2 - 1 Hi-Capacity + 1 Output Expander"); -// xgettext: no-c-format -i18n("3 - 3 Output Expanders"); -// xgettext: no-c-format -i18n("5 - 5-Bin Mailbox"); -// xgettext: no-c-format -i18n("6 - 1 Output Expander + 1 5-Bin Mailbox"); -// xgettext: no-c-format -i18n("6 - 1 5-Bin Mailbox + 1 Output Expander"); -// xgettext: no-c-format -i18n("10 - 2 5-Bin Mailboxes"); -// xgettext: no-c-format -i18n("Other Envelope 9.02 x 14 in"); -// xgettext: no-c-format -i18n("Color Registration"); -// xgettext: no-c-format -i18n("High Speed"); -// xgettext: no-c-format -i18n("Finish Quality"); -// xgettext: no-c-format -i18n("Medium Gloss"); -// xgettext: no-c-format -i18n("High Gloss"); -// xgettext: no-c-format -i18n("Low Gloss"); -// xgettext: no-c-format -i18n("Contone"); -// xgettext: no-c-format -i18n("Stochastic"); -// xgettext: no-c-format -i18n("Multipurpose Feeder"); -// xgettext: no-c-format -i18n("3 MB Printer Memory"); -// xgettext: no-c-format -i18n("Manual Feed Paper Type"); -// xgettext: no-c-format -i18n("Tray 1 Paper Type"); -// xgettext: no-c-format -i18n("Tray 2 Paper Type"); -// xgettext: no-c-format -i18n("1200 Quality"); -// xgettext: no-c-format -i18n("Paper Input Drawer - Option"); -// xgettext: no-c-format -i18n("Finisher - Option"); -// xgettext: no-c-format -i18n("Custom 11.7 x 17.7 in"); -// xgettext: no-c-format -i18n("Upper (Tray 1)"); -// xgettext: no-c-format -i18n("Lower (Tray 2)"); -// xgettext: no-c-format -i18n("Input Drawer (Tray 3)"); -// xgettext: no-c-format -i18n("No Tray Linking"); -// xgettext: no-c-format -i18n("Link Tray 1+2"); -// xgettext: no-c-format -i18n("Link Tray 1+2+3"); -// xgettext: no-c-format -i18n("Link Tray 2+3"); -// xgettext: no-c-format -i18n("Bin 0 (Top)"); -// xgettext: no-c-format -i18n("Bin 1 (Side)"); -// xgettext: no-c-format -i18n("Staple 1"); -// xgettext: no-c-format -i18n("Staple 2"); -// xgettext: no-c-format -i18n("Do Not Care"); -// xgettext: no-c-format -i18n("26 MB Printer Memory"); -// xgettext: no-c-format -i18n("Images Only"); -// xgettext: no-c-format -i18n("Entire Page"); -// xgettext: no-c-format -i18n("2500-Sheet Drawer"); -// xgettext: no-c-format -i18n("Mailbox - Option"); -// xgettext: no-c-format -i18n("Hole Punch"); -// xgettext: no-c-format -i18n("Offset Pages"); -// xgettext: no-c-format -i18n("Between Copies"); -// xgettext: no-c-format -i18n("Universal 11.69 x 17 in"); -// xgettext: no-c-format -i18n("300x1200 DPI"); -// xgettext: no-c-format -i18n("300x600 DPI"); -// xgettext: no-c-format -i18n("600x1200 DPI"); -// xgettext: no-c-format -i18n("1200x1200 DPI"); -// xgettext: no-c-format -i18n("1200x300 DPI"); -// xgettext: no-c-format -i18n("Normal Quality Color (4-ink)"); -// xgettext: no-c-format -i18n("Photo Quality Color (6-ink)"); -// xgettext: no-c-format -i18n("Bidirectional printing"); -// xgettext: no-c-format -i18n("off"); -// xgettext: no-c-format -i18n("on"); -// xgettext: no-c-format -i18n("300 dpi x 600 dpi"); -// xgettext: no-c-format -i18n("600 dpi x 600 dpi"); -// xgettext: no-c-format -i18n("1200 dpi x 600 dpi"); -// xgettext: no-c-format -i18n("Color"); -// xgettext: no-c-format -i18n("Page Drying Time"); -// xgettext: no-c-format -i18n("0 sec"); -// xgettext: no-c-format -i18n("10 sec."); -// xgettext: no-c-format -i18n("20 sec."); -// xgettext: no-c-format -i18n("30 sec."); -// xgettext: no-c-format -i18n("40 sec."); -// xgettext: no-c-format -i18n("50 sec"); -// xgettext: no-c-format -i18n("60 sec"); -// xgettext: no-c-format -i18n("300x300 dpi"); -// xgettext: no-c-format -i18n("300x600 dpi"); -// xgettext: no-c-format -i18n("600x1200 dpi"); -// xgettext: no-c-format -i18n("600x600 dpi"); -// xgettext: no-c-format -i18n("1200x1200 dpi"); -// xgettext: no-c-format -i18n("Optional Multi-Feeder"); -// xgettext: no-c-format -i18n("6 MB"); -// xgettext: no-c-format -i18n("7 MB"); -// xgettext: no-c-format -i18n("8 MB"); -// xgettext: no-c-format -i18n("10 MB"); -// xgettext: no-c-format -i18n("11 MB"); -// xgettext: no-c-format -i18n("12 MB"); -// xgettext: no-c-format -i18n("14 MB"); -// xgettext: no-c-format -i18n("18 MB"); -// xgettext: no-c-format -i18n("19 MB"); -// xgettext: no-c-format -i18n("20 MB"); -// xgettext: no-c-format -i18n("22 MB"); -// xgettext: no-c-format -i18n("26 MB"); -// xgettext: no-c-format -i18n("34 MB"); -// xgettext: no-c-format -i18n("Legal14"); -// xgettext: no-c-format -i18n("Legal13"); -// xgettext: no-c-format -i18n("Com10"); -// xgettext: no-c-format -i18n("Com9"); -// xgettext: no-c-format -i18n("Multi Feeder"); -// xgettext: no-c-format -i18n("TraySwitch"); -// xgettext: no-c-format -i18n("4 MB"); -// xgettext: no-c-format -i18n("5 MB"); -// xgettext: no-c-format -i18n("600x1200dpi"); -// xgettext: no-c-format -i18n("Multi-Feeder"); -// xgettext: no-c-format -i18n("2 MB"); -// xgettext: no-c-format -i18n("4MB"); -// xgettext: no-c-format -i18n("5MB"); -// xgettext: no-c-format -i18n("6MB"); -// xgettext: no-c-format -i18n("7MB"); -// xgettext: no-c-format -i18n("8MB"); -// xgettext: no-c-format -i18n("10MB"); -// xgettext: no-c-format -i18n("11MB"); -// xgettext: no-c-format -i18n("12MB"); -// xgettext: no-c-format -i18n("14MB"); -// xgettext: no-c-format -i18n("18MB"); -// xgettext: no-c-format -i18n("19MB"); -// xgettext: no-c-format -i18n("20MB"); -// xgettext: no-c-format -i18n("22MB"); -// xgettext: no-c-format -i18n("26MB"); -// xgettext: no-c-format -i18n("34MB"); -// xgettext: no-c-format -i18n("35MB"); -// xgettext: no-c-format -i18n("36MB"); -// xgettext: no-c-format -i18n("38MB"); -// xgettext: no-c-format -i18n("42MB"); -// xgettext: no-c-format -i18n("50MB"); -// xgettext: no-c-format -i18n("66MB"); -// xgettext: no-c-format -i18n("Env10"); -// xgettext: no-c-format -i18n("Env9"); -// xgettext: no-c-format -i18n("EnvDL"); -// xgettext: no-c-format -i18n("EnvC4"); -// xgettext: no-c-format -i18n("EnvC5"); -// xgettext: no-c-format -i18n("EnvMonarch"); -// xgettext: no-c-format -i18n("OKHalftoneMode"); -// xgettext: no-c-format -i18n("Regular"); -// xgettext: no-c-format -i18n("Photo"); -// xgettext: no-c-format -i18n("2.5 MB"); -// xgettext: no-c-format -i18n("3.5 MB"); -// xgettext: no-c-format -i18n("4.5 MB"); -// xgettext: no-c-format -i18n("6.5 MB"); -// xgettext: no-c-format -i18n("10.5 MB"); -// xgettext: no-c-format -i18n("18.5 MB"); -// xgettext: no-c-format -i18n("Post Card"); -// xgettext: no-c-format -i18n("Cardboard"); -// xgettext: no-c-format -i18n("Coated Film"); -// xgettext: no-c-format -i18n("Fine Paper"); -// xgettext: no-c-format -i18n("Iron Seal"); -// xgettext: no-c-format -i18n("OHP"); -// xgettext: no-c-format -i18n("OHP (MD 2000)"); -// xgettext: no-c-format -i18n("Rebeca Free"); -// xgettext: no-c-format -i18n("Color Depth"); -// xgettext: no-c-format -i18n("Floyd Steinb. High Qual. (32 bpp)"); -// xgettext: no-c-format -i18n("Floyd Steinberg Simple (8 bpp)"); -// xgettext: no-c-format -i18n("Monochrome (1 bpp)"); -// xgettext: no-c-format -i18n("Simple Color (4 bpp)"); -// xgettext: no-c-format -i18n("Dithering"); -// xgettext: no-c-format -i18n("DoubleSided"); -// xgettext: no-c-format -i18n("SingleSided"); -// xgettext: no-c-format -i18n("Black toner saving"); -// xgettext: no-c-format -i18n("EcoBlack"); -// xgettext: no-c-format -i18n("NormalBlack"); -// xgettext: no-c-format -i18n("60x144 dpi"); -// xgettext: no-c-format -i18n("60x72 dpi"); -// xgettext: no-c-format -i18n("120x144 dpi"); -// xgettext: no-c-format -i18n("120x72 dpi"); -// xgettext: no-c-format -i18n("240x144 dpi"); -// xgettext: no-c-format -i18n("240x72 dpi"); -// xgettext: no-c-format -i18n("60x180 dpi"); -// xgettext: no-c-format -i18n("60x216 dpi"); -// xgettext: no-c-format -i18n("60x60 dpi"); -// xgettext: no-c-format -i18n("120x180 dpi"); -// xgettext: no-c-format -i18n("120x216 dpi"); -// xgettext: no-c-format -i18n("120x60 dpi"); -// xgettext: no-c-format -i18n("180x180 dpi"); -// xgettext: no-c-format -i18n("180x216 dpi"); -// xgettext: no-c-format -i18n("180x60 dpi"); -// xgettext: no-c-format -i18n("180x72 dpi"); -// xgettext: no-c-format -i18n("240x180 dpi"); -// xgettext: no-c-format -i18n("240x216 dpi"); -// xgettext: no-c-format -i18n("240x60 dpi"); -// xgettext: no-c-format -i18n("360x180 dpi"); -// xgettext: no-c-format -i18n("360x216 dpi"); -// xgettext: no-c-format -i18n("360x60 dpi"); -// xgettext: no-c-format -i18n("360x72 dpi"); -// xgettext: no-c-format -i18n("72x72 dpi"); -// xgettext: no-c-format -i18n("144x144 dpi"); -// xgettext: no-c-format -i18n("Paper Size"); -// xgettext: no-c-format -i18n("Paper Tray"); -// xgettext: no-c-format -i18n("Paper Weight"); -// xgettext: no-c-format -i18n("Heavier paper (28lb)"); -// xgettext: no-c-format -i18n("Heaviest paper (32lb)"); -// xgettext: no-c-format -i18n("Heavy paper (24lb)"); -// xgettext: no-c-format -i18n("Light Paper (20lb)"); -// xgettext: no-c-format -i18n("Lightest Paper (16lb)"); -// xgettext: no-c-format -i18n("Darkness"); -// xgettext: no-c-format -i18n("Rendering Mode"); -// xgettext: no-c-format -i18n("Graphics Mode"); -// xgettext: no-c-format -i18n("Text Mode"); -// xgettext: no-c-format -i18n("US Executive"); -// xgettext: no-c-format -i18n("Special Paper"); -// xgettext: no-c-format -i18n("Envelope Feed"); -// xgettext: no-c-format -i18n("Output Mode"); -// xgettext: no-c-format -i18n("CMYK Color"); -// xgettext: no-c-format -i18n("CMY Color"); -// xgettext: no-c-format -i18n("CRET Color"); -// xgettext: no-c-format -i18n("Duplexer"); -// xgettext: no-c-format -i18n("Address - 1 1/8 x 3 1/2\""); -// xgettext: no-c-format -i18n("Large Address - 1 4/10 x 3 1/2\""); -// xgettext: no-c-format -i18n("Return Address - 3/4 x 2\""); -// xgettext: no-c-format -i18n("Shipping Address - 2 5/16 x 4\""); -// xgettext: no-c-format -i18n("Internet Postage 2-Part - 2 1/4 x 7 1/2\""); -// xgettext: no-c-format -i18n("Internet Postage 3-Part - 2 1/4 x 7\""); -// xgettext: no-c-format -i18n("File Folder - 9/16 x 3 7/16\""); -// xgettext: no-c-format -i18n("Hanging Folder - 9/16 x 2\""); -// xgettext: no-c-format -i18n("3.5\" Disk - 2 1/8 x 2 3/4\""); -// xgettext: no-c-format -i18n("136 DPI"); -// xgettext: no-c-format -i18n("203 DPI"); -// xgettext: no-c-format -i18n("Output Darkness"); -// xgettext: no-c-format -i18n("FanFoldUS"); -// xgettext: no-c-format -i18n("60 DPI"); -// xgettext: no-c-format -i18n("120x60 DPI"); -// xgettext: no-c-format -i18n("360x180 DPI"); -// xgettext: no-c-format -i18n("360 DPI"); -// xgettext: no-c-format -i18n("60x72 DPI"); -// xgettext: no-c-format -i18n("120x72 DPI"); -// xgettext: no-c-format -i18n("240x72 DPI"); -// xgettext: no-c-format -i18n("720 DPI"); -// xgettext: no-c-format -i18n("Page Size and Printing Quality"); -// xgettext: no-c-format -i18n("A4, 600x600 DPI"); -// xgettext: no-c-format -i18n("A4, 1200x600 DPI"); -// xgettext: no-c-format -i18n("B5, 600x600 DPI"); -// xgettext: no-c-format -i18n("B5, 1200x600 DPI"); -// xgettext: no-c-format -i18n("Legal, 600x600 DPI"); -// xgettext: no-c-format -i18n("Legal, 1200x600 DPI"); -// xgettext: no-c-format -i18n("Letter, 600x600 DPI"); -// xgettext: no-c-format -i18n("Letter, 1200x600 DPI"); -// xgettext: no-c-format -i18n("Back Print Media"); -// xgettext: no-c-format -i18n("High Grade Paper"); -// xgettext: no-c-format -i18n("Iron-On Transfer Sheet"); -// xgettext: no-c-format -i18n("Hot OHP Media"); -// xgettext: no-c-format -i18n("BlackOnly"); -// xgettext: no-c-format -i18n("HalfTone"); -// xgettext: no-c-format -i18n("NoHalfTone"); -// xgettext: no-c-format -i18n("FloydSteinberg"); -// xgettext: no-c-format -i18n("NoFloydSteinberg"); -// xgettext: no-c-format -i18n("Banding"); -// xgettext: no-c-format -i18n("NoBanding"); -// xgettext: no-c-format -i18n("Color Mode"); -// xgettext: no-c-format -i18n("Do Curl Correction"); -// xgettext: no-c-format -i18n("CurlCorrectionAlways"); -// xgettext: no-c-format -i18n("CurlCorrectionAfterFinal"); -// xgettext: no-c-format -i18n("Color Correction Mode"); -// xgettext: no-c-format -i18n("FullBlack"); -// xgettext: no-c-format -i18n("Next Job"); -// xgettext: no-c-format -i18n("NextJobOnSameSheet"); -// xgettext: no-c-format -i18n("NextJobOnNewSheet"); -// xgettext: no-c-format -i18n("Next Job is spot color page"); -// xgettext: no-c-format -i18n("NextSpotColorPage"); -// xgettext: no-c-format -i18n("NextNotSpotColorPage"); -// xgettext: no-c-format -i18n("Color correction"); -// xgettext: no-c-format -i18n("NoColorCorrection"); -// xgettext: no-c-format -i18n("ColorCorrection"); -// xgettext: no-c-format -i18n("Curl Correction on current pass"); -// xgettext: no-c-format -i18n("NoCurlCorrectionOnCurrent"); -// xgettext: no-c-format -i18n("CurlCorrectionOnCurrent"); -// xgettext: no-c-format -i18n("How often every dot is printed"); -// xgettext: no-c-format -i18n("PrintTwice"); -// xgettext: no-c-format -i18n("PrintOnce"); -// xgettext: no-c-format -i18n("Black Printing Mode"); -// xgettext: no-c-format -i18n("SolidBlack"); -// xgettext: no-c-format -i18n("MixedBlack"); -// xgettext: no-c-format -i18n("Square Dithering"); -// xgettext: no-c-format -i18n("SquareDithering"); -// xgettext: no-c-format -i18n("NoSquareDithering"); -// xgettext: no-c-format -i18n("This Job is spot color page"); -// xgettext: no-c-format -i18n("ThisSpotColorPage"); -// xgettext: no-c-format -i18n("ThisNotSpotColorPage"); -// xgettext: no-c-format -i18n("300 DPI Normal, color and black cartr."); -// xgettext: no-c-format -i18n("300 DPI Normal, color cartr. only"); -// xgettext: no-c-format -i18n("A4, Color"); -// xgettext: no-c-format -i18n("A4, Grayscale"); -// xgettext: no-c-format -i18n("Letter, Color"); -// xgettext: no-c-format -i18n("Letter, Grayscale"); -// xgettext: no-c-format -i18n("Device"); -// xgettext: no-c-format -i18n("Link stylewriter in dev directory (set it to the appropriate device)"); -// xgettext: no-c-format -i18n("Serial Port #1 (Linux)"); -// xgettext: no-c-format -i18n("Serial Port #2 (Linux)"); -// xgettext: no-c-format -i18n("Serial Port #1 (NetBSD)"); -// xgettext: no-c-format -i18n("Serial Port #2 (NetBSD)"); -// xgettext: no-c-format -i18n("Pass output to device set by the spooler"); -// xgettext: no-c-format -i18n("Label Size"); -// xgettext: no-c-format -i18n("2.25x7.5in, 59x190mm (Lever archive - large)"); -// xgettext: no-c-format -i18n("1.4x7.5in, 38x190mm (Lever archive - small)"); -// xgettext: no-c-format -i18n("2.125x4.0in, 54x101mm (Shipping badge)"); -// xgettext: no-c-format -i18n("2.125x2.75in, 54x70mm (Diskette)"); -// xgettext: no-c-format -i18n("1.4x3.5in, 36x89mm (Large address)"); -// xgettext: no-c-format -i18n("1.125x3.5in, 28x89mm (Standard address)"); -// xgettext: no-c-format -i18n("0.5x2in, 12x50mm (Suspension file)"); -// xgettext: no-c-format -i18n("0.75x5.875in, 19x147mm (Video tape spine)"); -// xgettext: no-c-format -i18n("1.8x3.1in, 46x78mm (Video tape top)"); -// xgettext: no-c-format -i18n("Dual"); -// xgettext: no-c-format -i18n("Thicker Paper"); -// xgettext: no-c-format -i18n("Toner Saving"); -// xgettext: no-c-format -i18n("High (50%)"); -// xgettext: no-c-format -i18n("Low (25%)"); -// xgettext: no-c-format -i18n("2400x600 DPI"); -// xgettext: no-c-format -i18n("180x360 dpi"); -// xgettext: no-c-format -i18n("360x360 dpi"); -// xgettext: no-c-format -i18n("Media Weight"); -// xgettext: no-c-format -i18n("Normal paper"); -// xgettext: no-c-format -i18n("Thick paper"); -// xgettext: no-c-format -i18n("Draft Quality"); -// xgettext: no-c-format -i18n("Normal Quality"); -// xgettext: no-c-format -i18n("Ghostscript Bits Per Pixel"); -// xgettext: no-c-format -i18n("Monochrome (1bpp)"); -// xgettext: no-c-format -i18n("CMYK with Ghostscript dithering (8bpp)"); -// xgettext: no-c-format -i18n("CMYK with Ghostscript FS dithering (16bpp)"); -// xgettext: no-c-format -i18n("CMYK with FS dithering (24 bpp)"); -// xgettext: no-c-format -i18n("CMYK with FS dithering (32 bpp)"); -// xgettext: no-c-format -i18n("Mode"); -// xgettext: no-c-format -i18n("Four-color CMYK"); -// xgettext: no-c-format -i18n("Greyscale"); -// xgettext: no-c-format -i18n("Three-color RGB"); -// xgettext: no-c-format -i18n("Colors to be used"); -// xgettext: no-c-format -i18n("Cyan only"); -// xgettext: no-c-format -i18n("Cyan, Black"); -// xgettext: no-c-format -i18n("Cyan, Magenta"); -// xgettext: no-c-format -i18n("Cyan, Magenta, Black"); -// xgettext: no-c-format -i18n("Cyan, Magenta, Yellow"); -// xgettext: no-c-format -i18n("Cyan, Magenta, Yellow, Black"); -// xgettext: no-c-format -i18n("Cyan, Yellow"); -// xgettext: no-c-format -i18n("Cyan, Yellow, Black"); -// xgettext: no-c-format -i18n("Black only"); -// xgettext: no-c-format -i18n("Black for any color"); -// xgettext: no-c-format -i18n("Magenta only"); -// xgettext: no-c-format -i18n("Magenta, Black"); -// xgettext: no-c-format -i18n("Magenta, Yellow"); -// xgettext: no-c-format -i18n("Magenta, Yellow, Black"); -// xgettext: no-c-format -i18n("Yellow only"); -// xgettext: no-c-format -i18n("Yellow, Black"); -// xgettext: no-c-format -i18n("Auto Sheet Feeder"); -// xgettext: no-c-format -i18n("Manual without Pause"); -// xgettext: no-c-format -i18n("Manual with Pause"); -// xgettext: no-c-format -i18n("Back Print Film"); -// xgettext: no-c-format -i18n("Fabric Sheets"); -// xgettext: no-c-format -i18n("Glossy Photo Cards"); -// xgettext: no-c-format -i18n("Glossy Photo Paper"); -// xgettext: no-c-format -i18n("High Gloss Film"); -// xgettext: no-c-format -i18n("High Resolution Paper"); -// xgettext: no-c-format -i18n("Photo Paper Pro"); -// xgettext: no-c-format -i18n("T-Shirt Transfers"); -// xgettext: no-c-format -i18n("Black"); -// xgettext: no-c-format -i18n("1440 DPI"); -// xgettext: no-c-format -i18n("1440x720 DPI"); -// xgettext: no-c-format -i18n("180x180 DPI"); -// xgettext: no-c-format -i18n("360x360 DPI"); -// xgettext: no-c-format -i18n("720x360 DPI"); -// xgettext: no-c-format -i18n("360×360dpi, back print film"); -// xgettext: no-c-format -i18n("360×360dpi, coated paper"); -// xgettext: no-c-format -i18n("360×360dpi, fabric sheet"); -// xgettext: no-c-format -i18n("360×360dpi, glossy paper"); -// xgettext: no-c-format -i18n("360×360dpi, high gloss film"); -// xgettext: no-c-format -i18n("360×360dpi, high resolution paper"); -// xgettext: no-c-format -i18n("360×360dpi, plain paper"); -// xgettext: no-c-format -i18n("360×360dpi, plain paper, high speed"); -// xgettext: no-c-format -i18n("360×360dpi, transparency film"); -// xgettext: no-c-format -i18n("720 dpi"); -// xgettext: no-c-format -i18n("Black and Color"); -// xgettext: no-c-format -i18n("Photo and Color"); -// xgettext: no-c-format -i18n("360x360 DPI DMT"); -// xgettext: no-c-format -i18n("720x720 DPI"); -// xgettext: no-c-format -i18n("Low Quality"); -// xgettext: no-c-format -i18n("720×720dpi, back print film"); -// xgettext: no-c-format -i18n("720×720dpi, coated paper"); -// xgettext: no-c-format -i18n("720×720dpi, glossy paper"); -// xgettext: no-c-format -i18n("720×720dpi, high-gloss paper"); -// xgettext: no-c-format -i18n("720×720dpi, high resolution paper"); -// xgettext: no-c-format -i18n("720×720dpi, plain paper"); -// xgettext: no-c-format -i18n("720×720dpi, transparency film"); -// xgettext: no-c-format -i18n("Black and Photo catridges"); -// xgettext: no-c-format -i18n("600×600dpi, iron-on transfer sheets, normal quality"); -// xgettext: no-c-format -i18n("600×600dpi, plain paper, normal quality"); -// xgettext: no-c-format -i18n("600×600dpi, transparencies, normal quality"); -// xgettext: no-c-format -i18n("1200×1200dpi, glossy photo cards, high quality"); -// xgettext: no-c-format -i18n("1200×1200dpi, high gloss photo paper, high quality"); -// xgettext: no-c-format -i18n("1200×1200dpi, professional photo paper, highest quality"); -// xgettext: no-c-format -i18n("300x300 DPI DMT"); -// xgettext: no-c-format -i18n("600x600 DPI DMT"); -// xgettext: no-c-format -i18n("Monochrome, fast"); -// xgettext: no-c-format -i18n("Monochrome, Floyd-Steinberg"); -// xgettext: no-c-format -i18n("ESC/P2 Encoding"); -// xgettext: no-c-format -i18n("Delta Row"); -// xgettext: no-c-format -i18n("Run Length"); -// xgettext: no-c-format -i18n("Uncompressed"); -// xgettext: no-c-format -i18n("Preconfiguration file"); -// xgettext: no-c-format -i18n("stcolor"); -// xgettext: no-c-format -i18n("none"); -// xgettext: no-c-format -i18n("Head motion"); -// xgettext: no-c-format -i18n("Initialization values for dithering"); -// xgettext: no-c-format -i18n("Uniform"); -// xgettext: no-c-format -i18n("Random"); -// xgettext: no-c-format -i18n("Weaving"); -// xgettext: no-c-format -i18n("Microweave (Printer internal)"); -// xgettext: no-c-format -i18n("Softweave (Driver internal)"); -// xgettext: no-c-format -i18n("360×360dpi, 32-bit CMYK"); -// xgettext: no-c-format -i18n("3360×360dpi, 4-bit, PostScript halftoning, weaved"); -// xgettext: no-c-format -i18n("720×720dpi, 32-bit CMYK, weaved"); -// xgettext: no-c-format -i18n("Color, Floyd-Steinberg, CMYK, better"); -// xgettext: no-c-format -i18n("Color, fast, CMYK"); -// xgettext: no-c-format -i18n("Color, modif. Floyd-Steinberg, CMYK, faster"); -// xgettext: no-c-format -i18n("Color, fast, RGB"); -// xgettext: no-c-format -i18n("Color, Floyd-Steinberg, RGB"); -// xgettext: no-c-format -i18n("Color, Floyd-Steinberg, CMYK, simpler"); -// xgettext: no-c-format -i18n("Color, Stefan-Singer algorithm, RGB"); -// xgettext: no-c-format -i18n("Back Light Film"); -// xgettext: no-c-format -i18n("Glossy Film"); -// xgettext: no-c-format -i18n("Inkjet Paper"); -// xgettext: no-c-format -i18n("Matte Paper"); -// xgettext: no-c-format -i18n("Photo Quality Glossy Paper"); -// xgettext: no-c-format -i18n("Photo Quality Inkjet Paper"); -// xgettext: no-c-format -i18n("Plain Paper Fast Load"); -// xgettext: no-c-format -i18n("Premium Glossy Photo Paper"); -// xgettext: no-c-format -i18n("720 DPI Microweave"); -// xgettext: no-c-format -i18n("360 DPI High Quality"); -// xgettext: no-c-format -i18n("360 DPI Softweave"); -// xgettext: no-c-format -i18n("720 DPI Highest Quality"); -// xgettext: no-c-format -i18n("720 DPI High Quality"); -// xgettext: no-c-format -i18n("720 DPI Softweave"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Emulated"); -// xgettext: no-c-format -i18n("1440 x 2880 DPI Emulated"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Highest Quality"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Softweave"); -// xgettext: no-c-format -i18n("B3 ISO"); -// xgettext: no-c-format -i18n("B3 JIS"); -// xgettext: no-c-format -i18n("RA2"); -// xgettext: no-c-format -i18n("360 dpi, plain paper"); -// xgettext: no-c-format -i18n("720 dpi, plain paper"); -// xgettext: no-c-format -i18n("1440×720dpi, inkjet paper"); -// xgettext: no-c-format -i18n("360×360dpi, plain paper, grayscale"); -// xgettext: no-c-format -i18n("720×720dpi, inkjet paper"); -// xgettext: no-c-format -i18n("720×720dpi, plain paper, grayscale"); -// xgettext: no-c-format -i18n("1440×720dpi, inkjet paper, grayscale"); -// xgettext: no-c-format -i18n("720x720dpi, plain paper"); -// xgettext: no-c-format -i18n("360×360dpi"); -// xgettext: no-c-format -i18n("720×720dpi"); -// xgettext: no-c-format -i18n("Four color CMYK printing"); -// xgettext: no-c-format -i18n("Six color CMYKcm printing"); -// xgettext: no-c-format -i18n("75x75 dpi"); -// xgettext: no-c-format -i18n("150x150 dpi"); -// xgettext: no-c-format -i18n("2-passes x-weaving"); -// xgettext: no-c-format -i18n("3-passes x-weaving"); -// xgettext: no-c-format -i18n("2400 DPI"); -// xgettext: no-c-format -i18n("Reset printer before printing"); -// xgettext: no-c-format -i18n("NoReset"); -// xgettext: no-c-format -i18n("Reset"); -// xgettext: no-c-format -i18n("Power saving mode after printing"); -// xgettext: no-c-format -i18n("PowerSaving"); -// xgettext: no-c-format -i18n("NoPowerSaving"); -// xgettext: no-c-format -i18n("Bits per R/G/B component"); -// xgettext: no-c-format -i18n("HalfLetter"); -// xgettext: no-c-format -i18n("B6-C4"); -// xgettext: no-c-format -i18n("C7-6"); -// xgettext: no-c-format -i18n("ArchA"); -// xgettext: no-c-format -i18n("flsa"); -// xgettext: no-c-format -i18n("flse"); -// xgettext: no-c-format -i18n("Small paperback"); -// xgettext: no-c-format -i18n("Penguin small paperback"); -// xgettext: no-c-format -i18n("Penguin large paperback"); -// xgettext: no-c-format -i18n("Long 3"); -// xgettext: no-c-format -i18n("Long 4"); -// xgettext: no-c-format -i18n("Kaku"); -// xgettext: no-c-format -i18n("Commercial 10"); -// xgettext: no-c-format -i18n("A2 Invitation"); -// xgettext: no-c-format -i18n("ColorModel"); -// xgettext: no-c-format -i18n("Line Art"); -// xgettext: no-c-format -i18n("Solid Tone"); -// xgettext: no-c-format -i18n("Photograph"); -// xgettext: no-c-format -i18n("MediaType"); -// xgettext: no-c-format -i18n("Transparencies"); -// xgettext: no-c-format -i18n("Dither"); -// xgettext: no-c-format -i18n("300 DPI x 600 DPI"); -// xgettext: no-c-format -i18n("600 DPI high quality"); -// xgettext: no-c-format -i18n("600 DPI Unidirectional"); -// xgettext: no-c-format -i18n("1200 DPI high quality"); -// xgettext: no-c-format -i18n("1200 DPI highest quality"); -// xgettext: no-c-format -i18n("1200 DPI Unidirectional"); -// xgettext: no-c-format -i18n("2400 DPI x 1200 DPI"); -// xgettext: no-c-format -i18n("2400 DPI x 1200 DPI high quality"); -// xgettext: no-c-format -i18n("2400 DPI x 1200 DPI highest quality"); -// xgettext: no-c-format -i18n("ArchB"); -// xgettext: no-c-format -i18n("Envelopes"); -// xgettext: no-c-format -i18n("Premium Luster Photo Paper"); -// xgettext: no-c-format -i18n("180 x 120 DPI"); -// xgettext: no-c-format -i18n("180 x 120 DPI Unidirectional"); -// xgettext: no-c-format -i18n("360 x 120 DPI"); -// xgettext: no-c-format -i18n("360 x 120 DPI Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI Microweave"); -// xgettext: no-c-format -i18n("360 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI High Quality Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI Softweave"); -// xgettext: no-c-format -i18n("720 x 360 DPI Softweave Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Softweave Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI High Quality Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Softweave Unidirectional"); -// xgettext: no-c-format -i18n("Roll Feed"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Softweave"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Softweave Unidirectional"); -// xgettext: no-c-format -i18n("180 DPI Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI Full Overlap"); -// xgettext: no-c-format -i18n("360 DPI Full Overlap Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI FOL2"); -// xgettext: no-c-format -i18n("360 DPI FOL2 Unidirectional"); -// xgettext: no-c-format -i18n("360 DPI MW2"); -// xgettext: no-c-format -i18n("360 DPI MW2 Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI Default"); -// xgettext: no-c-format -i18n("720 x 360 DPI Default Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI Microweave"); -// xgettext: no-c-format -i18n("720 x 360 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL2"); -// xgettext: no-c-format -i18n("720 x 360 DPI FOL2 Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI MW2"); -// xgettext: no-c-format -i18n("720 x 360 DPI MW2 Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Full Overlap"); -// xgettext: no-c-format -i18n("720 DPI Full Overlap Unidirectional"); -// xgettext: no-c-format -i18n("720 DPI Four Pass"); -// xgettext: no-c-format -i18n("720 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Microweave"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Microweave Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI FOL"); -// xgettext: no-c-format -i18n("1440 x 720 DPI FOL Unidirectional"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Four Pass"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Four Pass Unidirectional"); -// xgettext: no-c-format -i18n("20x24"); -// xgettext: no-c-format -i18n("20x30"); -// xgettext: no-c-format -i18n("24x30"); -// xgettext: no-c-format -i18n("24x36"); -// xgettext: no-c-format -i18n("SRA2"); -// xgettext: no-c-format -i18n("B2 ISO"); -// xgettext: no-c-format -i18n("B2 JIS"); -// xgettext: no-c-format -i18n("C2"); -// xgettext: no-c-format -i18n("ArchC"); -// xgettext: no-c-format -i18n("ArchD"); -// xgettext: no-c-format -i18n("30x40"); -// xgettext: no-c-format -i18n("RA0"); -// xgettext: no-c-format -i18n("RA1"); -// xgettext: no-c-format -i18n("SRA0"); -// xgettext: no-c-format -i18n("SRA1"); -// xgettext: no-c-format -i18n("B0 ISO"); -// xgettext: no-c-format -i18n("B1 ISO"); -// xgettext: no-c-format -i18n("B0 JIS"); -// xgettext: no-c-format -i18n("B1 JIS"); -// xgettext: no-c-format -i18n("C0"); -// xgettext: no-c-format -i18n("C1"); -// xgettext: no-c-format -i18n("ArchE"); -// xgettext: no-c-format -i18n("1200 x 1200 DPI"); -// xgettext: no-c-format -i18n("1200 x 600 DPI"); -// xgettext: no-c-format -i18n("13 Inch Roll Paper"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI"); -// xgettext: no-c-format -i18n("1440 x 1440 DPI Highest Quality"); -// xgettext: no-c-format -i18n("1440 x 720 DPI"); -// xgettext: no-c-format -i18n("1440 x 720 DPI Unidirectional"); -// xgettext: no-c-format -i18n("150 x 150 DPI"); -// xgettext: no-c-format -i18n("180 DPI Economy Draft"); -// xgettext: no-c-format -i18n("180 x 180 DPI"); -// xgettext: no-c-format -i18n("210 mm Roll Paper"); -// xgettext: no-c-format -i18n("22 Inch Roll Paper"); -// xgettext: no-c-format -i18n("2400 x 1200 DPI"); -// xgettext: no-c-format -i18n("240x240 DPI"); -// xgettext: no-c-format -i18n("24 Inch Roll Paper"); -// xgettext: no-c-format -i18n("2880 x 1440 DPI"); -// xgettext: no-c-format -i18n("2880 x 720 DPI"); -// xgettext: no-c-format -i18n("2880 x 720 DPI Unidirectional"); -// xgettext: no-c-format -i18n("300 dpi, Color, Black & Color Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("300 dpi, Color, Color Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("300 dpi, Grayscale, Black Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("300 dpi, Grayscale, Black & Color Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("300 dpi, Photo, Black & Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("300 dpi, Photo, Photo & Color Cartr., Premium Paper"); -// xgettext: no-c-format -i18n("300 x 300 DPI"); -// xgettext: no-c-format -i18n("300 x 600 DPI"); -// xgettext: no-c-format -i18n("360×360dpi, 4-bit, PostScript halftoning, weaved"); -// xgettext: no-c-format -i18n("360 x 120 DPI Economy Draft"); -// xgettext: no-c-format -i18n("360 x 180 DPI"); -// xgettext: no-c-format -i18n("360 x 180 DPI Draft"); -// xgettext: no-c-format -i18n("360 x 240 DPI"); -// xgettext: no-c-format -i18n("360 x 240 DPI Draft"); -// xgettext: no-c-format -i18n("360 x 360 DPI"); -// xgettext: no-c-format -i18n("360x720 DPI"); -// xgettext: no-c-format -i18n("360 x 90 DPI"); -// xgettext: no-c-format -i18n("360 x 90 DPI Fast Economy Draft"); -// xgettext: no-c-format -i18n("36 Inch Roll Paper"); -// xgettext: no-c-format -i18n("3-ink color (Color ink cartridge)"); -// xgettext: no-c-format -i18n("400x400 DPI"); -// xgettext: no-c-format -i18n("44 Inch Roll Paper"); -// xgettext: no-c-format -i18n("4 Inch Roll Paper"); -// xgettext: no-c-format -i18n("4-ink color (Both ink cartridges)"); -// xgettext: no-c-format -i18n("5 Inch Roll Paper"); -// xgettext: no-c-format -i18n("600 dpi, Color, Black & Color Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("600 dpi, Color, Color Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("600 dpi, Grayscale, Black & Color Cartr., Plain Paper"); -// xgettext: no-c-format -i18n("600 dpi, Photo, Black & Color Cartr., Photo Paper"); -// xgettext: no-c-format -i18n("600 x 300 DPI"); -// xgettext: no-c-format -i18n("600 x 600 DPI"); -// xgettext: no-c-format -i18n("720 DPI Unidirectional"); -// xgettext: no-c-format -i18n("720 x 360 DPI"); -// xgettext: no-c-format -i18n("720 x 360 DPI Unidirectional"); -// xgettext: no-c-format -i18n("720 x 720 DPI"); -// xgettext: no-c-format -i18n("89 mm Roll Paper"); -// xgettext: no-c-format -i18n("90 x 90 DPI"); -// xgettext: no-c-format -i18n("90x90 DPI"); -// xgettext: no-c-format -i18n("A4, Colour"); -// xgettext: no-c-format -i18n("Always"); -// xgettext: no-c-format -i18n("B6 (ISO)"); -// xgettext: no-c-format -i18n("Behaviour when Toner Low"); -// xgettext: no-c-format -i18n("Bidirectional Printing"); -// xgettext: no-c-format -i18n("Black and Blue (Cyan, Magenta, Black)"); -// xgettext: no-c-format -i18n("Black and Cyan"); -// xgettext: no-c-format -i18n("Black and Green (Cyan, Yellow, Black)"); -// xgettext: no-c-format -i18n("Black and Magenta"); -// xgettext: no-c-format -i18n("Black and Red (Magenta, Yellow, Black)"); -// xgettext: no-c-format -i18n("Black and Yellow"); -// xgettext: no-c-format -i18n("Black cartridge"); -// xgettext: no-c-format -i18n("Black Cartridge"); -// xgettext: no-c-format -i18n("Black correction (Cyan reduction)"); -// xgettext: no-c-format -i18n("Black for any colour"); -// xgettext: no-c-format -i18n("Black ink density adjustment."); -// xgettext: no-c-format -i18n("Black Level"); -// xgettext: no-c-format -i18n("Black Level (Black cartr. only)"); -// xgettext: no-c-format -i18n("Blue (Cyan and Magenta)"); -// xgettext: no-c-format -i18n("Bottom Margin"); -// xgettext: no-c-format -i18n("Brightness"); -// xgettext: no-c-format -i18n("Color cartridge"); -// xgettext: no-c-format -i18n("Color (Draft Quality)"); -// xgettext: no-c-format -i18n("Color (High Quality)"); -// xgettext: no-c-format -i18n("Color, normal quality, optional colour correction"); -// xgettext: no-c-format -i18n("Colour"); -// xgettext: no-c-format -i18n("Colour Cartridge"); -// xgettext: no-c-format -i18n("Colour correction"); -// xgettext: no-c-format -i18n("Colour Correction"); -// xgettext: no-c-format -i18n("ColourCorrection"); -// xgettext: no-c-format -i18n("Colour Correction Mode"); -// xgettext: no-c-format -i18n("Colour Depth"); -// xgettext: no-c-format -i18n("Colour, fast, CMYK"); -// xgettext: no-c-format -i18n("Colour, fast, RGB"); -// xgettext: no-c-format -i18n("Colour, Floyd-Steinberg, CMYK, better"); -// xgettext: no-c-format -i18n("Colour, Floyd-Steinberg, CMYK, simpler"); -// xgettext: no-c-format -i18n("Colour, Floyd-Steinberg, RGB"); -// xgettext: no-c-format -i18n("Colour Intensity"); -// xgettext: no-c-format -i18n("Colour mode"); -// xgettext: no-c-format -i18n("Colour Mode"); -// xgettext: no-c-format -i18n("Colour, modif. Floyd-Steinberg, CMYK, faster"); -// xgettext: no-c-format -i18n("Colours one page at a time"); -// xgettext: no-c-format -i18n("Colour, Stefan-Singer algorithm, RGB"); -// xgettext: no-c-format -i18n("Colours to be printed"); -// xgettext: no-c-format -i18n("Colours to be used"); -// xgettext: no-c-format -i18n("Composed Black"); -// xgettext: no-c-format -i18n("Compressed Data Transfer"); -// xgettext: no-c-format -i18n("Continuous-tone photographs"); -// xgettext: no-c-format -i18n("Contrast Level"); -// xgettext: no-c-format -i18n("CorrectBlack"); -// xgettext: no-c-format -i18n("Curl Correction"); -// xgettext: no-c-format -i18n("Cyan"); -// xgettext: no-c-format -i18n("Cyan Level"); -// xgettext: no-c-format -i18n("Cyan Level (Colour cartr. only)"); -// xgettext: no-c-format -i18n("Default behaviour"); -// xgettext: no-c-format -i18n("Distance even/odd nozzles left cartr."); -// xgettext: no-c-format -i18n("Distance even/odd nozzles right cartr."); -// xgettext: no-c-format -i18n("Dither Algorithm"); -// xgettext: no-c-format -i18n("Dithering Pixels Per Inch"); -// xgettext: no-c-format -i18n("Dithering PPI"); -// xgettext: no-c-format -i18n("Do not care about cartridges, colours one page at a time"); -// xgettext: no-c-format -i18n("Do not care about cartridges, each line in all colours"); -// xgettext: no-c-format -i18n("DoNotOverlay"); -// xgettext: no-c-format -i18n("Driver Default"); -// xgettext: no-c-format -i18n("Each line in all colours"); -// xgettext: no-c-format -i18n("Executive, 1200x600 DPI"); -// xgettext: no-c-format -i18n("Executive, 600x600 DPI"); -// xgettext: no-c-format -i18n("FaceDown"); -// xgettext: no-c-format -i18n("FaceUp"); -// xgettext: no-c-format -i18n("First pass of an overlayed printout"); -// xgettext: no-c-format -i18n("Five Color Photo Composite"); -// xgettext: no-c-format -i18n("Floyd-Steinberg (not recommended for MicroDry)"); -// xgettext: no-c-format -i18n("Foolscap A"); -// xgettext: no-c-format -i18n("Foolscap E"); -// xgettext: no-c-format -i18n("Four Color Standard"); -// xgettext: no-c-format -i18n("FullPaint"); -// xgettext: no-c-format -i18n("Gamma"); -// xgettext: no-c-format -i18n("Gamma Black"); -// xgettext: no-c-format -i18n("Gamma (Blue Component)"); -// xgettext: no-c-format -i18n("Gamma Correction"); -// xgettext: no-c-format -i18n("Gamma correction on saturation HSV component"); -// xgettext: no-c-format -i18n("Gamma Cyan"); -// xgettext: no-c-format -i18n("Gamma (Green Component)"); -// xgettext: no-c-format -i18n("Gamma Magenta"); -// xgettext: no-c-format -i18n("Gamma (Red Component)"); -// xgettext: no-c-format -i18n("Gamma Yellow"); -// xgettext: no-c-format -i18n("Generic DeskJet"); -// xgettext: no-c-format -i18n("Glossy finishing"); -// xgettext: no-c-format -i18n("Glossy Photo"); -// xgettext: no-c-format -i18n("Gray Scale"); -// xgettext: no-c-format -i18n("Grayscale (Black ink cartridge)"); -// xgettext: no-c-format -i18n("Green (Cyan and Yellow)"); -// xgettext: no-c-format -i18n("Hagaki"); -// xgettext: no-c-format -i18n("Halftone (recommended for general use)"); -// xgettext: no-c-format -i18n("Head Separation"); -// xgettext: no-c-format -i18n("Horiz. Alignm. betw. Cartr."); -// xgettext: no-c-format -i18n("Horizontal (X-)Shift (in dots)"); -// xgettext: no-c-format -i18n("Horz. align. betw. cartr."); -// xgettext: no-c-format -i18n("HP LaserJet 4L"); -// xgettext: no-c-format -i18n("HP LaserJet III series"); -// xgettext: no-c-format -i18n("HP LaserJet II series"); -// xgettext: no-c-format -i18n("IgnoreSize"); -// xgettext: no-c-format -i18n("Ilford Heavy Paper"); -// xgettext: no-c-format -i18n("Ink Drying Time (sec)"); -// xgettext: no-c-format -i18n("Inverse Printing"); -// xgettext: no-c-format -i18n("Japanese Kaku envelope #4"); -// xgettext: no-c-format -i18n("Japanese long envelope #3"); -// xgettext: no-c-format -i18n("Japanese long envelope #4"); -// xgettext: no-c-format -i18n("Job Type"); -// xgettext: no-c-format -i18n("KeepBlack"); -// xgettext: no-c-format -i18n("Keep pure black"); -// xgettext: no-c-format -i18n("Landscape"); -// xgettext: no-c-format -i18n("Last pass of an overlayed printout"); -// xgettext: no-c-format -i18n("Left Margin"); -// xgettext: no-c-format -i18n("Left Skip (in pixels)"); -// xgettext: no-c-format -i18n("Letter, Colour"); -// xgettext: no-c-format -i18n("Limit Error from Paper Colour Correction"); -// xgettext: no-c-format -i18n("Line Feed Adjustment"); -// xgettext: no-c-format -i18n("Magenta"); -// xgettext: no-c-format -i18n("Magenta Level"); -// xgettext: no-c-format -i18n("Magenta Level (Colour cartr. only)"); -// xgettext: no-c-format -i18n("Memory Limit (Bytes)"); -// xgettext: no-c-format -i18n("Middle pass of an overlayed printout"); -// xgettext: no-c-format -i18n("Monochrome printing, re-usable economy black cartridge"); -// xgettext: no-c-format -i18n("Monochrome printing, standard black cartridge"); -// xgettext: no-c-format -i18n("More than 4 colours, colours one page at a time"); -// xgettext: no-c-format -i18n("Never"); -// xgettext: no-c-format -i18n("Next Job is spot colour page"); -// xgettext: no-c-format -i18n("NextNotSpotColourPage"); -// xgettext: no-c-format -i18n("NextSpotColourPage"); -// xgettext: no-c-format -i18n("NoColourCorrection"); -// xgettext: no-c-format -i18n("No dithering"); -// xgettext: no-c-format -i18n("noGlossy"); -// xgettext: no-c-format -i18n("Non-Bleed"); -// xgettext: no-c-format -i18n("None (RGB --> CMY)"); -// xgettext: no-c-format -i18n("Normal Quality Colour (4-ink)"); -// xgettext: no-c-format -i18n("Number of Copies"); -// xgettext: no-c-format -i18n("Number of passes per line"); -// xgettext: no-c-format -i18n("Orientation"); -// xgettext: no-c-format -i18n("Oufuku-Hagaki"); -// xgettext: no-c-format -i18n("Output Type"); -// xgettext: no-c-format -i18n("Page Output"); -// xgettext: no-c-format -i18n("Paper Colour (Blue Component)"); -// xgettext: no-c-format -i18n("Paper Colour (Green Component)"); -// xgettext: no-c-format -i18n("Paper Colour (Red Component)"); -// xgettext: no-c-format -i18n("PartialPaint"); -// xgettext: no-c-format -i18n("Photo CcMmY Color"); -// xgettext: no-c-format -i18n("Photo CcMmYK Color"); -// xgettext: no-c-format -i18n("Photo (CMYK, gamma correction, ...)"); -// xgettext: no-c-format -i18n("Photo Full Bleed"); -// xgettext: no-c-format -i18n("Photo Quality Colour (6-ink)"); -// xgettext: no-c-format -i18n("Plain (RGB --> CMYK)"); -// xgettext: no-c-format -i18n("Portrait"); -// xgettext: no-c-format -i18n("Presentation Quality"); -// xgettext: no-c-format -i18n("Primarily solid colors or smooth gradients"); -// xgettext: no-c-format -i18n("Printer Model"); -// xgettext: no-c-format -i18n("Printer's paper size"); -// xgettext: no-c-format -i18n("Print next job over the current one"); -// xgettext: no-c-format -i18n("Printout Quality"); -// xgettext: no-c-format -i18n("Quality, Ink Type, Media Type"); -// xgettext: no-c-format -i18n("Randomization of Floyd-Steinberg"); -// xgettext: no-c-format -i18n("Raw CMYK"); -// xgettext: no-c-format -i18n("Red (Magenta and Yellow)"); -// xgettext: no-c-format -i18n("RequireSize"); -// xgettext: no-c-format -i18n("Reset after job"); -// xgettext: no-c-format -i18n("Right Margin"); -// xgettext: no-c-format -i18n("RIT Control"); -// xgettext: no-c-format -i18n("RITOff"); -// xgettext: no-c-format -i18n("RITOn"); -// xgettext: no-c-format -i18n("Roll Paper"); -// xgettext: no-c-format -i18n("Shift output horizontally (in 1/300 inch)"); -// xgettext: no-c-format -i18n("Shift output vertically (in 1/300 inch)"); -// xgettext: no-c-format -i18n("Simple Colour (4 bpp)"); -// xgettext: no-c-format -i18n("Single Pass Job"); -// xgettext: no-c-format -i18n("Six Color Photo"); -// xgettext: no-c-format -i18n("Smooth Printing (BC-02 cartridge)"); -// xgettext: no-c-format -i18n("Solid Colors"); -// xgettext: no-c-format -i18n("Square (experimental, not recommended)"); -// xgettext: no-c-format -i18n("StpBrightness"); -// xgettext: no-c-format -i18n("StpGamma"); -// xgettext: no-c-format -i18n("StpSaturation"); -// xgettext: no-c-format -i18n("Super B 13x19"); -// xgettext: no-c-format -i18n("Thick Paper/Card Board"); -// xgettext: no-c-format -i18n("This Job is spot colour page"); -// xgettext: no-c-format -i18n("ThisNotSpotColourPage"); -// xgettext: no-c-format -i18n("ThisSpotColourPage"); -// xgettext: no-c-format -i18n("Three Color Composite"); -// xgettext: no-c-format -i18n("Toner Density"); -// xgettext: no-c-format -i18n("TonerSaving"); -// xgettext: no-c-format -i18n("Top Margin"); -// xgettext: no-c-format -i18n("Top Skip (in pixels)"); -// xgettext: no-c-format -i18n("Transparency Paper"); -// xgettext: no-c-format -i18n("Tray 10"); -// xgettext: no-c-format -i18n("Tray 11"); -// xgettext: no-c-format -i18n("Tray 12"); -// xgettext: no-c-format -i18n("Tray 13"); -// xgettext: no-c-format -i18n("Tray 14"); -// xgettext: no-c-format -i18n("Tray 15"); -// xgettext: no-c-format -i18n("Tray 8"); -// xgettext: no-c-format -i18n("Tray 9"); -// xgettext: no-c-format -i18n("Use multi-colour ribbon"); -// xgettext: no-c-format -i18n("UseMultiColourRibbon"); -// xgettext: no-c-format -i18n("UseStandardRibbons"); -// xgettext: no-c-format -i18n("Vert. align. betw. cartr."); -// xgettext: no-c-format -i18n("Vert. Alignm. betw. Cartr."); -// xgettext: no-c-format -i18n("Vertical (Y-)Shift (in dots)"); -// xgettext: no-c-format -i18n("X Offset"); -// xgettext: no-c-format -i18n("Yellow Level"); -// xgettext: no-c-format -i18n("Yellow Level (Colour cartr. only)"); -// xgettext: no-c-format -i18n("Y Offset"); diff --git a/kdeprint/descriptions/readppd b/kdeprint/descriptions/readppd deleted file mode 100755 index 2c7621a36..000000000 --- a/kdeprint/descriptions/readppd +++ /dev/null @@ -1,83 +0,0 @@ -#! /usr/bin/perl - -$inui = 0; -$tag = ""; -$linenr = 0; - -$incomdata = 0; -$aftername = 0; -$aftercomment = 0; -$commentvalue = ""; - -while ( ) -{ - $linenr = $linenr + 1; - - # *LanguageVersion: Check for English - if (/^\*LanguageVersion:\s+([\w\-]+)\s*$/) { - last if ($1 ne "English"); - } - - # *OpenUI *InputSlot/Media Source: PickOne - if ($_ =~ "^*OpenUI") { - $inui = 1; - $_ =~ s/^\*OpenUI\s*//; - $tag = $_; - $tag =~ s%:.*$%%; - $tag =~ s%/.*%%; - chomp($tag); - $_ =~ s%\s*:.*$%%; - $_ =~ s%\s*\*%%; - $_ =~ s%^[^/]*/%%; - $_ =~ s%\"%\\\"%g; - chomp($_); - print "i18n(\"", $_, "\");\n"; - next; - } - - if ($_ =~ "^*CloseUI") { - $inui = 0; - $tag = ""; - } - - if ($inui) { - if (substr($_, 0, length($tag)) eq $tag) { - $_ =~ s%\s*:.*$%%; - $_ =~ s%\*\S*\s*%%; - $_ =~ s%^[^/]*/%%; - $_ =~ s%\"%\\\"%g; - chomp($_); - print "i18n(\"", $_, "\");\n"; - } - } - - # *% COMDATA #$VAR1 = {: Start looking for 'name','comment','type' - if (/^\*\% COMDATA \#\$VAR1/) { - $incomdata = 1; - } - - # *% COMDATA # 'name': Continue looking for 'comment' - if ($incomdata && /^\*\% COMDATA \#\s*\'name\'/) { - $aftername = 1; - $aftercomment = 0; - } - - # *% COMDATA # 'comment' => '*': Continue looking for 'type' - if ($aftername && /^\*\% COMDATA \#\s*\'comment\'\s*\=\>\s*\'(.*)\'/) { - $aftername = 0; - $aftercomment = 1; - $commentvalue = $1; - } - - # *% COMDATA # 'type' => '*': - # Output comment if type is 'int', 'float' or 'string' - if ($aftercomment && /^\*\% COMDATA \#\s*\'type\'\s*\=\>\s*\'(.*)\'/) { - $aftername = 0; - $aftercomment = 0; - if ($1 eq "int" || $1 eq "float" || $1 eq "string") { - print "i18n(\"$commentvalue\");\n"; - } - } - - -} diff --git a/kdeprint/descriptions/sortthem.cpp b/kdeprint/descriptions/sortthem.cpp deleted file mode 100644 index 9adc284b1..000000000 --- a/kdeprint/descriptions/sortthem.cpp +++ /dev/null @@ -1,28 +0,0 @@ - - -#include -#include -#include -#include - - - -int main(int argc, char **argv) { -TQStringList have; -char buf[1024]; - - - while (!feof(stdin)) { - char *cline = fgets(buf, 1000, stdin); - if (!cline) break; - if (!have.contains(cline)) { - have << cline; - fprintf(stdout, "%s", cline); - } - } - - -return 0; -} - - diff --git a/kdeprint/kdeprint_part/CMakeLists.txt b/kdeprint/kdeprint_part/CMakeLists.txt deleted file mode 100644 index 6de7ddb91..000000000 --- a/kdeprint/kdeprint_part/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -add_definitions( -D_KDEPRINT_COMPILE ) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### other data ################################ - -install( FILES tdeprint_part.rc DESTINATION ${DATA_INSTALL_DIR}/tdeprint_part ) -install( FILES tdeprint_part.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) - - -##### libtdeprint_part (module) ################# - -tde_add_kpart( libtdeprint_part AUTOMOC - SOURCES printpart.cpp - LINK tdeprint_management-shared kparts-shared - DESTINATION ${PLUGIN_INSTALL_DIR} -) diff --git a/kdeprint/kdeprint_part/Makefile.am b/kdeprint/kdeprint_part/Makefile.am deleted file mode 100644 index e27404a0f..000000000 --- a/kdeprint/kdeprint_part/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -AM_CPPFLAGS = -D_KDEPRINT_COMPILE - -kde_module_LTLIBRARIES = libtdeprint_part.la - -libtdeprint_part_la_SOURCES = printpart.cpp -libtdeprint_part_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined -libtdeprint_part_la_LIBADD = -ltdeprint_management $(LIB_KPARTS) - -noinst_HEADERS = printpart.h - -METASOURCES = AUTO -INCLUDES = $(all_includes) - -# service -myservice_DATA = tdeprint_part.desktop -myservicedir = $(kde_servicesdir) - -# UI file -myrcfile_DATA = tdeprint_part.rc -myrcfiledir = $(kde_datadir)/tdeprint_part - -messages: rc.cpp - $(EXTRACTRC) tdeprint_part.rc >> rc.cpp - $(XGETTEXT) *.cpp -o $(podir)/tdeprint_part.pot diff --git a/kdeprint/kdeprint_part/kdeprint_part.desktop b/kdeprint/kdeprint_part/kdeprint_part.desktop deleted file mode 100644 index 001f8ae39..000000000 --- a/kdeprint/kdeprint_part/kdeprint_part.desktop +++ /dev/null @@ -1,85 +0,0 @@ -[Desktop Entry] -Type=Service -Name=Print Management Tool -Name[af]=Drukker Bestuur Program -Name[ar]=أداة ادارة الطباعة -Name[az]=Çap Edici İdarə Vasitəsi -Name[be]=Кіраўнік друку -Name[bg]=Управление на печата -Name[bn]=মুদ্রণ ম্যানেজমেন্ট টুল -Name[br]=Ostilh mererezh moulañ -Name[bs]=Alat za upravljanje štampom -Name[ca]=Eina per a gestionar la impressió -Name[cs]=Správce tiskáren -Name[csb]=Sprôwianié wëdrëkama -Name[cy]=Erfyn Rheoli Argraffu -Name[da]=Udskriftshåndteringsværktøj -Name[de]=Druckerverwaltung -Name[el]=Εργαλείο διαχείρισης εκτυπώσεων -Name[eo]=Printadministrilo -Name[es]=Herramienta de gestión de la impresión -Name[et]=Trükkimise seadistused -Name[eu]=Inprimaketa kudeatzeko tresna -Name[fa]=ابزار مدیریت چاپ -Name[fi]=Tulostuksenhallinta -Name[fr]=Gestionnaire d'impression -Name[fy]=Helpprogramma foar printbehear -Name[ga]=Uirlis Bhainisteoireacht Priontála -Name[gl]=Ferramenta de Xestión da Impresión -Name[he]=כלי ניהול הדפסה -Name[hi]=प्रिंटर प्रबंधन औज़ार -Name[hr]=Alat za upravljanje ispisom -Name[hu]=Nyomtatáskezelő eszköz -Name[is]=Prentunartól -Name[it]=Strumento di gestione della stampa -Name[ja]=印刷マネージメントツール -Name[ka]=ბეჭდვის მართვა -Name[kk]=Басып шығаруды басқару -Name[km]=ឧបករណ៍​គ្រប់គ្រង​ការ​បោះពុម្ព -Name[ko]=휴대폰 관리 도구 -Name[lo]=ເຄື່ອງມືຈັດການພິມ -Name[lt]=Spausdinimo valdymo įrankis -Name[lv]=Drukas Menedžmenta Rīks -Name[mk]=Алатка за менаџмент на печатење -Name[mn]=Хэвлэгч удирдах хэлбэр -Name[ms]=Cetak Alat Pengurusan -Name[mt]=Għodda għall-immaniġġjar tal-printing -Name[nb]=Verktøy for utskriftsbehandling -Name[nds]=Druckers un Opgaven plegen -Name[ne]=मुद्रण व्यवस्थापन उपकरण -Name[nl]=Hulpprogramma voor printerbeheer -Name[nn]=Utskriftshandsaming -Name[nso]=Sebereka sa Taolo ya Kgatiso -Name[pa]=ਛਾਪਣ (ਪਰਿੰਟ) ਪਰਬੰਧਨ ਸੰਦ -Name[pl]=Zarządzanie wydrukiem -Name[pt]=Ferramenta de Gestão de Impressões -Name[pt_BR]=Ferramenta para Gerenciamento de Impressão -Name[ro]=Administrare tipărire -Name[ru]=Управление печатью -Name[rw]=Gucapa Igikoresho cy'Ubuyobozi -Name[se]=Čálihangieđahalli -Name[sk]=Nástroj na správu tlače -Name[sl]=Orodje za upravljanje tiskanja -Name[sr]=Алат за управљање штампом -Name[sr@Latn]=Alat za upravljanje štampom -Name[sv]=Verktyg för utskriftshantering -Name[ta]=அச்சு மேலாண்மைக் கருவி -Name[tg]=Тафсири мудирияти чоп -Name[th]=เครื่องมือจัดการงานพิมพ์ -Name[tr]=Yazdırma Yönetim Aracı -Name[tt]=Bastıru İdäneñ Qoralı -Name[uk]=Засіб керування друком -Name[uz]=Bosib chiqarishni boshqarish vositasi -Name[uz@cyrillic]=Босиб чиқаришни бошқариш воситаси -Name[ven]=Tshishumiswa tsha vhulanguli ha phirinthara -Name[vi]=Công cụ Quản lý In ấn -Name[wa]=Usteye po manaedjî l' imprimaedje -Name[xh]=Isixhobo Sophatho soshicilelo -Name[zh_CN]=打印管理工具 -Name[zh_TW]=列印管理工具 -Name[zu]=Ithuluzi Lokuphathwa Koshicilelo -MimeType=print/manager -ServiceTypes=Browser/View,KParts/ReadOnlyPart -X-KDE-Library=libtdeprint_part -Icon=printmgr -InitialPreference=12 diff --git a/kdeprint/kdeprint_part/kdeprint_part.rc b/kdeprint/kdeprint_part/kdeprint_part.rc deleted file mode 100644 index a69e76490..000000000 --- a/kdeprint/kdeprint_part/kdeprint_part.rc +++ /dev/null @@ -1,28 +0,0 @@ - - -Print Manager Toolbar - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kdeprint/kdeprint_part/printpart.cpp b/kdeprint/kdeprint_part/printpart.cpp deleted file mode 100644 index 5d5d7b154..000000000 --- a/kdeprint/kdeprint_part/printpart.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "printpart.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef KParts::GenericFactory PrintPartFactory; -K_EXPORT_COMPONENT_FACTORY( libtdeprint_part, PrintPartFactory ) - -PrintPart::PrintPart(TQWidget *parentWidget, const char * /*widgetName*/ , - TQObject *parent, const char *name, - const TQStringList & /*args*/ ) -: KParts::ReadOnlyPart(parent, name) -{ - setInstance(PrintPartFactory::instance()); - instance()->iconLoader()->addAppDir("tdeprint"); - m_extension = new PrintPartExtension(this); - - m_view = new KMMainView(parentWidget, "MainView", actionCollection()); - m_view->setFocusPolicy(TQ_ClickFocus); - m_view->enableToolbar(false); - setWidget(m_view); - - initActions(); -} - -PrintPart::~PrintPart() -{ -} - -KAboutData *PrintPart::createAboutData() -{ - return new KAboutData(I18N_NOOP("tdeprint_part"), I18N_NOOP("A Konqueror Plugin for Print Management"), "0.1"); -} - -bool PrintPart::openFile() -{ - return true; -} - -void PrintPart::initActions() -{ - setXMLFile("tdeprint_part.rc"); -} - -PrintPartExtension::PrintPartExtension(PrintPart *parent) -: KParts::BrowserExtension(parent, "PrintPartExtension") -{ -} - -PrintPartExtension::~PrintPartExtension() -{ -} - -#include "printpart.moc" diff --git a/kdeprint/kdeprint_part/printpart.h b/kdeprint/kdeprint_part/printpart.h deleted file mode 100644 index df543b210..000000000 --- a/kdeprint/kdeprint_part/printpart.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#ifndef PRINTPART_H -#define PRINTPART_H - -#include -#include - -class PrintPartExtension; -class KMMainView; -class KAboutData; - -class PrintPart : public KParts::ReadOnlyPart -{ - Q_OBJECT -public: - PrintPart(TQWidget *parentWidget, const char *widgetName, - TQObject *parent, const char *name, - const TQStringList & ); - virtual ~PrintPart(); - - static KAboutData *createAboutData(); - -protected: - bool openFile(); - void initActions(); - -private: - PrintPartExtension *m_extension; - KMMainView *m_view; -}; - -class PrintPartExtension : public KParts::BrowserExtension -{ - Q_OBJECT - friend class PrintPart; -public: - PrintPartExtension(PrintPart *parent); - virtual ~PrintPartExtension(); -}; - -#endif diff --git a/kdeprint/kdeprintfax/CMakeLists.txt b/kdeprint/kdeprintfax/CMakeLists.txt deleted file mode 100644 index 538719474..000000000 --- a/kdeprint/kdeprintfax/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### other data ################################ - -tde_install_icons( tdeprintfax ) -tde_install_icons( abentry DESTINATION ${DATA_INSTALL_DIR}/tdeprintfax/icons ) -install( FILES tdeprintfax.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) -install( FILES tdeprintfaxui.rc faxfilters DESTINATION ${DATA_INSTALL_DIR}/tdeprintfax ) -install( PROGRAMS anytops DESTINATION ${DATA_INSTALL_DIR}/tdeprintfax ) - - -##### tdeprintfax (executable) ################## - -tde_add_executable( tdeprintfax AUTOMOC - SOURCES - main.cpp tdeprintfax.cpp faxab.cpp faxctrl.cpp - confgeneral.cpp configdlg.cpp conffax.cpp - confsystem.cpp conffilters.cpp filterdlg.cpp - defcmds.cpp - LINK kabc-shared tdeprint-shared - DESTINATION ${BIN_INSTALL_DIR} -) diff --git a/kdeprint/kdeprintfax/Makefile.am b/kdeprint/kdeprintfax/Makefile.am deleted file mode 100644 index cd0d39900..000000000 --- a/kdeprint/kdeprintfax/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -INCLUDES= $(all_includes) - -bin_PROGRAMS = tdeprintfax -tdeprintfax_SOURCES = main.cpp tdeprintfax.cpp faxab.cpp faxctrl.cpp confgeneral.cpp configdlg.cpp \ - conffax.cpp confsystem.cpp conffilters.cpp filterdlg.cpp defcmds.cpp -tdeprintfax_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_KDECORE) $(LIB_KDEUI) -ltdefx $(LIB_KIO) -lktexteditor -tdeprintfax_LDADD = $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDEPRINT) -lkabc -tdeprintfax_METASOURCES = AUTO - -xdg_apps_DATA = tdeprintfax.desktop - -uidir = $(kde_datadir)/tdeprintfax -ui_DATA = tdeprintfaxui.rc faxfilters - -private_SCRIPTS = anytops -privatedir = $(kde_datadir)/tdeprintfax - -messages: rc.cpp - $(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/tdeprintfax.pot - -KDE_ICON = tdeprintfax -pic_ICON = abentry -picdir = $(kde_datadir)/tdeprintfax/icons diff --git a/kdeprint/kdeprintfax/anytops b/kdeprint/kdeprintfax/anytops deleted file mode 100755 index 9718831dc..000000000 --- a/kdeprint/kdeprintfax/anytops +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh - -FAXFILTERS=./faxfilters -MIMETYPE= -PAGE="letter" - -usage() { - echo "Usage: anytops [-m ] [--mime=] [-p ] [--help] " - exit $1 -} - -while true; do - case "$1" in - --help) - usage 0 - ;; - -m) - shift - FAXFILTERS="$1" - shift - ;; - --mime=*) - MIMETYPE=${1#--mime=} - shift - ;; - -p) - shift - PAGE="$1" - shift - ;; - -v) - echo "Anytops v1.0: (c) 2001, Michael Goffioul "; - echo "Small script to convert any file type into PS. Part of tdeprintfax." - exit 0 - ;; - *) - break; - ;; - esac -done - -INFILE=$1 -OUTFILE=$2 - -if [ -z "$INFILE" -o -z "$OUTFILE" -o ! -f "$INFILE" ]; then - usage 1; -fi - -if [ -z "$MIMETYPE" ]; then - MAGIC=$KDEDIR - if [ -z "$MAGIC" ]; then - MAGIC=/usr - fi - MAGIC=$MAGIC/share/mimelnk/magic - - if [ ! -f "$MAGIC" ]; then - echo "KDE magic file not found. Check your installation." - exit 1; - fi - - MIMETYPE=`file -b -m $MAGIC "$INFILE" 2> /dev/null` - MIMETYPE=${MIMETYPE%%;*} -fi - -echo "Mime type: $MIMETYPE" -MIMETYPE_BASE=`echo $MIMETYPE | cut -f 1 -d "/"` -MIMETYPE_TYPE=`echo $MIMETYPE | cut -f 2- -d "/"` - -get_command() { - while read mime command; do - mimebase=`echo $mime | cut -f 1 -d "/"` - mimefile=`echo $mime | cut -f 2- -d "/"` - if test "$mimebase" = "$MIMETYPE_BASE" || test "$mimebase" = "*"; then - if test "$mimefile" = "$MIMETYPE_TYPE" || test "$mimefile" = "*"; then - echo $command - break; - fi - fi -# PATTERN=`echo $MIMETYPE | grep $mime` -# if [ "$PATTERN" = "$MIMETYPE" ]; then -# echo $command -# break; -# fi - done -} - -COMMAND=`cat $FAXFILTERS | get_command` - -if [ -z "$COMMAND" ]; then - echo "$MIMETYPE: file type not handled" - exit 1; -fi - -echo "Command: $COMMAND" - -PAGEUP="`echo $PAGE | cut -c 1 | tr [:lower:] [:upper:]``echo $PAGE | cut -c 2-`" -EXECCOMMAND=`echo $COMMAND | sed -e "s,%in,\"$INFILE\"," -e "s,%out,\"$OUTFILE\"," -e "s,%psl,$PAGE," -e "s,%psu,$PAGEUP,"` -eval "$EXECCOMMAND" diff --git a/kdeprint/kdeprintfax/conffax.cpp b/kdeprint/kdeprintfax/conffax.cpp deleted file mode 100644 index 1f3b8c3c5..000000000 --- a/kdeprint/kdeprintfax/conffax.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "conffax.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -ConfFax::ConfFax(TQWidget *parent, const char *name) -: TQWidget(parent, name) -{ - m_resolution = new TQComboBox(this); - m_resolution->setMinimumHeight(25); - m_pagesize = new TQComboBox(this); - m_pagesize->setMinimumHeight(25); - m_resolution->insertItem(i18n("High (204x196 dpi)")); - m_resolution->insertItem(i18n("Low (204x98 dpi)")); - m_pagesize->insertItem(i18n("A4")); - m_pagesize->insertItem(i18n("Letter")); - m_pagesize->insertItem(i18n("Legal")); - TQLabel *m_resolutionlabel = new TQLabel(i18n("&Resolution:"), this); - m_resolutionlabel->setBuddy(m_resolution); - TQLabel *m_pagesizelabel = new TQLabel(i18n("&Paper size:"), this); - m_pagesizelabel->setBuddy(m_pagesize); - - TQGridLayout *l0 = new TQGridLayout(this, 3, 2, 10, 10); - l0->setColStretch(1, 1); - l0->setRowStretch(2, 1); - l0->addWidget(m_resolutionlabel, 0, 0); - l0->addWidget(m_pagesizelabel, 1, 0); - l0->addWidget(m_resolution, 0, 1); - l0->addWidget(m_pagesize, 1, 1); -} - -void ConfFax::load() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("Fax"); - TQString v = conf->readEntry("Page", KGlobal::locale()->pageSize() == TQPrinter::A4 ? "a4" : "letter"); - if (v == "letter") m_pagesize->setCurrentItem(1); - else if (v == "legal") m_pagesize->setCurrentItem(2); - else m_pagesize->setCurrentItem(0); - v = conf->readEntry("Resolution", "High"); - m_resolution->setCurrentItem((v == "Low" ? 1 : 0)); -} - -void ConfFax::save() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("Fax"); - conf->writeEntry("Resolution", (m_resolution->currentItem() == 0 ? "High" : "Low")); - conf->writeEntry("Page", (m_pagesize->currentItem() == 0 ? "a4" : (m_pagesize->currentItem() == 1 ? "letter" : "legal"))); -} diff --git a/kdeprint/kdeprintfax/conffax.h b/kdeprint/kdeprintfax/conffax.h deleted file mode 100644 index cf76f2b71..000000000 --- a/kdeprint/kdeprintfax/conffax.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef CONFFAX_H -#define CONFFAX_H - -#include - -class TQComboBox; - -class ConfFax : public TQWidget -{ -public: - ConfFax(TQWidget *parent = 0, const char *name = 0); - - void load(); - void save(); - -private: - TQComboBox *m_resolution, *m_pagesize; -}; - -#endif diff --git a/kdeprint/kdeprintfax/conffilters.cpp b/kdeprint/kdeprintfax/conffilters.cpp deleted file mode 100644 index d32f33ea8..000000000 --- a/kdeprint/kdeprintfax/conffilters.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "conffilters.h" -#include "filterdlg.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -ConfFilters::ConfFilters(TQWidget *parent, const char *name) -: TQWidget(parent, name) -{ - m_filters = new KListView(this); - m_filters->addColumn(i18n("Mime Type")); - m_filters->addColumn(i18n("Command")); - m_filters->setFrameStyle(TQFrame::WinPanel|TQFrame::Sunken); - m_filters->setLineWidth(1); - m_filters->setSorting(-1); - m_filters->header()->setStretchEnabled(true, 1); - connect(m_filters, TQT_SIGNAL(doubleClicked(TQListViewItem*)), TQT_SLOT(slotChange())); - - m_add = new TQPushButton(this); - m_add->setPixmap(BarIcon("filenew")); - m_remove = new TQPushButton(this); - m_remove->setIconSet(BarIconSet("remove")); - m_change = new TQPushButton(this); - m_change->setIconSet(BarIconSet("filter")); - m_up = new TQPushButton(this); - m_up->setIconSet(BarIconSet("up")); - m_down = new TQPushButton(this); - m_down->setIconSet(BarIconSet("down")); - connect(m_add, TQT_SIGNAL(clicked()), TQT_SLOT(slotAdd())); - connect(m_change, TQT_SIGNAL(clicked()), TQT_SLOT(slotChange())); - connect(m_remove, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemove())); - connect(m_up, TQT_SIGNAL(clicked()), TQT_SLOT(slotUp())); - connect(m_down, TQT_SIGNAL(clicked()), TQT_SLOT(slotDown())); - TQToolTip::add(m_add, i18n("Add filter")); - TQToolTip::add(m_change, i18n("Modify filter")); - TQToolTip::add(m_remove, i18n("Remove filter")); - TQToolTip::add(m_up, i18n("Move filter up")); - TQToolTip::add(m_down, i18n("Move filter down")); - - TQHBoxLayout *l0 = new TQHBoxLayout(this, 10, 10); - TQVBoxLayout *l1 = new TQVBoxLayout(0, 0, 0); - l0->addWidget(m_filters, 1); - l0->addLayout(l1, 0); - l1->addWidget(m_add); - l1->addWidget(m_change); - l1->addWidget(m_remove); - l1->addSpacing(10); - l1->addWidget(m_up); - l1->addWidget(m_down); - l1->addStretch(1); - updateButton(); - connect(m_filters, TQT_SIGNAL(selectionChanged ()),TQT_SLOT(updateButton())); -} - -void ConfFilters::load() -{ - TQFile f(locate("data","tdeprintfax/faxfilters")); - if (f.exists() && f.open(IO_ReadOnly)) - { - TQTextStream t(&f); - TQString line; - int p(-1); - TQListViewItem *item(0); - while (!t.eof()) - { - line = t.readLine().stripWhiteSpace(); - if ((p=line.find(TQRegExp("\\s"))) != -1) - { - TQString mime(line.left(p)), cmd(line.right(line.length()-p-1).stripWhiteSpace()); - if (!mime.isEmpty() && !cmd.isEmpty()) - item = new TQListViewItem(m_filters, item, mime, cmd); - } - } - } -} - -void ConfFilters::save() -{ - TQListViewItem *item = m_filters->firstChild(); - TQFile f(locateLocal("data","tdeprintfax/faxfilters")); - if (f.open(IO_WriteOnly)) - { - TQTextStream t(&f); - while (item) - { - t << item->text(0) << ' ' << item->text(1) << endl; - item = item->nextSibling(); - } - } -} - -void ConfFilters::slotAdd() -{ - TQString mime, cmd; - if (FilterDlg::doIt(this, &mime, &cmd)) - if (!mime.isEmpty() && !cmd.isEmpty()) - { - new TQListViewItem(m_filters, m_filters->currentItem(), mime, cmd); - updateButton(); - } - else - KMessageBox::error(this, i18n("Empty parameters.")); -} - -void ConfFilters::slotRemove() -{ - TQListViewItem *item = m_filters->currentItem(); - if (item) - delete item; - updateButton(); -} - -void ConfFilters::slotChange() -{ - TQListViewItem *item = m_filters->currentItem(); - if (item) - { - TQString mime(item->text(0)), cmd(item->text(1)); - if (FilterDlg::doIt(this, &mime, &cmd)) - { - item->setText(0, mime); - item->setText(1, cmd); - } - } -} - -void ConfFilters::slotUp() -{ - TQListViewItem *item = m_filters->currentItem(); - if (item && item->itemAbove()) - { - m_filters->moveItem(item, 0, item->itemAbove()->itemAbove()); - m_filters->setCurrentItem(item); - updateButton(); - } -} - -void ConfFilters::slotDown() -{ - TQListViewItem *item = m_filters->currentItem(); - if (item && item->itemBelow()) - { - m_filters->moveItem(item, 0, item->itemBelow()); - m_filters->setCurrentItem(item); - updateButton(); - } -} - -void ConfFilters::updateButton() -{ - TQListViewItem *item = m_filters->currentItem(); - - bool state=item && item->itemBelow(); - m_remove->setEnabled(item); - m_down->setEnabled(state); - state=item && item->itemAbove(); - m_up->setEnabled(state); - m_change->setEnabled(item); -} - -#include "conffilters.moc" diff --git a/kdeprint/kdeprintfax/conffilters.h b/kdeprint/kdeprintfax/conffilters.h deleted file mode 100644 index 871b44bec..000000000 --- a/kdeprint/kdeprintfax/conffilters.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef CONFFILTERS_H -#define CONFFILTERS_H - -#include -#include -class KListView; - -class ConfFilters : public TQWidget -{ - Q_OBJECT -public: - ConfFilters(TQWidget *parent = 0, const char *name = 0); - - void load(); - void save(); -protected slots: - void slotAdd(); - void slotRemove(); - void slotChange(); - void slotUp(); - void slotDown(); - void updateButton(); -private: - KListView *m_filters; - TQPushButton *m_add,*m_remove,*m_up,*m_down,*m_change; -}; - -#endif diff --git a/kdeprint/kdeprintfax/confgeneral.cpp b/kdeprint/kdeprintfax/confgeneral.cpp deleted file mode 100644 index db3ef916a..000000000 --- a/kdeprint/kdeprintfax/confgeneral.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "confgeneral.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -ConfGeneral::ConfGeneral(TQWidget *parent, const char *name) -: TQWidget(parent, name) -{ - m_name = new TQLineEdit(this); - m_company = new TQLineEdit(this); - m_number = new TQLineEdit(this); - TQLabel *m_namelabel = new TQLabel(i18n("&Name:"), this); - m_namelabel->setBuddy(m_name); - TQLabel *m_companylabel = new TQLabel(i18n("&Company:"), this); - m_companylabel->setBuddy(m_company); - TQLabel *m_numberlabel = new TQLabel(i18n("N&umber:"), this); - m_numberlabel->setBuddy(m_number); - KSeparator *sep = new KSeparator( this ); - m_replace_int_char = new TQCheckBox( i18n( "Replace international prefix '+' with:" ), this ); - m_replace_int_char_val = new TQLineEdit( this ); - m_replace_int_char_val->setEnabled( false ); - - connect( m_replace_int_char, TQT_SIGNAL( toggled( bool ) ), m_replace_int_char_val, TQT_SLOT( setEnabled( bool ) ) ); - - TQGridLayout *l0 = new TQGridLayout(this, 6, 2, 10, 10); - l0->setColStretch(1, 1); - l0->setRowStretch(5, 1); - l0->addWidget(m_namelabel, 0, 0); - l0->addWidget(m_companylabel, 1, 0); - l0->addWidget(m_numberlabel, 2, 0); - l0->addWidget(m_name, 0, 1); - l0->addWidget(m_company, 1, 1); - l0->addWidget(m_number, 2, 1); - l0->addMultiCellWidget( sep, 3, 3, 0, 1 ); - TQHBoxLayout *l1 = new TQHBoxLayout( this, 0, 10 ); - l0->addMultiCellLayout( l1, 4, 4, 0, 1 ); - l1->addWidget( m_replace_int_char ); - l1->addWidget( m_replace_int_char_val ); -} - -void ConfGeneral::load() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("Personal"); - m_name->setText(conf->readEntry("Name", getenv("USER"))); - m_number->setText(conf->readEntry("Number")); - m_company->setText(conf->readEntry("Company")); - m_replace_int_char->setChecked( conf->readBoolEntry( "ReplaceIntChar", false ) ); - m_replace_int_char_val->setText( conf->readEntry( "ReplaceIntCharVal" ) ); -} - -void ConfGeneral::save() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("Personal"); - conf->writeEntry("Name", m_name->text()); - conf->writeEntry("Number", m_number->text()); - conf->writeEntry("Company", m_company->text()); - conf->writeEntry( "ReplaceIntChar", m_replace_int_char->isChecked() ); - conf->writeEntry( "ReplaceIntCharVal", m_replace_int_char_val->text() ); -} diff --git a/kdeprint/kdeprintfax/confgeneral.h b/kdeprint/kdeprintfax/confgeneral.h deleted file mode 100644 index 2962b0b0b..000000000 --- a/kdeprint/kdeprintfax/confgeneral.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef CONFGENERAL_H -#define CONFGENERAL_H - -#include - -class TQLineEdit; -class TQCheckBox; - -class ConfGeneral : public TQWidget -{ -public: - ConfGeneral(TQWidget *parent = 0, const char *name = 0); - - void load(); - void save(); - -private: - TQLineEdit *m_name, *m_company, *m_number; - TQCheckBox *m_replace_int_char; - TQLineEdit *m_replace_int_char_val; -}; - -#endif diff --git a/kdeprint/kdeprintfax/configdlg.cpp b/kdeprint/kdeprintfax/configdlg.cpp deleted file mode 100644 index 526b767ff..000000000 --- a/kdeprint/kdeprintfax/configdlg.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "configdlg.h" -#include "confgeneral.h" -#include "conffax.h" -#include "confsystem.h" -#include "conffilters.h" - -#include -#include -#include - -ConfigDlg::ConfigDlg(TQWidget *parent, const char *name) -: KDialogBase(IconList, i18n("Configuration"), Ok|Cancel, Ok, parent, name, true) -{ - TQVBox *page1 = addVBoxPage(i18n("Personal"), i18n("Personal Settings"), DesktopIcon("kdmconfig")); - m_general = new ConfGeneral(page1, "Personal"); - - TQVBox *page2 = addVBoxPage(i18n("Page setup"), i18n("Page Setup"), DesktopIcon("editcopy")); - m_fax = new ConfFax(page2, "Fax"); - - TQVBox *page3 = addVBoxPage(i18n("System"), i18n("Fax System Selection"), DesktopIcon("tdeprintfax")); - m_system = new ConfSystem(page3, "System"); - - TQVBox *page4 = addVBoxPage(i18n("Filters"), i18n("Filters Configuration"), DesktopIcon("filter")); - m_filters = new ConfFilters(page4, "Filters"); - - resize(450, 300); -} - -void ConfigDlg::load() -{ - m_general->load(); - m_fax->load(); - m_system->load(); - m_filters->load(); -} - -void ConfigDlg::save() -{ - m_general->save(); - m_fax->save(); - m_system->save(); - m_filters->save(); -} - -bool ConfigDlg::configure(TQWidget *parent) -{ - ConfigDlg dlg(parent); - dlg.load(); - if (dlg.exec()) - { - dlg.save(); - return true; - } - return false; -} diff --git a/kdeprint/kdeprintfax/configdlg.h b/kdeprint/kdeprintfax/configdlg.h deleted file mode 100644 index 6fabd2011..000000000 --- a/kdeprint/kdeprintfax/configdlg.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef CONFIGDLG_H -#define CONFIGDLG_H - -#include - -class ConfGeneral; -class ConfFax; -class ConfSystem; -class ConfFilters; - -class ConfigDlg : public KDialogBase -{ -public: - static bool configure(TQWidget *parent = 0); - -protected: - ConfigDlg(TQWidget *parent = 0, const char *name = 0); - void load(); - void save(); - -private: - ConfGeneral *m_general; - ConfFax *m_fax; - ConfSystem *m_system; - ConfFilters *m_filters; -}; - -#endif diff --git a/kdeprint/kdeprintfax/confsystem.cpp b/kdeprint/kdeprintfax/confsystem.cpp deleted file mode 100644 index 91c23adb6..000000000 --- a/kdeprint/kdeprintfax/confsystem.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "confsystem.h" -#include "defcmds.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#define EFAX_ID 0 -#define HYLAFAX_ID 1 -#define MGETTY_ID 2 -#define OTHER_ID 3 - -ConfSystem::ConfSystem(TQWidget *parent, const char *name) -: TQWidget(parent, name) -{ - m_system = new TQComboBox(this); - m_system->insertItem("EFax"); - m_system->insertItem("HylaFax"); - m_system->insertItem("Mgetty-sendfax"); - m_system->insertItem( "Other" ); - m_command = new TQLineEdit(this); - TQLabel *syslabel = new TQLabel(i18n("F&ax system:"), this); - TQLabel *cmdlabel = new TQLabel(i18n("Co&mmand:"), this); - syslabel->setBuddy(m_system); - cmdlabel->setBuddy(m_command); - connect(m_system, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSystemChanged(int))); - m_current = 0; - m_system->setCurrentItem(m_current); - - TQWidget *m_dummy1 = new TQWidget(this), *m_dummy2 = new TQWidget(this); - m_server = new TQLineEdit(m_dummy1); - m_device = new TQComboBox(m_dummy2); - TQLabel *srvlabel = new TQLabel(i18n("Fax &server (if any):"), m_dummy1); - TQLabel *devlabel = new TQLabel(i18n("&Fax/Modem device:"), m_dummy2); - srvlabel->setBuddy(m_server); - devlabel->setBuddy(m_device); - m_device->insertItem(i18n("Standard Modem Port")); - for (int i=0; i<10; i++) - m_device->insertItem(TQString(i18n("Serial Port #%1").arg(i))); - m_device->insertItem( i18n( "Other" ) ); - connect( m_device, TQT_SIGNAL( activated( int ) ), TQT_SLOT( slotDeviceChanged( int ) ) ); - m_device_edit = new TQLineEdit( m_dummy2 ); - slotDeviceChanged( 0 ); - - KSeparator *sep = new KSeparator(this); - sep->setMinimumHeight(10); - - TQVBoxLayout *l0 = new TQVBoxLayout(this, 10, 10); - TQGridLayout *l1 = new TQGridLayout(0, 2, 2, 0, 10); - l0->addLayout(TQT_TQLAYOUT(l1)); - l1->setColStretch(1, 1); - l1->addWidget(syslabel, 0, 0); - l1->addWidget(cmdlabel, 1, 0); - l1->addWidget(m_system, 0, 1); - l1->addWidget(m_command, 1, 1); - l0->addWidget(sep); - l0->addWidget(m_dummy1); - l0->addWidget(m_dummy2); - l0->addStretch(1); - TQHBoxLayout *l4 = new TQHBoxLayout(m_dummy1, 0, 10); - l4->addWidget(srvlabel, 0); - l4->addWidget(m_server, 1); - TQGridLayout *l5 = new TQGridLayout( m_dummy2, 2, 2, 0, 10 ); - l5->setColStretch( 1, 1 ); - l5->addWidget(devlabel, 0, 0); - l5->addWidget(m_device, 0, 1); - l5->addWidget( m_device_edit, 1, 1 ); -} - -void ConfSystem::load() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("System"); - m_commands << conf->readPathEntry("EFax", defaultCommand(efax_default_cmd)); - m_commands << conf->readPathEntry("HylaFax", defaultCommand(hylafax_default_cmd)); - m_commands << conf->readPathEntry("Mgetty", defaultCommand(mgetty_default_cmd)); - m_commands << conf->readPathEntry( "Other", TQString::null ); - TQString v = conf->readEntry("System", "efax"); - if (v == "mgetty") m_current = MGETTY_ID; - else if (v == "hylafax") m_current = HYLAFAX_ID; - else if ( v == "other" ) m_current = OTHER_ID; - else m_current = EFAX_ID; - conf->setGroup("Fax"); - m_server->setText(conf->readEntry("Server", getenv("FAXSERVER"))); - v = conf->readEntry("Device", "modem"); - if (v.startsWith("ttyS")) - m_device->setCurrentItem(v.right(v.length()-4).toInt()+1); - else if ( v == "modem" ) - m_device->setCurrentItem(0); - else - { - m_device->setCurrentItem( m_device->count()-1 ); - m_device_edit->setText( "/dev/" + v ); - slotDeviceChanged( m_device->count()-1 ); - } - - m_system->setCurrentItem(m_current); - m_command->setText(m_commands[m_current]); - slotSystemChanged(m_current); -} - -void ConfSystem::save() -{ - m_commands[ m_current ] = m_command->text(); - KConfig *conf = KGlobal::config(); - conf->setGroup("System"); - if (m_commands[EFAX_ID] != defaultCommand(efax_default_cmd)) - conf->writePathEntry("EFax", m_commands[EFAX_ID]); - else - conf->deleteEntry("EFax"); - if (m_commands[HYLAFAX_ID] != defaultCommand(hylafax_default_cmd)) - conf->writePathEntry("HylaFax", m_commands[HYLAFAX_ID]); - else - conf->deleteEntry("HylaFax"); - if (m_commands[MGETTY_ID] != defaultCommand(mgetty_default_cmd)) - conf->writePathEntry("Mgetty", m_commands[MGETTY_ID]); - else - conf->deleteEntry("Mgetty"); - if ( !m_commands[ OTHER_ID ].isEmpty() ) - conf->writeEntry( "Other", m_commands[ OTHER_ID ] ); - else - conf->deleteEntry( "Other" ); - int ID = m_system->currentItem(); - switch (ID) - { - case EFAX_ID: conf->writeEntry("System", "efax"); break; - case HYLAFAX_ID: conf->writeEntry("System", "hylafax"); break; - case MGETTY_ID: conf->writeEntry("System", "mgetty"); break; - case OTHER_ID: conf->writeEntry( "System", "other" ); break; - } - conf->setGroup("Fax"); - if ( m_device->currentItem() != ( m_device->count()-1 ) ) - conf->writeEntry("Device", m_device->currentItem() == 0 ? TQString("modem") : TQString(TQString("ttyS%1").arg(m_device->currentItem()-1))); - else - { - TQString dev = m_device_edit->text(); - // strip leading "/dev/" - if ( dev.startsWith( "/dev/" ) ) - dev = dev.mid( 5 ); - conf->writeEntry( "Device", dev ); - } - if (m_server->text().isEmpty()) - conf->deleteEntry("Server"); - else - conf->writeEntry("Server", m_server->text()); -} - -void ConfSystem::slotSystemChanged(int ID) -{ - m_commands[m_current] = m_command->text(); - m_current = ID; - if (ID == EFAX_ID) - m_device->parentWidget()->show(); - else - m_device->parentWidget()->hide(); - if (ID == HYLAFAX_ID) - m_server->parentWidget()->show(); - else - m_server->parentWidget()->hide(); - m_command->setText(m_commands[m_current]); -} - -void ConfSystem::slotDeviceChanged( int ID ) -{ - if ( ID != ( m_device->count()-1 ) ) - m_device_edit->hide(); - else - m_device_edit->show(); -} - -#include "confsystem.moc" diff --git a/kdeprint/kdeprintfax/confsystem.h b/kdeprint/kdeprintfax/confsystem.h deleted file mode 100644 index 0ce8971f0..000000000 --- a/kdeprint/kdeprintfax/confsystem.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef CONFSYSTEM_H -#define CONFSYSTEM_H - -#include -#include - -class TQLineEdit; -class TQComboBox; - -class ConfSystem : public TQWidget -{ - Q_OBJECT -public: - ConfSystem(TQWidget *parent = 0, const char *name = 0); - - void load(); - void save(); - -protected slots: - void slotSystemChanged(int); - void slotDeviceChanged(int); - -private: - TQComboBox *m_system, *m_device; - TQLineEdit *m_command, *m_server, *m_device_edit; - TQStringList m_commands; - int m_current; -}; - -#endif diff --git a/kdeprint/kdeprintfax/cr16-action-abentry.png b/kdeprint/kdeprintfax/cr16-action-abentry.png deleted file mode 100644 index b6b1011f3..000000000 Binary files a/kdeprint/kdeprintfax/cr16-action-abentry.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/defcmds.cpp b/kdeprint/kdeprintfax/defcmds.cpp deleted file mode 100644 index a2d58c17e..000000000 --- a/kdeprint/kdeprintfax/defcmds.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "defcmds.h" - -#include -#include - -TQString defaultCommand(const TQString& cmd) -{ - TQString str(cmd); - TQRegExp r("%exe_(\\w+)"); - int p(-1); - if ((p=r.search(str)) != -1) - { - TQString exe = KStandardDirs::findExe(r.cap(1)); - if (exe.isEmpty()) - exe = "/usr/bin/"+r.cap(1); - str.replace(p, r.matchedLength(), exe); - } - return str; -} diff --git a/kdeprint/kdeprintfax/defcmds.h b/kdeprint/kdeprintfax/defcmds.h deleted file mode 100644 index 90d67b83f..000000000 --- a/kdeprint/kdeprintfax/defcmds.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef DEFCMDS_H -#define DEFCMDS_H - -#include - -#define efax_default_cmd "%exe_fax %user_{NAME=\"@@\"} %dev_{DEV=@@} PAGE=%page %from_{FROM=\"@@\"} %res_{?\?-l} send %number %files" -#define hylafax_default_cmd "%exe_sendfax %cover_{?\?-n} %server_h %res_{-m?\?-l} %subject_r %time_a %enterprise_x %comment_c %email_f %from_W %page_s -d %name_{@@@}%number %files" -#define mgetty_default_cmd "%exe_faxspool %user_F %email_f %name_D %time_t %number %files %res_{?\?-n} %cover_{?\?-C -}" - -TQString defaultCommand(const TQString& cmd); - -#endif diff --git a/kdeprint/kdeprintfax/faxab.cpp b/kdeprint/kdeprintfax/faxab.cpp deleted file mode 100644 index ad50ac9fb..000000000 --- a/kdeprint/kdeprintfax/faxab.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "faxab.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -FaxAB::FaxAB(TQWidget *parent, const char *name) -: KDialog(parent, name, true) -{ - m_list = new KListView( this ); - m_list->addColumn( i18n( "Name" ) ); - m_list->addColumn( i18n( "Fax Number" ) ); - m_list->header()->setStretchEnabled( true, 0 ); - TQLabel *m_listlabel = new TQLabel(i18n("Entries:"), this); - m_ok = new KPushButton(KStdGuiItem::ok(), this); - TQPushButton *m_cancel = new KPushButton(KStdGuiItem::cancel(), this); - TQPushButton *m_ab = new KPushButton(KGuiItem(i18n("&Edit Addressbook"), "contents"), this); - connect(m_ok, TQT_SIGNAL(clicked()), TQT_SLOT(accept())); - connect(m_cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject())); - connect(m_ab, TQT_SIGNAL(clicked()), TQT_SLOT(slotEditAb())); - m_ok->setDefault(true); - - TQVBoxLayout *l0 = new TQVBoxLayout(this, 10, 10); - l0->addWidget( m_listlabel ); - l0->addWidget( m_list ); - TQHBoxLayout *l2 = new TQHBoxLayout(0, 0, 10); - l0->addLayout(l2, 0); - l2->addWidget(m_ab, 0); - l2->addStretch(1); - l2->addWidget(m_ok, 0); - l2->addWidget(m_cancel, 0); - - KConfig *conf = KGlobal::config(); - conf->setGroup( "General" ); - TQSize defsize( 400, 200 ); - resize( conf->readSizeEntry( "ABSize", &defsize ) ); - - initialize(); - connect(KABC::StdAddressBook::self(), TQT_SIGNAL(addressBookChanged(AddressBook*)), TQT_SLOT(slotAbChanged(AddressBook*))); -} - -FaxAB::~FaxAB() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup( "General" ); - conf->writeEntry( "ABSize", size() ); -} - -void FaxAB::initialize() -{ - m_entries.clear(); - m_list->clear(); - - KABC::AddressBook *bk = KABC::StdAddressBook::self(); - for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it) - { - KABC::PhoneNumber::List numbers = (*it).phoneNumbers(); - KABC::PhoneNumber::List faxNumbers; - for (TQValueList::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit) - { - if (((*nit).type() & KABC::PhoneNumber::Fax) && !(*nit).number().isEmpty()) - faxNumbers << ( *nit ); - } - if (faxNumbers.count() > 0) - { - for ( KABC::PhoneNumber::List::ConstIterator nit = faxNumbers.begin(); nit != faxNumbers.end(); ++nit ) - { - FaxABEntry entry; - entry.m_number = ( *nit ); - entry.m_enterprise = ( *it ).organization(); - if ( !( *it ).formattedName().isEmpty() ) - entry.m_name = ( *it ).formattedName(); - else - { - TQString key = ( *it ).familyName(); - if ( !( *it ).givenName().isEmpty() ) - { - if ( !key.isEmpty() ) - key.append( " " ); - key.append( ( *it ).givenName() ); - } - entry.m_name = key; - } - entry.m_name += ( " (" + ( *nit ).typeLabel() + ")" ); - m_entries[ entry.m_name ] = entry; - } - } - } - - if (m_entries.count() > 0) - { - for (TQMap::ConstIterator it=m_entries.begin(); it!=m_entries.end(); ++it) - { - TQCheckListItem *item = new TQCheckListItem( m_list, it.key(), TQCheckListItem::CheckBox ); - item->setText( 1, ( *it ).m_number.number() ); - item->setText( 2, ( *it ).m_enterprise ); - } - m_list->sort(); - m_ok->setEnabled(true); - } - else - m_ok->setDisabled(true); -} - -void FaxAB::slotEditAb() -{ - KRun::runCommand("kaddressbook"); -} - -void FaxAB::slotAbChanged(AddressBook*) -{ - initialize(); -} - -bool FaxAB::getEntry(TQStringList& number, TQStringList& name, TQStringList& enterprise, TQWidget *parent) -{ - FaxAB kab(parent); - if (!kab.isValid()) - { - KMessageBox::error(parent, i18n("No fax number found in your address book.")); - return false; - } - if (kab.exec()) - { - TQListViewItemIterator it( kab.m_list, TQListViewItemIterator::Checked ); - while ( it.current() ) - { - number << it.current()->text( 1 ); - name << it.current()->text( 0 ); - enterprise << it.current()->text( 2 ); - ++it; - } - /* - number = kab.m_fax->currentText(); - name = kab.m_name->currentText(); - if (kab.m_entries.contains(name)) - { - enterprise = kab.m_entries[name][0]; - } - */ - return true; - } - - return false; -} - -bool FaxAB::getEntryByNumber(const TQString& number, TQString& name, TQString& enterprise) -{ - KABC::AddressBook *bk = KABC::StdAddressBook::self(); - for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it) - { - KABC::PhoneNumber::List numbers = (*it).phoneNumbers(); - TQStringList filteredNumbers; - for (TQValueList::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit) - { - if (((*nit).type() & KABC::PhoneNumber::Fax) ) - { - TQString strippedNumber; - for (uint i = 0; i < (*nit).number().length(); ++i) - if ((*nit).number()[i].isDigit() || ( *nit ).number()[ i ] == '+') - strippedNumber.append((*nit).number()[i]); - - if ( strippedNumber == number) - { - enterprise = (*it).organization(); - name = (*it).formattedName(); - return true; - } - } - } - } - - return false; -} - -bool FaxAB::isValid() -{ - return true; - //return (m_name->count() > 0); -} - -#include "faxab.moc" diff --git a/kdeprint/kdeprintfax/faxab.h b/kdeprint/kdeprintfax/faxab.h deleted file mode 100644 index 8b50c204a..000000000 --- a/kdeprint/kdeprintfax/faxab.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef FAXAB_H -#define FAXAB_H - -#include -#include -#include -#include - -class KListView; -class AddressBook; -class TQPushButton; - -class FaxAB : public KDialog -{ - Q_OBJECT -public: - FaxAB(TQWidget *parent = 0, const char *name = 0); - ~FaxAB(); - bool isValid(); - - static bool getEntry(TQStringList& number, TQStringList& name, TQStringList& enterprise, TQWidget *parent = 0); - static bool getEntryByNumber(const TQString& number, TQString& name, TQString& enterprise); - -protected slots: - void slotEditAb(); - void slotAbChanged(AddressBook*); - -protected: - void initialize(); - -private: - struct FaxABEntry - { - TQString m_name; - KABC::PhoneNumber m_number; - TQString m_enterprise; - }; - - KListView* m_list; - TQMap m_entries; - TQPushButton* m_ok; -}; - -#endif diff --git a/kdeprint/kdeprintfax/faxctrl.cpp b/kdeprint/kdeprintfax/faxctrl.cpp deleted file mode 100644 index c1b1b1a0d..000000000 --- a/kdeprint/kdeprintfax/faxctrl.cpp +++ /dev/null @@ -1,669 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "faxctrl.h" -#include "tdeprintfax.h" -#include "defcmds.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#define quote(x) KProcess::quote(x) - -/** \brief Return a string for the page size. - * - * @param size the page size, which is actually of type @c TQPrinter::PageSize - * @return a pointer to a static string for the name of the page size. - */ -char const* pageSizeText(int size) -{ - switch(size) - { - case TQPrinter::A4: return "a4"; - case TQPrinter::Legal: return "legal"; - case TQPrinter::Letter: return "letter"; - default: return "letter"; - } -} - -/** \brief Return the default page size. - */ -static TQString pageSize() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("Fax"); - return conf->readEntry("Page", pageSizeText(KGlobal::locale()->pageSize())); -} - -static TQString stripNumber( const TQString& s ) -{ - KConfig *conf = KGlobal::config(); - conf->setGroup( "Personal" ); - - // removes any non-numeric character, except ('+','*','#') (hope it's supported by faxing tools) - TQString strip_s = s; - strip_s.replace( TQRegExp( "[^\\d+*#]" ), "" ); - if ( strip_s.find( '+' ) != -1 && conf->readBoolEntry( "ReplaceIntChar", false ) ) - strip_s.replace( "+", conf->readEntry( "ReplaceIntCharVal" ) ); - return strip_s; -} - -static TQString tagList( int n, ... ) -{ - TQString t; - - va_list ap; - va_start( ap, n ); - for ( int i=0; i%name_{iftrue??iffalse}. Either - * @em iftrue or @em iffalse can be empty (or both, but that would - * be silly). For example, if the fax software uses the - * option @c -l for low resolution, you might use %res_{??-l}, - * and if it uses high resolution, use %res_{-h??}. As an - * abbreviation, omit the trailing ?, e.g., %res_{-h}. - * - * By the way, when using multiple, adjacent question marks, - * always be careful about inadvertently using trigraphs. - * Always escape the second and subsequent question marks, to be safe. - * I suppose question marks are not the best string to use, - * but I think they work well for the end-user. - * - * @param match the string to process - * @param value the Boolean value to control the processing - * @return the new value of the tag - */ -static TQString processTag( const TQString& match, bool value) -{ - TQString v; - int p = match.find( '_' ); - if ( p != -1 && match[ p+1 ] == '{' ) - { - // Find the ?? that separates the iftrue from the iffalse parts. - int q = match.find( "?\?", p+2 ); - if ( q == -1 ) - { - // No iffalse part - if (value) - v = match.mid( p+2 ); - // else value is false, so leave v empty. - } - else if ( value ) - // Extract only the iftrue part - v = match.mid( p+2, q-p-2 ); - else - // Extract only the iffalse part - v = match.mid( q+2, match.length()-q-3 ); - } - // Else the string is malformed: no _ or no { after the _ - // In either case, there isn't much the program can do, - // so just leave the result string empty. - - return v; -} - -static TQString processTag( const TQString& match, const TQString& value ) -{ - TQString v; - int p = match.find( '_' ); - if ( p != -1 ) - { - if ( value.isEmpty() ) - v = ""; - else - { - if ( match[ p+1 ] == '{' ) - { - v = match.mid( p+2, match.length()-p-3 ); - v.replace( "@@", quote( value ) ); - } - else - v = ( "-" + match.mid( p+1 ) + " " + quote( value ) ); - } - } - else - v = quote( value ); - return v; -} - -static bool isTag( const TQString& m, const TQString& t ) -{ - return ( m == t || m.startsWith( t+"_" ) ); -} - -static TQString replaceTags( const TQString& s, const TQString& tags, KdeprintFax *fax = NULL, const KdeprintFax::FaxItem& item = KdeprintFax::FaxItem() ) -{ - // unquote variables (they will be replaced with quoted values later) - - TQValueStack stack; - KConfig *conf = KGlobal::config(); - - TQString cmd = s; - - bool issinglequote=false; - bool isdoublequote=false; - TQRegExp re_noquote("(\\$\\(|\\)|\\(|\"|'|\\\\|`|"+tags+")"); - TQRegExp re_singlequote("('|"+tags+")"); - TQRegExp re_doublequote("(\\$\\(|\"|\\\\|`|"+tags+")"); - for ( int i = re_noquote.search(cmd); - i != -1; - i = (issinglequote?re_singlequote.search(cmd,i) - :isdoublequote?re_doublequote.search(cmd,i) - :re_noquote.search(cmd,i)) - ) - { - if (cmd[i]=='(') // (...) - { - // assert(isdoublequote == false) - stack.push(isdoublequote); - i++; - } - else if (cmd[i]=='$') // $(...) - { - stack.push(isdoublequote); - isdoublequote = false; - i+=2; - } - else if (cmd[i]==')') // $(...) or (...) - { - if (!stack.isEmpty()) - isdoublequote = stack.pop(); - else - qWarning("Parse error."); - i++; - } - else if (cmd[i]=='\'') - { - issinglequote=!issinglequote; - i++; - } - else if (cmd[i]=='"') - { - isdoublequote=!isdoublequote; - i++; - } - else if (cmd[i]=='\\') - i+=2; - else if (cmd[i]=='`') - { - // Replace all `...` with safer $(...) - cmd.replace (i, 1, "$("); - TQRegExp re_backticks("(`|\\\\`|\\\\\\\\|\\\\\\$)"); - for ( int i2=re_backticks.search(cmd,i+2); - i2!=-1; - i2=re_backticks.search(cmd,i2) - ) - { - if (cmd[i2] == '`') - { - cmd.replace (i2, 1, ")"); - i2=cmd.length(); // leave loop - } - else - { // remove backslash and ignore following character - cmd.remove (i2, 1); - i2++; - } - } - // Leave i unchanged! We need to process "$(" - } - else - { - TQString match, v; - - // get match - if (issinglequote) - match=re_singlequote.cap(); - else if (isdoublequote) - match=re_doublequote.cap(); - else - match=re_noquote.cap(); - - // substitute %variables - // settings - if ( isTag( match, "%dev" ) ) - { - conf->setGroup("Fax"); - v = processTag( match, conf->readEntry("Device", "modem") ); - - } - else if (isTag( match, "%server" )) - { - conf->setGroup( "Fax" ); - v = conf->readEntry("Server"); - if (v.isEmpty()) - v = getenv("FAXSERVER"); - if (v.isEmpty()) - v = TQString::tqfromLatin1("localhost"); - v = processTag( match, v ); - } - else if (isTag( match, "%page" )) - { - conf->setGroup( "Fax" ); - v = processTag( match, pageSize() ); - } - else if (isTag( match, "%res" )) - { - conf->setGroup( "Fax" ); - v = processTag(match, conf->readEntry("Resolution", "High") == "High"); - } - else if (isTag( match, "%user" )) - { - conf->setGroup("Personal"); - v = processTag(match, conf->readEntry("Name", getenv("USER"))); - } - else if (isTag( match, "%from" )) - { - conf->setGroup( "Personal" ); - v = processTag(match, conf->readEntry("Number")); - } - else if (isTag( match, "%email" )) - { - KEMailSettings e; - v = processTag(match, e.getSetting(KEMailSettings::EmailAddress)); - } - // arguments - else if (isTag( match, "%number" )) - v = processTag( match, stripNumber( item.number) ); - else if (isTag( match, "%rawnumber" )) - v = processTag( match, item.number ); - else if (isTag( match, "%name" )) - v = processTag(match, item.name); - else if (isTag( match, "%comment" )) - v = processTag(match, fax->comment()); - else if (isTag( match, "%enterprise" )) - v = processTag(match, item.enterprise); - else if ( isTag( match, "%time" ) ) - v = processTag( match, fax->time() ); - else if ( isTag( match, "%subject" ) ) - v = processTag( match, fax->subject() ); - else if (isTag( match, "%cover" )) - v = processTag(match, fax->cover()); - - // %variable inside of a quote? - if (isdoublequote) - v='"'+v+'"'; - else if (issinglequote) - v="'"+v+"'"; - - cmd.replace (i, match.length(), v); - i+=v.length(); - } - } - - return cmd; -} - -FaxCtrl::FaxCtrl(TQWidget *parent, const char *name) -: TQObject(parent, name) -{ - m_process = new KProcess(); - m_process->setUseShell(true); - connect(m_process, TQT_SIGNAL(receivedStdout(KProcess*,char*,int)), TQT_SLOT(slotReceivedStdout(KProcess*,char*,int))); - connect(m_process, TQT_SIGNAL(receivedStderr(KProcess*,char*,int)), TQT_SLOT(slotReceivedStdout(KProcess*,char*,int))); - connect(m_process, TQT_SIGNAL(processExited(KProcess*)), TQT_SLOT(slotProcessExited(KProcess*))); - connect(this, TQT_SIGNAL(faxSent(bool)), TQT_SLOT(cleanTempFiles())); - m_logview = 0; -} - -FaxCtrl::~FaxCtrl() -{ - slotCloseLog(); - delete m_process; -} - -bool FaxCtrl::send(KdeprintFax *f) -{ - m_command = faxCommand(); - if (m_command.isEmpty()) - return false; - - // replace tags common to all fax "operations" - m_command = replaceTags( m_command, tagList( 11, "%dev", "%server", "%page", "%res", "%user", "%from", "%email", "%comment", "%time", "%subject", "%cover" ), f ); - - m_log = TQString::null; - m_filteredfiles.clear(); - cleanTempFiles(); - m_files = f->files(); - m_faxlist = f->faxList(); - - addLogTitle( i18n( "Converting input files to PostScript" ) ); - filter(); - - return true; -} - -void FaxCtrl::slotReceivedStdout(KProcess*, char *buffer, int len) -{ - TQCString str(buffer, len); - kdDebug() << "Received stdout: " << str << endl; - addLog(TQString(str)); -} - -void FaxCtrl::slotProcessExited(KProcess*) -{ - // we exited a process: if there's still entries in m_files, this was a filter - // process, else this was the fax process - bool ok = (m_process->normalExit() && ((m_process->exitStatus() & (m_files.count() > 0 ? 0x1 : 0xFFFFFFFF)) == 0)); - if ( ok ) - { - if ( m_files.count() > 0 ) - { - // remove first element - m_files.remove(m_files.begin()); - if (m_files.count() > 0) - filter(); - else - sendFax(); - } - else if ( !m_faxlist.isEmpty() ) - sendFax(); - else - faxSent( true ); - } - else - { - emit faxSent(false); - } -} - -TQString FaxCtrl::faxCommand() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("System"); - TQString sys = conf->readPathEntry("System", "efax"); - TQString cmd; - if (sys == "hylafax") - cmd = conf->readPathEntry("HylaFax", hylafax_default_cmd); - else if (sys == "mgetty") - cmd = conf->readPathEntry("Mgetty", mgetty_default_cmd); - else if ( sys == "other" ) - cmd = conf->readPathEntry( "Other", TQString::null ); - else - cmd = conf->readPathEntry("EFax", efax_default_cmd); - if (cmd.startsWith("%exe_")) - cmd = defaultCommand(cmd); - return cmd; -} - -void FaxCtrl::sendFax() -{ - if ( m_command.find( "%files" ) != -1 ) - { - // replace %files tag - TQString filestr; - for (TQStringList::ConstIterator it=m_filteredfiles.begin(); it!=m_filteredfiles.end(); ++it) - filestr += (quote(*it)+" "); - m_command.replace("%files", filestr); - } - - if ( !m_faxlist.isEmpty() ) - { - KdeprintFax::FaxItem item = m_faxlist.first(); - m_faxlist.remove(m_faxlist.begin()); - - addLogTitle( i18n( "Sending fax to %1 (%2)" ).arg( item.number ).arg( item.name ) ); - - TQString cmd = replaceTags( m_command, tagList( 4, "%number", "%name", "%enterprise", "%rawnumber" ), NULL, item ); - m_process->clearArguments(); - *m_process << cmd; - addLog(i18n("Sending to fax using: %1").arg(cmd)); - if (!m_process->start(KProcess::NotifyOnExit, KProcess::AllOutput)) - emit faxSent(false); - else - emit message(i18n("Sending fax to %1...").arg( item.number )); - } -} - -void FaxCtrl::filter() -{ - if (m_files.count() > 0) - { - TQString mimeType = KMimeType::findByURL(KURL(m_files[0]), 0, true)->name(); - if (mimeType == "application/postscript" || mimeType == "image/tiff") - { - emit message(i18n("Skipping %1...").arg(m_files[0])); - m_filteredfiles.prepend(m_files[0]); - m_files.remove(m_files.begin()); - filter(); - } - else - { - TQString tmp = locateLocal("tmp","tdeprintfax_") + kapp->randomString(8); - m_filteredfiles.prepend(tmp); - m_tempfiles.append(tmp); - m_process->clearArguments(); - *m_process << locate("data","tdeprintfax/anytops") << "-m" << KProcess::quote(locate("data","tdeprintfax/faxfilters")) - << TQString::tqfromLatin1("--mime=%1").arg(mimeType) - << "-p" << pageSize() - << KProcess::quote(m_files[0]) << KProcess::quote(tmp); - if (!m_process->start(KProcess::NotifyOnExit, KProcess::AllOutput)) - emit faxSent(false); - else - emit message(i18n("Filtering %1...").arg(m_files[0])); - } - } - else - { - sendFax(); - } -} - -bool FaxCtrl::abort() -{ - if (m_process->isRunning()) - return m_process->kill(); - else - return false; -} - -void FaxCtrl::viewLog(TQWidget *) -{ - if (!m_logview) - { - TQWidget *topView = new TQWidget(0, "LogView", (WFlags)(WType_TopLevel|WStyle_DialogBorder|WDestructiveClose)); - m_logview = new KTextEdit(topView); - m_logview->setTextFormat( TQt::LogText ); - m_logview->setWordWrap( TQTextEdit::WidgetWidth ); - m_logview->setPaper( Qt::white ); - //m_logview->setReadOnly(true); - //m_logview->setWordWrap(TQTextEdit::NoWrap); - TQPushButton *m_clear = new KPushButton(KStdGuiItem::clear(), topView); - TQPushButton *m_close = new KPushButton(KStdGuiItem::close(), topView); - TQPushButton *m_print = new KPushButton( KStdGuiItem::print(), topView ); - TQPushButton *m_save = new KPushButton( KStdGuiItem::saveAs(), topView ); - m_close->setDefault(true); - connect(m_clear, TQT_SIGNAL(clicked()), TQT_SLOT(slotClearLog())); - connect(m_close, TQT_SIGNAL(clicked()), TQT_SLOT(slotCloseLog())); - connect(m_logview, TQT_SIGNAL(destroyed()), TQT_SLOT(slotCloseLog())); - connect( m_print, TQT_SIGNAL( clicked() ), TQT_SLOT( slotPrintLog() ) ); - connect( m_save, TQT_SIGNAL( clicked() ), TQT_SLOT( slotSaveLog() ) ); - - TQVBoxLayout *l0 = new TQVBoxLayout(topView, 10, 10); - l0->addWidget(m_logview); - TQHBoxLayout *l1 = new TQHBoxLayout(0, 0, 10); - l0->addLayout(l1); - l1->addStretch(1); - l1->addWidget( m_save ); - l1->addWidget( m_print ); - l1->addWidget(m_clear); - l1->addWidget(m_close); - - m_logview->setText(m_log); - - topView->resize(450, 350); - topView->show(); - } - else - { - KWin::activateWindow(m_logview->parentWidget()->winId()); - } -} - -void FaxCtrl::addLogTitle( const TQString& s ) -{ - TQString t( s ); - t.prepend( '\n' ).append( '\n' ); - addLog( t, true ); -} - -void FaxCtrl::addLog(const TQString& s, bool isTitle) -{ - TQString t = TQStyleSheet::escape(s); - if ( isTitle ) - t.prepend( "" ).append( "" ); - m_log.append( t + '\n' ); - if (m_logview) - m_logview->append(t); -} - -TQString FaxCtrl::faxSystem() -{ - KConfig *conf = KGlobal::config(); - conf->setGroup("System"); - TQString s = conf->readEntry("System", "efax"); - s[0] = s[0].upper(); - return s; -} - -void FaxCtrl::cleanTempFiles() -{ - for (TQStringList::ConstIterator it=m_tempfiles.begin(); it!=m_tempfiles.end(); ++it) - TQFile::remove(*it); - m_tempfiles.clear(); -} - -void FaxCtrl::slotClearLog() -{ - m_log = TQString::null; - if (m_logview) - m_logview->clear(); -} - -void FaxCtrl::slotCloseLog() -{ - const TQObject *obj = TQT_TQOBJECT_CONST(sender()); - if (m_logview) - { - TQTextEdit *view = m_logview; - m_logview = 0; - if (obj && obj->inherits(TQPUSHBUTTON_OBJECT_NAME_STRING)) - delete view->parentWidget(); -kdDebug() << "slotClose()" << endl; - } -} - -void FaxCtrl::slotPrintLog() -{ - if ( m_logview ) - { - KPrinter printer; - printer.setDocName( i18n( "Fax log" ) ); - printer.setDocFileName( "faxlog" ); - if ( printer.setup( m_logview->tqtopLevelWidget(), i18n( "Fax Log" ) ) ) - { - TQPainter painter( &printer ); - TQPaintDeviceMetrics metric( &printer ); - TQRect body( 0, 0, metric.width(), metric.height() ), view( body ); - //TQString txt = m_logview->text(); - TQString txt = m_log; - - txt.replace( '\n', "
" ); - txt.prepend( "

" + i18n( "KDEPrint Fax Tool Log" ) + "

" ); - - kdDebug() << "Log: " << txt << endl; - TQSimpleRichText richText( txt, m_logview->font() ); - - richText.setWidth( &painter, body.width() ); - do - { - richText.draw( &painter, body.left(), body.top(), view, m_logview->tqcolorGroup() ); - view.moveBy( 0, body.height() ); - painter.translate( 0, -body.height() ); - if ( view.top() >= richText.height() ) - break; - printer.newPage(); - } while ( true ); - } - } -} - -void FaxCtrl::slotSaveLog() -{ - if ( m_logview ) - { - TQString filename = KFileDialog::getSaveFileName( TQString::null, TQString::null, m_logview ); - if ( !filename.isEmpty() ) - { - TQFile f( filename ); - if ( f.open( IO_WriteOnly ) ) - { - TQTextStream t( &f ); - t << i18n( "KDEPrint Fax Tool Log" ) << endl; - t << m_logview->text() << endl; - f.close(); - } - else - KMessageBox::error( m_logview, i18n( "Cannot open file for writing." ) ); - } - } -} - -#include "faxctrl.moc" diff --git a/kdeprint/kdeprintfax/faxctrl.h b/kdeprint/kdeprintfax/faxctrl.h deleted file mode 100644 index a7e16a850..000000000 --- a/kdeprint/kdeprintfax/faxctrl.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef FAXCTRL_H -#define FAXCTRL_H - -#include -#include -#include - -#include "tdeprintfax.h" - -class KProcess; -class TQTextEdit; - -class FaxCtrl : public TQObject -{ - Q_OBJECT -public: - FaxCtrl(TQWidget *parent = 0, const char *name = 0); - ~FaxCtrl(); - - bool send(KdeprintFax *f); - bool abort(); - void viewLog(TQWidget *parent = 0); - TQString faxSystem(); - TQString faxCommand(); - -signals: - void message(const TQString&); - void faxSent(bool); - -protected slots: - void slotReceivedStdout(KProcess*, char*, int); - void slotProcessExited(KProcess*); - void cleanTempFiles(); - void slotClearLog(); - void slotCloseLog(); - void slotPrintLog(); - void slotSaveLog(); - -protected: - void filter(); - void sendFax(); - void addLog(const TQString&, bool = false); - void addLogTitle( const TQString& ); - -private: - KProcess *m_process; - TQString m_log, m_command; - TQStringList m_files, m_filteredfiles, m_tempfiles; - TQTextEdit *m_logview; - KdeprintFax::FaxItemList m_faxlist; -}; - -#endif diff --git a/kdeprint/kdeprintfax/faxfilters b/kdeprint/kdeprintfax/faxfilters deleted file mode 100644 index 73e96a14e..000000000 --- a/kdeprint/kdeprintfax/faxfilters +++ /dev/null @@ -1,3 +0,0 @@ -text/* enscript -M %psu -E -p %out %in -image/* imagetops -gray -noturn %in > %out -*/* cat %in > %out diff --git a/kdeprint/kdeprintfax/filterdlg.cpp b/kdeprint/kdeprintfax/filterdlg.cpp deleted file mode 100644 index 0324863bc..000000000 --- a/kdeprint/kdeprintfax/filterdlg.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "filterdlg.h" -#include "filterdlg.moc" - -#include -#include -#include - -#include - -FilterDlg::FilterDlg(TQWidget *parent, const char *name) -: KDialogBase(parent, name, true, i18n("Filter Parameters"), Ok|Cancel, Ok) -{ - TQWidget *w = new TQWidget(this); - - m_mime = new TQLineEdit(w); - m_cmd = new TQLineEdit(w); - TQLabel *m_mimelabel = new TQLabel(i18n("MIME type:"), w); - TQLabel *m_cmdlabel = new TQLabel(i18n("Command:"), w); - - TQGridLayout *l0 = new TQGridLayout(w, 2, 2, 10, 5); - l0->setColStretch(1, 1); - l0->addWidget(m_mimelabel, 0, 0); - l0->addWidget(m_cmdlabel, 1, 0); - l0->addWidget(m_mime, 0, 1); - l0->addWidget(m_cmd, 1, 1); - - setMainWidget(w); - m_mime->setFocus(); - resize(300, 100); - connect(m_mime, TQT_SIGNAL(textChanged ( const TQString & )),this, TQT_SLOT(slotTextFilterChanged())); - connect(m_cmd, TQT_SIGNAL(textChanged ( const TQString & )),this, TQT_SLOT(slotTextFilterChanged())); - slotTextFilterChanged(); -} - -void FilterDlg::slotTextFilterChanged( ) -{ - enableButtonOK(!m_mime->text().isEmpty() && !m_cmd->text().isEmpty()); -} - -bool FilterDlg::doIt(TQWidget *parent, TQString *mime, TQString *cmd) -{ - FilterDlg dlg(parent); - if (mime) dlg.m_mime->setText(*mime); - if (cmd) dlg.m_cmd->setText(*cmd); - if (dlg.exec()) - { - if (mime) *mime = dlg.m_mime->text(); - if (cmd) *cmd = dlg.m_cmd->text(); - return true; - } - return false; -} diff --git a/kdeprint/kdeprintfax/filterdlg.h b/kdeprint/kdeprintfax/filterdlg.h deleted file mode 100644 index ab4fd0406..000000000 --- a/kdeprint/kdeprintfax/filterdlg.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef FILTERDLG_H -#define FILTERDLG_H - -#include - -class TQLineEdit; - -class FilterDlg : public KDialogBase -{ - Q_OBJECT -public: - FilterDlg(TQWidget *parent = 0, const char *name = 0); - - static bool doIt(TQWidget *parent = 0, TQString* mime = 0, TQString *cmd = 0); -protected slots: - void slotTextFilterChanged(); -private: - TQLineEdit *m_mime, *m_cmd; -}; - -#endif diff --git a/kdeprint/kdeprintfax/hi128-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi128-app-kdeprintfax.png deleted file mode 100644 index ad29adba7..000000000 Binary files a/kdeprint/kdeprintfax/hi128-app-kdeprintfax.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/hi16-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi16-app-kdeprintfax.png deleted file mode 100644 index bb676f8b7..000000000 Binary files a/kdeprint/kdeprintfax/hi16-app-kdeprintfax.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/hi22-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi22-app-kdeprintfax.png deleted file mode 100644 index 90fc64b0b..000000000 Binary files a/kdeprint/kdeprintfax/hi22-app-kdeprintfax.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/hi32-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi32-app-kdeprintfax.png deleted file mode 100644 index 7330eb41f..000000000 Binary files a/kdeprint/kdeprintfax/hi32-app-kdeprintfax.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/hi48-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi48-app-kdeprintfax.png deleted file mode 100644 index 3f58c3695..000000000 Binary files a/kdeprint/kdeprintfax/hi48-app-kdeprintfax.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/hi64-app-kdeprintfax.png b/kdeprint/kdeprintfax/hi64-app-kdeprintfax.png deleted file mode 100644 index 47e156d5f..000000000 Binary files a/kdeprint/kdeprintfax/hi64-app-kdeprintfax.png and /dev/null differ diff --git a/kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz b/kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz deleted file mode 100644 index f46fd4401..000000000 Binary files a/kdeprint/kdeprintfax/hisc-app-kdeprintfax.svgz and /dev/null differ diff --git a/kdeprint/kdeprintfax/kdeprintfax.cpp b/kdeprint/kdeprintfax/kdeprintfax.cpp deleted file mode 100644 index 24ad58a0e..000000000 --- a/kdeprint/kdeprintfax/kdeprintfax.cpp +++ /dev/null @@ -1,607 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tdeprintfax.h" -#include "faxab.h" -#include "faxctrl.h" -#include "configdlg.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -KdeprintFax::KdeprintFax(TQWidget *parent, const char *name) -: KMainWindow(parent, name) -{ - m_faxctrl = new FaxCtrl(this); - m_quitAfterSend = false; - connect(m_faxctrl, TQT_SIGNAL(message(const TQString&)), TQT_SLOT(slotMessage(const TQString&))); - connect(m_faxctrl, TQT_SIGNAL(faxSent(bool)), TQT_SLOT(slotFaxSent(bool))); - - TQWidget *mainw = new TQWidget(this); - setCentralWidget(mainw); - m_files = new KListBox(mainw); - connect( m_files, TQT_SIGNAL( currentChanged( TQListBoxItem* ) ), TQT_SLOT( slotCurrentChanged() ) ); - m_upbtn = new KPushButton( mainw ); - m_upbtn->setIconSet( SmallIconSet( "up" ) ); - TQToolTip::add( m_upbtn, i18n( "Move up" ) ); - connect( m_upbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotMoveUp() ) ); - m_upbtn->setEnabled( false ); - m_downbtn = new KPushButton( mainw ); - m_downbtn->setIconSet( SmallIconSet( "down" ) ); - TQToolTip::add( m_downbtn, i18n( "Move down" ) ); - connect( m_downbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotMoveDown() ) ); - m_downbtn->setEnabled( false ); - TQLabel *m_filelabel = new TQLabel(i18n("F&iles:"), mainw); - m_filelabel->setBuddy(m_files); - KSeparator*m_line = new KSeparator( KSeparator::HLine, mainw); - KSeparator *m_line2 = new KSeparator( KSeparator::HLine, mainw ); - m_numbers = new KListView( mainw ); - m_numbers->addColumn( i18n("Fax Number") ); - m_numbers->addColumn( i18n("Name") ); - m_numbers->addColumn( i18n("Enterprise") ); - m_numbers->header()->setStretchEnabled( true ); - m_numbers->setSelectionMode( TQListView::Extended ); - connect( m_numbers, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotFaxSelectionChanged() ) ); - connect( m_numbers, TQT_SIGNAL( executed( TQListViewItem* ) ), TQT_SLOT( slotFaxExecuted( TQListViewItem* ) ) ); - m_newbtn = new KPushButton( mainw ); - m_newbtn->setPixmap( SmallIcon( "edit" ) ); - TQToolTip::add( m_newbtn, i18n( "Add fax number" ) ); - connect( m_newbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotFaxAdd() ) ); - m_abbtn = new KPushButton( mainw ); - m_abbtn->setPixmap( SmallIcon( "kaddressbook" ) ); - TQToolTip::add( m_abbtn, i18n( "Add fax number from addressbook" ) ); - connect( m_abbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotKab() ) ); - m_delbtn = new KPushButton( mainw ); - m_delbtn->setIconSet( SmallIconSet( "edittrash" ) ); - TQToolTip::add( m_delbtn, i18n( "Remove fax number" ) ); - m_delbtn->setEnabled( false ); - connect( m_delbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotFaxRemove() ) ); - TQLabel *m_commentlabel = new TQLabel(i18n("&Comment:"), mainw); - KSystemTray *m_tray = new KSystemTray(this); - m_tray->setPixmap(SmallIcon("tdeprintfax")); - m_tray->show(); - m_comment = new TQTextEdit(mainw); -// I don't understand why anyone would want to turn off word wrap. It makes -// the text hard to read and write. It provides no benefit. Therefore, -// I commented out the next line. [Ray Lischner] -// m_comment->setWordWrap(TQTextEdit::NoWrap); - m_comment->setLineWidth(1); - m_commentlabel->setBuddy(m_comment); - TQLabel *m_timelabel = new TQLabel(i18n("Sched&ule:"), mainw); - m_timecombo = new TQComboBox(mainw); - m_timecombo->insertItem(i18n("Now")); - m_timecombo->insertItem(i18n("At Specified Time")); - m_timecombo->setCurrentItem(0); - m_timelabel->setBuddy(m_timecombo); - m_time = new TQTimeEdit(mainw); - m_time->setTime(TQTime::currentTime()); - m_time->setEnabled(false); - connect(m_timecombo, TQT_SIGNAL(activated(int)), TQT_SLOT(slotTimeComboActivated(int))); - m_cover = new TQCheckBox(i18n("Send Co&ver Sheet"), mainw); - connect(m_cover, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotCoverToggled(bool))); - m_subject = new TQLineEdit( mainw ); - TQLabel *m_subjectlabel = new TQLabel( i18n( "Su&bject:" ), mainw ); - m_subjectlabel->setBuddy( m_subject ); - - TQGridLayout *l0 = new TQGridLayout(mainw, 10, 2, 10, 5); - l0->setColStretch(1,1); - l0->addWidget(m_filelabel, 0, 0, Qt::AlignLeft|Qt::AlignTop); - TQHBoxLayout *l2 = new TQHBoxLayout( 0, 0, 10 ); - TQVBoxLayout *l3 = new TQVBoxLayout( 0, 0, 5 ); - l0->addLayout( l2, 0, 1 ); - l2->addWidget( m_files ); - l2->addLayout( l3 ); - //l3->addStretch( 1 ); - l3->addWidget( m_upbtn ); - l3->addWidget( m_downbtn ); - l3->addStretch( 1 ); - l0->addMultiCellWidget(m_line, 1, 1, 0, 1); - l0->addRowSpacing(1, 10); - TQHBoxLayout *l5 = new TQHBoxLayout( 0, 0, 10 ); - TQVBoxLayout *l6 = new TQVBoxLayout( 0, 0, 5 ); - l0->addMultiCellLayout( l5, 2, 4, 0, 1 ); - l5->addWidget( m_numbers ); - l5->addLayout( l6 ); - l6->addWidget( m_newbtn ); - l6->addWidget( m_delbtn ); - l6->addWidget( m_abbtn ); - l6->addStretch( 1 ); - l0->addMultiCellWidget( m_line2, 5, 5, 0, 1 ); - l0->addRowSpacing( 5, 10 ); - l0->addWidget( m_cover, 6, 1 ); - l0->addWidget( m_subjectlabel, 7, 0 ); - l0->addWidget( m_subject, 7, 1 ); - l0->addWidget(m_commentlabel, 8, 0, Qt::AlignTop|Qt::AlignLeft); - l0->addWidget(m_comment, 8, 1); - l0->addWidget(m_timelabel, 9, 0); - TQHBoxLayout *l1 = new TQHBoxLayout(0, 0, 5); - l0->addLayout(l1, 9, 1); - l1->addWidget(m_timecombo, 1); - l1->addWidget(m_time, 0); - - m_msglabel = new KSqueezedTextLabel(statusBar()); - statusBar()->addWidget(m_msglabel, 1); - statusBar()->insertFixedItem(i18n("Processing..."), 1); - statusBar()->changeItem(i18n("Idle"), 1); - statusBar()->insertFixedItem("hylafax/efax", 2); - initActions(); - setAcceptDrops(true); - setCaption(i18n("Send to Fax")); - updateState(); - - resize(550,500); - TQWidget *d = TQT_TQWIDGET(kapp->desktop()); - move((d->width()-width())/2, (d->height()-height())/2); -} - -KdeprintFax::~KdeprintFax() -{ -} - -void KdeprintFax::initActions() -{ - new KAction(i18n("&Add File..."), "filenew", Qt::Key_Insert, TQT_TQOBJECT(this), TQT_SLOT(slotAdd()), actionCollection(), "file_add"); - new KAction(i18n("&Remove File"), "remove", Qt::Key_Delete, TQT_TQOBJECT(this), TQT_SLOT(slotRemove()), actionCollection(), "file_remove"); - new KAction(i18n("&Send Fax"), "connect_established", Qt::Key_Return, TQT_TQOBJECT(this), TQT_SLOT(slotFax()), actionCollection(), "fax_send"); - new KAction(i18n("A&bort"), "stop", Qt::Key_Escape, TQT_TQOBJECT(this), TQT_SLOT(slotAbort()), actionCollection(), "fax_stop"); - new KAction(i18n("A&ddress Book"), "kaddressbook", Qt::CTRL+Qt::Key_A, TQT_TQOBJECT(this), TQT_SLOT(slotKab()), actionCollection(), "fax_ab"); - new KAction(i18n("V&iew Log"), "contents", Qt::CTRL+Qt::Key_L, TQT_TQOBJECT(this), TQT_SLOT(slotViewLog()), actionCollection(), "fax_log"); - new KAction(i18n("Vi&ew File"), "filefind", Qt::CTRL+Qt::Key_O, TQT_TQOBJECT(this), TQT_SLOT(slotView()), actionCollection(), "file_view"); - new KAction( i18n( "&New Fax Recipient..." ), "edit", Qt::CTRL+Qt::Key_N, TQT_TQOBJECT(this), TQT_SLOT( slotFaxAdd() ), actionCollection(), "fax_add" ); - - KStdAction::quit(TQT_TQOBJECT(this), TQT_SLOT(slotQuit()), actionCollection()); - setStandardToolBarMenuEnabled(true); - KStdAction::showMenubar(TQT_TQOBJECT(this), TQT_SLOT(slotToggleMenuBar()), actionCollection()); - KStdAction::preferences(TQT_TQOBJECT(this), TQT_SLOT(slotConfigure()), actionCollection()); - KStdAction::keyBindings(guiFactory(), TQT_SLOT(configureShortcuts()), -actionCollection()); - actionCollection()->action("fax_stop")->setEnabled(false); - connect(actionCollection()->action("file_remove"), TQT_SIGNAL(enabled(bool)), actionCollection()->action("file_view"), TQT_SLOT(setEnabled(bool))); - actionCollection()->action("file_remove")->setEnabled(false); - - createGUI(); -} - -void KdeprintFax::slotToggleMenuBar() -{ - if (menuBar()->isVisible()) menuBar()->hide(); - else menuBar()->show(); -} - -void KdeprintFax::slotAdd() -{ - KURL url = KFileDialog::getOpenURL(TQString::null, TQString::null, this); - if (!url.isEmpty()) - addURL(url); -} - -void KdeprintFax::slotRemove() -{ - if (m_files->currentItem() >= 0) - m_files->removeItem(m_files->currentItem()); - if (m_files->count() == 0) - actionCollection()->action("file_remove")->setEnabled(false); -} - -void KdeprintFax::slotView() -{ - if (m_files->currentItem() >= 0) - { - new KRun(KURL( m_files->currentText() )); - } -} - -void KdeprintFax::slotFax() -{ - if (m_files->count() == 0) - KMessageBox::error(this, i18n("No file to fax.")); - else if ( m_numbers->childCount() == 0 ) - KMessageBox::error(this, i18n("No fax number specified.")); - else if (m_faxctrl->send(this)) - { - actionCollection()->action("fax_send")->setEnabled(false); - actionCollection()->action("fax_stop")->setEnabled(true); - statusBar()->changeItem(i18n("Processing..."), 1); - } - else - KMessageBox::error(this, i18n("Unable to start Fax process.")); -} - -void KdeprintFax::slotAbort() -{ - if (!m_faxctrl->abort()) - KMessageBox::error(this, i18n("Unable to stop Fax process.")); -} - -void KdeprintFax::slotKab() -{ - TQStringList number, name, enterprise; - if (FaxAB::getEntry(number, name, enterprise, this)) - { - for ( unsigned int i = 0; iinsertItem(KMimeType::pixmapForURL(url,0,KIcon::Small),target); - actionCollection()->action("file_remove")->setEnabled(true); - slotCurrentChanged(); - } - else - KMessageBox::error(this, i18n("Unable to retrieve %1.").arg(url.prettyURL())); -} - -void KdeprintFax::setPhone(TQString phone) -{ - TQString name, enterprise; - FaxAB::getEntryByNumber(phone, name, enterprise); - new TQListViewItem( m_numbers, phone, name, enterprise ); -} - -void KdeprintFax::sendFax( bool quitAfterSend ) -{ - slotFax(); - m_quitAfterSend = quitAfterSend; -} - -void KdeprintFax::dragEnterEvent(TQDragEnterEvent *e) -{ - e->accept(KURLDrag::canDecode(e)); -} - -void KdeprintFax::dropEvent(TQDropEvent *e) -{ - KURL::List l; - if (KURLDrag::decode(e, l)) - { - for (KURL::List::ConstIterator it = l.begin(); it != l.end(); ++it) - addURL(*it); - } -} - -TQStringList KdeprintFax::files() -{ - TQStringList l; - for (uint i=0; icount(); i++) - l.append(m_files->text(i)); - return l; -} - - -int KdeprintFax::faxCount() const -{ - return m_numbers->childCount(); -} - -/* -TQListViewItem* KdeprintFax::faxItem( int i ) const -{ - TQListViewItem *item = m_numbers->firstChild(); - while ( i && item && item->nextSibling() ) - { - item = item->nextSibling(); - i--; - } - if ( i || !item ) - kdError() << "KdeprintFax::faxItem(" << i << ") => fax item index out of bound" << endl; - return item; -} - -TQString KdeprintFax::number( int i ) const -{ - TQListViewItem *item = faxItem( i ); - return ( item ? item->text( 0 ) : TQString::null ); -} - -TQString KdeprintFax::name( int i ) const -{ - TQListViewItem *item = faxItem( i ); - return ( item ? item->text( 1 ) : TQString::null ); -} - -TQString KdeprintFax::enterprise( int i ) const -{ - TQListViewItem *item = faxItem( i ); - return ( item ? item->text( 2 ) : TQString::null ); -} -*/ - -KdeprintFax::FaxItemList KdeprintFax::faxList() const -{ - FaxItemList list; - TQListViewItemIterator it( m_numbers ); - while ( it.current() ) - { - FaxItem item; - item.number = it.current()->text( 0 ); - item.name = it.current()->text( 1 ); - item.enterprise = it.current()->text( 2 ); - list << item; - ++it; - } - return list; -} - -TQString KdeprintFax::comment() const -{ - return m_comment->text(); -} - -bool KdeprintFax::cover() const -{ - return m_cover->isChecked(); -} - -TQString KdeprintFax::subject() const -{ - return m_subject->text(); -} - -void KdeprintFax::slotMessage(const TQString& msg) -{ - m_msglabel->setText(msg); -} - -void KdeprintFax::slotFaxSent(bool status) -{ - actionCollection()->action("fax_send")->setEnabled(true); - actionCollection()->action("fax_stop")->setEnabled(false); - statusBar()->changeItem(i18n("Idle"), 1); - - if( m_quitAfterSend ) { - slotQuit(); - } - else { - if (!status) - KMessageBox::error(this, i18n("Fax error: see log message for more information.")); - slotMessage(TQString::null); - } -} - -void KdeprintFax::slotViewLog() -{ - m_faxctrl->viewLog(this); -} - -void KdeprintFax::slotConfigure() -{ - if (ConfigDlg::configure(this)) - updateState(); -} - -void KdeprintFax::updateState() -{ - TQString cmd = m_faxctrl->faxCommand(); - m_cover->setEnabled(cmd.find("%cover") != -1); - if ( !m_cover->isEnabled() ) - m_cover->setChecked(false); - m_comment->setEnabled(cmd.find("%comment") != -1 && m_cover->isChecked()); - //m_comment->setPaper(m_comment->isEnabled() ? tqcolorGroup().brush(TQColorGroup::Base) : tqcolorGroup().brush(TQColorGroup::Background)); - if (!m_comment->isEnabled()) - { - m_comment->setText(""); - m_comment->setPaper( tqcolorGroup().background() ); - } - else - m_comment->setPaper( tqcolorGroup().base() ); - /* - m_enterprise->setEnabled(cmd.find("%enterprise") != -1); - if (!m_enterprise->isEnabled()) - m_enterprise->setText(""); - */ - if (cmd.find("%time") == -1) - { - m_timecombo->setCurrentItem(0); - m_timecombo->setEnabled(false); - slotTimeComboActivated(0); - } - else - m_timecombo->setEnabled( true ); - /*m_name->setEnabled( cmd.find( "%name" ) != -1 );*/ - m_subject->setEnabled( cmd.find( "%subject" ) != -1 && m_cover->isChecked() ); - statusBar()->changeItem(m_faxctrl->faxSystem(), 2); -} - -void KdeprintFax::slotQuit() -{ - close(true); -} - -void KdeprintFax::slotTimeComboActivated(int ID) -{ - m_time->setEnabled(ID == 1); -} - -TQString KdeprintFax::time() const -{ - if (!m_time->isEnabled()) - return TQString::null; - return m_time->time().toString("hh:mm"); -} - -void KdeprintFax::slotMoveUp() -{ - int index = m_files->currentItem(); - if ( index > 0 ) - { - TQListBoxItem *item = m_files->item( index ); - m_files->takeItem( item ); - m_files->insertItem( item, index-1 ); - m_files->setCurrentItem( index-1 ); - } -} - -void KdeprintFax::slotMoveDown() -{ - int index = m_files->currentItem(); - if ( index >= 0 && index < ( int )m_files->count()-1 ) - { - TQListBoxItem *item = m_files->item( index ); - m_files->takeItem( item ); - m_files->insertItem( item, index+1 ); - m_files->setCurrentItem( index+1 ); - } -} - -/** The user or program toggled the "Cover Sheet" check box. - * Update the state of the other controls to reflect the - * new status. - */ -void KdeprintFax::slotCoverToggled(bool) -{ - updateState(); -} - -void KdeprintFax::slotCurrentChanged() -{ - int index = m_files->currentItem(); - m_upbtn->setEnabled( index > 0 ); - m_downbtn->setEnabled( index >=0 && index < ( int )m_files->count()-1 ); -} - -void KdeprintFax::slotFaxSelectionChanged() -{ - TQListViewItemIterator it( m_numbers, TQListViewItemIterator::Selected ); - m_delbtn->setEnabled( it.current() != NULL ); -} - -void KdeprintFax::slotFaxRemove() -{ - TQListViewItemIterator it( m_numbers, TQListViewItemIterator::Selected ); - TQPtrList items; - items.setAutoDelete( true ); - while ( it.current() ) - { - items.append( it.current() ); - ++it; - } - items.clear(); - /* force this slot to be called, to update buttons state */ - slotFaxSelectionChanged(); -} - -void KdeprintFax::slotFaxAdd() -{ - TQString number, name, enterprise; - if ( manualFaxDialog( number, name, enterprise ) ) - { - new TQListViewItem( m_numbers, number, name, enterprise ); - } -} - -void KdeprintFax::slotFaxExecuted( TQListViewItem *item ) -{ - if ( item ) - { - TQString number = item->text( 0 ), name = item->text( 1 ), enterprise = item->text( 2 ); - if ( manualFaxDialog( number, name, enterprise ) ) - { - item->setText( 0, number ); - item->setText( 1, name ); - item->setText( 2, enterprise ); - } - } -} - -bool KdeprintFax::manualFaxDialog( TQString& number, TQString& name, TQString& enterprise ) -{ - /* dialog construction */ - KDialogBase dlg( this, "manualFaxDialog", true, i18n( "Fax Number" ), KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true ); - TQWidget *mainw = new TQWidget( &dlg ); - TQLabel *lab0 = new TQLabel( i18n( "Enter recipient fax properties." ), mainw ); - TQLabel *lab1 = new TQLabel( i18n( "&Number:" ), mainw ); - TQLabel *lab2 = new TQLabel( i18n( "N&ame:" ), mainw ); - TQLabel *lab3 = new TQLabel( i18n( "&Enterprise:" ), mainw ); - TQLineEdit *edit_number = new TQLineEdit( number, mainw ); - TQLineEdit *edit_name = new TQLineEdit( name, mainw ); - TQLineEdit *edit_enterprise = new TQLineEdit( enterprise, mainw ); - lab1->setBuddy( edit_number ); - lab2->setBuddy( edit_name ); - lab3->setBuddy( edit_enterprise ); - TQGridLayout *l0 = new TQGridLayout( mainw, 5, 2, 0, 5 ); - l0->setColStretch( 1, 1 ); - l0->addMultiCellWidget( lab0, 0, 0, 0, 1 ); - l0->setRowSpacing( 1, 10 ); - l0->addWidget( lab1, 2, 0 ); - l0->addWidget( lab2, 3, 0 ); - l0->addWidget( lab3, 4, 0 ); - l0->addWidget( edit_number, 2, 1 ); - l0->addWidget( edit_name, 3, 1 ); - l0->addWidget( edit_enterprise, 4, 1 ); - dlg.setMainWidget( mainw ); - dlg.resize( 300, 10 ); - - /* dialog execution */ - while ( 1 ) - if ( dlg.exec() ) - { - if ( edit_number->text().isEmpty() ) - { - KMessageBox::error( this, i18n( "Invalid fax number." ) ); - } - else - { - number = edit_number->text(); - name = edit_name->text(); - enterprise = edit_enterprise->text(); - return true; - } - } - else - return false; -} - -#include "tdeprintfax.moc" diff --git a/kdeprint/kdeprintfax/kdeprintfax.desktop b/kdeprint/kdeprintfax/kdeprintfax.desktop deleted file mode 100644 index dc9c90bab..000000000 --- a/kdeprint/kdeprintfax/kdeprintfax.desktop +++ /dev/null @@ -1,97 +0,0 @@ -[Desktop Entry] -Name=KdeprintFax -Name[cy]=KdeargraffuFfacs -Name[eo]=Presfakso -Name[hi]=केडीई-प्रिंट-फ़ैक्स -Name[lo]=ອິນເຕີເນັດ -Name[ne]=Kdeprint फ्याक्स -Name[nso]=Fax ya kgatiso ya kde -Name[pa]=Kde ਫੈਕਸ ਛਾਪਣ -Name[rw]=Kde-gucapaFagisi -Name[sv]=KDE:s skriv ut fax -Name[ta]=Kdeஅச்சுபாக்ஸ் -Name[th]=KDEprintFax -Name[vi]=In và Fax của KDE -GenericName=Fax Utility -GenericName[af]=Faks Program -GenericName[ar]=أداة الفاكس -GenericName[be]=Праграма працы з факсам -GenericName[bg]=Програма за факс -GenericName[bn]=ফ্যাক্স টুল -GenericName[br]=Maveg ar faks -GenericName[bs]=Alat za faxove -GenericName[ca]=Utilitat de fax -GenericName[cs]=Faxový nástroj -GenericName[csb]=Faks -GenericName[cy]=Cyfleuster Ffacs -GenericName[da]=FAX-værktøj -GenericName[de]=Fax-Programm -GenericName[el]=Εργαλείο φαξ -GenericName[eo]=Faxutilaĵo -GenericName[es]=Aplicación de fax -GenericName[et]=Faksimise utiliit -GenericName[eu]=Fax tresna -GenericName[fa]=برنامۀ سودمند دورنگار -GenericName[fi]=Faksityökalu -GenericName[fr]=Outil de fax -GenericName[fy]=Faksprogramma -GenericName[ga]=Uirlis Facs -GenericName[gl]=Utilidade de Fax -GenericName[he]=כלי פקסים -GenericName[hi]=फ़ैक्स यूटिलिटी -GenericName[hr]=Alat za fakseve -GenericName[hu]=Faxprogram -GenericName[is]=Faxtól -GenericName[it]=Fax -GenericName[ja]=ファクスユーティリティ -GenericName[ka]=ფაქსთან სამუშაო უტილიტა -GenericName[kk]=Факс утилитасы -GenericName[km]=ឧបករណ៍​ទូរសារ -GenericName[lo]=ເຄື່ອງມືໂທລະສານ -GenericName[lt]=Pagalbinė fakso programėlė -GenericName[lv]=Faksa utilīta -GenericName[mk]=Алатка за факс -GenericName[mn]=Fax-програм -GenericName[ms]=Kemudahan Faks -GenericName[mt]=Għodda tal-faks -GenericName[nb]=Faksverktøy -GenericName[nds]=Faxwarktüüch -GenericName[ne]=फ्याक्स युटिलिटी -GenericName[nl]=Faxprogramma -GenericName[nn]=Faksverktøy -GenericName[nso]=Sebereka sa Fax -GenericName[pa]=ਫੈਕਸ ਸਹੂਲਤ -GenericName[pl]=Faks -GenericName[pt]=Utilitário de Fax -GenericName[pt_BR]=Utilitário de Fax -GenericName[ro]=Utilitar pentru FAX -GenericName[ru]=Утилита работы с факсами -GenericName[rw]=Nkemurabibazo Fagisi -GenericName[se]=Fáksenreaidu -GenericName[sk]=Faxový nástroj -GenericName[sl]=Pripomoček za faks -GenericName[sr]=Факс програм -GenericName[sr@Latn]=Faks program -GenericName[sv]=Faxverktyg -GenericName[ta]=தொலைநகலி கருவி -GenericName[tg]=Обзори дурнамо -GenericName[th]=เครื่องมือโทรสาร -GenericName[tr]=Faks Görüntüleyici -GenericName[tt]=Faks Qoralı -GenericName[uk]=Утиліта факсу -GenericName[uz]=Faks vositasi -GenericName[uz@cyrillic]=Факс воситаси -GenericName[ven]=Tshishumiswa tsha Fax -GenericName[vi]=Các tiện ích Fax -GenericName[wa]=Usteye di facs -GenericName[xh]=Uncedo lwe Fax -GenericName[zh_CN]=传真工具 -GenericName[zh_TW]=傳真工具 -GenericName[zu]=Isisebenzi se-Fax - -Type=Application -Exec=tdeprintfax -caption "%c" %i %m %u -Icon=tdeprintfax -Terminal=false -X-DCOP-ServiceType=Multi -Categories=Qt;KDE;Utility;X-KDE-Utilities-Peripherals; diff --git a/kdeprint/kdeprintfax/kdeprintfax.h b/kdeprint/kdeprintfax/kdeprintfax.h deleted file mode 100644 index fc1a02f7f..000000000 --- a/kdeprint/kdeprintfax/kdeprintfax.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * tdeprintfax - a small fax utility - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef KDEPRINTFAX_H -#define KDEPRINTFAX_H - -#include -#include - -class KListBox; -class KListView; -class TQLineEdit; -class TQTextEdit; -class FaxCtrl; -class TQCheckBox; -class TQLabel; -class TQTimeEdit; -class TQComboBox; -class TQPushButton; -class TQListViewItem; - -class KdeprintFax : public KMainWindow -{ - Q_OBJECT -public: - struct FaxItem - { - TQString number; - TQString name; - TQString enterprise; - }; - typedef TQValueList FaxItemList; - typedef TQValueList::ConstIterator FaxItemListIterator; - - KdeprintFax(TQWidget *parent = 0, const char *name = 0); - ~KdeprintFax(); - - void addURL(KURL url); - void setPhone(TQString phone); - void sendFax( bool quitAfterSend ); - TQStringList files(); - int faxCount() const; - //TQString number( int i = 0 ) const; - //TQString name( int i = 0 ) const; - //TQString enterprise( int i = 0 ) const; - FaxItemList faxList() const; - TQString comment() const; - TQString time() const; - TQString subject() const; - bool cover() const; - -protected slots: - void slotToggleMenuBar(); - void slotKab(); - void slotAdd(); - void slotRemove(); - void slotFax(); - void slotAbort(); - void slotMessage(const TQString&); - void slotFaxSent(bool); - void slotViewLog(); - void slotConfigure(); - void slotQuit(); - void slotView(); - void slotTimeComboActivated(int); - void slotMoveUp(); - void slotMoveDown(); - void slotCurrentChanged(); - void slotFaxSelectionChanged(); - void slotFaxRemove(); - void slotFaxAdd(); - void slotFaxExecuted( TQListViewItem* ); - void slotCoverToggled(bool toggle); - -protected: - void initActions(); - void dragEnterEvent(TQDragEnterEvent*); - void dropEvent(TQDropEvent*); - void updateState(); - bool manualFaxDialog( TQString& number, TQString& name, TQString& enterprise ); - //TQListViewItem* faxItem( int i = 0 ) const; - -private: - KListBox *m_files; - KListView *m_numbers; - TQLineEdit *m_subject; - TQTextEdit *m_comment; - FaxCtrl *m_faxctrl; - TQCheckBox *m_cover; - TQLabel *m_msglabel; - TQTimeEdit *m_time; - TQComboBox *m_timecombo; - TQPushButton *m_upbtn, *m_downbtn; - TQPushButton *m_newbtn, *m_abbtn, *m_delbtn; - bool m_quitAfterSend; -}; - -#endif diff --git a/kdeprint/kdeprintfax/kdeprintfaxui.rc b/kdeprint/kdeprintfax/kdeprintfaxui.rc deleted file mode 100644 index ae233a6da..000000000 --- a/kdeprint/kdeprintfax/kdeprintfaxui.rc +++ /dev/null @@ -1,31 +0,0 @@ - - - - &File - - - - - - Fa&x - - - - - - - - - - - - - - - - - - - - - diff --git a/kdeprint/kdeprintfax/main.cpp b/kdeprint/kdeprintfax/main.cpp deleted file mode 100644 index 4fe22a3b6..000000000 --- a/kdeprint/kdeprintfax/main.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * tdeprintfax - a interface to fax-packages - * Copyright (C) 2001 Michael Goffioul - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tdeprintfax.h" - -#include -#include -#include -#include -#include - -TQString debugFlag; -int oneShotFlag = false; - -static const char description[] = - I18N_NOOP("A small fax utility to be used with tdeprint."); -// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE - - -static KCmdLineOptions options[] = -{ - { "phone ", I18N_NOOP("Phone number to fax to"), 0 }, - { "immediate", I18N_NOOP("Send fax immediately"), 0 }, - { "batch", I18N_NOOP("Exit after sending"), 0 }, - { "+[file]", I18N_NOOP("File to fax (added to the file list)"), 0 }, - KCmdLineLastOption - // INSERT YOUR COMMANDLINE OPTIONS HERE -}; - -int main(int argc, char *argv[]) -{ - - KAboutData aboutData( "tdeprintfax", I18N_NOOP("KdeprintFax"), - "1.0", description, KAboutData::License_GPL, - "(c), 2001 Michael Goffioul", 0, "http://printing.kde.org"); - aboutData.addAuthor("Michael Goffioul",0, "tdeprint@swing.be"); - KCmdLineArgs::init( argc, argv, &aboutData ); - KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. - KApplication::addCmdLineOptions(); - - KApplication a; - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - - KdeprintFax *w = new KdeprintFax; - a.setMainWidget(w); - w->show(); - for (int i=0;icount();i++) - w->addURL(args->url(i)); - - TQString phone = args->getOption( "phone" ); - if( !phone.isEmpty() ) { - w->setPhone( phone ); - } - - if( args->isSet( "immediate" ) ) { - w->sendFax( args->isSet( "batch" ) ); - } - - args->clear(); - return a.exec(); -} diff --git a/kdeprint/kjobviewer/CMakeLists.txt b/kdeprint/kjobviewer/CMakeLists.txt deleted file mode 100644 index 332fa7fc4..000000000 --- a/kdeprint/kjobviewer/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -add_definitions( -D_KDEPRINT_COMPILE ) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### other data ################################ - -tde_install_icons( kjobviewer ) -install( FILES kjobviewer.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) -install( FILES kjobviewerui.rc DESTINATION ${DATA_INSTALL_DIR}/kjobviewer ) - - -##### kjobviewer (tdeinit) ###################### - -tde_add_tdeinit_executable( kjobviewer AUTOMOC - SOURCES kjobviewer.cpp main.cpp - LINK tdeprint_management-shared -) diff --git a/kdeprint/kjobviewer/Makefile.am b/kdeprint/kjobviewer/Makefile.am deleted file mode 100644 index 5362ad033..000000000 --- a/kdeprint/kjobviewer/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -AM_CPPFLAGS = -D_KDEPRINT_COMPILE - -INCLUDES = $(all_includes) - -bin_PROGRAMS= -lib_LTLIBRARIES= -tdeinit_LTLIBRARIES = kjobviewer.la - -kjobviewer_la_SOURCES = kjobviewer.cpp main.cpp -kjobviewer_la_METASOURCES = AUTO -kjobviewer_la_LIBADD = -ltdeprint_management $(LIB_KDEUI) -kjobviewer_la_LDFLAGS = -module -avoid-version $(all_libraries) $(KDE_RPATH) - -noinst_HEADERS = kjobviewer.h - -KDE_ICON = kjobviewer - -rc_DATA = kjobviewerui.rc -rcdir = $(kde_datadir)/kjobviewer - -xdg_apps_DATA = kjobviewer.desktop - -messages: rc.cpp - $(XGETTEXT) *.cpp -o $(podir)/kjobviewer.pot diff --git a/kdeprint/kjobviewer/hi128-app-kjobviewer.png b/kdeprint/kjobviewer/hi128-app-kjobviewer.png deleted file mode 100644 index 7db5f56b1..000000000 Binary files a/kdeprint/kjobviewer/hi128-app-kjobviewer.png and /dev/null differ diff --git a/kdeprint/kjobviewer/hi16-app-kjobviewer.png b/kdeprint/kjobviewer/hi16-app-kjobviewer.png deleted file mode 100644 index d6defce21..000000000 Binary files a/kdeprint/kjobviewer/hi16-app-kjobviewer.png and /dev/null differ diff --git a/kdeprint/kjobviewer/hi22-app-kjobviewer.png b/kdeprint/kjobviewer/hi22-app-kjobviewer.png deleted file mode 100644 index a71ee2817..000000000 Binary files a/kdeprint/kjobviewer/hi22-app-kjobviewer.png and /dev/null differ diff --git a/kdeprint/kjobviewer/hi32-app-kjobviewer.png b/kdeprint/kjobviewer/hi32-app-kjobviewer.png deleted file mode 100644 index d554b554f..000000000 Binary files a/kdeprint/kjobviewer/hi32-app-kjobviewer.png and /dev/null differ diff --git a/kdeprint/kjobviewer/hi48-app-kjobviewer.png b/kdeprint/kjobviewer/hi48-app-kjobviewer.png deleted file mode 100644 index 13adbd006..000000000 Binary files a/kdeprint/kjobviewer/hi48-app-kjobviewer.png and /dev/null differ diff --git a/kdeprint/kjobviewer/hi64-app-kjobviewer.png b/kdeprint/kjobviewer/hi64-app-kjobviewer.png deleted file mode 100644 index 5d22d215e..000000000 Binary files a/kdeprint/kjobviewer/hi64-app-kjobviewer.png and /dev/null differ diff --git a/kdeprint/kjobviewer/hisc-app-kjobviewer.svgz b/kdeprint/kjobviewer/hisc-app-kjobviewer.svgz deleted file mode 100644 index f40b4bdfa..000000000 Binary files a/kdeprint/kjobviewer/hisc-app-kjobviewer.svgz and /dev/null differ diff --git a/kdeprint/kjobviewer/kjobviewer.cpp b/kdeprint/kjobviewer/kjobviewer.cpp deleted file mode 100644 index 0fb23e7ba..000000000 --- a/kdeprint/kjobviewer/kjobviewer.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "kjobviewer.h" -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class JobTray : public KSystemTray -{ -public: - JobTray(KJobViewerApp *parent, const char *name = 0) - : KSystemTray(0, name), m_app(parent) { connect( this, TQT_SIGNAL( quitSelected() ), kapp, TQT_SLOT( quit() ) ); } -protected: - void mousePressEvent(TQMouseEvent*); -private: - KJobViewerApp *m_app; -}; - -void JobTray::mousePressEvent(TQMouseEvent *e) -{ - if (e->button() == Qt::RightButton) - KSystemTray::mousePressEvent(e); - else if (m_app->m_views.count() > 0) - { - KPopupMenu menu; - TQDictIterator it(m_app->m_views); - TQPtrList list; - list.setAutoDelete(false); - for (; it.current(); ++it) - { - menu.insertItem(KWin::icon(it.current()->winId(), 16, 16), it.currentKey(), list.count()); - if (it.current()->isVisible()) - menu.setItemChecked(list.count(), true); - list.append(it.current()); - } - - if (list.count() == 1) - { - // special case, old behavior - if (list.first()->isVisible()) - list.first()->hide(); - else - list.first()->show(); - } - else - { - int choice = menu.exec(mapToGlobal(e->pos())); - if (choice != -1) - { - KMJobViewer *view = list.tqat(choice); - if (view->isVisible()) - KWin::activateWindow(view->winId()); - else - view->show(); - } - } - } -} - -//------------------------------------------------------------- - -KJobViewerApp::KJobViewerApp() : KUniqueApplication() -{ - m_views.setAutoDelete(true); - m_tray = 0; - m_timer = 0; -} - -KJobViewerApp::~KJobViewerApp() -{ -} - -int KJobViewerApp::newInstance() -{ - initialize(); - return 0; -} - -void KJobViewerApp::initialize() -{ - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - bool showIt = args->isSet("show"); - bool all = args->isSet("all"); - QString prname = args->getOption("d"); - KMJobViewer *view(0); - - if (!m_timer) - { - m_timer = KMTimer::self(); - connect(m_timer,TQT_SIGNAL(timeout()),TQT_SLOT(slotTimer())); - } - - if (prname.isEmpty() && all) - prname = i18n("All Printers"); - - if (prname.isEmpty()) { - KMPrinter *prt = KMManager::self()->defaultPrinter(); - if (prt) - prname = prt->printerName(); - else { - KMessageBox::error(0, i18n("There is no default printer. Start with --all to see all printers."), i18n("Print Error")); - exit(1); - return; - } - } - - if (!m_tray) - { - m_tray = new JobTray(this); - m_tray->setPixmap(m_tray->loadIcon("fileprint")); - - } - - view = m_views.find(prname); - if (!view) - { - kdDebug() << "creating new view: " << TQString(prname) << endl; - view = new KMJobViewer(); - connect(view, TQT_SIGNAL(jobsShown(KMJobViewer*,bool)), TQT_SLOT(slotJobsShown(KMJobViewer*,bool))); - connect(view, TQT_SIGNAL(printerChanged(KMJobViewer*,const TQString&)), TQT_SLOT(slotPrinterChanged(KMJobViewer*,const TQString&))); - connect(view, TQT_SIGNAL(refreshClicked()), TQT_SLOT(slotTimer())); - connect(view, TQT_SIGNAL(viewerDestroyed(KMJobViewer*)), TQT_SLOT(slotViewerDestroyed(KMJobViewer*))); - m_views.insert(prname, view); - } - - if (showIt) - { - view->show(); - m_tray->show(); - } - view->setPrinter(prname); - - //m_timer->release(true); - m_timer->delay(10); -} - -void KJobViewerApp::slotJobsShown(KMJobViewer *view, bool hasJobs) -{ - if (!hasJobs && !view->isVisible() && !view->isSticky()) - { - kdDebug() << "removing view: " << view->printer() << endl; - // the window is hidden and doesn't have any job shown -> destroy it - // closing won't have any effect as the KMJobViewer overload closeEvent() - m_views.remove(view->printer()); - } - - if (m_views.count() > 0) - { - if (!m_tray->isVisible()) - m_tray->show(); - } - else { - KStartupInfo::appStarted(); - kapp->quit(); - } -} - -void KJobViewerApp::slotTimer() -{ - // Update printer list - KMManager::self()->printerList(true); - - // Refresh views. The first time, job list is reloaded, - // other views will simply use reloaded job list - bool trigger(true); - TQDictIterator it(m_views); - for (; it.current(); ++it, trigger=false) - it.current()->refresh(trigger); -} - -void KJobViewerApp::slotPrinterChanged(KMJobViewer *view, const TQString& prname) -{ - KMJobViewer *other = m_views.find(prname); - if (other) - { - if (other->isVisible()) - KWin::activateWindow(other->winId()); - else - other->show(); - } - else - { - m_views.take(view->printer()); - m_views.insert(prname, view); - view->setPrinter(prname); - } -} - -void KJobViewerApp::reload() -{ - // trigger delayed refresh in all views - m_timer->delay(10); -} - -void KJobViewerApp::slotViewerDestroyed(KMJobViewer *view) -{ - if (view) - m_views.take(view->printer()); - if (m_views.count() == 0) - kapp->quit(); -} - -#include "kjobviewer.moc" diff --git a/kdeprint/kjobviewer/kjobviewer.desktop b/kdeprint/kjobviewer/kjobviewer.desktop deleted file mode 100644 index 965ed49bf..000000000 --- a/kdeprint/kjobviewer/kjobviewer.desktop +++ /dev/null @@ -1,92 +0,0 @@ -[Desktop Entry] -Exec=kjobviewer --all --show %i %m -Icon=kjobviewer -Terminal=false -Type=Application -X-KDE-StartupNotify=true - -Name=KJobViewer -Name[bn]=কে-জব-ভিউয়ার -Name[csb]=Przezérnik pòlétów drëkera -Name[cy]=KGwelyddSwyddi -Name[ja]=K ジョブビューア -Name[nds]=Opgavenkieker -Name[ne]=KJob दर्शक -Name[pl]=Przeglądarka zadań drukowania -Name[pt_BR]=Trabalhos de Impressão -Name[ro]=Vizualizor lucrări de tipărit -Name[rw]=K-IkigaragazaUmurimo -Name[sk]=Prehliadač úloh -Name[sv]=K-jobbvisare -Name[ta]=கேபணி காட்சியாளன் -Name[tg]=Намоишгари корҳо -Name[vi]=Trình theo dõi Tác vụ In ấn -GenericName=Print Jobs -GenericName[af]=Drukker Werke -GenericName[be]=Заданні друку -GenericName[bg]=Задания за печат -GenericName[bn]=মুদ্রণ তালিকা -GenericName[bs]=Zadaci štampe -GenericName[ca]=Treballs d'impressió -GenericName[cs]=Tiskové úlohy -GenericName[csb]=Pòlétë drëkera -GenericName[cy]=Swyddi Argraffu -GenericName[da]=Udskriv job -GenericName[de]=Druckaufträge -GenericName[el]=Εργασίες εκτύπωσης -GenericName[eo]=Printtaskoj -GenericName[es]=Trabajos de impresión -GenericName[et]=Printeri tööd -GenericName[eu]=Inprimaketa lanak -GenericName[fa]=چاپ کارها -GenericName[fi]=Tulostustyöt -GenericName[fr]=Tâches d'impressions -GenericName[fy]=printtaken -GenericName[ga]=Jabanna Priontála -GenericName[gl]=Traballos de Impresión -GenericName[he]=עבודות הדפסה -GenericName[hr]=Zadaci ispisivanja -GenericName[hu]=Nyomtatási feladatok -GenericName[is]=Prentverk -GenericName[it]=Lavori di stampa -GenericName[ja]=印刷ジョブ -GenericName[ka]=ბეჭდვის დავალება -GenericName[kk]=Басып шығару тапсырмалары -GenericName[km]=ការងារ​បោះពុម្ព -GenericName[lt]=Spausdinimo užduotys -GenericName[mk]=Задачи за печатење -GenericName[ms]=Cetak Kerja -GenericName[nb]=Utskriftsjobber -GenericName[nds]=Druckopgaven -GenericName[ne]=मुद्रण कार्य -GenericName[nl]=Afdruktaken -GenericName[nn]=Utskriftsjobbar -GenericName[pa]=ਛਪਾਈ ਕੰਮ -GenericName[pl]=Zadania drukowania -GenericName[pt]=Tarefas de Impressão -GenericName[pt_BR]=Tarefas de Impressão -GenericName[ro]=Lucrări de tipărit -GenericName[ru]=Задания печати -GenericName[rw]=Gucapa Imirimo -GenericName[se]=Čálihanbarggut -GenericName[sk]=Tlačové úlohy -GenericName[sl]=Tiskalniška opravila -GenericName[sr]=Послови штампе -GenericName[sr@Latn]=Poslovi štampe -GenericName[sv]=Skrivarjobb -GenericName[ta]=அச்சுப் பணிகள் -GenericName[te]=ప్రచురణ పనులు -GenericName[tg]=Корҳои чопгар -GenericName[th]=งานพิมพ์ -GenericName[tr]=Yazdırma Görevleri -GenericName[tt]=Bastıru Eşläre -GenericName[uk]=Задачі друку -GenericName[uz]=Bosib chiqarish vazifalari -GenericName[uz@cyrillic]=Босиб чиқариш вазифалари -GenericName[vi]=Tác vụ In ấn -GenericName[wa]=Bouyes d' imprimaedje -GenericName[zh_CN]=打印任务 -GenericName[zh_TW]=列印工作 - -X-DCOP-ServiceType=Unique -Categories=Qt;KDE;Utility;X-KDE-Utilities-Peripherals; diff --git a/kdeprint/kjobviewer/kjobviewer.h b/kdeprint/kjobviewer/kjobviewer.h deleted file mode 100644 index 967262de2..000000000 --- a/kdeprint/kjobviewer/kjobviewer.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#ifndef KJOBVIEWER_H -#define KJOBVIEWER_H - -#include -#include -#include - -class KMJobViewer; -class KMTimer; -class JobTray; - -class KJobViewerApp : public KUniqueApplication, public KPReloadObject -{ - Q_OBJECT - friend class JobTray; -public: - KJobViewerApp(); - virtual ~KJobViewerApp(); - - virtual int newInstance(); - -protected: - void initialize(); - void reload(); - -protected slots: - void slotJobsShown(KMJobViewer*, bool); - void slotTimer(); - void slotPrinterChanged(KMJobViewer*, const TQString&); - void slotViewerDestroyed(KMJobViewer*); - -private: - TQDict m_views; - JobTray *m_tray; - KMTimer *m_timer; -}; - -#endif diff --git a/kdeprint/kjobviewer/kjobviewerui.rc b/kdeprint/kjobviewer/kjobviewerui.rc deleted file mode 100644 index 83592dfc6..000000000 --- a/kdeprint/kjobviewer/kjobviewerui.rc +++ /dev/null @@ -1,35 +0,0 @@ - - - - &Jobs - - - - - - - - - F&ilter - - - - - - - - - - - - - - - - - - - - - - diff --git a/kdeprint/kjobviewer/main.cpp b/kdeprint/kjobviewer/main.cpp deleted file mode 100644 index e75a00e13..000000000 --- a/kdeprint/kjobviewer/main.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include -#include -#include - -#include "kjobviewer.h" -#include -#include - -static KCmdLineOptions options[] = { - { "d ", I18N_NOOP("The printer for which jobs are requested"), 0 }, - { "noshow", I18N_NOOP("Show job viewer at startup"), 0}, - { "all", I18N_NOOP("Show jobs for all printers"), 0}, - KCmdLineLastOption -}; - - -extern "C" int KDE_EXPORT kdemain(int argc, char *argv[]) -{ - KAboutData aboutData("kjobviewer",I18N_NOOP("KJobViewer"),"0.1",I18N_NOOP("A print job viewer"),KAboutData::License_GPL,"(c) 2001, Michael Goffioul", 0, "http://printing.kde.org"); - aboutData.addAuthor("Michael Goffioul",0,"tdeprint@swing.be"); - KCmdLineArgs::init(argc,argv,&aboutData); - KCmdLineArgs::addCmdLineOptions(options); - KJobViewerApp::addCmdLineOptions(); - - if (!KJobViewerApp::start()) - exit(0); - - KJobViewerApp a; - return a.exec(); -} diff --git a/kdeprint/kprinter/CMakeLists.txt b/kdeprint/kprinter/CMakeLists.txt deleted file mode 100644 index 0849ebe12..000000000 --- a/kdeprint/kprinter/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include( CheckFunctionExists ) -check_function_exists( sigset HAVE_SIGACTION ) -check_function_exists( sigaction HAVE_SIGSET ) - -add_definitions( -D_KDEPRINT_COMPILE ) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### kprinter (tdeinit) ######################## - -tde_add_tdeinit_executable( kprinter AUTOMOC - SOURCES main.cpp printwrapper.cpp - LINK tdeprint-shared -) diff --git a/kdeprint/kprinter/Makefile.am b/kdeprint/kprinter/Makefile.am deleted file mode 100644 index 4cab98880..000000000 --- a/kdeprint/kprinter/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -AM_CPPFLAGS = -D_KDEPRINT_COMPILE - -INCLUDES = $(all_includes) - -bin_PROGRAMS = -lib_LTLIBRARIES = -tdeinit_LTLIBRARIES = kprinter.la - -kprinter_la_SOURCES = main.cpp printwrapper.cpp -kprinter_la_LIBADD = -ltdeprint -kprinter_la_LDFLAGS = -module -avoid-version $(all_libraries) $(KDE_RPATH) -kprinter_la_METASOURCES = AUTO - -noinst_HEADERS = printwrapper.h - -messages: - $(XGETTEXT) *.cpp -o $(podir)/kprinter.pot - diff --git a/kdeprint/kprinter/configure.in.in b/kdeprint/kprinter/configure.in.in deleted file mode 100644 index dd0767216..000000000 --- a/kdeprint/kprinter/configure.in.in +++ /dev/null @@ -1 +0,0 @@ -AC_CHECK_FUNCS(sigset sigaction) diff --git a/kdeprint/kprinter/kprinter.desktop b/kdeprint/kprinter/kprinter.desktop deleted file mode 100644 index bb2de4735..000000000 --- a/kdeprint/kprinter/kprinter.desktop +++ /dev/null @@ -1,107 +0,0 @@ -[Desktop Entry] -Exec=kprinter -Icon=kjobviewer -Terminal=false -Type=Application -DocPath=tdeprint/index.html -X-KDE-StartupNotify=true -Name=KPrinter -Name[af]=KDrukker -Name[cy]=KArgraffydd -Name[eo]=KPrintilo -Name[fy]=Kprinter -Name[hi]=केप्रिंटर -Name[ka]=პრინტერი -Name[lo]=ເຄື່ອງພິມ - K -Name[ne]=K मुद्रक -Name[nl]=Kprinter -Name[nso]=KSegatisi -Name[pa]=ਕੇ-ਪਰਿੰਟਰ -Name[ru]=Принтер -Name[rw]=K-Mucapyi -Name[sv]=Kskrivare -Name[ta]=Kஅச்சியந்திரம் -Name[te]=కెప్రింటర్ -Name[tg]=KЧопгар -Name[th]=เครื่องพิมพ์ K -Name[tr]=KYazıcı -Name[ven]=Phirinthara ya K -Name[vi]=In ấn KDE -Name[wa]=KScrirece (KPrinter) -GenericName=Printing Tool -GenericName[af]=Drukker Program -GenericName[ar]=أداة الطباعة -GenericName[be]=Інструмент друку -GenericName[bg]=Инструмент за печат -GenericName[bn]=মুদ্রণ টুল -GenericName[br]=Ostilh moulañ -GenericName[bs]=Alat za štampu -GenericName[ca]=Eina per a imprimir -GenericName[cs]=Tiskový nástroj -GenericName[csb]=Nôrzãdze do sprôwianiô wëdrëkama -GenericName[cy]=Erfyn Argraffu -GenericName[da]=Udskriftsværktøj -GenericName[de]=Druckprogramm -GenericName[el]=Εργαλείο εκτύπωσης -GenericName[eo]=Ilo por printado -GenericName[es]=Herramienta de impresión -GenericName[et]=Trükkimise rakendus -GenericName[eu]=Imprimatzeko tresna -GenericName[fa]=ابزار چاپ -GenericName[fi]=Tulostustyökalu -GenericName[fr]=Outil d'impression -GenericName[fy]=printprogramma -GenericName[ga]=Uirlis Priontála -GenericName[gl]=Ferramenta de Impresión -GenericName[he]=כלי הדפסה -GenericName[hi]=प्रिंटर औज़ार -GenericName[hr]=Alata za ispisivanje -GenericName[hu]=Nyomtatáskezelő -GenericName[is]=Prentunartól -GenericName[it]=Strumento di stampa -GenericName[ja]=印刷ツール -GenericName[ka]=საბეჭდი უტილიტა -GenericName[kk]=Басып шығару құралы -GenericName[km]=ឧបករណ៍​បោះពុម្ព -GenericName[lo]=ເຄື່ອງມືລະບົບການພິມ์ -GenericName[lt]=Spausdinimo priemonė -GenericName[lv]=Drukāšanas Rīks -GenericName[mk]=Печатарска алатка -GenericName[mn]=Хэвлэх програм -GenericName[ms]=Alat Pencetakan -GenericName[mt]=Għodda tal-ipprintjar -GenericName[nb]=Verktøy for skriverbehandling -GenericName[nds]=Druckwarktüüch -GenericName[ne]=मुद्रण उपकरण -GenericName[nl]=Afdrukprogramma -GenericName[nn]=Utskriftsverktøy -GenericName[nso]=Sebereka sa Kgatiso -GenericName[pa]=ਛਪਾਈ (ਪਰਿੰਟਿੰਗ) ਸੰਦ -GenericName[pl]=Narzędzie do zarządzania wydrukiem -GenericName[pt]=Ferramenta de Impressão -GenericName[pt_BR]=Ferramenta de Impressão -GenericName[ro]=Utilitar de tipărire -GenericName[ru]=Утилита печати -GenericName[rw]=Igikoresho cyo Gucapa -GenericName[se]=Čálihanreaidu -GenericName[sk]=Tlačový nástroj -GenericName[sl]=Orodje za tiskanje -GenericName[sr]=Алат за штампу -GenericName[sr@Latn]=Alat za štampu -GenericName[sv]=Skrivarverktyg -GenericName[ta]=அச்சசியந்திர கருவி -GenericName[tg]=Обзори Чоп -GenericName[th]=เครื่องมือระบบการพิมพ์ -GenericName[tr]=Yazdırma Aracı -GenericName[tt]=Bastıru Qoralı -GenericName[uk]=Засіб друку -GenericName[uz]=Bosib chiqarish vositasi -GenericName[uz@cyrillic]=Босиб чиқариш воситаси -GenericName[ven]=Tshishumiswa tshau phirintha -GenericName[vi]=Công cụ In ấn -GenericName[wa]=Usteye d' imprimaedje -GenericName[xh]=Isixhobo Sokushicilela -GenericName[zh_CN]=打印工具 -GenericName[zh_TW]=列印工具 -GenericName[zu]=Ithuluzi Lokushicelela - diff --git a/kdeprint/kprinter/main.cpp b/kdeprint/kprinter/main.cpp deleted file mode 100644 index 5d1667cee..000000000 --- a/kdeprint/kprinter/main.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "printwrapper.h" - -#include -#include -#include -#include - -static KCmdLineOptions options[] = -{ - { "c", I18N_NOOP("Make an internal copy of the files to print"), 0}, - { "P", 0, 0 }, - { "d ", I18N_NOOP("Printer/destination to print on"), 0}, - { "J", 0, 0 }, - { "t ", I18N_NOOP("Title/Name for the print job" ), 0}, - { "#", 0, 0 }, - { "n <number>", I18N_NOOP("Number of copies"), 0 }, - { "o <option=value>", I18N_NOOP("Printer option" ), 0}, - { "j <mode>", I18N_NOOP("Job output mode (gui, console, none)" ), "gui"}, - { "system <printsys>",I18N_NOOP("Print system to use (lpd, cups)" ), 0}, - { "stdin", I18N_NOOP("Allow printing from STDIN" ), 0}, - { "nodialog", I18N_NOOP("Do not show the print dialog (print directly)"), 0}, - { "+file(s)", I18N_NOOP("Files to load" ), 0}, - KCmdLineLastOption -}; - -extern "C" int KDE_EXPORT kdemain(int argc, char *argv[]) -{ - KCmdLineArgs::init(argc,argv,"kprinter",I18N_NOOP("KPrinter"),I18N_NOOP("A printer tool for KDE" ),"0.0.1"); - KCmdLineArgs::addCmdLineOptions(options); - KApplication app; - PrintWrapper *wrap = new PrintWrapper; - app.setMainWidget(wrap); - TQTimer::singleShot(10,wrap,TQT_SLOT(slotPrint())); - - int result = app.exec(); - delete wrap; - - return result; -} diff --git a/kdeprint/kprinter/printwrapper.cpp b/kdeprint/kprinter/printwrapper.cpp deleted file mode 100644 index effa3dea3..000000000 --- a/kdeprint/kprinter/printwrapper.cpp +++ /dev/null @@ -1,403 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "printwrapper.h" - -#include <unistd.h> -#include <signal.h> -#include <sys/time.h> - -#include <tqstring.h> -#include <tqstringlist.h> -#include <stdlib.h> -#include <kmessagebox.h> -#include <tqfile.h> -#include <tqtimer.h> -#include <tqregexp.h> -#include <tqsocketnotifier.h> - -#include <kapplication.h> -#include <kcmdlineargs.h> -#include <klocale.h> -#include <kstandarddirs.h> -#include <kio/netaccess.h> -#include <kurl.h> -#include <kdebug.h> -#include <ktempfile.h> - -#include <kprinter.h> -#include <tdeprint/kmmanager.h> -#include <tdeprint/kmprinter.h> -#include <tdeprint/kprintdialog.h> - -void signal_handler(int); -TQString tempFile; -bool fromStdin = false; -char job_output = 0; // 0: dialog, 1: console, 2: none -char readchar = '\0'; -bool dataread = false; -bool docopy = false; - -void showmsgdialog(const TQString& msg, int type = 0) -{ - switch (type) - { - case 0: KMessageBox::information(NULL,msg,i18n("Print Information")); break; - case 1: KMessageBox::sorry(NULL,msg,i18n("Print Warning")); break; - case 2: KMessageBox::error(NULL,msg,i18n("Print Error")); break; - } -} - -void showmsgconsole(const TQString& msg, int type = 0) -{ - TQString errmsg = TQString::tqfromLatin1("%1 : ").arg((type == 0 ? i18n("Print info") : (type == 1 ? i18n("Print warning") : i18n("Print error")))); - kdDebug() << errmsg << msg << endl; -} - -void showmsg(const TQString& msg, int type = 0) -{ - switch (job_output) { - case 0: showmsgdialog(msg,type); break; - case 1: showmsgconsole(msg,type); break; - default: break; - } -} - -void errormsg(const TQString& msg) -{ - showmsg(msg,2); - exit(1); -} - -void signal_handler(int s) -{ - TQFile::remove(tempFile); - exit(s); -} - -TQString copyfile( const TQString& filename ) -{ - kdDebug( 500 ) << "Copying file " << filename << endl; - TQString result; - TQFile f( filename ); - if ( f.open( IO_ReadOnly ) ) - { - KTempFile temp; - temp.setAutoDelete( false ); - TQFile *tf = temp.file(); - if ( tf ) - { - char buffer[ 0xFFFF ]; - int b = 0; - while ( ( b = f.readBlock( buffer, 0xFFFF ) ) > 0 ) - { - if ( tf->writeBlock( buffer, b ) != b ) - break; - } - tf->close(); - if ( b > 0 ) - temp.setAutoDelete( true ); - else - { - kdDebug( 500 ) << "File copied to " << temp.name() << endl; - result = temp.name(); - } - } - else - temp.setAutoDelete( true ); - f.close(); - } - return result; -} - -//****************************************************************************************************** - -PrintWrapper::PrintWrapper() -: TQWidget(), force_stdin(false), check_stdin(true) -{ -} - -void PrintWrapper::slotPrint() -{ - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - -#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) - struct sigaction action; -#endif /* HAVE_SIGACTION && !HAVE_SIGSET*/ - - // read variables from command line - TQString printer = args->getOption("d"); - TQString title = args->getOption("t"); - int ncopies = TQString(args->getOption("n")).toInt(); - TQString job_mode = args->getOption("j"); - TQString system = args->getOption("system"); - QCStringList optlist = args->getOptionList("o"); - TQMap<TQString,TQString> opts; - KURL::List files; - TQStringList filestoprint; - force_stdin = args->isSet("stdin"); - docopy = args->isSet( "c" ); - bool nodialog = !(args->isSet("dialog")); - - if( isatty( 0 )) - { - kdDebug( 500 ) << "stdin is a terminal, disabling it" << endl; - check_stdin = false; - } - - // parse options - for (QCStringList::ConstIterator it=optlist.begin(); it!=optlist.end(); ++it) - { - TQStringList l = TQStringList::split('=',TQString(*it),false); - if (l.count() >= 1) opts[l[0]] = (l.count() == 2 ? l[1] : TQString::null); - } - - // read file list - for (int i=0; i<args->count(); i++) - files.append(args->url(i)); - - // some clean-up - args->clear(); - - // set default values if necessary - if (job_mode == "console") job_output = 1; - else if (job_mode == "none") job_output = 2; - else job_output = 0; - - // some checking - if ( files.count() > 0) - { - check_stdin = false; - - if( force_stdin ) - { - showmsg(i18n("A file has been specified on the command line. Printing from STDIN will be disabled."), 1); - force_stdin = false; - } - } - if (nodialog && files.count() == 0 &&!force_stdin && !check_stdin ) - { - errormsg(i18n("When using '--nodialog', you must at least specify one file to print or use the '--stdin' flag.")); - } - - if( check_stdin ) - { // check if there's any input on stdin - fd_set in; - struct timeval tm; - tm.tv_sec = 0; - tm.tv_usec = 0; - FD_ZERO( &in ); - FD_SET( 0, &in ); - if( select( 1, &in, NULL, NULL, &tm ) ) - { // we have data on stdin - if ( read( 0, &readchar, 1 ) > 0 ) - { - force_stdin = true; - check_stdin = false; - dataread = true; - kdDebug( 500 ) << "input detected on stdin" << endl; - } - else - { - force_stdin = check_stdin = false; - kdDebug( 500 ) << "stdin closed and empty" << endl; - } - } - else - kdDebug( 500 ) << "no input on stdin at startup" << endl; - } - - // force_stdin ? or also check_stdin ? - KPrinter::ApplicationType dialog_mode = (force_stdin || nodialog ? KPrinter::StandAlone : KPrinter::StandAlonePersistent); - KPrinter::setApplicationType(dialog_mode); - if (!force_stdin) - KPrinter::addStandardPage(KPrinter::FilesPage); - - KPrinter kprinter; - if (nodialog) - { - KMPrinter *prt(0); - KMManager *mgr = KMManager::self(); - - mgr->printerList(false); - if (!printer.isEmpty()) - prt = mgr->findPrinter(printer); - else - prt = mgr->defaultPrinter(); - - if (prt == 0) - errormsg(i18n("The specified printer or the default printer could not be found.")); - else if (!prt->autoConfigure(&kprinter)) - errormsg(i18n("Operation aborted.")); - } - else if (!printer.isEmpty()) - kprinter.setSearchName(printer); - kprinter.setDocName(title); - kprinter.initOptions(opts); - kprinter.setOption("kde-filelist", files.toStringList().join("@@")); - kdDebug( 500 ) << kprinter.option( "kde-filelist" ) << endl; - if (ncopies > 0) - kprinter.setNumCopies(ncopies); - - if (nodialog) - slotPrintRequested(&kprinter); - else - { - dlg = KPrintDialog::printerDialog(&kprinter, 0); - if (dlg) - { - connect(dlg, TQT_SIGNAL(printRequested(KPrinter*)), TQT_SLOT(slotPrintRequested(KPrinter*))); - if( check_stdin ) - { - notif = new TQSocketNotifier( 0, TQSocketNotifier::Read, TQT_TQOBJECT(this) ); - connect( notif, TQT_SIGNAL( activated( int )), this, TQT_SLOT( slotGotStdin())); - kdDebug( 500 ) << "waiting for input on stdin" << endl; - } - dlg->exec(); - delete dlg; - } - else - errormsg(i18n("Unable to construct the print dialog.")); - } - - TQTimer::singleShot(10,kapp,TQT_SLOT(quit())); -} - -void hack( KPrintDialog* dlg ); - -void PrintWrapper::slotGotStdin() -{ - delete notif; - if ( read( 0, &readchar, 1 ) > 0 ) - { - force_stdin = true; - check_stdin = false; - dataread = true; - dlg->enableDialogPage( 0, false ); - kdDebug( 500 ) << "got delayed input on stdin" << endl; - } -} - -void PrintWrapper::slotPrintRequested(KPrinter *kprinter) -{ - // re-initialize docName - kprinter->setDocName(TQString::null); - - // download files if needed - TQStringList files = TQStringList::split("@@", kprinter->option("kde-filelist"), false), filestoprint; - for (TQStringList::ConstIterator it=files.begin(); it!=files.end(); ++it) - { - TQString tmpFile; - KURL url = KURL::fromPathOrURL(*it); - kdDebug( 500 ) << url.url() << endl; - if (KIO::NetAccess::download(url, tmpFile, this)) - { - filestoprint << tmpFile; - kprinter->setDocName(url.fileName()); - } - } - - if (filestoprint.count() > 1) - kprinter->setDocName(i18n("Multiple files (%1)").arg(filestoprint.count())); - else if (kprinter->docName().isEmpty()) - kprinter->setDocName(force_stdin ? "<STDIN>" : "KPrinter"); - if (filestoprint.count() == 0) - { - // At this point force_stdin should be true - if (!force_stdin) - errormsg(i18n("Nothing to print.")); - - // print from stdin - -# if defined(HAVE_SIGSET) - sigset(SIGHUP, signal_handler); - sigset(SIGINT, signal_handler); - sigset(SIGTERM, signal_handler); -# elif defined(HAVE_SIGACTION) - memset(&action, 0, sizeof(action)); - action.sa_handler = signal_handler; - - sigaction(SIGHUP, &action, NULL); - sigaction(SIGINT, &action, NULL); - sigaction(SIGTERM, &action, NULL); -# else - signal(SIGHUP, signal_handler); - signal(SIGINT, signal_handler); - signal(SIGTERM, signal_handler); -# endif - - tempFile = locateLocal("tmp","kprinter_")+TQString::number(getpid()); - filestoprint.append(tempFile); - fromStdin = true; - FILE *fout = fopen(TQFile::encodeName(filestoprint[0]),"w"); - if (!fout) errormsg(i18n("Unable to open temporary file.")); - char buffer[8192]; - int s; - - // check for previously read data - if ( dataread ) - fwrite( &readchar, 1, 1, fout ); - // read stdin and write to temporary file - while ((s=fread(buffer,1,sizeof(buffer),stdin)) > 0) - fwrite(buffer,1,s,fout); - - s = ftell(fout); - fclose(fout); - if (s <= 0) - { - showmsg(i18n("Stdin is empty, no job sent."), 2); - TQFile::remove(filestoprint[0]); - return; - } - } - else if ( docopy ) - { - for ( TQStringList::Iterator it=filestoprint.begin(); it!=filestoprint.end(); ++it ) - { - TQString tmp = copyfile( *it ); - if ( tmp.isEmpty() ) - { - errormsg( i18n( "Unable to copy file %1." ).arg( *it ) ); - return; - } - *it = tmp; - } - fromStdin = true; - } - else - fromStdin = false; - - // print all files. Remove it after if printing from - // stdin. "kprinter" shouldn't remove temp file itself, - // otherwise the temp file might get removed before the - // print process finishes. - bool ok = kprinter->printFiles(filestoprint, fromStdin); - - if (!ok) - showmsg(i18n("Error while printing files"), 2); - // Do not show this dialog anymore. Code sould be removed definitively - // if nobody complains. - /*else - { - QString msg = i18n("<nobr>File(s) sent to printer <b>%1</b>.</nobr>").arg(kprinter->printerName()); - showmsg(msg,0); - }*/ -} - -#include "printwrapper.moc" diff --git a/kdeprint/kprinter/printwrapper.h b/kdeprint/kprinter/printwrapper.h deleted file mode 100644 index e34e8d964..000000000 --- a/kdeprint/kprinter/printwrapper.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#ifndef PRINTWRAPPER_H -#define PRINTWRAPPER_H - -#include <tqwidget.h> - -class KPrinter; -class KPrintDialog; -class TQSocketNotifier; - -class PrintWrapper : public TQWidget -{ - Q_OBJECT -public: - PrintWrapper(); - -public slots: - void slotPrint(); - void slotPrintRequested(KPrinter*); - -private slots: - void slotGotStdin(); - -private: - bool force_stdin; - bool check_stdin; - KPrintDialog* dlg; - TQSocketNotifier* notif; -}; - -#endif diff --git a/kdeprint/printmgr/CMakeLists.txt b/kdeprint/printmgr/CMakeLists.txt deleted file mode 100644 index af68abb3f..000000000 --- a/kdeprint/printmgr/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -add_definitions( -D_KDEPRINT_COMPILE ) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### other data ################################ - -tde_install_icons( printmgr ) -install( FILES printers.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) - - -##### kcm_printmgr (module) ##################### - -tde_add_kpart( kcm_printmgr AUTOMOC - SOURCES kcmprintmgr.cpp - LINK tdeprint_management-shared - DESTINATION ${PLUGIN_INSTALL_DIR} -) diff --git a/kdeprint/printmgr/Makefile.am b/kdeprint/printmgr/Makefile.am deleted file mode 100644 index d0932829a..000000000 --- a/kdeprint/printmgr/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -AM_CPPFLAGS = -D_KDEPRINT_COMPILE - -INCLUDES = $(all_includes) - -kde_module_LTLIBRARIES = kcm_printmgr.la - -kcm_printmgr_la_SOURCES = kcmprintmgr.cpp -kcm_printmgr_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined -kcm_printmgr_la_LIBADD = -ltdeprint_management - -noinst_HEADERS = kcmprintmgr.h - -KDE_ICON = printmgr - -xdg_apps_DATA = printers.desktop - -messages: rc.cpp - $(XGETTEXT) *.cpp -o $(podir)/kcmprintmgr.pot diff --git a/kdeprint/printmgr/hi128-app-printmgr.png b/kdeprint/printmgr/hi128-app-printmgr.png deleted file mode 100644 index 7db5f56b1..000000000 Binary files a/kdeprint/printmgr/hi128-app-printmgr.png and /dev/null differ diff --git a/kdeprint/printmgr/hi16-app-printmgr.png b/kdeprint/printmgr/hi16-app-printmgr.png deleted file mode 100644 index d6defce21..000000000 Binary files a/kdeprint/printmgr/hi16-app-printmgr.png and /dev/null differ diff --git a/kdeprint/printmgr/hi22-app-printmgr.png b/kdeprint/printmgr/hi22-app-printmgr.png deleted file mode 100644 index a71ee2817..000000000 Binary files a/kdeprint/printmgr/hi22-app-printmgr.png and /dev/null differ diff --git a/kdeprint/printmgr/hi32-app-printmgr.png b/kdeprint/printmgr/hi32-app-printmgr.png deleted file mode 100644 index d554b554f..000000000 Binary files a/kdeprint/printmgr/hi32-app-printmgr.png and /dev/null differ diff --git a/kdeprint/printmgr/hi48-app-printmgr.png b/kdeprint/printmgr/hi48-app-printmgr.png deleted file mode 100644 index 13adbd006..000000000 Binary files a/kdeprint/printmgr/hi48-app-printmgr.png and /dev/null differ diff --git a/kdeprint/printmgr/hi64-app-printmgr.png b/kdeprint/printmgr/hi64-app-printmgr.png deleted file mode 100644 index 5d22d215e..000000000 Binary files a/kdeprint/printmgr/hi64-app-printmgr.png and /dev/null differ diff --git a/kdeprint/printmgr/hisc-app-printmgr.svgz b/kdeprint/printmgr/hisc-app-printmgr.svgz deleted file mode 100644 index f40b4bdfa..000000000 Binary files a/kdeprint/printmgr/hisc-app-printmgr.svgz and /dev/null differ diff --git a/kdeprint/printmgr/kcmprintmgr.cpp b/kdeprint/printmgr/kcmprintmgr.cpp deleted file mode 100644 index 34b773070..000000000 --- a/kdeprint/printmgr/kcmprintmgr.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "kcmprintmgr.h" -#include "tdeprint/kmmainview.h" - -#include <tqlayout.h> - -#include <kgenericfactory.h> -#include <kaboutdata.h> -#include <kdebug.h> -#include <klocale.h> - -typedef KGenericFactory<KCMPrintMgr, TQWidget> KPrintMgrFactory; -K_EXPORT_COMPONENT_FACTORY( kcm_printmgr, KPrintMgrFactory("kcmprintmgr") ) - -KCMPrintMgr::KCMPrintMgr(TQWidget *parent, const char *name, const TQStringList &) -: KCModule(KPrintMgrFactory::instance(),parent,name) -{ - setButtons(KCModule::Ok); - setRootOnlyMsg( i18n( - "Print management as normal user\n" - "Some print management operations may need administrator privileges. Use the\n" - "\"Administrator Mode\" button below to start this print management tool with\n" - "administrator privileges.") ); - setUseRootOnlyMsg(false); - - m_mainview = new KMMainView(this,"MainView"); - - TQVBoxLayout *main_ = new TQVBoxLayout(this, 0, 0); - main_->addWidget(m_mainview); - main_->activate(); - - KAboutData *about = - new KAboutData(I18N_NOOP("kcmprintmgr"), I18N_NOOP("KDE Printing Management"), - 0, 0, KAboutData::License_GPL, - I18N_NOOP("(c) 2000 - 2002 Michael Goffioul")); - about->addAuthor("Michael Goffioul", 0, "tdeprint@swing.be"); - setAboutData(about); -} - -TQString KCMPrintMgr::quickHelp() const -{ - return i18n("<h1>Printers</h1>The KDE printing manager is part of KDEPrint which " - "is the interface to the real print subsystem of your Operating System (OS). " - "Although it does add some additional functionality of its own to those subsystems, " - "KDEPrint depends on them for its functionality. Spooling and filtering tasks, especially, " - "are still done by your print subsystem, or the administrative tasks (adding or " - "modifying printers, setting access rights, etc.)<br/> " - "What print features KDEPrint supports is therefore heavily dependent on your chosen print " - "subsystem. For the best support in modern printing, the KDE Printing Team recommends " - "a CUPS based printing system."); -} - -KCMPrintMgr::~KCMPrintMgr() -{ -} diff --git a/kdeprint/printmgr/kcmprintmgr.h b/kdeprint/printmgr/kcmprintmgr.h deleted file mode 100644 index e82bc730f..000000000 --- a/kdeprint/printmgr/kcmprintmgr.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#ifndef KCMPRINTMGR_H -#define KCMPRINTMGR_H - -#include <kcmodule.h> - -class KMMainView; - -class KCMPrintMgr : public KCModule -{ -public: - KCMPrintMgr(TQWidget *parent, const char *name, const TQStringList &); - ~KCMPrintMgr(); - - TQString quickHelp() const; - -private: - KMMainView *m_mainview; -}; - -#endif diff --git a/kdeprint/printmgr/printers.desktop b/kdeprint/printmgr/printers.desktop deleted file mode 100644 index 38820b20b..000000000 --- a/kdeprint/printmgr/printers.desktop +++ /dev/null @@ -1,235 +0,0 @@ -[Desktop Entry] -Exec=kcmshell printers -Icon=printmgr -Type=Application -DocPath=tdeprint/index.html -MimeType=print/manager; - -X-KDE-ModuleType=Library -X-KDE-Library=printmgr -X-KDE-RootOnly=true -X-KDE-HasReadOnlyMode=true - -Name=Printers -Name[af]=Drukkers -Name[ar]=الطابعات -Name[be]=Друкаркі -Name[bg]=Принтери -Name[bn]=মুদ্রণ -Name[br]=Moullerezioù -Name[bs]=Štampači -Name[ca]=Impressores -Name[cs]=Tiskárny -Name[csb]=Drëkerë -Name[cy]=Argraffyddion -Name[da]=Printere -Name[de]=Drucker -Name[el]=Εκτυπωτές -Name[eo]=Printiloj -Name[es]=Impresoras -Name[et]=Printerid -Name[eu]=Inprimagailuak -Name[fa]=چاپگرها -Name[fi]=Tulostimet -Name[fr]=Imprimantes -Name[ga]=Printéirí -Name[gl]=Impresoras -Name[he]=מדפסות -Name[hi]=प्रिंटर -Name[hr]=Pisači -Name[hu]=Nyomtató -Name[is]=Prentarar -Name[it]=Stampanti -Name[ja]=プリンタ -Name[ka]=პრინტერები -Name[kk]=Принтерлер -Name[km]=ម៉ាស៊ីន​បោះពុម្ព -Name[lo]=ເຄື່ອງພິມ - K -Name[lt]=Spausdintuvai -Name[lv]=Printeri -Name[mk]=Печатачи -Name[mn]=Хэвлэгч -Name[ms]=Pencetak -Name[nb]=Skrivere -Name[nds]=Druckers -Name[ne]=मुद्रक -Name[nn]=Skrivarar -Name[nso]=Digatisi -Name[pa]=ਪਰਿੰਟਰ -Name[pl]=Drukarki -Name[pt]=Impressoras -Name[pt_BR]=Impressoras -Name[ro]=Imprimante -Name[ru]=Принтеры -Name[rw]=Mucapyi -Name[se]=Čálánat -Name[sk]=Tlačiarne -Name[sl]=Tiskalniki -Name[sr]=Штампачи -Name[sr@Latn]=Štampači -Name[ss]=Tishiceleli -Name[sv]=Skrivare -Name[ta]=அச்சியந்திரம் -Name[te]=ప్రింటర్లు -Name[tg]=Чопгарҳо -Name[th]=เครื่องพิมพ์ -Name[tr]=Yazıcılar -Name[tt]=Basaqlar -Name[uk]=Принтери -Name[uz]=Printerlar -Name[uz@cyrillic]=Принтерлар -Name[ven]=Dziphirinthara -Name[vi]=Máy in -Name[wa]=Sicrireces -Name[xh]=Abashicileli -Name[zh_CN]=打印机 -Name[zh_TW]=印表機 -Name[zu]=Abashicileli - -Comment=Printing system configuration (printers, jobs, classes, ...) -Comment[af]=Drukker substelsel opstelling (drukkers, werke, klasse, ...) -Comment[ar]=إعداد نظام الطباعة (الطابعات, المهمات, الفئات ...) -Comment[az]=Çap Etmə sistemi quraşdırması (çap edicilər, vəzifələr, siniflər, ...) -Comment[be]=Настаўленні сістэмы друку (друкаркі, заданні, класы, ...) -Comment[bg]=Настройване на системата за печат -Comment[bn]=মুদ্রণব্যবস্থার কনফিগারেশন (printers, jobs, classes, ...) -Comment[bs]=Podešavanje sistema štampe (štampači, zadaci, klase, ...) -Comment[ca]=Configuració del sistema d'impressió (impressores, tasques, classes...) -Comment[cs]=Nastavení tiskového systému (tiskárny, úlohy, třídy, ...) -Comment[csb]=Kònfigùracëjô systemë drëkòwaniô (drëkrë, pòlétë, klasë, ...) -Comment[cy]=Ffurfweddu cysawd argraffu (argraffyddion, swyddi, dosbarthidau, ...) -Comment[da]=Printersystemindstilling (printere, job, klasser, ...) -Comment[de]=Einrichtung des Drucksystems (Drucker, Aufträge, Klassen ...) -Comment[el]=Ρύθμιση συστήματος εκτύπωσης (εκτυπωτές, εργασίες, κλάσεις, ...) -Comment[eo]=Agordo de printiloj, taskoj, klasoj,... -Comment[es]=Configuración del sistema de impresión (impresoras, trabajos, clases...) -Comment[et]=Trükkimissüsteemi seadistamine (printerid, tööd, klassid...) -Comment[eu]=Inprimaketa sistemaren konfigurazioa (inprimagailuak, lanak, claseak, ...) -Comment[fa]=پیکربندی سیستم چاپ )چاپگرها، کارها، رده‌ها و ...( -Comment[fi]=Tulostusjärjestelmän asetukset (tulostimet, työt, luokat, ...) -Comment[fr]=Configuration du système d'impression (imprimantes, travaux d'impression, classes...) -Comment[fy]=Ynstellings fan it printsysteem (printers, taken, klassen, ...) -Comment[gl]=Configuración do sistema de Impresión (impresoras, traballos, clases, ...) -Comment[he]=שינוי הגדרות מערכת ההדפסה (מדפסות, עבודות, מחלקות...) -Comment[hi]=प्रिंटर तंत्र कॉन्फ़िगरेशन (प्रिंटर,कार्य,क्लासेस...) -Comment[hr]=Konfiguriranje ispisnog sustava (pisači, zadaci, klase...) -Comment[hu]=A nyomtatási rendszer beállításai -Comment[is]=Stillingar prentkerfis KDE forrita (prentara, verk, flokka,...) -Comment[it]=Configurazione del sistema di stampa (stampanti, lavori, classi, ...) -Comment[ja]=印刷システムの設定 (プリンタ、ジョブ、クラスなど) -Comment[ka]=ბეჭდვის სისტემის კონფიგურაცია (პრინტერები, დავალებები, კლასები,...) -Comment[kk]=Басып шығару жүйесін баптау (принтерлер, тапсырмалар, кластар, ...) -Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​ប្រព័ន្ធ​បោះពុម្ព (ម៉ាស៊ីន​បោះពុម្ព ការងារ សន្ដាន...) -Comment[lo]=ປັບແຕ່ງລະບົບການພິມ (ເຄື່ອງພິມ,ງານພິມ,ຄລາສ, ...) -Comment[lt]=Spausdinimo sistemos konfigūravimas (spausdintuvai, užduotys, klasės, ...) -Comment[lv]=Drukas sistēmas konfigurācija (drukas iekārtas, darbi, klases, ...) -Comment[mk]=Конфигурација на печатарскиот систем (печатачи, задачи, класи, ...) -Comment[mn]=Хэвлэх системийн тохируулга(Хэвлэгч,Даалгавар, Ангиуд...) -Comment[ms]=Konfigurasi sistem pencetakan [pencetak, kerja, kelas, ...) -Comment[mt]=Konfigurazzjoni tas-sistema tal-ipprintjar (printers, xogħol, klassijiet, ...) -Comment[nb]=Tilpass utskriftssystemet (skrivere, jobber, klasser …) -Comment[nds]=Instellen för dat Drucksysteem (Druckers, Opgaven, Klassen, ...) -Comment[ne]=मुद्रण प्रणाली कन्फिगरेसन (मुद्रक, कार्य, बग, ...) -Comment[nl]=Configuratie van het afdruksysteem (printers, taken, klassen, ...) -Comment[nn]=Oppsett av utskriftssystem (skrivarar, jobbar, klassar, …) -Comment[nso]=Peakanyo ya system ya kgatiso (digatisi, mesomo, maemo,...) -Comment[pa]=ਪਰਿੰਟਿੰਗ ਸਿਸਟਮ ਸੰਰਚਨਾ (ਪਰਿੰਟਰ, ਕੰਮ, ਕਲਾਸ, ...) -Comment[pl]=Konfiguracja systemu drukowania (drukarki, zadania, klasy, ...) -Comment[pt]=Configuração do sistema de impressão (impressoras, tarefas, classes, ...) -Comment[pt_BR]=Configuração do sistema de impressão (impressoras, trabalhos, classes, ...) -Comment[ro]=Configurează sistemul de tipărire (imprimante, lucrări, clase) -Comment[ru]=Настройки системы печати (принтеры, задания, классы...) -Comment[rw]=Iboneza rya sisitemu y'icapa (Mucapyi,imirimo,inzego,..) -Comment[se]=Heivet čálihanvuogádaga (čálániid, barggut, luohkkát, …) -Comment[sk]=Nastavenie systému tlače (tlačiarne, úlohy, triedy, ...) -Comment[sl]=Nastavitev sistema tiskanja (tiskalniki, opravila, razredi ...) -Comment[sr]=Подешавање система за штампање (штампачи, послови, класе, ...) -Comment[sr@Latn]=Podešavanje sistema za štampanje (štampači, poslovi, klase, ...) -Comment[sv]=Anpassa skrivarsystem (skrivare, jobb, klasser...) -Comment[ta]=அச்சியந்திர சாதன வடிவமைப்பு (அச்சியந்திரங்கள், வேலைகள், பிரிவுகள், ...) -Comment[tg]= Танзимоти системаи чоп (чопгарҳо, корҳо, синфҳо ва ғайра) -Comment[th]=ปรับแต่งระบบการพิมพ์ (เครื่องพิมพ์, งานพิมพ์, คลาส, ...) -Comment[tr]=Yazdırma sistemi kurulumu (yazıcılar, işler, sınıflar, ...) -Comment[tt]=Bastıru sistemeneñ caylawı: basaqlar, eşlär, törlär kebek närsä -Comment[uk]=Налаштування системи друку (принтери, задачі, класи, ...) -Comment[uz]=Bosib chiqarish tizimini moslash (printerlar, vazifalar, sinflar...) -Comment[uz@cyrillic]=Босиб чиқариш тизимини мослаш (принтерлар, вазифалар, синфлар...) -Comment[ven]=Nzudzanyo ya maitele au phirintha (Dziphirinthara, mishumo, dzikilasi,...) -Comment[vi]=Cấu hình hệ thống in ấn (máy in, tác vụ in, lớp, ...) -Comment[wa]=Apontiaedje do sistinme d' imprimaedje (sicrireces, bouyes, classes...) -Comment[xh]=Uqwalaselo lwendlela yoshicilelo (abashicileli, imisebenzi, iintlobo, ...) -Comment[zh_CN]=打印系统配置(打印机、任务、类等等) -Comment[zh_TW]=列印系統設定 (印表機、工作、類別等等) -Comment[zu]=Inhlanganiselo yesistimu yokushicilelo (abashicileli, imisebenzi, amakilasi, ...) - -Keywords=print,printer,printing management -Keywords[af]=print,printer,printing bestuuring -Keywords[ar]=طبع, طباعة, ادارة الطابعات -Keywords[az]=çap et,çap edici,çap etmə idarəsi -Keywords[be]=Друк,Друкаваць,Друкарка,Кіраванне друкам,print,printer,printing management -Keywords[bg]=печат, принтер, отпечатване, управление, система, print, printer, printing management -Keywords[ca]=imprimir,impressora,gestió de la impressió -Keywords[cs]=tisk,tiskárna,správa tisku -Keywords[csb]=drëkùjë,drëker,sprôwianié wëdrëkama -Keywords[cy]=argraffu,argraffydd,rheoli argraffu -Keywords[da]=udskriv,printer,printerhåndtering -Keywords[de]=Druck,Druckaufträge,Druckerverwaltung -Keywords[el]=εκτύπωση,εκτυπωτής,διαχείριση εκτυπώσεων -Keywords[eo]=printo,printado,presado,presilo,presadminsitrado -Keywords[es]=imprimir,impresora,gestión de impresión -Keywords[et]=trükkimine,printer,trükkimise haldamine -Keywords[eu]=inprimatu,inprimagailua,inprimaketa kudeaketa -Keywords[fa]=چاپ، چاپگر، مدیریت چاپ -Keywords[fi]=tulostus,tulostin,tulostuksenhallinta -Keywords[fr]=impression,imprimante,système d'impression -Keywords[fy]=print,printer,printing management,printbehear,printsje -Keywords[ga]=priontáil,printéir,bainisteoireacht priontála -Keywords[gl]=imprimir,impresora,xestión de impresión -Keywords[he]=הדפסה,מדפסת,ניהול הדפסה, print,printer,printing management -Keywords[hi]=छापा,प्रिंटर,छपाई प्रबंधन -Keywords[hr]=print,printer,printing management,ispis,pisač,upravljanje ispisivanjem -Keywords[hu]=nyomtatás,nyomtató,nyomtatáskezelés -Keywords[is]=prentun,prentari,prentstjórnun -Keywords[it]=stampa,stampante,gestione stampa -Keywords[ja]=印刷, プリンタ, 印刷管理 -Keywords[km]=បោះពុម្ព,ម៉ាស៊ីន​បោះពុម្ព,គ្រប់គ្រង​ការ​បោះពុម្ព -Keywords[lo]=ພິມ,ເຄື່ອງພິມ,ຈັດການພິມ -Keywords[lt]=print,printer,printing management,spausdinti,spausdintuvas,spausdinimo tvarkymas -Keywords[lv]=druka,drukas iekārta,drukāšanas menedžments -Keywords[mk]=print,printer,printing management,печати,печатач,менаџмент на печатење -Keywords[mn]=Хэвлэх,Хэвлэгч,Хэвлэгчийн удирдлага -Keywords[ms]=cetak, pencetak, pengurusan pencetakan -Keywords[mt]=print,printer,printing management,stampar,printja,stampa,ipprintja -Keywords[nb]=utskrift,skriver,utskriftskontroll -Keywords[nds]=drucken,Drucker,Opgaav,Opgaven,Druckopgaav,Druckopgaven,Opdrag,Druckopdrag,Opdrääg,Druckopdrääg -Keywords[ne]=मुद्रण, मुद्रक, मुद्रण व्यवस्थापन -Keywords[nl]=print,printer,printing management,afdrukbeheer,afdrukken -Keywords[nn]=utskrift,skrivar,utskriftshandsaming -Keywords[nso]=taolo ya kgatiso,segatisi,kgatiso -Keywords[pa]=ਛਾਪਣ,ਪਰਿੰਟਰ,ਪਰਿੰਟ,ਪਰਿੰਟ ਮੈਨੇਜਰ -Keywords[pl]=drukuj,drukarka,zarządzanie drukowaniem -Keywords[pt]=imprimir,impressora,gestão de impressão -Keywords[pt_BR]=imprimir,impressora,gerenciamento de impressão -Keywords[ro]=tipărire,printare,imprimantă,administrare tipărire -Keywords[rw]=gucapa,mucapyi,igenzura ry'icapa -Keywords[se]=čáliheapmi,čálán,čálihangieđahalli -Keywords[sk]=tlač,tlačiareň,správa tlače -Keywords[sl]=tiskanje,tiskalnik,upravljanje tiskanja -Keywords[sr]=print,printer,printing management,штампање,штампач,управљање штампом -Keywords[sr@Latn]=print,printer,printing management,štampanje,štampač,upravljanje štampom -Keywords[sv]=skriv ut,skrivare,skrivarhantering -Keywords[ta]=அச்சு, அச்சியந்திரம்,அச்சு மேலாளர் -Keywords[th]=พิมพ์,เครื่องพิมพ์,จัดการการพิมพ์ -Keywords[tr]=yazdır,yazıcı,yazıcı yönetimi -Keywords[uk]=друк,принтер,керування друком -Keywords[uz]=printer,bosib chiqarish,bosib chiqarishni boshqarish -Keywords[uz@cyrillic]=принтер,босиб чиқариш,босиб чиқаришни бошқариш -Keywords[ven]=u phirintha,phirinthara,vhulanguli ha phirinthara -Keywords[vi]=in ấn,máy in,quản lí in ấn -Keywords[wa]=rexhe,sicrirece,manaedjmint di l' imprimaedje,imprimaedje -Keywords[xh]=shicilela,umshicileli,uphatho lokushicilela -Keywords[zh_CN]=print,printer,printing management,打印,打印机,打印管理 -Keywords[zh_TW]=print,printer,printing management,列印,印表機,列印管理 -Keywords[zu]=shicilela,umshicileli,abaphathi boshicilelo - -Categories=Qt;KDE;X-KDE-settings-hardware;Settings; diff --git a/kdeprint/slave/CMakeLists.txt b/kdeprint/slave/CMakeLists.txt deleted file mode 100644 index db9162a1b..000000000 --- a/kdeprint/slave/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -add_definitions( -D_KDEPRINT_COMPILE ) - -add_subdirectory( mimetypes ) -add_subdirectory( templates ) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### other data ################################ - -install( FILES print.protocol printdb.protocol DESTINATION ${SERVICES_INSTALL_DIR} ) - - -##### kio_print (module) ######################## - -tde_add_kpart( kio_print AUTOMOC - SOURCES kio_print.cpp - LINK tdeprint-shared - DESTINATION ${PLUGIN_INSTALL_DIR} -) diff --git a/kdeprint/slave/Makefile.am b/kdeprint/slave/Makefile.am deleted file mode 100644 index 5e5e04123..000000000 --- a/kdeprint/slave/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -AM_CPPFLAGS = -D_KDEPRINT_COMPILE - -SUBDIRS = mimetypes templates - -INCLUDES= $(all_includes) - -kde_module_LTLIBRARIES = kio_print.la - -kio_print_la_SOURCES = kio_print.cpp -kio_print_la_LIBADD = $(LIB_KIO) -ltdeprint -kio_print_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) - -METASOURCES = AUTO - -noinst_HEADERS = kio_print.h - -# Services -servicesdir = $(kde_servicesdir) -services_DATA = print.protocol printdb.protocol - -messages: rc.cpp - $(XGETTEXT) *.cpp -o $(podir)/kio_print.pot diff --git a/kdeprint/slave/kio_print.cpp b/kdeprint/slave/kio_print.cpp deleted file mode 100644 index d8bb4cf6e..000000000 --- a/kdeprint/slave/kio_print.cpp +++ /dev/null @@ -1,920 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "kio_print.h" -#include <tdeprint/kmprinter.h> -#include <tdeprint/kmmanager.h> -#include <tdeprint/kmjobmanager.h> -#include <tdeprint/kmjob.h> -#include <tdeprint/driver.h> - -#include <tqfile.h> -#include <tqtextstream.h> -#include <klocale.h> -#include <kdebug.h> -#include <kinstance.h> -#include <kio/global.h> -#include <kstandarddirs.h> -#include <kiconloader.h> -#include <kmimetype.h> -#include <kio/job.h> -#include <kapplication.h> -#include <kcmdlineargs.h> -#include <kaboutdata.h> -#include <kprocess.h> -#include <ktempfile.h> -#include <tqfile.h> -#include <tqdom.h> - -#include <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> - -#define PRINT_DEBUG kdDebug(7019) << "kio_print: " - -extern "C" -{ - int KDE_EXPORT kdemain(int argc, char **argv); -} - -void addAtom(KIO::UDSEntry& entry, unsigned int ID, long l, const TQString& s = TQString()) -{ - KIO::UDSAtom atom; - atom.m_uds = ID; - atom.m_long = l; - atom.m_str = s; - entry.append(atom); -} - -static void createDirEntry(KIO::UDSEntry& entry, const TQString& name, const TQString& url, const TQString& mime) -{ - entry.clear(); - addAtom(entry, KIO::UDS_NAME, 0, name); - addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR); - addAtom(entry, KIO::UDS_ACCESS, 0500); - addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); - addAtom(entry, KIO::UDS_URL, 0, url); - PRINT_DEBUG << "creating dir entry url=" << url << " mimetype=" << mime << endl; - addAtom(entry, KIO::UDS_SIZE, 0); - //addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); -} - -static void createFileEntry(KIO::UDSEntry& entry, const TQString& name, const TQString& url, const TQString& mime) -{ - entry.clear(); - addAtom(entry, KIO::UDS_NAME, 0, name); - addAtom(entry, KIO::UDS_FILE_TYPE, S_IFREG); - addAtom(entry, KIO::UDS_URL, 0, url); - addAtom(entry, KIO::UDS_ACCESS, 0400); - addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); - addAtom(entry, KIO::UDS_SIZE, 0); - addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); -} - -TQString buildMenu(const TQStringList& items, const TQStringList& links, int active) -{ - if (items.count() == 0 || items.count() != links.count()) - return TQString("<td height=20 class=\"menu\"> </td>"); - - TQString s; - int index = 0; - for (TQStringList::ConstIterator it1=items.begin(), it2=links.begin(); it1!=items.end() && it2!=links.end(); ++it1, ++it2, index++) - { - if (index == active) - s.append("<td height=20 class=\"menuactive\">  ").append(*it1).append(" </td>"); - else - s.append("<td height=20 class=\"menu\">  <a class=\"menu\" href=\"").append(*it2).append("\">").append(*it1).append("</a> </td>"); - if ((unsigned int)index < items.count()-1) - s.append("<td height=20 class=\"menu\">|</td>"); - } - return s; -} - -TQString buildOptionRow(DrBase *opt, bool f) -{ - TQString s("<tr class=\"%1\"><td width=\"41%\">%1</td><td width=\"59%\">%1</td></tr>\n"); - s = s.arg(f ? "contentwhite" : "contentyellow").arg(opt->get("text")).arg(opt->prettyText()); - return s; -} - -TQString buildGroupTable(DrGroup *grp, bool showHeader = true) -{ - TQString s("<tr class=\"top\"><td colspan=\"2\">%1</td></tr>\n"); - if (showHeader) - s = s.arg(grp->get("text")); - else - s = TQString(); - - TQPtrListIterator<DrBase> oit(grp->options()); - bool f(false); - for (; oit.current(); ++oit, f = !f) - s.append(buildOptionRow(oit.current(), f)); - - TQPtrListIterator<DrGroup> git(grp->groups()); - for (; git.current(); ++git) - s.append(buildGroupTable(git.current())); - - return s; -} - -int kdemain(int argc, char **argv) -{ - KInstance instance("kio_print"); - - PRINT_DEBUG << "starting ioslave" << endl; - if (argc != 4) - { - fprintf(stderr, "Usage: kio_print protocol domain-socket1 domain-socket2\n"); - exit(-1); - } - - /* create fake KApplicatiom object, needed for job stuffs */ - KAboutData about( "kio_print", "kio_print", "fake_version", - "KDEPrint IO slave", KAboutData::License_GPL, "(c) 2003, Michael Goffioul" ); - KCmdLineArgs::init( &about ); - KApplication app; - - KIO_Print slave(argv[2], argv[3]); - slave.dispatchLoop(); - - PRINT_DEBUG << "done" << endl; - return 0; -} - -KIO_Print::KIO_Print(const TQCString& pool, const TQCString& app) -: KIO::SlaveBase("print", pool, app) -{ -} - -void KIO_Print::listDir(const KURL& url) -{ - if ( url.protocol() == "printdb" ) - { - listDirDB( url ); - return; - } - - TQStringList path = TQStringList::split('/', url.path(), false); - - PRINT_DEBUG << "listing " << url.path() << endl; - TQString group = path[0].lower(); - if (path.count() == 0) - listRoot(); - else if (path.count() == 1 && group != "manager" && group != "jobs") - { - PRINT_DEBUG << "listing group " << path[0] << endl; - - int mask; - TQString mimeType; - KIO::UDSEntry entry; - - if (group == "printers") - { - mask = KMPrinter::Printer; - mimeType = "print/printer"; - } - else if (group == "classes") - { - mask = KMPrinter::Class | KMPrinter::Implicit; - mimeType = "print/class"; - } - else if (group == "specials") - { - mask = KMPrinter::Special; - mimeType = "print/printer"; - } - else - { - error(KIO::ERR_DOES_NOT_EXIST, url.url()); - return; - } - - TQPtrListIterator<KMPrinter> it(*(KMManager::self()->printerList())); - for (;it.current();++it) - { - if (!(it.current()->type() & mask) || !it.current()->instanceName().isEmpty()) - { - PRINT_DEBUG << "rejecting " << it.current()->name() << endl; - continue; - } - - //createFileEntry(entry, it.current()->name(), ("print:/"+path[0]+"/"+it.current()->name()), mimeType, "text/html", S_IFDIR); - createDirEntry(entry, it.current()->name(), ("print:/"+group+"/"+KURL::encode_string_no_slash(it.current()->name())), mimeType); - PRINT_DEBUG << "accepting " << it.current()->name() << endl; - listEntry(entry, false); - } - - listEntry(KIO::UDSEntry(), true); - finished(); - } - else - { - //error(KIO::ERR_UNSUPPORTED_ACTION, i18n("Unsupported path %1").arg(url.path())); - // better do nothing - listEntry(KIO::UDSEntry(), true); - totalSize(0); - finished(); - } -} - -void KIO_Print::listRoot() -{ - PRINT_DEBUG << "listing root entry" << endl; - - KIO::UDSEntry entry; - - // Classes entry - createDirEntry(entry, i18n("Classes"), "print:/classes", "print/folder"); - listEntry(entry, false); - - // Printers entry - createDirEntry(entry, i18n("Printers"), "print:/printers", "print/folder"); - listEntry(entry, false); - - // Specials entry - createDirEntry(entry, i18n("Specials"), "print:/specials", "print/folder"); - listEntry(entry, false); - - // Management entry - //createFileEntry(entry, i18n("Manager"), "print:/manager", "print/manager", TQString(), S_IFDIR); - createDirEntry(entry, i18n("Manager"), "print:/manager", "print/manager"); - listEntry(entry, false); - - // Jobs entry - createDirEntry(entry, i18n("Jobs"), "print:/jobs", "print/jobs"); - listEntry(entry, false); - - // finish - totalSize(4); - listEntry(entry, true); - finished(); -} - -void KIO_Print::listDirDB( const KURL& url ) -{ - PRINT_DEBUG << "listDirDB: " << url << endl; - - TQStringList pathComps = TQStringList::split( '/', url.path(), false ); - KURL remUrl; - - remUrl.setProtocol( "http" ); - remUrl.setHost( url.host() ); - remUrl.setPort( url.port() ); - remUrl.setPath( "/list-data.cgi" ); - switch ( pathComps.size() ) - { - case 0: /* list manufacturers */ - remUrl.addQueryItem( "type", "makes" ); - break; - case 1: /* list printers for the given manufacturer */ - remUrl.addQueryItem( "type", "printers" ); - remUrl.addQueryItem( "make", pathComps[ 0 ] ); - break; - case 2: /* list drivers for given printer */ - remUrl.addQueryItem( "type", "drivers" ); - remUrl.addQueryItem( "printer", pathComps[ 1 ] ); - break; - default: - error( KIO::ERR_UNSUPPORTED_ACTION, "Not implemented" ); - return; - } - remUrl.addQueryItem( "format", "xml" ); - - if ( getDBFile( remUrl ) ) - { - TQDomDocument doc; - if ( doc.setContent( &m_httpBuffer, false ) ) - { - TQDomNodeList l; - KIO::UDSEntry entry; - switch ( pathComps.size() ) - { - case 0: - l = doc.documentElement().elementsByTagName( "make" ); - for ( unsigned int i=0; i<l.count(); i++ ) - { - TQString make = l.item( i ).toElement().text(); - KURL makeUrl = url; - makeUrl.addPath( "/" + make ); - createDirEntry( entry, make, makeUrl.url(), "print/folder" ); - listEntry( entry, false ); - PRINT_DEBUG << "make: " << make << endl; - } - break; - case 1: - l = doc.documentElement().elementsByTagName( "printer" ); - for ( unsigned int i=0; i<l.count(); i++ ) - { - TQString ID, name; - for ( TQDomNode n=l.item( i ).firstChild(); !n.isNull(); n=n.nextSibling() ) - { - TQDomElement e = n.toElement(); - if ( e.tagName() == "id" ) - ID = e.text(); - else if ( e.tagName() == "model" ) - name = e.text(); - } - if ( !ID.isEmpty() && !name.isEmpty() ) - { - KURL printerUrl = url; - printerUrl.addPath( "/" + ID ); - createDirEntry( entry, name, printerUrl.url(), "print/printermodel" ); - listEntry( entry, false ); - PRINT_DEBUG << "printer: " << ID << endl; - } - } - break; - case 2: - l = doc.documentElement().elementsByTagName( "driver" ); - for ( unsigned int i=0; i<l.count(); i++ ) - { - TQString driver = l.item( i ).toElement().text(); - KURL driverUrl = url; - driverUrl.addPath( "/" + driver ); - createFileEntry( entry, driver, driverUrl.url(), "print/driver" ); - listEntry( entry, false ); - PRINT_DEBUG << "driver: " << driver << endl; - } - break; - default: - error( KIO::ERR_UNSUPPORTED_ACTION, "Not implemented" ); - return; - } - listEntry( KIO::UDSEntry(), true ); - finished(); - } - else - { - if ( m_httpBuffer.buffer().size() == 0 ) - error( KIO::ERR_INTERNAL, i18n( "Empty data received (%1)." ).arg( url.host() ) ); - else - error( KIO::ERR_INTERNAL, i18n( "Corrupted/incomplete data or server error (%1)." ).arg( url.host() ) ); - } - } - /* - * If error occured while downloading, error has been called by - * getDBFile. No need for a "else" statement. - */ -} - -void KIO_Print::stat(const KURL& url) -{ - if ( url.protocol() == "printdb" ) - { - statDB( url ); - return; - } - - PRINT_DEBUG << "stat: " << url.url() << endl; - TQStringList path = TQStringList::split('/', url.encodedPathAndQuery(-1), false); - KIO::UDSEntry entry; - TQString mime; - bool err(false); - - PRINT_DEBUG << "path components: " << path.join(", ") << endl; - - switch (path.count()) - { - case 0: - createDirEntry(entry, i18n("Print System"), "print:/", "print/folder"); - break; - case 1: - if (path[0].lower() == "classes") - createDirEntry(entry, i18n("Classes"), "print:/classes", "print/folder"); - else if (path[0].lower() == "printers") - createDirEntry(entry, i18n("Printers"), "print:/printers", "print/folder"); - else if (path[0].lower() == "specials") - createDirEntry(entry, i18n("Specials"), "print:/specials", "print/folder"); - else if (path[0].lower() == "manager") - createDirEntry(entry, i18n("Manager"), "print:/manager", "print/manager"); - else if (path[0].lower().startsWith("jobs")) - createFileEntry(entry, i18n("Jobs"), url.url(), "text/html"); - else - err = true; - break; - case 2: - if (path[0].lower() == "printers") - mime = "print/printer"; - else if (path[0].lower() == "classes") - mime = "print/class"; - else if (path[0].lower() == "specials") - mime = "print/printer"; - else - err = true; - createFileEntry(entry, path[1], "print:/"+path[0]+"/"+path[1], "text/html"); - break; - } - - if (!err) - { - statEntry(entry); - finished(); - } - else - error(KIO::ERR_DOES_NOT_EXIST, url.path()); -} - -void KIO_Print::statDB( const KURL& url ) -{ - PRINT_DEBUG << "statDB: " << url << endl; - KIO::UDSEntry entry; - TQStringList pathComps = TQStringList::split( '/', url.path(), false ); - if ( pathComps.size() == 3 ) - createFileEntry( entry, i18n( "Printer driver" ), url.url(), "print/driver" ); - else - createDirEntry( entry, i18n( "On-line printer driver database" ), url.url(), "inode/directory" ); - statEntry( entry ); - finished(); -} - -bool KIO_Print::getDBFile( const KURL& src ) -{ - PRINT_DEBUG << "downloading " << src.url() << endl; - - /* re-initialize the internal buffer */ - if ( m_httpBuffer.isOpen() ) - m_httpBuffer.close(); - m_httpError = 0; - m_httpBuffer.open( IO_WriteOnly|IO_Truncate ); // be sure to erase the existing data - - /* start the transfer job */ - KIO::TransferJob *job = KIO::get( src, false, false ); - connect( job, TQT_SIGNAL( result( KIO::Job* ) ), TQT_SLOT( slotResult( KIO::Job* ) ) ); - connect( job, TQT_SIGNAL( data( KIO::Job*, const TQByteArray& ) ), TQT_SLOT( slotData( KIO::Job*, const TQByteArray& ) ) ); - connect( job, TQT_SIGNAL( totalSize( KIO::Job*, KIO::filesize_t ) ), TQT_SLOT( slotTotalSize( KIO::Job*, KIO::filesize_t ) ) ); - connect( job, TQT_SIGNAL( processedSize( KIO::Job*, KIO::filesize_t ) ), TQT_SLOT( slotProcessedSize( KIO::Job*, KIO::filesize_t ) ) ); - kapp->enter_loop(); - m_httpBuffer.close(); - - /* return the result */ - if ( m_httpError != 0 ) - error( m_httpError, m_httpErrorTxt ); - return ( m_httpError == 0 ); -} - -void KIO_Print::getDB( const KURL& url ) -{ - PRINT_DEBUG << "downloading PPD file for " << url.url() << endl; - - TQStringList pathComps = TQStringList::split( '/', url.path(), false ); - if ( pathComps.size() != 3 ) - error( KIO::ERR_MALFORMED_URL, url.url() ); - else - { - KURL remUrl; - - remUrl.setProtocol( "http" ); - remUrl.setHost( url.host() ); - remUrl.setPath( "/ppd-o-matic.cgi" ); - remUrl.addQueryItem( "driver", pathComps[ 2 ] ); - remUrl.addQueryItem( "printer", pathComps[ 1 ] ); - - if ( getDBFile( remUrl ) ) - { - mimeType( "text/plain" ); - data( m_httpBuffer.buffer() ); - finished(); - } - /* - * no "else" statement needed, the error has - * already been emitted by the getDBFile function - */ - } -} - -void KIO_Print::slotResult( KIO::Job *j ) -{ - /* - * store slave results for later user (job gets deleted - * after this function). Store only if no other error - * occured previously (when writing to the buffer). - */ - if ( m_httpError == 0 ) - { - m_httpError = j->error(); - m_httpErrorTxt = j->errorText(); - } - kapp->exit_loop(); -} - -void KIO_Print::slotData( KIO::Job *j, const TQByteArray& d ) -{ - PRINT_DEBUG << "HTTP data received (size=" << d.size() << ")" << endl; - if ( d.size() > 0 ) - { - int len = m_httpBuffer.writeBlock( d ); - if ( len == -1 || len != ( int )d.size() ) - { - m_httpError = KIO::ERR_INTERNAL; - m_httpErrorTxt = "Unable to write to the internal buffer."; - j->kill( false ); - } - } -} - -void KIO_Print::slotTotalSize( KIO::Job*, KIO::filesize_t sz ) -{ - totalSize( sz ); -} - -void KIO_Print::slotProcessedSize( KIO::Job*, KIO::filesize_t sz ) -{ - processedSize( sz ); -} - -void KIO_Print::get(const KURL& url) -{ - if ( url.protocol() == "printdb" ) - { - getDB( url ); - return; - } - - TQStringList elems = TQStringList::split('/', url.encodedPathAndQuery(), false); - TQString group(elems[0].lower()), printer(KURL::decode_string(elems[1])), path, query; - KMPrinter *mprinter(0); - - if (group == "manager") - { - PRINT_DEBUG << "opening print management part" << endl; - - mimeType("print/manager"); - finished(); - return; - } - - PRINT_DEBUG << "getting " << url.url() << endl; - - if (group.startsWith("jobs")) - { - int p = group.find('?'); - if (p != -1) - query = group.mid(p+1); - if (!query.isEmpty() && query != "jobs" && query != "completed_jobs") - { - error(KIO::ERR_MALFORMED_URL, TQString()); - return; - } - PRINT_DEBUG << "listing jobs for all printers" << endl; - showJobs(0, query == "completed_jobs"); - return; - } - - int p = printer.find('?'); - if (p != -1) - { - query = printer.mid(p+1); - printer = printer.left(p); - } - - PRINT_DEBUG << "opening " << url.url() << endl; - PRINT_DEBUG << "extracted printer name = " << printer << endl; - - KMManager::self()->printerList(false); - mprinter = KMManager::self()->findPrinter(printer); - if (!mprinter) - path = locateData(printer.isEmpty() ? group : printer); - - if (elems.count() > 2 || (path.isEmpty() && group != "printers" && group != "classes" && group != "specials") - || (mprinter == 0 && path.isEmpty())) - { - error(KIO::ERR_DOES_NOT_EXIST, url.path()); - return; - } - - if (mprinter != 0) - { - if (!query.isEmpty() && query != "general") - { - if (query == "jobs") - showJobs(mprinter, false); - else if (query == "completed_jobs") - showJobs(mprinter, true); - else if (query == "driver") - showDriver(mprinter); - else - error(KIO::ERR_MALFORMED_URL, KURL::decode_string(elems[1])); - } - else if (group == "printers" && mprinter->isPrinter()) - showPrinterInfo(mprinter); - else if (group == "classes" && mprinter->isClass(true)) - showClassInfo(mprinter); - else if (group == "specials" && mprinter->isSpecial()) - showSpecialInfo(mprinter); - else - error(KIO::ERR_INTERNAL, i18n("Unable to determine object type for %1.").arg(printer)); - } - else if (!path.isEmpty()) - showData(path); - else - error(KIO::ERR_INTERNAL, i18n("Unable to determine source type for %1.").arg(printer)); -} - -void KIO_Print::showPrinterInfo(KMPrinter *printer) -{ - if (!KMManager::self()->completePrinter(printer)) - error(KIO::ERR_INTERNAL, i18n("Unable to retrieve printer information for %1.").arg(printer->name())); - else - { - mimeType("text/html"); - - TQString content; - if (!loadTemplate(TQString::tqfromLatin1("printer.template"), content)) - { - error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("printer.template")); - return; - } - - content = content - .arg(i18n("Properties of %1").arg(printer->printerName())) - .arg(i18n("Properties of %1").arg(printer->printerName())) - .arg(buildMenu(TQStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), - TQStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), - 0)) - .arg(TQString()) - .arg(printer->pixmap()) - .arg(printer->name()) - .arg(i18n("General Properties")) - .arg(i18n("Type")).arg(printer->isRemote() ? i18n("Remote") : i18n("Local")) - .arg(i18n("State")).arg(printer->stateString()) - .arg(i18n("Location")).arg(printer->location()) - .arg(i18n("Description")).arg(printer->description()) - .arg(i18n("URI")).arg(printer->uri().prettyURL()) - .arg(i18n("Interface (Backend)")).arg(printer->device()) - .arg(i18n("Driver")) - .arg(i18n("Manufacturer")).arg(printer->manufacturer()) - .arg(i18n("Model")).arg(printer->model()) - .arg(i18n("Driver Information")).arg(printer->driverInfo()); - - data(content.local8Bit()); - finished(); - } -} - -void KIO_Print::showClassInfo(KMPrinter *printer) -{ - if (!KMManager::self()->completePrinter(printer)) - error(KIO::ERR_INTERNAL, i18n("Unable to retrieve class information for %1.").arg(printer->name())); - else - { - mimeType("text/html"); - - TQString content; - if (!loadTemplate(TQString::tqfromLatin1("class.template"), content)) - { - error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("class.template")); - return; - } - - TQString memberContent("<ul>\n"); - TQStringList members(printer->members()); - for (TQStringList::ConstIterator it=members.begin(); it!=members.end(); ++it) - { - memberContent.append(TQString::tqfromLatin1("<li><a href=\"print:/printers/%1\">%2</a></li>\n").arg(*it).arg(*it)); - } - memberContent.append("</ul>\n"); - - TQString typeContent = (printer->isImplicit() ? i18n("Implicit") : (printer->isRemote() ? i18n("Remote") : i18n("Local"))); - - content = content - .arg(i18n("Properties of %1").arg(printer->printerName())) - .arg(i18n("Properties of %1").arg(printer->printerName())) - .arg(buildMenu(TQStringList::split('|', i18n("General|Active jobs|Completed jobs"), false), - TQStringList::split('|', "?general|?jobs|?completed_jobs", true), - 0)) - .arg(TQString()) - .arg(printer->pixmap()) - .arg(printer->name()) - .arg(i18n("General Properties")) - .arg(i18n("Type")).arg(typeContent) - .arg(i18n("State")).arg(printer->stateString()) - .arg(i18n("Location")).arg(printer->location()) - .arg(i18n("Description")).arg(printer->description()) - .arg(i18n("URI")).arg(printer->uri().prettyURL()) - .arg(i18n("Members")).arg(memberContent); - - data(content.local8Bit()); - finished(); - } -} - -void KIO_Print::showSpecialInfo(KMPrinter *printer) -{ - mimeType("text/html"); - - TQString content; - if (!loadTemplate(TQString::tqfromLatin1("pseudo.template"), content)) - { - error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); - return; - } - - TQString reqContent("<ul>\n"); - TQStringList requirements = TQStringList::split(",", printer->option("kde-special-require"), false); - for (TQStringList::ConstIterator it=requirements.begin(); it!=requirements.end(); ++it) - reqContent += ("<li>" + (*it) + "</li>\n"); - reqContent.append("</ul>\n"); - - content = content - .arg(i18n("Properties of %1").arg(printer->printerName())) - .arg(i18n("Properties of %1").arg(printer->printerName())) - .arg(buildMenu(TQStringList::split('|', i18n("General"), false), - TQStringList::split('|', "?general", true), - 0)) - .arg(TQString()) - .arg(printer->pixmap()) - .arg(printer->name()) - .arg(i18n("General Properties")) - .arg(i18n("Location")).arg(printer->location()) - .arg(i18n("Description")).arg(printer->description()) - .arg(i18n("Requirements")).arg(reqContent) - .arg(i18n("Command Properties")) - .arg(i18n("Command")).arg("<tt>"+printer->option("kde-special-command")+"</tt>") - .arg(i18n("Use Output File")).arg(printer->option("kde-special-file") == "1" ? i18n("Yes") : i18n("No")) - .arg(i18n("Default Extension")).arg(printer->option("kde-special-extension")); - - data(content.local8Bit()); - finished(); -} - -bool KIO_Print::loadTemplate(const TQString& filename, TQString& buffer) -{ - TQFile f(locate("data", TQString::tqfromLatin1("tdeprint/template/")+filename)); - if (f.exists() && f.open(IO_ReadOnly)) - { - TQTextStream t(&f); - buffer = t.read(); - return true; - } - else - { - buffer = TQString(); - return false; - } -} - -void KIO_Print::showData(const TQString& pathname) -{ - PRINT_DEBUG << "sending data: " << pathname << endl; - TQFile f(pathname); - if (f.exists() && f.open(IO_ReadOnly)) - { - TQByteArray arr(f.readAll()); - mimeType(KMimeType::findByURL(KURL(pathname), 0, true, true)->name()); - data(arr); - finished(); - } - else - { - PRINT_DEBUG << "file not found" << endl; - error(KIO::ERR_DOES_NOT_EXIST, pathname); - } -} - -/** - * Locate a data in this order: - * - $KDEDIR/share/apps/tdeprint/template/ - * - as a desktop icon - */ -TQString KIO_Print::locateData(const TQString& item) -{ - TQString path = locate("data", "tdeprint/template/"+item); - if (path.isEmpty()) - path = KGlobal::iconLoader()->iconPath(item, KIcon::Desktop, true); - return path; -} - -void KIO_Print::showJobs(KMPrinter *prt, bool completed) -{ - mimeType("text/html"); - - // Add the printer to the current list in the job manager - KMJobManager::JobType type = (completed ? KMJobManager::CompletedJobs : KMJobManager::ActiveJobs); - KMJobManager *mgr = KMJobManager::self(); - if (prt) - mgr->addPrinter(prt->printerName(), type); - else - { - TQPtrListIterator<KMPrinter> pit(*(KMManager::self()->printerList())); - for (; pit.current(); ++pit) - if (pit.current()->isVirtual() || pit.current()->isSpecial()) - continue; - else - mgr->addPrinter(pit.current()->printerName(), type); - } - - TQString content; - if (!loadTemplate(TQString::tqfromLatin1("jobs.template"), content)) - { - error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); - return; - } - - if (prt) - { - content = content - .arg(i18n("Jobs of %1").arg(prt->printerName())) - .arg(i18n("Jobs of %1").arg(prt->printerName())) - .arg(prt->isClass () ? - buildMenu(TQStringList::split('|', i18n("General|Active jobs|Completed jobs"), false), - TQStringList::split('|', "?general|?jobs|?completed_jobs", true), - (completed ? 2 : 1)) : - buildMenu(TQStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), - TQStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), - (completed ? 3 : 2))) - .arg(TQString()) - .arg(prt->pixmap()) - .arg(prt->printerName()); - } - else - { - content = content - .arg(i18n("All jobs")) - .arg(buildMenu(TQStringList::split('|', i18n("Active jobs|Completed jobs"), false), - TQStringList::split('|', "?jobs|?completed_jobs", true), - (completed ? 1 : 0))) - .arg("fileprint") - .arg(i18n("All jobs")); - } - content = content.arg(i18n("ID")).arg(i18n("Owner")).arg(i18n("Printer")).arg(i18n("Name")).arg(i18n("State")); - - TQString jobContent, cellContent("<td>%1</td>\n"); - TQPtrListIterator<KMJob> it(mgr->jobList()); - bool flag(true); - for (; it.current(); ++it, flag = !flag) - { - jobContent.append("<tr class=\"").append(flag ? "contentyellow" : "contentwhite").append("\">\n"); - jobContent.append(cellContent.arg(it.current()->id())); - jobContent.append(cellContent.arg(it.current()->owner())); - jobContent.append(cellContent.arg(it.current()->printer())); - jobContent.append(cellContent.arg(it.current()->name())); - jobContent.append(cellContent.arg(it.current()->stateString())); - jobContent.append("</tr>\n"); - } - content = content.arg(jobContent); - - // remove the current printer to the current list in the job manager - if (prt) - mgr->removePrinter(prt->printerName(), type); - else - { - TQPtrListIterator<KMPrinter> pit(*(KMManager::self()->printerList())); - for (; pit.current(); ++pit) - if (pit.current()->isVirtual() || pit.current()->isSpecial()) - continue; - else - mgr->removePrinter(pit.current()->printerName(), type); - } - - data(content.local8Bit()); - finished(); -} - -void KIO_Print::showDriver(KMPrinter *prt) -{ - mimeType("text/html"); - - TQString content; - if (!loadTemplate(TQString::tqfromLatin1("driver.template"), content)) - { - error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); - return; - } - - DrMain *driver = KMManager::self()->loadPrinterDriver(prt, true); - content = content - .arg(i18n("Driver of %1").arg(prt->printerName())) - .arg(i18n("Driver of %1").arg(prt->printerName())) - .arg(buildMenu(TQStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), - TQStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), - 1)) - .arg(TQString()) - .arg(prt->pixmap()) - .arg(prt->printerName() + " (" + (driver ? driver->get("text") : i18n("No driver found")) + ")"); - - if (driver) - content = content.arg(buildGroupTable(driver, false)); - else - content = content.arg(TQString()); - - data(content.local8Bit()); - finished(); -} - -#include "kio_print.moc" diff --git a/kdeprint/slave/kio_print.h b/kdeprint/slave/kio_print.h deleted file mode 100644 index 954a3045f..000000000 --- a/kdeprint/slave/kio_print.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#ifndef KIO_PRINT_H -#define KIO_PRINT_H - -#include <kio/slavebase.h> -#include <kio/global.h> -#include <tqstring.h> -#include <tqbuffer.h> - -class KMPrinter; -namespace KIO { - class Job; -} - -class KIO_Print : public TQObject, public KIO::SlaveBase -{ - Q_OBJECT -public: - KIO_Print(const TQCString& pool, const TQCString& app); - - void listDir(const KURL& url); - void get(const KURL& url); - void stat(const KURL& url); - -protected slots: - void slotResult( KIO::Job* ); - void slotData( KIO::Job*, const TQByteArray& ); - void slotTotalSize( KIO::Job*, KIO::filesize_t ); - void slotProcessedSize( KIO::Job*, KIO::filesize_t ); - -private: - void listRoot(); - void listDirDB( const KURL& ); - void statDB( const KURL& ); - bool getDBFile( const KURL& ); - void getDB( const KURL& ); - void showClassInfo(KMPrinter*); - void showPrinterInfo(KMPrinter*); - void showSpecialInfo(KMPrinter*); - void showData(const TQString&); - TQString locateData(const TQString&); - void showJobs(KMPrinter *p = 0, bool completed = false); - void showDriver(KMPrinter*); - - bool loadTemplate(const TQString& filename, TQString& buffer); - - TQBuffer m_httpBuffer; - int m_httpError; - TQString m_httpErrorTxt; -}; - -#endif diff --git a/kdeprint/slave/mimetypes/CMakeLists.txt b/kdeprint/slave/mimetypes/CMakeLists.txt deleted file mode 100644 index 02d289c15..000000000 --- a/kdeprint/slave/mimetypes/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -install( FILES - folder.desktop printer.desktop class.desktop - manager.desktop jobs.desktop driver.desktop - printermodel.desktop - DESTINATION ${MIME_INSTALL_DIR}/print ) diff --git a/kdeprint/slave/mimetypes/Makefile.am b/kdeprint/slave/mimetypes/Makefile.am deleted file mode 100644 index 9992389fe..000000000 --- a/kdeprint/slave/mimetypes/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -mimetype_DATA = folder.desktop printer.desktop class.desktop manager.desktop jobs.desktop \ - driver.desktop printermodel.desktop -mimetypedir = $(kde_mimedir)/print diff --git a/kdeprint/slave/mimetypes/class.desktop b/kdeprint/slave/mimetypes/class.desktop deleted file mode 100644 index f73b3262d..000000000 --- a/kdeprint/slave/mimetypes/class.desktop +++ /dev/null @@ -1,75 +0,0 @@ -[Desktop Entry] -Comment=Class of Printers -Comment[af]=Klas van Drukkers -Comment[ar]=فئة الطابعات -Comment[be]=Клас друкарак -Comment[bg]=Клас принтери -Comment[bn]=প্রিন্টার-এর ক্লাস (Class) -Comment[bs]=Klasa štampača -Comment[ca]=Classes d'impressores -Comment[cs]=Třída tiskáren -Comment[csb]=Klasë drëkerów -Comment[da]=Klasse af printere -Comment[de]=Druckerklasse -Comment[el]=Κλάση εκτυπωτών -Comment[eo]=Printiloklaso -Comment[es]=Clase de impresoras -Comment[et]=Printerite klass -Comment[eu]=Inprimagailu klasea -Comment[fa]=ردۀ چاپگرها -Comment[fi]=Tulostinten luokka -Comment[fr]=Classe d'imprimantes -Comment[fy]=Printerklassen -Comment[ga]=Aicme Printéirí -Comment[gl]=Clase de impresoras -Comment[he]=מחלקת מדפסות -Comment[hi]=प्रिंटर के वर्ग -Comment[hr]=Klase pisača -Comment[hu]=Nyomtatóosztály -Comment[is]=Flokkur prentara -Comment[it]=Classe di stampanti -Comment[ja]=プリンタクラス -Comment[ka]=პრინტერთა კლასი -Comment[kk]=Принтерлер класы -Comment[km]=សន្ដាន​ម៉ាស៊ីន​បោះពុម្ព -Comment[lt]=Spausdintuvų klasė -Comment[lv]=Drukas iekārtu klase -Comment[mk]=Класа на печатачи -Comment[ms]=Kelas Pencetak -Comment[mt]=Klassi ta' printers -Comment[nb]=Skriverklasse -Comment[nds]=Klass vun Druckers -Comment[ne]=मुद्रकको वर्ग -Comment[nl]=Printerklassen -Comment[nn]=Skrivarklasse -Comment[pa]=ਪਰਿੰਟਰਾਂ ਦਾ ਵਰਗ -Comment[pl]=Klasa drukarek -Comment[pt]=Classe de Impressoras -Comment[pt_BR]=Classes de Impressoras -Comment[ro]=Clase de imprimante -Comment[ru]=Класс принтеров -Comment[rw]=Urwego rwa Mucapyi -Comment[se]=Čálánluohkát -Comment[sk]=Trieda tlačiarní -Comment[sl]=Razred tiskalnikov -Comment[sr]=Класе штампача -Comment[sr@Latn]=Klase štampača -Comment[sv]=Klass av skrivare -Comment[ta]=அச்சியந்திரங்களின் வகை -Comment[tg]=Дараҷаи чопгарҳо -Comment[th]=คลาสของเครื่องพิมพ์ -Comment[tr]=Yazıcı Sınıfı -Comment[tt]=Basaqlar Törläre -Comment[uk]=Клас принтерів -Comment[uz]=Printerlar sinfi -Comment[uz@cyrillic]=Принтерлар синфи -Comment[vi]=Lớp Máy in -Comment[wa]=Classe des scrireces -Comment[zh_CN]=打印机类 -Comment[zh_TW]=印表機類別 -Icon=print_class -Type=MimeType -MimeType=print/class -Patterns= - -X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/mimetypes/driver.desktop b/kdeprint/slave/mimetypes/driver.desktop deleted file mode 100644 index 36cd08288..000000000 --- a/kdeprint/slave/mimetypes/driver.desktop +++ /dev/null @@ -1,76 +0,0 @@ -[Desktop Entry] -Comment=Printer Driver -Comment[af]=Drukker Aandrywer -Comment[ar]=سائق الطابعة -Comment[be]=Драйвер друкаркі -Comment[bg]=Драйвер за принтер -Comment[bn]=প্রিন্টার ড্রাইভার -Comment[br]=Sturier ar voullerez -Comment[bs]=Drajver štampača -Comment[ca]=Control·lador d'impressora -Comment[cs]=Ovladač tiskárny -Comment[csb]=Czérownik drëkera -Comment[da]=Printerdriver -Comment[de]=Druckertreiber -Comment[el]=Οδηγός εκτυπωτή -Comment[eo]=Printila pelilo -Comment[es]=Controlador de impresora -Comment[et]=Printeri draiver -Comment[eu]=Inprimagailuaren driverra -Comment[fa]=گردانندۀ چاپگر -Comment[fi]=Tulostinajuri -Comment[fr]=Pilote d'imprimante -Comment[fy]=Printerstjoerprogramma -Comment[ga]=Tiománaí Printéara -Comment[gl]=Controlador da Impresora -Comment[he]=מנהל התקן המדפסת -Comment[hi]=प्रिंटर ड्राइवर -Comment[hr]=Upravljački program pisača -Comment[hu]=Nyomtatómeghajtó -Comment[is]=Prentrekill -Comment[it]=Driver stampante -Comment[ja]=プリンタドライバ -Comment[ka]=პრინტერის დრაივერი -Comment[kk]=Принтердің драйвері -Comment[km]=កម្មវិធី​បញ្ជា​ម៉ាស៊ីន​បោះពុម្ព -Comment[lt]=Spausdintuvo tvarkyklė -Comment[lv]=Printera draiveris -Comment[mk]=Управувач за печатач -Comment[ms]=Pemacu Pencetak -Comment[mt]=Driver tal-printer -Comment[nb]=Skriverdriver -Comment[nds]=Druckerdriever -Comment[ne]=मुद्रक यन्त्र -Comment[nl]=Printerstuurprogramma -Comment[nn]=Skrivardrivar -Comment[pa]=ਪਰਿੰਟਰ ਡਰਾਇਵਰ -Comment[pl]=Sterownik drukarki -Comment[pt]=Controlador de Impressora -Comment[pt_BR]=Driver da Impressora -Comment[ro]=Driver de imprimantă -Comment[ru]=Драйвер принтера -Comment[rw]=Musomyi ya Mucapyi -Comment[se]=Čálánstivrran -Comment[sk]=Ovládač tlačiarne -Comment[sl]=Tiskalniški gonilnik -Comment[sr]=Управљачки програм за штампач -Comment[sr@Latn]=Upravljački program za štampač -Comment[sv]=Skrivardrivrutin -Comment[ta]=அச்சியந்திர இயக்கி -Comment[tg]=Драйвери чопгар -Comment[th]=ไดรเวอร์เครื่องพิมพ์ -Comment[tr]=Yazıcı Sürücüsü -Comment[tt]=Basaq öçen Driver -Comment[uk]=Драйвер принтера -Comment[uz]=Printerning drayveri -Comment[uz@cyrillic]=Принтернинг драйвери -Comment[vi]=Trình điều khiển Máy in -Comment[wa]=Moenneu di scrirece -Comment[zh_CN]=打印机驱动程序 -Comment[zh_TW]=印表機驅動程式 -Icon=postscript -Type=MimeType -MimeType=print/driver -Patterns= - -X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/mimetypes/folder.desktop b/kdeprint/slave/mimetypes/folder.desktop deleted file mode 100644 index 312c863a3..000000000 --- a/kdeprint/slave/mimetypes/folder.desktop +++ /dev/null @@ -1,76 +0,0 @@ -[Desktop Entry] -Comment=Print Folder -Comment[af]=Drukker Gids -Comment[ar]=مجلد الطباعة -Comment[be]=Тэчка друку -Comment[bg]=Директория на печата -Comment[bn]=মুদ্রণ ফোল্ডার -Comment[br]=Renkell moulañ -Comment[bs]=Direktorij za štampu -Comment[ca]=Carpeta d'impressió -Comment[cs]=Složka tisku -Comment[csb]=Katalog drëkòwaniô -Comment[cy]=Dogfen argraffu -Comment[da]=Udskriftsmappe -Comment[de]=Druckordner -Comment[el]=Φάκελος εκτυπώσεων -Comment[eo]=Printa dosierujo -Comment[es]=Carpeta de impresión -Comment[et]=Trükkimise kataloog -Comment[eu]=Inprimaketa karpeta -Comment[fa]=پوشۀ چاپ -Comment[fi]=Tulostuskansio -Comment[fr]=Dossier d'impression -Comment[fy]=printmap -Comment[ga]=Fillteán Priontála -Comment[gl]=Cartafol de Impresión -Comment[he]=תיקיית הדפסה -Comment[hr]=Mapa pisača -Comment[hu]=Nyomtatáskezelő-mappa -Comment[is]=Prentmappa -Comment[it]=Cartella di stampa -Comment[ja]=印刷フォルダ -Comment[ka]=საბეჭდი საქაღალდე -Comment[kk]=Басып шығару қапшығы -Comment[km]=ថត​បោះពុម្ព -Comment[ko]=홈 폴더 -Comment[lt]=Spausdinimo aplankas -Comment[mk]=Папка за печатење -Comment[ms]=Cetak Folder -Comment[nb]=Skrivermappe -Comment[nds]=Druckorner -Comment[ne]=मुद्रण फोल्डर -Comment[nl]=Afdrukmap -Comment[nn]=Skrivarmappe -Comment[pa]=ਛਪਾਈ ਫੋਲਡਰ -Comment[pl]=Folder drukowania -Comment[pt]=Pasta de Impressão -Comment[pt_BR]=Pasta de Impressão -Comment[ro]=Folder de tipărire -Comment[ru]=Папка печати -Comment[rw]=Gucapa Ububiko -Comment[se]=Čálihanmáhppa -Comment[sk]=Priečinok tlače -Comment[sl]=Tiskalniška mapa -Comment[sr]=Фасцикла за штампање -Comment[sr@Latn]=Fascikla za štampanje -Comment[sv]=Skrivarkatalog -Comment[ta]=அச்சிடும் அடைவு -Comment[tg]=Феҳристи чоп -Comment[th]=โฟลเดอร์งานพิมพ์ -Comment[tr]=Yazdırma dizinidizini -Comment[tt]=Bastıru Törgäge -Comment[uk]=Тека друку -Comment[uz]=Bosib chiqarish jildi -Comment[uz@cyrillic]=Босиб чиқариш жилди -Comment[vi]=Thư mục In ấn -Comment[wa]=Ridant d' imprimaedje -Comment[zh_CN]=打印文件夹 -Comment[zh_TW]=列印資料夾 -Icon=folder_print -Type=MimeType -MimeType=print/folder -Patterns= - -X-KDE-AutoEmbed=true -X-KDE-IsAlso=inode/directory diff --git a/kdeprint/slave/mimetypes/jobs.desktop b/kdeprint/slave/mimetypes/jobs.desktop deleted file mode 100644 index 5a92ceaa5..000000000 --- a/kdeprint/slave/mimetypes/jobs.desktop +++ /dev/null @@ -1,85 +0,0 @@ -[Desktop Entry] -Comment=Print Jobs -Comment[af]=Drukker Werke -Comment[ar]=مهمات الطباعة -Comment[be]=Заданні друку -Comment[bg]=Задания за печат -Comment[bn]=মুদ্রণ তালিকা -Comment[bs]=Zadaci štampe -Comment[ca]=Tasques d'impressió -Comment[cs]=Tiskové úlohy -Comment[csb]=Pòlétë drëkòwaniô -Comment[cy]=Swyddi Argraffu -Comment[da]=Udskriftsjob -Comment[de]=Druckaufträge -Comment[el]=Εργασίες εκτύπωσης -Comment[eo]=Printaj taskoj -Comment[es]=Trabajos de impresión -Comment[et]=Trükitööd -Comment[eu]=Inprimatze lanak -Comment[fa]=چاپ کارها -Comment[fi]=Tulostustyöt -Comment[fr]=Tâches d'impression -Comment[fy]=Printtaken -Comment[ga]=Jabanna Priontála -Comment[gl]=Traballos de Impresión -Comment[he]=עבודות הדפסה -Comment[hi]=प्रिंट कार्य -Comment[hr]=Zadaci ispisivanja -Comment[hu]=Nyomtatási feladatok -Comment[is]=Prentverk -Comment[it]=Lavori di stampa -Comment[ja]=印刷ジョブ -Comment[ka]=ბეჭდვის დავალებები -Comment[kk]=Басу тапсырмалары -Comment[km]=ការងារ​បោះពុម្ព -Comment[lo]=ໂຟນເດີງານພິມ -Comment[lt]=Spausdinimo užduotys -Comment[lv]=Drukas darbi -Comment[mk]=Печатарски задачи -Comment[mn]=Хэвлэх даалгавар -Comment[ms]=Cetak Kerja -Comment[mt]=Xogħlijiet ta' pprintjar -Comment[nb]=Skriverjobber -Comment[nds]=Druckopgaven -Comment[ne]=मुद्रण कार्य -Comment[nl]=Afdruktaken -Comment[nn]=Utskriftsjobbar -Comment[nso]=Mesomo ya Kgatiso -Comment[pa]=ਪਰਿੰਟ ਕੰਮ -Comment[pl]=Zadania drukowania -Comment[pt]=Tarefas de Impressão -Comment[pt_BR]=Imprimir trabalhos -Comment[ro]=Lucrări de tipărit -Comment[ru]=Задания печати -Comment[rw]=Gucapa Imirimo -Comment[se]=Čálihanbarggut -Comment[sk]=Tlačové úlohy -Comment[sl]=Tiskalna opravila -Comment[sr]=Послови штампе -Comment[sr@Latn]=Poslovi štampe -Comment[sv]=Skrivarjobb -Comment[ta]=அச்சு வேலைகள் -Comment[te]=ప్రచురణ పనులు -Comment[tg]=Чопҳо -Comment[th]=งานพิมพ์ -Comment[tr]=Yazdırma işleri -Comment[tt]=Bastıru Eşläre -Comment[uk]=Завдання друку -Comment[uz]=Bosib chiqarish vazifalari -Comment[uz@cyrillic]=Босиб чиқариш вазифалари -Comment[ven]=Mishumo yau phirintha -Comment[vi]=Tác vụ In ấn -Comment[wa]=Bouyes d' imprimaedje -Comment[xh]=Imisebenzi Yoshicilelo -Comment[zh_CN]=打印任务 -Comment[zh_TW]=列印工作 -Comment[zu]=Imisebenzi Yokushicilela -Icon=fileprint -Type=MimeType -MimeType=print/jobs -Patterns= - -X-KDE-AutoEmbed=true -X-KDE-IsAlso=inode/directory - diff --git a/kdeprint/slave/mimetypes/manager.desktop b/kdeprint/slave/mimetypes/manager.desktop deleted file mode 100644 index 7b8cd0671..000000000 --- a/kdeprint/slave/mimetypes/manager.desktop +++ /dev/null @@ -1,87 +0,0 @@ -[Desktop Entry] -Comment=Print Management Tool -Comment[af]=Drukker Bestuur Program -Comment[ar]=أداة إدارة الطباعة -Comment[az]=Çap Edici İdarə Vasitəsi -Comment[be]=Кіраўнік друку -Comment[bg]=Програма за управление на печата -Comment[bn]=মুদ্রণ ম্যানেজমেন্ট টুল -Comment[br]=Ostilh mererezh moulañ -Comment[bs]=Alat za upravljanje štampanjem -Comment[ca]=Eina per a la gestió de la impressió -Comment[cs]=Nástroj pro správu tiskáren -Comment[csb]=Sprôwianié wëdrëkama -Comment[cy]=Erfyn rheoli argraffu -Comment[da]=Udskriftshåndteringsværktøj -Comment[de]=Dienstprogramm zur Druckerverwaltung -Comment[el]=Εργαλείο διαχείρισης εκτυπώσεων -Comment[eo]=Administrilo por printado -Comment[es]=Herramienta de gestión de la impresión -Comment[et]=Trükkimise haldur -Comment[eu]=Inprimaketak kudeatzeko tresna -Comment[fa]=ابزار مدیریت چاپ -Comment[fi]=Tulostuksenhallinta -Comment[fr]=Gestionnaire d'impression -Comment[fy]=Helpprogramma foar printerbehear -Comment[ga]=Uirlis Bhainisteoireacht Priontála -Comment[gl]=Ferramenta de Xestión das Impresións -Comment[he]=כלי ניהול הדפסה -Comment[hi]=छापा प्रबंधन औज़ार -Comment[hr]=Alat za upravljanje ispisivanjem -Comment[hu]=Nyomtatáskezelő segédprogram -Comment[is]=Prentunartól -Comment[it]=Strumento per la gestione della stampa -Comment[ja]=印刷マネージメントツール -Comment[ka]=ბეჭდვის მართვის ხელსაწყო -Comment[kk]=Басып шығаруды басқару құралы -Comment[km]=ឧបករណ៍​គ្រប់គ្រង​ការ​បោះពុម្ព -Comment[ko]=휴대폰 관리 도구 -Comment[lo]=ເຄື່ອງມືຈັດການການພິມ -Comment[lt]=Spausdinimo valdymo įrankis -Comment[lv]=Drukas Menedžmenta Rīks -Comment[mk]=Алатка за менаџмент на печатење -Comment[mn]=Хэвлэгчийн удирдлагын програм -Comment[ms]=Cetak Alat Pengurusan -Comment[mt]=Għodda għall-immaniġġjar tal-ipprintjar -Comment[nb]=Verktøy for skriverbehandling -Comment[nds]=Druckpleeg-Warktüüch -Comment[ne]=मुद्रण प्रबन्धक उपकरण -Comment[nl]=Hulpprogramma voor printerbeheer -Comment[nn]=Verktøy for utskriftshandsaming -Comment[nso]=Sebereka sa Taolo ya Kgatiso -Comment[pa]=ਪਰਿੰਟ ਪਰਬੰਧਨ ਸੰਦ -Comment[pl]=Zarządzanie wydrukiem -Comment[pt]=Ferramenta de gestão de impressão -Comment[pt_BR]=Ferramenta de Gerenciamento de Impressão -Comment[ro]=Utilitar de administrare a tipăririi -Comment[ru]=Утилита управления печатью -Comment[rw]=Igikoresho Ubuyobozi Gucapa -Comment[se]=Reaiddut čáliheami várás -Comment[sk]=Nástroj na správu tlače -Comment[sl]=Orodje za upravljanje tiskanja -Comment[sr]=Алат за управљање штампом -Comment[sr@Latn]=Alat za upravljanje štampom -Comment[sv]=Verktyg för att hantera utskrifter -Comment[ta]=அச்சு மேலாண்மை கருவி -Comment[tg]=Обзори мудирияти чоп -Comment[th]=เครื่องมือจัดการการพิมพ์ -Comment[tr]=Yazdırma Yönetim Aracı -Comment[tt]=Bastıru İdäneñ Qoralı -Comment[uk]=Засіб керування друком -Comment[uz]=Bosib chiqarishni boshqarish vositasi -Comment[uz@cyrillic]=Босиб чиқаришни бошқариш воситаси -Comment[ven]=Tshishumiswa tsha vhulanguli hau phirintha -Comment[vi]=Công cụ Quản lí In ấn -Comment[wa]=Usteye po manaedjî l' imprimaedje -Comment[xh]=Isixhobo Sophatho Sokushicilela -Comment[zh_CN]=打印管理工具 -Comment[zh_TW]=列印管理工具 -Comment[zu]=Ithuluzi Lokuphatha Ushicilelo -Icon=wizard -Type=MimeType -MimeType=print/manager -Patterns= - -X-KDE-AutoEmbed=true -X-KDE-IsAlso=inode/directory - diff --git a/kdeprint/slave/mimetypes/printer.desktop b/kdeprint/slave/mimetypes/printer.desktop deleted file mode 100644 index 905a08d34..000000000 --- a/kdeprint/slave/mimetypes/printer.desktop +++ /dev/null @@ -1,79 +0,0 @@ -[Desktop Entry] -Comment=Printer -Comment[af]=Drukker -Comment[ar]=الطابعة -Comment[az]=Çap Edici -Comment[be]=Друкарка -Comment[bg]=Принтер -Comment[bn]=প্রিন্টার -Comment[br]=Moulañ -Comment[bs]=Štampač -Comment[ca]=Impressora -Comment[cs]=Tiskárna -Comment[csb]=Drëker -Comment[cy]=Argraffydd -Comment[de]=Drucker -Comment[el]=Εκτυπωτής -Comment[eo]=Printilo -Comment[es]=Impresora -Comment[eu]=Inprimagailua -Comment[fa]=چاپگر -Comment[fi]=Tulostin -Comment[fr]=Imprimante -Comment[ga]=Printéir -Comment[gl]=Impresora -Comment[he]=מדפסת -Comment[hi]=प्रिंटर -Comment[hr]=Pisač -Comment[hu]=Nyomtató -Comment[is]=Prentari -Comment[it]=Stampante -Comment[ja]=プリンタ -Comment[ka]=პრინტერი -Comment[kk]=Принтер -Comment[km]=ម៉ាស៊ីន​បោះពុម្ព -Comment[lo]=ເຄື່ອງພິມ -Comment[lt]=Spausdintuvas -Comment[lv]=Drukas Iekārta -Comment[mk]=Печатач -Comment[mn]=Хэвлэгч -Comment[ms]=Pencetak -Comment[nb]=Skriver -Comment[nds]=Drucker -Comment[ne]=मुद्रक -Comment[nn]=Skrivar -Comment[nso]=Segatisi -Comment[pa]=ਪਰਿੰਟਰ -Comment[pl]=Drukarka -Comment[pt]=Impressora -Comment[pt_BR]=Impressora -Comment[ro]=Imprimantă -Comment[ru]=Принтер -Comment[rw]=Mucapyi -Comment[se]=Čálán -Comment[sk]=Tlačiareň -Comment[sl]=Tiskalnik -Comment[sr]=Штампач -Comment[sr@Latn]=Štampač -Comment[sv]=Skrivare -Comment[ta]=அச்சியந்திரம் -Comment[te]=ప్రింటర్ -Comment[tg]=Чопгар -Comment[th]=เครื่องพิมพ์ -Comment[tr]=Yazıcı -Comment[tt]=Basaq -Comment[uk]=Принтер -Comment[uz@cyrillic]=Принтер -Comment[ven]=phirinthara -Comment[vi]=Máy in -Comment[wa]=Sicrirece -Comment[xh]=Umshicileli -Comment[zh_CN]=打印机 -Comment[zh_TW]=印表機 -Comment[zu]=Umshicileli -Icon=printer1 -Type=MimeType -MimeType=print/printer -Patterns= - -X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/mimetypes/printermodel.desktop b/kdeprint/slave/mimetypes/printermodel.desktop deleted file mode 100644 index f6a471e41..000000000 --- a/kdeprint/slave/mimetypes/printermodel.desktop +++ /dev/null @@ -1,78 +0,0 @@ -[Desktop Entry] -Comment=Printer Model -Comment[af]=Drukker Model -Comment[ar]=طراز الطابعة -Comment[be]=Мадэль друкаркі -Comment[bg]=Модел принтер -Comment[bn]=প্রিন্টার মডেল -Comment[br]=Gobari ar voullerez -Comment[bs]=Model štampača -Comment[ca]=Model d'impressora -Comment[cs]=Model tiskárny -Comment[csb]=Ôrt drëkera -Comment[cy]=Model Argraffydd -Comment[da]=Printermodel -Comment[de]=Druckermodell -Comment[el]=Μοντέλο εκτυπωτή -Comment[eo]=Printila modelo -Comment[es]=Modelo de impresora -Comment[et]=Printeri mudel -Comment[eu]=Inprimagailuaren modeloa -Comment[fa]=مدل چاپگر -Comment[fi]=Tulostinmalli -Comment[fr]=Modèle d'imprimante -Comment[fy]=Printermodel -Comment[ga]=Déanamh an Phrintéara -Comment[gl]=Modelo da Impresora -Comment[he]=דגם המדפסת -Comment[hi]=प्रिंटर मॉडल -Comment[hr]=Model pisača -Comment[hu]=Nyomtatótípus -Comment[is]=Prentaragerð -Comment[it]=Modello stampante -Comment[ja]=プリンタモデル -Comment[ka]=პრინტერის მოდელი -Comment[kk]=Принтер үлгісі -Comment[km]=ម៉ូដែលម៉ាស៊ីន​បោះពុម្ព -Comment[ko]=제어판 모듈 -Comment[lt]=Spausdintuvo modelis -Comment[lv]=Drukas Iekārtas modelis -Comment[mk]=Модел на печатач -Comment[ms]=Model Pencetak -Comment[mt]=Mudell tal-printer -Comment[nb]=Skrivermodell -Comment[nds]=Druckermodell -Comment[ne]=मुद्रक नमूना -Comment[nl]=Printermodel -Comment[nn]=Skrivarmodell -Comment[pa]=ਪਰਿੰਟਰ ਮਾਡਲ -Comment[pl]=Model drukarki -Comment[pt]=Modelo de Impressora -Comment[pt_BR]=Modelo de Impressora -Comment[ro]=Model de imprimantă -Comment[ru]=Модель принтера -Comment[rw]=Moderi Mucapyi -Comment[se]=Čálánmálle -Comment[sk]=Model tlačiarne -Comment[sl]=Model tiskalnika -Comment[sr]=Модел штампача -Comment[sr@Latn]=Model štampača -Comment[sv]=Skrivarmodell -Comment[ta]=அச்சியந்திர மாதிரி -Comment[tg]=Намунаи чопгар -Comment[th]=รุ่นของเครื่องพิมพ์ -Comment[tr]=Yazıcı Modeli -Comment[tt]=Basaq Töre -Comment[uk]=Модель принтера -Comment[uz]=Printerning modeli -Comment[uz@cyrillic]=Принтернинг модели -Comment[vi]=Loại Máy in -Comment[wa]=Modele del sicrirece -Comment[zh_CN]=打印机型号 -Comment[zh_TW]=印表機型號 -Icon=printer1 -Type=MimeType -MimeType=print/printermodel -Patterns= - -X-KDE-AutoEmbed=true diff --git a/kdeprint/slave/pics/.gitignore b/kdeprint/slave/pics/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/kdeprint/slave/print.protocol b/kdeprint/slave/print.protocol deleted file mode 100644 index 38989160b..000000000 --- a/kdeprint/slave/print.protocol +++ /dev/null @@ -1,15 +0,0 @@ -[Protocol] -exec=kio_print -protocol=print -input=none -output=filesystem -listing=Name,Type,Access -reading=true -writing=false -makedir=false -deleting=false -moving=false -linking=false -Icon=postscript -DocPath=kioslave/print.html -defaultMimetype=application/octet-stream diff --git a/kdeprint/slave/printdb.protocol b/kdeprint/slave/printdb.protocol deleted file mode 100644 index 539edd596..000000000 --- a/kdeprint/slave/printdb.protocol +++ /dev/null @@ -1,14 +0,0 @@ -[Protocol] -exec=kio_print -protocol=printdb -input=none -output=filesystem -listing=Name,Type,Access -reading=true -writing=false -makedir=false -deleting=false -moving=false -linking=false -Icon=postscript -defaultMimetype=application/octet-stream diff --git a/kdeprint/slave/templates/CMakeLists.txt b/kdeprint/slave/templates/CMakeLists.txt deleted file mode 100644 index f2344a0df..000000000 --- a/kdeprint/slave/templates/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -install( FILES - class.template printer.template pseudo.template - jobs.template driver.template bar-bottom-left.png - bar-top-middle.png box-bottom-middle.png - box-top-middle.png bar-bottom-middle.png - bar-top-right.png box-bottom-right.png - box-top-right.png bar-bottom-right.png - bottom-left.png box-centre-tdeprint.png - top-left.png bar-middle-left.png bottom-middle.png - box-middle-left.png top-middle.png bar-middle-right.png - bottom-right.png box-middle-right.png top-right-tdeprint.png - bar-top-left.png box-bottom-left.png box-top-left.png - htmlstyles.css - DESTINATION ${DATA_INSTALL_DIR}/tdeprint/template ) diff --git a/kdeprint/slave/templates/Makefile.am b/kdeprint/slave/templates/Makefile.am deleted file mode 100644 index 3f23f9d2d..000000000 --- a/kdeprint/slave/templates/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -template_DATA = class.template \ - printer.template \ - pseudo.template \ - jobs.template \ - driver.template \ - bar-bottom-left.png \ - bar-top-middle.png \ - box-bottom-middle.png \ - box-top-middle.png \ - bar-bottom-middle.png \ - bar-top-right.png \ - box-bottom-right.png \ - box-top-right.png \ - bar-bottom-right.png \ - bottom-left.png \ - box-centre-tdeprint.png \ - top-left.png \ - bar-middle-left.png \ - bottom-middle.png \ - box-middle-left.png \ - top-middle.png \ - bar-middle-right.png \ - bottom-right.png \ - box-middle-right.png \ - top-right-tdeprint.png \ - bar-top-left.png \ - box-bottom-left.png \ - box-top-left.png \ - htmlstyles.css - -templatedir = $(kde_datadir)/tdeprint/template diff --git a/kdeprint/slave/templates/bar-bottom-left.png b/kdeprint/slave/templates/bar-bottom-left.png deleted file mode 100644 index 30a323592..000000000 Binary files a/kdeprint/slave/templates/bar-bottom-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-bottom-middle.png b/kdeprint/slave/templates/bar-bottom-middle.png deleted file mode 100644 index b2ebbbed5..000000000 Binary files a/kdeprint/slave/templates/bar-bottom-middle.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-bottom-right.png b/kdeprint/slave/templates/bar-bottom-right.png deleted file mode 100644 index e664e1511..000000000 Binary files a/kdeprint/slave/templates/bar-bottom-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-middle-left.png b/kdeprint/slave/templates/bar-middle-left.png deleted file mode 100644 index 72fda9ec2..000000000 Binary files a/kdeprint/slave/templates/bar-middle-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-middle-right.png b/kdeprint/slave/templates/bar-middle-right.png deleted file mode 100644 index eb8d3201c..000000000 Binary files a/kdeprint/slave/templates/bar-middle-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-top-left.png b/kdeprint/slave/templates/bar-top-left.png deleted file mode 100644 index b05fd216c..000000000 Binary files a/kdeprint/slave/templates/bar-top-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-top-middle.png b/kdeprint/slave/templates/bar-top-middle.png deleted file mode 100644 index 387f81017..000000000 Binary files a/kdeprint/slave/templates/bar-top-middle.png and /dev/null differ diff --git a/kdeprint/slave/templates/bar-top-right.png b/kdeprint/slave/templates/bar-top-right.png deleted file mode 100644 index a552ff91d..000000000 Binary files a/kdeprint/slave/templates/bar-top-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/bottom-left.png b/kdeprint/slave/templates/bottom-left.png deleted file mode 100644 index 78c9fece3..000000000 Binary files a/kdeprint/slave/templates/bottom-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/bottom-middle.png b/kdeprint/slave/templates/bottom-middle.png deleted file mode 100644 index 41e52dd8a..000000000 Binary files a/kdeprint/slave/templates/bottom-middle.png and /dev/null differ diff --git a/kdeprint/slave/templates/bottom-right.png b/kdeprint/slave/templates/bottom-right.png deleted file mode 100644 index ef81b04a8..000000000 Binary files a/kdeprint/slave/templates/bottom-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-bottom-left.png b/kdeprint/slave/templates/box-bottom-left.png deleted file mode 100644 index 650fa5743..000000000 Binary files a/kdeprint/slave/templates/box-bottom-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-bottom-middle.png b/kdeprint/slave/templates/box-bottom-middle.png deleted file mode 100644 index 2bcd3ea03..000000000 Binary files a/kdeprint/slave/templates/box-bottom-middle.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-bottom-right.png b/kdeprint/slave/templates/box-bottom-right.png deleted file mode 100644 index 975aaeed7..000000000 Binary files a/kdeprint/slave/templates/box-bottom-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-centre-kdeprint.png b/kdeprint/slave/templates/box-centre-kdeprint.png deleted file mode 100644 index 97da1910e..000000000 Binary files a/kdeprint/slave/templates/box-centre-kdeprint.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-middle-left.png b/kdeprint/slave/templates/box-middle-left.png deleted file mode 100644 index 62a720178..000000000 Binary files a/kdeprint/slave/templates/box-middle-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-middle-right.png b/kdeprint/slave/templates/box-middle-right.png deleted file mode 100644 index aa94c0c90..000000000 Binary files a/kdeprint/slave/templates/box-middle-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-top-left.png b/kdeprint/slave/templates/box-top-left.png deleted file mode 100644 index 34aba9195..000000000 Binary files a/kdeprint/slave/templates/box-top-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-top-middle.png b/kdeprint/slave/templates/box-top-middle.png deleted file mode 100644 index 7ee2a0738..000000000 Binary files a/kdeprint/slave/templates/box-top-middle.png and /dev/null differ diff --git a/kdeprint/slave/templates/box-top-right.png b/kdeprint/slave/templates/box-top-right.png deleted file mode 100644 index 26d16d313..000000000 Binary files a/kdeprint/slave/templates/box-top-right.png and /dev/null differ diff --git a/kdeprint/slave/templates/class.template b/kdeprint/slave/templates/class.template deleted file mode 100644 index b6a79a1fd..000000000 --- a/kdeprint/slave/templates/class.template +++ /dev/null @@ -1,188 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta name="generator" content= - "HTML Tidy for Linux/x86 (vers 1st August 2004), see www.w3.org" /> - - <title>%1 - - - - - -
-
- -
- -
- -
- -
- %1 -
- -
- %1 -
-
- -
-
-
- -
- -
- -
-
- -
- %1 -
- -
-
- -
- -
- -
-
-
- -
-
-
-
- -
- -
- -
-
- -
-
-

 %1

- - - - - - - - - -
 %1 -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%1 %1
%1 %1
%1 %1
%1 %1
%1 %1
-
- -

- -

- - - - - - - - - -
 %1 -
- - - - - - -
%1
-
- -

-
- -
-
- -
- -
- -
-
-
-
- -
-
- -
- -
- -
-
- - diff --git a/kdeprint/slave/templates/driver.template b/kdeprint/slave/templates/driver.template deleted file mode 100644 index 8ba428e74..000000000 --- a/kdeprint/slave/templates/driver.template +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - %1 - - - - - -
-
- -
- -
- -
- -
- %1 -
- -
- %1 -
-
- -
-
-
- -
- -
- -
-
- -
- %1 -
- -
-
- -
- -
- -
-
-
- -
-
-
-
- -
- -
- -
-
- -
-
-

 %1

- - - - - -
- - - %1 - -
-
- -
-
- -
-
- -
- -
- -
-
-
-
- -
-
- -
- -
- -
-
- - diff --git a/kdeprint/slave/templates/htmlstyles.css b/kdeprint/slave/templates/htmlstyles.css deleted file mode 100644 index 650ed76db..000000000 --- a/kdeprint/slave/templates/htmlstyles.css +++ /dev/null @@ -1,38 +0,0 @@ -td.main { background-color: #505050;} -td.logo { background-color: #DDDDDD;} -td.lines { background-color: #DDDDDD; - background-image: url(lines.png);} -td.trans { background-repeat: no-repeat;} -td.end { background-image: url(lines2.png); - background-repeat: x-repeat;} -td.shadow1 { background-image: url(shadow1.png); - background-repeat: x-repeat;} -tr.top { font-family: sans-serif; - color: #ffffff; - background-color: #505050} -tr.contentyellow { font-family: sans-serif; - color: #000000; - background-color: #fff4c9} -tr.contentwhite { font-family: sans-serif; - color: #000000; - background-color: #FFFFFF} -tr.menurow {background-color: #505050; - color: #000000; - vertical-align: middle;} -td.deco {color: #ffffff; - background-color: #505050; - font-family: sans-serif; - font-size: small;} -td.menuactive {color: #ffcc00; - background-color: #777777; - font-family: sans-serif; - font-size: small;} -td.menu {color: #ffffff; - background-color: #505050; - font-family: sans-serif;} -a.menu {color: #eeeeee; - font-family: sans-serif; - font-size: small;} -a.menu:hover {color: #ffffff; - text-decoration: none;} - diff --git a/kdeprint/slave/templates/jobs.template b/kdeprint/slave/templates/jobs.template deleted file mode 100644 index 684899aba..000000000 --- a/kdeprint/slave/templates/jobs.template +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - %1 - - - - - -
-
- -
- -
- -
- -
- %1 -
- -
- %1 -
-
- -
-
-
- -
- -
- -
-
- -
- %1 -
- -
-
- -
- -
- -
-
-
- -
-
-
-
- -
- -
- -
-
- -
-
-

 %1

- - - - - -
- - - - - - - - - - %1 - -
%1%1%1%1%1
-
- -
-
- -
-
- -
- -
- -
-
-
-
- -
-
- -
- -
- -
-
- - diff --git a/kdeprint/slave/templates/printer.template b/kdeprint/slave/templates/printer.template deleted file mode 100644 index 3bdfa8665..000000000 --- a/kdeprint/slave/templates/printer.template +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - %1 - - - - - -
-
- -
- -
- -
- -
- %1 -
- -
- %1 -
-
- -
-
-
- -
- -
- -
-
- -
- %1 -
- -
-
- -
- -
- -
-
-
- -
-
-
-
- -
- -
- -
-
- -
-
-

 %1

- - - - - - - - - -
 %1 -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%1 %1
%1 %1
%1 %1
%1 %1
%1 %1
%1 %1
-
- -

- -

- - - - - - - - - -
 %1
- - - - - - - - - - - - - - - - - - -
%1 %1 -
%1 %1
%1 %1
-
- -

-
- -
-
- -
- -
- -
-
-
-
- -
-
- -
- -
- -
-
- - diff --git a/kdeprint/slave/templates/pseudo.template b/kdeprint/slave/templates/pseudo.template deleted file mode 100644 index a5acc24d1..000000000 --- a/kdeprint/slave/templates/pseudo.template +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - %1 - - - - - -
-
- -
- -
- -
- -
- %1 -
- -
- %1 -
-
- -
-
-
- -
- -
- -
-
- -
- %1 -
- -
-
- -
- -
- -
-
-
- -
-
-
-
- -
- -
- -
-
- -
-
-

 %1

- - - - - - - - - -
 %1 -
- - - - - - - - - - - - - - - - - - - -
%1 %1
%1 %1
%1 %1
-
- -

- -

- - - - - - - - - -
 %1
- - - - - - - - - - - - - - - - - - -
%1 %1 -
%1 %1
%1 %1
-
- -

-
- -
-
- -
- -
- -
-
-
-
- -
-
- -
- -
- -
-
- - diff --git a/kdeprint/slave/templates/top-left.png b/kdeprint/slave/templates/top-left.png deleted file mode 100644 index d7551c0d5..000000000 Binary files a/kdeprint/slave/templates/top-left.png and /dev/null differ diff --git a/kdeprint/slave/templates/top-middle.png b/kdeprint/slave/templates/top-middle.png deleted file mode 100644 index bb3fe7428..000000000 Binary files a/kdeprint/slave/templates/top-middle.png and /dev/null differ diff --git a/kdeprint/slave/templates/top-right-kdeprint.png b/kdeprint/slave/templates/top-right-kdeprint.png deleted file mode 100644 index 56717342c..000000000 Binary files a/kdeprint/slave/templates/top-right-kdeprint.png and /dev/null differ diff --git a/kdesu/AUTHORS b/kdesu/AUTHORS deleted file mode 100644 index 5cabd8892..000000000 --- a/kdesu/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Pietro Iglio -Geert Jansen diff --git a/kdesu/CMakeLists.txt b/kdesu/CMakeLists.txt deleted file mode 100644 index c1fef3ba8..000000000 --- a/kdesu/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include( CheckCSourceCompiles ) -include( CheckFunctionExists ) - -check_c_source_compiles( " - #define _GNU_SOURCE 1 - #include - int main(int argc, char *argv[]) { struct ucred red; return 0; } " - HAVE_STRUCT_UCRED ) - -check_c_source_runs( " - #include - #include - int main() { struct group *grp = getgrnam(\"nogroup\"); if(grp) return 0; return 1; }" - HAVE_NOGROUP ) - -if( HAVE_NOGROUP ) - set( nogroup nogroup ) -else() - check_c_source_runs(" - #include - #include - int main() { struct group *grp = getgrnam(\"nobody\"); if(grp) return 0; return 1; }" - HAVE_NOBODY ) - if( HAVE_NOBODY ) - set( nogroup nobody ) - else() - set( nogroup 65534 ) - endif() -endif() - -check_function_exists( getpeereid HAVE_GETPEEREID ) -check_include_file( "sys/select.h" HAVE_SYS_SELECT_H ) -check_include_file( "sys/wait.h" HAVE_SYS_WAIT_H ) - -if( WITH_SUDO_KDESU_BACKEND ) - set( DEFAULT_SUPER_USER_COMMAND sudo CACHE INTERNAL "" FORCE ) -else() - set( DEFAULT_SUPER_USER_COMMAND su CACHE INTERNAL "" FORCE ) -endif() - -add_subdirectory( tdesu ) -add_subdirectory( tdesud ) diff --git a/kdesu/ChangeLog b/kdesu/ChangeLog deleted file mode 100644 index ad44b81a5..000000000 --- a/kdesu/ChangeLog +++ /dev/null @@ -1,128 +0,0 @@ -Wed, 26 Jan 00 Geert Jansen - - * Build sycoca for target process. - * Use standard debug facilities. - * Use KCmdLineArgs for argument parsing. - * Dialog updated to use KDialogBase. - -Sat, 18 Dec 99 Geert Jansen - - * Add DCOP authentication cookies. - * Fixed SMP install of tdesud. - -Sat, 23 Oct 99 Geert Jansen - - * STL -> QTL - * Use Qt's standard debug facilities. - -Tue, 28 Sep 99 Geert Jansen - - * Integrating tdesu into kdebase - -Sat, 25 Sep 99 Geert Jansen - - * BIG change: su to other user than root. This required a different way - to pass X cookies and stuff to the target process. See - common/tdesu_stub.c for more info. - * Fixed a bug in tdesud/lexer.cpp - -Thu, 23 Sep 99 Geert Jansen - - * Portability issues (root has a csh on FreeBSD ... is this just me?) - * The execution of processes is more efficient now: 2 processess instead - of 3 and 1 tempfile instead of 2. This way possible by setting the - XAUTHORITY env. var. to $HOME/.Xauthority instead of making a new one. - * Fixed a subtle bug in tdesud. tdesud catches SIGCHLD to handle child - exits but this is incompatible with "class RootProcess", which does a - waitpid() and depends on getting the exit code. - * Only connect to daemon when necessary. - -Wed, 22 Sep 99 Geert Jansen - - * Changed WaitSlave() to open slave instead of master pty. - * Added French translation (Pierre Dorgueil). - * Updated German translation (Ludwig Nussel). - * If su has terminal output, feed it back to the user. - -Wed, 8 Sep 99 Geert Jansen - - * If started as root, tdesu does not ask for a password anymore. - -Wed, 1 Sep 99 Geert Jansen - - * Deferred instantiation of kapp in tdesu.cpp. - * Finished porting to KDE2. - -Sun, 29 Aug 99 Geert Jansen - - * Fixed a bug that would let you run only one program with the daemon. - * Adapted debug.h macros. - -Tue, 24 Aug 99 Geert Jansen - - * Version 0.97 - * Fixed the RedHat problem! See the function WaitSlave() in - common/process.cpp. - * Fixed a few GUI bugs. - * Improved password security. Passwords are not kept until - the root program exits, they are deleted right away. - -Fri, 20 Aug 99 Geert Jansen - - * Fixed the glibc 2.1 compile problem (struct ucred test). - -Tue, 17 Aug 99 Geert Jansen - - * Fixed debug.h macros. - * Some more source cleanups. - -Mon, 16 Aug 99 Geert Jansen - - * Added "nogroup" check. - * Updated the HTML documentation. - * Updated the FAQ - -Sun, 15 Aug 99 Geert Jansen - - * KDE su now supports terminal mode apps! (-t switch, no password - keeping, output only) - -Sat, 14 Aug 99 Geert Jansen - - * Version 0.94 - * PTY handling is improved. It should work on more systems now. - (tested: Linux w & w/o UNIX98 PTY's w & w/o GLIBC 2.1, Solaris 7) - * Changed behaviour of "Keep Password" setting. - * Added -n option: don't offer the choice to keep password. - * Added -q, -d options: Quit the daemon and delete a key. - * Source cleanups. - * Various small bugfixes. - * Merged most of the KDE2 fixes from the CVS version. - * KDE su now waits for child programs to finish. Use 'command &' to - exit right away. - -Wed, 02 Jun 99 Geert Jansen - - * Version 0.91 - * The password is passed to su with a pty/tty pair. This should fix the - problems redhat users are experiencing. - * Some portability issues (a.o. AF_LOCAL -> AF_UNIX) - -Thu, 20 May 99 Geert Jansen - - * I am finally able to release 0.9. - -Fri, 09 Apr 99 Geert Jansen - - * Backport to KDE 1.1. Release as tdesu-0.9.tar.gz - -Mon, 22 Mar 99 Geert Jansen - - * Major changes: password keeping, control module, UI changes - * Version 0.9 - -Thu, 25 Feb 99 Geert Jansen - - * Merge with Pietro Iglio's code. - * Version 0.4 - diff --git a/kdesu/FAQ b/kdesu/FAQ deleted file mode 100644 index b7d1499c7..000000000 --- a/kdesu/FAQ +++ /dev/null @@ -1,46 +0,0 @@ -Q: On my SuSE system, KDE su does not compile. I get an error that some Qt - header files cannot be found. -A: Install the package qtcompat. - -Q: Is KDE su safe? -A: No program is 100% safe. However, KDE su is not setuid root and it - handles the password you enter with great care so it should be safe - enough. - -Q: How safe is password keeping? -A: Enabling password keeping is less secure that disabling it. However, the - scheme tdesu uses to keep passwords prevents everyone (including you, the - user) from accessing them. Please see the HTML documentation for a full - description of this scheme. - -Q: Can I execute tty applications with tdesu? -A: No. TTY application will probably never be supported. Use the Unix su for - those. - NOTE: As of version 0.94, tty _output_ _only_ is supported with the `-t' - switch. This disables password keeping, though. - -Q: What systems does KDE su support? -A: Tested are: - * Linux 2.x (Redhat 6.x, Mandrake "Cooker", Debian potato, SuSE 6.1) - * Solaris 7 (intel) - * FreeBSD 3.2 (intel, w/ egcs 1.1.2) - It will probably work on more systems but I cannot test that. - -Q: Why doesn't it support every system that is out there. -A: KDE su needs to setup a pty/tty pair for communicating with `su'. This is - because some `su' implementations refuse to read a password from stdin if - that is not a tty. Setting up a pty/tty pair is not completely portable. - -Q: A good debug tip? -A: If tdesu doesn't fire up your application, use the '-t' switch. - This way, you'll get terminal output. Maybe there is something wrong with - the program you're trying to run. - -Q: I always get the warning: "Terminal output not available on non-terminal". -A: Maybe you're not logged on from a terminal but probably you're using - UNIX98 pty's without glibc 2.1 (Linux). The glibc 2.0 ttyname() function - incorrectly reports that UNIX98 slave pty's are no tty's. - -Q: Why not use DCOP for the communications with the daemon? -A: KDE su needs one instance of the daemon per host, instead of per desktop - session. diff --git a/kdesu/LICENSE.readme b/kdesu/LICENSE.readme deleted file mode 100644 index 234d3c1d8..000000000 --- a/kdesu/LICENSE.readme +++ /dev/null @@ -1,125 +0,0 @@ -tdesu - a KDE front end to su - -Copyright (c) 1998 by Pietro Iglio -Copyright (c) 1999,2000 by Geert Jansen - - The "Artistic License" - - Preamble - - The intent of this document is to state the conditions under which a - Package may be copied, such that the Copyright Holder maintains some - semblance of artistic control over the development of the package, - while giving the users of the package the right to use and - distribute the Package in a more-or-less customary fashion, plus the - right to make reasonable modifications. - - Definitions: - - * "Package" refers to the collection of files distributed by the - Copyright Holder, and derivatives of that collection of files - created through textual modification. - - * "Standard Version" refers to such a Package if it has not been - modified, or has been modified in accordance with the wishes of - the Copyright Holder. - - * "Copyright Holder" is whoever is named in the copyright or - copyrights for the package. - - * "You" is you, if you're thinking about copying or distributing - this Package. - - * "Reasonable copying fee" is whatever you can justify on the - basis of media cost, duplication charges, time of people - involved, and so on. (You will not be required to justify it to - the Copyright Holder, but only to the computing community at - large as a market that must bear the fee.) - - * "Freely Available" means that no fee is charged for the item - itself, though there may be fees involved in handling the item. - It also means that recipients of the item may redistribute it - under the same conditions they received it. - - 1. You may make and give away verbatim copies of the source form of - the Standard Version of this Package without restriction, provided - that you duplicate all of the original copyright notices and - associated disclaimers. - - 2. You may apply bug fixes, portability fixes and other - modifications derived from the Public Domain or from the Copyright - Holder. A Package modified in such a way shall still be considered - the Standard Version. - - 3. You may otherwise modify your copy of this Package in any way, - provided that you insert a prominent notice in each changed file - stating how and when you changed that file, and provided that you do - at least ONE of the following: - - a) place your modifications in the Public Domain or - otherwise make them Freely Available, such as by posting - said modifications to Usenet or an equivalent medium, or - placing the modifications on a major archive site such as - ftp.uu.net, or by allowing the Copyright Holder to include - your modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation - or organization. - - c) rename any non-standard executables so the names do not - conflict with standard executables, which must also be - provided, and provide a separate manual page for each - non-standard executable that clearly documents how it - differs from the Standard Version. - - d) make other distribution arrangements with the Copyright - Holder. - - 4. You may distribute the programs of this Package in object code or - executable form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and - library files, together with instructions (in the manual - page or equivalent) on where to get the Standard Version. - - b) accompany the distribution with the machine-readable - source of the Package with your modifications. - - c) accompany any non-standard executables with their - corresponding Standard Version executables, giving the - non-standard executables non-standard names, and clearly - documenting the differences in manual pages (or - equivalent), together with instructions on where to get - the Standard Version. - - d) make other distribution arrangements with the Copyright - Holder. - - 5. You may charge a reasonable copying fee for any distribution of - this Package. You may charge any fee you choose for support of this - Package. You may not charge a fee for this Package itself. However, - you may distribute this Package in aggregate with other (possibly - commercial) programs as part of a larger (possibly commercial) - software distribution provided that you do not advertise this - Package as a product of your own. - - 6. The scripts and library files supplied as input to or produced as - output from the programs of this Package do not automatically fall - under the copyright of this Package, but belong to whomever - generated them, and may be sold commercially, and may be aggregated - with this Package. - - 7. C or perl subroutines supplied by you and linked into this - Package shall not be considered part of this Package. - - 8. The name of the Copyright Holder may not be used to endorse or - promote products derived from this software without specific prior - written permission. - - 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - The End - - diff --git a/kdesu/Makefile.am b/kdesu/Makefile.am deleted file mode 100644 index a07d47884..000000000 --- a/kdesu/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = tdesu tdesud diff --git a/kdesu/README b/kdesu/README deleted file mode 100644 index caa2e0d48..000000000 --- a/kdesu/README +++ /dev/null @@ -1,34 +0,0 @@ - - KDESU: A KDE front end for `su'. - -What is it? - - KDE su is a graphical front end to the Unix `su' utility. It allows you - to run programs as another user by entering their password. - It is _not_ a setuid root program, it runs completely unprivileged. - The system's program `su' is used for acquiring privileges. - -Usage: - - $ tdesu -h - $ tdesu -c konsole - -Please see the HTML documentation! - -Notes and Acknowledgements: - - Credits go to Pietro Iglio. He was the original author of KDE su - (until version 0.3). I was writing a similar program when I - found out that KDE su already existed. We decided to merge our - projects and that I would continue with it. - - If you find any bug of have a suggestion, feel free to contact me - at . - - -License: - - KDE su comes under the "Artistic License". See the file LICENSE.readme - for the exact terms. - -Alan Eldridge 2002/10/12 diff --git a/kdesu/TODO b/kdesu/TODO deleted file mode 100644 index 1be1aec4b..000000000 --- a/kdesu/TODO +++ /dev/null @@ -1,3 +0,0 @@ -KDE su TODO list. - -* Currently nothing diff --git a/kdesu/configure.in.in b/kdesu/configure.in.in deleted file mode 100644 index 512825786..000000000 --- a/kdesu/configure.in.in +++ /dev/null @@ -1,62 +0,0 @@ -dnl Check for "struct ucred" -AC_MSG_CHECKING("struct ucred") -AC_TRY_COMPILE( -[ - #define _GNU_SOURCE 1 - #include -], -[ - struct ucred red; -], have_ucred=yes - , have_ucred=no -) -if test "$have_ucred" = "yes"; then - AC_DEFINE(HAVE_STRUCT_UCRED, 1, [Define if you have the struct ucred]) - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi - -dnl Check for the group "nogroup" or "nobody" Use -2 otherwise. -AC_MSG_CHECKING(nogroup) -AC_TRY_RUN([ - #include - #include - - int main() - { - struct group *grp = getgrnam("nogroup"); - if (grp) return 0; - return 1; - } -], nogroup=nogroup, -AC_TRY_RUN([ - #include - #include - - int main() - { - struct group *grp = getgrnam("nobody"); - if (grp) return 0; - return 1; - } -], nogroup=nobody, -nogroup=65534, nogroup=65534), nogroup=65534) -AC_MSG_RESULT($nogroup) -AC_SUBST(nogroup) -AC_CHECK_FUNCS(getpeereid) - -AC_ARG_WITH(sudo-tdesu-backend, - AC_HELP_STRING([--with-sudo-tdesu-backend], - [use sudo as backend for tdesu (default is su)]), -[ - if test x$withval = xyes; then - use_tdesu_backend="sudo" - else - use_tdesu_backend="su" - fi -], - use_tdesu_backend="su" -) - -AC_DEFINE_UNQUOTED(DEFAULT_SUPER_USER_COMMAND, "$use_tdesu_backend", [Use su or sudo]) diff --git a/kdesu/kdesu/CMakeLists.txt b/kdesu/kdesu/CMakeLists.txt deleted file mode 100644 index 7eb878140..000000000 --- a/kdesu/kdesu/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### tdesu (executable) ######################## - -tde_add_executable( tdesu AUTOMOC - SOURCES tdesu.cpp sudlg.cpp - LINK tdesu-shared kio-shared - DESTINATION ${BIN_INSTALL_DIR} -) diff --git a/kdesu/kdesu/Makefile.am b/kdesu/kdesu/Makefile.am deleted file mode 100644 index f322f0a6f..000000000 --- a/kdesu/kdesu/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -## Makefile.am for tdesu by Geert Jansen - -INCLUDES= $(all_includes) - -## tdesu -bin_PROGRAMS = tdesu -tdesu_SOURCES = tdesu.cpp sudlg.cpp -tdesu_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_KDECORE) $(LIB_KDEUI) -ltdefx $(LIB_KIO) -lktexteditor -tdesu_LDADD = $(LIB_KIO) -ltdesu -tdesu_METASOURCES = AUTO -noinst_HEADERS = sudlg.h - -## Messages -messages: - $(XGETTEXT) $(tdesu_SOURCES) -o $(podir)/tdesu.pot diff --git a/kdesu/kdesu/kdesu.cpp b/kdesu/kdesu/kdesu.cpp deleted file mode 100644 index d6aeebc6f..000000000 --- a/kdesu/kdesu/kdesu.cpp +++ /dev/null @@ -1,431 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1998 Pietro Iglio - * Copyright (C) 1999,2000 Geert Jansen - */ - -#include - -#include -#include -#include -#include -#include - -#include -#include -#if defined(HAVE_SYS_WAIT_H) -#include -#endif - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "sudlg.h" - -#define ERR strerror(errno) - -TQCString command; -const char *Version = "1.0"; - -// NOTE: if you change the position of the -u switch, be sure to adjust it -// at the beginning of main() -static KCmdLineOptions options[] = { - { "+command", I18N_NOOP("Specifies the command to run"), 0 }, - { "c ", I18N_NOOP("Specifies the command to run"), "" }, - { "f ", I18N_NOOP("Run command under target uid if is not writable"), "" }, - { "u ", I18N_NOOP("Specifies the target uid"), "root" }, - { "n", I18N_NOOP("Do not keep password"), 0 }, - { "s", I18N_NOOP("Stop the daemon (forgets all passwords)"), 0 }, - { "t", I18N_NOOP("Enable terminal output (no password keeping)"), 0 }, - { "p ", I18N_NOOP("Set priority value: 0 <= prio <= 100, 0 is lowest"), "50" }, - { "r", I18N_NOOP("Use realtime scheduling"), 0 }, - { "newdcop", I18N_NOOP("Create a new dcopserver instance (this can break your current TDE session)"), 0 }, - { "noignorebutton", I18N_NOOP("Do not display ignore button"), 0 }, - { "i ", I18N_NOOP("Specify icon to use in the password dialog"), 0}, - { "d", I18N_NOOP("Do not show the command to be run in the dialog"), 0}, - KCmdLineLastOption -}; - - -TQCString dcopNetworkId() -{ - TQCString result; - result.resize(1025); - TQFile file(DCOPClient::dcopServerFile()); - if (!file.open(IO_ReadOnly)) - return ""; - int i = file.readLine(result.data(), 1024); - if (i <= 0) - return ""; - result.data()[i-1] = '\0'; // strip newline - return result; -} - -static int startApp(); - -int main(int argc, char *argv[]) -{ - // FIXME: this can be considered a poor man's solution, as it's not - // directly obvious to a gui user. :) - // anyway, i vote against removing it even when we have a proper gui - // implementation. -- ossi - const char *duser = ::getenv("ADMIN_ACCOUNT"); - if (duser && duser[0]) - options[3].def = duser; - - KAboutData aboutData("tdesu", I18N_NOOP("KDE su"), - Version, I18N_NOOP("Runs a program with elevated privileges."), - KAboutData::License_Artistic, - "Copyright (c) 1998-2000 Geert Jansen, Pietro Iglio"); - aboutData.addAuthor("Geert Jansen", I18N_NOOP("Maintainer"), - "jansen@kde.org", "http://www.stack.nl/~geertj/"); - aboutData.addAuthor("Pietro Iglio", I18N_NOOP("Original author"), - "iglio@fub.it"); - - KCmdLineArgs::init(argc, argv, &aboutData); - KCmdLineArgs::addCmdLineOptions(options); - KApplication::disableAutoDcopRegistration(); - // tdesu doesn't process SM events, so don't even connect to ksmserver - TQCString session_manager = getenv( "SESSION_MANAGER" ); - unsetenv( "SESSION_MANAGER" ); - KApplication app; - // but propagate it to the started app - if (session_manager.data()) - { - setenv( "SESSION_MANAGER", session_manager.data(), 1 ); - } - - { - KStartupInfoId id; - id.initId( kapp->startupId()); - id.setupStartupEnv(); // make DESKTOP_STARTUP_ID env. var. available again - } - - int result = startApp(); - - if (result == 127) - { - KMessageBox::sorry(0, i18n("Command '%1' not found.").arg(static_cast(command))); - } - - return result; -} - -static int startApp() -{ - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - // Stop daemon and exit? - if (args->isSet("s")) - { - KDEsuClient client; - if (client.ping() == -1) - { - kdError(1206) << "Daemon not running -- nothing to stop\n"; - exit(1); - } - if (client.stopServer() != -1) - { - kdDebug(1206) << "Daemon stopped\n"; - exit(0); - } - kdError(1206) << "Could not stop daemon\n"; - exit(1); - } - - TQString icon; - if ( args->isSet("i")) - icon = args->getOption("i"); - - bool prompt = true; - if ( args->isSet("d")) - prompt = false; - - // Get target uid - TQCString user = args->getOption("u"); - TQCString auth_user = user; - struct passwd *pw = getpwnam(user); - if (pw == 0L) - { - kdError(1206) << "User " << user << " does not exist\n"; - exit(1); - } - bool change_uid = (getuid() != pw->pw_uid); - - // If file is writeable, do not change uid - TQString file = TQFile::decodeName(args->getOption("f")); - if (change_uid && !file.isEmpty()) - { - if (file.tqat(0) != '/') - { - KStandardDirs dirs; - dirs.addKDEDefaults(); - file = dirs.findResource("config", file); - if (file.isEmpty()) - { - kdError(1206) << "Config file not found: " << file << "\n"; - exit(1); - } - } - TQFileInfo fi(file); - if (!fi.exists()) - { - kdError(1206) << "File does not exist: " << file << "\n"; - exit(1); - } - change_uid = !fi.isWritable(); - } - - // Get priority/scheduler - TQCString tmp = args->getOption("p"); - bool ok; - int priority = tmp.toInt(&ok); - if (!ok || (priority < 0) || (priority > 100)) - { - KCmdLineArgs::usage(i18n("Illegal priority: %1").arg(static_cast(tmp))); - exit(1); - } - int scheduler = SuProcess::SchedNormal; - if (args->isSet("r")) - scheduler = SuProcess::SchedRealtime; - if ((priority > 50) || (scheduler != SuProcess::SchedNormal)) - { - change_uid = true; - auth_user = "root"; - } - - // Get command - if (args->isSet("c")) - { - command = args->getOption("c"); - for (int i=0; icount(); i++) - { - TQString arg = TQFile::decodeName(args->arg(i)); - KRun::shellQuote(arg); - command += " "; - command += TQFile::encodeName(arg); - } - } - else - { - if( args->count() == 0 ) - { - KCmdLineArgs::usage(i18n("No command specified.")); - exit(1); - } - command = args->arg(0); - for (int i=1; icount(); i++) - { - TQString arg = TQFile::decodeName(args->arg(i)); - KRun::shellQuote(arg); - command += " "; - command += TQFile::encodeName(arg); - } - } - - // Don't change uid if we're don't need to. - if (!change_uid) - { - int result = system(command); - result = WEXITSTATUS(result); - return result; - } - - // Check for daemon and start if necessary - bool just_started = false; - bool have_daemon = true; - KDEsuClient client; - if (!client.isServerSGID()) - { - kdWarning(1206) << "Daemon not safe (not sgid), not using it.\n"; - have_daemon = false; - } - else if (client.ping() == -1) - { - if (client.startServer() == -1) - { - kdWarning(1206) << "Could not start daemon, reduced functionality.\n"; - have_daemon = false; - } - just_started = true; - } - - // Try to exec the command with tdesud. - bool keep = !args->isSet("n") && have_daemon; - bool terminal = true; - bool new_dcop = args->isSet("newdcop"); - bool withIgnoreButton = args->isSet("ignorebutton"); - - QCStringList env; - TQCString options; - env << ( "DESKTOP_STARTUP_ID=" + kapp->startupId()); - - if (pw->pw_uid) - { - // Only propagate KDEHOME for non-root users, - // root uses KDEROOTHOME - - // Translate the KDEHOME of this user to the new user. - TQString kdeHome = KGlobal::dirs()->relativeLocation("home", KGlobal::dirs()->localkdedir()); - if (kdeHome[0] != '/') - kdeHome.prepend("~/"); - else - kdeHome=TQString::null; // Use default - - env << ("KDEHOME="+ TQFile::encodeName(kdeHome)); - } - - KUser u; - env << (TQCString) ("KDESU_USER=" + u.loginName().local8Bit()); - - if (!new_dcop) - { - TQCString ksycoca = "KDESYCOCA="+TQFile::encodeName(locateLocal("cache", "ksycoca")); - env << ksycoca; - - options += "xf"; // X-only, dcop forwarding enabled. - } - - if (keep && !terminal && !just_started) - { - client.setPriority(priority); - client.setScheduler(scheduler); - int result = client.exec(command, user, options, env); - if (result == 0) - { - result = client.exitCode(); - return result; - } - } - - // Set core dump size to 0 because we will have - // root's password in memory. - struct rlimit rlim; - rlim.rlim_cur = rlim.rlim_max = 0; - if (setrlimit(RLIMIT_CORE, &rlim)) - { - kdError(1206) << "rlimit(): " << ERR << "\n"; - exit(1); - } - - // Read configuration - KConfig *config = KGlobal::config(); - config->setGroup("Passwords"); - int timeout = config->readNumEntry("Timeout", defTimeout); - - // Check if we need a password - SuProcess proc; - proc.setUser(auth_user); - int needpw = proc.checkNeedPassword(); - if (needpw < 0) - { - TQString err = i18n("Su returned with an error.\n"); - KMessageBox::error(0L, err); - exit(1); - } - if (needpw == 0) - { - keep = 0; - kdDebug() << "Don't need password!!\n"; - } - - // Start the dialog - TQCString password; - if (needpw) - { - KStartupInfoId id; - id.initId( kapp->startupId()); - KStartupInfoData data; - data.setSilent( KStartupInfoData::Yes ); - KStartupInfo::sendChange( id, data ); - KDEsuDialog dlg(user, auth_user, keep && !terminal,icon, withIgnoreButton); - if (prompt) - dlg.addLine(i18n("Command:"), command); - if ((priority != 50) || (scheduler != SuProcess::SchedNormal)) - { - TQString prio; - if (scheduler == SuProcess::SchedRealtime) - prio += i18n("realtime: "); - prio += TQString("%1/100").arg(priority); - if (prompt) - dlg.addLine(i18n("Priority:"), prio); - } - int ret = dlg.exec(); - if (ret == KDEsuDialog::Rejected) - { - KStartupInfo::sendFinish( id ); - exit(0); - } - if (ret == KDEsuDialog::AsUser) - change_uid = false; - password = dlg.password(); - keep = dlg.keep(); - KConfigGroup(config,"Passwords").writeEntry("Keep", keep); - data.setSilent( KStartupInfoData::No ); - KStartupInfo::sendChange( id, data ); - } - - // Some events may need to be handled (like a button animation) - kapp->processEvents(); - - // Run command - if (!change_uid) - { - int result = system(command); - result = WEXITSTATUS(result); - return result; - } - else if (keep && have_daemon) - { - client.setPass(password, timeout); - client.setPriority(priority); - client.setScheduler(scheduler); - int result = client.exec(command, user, options, env); - if (result == 0) - { - result = client.exitCode(); - return result; - } - } else - { - SuProcess proc; - proc.setTerminal(terminal); - proc.setErase(true); - proc.setUser(user); - if (!new_dcop) - { - proc.setXOnly(true); - proc.setDCOPForwarding(true); - } - proc.setEnvironment(env); - proc.setPriority(priority); - proc.setScheduler(scheduler); - proc.setCommand(command); - int result = proc.exec(password); - return result; - } - return -1; -} - diff --git a/kdesu/kdesu/sudlg.cpp b/kdesu/kdesu/sudlg.cpp deleted file mode 100644 index cfda9168c..000000000 --- a/kdesu/kdesu/sudlg.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 2000 Geert Jansen - */ - -#include -#include -#include -#include -#include -#include - -#include -#include "sudlg.h" - -KDEsuDialog::KDEsuDialog(TQCString user, TQCString auth_user, bool enableKeep,const TQString& icon, bool withIgnoreButton) - : KPasswordDialog(Password, enableKeep, (withIgnoreButton ? User1:NoDefault), icon) -{ - KConfig* config = KGlobal::config(); - config->setGroup("super-user-command"); - TQString superUserCommand = config->readEntry("super-user-command", DEFAULT_SUPER_USER_COMMAND); - if ( superUserCommand != "sudo" && superUserCommand != "su" ) { - kdWarning() << "unknown super user command" << endl; - superUserCommand = "su"; - } - - m_User = auth_user; - setCaption(i18n("Run as %1").arg(static_cast(user))); - - TQString prompt; - if (superUserCommand == "sudo" && m_User == "root") { - prompt = i18n("Please enter your password." ); - } else { - if (m_User == "root") { - prompt = i18n("The action you requested needs root privileges. " - "Please enter root's password below or click " - "Ignore to continue with your current privileges."); - } else { - prompt = i18n("The action you requested needs additional privileges. " - "Please enter the password for \"%1\" below or click " - "Ignore to continue with your current privileges.").arg(static_cast(m_User)); - } - } - setPrompt(prompt); - - if( withIgnoreButton ) - setButtonText(User1, i18n("&Ignore")); -} - - -KDEsuDialog::~KDEsuDialog() -{ -} - -bool KDEsuDialog::checkPassword(const char *password) -{ - SuProcess proc; - proc.setUser(m_User); - int status = proc.checkInstall(password); - switch (status) - { - case -1: - KMessageBox::sorry(this, i18n("Conversation with su failed.")); - done(Rejected); - return false; - - case 0: - return true; - - case SuProcess::SuNotFound: - KMessageBox::sorry(this, - i18n("The program 'su' is not found;\n" - "make sure your PATH is set correctly.")); - done(Rejected); - return false; - - case SuProcess::SuNotAllowed: - KMessageBox::sorry(this, - i18n("You are not allowed to use 'su';\n" - "on some systems, you need to be in a special " - "group (often: wheel) to use this program.")); - done(Rejected); - return false; - - case SuProcess::SuIncorrectPassword: - KMessageBox::sorry(this, i18n("Incorrect password; please try again.")); - return false; - - default: - KMessageBox::error(this, i18n("Internal error: illegal return from " - "SuProcess::checkInstall()")); - done(Rejected); - return false; - } -} - -void KDEsuDialog::slotUser1() -{ - done(AsUser); -} - -#include "sudlg.moc" diff --git a/kdesu/kdesu/sudlg.h b/kdesu/kdesu/sudlg.h deleted file mode 100644 index 64a283a0e..000000000 --- a/kdesu/kdesu/sudlg.h +++ /dev/null @@ -1,32 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 2000 Geert Jansen - */ - -#ifndef __SuDlg_h_Included__ -#define __SuDlg_h_Included__ - -#include - -class KDEsuDialog - : public KPasswordDialog -{ - Q_OBJECT - -public: - KDEsuDialog(TQCString user, TQCString auth_user, bool enableKeep, const TQString& icon , bool withIgnoreButton=false); - ~KDEsuDialog(); - - enum ResultCodes { AsUser = 10 }; - -protected: - bool checkPassword(const char *password); - void slotUser1(); - -private: - TQCString m_User; -}; - - -#endif // __SuDlg_h_Included__ diff --git a/kdesu/kdesud/CMakeLists.txt b/kdesu/kdesud/CMakeLists.txt deleted file mode 100644 index 2696a8197..000000000 --- a/kdesu/kdesud/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -# FIXME there is used KDE_USE_FPIE - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### tdesud (executable) ####################### - -tde_add_executable( tdesud - SOURCES tdesud.cpp repo.cpp lexer.cpp handler.cpp secure.cpp - LINK tdesu-shared - DESTINATION ${BIN_INSTALL_DIR} -) - -install( CODE "execute_process( COMMAND chown root:${nogroup} \$ENV{DESTDIR}${_destination}/tdesud )" ) -install( CODE "execute_process( COMMAND chmod 2755 \$ENV{DESTDIR}${_destination}/tdesud )" ) diff --git a/kdesu/kdesud/Makefile.am b/kdesu/kdesud/Makefile.am deleted file mode 100644 index 140cbce06..000000000 --- a/kdesu/kdesud/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -## Makefile.am for tdesud - -INCLUDES = $(all_includes) - -KDE_CXXFLAGS = $(KDE_USE_FPIE) - -bin_PROGRAMS = tdesud -tdesud_SOURCES = tdesud.cpp repo.cpp lexer.cpp handler.cpp secure.cpp -tdesud_LDFLAGS = $(KDE_USE_PIE) $(all_libraries) $(KDE_RPATH) -tdesud_LDADD = $(LIB_KDECORE) -ltdesu $(LIBSOCKET) -noinst_HEADERS = repo.h handler.h lexer.h secure.h - -## tdesud needs to be suid or sgid something -install-data-local: - @echo "********************************************************" - @echo "" - @echo "For security reasons, tdesud is installed setgid nogroup." - @echo "Kdesud is the daemon that implements the password caching." - @echo "" - @echo "You should NOT use the password caching feature if tdesud is" - @echo "not installed setgid nogroup." - @echo "" - @echo "********************************************************" - -install-exec-hook: - @(chown root:@nogroup@ $(DESTDIR)$(bindir)/tdesud && chmod 2755 $(DESTDIR)$(bindir)/tdesud) \ - || echo "Error: Could not install tdesud as setgid nogroup!!\n" \ - "The password caching feature is disabled." - -messages: - $(XGETTEXT) $(tdesud_SOURCES) -o $(podir)/tdesud.pot diff --git a/kdesu/kdesud/handler.cpp b/kdesu/kdesud/handler.cpp deleted file mode 100644 index 2a744b217..000000000 --- a/kdesu/kdesud/handler.cpp +++ /dev/null @@ -1,512 +0,0 @@ -/* - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - * - * handler.cpp: A connection handler for tdesud. - */ - - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "handler.h" -#include "repo.h" -#include "lexer.h" -#include "secure.h" - - -// Global repository -extern Repository *repo; -void tdesud_cleanup(); - -ConnectionHandler::ConnectionHandler(int fd) - : SocketSecurity(fd), m_exitCode(0), m_hasExitCode(false), m_needExitCode(false), m_pid(0) -{ - m_Fd = fd; - m_Priority = 50; - m_Scheduler = SuProcess::SchedNormal; -} - -ConnectionHandler::~ConnectionHandler() -{ - m_Buf.fill('x'); - m_Pass.fill('x'); - close(m_Fd); -} - -/* - * Handle a connection: make sure we don't block - */ - -int ConnectionHandler::handle() -{ - int ret, nbytes; - - // Add max 100 bytes to connection buffer - - char tmpbuf[100]; - nbytes = recv(m_Fd, tmpbuf, 99, 0); - - if (nbytes < 0) - { - if (errno == EINTR) - return 0; - // read error - return -1; - } else if (nbytes == 0) - { - // eof - return -1; - } - tmpbuf[nbytes] = '\000'; - - if (m_Buf.length()+nbytes > 1024) - { - kdWarning(1205) << "line too long"; - return -1; - } - - m_Buf.append(tmpbuf); - memset(tmpbuf, 'x', nbytes); - - // Do we have a complete command yet? - int n; - TQCString newbuf; - while ((n = m_Buf.find('\n')) != -1) - { - newbuf = m_Buf.left(n+1); - m_Buf.fill('x', n+1); - m_Buf.remove(0, n+1); - ret = doCommand(newbuf); - if (ret < 0) - return ret; - } - - return 0; -} - -TQCString ConnectionHandler::makeKey(int _namespace, TQCString s1, - TQCString s2, TQCString s3) -{ - TQCString res; - res.setNum(_namespace); - res += "*"; - res += s1 + "*" + s2 + "*" + s3; - return res; -} - -void ConnectionHandler::sendExitCode() -{ - if (!m_needExitCode) - return; - TQCString buf; - buf.setNum(m_exitCode); - buf.prepend("OK "); - buf.append("\n"); - - send(m_Fd, buf.data(), buf.length(), 0); -} - -void ConnectionHandler::respond(int ok, TQCString s) -{ - TQCString buf; - - switch (ok) { - case Res_OK: - buf = "OK"; - break; - case Res_NO: - default: - buf = "NO"; - break; - } - - if (!s.isEmpty()) - { - buf += ' '; - buf += s; - } - - buf += '\n'; - - send(m_Fd, buf.data(), buf.length(), 0); -} - -/* - * Parse and do one command. On a parse error, return -1. This will - * close the socket in the main accept loop. - */ - -int ConnectionHandler::doCommand(TQCString buf) -{ - if ((uid_t) peerUid() != getuid()) - { - kdWarning(1205) << "Peer uid not equal to me\n"; - kdWarning(1205) << "Peer: " << peerUid() << " Me: " << getuid() << endl; - return -1; - } - - TQCString key, command, pass, name, user, value, env_check; - Data_entry data; - - Lexer *l = new Lexer(buf); - int tok = l->lex(); - switch (tok) - { - case Lexer::Tok_pass: // "PASS password:string timeout:int\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - m_Pass.fill('x'); - m_Pass = l->lval(); - tok = l->lex(); - if (tok != Lexer::Tok_num) - goto parse_error; - m_Timeout = l->lval().toInt(); - if (l->lex() != '\n') - goto parse_error; - if (m_Pass.isNull()) - m_Pass = ""; - kdDebug(1205) << "Password set!\n"; - respond(Res_OK); - break; - - case Lexer::Tok_host: // "HOST host:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - m_Host = l->lval(); - if (l->lex() != '\n') - goto parse_error; - kdDebug(1205) << "Host set to " << m_Host << endl; - respond(Res_OK); - break; - - case Lexer::Tok_prio: // "PRIO priority:int\n" - tok = l->lex(); - if (tok != Lexer::Tok_num) - goto parse_error; - m_Priority = l->lval().toInt(); - if (l->lex() != '\n') - goto parse_error; - kdDebug(1205) << "priority set to " << m_Priority << endl; - respond(Res_OK); - break; - - case Lexer::Tok_sched: // "SCHD scheduler:int\n" - tok = l->lex(); - if (tok != Lexer::Tok_num) - goto parse_error; - m_Scheduler = l->lval().toInt(); - if (l->lex() != '\n') - goto parse_error; - kdDebug(1205) << "Scheduler set to " << m_Scheduler << endl; - respond(Res_OK); - break; - - case Lexer::Tok_exec: // "EXEC command:string user:string [options:string (env:string)*]\n" - { - TQCString options; - QCStringList env; - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - command = l->lval(); - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - user = l->lval(); - tok = l->lex(); - if (tok != '\n') - { - if (tok != Lexer::Tok_str) - goto parse_error; - options = l->lval(); - tok = l->lex(); - while (tok != '\n') - { - if (tok != Lexer::Tok_str) - goto parse_error; - TQCString env_str = l->lval(); - env.append(env_str); - if (strncmp(env_str, "DESKTOP_STARTUP_ID=", strlen("DESKTOP_STARTUP_ID=")) != 0) - env_check += "*"+env_str; - tok = l->lex(); - } - } - - TQCString auth_user; - if ((m_Scheduler != SuProcess::SchedNormal) || (m_Priority > 50)) - auth_user = "root"; - else - auth_user = user; - key = makeKey(2, m_Host, auth_user, command); - // We only use the command if the environment is the same. - if (repo->find(key) == env_check) - { - key = makeKey(0, m_Host, auth_user, command); - pass = repo->find(key); - } - if (pass.isNull()) // isNull() means no password, isEmpty() can mean empty password - { - if (m_Pass.isNull()) - { - respond(Res_NO); - break; - } - data.value = env_check; - data.timeout = m_Timeout; - key = makeKey(2, m_Host, auth_user, command); - repo->add(key, data); - data.value = m_Pass; - data.timeout = m_Timeout; - key = makeKey(0, m_Host, auth_user, command); - repo->add(key, data); - pass = m_Pass; - } - - // Execute the command asynchronously - kdDebug(1205) << "Executing command: " << command << endl; - pid_t pid = fork(); - if (pid < 0) - { - kdDebug(1205) << "fork(): " << strerror(errno) << endl; - respond(Res_NO); - break; - } else if (pid > 0) - { - m_pid = pid; - respond(Res_OK); - break; - } - - // Ignore SIGCHLD because "class SuProcess" needs waitpid() - signal(SIGCHLD, SIG_DFL); - - int ret; - if (m_Host.isEmpty()) - { - SuProcess proc; - proc.setCommand(command); - proc.setUser(user); - if (options.contains('x')) - proc.setXOnly(true); - if (options.contains('f')) - proc.setDCOPForwarding(true); - proc.setPriority(m_Priority); - proc.setScheduler(m_Scheduler); - proc.setEnvironment(env); - ret = proc.exec(pass.data()); - } else - { - SshProcess proc; - proc.setCommand(command); - proc.setUser(user); - proc.setHost(m_Host); - ret = proc.exec(pass.data()); - } - - kdDebug(1205) << "Command completed: " << command << endl; - _exit(ret); - } - - case Lexer::Tok_delCmd: // "DEL command:string user:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - command = l->lval(); - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - user = l->lval(); - if (l->lex() != '\n') - goto parse_error; - key = makeKey(0, m_Host, user, command); - if (repo->remove(key) < 0) { - kdDebug(1205) << "Unknown command: " << command << endl; - respond(Res_NO); - } - else { - kdDebug(1205) << "Deleted command: " << command << ", user = " - << user << endl; - respond(Res_OK); - } - break; - - case Lexer::Tok_delVar: // "DELV name:string \n" - { - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - tok = l->lex(); - if (tok != '\n') - goto parse_error; - key = makeKey(1, name); - if (repo->remove(key) < 0) - { - kdDebug(1205) << "Unknown name: " << name << endl; - respond(Res_NO); - } - else { - kdDebug(1205) << "Deleted name: " << name << endl; - respond(Res_OK); - } - break; - } - - case Lexer::Tok_delGroup: // "DELG group:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - if (repo->removeGroup(name) < 0) - { - kdDebug(1205) << "No keys found under group: " << name << endl; - respond(Res_NO); - } - else - { - kdDebug(1205) << "Removed all keys under group: " << name << endl; - respond(Res_OK); - } - break; - - case Lexer::Tok_delSpecialKey: // "DELS special_key:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - if (repo->removeSpecialKey(name) < 0) - respond(Res_NO); - else - respond(Res_OK); - break; - - case Lexer::Tok_set: // "SET name:string value:string group:string timeout:int\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - data.value = l->lval(); - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - data.group = l->lval(); - tok = l->lex(); - if (tok != Lexer::Tok_num) - goto parse_error; - data.timeout = l->lval().toInt(); - if (l->lex() != '\n') - goto parse_error; - key = makeKey(1, name); - repo->add(key, data); - kdDebug(1205) << "Stored key: " << key << endl; - respond(Res_OK); - break; - - case Lexer::Tok_get: // "GET name:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - if (l->lex() != '\n') - goto parse_error; - key = makeKey(1, name); - kdDebug(1205) << "Request for key: " << key << endl; - value = repo->find(key); - if (!value.isEmpty()) - respond(Res_OK, value); - else - respond(Res_NO); - break; - - case Lexer::Tok_getKeys: // "GETK groupname:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - if (l->lex() != '\n') - goto parse_error; - kdDebug(1205) << "Request for group key: " << name << endl; - value = repo->findKeys(name); - if (!value.isEmpty()) - respond(Res_OK, value); - else - respond(Res_NO); - break; - - case Lexer::Tok_chkGroup: // "CHKG groupname:string\n" - tok = l->lex(); - if (tok != Lexer::Tok_str) - goto parse_error; - name = l->lval(); - if (l->lex() != '\n') - goto parse_error; - kdDebug(1205) << "Checking for group key: " << name << endl; - if ( repo->hasGroup( name ) < 0 ) - respond(Res_NO); - else - respond(Res_OK); - break; - - case Lexer::Tok_ping: // "PING\n" - tok = l->lex(); - if (tok != '\n') - goto parse_error; - respond(Res_OK); - break; - - case Lexer::Tok_exit: // "EXIT\n" - tok = l->lex(); - if (tok != '\n') - goto parse_error; - m_needExitCode = true; - if (m_hasExitCode) - sendExitCode(); - break; - - case Lexer::Tok_stop: // "STOP\n" - tok = l->lex(); - if (tok != '\n') - goto parse_error; - kdDebug(1205) << "Stopping by command" << endl; - respond(Res_OK); - tdesud_cleanup(); - exit(0); - - default: - kdWarning(1205) << "Unknown command: " << l->lval() << endl; - respond(Res_NO); - goto parse_error; - } - - delete l; - return 0; - -parse_error: - kdWarning(1205) << "Parse error" << endl; - delete l; - return -1; -} - - - diff --git a/kdesu/kdesud/handler.h b/kdesu/kdesud/handler.h deleted file mode 100644 index 8728efe78..000000000 --- a/kdesu/kdesud/handler.h +++ /dev/null @@ -1,52 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - */ - -#ifndef __Handler_h_included__ -#define __Handler_h_included__ - -#include - -#include -#include "secure.h" - -/** - * A ConnectionHandler handles a client. It is called from the main program - * loop whenever there is data to read from a corresponding socket. - * It keeps reading data until a newline is read. Then, a command is parsed - * and executed. - */ - -class ConnectionHandler: public SocketSecurity -{ - -public: - ConnectionHandler(int fd); - ~ConnectionHandler(); - - /** Handle incoming data. */ - int handle(); - - /* Send back exit code. */ - void sendExitCode(); - -private: - enum Results { Res_OK, Res_NO }; - - int doCommand(TQCString buf); - void respond(int ok, TQCString s=0); - TQCString makeKey(int namspace, TQCString s1, TQCString s2=0, TQCString s3=0); - - int m_Fd, m_Timeout; - int m_Priority, m_Scheduler; - TQCString m_Buf, m_Pass, m_Host; -public: - int m_exitCode; - bool m_hasExitCode; - bool m_needExitCode; - pid_t m_pid; -}; - -#endif diff --git a/kdesu/kdesud/kdesud.cpp b/kdesu/kdesud/kdesud.cpp deleted file mode 100644 index d369aaf9b..000000000 --- a/kdesu/kdesud/kdesud.cpp +++ /dev/null @@ -1,418 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - * - * - * tdesud.cpp: KDE su daemon. Offers "keep password" functionality to kde su. - * - * The socket $KDEHOME/socket-$(HOSTNAME)/tdesud_$(display) is used for communication with - * client programs. - * - * The protocol: Client initiates the connection. All commands and responses - * are terminated by a newline. - * - * Client Server Description - * ------ ------ ----------- - * - * PASS OK Set password for commands in - * this session. Password is - * valid for seconds. - * - * USER OK Set the target user [required] - * - * EXEC OK Execute command . If - * NO has been executed - * before (< timeout) no PASS - * command is needed. - * - * DEL OK Delete password for command - * NO . - * - * PING OK Ping the server (diagnostics). - */ - - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include // Needed on some systems. -#endif - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "repo.h" -#include "handler.h" - -#include -#include - -#ifndef SUN_LEN -#define SUN_LEN(ptr) ((kde_socklen_t) (((struct sockaddr_un *) 0)->sun_path) \ - + strlen ((ptr)->sun_path)) -#endif - -#define ERR strerror(errno) - -// Globals - -Repository *repo; -const char *Version = "1.01"; -TQCString sock; -Display *x11Display; -int pipeOfDeath[2]; - - -void tdesud_cleanup() -{ - unlink(sock); -} - - -// Borrowed from kdebase/kaudio/kaudioserver.cpp - -extern "C" int xio_errhandler(Display *); - -int xio_errhandler(Display *) -{ - kdError(1205) << "Fatal IO error, exiting...\n"; - tdesud_cleanup(); - exit(1); - return 1; //silence compilers -} - -int initXconnection() -{ - x11Display = XOpenDisplay(NULL); - if (x11Display != 0L) - { - XSetIOErrorHandler(xio_errhandler); - XCreateSimpleWindow(x11Display, DefaultRootWindow(x11Display), - 0, 0, 1, 1, 0, - BlackPixelOfScreen(DefaultScreenOfDisplay(x11Display)), - BlackPixelOfScreen(DefaultScreenOfDisplay(x11Display))); - return XConnectionNumber(x11Display); - } else - { - kdWarning(1205) << "Can't connect to the X Server.\n"; - kdWarning(1205) << "Might not terminate at end of session.\n"; - return -1; - } -} - -extern "C" { - void signal_exit(int); - void sigchld_handler(int); -} - -void signal_exit(int sig) -{ - kdDebug(1205) << "Exiting on signal " << sig << "\n"; - tdesud_cleanup(); - exit(1); -} - -void sigchld_handler(int) -{ - char c = ' '; - write(pipeOfDeath[1], &c, 1); -} - -/** - * Creates an AF_UNIX socket in socket resource, mode 0600. - */ - -int create_socket() -{ - int sockfd; - ksocklen_t addrlen; - struct stat s; - - TQCString display(getenv("DISPLAY")); - if (display.isEmpty()) - { - kdWarning(1205) << "$DISPLAY is not set\n"; - return -1; - } - - // strip the screen number from the display - display.replace(TQRegExp("\\.[0-9]+$"), ""); - - sock = TQFile::encodeName(locateLocal("socket", TQString("tdesud_%1").arg(static_cast(display)))); - int stat_err=lstat(sock, &s); - if(!stat_err && S_ISLNK(s.st_mode)) { - kdWarning(1205) << "Someone is running a symlink attack on you\n"; - if(unlink(sock)) { - kdWarning(1205) << "Could not delete symlink\n"; - return -1; - } - } - - if (!access(sock, R_OK|W_OK)) - { - KDEsuClient client; - if (client.ping() == -1) - { - kdWarning(1205) << "stale socket exists\n"; - if (unlink(sock)) - { - kdWarning(1205) << "Could not delete stale socket\n"; - return -1; - } - } else - { - kdWarning(1205) << "tdesud is already running\n"; - return -1; - } - - } - - sockfd = socket(PF_UNIX, SOCK_STREAM, 0); - if (sockfd < 0) - { - kdError(1205) << "socket(): " << ERR << "\n"; - return -1; - } - - struct sockaddr_un addr; - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, sock, sizeof(addr.sun_path)-1); - addr.sun_path[sizeof(addr.sun_path)-1] = '\000'; - addrlen = SUN_LEN(&addr); - if (bind(sockfd, (struct sockaddr *)&addr, addrlen) < 0) - { - kdError(1205) << "bind(): " << ERR << "\n"; - return -1; - } - - struct linger lin; - lin.l_onoff = lin.l_linger = 0; - if (setsockopt(sockfd, SOL_SOCKET, SO_LINGER, (char *) &lin, - sizeof(linger)) < 0) - { - kdError(1205) << "setsockopt(SO_LINGER): " << ERR << "\n"; - return -1; - } - - int opt = 1; - if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &opt, - sizeof(opt)) < 0) - { - kdError(1205) << "setsockopt(SO_REUSEADDR): " << ERR << "\n"; - return -1; - } - opt = 1; - if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt, - sizeof(opt)) < 0) - { - kdError(1205) << "setsockopt(SO_KEEPALIVE): " << ERR << "\n"; - return -1; - } - chmod(sock, 0600); - return sockfd; -} - - -/** - * Main program - */ - -int main(int argc, char *argv[]) -{ - prctl(PR_SET_DUMPABLE, 0); - - KAboutData aboutData("tdesud", I18N_NOOP("KDE su daemon"), - Version, I18N_NOOP("Daemon used by tdesu"), - KAboutData::License_Artistic, - "Copyright (c) 1999,2000 Geert Jansen"); - aboutData.addAuthor("Geert Jansen", I18N_NOOP("Author"), - "jansen@kde.org", "http://www.stack.nl/~geertj/"); - KCmdLineArgs::init(argc, argv, &aboutData); - KInstance instance(&aboutData); - - // Set core dump size to 0 - struct rlimit rlim; - rlim.rlim_cur = rlim.rlim_max = 0; - if (setrlimit(RLIMIT_CORE, &rlim) < 0) - { - kdError(1205) << "setrlimit(): " << ERR << "\n"; - exit(1); - } - - // Create the Unix socket. - int sockfd = create_socket(); - if (sockfd < 0) - exit(1); - if (listen(sockfd, 1) < 0) - { - kdError(1205) << "listen(): " << ERR << "\n"; - tdesud_cleanup(); - exit(1); - } - int maxfd = sockfd; - - // Ok, we're accepting connections. Fork to the background. - pid_t pid = fork(); - if (pid == -1) - { - kdError(1205) << "fork():" << ERR << "\n"; - tdesud_cleanup(); - exit(1); - } - if (pid) - exit(0); - - // Make sure we exit when the display gets closed. - int x11Fd = initXconnection(); - maxfd = QMAX(maxfd, x11Fd); - - repo = new Repository; - TQPtrVector handler; - handler.setAutoDelete(true); - - pipe(pipeOfDeath); - maxfd = QMAX(maxfd, pipeOfDeath[0]); - - // Signal handlers - struct sigaction sa; - sa.sa_handler = signal_exit; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sigaction(SIGHUP, &sa, 0L); - sigaction(SIGINT, &sa, 0L); - sigaction(SIGTERM, &sa, 0L); - sigaction(SIGQUIT, &sa, 0L); - - sa.sa_handler = sigchld_handler; - sa.sa_flags = SA_NOCLDSTOP; - sigaction(SIGCHLD, &sa, 0L); - sa.sa_handler = SIG_IGN; - sigaction(SIGPIPE, &sa, 0L); - - // Main execution loop - - ksocklen_t addrlen; - struct sockaddr_un clientname; - - fd_set tmp_fds, active_fds; - FD_ZERO(&active_fds); - FD_SET(sockfd, &active_fds); - FD_SET(pipeOfDeath[0], &active_fds); - if (x11Fd != -1) - FD_SET(x11Fd, &active_fds); - - while (1) - { - tmp_fds = active_fds; - if(x11Display) - XFlush(x11Display); - if (select(maxfd+1, &tmp_fds, 0L, 0L, 0L) < 0) - { - if (errno == EINTR) continue; - - kdError(1205) << "select(): " << ERR << "\n"; - exit(1); - } - repo->expire(); - for (int i=0; i<=maxfd; i++) - { - if (!FD_ISSET(i, &tmp_fds)) - continue; - - if (i == pipeOfDeath[0]) - { - char buf[101]; - read(pipeOfDeath[0], buf, 100); - pid_t result; - do - { - int status; - result = waitpid((pid_t)-1, &status, WNOHANG); - if (result > 0) - { - for(int j=handler.size(); j--;) - { - if (handler[j] && (handler[j]->m_pid == result)) - { - handler[j]->m_exitCode = WEXITSTATUS(status); - handler[j]->m_hasExitCode = true; - handler[j]->sendExitCode(); - handler[j]->m_pid = 0; - break; - } - } - } - } - while(result > 0); - } - - if (i == x11Fd) - { - // Discard X events - XEvent event_return; - if (x11Display) - while(XPending(x11Display)) - XNextEvent(x11Display, &event_return); - continue; - } - - if (i == sockfd) - { - // Accept new connection - int fd; - addrlen = 64; - fd = accept(sockfd, (struct sockaddr *) &clientname, &addrlen); - if (fd < 0) - { - kdError(1205) << "accept():" << ERR << "\n"; - continue; - } - if (fd+1 > (int) handler.size()) - handler.resize(fd+1); - handler.insert(fd, new ConnectionHandler(fd)); - maxfd = TQMAX(maxfd, fd); - FD_SET(fd, &active_fds); - continue; - } - - // handle alreay established connection - if (handler[i] && handler[i]->handle() < 0) - { - handler.remove(i); - FD_CLR(i, &active_fds); - } - } - } - kdWarning(1205) << "???\n"; -} - diff --git a/kdesu/kdesud/lexer.cpp b/kdesu/kdesud/lexer.cpp deleted file mode 100644 index f1932f07d..000000000 --- a/kdesu/kdesud/lexer.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - * - * lexer.cpp: A lexer for the tdesud protocol. See tdesud.cpp for a - * description of the protocol. - */ - -#include -#include -#include "lexer.h" - - -Lexer::Lexer(const TQCString &input) -{ - m_Input = input; - in = 0; -} - -Lexer::~Lexer() -{ - // Erase buffers - m_Input.fill('x'); - m_Output.fill('x'); -} - -TQCString &Lexer::lval() -{ - return m_Output; -} - -/* - * lex() is the lexer. There is no end-of-input check here so that has to be - * done by the caller. - */ - -int Lexer::lex() -{ - char c; - - c = m_Input[in++]; - m_Output.fill('x'); - m_Output.resize(0); - - while (1) - { - // newline? - if (c == '\n') - return '\n'; - - // No control characters - if (iscntrl(c)) - return Tok_none; - - if (isspace(c)) - while (isspace(c = m_Input[in++])); - - // number? - if (isdigit(c)) - { - m_Output += c; - while (isdigit(c = m_Input[in++])) - m_Output += c; - in--; - return Tok_num; - } - - // quoted string? - if (c == '"') - { - c = m_Input[in++]; - while ((c != '"') && !iscntrl(c)) { - // handle escaped characters - if (c == '\\') - m_Output += m_Input[in++]; - else - m_Output += c; - c = m_Input[in++]; - } - if (c == '"') - return Tok_str; - return Tok_none; - } - - // normal string - while (!isspace(c) && !iscntrl(c)) - { - m_Output += c; - c = m_Input[in++]; - } - in--; - - // command? - if (m_Output.length() <= 4) - { - if (m_Output == "EXEC") - return Tok_exec; - if (m_Output == "PASS") - return Tok_pass; - if (m_Output == "DEL") - return Tok_delCmd; - if (m_Output == "PING") - return Tok_ping; - if (m_Output == "EXIT") - return Tok_exit; - if (m_Output == "STOP") - return Tok_stop; - if (m_Output == "SET") - return Tok_set; - if (m_Output == "GET") - return Tok_get; - if (m_Output == "HOST") - return Tok_host; - if (m_Output == "SCHD") - return Tok_sched; - if (m_Output == "PRIO") - return Tok_prio; - if (m_Output == "DELV") - return Tok_delVar; - if (m_Output == "DELG") - return Tok_delGroup; - if (m_Output == "DELS") - return Tok_delSpecialKey; - if (m_Output == "GETK") - return Tok_getKeys; - if (m_Output == "CHKG") - return Tok_chkGroup; - } - - return Tok_str; - } -} - diff --git a/kdesu/kdesud/lexer.h b/kdesu/kdesud/lexer.h deleted file mode 100644 index d8f529cd8..000000000 --- a/kdesu/kdesud/lexer.h +++ /dev/null @@ -1,42 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - */ - -#ifndef __Lexer_h_included__ -#define __Lexer_h_included__ - -class TQCString; - -/** - * This is a lexer for the tdesud protocol. - */ - -class Lexer { -public: - Lexer(const TQCString &input); - ~Lexer(); - - /** Read next token. */ - int lex(); - - /** Return the token's value. */ - TQCString &lval(); - - enum Tokens { - Tok_none, Tok_exec=256, Tok_pass, Tok_delCmd, - Tok_ping, Tok_str, Tok_num , Tok_stop, - Tok_set, Tok_get, Tok_delVar, Tok_delGroup, - Tok_host, Tok_prio, Tok_sched, Tok_getKeys, - Tok_chkGroup, Tok_delSpecialKey, Tok_exit - }; - -private: - TQCString m_Input; - TQCString m_Output; - - int in; -}; - -#endif diff --git a/kdesu/kdesud/repo.cpp b/kdesu/kdesud/repo.cpp deleted file mode 100644 index e923d6411..000000000 --- a/kdesu/kdesud/repo.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - */ - -#include -#include - -#include -#include -#include -#include - -#include "repo.h" - - -Repository::Repository() -{ - head_time = (unsigned) -1; -} - - -Repository::~Repository() -{} - - -void Repository::add(const TQCString &key, Data_entry &data) -{ - RepoIterator it = repo.find(key); - if (it != repo.end()) - remove(key); - if (data.timeout == 0) - data.timeout = (unsigned) -1; - else - data.timeout += time(0L); - head_time = QMIN(head_time, data.timeout); - repo.insert(key, data); -} - -int Repository::remove(const TQCString &key) -{ - if( key.isEmpty() ) - return -1; - - RepoIterator it = repo.find(key); - if (it == repo.end()) - return -1; - it.data().value.fill('x'); - it.data().group.fill('x'); - repo.remove(it); - return 0; -} - -int Repository::removeSpecialKey(const TQCString &key) -{ - int found = -1; - if ( !key.isEmpty() ) - { - TQValueStack rm_keys; - for (RepoCIterator it=repo.begin(); it!=repo.end(); ++it) - { - if ( key.find( static_cast(it.data().group) ) == 0 && - it.key().find( static_cast(key) ) >= 0 ) - { - rm_keys.push(it.key()); - found = 0; - } - } - while (!rm_keys.isEmpty()) - { - kdDebug(1205) << "Removed key: " << rm_keys.top() << endl; - remove(rm_keys.pop()); - } - } - return found; -} - -int Repository::removeGroup(const TQCString &group) -{ - int found = -1; - if ( !group.isEmpty() ) - { - TQValueStack rm_keys; - for (RepoCIterator it=repo.begin(); it!=repo.end(); ++it) - { - if (it.data().group == group) - { - rm_keys.push(it.key()); - found = 0; - } - } - while (!rm_keys.isEmpty()) - { - kdDebug(1205) << "Removed key: " << rm_keys.top() << endl; - remove(rm_keys.pop()); - } - } - return found; -} - -int Repository::hasGroup(const TQCString &group) const -{ - if ( !group.isEmpty() ) - { - RepoCIterator it; - for (it=repo.begin(); it!=repo.end(); ++it) - { - if (it.data().group == group) - return 0; - } - } - return -1; -} - -TQCString Repository::findKeys(const TQCString &group, const char *sep ) const -{ - TQCString list=""; - if( !group.isEmpty() ) - { - kdDebug(1205) << "Looking for matching key with group key: " << group << endl; - int pos; - TQCString key; - RepoCIterator it; - for (it=repo.begin(); it!=repo.end(); ++it) - { - if (it.data().group == group) - { - key = it.key().copy(); - kdDebug(1205) << "Matching key found: " << key << endl; - pos = key.findRev(sep); - key.truncate( pos ); - key.remove(0, 2); - if (!list.isEmpty()) - { - // Add the same keys only once please :) - if( !list.contains(static_cast(key)) ) - { - kdDebug(1205) << "Key added to list: " << key << endl; - list += '\007'; // I do not know - list.append(key); - } - } - else - list = key; - } - } - } - return list; -} - -TQCString Repository::find(const TQCString &key) const -{ - if( key.isEmpty() ) - return 0; - - RepoCIterator it = repo.find(key); - if (it == repo.end()) - return 0; - return it.data().value; -} - - -int Repository::expire() -{ - unsigned current = time(0L); - if (current < head_time) - return 0; - - unsigned t; - TQValueStack keys; - head_time = (unsigned) -1; - RepoIterator it; - for (it=repo.begin(); it!=repo.end(); ++it) - { - t = it.data().timeout; - if (t <= current) - keys.push(it.key()); - else - head_time = QMIN(head_time, t); - } - - int n = keys.count(); - while (!keys.isEmpty()) - remove(keys.pop()); - return n; -} - diff --git a/kdesu/kdesud/repo.h b/kdesu/kdesud/repo.h deleted file mode 100644 index 70027793f..000000000 --- a/kdesu/kdesud/repo.h +++ /dev/null @@ -1,68 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - */ - -#ifndef __Repo_h_included__ -#define __Repo_h_included__ - - -#include -#include - - -/** - * Used internally. - */ -struct Data_entry -{ - TQCString value; - TQCString group; - unsigned int timeout; -}; - - -/** - * String repository. - * - * This class implements a string repository with expiration. - */ -class Repository { -public: - Repository(); - ~Repository(); - - /** Remove data elements which are expired. */ - int expire(); - - /** Add a data element */ - void add(const TQCString& key, Data_entry& data); - - /** Delete a data element. */ - int remove(const TQCString& key); - - /** Delete all data entries having the given group. */ - int removeGroup(const TQCString& group); - - /** Delete all data entries based on key. */ - int removeSpecialKey(const TQCString& key ); - - /** Checks for the existence of the specified group. */ - int hasGroup(const TQCString &group) const; - - /** Return a data value. */ - TQCString find(const TQCString& key) const; - - /** Returns the key values for the given group. */ - TQCString findKeys(const TQCString& group, const char *sep= "-") const; - -private: - - TQMap repo; - typedef TQMap::Iterator RepoIterator; - typedef TQMap::ConstIterator RepoCIterator; - unsigned head_time; -}; - -#endif diff --git a/kdesu/kdesud/secure.cpp b/kdesu/kdesud/secure.cpp deleted file mode 100644 index 9b30ab4ee..000000000 --- a/kdesu/kdesud/secure.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - * - * secure.cpp: Peer credentials for a UNIX socket. - */ - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include "secure.h" - - -/** - * Under Linux, Socket_security is supported. - */ - -#if defined(SO_PEERCRED) - -SocketSecurity::SocketSecurity(int sockfd) -{ - ksocklen_t len = sizeof(struct ucred); - if (getsockopt(sockfd, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) { - kdError() << "getsockopt(SO_PEERCRED) " << perror << endl; - return; - } - - ok = true; -} - -#else -# if defined(HAVE_GETPEEREID) -SocketSecurity::SocketSecurity(int sockfd) -{ - uid_t euid; - gid_t egid; - if (getpeereid(sockfd, &euid, &egid) == 0) { - cred.uid = euid; - cred.gid = egid; - cred.pid = -1; - ok = true; - } -} - -# else - - -/** - * The default version does nothing. - */ - -SocketSecurity::SocketSecurity(int sockfd) -{ - static bool warned_him = FALSE; - - if (!warned_him) { - kdWarning() << "Using void socket security. Please add support for your" << endl; - kdWarning() << "platform to tdesu/tdesud/secure.cpp" << endl; - warned_him = TRUE; - } - - // This passes the test made in handler.cpp - cred.uid = getuid(); - ok = true; -} - -# endif -#endif diff --git a/kdesu/kdesud/secure.h b/kdesu/kdesud/secure.h deleted file mode 100644 index edf58d9c6..000000000 --- a/kdesu/kdesud/secure.h +++ /dev/null @@ -1,52 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module tdesu. - * Copyright (C) 1999,2000 Geert Jansen - */ - -#ifndef __Secure_h_included__ -#define __Secure_h_included__ - -#include "config.h" - -#include -#include - -#ifndef HAVE_STRUCT_UCRED - -// `struct ucred' is not defined in glibc 2.0. - -struct ucred { - pid_t pid; - uid_t uid; - gid_t gid; -}; - -#endif // HAVE_STRUCT_UCRED - - -/** - * The Socket_security class autheticates the peer for you. It provides - * the process-id, user-id and group-id plus the MD5 sum of the connected - * binary. - */ - -class SocketSecurity { -public: - SocketSecurity(int fd); - - /** Returns the peer's process-id. */ - int peerPid() { if (!ok) return -1; return cred.pid; } - - /** Returns the peer's user-id */ - int peerUid() { if (!ok) return -1; return cred.uid; } - - /** Returns the peer's group-id */ - int peerGid() { if (!ok) return -1; return cred.gid; } - -private: - bool ok; - struct ucred cred; -}; - -#endif diff --git a/kicker/menuext/kdeprint/CMakeLists.txt b/kicker/menuext/kdeprint/CMakeLists.txt deleted file mode 100644 index a013bcf82..000000000 --- a/kicker/menuext/kdeprint/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - -##### other data ################################ - -install( FILES printmenu.desktop DESTINATION ${DATA_INSTALL_DIR}/kicker/menuext ) - - -##### kickermenu_tdeprint (module) ############## - -tde_add_kpart( kickermenu_tdeprint AUTOMOC - SOURCES print_mnu.cpp - LINK tdeprint-shared - DESTINATION ${PLUGIN_INSTALL_DIR} -) diff --git a/kicker/menuext/kdeprint/Makefile.am b/kicker/menuext/kdeprint/Makefile.am deleted file mode 100644 index c8ad7858a..000000000 --- a/kicker/menuext/kdeprint/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -INCLUDES = $(all_includes) - -kde_module_LTLIBRARIES = kickermenu_tdeprint.la - -kickermenu_tdeprint_la_SOURCES = print_mnu.cpp -kickermenu_tdeprint_la_LDFLAGS = $(all_libraries) -module -avoid-version -kickermenu_tdeprint_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO) -ltdeprint - -kickermenu_tdeprint_la_METASOURCES = AUTO - -desktopmenu_DATA = printmenu.desktop -desktopmenudir = $(kde_datadir)/kicker/menuext - -messages: - $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_tdeprint.pot diff --git a/kicker/menuext/kdeprint/print_mnu.cpp b/kicker/menuext/kdeprint/print_mnu.cpp deleted file mode 100644 index dee220d80..000000000 --- a/kicker/menuext/kdeprint/print_mnu.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/***************************************************************** - -Copyright (c) 1996-2001 the kicker authors. See file AUTHORS. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -******************************************************************/ - -#include "print_mnu.h" -#include -#include -#include -#include -#include -#include -#include - -K_EXPORT_KICKER_MENUEXT(tdeprint, PrintMenu) - -#define ADD_PRINTER_ID 0 -#define KDEPRINT_SETTINGS_ID 1 -#define CONFIG_SERVER_ID 2 -#define PRINT_MANAGER_ID 3 -#define PRINT_BROWSER_ID 4 -#define KPRINTER_ID 5 -#define PRINTER_LIST_ID 10 - -PrintMenu::PrintMenu(TQWidget *parent, const char *name, const TQStringList & /*args*/) -: KPanelMenu("", parent, name) -{ - static bool tdeprintIconsInitialized = false; - if ( !tdeprintIconsInitialized ) { - KGlobal::iconLoader()->addAppDir("tdeprint"); - tdeprintIconsInitialized = true; - } -} - -PrintMenu::~PrintMenu() -{ -} - -void PrintMenu::initialize() -{ - if (initialized()) clear(); - setInitialized(true); - - int ID = PRINTER_LIST_ID; - // just to be sure the plugin is loaded -> icons are available - KMManager::self(); - - if ((KMManager::self()->printerOperationMask() & KMManager::PrinterCreation) && KMManager::self()->hasManagement()) - insertItem(SmallIconSet("wizard"), i18n("Add Printer..."), ADD_PRINTER_ID); - insertItem(SmallIconSet("tdeprint_configmgr"), i18n("KDE Print Settings"), KDEPRINT_SETTINGS_ID); - if (KMManager::self()->serverOperationMask() & KMManager::ServerConfigure) - insertItem(SmallIconSet("tdeprint_configsrv"), i18n("Configure Server"), CONFIG_SERVER_ID); - insertSeparator(); - insertItem(SmallIconSet("kcontrol"), i18n("Print Manager"), PRINT_MANAGER_ID); - insertItem(SmallIconSet("konqueror"), i18n("Print Browser (Konqueror)"), PRINT_BROWSER_ID); - insertSeparator(); - insertItem(SmallIconSet("fileprint"), i18n("Print File..."), KPRINTER_ID); - - // printer list - TQPtrList *l = KMManager::self()->printerList(); - if (l && !l->isEmpty()) - { - bool separatorInserted = false; - TQPtrListIterator it(*l); - for (; it.current(); ++it) - { - // no special, implicit or pure instances - if (it.current()->isSpecial() || it.current()->isVirtual()) - continue; - if (!separatorInserted) - { - // we insert a separator only when we find the first - // printer - insertSeparator(); - separatorInserted = true; - } - insertItem(SmallIconSet(it.current()->pixmap()), - it.current()->printerName(), ID++); - } - } -} - -void PrintMenu::slotExec(int ID) -{ - switch (ID) - { - case ADD_PRINTER_ID: - kapp->tdeinitExec("kaddprinterwizard"); - break; - case KDEPRINT_SETTINGS_ID: - kapp->tdeinitExec("kaddprinterwizard", TQStringList("--kdeconfig")); - break; - case CONFIG_SERVER_ID: - kapp->tdeinitExec("kaddprinterwizard", TQStringList("--serverconfig")); - break; - case PRINT_MANAGER_ID: - KRun::runCommand("kcmshell kde-printers.desktop"); - break; - case PRINT_BROWSER_ID: - KRun::runCommand("kfmclient openProfile filemanagement print:/", "kfmclient", "konqueror"); - break; - case KPRINTER_ID: - kapp->tdeinitExec("kprinter"); - break; - default: - { - // start kjobviewer - TQStringList args; - args << "--show" << "-d" << text(ID).remove('&'); - kapp->tdeinitExec("kjobviewer", args); - } - break; - } -} - -void PrintMenu::reload() -{ - initialize(); -} - -#include "print_mnu.moc" diff --git a/kicker/menuext/kdeprint/print_mnu.h b/kicker/menuext/kdeprint/print_mnu.h deleted file mode 100644 index 47c9e609e..000000000 --- a/kicker/menuext/kdeprint/print_mnu.h +++ /dev/null @@ -1,46 +0,0 @@ -/***************************************************************** - -Copyright (c) 1996-2001 the kicker authors. See file AUTHORS. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -******************************************************************/ - -#ifndef _print_mnu_h_ -#define _print_mnu_h_ - -#include -#include - -class PrintMenu : public KPanelMenu, public KPReloadObject -{ - Q_OBJECT - -public: - PrintMenu(TQWidget *parent, const char *name, const TQStringList & /*args*/); - ~PrintMenu(); - -protected slots: - void slotExec(int id); - void initialize(); - -protected: - void reload(); -}; - -#endif diff --git a/kicker/menuext/kdeprint/printmenu.desktop b/kicker/menuext/kdeprint/printmenu.desktop deleted file mode 100644 index 447d62c8f..000000000 --- a/kicker/menuext/kdeprint/printmenu.desktop +++ /dev/null @@ -1,144 +0,0 @@ -[Desktop Entry] -Name=Print System -Name[af]=Drukker Stelsel -Name[ar]=نظام الطباعة -Name[az]=Çap Sistemi -Name[be]=Сістэма друку -Name[bg]=Система за печат -Name[bn]=মুদ্রণ ব্যবস্থা -Name[br]=Reizhiad moulañ -Name[bs]=Sistem štampe -Name[ca]=Sistema d'impressió -Name[cs]=Tiskový systém -Name[csb]=Systema drëkù -Name[cy]=Cysawd Argraffu -Name[da]=Udskriftssystem -Name[de]=Drucksystem -Name[el]=Σύστημα εκτύπωσης -Name[eo]=Printosistemo -Name[es]=Sistema de impresión -Name[et]=Trükkimissüsteem -Name[eu]=Inprimaketa sistema -Name[fa]=سیستم چاپ -Name[fi]=Tulostusjärjestelmä -Name[fr]=Système d'impression -Name[fy]=Printsysteem -Name[ga]=Córas Priontála -Name[gl]=Sistema de Impresión -Name[he]=מערכת הדפסה -Name[hi]=छापा तंत्र -Name[hr]=Sustav za ispisivanje -Name[hu]=Nyomtatási rendszer -Name[is]=Prentkerfi -Name[it]=Sistema di stampa -Name[ja]=印刷システム -Name[ka]=ბეჭდვის სისტემა -Name[kk]=Басып шығару -Name[km]=ប្រព័ន្ធ​បោះពុម្ព -Name[ko]=모던 시스템 -Name[ku]=Pergala Çapkirinê -Name[lo]=ລະບົບການພິມ -Name[lt]=Spausdinimo sistema -Name[lv]=Drukas Sistēma -Name[mk]=Печатарски систем -Name[mn]=Хэвлэх систем -Name[ms]=Cetak Sistem -Name[mt]=Sistema tal-ipprintjar -Name[nb]=Utskriftsystem -Name[nds]=Drucksysteem -Name[ne]=मुद्रण प्रणाली -Name[nl]=Afdruksysteem -Name[nn]=Utskriftssystem -Name[nso]=System ya Kgatiso -Name[pa]=ਪਰਿੰਟ ਸਿਸਟਮ -Name[pl]=System drukowania -Name[pt]=Sistema de Impressão -Name[pt_BR]=Sistema de Impressão -Name[ro]=Sistem de tipărire -Name[ru]=Система печати -Name[rw]=Sisitemu Gucapa -Name[se]=Čálihanvuogádat -Name[sk]=Tlačový systém -Name[sl]=Tiskalniški sistem -Name[sr]=Систем за штампу -Name[sr@Latn]=Sistem za štampu -Name[sv]=Skrivarsystem -Name[ta]=அச்சு அமைப்பு -Name[te]=ప్రచురణ వ్యవస్థ -Name[tg]=Системаи Чоп -Name[th]=ระบบการพิมพ์ -Name[tr]=Yazıcı Sistemi -Name[tt]=Bastıru Sisteme -Name[uk]=Система друку -Name[uz]=Bosib chiqarish tizimi -Name[uz@cyrillic]=Босиб чиқариш тизими -Name[ven]=Maitele au phirintha -Name[vi]=Hệ thống In ấn -Name[wa]=Sistinme d' imprimaedje -Name[xh]=Indlela Yoshicilelo -Name[zh_CN]=打印系统 -Name[zh_TW]=列印系統 -Name[zu]=Isistimu yokushicilela -Comment=Menu for the print system -Comment[af]=Kieslys vir die drukker stelsel -Comment[ar]=قائمة لنظام الطباعة -Comment[be]=Меню для сістэмы друку -Comment[bg]=Меню на системата за печат -Comment[bn]=মুদ্রণ ব্যবস্থার জন্য মেনু -Comment[bs]=Meni za sistem štampe -Comment[ca]=Menú per al sistema d'impressió -Comment[cs]=Nabídka tiskového systému -Comment[csb]=Menu systemë drëkù -Comment[da]=Menu for udskriftssystemet -Comment[de]=Einfacher Zugriff auf das Drucksystem -Comment[el]=Μενού για το σύστημα εκτύπωσης -Comment[eo]=Menuo por printosistemo -Comment[es]=Menú para el sistema de impresión -Comment[et]=Trükkimissüsteemi menüü -Comment[eu]=Inprimaketa sistemarako menua -Comment[fa]=گزینگان برای سیستم چاپ -Comment[fi]=Tulostusjärjestelmävalikko -Comment[fr]=Menu du système d'impression -Comment[fy]=Menu foar it printsysteem -Comment[gl]=Menu para o sistema de impresión -Comment[he]=תפריט למערכת ההדפסה -Comment[hr]=Izbornik sustava ispisivanja -Comment[hu]=Menü a nyomtatási rendszer eléréséhez -Comment[is]=Fljótleg leið að prentkerfinu -Comment[it]=Menu del sistema di stampa -Comment[ja]=印刷システム用メニュー -Comment[ka]=ბეჭდვის სისტემის მენიუ -Comment[kk]=Басып шығару жүйесінің мәзірі -Comment[km]=ម៉ឺនុយ​សម្រាប់​ប្រព័ន្ធ​បោះពុម្ព -Comment[lt]=Spausdinimo sistemos meniu -Comment[mk]=Мени за системот за печатење -Comment[nb]=Meny for utskriftssystemet -Comment[nds]=Menü för dat Drucksysteem -Comment[ne]=मुद्रण प्रणालीका लागि मेनु -Comment[nl]=Menu voor het afdruksysteem -Comment[nn]=Meny for utskriftssystemet -Comment[pa]=ਪਰਿੰਟ ਸਿਸਟਮ ਲਈ ਮੇਨੂ -Comment[pl]=Menu systemu drukowania -Comment[pt]=Um menu para o sistema de impressão -Comment[pt_BR]=Menu para o sistema de impressão -Comment[ro]=Meniu pentru sistemul de tipărire -Comment[ru]=Быстрый доступ к системе печати -Comment[se]=Čálihanvuogádaga fállu -Comment[sk]=Menu pre tlačový systém -Comment[sl]=Meni za tiskalniški sistem -Comment[sr]=Мени за систем штампања -Comment[sr@Latn]=Meni za sistem štampanja -Comment[sv]=Meny för skrivarsystemet -Comment[te]=ప్రచురణ వ్యవస్థ కొరకు పట్టి -Comment[th]=เมนูสำหรับระบบการพิมพ์ -Comment[tr]=Yazıcı sistemi menüsü -Comment[uk]=Меню для системи друку -Comment[uz]=Bosib chiqarish tizimining menyusi -Comment[uz@cyrillic]=Босиб чиқариш тизимининг менюси -Comment[vi]=Thực đơn cho hệ thống in ấn -Comment[wa]=Dresseŷe pol sistinme d' imprimaedje -Comment[zh_CN]=打印系统菜单 -Comment[zh_TW]=用於列印系統的選單 -Icon=fileprint - -X-KDE-Library=kickermenu_tdeprint diff --git a/kicker/menuext/tdeprint/CMakeLists.txt b/kicker/menuext/tdeprint/CMakeLists.txt new file mode 100644 index 000000000..a013bcf82 --- /dev/null +++ b/kicker/menuext/tdeprint/CMakeLists.txt @@ -0,0 +1,33 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + +##### other data ################################ + +install( FILES printmenu.desktop DESTINATION ${DATA_INSTALL_DIR}/kicker/menuext ) + + +##### kickermenu_tdeprint (module) ############## + +tde_add_kpart( kickermenu_tdeprint AUTOMOC + SOURCES print_mnu.cpp + LINK tdeprint-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) diff --git a/kicker/menuext/tdeprint/Makefile.am b/kicker/menuext/tdeprint/Makefile.am new file mode 100644 index 000000000..c8ad7858a --- /dev/null +++ b/kicker/menuext/tdeprint/Makefile.am @@ -0,0 +1,15 @@ +INCLUDES = $(all_includes) + +kde_module_LTLIBRARIES = kickermenu_tdeprint.la + +kickermenu_tdeprint_la_SOURCES = print_mnu.cpp +kickermenu_tdeprint_la_LDFLAGS = $(all_libraries) -module -avoid-version +kickermenu_tdeprint_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO) -ltdeprint + +kickermenu_tdeprint_la_METASOURCES = AUTO + +desktopmenu_DATA = printmenu.desktop +desktopmenudir = $(kde_datadir)/kicker/menuext + +messages: + $(XGETTEXT) *.cpp -o $(podir)/libkickermenu_tdeprint.pot diff --git a/kicker/menuext/tdeprint/print_mnu.cpp b/kicker/menuext/tdeprint/print_mnu.cpp new file mode 100644 index 000000000..dee220d80 --- /dev/null +++ b/kicker/menuext/tdeprint/print_mnu.cpp @@ -0,0 +1,139 @@ +/***************************************************************** + +Copyright (c) 1996-2001 the kicker authors. See file AUTHORS. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +******************************************************************/ + +#include "print_mnu.h" +#include +#include +#include +#include +#include +#include +#include + +K_EXPORT_KICKER_MENUEXT(tdeprint, PrintMenu) + +#define ADD_PRINTER_ID 0 +#define KDEPRINT_SETTINGS_ID 1 +#define CONFIG_SERVER_ID 2 +#define PRINT_MANAGER_ID 3 +#define PRINT_BROWSER_ID 4 +#define KPRINTER_ID 5 +#define PRINTER_LIST_ID 10 + +PrintMenu::PrintMenu(TQWidget *parent, const char *name, const TQStringList & /*args*/) +: KPanelMenu("", parent, name) +{ + static bool tdeprintIconsInitialized = false; + if ( !tdeprintIconsInitialized ) { + KGlobal::iconLoader()->addAppDir("tdeprint"); + tdeprintIconsInitialized = true; + } +} + +PrintMenu::~PrintMenu() +{ +} + +void PrintMenu::initialize() +{ + if (initialized()) clear(); + setInitialized(true); + + int ID = PRINTER_LIST_ID; + // just to be sure the plugin is loaded -> icons are available + KMManager::self(); + + if ((KMManager::self()->printerOperationMask() & KMManager::PrinterCreation) && KMManager::self()->hasManagement()) + insertItem(SmallIconSet("wizard"), i18n("Add Printer..."), ADD_PRINTER_ID); + insertItem(SmallIconSet("tdeprint_configmgr"), i18n("KDE Print Settings"), KDEPRINT_SETTINGS_ID); + if (KMManager::self()->serverOperationMask() & KMManager::ServerConfigure) + insertItem(SmallIconSet("tdeprint_configsrv"), i18n("Configure Server"), CONFIG_SERVER_ID); + insertSeparator(); + insertItem(SmallIconSet("kcontrol"), i18n("Print Manager"), PRINT_MANAGER_ID); + insertItem(SmallIconSet("konqueror"), i18n("Print Browser (Konqueror)"), PRINT_BROWSER_ID); + insertSeparator(); + insertItem(SmallIconSet("fileprint"), i18n("Print File..."), KPRINTER_ID); + + // printer list + TQPtrList *l = KMManager::self()->printerList(); + if (l && !l->isEmpty()) + { + bool separatorInserted = false; + TQPtrListIterator it(*l); + for (; it.current(); ++it) + { + // no special, implicit or pure instances + if (it.current()->isSpecial() || it.current()->isVirtual()) + continue; + if (!separatorInserted) + { + // we insert a separator only when we find the first + // printer + insertSeparator(); + separatorInserted = true; + } + insertItem(SmallIconSet(it.current()->pixmap()), + it.current()->printerName(), ID++); + } + } +} + +void PrintMenu::slotExec(int ID) +{ + switch (ID) + { + case ADD_PRINTER_ID: + kapp->tdeinitExec("kaddprinterwizard"); + break; + case KDEPRINT_SETTINGS_ID: + kapp->tdeinitExec("kaddprinterwizard", TQStringList("--kdeconfig")); + break; + case CONFIG_SERVER_ID: + kapp->tdeinitExec("kaddprinterwizard", TQStringList("--serverconfig")); + break; + case PRINT_MANAGER_ID: + KRun::runCommand("kcmshell kde-printers.desktop"); + break; + case PRINT_BROWSER_ID: + KRun::runCommand("kfmclient openProfile filemanagement print:/", "kfmclient", "konqueror"); + break; + case KPRINTER_ID: + kapp->tdeinitExec("kprinter"); + break; + default: + { + // start kjobviewer + TQStringList args; + args << "--show" << "-d" << text(ID).remove('&'); + kapp->tdeinitExec("kjobviewer", args); + } + break; + } +} + +void PrintMenu::reload() +{ + initialize(); +} + +#include "print_mnu.moc" diff --git a/kicker/menuext/tdeprint/print_mnu.h b/kicker/menuext/tdeprint/print_mnu.h new file mode 100644 index 000000000..47c9e609e --- /dev/null +++ b/kicker/menuext/tdeprint/print_mnu.h @@ -0,0 +1,46 @@ +/***************************************************************** + +Copyright (c) 1996-2001 the kicker authors. See file AUTHORS. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +******************************************************************/ + +#ifndef _print_mnu_h_ +#define _print_mnu_h_ + +#include +#include + +class PrintMenu : public KPanelMenu, public KPReloadObject +{ + Q_OBJECT + +public: + PrintMenu(TQWidget *parent, const char *name, const TQStringList & /*args*/); + ~PrintMenu(); + +protected slots: + void slotExec(int id); + void initialize(); + +protected: + void reload(); +}; + +#endif diff --git a/kicker/menuext/tdeprint/printmenu.desktop b/kicker/menuext/tdeprint/printmenu.desktop new file mode 100644 index 000000000..447d62c8f --- /dev/null +++ b/kicker/menuext/tdeprint/printmenu.desktop @@ -0,0 +1,144 @@ +[Desktop Entry] +Name=Print System +Name[af]=Drukker Stelsel +Name[ar]=نظام الطباعة +Name[az]=Çap Sistemi +Name[be]=Сістэма друку +Name[bg]=Система за печат +Name[bn]=মুদ্রণ ব্যবস্থা +Name[br]=Reizhiad moulañ +Name[bs]=Sistem štampe +Name[ca]=Sistema d'impressió +Name[cs]=Tiskový systém +Name[csb]=Systema drëkù +Name[cy]=Cysawd Argraffu +Name[da]=Udskriftssystem +Name[de]=Drucksystem +Name[el]=Σύστημα εκτύπωσης +Name[eo]=Printosistemo +Name[es]=Sistema de impresión +Name[et]=Trükkimissüsteem +Name[eu]=Inprimaketa sistema +Name[fa]=سیستم چاپ +Name[fi]=Tulostusjärjestelmä +Name[fr]=Système d'impression +Name[fy]=Printsysteem +Name[ga]=Córas Priontála +Name[gl]=Sistema de Impresión +Name[he]=מערכת הדפסה +Name[hi]=छापा तंत्र +Name[hr]=Sustav za ispisivanje +Name[hu]=Nyomtatási rendszer +Name[is]=Prentkerfi +Name[it]=Sistema di stampa +Name[ja]=印刷システム +Name[ka]=ბეჭდვის სისტემა +Name[kk]=Басып шығару +Name[km]=ប្រព័ន្ធ​បោះពុម្ព +Name[ko]=모던 시스템 +Name[ku]=Pergala Çapkirinê +Name[lo]=ລະບົບການພິມ +Name[lt]=Spausdinimo sistema +Name[lv]=Drukas Sistēma +Name[mk]=Печатарски систем +Name[mn]=Хэвлэх систем +Name[ms]=Cetak Sistem +Name[mt]=Sistema tal-ipprintjar +Name[nb]=Utskriftsystem +Name[nds]=Drucksysteem +Name[ne]=मुद्रण प्रणाली +Name[nl]=Afdruksysteem +Name[nn]=Utskriftssystem +Name[nso]=System ya Kgatiso +Name[pa]=ਪਰਿੰਟ ਸਿਸਟਮ +Name[pl]=System drukowania +Name[pt]=Sistema de Impressão +Name[pt_BR]=Sistema de Impressão +Name[ro]=Sistem de tipărire +Name[ru]=Система печати +Name[rw]=Sisitemu Gucapa +Name[se]=Čálihanvuogádat +Name[sk]=Tlačový systém +Name[sl]=Tiskalniški sistem +Name[sr]=Систем за штампу +Name[sr@Latn]=Sistem za štampu +Name[sv]=Skrivarsystem +Name[ta]=அச்சு அமைப்பு +Name[te]=ప్రచురణ వ్యవస్థ +Name[tg]=Системаи Чоп +Name[th]=ระบบการพิมพ์ +Name[tr]=Yazıcı Sistemi +Name[tt]=Bastıru Sisteme +Name[uk]=Система друку +Name[uz]=Bosib chiqarish tizimi +Name[uz@cyrillic]=Босиб чиқариш тизими +Name[ven]=Maitele au phirintha +Name[vi]=Hệ thống In ấn +Name[wa]=Sistinme d' imprimaedje +Name[xh]=Indlela Yoshicilelo +Name[zh_CN]=打印系统 +Name[zh_TW]=列印系統 +Name[zu]=Isistimu yokushicilela +Comment=Menu for the print system +Comment[af]=Kieslys vir die drukker stelsel +Comment[ar]=قائمة لنظام الطباعة +Comment[be]=Меню для сістэмы друку +Comment[bg]=Меню на системата за печат +Comment[bn]=মুদ্রণ ব্যবস্থার জন্য মেনু +Comment[bs]=Meni za sistem štampe +Comment[ca]=Menú per al sistema d'impressió +Comment[cs]=Nabídka tiskového systému +Comment[csb]=Menu systemë drëkù +Comment[da]=Menu for udskriftssystemet +Comment[de]=Einfacher Zugriff auf das Drucksystem +Comment[el]=Μενού για το σύστημα εκτύπωσης +Comment[eo]=Menuo por printosistemo +Comment[es]=Menú para el sistema de impresión +Comment[et]=Trükkimissüsteemi menüü +Comment[eu]=Inprimaketa sistemarako menua +Comment[fa]=گزینگان برای سیستم چاپ +Comment[fi]=Tulostusjärjestelmävalikko +Comment[fr]=Menu du système d'impression +Comment[fy]=Menu foar it printsysteem +Comment[gl]=Menu para o sistema de impresión +Comment[he]=תפריט למערכת ההדפסה +Comment[hr]=Izbornik sustava ispisivanja +Comment[hu]=Menü a nyomtatási rendszer eléréséhez +Comment[is]=Fljótleg leið að prentkerfinu +Comment[it]=Menu del sistema di stampa +Comment[ja]=印刷システム用メニュー +Comment[ka]=ბეჭდვის სისტემის მენიუ +Comment[kk]=Басып шығару жүйесінің мәзірі +Comment[km]=ម៉ឺនុយ​សម្រាប់​ប្រព័ន្ធ​បោះពុម្ព +Comment[lt]=Spausdinimo sistemos meniu +Comment[mk]=Мени за системот за печатење +Comment[nb]=Meny for utskriftssystemet +Comment[nds]=Menü för dat Drucksysteem +Comment[ne]=मुद्रण प्रणालीका लागि मेनु +Comment[nl]=Menu voor het afdruksysteem +Comment[nn]=Meny for utskriftssystemet +Comment[pa]=ਪਰਿੰਟ ਸਿਸਟਮ ਲਈ ਮੇਨੂ +Comment[pl]=Menu systemu drukowania +Comment[pt]=Um menu para o sistema de impressão +Comment[pt_BR]=Menu para o sistema de impressão +Comment[ro]=Meniu pentru sistemul de tipărire +Comment[ru]=Быстрый доступ к системе печати +Comment[se]=Čálihanvuogádaga fállu +Comment[sk]=Menu pre tlačový systém +Comment[sl]=Meni za tiskalniški sistem +Comment[sr]=Мени за систем штампања +Comment[sr@Latn]=Meni za sistem štampanja +Comment[sv]=Meny för skrivarsystemet +Comment[te]=ప్రచురణ వ్యవస్థ కొరకు పట్టి +Comment[th]=เมนูสำหรับระบบการพิมพ์ +Comment[tr]=Yazıcı sistemi menüsü +Comment[uk]=Меню для системи друку +Comment[uz]=Bosib chiqarish tizimining menyusi +Comment[uz@cyrillic]=Босиб чиқариш тизимининг менюси +Comment[vi]=Thực đơn cho hệ thống in ấn +Comment[wa]=Dresseŷe pol sistinme d' imprimaedje +Comment[zh_CN]=打印系统菜单 +Comment[zh_TW]=用於列印系統的選單 +Icon=fileprint + +X-KDE-Library=kickermenu_tdeprint diff --git a/tdeprint/CMakeLists.txt b/tdeprint/CMakeLists.txt new file mode 100644 index 000000000..1065c69af --- /dev/null +++ b/tdeprint/CMakeLists.txt @@ -0,0 +1,17 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_subdirectory( printmgr ) +add_subdirectory( kjobviewer ) +add_subdirectory( kprinter ) +add_subdirectory( tdeprintfax ) +add_subdirectory( slave ) +add_subdirectory( tdeprint_part ) diff --git a/tdeprint/Makefile.am b/tdeprint/Makefile.am new file mode 100644 index 000000000..1bbc21ff7 --- /dev/null +++ b/tdeprint/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = printmgr kjobviewer kprinter tdeprintfax slave tdeprint_part diff --git a/tdeprint/configure.in.in b/tdeprint/configure.in.in new file mode 100644 index 000000000..255d82a9b --- /dev/null +++ b/tdeprint/configure.in.in @@ -0,0 +1 @@ +dnl nothing special diff --git a/tdeprint/descriptions/Makefile.am b/tdeprint/descriptions/Makefile.am new file mode 100644 index 000000000..66b8205e6 --- /dev/null +++ b/tdeprint/descriptions/Makefile.am @@ -0,0 +1,24 @@ +KDE_OPTIONS = qtonly +# Note: sortthem does not sort! (It is just a sort of uniq(1) + +INCLUDES = $(all_includes) + +EXTRA_PROGRAMS = sortthem + +sortthem_SOURCES = sortthem.cpp +sortthem_LDFLAGS = $(all_libraries) $(LIB_QT) + +printers.cpp: sortthem + : > printers.cpp + for i in `find /usr/share/cups/model -type f ! -name '*.gz'`; do perl $(srcdir)/readppd < $$i >> printers.cpp; done + for i in `find /usr/share/cups/model -type f -name '*.gz'`; do \ + gzip -cd $$i | perl $(srcdir)/readppd >> printers.cpp; done + iconv -flatin1 -tutf-8 printers.cpp | grep -v '"[-0-9][0-9]*")' > printers.new + mv printers.new printers.cpp + ./sortthem < printers.cpp | perl -n -e "print \"// xgettext: no-c-format\n\".\$$_;" > printers.new && mv printers.new $(srcdir)/printers.cpp + +messages: + $(XGETTEXT) printers.cpp -o $(podir)/ppdtranslations.pot + +.PHONY: printers.cpp + diff --git a/tdeprint/descriptions/printers.cpp b/tdeprint/descriptions/printers.cpp new file mode 100644 index 000000000..274c5084b --- /dev/null +++ b/tdeprint/descriptions/printers.cpp @@ -0,0 +1,7084 @@ +// xgettext: no-c-format +i18n("Executive"); +// xgettext: no-c-format +i18n("Envelope B5"); +// xgettext: no-c-format +i18n("Envelope #10"); +// xgettext: no-c-format +i18n("Envelope DL"); +// xgettext: no-c-format +i18n("PageRegion"); +// xgettext: no-c-format +i18n("Media Source"); +// xgettext: no-c-format +i18n("Default"); +// xgettext: no-c-format +i18n("Manual Feed"); +// xgettext: no-c-format +i18n("Output Resolution"); +// xgettext: no-c-format +i18n("150 DPI"); +// xgettext: no-c-format +i18n("300 DPI"); +// xgettext: no-c-format +i18n("600 DPI"); +// xgettext: no-c-format +i18n("1200 DPI"); +// xgettext: no-c-format +i18n("2400 DPI"); +// xgettext: no-c-format +i18n("Double-Sided Printing"); +// xgettext: no-c-format +i18n("Off"); +// xgettext: no-c-format +i18n("Long Edge (Standard)"); +// xgettext: no-c-format +i18n("Short Edge (Flip)"); +// xgettext: no-c-format +i18n("US Letter"); +// xgettext: no-c-format +i18n("US Legal"); +// xgettext: no-c-format +i18n("US Executive"); +// xgettext: no-c-format +i18n("US Tabloid"); +// xgettext: no-c-format +i18n("A3"); +// xgettext: no-c-format +i18n("Media Type"); +// xgettext: no-c-format +i18n("Plain Paper"); +// xgettext: no-c-format +i18n("Bond Paper"); +// xgettext: no-c-format +i18n("Special Paper"); +// xgettext: no-c-format +i18n("Transparency"); +// xgettext: no-c-format +i18n("Glossy Paper"); +// xgettext: no-c-format +i18n("Tray"); +// xgettext: no-c-format +i18n("Envelope Feed"); +// xgettext: no-c-format +i18n("Output Mode"); +// xgettext: no-c-format +i18n("CMYK Color"); +// xgettext: no-c-format +i18n("CMY Color"); +// xgettext: no-c-format +i18n("Grayscale"); +// xgettext: no-c-format +i18n("600x300 DPI"); +// xgettext: no-c-format +i18n("CRET Color"); +// xgettext: no-c-format +i18n("Duplexer"); +// xgettext: no-c-format +i18n("Address - 1 1/8 x 3 1/2\""); +// xgettext: no-c-format +i18n("Large Address - 1 4/10 x 3 1/2\""); +// xgettext: no-c-format +i18n("Return Address - 3/4 x 2\""); +// xgettext: no-c-format +i18n("Shipping Address - 2 5/16 x 4\""); +// xgettext: no-c-format +i18n("Internet Postage 2-Part - 2 1/4 x 7 1/2\""); +// xgettext: no-c-format +i18n("Internet Postage 3-Part - 2 1/4 x 7\""); +// xgettext: no-c-format +i18n("File Folder - 9/16 x 3 7/16\""); +// xgettext: no-c-format +i18n("Hanging Folder - 9/16 x 2\""); +// xgettext: no-c-format +i18n("3.5\" Disk - 2 1/8 x 2 3/4\""); +// xgettext: no-c-format +i18n("136 DPI"); +// xgettext: no-c-format +i18n("203 DPI"); +// xgettext: no-c-format +i18n("Output Darkness"); +// xgettext: no-c-format +i18n("Normal"); +// xgettext: no-c-format +i18n("FanFoldUS"); +// xgettext: no-c-format +i18n("60 DPI"); +// xgettext: no-c-format +i18n("120x60 DPI"); +// xgettext: no-c-format +i18n("180 DPI"); +// xgettext: no-c-format +i18n("360x180 DPI"); +// xgettext: no-c-format +i18n("360 DPI"); +// xgettext: no-c-format +i18n("60x72 DPI"); +// xgettext: no-c-format +i18n("120x72 DPI"); +// xgettext: no-c-format +i18n("240x72 DPI"); +// xgettext: no-c-format +i18n("Tray 4"); +// xgettext: no-c-format +i18n("720 DPI"); +// xgettext: no-c-format +i18n("Page Size and Printing Quality"); +// xgettext: no-c-format +i18n("A4, 600x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 600x600 DPI"); +// xgettext: no-c-format +i18n("A4, 1200x600 DPI"); +// xgettext: no-c-format +i18n("B5, 600x600 DPI"); +// xgettext: no-c-format +i18n("B5, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 600x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 1200x600 DPI"); +// xgettext: no-c-format +i18n("High Grade Paper"); +// xgettext: no-c-format +i18n("Back Print Media"); +// xgettext: no-c-format +i18n("Iron-On Transfer Sheet"); +// xgettext: no-c-format +i18n("Hot OHP Media"); +// xgettext: no-c-format +i18n("Post Card"); +// xgettext: no-c-format +i18n("Thick Paper"); +// xgettext: no-c-format +i18n("Printing Mode"); +// xgettext: no-c-format +i18n("BlackOnly"); +// xgettext: no-c-format +i18n("Colour"); +// xgettext: no-c-format +i18n("HalfTone"); +// xgettext: no-c-format +i18n("NoHalfTone"); +// xgettext: no-c-format +i18n("Dithering"); +// xgettext: no-c-format +i18n("FloydSteinberg"); +// xgettext: no-c-format +i18n("NoFloydSteinberg"); +// xgettext: no-c-format +i18n("Banding"); +// xgettext: no-c-format +i18n("NoBanding"); +// xgettext: no-c-format +i18n("Colour Mode"); +// xgettext: no-c-format +i18n("CMY"); +// xgettext: no-c-format +i18n("Colour Correction Mode"); +// xgettext: no-c-format +i18n("FullBlack"); +// xgettext: no-c-format +i18n("Colour correction"); +// xgettext: no-c-format +i18n("NoColourCorrection"); +// xgettext: no-c-format +i18n("ColourCorrection"); +// xgettext: no-c-format +i18n("How often every dot is printed"); +// xgettext: no-c-format +i18n("PrintTwice"); +// xgettext: no-c-format +i18n("PrintOnce"); +// xgettext: no-c-format +i18n("Black Printing Mode"); +// xgettext: no-c-format +i18n("SolidBlack"); +// xgettext: no-c-format +i18n("MixedBlack"); +// xgettext: no-c-format +i18n("Square Dithering"); +// xgettext: no-c-format +i18n("SquareDithering"); +// xgettext: no-c-format +i18n("NoSquareDithering"); +// xgettext: no-c-format +i18n("Do Curl Correction"); +// xgettext: no-c-format +i18n("CurlCorrectionAlways"); +// xgettext: no-c-format +i18n("CurlCorrectionAfterFinal"); +// xgettext: no-c-format +i18n("Curl Correction on current pass"); +// xgettext: no-c-format +i18n("NoCurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("CurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("Colour Intensity"); +// xgettext: no-c-format +i18n("Line Feed Adjustment"); +// xgettext: no-c-format +i18n("Gamma"); +// xgettext: no-c-format +i18n("0.00"); +// xgettext: no-c-format +i18n("0.05"); +// xgettext: no-c-format +i18n("0.10"); +// xgettext: no-c-format +i18n("0.15"); +// xgettext: no-c-format +i18n("0.20"); +// xgettext: no-c-format +i18n("0.25"); +// xgettext: no-c-format +i18n("0.30"); +// xgettext: no-c-format +i18n("0.35"); +// xgettext: no-c-format +i18n("0.40"); +// xgettext: no-c-format +i18n("0.45"); +// xgettext: no-c-format +i18n("0.50"); +// xgettext: no-c-format +i18n("0.55"); +// xgettext: no-c-format +i18n("0.60"); +// xgettext: no-c-format +i18n("0.65"); +// xgettext: no-c-format +i18n("0.70"); +// xgettext: no-c-format +i18n("0.75"); +// xgettext: no-c-format +i18n("0.80"); +// xgettext: no-c-format +i18n("0.85"); +// xgettext: no-c-format +i18n("0.90"); +// xgettext: no-c-format +i18n("0.95"); +// xgettext: no-c-format +i18n("1.00"); +// xgettext: no-c-format +i18n("1.05"); +// xgettext: no-c-format +i18n("1.10"); +// xgettext: no-c-format +i18n("1.15"); +// xgettext: no-c-format +i18n("1.20"); +// xgettext: no-c-format +i18n("1.25"); +// xgettext: no-c-format +i18n("1.30"); +// xgettext: no-c-format +i18n("1.35"); +// xgettext: no-c-format +i18n("1.40"); +// xgettext: no-c-format +i18n("1.45"); +// xgettext: no-c-format +i18n("1.50"); +// xgettext: no-c-format +i18n("1.55"); +// xgettext: no-c-format +i18n("1.60"); +// xgettext: no-c-format +i18n("1.65"); +// xgettext: no-c-format +i18n("1.70"); +// xgettext: no-c-format +i18n("1.75"); +// xgettext: no-c-format +i18n("1.80"); +// xgettext: no-c-format +i18n("1.85"); +// xgettext: no-c-format +i18n("1.90"); +// xgettext: no-c-format +i18n("1.95"); +// xgettext: no-c-format +i18n("2.00"); +// xgettext: no-c-format +i18n("2.05"); +// xgettext: no-c-format +i18n("2.10"); +// xgettext: no-c-format +i18n("2.15"); +// xgettext: no-c-format +i18n("2.20"); +// xgettext: no-c-format +i18n("2.25"); +// xgettext: no-c-format +i18n("2.30"); +// xgettext: no-c-format +i18n("2.35"); +// xgettext: no-c-format +i18n("2.40"); +// xgettext: no-c-format +i18n("2.45"); +// xgettext: no-c-format +i18n("2.50"); +// xgettext: no-c-format +i18n("2.55"); +// xgettext: no-c-format +i18n("2.60"); +// xgettext: no-c-format +i18n("2.65"); +// xgettext: no-c-format +i18n("2.70"); +// xgettext: no-c-format +i18n("2.75"); +// xgettext: no-c-format +i18n("2.80"); +// xgettext: no-c-format +i18n("2.85"); +// xgettext: no-c-format +i18n("2.90"); +// xgettext: no-c-format +i18n("2.95"); +// xgettext: no-c-format +i18n("3.00"); +// xgettext: no-c-format +i18n("3.05"); +// xgettext: no-c-format +i18n("3.10"); +// xgettext: no-c-format +i18n("3.15"); +// xgettext: no-c-format +i18n("3.20"); +// xgettext: no-c-format +i18n("3.25"); +// xgettext: no-c-format +i18n("3.30"); +// xgettext: no-c-format +i18n("3.35"); +// xgettext: no-c-format +i18n("3.40"); +// xgettext: no-c-format +i18n("3.45"); +// xgettext: no-c-format +i18n("3.50"); +// xgettext: no-c-format +i18n("3.55"); +// xgettext: no-c-format +i18n("3.60"); +// xgettext: no-c-format +i18n("3.65"); +// xgettext: no-c-format +i18n("3.70"); +// xgettext: no-c-format +i18n("3.75"); +// xgettext: no-c-format +i18n("3.80"); +// xgettext: no-c-format +i18n("3.85"); +// xgettext: no-c-format +i18n("3.90"); +// xgettext: no-c-format +i18n("3.95"); +// xgettext: no-c-format +i18n("4.00"); +// xgettext: no-c-format +i18n("Horizontal (X-)Shift (in dots)"); +// xgettext: no-c-format +i18n("Vertical (Y-)Shift (in dots)"); +// xgettext: no-c-format +i18n("Next Job"); +// xgettext: no-c-format +i18n("NextJobOnSameSheet"); +// xgettext: no-c-format +i18n("NextJobOnNewSheet"); +// xgettext: no-c-format +i18n("Next Job is spot colour page"); +// xgettext: no-c-format +i18n("NextSpotColourPage"); +// xgettext: no-c-format +i18n("NextNotSpotColourPage"); +// xgettext: no-c-format +i18n("This Job is spot colour page"); +// xgettext: no-c-format +i18n("ThisSpotColourPage"); +// xgettext: no-c-format +i18n("ThisNotSpotColourPage"); +// xgettext: no-c-format +i18n("Page Size"); +// xgettext: no-c-format +i18n("B5"); +// xgettext: no-c-format +i18n("Manual"); +// xgettext: no-c-format +i18n("Automatic"); +// xgettext: no-c-format +i18n("Cardboard"); +// xgettext: no-c-format +i18n("Coated Film"); +// xgettext: no-c-format +i18n("Fine Paper"); +// xgettext: no-c-format +i18n("Iron Seal"); +// xgettext: no-c-format +i18n("OHP"); +// xgettext: no-c-format +i18n("OHP (MD 2000)"); +// xgettext: no-c-format +i18n("Rebeca Free"); +// xgettext: no-c-format +i18n("Resolution"); +// xgettext: no-c-format +i18n("1200x600 DPI"); +// xgettext: no-c-format +i18n("Color Mode"); +// xgettext: no-c-format +i18n("Colour Depth"); +// xgettext: no-c-format +i18n("Floyd Steinb. High Qual. (32 bpp)"); +// xgettext: no-c-format +i18n("Floyd Steinberg Simple (8 bpp)"); +// xgettext: no-c-format +i18n("Monochrome (1 bpp)"); +// xgettext: no-c-format +i18n("Simple Colour (4 bpp)"); +// xgettext: no-c-format +i18n("On"); +// xgettext: no-c-format +i18n("Duplex"); +// xgettext: no-c-format +i18n("DoubleSided"); +// xgettext: no-c-format +i18n("SingleSided"); +// xgettext: no-c-format +i18n("Black color saving"); +// xgettext: no-c-format +i18n("EcoBlack"); +// xgettext: no-c-format +i18n("NormalBlack"); +// xgettext: no-c-format +i18n("Black Level"); +// xgettext: no-c-format +i18n("Cyan Level"); +// xgettext: no-c-format +i18n("Magenta Level"); +// xgettext: no-c-format +i18n("Yellow Level"); +// xgettext: no-c-format +i18n("B4 (JIS)"); +// xgettext: no-c-format +i18n("B6 (JIS)"); +// xgettext: no-c-format +i18n("Envelope You 4"); +// xgettext: no-c-format +i18n("Hagaki"); +// xgettext: no-c-format +i18n("Ledger"); +// xgettext: no-c-format +i18n("Oufuku"); +// xgettext: no-c-format +i18n("600x600 DPI"); +// xgettext: no-c-format +i18n("300x300 DPI"); +// xgettext: no-c-format +i18n("3x5"); +// xgettext: no-c-format +i18n("4x6"); +// xgettext: no-c-format +i18n("5x7"); +// xgettext: no-c-format +i18n("5x8"); +// xgettext: no-c-format +i18n("6x8"); +// xgettext: no-c-format +i18n("8x10"); +// xgettext: no-c-format +i18n("8x12"); +// xgettext: no-c-format +i18n("11x14"); +// xgettext: no-c-format +i18n("13x19"); +// xgettext: no-c-format +i18n("16x20"); +// xgettext: no-c-format +i18n("16x24"); +// xgettext: no-c-format +i18n("60x60 dpi"); +// xgettext: no-c-format +i18n("60x72 dpi"); +// xgettext: no-c-format +i18n("60x180 dpi"); +// xgettext: no-c-format +i18n("60x216 dpi"); +// xgettext: no-c-format +i18n("120x60 dpi"); +// xgettext: no-c-format +i18n("120x72 dpi"); +// xgettext: no-c-format +i18n("120x180 dpi"); +// xgettext: no-c-format +i18n("120x216 dpi"); +// xgettext: no-c-format +i18n("180x60 dpi"); +// xgettext: no-c-format +i18n("180x72 dpi"); +// xgettext: no-c-format +i18n("180x180 dpi"); +// xgettext: no-c-format +i18n("180x216 dpi"); +// xgettext: no-c-format +i18n("240x60 dpi"); +// xgettext: no-c-format +i18n("240x72 dpi"); +// xgettext: no-c-format +i18n("240x180 dpi"); +// xgettext: no-c-format +i18n("240x216 dpi"); +// xgettext: no-c-format +i18n("360x60 dpi"); +// xgettext: no-c-format +i18n("360x72 dpi"); +// xgettext: no-c-format +i18n("360x180 dpi"); +// xgettext: no-c-format +i18n("360x216 dpi"); +// xgettext: no-c-format +i18n("11x17"); +// xgettext: no-c-format +i18n("Photo Paper"); +// xgettext: no-c-format +i18n("HP Premium Paper"); +// xgettext: no-c-format +i18n("Transparency Paper"); +// xgettext: no-c-format +i18n("Print Quality"); +// xgettext: no-c-format +i18n("Draft Quality"); +// xgettext: no-c-format +i18n("Normal Quality"); +// xgettext: no-c-format +i18n("Presentation Quality"); +// xgettext: no-c-format +i18n("Monochrome"); +// xgettext: no-c-format +i18n("Dithering Pixels Per Inch"); +// xgettext: no-c-format +i18n("Generic DeskJet"); +// xgettext: no-c-format +i18n("Standard Tray"); +// xgettext: no-c-format +i18n("Banner Printing"); +// xgettext: no-c-format +i18n("Envelope Feeder"); +// xgettext: no-c-format +i18n("Manual Feeder"); +// xgettext: no-c-format +i18n("Quick-Dry Glossy"); +// xgettext: no-c-format +i18n("Quick-Dry Transparency"); +// xgettext: no-c-format +i18n("Quality"); +// xgettext: no-c-format +i18n("Default Setting"); +// xgettext: no-c-format +i18n("Draft"); +// xgettext: no-c-format +i18n("Presentation"); +// xgettext: no-c-format +i18n("Ink Drying Time (sec)"); +// xgettext: no-c-format +i18n("Memory Limit (Bytes)"); +// xgettext: no-c-format +i18n("Black Levels"); +// xgettext: no-c-format +i18n("2 Levels"); +// xgettext: no-c-format +i18n("3 Levels"); +// xgettext: no-c-format +i18n("4 Levels"); +// xgettext: no-c-format +i18n("No Black"); +// xgettext: no-c-format +i18n("CMY Levels"); +// xgettext: no-c-format +i18n("No CMY"); +// xgettext: no-c-format +i18n("Printout Mode"); +// xgettext: no-c-format +i18n("Draft (Color cartridge)"); +// xgettext: no-c-format +i18n("Draft Grayscale (Black + color cartridge)"); +// xgettext: no-c-format +i18n("Normal (Color cartridge)"); +// xgettext: no-c-format +i18n("Normal Grayscale (Black + color cartridge)"); +// xgettext: no-c-format +i18n("High Quality Grayscale (Black + color cartridge)"); +// xgettext: no-c-format +i18n("Photo (Photo + color cartridge, photo paper)"); +// xgettext: no-c-format +i18n("Photo/4x6 inch index card"); +// xgettext: no-c-format +i18n("Photo with tear-off tab"); +// xgettext: no-c-format +i18n("3x5 inch index card"); +// xgettext: no-c-format +i18n("5x8 inch index card"); +// xgettext: no-c-format +i18n("A6"); +// xgettext: no-c-format +i18n("A6 with tear-off tab"); +// xgettext: no-c-format +i18n("Envelope C6"); +// xgettext: no-c-format +i18n("American Foolscap"); +// xgettext: no-c-format +i18n("Oufuku-Hagaki"); +// xgettext: no-c-format +i18n("16K"); +// xgettext: no-c-format +i18n("Executive (JIS)"); +// xgettext: no-c-format +i18n("Resolution, Quality, Ink Type, Media Type"); +// xgettext: no-c-format +i18n("Controlled by 'Printout Mode'"); +// xgettext: no-c-format +i18n("300 dpi, Color, Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Draft, Color, Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Draft, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Draft, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Photo, Photo + Color Cartr., Premium Paper"); +// xgettext: no-c-format +i18n("600x300 dpi, Best, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("Normal Color"); +// xgettext: no-c-format +i18n("Best Quality Color"); +// xgettext: no-c-format +i18n("Black and White"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color (Low Memory)"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Gray"); +// xgettext: no-c-format +i18n("Black correction (Cyan reduction)"); +// xgettext: no-c-format +i18n("Ink Reduction"); +// xgettext: no-c-format +i18n("25 %"); +// xgettext: no-c-format +i18n("50 %"); +// xgettext: no-c-format +i18n("No"); +// xgettext: no-c-format +i18n("Draft (Economy)"); +// xgettext: no-c-format +i18n("Draft Grayscale (Economy)"); +// xgettext: no-c-format +i18n("Normal Grayscale"); +// xgettext: no-c-format +i18n("High Quality"); +// xgettext: no-c-format +i18n("High Quality Grayscale"); +// xgettext: no-c-format +i18n("Photo"); +// xgettext: no-c-format +i18n("Photo Grayscale"); +// xgettext: no-c-format +i18n("C5"); +// xgettext: no-c-format +i18n("Commercial 10"); +// xgettext: no-c-format +i18n("DL"); +// xgettext: no-c-format +i18n("B5 ISO"); +// xgettext: no-c-format +i18n("B6 ISO"); +// xgettext: no-c-format +i18n("B7 ISO"); +// xgettext: no-c-format +i18n("B8 ISO"); +// xgettext: no-c-format +i18n("B9 ISO"); +// xgettext: no-c-format +i18n("B10 ISO"); +// xgettext: no-c-format +i18n("Monarch Envelope"); +// xgettext: no-c-format +i18n("Postcard"); +// xgettext: no-c-format +i18n("C7-6"); +// xgettext: no-c-format +i18n("Japanese long envelope #4"); +// xgettext: no-c-format +i18n("Hagaki Card"); +// xgettext: no-c-format +i18n("Small paperback"); +// xgettext: no-c-format +i18n("Penguin small paperback"); +// xgettext: no-c-format +i18n("A2 Invitation"); +// xgettext: no-c-format +i18n("Epson 4x6 Photo Paper"); +// xgettext: no-c-format +i18n("Japanese long envelope #3"); +// xgettext: no-c-format +i18n("B6-C4"); +// xgettext: no-c-format +i18n("Penguin large paperback"); +// xgettext: no-c-format +i18n("Crown Quarto"); +// xgettext: no-c-format +i18n("Large Crown Quarto"); +// xgettext: no-c-format +i18n("RA4"); +// xgettext: no-c-format +i18n("American foolscap"); +// xgettext: no-c-format +i18n("Bond"); +// xgettext: no-c-format +i18n("Glossy Photo"); +// xgettext: no-c-format +i18n("Transparencies"); +// xgettext: no-c-format +i18n("Ink Type"); +// xgettext: no-c-format +i18n("Color + Photo Cartridges"); +// xgettext: no-c-format +i18n("Four Color Standard"); +// xgettext: no-c-format +i18n("stpGamma"); +// xgettext: no-c-format +i18n("Density"); +// xgettext: no-c-format +i18n("0.12"); +// xgettext: no-c-format +i18n("0.14"); +// xgettext: no-c-format +i18n("0.16"); +// xgettext: no-c-format +i18n("0.18"); +// xgettext: no-c-format +i18n("0.22"); +// xgettext: no-c-format +i18n("0.24"); +// xgettext: no-c-format +i18n("0.26"); +// xgettext: no-c-format +i18n("0.28"); +// xgettext: no-c-format +i18n("0.32"); +// xgettext: no-c-format +i18n("0.34"); +// xgettext: no-c-format +i18n("0.36"); +// xgettext: no-c-format +i18n("0.38"); +// xgettext: no-c-format +i18n("0.42"); +// xgettext: no-c-format +i18n("0.44"); +// xgettext: no-c-format +i18n("0.46"); +// xgettext: no-c-format +i18n("0.48"); +// xgettext: no-c-format +i18n("0.52"); +// xgettext: no-c-format +i18n("0.54"); +// xgettext: no-c-format +i18n("0.56"); +// xgettext: no-c-format +i18n("0.58"); +// xgettext: no-c-format +i18n("0.62"); +// xgettext: no-c-format +i18n("0.64"); +// xgettext: no-c-format +i18n("0.66"); +// xgettext: no-c-format +i18n("0.68"); +// xgettext: no-c-format +i18n("0.72"); +// xgettext: no-c-format +i18n("0.74"); +// xgettext: no-c-format +i18n("0.76"); +// xgettext: no-c-format +i18n("0.78"); +// xgettext: no-c-format +i18n("0.82"); +// xgettext: no-c-format +i18n("0.84"); +// xgettext: no-c-format +i18n("0.86"); +// xgettext: no-c-format +i18n("0.88"); +// xgettext: no-c-format +i18n("0.92"); +// xgettext: no-c-format +i18n("0.94"); +// xgettext: no-c-format +i18n("0.96"); +// xgettext: no-c-format +i18n("0.98"); +// xgettext: no-c-format +i18n("1.02"); +// xgettext: no-c-format +i18n("1.04"); +// xgettext: no-c-format +i18n("1.06"); +// xgettext: no-c-format +i18n("1.08"); +// xgettext: no-c-format +i18n("1.12"); +// xgettext: no-c-format +i18n("1.14"); +// xgettext: no-c-format +i18n("1.16"); +// xgettext: no-c-format +i18n("1.18"); +// xgettext: no-c-format +i18n("1.22"); +// xgettext: no-c-format +i18n("1.24"); +// xgettext: no-c-format +i18n("1.26"); +// xgettext: no-c-format +i18n("1.28"); +// xgettext: no-c-format +i18n("1.32"); +// xgettext: no-c-format +i18n("1.34"); +// xgettext: no-c-format +i18n("1.36"); +// xgettext: no-c-format +i18n("1.38"); +// xgettext: no-c-format +i18n("1.42"); +// xgettext: no-c-format +i18n("1.44"); +// xgettext: no-c-format +i18n("1.46"); +// xgettext: no-c-format +i18n("1.48"); +// xgettext: no-c-format +i18n("1.52"); +// xgettext: no-c-format +i18n("1.54"); +// xgettext: no-c-format +i18n("1.56"); +// xgettext: no-c-format +i18n("1.58"); +// xgettext: no-c-format +i18n("1.62"); +// xgettext: no-c-format +i18n("1.64"); +// xgettext: no-c-format +i18n("1.66"); +// xgettext: no-c-format +i18n("1.68"); +// xgettext: no-c-format +i18n("1.72"); +// xgettext: no-c-format +i18n("1.74"); +// xgettext: no-c-format +i18n("1.76"); +// xgettext: no-c-format +i18n("1.78"); +// xgettext: no-c-format +i18n("1.82"); +// xgettext: no-c-format +i18n("1.84"); +// xgettext: no-c-format +i18n("1.86"); +// xgettext: no-c-format +i18n("1.88"); +// xgettext: no-c-format +i18n("1.92"); +// xgettext: no-c-format +i18n("1.94"); +// xgettext: no-c-format +i18n("1.96"); +// xgettext: no-c-format +i18n("1.98"); +// xgettext: no-c-format +i18n("stpBrightness"); +// xgettext: no-c-format +i18n("0.02"); +// xgettext: no-c-format +i18n("0.04"); +// xgettext: no-c-format +i18n("0.06"); +// xgettext: no-c-format +i18n("0.08"); +// xgettext: no-c-format +i18n("stpSaturation"); +// xgettext: no-c-format +i18n("0.0"); +// xgettext: no-c-format +i18n("0.1"); +// xgettext: no-c-format +i18n("0.2"); +// xgettext: no-c-format +i18n("0.3"); +// xgettext: no-c-format +i18n("0.4"); +// xgettext: no-c-format +i18n("0.5"); +// xgettext: no-c-format +i18n("0.6"); +// xgettext: no-c-format +i18n("0.7"); +// xgettext: no-c-format +i18n("0.8"); +// xgettext: no-c-format +i18n("0.9"); +// xgettext: no-c-format +i18n("1.0"); +// xgettext: no-c-format +i18n("1.1"); +// xgettext: no-c-format +i18n("1.2"); +// xgettext: no-c-format +i18n("1.3"); +// xgettext: no-c-format +i18n("1.4"); +// xgettext: no-c-format +i18n("1.5"); +// xgettext: no-c-format +i18n("1.6"); +// xgettext: no-c-format +i18n("1.7"); +// xgettext: no-c-format +i18n("1.8"); +// xgettext: no-c-format +i18n("1.9"); +// xgettext: no-c-format +i18n("2.0"); +// xgettext: no-c-format +i18n("2.1"); +// xgettext: no-c-format +i18n("2.2"); +// xgettext: no-c-format +i18n("2.3"); +// xgettext: no-c-format +i18n("2.4"); +// xgettext: no-c-format +i18n("2.5"); +// xgettext: no-c-format +i18n("2.6"); +// xgettext: no-c-format +i18n("2.7"); +// xgettext: no-c-format +i18n("2.8"); +// xgettext: no-c-format +i18n("2.9"); +// xgettext: no-c-format +i18n("3.0"); +// xgettext: no-c-format +i18n("3.1"); +// xgettext: no-c-format +i18n("3.2"); +// xgettext: no-c-format +i18n("3.3"); +// xgettext: no-c-format +i18n("3.4"); +// xgettext: no-c-format +i18n("3.5"); +// xgettext: no-c-format +i18n("3.6"); +// xgettext: no-c-format +i18n("3.7"); +// xgettext: no-c-format +i18n("3.8"); +// xgettext: no-c-format +i18n("3.9"); +// xgettext: no-c-format +i18n("4.0"); +// xgettext: no-c-format +i18n("4.1"); +// xgettext: no-c-format +i18n("4.2"); +// xgettext: no-c-format +i18n("4.3"); +// xgettext: no-c-format +i18n("4.4"); +// xgettext: no-c-format +i18n("4.5"); +// xgettext: no-c-format +i18n("4.6"); +// xgettext: no-c-format +i18n("4.7"); +// xgettext: no-c-format +i18n("4.8"); +// xgettext: no-c-format +i18n("4.9"); +// xgettext: no-c-format +i18n("5.0"); +// xgettext: no-c-format +i18n("5.1"); +// xgettext: no-c-format +i18n("5.2"); +// xgettext: no-c-format +i18n("5.3"); +// xgettext: no-c-format +i18n("5.4"); +// xgettext: no-c-format +i18n("5.5"); +// xgettext: no-c-format +i18n("5.6"); +// xgettext: no-c-format +i18n("5.7"); +// xgettext: no-c-format +i18n("5.8"); +// xgettext: no-c-format +i18n("5.9"); +// xgettext: no-c-format +i18n("6.0"); +// xgettext: no-c-format +i18n("6.1"); +// xgettext: no-c-format +i18n("6.2"); +// xgettext: no-c-format +i18n("6.3"); +// xgettext: no-c-format +i18n("6.4"); +// xgettext: no-c-format +i18n("6.5"); +// xgettext: no-c-format +i18n("6.6"); +// xgettext: no-c-format +i18n("6.7"); +// xgettext: no-c-format +i18n("6.8"); +// xgettext: no-c-format +i18n("6.9"); +// xgettext: no-c-format +i18n("7.0"); +// xgettext: no-c-format +i18n("7.1"); +// xgettext: no-c-format +i18n("7.2"); +// xgettext: no-c-format +i18n("7.3"); +// xgettext: no-c-format +i18n("7.4"); +// xgettext: no-c-format +i18n("7.5"); +// xgettext: no-c-format +i18n("7.6"); +// xgettext: no-c-format +i18n("7.7"); +// xgettext: no-c-format +i18n("7.8"); +// xgettext: no-c-format +i18n("7.9"); +// xgettext: no-c-format +i18n("8.0"); +// xgettext: no-c-format +i18n("8.1"); +// xgettext: no-c-format +i18n("8.2"); +// xgettext: no-c-format +i18n("8.3"); +// xgettext: no-c-format +i18n("8.4"); +// xgettext: no-c-format +i18n("8.5"); +// xgettext: no-c-format +i18n("8.6"); +// xgettext: no-c-format +i18n("8.7"); +// xgettext: no-c-format +i18n("8.8"); +// xgettext: no-c-format +i18n("8.9"); +// xgettext: no-c-format +i18n("9.0"); +// xgettext: no-c-format +i18n("Contrast Level"); +// xgettext: no-c-format +i18n("150 x 150 DPI"); +// xgettext: no-c-format +i18n("300 x 300 DPI"); +// xgettext: no-c-format +i18n("600 x 300 DPI"); +// xgettext: no-c-format +i18n("600 x 600 DPI"); +// xgettext: no-c-format +i18n("Output Type"); +// xgettext: no-c-format +i18n("Gray Scale"); +// xgettext: no-c-format +i18n("Continuous-tone photographs"); +// xgettext: no-c-format +i18n("Line art"); +// xgettext: no-c-format +i18n("Primarily solid colors or smooth gradients"); +// xgettext: no-c-format +i18n("Dither Algorithm"); +// xgettext: no-c-format +i18n("EvenTone"); +// xgettext: no-c-format +i18n("Fast"); +// xgettext: no-c-format +i18n("Raw CMYK"); +// xgettext: no-c-format +i18n("Not capable"); +// xgettext: no-c-format +i18n("Printer Default"); +// xgettext: no-c-format +i18n("GhostScript pre-filtering"); +// xgettext: no-c-format +i18n("Embed GhostScript fonts only"); +// xgettext: no-c-format +i18n("Convert to PS level 1"); +// xgettext: no-c-format +i18n("Convert to PS level 2"); +// xgettext: no-c-format +i18n("No pre-filtering"); +// xgettext: no-c-format +i18n("160x72 dpi"); +// xgettext: no-c-format +i18n("160x144 dpi"); +// xgettext: no-c-format +i18n("320x216 dpi"); +// xgettext: no-c-format +i18n("Input Slot"); +// xgettext: no-c-format +i18n("Standard"); +// xgettext: no-c-format +i18n("Printer default"); +// xgettext: no-c-format +i18n("PageSize"); +// xgettext: no-c-format +i18n("Tabloid"); +// xgettext: no-c-format +i18n("SRA4"); +// xgettext: no-c-format +i18n("C4"); +// xgettext: no-c-format +i18n("ArchA"); +// xgettext: no-c-format +i18n("European foolscap"); +// xgettext: no-c-format +i18n("Large Crown Octavo"); +// xgettext: no-c-format +i18n("Japanese Kaku envelope #4"); +// xgettext: no-c-format +i18n("ColorModel"); +// xgettext: no-c-format +i18n("Black & White"); +// xgettext: no-c-format +i18n("Back Print Film"); +// xgettext: no-c-format +i18n("Fabric Sheets"); +// xgettext: no-c-format +i18n("Envelope"); +// xgettext: no-c-format +i18n("High Resolution Paper"); +// xgettext: no-c-format +i18n("T-Shirt Transfers"); +// xgettext: no-c-format +i18n("High Gloss Film"); +// xgettext: no-c-format +i18n("Glossy Photo Paper"); +// xgettext: no-c-format +i18n("Glossy Photo Cards"); +// xgettext: no-c-format +i18n("Photo Paper Pro"); +// xgettext: no-c-format +i18n("Other"); +// xgettext: no-c-format +i18n("Auto Sheet Feeder"); +// xgettext: no-c-format +i18n("Manual with Pause"); +// xgettext: no-c-format +i18n("Manual without Pause"); +// xgettext: no-c-format +i18n("90x90 DPI"); +// xgettext: no-c-format +i18n("180x180 DPI"); +// xgettext: no-c-format +i18n("360x360 DPI"); +// xgettext: no-c-format +i18n("360x360 DPI DMT"); +// xgettext: no-c-format +i18n("720x360 DPI"); +// xgettext: no-c-format +i18n("Line Art"); +// xgettext: no-c-format +i18n("Solid Colors"); +// xgettext: no-c-format +i18n("Photograph"); +// xgettext: no-c-format +i18n("Black"); +// xgettext: no-c-format +i18n("Brightness"); +// xgettext: no-c-format +i18n("0.000"); +// xgettext: no-c-format +i18n("0.050"); +// xgettext: no-c-format +i18n("0.100"); +// xgettext: no-c-format +i18n("0.150"); +// xgettext: no-c-format +i18n("0.200"); +// xgettext: no-c-format +i18n("0.250"); +// xgettext: no-c-format +i18n("0.300"); +// xgettext: no-c-format +i18n("0.350"); +// xgettext: no-c-format +i18n("0.400"); +// xgettext: no-c-format +i18n("0.450"); +// xgettext: no-c-format +i18n("0.500"); +// xgettext: no-c-format +i18n("0.550"); +// xgettext: no-c-format +i18n("0.600"); +// xgettext: no-c-format +i18n("0.650"); +// xgettext: no-c-format +i18n("0.700"); +// xgettext: no-c-format +i18n("0.750"); +// xgettext: no-c-format +i18n("0.800"); +// xgettext: no-c-format +i18n("0.850"); +// xgettext: no-c-format +i18n("0.900"); +// xgettext: no-c-format +i18n("0.950"); +// xgettext: no-c-format +i18n("1.000"); +// xgettext: no-c-format +i18n("1.050"); +// xgettext: no-c-format +i18n("1.100"); +// xgettext: no-c-format +i18n("1.150"); +// xgettext: no-c-format +i18n("1.200"); +// xgettext: no-c-format +i18n("1.250"); +// xgettext: no-c-format +i18n("1.300"); +// xgettext: no-c-format +i18n("1.350"); +// xgettext: no-c-format +i18n("1.400"); +// xgettext: no-c-format +i18n("1.450"); +// xgettext: no-c-format +i18n("1.500"); +// xgettext: no-c-format +i18n("1.550"); +// xgettext: no-c-format +i18n("1.600"); +// xgettext: no-c-format +i18n("1.650"); +// xgettext: no-c-format +i18n("1.700"); +// xgettext: no-c-format +i18n("1.750"); +// xgettext: no-c-format +i18n("1.800"); +// xgettext: no-c-format +i18n("1.850"); +// xgettext: no-c-format +i18n("1.900"); +// xgettext: no-c-format +i18n("1.950"); +// xgettext: no-c-format +i18n("2.000"); +// xgettext: no-c-format +i18n("Contrast"); +// xgettext: no-c-format +i18n("2.050"); +// xgettext: no-c-format +i18n("2.100"); +// xgettext: no-c-format +i18n("2.150"); +// xgettext: no-c-format +i18n("2.200"); +// xgettext: no-c-format +i18n("2.250"); +// xgettext: no-c-format +i18n("2.300"); +// xgettext: no-c-format +i18n("2.350"); +// xgettext: no-c-format +i18n("2.400"); +// xgettext: no-c-format +i18n("2.450"); +// xgettext: no-c-format +i18n("2.500"); +// xgettext: no-c-format +i18n("2.550"); +// xgettext: no-c-format +i18n("2.600"); +// xgettext: no-c-format +i18n("2.650"); +// xgettext: no-c-format +i18n("2.700"); +// xgettext: no-c-format +i18n("2.750"); +// xgettext: no-c-format +i18n("2.800"); +// xgettext: no-c-format +i18n("2.850"); +// xgettext: no-c-format +i18n("2.900"); +// xgettext: no-c-format +i18n("2.950"); +// xgettext: no-c-format +i18n("3.000"); +// xgettext: no-c-format +i18n("3.050"); +// xgettext: no-c-format +i18n("3.100"); +// xgettext: no-c-format +i18n("3.150"); +// xgettext: no-c-format +i18n("3.200"); +// xgettext: no-c-format +i18n("3.250"); +// xgettext: no-c-format +i18n("3.300"); +// xgettext: no-c-format +i18n("3.350"); +// xgettext: no-c-format +i18n("3.400"); +// xgettext: no-c-format +i18n("3.450"); +// xgettext: no-c-format +i18n("3.500"); +// xgettext: no-c-format +i18n("3.550"); +// xgettext: no-c-format +i18n("3.600"); +// xgettext: no-c-format +i18n("3.650"); +// xgettext: no-c-format +i18n("3.700"); +// xgettext: no-c-format +i18n("3.750"); +// xgettext: no-c-format +i18n("3.800"); +// xgettext: no-c-format +i18n("3.850"); +// xgettext: no-c-format +i18n("3.900"); +// xgettext: no-c-format +i18n("3.950"); +// xgettext: no-c-format +i18n("4.000"); +// xgettext: no-c-format +i18n("Cyan"); +// xgettext: no-c-format +i18n("Magenta"); +// xgettext: no-c-format +i18n("Yellow"); +// xgettext: no-c-format +i18n("Saturation"); +// xgettext: no-c-format +i18n("4.050"); +// xgettext: no-c-format +i18n("4.100"); +// xgettext: no-c-format +i18n("4.150"); +// xgettext: no-c-format +i18n("4.200"); +// xgettext: no-c-format +i18n("4.250"); +// xgettext: no-c-format +i18n("4.300"); +// xgettext: no-c-format +i18n("4.350"); +// xgettext: no-c-format +i18n("4.400"); +// xgettext: no-c-format +i18n("4.450"); +// xgettext: no-c-format +i18n("4.500"); +// xgettext: no-c-format +i18n("4.550"); +// xgettext: no-c-format +i18n("4.600"); +// xgettext: no-c-format +i18n("4.650"); +// xgettext: no-c-format +i18n("4.700"); +// xgettext: no-c-format +i18n("4.750"); +// xgettext: no-c-format +i18n("4.800"); +// xgettext: no-c-format +i18n("4.850"); +// xgettext: no-c-format +i18n("4.900"); +// xgettext: no-c-format +i18n("4.950"); +// xgettext: no-c-format +i18n("5.000"); +// xgettext: no-c-format +i18n("5.050"); +// xgettext: no-c-format +i18n("5.100"); +// xgettext: no-c-format +i18n("5.150"); +// xgettext: no-c-format +i18n("5.200"); +// xgettext: no-c-format +i18n("5.250"); +// xgettext: no-c-format +i18n("5.300"); +// xgettext: no-c-format +i18n("5.350"); +// xgettext: no-c-format +i18n("5.400"); +// xgettext: no-c-format +i18n("5.450"); +// xgettext: no-c-format +i18n("5.500"); +// xgettext: no-c-format +i18n("5.550"); +// xgettext: no-c-format +i18n("5.600"); +// xgettext: no-c-format +i18n("5.650"); +// xgettext: no-c-format +i18n("5.700"); +// xgettext: no-c-format +i18n("5.750"); +// xgettext: no-c-format +i18n("5.800"); +// xgettext: no-c-format +i18n("5.850"); +// xgettext: no-c-format +i18n("5.900"); +// xgettext: no-c-format +i18n("5.950"); +// xgettext: no-c-format +i18n("6.000"); +// xgettext: no-c-format +i18n("6.050"); +// xgettext: no-c-format +i18n("6.100"); +// xgettext: no-c-format +i18n("6.150"); +// xgettext: no-c-format +i18n("6.200"); +// xgettext: no-c-format +i18n("6.250"); +// xgettext: no-c-format +i18n("6.300"); +// xgettext: no-c-format +i18n("6.350"); +// xgettext: no-c-format +i18n("6.400"); +// xgettext: no-c-format +i18n("6.450"); +// xgettext: no-c-format +i18n("6.500"); +// xgettext: no-c-format +i18n("6.550"); +// xgettext: no-c-format +i18n("6.600"); +// xgettext: no-c-format +i18n("6.650"); +// xgettext: no-c-format +i18n("6.700"); +// xgettext: no-c-format +i18n("6.750"); +// xgettext: no-c-format +i18n("6.800"); +// xgettext: no-c-format +i18n("6.850"); +// xgettext: no-c-format +i18n("6.900"); +// xgettext: no-c-format +i18n("6.950"); +// xgettext: no-c-format +i18n("7.000"); +// xgettext: no-c-format +i18n("7.050"); +// xgettext: no-c-format +i18n("7.100"); +// xgettext: no-c-format +i18n("7.150"); +// xgettext: no-c-format +i18n("7.200"); +// xgettext: no-c-format +i18n("7.250"); +// xgettext: no-c-format +i18n("7.300"); +// xgettext: no-c-format +i18n("7.350"); +// xgettext: no-c-format +i18n("7.400"); +// xgettext: no-c-format +i18n("7.450"); +// xgettext: no-c-format +i18n("7.500"); +// xgettext: no-c-format +i18n("7.550"); +// xgettext: no-c-format +i18n("7.600"); +// xgettext: no-c-format +i18n("7.650"); +// xgettext: no-c-format +i18n("7.700"); +// xgettext: no-c-format +i18n("7.750"); +// xgettext: no-c-format +i18n("7.800"); +// xgettext: no-c-format +i18n("7.850"); +// xgettext: no-c-format +i18n("7.900"); +// xgettext: no-c-format +i18n("7.950"); +// xgettext: no-c-format +i18n("8.000"); +// xgettext: no-c-format +i18n("8.050"); +// xgettext: no-c-format +i18n("8.100"); +// xgettext: no-c-format +i18n("8.150"); +// xgettext: no-c-format +i18n("8.200"); +// xgettext: no-c-format +i18n("8.250"); +// xgettext: no-c-format +i18n("8.300"); +// xgettext: no-c-format +i18n("8.350"); +// xgettext: no-c-format +i18n("8.400"); +// xgettext: no-c-format +i18n("8.450"); +// xgettext: no-c-format +i18n("8.500"); +// xgettext: no-c-format +i18n("8.550"); +// xgettext: no-c-format +i18n("8.600"); +// xgettext: no-c-format +i18n("8.650"); +// xgettext: no-c-format +i18n("8.700"); +// xgettext: no-c-format +i18n("8.750"); +// xgettext: no-c-format +i18n("8.800"); +// xgettext: no-c-format +i18n("8.850"); +// xgettext: no-c-format +i18n("8.900"); +// xgettext: no-c-format +i18n("8.950"); +// xgettext: no-c-format +i18n("9.000"); +// xgettext: no-c-format +i18n("720x720 DPI"); +// xgettext: no-c-format +i18n("1440x720 DPI"); +// xgettext: no-c-format +i18n("Photo CcMmY Color"); +// xgettext: no-c-format +i18n("Photo CcMmYK Color"); +// xgettext: no-c-format +i18n("1200x1200 DPI"); +// xgettext: no-c-format +i18n("12x18"); +// xgettext: no-c-format +i18n("Super B 13x19"); +// xgettext: no-c-format +i18n("20x24"); +// xgettext: no-c-format +i18n("20x30"); +// xgettext: no-c-format +i18n("22x30"); +// xgettext: no-c-format +i18n("24x30"); +// xgettext: no-c-format +i18n("24x36"); +// xgettext: no-c-format +i18n("30x40"); +// xgettext: no-c-format +i18n("A0"); +// xgettext: no-c-format +i18n("A1"); +// xgettext: no-c-format +i18n("A2"); +// xgettext: no-c-format +i18n("RA0"); +// xgettext: no-c-format +i18n("RA1"); +// xgettext: no-c-format +i18n("RA2"); +// xgettext: no-c-format +i18n("RA3"); +// xgettext: no-c-format +i18n("SRA0"); +// xgettext: no-c-format +i18n("SRA1"); +// xgettext: no-c-format +i18n("SRA2"); +// xgettext: no-c-format +i18n("B0 ISO"); +// xgettext: no-c-format +i18n("B1 ISO"); +// xgettext: no-c-format +i18n("B2 ISO"); +// xgettext: no-c-format +i18n("B3 ISO"); +// xgettext: no-c-format +i18n("B0 JIS"); +// xgettext: no-c-format +i18n("B1 JIS"); +// xgettext: no-c-format +i18n("B2 JIS"); +// xgettext: no-c-format +i18n("B3 JIS"); +// xgettext: no-c-format +i18n("C0"); +// xgettext: no-c-format +i18n("C1"); +// xgettext: no-c-format +i18n("C2"); +// xgettext: no-c-format +i18n("C3"); +// xgettext: no-c-format +i18n("ArchA Transverse"); +// xgettext: no-c-format +i18n("ArchB"); +// xgettext: no-c-format +i18n("ArchB Transverse"); +// xgettext: no-c-format +i18n("ArchC"); +// xgettext: no-c-format +i18n("ArchC Transverse"); +// xgettext: no-c-format +i18n("ArchD"); +// xgettext: no-c-format +i18n("ArchD Transverse"); +// xgettext: no-c-format +i18n("ArchE"); +// xgettext: no-c-format +i18n("Plain Paper Fast Load"); +// xgettext: no-c-format +i18n("Glossy Film"); +// xgettext: no-c-format +i18n("Envelopes"); +// xgettext: no-c-format +i18n("Back Light Film"); +// xgettext: no-c-format +i18n("Matte Paper"); +// xgettext: no-c-format +i18n("Inkjet Paper"); +// xgettext: no-c-format +i18n("Photo Quality Inkjet Paper"); +// xgettext: no-c-format +i18n("Premium Glossy Photo Paper"); +// xgettext: no-c-format +i18n("Premium Luster Photo Paper"); +// xgettext: no-c-format +i18n("Photo Quality Glossy Paper"); +// xgettext: no-c-format +i18n("Ilford Heavy Paper"); +// xgettext: no-c-format +i18n("ColorLife Paper"); +// xgettext: no-c-format +i18n("Roll Feed"); +// xgettext: no-c-format +i18n("360 x 90 DPI Fast Economy Draft"); +// xgettext: no-c-format +i18n("360 x 120 DPI Economy Draft"); +// xgettext: no-c-format +i18n("180 DPI Economy Draft"); +// xgettext: no-c-format +i18n("360 x 240 DPI Draft"); +// xgettext: no-c-format +i18n("360 x 180 DPI Draft"); +// xgettext: no-c-format +i18n("360 DPI Microweave"); +// xgettext: no-c-format +i18n("360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI FOL2"); +// xgettext: no-c-format +i18n("360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI MW2"); +// xgettext: no-c-format +i18n("360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI"); +// xgettext: no-c-format +i18n("720 x 360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Microweave"); +// xgettext: no-c-format +i18n("720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Four Pass"); +// xgettext: no-c-format +i18n("720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("Six Color Photo"); +// xgettext: no-c-format +i18n("Five Color Photo Composite"); +// xgettext: no-c-format +i18n("Three Color Composite"); +// xgettext: no-c-format +i18n("Quadtone"); +// xgettext: no-c-format +i18n("720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI High Quality"); +// xgettext: no-c-format +i18n("720 DPI High Quality Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("1440 x 720 DPI"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("2880 x 720 DPI"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("Roll Feed (cut each page)"); +// xgettext: no-c-format +i18n("Roll Feed (do not cut)"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Highest Quality"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI"); +// xgettext: no-c-format +i18n("Seven Color Photo"); +// xgettext: no-c-format +i18n("Two Level Grayscale"); +// xgettext: no-c-format +i18n("Cut Sheet Bin 1"); +// xgettext: no-c-format +i18n("Cut Sheet Bin 2"); +// xgettext: no-c-format +i18n("Cut Sheet Autoselect"); +// xgettext: no-c-format +i18n("Manual Selection"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Microweave"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 720 DPI FOL"); +// xgettext: no-c-format +i18n("2880 x 720 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Four Pass"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Microweave"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI FOL"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Four Pass"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Microweave"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI FOL"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Four Pass"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("Seven Color Enhanced"); +// xgettext: no-c-format +i18n("Six Color Enhanced Composite"); +// xgettext: no-c-format +i18n("Plain"); +// xgettext: no-c-format +i18n("300 DPI x 600 DPI"); +// xgettext: no-c-format +i18n("600 DPI high quality"); +// xgettext: no-c-format +i18n("600 DPI Unidirectional"); +// xgettext: no-c-format +i18n("1200 DPI high quality"); +// xgettext: no-c-format +i18n("1200 DPI highest quality"); +// xgettext: no-c-format +i18n("1200 DPI Unidirectional"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI high quality"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI highest quality"); +// xgettext: no-c-format +i18n("600x600 DPI monochrome"); +// xgettext: no-c-format +i18n("Quick-dry Photo"); +// xgettext: no-c-format +i18n("Quick-dry Transparency"); +// xgettext: no-c-format +i18n("Portable Sheet Feeder"); +// xgettext: no-c-format +i18n("Desktop Sheet Feeder"); +// xgettext: no-c-format +i18n("Color + Black Cartridges"); +// xgettext: no-c-format +i18n("Upper Tray"); +// xgettext: no-c-format +i18n("Lower Tray"); +// xgettext: no-c-format +i18n("Dual"); +// xgettext: no-c-format +i18n("Thicker Paper"); +// xgettext: no-c-format +i18n("Thin Paper"); +// xgettext: no-c-format +i18n("Toner Saving"); +// xgettext: no-c-format +i18n("High (50%)"); +// xgettext: no-c-format +i18n("Low (25%)"); +// xgettext: no-c-format +i18n("Standard printing"); +// xgettext: no-c-format +i18n("Floyd-Steinberg dithered printing"); +// xgettext: no-c-format +i18n("Tray 5"); +// xgettext: no-c-format +i18n("2400x600 DPI"); +// xgettext: no-c-format +i18n("Draft Grayscale"); +// xgettext: no-c-format +i18n("Printer Model"); +// xgettext: no-c-format +i18n("HP LaserJet II series"); +// xgettext: no-c-format +i18n("HP LaserJet III series"); +// xgettext: no-c-format +i18n("8K"); +// xgettext: no-c-format +i18n("Large Capacity Tray"); +// xgettext: no-c-format +i18n("Multi Purpose Tray"); +// xgettext: no-c-format +i18n("300 dpi, Draft, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("180x360 dpi"); +// xgettext: no-c-format +i18n("360x360 dpi"); +// xgettext: no-c-format +i18n("180 x 180 DPI"); +// xgettext: no-c-format +i18n("360 x 360 DPI"); +// xgettext: no-c-format +i18n("Plain paper"); +// xgettext: no-c-format +i18n("Bond paper"); +// xgettext: no-c-format +i18n("Media Weight"); +// xgettext: no-c-format +i18n("Normal paper"); +// xgettext: no-c-format +i18n("Thick paper"); +// xgettext: no-c-format +i18n("90 DPI"); +// xgettext: no-c-format +i18n("Ghostscript Bits Per Pixel"); +// xgettext: no-c-format +i18n("Monochrome (1bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript dithering (8bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript FS dithering (16bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (24 bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (32 bpp)"); +// xgettext: no-c-format +i18n("Color Model"); +// xgettext: no-c-format +i18n("Four-color CMYK"); +// xgettext: no-c-format +i18n("Greyscale"); +// xgettext: no-c-format +i18n("Three-color RGB"); +// xgettext: no-c-format +i18n("Colours to be used"); +// xgettext: no-c-format +i18n("Cyan only"); +// xgettext: no-c-format +i18n("Cyan, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Cyan, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Yellow, Black"); +// xgettext: no-c-format +i18n("Black only"); +// xgettext: no-c-format +i18n("Black for any colour"); +// xgettext: no-c-format +i18n("Magenta only"); +// xgettext: no-c-format +i18n("Magenta, Black"); +// xgettext: no-c-format +i18n("Magenta, Yellow"); +// xgettext: no-c-format +i18n("Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Yellow only"); +// xgettext: no-c-format +i18n("Yellow, Black"); +// xgettext: no-c-format +i18n("90 x 90 DPI"); +// xgettext: no-c-format +i18n("Resolution, Media Type"); +// xgettext: no-c-format +i18n("360x360dpi, back print film"); +// xgettext: no-c-format +i18n("360x360dpi, coated paper"); +// xgettext: no-c-format +i18n("360x360dpi, fabric sheet"); +// xgettext: no-c-format +i18n("360x360dpi, glossy paper"); +// xgettext: no-c-format +i18n("360x360dpi, high gloss film"); +// xgettext: no-c-format +i18n("360x360dpi, high resolution paper"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper, high speed"); +// xgettext: no-c-format +i18n("360x360dpi, transparency film"); +// xgettext: no-c-format +i18n("Very High Quality"); +// xgettext: no-c-format +i18n("Very High Quality Grayscale"); +// xgettext: no-c-format +i18n("720 x 720 DPI"); +// xgettext: no-c-format +i18n("360 dpi"); +// xgettext: no-c-format +i18n("720 dpi"); +// xgettext: no-c-format +i18n("Low Quality"); +// xgettext: no-c-format +i18n("720x720dpi, back print film"); +// xgettext: no-c-format +i18n("720x720dpi, coated paper"); +// xgettext: no-c-format +i18n("720x720dpi, glossy paper"); +// xgettext: no-c-format +i18n("720x720dpi, high-gloss paper"); +// xgettext: no-c-format +i18n("720x720dpi, high resolution paper"); +// xgettext: no-c-format +i18n("720x720dpi, plain paper"); +// xgettext: no-c-format +i18n("720x720dpi, transparency film"); +// xgettext: no-c-format +i18n("1200 x 600 DPI"); +// xgettext: no-c-format +i18n("Resolution, Quality, Media Type"); +// xgettext: no-c-format +i18n("600x600dpi, iron-on transfer sheets, normal quality"); +// xgettext: no-c-format +i18n("600x600dpi, plain paper, normal quality"); +// xgettext: no-c-format +i18n("600x600dpi, transparencies, normal quality"); +// xgettext: no-c-format +i18n("1200x1200dpi, glossy photo cards, high quality"); +// xgettext: no-c-format +i18n("1200x1200dpi, high gloss photo paper, high quality"); +// xgettext: no-c-format +i18n("1200x1200dpi, professional photo paper, highest quality"); +// xgettext: no-c-format +i18n("1200 x 1200 DPI"); +// xgettext: no-c-format +i18n("Number of Copies"); +// xgettext: no-c-format +i18n("REt Setting"); +// xgettext: no-c-format +i18n("Halftoning"); +// xgettext: no-c-format +i18n("HP LaserJet 4L"); +// xgettext: no-c-format +i18n("Shift output horizontally (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Shift output vertically (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Full Paint"); +// xgettext: no-c-format +i18n("FullPaint"); +// xgettext: no-c-format +i18n("PartialPaint"); +// xgettext: no-c-format +i18n("Printer's paper size"); +// xgettext: no-c-format +i18n("IgnoreSize"); +// xgettext: no-c-format +i18n("RequireSize"); +// xgettext: no-c-format +i18n("240x240 DPI"); +// xgettext: no-c-format +i18n("300x300 dpi"); +// xgettext: no-c-format +i18n("300x600 dpi"); +// xgettext: no-c-format +i18n("600x600 dpi"); +// xgettext: no-c-format +i18n("600x1200 dpi"); +// xgettext: no-c-format +i18n("1200x1200 dpi"); +// xgettext: no-c-format +i18n("Head Separation"); +// xgettext: no-c-format +i18n("300x600 DPI"); +// xgettext: no-c-format +i18n("300x1200 DPI"); +// xgettext: no-c-format +i18n("600x1200 DPI"); +// xgettext: no-c-format +i18n("1200x300 DPI"); +// xgettext: no-c-format +i18n("Photo Quality Colour (6-ink)"); +// xgettext: no-c-format +i18n("Normal Quality Colour (4-ink)"); +// xgettext: no-c-format +i18n("Bidirectional printing"); +// xgettext: no-c-format +i18n("off"); +// xgettext: no-c-format +i18n("on"); +// xgettext: no-c-format +i18n("Horz. align. betw. cartr."); +// xgettext: no-c-format +i18n("Vert. align. betw. cartr."); +// xgettext: no-c-format +i18n("Distance even/odd nozzles left cartr."); +// xgettext: no-c-format +i18n("Distance even/odd nozzles right cartr."); +// xgettext: no-c-format +i18n("Number of passes per line"); +// xgettext: no-c-format +i18n("Paper Source"); +// xgettext: no-c-format +i18n("Tray 8"); +// xgettext: no-c-format +i18n("Tray 9"); +// xgettext: no-c-format +i18n("Tray 10"); +// xgettext: no-c-format +i18n("Tray 11"); +// xgettext: no-c-format +i18n("Tray 12"); +// xgettext: no-c-format +i18n("Tray 13"); +// xgettext: no-c-format +i18n("Tray 14"); +// xgettext: no-c-format +i18n("Tray 15"); +// xgettext: no-c-format +i18n("Page Output"); +// xgettext: no-c-format +i18n("FaceUp"); +// xgettext: no-c-format +i18n("FaceDown"); +// xgettext: no-c-format +i18n("Thick Paper/Card Board"); +// xgettext: no-c-format +i18n("Toner Density"); +// xgettext: no-c-format +i18n("TonerSaving"); +// xgettext: no-c-format +i18n("Output Order"); +// xgettext: no-c-format +i18n("Collate"); +// xgettext: no-c-format +i18n("Orientation"); +// xgettext: no-c-format +i18n("Landscape"); +// xgettext: no-c-format +i18n("Portrait"); +// xgettext: no-c-format +i18n("RIT Control"); +// xgettext: no-c-format +i18n("RITOff"); +// xgettext: no-c-format +i18n("RITOn"); +// xgettext: no-c-format +i18n("Monochrome, fast"); +// xgettext: no-c-format +i18n("Monochrome, Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Head motion"); +// xgettext: no-c-format +i18n("Unidirectional"); +// xgettext: no-c-format +i18n("Bidirectional"); +// xgettext: no-c-format +i18n("Weaving"); +// xgettext: no-c-format +i18n("Microweave (Printer internal)"); +// xgettext: no-c-format +i18n("Softweave (Driver internal)"); +// xgettext: no-c-format +i18n("ESC/P2 Encoding"); +// xgettext: no-c-format +i18n("Delta Row"); +// xgettext: no-c-format +i18n("Run Length"); +// xgettext: no-c-format +i18n("Uncompressed"); +// xgettext: no-c-format +i18n("Preconfiguration file"); +// xgettext: no-c-format +i18n("stcolor"); +// xgettext: no-c-format +i18n("none"); +// xgettext: no-c-format +i18n("Initialization values for dithering"); +// xgettext: no-c-format +i18n("Uniform"); +// xgettext: no-c-format +i18n("Random"); +// xgettext: no-c-format +i18n("360 x 120 DPI"); +// xgettext: no-c-format +i18n("360 x 240 DPI"); +// xgettext: no-c-format +i18n("360 x 180 DPI"); +// xgettext: no-c-format +i18n("360 x 90 DPI"); +// xgettext: no-c-format +i18n("360x360dpi, 4-bit, PostScript halftoning, weaved"); +// xgettext: no-c-format +i18n("360x360dpi, 32-bit CMYK"); +// xgettext: no-c-format +i18n("720x720dpi, 32-bit CMYK, weaved"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, better"); +// xgettext: no-c-format +i18n("Colour, fast, CMYK"); +// xgettext: no-c-format +i18n("Colour, modif. Floyd-Steinberg, CMYK, faster"); +// xgettext: no-c-format +i18n("Colour, fast, RGB"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, RGB"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, simpler"); +// xgettext: no-c-format +i18n("Colour, Stefan-Singer algorithm, RGB"); +// xgettext: no-c-format +i18n("360 dpi, plain paper"); +// xgettext: no-c-format +i18n("720 dpi, plain paper"); +// xgettext: no-c-format +i18n("1440x720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("Resolution, Color Mode, Media Type"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("720x720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("720x720dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("1440x720dpi, inkjet paper, grayscale"); +// xgettext: no-c-format +i18n("360x360dpi, plain paper low quality"); +// xgettext: no-c-format +i18n("360x360dpi"); +// xgettext: no-c-format +i18n("720x720dpi"); +// xgettext: no-c-format +i18n("F4"); +// xgettext: no-c-format +i18n("Government Legal"); +// xgettext: no-c-format +i18n("Government Letter"); +// xgettext: no-c-format +i18n("Half Letter"); +// xgettext: no-c-format +i18n("TonerSave"); +// xgettext: no-c-format +i18n("Dpi"); +// xgettext: no-c-format +i18n("600x300 dpi (Class600)"); +// xgettext: no-c-format +i18n("1200x600 dpi (Class1200)"); +// xgettext: no-c-format +i18n("Ritech"); +// xgettext: no-c-format +i18n("Resolution, Color Mode"); +// xgettext: no-c-format +i18n("180x180dpi, Grayscale, plain paper"); +// xgettext: no-c-format +i18n("360x360dpi, Color, plain paper"); +// xgettext: no-c-format +i18n("360x360dpi, Grayscale, plain paper"); +// xgettext: no-c-format +i18n("360x720 DPI"); +// xgettext: no-c-format +i18n("400x400 DPI"); +// xgettext: no-c-format +i18n("300 dpi, Best, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Best, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("Super B"); +// xgettext: no-c-format +i18n("Manual Feeding"); +// xgettext: no-c-format +i18n("Paper type"); +// xgettext: no-c-format +i18n("Glossy film"); +// xgettext: no-c-format +i18n("Special paper"); +// xgettext: no-c-format +i18n("Transparency film"); +// xgettext: no-c-format +i18n("Printing Quality"); +// xgettext: no-c-format +i18n("RET (Resolution Enhancement)"); +// xgettext: no-c-format +i18n("Draft (auto-detect paper type)"); +// xgettext: no-c-format +i18n("Photo (on photo paper)"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("600 dpi, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Photo, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Draft Grayscale (auto-detect paper type)"); +// xgettext: no-c-format +i18n("Normal (auto-detect paper type)"); +// xgettext: no-c-format +i18n("Normal Grayscale (auto-detect paper type)"); +// xgettext: no-c-format +i18n("High Quality (auto-detect paper type)"); +// xgettext: no-c-format +i18n("High Quality Grayscale (auto-detect paper type)"); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Binding for Double-Sided Pr."); +// xgettext: no-c-format +i18n("Long Edge"); +// xgettext: no-c-format +i18n("Short Edge"); +// xgettext: no-c-format +i18n("Auto"); +// xgettext: no-c-format +i18n("Contone (4096 colors)"); +// xgettext: no-c-format +i18n("2A"); +// xgettext: no-c-format +i18n("4A"); +// xgettext: no-c-format +i18n("Arch A"); +// xgettext: no-c-format +i18n("Arch B"); +// xgettext: no-c-format +i18n("Arch C"); +// xgettext: no-c-format +i18n("Arch D"); +// xgettext: no-c-format +i18n("Arch E"); +// xgettext: no-c-format +i18n("B0 (ISO)"); +// xgettext: no-c-format +i18n("B1 (ISO)"); +// xgettext: no-c-format +i18n("B2 (ISO)"); +// xgettext: no-c-format +i18n("B3 (ISO)"); +// xgettext: no-c-format +i18n("B4 (ISO)"); +// xgettext: no-c-format +i18n("B5 (ISO)"); +// xgettext: no-c-format +i18n("B0 (JIS)"); +// xgettext: no-c-format +i18n("B1 (JIS)"); +// xgettext: no-c-format +i18n("B2 (JIS)"); +// xgettext: no-c-format +i18n("B3 (JIS)"); +// xgettext: no-c-format +i18n("Super A"); +// xgettext: no-c-format +i18n("Tabloid Extra"); +// xgettext: no-c-format +i18n("EconoFast Mode"); +// xgettext: no-c-format +i18n("Color (Color Cartridge, for photos)"); +// xgettext: no-c-format +i18n("Color (both cartridges, for text with images)"); +// xgettext: no-c-format +i18n("Grayscale (black cartridge)"); +// xgettext: no-c-format +i18n("Dithering Algorithm"); +// xgettext: no-c-format +i18n("Floyd Steinberg (higher quality)"); +// xgettext: no-c-format +i18n("Ordered (faster)"); +// xgettext: no-c-format +i18n("Off (better quality)"); +// xgettext: no-c-format +i18n("On (faster)"); +// xgettext: no-c-format +i18n("Black ink density adjustment."); +// xgettext: no-c-format +i18n("Bottom Margin"); +// xgettext: no-c-format +i18n("Left Margin"); +// xgettext: no-c-format +i18n("Right Margin"); +// xgettext: no-c-format +i18n("Top Margin"); +// xgettext: no-c-format +i18n("X Offset"); +// xgettext: no-c-format +i18n("Y Offset"); +// xgettext: no-c-format +i18n("Gamma Correction File"); +// xgettext: no-c-format +i18n("Default (/etc/pnm2ppa.gamma)"); +// xgettext: no-c-format +i18n("Normal Quality (/etc/pnm2ppa.gamma_normal)"); +// xgettext: no-c-format +i18n("Best Quality (/etc/pnm2ppa.gamma_best)"); +// xgettext: no-c-format +i18n("None"); +// xgettext: no-c-format +i18n("GhostScript Rendering Format"); +// xgettext: no-c-format +i18n("Gamma Correction"); +// xgettext: no-c-format +i18n("Gamma Black"); +// xgettext: no-c-format +i18n("Gamma Cyan"); +// xgettext: no-c-format +i18n("Gamma Magenta"); +// xgettext: no-c-format +i18n("Gamma Yellow"); +// xgettext: no-c-format +i18n("Draft Grayscale (Black cartridge)"); +// xgettext: no-c-format +i18n("Normal Grayscale (Black cartridge)"); +// xgettext: no-c-format +i18n("High Quality Grayscale (Black cartridge)"); +// xgettext: no-c-format +i18n("600x300 dpi, Best, Grayscale, Black Cartr."); +// xgettext: no-c-format +i18n("300 dpi, Color, Full Bleed, Black + Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Color, Full Bleed, Black + Color Cartr."); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Full Bleed, Black + Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Photo (Color cartridge, on photo paper)"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("600 dpi, Photo, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("Glossy"); +// xgettext: no-c-format +i18n("Paper"); +// xgettext: no-c-format +i18n("Behaviour when Toner Low"); +// xgettext: no-c-format +i18n("Output Bin"); +// xgettext: no-c-format +i18n("Upper"); +// xgettext: no-c-format +i18n("Lower"); +// xgettext: no-c-format +i18n("MP Tray"); +// xgettext: no-c-format +i18n("300 dpi, Color, Full Bleed, Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Color, Color Cartr."); +// xgettext: no-c-format +i18n("600 dpi, Color, Full Bleed, Color Cartr."); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("1200 dpi, Photo, Full Bleed, Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("150 dpi, Best, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Draft, Color, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Draft, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("150 dpi, Grayscale, Black + Color Cartr."); +// xgettext: no-c-format +i18n("2400x1200 DPI"); +// xgettext: no-c-format +i18n("High Quality (Color cartridge)"); +// xgettext: no-c-format +i18n("Cover for HP DeskJet 3425"); +// xgettext: no-c-format +i18n("75x75 dpi"); +// xgettext: no-c-format +i18n("150x150 dpi"); +// xgettext: no-c-format +i18n("Black cartridge"); +// xgettext: no-c-format +i18n("Color cartridge"); +// xgettext: no-c-format +i18n("Folio"); +// xgettext: no-c-format +i18n("Normal Paper"); +// xgettext: no-c-format +i18n("Card Stock"); +// xgettext: no-c-format +i18n("Adhesive Labels"); +// xgettext: no-c-format +i18n("Pre-printed paper"); +// xgettext: no-c-format +i18n("Allow use of 'Reprint' button"); +// xgettext: no-c-format +i18n("Yes"); +// xgettext: no-c-format +i18n("Altitude Correction"); +// xgettext: no-c-format +i18n("High Altitude (Low Air Pressure)"); +// xgettext: no-c-format +i18n("Low Altitude (High Air Pressure)"); +// xgettext: no-c-format +i18n("Reprint Page after Paper Jam"); +// xgettext: no-c-format +i18n("Page Timeout"); +// xgettext: no-c-format +i18n("15 sec"); +// xgettext: no-c-format +i18n("30 sec"); +// xgettext: no-c-format +i18n("45 sec"); +// xgettext: no-c-format +i18n("Idle time to start power save mode (min)"); +// xgettext: no-c-format +i18n("5 min"); +// xgettext: no-c-format +i18n("10 min"); +// xgettext: no-c-format +i18n("15 min"); +// xgettext: no-c-format +i18n("30 min"); +// xgettext: no-c-format +i18n("45 min"); +// xgettext: no-c-format +i18n("60 min"); +// xgettext: no-c-format +i18n("Use Power Saving Mode"); +// xgettext: no-c-format +i18n("Dithering PPI"); +// xgettext: no-c-format +i18n("300 x 600 DPI"); +// xgettext: no-c-format +i18n("2400 x 1200 DPI"); +// xgettext: no-c-format +i18n("2-passes x-weaving"); +// xgettext: no-c-format +i18n("3-passes x-weaving"); +// xgettext: no-c-format +i18n("320x320 DPI"); +// xgettext: no-c-format +i18n("160x160 DPI"); +// xgettext: no-c-format +i18n("Darkness"); +// xgettext: no-c-format +i18n("Darkest"); +// xgettext: no-c-format +i18n("Lightest"); +// xgettext: no-c-format +i18n("Black toner saving"); +// xgettext: no-c-format +i18n("DeskJet"); +// xgettext: no-c-format +i18n("DeskJet 310"); +// xgettext: no-c-format +i18n("DeskJet 320"); +// xgettext: no-c-format +i18n("DeskJet 340"); +// xgettext: no-c-format +i18n("DeskJet 400"); +// xgettext: no-c-format +i18n("DeskJet 600"); +// xgettext: no-c-format +i18n("DeskJet 660C"); +// xgettext: no-c-format +i18n("DeskJet 670C"); +// xgettext: no-c-format +i18n("DeskJet 680C"); +// xgettext: no-c-format +i18n("DeskJet 690C"); +// xgettext: no-c-format +i18n("DeskJet 870C"); +// xgettext: no-c-format +i18n("DeskJet 890C"); +// xgettext: no-c-format +i18n("DeskJet 970C with Duplexer"); +// xgettext: no-c-format +i18n("DeskJet 1120C"); +// xgettext: no-c-format +i18n("DeskJet Plus"); +// xgettext: no-c-format +i18n("DeskJet Portable"); +// xgettext: no-c-format +i18n("Olivetti (Black sent after CMY)"); +// xgettext: no-c-format +i18n("Unspecified Model"); +// xgettext: no-c-format +i18n("Unspecified Old Model"); +// xgettext: no-c-format +i18n("Configure Every Page"); +// xgettext: no-c-format +i18n("Media Size"); +// xgettext: no-c-format +i18n("Letter"); +// xgettext: no-c-format +i18n("Legal"); +// xgettext: no-c-format +i18n("A4"); +// xgettext: no-c-format +i18n("PageRegion"); +// xgettext: no-c-format +i18n("Output Resolution"); +// xgettext: no-c-format +i18n("204x196 DPI"); +// xgettext: no-c-format +i18n("204x98 DPI"); +// xgettext: no-c-format +i18n("your fax for replies"); +// xgettext: no-c-format +i18n("ID"); +// xgettext: no-c-format +i18n("your fax header"); +// xgettext: no-c-format +i18n("Default"); +// xgettext: no-c-format +i18n("Resolution"); +// xgettext: no-c-format +i18n("72dpi"); +// xgettext: no-c-format +i18n("144dpi"); +// xgettext: no-c-format +i18n("300dpi"); +// xgettext: no-c-format +i18n("360dpi"); +// xgettext: no-c-format +i18n("600dpi"); +// xgettext: no-c-format +i18n("720dpi"); +// xgettext: no-c-format +i18n("1200dpi"); +// xgettext: no-c-format +i18n("1440dpi"); +// xgettext: no-c-format +i18n("2400dpi"); +// xgettext: no-c-format +i18n("PageSize"); +// xgettext: no-c-format +i18n("A0"); +// xgettext: no-c-format +i18n("A1"); +// xgettext: no-c-format +i18n("A2"); +// xgettext: no-c-format +i18n("A3"); +// xgettext: no-c-format +i18n("A5"); +// xgettext: no-c-format +i18n("A6"); +// xgettext: no-c-format +i18n("B4"); +// xgettext: no-c-format +i18n("B5"); +// xgettext: no-c-format +i18n("B6"); +// xgettext: no-c-format +i18n("US Legal"); +// xgettext: no-c-format +i18n("US Letter"); +// xgettext: no-c-format +i18n("Executive"); +// xgettext: no-c-format +i18n("Statement"); +// xgettext: no-c-format +i18n("US Tabloid"); +// xgettext: no-c-format +i18n("Ledger Landscape"); +// xgettext: no-c-format +i18n("US C"); +// xgettext: no-c-format +i18n("US D"); +// xgettext: no-c-format +i18n("US E"); +// xgettext: no-c-format +i18n("ARCH A"); +// xgettext: no-c-format +i18n("ARCH B"); +// xgettext: no-c-format +i18n("ARCH C"); +// xgettext: no-c-format +i18n("ARCH D"); +// xgettext: no-c-format +i18n("ARCH E"); +// xgettext: no-c-format +i18n("Monarch Envelope"); +// xgettext: no-c-format +i18n("DL Envelope"); +// xgettext: no-c-format +i18n("C4 Envelope"); +// xgettext: no-c-format +i18n("C5 Envelope"); +// xgettext: no-c-format +i18n("C6 Envelope"); +// xgettext: no-c-format +i18n("C10 Envelope"); +// xgettext: no-c-format +i18n("C65 Envelope"); +// xgettext: no-c-format +i18n("Folio"); +// xgettext: no-c-format +i18n("InputSlot"); +// xgettext: no-c-format +i18n("Autotray"); +// xgettext: no-c-format +i18n("Tray 2 Paper Tray"); +// xgettext: no-c-format +i18n("Installed Memory"); +// xgettext: no-c-format +i18n("Standard 16MB"); +// xgettext: no-c-format +i18n("80 MB"); +// xgettext: no-c-format +i18n("B5 (JIS)"); +// xgettext: no-c-format +i18n("Envelope 10"); +// xgettext: no-c-format +i18n("Envelope DL"); +// xgettext: no-c-format +i18n("Envelope C5"); +// xgettext: no-c-format +i18n("Envelope C6"); +// xgettext: no-c-format +i18n("Envelope Monarch"); +// xgettext: no-c-format +i18n("Envelope A2"); +// xgettext: no-c-format +i18n("4x6"); +// xgettext: no-c-format +i18n("5x8"); +// xgettext: no-c-format +i18n("A6 Card"); +// xgettext: no-c-format +i18n("Print Color as Gray"); +// xgettext: no-c-format +i18n("On"); +// xgettext: no-c-format +i18n("Off"); +// xgettext: no-c-format +i18n("Media Type"); +// xgettext: no-c-format +i18n("Plain Paper"); +// xgettext: no-c-format +i18n("HP Premium Inkjet Paper"); +// xgettext: no-c-format +i18n("HP Premium Inkjet Heavyweight Paper"); +// xgettext: no-c-format +i18n("HP Premium Transparency"); +// xgettext: no-c-format +i18n("HP Premium Photo Paper"); +// xgettext: no-c-format +i18n("HP Photo Paper"); +// xgettext: no-c-format +i18n("HP Professional Brochure Paper, Glossy"); +// xgettext: no-c-format +i18n("HP Professional Brochure Paper, Matte"); +// xgettext: no-c-format +i18n(" Paper Source"); +// xgettext: no-c-format +i18n("Tray 1"); +// xgettext: no-c-format +i18n("Tray 2"); +// xgettext: no-c-format +i18n("Manual Feed"); +// xgettext: no-c-format +i18n("HP ColorSmart"); +// xgettext: no-c-format +i18n("Automatic"); +// xgettext: no-c-format +i18n("Manual"); +// xgettext: no-c-format +i18n("Text"); +// xgettext: no-c-format +i18n("ScreenMatch(sRGB)"); +// xgettext: no-c-format +i18n("Vivid"); +// xgettext: no-c-format +i18n("Graphics"); +// xgettext: no-c-format +i18n("Image"); +// xgettext: no-c-format +i18n(" Print Quality"); +// xgettext: no-c-format +i18n("Best"); +// xgettext: no-c-format +i18n("Normal"); +// xgettext: no-c-format +i18n("Fast"); +// xgettext: no-c-format +i18n("CMYK Inks"); +// xgettext: no-c-format +i18n("FAST"); +// xgettext: no-c-format +i18n("SWOP Emulation"); +// xgettext: no-c-format +i18n("Eurostandard"); +// xgettext: no-c-format +i18n("TOYO"); +// xgettext: no-c-format +i18n("Pages per Sheet"); +// xgettext: no-c-format +i18n("1 (Portrait)"); +// xgettext: no-c-format +i18n("1 (Landscape)"); +// xgettext: no-c-format +i18n("2 (Portrait)"); +// xgettext: no-c-format +i18n("2 (Landscape)"); +// xgettext: no-c-format +i18n("4 (Portrait)"); +// xgettext: no-c-format +i18n("4 (Landscape)"); +// xgettext: no-c-format +i18n("6 (Portrait)"); +// xgettext: no-c-format +i18n("6 (Landscape)"); +// xgettext: no-c-format +i18n("9 (Portrait)"); +// xgettext: no-c-format +i18n("9 (Landscape)"); +// xgettext: no-c-format +i18n("16 (Portrait)"); +// xgettext: no-c-format +i18n("16 (Landscape)"); +// xgettext: no-c-format +i18n("Watermark"); +// xgettext: no-c-format +i18n("None"); +// xgettext: no-c-format +i18n("Company Confidential"); +// xgettext: no-c-format +i18n("Company Proprietary"); +// xgettext: no-c-format +i18n("Company Private"); +// xgettext: no-c-format +i18n("Confidential"); +// xgettext: no-c-format +i18n("Copy"); +// xgettext: no-c-format +i18n("Copyright"); +// xgettext: no-c-format +i18n("Draft"); +// xgettext: no-c-format +i18n("File Copy"); +// xgettext: no-c-format +i18n("Final"); +// xgettext: no-c-format +i18n("For Internal Use Only"); +// xgettext: no-c-format +i18n("Preliminary"); +// xgettext: no-c-format +i18n("Proof"); +// xgettext: no-c-format +i18n("Review Copy"); +// xgettext: no-c-format +i18n("Sample"); +// xgettext: no-c-format +i18n("Top Secret"); +// xgettext: no-c-format +i18n("Urgent"); +// xgettext: no-c-format +i18n("Watermark Font"); +// xgettext: no-c-format +i18n("Courier Bold"); +// xgettext: no-c-format +i18n("Times Bold"); +// xgettext: no-c-format +i18n("Helvetica Bold"); +// xgettext: no-c-format +i18n("Watermark Size"); +// xgettext: no-c-format +i18n("24 Points"); +// xgettext: no-c-format +i18n("30 Points"); +// xgettext: no-c-format +i18n("36 Points"); +// xgettext: no-c-format +i18n("42 Points"); +// xgettext: no-c-format +i18n("48 Points"); +// xgettext: no-c-format +i18n("54 Points"); +// xgettext: no-c-format +i18n("60 Points"); +// xgettext: no-c-format +i18n("66 Points"); +// xgettext: no-c-format +i18n("72 Points"); +// xgettext: no-c-format +i18n("78 Points"); +// xgettext: no-c-format +i18n("84 Points"); +// xgettext: no-c-format +i18n("90 Points"); +// xgettext: no-c-format +i18n("Watermark Angle"); +// xgettext: no-c-format +i18n("90 Degrees"); +// xgettext: no-c-format +i18n("75 Degrees"); +// xgettext: no-c-format +i18n("60 Degrees"); +// xgettext: no-c-format +i18n("45 Degrees"); +// xgettext: no-c-format +i18n("30 Degrees"); +// xgettext: no-c-format +i18n("15 Degrees"); +// xgettext: no-c-format +i18n("0 Degrees"); +// xgettext: no-c-format +i18n("-15 Degrees"); +// xgettext: no-c-format +i18n("-30 Degrees"); +// xgettext: no-c-format +i18n("-45 Degrees"); +// xgettext: no-c-format +i18n("-60 Degrees"); +// xgettext: no-c-format +i18n("-75 Degrees"); +// xgettext: no-c-format +i18n("-90 Degrees"); +// xgettext: no-c-format +i18n("Watermark Style"); +// xgettext: no-c-format +i18n("Narrow Outline"); +// xgettext: no-c-format +i18n("Medium Outline"); +// xgettext: no-c-format +i18n("Wide Outline"); +// xgettext: no-c-format +i18n("Wide Halo Outline"); +// xgettext: no-c-format +i18n("Print Watermark"); +// xgettext: no-c-format +i18n("All Pages"); +// xgettext: no-c-format +i18n("First Page Only"); +// xgettext: no-c-format +i18n("32 MB"); +// xgettext: no-c-format +i18n("48 MB"); +// xgettext: no-c-format +i18n("64 MB"); +// xgettext: no-c-format +i18n("72 MB"); +// xgettext: no-c-format +i18n("Tabloid"); +// xgettext: no-c-format +i18n("4x6 Index Card"); +// xgettext: no-c-format +i18n("5x8 Index Card"); +// xgettext: no-c-format +i18n("Super B"); +// xgettext: no-c-format +i18n("Super A3"); +// xgettext: no-c-format +i18n("Input Slot"); +// xgettext: no-c-format +i18n("Tray 3"); +// xgettext: no-c-format +i18n("Rear Manual Feed"); +// xgettext: no-c-format +i18n("True"); +// xgettext: no-c-format +i18n("False"); +// xgettext: no-c-format +i18n("HP Rapid-Dry Transparency"); +// xgettext: no-c-format +i18n("HP Transparency"); +// xgettext: no-c-format +i18n("HP Iron-on T-shirt Transfers"); +// xgettext: no-c-format +i18n("Fit to Page"); +// xgettext: no-c-format +i18n("Prompt User"); +// xgettext: no-c-format +i18n("Nearest Size and Scale"); +// xgettext: no-c-format +i18n("Nearest Size and Crop"); +// xgettext: no-c-format +i18n("Print Quality"); +// xgettext: no-c-format +i18n("EconoFast"); +// xgettext: no-c-format +i18n("Color Control"); +// xgettext: no-c-format +i18n("Enhanced Native"); +// xgettext: no-c-format +i18n("ColorSmart Business Graphics"); +// xgettext: no-c-format +i18n("No Color Adjustment"); +// xgettext: no-c-format +i18n("Pantone"); +// xgettext: no-c-format +i18n("Rendering Intent"); +// xgettext: no-c-format +i18n("Contrast"); +// xgettext: no-c-format +i18n("Colorimetric"); +// xgettext: no-c-format +i18n("Saturation"); +// xgettext: no-c-format +i18n(" -25% Lighter"); +// xgettext: no-c-format +i18n(" -20%"); +// xgettext: no-c-format +i18n(" -15%"); +// xgettext: no-c-format +i18n(" -10%"); +// xgettext: no-c-format +i18n(" -5%"); +// xgettext: no-c-format +i18n(" 0% No Change"); +// xgettext: no-c-format +i18n(" +5%"); +// xgettext: no-c-format +i18n(" +10%"); +// xgettext: no-c-format +i18n(" +15%"); +// xgettext: no-c-format +i18n(" +20%"); +// xgettext: no-c-format +i18n(" +25% Darker"); +// xgettext: no-c-format +i18n("Application Halftoning"); +// xgettext: no-c-format +i18n("Yes"); +// xgettext: no-c-format +i18n("No"); +// xgettext: no-c-format +i18n("Scale to"); +// xgettext: no-c-format +i18n("No Change"); +// xgettext: no-c-format +i18n("PPD Version"); +// xgettext: no-c-format +i18n("2.0"); +// xgettext: no-c-format +i18n("Rear Feed Unit"); +// xgettext: no-c-format +i18n("Installed"); +// xgettext: no-c-format +i18n("Not Installed"); +// xgettext: no-c-format +i18n("Memory Configuration"); +// xgettext: no-c-format +i18n("36 - 43 MB RAM"); +// xgettext: no-c-format +i18n("44 - 51 MB RAM"); +// xgettext: no-c-format +i18n("52 - 59 MB RAM"); +// xgettext: no-c-format +i18n("60 - 67 MB RAM"); +// xgettext: no-c-format +i18n(">= 68 MB RAM"); +// xgettext: no-c-format +i18n("Print as Grayscale"); +// xgettext: no-c-format +i18n("ColorSmart"); +// xgettext: no-c-format +i18n("Auto"); +// xgettext: no-c-format +i18n("Pantone"); +// xgettext: no-c-format +i18n("ColorSmart Text"); +// xgettext: no-c-format +i18n("Vivid Color"); +// xgettext: no-c-format +i18n("Match Color Across Printers"); +// xgettext: no-c-format +i18n("No Adjustment"); +// xgettext: no-c-format +i18n("ColorSmart Graphics"); +// xgettext: no-c-format +i18n("ColorSmart Photos"); +// xgettext: no-c-format +i18n("Text Halftone"); +// xgettext: no-c-format +i18n("Detail"); +// xgettext: no-c-format +i18n("Smooth"); +// xgettext: no-c-format +i18n("Basic"); +// xgettext: no-c-format +i18n("Graphics Halftone"); +// xgettext: no-c-format +i18n("Image Halftone"); +// xgettext: no-c-format +i18n("Transparency/HP Special Paper"); +// xgettext: no-c-format +i18n("Media Source"); +// xgettext: no-c-format +i18n("Auto Select"); +// xgettext: no-c-format +i18n("Front Tray"); +// xgettext: no-c-format +i18n("Rear Tray"); +// xgettext: no-c-format +i18n("Output Bin"); +// xgettext: no-c-format +i18n("Upper"); +// xgettext: no-c-format +i18n("Lower"); +// xgettext: no-c-format +i18n(" 8 - 15 MB Total RAM"); +// xgettext: no-c-format +i18n(" 16 - 23 MB Total RAM"); +// xgettext: no-c-format +i18n(" 24 - 31 MB Total RAM"); +// xgettext: no-c-format +i18n(" 32 - 39 MB Total RAM"); +// xgettext: no-c-format +i18n(" 40 - 56 MB Total RAM"); +// xgettext: no-c-format +i18n("Letter 8 1/2 x 11 in"); +// xgettext: no-c-format +i18n("Legal 8 1/2 x 14 in"); +// xgettext: no-c-format +i18n("Tabloid 11 x 17 in"); +// xgettext: no-c-format +i18n("Executive 7 1/4 x 10 1/2 in"); +// xgettext: no-c-format +i18n("A4 210 x 297 mm"); +// xgettext: no-c-format +i18n("A3 297 x 420 mm"); +// xgettext: no-c-format +i18n("Halftone"); +// xgettext: no-c-format +i18n("Cluster (Standard)"); +// xgettext: no-c-format +i18n("Scatter (Enhanced)"); +// xgettext: no-c-format +i18n("Printer's Current Setting"); +// xgettext: no-c-format +i18n("Full Color"); +// xgettext: no-c-format +i18n("Paper"); +// xgettext: no-c-format +i18n("Transparency"); +// xgettext: no-c-format +i18n("Resolution Enhancement (REt)"); +// xgettext: no-c-format +i18n("Light"); +// xgettext: no-c-format +i18n("Medium"); +// xgettext: no-c-format +i18n("Dark"); +// xgettext: no-c-format +i18n("Printer Default"); +// xgettext: no-c-format +i18n("Tray3"); +// xgettext: no-c-format +i18n("32 - 39 MB RAM"); +// xgettext: no-c-format +i18n("40 - 63 MB RAM"); +// xgettext: no-c-format +i18n("64 - 95 MB RAM"); +// xgettext: no-c-format +i18n("96 - 127 MB RAM"); +// xgettext: no-c-format +i18n("128 - 159 MB RAM"); +// xgettext: no-c-format +i18n("160 - 191 MB RAM"); +// xgettext: no-c-format +i18n(" 192 MB RAM"); +// xgettext: no-c-format +i18n("Duplex Unit (for 2-Sided Printing)"); +// xgettext: no-c-format +i18n("Envelope B5"); +// xgettext: no-c-format +i18n("Envelope #10"); +// xgettext: no-c-format +i18n("Plain"); +// xgettext: no-c-format +i18n("Preprinted"); +// xgettext: no-c-format +i18n("Letterhead"); +// xgettext: no-c-format +i18n("Glossy"); +// xgettext: no-c-format +i18n("Prepunched"); +// xgettext: no-c-format +i18n("Labels"); +// xgettext: no-c-format +i18n("Bond"); +// xgettext: no-c-format +i18n("Recycled"); +// xgettext: no-c-format +i18n("Color"); +// xgettext: no-c-format +i18n("Heavy"); +// xgettext: no-c-format +i18n("Card Stock"); +// xgettext: no-c-format +i18n("Print Finish"); +// xgettext: no-c-format +i18n("Matte"); +// xgettext: no-c-format +i18n("Paper Source"); +// xgettext: no-c-format +i18n("Tray2"); +// xgettext: no-c-format +i18n("Tray1"); +// xgettext: no-c-format +i18n("2-Sided Printing"); +// xgettext: no-c-format +i18n("Long-Edge Binding"); +// xgettext: no-c-format +i18n("Short-Edge Binding"); +// xgettext: no-c-format +i18n("SWOP"); +// xgettext: no-c-format +i18n("ColorSmart II"); +// xgettext: no-c-format +i18n("ScreenMatch(sRGB)-Detail"); +// xgettext: no-c-format +i18n("ScreenMatch(sRGB)-Smooth"); +// xgettext: no-c-format +i18n("Vivid-Detail"); +// xgettext: no-c-format +i18n("Vivid-Smooth"); +// xgettext: no-c-format +i18n("500-Sheet Paper Feeder"); +// xgettext: no-c-format +i18n("Printer Disk"); +// xgettext: no-c-format +i18n("RAM Disk"); +// xgettext: no-c-format +i18n("Hard Disk"); +// xgettext: no-c-format +i18n("32 - 63 MB RAM"); +// xgettext: no-c-format +i18n("192 - 223 MB RAM"); +// xgettext: no-c-format +i18n("224 - 256 MB RAM"); +// xgettext: no-c-format +i18n("Duplex Printing Accessory"); +// xgettext: no-c-format +i18n("Paper Matching"); +// xgettext: no-c-format +i18n("Prompt User for correct size"); +// xgettext: no-c-format +i18n("Nearest Size & Scale"); +// xgettext: no-c-format +i18n("Nearest Size & Crop"); +// xgettext: no-c-format +i18n("Job Retention"); +// xgettext: no-c-format +i18n("Quick Copy"); +// xgettext: no-c-format +i18n("Proof and Hold"); +// xgettext: no-c-format +i18n("Stored Job"); +// xgettext: no-c-format +i18n("Private Job"); +// xgettext: no-c-format +i18n("PIN (for Private Job)"); +// xgettext: no-c-format +i18n("User Specified PIN"); +// xgettext: no-c-format +i18n("User Name"); +// xgettext: no-c-format +i18n("Use file sharing name"); +// xgettext: no-c-format +i18n("Forms"); +// xgettext: no-c-format +i18n("Custom user name"); +// xgettext: no-c-format +i18n("Job Name"); +// xgettext: no-c-format +i18n("Use Document Name"); +// xgettext: no-c-format +i18n("User Specified Job Name"); +// xgettext: no-c-format +i18n("US Letter (Small)"); +// xgettext: no-c-format +i18n("US Legal (Small)"); +// xgettext: no-c-format +i18n("A4 (Small)"); +// xgettext: no-c-format +i18n("JB5"); +// xgettext: no-c-format +i18n("Env ISO B5"); +// xgettext: no-c-format +i18n("Env Comm10"); +// xgettext: no-c-format +i18n("Env C5"); +// xgettext: no-c-format +i18n("Env DL"); +// xgettext: no-c-format +i18n("Env Monarch"); +// xgettext: no-c-format +i18n("Tray 3 (Optional)"); +// xgettext: no-c-format +i18n("Glossy Finish"); +// xgettext: no-c-format +i18n("Automatic PANTONE¨ Color Calibration"); +// xgettext: no-c-format +i18n("EuroScale"); +// xgettext: no-c-format +i18n("DIC"); +// xgettext: no-c-format +i18n("Manual Text"); +// xgettext: no-c-format +i18n("Calibrated-Detail"); +// xgettext: no-c-format +i18n("Calibrated-Smooth"); +// xgettext: no-c-format +i18n("Manual Graphics"); +// xgettext: no-c-format +i18n("Manual Image"); +// xgettext: no-c-format +i18n("Watermark/Overlay"); +// xgettext: no-c-format +i18n("Overlay"); +// xgettext: no-c-format +i18n("Watermark Pages"); +// xgettext: no-c-format +i18n("All"); +// xgettext: no-c-format +i18n("First Only"); +// xgettext: no-c-format +i18n("Watermark Text"); +// xgettext: no-c-format +i18n("Custom"); +// xgettext: no-c-format +i18n("Watermark Size (points)"); +// xgettext: no-c-format +i18n("90"); +// xgettext: no-c-format +i18n("75"); +// xgettext: no-c-format +i18n("60"); +// xgettext: no-c-format +i18n("45"); +// xgettext: no-c-format +i18n("30"); +// xgettext: no-c-format +i18n("15"); +// xgettext: no-c-format +i18n("0"); +// xgettext: no-c-format +i18n("Ð15"); +// xgettext: no-c-format +i18n("Ð30"); +// xgettext: no-c-format +i18n("Ð45"); +// xgettext: no-c-format +i18n("Ð60"); +// xgettext: no-c-format +i18n("Ð75"); +// xgettext: no-c-format +i18n("Ð90"); +// xgettext: no-c-format +i18n("Thin Outline"); +// xgettext: no-c-format +i18n("Thick Outline"); +// xgettext: no-c-format +i18n("Thick Outline with Halo"); +// xgettext: no-c-format +i18n("Filled"); +// xgettext: no-c-format +i18n("Watermark Color"); +// xgettext: no-c-format +i18n("Gray"); +// xgettext: no-c-format +i18n("Red"); +// xgettext: no-c-format +i18n("Orange"); +// xgettext: no-c-format +i18n("Yellow"); +// xgettext: no-c-format +i18n("Green"); +// xgettext: no-c-format +i18n("Blue"); +// xgettext: no-c-format +i18n("Violet"); +// xgettext: no-c-format +i18n("Watermark Intensity"); +// xgettext: no-c-format +i18n("Darkest"); +// xgettext: no-c-format +i18n("Darker"); +// xgettext: no-c-format +i18n("Medium Dark"); +// xgettext: no-c-format +i18n("Medium Light"); +// xgettext: no-c-format +i18n("Lighter"); +// xgettext: no-c-format +i18n("Lightest"); +// xgettext: no-c-format +i18n("Collate"); +// xgettext: no-c-format +i18n("On (turn off in application)"); +// xgettext: no-c-format +i18n("2000 sheet input Tray 4"); +// xgettext: no-c-format +i18n("Multi-Bin Mailbox"); +// xgettext: no-c-format +i18n("Printer hard disk"); +// xgettext: no-c-format +i18n("Printer Memory"); +// xgettext: no-c-format +i18n("Multi-Bin Mailbox Mode"); +// xgettext: no-c-format +i18n("Mailbox"); +// xgettext: no-c-format +i18n("Stacking"); +// xgettext: no-c-format +i18n("Job Separation"); +// xgettext: no-c-format +i18n("Color Mode"); +// xgettext: no-c-format +i18n("CMYK"); +// xgettext: no-c-format +i18n("Grayscale"); +// xgettext: no-c-format +i18n("Duplex"); +// xgettext: no-c-format +i18n("Duplex Tumble"); +// xgettext: no-c-format +i18n("Duplex (Two-Sided)"); +// xgettext: no-c-format +i18n("One Sided"); +// xgettext: no-c-format +i18n("ColorSmartCRD Text"); +// xgettext: no-c-format +i18n("Screen Match"); +// xgettext: no-c-format +i18n("OHT"); +// xgettext: no-c-format +i18n("ColorSmartCRD Graphics"); +// xgettext: no-c-format +i18n("ColorSmartCRD Images"); +// xgettext: no-c-format +i18n("HalftoneText"); +// xgettext: no-c-format +i18n("Halftone Graphics"); +// xgettext: no-c-format +i18n("Halftone Images"); +// xgettext: no-c-format +i18n("Cardstock"); +// xgettext: no-c-format +i18n("Heavy Media >= 28lbs"); +// xgettext: no-c-format +i18n("Envelope"); +// xgettext: no-c-format +i18n("28 Lb Type1"); +// xgettext: no-c-format +i18n("28 Lb Type2"); +// xgettext: no-c-format +i18n("Media Type First"); +// xgettext: no-c-format +i18n("Media Type Rest"); +// xgettext: no-c-format +i18n("Staple"); +// xgettext: no-c-format +i18n("Manual Feed (Tray 1)"); +// xgettext: no-c-format +i18n("Tray 4"); +// xgettext: no-c-format +i18n("Paper Source First"); +// xgettext: no-c-format +i18n("Paper Source Rest"); +// xgettext: no-c-format +i18n("Output Destination"); +// xgettext: no-c-format +i18n("Top Output Bin (Face-Down)"); +// xgettext: no-c-format +i18n("Left Output Bin (Face-Up)"); +// xgettext: no-c-format +i18n("Stacker"); +// xgettext: no-c-format +i18n("Job Separator"); +// xgettext: no-c-format +i18n("Mailbox 1"); +// xgettext: no-c-format +i18n("Mailbox 2"); +// xgettext: no-c-format +i18n("Mailbox 3"); +// xgettext: no-c-format +i18n("Mailbox 4"); +// xgettext: no-c-format +i18n("Mailbox 5"); +// xgettext: no-c-format +i18n("Mailbox 6"); +// xgettext: no-c-format +i18n("Mailbox 7"); +// xgettext: no-c-format +i18n("Mailbox 8"); +// xgettext: no-c-format +i18n("Page Size"); +// xgettext: no-c-format +i18n("Exec"); +// xgettext: no-c-format +i18n("11x17"); +// xgettext: no-c-format +i18n("Com-10"); +// xgettext: no-c-format +i18n("DL"); +// xgettext: no-c-format +i18n("Monarch"); +// xgettext: no-c-format +i18n("C5"); +// xgettext: no-c-format +i18n("JIS B5"); +// xgettext: no-c-format +i18n("JPostD"); +// xgettext: no-c-format +i18n("12x18"); +// xgettext: no-c-format +i18n("9x12"); +// xgettext: no-c-format +i18n("C4"); +// xgettext: no-c-format +i18n("N-UP AND WATERMARK SETTINGS"); +// xgettext: no-c-format +i18n(""); +// xgettext: no-c-format +i18n("(None)"); +// xgettext: no-c-format +i18n("Optional Tray 2"); +// xgettext: no-c-format +i18n("Optional Tray 4"); +// xgettext: no-c-format +i18n("1000 sheet input Tray 4"); +// xgettext: no-c-format +i18n("Accessory Output Bins"); +// xgettext: no-c-format +i18n("8 Bin Mailbox (Mailbox mode)"); +// xgettext: no-c-format +i18n("8 Bin Mailbox (Stacker-Separator-Collator)"); +// xgettext: no-c-format +i18n("HP 3000-Sheet Stapler-Stacker"); +// xgettext: no-c-format +i18n("HP 3000-Sheet Stacker"); +// xgettext: no-c-format +i18n("Enabled"); +// xgettext: no-c-format +i18n("Disabled"); +// xgettext: no-c-format +i18n("Color Treatment"); +// xgettext: no-c-format +i18n("High Print Quality"); +// xgettext: no-c-format +i18n("SWOP-Coated"); +// xgettext: no-c-format +i18n("Euroscale"); +// xgettext: no-c-format +i18n("Manually Print on 2nd Side"); +// xgettext: no-c-format +i18n("Manual Images"); +// xgettext: no-c-format +i18n("Private Stored Job"); +// xgettext: no-c-format +i18n("PrinterÕs Current Setting"); +// xgettext: no-c-format +i18n("Stacker-Separator-Collator"); +// xgettext: no-c-format +i18n("Stapler"); +// xgettext: no-c-format +i18n("Bin 1"); +// xgettext: no-c-format +i18n("Bin 2"); +// xgettext: no-c-format +i18n("Bin 3"); +// xgettext: no-c-format +i18n("Bin 4"); +// xgettext: no-c-format +i18n("Bin 5"); +// xgettext: no-c-format +i18n("Bin 6"); +// xgettext: no-c-format +i18n("Bin 7"); +// xgettext: no-c-format +i18n("Bin 8"); +// xgettext: no-c-format +i18n("Stapler Option"); +// xgettext: no-c-format +i18n("1 Staple, diagonal"); +// xgettext: no-c-format +i18n("1 Staple, parallel"); +// xgettext: no-c-format +i18n("2 Staples, parallel"); +// xgettext: no-c-format +i18n("3 Staples, parallel"); +// xgettext: no-c-format +i18n("6 Staples, parallel"); +// xgettext: no-c-format +i18n("JIS B4"); +// xgettext: no-c-format +i18n("A3 (Oversize 12x18.11)"); +// xgettext: no-c-format +i18n("Executive (JIS)"); +// xgettext: no-c-format +i18n("16K"); +// xgettext: no-c-format +i18n("8K"); +// xgettext: no-c-format +i18n("Double Postcard (JIS)"); +// xgettext: no-c-format +i18n("EconoMode"); +// xgettext: no-c-format +i18n("Total Memory"); +// xgettext: no-c-format +i18n("6 - 7 MB"); +// xgettext: no-c-format +i18n("8 - 11 MB"); +// xgettext: no-c-format +i18n("12 - 19 MB"); +// xgettext: no-c-format +i18n("20 - 27 MB"); +// xgettext: no-c-format +i18n("28 - 35 MB"); +// xgettext: no-c-format +i18n("36 MB or more"); +// xgettext: no-c-format +i18n("8.5 x 13"); +// xgettext: no-c-format +i18n("Postcard (JIS)"); +// xgettext: no-c-format +i18n("B5 (ISO)"); +// xgettext: no-c-format +i18n("Tray 1 (Manual)"); +// xgettext: no-c-format +i18n("Manual Duplex"); +// xgettext: no-c-format +i18n("Odd Pages"); +// xgettext: no-c-format +i18n("Even Pages"); +// xgettext: no-c-format +i18n("Levels of Gray"); +// xgettext: no-c-format +i18n("Enhanced"); +// xgettext: no-c-format +i18n("Standard"); +// xgettext: no-c-format +i18n("Resolution Enhancement"); +// xgettext: no-c-format +i18n("Optional Lower Tray"); +// xgettext: no-c-format +i18n("Optional Envelope Feeder"); +// xgettext: no-c-format +i18n("JCLOpenUI *JCLResolution"); +// xgettext: no-c-format +i18n("Legal Frame Size"); +// xgettext: no-c-format +i18n("Com-10 Env"); +// xgettext: no-c-format +i18n("Monarch Env"); +// xgettext: no-c-format +i18n("DL Env"); +// xgettext: no-c-format +i18n("C5 Env"); +// xgettext: no-c-format +i18n("B5 Env"); +// xgettext: no-c-format +i18n("Multipurpose Tray"); +// xgettext: no-c-format +i18n("Paper Cassette"); +// xgettext: no-c-format +i18n("Lower Cassette"); +// xgettext: no-c-format +i18n("Envelope Feeder"); +// xgettext: no-c-format +i18n("Rough"); +// xgettext: no-c-format +i18n("Duplex Unit"); +// xgettext: no-c-format +i18n("Printer Hard Disk"); +// xgettext: no-c-format +i18n("Total Printer Memory"); +// xgettext: no-c-format +i18n("4 - 7 MB"); +// xgettext: no-c-format +i18n(" Tray 1"); +// xgettext: no-c-format +i18n(" Tray 1 (Manual)"); +// xgettext: no-c-format +i18n(" Tray 2"); +// xgettext: no-c-format +i18n(" Tray 3"); +// xgettext: no-c-format +i18n(" Tray 4"); +// xgettext: no-c-format +i18n(" Envelope Feeder"); +// xgettext: no-c-format +i18n("Scale Patterns"); +// xgettext: no-c-format +i18n("Off (1-Sided)"); +// xgettext: no-c-format +i18n("Flip on Long Edge (Standard)"); +// xgettext: no-c-format +i18n("Flip on Short Edge"); +// xgettext: no-c-format +i18n("User"); +// xgettext: no-c-format +i18n("FastRes 1200"); +// xgettext: no-c-format +i18n("Number of Input Trays"); +// xgettext: no-c-format +i18n(" 2"); +// xgettext: no-c-format +i18n(" 3"); +// xgettext: no-c-format +i18n(" 4"); +// xgettext: no-c-format +i18n(" 5"); +// xgettext: no-c-format +i18n(" 6"); +// xgettext: no-c-format +i18n(" 7"); +// xgettext: no-c-format +i18n(" 8"); +// xgettext: no-c-format +i18n(" 9"); +// xgettext: no-c-format +i18n("12 - 15 MB"); +// xgettext: no-c-format +i18n("16 - 19 MB"); +// xgettext: no-c-format +i18n(" Tray 5"); +// xgettext: no-c-format +i18n(" Tray 6"); +// xgettext: no-c-format +i18n(" Tray 7"); +// xgettext: no-c-format +i18n(" Tray 8"); +// xgettext: no-c-format +i18n(" Tray 9"); +// xgettext: no-c-format +i18n(" Tray 10"); +// xgettext: no-c-format +i18n("ManualFeed"); +// xgettext: no-c-format +i18n("Page Protection"); +// xgettext: no-c-format +i18n(" 2 - 3 MB Total RAM"); +// xgettext: no-c-format +i18n(" 4 - 5 MB Total RAM"); +// xgettext: no-c-format +i18n(" 6 - 9 MB Total RAM"); +// xgettext: no-c-format +i18n("10 - 14 MB Total RAM"); +// xgettext: no-c-format +i18n("15 - 26 MB Total RAM"); +// xgettext: no-c-format +i18n("Upper Tray"); +// xgettext: no-c-format +i18n("Lower Tray"); +// xgettext: no-c-format +i18n("Long Edge Binding"); +// xgettext: no-c-format +i18n("Short Edge Binding"); +// xgettext: no-c-format +i18n("Upper - Face Down"); +// xgettext: no-c-format +i18n("Lower - Face Up"); +// xgettext: no-c-format +i18n("12 - 27 MB Total RAM"); +// xgettext: no-c-format +i18n("28 - 35 MB Total RAM"); +// xgettext: no-c-format +i18n("36 - 52 MB Total RAM"); +// xgettext: no-c-format +i18n("11x17 (Oversize)"); +// xgettext: no-c-format +i18n("ISO B5 Env"); +// xgettext: no-c-format +i18n("MP Tray"); +// xgettext: no-c-format +i18n("Printer<27>s Current Setting"); +// xgettext: no-c-format +i18n("Optional Lower Cassette"); +// xgettext: no-c-format +i18n("Optional Duplex Unit"); +// xgettext: no-c-format +i18n("Long-edge Binding"); +// xgettext: no-c-format +i18n("Short-edge Binding"); +// xgettext: no-c-format +i18n("500-Sheet Tray 3"); +// xgettext: no-c-format +i18n("12 MB or more"); +// xgettext: no-c-format +i18n("Vellum"); +// xgettext: no-c-format +i18n("11x17 (Oversize 12x18.5)"); +// xgettext: no-c-format +i18n("A3 (Oversize 312x440)"); +// xgettext: no-c-format +i18n("B4 (JIS)"); +// xgettext: no-c-format +i18n("B6 (JIS)"); +// xgettext: no-c-format +i18n("Tray 1 (MultiPurpose Tray)"); +// xgettext: no-c-format +i18n("Tray 2 (Paper Cassette)"); +// xgettext: no-c-format +i18n("Letter (8 1/2 x 11 in)"); +// xgettext: no-c-format +i18n("Legal (8 1/2 x 14 in)"); +// xgettext: no-c-format +i18n("A4 (210 x 297 mm)"); +// xgettext: no-c-format +i18n("Executive (7 1/4 x 10 1/2 in)"); +// xgettext: no-c-format +i18n("A5 (148 x 210 mm)"); +// xgettext: no-c-format +i18n("Com-10 Env (4 1/8 x 9 1/2 in)"); +// xgettext: no-c-format +i18n("Monarch Env (3 7/8 x 7 1/2 in)"); +// xgettext: no-c-format +i18n("DL Env (110 x 220 mm)"); +// xgettext: no-c-format +i18n("C5 Env (162 x 229 mm)"); +// xgettext: no-c-format +i18n("B5 Env (176 x 250 mm)"); +// xgettext: no-c-format +i18n("2000-Sheet Input Tray (Tray 4)"); +// xgettext: no-c-format +i18n("28 - 43 MB Total RAM"); +// xgettext: no-c-format +i18n("44 - 59 MB Total RAM"); +// xgettext: no-c-format +i18n("60 - 75 MB Total RAM"); +// xgettext: no-c-format +i18n("76 -100 MB Total RAM"); +// xgettext: no-c-format +i18n("Double Postcard"); +// xgettext: no-c-format +i18n("Page Region"); +// xgettext: no-c-format +i18n("Top Output Bin (Face Down)"); +// xgettext: no-c-format +i18n("Left Output Bin (Face Up)"); +// xgettext: no-c-format +i18n("Stacker (Face Down)"); +// xgettext: no-c-format +i18n("Job Seperator (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 1 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 2 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 3 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 4 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 5 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 6 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 7 (Face Down)"); +// xgettext: no-c-format +i18n("Mailbox 8 (Face Down)"); +// xgettext: no-c-format +i18n("Printer Resolution"); +// xgettext: no-c-format +i18n("600 dpi"); +// xgettext: no-c-format +i18n("300 dpi"); +// xgettext: no-c-format +i18n("Mailbox with Stapler"); +// xgettext: no-c-format +i18n("Mailbox with Stapler Mode"); +// xgettext: no-c-format +i18n("Job Separator (Face Down)"); +// xgettext: no-c-format +i18n("Stapler (Face Down)"); +// xgettext: no-c-format +i18n("3 MB"); +// xgettext: no-c-format +i18n("4 - 5 MB"); +// xgettext: no-c-format +i18n("6 MB or more"); +// xgettext: no-c-format +i18n("Top Bin"); +// xgettext: no-c-format +i18n("Left Bin (Face Up)"); +// xgettext: no-c-format +i18n("Stapler (max 50 Sheets)"); +// xgettext: no-c-format +i18n("Stapler Opposing (max 50)"); +// xgettext: no-c-format +i18n("Stapler (max 20 Letter or A4)"); +// xgettext: no-c-format +i18n("Collator"); +// xgettext: no-c-format +i18n("Stapling Options"); +// xgettext: no-c-format +i18n("One Staple Angled"); +// xgettext: no-c-format +i18n("One Staple"); +// xgettext: no-c-format +i18n("Two Staples"); +// xgettext: no-c-format +i18n("Three Staples"); +// xgettext: no-c-format +i18n("Six Staples"); +// xgettext: no-c-format +i18n("Administrator Defined"); +// xgettext: no-c-format +i18n("Tray 5"); +// xgettext: no-c-format +i18n("5 Bin Mailbox with Stapler"); +// xgettext: no-c-format +i18n("7 Bin Mailbox"); +// xgettext: no-c-format +i18n("8 Bin Mailbox"); +// xgettext: no-c-format +i18n("HP 3000-Sheet Stapler/Stacker"); +// xgettext: no-c-format +i18n("Standard Mailbox"); +// xgettext: no-c-format +i18n("20 - 23 MB"); +// xgettext: no-c-format +i18n("24 - 27 MB"); +// xgettext: no-c-format +i18n("11x17 (Oversize 11.7x17.7)"); +// xgettext: no-c-format +i18n("System Name (if available)"); +// xgettext: no-c-format +i18n(" 1"); +// xgettext: no-c-format +i18n("PIN digit 1 (for Private Job)"); +// xgettext: no-c-format +i18n("PIN digit 2 (for Private Job)"); +// xgettext: no-c-format +i18n("PIN digit 3 (for Private Job)"); +// xgettext: no-c-format +i18n("PIN digit 4 (for Private Job)"); +// xgettext: no-c-format +i18n("Edge-to-Edge Printing"); +// xgettext: no-c-format +i18n("32 - 39 MB"); +// xgettext: no-c-format +i18n("40 - 47 MB"); +// xgettext: no-c-format +i18n("48 - 55 MB"); +// xgettext: no-c-format +i18n("56 - 63 MB"); +// xgettext: no-c-format +i18n("64 - 71 MB"); +// xgettext: no-c-format +i18n("72 MB or more"); +// xgettext: no-c-format +i18n("Banner Printing"); +// xgettext: no-c-format +i18n("Manual Feeder"); +// xgettext: no-c-format +i18n("Standard Tray"); +// xgettext: no-c-format +i18n("Sheet Feeder"); +// xgettext: no-c-format +i18n("Bond Paper"); +// xgettext: no-c-format +i18n("Glossy Paper"); +// xgettext: no-c-format +i18n("HP Premium Paper"); +// xgettext: no-c-format +i18n("Quick-Dry Glossy"); +// xgettext: no-c-format +i18n("Quick-Dry Transparency"); +// xgettext: no-c-format +i18n("Transparency Film"); +// xgettext: no-c-format +i18n("75 DPI"); +// xgettext: no-c-format +i18n("150 DPI"); +// xgettext: no-c-format +i18n("300 DPI"); +// xgettext: no-c-format +i18n("600 DPI"); +// xgettext: no-c-format +i18n("600x300 DPI"); +// xgettext: no-c-format +i18n("Quality"); +// xgettext: no-c-format +i18n("Default Setting"); +// xgettext: no-c-format +i18n("Presentation"); +// xgettext: no-c-format +i18n("CMY"); +// xgettext: no-c-format +i18n("CMY+K"); +// xgettext: no-c-format +i18n("Model"); +// xgettext: no-c-format +i18n("DeskJet"); +// xgettext: no-c-format +i18n("DeskJet 310"); +// xgettext: no-c-format +i18n("DeskJet 320"); +// xgettext: no-c-format +i18n("DeskJet 340"); +// xgettext: no-c-format +i18n("DeskJet 400"); +// xgettext: no-c-format +i18n("DeskJet 500"); +// xgettext: no-c-format +i18n("DeskJet 500C"); +// xgettext: no-c-format +i18n("DeskJet 510"); +// xgettext: no-c-format +i18n("DeskJet 520"); +// xgettext: no-c-format +i18n("DeskJet 540"); +// xgettext: no-c-format +i18n("DeskJet 550C"); +// xgettext: no-c-format +i18n("DeskJet 560C"); +// xgettext: no-c-format +i18n("DeskJet 600"); +// xgettext: no-c-format +i18n("DeskJet 660C"); +// xgettext: no-c-format +i18n("DeskJet 670C"); +// xgettext: no-c-format +i18n("DeskJet 680C"); +// xgettext: no-c-format +i18n("DeskJet 690C"); +// xgettext: no-c-format +i18n("DeskJet 850C"); +// xgettext: no-c-format +i18n("DeskJet 855C"); +// xgettext: no-c-format +i18n("DeskJet 870C"); +// xgettext: no-c-format +i18n("DeskJet 890C"); +// xgettext: no-c-format +i18n("DeskJet 970C with Duplexer"); +// xgettext: no-c-format +i18n("DeskJet 1120C"); +// xgettext: no-c-format +i18n("DeskJet Plus"); +// xgettext: no-c-format +i18n("DeskJet Portable"); +// xgettext: no-c-format +i18n("Olivetti (Black sent after CMY)"); +// xgettext: no-c-format +i18n("Unspecified Model"); +// xgettext: no-c-format +i18n("Unspecified Old Model"); +// xgettext: no-c-format +i18n("Black Levels"); +// xgettext: no-c-format +i18n("2 Levels"); +// xgettext: no-c-format +i18n("3 Levels"); +// xgettext: no-c-format +i18n("4 Levels"); +// xgettext: no-c-format +i18n("No Black"); +// xgettext: no-c-format +i18n("CMY Levels"); +// xgettext: no-c-format +i18n("No CMY"); +// xgettext: no-c-format +i18n("Compression Method"); +// xgettext: no-c-format +i18n("Compressed Replacement Delta Row Encoding"); +// xgettext: no-c-format +i18n("Delta Row Compression"); +// xgettext: no-c-format +i18n("Runlength Encoding"); +// xgettext: no-c-format +i18n("Tagged Image File Format"); +// xgettext: no-c-format +i18n("Unencoded"); +// xgettext: no-c-format +i18n("Intensity Rendering"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Dithering"); +// xgettext: no-c-format +i18n("Half Tones"); +// xgettext: no-c-format +i18n("Printer-internal"); +// xgettext: no-c-format +i18n("Leading Edge"); +// xgettext: no-c-format +i18n("Long edge; left side of canonical page"); +// xgettext: no-c-format +i18n("Long edge; right side of canonical page"); +// xgettext: no-c-format +i18n("Short edge; bottom of canonical page"); +// xgettext: no-c-format +i18n("Short edge; top of canonical page"); +// xgettext: no-c-format +i18n("Generate only PCL with 'Configure Raster Data'"); +// xgettext: no-c-format +i18n("OnlyCRD"); +// xgettext: no-c-format +i18n("GeneralPCL"); +// xgettext: no-c-format +i18n("Print Head Passes per Line"); +// xgettext: no-c-format +i18n("1 Pass (Fastest)"); +// xgettext: no-c-format +i18n("2 Passes (50% of the dots/pass)"); +// xgettext: no-c-format +i18n("4 Passes (25% of the dots/pass)"); +// xgettext: no-c-format +i18n("PCL3GUI Language Mode"); +// xgettext: no-c-format +i18n("PCL3GUI"); +// xgettext: no-c-format +i18n("NoPCL3GUI"); +// xgettext: no-c-format +i18n("3x5"); +// xgettext: no-c-format +i18n("5x7"); +// xgettext: no-c-format +i18n("6x8"); +// xgettext: no-c-format +i18n("8x10"); +// xgettext: no-c-format +i18n("8x12"); +// xgettext: no-c-format +i18n("US A2 Invitation"); +// xgettext: no-c-format +i18n("A7"); +// xgettext: no-c-format +i18n("A8"); +// xgettext: no-c-format +i18n("A9"); +// xgettext: no-c-format +i18n("A10"); +// xgettext: no-c-format +i18n("B5 ISO"); +// xgettext: no-c-format +i18n("B5 JIS"); +// xgettext: no-c-format +i18n("B6 aka C4"); +// xgettext: no-c-format +i18n("B6 ISO"); +// xgettext: no-c-format +i18n("B6 JIS"); +// xgettext: no-c-format +i18n("B7 ISO"); +// xgettext: no-c-format +i18n("B7 JIS"); +// xgettext: no-c-format +i18n("B8 ISO"); +// xgettext: no-c-format +i18n("B8 JIS"); +// xgettext: no-c-format +i18n("B9 ISO"); +// xgettext: no-c-format +i18n("B9 JIS"); +// xgettext: no-c-format +i18n("B10 ISO"); +// xgettext: no-c-format +i18n("B10 JIS"); +// xgettext: no-c-format +i18n("C6"); +// xgettext: no-c-format +i18n("C7"); +// xgettext: no-c-format +i18n("C7 by C6"); +// xgettext: no-c-format +i18n("C8"); +// xgettext: no-c-format +i18n("C9"); +// xgettext: no-c-format +i18n("C10"); +// xgettext: no-c-format +i18n("US Commercial 10 Envelope"); +// xgettext: no-c-format +i18n("Crown Octavo"); +// xgettext: no-c-format +i18n("Crown Quarto"); +// xgettext: no-c-format +i18n("Demy Octavo"); +// xgettext: no-c-format +i18n("Epson 4x6 Photo Paper"); +// xgettext: no-c-format +i18n("American Foolscap"); +// xgettext: no-c-format +i18n("Hagaki Card"); +// xgettext: no-c-format +i18n("Half Letter"); +// xgettext: no-c-format +i18n("Large Crown Octavo"); +// xgettext: no-c-format +i18n("Large Crown Quarto"); +// xgettext: no-c-format +i18n("Japanese Long Envelope Number 3"); +// xgettext: no-c-format +i18n("Japanese Long Envelope Number 4"); +// xgettext: no-c-format +i18n("Oufuku Card"); +// xgettext: no-c-format +i18n("Penguin Small Paperback"); +// xgettext: no-c-format +i18n("Postcard"); +// xgettext: no-c-format +i18n("RA4"); +// xgettext: no-c-format +i18n("Royal Octavo"); +// xgettext: no-c-format +i18n("Small Paperback"); +// xgettext: no-c-format +i18n("Tray"); +// xgettext: no-c-format +i18n("Glossy/Photo"); +// xgettext: no-c-format +i18n("Premium"); +// xgettext: no-c-format +i18n("Quick-dry Photo"); +// xgettext: no-c-format +i18n("Quick-dry Transparency"); +// xgettext: no-c-format +i18n("Ghostscript Resolution"); +// xgettext: no-c-format +i18n("1200 DPI"); +// xgettext: no-c-format +i18n("150x150 DPI"); +// xgettext: no-c-format +i18n("300x300 DPI"); +// xgettext: no-c-format +i18n("600x600 DPI"); +// xgettext: no-c-format +i18n("Grayscale only"); +// xgettext: no-c-format +i18n("Image Type"); +// xgettext: no-c-format +i18n("Pure bw or prescreened (currently black-only)"); +// xgettext: no-c-format +i18n("Line art (color or gray scale)"); +// xgettext: no-c-format +i18n("Continuous-tone photographs (color or gray scale)"); +// xgettext: no-c-format +i18n("Primarily solid colors ro smooth gradients (color or gray scale)"); +// xgettext: no-c-format +i18n("Dithering Algorithm"); +// xgettext: no-c-format +i18n("Adaptive Hybrid"); +// xgettext: no-c-format +i18n("Adaptive Random"); +// xgettext: no-c-format +i18n("Hybrid Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Ordered"); +// xgettext: no-c-format +i18n("Random Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Very Fast"); +// xgettext: no-c-format +i18n("11x14"); +// xgettext: no-c-format +i18n("13x19"); +// xgettext: no-c-format +i18n("Arch A"); +// xgettext: no-c-format +i18n("Arch B"); +// xgettext: no-c-format +i18n("B4 ISO"); +// xgettext: no-c-format +i18n("B4 JIS"); +// xgettext: no-c-format +i18n("C3"); +// xgettext: no-c-format +i18n("Demy Quarto"); +// xgettext: no-c-format +i18n("European Foolscap"); +// xgettext: no-c-format +i18n("Japanese Kaku Envelope Number 4"); +// xgettext: no-c-format +i18n("RA3"); +// xgettext: no-c-format +i18n("Royal Quarto"); +// xgettext: no-c-format +i18n("SRA3"); +// xgettext: no-c-format +i18n("SRA4"); +// xgettext: no-c-format +i18n("Autoselect"); +// xgettext: no-c-format +i18n("Optional Source"); +// xgettext: no-c-format +i18n("Paper type"); +// xgettext: no-c-format +i18n("Bond paper"); +// xgettext: no-c-format +i18n("Glossy film"); +// xgettext: no-c-format +i18n("Plain paper"); +// xgettext: no-c-format +i18n("Special paper"); +// xgettext: no-c-format +i18n("Transparency film"); +// xgettext: no-c-format +i18n("Printing Quality"); +// xgettext: no-c-format +i18n("RET (Resolution Enhancement)"); +// xgettext: no-c-format +i18n("Manual Feeding"); +// xgettext: no-c-format +i18n("Double-Sided Printing"); +// xgettext: no-c-format +i18n("Long Edge (Standard)"); +// xgettext: no-c-format +i18n("Short Edge (Flip)"); +// xgettext: no-c-format +i18n("1200x600 DPI"); +// xgettext: no-c-format +i18n("GhostScript pre-filtering"); +// xgettext: no-c-format +i18n("Convert to PS level 1"); +// xgettext: no-c-format +i18n("Convert to PS level 2"); +// xgettext: no-c-format +i18n("No pre-filtering"); +// xgettext: no-c-format +i18n("Printer default"); +// xgettext: no-c-format +i18n("Tray 6"); +// xgettext: no-c-format +i18n("Tray 7"); +// xgettext: no-c-format +i18n("Printing Mode"); +// xgettext: no-c-format +i18n("Manual Feed of Paper"); +// xgettext: no-c-format +i18n("Binding for Double-Sided Pr."); +// xgettext: no-c-format +i18n("Long Edge"); +// xgettext: no-c-format +i18n("Short Edge"); +// xgettext: no-c-format +i18n("REt Setting"); +// xgettext: no-c-format +i18n("Density"); +// xgettext: no-c-format +i18n("Economy mode"); +// xgettext: no-c-format +i18n("Economy Mode"); +// xgettext: no-c-format +i18n("Standard Mode"); +// xgettext: no-c-format +i18n("Fast Res."); +// xgettext: no-c-format +i18n("Memory Booster Technology"); +// xgettext: no-c-format +i18n("Monochrome"); +// xgettext: no-c-format +i18n("Floyd-Steinberg dithered printing"); +// xgettext: no-c-format +i18n("Standard printing"); +// xgettext: no-c-format +i18n("Color mode"); +// xgettext: no-c-format +i18n("Contone (4096 colors)"); +// xgettext: no-c-format +i18n("Normal (8 colors)"); +// xgettext: no-c-format +i18n("16x20"); +// xgettext: no-c-format +i18n("16x24"); +// xgettext: no-c-format +i18n("Black and White"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Color (Low Memory)"); +// xgettext: no-c-format +i18n("Floyd-Steinberg Gray"); +// xgettext: no-c-format +i18n("Normal Color"); +// xgettext: no-c-format +i18n("Raster Graphics Quality"); +// xgettext: no-c-format +i18n("High"); +// xgettext: no-c-format +i18n("Black, draft quality, ink economy mode"); +// xgettext: no-c-format +i18n("Black, normal quality"); +// xgettext: no-c-format +i18n("Color, best quality, optional color correction"); +// xgettext: no-c-format +i18n("Color, best quality, black ink disabled, optional color correction"); +// xgettext: no-c-format +i18n("Color, draft quality, ink economy, fast dither, no color correction"); +// xgettext: no-c-format +i18n("Color, normal quality, optional color correction"); +// xgettext: no-c-format +i18n("Color, normal quality, black ink disabled, optional color correction"); +// xgettext: no-c-format +i18n("Do not use Color Correction"); +// xgettext: no-c-format +i18n("DisableColorCorrection"); +// xgettext: no-c-format +i18n("EnableColorCorrection"); +// xgettext: no-c-format +i18n("Choice of Ghostscript Driver"); +// xgettext: no-c-format +i18n("Attempts to choose best PNM format for document; not always reliable."); +// xgettext: no-c-format +i18n("Attempts to choose best monochrome PNM format for document; not always reliable."); +// xgettext: no-c-format +i18n("A fast monochrome format; best for B&W text and line images."); +// xgettext: no-c-format +i18n("256-shade greyscale format"); +// xgettext: no-c-format +i18n("Format for color images (includes monochrome)."); +// xgettext: no-c-format +i18n("Force left-to-right print sweeps only (reduce striping)"); +// xgettext: no-c-format +i18n("Unidirectional"); +// xgettext: no-c-format +i18n("Bidirectional"); +// xgettext: no-c-format +i18n("Ink Reduction"); +// xgettext: no-c-format +i18n("25 %"); +// xgettext: no-c-format +i18n("25 % with Gamma Correction"); +// xgettext: no-c-format +i18n("50 %"); +// xgettext: no-c-format +i18n("50 % with Gamma Correction"); +// xgettext: no-c-format +i18n("600x600 DPI monochrome"); +// xgettext: no-c-format +i18n("A6 (Post card)"); +// xgettext: no-c-format +i18n("Photo (4 x 6 in., 10 x 15 cm)"); +// xgettext: no-c-format +i18n("300 DPI Grayscale"); +// xgettext: no-c-format +i18n("300 DPI Normal"); +// xgettext: no-c-format +i18n("300 DPI Photo"); +// xgettext: no-c-format +i18n("600 DPI Photo"); +// xgettext: no-c-format +i18n("Use Postcards"); +// xgettext: no-c-format +i18n("Postcards"); +// xgettext: no-c-format +i18n("Sheets"); +// xgettext: no-c-format +i18n("Rendering type"); +// xgettext: no-c-format +i18n("Snap black to white, others to black"); +// xgettext: no-c-format +i18n("Cluster ordered dither"); +// xgettext: no-c-format +i18n("Monochrome cluster ordered dither"); +// xgettext: no-c-format +i18n("Driver does dithering"); +// xgettext: no-c-format +i18n("Error diffusion"); +// xgettext: no-c-format +i18n("Monochrome error diffusion"); +// xgettext: no-c-format +i18n("Ordered dithering"); +// xgettext: no-c-format +i18n("Monochrome ordered dithering"); +// xgettext: no-c-format +i18n("Snap to primaries"); +// xgettext: no-c-format +i18n("Best Quality Color"); +// xgettext: no-c-format +i18n("Desktop CSF"); +// xgettext: no-c-format +i18n("Desktop Sheet Feeder"); +// xgettext: no-c-format +i18n("Portable Sheet Feeder"); +// xgettext: no-c-format +i18n("Ink Type"); +// xgettext: no-c-format +i18n("Color + Black Cartridges"); +// xgettext: no-c-format +i18n("Color + Photo Cartridges"); +// xgettext: no-c-format +i18n("300 DPI Color"); +// xgettext: no-c-format +i18n("300 DPI Draft"); +// xgettext: no-c-format +i18n("On (Flip on Long Edge)"); +// xgettext: no-c-format +i18n("On (Flip on Short Edge)"); +// xgettext: no-c-format +i18n("600 DPI Normal"); +// xgettext: no-c-format +i18n("Special"); +// xgettext: no-c-format +i18n("Transparent"); +// xgettext: no-c-format +i18n("Quality Type"); +// xgettext: no-c-format +i18n("Double-sided printing"); +// xgettext: no-c-format +i18n("Behavior when Toner Low"); +// xgettext: no-c-format +i18n("Continue Printing"); +// xgettext: no-c-format +i18n("Stop Printing"); +// xgettext: no-c-format +i18n("Job Offset"); +// xgettext: no-c-format +i18n("Cassette"); +// xgettext: no-c-format +i18n("First"); +// xgettext: no-c-format +i18n("90 DPI"); +// xgettext: no-c-format +i18n("180 DPI"); +// xgettext: no-c-format +i18n("16MB RAM"); +// xgettext: no-c-format +i18n("32MB RAM"); +// xgettext: no-c-format +i18n("48MB RAM"); +// xgettext: no-c-format +i18n("64MB RAM"); +// xgettext: no-c-format +i18n("80MB RAM"); +// xgettext: no-c-format +i18n("96MB RAM"); +// xgettext: no-c-format +i18n("128MB RAM"); +// xgettext: no-c-format +i18n("144MB RAM"); +// xgettext: no-c-format +i18n("160MB RAM"); +// xgettext: no-c-format +i18n("192MB - 224MB RAM"); +// xgettext: no-c-format +i18n("256MB - 512MB RAM"); +// xgettext: no-c-format +i18n("Drawer Base"); +// xgettext: no-c-format +i18n("DB-208 (3 Trays)"); +// xgettext: no-c-format +i18n("DB-608 (2 Trays)"); +// xgettext: no-c-format +i18n("DB-208A (1 Tray)"); +// xgettext: no-c-format +i18n("Finisher Installed"); +// xgettext: no-c-format +i18n("FS-105"); +// xgettext: no-c-format +i18n("400dpi"); +// xgettext: no-c-format +i18n("Edge Smoothing"); +// xgettext: no-c-format +i18n("Text Only"); +// xgettext: no-c-format +i18n("All Objects"); +// xgettext: no-c-format +i18n("Print Density"); +// xgettext: no-c-format +i18n("Toner Save"); +// xgettext: no-c-format +i18n("OHP Transparency"); +// xgettext: no-c-format +i18n("Thin Paper"); +// xgettext: no-c-format +i18n("Thick Paper"); +// xgettext: no-c-format +i18n("Duplex Mode"); +// xgettext: no-c-format +i18n("Sort"); +// xgettext: no-c-format +i18n("Group"); +// xgettext: no-c-format +i18n("Special Modes"); +// xgettext: no-c-format +i18n("2-in-1"); +// xgettext: no-c-format +i18n("Booklet"); +// xgettext: no-c-format +i18n("Stapling"); +// xgettext: no-c-format +i18n("Single (Portrait)"); +// xgettext: no-c-format +i18n("Single (Landscape)"); +// xgettext: no-c-format +i18n("Double Side (Portrait)"); +// xgettext: no-c-format +i18n("Double Side (Landscape)"); +// xgettext: no-c-format +i18n("Double Top (Portrait)"); +// xgettext: no-c-format +i18n("Double Top (Landscape)"); +// xgettext: no-c-format +i18n("Wait Mode"); +// xgettext: no-c-format +i18n("Front Cover"); +// xgettext: no-c-format +i18n("Printed"); +// xgettext: no-c-format +i18n("Blank"); +// xgettext: no-c-format +i18n("Front Cover Tray"); +// xgettext: no-c-format +i18n("Back Cover"); +// xgettext: no-c-format +i18n("Cover Tray"); +// xgettext: no-c-format +i18n("Manual Feed (Thick)"); +// xgettext: no-c-format +i18n("Middle"); +// xgettext: no-c-format +i18n("Output Order"); +// xgettext: no-c-format +i18n("Half-letter (5 1/2 x 8 1/2 in)"); +// xgettext: no-c-format +i18n("Letter (8 1/2 x 11 in)"); +// xgettext: no-c-format +i18n("Legal (8 1/2 x 14 in)"); +// xgettext: no-c-format +i18n("Tabloid (11 x 17 in)"); +// xgettext: no-c-format +i18n("F4"); +// xgettext: no-c-format +i18n("Half-letter"); +// xgettext: no-c-format +i18n("No Finisher"); +// xgettext: no-c-format +i18n("FS-106"); +// xgettext: no-c-format +i18n("FS-108B (BookletMaker)"); +// xgettext: no-c-format +i18n("PI-108"); +// xgettext: no-c-format +i18n("Large Capacity Tray"); +// xgettext: no-c-format +i18n("Tandem Configuration"); +// xgettext: no-c-format +i18n("Fold & Stitch"); +// xgettext: no-c-format +i18n("Fold only"); +// xgettext: no-c-format +i18n("Fold & Saddle Stitch"); +// xgettext: no-c-format +i18n("Wait"); +// xgettext: no-c-format +i18n("Wait with Proof"); +// xgettext: no-c-format +i18n("Back Cover Tray"); +// xgettext: no-c-format +i18n("Tandem Printing"); +// xgettext: no-c-format +i18n("Normal Mode (Auto Select)"); +// xgettext: no-c-format +i18n("Split Mode (Auto Split)"); +// xgettext: no-c-format +i18n("Split Mode (Equal Split)"); +// xgettext: no-c-format +i18n("Print Engine Select (Printer 1)"); +// xgettext: no-c-format +i18n("Print Engine Select (Printer 2)"); +// xgettext: no-c-format +i18n("EcoPrint"); +// xgettext: no-c-format +i18n("PF-8 Paper Feeder"); +// xgettext: no-c-format +i18n("Memory"); +// xgettext: no-c-format +i18n("1MB Upgrade"); +// xgettext: no-c-format +i18n("2MB Upgrade"); +// xgettext: no-c-format +i18n("4MB Upgrade"); +// xgettext: no-c-format +i18n("300 Dots per Inch (dpi)"); +// xgettext: no-c-format +i18n("KIR"); +// xgettext: no-c-format +i18n("Envelope #6"); +// xgettext: no-c-format +i18n("Envelope #9"); +// xgettext: no-c-format +i18n("Cassette 1 (Internal)"); +// xgettext: no-c-format +i18n("Cassette 2"); +// xgettext: no-c-format +i18n("Auto Tray Switch"); +// xgettext: no-c-format +i18n("1.6.0 [08-13-99]"); +// xgettext: no-c-format +i18n("PF-16 Paper Feeder"); +// xgettext: no-c-format +i18n("8MB Upgrade"); +// xgettext: no-c-format +i18n("16MB Upgrade"); +// xgettext: no-c-format +i18n("32MB Upgrade"); +// xgettext: no-c-format +i18n("600 Dots per Inch (dpi)"); +// xgettext: no-c-format +i18n("1.6.1 [02-28-2000]"); +// xgettext: no-c-format +i18n("PF-4 Paper Feeder"); +// xgettext: no-c-format +i18n("3MB Upgrade"); +// xgettext: no-c-format +i18n("PF-17 Paper Feeder"); +// xgettext: no-c-format +i18n("Optional Disk"); +// xgettext: no-c-format +i18n("PostCard"); +// xgettext: no-c-format +i18n("DoublePostCard"); +// xgettext: no-c-format +i18n("Multi-Purpose Feeder"); +// xgettext: no-c-format +i18n("Job Spooling"); +// xgettext: no-c-format +i18n("Optional Feeder"); +// xgettext: no-c-format +i18n("PF-21 Paper Feeders"); +// xgettext: no-c-format +i18n("One"); +// xgettext: no-c-format +i18n("Two"); +// xgettext: no-c-format +i18n("Output Device"); +// xgettext: no-c-format +i18n("SO-6 Bulk Sorter"); +// xgettext: no-c-format +i18n("ST-20 Bulk Stacker"); +// xgettext: no-c-format +i18n("12MB Upgrade"); +// xgettext: no-c-format +i18n("20MB Upgrade"); +// xgettext: no-c-format +i18n("24MB Upgrade"); +// xgettext: no-c-format +i18n("36MB Upgrade"); +// xgettext: no-c-format +i18n("40MB Upgrade"); +// xgettext: no-c-format +i18n("48MB Upgrade"); +// xgettext: no-c-format +i18n("64MB Upgrade"); +// xgettext: no-c-format +i18n("Cassette 3"); +// xgettext: no-c-format +i18n("Custom 1"); +// xgettext: no-c-format +i18n("Custom 2"); +// xgettext: no-c-format +i18n("Custom 3"); +// xgettext: no-c-format +i18n("Custom 4"); +// xgettext: no-c-format +i18n("Custom 5"); +// xgettext: no-c-format +i18n("Custom 6"); +// xgettext: no-c-format +i18n("Custom 7"); +// xgettext: no-c-format +i18n("Custom 8"); +// xgettext: no-c-format +i18n("Top Tray (Face-Down)"); +// xgettext: no-c-format +i18n("Rear Tray (Face-Up)"); +// xgettext: no-c-format +i18n("Stacker Mode (Face-Down)"); +// xgettext: no-c-format +i18n("Sorter Mode (Face-Down)"); +// xgettext: no-c-format +i18n("Collator Mode (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 1 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 2 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 3 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 4 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 5 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 6 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 7 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 8 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 9 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 10 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 11 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 12 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 13 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 14 (Face-Down)"); +// xgettext: no-c-format +i18n("Mailbox 15 (Face-Down)"); +// xgettext: no-c-format +i18n("Duplexing"); +// xgettext: no-c-format +i18n("Temporary"); +// xgettext: no-c-format +i18n("EF-1 Envelope Feeder"); +// xgettext: no-c-format +i18n("UF-1 Universal Feeder"); +// xgettext: no-c-format +i18n("PF-7 Bulk Feeder"); +// xgettext: no-c-format +i18n("PF-5 Paper Feeders"); +// xgettext: no-c-format +i18n("HS-3 Bulk Stacker"); +// xgettext: no-c-format +i18n("Bulk Feeder"); +// xgettext: no-c-format +i18n("Universal Feeder"); +// xgettext: no-c-format +i18n("Stacker Mode (Face-Up)"); +// xgettext: no-c-format +i18n("5MB Upgrade"); +// xgettext: no-c-format +i18n("6MB Upgrade"); +// xgettext: no-c-format +i18n("9MB Upgrade"); +// xgettext: no-c-format +i18n("10MB Upgrade"); +// xgettext: no-c-format +i18n("17MB Upgrade"); +// xgettext: no-c-format +i18n("18MB Upgrade"); +// xgettext: no-c-format +i18n("33MB Upgrade"); +// xgettext: no-c-format +i18n("34MB Upgrade"); +// xgettext: no-c-format +i18n("PF-7E Bulk Feeder"); +// xgettext: no-c-format +i18n("PF-20 Paper Feeders"); +// xgettext: no-c-format +i18n("HS-3E Bulk Stacker"); +// xgettext: no-c-format +i18n("60MB Upgrade"); +// xgettext: no-c-format +i18n("1200 Dots per Inch (dpi)"); +// xgettext: no-c-format +i18n("PF-1 Paper Feeder"); +// xgettext: no-c-format +i18n("Cassette 1"); +// xgettext: no-c-format +i18n("7MB Upgrade"); +// xgettext: no-c-format +i18n("13MB Upgrade"); +// xgettext: no-c-format +i18n("PF-2 Paper Feeder"); +// xgettext: no-c-format +i18n("11x17 (Ledger)"); +// xgettext: no-c-format +i18n("Side Tray (Face-Up)"); +// xgettext: no-c-format +i18n("PF-80 Paper Feeder"); +// xgettext: no-c-format +i18n("Process Color (CMYK)"); +// xgettext: no-c-format +i18n("Quick Color (CMY)"); +// xgettext: no-c-format +i18n("Color Matching"); +// xgettext: no-c-format +i18n("Simulate Display"); +// xgettext: no-c-format +i18n("Side Tray (Face-Down)"); +// xgettext: no-c-format +i18n("Permanent"); +// xgettext: no-c-format +i18n("Barcode"); +// xgettext: no-c-format +i18n("First Page"); +// xgettext: no-c-format +i18n("Barcode ID"); +// xgettext: no-c-format +i18n("Barcode Position"); +// xgettext: no-c-format +i18n("Upper Left"); +// xgettext: no-c-format +i18n("Upper Right"); +// xgettext: no-c-format +i18n("Lower Left"); +// xgettext: no-c-format +i18n("Lower Right"); +// xgettext: no-c-format +i18n("Upper Left Vertical"); +// xgettext: no-c-format +i18n("Upper Right Vertical"); +// xgettext: no-c-format +i18n("Lower Left Vertical"); +// xgettext: no-c-format +i18n("Lower Right Vertical"); +// xgettext: no-c-format +i18n("PF-81 Paper Feeder"); +// xgettext: no-c-format +i18n("Color Correction"); +// xgettext: no-c-format +i18n("Application Corrected"); +// xgettext: no-c-format +i18n("Printer Corrected"); +// xgettext: no-c-format +i18n("Ink Simulation (CMYK)"); +// xgettext: no-c-format +i18n("Euroscale Press"); +// xgettext: no-c-format +i18n("SWOP Press"); +// xgettext: no-c-format +i18n("Monitor Simulation (RGB)"); +// xgettext: no-c-format +i18n("SMPTE240M"); +// xgettext: no-c-format +i18n("sRGB (HDTV)"); +// xgettext: no-c-format +i18n("Trinitron"); +// xgettext: no-c-format +i18n("Apple RGB"); +// xgettext: no-c-format +i18n("NTSC"); +// xgettext: no-c-format +i18n("Duplex Paper"); +// xgettext: no-c-format +i18n("Coated Paper"); +// xgettext: no-c-format +i18n("Temporary (RAM Disk)"); +// xgettext: no-c-format +i18n("Temporary (Hard Disk)"); +// xgettext: no-c-format +i18n("Permanent (Hard Disk)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (Administrator)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 1)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 2)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 3)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 4)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 5)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 6)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 7)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 8)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 9)"); +// xgettext: no-c-format +i18n("Virtual Mailbox (User 10)"); +// xgettext: no-c-format +i18n("PF-26 Paper Feeders"); +// xgettext: no-c-format +i18n("PF-9 Paper Feeders"); +// xgettext: no-c-format +i18n("11MB Upgrade"); +// xgettext: no-c-format +i18n("15MB Upgrade"); +// xgettext: no-c-format +i18n("19MB Upgrade"); +// xgettext: no-c-format +i18n("23MB Upgrade"); +// xgettext: no-c-format +i18n("31MB Upgrade"); +// xgettext: no-c-format +i18n("35MB Upgrade"); +// xgettext: no-c-format +i18n("39MB Upgrade"); +// xgettext: no-c-format +i18n("47MB Upgrade"); +// xgettext: no-c-format +i18n("63MB Upgrade"); +// xgettext: no-c-format +i18n("PF-25 Paper Feeders"); +// xgettext: no-c-format +i18n("38MB Upgrade"); +// xgettext: no-c-format +i18n("PF-30 Paper Feeders"); +// xgettext: no-c-format +i18n("One (2 Cassettes)"); +// xgettext: no-c-format +i18n("Two (4 Cassettes)"); +// xgettext: no-c-format +i18n("Three (6 Cassettes)"); +// xgettext: no-c-format +i18n("SO-30 Bulk Sorter"); +// xgettext: no-c-format +i18n("ST-30 Bulk Stacker"); +// xgettext: no-c-format +i18n("DF-30 Document Finisher"); +// xgettext: no-c-format +i18n("Cassette 4"); +// xgettext: no-c-format +i18n("Cassette 5"); +// xgettext: no-c-format +i18n("Cassette 6"); +// xgettext: no-c-format +i18n("Staple Method"); +// xgettext: no-c-format +i18n("Staple Job up to 20 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 20 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 19 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 18 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 17 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 16 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 15 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 14 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 13 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 12 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 11 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 10 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 9 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 8 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 7 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 6 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 5 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 4 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 3 Sheets"); +// xgettext: no-c-format +i18n("Staple Every 2 Sheets"); +// xgettext: no-c-format +i18n("DF-31 Document Finisher"); +// xgettext: no-c-format +i18n("44MB Upgrade"); +// xgettext: no-c-format +i18n("Lower Tray - Option"); +// xgettext: no-c-format +i18n("Envelope Feeder - Option"); +// xgettext: no-c-format +i18n("Printer Memory - Option"); +// xgettext: no-c-format +i18n("1.5 Mb Printer Memory"); +// xgettext: no-c-format +i18n("2.5 Mb Printer Memory"); +// xgettext: no-c-format +i18n("4 Mb Printer Memory"); +// xgettext: no-c-format +i18n("C9 Envelope"); +// xgettext: no-c-format +i18n("B5 Envelope"); +// xgettext: no-c-format +i18n("Manual Envelope"); +// xgettext: no-c-format +i18n("Manual Paper"); +// xgettext: no-c-format +i18n("Tray Linking"); +// xgettext: no-c-format +i18n("2 Mb Printer Memory"); +// xgettext: no-c-format +i18n("3 Mb Printer Memory"); +// xgettext: no-c-format +i18n("5+ Mb Printer Memory"); +// xgettext: no-c-format +i18n("Smoothing"); +// xgettext: no-c-format +i18n("Other Envelope"); +// xgettext: no-c-format +i18n("Duplex - Option"); +// xgettext: no-c-format +i18n("Simplex"); +// xgettext: no-c-format +i18n("Duplex - Long Edge"); +// xgettext: no-c-format +i18n("Duplex - Short Edge"); +// xgettext: no-c-format +i18n("Flash Memory Card - Option"); +// xgettext: no-c-format +i18n("Printer Hard Disk - Option"); +// xgettext: no-c-format +i18n("2 MB Printer Memory"); +// xgettext: no-c-format +i18n("4 MB Printer Memory"); +// xgettext: no-c-format +i18n("6 MB Printer Memory"); +// xgettext: no-c-format +i18n("8 MB Printer Memory"); +// xgettext: no-c-format +i18n("10 MB Printer Memory"); +// xgettext: no-c-format +i18n("12 MB Printer Memory"); +// xgettext: no-c-format +i18n("16 MB Printer Memory"); +// xgettext: no-c-format +i18n("8 Mb Printer Memory"); +// xgettext: no-c-format +i18n("12 Mb Printer Memory"); +// xgettext: no-c-format +i18n("16 Mb Printer Memory"); +// xgettext: no-c-format +i18n("Printer Software Version"); +// xgettext: no-c-format +i18n("250.0x"); +// xgettext: no-c-format +i18n("250.2x"); +// xgettext: no-c-format +i18n("360 dpi"); +// xgettext: no-c-format +i18n("High Quality"); +// xgettext: no-c-format +i18n("Bold Black"); +// xgettext: no-c-format +i18n("Screening"); +// xgettext: no-c-format +i18n("Color Balance"); +// xgettext: no-c-format +i18n("Blue Adjust"); +// xgettext: no-c-format +i18n("Line Art && Text"); +// xgettext: no-c-format +i18n("Images"); +// xgettext: no-c-format +i18n("Color Model"); +// xgettext: no-c-format +i18n("RGB"); +// xgettext: no-c-format +i18n("Image Brightness"); +// xgettext: no-c-format +i18n("+5"); +// xgettext: no-c-format +i18n("+10"); +// xgettext: no-c-format +i18n("+15"); +// xgettext: no-c-format +i18n("+20"); +// xgettext: no-c-format +i18n("+25"); +// xgettext: no-c-format +i18n("+30"); +// xgettext: no-c-format +i18n("+35"); +// xgettext: no-c-format +i18n("+40"); +// xgettext: no-c-format +i18n("+45"); +// xgettext: no-c-format +i18n("+50"); +// xgettext: no-c-format +i18n("Image Contrast"); +// xgettext: no-c-format +i18n("20 MB Printer Memory"); +// xgettext: no-c-format +i18n("32 or more MB Printer Memory"); +// xgettext: no-c-format +i18n("Pause Mode"); +// xgettext: no-c-format +i18n("ColorGrade"); +// xgettext: no-c-format +i18n("Image Diffusion"); +// xgettext: no-c-format +i18n("Oversize 11.7 x 22 in"); +// xgettext: no-c-format +i18n("Duplexer - Option"); +// xgettext: no-c-format +i18n("Tray 3 - Option"); +// xgettext: no-c-format +i18n("Feeder 2 - Option"); +// xgettext: no-c-format +i18n("1 MB Flash Memory"); +// xgettext: no-c-format +i18n("2 MB Flash Memory"); +// xgettext: no-c-format +i18n("4 MB Flash Memory"); +// xgettext: no-c-format +i18n("18 MB Printer Memory"); +// xgettext: no-c-format +i18n("24 MB Printer Memory"); +// xgettext: no-c-format +i18n("Print Darkness"); +// xgettext: no-c-format +i18n("1200 dpi"); +// xgettext: no-c-format +i18n("Feeder"); +// xgettext: no-c-format +i18n("Feeder 2"); +// xgettext: no-c-format +i18n("Tray 2 - Option"); +// xgettext: no-c-format +i18n("32 MB Printer Memory"); +// xgettext: no-c-format +i18n("64 MB Printer Memory"); +// xgettext: no-c-format +i18n("96 MB Printer Memory"); +// xgettext: no-c-format +i18n("128 MB Printer Memory"); +// xgettext: no-c-format +i18n("Toner Saver"); +// xgettext: no-c-format +i18n("Image Smoothing"); +// xgettext: no-c-format +i18n("Colored Paper"); +// xgettext: no-c-format +i18n("Custom Type 1"); +// xgettext: no-c-format +i18n("Custom Type 2"); +// xgettext: no-c-format +i18n("Custom Type 3"); +// xgettext: no-c-format +i18n("Custom Type 4"); +// xgettext: no-c-format +i18n("Port Rotation"); +// xgettext: no-c-format +i18n("Collate Copies"); +// xgettext: no-c-format +i18n("Top"); +// xgettext: no-c-format +i18n("Rear"); +// xgettext: no-c-format +i18n("Black & White"); +// xgettext: no-c-format +i18n("Display"); +// xgettext: no-c-format +i18n("1200 Image Quality"); +// xgettext: no-c-format +i18n("B5 182 x 257 mm"); +// xgettext: no-c-format +i18n("A5 148 x 210 mm"); +// xgettext: no-c-format +i18n("B4 257 x 364 mm"); +// xgettext: no-c-format +i18n("A3 297 x 419 mm"); +// xgettext: no-c-format +i18n("Universal 11.7 x 17 in"); +// xgettext: no-c-format +i18n("7 3/4 Envelope 3 7/8 x 7 1/2 in"); +// xgettext: no-c-format +i18n("9 Envelope 3 7/8 x 8 7/8 in"); +// xgettext: no-c-format +i18n("10 Envelope 4 1/8 x 9 1/2 in"); +// xgettext: no-c-format +i18n("DL Envelope 110 x 220 mm"); +// xgettext: no-c-format +i18n("C5 Envelope 162 x 229 mm"); +// xgettext: no-c-format +i18n("B5 Envelope 176 x 250 mm"); +// xgettext: no-c-format +i18n("Other Envelope 8 1/2 x 14 in"); +// xgettext: no-c-format +i18n("Universal"); +// xgettext: no-c-format +i18n("Comm10"); +// xgettext: no-c-format +i18n("ISOB5"); +// xgettext: no-c-format +i18n("Other"); +// xgettext: no-c-format +i18n("MP Feeder"); +// xgettext: no-c-format +i18n("36 MB Printer Memory"); +// xgettext: no-c-format +i18n("68 or more MB Printer Memory"); +// xgettext: no-c-format +i18n("Left Cartridge"); +// xgettext: no-c-format +i18n("Unknown Cartridge"); +// xgettext: no-c-format +i18n("Standard Black Cartridge"); +// xgettext: no-c-format +i18n("High Capacity Black Cartridge"); +// xgettext: no-c-format +i18n("Photo Cartridge"); +// xgettext: no-c-format +i18n("Right Cartridge"); +// xgettext: no-c-format +i18n("Standard Color Cartridge"); +// xgettext: no-c-format +i18n("High Capacity Color Cartridge"); +// xgettext: no-c-format +i18n("Greeting Card"); +// xgettext: no-c-format +i18n("Iron On"); +// xgettext: no-c-format +i18n("Photo Paper"); +// xgettext: no-c-format +i18n("QuickPrint"); +// xgettext: no-c-format +i18n("Universal 8 1/2 x 14 in"); +// xgettext: no-c-format +i18n("40 MB Printer Memory"); +// xgettext: no-c-format +i18n("72 or more MB Printer Memory"); +// xgettext: no-c-format +i18n("SA3 320 x 450 mm"); +// xgettext: no-c-format +i18n("Universal 12.6 x 22 in"); +// xgettext: no-c-format +i18n("SA3"); +// xgettext: no-c-format +i18n("Duplex Option - Option"); +// xgettext: no-c-format +i18n("Fax Card"); +// xgettext: no-c-format +i18n("Printer Setting"); +// xgettext: no-c-format +i18n("Black && White"); +// xgettext: no-c-format +i18n("2 Color Draft"); +// xgettext: no-c-format +i18n("Image Enhancement"); +// xgettext: no-c-format +i18n("PictureGrade"); +// xgettext: no-c-format +i18n("Custom Type 5"); +// xgettext: no-c-format +i18n("Custom Type 6"); +// xgettext: no-c-format +i18n("14 MB Printer Memory"); +// xgettext: no-c-format +i18n("28 MB Printer Memory"); +// xgettext: no-c-format +i18n("Toner Darkness"); +// xgettext: no-c-format +i18n("Printer's default"); +// xgettext: no-c-format +i18n("Tray 4 - Option"); +// xgettext: no-c-format +i18n("Tray 5 - Option"); +// xgettext: no-c-format +i18n("MP Feeder - Option"); +// xgettext: no-c-format +i18n("Number of Output Bins - Option"); +// xgettext: no-c-format +i18n("Standard Bin Only"); +// xgettext: no-c-format +i18n("1 Extra Bin"); +// xgettext: no-c-format +i18n("2 Extra Bins"); +// xgettext: no-c-format +i18n("3 Extra Bins"); +// xgettext: no-c-format +i18n("4 Extra Bins"); +// xgettext: no-c-format +i18n("5 Extra Bins"); +// xgettext: no-c-format +i18n("6 Extra Bins"); +// xgettext: no-c-format +i18n("7 Extra Bins"); +// xgettext: no-c-format +i18n("8 Extra Bins"); +// xgettext: no-c-format +i18n("9 Extra Bins"); +// xgettext: no-c-format +i18n("10 Extra Bins"); +// xgettext: no-c-format +i18n("11 Extra Bins"); +// xgettext: no-c-format +i18n("12 Extra Bins"); +// xgettext: no-c-format +i18n("13 Extra Bins"); +// xgettext: no-c-format +i18n("14 Extra Bins"); +// xgettext: no-c-format +i18n("15 Extra Bins"); +// xgettext: no-c-format +i18n("22 MB Printer Memory"); +// xgettext: no-c-format +i18n("Standard Bin"); +// xgettext: no-c-format +i18n("Bin 9"); +// xgettext: no-c-format +i18n("Bin 10"); +// xgettext: no-c-format +i18n("Bin 11"); +// xgettext: no-c-format +i18n("Bin 12"); +// xgettext: no-c-format +i18n("Bin 13"); +// xgettext: no-c-format +i18n("Bin 14"); +// xgettext: no-c-format +i18n("Bin 15"); +// xgettext: no-c-format +i18n("250-Sheet Drawer"); +// xgettext: no-c-format +i18n("500-Sheet Drawer"); +// xgettext: no-c-format +i18n("2000-Sheet Drawer"); +// xgettext: no-c-format +i18n("1 - Output Expander"); +// xgettext: no-c-format +i18n("1 - Hi-Capacity Output Expander"); +// xgettext: no-c-format +i18n("2 - 2 Output Expanders"); +// xgettext: no-c-format +i18n("2 - 1 Hi-Capacity + 1 Output Expander"); +// xgettext: no-c-format +i18n("3 - 3 Output Expanders"); +// xgettext: no-c-format +i18n("5 - 5-Bin Mailbox"); +// xgettext: no-c-format +i18n("6 - 1 Output Expander + 1 5-Bin Mailbox"); +// xgettext: no-c-format +i18n("6 - 1 5-Bin Mailbox + 1 Output Expander"); +// xgettext: no-c-format +i18n("10 - 2 5-Bin Mailboxes"); +// xgettext: no-c-format +i18n("Other Envelope 9.02 x 14 in"); +// xgettext: no-c-format +i18n("Color Registration"); +// xgettext: no-c-format +i18n("High Speed"); +// xgettext: no-c-format +i18n("Finish Quality"); +// xgettext: no-c-format +i18n("Medium Gloss"); +// xgettext: no-c-format +i18n("High Gloss"); +// xgettext: no-c-format +i18n("Low Gloss"); +// xgettext: no-c-format +i18n("Contone"); +// xgettext: no-c-format +i18n("Stochastic"); +// xgettext: no-c-format +i18n("Multipurpose Feeder"); +// xgettext: no-c-format +i18n("3 MB Printer Memory"); +// xgettext: no-c-format +i18n("Manual Feed Paper Type"); +// xgettext: no-c-format +i18n("Tray 1 Paper Type"); +// xgettext: no-c-format +i18n("Tray 2 Paper Type"); +// xgettext: no-c-format +i18n("1200 Quality"); +// xgettext: no-c-format +i18n("Paper Input Drawer - Option"); +// xgettext: no-c-format +i18n("Finisher - Option"); +// xgettext: no-c-format +i18n("Custom 11.7 x 17.7 in"); +// xgettext: no-c-format +i18n("Upper (Tray 1)"); +// xgettext: no-c-format +i18n("Lower (Tray 2)"); +// xgettext: no-c-format +i18n("Input Drawer (Tray 3)"); +// xgettext: no-c-format +i18n("No Tray Linking"); +// xgettext: no-c-format +i18n("Link Tray 1+2"); +// xgettext: no-c-format +i18n("Link Tray 1+2+3"); +// xgettext: no-c-format +i18n("Link Tray 2+3"); +// xgettext: no-c-format +i18n("Bin 0 (Top)"); +// xgettext: no-c-format +i18n("Bin 1 (Side)"); +// xgettext: no-c-format +i18n("Staple 1"); +// xgettext: no-c-format +i18n("Staple 2"); +// xgettext: no-c-format +i18n("Do Not Care"); +// xgettext: no-c-format +i18n("26 MB Printer Memory"); +// xgettext: no-c-format +i18n("Images Only"); +// xgettext: no-c-format +i18n("Entire Page"); +// xgettext: no-c-format +i18n("2500-Sheet Drawer"); +// xgettext: no-c-format +i18n("Mailbox - Option"); +// xgettext: no-c-format +i18n("Hole Punch"); +// xgettext: no-c-format +i18n("Offset Pages"); +// xgettext: no-c-format +i18n("Between Copies"); +// xgettext: no-c-format +i18n("Universal 11.69 x 17 in"); +// xgettext: no-c-format +i18n("300x1200 DPI"); +// xgettext: no-c-format +i18n("300x600 DPI"); +// xgettext: no-c-format +i18n("600x1200 DPI"); +// xgettext: no-c-format +i18n("1200x1200 DPI"); +// xgettext: no-c-format +i18n("1200x300 DPI"); +// xgettext: no-c-format +i18n("Normal Quality Color (4-ink)"); +// xgettext: no-c-format +i18n("Photo Quality Color (6-ink)"); +// xgettext: no-c-format +i18n("Bidirectional printing"); +// xgettext: no-c-format +i18n("off"); +// xgettext: no-c-format +i18n("on"); +// xgettext: no-c-format +i18n("300 dpi x 600 dpi"); +// xgettext: no-c-format +i18n("600 dpi x 600 dpi"); +// xgettext: no-c-format +i18n("1200 dpi x 600 dpi"); +// xgettext: no-c-format +i18n("Color"); +// xgettext: no-c-format +i18n("Page Drying Time"); +// xgettext: no-c-format +i18n("0 sec"); +// xgettext: no-c-format +i18n("10 sec."); +// xgettext: no-c-format +i18n("20 sec."); +// xgettext: no-c-format +i18n("30 sec."); +// xgettext: no-c-format +i18n("40 sec."); +// xgettext: no-c-format +i18n("50 sec"); +// xgettext: no-c-format +i18n("60 sec"); +// xgettext: no-c-format +i18n("300x300 dpi"); +// xgettext: no-c-format +i18n("300x600 dpi"); +// xgettext: no-c-format +i18n("600x1200 dpi"); +// xgettext: no-c-format +i18n("600x600 dpi"); +// xgettext: no-c-format +i18n("1200x1200 dpi"); +// xgettext: no-c-format +i18n("Optional Multi-Feeder"); +// xgettext: no-c-format +i18n("6 MB"); +// xgettext: no-c-format +i18n("7 MB"); +// xgettext: no-c-format +i18n("8 MB"); +// xgettext: no-c-format +i18n("10 MB"); +// xgettext: no-c-format +i18n("11 MB"); +// xgettext: no-c-format +i18n("12 MB"); +// xgettext: no-c-format +i18n("14 MB"); +// xgettext: no-c-format +i18n("18 MB"); +// xgettext: no-c-format +i18n("19 MB"); +// xgettext: no-c-format +i18n("20 MB"); +// xgettext: no-c-format +i18n("22 MB"); +// xgettext: no-c-format +i18n("26 MB"); +// xgettext: no-c-format +i18n("34 MB"); +// xgettext: no-c-format +i18n("Legal14"); +// xgettext: no-c-format +i18n("Legal13"); +// xgettext: no-c-format +i18n("Com10"); +// xgettext: no-c-format +i18n("Com9"); +// xgettext: no-c-format +i18n("Multi Feeder"); +// xgettext: no-c-format +i18n("TraySwitch"); +// xgettext: no-c-format +i18n("4 MB"); +// xgettext: no-c-format +i18n("5 MB"); +// xgettext: no-c-format +i18n("600x1200dpi"); +// xgettext: no-c-format +i18n("Multi-Feeder"); +// xgettext: no-c-format +i18n("2 MB"); +// xgettext: no-c-format +i18n("4MB"); +// xgettext: no-c-format +i18n("5MB"); +// xgettext: no-c-format +i18n("6MB"); +// xgettext: no-c-format +i18n("7MB"); +// xgettext: no-c-format +i18n("8MB"); +// xgettext: no-c-format +i18n("10MB"); +// xgettext: no-c-format +i18n("11MB"); +// xgettext: no-c-format +i18n("12MB"); +// xgettext: no-c-format +i18n("14MB"); +// xgettext: no-c-format +i18n("18MB"); +// xgettext: no-c-format +i18n("19MB"); +// xgettext: no-c-format +i18n("20MB"); +// xgettext: no-c-format +i18n("22MB"); +// xgettext: no-c-format +i18n("26MB"); +// xgettext: no-c-format +i18n("34MB"); +// xgettext: no-c-format +i18n("35MB"); +// xgettext: no-c-format +i18n("36MB"); +// xgettext: no-c-format +i18n("38MB"); +// xgettext: no-c-format +i18n("42MB"); +// xgettext: no-c-format +i18n("50MB"); +// xgettext: no-c-format +i18n("66MB"); +// xgettext: no-c-format +i18n("Env10"); +// xgettext: no-c-format +i18n("Env9"); +// xgettext: no-c-format +i18n("EnvDL"); +// xgettext: no-c-format +i18n("EnvC4"); +// xgettext: no-c-format +i18n("EnvC5"); +// xgettext: no-c-format +i18n("EnvMonarch"); +// xgettext: no-c-format +i18n("OKHalftoneMode"); +// xgettext: no-c-format +i18n("Regular"); +// xgettext: no-c-format +i18n("Photo"); +// xgettext: no-c-format +i18n("2.5 MB"); +// xgettext: no-c-format +i18n("3.5 MB"); +// xgettext: no-c-format +i18n("4.5 MB"); +// xgettext: no-c-format +i18n("6.5 MB"); +// xgettext: no-c-format +i18n("10.5 MB"); +// xgettext: no-c-format +i18n("18.5 MB"); +// xgettext: no-c-format +i18n("Post Card"); +// xgettext: no-c-format +i18n("Cardboard"); +// xgettext: no-c-format +i18n("Coated Film"); +// xgettext: no-c-format +i18n("Fine Paper"); +// xgettext: no-c-format +i18n("Iron Seal"); +// xgettext: no-c-format +i18n("OHP"); +// xgettext: no-c-format +i18n("OHP (MD 2000)"); +// xgettext: no-c-format +i18n("Rebeca Free"); +// xgettext: no-c-format +i18n("Color Depth"); +// xgettext: no-c-format +i18n("Floyd Steinb. High Qual. (32 bpp)"); +// xgettext: no-c-format +i18n("Floyd Steinberg Simple (8 bpp)"); +// xgettext: no-c-format +i18n("Monochrome (1 bpp)"); +// xgettext: no-c-format +i18n("Simple Color (4 bpp)"); +// xgettext: no-c-format +i18n("Dithering"); +// xgettext: no-c-format +i18n("DoubleSided"); +// xgettext: no-c-format +i18n("SingleSided"); +// xgettext: no-c-format +i18n("Black toner saving"); +// xgettext: no-c-format +i18n("EcoBlack"); +// xgettext: no-c-format +i18n("NormalBlack"); +// xgettext: no-c-format +i18n("60x144 dpi"); +// xgettext: no-c-format +i18n("60x72 dpi"); +// xgettext: no-c-format +i18n("120x144 dpi"); +// xgettext: no-c-format +i18n("120x72 dpi"); +// xgettext: no-c-format +i18n("240x144 dpi"); +// xgettext: no-c-format +i18n("240x72 dpi"); +// xgettext: no-c-format +i18n("60x180 dpi"); +// xgettext: no-c-format +i18n("60x216 dpi"); +// xgettext: no-c-format +i18n("60x60 dpi"); +// xgettext: no-c-format +i18n("120x180 dpi"); +// xgettext: no-c-format +i18n("120x216 dpi"); +// xgettext: no-c-format +i18n("120x60 dpi"); +// xgettext: no-c-format +i18n("180x180 dpi"); +// xgettext: no-c-format +i18n("180x216 dpi"); +// xgettext: no-c-format +i18n("180x60 dpi"); +// xgettext: no-c-format +i18n("180x72 dpi"); +// xgettext: no-c-format +i18n("240x180 dpi"); +// xgettext: no-c-format +i18n("240x216 dpi"); +// xgettext: no-c-format +i18n("240x60 dpi"); +// xgettext: no-c-format +i18n("360x180 dpi"); +// xgettext: no-c-format +i18n("360x216 dpi"); +// xgettext: no-c-format +i18n("360x60 dpi"); +// xgettext: no-c-format +i18n("360x72 dpi"); +// xgettext: no-c-format +i18n("72x72 dpi"); +// xgettext: no-c-format +i18n("144x144 dpi"); +// xgettext: no-c-format +i18n("Paper Size"); +// xgettext: no-c-format +i18n("Paper Tray"); +// xgettext: no-c-format +i18n("Paper Weight"); +// xgettext: no-c-format +i18n("Heavier paper (28lb)"); +// xgettext: no-c-format +i18n("Heaviest paper (32lb)"); +// xgettext: no-c-format +i18n("Heavy paper (24lb)"); +// xgettext: no-c-format +i18n("Light Paper (20lb)"); +// xgettext: no-c-format +i18n("Lightest Paper (16lb)"); +// xgettext: no-c-format +i18n("Darkness"); +// xgettext: no-c-format +i18n("Rendering Mode"); +// xgettext: no-c-format +i18n("Graphics Mode"); +// xgettext: no-c-format +i18n("Text Mode"); +// xgettext: no-c-format +i18n("US Executive"); +// xgettext: no-c-format +i18n("Special Paper"); +// xgettext: no-c-format +i18n("Envelope Feed"); +// xgettext: no-c-format +i18n("Output Mode"); +// xgettext: no-c-format +i18n("CMYK Color"); +// xgettext: no-c-format +i18n("CMY Color"); +// xgettext: no-c-format +i18n("CRET Color"); +// xgettext: no-c-format +i18n("Duplexer"); +// xgettext: no-c-format +i18n("Address - 1 1/8 x 3 1/2\""); +// xgettext: no-c-format +i18n("Large Address - 1 4/10 x 3 1/2\""); +// xgettext: no-c-format +i18n("Return Address - 3/4 x 2\""); +// xgettext: no-c-format +i18n("Shipping Address - 2 5/16 x 4\""); +// xgettext: no-c-format +i18n("Internet Postage 2-Part - 2 1/4 x 7 1/2\""); +// xgettext: no-c-format +i18n("Internet Postage 3-Part - 2 1/4 x 7\""); +// xgettext: no-c-format +i18n("File Folder - 9/16 x 3 7/16\""); +// xgettext: no-c-format +i18n("Hanging Folder - 9/16 x 2\""); +// xgettext: no-c-format +i18n("3.5\" Disk - 2 1/8 x 2 3/4\""); +// xgettext: no-c-format +i18n("136 DPI"); +// xgettext: no-c-format +i18n("203 DPI"); +// xgettext: no-c-format +i18n("Output Darkness"); +// xgettext: no-c-format +i18n("FanFoldUS"); +// xgettext: no-c-format +i18n("60 DPI"); +// xgettext: no-c-format +i18n("120x60 DPI"); +// xgettext: no-c-format +i18n("360x180 DPI"); +// xgettext: no-c-format +i18n("360 DPI"); +// xgettext: no-c-format +i18n("60x72 DPI"); +// xgettext: no-c-format +i18n("120x72 DPI"); +// xgettext: no-c-format +i18n("240x72 DPI"); +// xgettext: no-c-format +i18n("720 DPI"); +// xgettext: no-c-format +i18n("Page Size and Printing Quality"); +// xgettext: no-c-format +i18n("A4, 600x600 DPI"); +// xgettext: no-c-format +i18n("A4, 1200x600 DPI"); +// xgettext: no-c-format +i18n("B5, 600x600 DPI"); +// xgettext: no-c-format +i18n("B5, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 600x600 DPI"); +// xgettext: no-c-format +i18n("Legal, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 600x600 DPI"); +// xgettext: no-c-format +i18n("Letter, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Back Print Media"); +// xgettext: no-c-format +i18n("High Grade Paper"); +// xgettext: no-c-format +i18n("Iron-On Transfer Sheet"); +// xgettext: no-c-format +i18n("Hot OHP Media"); +// xgettext: no-c-format +i18n("BlackOnly"); +// xgettext: no-c-format +i18n("HalfTone"); +// xgettext: no-c-format +i18n("NoHalfTone"); +// xgettext: no-c-format +i18n("FloydSteinberg"); +// xgettext: no-c-format +i18n("NoFloydSteinberg"); +// xgettext: no-c-format +i18n("Banding"); +// xgettext: no-c-format +i18n("NoBanding"); +// xgettext: no-c-format +i18n("Color Mode"); +// xgettext: no-c-format +i18n("Do Curl Correction"); +// xgettext: no-c-format +i18n("CurlCorrectionAlways"); +// xgettext: no-c-format +i18n("CurlCorrectionAfterFinal"); +// xgettext: no-c-format +i18n("Color Correction Mode"); +// xgettext: no-c-format +i18n("FullBlack"); +// xgettext: no-c-format +i18n("Next Job"); +// xgettext: no-c-format +i18n("NextJobOnSameSheet"); +// xgettext: no-c-format +i18n("NextJobOnNewSheet"); +// xgettext: no-c-format +i18n("Next Job is spot color page"); +// xgettext: no-c-format +i18n("NextSpotColorPage"); +// xgettext: no-c-format +i18n("NextNotSpotColorPage"); +// xgettext: no-c-format +i18n("Color correction"); +// xgettext: no-c-format +i18n("NoColorCorrection"); +// xgettext: no-c-format +i18n("ColorCorrection"); +// xgettext: no-c-format +i18n("Curl Correction on current pass"); +// xgettext: no-c-format +i18n("NoCurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("CurlCorrectionOnCurrent"); +// xgettext: no-c-format +i18n("How often every dot is printed"); +// xgettext: no-c-format +i18n("PrintTwice"); +// xgettext: no-c-format +i18n("PrintOnce"); +// xgettext: no-c-format +i18n("Black Printing Mode"); +// xgettext: no-c-format +i18n("SolidBlack"); +// xgettext: no-c-format +i18n("MixedBlack"); +// xgettext: no-c-format +i18n("Square Dithering"); +// xgettext: no-c-format +i18n("SquareDithering"); +// xgettext: no-c-format +i18n("NoSquareDithering"); +// xgettext: no-c-format +i18n("This Job is spot color page"); +// xgettext: no-c-format +i18n("ThisSpotColorPage"); +// xgettext: no-c-format +i18n("ThisNotSpotColorPage"); +// xgettext: no-c-format +i18n("300 DPI Normal, color and black cartr."); +// xgettext: no-c-format +i18n("300 DPI Normal, color cartr. only"); +// xgettext: no-c-format +i18n("A4, Color"); +// xgettext: no-c-format +i18n("A4, Grayscale"); +// xgettext: no-c-format +i18n("Letter, Color"); +// xgettext: no-c-format +i18n("Letter, Grayscale"); +// xgettext: no-c-format +i18n("Device"); +// xgettext: no-c-format +i18n("Link stylewriter in dev directory (set it to the appropriate device)"); +// xgettext: no-c-format +i18n("Serial Port #1 (Linux)"); +// xgettext: no-c-format +i18n("Serial Port #2 (Linux)"); +// xgettext: no-c-format +i18n("Serial Port #1 (NetBSD)"); +// xgettext: no-c-format +i18n("Serial Port #2 (NetBSD)"); +// xgettext: no-c-format +i18n("Pass output to device set by the spooler"); +// xgettext: no-c-format +i18n("Label Size"); +// xgettext: no-c-format +i18n("2.25x7.5in, 59x190mm (Lever archive - large)"); +// xgettext: no-c-format +i18n("1.4x7.5in, 38x190mm (Lever archive - small)"); +// xgettext: no-c-format +i18n("2.125x4.0in, 54x101mm (Shipping badge)"); +// xgettext: no-c-format +i18n("2.125x2.75in, 54x70mm (Diskette)"); +// xgettext: no-c-format +i18n("1.4x3.5in, 36x89mm (Large address)"); +// xgettext: no-c-format +i18n("1.125x3.5in, 28x89mm (Standard address)"); +// xgettext: no-c-format +i18n("0.5x2in, 12x50mm (Suspension file)"); +// xgettext: no-c-format +i18n("0.75x5.875in, 19x147mm (Video tape spine)"); +// xgettext: no-c-format +i18n("1.8x3.1in, 46x78mm (Video tape top)"); +// xgettext: no-c-format +i18n("Dual"); +// xgettext: no-c-format +i18n("Thicker Paper"); +// xgettext: no-c-format +i18n("Toner Saving"); +// xgettext: no-c-format +i18n("High (50%)"); +// xgettext: no-c-format +i18n("Low (25%)"); +// xgettext: no-c-format +i18n("2400x600 DPI"); +// xgettext: no-c-format +i18n("180x360 dpi"); +// xgettext: no-c-format +i18n("360x360 dpi"); +// xgettext: no-c-format +i18n("Media Weight"); +// xgettext: no-c-format +i18n("Normal paper"); +// xgettext: no-c-format +i18n("Thick paper"); +// xgettext: no-c-format +i18n("Draft Quality"); +// xgettext: no-c-format +i18n("Normal Quality"); +// xgettext: no-c-format +i18n("Ghostscript Bits Per Pixel"); +// xgettext: no-c-format +i18n("Monochrome (1bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript dithering (8bpp)"); +// xgettext: no-c-format +i18n("CMYK with Ghostscript FS dithering (16bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (24 bpp)"); +// xgettext: no-c-format +i18n("CMYK with FS dithering (32 bpp)"); +// xgettext: no-c-format +i18n("Mode"); +// xgettext: no-c-format +i18n("Four-color CMYK"); +// xgettext: no-c-format +i18n("Greyscale"); +// xgettext: no-c-format +i18n("Three-color RGB"); +// xgettext: no-c-format +i18n("Colors to be used"); +// xgettext: no-c-format +i18n("Cyan only"); +// xgettext: no-c-format +i18n("Cyan, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Black"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Cyan, Yellow"); +// xgettext: no-c-format +i18n("Cyan, Yellow, Black"); +// xgettext: no-c-format +i18n("Black only"); +// xgettext: no-c-format +i18n("Black for any color"); +// xgettext: no-c-format +i18n("Magenta only"); +// xgettext: no-c-format +i18n("Magenta, Black"); +// xgettext: no-c-format +i18n("Magenta, Yellow"); +// xgettext: no-c-format +i18n("Magenta, Yellow, Black"); +// xgettext: no-c-format +i18n("Yellow only"); +// xgettext: no-c-format +i18n("Yellow, Black"); +// xgettext: no-c-format +i18n("Auto Sheet Feeder"); +// xgettext: no-c-format +i18n("Manual without Pause"); +// xgettext: no-c-format +i18n("Manual with Pause"); +// xgettext: no-c-format +i18n("Back Print Film"); +// xgettext: no-c-format +i18n("Fabric Sheets"); +// xgettext: no-c-format +i18n("Glossy Photo Cards"); +// xgettext: no-c-format +i18n("Glossy Photo Paper"); +// xgettext: no-c-format +i18n("High Gloss Film"); +// xgettext: no-c-format +i18n("High Resolution Paper"); +// xgettext: no-c-format +i18n("Photo Paper Pro"); +// xgettext: no-c-format +i18n("T-Shirt Transfers"); +// xgettext: no-c-format +i18n("Black"); +// xgettext: no-c-format +i18n("1440 DPI"); +// xgettext: no-c-format +i18n("1440x720 DPI"); +// xgettext: no-c-format +i18n("180x180 DPI"); +// xgettext: no-c-format +i18n("360x360 DPI"); +// xgettext: no-c-format +i18n("720x360 DPI"); +// xgettext: no-c-format +i18n("360×360dpi, back print film"); +// xgettext: no-c-format +i18n("360×360dpi, coated paper"); +// xgettext: no-c-format +i18n("360×360dpi, fabric sheet"); +// xgettext: no-c-format +i18n("360×360dpi, glossy paper"); +// xgettext: no-c-format +i18n("360×360dpi, high gloss film"); +// xgettext: no-c-format +i18n("360×360dpi, high resolution paper"); +// xgettext: no-c-format +i18n("360×360dpi, plain paper"); +// xgettext: no-c-format +i18n("360×360dpi, plain paper, high speed"); +// xgettext: no-c-format +i18n("360×360dpi, transparency film"); +// xgettext: no-c-format +i18n("720 dpi"); +// xgettext: no-c-format +i18n("Black and Color"); +// xgettext: no-c-format +i18n("Photo and Color"); +// xgettext: no-c-format +i18n("360x360 DPI DMT"); +// xgettext: no-c-format +i18n("720x720 DPI"); +// xgettext: no-c-format +i18n("Low Quality"); +// xgettext: no-c-format +i18n("720×720dpi, back print film"); +// xgettext: no-c-format +i18n("720×720dpi, coated paper"); +// xgettext: no-c-format +i18n("720×720dpi, glossy paper"); +// xgettext: no-c-format +i18n("720×720dpi, high-gloss paper"); +// xgettext: no-c-format +i18n("720×720dpi, high resolution paper"); +// xgettext: no-c-format +i18n("720×720dpi, plain paper"); +// xgettext: no-c-format +i18n("720×720dpi, transparency film"); +// xgettext: no-c-format +i18n("Black and Photo catridges"); +// xgettext: no-c-format +i18n("600×600dpi, iron-on transfer sheets, normal quality"); +// xgettext: no-c-format +i18n("600×600dpi, plain paper, normal quality"); +// xgettext: no-c-format +i18n("600×600dpi, transparencies, normal quality"); +// xgettext: no-c-format +i18n("1200×1200dpi, glossy photo cards, high quality"); +// xgettext: no-c-format +i18n("1200×1200dpi, high gloss photo paper, high quality"); +// xgettext: no-c-format +i18n("1200×1200dpi, professional photo paper, highest quality"); +// xgettext: no-c-format +i18n("300x300 DPI DMT"); +// xgettext: no-c-format +i18n("600x600 DPI DMT"); +// xgettext: no-c-format +i18n("Monochrome, fast"); +// xgettext: no-c-format +i18n("Monochrome, Floyd-Steinberg"); +// xgettext: no-c-format +i18n("ESC/P2 Encoding"); +// xgettext: no-c-format +i18n("Delta Row"); +// xgettext: no-c-format +i18n("Run Length"); +// xgettext: no-c-format +i18n("Uncompressed"); +// xgettext: no-c-format +i18n("Preconfiguration file"); +// xgettext: no-c-format +i18n("stcolor"); +// xgettext: no-c-format +i18n("none"); +// xgettext: no-c-format +i18n("Head motion"); +// xgettext: no-c-format +i18n("Initialization values for dithering"); +// xgettext: no-c-format +i18n("Uniform"); +// xgettext: no-c-format +i18n("Random"); +// xgettext: no-c-format +i18n("Weaving"); +// xgettext: no-c-format +i18n("Microweave (Printer internal)"); +// xgettext: no-c-format +i18n("Softweave (Driver internal)"); +// xgettext: no-c-format +i18n("360×360dpi, 32-bit CMYK"); +// xgettext: no-c-format +i18n("3360×360dpi, 4-bit, PostScript halftoning, weaved"); +// xgettext: no-c-format +i18n("720×720dpi, 32-bit CMYK, weaved"); +// xgettext: no-c-format +i18n("Color, Floyd-Steinberg, CMYK, better"); +// xgettext: no-c-format +i18n("Color, fast, CMYK"); +// xgettext: no-c-format +i18n("Color, modif. Floyd-Steinberg, CMYK, faster"); +// xgettext: no-c-format +i18n("Color, fast, RGB"); +// xgettext: no-c-format +i18n("Color, Floyd-Steinberg, RGB"); +// xgettext: no-c-format +i18n("Color, Floyd-Steinberg, CMYK, simpler"); +// xgettext: no-c-format +i18n("Color, Stefan-Singer algorithm, RGB"); +// xgettext: no-c-format +i18n("Back Light Film"); +// xgettext: no-c-format +i18n("Glossy Film"); +// xgettext: no-c-format +i18n("Inkjet Paper"); +// xgettext: no-c-format +i18n("Matte Paper"); +// xgettext: no-c-format +i18n("Photo Quality Glossy Paper"); +// xgettext: no-c-format +i18n("Photo Quality Inkjet Paper"); +// xgettext: no-c-format +i18n("Plain Paper Fast Load"); +// xgettext: no-c-format +i18n("Premium Glossy Photo Paper"); +// xgettext: no-c-format +i18n("720 DPI Microweave"); +// xgettext: no-c-format +i18n("360 DPI High Quality"); +// xgettext: no-c-format +i18n("360 DPI Softweave"); +// xgettext: no-c-format +i18n("720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("720 DPI High Quality"); +// xgettext: no-c-format +i18n("720 DPI Softweave"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Emulated"); +// xgettext: no-c-format +i18n("1440 x 2880 DPI Emulated"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Highest Quality"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Softweave"); +// xgettext: no-c-format +i18n("B3 ISO"); +// xgettext: no-c-format +i18n("B3 JIS"); +// xgettext: no-c-format +i18n("RA2"); +// xgettext: no-c-format +i18n("360 dpi, plain paper"); +// xgettext: no-c-format +i18n("720 dpi, plain paper"); +// xgettext: no-c-format +i18n("1440×720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("360×360dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("720×720dpi, inkjet paper"); +// xgettext: no-c-format +i18n("720×720dpi, plain paper, grayscale"); +// xgettext: no-c-format +i18n("1440×720dpi, inkjet paper, grayscale"); +// xgettext: no-c-format +i18n("720x720dpi, plain paper"); +// xgettext: no-c-format +i18n("360×360dpi"); +// xgettext: no-c-format +i18n("720×720dpi"); +// xgettext: no-c-format +i18n("Four color CMYK printing"); +// xgettext: no-c-format +i18n("Six color CMYKcm printing"); +// xgettext: no-c-format +i18n("75x75 dpi"); +// xgettext: no-c-format +i18n("150x150 dpi"); +// xgettext: no-c-format +i18n("2-passes x-weaving"); +// xgettext: no-c-format +i18n("3-passes x-weaving"); +// xgettext: no-c-format +i18n("2400 DPI"); +// xgettext: no-c-format +i18n("Reset printer before printing"); +// xgettext: no-c-format +i18n("NoReset"); +// xgettext: no-c-format +i18n("Reset"); +// xgettext: no-c-format +i18n("Power saving mode after printing"); +// xgettext: no-c-format +i18n("PowerSaving"); +// xgettext: no-c-format +i18n("NoPowerSaving"); +// xgettext: no-c-format +i18n("Bits per R/G/B component"); +// xgettext: no-c-format +i18n("HalfLetter"); +// xgettext: no-c-format +i18n("B6-C4"); +// xgettext: no-c-format +i18n("C7-6"); +// xgettext: no-c-format +i18n("ArchA"); +// xgettext: no-c-format +i18n("flsa"); +// xgettext: no-c-format +i18n("flse"); +// xgettext: no-c-format +i18n("Small paperback"); +// xgettext: no-c-format +i18n("Penguin small paperback"); +// xgettext: no-c-format +i18n("Penguin large paperback"); +// xgettext: no-c-format +i18n("Long 3"); +// xgettext: no-c-format +i18n("Long 4"); +// xgettext: no-c-format +i18n("Kaku"); +// xgettext: no-c-format +i18n("Commercial 10"); +// xgettext: no-c-format +i18n("A2 Invitation"); +// xgettext: no-c-format +i18n("ColorModel"); +// xgettext: no-c-format +i18n("Line Art"); +// xgettext: no-c-format +i18n("Solid Tone"); +// xgettext: no-c-format +i18n("Photograph"); +// xgettext: no-c-format +i18n("MediaType"); +// xgettext: no-c-format +i18n("Transparencies"); +// xgettext: no-c-format +i18n("Dither"); +// xgettext: no-c-format +i18n("300 DPI x 600 DPI"); +// xgettext: no-c-format +i18n("600 DPI high quality"); +// xgettext: no-c-format +i18n("600 DPI Unidirectional"); +// xgettext: no-c-format +i18n("1200 DPI high quality"); +// xgettext: no-c-format +i18n("1200 DPI highest quality"); +// xgettext: no-c-format +i18n("1200 DPI Unidirectional"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI high quality"); +// xgettext: no-c-format +i18n("2400 DPI x 1200 DPI highest quality"); +// xgettext: no-c-format +i18n("ArchB"); +// xgettext: no-c-format +i18n("Envelopes"); +// xgettext: no-c-format +i18n("Premium Luster Photo Paper"); +// xgettext: no-c-format +i18n("180 x 120 DPI"); +// xgettext: no-c-format +i18n("180 x 120 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 x 120 DPI"); +// xgettext: no-c-format +i18n("360 x 120 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Microweave"); +// xgettext: no-c-format +i18n("360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI High Quality Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Softweave"); +// xgettext: no-c-format +i18n("720 x 360 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI High Quality Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("Roll Feed"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Softweave"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Softweave Unidirectional"); +// xgettext: no-c-format +i18n("180 DPI Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap"); +// xgettext: no-c-format +i18n("360 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI FOL2"); +// xgettext: no-c-format +i18n("360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("360 DPI MW2"); +// xgettext: no-c-format +i18n("360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Default"); +// xgettext: no-c-format +i18n("720 x 360 DPI Default Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave"); +// xgettext: no-c-format +i18n("720 x 360 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2"); +// xgettext: no-c-format +i18n("720 x 360 DPI FOL2 Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2"); +// xgettext: no-c-format +i18n("720 x 360 DPI MW2 Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap"); +// xgettext: no-c-format +i18n("720 DPI Full Overlap Unidirectional"); +// xgettext: no-c-format +i18n("720 DPI Four Pass"); +// xgettext: no-c-format +i18n("720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Microweave Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL"); +// xgettext: no-c-format +i18n("1440 x 720 DPI FOL Unidirectional"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Four Pass Unidirectional"); +// xgettext: no-c-format +i18n("20x24"); +// xgettext: no-c-format +i18n("20x30"); +// xgettext: no-c-format +i18n("24x30"); +// xgettext: no-c-format +i18n("24x36"); +// xgettext: no-c-format +i18n("SRA2"); +// xgettext: no-c-format +i18n("B2 ISO"); +// xgettext: no-c-format +i18n("B2 JIS"); +// xgettext: no-c-format +i18n("C2"); +// xgettext: no-c-format +i18n("ArchC"); +// xgettext: no-c-format +i18n("ArchD"); +// xgettext: no-c-format +i18n("30x40"); +// xgettext: no-c-format +i18n("RA0"); +// xgettext: no-c-format +i18n("RA1"); +// xgettext: no-c-format +i18n("SRA0"); +// xgettext: no-c-format +i18n("SRA1"); +// xgettext: no-c-format +i18n("B0 ISO"); +// xgettext: no-c-format +i18n("B1 ISO"); +// xgettext: no-c-format +i18n("B0 JIS"); +// xgettext: no-c-format +i18n("B1 JIS"); +// xgettext: no-c-format +i18n("C0"); +// xgettext: no-c-format +i18n("C1"); +// xgettext: no-c-format +i18n("ArchE"); +// xgettext: no-c-format +i18n("1200 x 1200 DPI"); +// xgettext: no-c-format +i18n("1200 x 600 DPI"); +// xgettext: no-c-format +i18n("13 Inch Roll Paper"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI"); +// xgettext: no-c-format +i18n("1440 x 1440 DPI Highest Quality"); +// xgettext: no-c-format +i18n("1440 x 720 DPI"); +// xgettext: no-c-format +i18n("1440 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("150 x 150 DPI"); +// xgettext: no-c-format +i18n("180 DPI Economy Draft"); +// xgettext: no-c-format +i18n("180 x 180 DPI"); +// xgettext: no-c-format +i18n("210 mm Roll Paper"); +// xgettext: no-c-format +i18n("22 Inch Roll Paper"); +// xgettext: no-c-format +i18n("2400 x 1200 DPI"); +// xgettext: no-c-format +i18n("240x240 DPI"); +// xgettext: no-c-format +i18n("24 Inch Roll Paper"); +// xgettext: no-c-format +i18n("2880 x 1440 DPI"); +// xgettext: no-c-format +i18n("2880 x 720 DPI"); +// xgettext: no-c-format +i18n("2880 x 720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("300 dpi, Color, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Color, Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Grayscale, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Black & Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("300 dpi, Photo, Photo & Color Cartr., Premium Paper"); +// xgettext: no-c-format +i18n("300 x 300 DPI"); +// xgettext: no-c-format +i18n("300 x 600 DPI"); +// xgettext: no-c-format +i18n("360×360dpi, 4-bit, PostScript halftoning, weaved"); +// xgettext: no-c-format +i18n("360 x 120 DPI Economy Draft"); +// xgettext: no-c-format +i18n("360 x 180 DPI"); +// xgettext: no-c-format +i18n("360 x 180 DPI Draft"); +// xgettext: no-c-format +i18n("360 x 240 DPI"); +// xgettext: no-c-format +i18n("360 x 240 DPI Draft"); +// xgettext: no-c-format +i18n("360 x 360 DPI"); +// xgettext: no-c-format +i18n("360x720 DPI"); +// xgettext: no-c-format +i18n("360 x 90 DPI"); +// xgettext: no-c-format +i18n("360 x 90 DPI Fast Economy Draft"); +// xgettext: no-c-format +i18n("36 Inch Roll Paper"); +// xgettext: no-c-format +i18n("3-ink color (Color ink cartridge)"); +// xgettext: no-c-format +i18n("400x400 DPI"); +// xgettext: no-c-format +i18n("44 Inch Roll Paper"); +// xgettext: no-c-format +i18n("4 Inch Roll Paper"); +// xgettext: no-c-format +i18n("4-ink color (Both ink cartridges)"); +// xgettext: no-c-format +i18n("5 Inch Roll Paper"); +// xgettext: no-c-format +i18n("600 dpi, Color, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("600 dpi, Color, Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("600 dpi, Grayscale, Black & Color Cartr., Plain Paper"); +// xgettext: no-c-format +i18n("600 dpi, Photo, Black & Color Cartr., Photo Paper"); +// xgettext: no-c-format +i18n("600 x 300 DPI"); +// xgettext: no-c-format +i18n("600 x 600 DPI"); +// xgettext: no-c-format +i18n("720 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 x 360 DPI"); +// xgettext: no-c-format +i18n("720 x 360 DPI Unidirectional"); +// xgettext: no-c-format +i18n("720 x 720 DPI"); +// xgettext: no-c-format +i18n("89 mm Roll Paper"); +// xgettext: no-c-format +i18n("90 x 90 DPI"); +// xgettext: no-c-format +i18n("90x90 DPI"); +// xgettext: no-c-format +i18n("A4, Colour"); +// xgettext: no-c-format +i18n("Always"); +// xgettext: no-c-format +i18n("B6 (ISO)"); +// xgettext: no-c-format +i18n("Behaviour when Toner Low"); +// xgettext: no-c-format +i18n("Bidirectional Printing"); +// xgettext: no-c-format +i18n("Black and Blue (Cyan, Magenta, Black)"); +// xgettext: no-c-format +i18n("Black and Cyan"); +// xgettext: no-c-format +i18n("Black and Green (Cyan, Yellow, Black)"); +// xgettext: no-c-format +i18n("Black and Magenta"); +// xgettext: no-c-format +i18n("Black and Red (Magenta, Yellow, Black)"); +// xgettext: no-c-format +i18n("Black and Yellow"); +// xgettext: no-c-format +i18n("Black cartridge"); +// xgettext: no-c-format +i18n("Black Cartridge"); +// xgettext: no-c-format +i18n("Black correction (Cyan reduction)"); +// xgettext: no-c-format +i18n("Black for any colour"); +// xgettext: no-c-format +i18n("Black ink density adjustment."); +// xgettext: no-c-format +i18n("Black Level"); +// xgettext: no-c-format +i18n("Black Level (Black cartr. only)"); +// xgettext: no-c-format +i18n("Blue (Cyan and Magenta)"); +// xgettext: no-c-format +i18n("Bottom Margin"); +// xgettext: no-c-format +i18n("Brightness"); +// xgettext: no-c-format +i18n("Color cartridge"); +// xgettext: no-c-format +i18n("Color (Draft Quality)"); +// xgettext: no-c-format +i18n("Color (High Quality)"); +// xgettext: no-c-format +i18n("Color, normal quality, optional colour correction"); +// xgettext: no-c-format +i18n("Colour"); +// xgettext: no-c-format +i18n("Colour Cartridge"); +// xgettext: no-c-format +i18n("Colour correction"); +// xgettext: no-c-format +i18n("Colour Correction"); +// xgettext: no-c-format +i18n("ColourCorrection"); +// xgettext: no-c-format +i18n("Colour Correction Mode"); +// xgettext: no-c-format +i18n("Colour Depth"); +// xgettext: no-c-format +i18n("Colour, fast, CMYK"); +// xgettext: no-c-format +i18n("Colour, fast, RGB"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, better"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, CMYK, simpler"); +// xgettext: no-c-format +i18n("Colour, Floyd-Steinberg, RGB"); +// xgettext: no-c-format +i18n("Colour Intensity"); +// xgettext: no-c-format +i18n("Colour mode"); +// xgettext: no-c-format +i18n("Colour Mode"); +// xgettext: no-c-format +i18n("Colour, modif. Floyd-Steinberg, CMYK, faster"); +// xgettext: no-c-format +i18n("Colours one page at a time"); +// xgettext: no-c-format +i18n("Colour, Stefan-Singer algorithm, RGB"); +// xgettext: no-c-format +i18n("Colours to be printed"); +// xgettext: no-c-format +i18n("Colours to be used"); +// xgettext: no-c-format +i18n("Composed Black"); +// xgettext: no-c-format +i18n("Compressed Data Transfer"); +// xgettext: no-c-format +i18n("Continuous-tone photographs"); +// xgettext: no-c-format +i18n("Contrast Level"); +// xgettext: no-c-format +i18n("CorrectBlack"); +// xgettext: no-c-format +i18n("Curl Correction"); +// xgettext: no-c-format +i18n("Cyan"); +// xgettext: no-c-format +i18n("Cyan Level"); +// xgettext: no-c-format +i18n("Cyan Level (Colour cartr. only)"); +// xgettext: no-c-format +i18n("Default behaviour"); +// xgettext: no-c-format +i18n("Distance even/odd nozzles left cartr."); +// xgettext: no-c-format +i18n("Distance even/odd nozzles right cartr."); +// xgettext: no-c-format +i18n("Dither Algorithm"); +// xgettext: no-c-format +i18n("Dithering Pixels Per Inch"); +// xgettext: no-c-format +i18n("Dithering PPI"); +// xgettext: no-c-format +i18n("Do not care about cartridges, colours one page at a time"); +// xgettext: no-c-format +i18n("Do not care about cartridges, each line in all colours"); +// xgettext: no-c-format +i18n("DoNotOverlay"); +// xgettext: no-c-format +i18n("Driver Default"); +// xgettext: no-c-format +i18n("Each line in all colours"); +// xgettext: no-c-format +i18n("Executive, 1200x600 DPI"); +// xgettext: no-c-format +i18n("Executive, 600x600 DPI"); +// xgettext: no-c-format +i18n("FaceDown"); +// xgettext: no-c-format +i18n("FaceUp"); +// xgettext: no-c-format +i18n("First pass of an overlayed printout"); +// xgettext: no-c-format +i18n("Five Color Photo Composite"); +// xgettext: no-c-format +i18n("Floyd-Steinberg (not recommended for MicroDry)"); +// xgettext: no-c-format +i18n("Foolscap A"); +// xgettext: no-c-format +i18n("Foolscap E"); +// xgettext: no-c-format +i18n("Four Color Standard"); +// xgettext: no-c-format +i18n("FullPaint"); +// xgettext: no-c-format +i18n("Gamma"); +// xgettext: no-c-format +i18n("Gamma Black"); +// xgettext: no-c-format +i18n("Gamma (Blue Component)"); +// xgettext: no-c-format +i18n("Gamma Correction"); +// xgettext: no-c-format +i18n("Gamma correction on saturation HSV component"); +// xgettext: no-c-format +i18n("Gamma Cyan"); +// xgettext: no-c-format +i18n("Gamma (Green Component)"); +// xgettext: no-c-format +i18n("Gamma Magenta"); +// xgettext: no-c-format +i18n("Gamma (Red Component)"); +// xgettext: no-c-format +i18n("Gamma Yellow"); +// xgettext: no-c-format +i18n("Generic DeskJet"); +// xgettext: no-c-format +i18n("Glossy finishing"); +// xgettext: no-c-format +i18n("Glossy Photo"); +// xgettext: no-c-format +i18n("Gray Scale"); +// xgettext: no-c-format +i18n("Grayscale (Black ink cartridge)"); +// xgettext: no-c-format +i18n("Green (Cyan and Yellow)"); +// xgettext: no-c-format +i18n("Hagaki"); +// xgettext: no-c-format +i18n("Halftone (recommended for general use)"); +// xgettext: no-c-format +i18n("Head Separation"); +// xgettext: no-c-format +i18n("Horiz. Alignm. betw. Cartr."); +// xgettext: no-c-format +i18n("Horizontal (X-)Shift (in dots)"); +// xgettext: no-c-format +i18n("Horz. align. betw. cartr."); +// xgettext: no-c-format +i18n("HP LaserJet 4L"); +// xgettext: no-c-format +i18n("HP LaserJet III series"); +// xgettext: no-c-format +i18n("HP LaserJet II series"); +// xgettext: no-c-format +i18n("IgnoreSize"); +// xgettext: no-c-format +i18n("Ilford Heavy Paper"); +// xgettext: no-c-format +i18n("Ink Drying Time (sec)"); +// xgettext: no-c-format +i18n("Inverse Printing"); +// xgettext: no-c-format +i18n("Japanese Kaku envelope #4"); +// xgettext: no-c-format +i18n("Japanese long envelope #3"); +// xgettext: no-c-format +i18n("Japanese long envelope #4"); +// xgettext: no-c-format +i18n("Job Type"); +// xgettext: no-c-format +i18n("KeepBlack"); +// xgettext: no-c-format +i18n("Keep pure black"); +// xgettext: no-c-format +i18n("Landscape"); +// xgettext: no-c-format +i18n("Last pass of an overlayed printout"); +// xgettext: no-c-format +i18n("Left Margin"); +// xgettext: no-c-format +i18n("Left Skip (in pixels)"); +// xgettext: no-c-format +i18n("Letter, Colour"); +// xgettext: no-c-format +i18n("Limit Error from Paper Colour Correction"); +// xgettext: no-c-format +i18n("Line Feed Adjustment"); +// xgettext: no-c-format +i18n("Magenta"); +// xgettext: no-c-format +i18n("Magenta Level"); +// xgettext: no-c-format +i18n("Magenta Level (Colour cartr. only)"); +// xgettext: no-c-format +i18n("Memory Limit (Bytes)"); +// xgettext: no-c-format +i18n("Middle pass of an overlayed printout"); +// xgettext: no-c-format +i18n("Monochrome printing, re-usable economy black cartridge"); +// xgettext: no-c-format +i18n("Monochrome printing, standard black cartridge"); +// xgettext: no-c-format +i18n("More than 4 colours, colours one page at a time"); +// xgettext: no-c-format +i18n("Never"); +// xgettext: no-c-format +i18n("Next Job is spot colour page"); +// xgettext: no-c-format +i18n("NextNotSpotColourPage"); +// xgettext: no-c-format +i18n("NextSpotColourPage"); +// xgettext: no-c-format +i18n("NoColourCorrection"); +// xgettext: no-c-format +i18n("No dithering"); +// xgettext: no-c-format +i18n("noGlossy"); +// xgettext: no-c-format +i18n("Non-Bleed"); +// xgettext: no-c-format +i18n("None (RGB --> CMY)"); +// xgettext: no-c-format +i18n("Normal Quality Colour (4-ink)"); +// xgettext: no-c-format +i18n("Number of Copies"); +// xgettext: no-c-format +i18n("Number of passes per line"); +// xgettext: no-c-format +i18n("Orientation"); +// xgettext: no-c-format +i18n("Oufuku-Hagaki"); +// xgettext: no-c-format +i18n("Output Type"); +// xgettext: no-c-format +i18n("Page Output"); +// xgettext: no-c-format +i18n("Paper Colour (Blue Component)"); +// xgettext: no-c-format +i18n("Paper Colour (Green Component)"); +// xgettext: no-c-format +i18n("Paper Colour (Red Component)"); +// xgettext: no-c-format +i18n("PartialPaint"); +// xgettext: no-c-format +i18n("Photo CcMmY Color"); +// xgettext: no-c-format +i18n("Photo CcMmYK Color"); +// xgettext: no-c-format +i18n("Photo (CMYK, gamma correction, ...)"); +// xgettext: no-c-format +i18n("Photo Full Bleed"); +// xgettext: no-c-format +i18n("Photo Quality Colour (6-ink)"); +// xgettext: no-c-format +i18n("Plain (RGB --> CMYK)"); +// xgettext: no-c-format +i18n("Portrait"); +// xgettext: no-c-format +i18n("Presentation Quality"); +// xgettext: no-c-format +i18n("Primarily solid colors or smooth gradients"); +// xgettext: no-c-format +i18n("Printer Model"); +// xgettext: no-c-format +i18n("Printer's paper size"); +// xgettext: no-c-format +i18n("Print next job over the current one"); +// xgettext: no-c-format +i18n("Printout Quality"); +// xgettext: no-c-format +i18n("Quality, Ink Type, Media Type"); +// xgettext: no-c-format +i18n("Randomization of Floyd-Steinberg"); +// xgettext: no-c-format +i18n("Raw CMYK"); +// xgettext: no-c-format +i18n("Red (Magenta and Yellow)"); +// xgettext: no-c-format +i18n("RequireSize"); +// xgettext: no-c-format +i18n("Reset after job"); +// xgettext: no-c-format +i18n("Right Margin"); +// xgettext: no-c-format +i18n("RIT Control"); +// xgettext: no-c-format +i18n("RITOff"); +// xgettext: no-c-format +i18n("RITOn"); +// xgettext: no-c-format +i18n("Roll Paper"); +// xgettext: no-c-format +i18n("Shift output horizontally (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Shift output vertically (in 1/300 inch)"); +// xgettext: no-c-format +i18n("Simple Colour (4 bpp)"); +// xgettext: no-c-format +i18n("Single Pass Job"); +// xgettext: no-c-format +i18n("Six Color Photo"); +// xgettext: no-c-format +i18n("Smooth Printing (BC-02 cartridge)"); +// xgettext: no-c-format +i18n("Solid Colors"); +// xgettext: no-c-format +i18n("Square (experimental, not recommended)"); +// xgettext: no-c-format +i18n("StpBrightness"); +// xgettext: no-c-format +i18n("StpGamma"); +// xgettext: no-c-format +i18n("StpSaturation"); +// xgettext: no-c-format +i18n("Super B 13x19"); +// xgettext: no-c-format +i18n("Thick Paper/Card Board"); +// xgettext: no-c-format +i18n("This Job is spot colour page"); +// xgettext: no-c-format +i18n("ThisNotSpotColourPage"); +// xgettext: no-c-format +i18n("ThisSpotColourPage"); +// xgettext: no-c-format +i18n("Three Color Composite"); +// xgettext: no-c-format +i18n("Toner Density"); +// xgettext: no-c-format +i18n("TonerSaving"); +// xgettext: no-c-format +i18n("Top Margin"); +// xgettext: no-c-format +i18n("Top Skip (in pixels)"); +// xgettext: no-c-format +i18n("Transparency Paper"); +// xgettext: no-c-format +i18n("Tray 10"); +// xgettext: no-c-format +i18n("Tray 11"); +// xgettext: no-c-format +i18n("Tray 12"); +// xgettext: no-c-format +i18n("Tray 13"); +// xgettext: no-c-format +i18n("Tray 14"); +// xgettext: no-c-format +i18n("Tray 15"); +// xgettext: no-c-format +i18n("Tray 8"); +// xgettext: no-c-format +i18n("Tray 9"); +// xgettext: no-c-format +i18n("Use multi-colour ribbon"); +// xgettext: no-c-format +i18n("UseMultiColourRibbon"); +// xgettext: no-c-format +i18n("UseStandardRibbons"); +// xgettext: no-c-format +i18n("Vert. align. betw. cartr."); +// xgettext: no-c-format +i18n("Vert. Alignm. betw. Cartr."); +// xgettext: no-c-format +i18n("Vertical (Y-)Shift (in dots)"); +// xgettext: no-c-format +i18n("X Offset"); +// xgettext: no-c-format +i18n("Yellow Level"); +// xgettext: no-c-format +i18n("Yellow Level (Colour cartr. only)"); +// xgettext: no-c-format +i18n("Y Offset"); diff --git a/tdeprint/descriptions/readppd b/tdeprint/descriptions/readppd new file mode 100755 index 000000000..2c7621a36 --- /dev/null +++ b/tdeprint/descriptions/readppd @@ -0,0 +1,83 @@ +#! /usr/bin/perl + +$inui = 0; +$tag = ""; +$linenr = 0; + +$incomdata = 0; +$aftername = 0; +$aftercomment = 0; +$commentvalue = ""; + +while ( ) +{ + $linenr = $linenr + 1; + + # *LanguageVersion: Check for English + if (/^\*LanguageVersion:\s+([\w\-]+)\s*$/) { + last if ($1 ne "English"); + } + + # *OpenUI *InputSlot/Media Source: PickOne + if ($_ =~ "^*OpenUI") { + $inui = 1; + $_ =~ s/^\*OpenUI\s*//; + $tag = $_; + $tag =~ s%:.*$%%; + $tag =~ s%/.*%%; + chomp($tag); + $_ =~ s%\s*:.*$%%; + $_ =~ s%\s*\*%%; + $_ =~ s%^[^/]*/%%; + $_ =~ s%\"%\\\"%g; + chomp($_); + print "i18n(\"", $_, "\");\n"; + next; + } + + if ($_ =~ "^*CloseUI") { + $inui = 0; + $tag = ""; + } + + if ($inui) { + if (substr($_, 0, length($tag)) eq $tag) { + $_ =~ s%\s*:.*$%%; + $_ =~ s%\*\S*\s*%%; + $_ =~ s%^[^/]*/%%; + $_ =~ s%\"%\\\"%g; + chomp($_); + print "i18n(\"", $_, "\");\n"; + } + } + + # *% COMDATA #$VAR1 = {: Start looking for 'name','comment','type' + if (/^\*\% COMDATA \#\$VAR1/) { + $incomdata = 1; + } + + # *% COMDATA # 'name': Continue looking for 'comment' + if ($incomdata && /^\*\% COMDATA \#\s*\'name\'/) { + $aftername = 1; + $aftercomment = 0; + } + + # *% COMDATA # 'comment' => '*': Continue looking for 'type' + if ($aftername && /^\*\% COMDATA \#\s*\'comment\'\s*\=\>\s*\'(.*)\'/) { + $aftername = 0; + $aftercomment = 1; + $commentvalue = $1; + } + + # *% COMDATA # 'type' => '*': + # Output comment if type is 'int', 'float' or 'string' + if ($aftercomment && /^\*\% COMDATA \#\s*\'type\'\s*\=\>\s*\'(.*)\'/) { + $aftername = 0; + $aftercomment = 0; + if ($1 eq "int" || $1 eq "float" || $1 eq "string") { + print "i18n(\"$commentvalue\");\n"; + } + } + + +} diff --git a/tdeprint/descriptions/sortthem.cpp b/tdeprint/descriptions/sortthem.cpp new file mode 100644 index 000000000..9adc284b1 --- /dev/null +++ b/tdeprint/descriptions/sortthem.cpp @@ -0,0 +1,28 @@ + + +#include +#include +#include +#include + + + +int main(int argc, char **argv) { +TQStringList have; +char buf[1024]; + + + while (!feof(stdin)) { + char *cline = fgets(buf, 1000, stdin); + if (!cline) break; + if (!have.contains(cline)) { + have << cline; + fprintf(stdout, "%s", cline); + } + } + + +return 0; +} + + diff --git a/tdeprint/kjobviewer/CMakeLists.txt b/tdeprint/kjobviewer/CMakeLists.txt new file mode 100644 index 000000000..332fa7fc4 --- /dev/null +++ b/tdeprint/kjobviewer/CMakeLists.txt @@ -0,0 +1,37 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_definitions( -D_KDEPRINT_COMPILE ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### other data ################################ + +tde_install_icons( kjobviewer ) +install( FILES kjobviewer.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) +install( FILES kjobviewerui.rc DESTINATION ${DATA_INSTALL_DIR}/kjobviewer ) + + +##### kjobviewer (tdeinit) ###################### + +tde_add_tdeinit_executable( kjobviewer AUTOMOC + SOURCES kjobviewer.cpp main.cpp + LINK tdeprint_management-shared +) diff --git a/tdeprint/kjobviewer/Makefile.am b/tdeprint/kjobviewer/Makefile.am new file mode 100644 index 000000000..5362ad033 --- /dev/null +++ b/tdeprint/kjobviewer/Makefile.am @@ -0,0 +1,24 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +INCLUDES = $(all_includes) + +bin_PROGRAMS= +lib_LTLIBRARIES= +tdeinit_LTLIBRARIES = kjobviewer.la + +kjobviewer_la_SOURCES = kjobviewer.cpp main.cpp +kjobviewer_la_METASOURCES = AUTO +kjobviewer_la_LIBADD = -ltdeprint_management $(LIB_KDEUI) +kjobviewer_la_LDFLAGS = -module -avoid-version $(all_libraries) $(KDE_RPATH) + +noinst_HEADERS = kjobviewer.h + +KDE_ICON = kjobviewer + +rc_DATA = kjobviewerui.rc +rcdir = $(kde_datadir)/kjobviewer + +xdg_apps_DATA = kjobviewer.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kjobviewer.pot diff --git a/tdeprint/kjobviewer/hi128-app-kjobviewer.png b/tdeprint/kjobviewer/hi128-app-kjobviewer.png new file mode 100644 index 000000000..7db5f56b1 Binary files /dev/null and b/tdeprint/kjobviewer/hi128-app-kjobviewer.png differ diff --git a/tdeprint/kjobviewer/hi16-app-kjobviewer.png b/tdeprint/kjobviewer/hi16-app-kjobviewer.png new file mode 100644 index 000000000..d6defce21 Binary files /dev/null and b/tdeprint/kjobviewer/hi16-app-kjobviewer.png differ diff --git a/tdeprint/kjobviewer/hi22-app-kjobviewer.png b/tdeprint/kjobviewer/hi22-app-kjobviewer.png new file mode 100644 index 000000000..a71ee2817 Binary files /dev/null and b/tdeprint/kjobviewer/hi22-app-kjobviewer.png differ diff --git a/tdeprint/kjobviewer/hi32-app-kjobviewer.png b/tdeprint/kjobviewer/hi32-app-kjobviewer.png new file mode 100644 index 000000000..d554b554f Binary files /dev/null and b/tdeprint/kjobviewer/hi32-app-kjobviewer.png differ diff --git a/tdeprint/kjobviewer/hi48-app-kjobviewer.png b/tdeprint/kjobviewer/hi48-app-kjobviewer.png new file mode 100644 index 000000000..13adbd006 Binary files /dev/null and b/tdeprint/kjobviewer/hi48-app-kjobviewer.png differ diff --git a/tdeprint/kjobviewer/hi64-app-kjobviewer.png b/tdeprint/kjobviewer/hi64-app-kjobviewer.png new file mode 100644 index 000000000..5d22d215e Binary files /dev/null and b/tdeprint/kjobviewer/hi64-app-kjobviewer.png differ diff --git a/tdeprint/kjobviewer/hisc-app-kjobviewer.svgz b/tdeprint/kjobviewer/hisc-app-kjobviewer.svgz new file mode 100644 index 000000000..f40b4bdfa Binary files /dev/null and b/tdeprint/kjobviewer/hisc-app-kjobviewer.svgz differ diff --git a/tdeprint/kjobviewer/kjobviewer.cpp b/tdeprint/kjobviewer/kjobviewer.cpp new file mode 100644 index 000000000..0fb23e7ba --- /dev/null +++ b/tdeprint/kjobviewer/kjobviewer.cpp @@ -0,0 +1,233 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "kjobviewer.h" +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class JobTray : public KSystemTray +{ +public: + JobTray(KJobViewerApp *parent, const char *name = 0) + : KSystemTray(0, name), m_app(parent) { connect( this, TQT_SIGNAL( quitSelected() ), kapp, TQT_SLOT( quit() ) ); } +protected: + void mousePressEvent(TQMouseEvent*); +private: + KJobViewerApp *m_app; +}; + +void JobTray::mousePressEvent(TQMouseEvent *e) +{ + if (e->button() == Qt::RightButton) + KSystemTray::mousePressEvent(e); + else if (m_app->m_views.count() > 0) + { + KPopupMenu menu; + TQDictIterator it(m_app->m_views); + TQPtrList list; + list.setAutoDelete(false); + for (; it.current(); ++it) + { + menu.insertItem(KWin::icon(it.current()->winId(), 16, 16), it.currentKey(), list.count()); + if (it.current()->isVisible()) + menu.setItemChecked(list.count(), true); + list.append(it.current()); + } + + if (list.count() == 1) + { + // special case, old behavior + if (list.first()->isVisible()) + list.first()->hide(); + else + list.first()->show(); + } + else + { + int choice = menu.exec(mapToGlobal(e->pos())); + if (choice != -1) + { + KMJobViewer *view = list.tqat(choice); + if (view->isVisible()) + KWin::activateWindow(view->winId()); + else + view->show(); + } + } + } +} + +//------------------------------------------------------------- + +KJobViewerApp::KJobViewerApp() : KUniqueApplication() +{ + m_views.setAutoDelete(true); + m_tray = 0; + m_timer = 0; +} + +KJobViewerApp::~KJobViewerApp() +{ +} + +int KJobViewerApp::newInstance() +{ + initialize(); + return 0; +} + +void KJobViewerApp::initialize() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + bool showIt = args->isSet("show"); + bool all = args->isSet("all"); + QString prname = args->getOption("d"); + KMJobViewer *view(0); + + if (!m_timer) + { + m_timer = KMTimer::self(); + connect(m_timer,TQT_SIGNAL(timeout()),TQT_SLOT(slotTimer())); + } + + if (prname.isEmpty() && all) + prname = i18n("All Printers"); + + if (prname.isEmpty()) { + KMPrinter *prt = KMManager::self()->defaultPrinter(); + if (prt) + prname = prt->printerName(); + else { + KMessageBox::error(0, i18n("There is no default printer. Start with --all to see all printers."), i18n("Print Error")); + exit(1); + return; + } + } + + if (!m_tray) + { + m_tray = new JobTray(this); + m_tray->setPixmap(m_tray->loadIcon("fileprint")); + + } + + view = m_views.find(prname); + if (!view) + { + kdDebug() << "creating new view: " << TQString(prname) << endl; + view = new KMJobViewer(); + connect(view, TQT_SIGNAL(jobsShown(KMJobViewer*,bool)), TQT_SLOT(slotJobsShown(KMJobViewer*,bool))); + connect(view, TQT_SIGNAL(printerChanged(KMJobViewer*,const TQString&)), TQT_SLOT(slotPrinterChanged(KMJobViewer*,const TQString&))); + connect(view, TQT_SIGNAL(refreshClicked()), TQT_SLOT(slotTimer())); + connect(view, TQT_SIGNAL(viewerDestroyed(KMJobViewer*)), TQT_SLOT(slotViewerDestroyed(KMJobViewer*))); + m_views.insert(prname, view); + } + + if (showIt) + { + view->show(); + m_tray->show(); + } + view->setPrinter(prname); + + //m_timer->release(true); + m_timer->delay(10); +} + +void KJobViewerApp::slotJobsShown(KMJobViewer *view, bool hasJobs) +{ + if (!hasJobs && !view->isVisible() && !view->isSticky()) + { + kdDebug() << "removing view: " << view->printer() << endl; + // the window is hidden and doesn't have any job shown -> destroy it + // closing won't have any effect as the KMJobViewer overload closeEvent() + m_views.remove(view->printer()); + } + + if (m_views.count() > 0) + { + if (!m_tray->isVisible()) + m_tray->show(); + } + else { + KStartupInfo::appStarted(); + kapp->quit(); + } +} + +void KJobViewerApp::slotTimer() +{ + // Update printer list + KMManager::self()->printerList(true); + + // Refresh views. The first time, job list is reloaded, + // other views will simply use reloaded job list + bool trigger(true); + TQDictIterator it(m_views); + for (; it.current(); ++it, trigger=false) + it.current()->refresh(trigger); +} + +void KJobViewerApp::slotPrinterChanged(KMJobViewer *view, const TQString& prname) +{ + KMJobViewer *other = m_views.find(prname); + if (other) + { + if (other->isVisible()) + KWin::activateWindow(other->winId()); + else + other->show(); + } + else + { + m_views.take(view->printer()); + m_views.insert(prname, view); + view->setPrinter(prname); + } +} + +void KJobViewerApp::reload() +{ + // trigger delayed refresh in all views + m_timer->delay(10); +} + +void KJobViewerApp::slotViewerDestroyed(KMJobViewer *view) +{ + if (view) + m_views.take(view->printer()); + if (m_views.count() == 0) + kapp->quit(); +} + +#include "kjobviewer.moc" diff --git a/tdeprint/kjobviewer/kjobviewer.desktop b/tdeprint/kjobviewer/kjobviewer.desktop new file mode 100644 index 000000000..965ed49bf --- /dev/null +++ b/tdeprint/kjobviewer/kjobviewer.desktop @@ -0,0 +1,92 @@ +[Desktop Entry] +Exec=kjobviewer --all --show %i %m +Icon=kjobviewer +Terminal=false +Type=Application +X-KDE-StartupNotify=true + +Name=KJobViewer +Name[bn]=কে-জব-ভিউয়ার +Name[csb]=Przezérnik pòlétów drëkera +Name[cy]=KGwelyddSwyddi +Name[ja]=K ジョブビューア +Name[nds]=Opgavenkieker +Name[ne]=KJob दर्शक +Name[pl]=Przeglądarka zadań drukowania +Name[pt_BR]=Trabalhos de Impressão +Name[ro]=Vizualizor lucrări de tipărit +Name[rw]=K-IkigaragazaUmurimo +Name[sk]=Prehliadač úloh +Name[sv]=K-jobbvisare +Name[ta]=கேபணி காட்சியாளன் +Name[tg]=Намоишгари корҳо +Name[vi]=Trình theo dõi Tác vụ In ấn +GenericName=Print Jobs +GenericName[af]=Drukker Werke +GenericName[be]=Заданні друку +GenericName[bg]=Задания за печат +GenericName[bn]=মুদ্রণ তালিকা +GenericName[bs]=Zadaci štampe +GenericName[ca]=Treballs d'impressió +GenericName[cs]=Tiskové úlohy +GenericName[csb]=Pòlétë drëkera +GenericName[cy]=Swyddi Argraffu +GenericName[da]=Udskriv job +GenericName[de]=Druckaufträge +GenericName[el]=Εργασίες εκτύπωσης +GenericName[eo]=Printtaskoj +GenericName[es]=Trabajos de impresión +GenericName[et]=Printeri tööd +GenericName[eu]=Inprimaketa lanak +GenericName[fa]=چاپ کارها +GenericName[fi]=Tulostustyöt +GenericName[fr]=Tâches d'impressions +GenericName[fy]=printtaken +GenericName[ga]=Jabanna Priontála +GenericName[gl]=Traballos de Impresión +GenericName[he]=עבודות הדפסה +GenericName[hr]=Zadaci ispisivanja +GenericName[hu]=Nyomtatási feladatok +GenericName[is]=Prentverk +GenericName[it]=Lavori di stampa +GenericName[ja]=印刷ジョブ +GenericName[ka]=ბეჭდვის დავალება +GenericName[kk]=Басып шығару тапсырмалары +GenericName[km]=ការងារ​បោះពុម្ព +GenericName[lt]=Spausdinimo užduotys +GenericName[mk]=Задачи за печатење +GenericName[ms]=Cetak Kerja +GenericName[nb]=Utskriftsjobber +GenericName[nds]=Druckopgaven +GenericName[ne]=मुद्रण कार्य +GenericName[nl]=Afdruktaken +GenericName[nn]=Utskriftsjobbar +GenericName[pa]=ਛਪਾਈ ਕੰਮ +GenericName[pl]=Zadania drukowania +GenericName[pt]=Tarefas de Impressão +GenericName[pt_BR]=Tarefas de Impressão +GenericName[ro]=Lucrări de tipărit +GenericName[ru]=Задания печати +GenericName[rw]=Gucapa Imirimo +GenericName[se]=Čálihanbarggut +GenericName[sk]=Tlačové úlohy +GenericName[sl]=Tiskalniška opravila +GenericName[sr]=Послови штампе +GenericName[sr@Latn]=Poslovi štampe +GenericName[sv]=Skrivarjobb +GenericName[ta]=அச்சுப் பணிகள் +GenericName[te]=ప్రచురణ పనులు +GenericName[tg]=Корҳои чопгар +GenericName[th]=งานพิมพ์ +GenericName[tr]=Yazdırma Görevleri +GenericName[tt]=Bastıru Eşläre +GenericName[uk]=Задачі друку +GenericName[uz]=Bosib chiqarish vazifalari +GenericName[uz@cyrillic]=Босиб чиқариш вазифалари +GenericName[vi]=Tác vụ In ấn +GenericName[wa]=Bouyes d' imprimaedje +GenericName[zh_CN]=打印任务 +GenericName[zh_TW]=列印工作 + +X-DCOP-ServiceType=Unique +Categories=Qt;KDE;Utility;X-KDE-Utilities-Peripherals; diff --git a/tdeprint/kjobviewer/kjobviewer.h b/tdeprint/kjobviewer/kjobviewer.h new file mode 100644 index 000000000..967262de2 --- /dev/null +++ b/tdeprint/kjobviewer/kjobviewer.h @@ -0,0 +1,57 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#ifndef KJOBVIEWER_H +#define KJOBVIEWER_H + +#include +#include +#include + +class KMJobViewer; +class KMTimer; +class JobTray; + +class KJobViewerApp : public KUniqueApplication, public KPReloadObject +{ + Q_OBJECT + friend class JobTray; +public: + KJobViewerApp(); + virtual ~KJobViewerApp(); + + virtual int newInstance(); + +protected: + void initialize(); + void reload(); + +protected slots: + void slotJobsShown(KMJobViewer*, bool); + void slotTimer(); + void slotPrinterChanged(KMJobViewer*, const TQString&); + void slotViewerDestroyed(KMJobViewer*); + +private: + TQDict m_views; + JobTray *m_tray; + KMTimer *m_timer; +}; + +#endif diff --git a/tdeprint/kjobviewer/kjobviewerui.rc b/tdeprint/kjobviewer/kjobviewerui.rc new file mode 100644 index 000000000..83592dfc6 --- /dev/null +++ b/tdeprint/kjobviewer/kjobviewerui.rc @@ -0,0 +1,35 @@ + + + + &Jobs + + + + + + + + + F&ilter + + + + + + + + + + + + + + + + + + + + + + diff --git a/tdeprint/kjobviewer/main.cpp b/tdeprint/kjobviewer/main.cpp new file mode 100644 index 000000000..e75a00e13 --- /dev/null +++ b/tdeprint/kjobviewer/main.cpp @@ -0,0 +1,49 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include +#include +#include + +#include "kjobviewer.h" +#include +#include + +static KCmdLineOptions options[] = { + { "d ", I18N_NOOP("The printer for which jobs are requested"), 0 }, + { "noshow", I18N_NOOP("Show job viewer at startup"), 0}, + { "all", I18N_NOOP("Show jobs for all printers"), 0}, + KCmdLineLastOption +}; + + +extern "C" int KDE_EXPORT kdemain(int argc, char *argv[]) +{ + KAboutData aboutData("kjobviewer",I18N_NOOP("KJobViewer"),"0.1",I18N_NOOP("A print job viewer"),KAboutData::License_GPL,"(c) 2001, Michael Goffioul", 0, "http://printing.kde.org"); + aboutData.addAuthor("Michael Goffioul",0,"tdeprint@swing.be"); + KCmdLineArgs::init(argc,argv,&aboutData); + KCmdLineArgs::addCmdLineOptions(options); + KJobViewerApp::addCmdLineOptions(); + + if (!KJobViewerApp::start()) + exit(0); + + KJobViewerApp a; + return a.exec(); +} diff --git a/tdeprint/kprinter/CMakeLists.txt b/tdeprint/kprinter/CMakeLists.txt new file mode 100644 index 000000000..0849ebe12 --- /dev/null +++ b/tdeprint/kprinter/CMakeLists.txt @@ -0,0 +1,34 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include( CheckFunctionExists ) +check_function_exists( sigset HAVE_SIGACTION ) +check_function_exists( sigaction HAVE_SIGSET ) + +add_definitions( -D_KDEPRINT_COMPILE ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### kprinter (tdeinit) ######################## + +tde_add_tdeinit_executable( kprinter AUTOMOC + SOURCES main.cpp printwrapper.cpp + LINK tdeprint-shared +) diff --git a/tdeprint/kprinter/Makefile.am b/tdeprint/kprinter/Makefile.am new file mode 100644 index 000000000..4cab98880 --- /dev/null +++ b/tdeprint/kprinter/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +INCLUDES = $(all_includes) + +bin_PROGRAMS = +lib_LTLIBRARIES = +tdeinit_LTLIBRARIES = kprinter.la + +kprinter_la_SOURCES = main.cpp printwrapper.cpp +kprinter_la_LIBADD = -ltdeprint +kprinter_la_LDFLAGS = -module -avoid-version $(all_libraries) $(KDE_RPATH) +kprinter_la_METASOURCES = AUTO + +noinst_HEADERS = printwrapper.h + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kprinter.pot + diff --git a/tdeprint/kprinter/configure.in.in b/tdeprint/kprinter/configure.in.in new file mode 100644 index 000000000..dd0767216 --- /dev/null +++ b/tdeprint/kprinter/configure.in.in @@ -0,0 +1 @@ +AC_CHECK_FUNCS(sigset sigaction) diff --git a/tdeprint/kprinter/kprinter.desktop b/tdeprint/kprinter/kprinter.desktop new file mode 100644 index 000000000..bb2de4735 --- /dev/null +++ b/tdeprint/kprinter/kprinter.desktop @@ -0,0 +1,107 @@ +[Desktop Entry] +Exec=kprinter +Icon=kjobviewer +Terminal=false +Type=Application +DocPath=tdeprint/index.html +X-KDE-StartupNotify=true +Name=KPrinter +Name[af]=KDrukker +Name[cy]=KArgraffydd +Name[eo]=KPrintilo +Name[fy]=Kprinter +Name[hi]=केप्रिंटर +Name[ka]=პრინტერი +Name[lo]=ເຄື່ອງພິມ - K +Name[ne]=K मुद्रक +Name[nl]=Kprinter +Name[nso]=KSegatisi +Name[pa]=ਕੇ-ਪਰਿੰਟਰ +Name[ru]=Принтер +Name[rw]=K-Mucapyi +Name[sv]=Kskrivare +Name[ta]=Kஅச்சியந்திரம் +Name[te]=కెప్రింటర్ +Name[tg]=KЧопгар +Name[th]=เครื่องพิมพ์ K +Name[tr]=KYazıcı +Name[ven]=Phirinthara ya K +Name[vi]=In ấn KDE +Name[wa]=KScrirece (KPrinter) +GenericName=Printing Tool +GenericName[af]=Drukker Program +GenericName[ar]=أداة الطباعة +GenericName[be]=Інструмент друку +GenericName[bg]=Инструмент за печат +GenericName[bn]=মুদ্রণ টুল +GenericName[br]=Ostilh moulañ +GenericName[bs]=Alat za štampu +GenericName[ca]=Eina per a imprimir +GenericName[cs]=Tiskový nástroj +GenericName[csb]=Nôrzãdze do sprôwianiô wëdrëkama +GenericName[cy]=Erfyn Argraffu +GenericName[da]=Udskriftsværktøj +GenericName[de]=Druckprogramm +GenericName[el]=Εργαλείο εκτύπωσης +GenericName[eo]=Ilo por printado +GenericName[es]=Herramienta de impresión +GenericName[et]=Trükkimise rakendus +GenericName[eu]=Imprimatzeko tresna +GenericName[fa]=ابزار چاپ +GenericName[fi]=Tulostustyökalu +GenericName[fr]=Outil d'impression +GenericName[fy]=printprogramma +GenericName[ga]=Uirlis Priontála +GenericName[gl]=Ferramenta de Impresión +GenericName[he]=כלי הדפסה +GenericName[hi]=प्रिंटर औज़ार +GenericName[hr]=Alata za ispisivanje +GenericName[hu]=Nyomtatáskezelő +GenericName[is]=Prentunartól +GenericName[it]=Strumento di stampa +GenericName[ja]=印刷ツール +GenericName[ka]=საბეჭდი უტილიტა +GenericName[kk]=Басып шығару құралы +GenericName[km]=ឧបករណ៍​បោះពុម្ព +GenericName[lo]=ເຄື່ອງມືລະບົບການພິມ์ +GenericName[lt]=Spausdinimo priemonė +GenericName[lv]=Drukāšanas Rīks +GenericName[mk]=Печатарска алатка +GenericName[mn]=Хэвлэх програм +GenericName[ms]=Alat Pencetakan +GenericName[mt]=Għodda tal-ipprintjar +GenericName[nb]=Verktøy for skriverbehandling +GenericName[nds]=Druckwarktüüch +GenericName[ne]=मुद्रण उपकरण +GenericName[nl]=Afdrukprogramma +GenericName[nn]=Utskriftsverktøy +GenericName[nso]=Sebereka sa Kgatiso +GenericName[pa]=ਛਪਾਈ (ਪਰਿੰਟਿੰਗ) ਸੰਦ +GenericName[pl]=Narzędzie do zarządzania wydrukiem +GenericName[pt]=Ferramenta de Impressão +GenericName[pt_BR]=Ferramenta de Impressão +GenericName[ro]=Utilitar de tipărire +GenericName[ru]=Утилита печати +GenericName[rw]=Igikoresho cyo Gucapa +GenericName[se]=Čálihanreaidu +GenericName[sk]=Tlačový nástroj +GenericName[sl]=Orodje za tiskanje +GenericName[sr]=Алат за штампу +GenericName[sr@Latn]=Alat za štampu +GenericName[sv]=Skrivarverktyg +GenericName[ta]=அச்சசியந்திர கருவி +GenericName[tg]=Обзори Чоп +GenericName[th]=เครื่องมือระบบการพิมพ์ +GenericName[tr]=Yazdırma Aracı +GenericName[tt]=Bastıru Qoralı +GenericName[uk]=Засіб друку +GenericName[uz]=Bosib chiqarish vositasi +GenericName[uz@cyrillic]=Босиб чиқариш воситаси +GenericName[ven]=Tshishumiswa tshau phirintha +GenericName[vi]=Công cụ In ấn +GenericName[wa]=Usteye d' imprimaedje +GenericName[xh]=Isixhobo Sokushicilela +GenericName[zh_CN]=打印工具 +GenericName[zh_TW]=列印工具 +GenericName[zu]=Ithuluzi Lokushicelela + diff --git a/tdeprint/kprinter/main.cpp b/tdeprint/kprinter/main.cpp new file mode 100644 index 000000000..5d1667cee --- /dev/null +++ b/tdeprint/kprinter/main.cpp @@ -0,0 +1,58 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "printwrapper.h" + +#include +#include +#include +#include + +static KCmdLineOptions options[] = +{ + { "c", I18N_NOOP("Make an internal copy of the files to print"), 0}, + { "P", 0, 0 }, + { "d ", I18N_NOOP("Printer/destination to print on"), 0}, + { "J", 0, 0 }, + { "t ", I18N_NOOP("Title/Name for the print job" ), 0}, + { "#", 0, 0 }, + { "n <number>", I18N_NOOP("Number of copies"), 0 }, + { "o <option=value>", I18N_NOOP("Printer option" ), 0}, + { "j <mode>", I18N_NOOP("Job output mode (gui, console, none)" ), "gui"}, + { "system <printsys>",I18N_NOOP("Print system to use (lpd, cups)" ), 0}, + { "stdin", I18N_NOOP("Allow printing from STDIN" ), 0}, + { "nodialog", I18N_NOOP("Do not show the print dialog (print directly)"), 0}, + { "+file(s)", I18N_NOOP("Files to load" ), 0}, + KCmdLineLastOption +}; + +extern "C" int KDE_EXPORT kdemain(int argc, char *argv[]) +{ + KCmdLineArgs::init(argc,argv,"kprinter",I18N_NOOP("KPrinter"),I18N_NOOP("A printer tool for KDE" ),"0.0.1"); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + PrintWrapper *wrap = new PrintWrapper; + app.setMainWidget(wrap); + TQTimer::singleShot(10,wrap,TQT_SLOT(slotPrint())); + + int result = app.exec(); + delete wrap; + + return result; +} diff --git a/tdeprint/kprinter/printwrapper.cpp b/tdeprint/kprinter/printwrapper.cpp new file mode 100644 index 000000000..effa3dea3 --- /dev/null +++ b/tdeprint/kprinter/printwrapper.cpp @@ -0,0 +1,403 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "printwrapper.h" + +#include <unistd.h> +#include <signal.h> +#include <sys/time.h> + +#include <tqstring.h> +#include <tqstringlist.h> +#include <stdlib.h> +#include <kmessagebox.h> +#include <tqfile.h> +#include <tqtimer.h> +#include <tqregexp.h> +#include <tqsocketnotifier.h> + +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <klocale.h> +#include <kstandarddirs.h> +#include <kio/netaccess.h> +#include <kurl.h> +#include <kdebug.h> +#include <ktempfile.h> + +#include <kprinter.h> +#include <tdeprint/kmmanager.h> +#include <tdeprint/kmprinter.h> +#include <tdeprint/kprintdialog.h> + +void signal_handler(int); +TQString tempFile; +bool fromStdin = false; +char job_output = 0; // 0: dialog, 1: console, 2: none +char readchar = '\0'; +bool dataread = false; +bool docopy = false; + +void showmsgdialog(const TQString& msg, int type = 0) +{ + switch (type) + { + case 0: KMessageBox::information(NULL,msg,i18n("Print Information")); break; + case 1: KMessageBox::sorry(NULL,msg,i18n("Print Warning")); break; + case 2: KMessageBox::error(NULL,msg,i18n("Print Error")); break; + } +} + +void showmsgconsole(const TQString& msg, int type = 0) +{ + TQString errmsg = TQString::tqfromLatin1("%1 : ").arg((type == 0 ? i18n("Print info") : (type == 1 ? i18n("Print warning") : i18n("Print error")))); + kdDebug() << errmsg << msg << endl; +} + +void showmsg(const TQString& msg, int type = 0) +{ + switch (job_output) { + case 0: showmsgdialog(msg,type); break; + case 1: showmsgconsole(msg,type); break; + default: break; + } +} + +void errormsg(const TQString& msg) +{ + showmsg(msg,2); + exit(1); +} + +void signal_handler(int s) +{ + TQFile::remove(tempFile); + exit(s); +} + +TQString copyfile( const TQString& filename ) +{ + kdDebug( 500 ) << "Copying file " << filename << endl; + TQString result; + TQFile f( filename ); + if ( f.open( IO_ReadOnly ) ) + { + KTempFile temp; + temp.setAutoDelete( false ); + TQFile *tf = temp.file(); + if ( tf ) + { + char buffer[ 0xFFFF ]; + int b = 0; + while ( ( b = f.readBlock( buffer, 0xFFFF ) ) > 0 ) + { + if ( tf->writeBlock( buffer, b ) != b ) + break; + } + tf->close(); + if ( b > 0 ) + temp.setAutoDelete( true ); + else + { + kdDebug( 500 ) << "File copied to " << temp.name() << endl; + result = temp.name(); + } + } + else + temp.setAutoDelete( true ); + f.close(); + } + return result; +} + +//****************************************************************************************************** + +PrintWrapper::PrintWrapper() +: TQWidget(), force_stdin(false), check_stdin(true) +{ +} + +void PrintWrapper::slotPrint() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + +#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) + struct sigaction action; +#endif /* HAVE_SIGACTION && !HAVE_SIGSET*/ + + // read variables from command line + TQString printer = args->getOption("d"); + TQString title = args->getOption("t"); + int ncopies = TQString(args->getOption("n")).toInt(); + TQString job_mode = args->getOption("j"); + TQString system = args->getOption("system"); + QCStringList optlist = args->getOptionList("o"); + TQMap<TQString,TQString> opts; + KURL::List files; + TQStringList filestoprint; + force_stdin = args->isSet("stdin"); + docopy = args->isSet( "c" ); + bool nodialog = !(args->isSet("dialog")); + + if( isatty( 0 )) + { + kdDebug( 500 ) << "stdin is a terminal, disabling it" << endl; + check_stdin = false; + } + + // parse options + for (QCStringList::ConstIterator it=optlist.begin(); it!=optlist.end(); ++it) + { + TQStringList l = TQStringList::split('=',TQString(*it),false); + if (l.count() >= 1) opts[l[0]] = (l.count() == 2 ? l[1] : TQString::null); + } + + // read file list + for (int i=0; i<args->count(); i++) + files.append(args->url(i)); + + // some clean-up + args->clear(); + + // set default values if necessary + if (job_mode == "console") job_output = 1; + else if (job_mode == "none") job_output = 2; + else job_output = 0; + + // some checking + if ( files.count() > 0) + { + check_stdin = false; + + if( force_stdin ) + { + showmsg(i18n("A file has been specified on the command line. Printing from STDIN will be disabled."), 1); + force_stdin = false; + } + } + if (nodialog && files.count() == 0 &&!force_stdin && !check_stdin ) + { + errormsg(i18n("When using '--nodialog', you must at least specify one file to print or use the '--stdin' flag.")); + } + + if( check_stdin ) + { // check if there's any input on stdin + fd_set in; + struct timeval tm; + tm.tv_sec = 0; + tm.tv_usec = 0; + FD_ZERO( &in ); + FD_SET( 0, &in ); + if( select( 1, &in, NULL, NULL, &tm ) ) + { // we have data on stdin + if ( read( 0, &readchar, 1 ) > 0 ) + { + force_stdin = true; + check_stdin = false; + dataread = true; + kdDebug( 500 ) << "input detected on stdin" << endl; + } + else + { + force_stdin = check_stdin = false; + kdDebug( 500 ) << "stdin closed and empty" << endl; + } + } + else + kdDebug( 500 ) << "no input on stdin at startup" << endl; + } + + // force_stdin ? or also check_stdin ? + KPrinter::ApplicationType dialog_mode = (force_stdin || nodialog ? KPrinter::StandAlone : KPrinter::StandAlonePersistent); + KPrinter::setApplicationType(dialog_mode); + if (!force_stdin) + KPrinter::addStandardPage(KPrinter::FilesPage); + + KPrinter kprinter; + if (nodialog) + { + KMPrinter *prt(0); + KMManager *mgr = KMManager::self(); + + mgr->printerList(false); + if (!printer.isEmpty()) + prt = mgr->findPrinter(printer); + else + prt = mgr->defaultPrinter(); + + if (prt == 0) + errormsg(i18n("The specified printer or the default printer could not be found.")); + else if (!prt->autoConfigure(&kprinter)) + errormsg(i18n("Operation aborted.")); + } + else if (!printer.isEmpty()) + kprinter.setSearchName(printer); + kprinter.setDocName(title); + kprinter.initOptions(opts); + kprinter.setOption("kde-filelist", files.toStringList().join("@@")); + kdDebug( 500 ) << kprinter.option( "kde-filelist" ) << endl; + if (ncopies > 0) + kprinter.setNumCopies(ncopies); + + if (nodialog) + slotPrintRequested(&kprinter); + else + { + dlg = KPrintDialog::printerDialog(&kprinter, 0); + if (dlg) + { + connect(dlg, TQT_SIGNAL(printRequested(KPrinter*)), TQT_SLOT(slotPrintRequested(KPrinter*))); + if( check_stdin ) + { + notif = new TQSocketNotifier( 0, TQSocketNotifier::Read, TQT_TQOBJECT(this) ); + connect( notif, TQT_SIGNAL( activated( int )), this, TQT_SLOT( slotGotStdin())); + kdDebug( 500 ) << "waiting for input on stdin" << endl; + } + dlg->exec(); + delete dlg; + } + else + errormsg(i18n("Unable to construct the print dialog.")); + } + + TQTimer::singleShot(10,kapp,TQT_SLOT(quit())); +} + +void hack( KPrintDialog* dlg ); + +void PrintWrapper::slotGotStdin() +{ + delete notif; + if ( read( 0, &readchar, 1 ) > 0 ) + { + force_stdin = true; + check_stdin = false; + dataread = true; + dlg->enableDialogPage( 0, false ); + kdDebug( 500 ) << "got delayed input on stdin" << endl; + } +} + +void PrintWrapper::slotPrintRequested(KPrinter *kprinter) +{ + // re-initialize docName + kprinter->setDocName(TQString::null); + + // download files if needed + TQStringList files = TQStringList::split("@@", kprinter->option("kde-filelist"), false), filestoprint; + for (TQStringList::ConstIterator it=files.begin(); it!=files.end(); ++it) + { + TQString tmpFile; + KURL url = KURL::fromPathOrURL(*it); + kdDebug( 500 ) << url.url() << endl; + if (KIO::NetAccess::download(url, tmpFile, this)) + { + filestoprint << tmpFile; + kprinter->setDocName(url.fileName()); + } + } + + if (filestoprint.count() > 1) + kprinter->setDocName(i18n("Multiple files (%1)").arg(filestoprint.count())); + else if (kprinter->docName().isEmpty()) + kprinter->setDocName(force_stdin ? "<STDIN>" : "KPrinter"); + if (filestoprint.count() == 0) + { + // At this point force_stdin should be true + if (!force_stdin) + errormsg(i18n("Nothing to print.")); + + // print from stdin + +# if defined(HAVE_SIGSET) + sigset(SIGHUP, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGTERM, signal_handler); +# elif defined(HAVE_SIGACTION) + memset(&action, 0, sizeof(action)); + action.sa_handler = signal_handler; + + sigaction(SIGHUP, &action, NULL); + sigaction(SIGINT, &action, NULL); + sigaction(SIGTERM, &action, NULL); +# else + signal(SIGHUP, signal_handler); + signal(SIGINT, signal_handler); + signal(SIGTERM, signal_handler); +# endif + + tempFile = locateLocal("tmp","kprinter_")+TQString::number(getpid()); + filestoprint.append(tempFile); + fromStdin = true; + FILE *fout = fopen(TQFile::encodeName(filestoprint[0]),"w"); + if (!fout) errormsg(i18n("Unable to open temporary file.")); + char buffer[8192]; + int s; + + // check for previously read data + if ( dataread ) + fwrite( &readchar, 1, 1, fout ); + // read stdin and write to temporary file + while ((s=fread(buffer,1,sizeof(buffer),stdin)) > 0) + fwrite(buffer,1,s,fout); + + s = ftell(fout); + fclose(fout); + if (s <= 0) + { + showmsg(i18n("Stdin is empty, no job sent."), 2); + TQFile::remove(filestoprint[0]); + return; + } + } + else if ( docopy ) + { + for ( TQStringList::Iterator it=filestoprint.begin(); it!=filestoprint.end(); ++it ) + { + TQString tmp = copyfile( *it ); + if ( tmp.isEmpty() ) + { + errormsg( i18n( "Unable to copy file %1." ).arg( *it ) ); + return; + } + *it = tmp; + } + fromStdin = true; + } + else + fromStdin = false; + + // print all files. Remove it after if printing from + // stdin. "kprinter" shouldn't remove temp file itself, + // otherwise the temp file might get removed before the + // print process finishes. + bool ok = kprinter->printFiles(filestoprint, fromStdin); + + if (!ok) + showmsg(i18n("Error while printing files"), 2); + // Do not show this dialog anymore. Code sould be removed definitively + // if nobody complains. + /*else + { + QString msg = i18n("<nobr>File(s) sent to printer <b>%1</b>.</nobr>").arg(kprinter->printerName()); + showmsg(msg,0); + }*/ +} + +#include "printwrapper.moc" diff --git a/tdeprint/kprinter/printwrapper.h b/tdeprint/kprinter/printwrapper.h new file mode 100644 index 000000000..e34e8d964 --- /dev/null +++ b/tdeprint/kprinter/printwrapper.h @@ -0,0 +1,49 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#ifndef PRINTWRAPPER_H +#define PRINTWRAPPER_H + +#include <tqwidget.h> + +class KPrinter; +class KPrintDialog; +class TQSocketNotifier; + +class PrintWrapper : public TQWidget +{ + Q_OBJECT +public: + PrintWrapper(); + +public slots: + void slotPrint(); + void slotPrintRequested(KPrinter*); + +private slots: + void slotGotStdin(); + +private: + bool force_stdin; + bool check_stdin; + KPrintDialog* dlg; + TQSocketNotifier* notif; +}; + +#endif diff --git a/tdeprint/printmgr/CMakeLists.txt b/tdeprint/printmgr/CMakeLists.txt new file mode 100644 index 000000000..af68abb3f --- /dev/null +++ b/tdeprint/printmgr/CMakeLists.txt @@ -0,0 +1,37 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_definitions( -D_KDEPRINT_COMPILE ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### other data ################################ + +tde_install_icons( printmgr ) +install( FILES printers.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) + + +##### kcm_printmgr (module) ##################### + +tde_add_kpart( kcm_printmgr AUTOMOC + SOURCES kcmprintmgr.cpp + LINK tdeprint_management-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) diff --git a/tdeprint/printmgr/Makefile.am b/tdeprint/printmgr/Makefile.am new file mode 100644 index 000000000..d0932829a --- /dev/null +++ b/tdeprint/printmgr/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +INCLUDES = $(all_includes) + +kde_module_LTLIBRARIES = kcm_printmgr.la + +kcm_printmgr_la_SOURCES = kcmprintmgr.cpp +kcm_printmgr_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_printmgr_la_LIBADD = -ltdeprint_management + +noinst_HEADERS = kcmprintmgr.h + +KDE_ICON = printmgr + +xdg_apps_DATA = printers.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kcmprintmgr.pot diff --git a/tdeprint/printmgr/hi128-app-printmgr.png b/tdeprint/printmgr/hi128-app-printmgr.png new file mode 100644 index 000000000..7db5f56b1 Binary files /dev/null and b/tdeprint/printmgr/hi128-app-printmgr.png differ diff --git a/tdeprint/printmgr/hi16-app-printmgr.png b/tdeprint/printmgr/hi16-app-printmgr.png new file mode 100644 index 000000000..d6defce21 Binary files /dev/null and b/tdeprint/printmgr/hi16-app-printmgr.png differ diff --git a/tdeprint/printmgr/hi22-app-printmgr.png b/tdeprint/printmgr/hi22-app-printmgr.png new file mode 100644 index 000000000..a71ee2817 Binary files /dev/null and b/tdeprint/printmgr/hi22-app-printmgr.png differ diff --git a/tdeprint/printmgr/hi32-app-printmgr.png b/tdeprint/printmgr/hi32-app-printmgr.png new file mode 100644 index 000000000..d554b554f Binary files /dev/null and b/tdeprint/printmgr/hi32-app-printmgr.png differ diff --git a/tdeprint/printmgr/hi48-app-printmgr.png b/tdeprint/printmgr/hi48-app-printmgr.png new file mode 100644 index 000000000..13adbd006 Binary files /dev/null and b/tdeprint/printmgr/hi48-app-printmgr.png differ diff --git a/tdeprint/printmgr/hi64-app-printmgr.png b/tdeprint/printmgr/hi64-app-printmgr.png new file mode 100644 index 000000000..5d22d215e Binary files /dev/null and b/tdeprint/printmgr/hi64-app-printmgr.png differ diff --git a/tdeprint/printmgr/hisc-app-printmgr.svgz b/tdeprint/printmgr/hisc-app-printmgr.svgz new file mode 100644 index 000000000..f40b4bdfa Binary files /dev/null and b/tdeprint/printmgr/hisc-app-printmgr.svgz differ diff --git a/tdeprint/printmgr/kcmprintmgr.cpp b/tdeprint/printmgr/kcmprintmgr.cpp new file mode 100644 index 000000000..34b773070 --- /dev/null +++ b/tdeprint/printmgr/kcmprintmgr.cpp @@ -0,0 +1,73 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "kcmprintmgr.h" +#include "tdeprint/kmmainview.h" + +#include <tqlayout.h> + +#include <kgenericfactory.h> +#include <kaboutdata.h> +#include <kdebug.h> +#include <klocale.h> + +typedef KGenericFactory<KCMPrintMgr, TQWidget> KPrintMgrFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_printmgr, KPrintMgrFactory("kcmprintmgr") ) + +KCMPrintMgr::KCMPrintMgr(TQWidget *parent, const char *name, const TQStringList &) +: KCModule(KPrintMgrFactory::instance(),parent,name) +{ + setButtons(KCModule::Ok); + setRootOnlyMsg( i18n( + "Print management as normal user\n" + "Some print management operations may need administrator privileges. Use the\n" + "\"Administrator Mode\" button below to start this print management tool with\n" + "administrator privileges.") ); + setUseRootOnlyMsg(false); + + m_mainview = new KMMainView(this,"MainView"); + + TQVBoxLayout *main_ = new TQVBoxLayout(this, 0, 0); + main_->addWidget(m_mainview); + main_->activate(); + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmprintmgr"), I18N_NOOP("KDE Printing Management"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2000 - 2002 Michael Goffioul")); + about->addAuthor("Michael Goffioul", 0, "tdeprint@swing.be"); + setAboutData(about); +} + +TQString KCMPrintMgr::quickHelp() const +{ + return i18n("<h1>Printers</h1>The KDE printing manager is part of KDEPrint which " + "is the interface to the real print subsystem of your Operating System (OS). " + "Although it does add some additional functionality of its own to those subsystems, " + "KDEPrint depends on them for its functionality. Spooling and filtering tasks, especially, " + "are still done by your print subsystem, or the administrative tasks (adding or " + "modifying printers, setting access rights, etc.)<br/> " + "What print features KDEPrint supports is therefore heavily dependent on your chosen print " + "subsystem. For the best support in modern printing, the KDE Printing Team recommends " + "a CUPS based printing system."); +} + +KCMPrintMgr::~KCMPrintMgr() +{ +} diff --git a/tdeprint/printmgr/kcmprintmgr.h b/tdeprint/printmgr/kcmprintmgr.h new file mode 100644 index 000000000..e82bc730f --- /dev/null +++ b/tdeprint/printmgr/kcmprintmgr.h @@ -0,0 +1,39 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#ifndef KCMPRINTMGR_H +#define KCMPRINTMGR_H + +#include <kcmodule.h> + +class KMMainView; + +class KCMPrintMgr : public KCModule +{ +public: + KCMPrintMgr(TQWidget *parent, const char *name, const TQStringList &); + ~KCMPrintMgr(); + + TQString quickHelp() const; + +private: + KMMainView *m_mainview; +}; + +#endif diff --git a/tdeprint/printmgr/printers.desktop b/tdeprint/printmgr/printers.desktop new file mode 100644 index 000000000..38820b20b --- /dev/null +++ b/tdeprint/printmgr/printers.desktop @@ -0,0 +1,235 @@ +[Desktop Entry] +Exec=kcmshell printers +Icon=printmgr +Type=Application +DocPath=tdeprint/index.html +MimeType=print/manager; + +X-KDE-ModuleType=Library +X-KDE-Library=printmgr +X-KDE-RootOnly=true +X-KDE-HasReadOnlyMode=true + +Name=Printers +Name[af]=Drukkers +Name[ar]=الطابعات +Name[be]=Друкаркі +Name[bg]=Принтери +Name[bn]=মুদ্রণ +Name[br]=Moullerezioù +Name[bs]=Štampači +Name[ca]=Impressores +Name[cs]=Tiskárny +Name[csb]=Drëkerë +Name[cy]=Argraffyddion +Name[da]=Printere +Name[de]=Drucker +Name[el]=Εκτυπωτές +Name[eo]=Printiloj +Name[es]=Impresoras +Name[et]=Printerid +Name[eu]=Inprimagailuak +Name[fa]=چاپگرها +Name[fi]=Tulostimet +Name[fr]=Imprimantes +Name[ga]=Printéirí +Name[gl]=Impresoras +Name[he]=מדפסות +Name[hi]=प्रिंटर +Name[hr]=Pisači +Name[hu]=Nyomtató +Name[is]=Prentarar +Name[it]=Stampanti +Name[ja]=プリンタ +Name[ka]=პრინტერები +Name[kk]=Принтерлер +Name[km]=ម៉ាស៊ីន​បោះពុម្ព +Name[lo]=ເຄື່ອງພິມ - K +Name[lt]=Spausdintuvai +Name[lv]=Printeri +Name[mk]=Печатачи +Name[mn]=Хэвлэгч +Name[ms]=Pencetak +Name[nb]=Skrivere +Name[nds]=Druckers +Name[ne]=मुद्रक +Name[nn]=Skrivarar +Name[nso]=Digatisi +Name[pa]=ਪਰਿੰਟਰ +Name[pl]=Drukarki +Name[pt]=Impressoras +Name[pt_BR]=Impressoras +Name[ro]=Imprimante +Name[ru]=Принтеры +Name[rw]=Mucapyi +Name[se]=Čálánat +Name[sk]=Tlačiarne +Name[sl]=Tiskalniki +Name[sr]=Штампачи +Name[sr@Latn]=Štampači +Name[ss]=Tishiceleli +Name[sv]=Skrivare +Name[ta]=அச்சியந்திரம் +Name[te]=ప్రింటర్లు +Name[tg]=Чопгарҳо +Name[th]=เครื่องพิมพ์ +Name[tr]=Yazıcılar +Name[tt]=Basaqlar +Name[uk]=Принтери +Name[uz]=Printerlar +Name[uz@cyrillic]=Принтерлар +Name[ven]=Dziphirinthara +Name[vi]=Máy in +Name[wa]=Sicrireces +Name[xh]=Abashicileli +Name[zh_CN]=打印机 +Name[zh_TW]=印表機 +Name[zu]=Abashicileli + +Comment=Printing system configuration (printers, jobs, classes, ...) +Comment[af]=Drukker substelsel opstelling (drukkers, werke, klasse, ...) +Comment[ar]=إعداد نظام الطباعة (الطابعات, المهمات, الفئات ...) +Comment[az]=Çap Etmə sistemi quraşdırması (çap edicilər, vəzifələr, siniflər, ...) +Comment[be]=Настаўленні сістэмы друку (друкаркі, заданні, класы, ...) +Comment[bg]=Настройване на системата за печат +Comment[bn]=মুদ্রণব্যবস্থার কনফিগারেশন (printers, jobs, classes, ...) +Comment[bs]=Podešavanje sistema štampe (štampači, zadaci, klase, ...) +Comment[ca]=Configuració del sistema d'impressió (impressores, tasques, classes...) +Comment[cs]=Nastavení tiskového systému (tiskárny, úlohy, třídy, ...) +Comment[csb]=Kònfigùracëjô systemë drëkòwaniô (drëkrë, pòlétë, klasë, ...) +Comment[cy]=Ffurfweddu cysawd argraffu (argraffyddion, swyddi, dosbarthidau, ...) +Comment[da]=Printersystemindstilling (printere, job, klasser, ...) +Comment[de]=Einrichtung des Drucksystems (Drucker, Aufträge, Klassen ...) +Comment[el]=Ρύθμιση συστήματος εκτύπωσης (εκτυπωτές, εργασίες, κλάσεις, ...) +Comment[eo]=Agordo de printiloj, taskoj, klasoj,... +Comment[es]=Configuración del sistema de impresión (impresoras, trabajos, clases...) +Comment[et]=Trükkimissüsteemi seadistamine (printerid, tööd, klassid...) +Comment[eu]=Inprimaketa sistemaren konfigurazioa (inprimagailuak, lanak, claseak, ...) +Comment[fa]=پیکربندی سیستم چاپ )چاپگرها، کارها، رده‌ها و ...( +Comment[fi]=Tulostusjärjestelmän asetukset (tulostimet, työt, luokat, ...) +Comment[fr]=Configuration du système d'impression (imprimantes, travaux d'impression, classes...) +Comment[fy]=Ynstellings fan it printsysteem (printers, taken, klassen, ...) +Comment[gl]=Configuración do sistema de Impresión (impresoras, traballos, clases, ...) +Comment[he]=שינוי הגדרות מערכת ההדפסה (מדפסות, עבודות, מחלקות...) +Comment[hi]=प्रिंटर तंत्र कॉन्फ़िगरेशन (प्रिंटर,कार्य,क्लासेस...) +Comment[hr]=Konfiguriranje ispisnog sustava (pisači, zadaci, klase...) +Comment[hu]=A nyomtatási rendszer beállításai +Comment[is]=Stillingar prentkerfis KDE forrita (prentara, verk, flokka,...) +Comment[it]=Configurazione del sistema di stampa (stampanti, lavori, classi, ...) +Comment[ja]=印刷システムの設定 (プリンタ、ジョブ、クラスなど) +Comment[ka]=ბეჭდვის სისტემის კონფიგურაცია (პრინტერები, დავალებები, კლასები,...) +Comment[kk]=Басып шығару жүйесін баптау (принтерлер, тапсырмалар, кластар, ...) +Comment[km]=ការ​កំណត់​រចនាសម្ព័ន្ធ​ប្រព័ន្ធ​បោះពុម្ព (ម៉ាស៊ីន​បោះពុម្ព ការងារ សន្ដាន...) +Comment[lo]=ປັບແຕ່ງລະບົບການພິມ (ເຄື່ອງພິມ,ງານພິມ,ຄລາສ, ...) +Comment[lt]=Spausdinimo sistemos konfigūravimas (spausdintuvai, užduotys, klasės, ...) +Comment[lv]=Drukas sistēmas konfigurācija (drukas iekārtas, darbi, klases, ...) +Comment[mk]=Конфигурација на печатарскиот систем (печатачи, задачи, класи, ...) +Comment[mn]=Хэвлэх системийн тохируулга(Хэвлэгч,Даалгавар, Ангиуд...) +Comment[ms]=Konfigurasi sistem pencetakan [pencetak, kerja, kelas, ...) +Comment[mt]=Konfigurazzjoni tas-sistema tal-ipprintjar (printers, xogħol, klassijiet, ...) +Comment[nb]=Tilpass utskriftssystemet (skrivere, jobber, klasser …) +Comment[nds]=Instellen för dat Drucksysteem (Druckers, Opgaven, Klassen, ...) +Comment[ne]=मुद्रण प्रणाली कन्फिगरेसन (मुद्रक, कार्य, बग, ...) +Comment[nl]=Configuratie van het afdruksysteem (printers, taken, klassen, ...) +Comment[nn]=Oppsett av utskriftssystem (skrivarar, jobbar, klassar, …) +Comment[nso]=Peakanyo ya system ya kgatiso (digatisi, mesomo, maemo,...) +Comment[pa]=ਪਰਿੰਟਿੰਗ ਸਿਸਟਮ ਸੰਰਚਨਾ (ਪਰਿੰਟਰ, ਕੰਮ, ਕਲਾਸ, ...) +Comment[pl]=Konfiguracja systemu drukowania (drukarki, zadania, klasy, ...) +Comment[pt]=Configuração do sistema de impressão (impressoras, tarefas, classes, ...) +Comment[pt_BR]=Configuração do sistema de impressão (impressoras, trabalhos, classes, ...) +Comment[ro]=Configurează sistemul de tipărire (imprimante, lucrări, clase) +Comment[ru]=Настройки системы печати (принтеры, задания, классы...) +Comment[rw]=Iboneza rya sisitemu y'icapa (Mucapyi,imirimo,inzego,..) +Comment[se]=Heivet čálihanvuogádaga (čálániid, barggut, luohkkát, …) +Comment[sk]=Nastavenie systému tlače (tlačiarne, úlohy, triedy, ...) +Comment[sl]=Nastavitev sistema tiskanja (tiskalniki, opravila, razredi ...) +Comment[sr]=Подешавање система за штампање (штампачи, послови, класе, ...) +Comment[sr@Latn]=Podešavanje sistema za štampanje (štampači, poslovi, klase, ...) +Comment[sv]=Anpassa skrivarsystem (skrivare, jobb, klasser...) +Comment[ta]=அச்சியந்திர சாதன வடிவமைப்பு (அச்சியந்திரங்கள், வேலைகள், பிரிவுகள், ...) +Comment[tg]= Танзимоти системаи чоп (чопгарҳо, корҳо, синфҳо ва ғайра) +Comment[th]=ปรับแต่งระบบการพิมพ์ (เครื่องพิมพ์, งานพิมพ์, คลาส, ...) +Comment[tr]=Yazdırma sistemi kurulumu (yazıcılar, işler, sınıflar, ...) +Comment[tt]=Bastıru sistemeneñ caylawı: basaqlar, eşlär, törlär kebek närsä +Comment[uk]=Налаштування системи друку (принтери, задачі, класи, ...) +Comment[uz]=Bosib chiqarish tizimini moslash (printerlar, vazifalar, sinflar...) +Comment[uz@cyrillic]=Босиб чиқариш тизимини мослаш (принтерлар, вазифалар, синфлар...) +Comment[ven]=Nzudzanyo ya maitele au phirintha (Dziphirinthara, mishumo, dzikilasi,...) +Comment[vi]=Cấu hình hệ thống in ấn (máy in, tác vụ in, lớp, ...) +Comment[wa]=Apontiaedje do sistinme d' imprimaedje (sicrireces, bouyes, classes...) +Comment[xh]=Uqwalaselo lwendlela yoshicilelo (abashicileli, imisebenzi, iintlobo, ...) +Comment[zh_CN]=打印系统配置(打印机、任务、类等等) +Comment[zh_TW]=列印系統設定 (印表機、工作、類別等等) +Comment[zu]=Inhlanganiselo yesistimu yokushicilelo (abashicileli, imisebenzi, amakilasi, ...) + +Keywords=print,printer,printing management +Keywords[af]=print,printer,printing bestuuring +Keywords[ar]=طبع, طباعة, ادارة الطابعات +Keywords[az]=çap et,çap edici,çap etmə idarəsi +Keywords[be]=Друк,Друкаваць,Друкарка,Кіраванне друкам,print,printer,printing management +Keywords[bg]=печат, принтер, отпечатване, управление, система, print, printer, printing management +Keywords[ca]=imprimir,impressora,gestió de la impressió +Keywords[cs]=tisk,tiskárna,správa tisku +Keywords[csb]=drëkùjë,drëker,sprôwianié wëdrëkama +Keywords[cy]=argraffu,argraffydd,rheoli argraffu +Keywords[da]=udskriv,printer,printerhåndtering +Keywords[de]=Druck,Druckaufträge,Druckerverwaltung +Keywords[el]=εκτύπωση,εκτυπωτής,διαχείριση εκτυπώσεων +Keywords[eo]=printo,printado,presado,presilo,presadminsitrado +Keywords[es]=imprimir,impresora,gestión de impresión +Keywords[et]=trükkimine,printer,trükkimise haldamine +Keywords[eu]=inprimatu,inprimagailua,inprimaketa kudeaketa +Keywords[fa]=چاپ، چاپگر، مدیریت چاپ +Keywords[fi]=tulostus,tulostin,tulostuksenhallinta +Keywords[fr]=impression,imprimante,système d'impression +Keywords[fy]=print,printer,printing management,printbehear,printsje +Keywords[ga]=priontáil,printéir,bainisteoireacht priontála +Keywords[gl]=imprimir,impresora,xestión de impresión +Keywords[he]=הדפסה,מדפסת,ניהול הדפסה, print,printer,printing management +Keywords[hi]=छापा,प्रिंटर,छपाई प्रबंधन +Keywords[hr]=print,printer,printing management,ispis,pisač,upravljanje ispisivanjem +Keywords[hu]=nyomtatás,nyomtató,nyomtatáskezelés +Keywords[is]=prentun,prentari,prentstjórnun +Keywords[it]=stampa,stampante,gestione stampa +Keywords[ja]=印刷, プリンタ, 印刷管理 +Keywords[km]=បោះពុម្ព,ម៉ាស៊ីន​បោះពុម្ព,គ្រប់គ្រង​ការ​បោះពុម្ព +Keywords[lo]=ພິມ,ເຄື່ອງພິມ,ຈັດການພິມ +Keywords[lt]=print,printer,printing management,spausdinti,spausdintuvas,spausdinimo tvarkymas +Keywords[lv]=druka,drukas iekārta,drukāšanas menedžments +Keywords[mk]=print,printer,printing management,печати,печатач,менаџмент на печатење +Keywords[mn]=Хэвлэх,Хэвлэгч,Хэвлэгчийн удирдлага +Keywords[ms]=cetak, pencetak, pengurusan pencetakan +Keywords[mt]=print,printer,printing management,stampar,printja,stampa,ipprintja +Keywords[nb]=utskrift,skriver,utskriftskontroll +Keywords[nds]=drucken,Drucker,Opgaav,Opgaven,Druckopgaav,Druckopgaven,Opdrag,Druckopdrag,Opdrääg,Druckopdrääg +Keywords[ne]=मुद्रण, मुद्रक, मुद्रण व्यवस्थापन +Keywords[nl]=print,printer,printing management,afdrukbeheer,afdrukken +Keywords[nn]=utskrift,skrivar,utskriftshandsaming +Keywords[nso]=taolo ya kgatiso,segatisi,kgatiso +Keywords[pa]=ਛਾਪਣ,ਪਰਿੰਟਰ,ਪਰਿੰਟ,ਪਰਿੰਟ ਮੈਨੇਜਰ +Keywords[pl]=drukuj,drukarka,zarządzanie drukowaniem +Keywords[pt]=imprimir,impressora,gestão de impressão +Keywords[pt_BR]=imprimir,impressora,gerenciamento de impressão +Keywords[ro]=tipărire,printare,imprimantă,administrare tipărire +Keywords[rw]=gucapa,mucapyi,igenzura ry'icapa +Keywords[se]=čáliheapmi,čálán,čálihangieđahalli +Keywords[sk]=tlač,tlačiareň,správa tlače +Keywords[sl]=tiskanje,tiskalnik,upravljanje tiskanja +Keywords[sr]=print,printer,printing management,штампање,штампач,управљање штампом +Keywords[sr@Latn]=print,printer,printing management,štampanje,štampač,upravljanje štampom +Keywords[sv]=skriv ut,skrivare,skrivarhantering +Keywords[ta]=அச்சு, அச்சியந்திரம்,அச்சு மேலாளர் +Keywords[th]=พิมพ์,เครื่องพิมพ์,จัดการการพิมพ์ +Keywords[tr]=yazdır,yazıcı,yazıcı yönetimi +Keywords[uk]=друк,принтер,керування друком +Keywords[uz]=printer,bosib chiqarish,bosib chiqarishni boshqarish +Keywords[uz@cyrillic]=принтер,босиб чиқариш,босиб чиқаришни бошқариш +Keywords[ven]=u phirintha,phirinthara,vhulanguli ha phirinthara +Keywords[vi]=in ấn,máy in,quản lí in ấn +Keywords[wa]=rexhe,sicrirece,manaedjmint di l' imprimaedje,imprimaedje +Keywords[xh]=shicilela,umshicileli,uphatho lokushicilela +Keywords[zh_CN]=print,printer,printing management,打印,打印机,打印管理 +Keywords[zh_TW]=print,printer,printing management,列印,印表機,列印管理 +Keywords[zu]=shicilela,umshicileli,abaphathi boshicilelo + +Categories=Qt;KDE;X-KDE-settings-hardware;Settings; diff --git a/tdeprint/slave/CMakeLists.txt b/tdeprint/slave/CMakeLists.txt new file mode 100644 index 000000000..db9162a1b --- /dev/null +++ b/tdeprint/slave/CMakeLists.txt @@ -0,0 +1,39 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_definitions( -D_KDEPRINT_COMPILE ) + +add_subdirectory( mimetypes ) +add_subdirectory( templates ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### other data ################################ + +install( FILES print.protocol printdb.protocol DESTINATION ${SERVICES_INSTALL_DIR} ) + + +##### kio_print (module) ######################## + +tde_add_kpart( kio_print AUTOMOC + SOURCES kio_print.cpp + LINK tdeprint-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) diff --git a/tdeprint/slave/Makefile.am b/tdeprint/slave/Makefile.am new file mode 100644 index 000000000..5e5e04123 --- /dev/null +++ b/tdeprint/slave/Makefile.am @@ -0,0 +1,22 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +SUBDIRS = mimetypes templates + +INCLUDES= $(all_includes) + +kde_module_LTLIBRARIES = kio_print.la + +kio_print_la_SOURCES = kio_print.cpp +kio_print_la_LIBADD = $(LIB_KIO) -ltdeprint +kio_print_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) + +METASOURCES = AUTO + +noinst_HEADERS = kio_print.h + +# Services +servicesdir = $(kde_servicesdir) +services_DATA = print.protocol printdb.protocol + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kio_print.pot diff --git a/tdeprint/slave/kio_print.cpp b/tdeprint/slave/kio_print.cpp new file mode 100644 index 000000000..d8bb4cf6e --- /dev/null +++ b/tdeprint/slave/kio_print.cpp @@ -0,0 +1,920 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "kio_print.h" +#include <tdeprint/kmprinter.h> +#include <tdeprint/kmmanager.h> +#include <tdeprint/kmjobmanager.h> +#include <tdeprint/kmjob.h> +#include <tdeprint/driver.h> + +#include <tqfile.h> +#include <tqtextstream.h> +#include <klocale.h> +#include <kdebug.h> +#include <kinstance.h> +#include <kio/global.h> +#include <kstandarddirs.h> +#include <kiconloader.h> +#include <kmimetype.h> +#include <kio/job.h> +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <kprocess.h> +#include <ktempfile.h> +#include <tqfile.h> +#include <tqdom.h> + +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> + +#define PRINT_DEBUG kdDebug(7019) << "kio_print: " + +extern "C" +{ + int KDE_EXPORT kdemain(int argc, char **argv); +} + +void addAtom(KIO::UDSEntry& entry, unsigned int ID, long l, const TQString& s = TQString()) +{ + KIO::UDSAtom atom; + atom.m_uds = ID; + atom.m_long = l; + atom.m_str = s; + entry.append(atom); +} + +static void createDirEntry(KIO::UDSEntry& entry, const TQString& name, const TQString& url, const TQString& mime) +{ + entry.clear(); + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR); + addAtom(entry, KIO::UDS_ACCESS, 0500); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); + addAtom(entry, KIO::UDS_URL, 0, url); + PRINT_DEBUG << "creating dir entry url=" << url << " mimetype=" << mime << endl; + addAtom(entry, KIO::UDS_SIZE, 0); + //addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); +} + +static void createFileEntry(KIO::UDSEntry& entry, const TQString& name, const TQString& url, const TQString& mime) +{ + entry.clear(); + addAtom(entry, KIO::UDS_NAME, 0, name); + addAtom(entry, KIO::UDS_FILE_TYPE, S_IFREG); + addAtom(entry, KIO::UDS_URL, 0, url); + addAtom(entry, KIO::UDS_ACCESS, 0400); + addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime); + addAtom(entry, KIO::UDS_SIZE, 0); + addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/octet-stream"); +} + +TQString buildMenu(const TQStringList& items, const TQStringList& links, int active) +{ + if (items.count() == 0 || items.count() != links.count()) + return TQString("<td height=20 class=\"menu\"> </td>"); + + TQString s; + int index = 0; + for (TQStringList::ConstIterator it1=items.begin(), it2=links.begin(); it1!=items.end() && it2!=links.end(); ++it1, ++it2, index++) + { + if (index == active) + s.append("<td height=20 class=\"menuactive\">  ").append(*it1).append(" </td>"); + else + s.append("<td height=20 class=\"menu\">  <a class=\"menu\" href=\"").append(*it2).append("\">").append(*it1).append("</a> </td>"); + if ((unsigned int)index < items.count()-1) + s.append("<td height=20 class=\"menu\">|</td>"); + } + return s; +} + +TQString buildOptionRow(DrBase *opt, bool f) +{ + TQString s("<tr class=\"%1\"><td width=\"41%\">%1</td><td width=\"59%\">%1</td></tr>\n"); + s = s.arg(f ? "contentwhite" : "contentyellow").arg(opt->get("text")).arg(opt->prettyText()); + return s; +} + +TQString buildGroupTable(DrGroup *grp, bool showHeader = true) +{ + TQString s("<tr class=\"top\"><td colspan=\"2\">%1</td></tr>\n"); + if (showHeader) + s = s.arg(grp->get("text")); + else + s = TQString(); + + TQPtrListIterator<DrBase> oit(grp->options()); + bool f(false); + for (; oit.current(); ++oit, f = !f) + s.append(buildOptionRow(oit.current(), f)); + + TQPtrListIterator<DrGroup> git(grp->groups()); + for (; git.current(); ++git) + s.append(buildGroupTable(git.current())); + + return s; +} + +int kdemain(int argc, char **argv) +{ + KInstance instance("kio_print"); + + PRINT_DEBUG << "starting ioslave" << endl; + if (argc != 4) + { + fprintf(stderr, "Usage: kio_print protocol domain-socket1 domain-socket2\n"); + exit(-1); + } + + /* create fake KApplicatiom object, needed for job stuffs */ + KAboutData about( "kio_print", "kio_print", "fake_version", + "KDEPrint IO slave", KAboutData::License_GPL, "(c) 2003, Michael Goffioul" ); + KCmdLineArgs::init( &about ); + KApplication app; + + KIO_Print slave(argv[2], argv[3]); + slave.dispatchLoop(); + + PRINT_DEBUG << "done" << endl; + return 0; +} + +KIO_Print::KIO_Print(const TQCString& pool, const TQCString& app) +: KIO::SlaveBase("print", pool, app) +{ +} + +void KIO_Print::listDir(const KURL& url) +{ + if ( url.protocol() == "printdb" ) + { + listDirDB( url ); + return; + } + + TQStringList path = TQStringList::split('/', url.path(), false); + + PRINT_DEBUG << "listing " << url.path() << endl; + TQString group = path[0].lower(); + if (path.count() == 0) + listRoot(); + else if (path.count() == 1 && group != "manager" && group != "jobs") + { + PRINT_DEBUG << "listing group " << path[0] << endl; + + int mask; + TQString mimeType; + KIO::UDSEntry entry; + + if (group == "printers") + { + mask = KMPrinter::Printer; + mimeType = "print/printer"; + } + else if (group == "classes") + { + mask = KMPrinter::Class | KMPrinter::Implicit; + mimeType = "print/class"; + } + else if (group == "specials") + { + mask = KMPrinter::Special; + mimeType = "print/printer"; + } + else + { + error(KIO::ERR_DOES_NOT_EXIST, url.url()); + return; + } + + TQPtrListIterator<KMPrinter> it(*(KMManager::self()->printerList())); + for (;it.current();++it) + { + if (!(it.current()->type() & mask) || !it.current()->instanceName().isEmpty()) + { + PRINT_DEBUG << "rejecting " << it.current()->name() << endl; + continue; + } + + //createFileEntry(entry, it.current()->name(), ("print:/"+path[0]+"/"+it.current()->name()), mimeType, "text/html", S_IFDIR); + createDirEntry(entry, it.current()->name(), ("print:/"+group+"/"+KURL::encode_string_no_slash(it.current()->name())), mimeType); + PRINT_DEBUG << "accepting " << it.current()->name() << endl; + listEntry(entry, false); + } + + listEntry(KIO::UDSEntry(), true); + finished(); + } + else + { + //error(KIO::ERR_UNSUPPORTED_ACTION, i18n("Unsupported path %1").arg(url.path())); + // better do nothing + listEntry(KIO::UDSEntry(), true); + totalSize(0); + finished(); + } +} + +void KIO_Print::listRoot() +{ + PRINT_DEBUG << "listing root entry" << endl; + + KIO::UDSEntry entry; + + // Classes entry + createDirEntry(entry, i18n("Classes"), "print:/classes", "print/folder"); + listEntry(entry, false); + + // Printers entry + createDirEntry(entry, i18n("Printers"), "print:/printers", "print/folder"); + listEntry(entry, false); + + // Specials entry + createDirEntry(entry, i18n("Specials"), "print:/specials", "print/folder"); + listEntry(entry, false); + + // Management entry + //createFileEntry(entry, i18n("Manager"), "print:/manager", "print/manager", TQString(), S_IFDIR); + createDirEntry(entry, i18n("Manager"), "print:/manager", "print/manager"); + listEntry(entry, false); + + // Jobs entry + createDirEntry(entry, i18n("Jobs"), "print:/jobs", "print/jobs"); + listEntry(entry, false); + + // finish + totalSize(4); + listEntry(entry, true); + finished(); +} + +void KIO_Print::listDirDB( const KURL& url ) +{ + PRINT_DEBUG << "listDirDB: " << url << endl; + + TQStringList pathComps = TQStringList::split( '/', url.path(), false ); + KURL remUrl; + + remUrl.setProtocol( "http" ); + remUrl.setHost( url.host() ); + remUrl.setPort( url.port() ); + remUrl.setPath( "/list-data.cgi" ); + switch ( pathComps.size() ) + { + case 0: /* list manufacturers */ + remUrl.addQueryItem( "type", "makes" ); + break; + case 1: /* list printers for the given manufacturer */ + remUrl.addQueryItem( "type", "printers" ); + remUrl.addQueryItem( "make", pathComps[ 0 ] ); + break; + case 2: /* list drivers for given printer */ + remUrl.addQueryItem( "type", "drivers" ); + remUrl.addQueryItem( "printer", pathComps[ 1 ] ); + break; + default: + error( KIO::ERR_UNSUPPORTED_ACTION, "Not implemented" ); + return; + } + remUrl.addQueryItem( "format", "xml" ); + + if ( getDBFile( remUrl ) ) + { + TQDomDocument doc; + if ( doc.setContent( &m_httpBuffer, false ) ) + { + TQDomNodeList l; + KIO::UDSEntry entry; + switch ( pathComps.size() ) + { + case 0: + l = doc.documentElement().elementsByTagName( "make" ); + for ( unsigned int i=0; i<l.count(); i++ ) + { + TQString make = l.item( i ).toElement().text(); + KURL makeUrl = url; + makeUrl.addPath( "/" + make ); + createDirEntry( entry, make, makeUrl.url(), "print/folder" ); + listEntry( entry, false ); + PRINT_DEBUG << "make: " << make << endl; + } + break; + case 1: + l = doc.documentElement().elementsByTagName( "printer" ); + for ( unsigned int i=0; i<l.count(); i++ ) + { + TQString ID, name; + for ( TQDomNode n=l.item( i ).firstChild(); !n.isNull(); n=n.nextSibling() ) + { + TQDomElement e = n.toElement(); + if ( e.tagName() == "id" ) + ID = e.text(); + else if ( e.tagName() == "model" ) + name = e.text(); + } + if ( !ID.isEmpty() && !name.isEmpty() ) + { + KURL printerUrl = url; + printerUrl.addPath( "/" + ID ); + createDirEntry( entry, name, printerUrl.url(), "print/printermodel" ); + listEntry( entry, false ); + PRINT_DEBUG << "printer: " << ID << endl; + } + } + break; + case 2: + l = doc.documentElement().elementsByTagName( "driver" ); + for ( unsigned int i=0; i<l.count(); i++ ) + { + TQString driver = l.item( i ).toElement().text(); + KURL driverUrl = url; + driverUrl.addPath( "/" + driver ); + createFileEntry( entry, driver, driverUrl.url(), "print/driver" ); + listEntry( entry, false ); + PRINT_DEBUG << "driver: " << driver << endl; + } + break; + default: + error( KIO::ERR_UNSUPPORTED_ACTION, "Not implemented" ); + return; + } + listEntry( KIO::UDSEntry(), true ); + finished(); + } + else + { + if ( m_httpBuffer.buffer().size() == 0 ) + error( KIO::ERR_INTERNAL, i18n( "Empty data received (%1)." ).arg( url.host() ) ); + else + error( KIO::ERR_INTERNAL, i18n( "Corrupted/incomplete data or server error (%1)." ).arg( url.host() ) ); + } + } + /* + * If error occured while downloading, error has been called by + * getDBFile. No need for a "else" statement. + */ +} + +void KIO_Print::stat(const KURL& url) +{ + if ( url.protocol() == "printdb" ) + { + statDB( url ); + return; + } + + PRINT_DEBUG << "stat: " << url.url() << endl; + TQStringList path = TQStringList::split('/', url.encodedPathAndQuery(-1), false); + KIO::UDSEntry entry; + TQString mime; + bool err(false); + + PRINT_DEBUG << "path components: " << path.join(", ") << endl; + + switch (path.count()) + { + case 0: + createDirEntry(entry, i18n("Print System"), "print:/", "print/folder"); + break; + case 1: + if (path[0].lower() == "classes") + createDirEntry(entry, i18n("Classes"), "print:/classes", "print/folder"); + else if (path[0].lower() == "printers") + createDirEntry(entry, i18n("Printers"), "print:/printers", "print/folder"); + else if (path[0].lower() == "specials") + createDirEntry(entry, i18n("Specials"), "print:/specials", "print/folder"); + else if (path[0].lower() == "manager") + createDirEntry(entry, i18n("Manager"), "print:/manager", "print/manager"); + else if (path[0].lower().startsWith("jobs")) + createFileEntry(entry, i18n("Jobs"), url.url(), "text/html"); + else + err = true; + break; + case 2: + if (path[0].lower() == "printers") + mime = "print/printer"; + else if (path[0].lower() == "classes") + mime = "print/class"; + else if (path[0].lower() == "specials") + mime = "print/printer"; + else + err = true; + createFileEntry(entry, path[1], "print:/"+path[0]+"/"+path[1], "text/html"); + break; + } + + if (!err) + { + statEntry(entry); + finished(); + } + else + error(KIO::ERR_DOES_NOT_EXIST, url.path()); +} + +void KIO_Print::statDB( const KURL& url ) +{ + PRINT_DEBUG << "statDB: " << url << endl; + KIO::UDSEntry entry; + TQStringList pathComps = TQStringList::split( '/', url.path(), false ); + if ( pathComps.size() == 3 ) + createFileEntry( entry, i18n( "Printer driver" ), url.url(), "print/driver" ); + else + createDirEntry( entry, i18n( "On-line printer driver database" ), url.url(), "inode/directory" ); + statEntry( entry ); + finished(); +} + +bool KIO_Print::getDBFile( const KURL& src ) +{ + PRINT_DEBUG << "downloading " << src.url() << endl; + + /* re-initialize the internal buffer */ + if ( m_httpBuffer.isOpen() ) + m_httpBuffer.close(); + m_httpError = 0; + m_httpBuffer.open( IO_WriteOnly|IO_Truncate ); // be sure to erase the existing data + + /* start the transfer job */ + KIO::TransferJob *job = KIO::get( src, false, false ); + connect( job, TQT_SIGNAL( result( KIO::Job* ) ), TQT_SLOT( slotResult( KIO::Job* ) ) ); + connect( job, TQT_SIGNAL( data( KIO::Job*, const TQByteArray& ) ), TQT_SLOT( slotData( KIO::Job*, const TQByteArray& ) ) ); + connect( job, TQT_SIGNAL( totalSize( KIO::Job*, KIO::filesize_t ) ), TQT_SLOT( slotTotalSize( KIO::Job*, KIO::filesize_t ) ) ); + connect( job, TQT_SIGNAL( processedSize( KIO::Job*, KIO::filesize_t ) ), TQT_SLOT( slotProcessedSize( KIO::Job*, KIO::filesize_t ) ) ); + kapp->enter_loop(); + m_httpBuffer.close(); + + /* return the result */ + if ( m_httpError != 0 ) + error( m_httpError, m_httpErrorTxt ); + return ( m_httpError == 0 ); +} + +void KIO_Print::getDB( const KURL& url ) +{ + PRINT_DEBUG << "downloading PPD file for " << url.url() << endl; + + TQStringList pathComps = TQStringList::split( '/', url.path(), false ); + if ( pathComps.size() != 3 ) + error( KIO::ERR_MALFORMED_URL, url.url() ); + else + { + KURL remUrl; + + remUrl.setProtocol( "http" ); + remUrl.setHost( url.host() ); + remUrl.setPath( "/ppd-o-matic.cgi" ); + remUrl.addQueryItem( "driver", pathComps[ 2 ] ); + remUrl.addQueryItem( "printer", pathComps[ 1 ] ); + + if ( getDBFile( remUrl ) ) + { + mimeType( "text/plain" ); + data( m_httpBuffer.buffer() ); + finished(); + } + /* + * no "else" statement needed, the error has + * already been emitted by the getDBFile function + */ + } +} + +void KIO_Print::slotResult( KIO::Job *j ) +{ + /* + * store slave results for later user (job gets deleted + * after this function). Store only if no other error + * occured previously (when writing to the buffer). + */ + if ( m_httpError == 0 ) + { + m_httpError = j->error(); + m_httpErrorTxt = j->errorText(); + } + kapp->exit_loop(); +} + +void KIO_Print::slotData( KIO::Job *j, const TQByteArray& d ) +{ + PRINT_DEBUG << "HTTP data received (size=" << d.size() << ")" << endl; + if ( d.size() > 0 ) + { + int len = m_httpBuffer.writeBlock( d ); + if ( len == -1 || len != ( int )d.size() ) + { + m_httpError = KIO::ERR_INTERNAL; + m_httpErrorTxt = "Unable to write to the internal buffer."; + j->kill( false ); + } + } +} + +void KIO_Print::slotTotalSize( KIO::Job*, KIO::filesize_t sz ) +{ + totalSize( sz ); +} + +void KIO_Print::slotProcessedSize( KIO::Job*, KIO::filesize_t sz ) +{ + processedSize( sz ); +} + +void KIO_Print::get(const KURL& url) +{ + if ( url.protocol() == "printdb" ) + { + getDB( url ); + return; + } + + TQStringList elems = TQStringList::split('/', url.encodedPathAndQuery(), false); + TQString group(elems[0].lower()), printer(KURL::decode_string(elems[1])), path, query; + KMPrinter *mprinter(0); + + if (group == "manager") + { + PRINT_DEBUG << "opening print management part" << endl; + + mimeType("print/manager"); + finished(); + return; + } + + PRINT_DEBUG << "getting " << url.url() << endl; + + if (group.startsWith("jobs")) + { + int p = group.find('?'); + if (p != -1) + query = group.mid(p+1); + if (!query.isEmpty() && query != "jobs" && query != "completed_jobs") + { + error(KIO::ERR_MALFORMED_URL, TQString()); + return; + } + PRINT_DEBUG << "listing jobs for all printers" << endl; + showJobs(0, query == "completed_jobs"); + return; + } + + int p = printer.find('?'); + if (p != -1) + { + query = printer.mid(p+1); + printer = printer.left(p); + } + + PRINT_DEBUG << "opening " << url.url() << endl; + PRINT_DEBUG << "extracted printer name = " << printer << endl; + + KMManager::self()->printerList(false); + mprinter = KMManager::self()->findPrinter(printer); + if (!mprinter) + path = locateData(printer.isEmpty() ? group : printer); + + if (elems.count() > 2 || (path.isEmpty() && group != "printers" && group != "classes" && group != "specials") + || (mprinter == 0 && path.isEmpty())) + { + error(KIO::ERR_DOES_NOT_EXIST, url.path()); + return; + } + + if (mprinter != 0) + { + if (!query.isEmpty() && query != "general") + { + if (query == "jobs") + showJobs(mprinter, false); + else if (query == "completed_jobs") + showJobs(mprinter, true); + else if (query == "driver") + showDriver(mprinter); + else + error(KIO::ERR_MALFORMED_URL, KURL::decode_string(elems[1])); + } + else if (group == "printers" && mprinter->isPrinter()) + showPrinterInfo(mprinter); + else if (group == "classes" && mprinter->isClass(true)) + showClassInfo(mprinter); + else if (group == "specials" && mprinter->isSpecial()) + showSpecialInfo(mprinter); + else + error(KIO::ERR_INTERNAL, i18n("Unable to determine object type for %1.").arg(printer)); + } + else if (!path.isEmpty()) + showData(path); + else + error(KIO::ERR_INTERNAL, i18n("Unable to determine source type for %1.").arg(printer)); +} + +void KIO_Print::showPrinterInfo(KMPrinter *printer) +{ + if (!KMManager::self()->completePrinter(printer)) + error(KIO::ERR_INTERNAL, i18n("Unable to retrieve printer information for %1.").arg(printer->name())); + else + { + mimeType("text/html"); + + TQString content; + if (!loadTemplate(TQString::tqfromLatin1("printer.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("printer.template")); + return; + } + + content = content + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(buildMenu(TQStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), + TQStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), + 0)) + .arg(TQString()) + .arg(printer->pixmap()) + .arg(printer->name()) + .arg(i18n("General Properties")) + .arg(i18n("Type")).arg(printer->isRemote() ? i18n("Remote") : i18n("Local")) + .arg(i18n("State")).arg(printer->stateString()) + .arg(i18n("Location")).arg(printer->location()) + .arg(i18n("Description")).arg(printer->description()) + .arg(i18n("URI")).arg(printer->uri().prettyURL()) + .arg(i18n("Interface (Backend)")).arg(printer->device()) + .arg(i18n("Driver")) + .arg(i18n("Manufacturer")).arg(printer->manufacturer()) + .arg(i18n("Model")).arg(printer->model()) + .arg(i18n("Driver Information")).arg(printer->driverInfo()); + + data(content.local8Bit()); + finished(); + } +} + +void KIO_Print::showClassInfo(KMPrinter *printer) +{ + if (!KMManager::self()->completePrinter(printer)) + error(KIO::ERR_INTERNAL, i18n("Unable to retrieve class information for %1.").arg(printer->name())); + else + { + mimeType("text/html"); + + TQString content; + if (!loadTemplate(TQString::tqfromLatin1("class.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("class.template")); + return; + } + + TQString memberContent("<ul>\n"); + TQStringList members(printer->members()); + for (TQStringList::ConstIterator it=members.begin(); it!=members.end(); ++it) + { + memberContent.append(TQString::tqfromLatin1("<li><a href=\"print:/printers/%1\">%2</a></li>\n").arg(*it).arg(*it)); + } + memberContent.append("</ul>\n"); + + TQString typeContent = (printer->isImplicit() ? i18n("Implicit") : (printer->isRemote() ? i18n("Remote") : i18n("Local"))); + + content = content + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(buildMenu(TQStringList::split('|', i18n("General|Active jobs|Completed jobs"), false), + TQStringList::split('|', "?general|?jobs|?completed_jobs", true), + 0)) + .arg(TQString()) + .arg(printer->pixmap()) + .arg(printer->name()) + .arg(i18n("General Properties")) + .arg(i18n("Type")).arg(typeContent) + .arg(i18n("State")).arg(printer->stateString()) + .arg(i18n("Location")).arg(printer->location()) + .arg(i18n("Description")).arg(printer->description()) + .arg(i18n("URI")).arg(printer->uri().prettyURL()) + .arg(i18n("Members")).arg(memberContent); + + data(content.local8Bit()); + finished(); + } +} + +void KIO_Print::showSpecialInfo(KMPrinter *printer) +{ + mimeType("text/html"); + + TQString content; + if (!loadTemplate(TQString::tqfromLatin1("pseudo.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); + return; + } + + TQString reqContent("<ul>\n"); + TQStringList requirements = TQStringList::split(",", printer->option("kde-special-require"), false); + for (TQStringList::ConstIterator it=requirements.begin(); it!=requirements.end(); ++it) + reqContent += ("<li>" + (*it) + "</li>\n"); + reqContent.append("</ul>\n"); + + content = content + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(i18n("Properties of %1").arg(printer->printerName())) + .arg(buildMenu(TQStringList::split('|', i18n("General"), false), + TQStringList::split('|', "?general", true), + 0)) + .arg(TQString()) + .arg(printer->pixmap()) + .arg(printer->name()) + .arg(i18n("General Properties")) + .arg(i18n("Location")).arg(printer->location()) + .arg(i18n("Description")).arg(printer->description()) + .arg(i18n("Requirements")).arg(reqContent) + .arg(i18n("Command Properties")) + .arg(i18n("Command")).arg("<tt>"+printer->option("kde-special-command")+"</tt>") + .arg(i18n("Use Output File")).arg(printer->option("kde-special-file") == "1" ? i18n("Yes") : i18n("No")) + .arg(i18n("Default Extension")).arg(printer->option("kde-special-extension")); + + data(content.local8Bit()); + finished(); +} + +bool KIO_Print::loadTemplate(const TQString& filename, TQString& buffer) +{ + TQFile f(locate("data", TQString::tqfromLatin1("tdeprint/template/")+filename)); + if (f.exists() && f.open(IO_ReadOnly)) + { + TQTextStream t(&f); + buffer = t.read(); + return true; + } + else + { + buffer = TQString(); + return false; + } +} + +void KIO_Print::showData(const TQString& pathname) +{ + PRINT_DEBUG << "sending data: " << pathname << endl; + TQFile f(pathname); + if (f.exists() && f.open(IO_ReadOnly)) + { + TQByteArray arr(f.readAll()); + mimeType(KMimeType::findByURL(KURL(pathname), 0, true, true)->name()); + data(arr); + finished(); + } + else + { + PRINT_DEBUG << "file not found" << endl; + error(KIO::ERR_DOES_NOT_EXIST, pathname); + } +} + +/** + * Locate a data in this order: + * - $KDEDIR/share/apps/tdeprint/template/ + * - as a desktop icon + */ +TQString KIO_Print::locateData(const TQString& item) +{ + TQString path = locate("data", "tdeprint/template/"+item); + if (path.isEmpty()) + path = KGlobal::iconLoader()->iconPath(item, KIcon::Desktop, true); + return path; +} + +void KIO_Print::showJobs(KMPrinter *prt, bool completed) +{ + mimeType("text/html"); + + // Add the printer to the current list in the job manager + KMJobManager::JobType type = (completed ? KMJobManager::CompletedJobs : KMJobManager::ActiveJobs); + KMJobManager *mgr = KMJobManager::self(); + if (prt) + mgr->addPrinter(prt->printerName(), type); + else + { + TQPtrListIterator<KMPrinter> pit(*(KMManager::self()->printerList())); + for (; pit.current(); ++pit) + if (pit.current()->isVirtual() || pit.current()->isSpecial()) + continue; + else + mgr->addPrinter(pit.current()->printerName(), type); + } + + TQString content; + if (!loadTemplate(TQString::tqfromLatin1("jobs.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); + return; + } + + if (prt) + { + content = content + .arg(i18n("Jobs of %1").arg(prt->printerName())) + .arg(i18n("Jobs of %1").arg(prt->printerName())) + .arg(prt->isClass () ? + buildMenu(TQStringList::split('|', i18n("General|Active jobs|Completed jobs"), false), + TQStringList::split('|', "?general|?jobs|?completed_jobs", true), + (completed ? 2 : 1)) : + buildMenu(TQStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), + TQStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), + (completed ? 3 : 2))) + .arg(TQString()) + .arg(prt->pixmap()) + .arg(prt->printerName()); + } + else + { + content = content + .arg(i18n("All jobs")) + .arg(buildMenu(TQStringList::split('|', i18n("Active jobs|Completed jobs"), false), + TQStringList::split('|', "?jobs|?completed_jobs", true), + (completed ? 1 : 0))) + .arg("fileprint") + .arg(i18n("All jobs")); + } + content = content.arg(i18n("ID")).arg(i18n("Owner")).arg(i18n("Printer")).arg(i18n("Name")).arg(i18n("State")); + + TQString jobContent, cellContent("<td>%1</td>\n"); + TQPtrListIterator<KMJob> it(mgr->jobList()); + bool flag(true); + for (; it.current(); ++it, flag = !flag) + { + jobContent.append("<tr class=\"").append(flag ? "contentyellow" : "contentwhite").append("\">\n"); + jobContent.append(cellContent.arg(it.current()->id())); + jobContent.append(cellContent.arg(it.current()->owner())); + jobContent.append(cellContent.arg(it.current()->printer())); + jobContent.append(cellContent.arg(it.current()->name())); + jobContent.append(cellContent.arg(it.current()->stateString())); + jobContent.append("</tr>\n"); + } + content = content.arg(jobContent); + + // remove the current printer to the current list in the job manager + if (prt) + mgr->removePrinter(prt->printerName(), type); + else + { + TQPtrListIterator<KMPrinter> pit(*(KMManager::self()->printerList())); + for (; pit.current(); ++pit) + if (pit.current()->isVirtual() || pit.current()->isSpecial()) + continue; + else + mgr->removePrinter(pit.current()->printerName(), type); + } + + data(content.local8Bit()); + finished(); +} + +void KIO_Print::showDriver(KMPrinter *prt) +{ + mimeType("text/html"); + + TQString content; + if (!loadTemplate(TQString::tqfromLatin1("driver.template"), content)) + { + error(KIO::ERR_INTERNAL, i18n("Unable to load template %1").arg("pseudo.template")); + return; + } + + DrMain *driver = KMManager::self()->loadPrinterDriver(prt, true); + content = content + .arg(i18n("Driver of %1").arg(prt->printerName())) + .arg(i18n("Driver of %1").arg(prt->printerName())) + .arg(buildMenu(TQStringList::split('|', i18n("General|Driver|Active jobs|Completed jobs"), false), + TQStringList::split('|', "?general|?driver|?jobs|?completed_jobs", true), + 1)) + .arg(TQString()) + .arg(prt->pixmap()) + .arg(prt->printerName() + " (" + (driver ? driver->get("text") : i18n("No driver found")) + ")"); + + if (driver) + content = content.arg(buildGroupTable(driver, false)); + else + content = content.arg(TQString()); + + data(content.local8Bit()); + finished(); +} + +#include "kio_print.moc" diff --git a/tdeprint/slave/kio_print.h b/tdeprint/slave/kio_print.h new file mode 100644 index 000000000..954a3045f --- /dev/null +++ b/tdeprint/slave/kio_print.h @@ -0,0 +1,70 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#ifndef KIO_PRINT_H +#define KIO_PRINT_H + +#include <kio/slavebase.h> +#include <kio/global.h> +#include <tqstring.h> +#include <tqbuffer.h> + +class KMPrinter; +namespace KIO { + class Job; +} + +class KIO_Print : public TQObject, public KIO::SlaveBase +{ + Q_OBJECT +public: + KIO_Print(const TQCString& pool, const TQCString& app); + + void listDir(const KURL& url); + void get(const KURL& url); + void stat(const KURL& url); + +protected slots: + void slotResult( KIO::Job* ); + void slotData( KIO::Job*, const TQByteArray& ); + void slotTotalSize( KIO::Job*, KIO::filesize_t ); + void slotProcessedSize( KIO::Job*, KIO::filesize_t ); + +private: + void listRoot(); + void listDirDB( const KURL& ); + void statDB( const KURL& ); + bool getDBFile( const KURL& ); + void getDB( const KURL& ); + void showClassInfo(KMPrinter*); + void showPrinterInfo(KMPrinter*); + void showSpecialInfo(KMPrinter*); + void showData(const TQString&); + TQString locateData(const TQString&); + void showJobs(KMPrinter *p = 0, bool completed = false); + void showDriver(KMPrinter*); + + bool loadTemplate(const TQString& filename, TQString& buffer); + + TQBuffer m_httpBuffer; + int m_httpError; + TQString m_httpErrorTxt; +}; + +#endif diff --git a/tdeprint/slave/mimetypes/CMakeLists.txt b/tdeprint/slave/mimetypes/CMakeLists.txt new file mode 100644 index 000000000..02d289c15 --- /dev/null +++ b/tdeprint/slave/mimetypes/CMakeLists.txt @@ -0,0 +1,16 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +install( FILES + folder.desktop printer.desktop class.desktop + manager.desktop jobs.desktop driver.desktop + printermodel.desktop + DESTINATION ${MIME_INSTALL_DIR}/print ) diff --git a/tdeprint/slave/mimetypes/Makefile.am b/tdeprint/slave/mimetypes/Makefile.am new file mode 100644 index 000000000..9992389fe --- /dev/null +++ b/tdeprint/slave/mimetypes/Makefile.am @@ -0,0 +1,3 @@ +mimetype_DATA = folder.desktop printer.desktop class.desktop manager.desktop jobs.desktop \ + driver.desktop printermodel.desktop +mimetypedir = $(kde_mimedir)/print diff --git a/tdeprint/slave/mimetypes/class.desktop b/tdeprint/slave/mimetypes/class.desktop new file mode 100644 index 000000000..f73b3262d --- /dev/null +++ b/tdeprint/slave/mimetypes/class.desktop @@ -0,0 +1,75 @@ +[Desktop Entry] +Comment=Class of Printers +Comment[af]=Klas van Drukkers +Comment[ar]=فئة الطابعات +Comment[be]=Клас друкарак +Comment[bg]=Клас принтери +Comment[bn]=প্রিন্টার-এর ক্লাস (Class) +Comment[bs]=Klasa štampača +Comment[ca]=Classes d'impressores +Comment[cs]=Třída tiskáren +Comment[csb]=Klasë drëkerów +Comment[da]=Klasse af printere +Comment[de]=Druckerklasse +Comment[el]=Κλάση εκτυπωτών +Comment[eo]=Printiloklaso +Comment[es]=Clase de impresoras +Comment[et]=Printerite klass +Comment[eu]=Inprimagailu klasea +Comment[fa]=ردۀ چاپگرها +Comment[fi]=Tulostinten luokka +Comment[fr]=Classe d'imprimantes +Comment[fy]=Printerklassen +Comment[ga]=Aicme Printéirí +Comment[gl]=Clase de impresoras +Comment[he]=מחלקת מדפסות +Comment[hi]=प्रिंटर के वर्ग +Comment[hr]=Klase pisača +Comment[hu]=Nyomtatóosztály +Comment[is]=Flokkur prentara +Comment[it]=Classe di stampanti +Comment[ja]=プリンタクラス +Comment[ka]=პრინტერთა კლასი +Comment[kk]=Принтерлер класы +Comment[km]=សន្ដាន​ម៉ាស៊ីន​បោះពុម្ព +Comment[lt]=Spausdintuvų klasė +Comment[lv]=Drukas iekārtu klase +Comment[mk]=Класа на печатачи +Comment[ms]=Kelas Pencetak +Comment[mt]=Klassi ta' printers +Comment[nb]=Skriverklasse +Comment[nds]=Klass vun Druckers +Comment[ne]=मुद्रकको वर्ग +Comment[nl]=Printerklassen +Comment[nn]=Skrivarklasse +Comment[pa]=ਪਰਿੰਟਰਾਂ ਦਾ ਵਰਗ +Comment[pl]=Klasa drukarek +Comment[pt]=Classe de Impressoras +Comment[pt_BR]=Classes de Impressoras +Comment[ro]=Clase de imprimante +Comment[ru]=Класс принтеров +Comment[rw]=Urwego rwa Mucapyi +Comment[se]=Čálánluohkát +Comment[sk]=Trieda tlačiarní +Comment[sl]=Razred tiskalnikov +Comment[sr]=Класе штампача +Comment[sr@Latn]=Klase štampača +Comment[sv]=Klass av skrivare +Comment[ta]=அச்சியந்திரங்களின் வகை +Comment[tg]=Дараҷаи чопгарҳо +Comment[th]=คลาสของเครื่องพิมพ์ +Comment[tr]=Yazıcı Sınıfı +Comment[tt]=Basaqlar Törläre +Comment[uk]=Клас принтерів +Comment[uz]=Printerlar sinfi +Comment[uz@cyrillic]=Принтерлар синфи +Comment[vi]=Lớp Máy in +Comment[wa]=Classe des scrireces +Comment[zh_CN]=打印机类 +Comment[zh_TW]=印表機類別 +Icon=print_class +Type=MimeType +MimeType=print/class +Patterns= + +X-KDE-AutoEmbed=true diff --git a/tdeprint/slave/mimetypes/driver.desktop b/tdeprint/slave/mimetypes/driver.desktop new file mode 100644 index 000000000..36cd08288 --- /dev/null +++ b/tdeprint/slave/mimetypes/driver.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Comment=Printer Driver +Comment[af]=Drukker Aandrywer +Comment[ar]=سائق الطابعة +Comment[be]=Драйвер друкаркі +Comment[bg]=Драйвер за принтер +Comment[bn]=প্রিন্টার ড্রাইভার +Comment[br]=Sturier ar voullerez +Comment[bs]=Drajver štampača +Comment[ca]=Control·lador d'impressora +Comment[cs]=Ovladač tiskárny +Comment[csb]=Czérownik drëkera +Comment[da]=Printerdriver +Comment[de]=Druckertreiber +Comment[el]=Οδηγός εκτυπωτή +Comment[eo]=Printila pelilo +Comment[es]=Controlador de impresora +Comment[et]=Printeri draiver +Comment[eu]=Inprimagailuaren driverra +Comment[fa]=گردانندۀ چاپگر +Comment[fi]=Tulostinajuri +Comment[fr]=Pilote d'imprimante +Comment[fy]=Printerstjoerprogramma +Comment[ga]=Tiománaí Printéara +Comment[gl]=Controlador da Impresora +Comment[he]=מנהל התקן המדפסת +Comment[hi]=प्रिंटर ड्राइवर +Comment[hr]=Upravljački program pisača +Comment[hu]=Nyomtatómeghajtó +Comment[is]=Prentrekill +Comment[it]=Driver stampante +Comment[ja]=プリンタドライバ +Comment[ka]=პრინტერის დრაივერი +Comment[kk]=Принтердің драйвері +Comment[km]=កម្មវិធី​បញ្ជា​ម៉ាស៊ីន​បោះពុម្ព +Comment[lt]=Spausdintuvo tvarkyklė +Comment[lv]=Printera draiveris +Comment[mk]=Управувач за печатач +Comment[ms]=Pemacu Pencetak +Comment[mt]=Driver tal-printer +Comment[nb]=Skriverdriver +Comment[nds]=Druckerdriever +Comment[ne]=मुद्रक यन्त्र +Comment[nl]=Printerstuurprogramma +Comment[nn]=Skrivardrivar +Comment[pa]=ਪਰਿੰਟਰ ਡਰਾਇਵਰ +Comment[pl]=Sterownik drukarki +Comment[pt]=Controlador de Impressora +Comment[pt_BR]=Driver da Impressora +Comment[ro]=Driver de imprimantă +Comment[ru]=Драйвер принтера +Comment[rw]=Musomyi ya Mucapyi +Comment[se]=Čálánstivrran +Comment[sk]=Ovládač tlačiarne +Comment[sl]=Tiskalniški gonilnik +Comment[sr]=Управљачки програм за штампач +Comment[sr@Latn]=Upravljački program za štampač +Comment[sv]=Skrivardrivrutin +Comment[ta]=அச்சியந்திர இயக்கி +Comment[tg]=Драйвери чопгар +Comment[th]=ไดรเวอร์เครื่องพิมพ์ +Comment[tr]=Yazıcı Sürücüsü +Comment[tt]=Basaq öçen Driver +Comment[uk]=Драйвер принтера +Comment[uz]=Printerning drayveri +Comment[uz@cyrillic]=Принтернинг драйвери +Comment[vi]=Trình điều khiển Máy in +Comment[wa]=Moenneu di scrirece +Comment[zh_CN]=打印机驱动程序 +Comment[zh_TW]=印表機驅動程式 +Icon=postscript +Type=MimeType +MimeType=print/driver +Patterns= + +X-KDE-AutoEmbed=true diff --git a/tdeprint/slave/mimetypes/folder.desktop b/tdeprint/slave/mimetypes/folder.desktop new file mode 100644 index 000000000..312c863a3 --- /dev/null +++ b/tdeprint/slave/mimetypes/folder.desktop @@ -0,0 +1,76 @@ +[Desktop Entry] +Comment=Print Folder +Comment[af]=Drukker Gids +Comment[ar]=مجلد الطباعة +Comment[be]=Тэчка друку +Comment[bg]=Директория на печата +Comment[bn]=মুদ্রণ ফোল্ডার +Comment[br]=Renkell moulañ +Comment[bs]=Direktorij za štampu +Comment[ca]=Carpeta d'impressió +Comment[cs]=Složka tisku +Comment[csb]=Katalog drëkòwaniô +Comment[cy]=Dogfen argraffu +Comment[da]=Udskriftsmappe +Comment[de]=Druckordner +Comment[el]=Φάκελος εκτυπώσεων +Comment[eo]=Printa dosierujo +Comment[es]=Carpeta de impresión +Comment[et]=Trükkimise kataloog +Comment[eu]=Inprimaketa karpeta +Comment[fa]=پوشۀ چاپ +Comment[fi]=Tulostuskansio +Comment[fr]=Dossier d'impression +Comment[fy]=printmap +Comment[ga]=Fillteán Priontála +Comment[gl]=Cartafol de Impresión +Comment[he]=תיקיית הדפסה +Comment[hr]=Mapa pisača +Comment[hu]=Nyomtatáskezelő-mappa +Comment[is]=Prentmappa +Comment[it]=Cartella di stampa +Comment[ja]=印刷フォルダ +Comment[ka]=საბეჭდი საქაღალდე +Comment[kk]=Басып шығару қапшығы +Comment[km]=ថត​បោះពុម្ព +Comment[ko]=홈 폴더 +Comment[lt]=Spausdinimo aplankas +Comment[mk]=Папка за печатење +Comment[ms]=Cetak Folder +Comment[nb]=Skrivermappe +Comment[nds]=Druckorner +Comment[ne]=मुद्रण फोल्डर +Comment[nl]=Afdrukmap +Comment[nn]=Skrivarmappe +Comment[pa]=ਛਪਾਈ ਫੋਲਡਰ +Comment[pl]=Folder drukowania +Comment[pt]=Pasta de Impressão +Comment[pt_BR]=Pasta de Impressão +Comment[ro]=Folder de tipărire +Comment[ru]=Папка печати +Comment[rw]=Gucapa Ububiko +Comment[se]=Čálihanmáhppa +Comment[sk]=Priečinok tlače +Comment[sl]=Tiskalniška mapa +Comment[sr]=Фасцикла за штампање +Comment[sr@Latn]=Fascikla za štampanje +Comment[sv]=Skrivarkatalog +Comment[ta]=அச்சிடும் அடைவு +Comment[tg]=Феҳристи чоп +Comment[th]=โฟลเดอร์งานพิมพ์ +Comment[tr]=Yazdırma dizinidizini +Comment[tt]=Bastıru Törgäge +Comment[uk]=Тека друку +Comment[uz]=Bosib chiqarish jildi +Comment[uz@cyrillic]=Босиб чиқариш жилди +Comment[vi]=Thư mục In ấn +Comment[wa]=Ridant d' imprimaedje +Comment[zh_CN]=打印文件夹 +Comment[zh_TW]=列印資料夾 +Icon=folder_print +Type=MimeType +MimeType=print/folder +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory diff --git a/tdeprint/slave/mimetypes/jobs.desktop b/tdeprint/slave/mimetypes/jobs.desktop new file mode 100644 index 000000000..5a92ceaa5 --- /dev/null +++ b/tdeprint/slave/mimetypes/jobs.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Comment=Print Jobs +Comment[af]=Drukker Werke +Comment[ar]=مهمات الطباعة +Comment[be]=Заданні друку +Comment[bg]=Задания за печат +Comment[bn]=মুদ্রণ তালিকা +Comment[bs]=Zadaci štampe +Comment[ca]=Tasques d'impressió +Comment[cs]=Tiskové úlohy +Comment[csb]=Pòlétë drëkòwaniô +Comment[cy]=Swyddi Argraffu +Comment[da]=Udskriftsjob +Comment[de]=Druckaufträge +Comment[el]=Εργασίες εκτύπωσης +Comment[eo]=Printaj taskoj +Comment[es]=Trabajos de impresión +Comment[et]=Trükitööd +Comment[eu]=Inprimatze lanak +Comment[fa]=چاپ کارها +Comment[fi]=Tulostustyöt +Comment[fr]=Tâches d'impression +Comment[fy]=Printtaken +Comment[ga]=Jabanna Priontála +Comment[gl]=Traballos de Impresión +Comment[he]=עבודות הדפסה +Comment[hi]=प्रिंट कार्य +Comment[hr]=Zadaci ispisivanja +Comment[hu]=Nyomtatási feladatok +Comment[is]=Prentverk +Comment[it]=Lavori di stampa +Comment[ja]=印刷ジョブ +Comment[ka]=ბეჭდვის დავალებები +Comment[kk]=Басу тапсырмалары +Comment[km]=ការងារ​បោះពុម្ព +Comment[lo]=ໂຟນເດີງານພິມ +Comment[lt]=Spausdinimo užduotys +Comment[lv]=Drukas darbi +Comment[mk]=Печатарски задачи +Comment[mn]=Хэвлэх даалгавар +Comment[ms]=Cetak Kerja +Comment[mt]=Xogħlijiet ta' pprintjar +Comment[nb]=Skriverjobber +Comment[nds]=Druckopgaven +Comment[ne]=मुद्रण कार्य +Comment[nl]=Afdruktaken +Comment[nn]=Utskriftsjobbar +Comment[nso]=Mesomo ya Kgatiso +Comment[pa]=ਪਰਿੰਟ ਕੰਮ +Comment[pl]=Zadania drukowania +Comment[pt]=Tarefas de Impressão +Comment[pt_BR]=Imprimir trabalhos +Comment[ro]=Lucrări de tipărit +Comment[ru]=Задания печати +Comment[rw]=Gucapa Imirimo +Comment[se]=Čálihanbarggut +Comment[sk]=Tlačové úlohy +Comment[sl]=Tiskalna opravila +Comment[sr]=Послови штампе +Comment[sr@Latn]=Poslovi štampe +Comment[sv]=Skrivarjobb +Comment[ta]=அச்சு வேலைகள் +Comment[te]=ప్రచురణ పనులు +Comment[tg]=Чопҳо +Comment[th]=งานพิมพ์ +Comment[tr]=Yazdırma işleri +Comment[tt]=Bastıru Eşläre +Comment[uk]=Завдання друку +Comment[uz]=Bosib chiqarish vazifalari +Comment[uz@cyrillic]=Босиб чиқариш вазифалари +Comment[ven]=Mishumo yau phirintha +Comment[vi]=Tác vụ In ấn +Comment[wa]=Bouyes d' imprimaedje +Comment[xh]=Imisebenzi Yoshicilelo +Comment[zh_CN]=打印任务 +Comment[zh_TW]=列印工作 +Comment[zu]=Imisebenzi Yokushicilela +Icon=fileprint +Type=MimeType +MimeType=print/jobs +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory + diff --git a/tdeprint/slave/mimetypes/manager.desktop b/tdeprint/slave/mimetypes/manager.desktop new file mode 100644 index 000000000..7b8cd0671 --- /dev/null +++ b/tdeprint/slave/mimetypes/manager.desktop @@ -0,0 +1,87 @@ +[Desktop Entry] +Comment=Print Management Tool +Comment[af]=Drukker Bestuur Program +Comment[ar]=أداة إدارة الطباعة +Comment[az]=Çap Edici İdarə Vasitəsi +Comment[be]=Кіраўнік друку +Comment[bg]=Програма за управление на печата +Comment[bn]=মুদ্রণ ম্যানেজমেন্ট টুল +Comment[br]=Ostilh mererezh moulañ +Comment[bs]=Alat za upravljanje štampanjem +Comment[ca]=Eina per a la gestió de la impressió +Comment[cs]=Nástroj pro správu tiskáren +Comment[csb]=Sprôwianié wëdrëkama +Comment[cy]=Erfyn rheoli argraffu +Comment[da]=Udskriftshåndteringsværktøj +Comment[de]=Dienstprogramm zur Druckerverwaltung +Comment[el]=Εργαλείο διαχείρισης εκτυπώσεων +Comment[eo]=Administrilo por printado +Comment[es]=Herramienta de gestión de la impresión +Comment[et]=Trükkimise haldur +Comment[eu]=Inprimaketak kudeatzeko tresna +Comment[fa]=ابزار مدیریت چاپ +Comment[fi]=Tulostuksenhallinta +Comment[fr]=Gestionnaire d'impression +Comment[fy]=Helpprogramma foar printerbehear +Comment[ga]=Uirlis Bhainisteoireacht Priontála +Comment[gl]=Ferramenta de Xestión das Impresións +Comment[he]=כלי ניהול הדפסה +Comment[hi]=छापा प्रबंधन औज़ार +Comment[hr]=Alat za upravljanje ispisivanjem +Comment[hu]=Nyomtatáskezelő segédprogram +Comment[is]=Prentunartól +Comment[it]=Strumento per la gestione della stampa +Comment[ja]=印刷マネージメントツール +Comment[ka]=ბეჭდვის მართვის ხელსაწყო +Comment[kk]=Басып шығаруды басқару құралы +Comment[km]=ឧបករណ៍​គ្រប់គ្រង​ការ​បោះពុម្ព +Comment[ko]=휴대폰 관리 도구 +Comment[lo]=ເຄື່ອງມືຈັດການການພິມ +Comment[lt]=Spausdinimo valdymo įrankis +Comment[lv]=Drukas Menedžmenta Rīks +Comment[mk]=Алатка за менаџмент на печатење +Comment[mn]=Хэвлэгчийн удирдлагын програм +Comment[ms]=Cetak Alat Pengurusan +Comment[mt]=Għodda għall-immaniġġjar tal-ipprintjar +Comment[nb]=Verktøy for skriverbehandling +Comment[nds]=Druckpleeg-Warktüüch +Comment[ne]=मुद्रण प्रबन्धक उपकरण +Comment[nl]=Hulpprogramma voor printerbeheer +Comment[nn]=Verktøy for utskriftshandsaming +Comment[nso]=Sebereka sa Taolo ya Kgatiso +Comment[pa]=ਪਰਿੰਟ ਪਰਬੰਧਨ ਸੰਦ +Comment[pl]=Zarządzanie wydrukiem +Comment[pt]=Ferramenta de gestão de impressão +Comment[pt_BR]=Ferramenta de Gerenciamento de Impressão +Comment[ro]=Utilitar de administrare a tipăririi +Comment[ru]=Утилита управления печатью +Comment[rw]=Igikoresho Ubuyobozi Gucapa +Comment[se]=Reaiddut čáliheami várás +Comment[sk]=Nástroj na správu tlače +Comment[sl]=Orodje za upravljanje tiskanja +Comment[sr]=Алат за управљање штампом +Comment[sr@Latn]=Alat za upravljanje štampom +Comment[sv]=Verktyg för att hantera utskrifter +Comment[ta]=அச்சு மேலாண்மை கருவி +Comment[tg]=Обзори мудирияти чоп +Comment[th]=เครื่องมือจัดการการพิมพ์ +Comment[tr]=Yazdırma Yönetim Aracı +Comment[tt]=Bastıru İdäneñ Qoralı +Comment[uk]=Засіб керування друком +Comment[uz]=Bosib chiqarishni boshqarish vositasi +Comment[uz@cyrillic]=Босиб чиқаришни бошқариш воситаси +Comment[ven]=Tshishumiswa tsha vhulanguli hau phirintha +Comment[vi]=Công cụ Quản lí In ấn +Comment[wa]=Usteye po manaedjî l' imprimaedje +Comment[xh]=Isixhobo Sophatho Sokushicilela +Comment[zh_CN]=打印管理工具 +Comment[zh_TW]=列印管理工具 +Comment[zu]=Ithuluzi Lokuphatha Ushicilelo +Icon=wizard +Type=MimeType +MimeType=print/manager +Patterns= + +X-KDE-AutoEmbed=true +X-KDE-IsAlso=inode/directory + diff --git a/tdeprint/slave/mimetypes/printer.desktop b/tdeprint/slave/mimetypes/printer.desktop new file mode 100644 index 000000000..905a08d34 --- /dev/null +++ b/tdeprint/slave/mimetypes/printer.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Comment=Printer +Comment[af]=Drukker +Comment[ar]=الطابعة +Comment[az]=Çap Edici +Comment[be]=Друкарка +Comment[bg]=Принтер +Comment[bn]=প্রিন্টার +Comment[br]=Moulañ +Comment[bs]=Štampač +Comment[ca]=Impressora +Comment[cs]=Tiskárna +Comment[csb]=Drëker +Comment[cy]=Argraffydd +Comment[de]=Drucker +Comment[el]=Εκτυπωτής +Comment[eo]=Printilo +Comment[es]=Impresora +Comment[eu]=Inprimagailua +Comment[fa]=چاپگر +Comment[fi]=Tulostin +Comment[fr]=Imprimante +Comment[ga]=Printéir +Comment[gl]=Impresora +Comment[he]=מדפסת +Comment[hi]=प्रिंटर +Comment[hr]=Pisač +Comment[hu]=Nyomtató +Comment[is]=Prentari +Comment[it]=Stampante +Comment[ja]=プリンタ +Comment[ka]=პრინტერი +Comment[kk]=Принтер +Comment[km]=ម៉ាស៊ីន​បោះពុម្ព +Comment[lo]=ເຄື່ອງພິມ +Comment[lt]=Spausdintuvas +Comment[lv]=Drukas Iekārta +Comment[mk]=Печатач +Comment[mn]=Хэвлэгч +Comment[ms]=Pencetak +Comment[nb]=Skriver +Comment[nds]=Drucker +Comment[ne]=मुद्रक +Comment[nn]=Skrivar +Comment[nso]=Segatisi +Comment[pa]=ਪਰਿੰਟਰ +Comment[pl]=Drukarka +Comment[pt]=Impressora +Comment[pt_BR]=Impressora +Comment[ro]=Imprimantă +Comment[ru]=Принтер +Comment[rw]=Mucapyi +Comment[se]=Čálán +Comment[sk]=Tlačiareň +Comment[sl]=Tiskalnik +Comment[sr]=Штампач +Comment[sr@Latn]=Štampač +Comment[sv]=Skrivare +Comment[ta]=அச்சியந்திரம் +Comment[te]=ప్రింటర్ +Comment[tg]=Чопгар +Comment[th]=เครื่องพิมพ์ +Comment[tr]=Yazıcı +Comment[tt]=Basaq +Comment[uk]=Принтер +Comment[uz@cyrillic]=Принтер +Comment[ven]=phirinthara +Comment[vi]=Máy in +Comment[wa]=Sicrirece +Comment[xh]=Umshicileli +Comment[zh_CN]=打印机 +Comment[zh_TW]=印表機 +Comment[zu]=Umshicileli +Icon=printer1 +Type=MimeType +MimeType=print/printer +Patterns= + +X-KDE-AutoEmbed=true diff --git a/tdeprint/slave/mimetypes/printermodel.desktop b/tdeprint/slave/mimetypes/printermodel.desktop new file mode 100644 index 000000000..f6a471e41 --- /dev/null +++ b/tdeprint/slave/mimetypes/printermodel.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Comment=Printer Model +Comment[af]=Drukker Model +Comment[ar]=طراز الطابعة +Comment[be]=Мадэль друкаркі +Comment[bg]=Модел принтер +Comment[bn]=প্রিন্টার মডেল +Comment[br]=Gobari ar voullerez +Comment[bs]=Model štampača +Comment[ca]=Model d'impressora +Comment[cs]=Model tiskárny +Comment[csb]=Ôrt drëkera +Comment[cy]=Model Argraffydd +Comment[da]=Printermodel +Comment[de]=Druckermodell +Comment[el]=Μοντέλο εκτυπωτή +Comment[eo]=Printila modelo +Comment[es]=Modelo de impresora +Comment[et]=Printeri mudel +Comment[eu]=Inprimagailuaren modeloa +Comment[fa]=مدل چاپگر +Comment[fi]=Tulostinmalli +Comment[fr]=Modèle d'imprimante +Comment[fy]=Printermodel +Comment[ga]=Déanamh an Phrintéara +Comment[gl]=Modelo da Impresora +Comment[he]=דגם המדפסת +Comment[hi]=प्रिंटर मॉडल +Comment[hr]=Model pisača +Comment[hu]=Nyomtatótípus +Comment[is]=Prentaragerð +Comment[it]=Modello stampante +Comment[ja]=プリンタモデル +Comment[ka]=პრინტერის მოდელი +Comment[kk]=Принтер үлгісі +Comment[km]=ម៉ូដែលម៉ាស៊ីន​បោះពុម្ព +Comment[ko]=제어판 모듈 +Comment[lt]=Spausdintuvo modelis +Comment[lv]=Drukas Iekārtas modelis +Comment[mk]=Модел на печатач +Comment[ms]=Model Pencetak +Comment[mt]=Mudell tal-printer +Comment[nb]=Skrivermodell +Comment[nds]=Druckermodell +Comment[ne]=मुद्रक नमूना +Comment[nl]=Printermodel +Comment[nn]=Skrivarmodell +Comment[pa]=ਪਰਿੰਟਰ ਮਾਡਲ +Comment[pl]=Model drukarki +Comment[pt]=Modelo de Impressora +Comment[pt_BR]=Modelo de Impressora +Comment[ro]=Model de imprimantă +Comment[ru]=Модель принтера +Comment[rw]=Moderi Mucapyi +Comment[se]=Čálánmálle +Comment[sk]=Model tlačiarne +Comment[sl]=Model tiskalnika +Comment[sr]=Модел штампача +Comment[sr@Latn]=Model štampača +Comment[sv]=Skrivarmodell +Comment[ta]=அச்சியந்திர மாதிரி +Comment[tg]=Намунаи чопгар +Comment[th]=รุ่นของเครื่องพิมพ์ +Comment[tr]=Yazıcı Modeli +Comment[tt]=Basaq Töre +Comment[uk]=Модель принтера +Comment[uz]=Printerning modeli +Comment[uz@cyrillic]=Принтернинг модели +Comment[vi]=Loại Máy in +Comment[wa]=Modele del sicrirece +Comment[zh_CN]=打印机型号 +Comment[zh_TW]=印表機型號 +Icon=printer1 +Type=MimeType +MimeType=print/printermodel +Patterns= + +X-KDE-AutoEmbed=true diff --git a/tdeprint/slave/pics/.gitignore b/tdeprint/slave/pics/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/tdeprint/slave/print.protocol b/tdeprint/slave/print.protocol new file mode 100644 index 000000000..38989160b --- /dev/null +++ b/tdeprint/slave/print.protocol @@ -0,0 +1,15 @@ +[Protocol] +exec=kio_print +protocol=print +input=none +output=filesystem +listing=Name,Type,Access +reading=true +writing=false +makedir=false +deleting=false +moving=false +linking=false +Icon=postscript +DocPath=kioslave/print.html +defaultMimetype=application/octet-stream diff --git a/tdeprint/slave/printdb.protocol b/tdeprint/slave/printdb.protocol new file mode 100644 index 000000000..539edd596 --- /dev/null +++ b/tdeprint/slave/printdb.protocol @@ -0,0 +1,14 @@ +[Protocol] +exec=kio_print +protocol=printdb +input=none +output=filesystem +listing=Name,Type,Access +reading=true +writing=false +makedir=false +deleting=false +moving=false +linking=false +Icon=postscript +defaultMimetype=application/octet-stream diff --git a/tdeprint/slave/templates/CMakeLists.txt b/tdeprint/slave/templates/CMakeLists.txt new file mode 100644 index 000000000..f2344a0df --- /dev/null +++ b/tdeprint/slave/templates/CMakeLists.txt @@ -0,0 +1,25 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +install( FILES + class.template printer.template pseudo.template + jobs.template driver.template bar-bottom-left.png + bar-top-middle.png box-bottom-middle.png + box-top-middle.png bar-bottom-middle.png + bar-top-right.png box-bottom-right.png + box-top-right.png bar-bottom-right.png + bottom-left.png box-centre-tdeprint.png + top-left.png bar-middle-left.png bottom-middle.png + box-middle-left.png top-middle.png bar-middle-right.png + bottom-right.png box-middle-right.png top-right-tdeprint.png + bar-top-left.png box-bottom-left.png box-top-left.png + htmlstyles.css + DESTINATION ${DATA_INSTALL_DIR}/tdeprint/template ) diff --git a/tdeprint/slave/templates/Makefile.am b/tdeprint/slave/templates/Makefile.am new file mode 100644 index 000000000..3f23f9d2d --- /dev/null +++ b/tdeprint/slave/templates/Makefile.am @@ -0,0 +1,31 @@ +template_DATA = class.template \ + printer.template \ + pseudo.template \ + jobs.template \ + driver.template \ + bar-bottom-left.png \ + bar-top-middle.png \ + box-bottom-middle.png \ + box-top-middle.png \ + bar-bottom-middle.png \ + bar-top-right.png \ + box-bottom-right.png \ + box-top-right.png \ + bar-bottom-right.png \ + bottom-left.png \ + box-centre-tdeprint.png \ + top-left.png \ + bar-middle-left.png \ + bottom-middle.png \ + box-middle-left.png \ + top-middle.png \ + bar-middle-right.png \ + bottom-right.png \ + box-middle-right.png \ + top-right-tdeprint.png \ + bar-top-left.png \ + box-bottom-left.png \ + box-top-left.png \ + htmlstyles.css + +templatedir = $(kde_datadir)/tdeprint/template diff --git a/tdeprint/slave/templates/bar-bottom-left.png b/tdeprint/slave/templates/bar-bottom-left.png new file mode 100644 index 000000000..30a323592 Binary files /dev/null and b/tdeprint/slave/templates/bar-bottom-left.png differ diff --git a/tdeprint/slave/templates/bar-bottom-middle.png b/tdeprint/slave/templates/bar-bottom-middle.png new file mode 100644 index 000000000..b2ebbbed5 Binary files /dev/null and b/tdeprint/slave/templates/bar-bottom-middle.png differ diff --git a/tdeprint/slave/templates/bar-bottom-right.png b/tdeprint/slave/templates/bar-bottom-right.png new file mode 100644 index 000000000..e664e1511 Binary files /dev/null and b/tdeprint/slave/templates/bar-bottom-right.png differ diff --git a/tdeprint/slave/templates/bar-middle-left.png b/tdeprint/slave/templates/bar-middle-left.png new file mode 100644 index 000000000..72fda9ec2 Binary files /dev/null and b/tdeprint/slave/templates/bar-middle-left.png differ diff --git a/tdeprint/slave/templates/bar-middle-right.png b/tdeprint/slave/templates/bar-middle-right.png new file mode 100644 index 000000000..eb8d3201c Binary files /dev/null and b/tdeprint/slave/templates/bar-middle-right.png differ diff --git a/tdeprint/slave/templates/bar-top-left.png b/tdeprint/slave/templates/bar-top-left.png new file mode 100644 index 000000000..b05fd216c Binary files /dev/null and b/tdeprint/slave/templates/bar-top-left.png differ diff --git a/tdeprint/slave/templates/bar-top-middle.png b/tdeprint/slave/templates/bar-top-middle.png new file mode 100644 index 000000000..387f81017 Binary files /dev/null and b/tdeprint/slave/templates/bar-top-middle.png differ diff --git a/tdeprint/slave/templates/bar-top-right.png b/tdeprint/slave/templates/bar-top-right.png new file mode 100644 index 000000000..a552ff91d Binary files /dev/null and b/tdeprint/slave/templates/bar-top-right.png differ diff --git a/tdeprint/slave/templates/bottom-left.png b/tdeprint/slave/templates/bottom-left.png new file mode 100644 index 000000000..78c9fece3 Binary files /dev/null and b/tdeprint/slave/templates/bottom-left.png differ diff --git a/tdeprint/slave/templates/bottom-middle.png b/tdeprint/slave/templates/bottom-middle.png new file mode 100644 index 000000000..41e52dd8a Binary files /dev/null and b/tdeprint/slave/templates/bottom-middle.png differ diff --git a/tdeprint/slave/templates/bottom-right.png b/tdeprint/slave/templates/bottom-right.png new file mode 100644 index 000000000..ef81b04a8 Binary files /dev/null and b/tdeprint/slave/templates/bottom-right.png differ diff --git a/tdeprint/slave/templates/box-bottom-left.png b/tdeprint/slave/templates/box-bottom-left.png new file mode 100644 index 000000000..650fa5743 Binary files /dev/null and b/tdeprint/slave/templates/box-bottom-left.png differ diff --git a/tdeprint/slave/templates/box-bottom-middle.png b/tdeprint/slave/templates/box-bottom-middle.png new file mode 100644 index 000000000..2bcd3ea03 Binary files /dev/null and b/tdeprint/slave/templates/box-bottom-middle.png differ diff --git a/tdeprint/slave/templates/box-bottom-right.png b/tdeprint/slave/templates/box-bottom-right.png new file mode 100644 index 000000000..975aaeed7 Binary files /dev/null and b/tdeprint/slave/templates/box-bottom-right.png differ diff --git a/tdeprint/slave/templates/box-centre-tdeprint.png b/tdeprint/slave/templates/box-centre-tdeprint.png new file mode 100644 index 000000000..97da1910e Binary files /dev/null and b/tdeprint/slave/templates/box-centre-tdeprint.png differ diff --git a/tdeprint/slave/templates/box-middle-left.png b/tdeprint/slave/templates/box-middle-left.png new file mode 100644 index 000000000..62a720178 Binary files /dev/null and b/tdeprint/slave/templates/box-middle-left.png differ diff --git a/tdeprint/slave/templates/box-middle-right.png b/tdeprint/slave/templates/box-middle-right.png new file mode 100644 index 000000000..aa94c0c90 Binary files /dev/null and b/tdeprint/slave/templates/box-middle-right.png differ diff --git a/tdeprint/slave/templates/box-top-left.png b/tdeprint/slave/templates/box-top-left.png new file mode 100644 index 000000000..34aba9195 Binary files /dev/null and b/tdeprint/slave/templates/box-top-left.png differ diff --git a/tdeprint/slave/templates/box-top-middle.png b/tdeprint/slave/templates/box-top-middle.png new file mode 100644 index 000000000..7ee2a0738 Binary files /dev/null and b/tdeprint/slave/templates/box-top-middle.png differ diff --git a/tdeprint/slave/templates/box-top-right.png b/tdeprint/slave/templates/box-top-right.png new file mode 100644 index 000000000..26d16d313 Binary files /dev/null and b/tdeprint/slave/templates/box-top-right.png differ diff --git a/tdeprint/slave/templates/class.template b/tdeprint/slave/templates/class.template new file mode 100644 index 000000000..b6a79a1fd --- /dev/null +++ b/tdeprint/slave/templates/class.template @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta name="generator" content= + "HTML Tidy for Linux/x86 (vers 1st August 2004), see www.w3.org" /> + + <title>%1 + + + + + +
+
+ +
+ +
+ +
+ +
+ %1 +
+ +
+ %1 +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+ %1 +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+

 %1

+ + + + + + + + + +
 %1 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
%1 %1
%1 %1
%1 %1
%1 %1
%1 %1
+
+ +

+ +

+ + + + + + + + + +
 %1 +
+ + + + + + +
%1
+
+ +

+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+ +
+ +
+ +
+
+ + diff --git a/tdeprint/slave/templates/driver.template b/tdeprint/slave/templates/driver.template new file mode 100644 index 000000000..8ba428e74 --- /dev/null +++ b/tdeprint/slave/templates/driver.template @@ -0,0 +1,133 @@ + + + + + + + + %1 + + + + + +
+
+ +
+ +
+ +
+ +
+ %1 +
+ +
+ %1 +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+ %1 +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+

 %1

+ + + + + +
+ + + %1 + +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+ +
+ +
+ +
+
+ + diff --git a/tdeprint/slave/templates/htmlstyles.css b/tdeprint/slave/templates/htmlstyles.css new file mode 100644 index 000000000..650ed76db --- /dev/null +++ b/tdeprint/slave/templates/htmlstyles.css @@ -0,0 +1,38 @@ +td.main { background-color: #505050;} +td.logo { background-color: #DDDDDD;} +td.lines { background-color: #DDDDDD; + background-image: url(lines.png);} +td.trans { background-repeat: no-repeat;} +td.end { background-image: url(lines2.png); + background-repeat: x-repeat;} +td.shadow1 { background-image: url(shadow1.png); + background-repeat: x-repeat;} +tr.top { font-family: sans-serif; + color: #ffffff; + background-color: #505050} +tr.contentyellow { font-family: sans-serif; + color: #000000; + background-color: #fff4c9} +tr.contentwhite { font-family: sans-serif; + color: #000000; + background-color: #FFFFFF} +tr.menurow {background-color: #505050; + color: #000000; + vertical-align: middle;} +td.deco {color: #ffffff; + background-color: #505050; + font-family: sans-serif; + font-size: small;} +td.menuactive {color: #ffcc00; + background-color: #777777; + font-family: sans-serif; + font-size: small;} +td.menu {color: #ffffff; + background-color: #505050; + font-family: sans-serif;} +a.menu {color: #eeeeee; + font-family: sans-serif; + font-size: small;} +a.menu:hover {color: #ffffff; + text-decoration: none;} + diff --git a/tdeprint/slave/templates/jobs.template b/tdeprint/slave/templates/jobs.template new file mode 100644 index 000000000..684899aba --- /dev/null +++ b/tdeprint/slave/templates/jobs.template @@ -0,0 +1,140 @@ + + + + + + + + %1 + + + + + +
+
+ +
+ +
+ +
+ +
+ %1 +
+ +
+ %1 +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+ %1 +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+

 %1

+ + + + + +
+ + + + + + + + + + %1 + +
%1%1%1%1%1
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+ +
+ +
+ +
+
+ + diff --git a/tdeprint/slave/templates/printer.template b/tdeprint/slave/templates/printer.template new file mode 100644 index 000000000..3bdfa8665 --- /dev/null +++ b/tdeprint/slave/templates/printer.template @@ -0,0 +1,205 @@ + + + + + + + + %1 + + + + + +
+
+ +
+ +
+ +
+ +
+ %1 +
+ +
+ %1 +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+ %1 +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+

 %1

+ + + + + + + + + +
 %1 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
%1 %1
%1 %1
%1 %1
%1 %1
%1 %1
%1 %1
+
+ +

+ +

+ + + + + + + + + +
 %1
+ + + + + + + + + + + + + + + + + + +
%1 %1 +
%1 %1
%1 %1
+
+ +

+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+ +
+ +
+ +
+
+ + diff --git a/tdeprint/slave/templates/pseudo.template b/tdeprint/slave/templates/pseudo.template new file mode 100644 index 000000000..a5acc24d1 --- /dev/null +++ b/tdeprint/slave/templates/pseudo.template @@ -0,0 +1,188 @@ + + + + + + + + %1 + + + + + +
+
+ +
+ +
+ +
+ +
+ %1 +
+ +
+ %1 +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+ %1 +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+

 %1

+ + + + + + + + + +
 %1 +
+ + + + + + + + + + + + + + + + + + + +
%1 %1
%1 %1
%1 %1
+
+ +

+ +

+ + + + + + + + + +
 %1
+ + + + + + + + + + + + + + + + + + +
%1 %1 +
%1 %1
%1 %1
+
+ +

+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+
+ +
+ +
+ +
+
+ + diff --git a/tdeprint/slave/templates/top-left.png b/tdeprint/slave/templates/top-left.png new file mode 100644 index 000000000..d7551c0d5 Binary files /dev/null and b/tdeprint/slave/templates/top-left.png differ diff --git a/tdeprint/slave/templates/top-middle.png b/tdeprint/slave/templates/top-middle.png new file mode 100644 index 000000000..bb3fe7428 Binary files /dev/null and b/tdeprint/slave/templates/top-middle.png differ diff --git a/tdeprint/slave/templates/top-right-tdeprint.png b/tdeprint/slave/templates/top-right-tdeprint.png new file mode 100644 index 000000000..56717342c Binary files /dev/null and b/tdeprint/slave/templates/top-right-tdeprint.png differ diff --git a/tdeprint/tdeprint_part/CMakeLists.txt b/tdeprint/tdeprint_part/CMakeLists.txt new file mode 100644 index 000000000..6de7ddb91 --- /dev/null +++ b/tdeprint/tdeprint_part/CMakeLists.txt @@ -0,0 +1,37 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_definitions( -D_KDEPRINT_COMPILE ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### other data ################################ + +install( FILES tdeprint_part.rc DESTINATION ${DATA_INSTALL_DIR}/tdeprint_part ) +install( FILES tdeprint_part.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) + + +##### libtdeprint_part (module) ################# + +tde_add_kpart( libtdeprint_part AUTOMOC + SOURCES printpart.cpp + LINK tdeprint_management-shared kparts-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) diff --git a/tdeprint/tdeprint_part/Makefile.am b/tdeprint/tdeprint_part/Makefile.am new file mode 100644 index 000000000..e27404a0f --- /dev/null +++ b/tdeprint/tdeprint_part/Makefile.am @@ -0,0 +1,24 @@ +AM_CPPFLAGS = -D_KDEPRINT_COMPILE + +kde_module_LTLIBRARIES = libtdeprint_part.la + +libtdeprint_part_la_SOURCES = printpart.cpp +libtdeprint_part_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +libtdeprint_part_la_LIBADD = -ltdeprint_management $(LIB_KPARTS) + +noinst_HEADERS = printpart.h + +METASOURCES = AUTO +INCLUDES = $(all_includes) + +# service +myservice_DATA = tdeprint_part.desktop +myservicedir = $(kde_servicesdir) + +# UI file +myrcfile_DATA = tdeprint_part.rc +myrcfiledir = $(kde_datadir)/tdeprint_part + +messages: rc.cpp + $(EXTRACTRC) tdeprint_part.rc >> rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/tdeprint_part.pot diff --git a/tdeprint/tdeprint_part/printpart.cpp b/tdeprint/tdeprint_part/printpart.cpp new file mode 100644 index 000000000..5d5d7b154 --- /dev/null +++ b/tdeprint/tdeprint_part/printpart.cpp @@ -0,0 +1,81 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "printpart.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef KParts::GenericFactory PrintPartFactory; +K_EXPORT_COMPONENT_FACTORY( libtdeprint_part, PrintPartFactory ) + +PrintPart::PrintPart(TQWidget *parentWidget, const char * /*widgetName*/ , + TQObject *parent, const char *name, + const TQStringList & /*args*/ ) +: KParts::ReadOnlyPart(parent, name) +{ + setInstance(PrintPartFactory::instance()); + instance()->iconLoader()->addAppDir("tdeprint"); + m_extension = new PrintPartExtension(this); + + m_view = new KMMainView(parentWidget, "MainView", actionCollection()); + m_view->setFocusPolicy(TQ_ClickFocus); + m_view->enableToolbar(false); + setWidget(m_view); + + initActions(); +} + +PrintPart::~PrintPart() +{ +} + +KAboutData *PrintPart::createAboutData() +{ + return new KAboutData(I18N_NOOP("tdeprint_part"), I18N_NOOP("A Konqueror Plugin for Print Management"), "0.1"); +} + +bool PrintPart::openFile() +{ + return true; +} + +void PrintPart::initActions() +{ + setXMLFile("tdeprint_part.rc"); +} + +PrintPartExtension::PrintPartExtension(PrintPart *parent) +: KParts::BrowserExtension(parent, "PrintPartExtension") +{ +} + +PrintPartExtension::~PrintPartExtension() +{ +} + +#include "printpart.moc" diff --git a/tdeprint/tdeprint_part/printpart.h b/tdeprint/tdeprint_part/printpart.h new file mode 100644 index 000000000..df543b210 --- /dev/null +++ b/tdeprint/tdeprint_part/printpart.h @@ -0,0 +1,59 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#ifndef PRINTPART_H +#define PRINTPART_H + +#include +#include + +class PrintPartExtension; +class KMMainView; +class KAboutData; + +class PrintPart : public KParts::ReadOnlyPart +{ + Q_OBJECT +public: + PrintPart(TQWidget *parentWidget, const char *widgetName, + TQObject *parent, const char *name, + const TQStringList & ); + virtual ~PrintPart(); + + static KAboutData *createAboutData(); + +protected: + bool openFile(); + void initActions(); + +private: + PrintPartExtension *m_extension; + KMMainView *m_view; +}; + +class PrintPartExtension : public KParts::BrowserExtension +{ + Q_OBJECT + friend class PrintPart; +public: + PrintPartExtension(PrintPart *parent); + virtual ~PrintPartExtension(); +}; + +#endif diff --git a/tdeprint/tdeprint_part/tdeprint_part.desktop b/tdeprint/tdeprint_part/tdeprint_part.desktop new file mode 100644 index 000000000..001f8ae39 --- /dev/null +++ b/tdeprint/tdeprint_part/tdeprint_part.desktop @@ -0,0 +1,85 @@ +[Desktop Entry] +Type=Service +Name=Print Management Tool +Name[af]=Drukker Bestuur Program +Name[ar]=أداة ادارة الطباعة +Name[az]=Çap Edici İdarə Vasitəsi +Name[be]=Кіраўнік друку +Name[bg]=Управление на печата +Name[bn]=মুদ্রণ ম্যানেজমেন্ট টুল +Name[br]=Ostilh mererezh moulañ +Name[bs]=Alat za upravljanje štampom +Name[ca]=Eina per a gestionar la impressió +Name[cs]=Správce tiskáren +Name[csb]=Sprôwianié wëdrëkama +Name[cy]=Erfyn Rheoli Argraffu +Name[da]=Udskriftshåndteringsværktøj +Name[de]=Druckerverwaltung +Name[el]=Εργαλείο διαχείρισης εκτυπώσεων +Name[eo]=Printadministrilo +Name[es]=Herramienta de gestión de la impresión +Name[et]=Trükkimise seadistused +Name[eu]=Inprimaketa kudeatzeko tresna +Name[fa]=ابزار مدیریت چاپ +Name[fi]=Tulostuksenhallinta +Name[fr]=Gestionnaire d'impression +Name[fy]=Helpprogramma foar printbehear +Name[ga]=Uirlis Bhainisteoireacht Priontála +Name[gl]=Ferramenta de Xestión da Impresión +Name[he]=כלי ניהול הדפסה +Name[hi]=प्रिंटर प्रबंधन औज़ार +Name[hr]=Alat za upravljanje ispisom +Name[hu]=Nyomtatáskezelő eszköz +Name[is]=Prentunartól +Name[it]=Strumento di gestione della stampa +Name[ja]=印刷マネージメントツール +Name[ka]=ბეჭდვის მართვა +Name[kk]=Басып шығаруды басқару +Name[km]=ឧបករណ៍​គ្រប់គ្រង​ការ​បោះពុម្ព +Name[ko]=휴대폰 관리 도구 +Name[lo]=ເຄື່ອງມືຈັດການພິມ +Name[lt]=Spausdinimo valdymo įrankis +Name[lv]=Drukas Menedžmenta Rīks +Name[mk]=Алатка за менаџмент на печатење +Name[mn]=Хэвлэгч удирдах хэлбэр +Name[ms]=Cetak Alat Pengurusan +Name[mt]=Għodda għall-immaniġġjar tal-printing +Name[nb]=Verktøy for utskriftsbehandling +Name[nds]=Druckers un Opgaven plegen +Name[ne]=मुद्रण व्यवस्थापन उपकरण +Name[nl]=Hulpprogramma voor printerbeheer +Name[nn]=Utskriftshandsaming +Name[nso]=Sebereka sa Taolo ya Kgatiso +Name[pa]=ਛਾਪਣ (ਪਰਿੰਟ) ਪਰਬੰਧਨ ਸੰਦ +Name[pl]=Zarządzanie wydrukiem +Name[pt]=Ferramenta de Gestão de Impressões +Name[pt_BR]=Ferramenta para Gerenciamento de Impressão +Name[ro]=Administrare tipărire +Name[ru]=Управление печатью +Name[rw]=Gucapa Igikoresho cy'Ubuyobozi +Name[se]=Čálihangieđahalli +Name[sk]=Nástroj na správu tlače +Name[sl]=Orodje za upravljanje tiskanja +Name[sr]=Алат за управљање штампом +Name[sr@Latn]=Alat za upravljanje štampom +Name[sv]=Verktyg för utskriftshantering +Name[ta]=அச்சு மேலாண்மைக் கருவி +Name[tg]=Тафсири мудирияти чоп +Name[th]=เครื่องมือจัดการงานพิมพ์ +Name[tr]=Yazdırma Yönetim Aracı +Name[tt]=Bastıru İdäneñ Qoralı +Name[uk]=Засіб керування друком +Name[uz]=Bosib chiqarishni boshqarish vositasi +Name[uz@cyrillic]=Босиб чиқаришни бошқариш воситаси +Name[ven]=Tshishumiswa tsha vhulanguli ha phirinthara +Name[vi]=Công cụ Quản lý In ấn +Name[wa]=Usteye po manaedjî l' imprimaedje +Name[xh]=Isixhobo Sophatho soshicilelo +Name[zh_CN]=打印管理工具 +Name[zh_TW]=列印管理工具 +Name[zu]=Ithuluzi Lokuphathwa Koshicilelo +MimeType=print/manager +ServiceTypes=Browser/View,KParts/ReadOnlyPart +X-KDE-Library=libtdeprint_part +Icon=printmgr +InitialPreference=12 diff --git a/tdeprint/tdeprint_part/tdeprint_part.rc b/tdeprint/tdeprint_part/tdeprint_part.rc new file mode 100644 index 000000000..a69e76490 --- /dev/null +++ b/tdeprint/tdeprint_part/tdeprint_part.rc @@ -0,0 +1,28 @@ + + +Print Manager Toolbar + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tdeprint/tdeprintfax/CMakeLists.txt b/tdeprint/tdeprintfax/CMakeLists.txt new file mode 100644 index 000000000..538719474 --- /dev/null +++ b/tdeprint/tdeprintfax/CMakeLists.txt @@ -0,0 +1,42 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### other data ################################ + +tde_install_icons( tdeprintfax ) +tde_install_icons( abentry DESTINATION ${DATA_INSTALL_DIR}/tdeprintfax/icons ) +install( FILES tdeprintfax.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) +install( FILES tdeprintfaxui.rc faxfilters DESTINATION ${DATA_INSTALL_DIR}/tdeprintfax ) +install( PROGRAMS anytops DESTINATION ${DATA_INSTALL_DIR}/tdeprintfax ) + + +##### tdeprintfax (executable) ################## + +tde_add_executable( tdeprintfax AUTOMOC + SOURCES + main.cpp tdeprintfax.cpp faxab.cpp faxctrl.cpp + confgeneral.cpp configdlg.cpp conffax.cpp + confsystem.cpp conffilters.cpp filterdlg.cpp + defcmds.cpp + LINK kabc-shared tdeprint-shared + DESTINATION ${BIN_INSTALL_DIR} +) diff --git a/tdeprint/tdeprintfax/Makefile.am b/tdeprint/tdeprintfax/Makefile.am new file mode 100644 index 000000000..cd0d39900 --- /dev/null +++ b/tdeprint/tdeprintfax/Makefile.am @@ -0,0 +1,23 @@ +INCLUDES= $(all_includes) + +bin_PROGRAMS = tdeprintfax +tdeprintfax_SOURCES = main.cpp tdeprintfax.cpp faxab.cpp faxctrl.cpp confgeneral.cpp configdlg.cpp \ + conffax.cpp confsystem.cpp conffilters.cpp filterdlg.cpp defcmds.cpp +tdeprintfax_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_KDECORE) $(LIB_KDEUI) -ltdefx $(LIB_KIO) -lktexteditor +tdeprintfax_LDADD = $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDEPRINT) -lkabc +tdeprintfax_METASOURCES = AUTO + +xdg_apps_DATA = tdeprintfax.desktop + +uidir = $(kde_datadir)/tdeprintfax +ui_DATA = tdeprintfaxui.rc faxfilters + +private_SCRIPTS = anytops +privatedir = $(kde_datadir)/tdeprintfax + +messages: rc.cpp + $(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/tdeprintfax.pot + +KDE_ICON = tdeprintfax +pic_ICON = abentry +picdir = $(kde_datadir)/tdeprintfax/icons diff --git a/tdeprint/tdeprintfax/anytops b/tdeprint/tdeprintfax/anytops new file mode 100755 index 000000000..9718831dc --- /dev/null +++ b/tdeprint/tdeprintfax/anytops @@ -0,0 +1,98 @@ +#!/bin/sh + +FAXFILTERS=./faxfilters +MIMETYPE= +PAGE="letter" + +usage() { + echo "Usage: anytops [-m ] [--mime=] [-p ] [--help] " + exit $1 +} + +while true; do + case "$1" in + --help) + usage 0 + ;; + -m) + shift + FAXFILTERS="$1" + shift + ;; + --mime=*) + MIMETYPE=${1#--mime=} + shift + ;; + -p) + shift + PAGE="$1" + shift + ;; + -v) + echo "Anytops v1.0: (c) 2001, Michael Goffioul "; + echo "Small script to convert any file type into PS. Part of tdeprintfax." + exit 0 + ;; + *) + break; + ;; + esac +done + +INFILE=$1 +OUTFILE=$2 + +if [ -z "$INFILE" -o -z "$OUTFILE" -o ! -f "$INFILE" ]; then + usage 1; +fi + +if [ -z "$MIMETYPE" ]; then + MAGIC=$KDEDIR + if [ -z "$MAGIC" ]; then + MAGIC=/usr + fi + MAGIC=$MAGIC/share/mimelnk/magic + + if [ ! -f "$MAGIC" ]; then + echo "KDE magic file not found. Check your installation." + exit 1; + fi + + MIMETYPE=`file -b -m $MAGIC "$INFILE" 2> /dev/null` + MIMETYPE=${MIMETYPE%%;*} +fi + +echo "Mime type: $MIMETYPE" +MIMETYPE_BASE=`echo $MIMETYPE | cut -f 1 -d "/"` +MIMETYPE_TYPE=`echo $MIMETYPE | cut -f 2- -d "/"` + +get_command() { + while read mime command; do + mimebase=`echo $mime | cut -f 1 -d "/"` + mimefile=`echo $mime | cut -f 2- -d "/"` + if test "$mimebase" = "$MIMETYPE_BASE" || test "$mimebase" = "*"; then + if test "$mimefile" = "$MIMETYPE_TYPE" || test "$mimefile" = "*"; then + echo $command + break; + fi + fi +# PATTERN=`echo $MIMETYPE | grep $mime` +# if [ "$PATTERN" = "$MIMETYPE" ]; then +# echo $command +# break; +# fi + done +} + +COMMAND=`cat $FAXFILTERS | get_command` + +if [ -z "$COMMAND" ]; then + echo "$MIMETYPE: file type not handled" + exit 1; +fi + +echo "Command: $COMMAND" + +PAGEUP="`echo $PAGE | cut -c 1 | tr [:lower:] [:upper:]``echo $PAGE | cut -c 2-`" +EXECCOMMAND=`echo $COMMAND | sed -e "s,%in,\"$INFILE\"," -e "s,%out,\"$OUTFILE\"," -e "s,%psl,$PAGE," -e "s,%psu,$PAGEUP,"` +eval "$EXECCOMMAND" diff --git a/tdeprint/tdeprintfax/conffax.cpp b/tdeprint/tdeprintfax/conffax.cpp new file mode 100644 index 000000000..1f3b8c3c5 --- /dev/null +++ b/tdeprint/tdeprintfax/conffax.cpp @@ -0,0 +1,80 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "conffax.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +ConfFax::ConfFax(TQWidget *parent, const char *name) +: TQWidget(parent, name) +{ + m_resolution = new TQComboBox(this); + m_resolution->setMinimumHeight(25); + m_pagesize = new TQComboBox(this); + m_pagesize->setMinimumHeight(25); + m_resolution->insertItem(i18n("High (204x196 dpi)")); + m_resolution->insertItem(i18n("Low (204x98 dpi)")); + m_pagesize->insertItem(i18n("A4")); + m_pagesize->insertItem(i18n("Letter")); + m_pagesize->insertItem(i18n("Legal")); + TQLabel *m_resolutionlabel = new TQLabel(i18n("&Resolution:"), this); + m_resolutionlabel->setBuddy(m_resolution); + TQLabel *m_pagesizelabel = new TQLabel(i18n("&Paper size:"), this); + m_pagesizelabel->setBuddy(m_pagesize); + + TQGridLayout *l0 = new TQGridLayout(this, 3, 2, 10, 10); + l0->setColStretch(1, 1); + l0->setRowStretch(2, 1); + l0->addWidget(m_resolutionlabel, 0, 0); + l0->addWidget(m_pagesizelabel, 1, 0); + l0->addWidget(m_resolution, 0, 1); + l0->addWidget(m_pagesize, 1, 1); +} + +void ConfFax::load() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Fax"); + TQString v = conf->readEntry("Page", KGlobal::locale()->pageSize() == TQPrinter::A4 ? "a4" : "letter"); + if (v == "letter") m_pagesize->setCurrentItem(1); + else if (v == "legal") m_pagesize->setCurrentItem(2); + else m_pagesize->setCurrentItem(0); + v = conf->readEntry("Resolution", "High"); + m_resolution->setCurrentItem((v == "Low" ? 1 : 0)); +} + +void ConfFax::save() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Fax"); + conf->writeEntry("Resolution", (m_resolution->currentItem() == 0 ? "High" : "Low")); + conf->writeEntry("Page", (m_pagesize->currentItem() == 0 ? "a4" : (m_pagesize->currentItem() == 1 ? "letter" : "legal"))); +} diff --git a/tdeprint/tdeprintfax/conffax.h b/tdeprint/tdeprintfax/conffax.h new file mode 100644 index 000000000..cf76f2b71 --- /dev/null +++ b/tdeprint/tdeprintfax/conffax.h @@ -0,0 +1,40 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFFAX_H +#define CONFFAX_H + +#include + +class TQComboBox; + +class ConfFax : public TQWidget +{ +public: + ConfFax(TQWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + +private: + TQComboBox *m_resolution, *m_pagesize; +}; + +#endif diff --git a/tdeprint/tdeprintfax/conffilters.cpp b/tdeprint/tdeprintfax/conffilters.cpp new file mode 100644 index 000000000..d32f33ea8 --- /dev/null +++ b/tdeprint/tdeprintfax/conffilters.cpp @@ -0,0 +1,192 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "conffilters.h" +#include "filterdlg.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +ConfFilters::ConfFilters(TQWidget *parent, const char *name) +: TQWidget(parent, name) +{ + m_filters = new KListView(this); + m_filters->addColumn(i18n("Mime Type")); + m_filters->addColumn(i18n("Command")); + m_filters->setFrameStyle(TQFrame::WinPanel|TQFrame::Sunken); + m_filters->setLineWidth(1); + m_filters->setSorting(-1); + m_filters->header()->setStretchEnabled(true, 1); + connect(m_filters, TQT_SIGNAL(doubleClicked(TQListViewItem*)), TQT_SLOT(slotChange())); + + m_add = new TQPushButton(this); + m_add->setPixmap(BarIcon("filenew")); + m_remove = new TQPushButton(this); + m_remove->setIconSet(BarIconSet("remove")); + m_change = new TQPushButton(this); + m_change->setIconSet(BarIconSet("filter")); + m_up = new TQPushButton(this); + m_up->setIconSet(BarIconSet("up")); + m_down = new TQPushButton(this); + m_down->setIconSet(BarIconSet("down")); + connect(m_add, TQT_SIGNAL(clicked()), TQT_SLOT(slotAdd())); + connect(m_change, TQT_SIGNAL(clicked()), TQT_SLOT(slotChange())); + connect(m_remove, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemove())); + connect(m_up, TQT_SIGNAL(clicked()), TQT_SLOT(slotUp())); + connect(m_down, TQT_SIGNAL(clicked()), TQT_SLOT(slotDown())); + TQToolTip::add(m_add, i18n("Add filter")); + TQToolTip::add(m_change, i18n("Modify filter")); + TQToolTip::add(m_remove, i18n("Remove filter")); + TQToolTip::add(m_up, i18n("Move filter up")); + TQToolTip::add(m_down, i18n("Move filter down")); + + TQHBoxLayout *l0 = new TQHBoxLayout(this, 10, 10); + TQVBoxLayout *l1 = new TQVBoxLayout(0, 0, 0); + l0->addWidget(m_filters, 1); + l0->addLayout(l1, 0); + l1->addWidget(m_add); + l1->addWidget(m_change); + l1->addWidget(m_remove); + l1->addSpacing(10); + l1->addWidget(m_up); + l1->addWidget(m_down); + l1->addStretch(1); + updateButton(); + connect(m_filters, TQT_SIGNAL(selectionChanged ()),TQT_SLOT(updateButton())); +} + +void ConfFilters::load() +{ + TQFile f(locate("data","tdeprintfax/faxfilters")); + if (f.exists() && f.open(IO_ReadOnly)) + { + TQTextStream t(&f); + TQString line; + int p(-1); + TQListViewItem *item(0); + while (!t.eof()) + { + line = t.readLine().stripWhiteSpace(); + if ((p=line.find(TQRegExp("\\s"))) != -1) + { + TQString mime(line.left(p)), cmd(line.right(line.length()-p-1).stripWhiteSpace()); + if (!mime.isEmpty() && !cmd.isEmpty()) + item = new TQListViewItem(m_filters, item, mime, cmd); + } + } + } +} + +void ConfFilters::save() +{ + TQListViewItem *item = m_filters->firstChild(); + TQFile f(locateLocal("data","tdeprintfax/faxfilters")); + if (f.open(IO_WriteOnly)) + { + TQTextStream t(&f); + while (item) + { + t << item->text(0) << ' ' << item->text(1) << endl; + item = item->nextSibling(); + } + } +} + +void ConfFilters::slotAdd() +{ + TQString mime, cmd; + if (FilterDlg::doIt(this, &mime, &cmd)) + if (!mime.isEmpty() && !cmd.isEmpty()) + { + new TQListViewItem(m_filters, m_filters->currentItem(), mime, cmd); + updateButton(); + } + else + KMessageBox::error(this, i18n("Empty parameters.")); +} + +void ConfFilters::slotRemove() +{ + TQListViewItem *item = m_filters->currentItem(); + if (item) + delete item; + updateButton(); +} + +void ConfFilters::slotChange() +{ + TQListViewItem *item = m_filters->currentItem(); + if (item) + { + TQString mime(item->text(0)), cmd(item->text(1)); + if (FilterDlg::doIt(this, &mime, &cmd)) + { + item->setText(0, mime); + item->setText(1, cmd); + } + } +} + +void ConfFilters::slotUp() +{ + TQListViewItem *item = m_filters->currentItem(); + if (item && item->itemAbove()) + { + m_filters->moveItem(item, 0, item->itemAbove()->itemAbove()); + m_filters->setCurrentItem(item); + updateButton(); + } +} + +void ConfFilters::slotDown() +{ + TQListViewItem *item = m_filters->currentItem(); + if (item && item->itemBelow()) + { + m_filters->moveItem(item, 0, item->itemBelow()); + m_filters->setCurrentItem(item); + updateButton(); + } +} + +void ConfFilters::updateButton() +{ + TQListViewItem *item = m_filters->currentItem(); + + bool state=item && item->itemBelow(); + m_remove->setEnabled(item); + m_down->setEnabled(state); + state=item && item->itemAbove(); + m_up->setEnabled(state); + m_change->setEnabled(item); +} + +#include "conffilters.moc" diff --git a/tdeprint/tdeprintfax/conffilters.h b/tdeprint/tdeprintfax/conffilters.h new file mode 100644 index 000000000..871b44bec --- /dev/null +++ b/tdeprint/tdeprintfax/conffilters.h @@ -0,0 +1,48 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFFILTERS_H +#define CONFFILTERS_H + +#include +#include +class KListView; + +class ConfFilters : public TQWidget +{ + Q_OBJECT +public: + ConfFilters(TQWidget *parent = 0, const char *name = 0); + + void load(); + void save(); +protected slots: + void slotAdd(); + void slotRemove(); + void slotChange(); + void slotUp(); + void slotDown(); + void updateButton(); +private: + KListView *m_filters; + TQPushButton *m_add,*m_remove,*m_up,*m_down,*m_change; +}; + +#endif diff --git a/tdeprint/tdeprintfax/confgeneral.cpp b/tdeprint/tdeprintfax/confgeneral.cpp new file mode 100644 index 000000000..db3ef916a --- /dev/null +++ b/tdeprint/tdeprintfax/confgeneral.cpp @@ -0,0 +1,90 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "confgeneral.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +ConfGeneral::ConfGeneral(TQWidget *parent, const char *name) +: TQWidget(parent, name) +{ + m_name = new TQLineEdit(this); + m_company = new TQLineEdit(this); + m_number = new TQLineEdit(this); + TQLabel *m_namelabel = new TQLabel(i18n("&Name:"), this); + m_namelabel->setBuddy(m_name); + TQLabel *m_companylabel = new TQLabel(i18n("&Company:"), this); + m_companylabel->setBuddy(m_company); + TQLabel *m_numberlabel = new TQLabel(i18n("N&umber:"), this); + m_numberlabel->setBuddy(m_number); + KSeparator *sep = new KSeparator( this ); + m_replace_int_char = new TQCheckBox( i18n( "Replace international prefix '+' with:" ), this ); + m_replace_int_char_val = new TQLineEdit( this ); + m_replace_int_char_val->setEnabled( false ); + + connect( m_replace_int_char, TQT_SIGNAL( toggled( bool ) ), m_replace_int_char_val, TQT_SLOT( setEnabled( bool ) ) ); + + TQGridLayout *l0 = new TQGridLayout(this, 6, 2, 10, 10); + l0->setColStretch(1, 1); + l0->setRowStretch(5, 1); + l0->addWidget(m_namelabel, 0, 0); + l0->addWidget(m_companylabel, 1, 0); + l0->addWidget(m_numberlabel, 2, 0); + l0->addWidget(m_name, 0, 1); + l0->addWidget(m_company, 1, 1); + l0->addWidget(m_number, 2, 1); + l0->addMultiCellWidget( sep, 3, 3, 0, 1 ); + TQHBoxLayout *l1 = new TQHBoxLayout( this, 0, 10 ); + l0->addMultiCellLayout( l1, 4, 4, 0, 1 ); + l1->addWidget( m_replace_int_char ); + l1->addWidget( m_replace_int_char_val ); +} + +void ConfGeneral::load() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Personal"); + m_name->setText(conf->readEntry("Name", getenv("USER"))); + m_number->setText(conf->readEntry("Number")); + m_company->setText(conf->readEntry("Company")); + m_replace_int_char->setChecked( conf->readBoolEntry( "ReplaceIntChar", false ) ); + m_replace_int_char_val->setText( conf->readEntry( "ReplaceIntCharVal" ) ); +} + +void ConfGeneral::save() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Personal"); + conf->writeEntry("Name", m_name->text()); + conf->writeEntry("Number", m_number->text()); + conf->writeEntry("Company", m_company->text()); + conf->writeEntry( "ReplaceIntChar", m_replace_int_char->isChecked() ); + conf->writeEntry( "ReplaceIntCharVal", m_replace_int_char_val->text() ); +} diff --git a/tdeprint/tdeprintfax/confgeneral.h b/tdeprint/tdeprintfax/confgeneral.h new file mode 100644 index 000000000..2962b0b0b --- /dev/null +++ b/tdeprint/tdeprintfax/confgeneral.h @@ -0,0 +1,43 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFGENERAL_H +#define CONFGENERAL_H + +#include + +class TQLineEdit; +class TQCheckBox; + +class ConfGeneral : public TQWidget +{ +public: + ConfGeneral(TQWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + +private: + TQLineEdit *m_name, *m_company, *m_number; + TQCheckBox *m_replace_int_char; + TQLineEdit *m_replace_int_char_val; +}; + +#endif diff --git a/tdeprint/tdeprintfax/configdlg.cpp b/tdeprint/tdeprintfax/configdlg.cpp new file mode 100644 index 000000000..526b767ff --- /dev/null +++ b/tdeprint/tdeprintfax/configdlg.cpp @@ -0,0 +1,75 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "configdlg.h" +#include "confgeneral.h" +#include "conffax.h" +#include "confsystem.h" +#include "conffilters.h" + +#include +#include +#include + +ConfigDlg::ConfigDlg(TQWidget *parent, const char *name) +: KDialogBase(IconList, i18n("Configuration"), Ok|Cancel, Ok, parent, name, true) +{ + TQVBox *page1 = addVBoxPage(i18n("Personal"), i18n("Personal Settings"), DesktopIcon("kdmconfig")); + m_general = new ConfGeneral(page1, "Personal"); + + TQVBox *page2 = addVBoxPage(i18n("Page setup"), i18n("Page Setup"), DesktopIcon("editcopy")); + m_fax = new ConfFax(page2, "Fax"); + + TQVBox *page3 = addVBoxPage(i18n("System"), i18n("Fax System Selection"), DesktopIcon("tdeprintfax")); + m_system = new ConfSystem(page3, "System"); + + TQVBox *page4 = addVBoxPage(i18n("Filters"), i18n("Filters Configuration"), DesktopIcon("filter")); + m_filters = new ConfFilters(page4, "Filters"); + + resize(450, 300); +} + +void ConfigDlg::load() +{ + m_general->load(); + m_fax->load(); + m_system->load(); + m_filters->load(); +} + +void ConfigDlg::save() +{ + m_general->save(); + m_fax->save(); + m_system->save(); + m_filters->save(); +} + +bool ConfigDlg::configure(TQWidget *parent) +{ + ConfigDlg dlg(parent); + dlg.load(); + if (dlg.exec()) + { + dlg.save(); + return true; + } + return false; +} diff --git a/tdeprint/tdeprintfax/configdlg.h b/tdeprint/tdeprintfax/configdlg.h new file mode 100644 index 000000000..6fabd2011 --- /dev/null +++ b/tdeprint/tdeprintfax/configdlg.h @@ -0,0 +1,48 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFIGDLG_H +#define CONFIGDLG_H + +#include + +class ConfGeneral; +class ConfFax; +class ConfSystem; +class ConfFilters; + +class ConfigDlg : public KDialogBase +{ +public: + static bool configure(TQWidget *parent = 0); + +protected: + ConfigDlg(TQWidget *parent = 0, const char *name = 0); + void load(); + void save(); + +private: + ConfGeneral *m_general; + ConfFax *m_fax; + ConfSystem *m_system; + ConfFilters *m_filters; +}; + +#endif diff --git a/tdeprint/tdeprintfax/confsystem.cpp b/tdeprint/tdeprintfax/confsystem.cpp new file mode 100644 index 000000000..91c23adb6 --- /dev/null +++ b/tdeprint/tdeprintfax/confsystem.cpp @@ -0,0 +1,199 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "confsystem.h" +#include "defcmds.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#define EFAX_ID 0 +#define HYLAFAX_ID 1 +#define MGETTY_ID 2 +#define OTHER_ID 3 + +ConfSystem::ConfSystem(TQWidget *parent, const char *name) +: TQWidget(parent, name) +{ + m_system = new TQComboBox(this); + m_system->insertItem("EFax"); + m_system->insertItem("HylaFax"); + m_system->insertItem("Mgetty-sendfax"); + m_system->insertItem( "Other" ); + m_command = new TQLineEdit(this); + TQLabel *syslabel = new TQLabel(i18n("F&ax system:"), this); + TQLabel *cmdlabel = new TQLabel(i18n("Co&mmand:"), this); + syslabel->setBuddy(m_system); + cmdlabel->setBuddy(m_command); + connect(m_system, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSystemChanged(int))); + m_current = 0; + m_system->setCurrentItem(m_current); + + TQWidget *m_dummy1 = new TQWidget(this), *m_dummy2 = new TQWidget(this); + m_server = new TQLineEdit(m_dummy1); + m_device = new TQComboBox(m_dummy2); + TQLabel *srvlabel = new TQLabel(i18n("Fax &server (if any):"), m_dummy1); + TQLabel *devlabel = new TQLabel(i18n("&Fax/Modem device:"), m_dummy2); + srvlabel->setBuddy(m_server); + devlabel->setBuddy(m_device); + m_device->insertItem(i18n("Standard Modem Port")); + for (int i=0; i<10; i++) + m_device->insertItem(TQString(i18n("Serial Port #%1").arg(i))); + m_device->insertItem( i18n( "Other" ) ); + connect( m_device, TQT_SIGNAL( activated( int ) ), TQT_SLOT( slotDeviceChanged( int ) ) ); + m_device_edit = new TQLineEdit( m_dummy2 ); + slotDeviceChanged( 0 ); + + KSeparator *sep = new KSeparator(this); + sep->setMinimumHeight(10); + + TQVBoxLayout *l0 = new TQVBoxLayout(this, 10, 10); + TQGridLayout *l1 = new TQGridLayout(0, 2, 2, 0, 10); + l0->addLayout(TQT_TQLAYOUT(l1)); + l1->setColStretch(1, 1); + l1->addWidget(syslabel, 0, 0); + l1->addWidget(cmdlabel, 1, 0); + l1->addWidget(m_system, 0, 1); + l1->addWidget(m_command, 1, 1); + l0->addWidget(sep); + l0->addWidget(m_dummy1); + l0->addWidget(m_dummy2); + l0->addStretch(1); + TQHBoxLayout *l4 = new TQHBoxLayout(m_dummy1, 0, 10); + l4->addWidget(srvlabel, 0); + l4->addWidget(m_server, 1); + TQGridLayout *l5 = new TQGridLayout( m_dummy2, 2, 2, 0, 10 ); + l5->setColStretch( 1, 1 ); + l5->addWidget(devlabel, 0, 0); + l5->addWidget(m_device, 0, 1); + l5->addWidget( m_device_edit, 1, 1 ); +} + +void ConfSystem::load() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + m_commands << conf->readPathEntry("EFax", defaultCommand(efax_default_cmd)); + m_commands << conf->readPathEntry("HylaFax", defaultCommand(hylafax_default_cmd)); + m_commands << conf->readPathEntry("Mgetty", defaultCommand(mgetty_default_cmd)); + m_commands << conf->readPathEntry( "Other", TQString::null ); + TQString v = conf->readEntry("System", "efax"); + if (v == "mgetty") m_current = MGETTY_ID; + else if (v == "hylafax") m_current = HYLAFAX_ID; + else if ( v == "other" ) m_current = OTHER_ID; + else m_current = EFAX_ID; + conf->setGroup("Fax"); + m_server->setText(conf->readEntry("Server", getenv("FAXSERVER"))); + v = conf->readEntry("Device", "modem"); + if (v.startsWith("ttyS")) + m_device->setCurrentItem(v.right(v.length()-4).toInt()+1); + else if ( v == "modem" ) + m_device->setCurrentItem(0); + else + { + m_device->setCurrentItem( m_device->count()-1 ); + m_device_edit->setText( "/dev/" + v ); + slotDeviceChanged( m_device->count()-1 ); + } + + m_system->setCurrentItem(m_current); + m_command->setText(m_commands[m_current]); + slotSystemChanged(m_current); +} + +void ConfSystem::save() +{ + m_commands[ m_current ] = m_command->text(); + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + if (m_commands[EFAX_ID] != defaultCommand(efax_default_cmd)) + conf->writePathEntry("EFax", m_commands[EFAX_ID]); + else + conf->deleteEntry("EFax"); + if (m_commands[HYLAFAX_ID] != defaultCommand(hylafax_default_cmd)) + conf->writePathEntry("HylaFax", m_commands[HYLAFAX_ID]); + else + conf->deleteEntry("HylaFax"); + if (m_commands[MGETTY_ID] != defaultCommand(mgetty_default_cmd)) + conf->writePathEntry("Mgetty", m_commands[MGETTY_ID]); + else + conf->deleteEntry("Mgetty"); + if ( !m_commands[ OTHER_ID ].isEmpty() ) + conf->writeEntry( "Other", m_commands[ OTHER_ID ] ); + else + conf->deleteEntry( "Other" ); + int ID = m_system->currentItem(); + switch (ID) + { + case EFAX_ID: conf->writeEntry("System", "efax"); break; + case HYLAFAX_ID: conf->writeEntry("System", "hylafax"); break; + case MGETTY_ID: conf->writeEntry("System", "mgetty"); break; + case OTHER_ID: conf->writeEntry( "System", "other" ); break; + } + conf->setGroup("Fax"); + if ( m_device->currentItem() != ( m_device->count()-1 ) ) + conf->writeEntry("Device", m_device->currentItem() == 0 ? TQString("modem") : TQString(TQString("ttyS%1").arg(m_device->currentItem()-1))); + else + { + TQString dev = m_device_edit->text(); + // strip leading "/dev/" + if ( dev.startsWith( "/dev/" ) ) + dev = dev.mid( 5 ); + conf->writeEntry( "Device", dev ); + } + if (m_server->text().isEmpty()) + conf->deleteEntry("Server"); + else + conf->writeEntry("Server", m_server->text()); +} + +void ConfSystem::slotSystemChanged(int ID) +{ + m_commands[m_current] = m_command->text(); + m_current = ID; + if (ID == EFAX_ID) + m_device->parentWidget()->show(); + else + m_device->parentWidget()->hide(); + if (ID == HYLAFAX_ID) + m_server->parentWidget()->show(); + else + m_server->parentWidget()->hide(); + m_command->setText(m_commands[m_current]); +} + +void ConfSystem::slotDeviceChanged( int ID ) +{ + if ( ID != ( m_device->count()-1 ) ) + m_device_edit->hide(); + else + m_device_edit->show(); +} + +#include "confsystem.moc" diff --git a/tdeprint/tdeprintfax/confsystem.h b/tdeprint/tdeprintfax/confsystem.h new file mode 100644 index 000000000..0ce8971f0 --- /dev/null +++ b/tdeprint/tdeprintfax/confsystem.h @@ -0,0 +1,50 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef CONFSYSTEM_H +#define CONFSYSTEM_H + +#include +#include + +class TQLineEdit; +class TQComboBox; + +class ConfSystem : public TQWidget +{ + Q_OBJECT +public: + ConfSystem(TQWidget *parent = 0, const char *name = 0); + + void load(); + void save(); + +protected slots: + void slotSystemChanged(int); + void slotDeviceChanged(int); + +private: + TQComboBox *m_system, *m_device; + TQLineEdit *m_command, *m_server, *m_device_edit; + TQStringList m_commands; + int m_current; +}; + +#endif diff --git a/tdeprint/tdeprintfax/cr16-action-abentry.png b/tdeprint/tdeprintfax/cr16-action-abentry.png new file mode 100644 index 000000000..b6b1011f3 Binary files /dev/null and b/tdeprint/tdeprintfax/cr16-action-abentry.png differ diff --git a/tdeprint/tdeprintfax/defcmds.cpp b/tdeprint/tdeprintfax/defcmds.cpp new file mode 100644 index 000000000..a2d58c17e --- /dev/null +++ b/tdeprint/tdeprintfax/defcmds.cpp @@ -0,0 +1,38 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "defcmds.h" + +#include +#include + +TQString defaultCommand(const TQString& cmd) +{ + TQString str(cmd); + TQRegExp r("%exe_(\\w+)"); + int p(-1); + if ((p=r.search(str)) != -1) + { + TQString exe = KStandardDirs::findExe(r.cap(1)); + if (exe.isEmpty()) + exe = "/usr/bin/"+r.cap(1); + str.replace(p, r.matchedLength(), exe); + } + return str; +} diff --git a/tdeprint/tdeprintfax/defcmds.h b/tdeprint/tdeprintfax/defcmds.h new file mode 100644 index 000000000..90d67b83f --- /dev/null +++ b/tdeprint/tdeprintfax/defcmds.h @@ -0,0 +1,32 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef DEFCMDS_H +#define DEFCMDS_H + +#include + +#define efax_default_cmd "%exe_fax %user_{NAME=\"@@\"} %dev_{DEV=@@} PAGE=%page %from_{FROM=\"@@\"} %res_{?\?-l} send %number %files" +#define hylafax_default_cmd "%exe_sendfax %cover_{?\?-n} %server_h %res_{-m?\?-l} %subject_r %time_a %enterprise_x %comment_c %email_f %from_W %page_s -d %name_{@@@}%number %files" +#define mgetty_default_cmd "%exe_faxspool %user_F %email_f %name_D %time_t %number %files %res_{?\?-n} %cover_{?\?-C -}" + +TQString defaultCommand(const TQString& cmd); + +#endif diff --git a/tdeprint/tdeprintfax/faxab.cpp b/tdeprint/tdeprintfax/faxab.cpp new file mode 100644 index 000000000..ad50ac9fb --- /dev/null +++ b/tdeprint/tdeprintfax/faxab.cpp @@ -0,0 +1,212 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "faxab.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +FaxAB::FaxAB(TQWidget *parent, const char *name) +: KDialog(parent, name, true) +{ + m_list = new KListView( this ); + m_list->addColumn( i18n( "Name" ) ); + m_list->addColumn( i18n( "Fax Number" ) ); + m_list->header()->setStretchEnabled( true, 0 ); + TQLabel *m_listlabel = new TQLabel(i18n("Entries:"), this); + m_ok = new KPushButton(KStdGuiItem::ok(), this); + TQPushButton *m_cancel = new KPushButton(KStdGuiItem::cancel(), this); + TQPushButton *m_ab = new KPushButton(KGuiItem(i18n("&Edit Addressbook"), "contents"), this); + connect(m_ok, TQT_SIGNAL(clicked()), TQT_SLOT(accept())); + connect(m_cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject())); + connect(m_ab, TQT_SIGNAL(clicked()), TQT_SLOT(slotEditAb())); + m_ok->setDefault(true); + + TQVBoxLayout *l0 = new TQVBoxLayout(this, 10, 10); + l0->addWidget( m_listlabel ); + l0->addWidget( m_list ); + TQHBoxLayout *l2 = new TQHBoxLayout(0, 0, 10); + l0->addLayout(l2, 0); + l2->addWidget(m_ab, 0); + l2->addStretch(1); + l2->addWidget(m_ok, 0); + l2->addWidget(m_cancel, 0); + + KConfig *conf = KGlobal::config(); + conf->setGroup( "General" ); + TQSize defsize( 400, 200 ); + resize( conf->readSizeEntry( "ABSize", &defsize ) ); + + initialize(); + connect(KABC::StdAddressBook::self(), TQT_SIGNAL(addressBookChanged(AddressBook*)), TQT_SLOT(slotAbChanged(AddressBook*))); +} + +FaxAB::~FaxAB() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup( "General" ); + conf->writeEntry( "ABSize", size() ); +} + +void FaxAB::initialize() +{ + m_entries.clear(); + m_list->clear(); + + KABC::AddressBook *bk = KABC::StdAddressBook::self(); + for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it) + { + KABC::PhoneNumber::List numbers = (*it).phoneNumbers(); + KABC::PhoneNumber::List faxNumbers; + for (TQValueList::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit) + { + if (((*nit).type() & KABC::PhoneNumber::Fax) && !(*nit).number().isEmpty()) + faxNumbers << ( *nit ); + } + if (faxNumbers.count() > 0) + { + for ( KABC::PhoneNumber::List::ConstIterator nit = faxNumbers.begin(); nit != faxNumbers.end(); ++nit ) + { + FaxABEntry entry; + entry.m_number = ( *nit ); + entry.m_enterprise = ( *it ).organization(); + if ( !( *it ).formattedName().isEmpty() ) + entry.m_name = ( *it ).formattedName(); + else + { + TQString key = ( *it ).familyName(); + if ( !( *it ).givenName().isEmpty() ) + { + if ( !key.isEmpty() ) + key.append( " " ); + key.append( ( *it ).givenName() ); + } + entry.m_name = key; + } + entry.m_name += ( " (" + ( *nit ).typeLabel() + ")" ); + m_entries[ entry.m_name ] = entry; + } + } + } + + if (m_entries.count() > 0) + { + for (TQMap::ConstIterator it=m_entries.begin(); it!=m_entries.end(); ++it) + { + TQCheckListItem *item = new TQCheckListItem( m_list, it.key(), TQCheckListItem::CheckBox ); + item->setText( 1, ( *it ).m_number.number() ); + item->setText( 2, ( *it ).m_enterprise ); + } + m_list->sort(); + m_ok->setEnabled(true); + } + else + m_ok->setDisabled(true); +} + +void FaxAB::slotEditAb() +{ + KRun::runCommand("kaddressbook"); +} + +void FaxAB::slotAbChanged(AddressBook*) +{ + initialize(); +} + +bool FaxAB::getEntry(TQStringList& number, TQStringList& name, TQStringList& enterprise, TQWidget *parent) +{ + FaxAB kab(parent); + if (!kab.isValid()) + { + KMessageBox::error(parent, i18n("No fax number found in your address book.")); + return false; + } + if (kab.exec()) + { + TQListViewItemIterator it( kab.m_list, TQListViewItemIterator::Checked ); + while ( it.current() ) + { + number << it.current()->text( 1 ); + name << it.current()->text( 0 ); + enterprise << it.current()->text( 2 ); + ++it; + } + /* + number = kab.m_fax->currentText(); + name = kab.m_name->currentText(); + if (kab.m_entries.contains(name)) + { + enterprise = kab.m_entries[name][0]; + } + */ + return true; + } + + return false; +} + +bool FaxAB::getEntryByNumber(const TQString& number, TQString& name, TQString& enterprise) +{ + KABC::AddressBook *bk = KABC::StdAddressBook::self(); + for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it) + { + KABC::PhoneNumber::List numbers = (*it).phoneNumbers(); + TQStringList filteredNumbers; + for (TQValueList::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit) + { + if (((*nit).type() & KABC::PhoneNumber::Fax) ) + { + TQString strippedNumber; + for (uint i = 0; i < (*nit).number().length(); ++i) + if ((*nit).number()[i].isDigit() || ( *nit ).number()[ i ] == '+') + strippedNumber.append((*nit).number()[i]); + + if ( strippedNumber == number) + { + enterprise = (*it).organization(); + name = (*it).formattedName(); + return true; + } + } + } + } + + return false; +} + +bool FaxAB::isValid() +{ + return true; + //return (m_name->count() > 0); +} + +#include "faxab.moc" diff --git a/tdeprint/tdeprintfax/faxab.h b/tdeprint/tdeprintfax/faxab.h new file mode 100644 index 000000000..8b50c204a --- /dev/null +++ b/tdeprint/tdeprintfax/faxab.h @@ -0,0 +1,64 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef FAXAB_H +#define FAXAB_H + +#include +#include +#include +#include + +class KListView; +class AddressBook; +class TQPushButton; + +class FaxAB : public KDialog +{ + Q_OBJECT +public: + FaxAB(TQWidget *parent = 0, const char *name = 0); + ~FaxAB(); + bool isValid(); + + static bool getEntry(TQStringList& number, TQStringList& name, TQStringList& enterprise, TQWidget *parent = 0); + static bool getEntryByNumber(const TQString& number, TQString& name, TQString& enterprise); + +protected slots: + void slotEditAb(); + void slotAbChanged(AddressBook*); + +protected: + void initialize(); + +private: + struct FaxABEntry + { + TQString m_name; + KABC::PhoneNumber m_number; + TQString m_enterprise; + }; + + KListView* m_list; + TQMap m_entries; + TQPushButton* m_ok; +}; + +#endif diff --git a/tdeprint/tdeprintfax/faxctrl.cpp b/tdeprint/tdeprintfax/faxctrl.cpp new file mode 100644 index 000000000..c1b1b1a0d --- /dev/null +++ b/tdeprint/tdeprintfax/faxctrl.cpp @@ -0,0 +1,669 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "faxctrl.h" +#include "tdeprintfax.h" +#include "defcmds.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define quote(x) KProcess::quote(x) + +/** \brief Return a string for the page size. + * + * @param size the page size, which is actually of type @c TQPrinter::PageSize + * @return a pointer to a static string for the name of the page size. + */ +char const* pageSizeText(int size) +{ + switch(size) + { + case TQPrinter::A4: return "a4"; + case TQPrinter::Legal: return "legal"; + case TQPrinter::Letter: return "letter"; + default: return "letter"; + } +} + +/** \brief Return the default page size. + */ +static TQString pageSize() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("Fax"); + return conf->readEntry("Page", pageSizeText(KGlobal::locale()->pageSize())); +} + +static TQString stripNumber( const TQString& s ) +{ + KConfig *conf = KGlobal::config(); + conf->setGroup( "Personal" ); + + // removes any non-numeric character, except ('+','*','#') (hope it's supported by faxing tools) + TQString strip_s = s; + strip_s.replace( TQRegExp( "[^\\d+*#]" ), "" ); + if ( strip_s.find( '+' ) != -1 && conf->readBoolEntry( "ReplaceIntChar", false ) ) + strip_s.replace( "+", conf->readEntry( "ReplaceIntCharVal" ) ); + return strip_s; +} + +static TQString tagList( int n, ... ) +{ + TQString t; + + va_list ap; + va_start( ap, n ); + for ( int i=0; i%name_{iftrue??iffalse}. Either + * @em iftrue or @em iffalse can be empty (or both, but that would + * be silly). For example, if the fax software uses the + * option @c -l for low resolution, you might use %res_{??-l}, + * and if it uses high resolution, use %res_{-h??}. As an + * abbreviation, omit the trailing ?, e.g., %res_{-h}. + * + * By the way, when using multiple, adjacent question marks, + * always be careful about inadvertently using trigraphs. + * Always escape the second and subsequent question marks, to be safe. + * I suppose question marks are not the best string to use, + * but I think they work well for the end-user. + * + * @param match the string to process + * @param value the Boolean value to control the processing + * @return the new value of the tag + */ +static TQString processTag( const TQString& match, bool value) +{ + TQString v; + int p = match.find( '_' ); + if ( p != -1 && match[ p+1 ] == '{' ) + { + // Find the ?? that separates the iftrue from the iffalse parts. + int q = match.find( "?\?", p+2 ); + if ( q == -1 ) + { + // No iffalse part + if (value) + v = match.mid( p+2 ); + // else value is false, so leave v empty. + } + else if ( value ) + // Extract only the iftrue part + v = match.mid( p+2, q-p-2 ); + else + // Extract only the iffalse part + v = match.mid( q+2, match.length()-q-3 ); + } + // Else the string is malformed: no _ or no { after the _ + // In either case, there isn't much the program can do, + // so just leave the result string empty. + + return v; +} + +static TQString processTag( const TQString& match, const TQString& value ) +{ + TQString v; + int p = match.find( '_' ); + if ( p != -1 ) + { + if ( value.isEmpty() ) + v = ""; + else + { + if ( match[ p+1 ] == '{' ) + { + v = match.mid( p+2, match.length()-p-3 ); + v.replace( "@@", quote( value ) ); + } + else + v = ( "-" + match.mid( p+1 ) + " " + quote( value ) ); + } + } + else + v = quote( value ); + return v; +} + +static bool isTag( const TQString& m, const TQString& t ) +{ + return ( m == t || m.startsWith( t+"_" ) ); +} + +static TQString replaceTags( const TQString& s, const TQString& tags, KdeprintFax *fax = NULL, const KdeprintFax::FaxItem& item = KdeprintFax::FaxItem() ) +{ + // unquote variables (they will be replaced with quoted values later) + + TQValueStack stack; + KConfig *conf = KGlobal::config(); + + TQString cmd = s; + + bool issinglequote=false; + bool isdoublequote=false; + TQRegExp re_noquote("(\\$\\(|\\)|\\(|\"|'|\\\\|`|"+tags+")"); + TQRegExp re_singlequote("('|"+tags+")"); + TQRegExp re_doublequote("(\\$\\(|\"|\\\\|`|"+tags+")"); + for ( int i = re_noquote.search(cmd); + i != -1; + i = (issinglequote?re_singlequote.search(cmd,i) + :isdoublequote?re_doublequote.search(cmd,i) + :re_noquote.search(cmd,i)) + ) + { + if (cmd[i]=='(') // (...) + { + // assert(isdoublequote == false) + stack.push(isdoublequote); + i++; + } + else if (cmd[i]=='$') // $(...) + { + stack.push(isdoublequote); + isdoublequote = false; + i+=2; + } + else if (cmd[i]==')') // $(...) or (...) + { + if (!stack.isEmpty()) + isdoublequote = stack.pop(); + else + qWarning("Parse error."); + i++; + } + else if (cmd[i]=='\'') + { + issinglequote=!issinglequote; + i++; + } + else if (cmd[i]=='"') + { + isdoublequote=!isdoublequote; + i++; + } + else if (cmd[i]=='\\') + i+=2; + else if (cmd[i]=='`') + { + // Replace all `...` with safer $(...) + cmd.replace (i, 1, "$("); + TQRegExp re_backticks("(`|\\\\`|\\\\\\\\|\\\\\\$)"); + for ( int i2=re_backticks.search(cmd,i+2); + i2!=-1; + i2=re_backticks.search(cmd,i2) + ) + { + if (cmd[i2] == '`') + { + cmd.replace (i2, 1, ")"); + i2=cmd.length(); // leave loop + } + else + { // remove backslash and ignore following character + cmd.remove (i2, 1); + i2++; + } + } + // Leave i unchanged! We need to process "$(" + } + else + { + TQString match, v; + + // get match + if (issinglequote) + match=re_singlequote.cap(); + else if (isdoublequote) + match=re_doublequote.cap(); + else + match=re_noquote.cap(); + + // substitute %variables + // settings + if ( isTag( match, "%dev" ) ) + { + conf->setGroup("Fax"); + v = processTag( match, conf->readEntry("Device", "modem") ); + + } + else if (isTag( match, "%server" )) + { + conf->setGroup( "Fax" ); + v = conf->readEntry("Server"); + if (v.isEmpty()) + v = getenv("FAXSERVER"); + if (v.isEmpty()) + v = TQString::tqfromLatin1("localhost"); + v = processTag( match, v ); + } + else if (isTag( match, "%page" )) + { + conf->setGroup( "Fax" ); + v = processTag( match, pageSize() ); + } + else if (isTag( match, "%res" )) + { + conf->setGroup( "Fax" ); + v = processTag(match, conf->readEntry("Resolution", "High") == "High"); + } + else if (isTag( match, "%user" )) + { + conf->setGroup("Personal"); + v = processTag(match, conf->readEntry("Name", getenv("USER"))); + } + else if (isTag( match, "%from" )) + { + conf->setGroup( "Personal" ); + v = processTag(match, conf->readEntry("Number")); + } + else if (isTag( match, "%email" )) + { + KEMailSettings e; + v = processTag(match, e.getSetting(KEMailSettings::EmailAddress)); + } + // arguments + else if (isTag( match, "%number" )) + v = processTag( match, stripNumber( item.number) ); + else if (isTag( match, "%rawnumber" )) + v = processTag( match, item.number ); + else if (isTag( match, "%name" )) + v = processTag(match, item.name); + else if (isTag( match, "%comment" )) + v = processTag(match, fax->comment()); + else if (isTag( match, "%enterprise" )) + v = processTag(match, item.enterprise); + else if ( isTag( match, "%time" ) ) + v = processTag( match, fax->time() ); + else if ( isTag( match, "%subject" ) ) + v = processTag( match, fax->subject() ); + else if (isTag( match, "%cover" )) + v = processTag(match, fax->cover()); + + // %variable inside of a quote? + if (isdoublequote) + v='"'+v+'"'; + else if (issinglequote) + v="'"+v+"'"; + + cmd.replace (i, match.length(), v); + i+=v.length(); + } + } + + return cmd; +} + +FaxCtrl::FaxCtrl(TQWidget *parent, const char *name) +: TQObject(parent, name) +{ + m_process = new KProcess(); + m_process->setUseShell(true); + connect(m_process, TQT_SIGNAL(receivedStdout(KProcess*,char*,int)), TQT_SLOT(slotReceivedStdout(KProcess*,char*,int))); + connect(m_process, TQT_SIGNAL(receivedStderr(KProcess*,char*,int)), TQT_SLOT(slotReceivedStdout(KProcess*,char*,int))); + connect(m_process, TQT_SIGNAL(processExited(KProcess*)), TQT_SLOT(slotProcessExited(KProcess*))); + connect(this, TQT_SIGNAL(faxSent(bool)), TQT_SLOT(cleanTempFiles())); + m_logview = 0; +} + +FaxCtrl::~FaxCtrl() +{ + slotCloseLog(); + delete m_process; +} + +bool FaxCtrl::send(KdeprintFax *f) +{ + m_command = faxCommand(); + if (m_command.isEmpty()) + return false; + + // replace tags common to all fax "operations" + m_command = replaceTags( m_command, tagList( 11, "%dev", "%server", "%page", "%res", "%user", "%from", "%email", "%comment", "%time", "%subject", "%cover" ), f ); + + m_log = TQString::null; + m_filteredfiles.clear(); + cleanTempFiles(); + m_files = f->files(); + m_faxlist = f->faxList(); + + addLogTitle( i18n( "Converting input files to PostScript" ) ); + filter(); + + return true; +} + +void FaxCtrl::slotReceivedStdout(KProcess*, char *buffer, int len) +{ + TQCString str(buffer, len); + kdDebug() << "Received stdout: " << str << endl; + addLog(TQString(str)); +} + +void FaxCtrl::slotProcessExited(KProcess*) +{ + // we exited a process: if there's still entries in m_files, this was a filter + // process, else this was the fax process + bool ok = (m_process->normalExit() && ((m_process->exitStatus() & (m_files.count() > 0 ? 0x1 : 0xFFFFFFFF)) == 0)); + if ( ok ) + { + if ( m_files.count() > 0 ) + { + // remove first element + m_files.remove(m_files.begin()); + if (m_files.count() > 0) + filter(); + else + sendFax(); + } + else if ( !m_faxlist.isEmpty() ) + sendFax(); + else + faxSent( true ); + } + else + { + emit faxSent(false); + } +} + +TQString FaxCtrl::faxCommand() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + TQString sys = conf->readPathEntry("System", "efax"); + TQString cmd; + if (sys == "hylafax") + cmd = conf->readPathEntry("HylaFax", hylafax_default_cmd); + else if (sys == "mgetty") + cmd = conf->readPathEntry("Mgetty", mgetty_default_cmd); + else if ( sys == "other" ) + cmd = conf->readPathEntry( "Other", TQString::null ); + else + cmd = conf->readPathEntry("EFax", efax_default_cmd); + if (cmd.startsWith("%exe_")) + cmd = defaultCommand(cmd); + return cmd; +} + +void FaxCtrl::sendFax() +{ + if ( m_command.find( "%files" ) != -1 ) + { + // replace %files tag + TQString filestr; + for (TQStringList::ConstIterator it=m_filteredfiles.begin(); it!=m_filteredfiles.end(); ++it) + filestr += (quote(*it)+" "); + m_command.replace("%files", filestr); + } + + if ( !m_faxlist.isEmpty() ) + { + KdeprintFax::FaxItem item = m_faxlist.first(); + m_faxlist.remove(m_faxlist.begin()); + + addLogTitle( i18n( "Sending fax to %1 (%2)" ).arg( item.number ).arg( item.name ) ); + + TQString cmd = replaceTags( m_command, tagList( 4, "%number", "%name", "%enterprise", "%rawnumber" ), NULL, item ); + m_process->clearArguments(); + *m_process << cmd; + addLog(i18n("Sending to fax using: %1").arg(cmd)); + if (!m_process->start(KProcess::NotifyOnExit, KProcess::AllOutput)) + emit faxSent(false); + else + emit message(i18n("Sending fax to %1...").arg( item.number )); + } +} + +void FaxCtrl::filter() +{ + if (m_files.count() > 0) + { + TQString mimeType = KMimeType::findByURL(KURL(m_files[0]), 0, true)->name(); + if (mimeType == "application/postscript" || mimeType == "image/tiff") + { + emit message(i18n("Skipping %1...").arg(m_files[0])); + m_filteredfiles.prepend(m_files[0]); + m_files.remove(m_files.begin()); + filter(); + } + else + { + TQString tmp = locateLocal("tmp","tdeprintfax_") + kapp->randomString(8); + m_filteredfiles.prepend(tmp); + m_tempfiles.append(tmp); + m_process->clearArguments(); + *m_process << locate("data","tdeprintfax/anytops") << "-m" << KProcess::quote(locate("data","tdeprintfax/faxfilters")) + << TQString::tqfromLatin1("--mime=%1").arg(mimeType) + << "-p" << pageSize() + << KProcess::quote(m_files[0]) << KProcess::quote(tmp); + if (!m_process->start(KProcess::NotifyOnExit, KProcess::AllOutput)) + emit faxSent(false); + else + emit message(i18n("Filtering %1...").arg(m_files[0])); + } + } + else + { + sendFax(); + } +} + +bool FaxCtrl::abort() +{ + if (m_process->isRunning()) + return m_process->kill(); + else + return false; +} + +void FaxCtrl::viewLog(TQWidget *) +{ + if (!m_logview) + { + TQWidget *topView = new TQWidget(0, "LogView", (WFlags)(WType_TopLevel|WStyle_DialogBorder|WDestructiveClose)); + m_logview = new KTextEdit(topView); + m_logview->setTextFormat( TQt::LogText ); + m_logview->setWordWrap( TQTextEdit::WidgetWidth ); + m_logview->setPaper( Qt::white ); + //m_logview->setReadOnly(true); + //m_logview->setWordWrap(TQTextEdit::NoWrap); + TQPushButton *m_clear = new KPushButton(KStdGuiItem::clear(), topView); + TQPushButton *m_close = new KPushButton(KStdGuiItem::close(), topView); + TQPushButton *m_print = new KPushButton( KStdGuiItem::print(), topView ); + TQPushButton *m_save = new KPushButton( KStdGuiItem::saveAs(), topView ); + m_close->setDefault(true); + connect(m_clear, TQT_SIGNAL(clicked()), TQT_SLOT(slotClearLog())); + connect(m_close, TQT_SIGNAL(clicked()), TQT_SLOT(slotCloseLog())); + connect(m_logview, TQT_SIGNAL(destroyed()), TQT_SLOT(slotCloseLog())); + connect( m_print, TQT_SIGNAL( clicked() ), TQT_SLOT( slotPrintLog() ) ); + connect( m_save, TQT_SIGNAL( clicked() ), TQT_SLOT( slotSaveLog() ) ); + + TQVBoxLayout *l0 = new TQVBoxLayout(topView, 10, 10); + l0->addWidget(m_logview); + TQHBoxLayout *l1 = new TQHBoxLayout(0, 0, 10); + l0->addLayout(l1); + l1->addStretch(1); + l1->addWidget( m_save ); + l1->addWidget( m_print ); + l1->addWidget(m_clear); + l1->addWidget(m_close); + + m_logview->setText(m_log); + + topView->resize(450, 350); + topView->show(); + } + else + { + KWin::activateWindow(m_logview->parentWidget()->winId()); + } +} + +void FaxCtrl::addLogTitle( const TQString& s ) +{ + TQString t( s ); + t.prepend( '\n' ).append( '\n' ); + addLog( t, true ); +} + +void FaxCtrl::addLog(const TQString& s, bool isTitle) +{ + TQString t = TQStyleSheet::escape(s); + if ( isTitle ) + t.prepend( "" ).append( "" ); + m_log.append( t + '\n' ); + if (m_logview) + m_logview->append(t); +} + +TQString FaxCtrl::faxSystem() +{ + KConfig *conf = KGlobal::config(); + conf->setGroup("System"); + TQString s = conf->readEntry("System", "efax"); + s[0] = s[0].upper(); + return s; +} + +void FaxCtrl::cleanTempFiles() +{ + for (TQStringList::ConstIterator it=m_tempfiles.begin(); it!=m_tempfiles.end(); ++it) + TQFile::remove(*it); + m_tempfiles.clear(); +} + +void FaxCtrl::slotClearLog() +{ + m_log = TQString::null; + if (m_logview) + m_logview->clear(); +} + +void FaxCtrl::slotCloseLog() +{ + const TQObject *obj = TQT_TQOBJECT_CONST(sender()); + if (m_logview) + { + TQTextEdit *view = m_logview; + m_logview = 0; + if (obj && obj->inherits(TQPUSHBUTTON_OBJECT_NAME_STRING)) + delete view->parentWidget(); +kdDebug() << "slotClose()" << endl; + } +} + +void FaxCtrl::slotPrintLog() +{ + if ( m_logview ) + { + KPrinter printer; + printer.setDocName( i18n( "Fax log" ) ); + printer.setDocFileName( "faxlog" ); + if ( printer.setup( m_logview->tqtopLevelWidget(), i18n( "Fax Log" ) ) ) + { + TQPainter painter( &printer ); + TQPaintDeviceMetrics metric( &printer ); + TQRect body( 0, 0, metric.width(), metric.height() ), view( body ); + //TQString txt = m_logview->text(); + TQString txt = m_log; + + txt.replace( '\n', "
" ); + txt.prepend( "

" + i18n( "KDEPrint Fax Tool Log" ) + "

" ); + + kdDebug() << "Log: " << txt << endl; + TQSimpleRichText richText( txt, m_logview->font() ); + + richText.setWidth( &painter, body.width() ); + do + { + richText.draw( &painter, body.left(), body.top(), view, m_logview->tqcolorGroup() ); + view.moveBy( 0, body.height() ); + painter.translate( 0, -body.height() ); + if ( view.top() >= richText.height() ) + break; + printer.newPage(); + } while ( true ); + } + } +} + +void FaxCtrl::slotSaveLog() +{ + if ( m_logview ) + { + TQString filename = KFileDialog::getSaveFileName( TQString::null, TQString::null, m_logview ); + if ( !filename.isEmpty() ) + { + TQFile f( filename ); + if ( f.open( IO_WriteOnly ) ) + { + TQTextStream t( &f ); + t << i18n( "KDEPrint Fax Tool Log" ) << endl; + t << m_logview->text() << endl; + f.close(); + } + else + KMessageBox::error( m_logview, i18n( "Cannot open file for writing." ) ); + } + } +} + +#include "faxctrl.moc" diff --git a/tdeprint/tdeprintfax/faxctrl.h b/tdeprint/tdeprintfax/faxctrl.h new file mode 100644 index 000000000..a7e16a850 --- /dev/null +++ b/tdeprint/tdeprintfax/faxctrl.h @@ -0,0 +1,73 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef FAXCTRL_H +#define FAXCTRL_H + +#include +#include +#include + +#include "tdeprintfax.h" + +class KProcess; +class TQTextEdit; + +class FaxCtrl : public TQObject +{ + Q_OBJECT +public: + FaxCtrl(TQWidget *parent = 0, const char *name = 0); + ~FaxCtrl(); + + bool send(KdeprintFax *f); + bool abort(); + void viewLog(TQWidget *parent = 0); + TQString faxSystem(); + TQString faxCommand(); + +signals: + void message(const TQString&); + void faxSent(bool); + +protected slots: + void slotReceivedStdout(KProcess*, char*, int); + void slotProcessExited(KProcess*); + void cleanTempFiles(); + void slotClearLog(); + void slotCloseLog(); + void slotPrintLog(); + void slotSaveLog(); + +protected: + void filter(); + void sendFax(); + void addLog(const TQString&, bool = false); + void addLogTitle( const TQString& ); + +private: + KProcess *m_process; + TQString m_log, m_command; + TQStringList m_files, m_filteredfiles, m_tempfiles; + TQTextEdit *m_logview; + KdeprintFax::FaxItemList m_faxlist; +}; + +#endif diff --git a/tdeprint/tdeprintfax/faxfilters b/tdeprint/tdeprintfax/faxfilters new file mode 100644 index 000000000..73e96a14e --- /dev/null +++ b/tdeprint/tdeprintfax/faxfilters @@ -0,0 +1,3 @@ +text/* enscript -M %psu -E -p %out %in +image/* imagetops -gray -noturn %in > %out +*/* cat %in > %out diff --git a/tdeprint/tdeprintfax/filterdlg.cpp b/tdeprint/tdeprintfax/filterdlg.cpp new file mode 100644 index 000000000..0324863bc --- /dev/null +++ b/tdeprint/tdeprintfax/filterdlg.cpp @@ -0,0 +1,72 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "filterdlg.h" +#include "filterdlg.moc" + +#include +#include +#include + +#include + +FilterDlg::FilterDlg(TQWidget *parent, const char *name) +: KDialogBase(parent, name, true, i18n("Filter Parameters"), Ok|Cancel, Ok) +{ + TQWidget *w = new TQWidget(this); + + m_mime = new TQLineEdit(w); + m_cmd = new TQLineEdit(w); + TQLabel *m_mimelabel = new TQLabel(i18n("MIME type:"), w); + TQLabel *m_cmdlabel = new TQLabel(i18n("Command:"), w); + + TQGridLayout *l0 = new TQGridLayout(w, 2, 2, 10, 5); + l0->setColStretch(1, 1); + l0->addWidget(m_mimelabel, 0, 0); + l0->addWidget(m_cmdlabel, 1, 0); + l0->addWidget(m_mime, 0, 1); + l0->addWidget(m_cmd, 1, 1); + + setMainWidget(w); + m_mime->setFocus(); + resize(300, 100); + connect(m_mime, TQT_SIGNAL(textChanged ( const TQString & )),this, TQT_SLOT(slotTextFilterChanged())); + connect(m_cmd, TQT_SIGNAL(textChanged ( const TQString & )),this, TQT_SLOT(slotTextFilterChanged())); + slotTextFilterChanged(); +} + +void FilterDlg::slotTextFilterChanged( ) +{ + enableButtonOK(!m_mime->text().isEmpty() && !m_cmd->text().isEmpty()); +} + +bool FilterDlg::doIt(TQWidget *parent, TQString *mime, TQString *cmd) +{ + FilterDlg dlg(parent); + if (mime) dlg.m_mime->setText(*mime); + if (cmd) dlg.m_cmd->setText(*cmd); + if (dlg.exec()) + { + if (mime) *mime = dlg.m_mime->text(); + if (cmd) *cmd = dlg.m_cmd->text(); + return true; + } + return false; +} diff --git a/tdeprint/tdeprintfax/filterdlg.h b/tdeprint/tdeprintfax/filterdlg.h new file mode 100644 index 000000000..ab4fd0406 --- /dev/null +++ b/tdeprint/tdeprintfax/filterdlg.h @@ -0,0 +1,41 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef FILTERDLG_H +#define FILTERDLG_H + +#include + +class TQLineEdit; + +class FilterDlg : public KDialogBase +{ + Q_OBJECT +public: + FilterDlg(TQWidget *parent = 0, const char *name = 0); + + static bool doIt(TQWidget *parent = 0, TQString* mime = 0, TQString *cmd = 0); +protected slots: + void slotTextFilterChanged(); +private: + TQLineEdit *m_mime, *m_cmd; +}; + +#endif diff --git a/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png new file mode 100644 index 000000000..ad29adba7 Binary files /dev/null and b/tdeprint/tdeprintfax/hi128-app-tdeprintfax.png differ diff --git a/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png new file mode 100644 index 000000000..bb676f8b7 Binary files /dev/null and b/tdeprint/tdeprintfax/hi16-app-tdeprintfax.png differ diff --git a/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png new file mode 100644 index 000000000..90fc64b0b Binary files /dev/null and b/tdeprint/tdeprintfax/hi22-app-tdeprintfax.png differ diff --git a/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png new file mode 100644 index 000000000..7330eb41f Binary files /dev/null and b/tdeprint/tdeprintfax/hi32-app-tdeprintfax.png differ diff --git a/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png new file mode 100644 index 000000000..3f58c3695 Binary files /dev/null and b/tdeprint/tdeprintfax/hi48-app-tdeprintfax.png differ diff --git a/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png b/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png new file mode 100644 index 000000000..47e156d5f Binary files /dev/null and b/tdeprint/tdeprintfax/hi64-app-tdeprintfax.png differ diff --git a/tdeprint/tdeprintfax/hisc-app-tdeprintfax.svgz b/tdeprint/tdeprintfax/hisc-app-tdeprintfax.svgz new file mode 100644 index 000000000..f46fd4401 Binary files /dev/null and b/tdeprint/tdeprintfax/hisc-app-tdeprintfax.svgz differ diff --git a/tdeprint/tdeprintfax/main.cpp b/tdeprint/tdeprintfax/main.cpp new file mode 100644 index 000000000..4fe22a3b6 --- /dev/null +++ b/tdeprint/tdeprintfax/main.cpp @@ -0,0 +1,78 @@ +/* + * tdeprintfax - a interface to fax-packages + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tdeprintfax.h" + +#include +#include +#include +#include +#include + +TQString debugFlag; +int oneShotFlag = false; + +static const char description[] = + I18N_NOOP("A small fax utility to be used with tdeprint."); +// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE + + +static KCmdLineOptions options[] = +{ + { "phone ", I18N_NOOP("Phone number to fax to"), 0 }, + { "immediate", I18N_NOOP("Send fax immediately"), 0 }, + { "batch", I18N_NOOP("Exit after sending"), 0 }, + { "+[file]", I18N_NOOP("File to fax (added to the file list)"), 0 }, + KCmdLineLastOption + // INSERT YOUR COMMANDLINE OPTIONS HERE +}; + +int main(int argc, char *argv[]) +{ + + KAboutData aboutData( "tdeprintfax", I18N_NOOP("KdeprintFax"), + "1.0", description, KAboutData::License_GPL, + "(c), 2001 Michael Goffioul", 0, "http://printing.kde.org"); + aboutData.addAuthor("Michael Goffioul",0, "tdeprint@swing.be"); + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. + KApplication::addCmdLineOptions(); + + KApplication a; + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + KdeprintFax *w = new KdeprintFax; + a.setMainWidget(w); + w->show(); + for (int i=0;icount();i++) + w->addURL(args->url(i)); + + TQString phone = args->getOption( "phone" ); + if( !phone.isEmpty() ) { + w->setPhone( phone ); + } + + if( args->isSet( "immediate" ) ) { + w->sendFax( args->isSet( "batch" ) ); + } + + args->clear(); + return a.exec(); +} diff --git a/tdeprint/tdeprintfax/tdeprintfax.cpp b/tdeprint/tdeprintfax/tdeprintfax.cpp new file mode 100644 index 000000000..24ad58a0e --- /dev/null +++ b/tdeprint/tdeprintfax/tdeprintfax.cpp @@ -0,0 +1,607 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tdeprintfax.h" +#include "faxab.h" +#include "faxctrl.h" +#include "configdlg.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +KdeprintFax::KdeprintFax(TQWidget *parent, const char *name) +: KMainWindow(parent, name) +{ + m_faxctrl = new FaxCtrl(this); + m_quitAfterSend = false; + connect(m_faxctrl, TQT_SIGNAL(message(const TQString&)), TQT_SLOT(slotMessage(const TQString&))); + connect(m_faxctrl, TQT_SIGNAL(faxSent(bool)), TQT_SLOT(slotFaxSent(bool))); + + TQWidget *mainw = new TQWidget(this); + setCentralWidget(mainw); + m_files = new KListBox(mainw); + connect( m_files, TQT_SIGNAL( currentChanged( TQListBoxItem* ) ), TQT_SLOT( slotCurrentChanged() ) ); + m_upbtn = new KPushButton( mainw ); + m_upbtn->setIconSet( SmallIconSet( "up" ) ); + TQToolTip::add( m_upbtn, i18n( "Move up" ) ); + connect( m_upbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotMoveUp() ) ); + m_upbtn->setEnabled( false ); + m_downbtn = new KPushButton( mainw ); + m_downbtn->setIconSet( SmallIconSet( "down" ) ); + TQToolTip::add( m_downbtn, i18n( "Move down" ) ); + connect( m_downbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotMoveDown() ) ); + m_downbtn->setEnabled( false ); + TQLabel *m_filelabel = new TQLabel(i18n("F&iles:"), mainw); + m_filelabel->setBuddy(m_files); + KSeparator*m_line = new KSeparator( KSeparator::HLine, mainw); + KSeparator *m_line2 = new KSeparator( KSeparator::HLine, mainw ); + m_numbers = new KListView( mainw ); + m_numbers->addColumn( i18n("Fax Number") ); + m_numbers->addColumn( i18n("Name") ); + m_numbers->addColumn( i18n("Enterprise") ); + m_numbers->header()->setStretchEnabled( true ); + m_numbers->setSelectionMode( TQListView::Extended ); + connect( m_numbers, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotFaxSelectionChanged() ) ); + connect( m_numbers, TQT_SIGNAL( executed( TQListViewItem* ) ), TQT_SLOT( slotFaxExecuted( TQListViewItem* ) ) ); + m_newbtn = new KPushButton( mainw ); + m_newbtn->setPixmap( SmallIcon( "edit" ) ); + TQToolTip::add( m_newbtn, i18n( "Add fax number" ) ); + connect( m_newbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotFaxAdd() ) ); + m_abbtn = new KPushButton( mainw ); + m_abbtn->setPixmap( SmallIcon( "kaddressbook" ) ); + TQToolTip::add( m_abbtn, i18n( "Add fax number from addressbook" ) ); + connect( m_abbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotKab() ) ); + m_delbtn = new KPushButton( mainw ); + m_delbtn->setIconSet( SmallIconSet( "edittrash" ) ); + TQToolTip::add( m_delbtn, i18n( "Remove fax number" ) ); + m_delbtn->setEnabled( false ); + connect( m_delbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotFaxRemove() ) ); + TQLabel *m_commentlabel = new TQLabel(i18n("&Comment:"), mainw); + KSystemTray *m_tray = new KSystemTray(this); + m_tray->setPixmap(SmallIcon("tdeprintfax")); + m_tray->show(); + m_comment = new TQTextEdit(mainw); +// I don't understand why anyone would want to turn off word wrap. It makes +// the text hard to read and write. It provides no benefit. Therefore, +// I commented out the next line. [Ray Lischner] +// m_comment->setWordWrap(TQTextEdit::NoWrap); + m_comment->setLineWidth(1); + m_commentlabel->setBuddy(m_comment); + TQLabel *m_timelabel = new TQLabel(i18n("Sched&ule:"), mainw); + m_timecombo = new TQComboBox(mainw); + m_timecombo->insertItem(i18n("Now")); + m_timecombo->insertItem(i18n("At Specified Time")); + m_timecombo->setCurrentItem(0); + m_timelabel->setBuddy(m_timecombo); + m_time = new TQTimeEdit(mainw); + m_time->setTime(TQTime::currentTime()); + m_time->setEnabled(false); + connect(m_timecombo, TQT_SIGNAL(activated(int)), TQT_SLOT(slotTimeComboActivated(int))); + m_cover = new TQCheckBox(i18n("Send Co&ver Sheet"), mainw); + connect(m_cover, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotCoverToggled(bool))); + m_subject = new TQLineEdit( mainw ); + TQLabel *m_subjectlabel = new TQLabel( i18n( "Su&bject:" ), mainw ); + m_subjectlabel->setBuddy( m_subject ); + + TQGridLayout *l0 = new TQGridLayout(mainw, 10, 2, 10, 5); + l0->setColStretch(1,1); + l0->addWidget(m_filelabel, 0, 0, Qt::AlignLeft|Qt::AlignTop); + TQHBoxLayout *l2 = new TQHBoxLayout( 0, 0, 10 ); + TQVBoxLayout *l3 = new TQVBoxLayout( 0, 0, 5 ); + l0->addLayout( l2, 0, 1 ); + l2->addWidget( m_files ); + l2->addLayout( l3 ); + //l3->addStretch( 1 ); + l3->addWidget( m_upbtn ); + l3->addWidget( m_downbtn ); + l3->addStretch( 1 ); + l0->addMultiCellWidget(m_line, 1, 1, 0, 1); + l0->addRowSpacing(1, 10); + TQHBoxLayout *l5 = new TQHBoxLayout( 0, 0, 10 ); + TQVBoxLayout *l6 = new TQVBoxLayout( 0, 0, 5 ); + l0->addMultiCellLayout( l5, 2, 4, 0, 1 ); + l5->addWidget( m_numbers ); + l5->addLayout( l6 ); + l6->addWidget( m_newbtn ); + l6->addWidget( m_delbtn ); + l6->addWidget( m_abbtn ); + l6->addStretch( 1 ); + l0->addMultiCellWidget( m_line2, 5, 5, 0, 1 ); + l0->addRowSpacing( 5, 10 ); + l0->addWidget( m_cover, 6, 1 ); + l0->addWidget( m_subjectlabel, 7, 0 ); + l0->addWidget( m_subject, 7, 1 ); + l0->addWidget(m_commentlabel, 8, 0, Qt::AlignTop|Qt::AlignLeft); + l0->addWidget(m_comment, 8, 1); + l0->addWidget(m_timelabel, 9, 0); + TQHBoxLayout *l1 = new TQHBoxLayout(0, 0, 5); + l0->addLayout(l1, 9, 1); + l1->addWidget(m_timecombo, 1); + l1->addWidget(m_time, 0); + + m_msglabel = new KSqueezedTextLabel(statusBar()); + statusBar()->addWidget(m_msglabel, 1); + statusBar()->insertFixedItem(i18n("Processing..."), 1); + statusBar()->changeItem(i18n("Idle"), 1); + statusBar()->insertFixedItem("hylafax/efax", 2); + initActions(); + setAcceptDrops(true); + setCaption(i18n("Send to Fax")); + updateState(); + + resize(550,500); + TQWidget *d = TQT_TQWIDGET(kapp->desktop()); + move((d->width()-width())/2, (d->height()-height())/2); +} + +KdeprintFax::~KdeprintFax() +{ +} + +void KdeprintFax::initActions() +{ + new KAction(i18n("&Add File..."), "filenew", Qt::Key_Insert, TQT_TQOBJECT(this), TQT_SLOT(slotAdd()), actionCollection(), "file_add"); + new KAction(i18n("&Remove File"), "remove", Qt::Key_Delete, TQT_TQOBJECT(this), TQT_SLOT(slotRemove()), actionCollection(), "file_remove"); + new KAction(i18n("&Send Fax"), "connect_established", Qt::Key_Return, TQT_TQOBJECT(this), TQT_SLOT(slotFax()), actionCollection(), "fax_send"); + new KAction(i18n("A&bort"), "stop", Qt::Key_Escape, TQT_TQOBJECT(this), TQT_SLOT(slotAbort()), actionCollection(), "fax_stop"); + new KAction(i18n("A&ddress Book"), "kaddressbook", Qt::CTRL+Qt::Key_A, TQT_TQOBJECT(this), TQT_SLOT(slotKab()), actionCollection(), "fax_ab"); + new KAction(i18n("V&iew Log"), "contents", Qt::CTRL+Qt::Key_L, TQT_TQOBJECT(this), TQT_SLOT(slotViewLog()), actionCollection(), "fax_log"); + new KAction(i18n("Vi&ew File"), "filefind", Qt::CTRL+Qt::Key_O, TQT_TQOBJECT(this), TQT_SLOT(slotView()), actionCollection(), "file_view"); + new KAction( i18n( "&New Fax Recipient..." ), "edit", Qt::CTRL+Qt::Key_N, TQT_TQOBJECT(this), TQT_SLOT( slotFaxAdd() ), actionCollection(), "fax_add" ); + + KStdAction::quit(TQT_TQOBJECT(this), TQT_SLOT(slotQuit()), actionCollection()); + setStandardToolBarMenuEnabled(true); + KStdAction::showMenubar(TQT_TQOBJECT(this), TQT_SLOT(slotToggleMenuBar()), actionCollection()); + KStdAction::preferences(TQT_TQOBJECT(this), TQT_SLOT(slotConfigure()), actionCollection()); + KStdAction::keyBindings(guiFactory(), TQT_SLOT(configureShortcuts()), +actionCollection()); + actionCollection()->action("fax_stop")->setEnabled(false); + connect(actionCollection()->action("file_remove"), TQT_SIGNAL(enabled(bool)), actionCollection()->action("file_view"), TQT_SLOT(setEnabled(bool))); + actionCollection()->action("file_remove")->setEnabled(false); + + createGUI(); +} + +void KdeprintFax::slotToggleMenuBar() +{ + if (menuBar()->isVisible()) menuBar()->hide(); + else menuBar()->show(); +} + +void KdeprintFax::slotAdd() +{ + KURL url = KFileDialog::getOpenURL(TQString::null, TQString::null, this); + if (!url.isEmpty()) + addURL(url); +} + +void KdeprintFax::slotRemove() +{ + if (m_files->currentItem() >= 0) + m_files->removeItem(m_files->currentItem()); + if (m_files->count() == 0) + actionCollection()->action("file_remove")->setEnabled(false); +} + +void KdeprintFax::slotView() +{ + if (m_files->currentItem() >= 0) + { + new KRun(KURL( m_files->currentText() )); + } +} + +void KdeprintFax::slotFax() +{ + if (m_files->count() == 0) + KMessageBox::error(this, i18n("No file to fax.")); + else if ( m_numbers->childCount() == 0 ) + KMessageBox::error(this, i18n("No fax number specified.")); + else if (m_faxctrl->send(this)) + { + actionCollection()->action("fax_send")->setEnabled(false); + actionCollection()->action("fax_stop")->setEnabled(true); + statusBar()->changeItem(i18n("Processing..."), 1); + } + else + KMessageBox::error(this, i18n("Unable to start Fax process.")); +} + +void KdeprintFax::slotAbort() +{ + if (!m_faxctrl->abort()) + KMessageBox::error(this, i18n("Unable to stop Fax process.")); +} + +void KdeprintFax::slotKab() +{ + TQStringList number, name, enterprise; + if (FaxAB::getEntry(number, name, enterprise, this)) + { + for ( unsigned int i = 0; iinsertItem(KMimeType::pixmapForURL(url,0,KIcon::Small),target); + actionCollection()->action("file_remove")->setEnabled(true); + slotCurrentChanged(); + } + else + KMessageBox::error(this, i18n("Unable to retrieve %1.").arg(url.prettyURL())); +} + +void KdeprintFax::setPhone(TQString phone) +{ + TQString name, enterprise; + FaxAB::getEntryByNumber(phone, name, enterprise); + new TQListViewItem( m_numbers, phone, name, enterprise ); +} + +void KdeprintFax::sendFax( bool quitAfterSend ) +{ + slotFax(); + m_quitAfterSend = quitAfterSend; +} + +void KdeprintFax::dragEnterEvent(TQDragEnterEvent *e) +{ + e->accept(KURLDrag::canDecode(e)); +} + +void KdeprintFax::dropEvent(TQDropEvent *e) +{ + KURL::List l; + if (KURLDrag::decode(e, l)) + { + for (KURL::List::ConstIterator it = l.begin(); it != l.end(); ++it) + addURL(*it); + } +} + +TQStringList KdeprintFax::files() +{ + TQStringList l; + for (uint i=0; icount(); i++) + l.append(m_files->text(i)); + return l; +} + + +int KdeprintFax::faxCount() const +{ + return m_numbers->childCount(); +} + +/* +TQListViewItem* KdeprintFax::faxItem( int i ) const +{ + TQListViewItem *item = m_numbers->firstChild(); + while ( i && item && item->nextSibling() ) + { + item = item->nextSibling(); + i--; + } + if ( i || !item ) + kdError() << "KdeprintFax::faxItem(" << i << ") => fax item index out of bound" << endl; + return item; +} + +TQString KdeprintFax::number( int i ) const +{ + TQListViewItem *item = faxItem( i ); + return ( item ? item->text( 0 ) : TQString::null ); +} + +TQString KdeprintFax::name( int i ) const +{ + TQListViewItem *item = faxItem( i ); + return ( item ? item->text( 1 ) : TQString::null ); +} + +TQString KdeprintFax::enterprise( int i ) const +{ + TQListViewItem *item = faxItem( i ); + return ( item ? item->text( 2 ) : TQString::null ); +} +*/ + +KdeprintFax::FaxItemList KdeprintFax::faxList() const +{ + FaxItemList list; + TQListViewItemIterator it( m_numbers ); + while ( it.current() ) + { + FaxItem item; + item.number = it.current()->text( 0 ); + item.name = it.current()->text( 1 ); + item.enterprise = it.current()->text( 2 ); + list << item; + ++it; + } + return list; +} + +TQString KdeprintFax::comment() const +{ + return m_comment->text(); +} + +bool KdeprintFax::cover() const +{ + return m_cover->isChecked(); +} + +TQString KdeprintFax::subject() const +{ + return m_subject->text(); +} + +void KdeprintFax::slotMessage(const TQString& msg) +{ + m_msglabel->setText(msg); +} + +void KdeprintFax::slotFaxSent(bool status) +{ + actionCollection()->action("fax_send")->setEnabled(true); + actionCollection()->action("fax_stop")->setEnabled(false); + statusBar()->changeItem(i18n("Idle"), 1); + + if( m_quitAfterSend ) { + slotQuit(); + } + else { + if (!status) + KMessageBox::error(this, i18n("Fax error: see log message for more information.")); + slotMessage(TQString::null); + } +} + +void KdeprintFax::slotViewLog() +{ + m_faxctrl->viewLog(this); +} + +void KdeprintFax::slotConfigure() +{ + if (ConfigDlg::configure(this)) + updateState(); +} + +void KdeprintFax::updateState() +{ + TQString cmd = m_faxctrl->faxCommand(); + m_cover->setEnabled(cmd.find("%cover") != -1); + if ( !m_cover->isEnabled() ) + m_cover->setChecked(false); + m_comment->setEnabled(cmd.find("%comment") != -1 && m_cover->isChecked()); + //m_comment->setPaper(m_comment->isEnabled() ? tqcolorGroup().brush(TQColorGroup::Base) : tqcolorGroup().brush(TQColorGroup::Background)); + if (!m_comment->isEnabled()) + { + m_comment->setText(""); + m_comment->setPaper( tqcolorGroup().background() ); + } + else + m_comment->setPaper( tqcolorGroup().base() ); + /* + m_enterprise->setEnabled(cmd.find("%enterprise") != -1); + if (!m_enterprise->isEnabled()) + m_enterprise->setText(""); + */ + if (cmd.find("%time") == -1) + { + m_timecombo->setCurrentItem(0); + m_timecombo->setEnabled(false); + slotTimeComboActivated(0); + } + else + m_timecombo->setEnabled( true ); + /*m_name->setEnabled( cmd.find( "%name" ) != -1 );*/ + m_subject->setEnabled( cmd.find( "%subject" ) != -1 && m_cover->isChecked() ); + statusBar()->changeItem(m_faxctrl->faxSystem(), 2); +} + +void KdeprintFax::slotQuit() +{ + close(true); +} + +void KdeprintFax::slotTimeComboActivated(int ID) +{ + m_time->setEnabled(ID == 1); +} + +TQString KdeprintFax::time() const +{ + if (!m_time->isEnabled()) + return TQString::null; + return m_time->time().toString("hh:mm"); +} + +void KdeprintFax::slotMoveUp() +{ + int index = m_files->currentItem(); + if ( index > 0 ) + { + TQListBoxItem *item = m_files->item( index ); + m_files->takeItem( item ); + m_files->insertItem( item, index-1 ); + m_files->setCurrentItem( index-1 ); + } +} + +void KdeprintFax::slotMoveDown() +{ + int index = m_files->currentItem(); + if ( index >= 0 && index < ( int )m_files->count()-1 ) + { + TQListBoxItem *item = m_files->item( index ); + m_files->takeItem( item ); + m_files->insertItem( item, index+1 ); + m_files->setCurrentItem( index+1 ); + } +} + +/** The user or program toggled the "Cover Sheet" check box. + * Update the state of the other controls to reflect the + * new status. + */ +void KdeprintFax::slotCoverToggled(bool) +{ + updateState(); +} + +void KdeprintFax::slotCurrentChanged() +{ + int index = m_files->currentItem(); + m_upbtn->setEnabled( index > 0 ); + m_downbtn->setEnabled( index >=0 && index < ( int )m_files->count()-1 ); +} + +void KdeprintFax::slotFaxSelectionChanged() +{ + TQListViewItemIterator it( m_numbers, TQListViewItemIterator::Selected ); + m_delbtn->setEnabled( it.current() != NULL ); +} + +void KdeprintFax::slotFaxRemove() +{ + TQListViewItemIterator it( m_numbers, TQListViewItemIterator::Selected ); + TQPtrList items; + items.setAutoDelete( true ); + while ( it.current() ) + { + items.append( it.current() ); + ++it; + } + items.clear(); + /* force this slot to be called, to update buttons state */ + slotFaxSelectionChanged(); +} + +void KdeprintFax::slotFaxAdd() +{ + TQString number, name, enterprise; + if ( manualFaxDialog( number, name, enterprise ) ) + { + new TQListViewItem( m_numbers, number, name, enterprise ); + } +} + +void KdeprintFax::slotFaxExecuted( TQListViewItem *item ) +{ + if ( item ) + { + TQString number = item->text( 0 ), name = item->text( 1 ), enterprise = item->text( 2 ); + if ( manualFaxDialog( number, name, enterprise ) ) + { + item->setText( 0, number ); + item->setText( 1, name ); + item->setText( 2, enterprise ); + } + } +} + +bool KdeprintFax::manualFaxDialog( TQString& number, TQString& name, TQString& enterprise ) +{ + /* dialog construction */ + KDialogBase dlg( this, "manualFaxDialog", true, i18n( "Fax Number" ), KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true ); + TQWidget *mainw = new TQWidget( &dlg ); + TQLabel *lab0 = new TQLabel( i18n( "Enter recipient fax properties." ), mainw ); + TQLabel *lab1 = new TQLabel( i18n( "&Number:" ), mainw ); + TQLabel *lab2 = new TQLabel( i18n( "N&ame:" ), mainw ); + TQLabel *lab3 = new TQLabel( i18n( "&Enterprise:" ), mainw ); + TQLineEdit *edit_number = new TQLineEdit( number, mainw ); + TQLineEdit *edit_name = new TQLineEdit( name, mainw ); + TQLineEdit *edit_enterprise = new TQLineEdit( enterprise, mainw ); + lab1->setBuddy( edit_number ); + lab2->setBuddy( edit_name ); + lab3->setBuddy( edit_enterprise ); + TQGridLayout *l0 = new TQGridLayout( mainw, 5, 2, 0, 5 ); + l0->setColStretch( 1, 1 ); + l0->addMultiCellWidget( lab0, 0, 0, 0, 1 ); + l0->setRowSpacing( 1, 10 ); + l0->addWidget( lab1, 2, 0 ); + l0->addWidget( lab2, 3, 0 ); + l0->addWidget( lab3, 4, 0 ); + l0->addWidget( edit_number, 2, 1 ); + l0->addWidget( edit_name, 3, 1 ); + l0->addWidget( edit_enterprise, 4, 1 ); + dlg.setMainWidget( mainw ); + dlg.resize( 300, 10 ); + + /* dialog execution */ + while ( 1 ) + if ( dlg.exec() ) + { + if ( edit_number->text().isEmpty() ) + { + KMessageBox::error( this, i18n( "Invalid fax number." ) ); + } + else + { + number = edit_number->text(); + name = edit_name->text(); + enterprise = edit_enterprise->text(); + return true; + } + } + else + return false; +} + +#include "tdeprintfax.moc" diff --git a/tdeprint/tdeprintfax/tdeprintfax.desktop b/tdeprint/tdeprintfax/tdeprintfax.desktop new file mode 100644 index 000000000..dc9c90bab --- /dev/null +++ b/tdeprint/tdeprintfax/tdeprintfax.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Name=KdeprintFax +Name[cy]=KdeargraffuFfacs +Name[eo]=Presfakso +Name[hi]=केडीई-प्रिंट-फ़ैक्स +Name[lo]=ອິນເຕີເນັດ +Name[ne]=Kdeprint फ्याक्स +Name[nso]=Fax ya kgatiso ya kde +Name[pa]=Kde ਫੈਕਸ ਛਾਪਣ +Name[rw]=Kde-gucapaFagisi +Name[sv]=KDE:s skriv ut fax +Name[ta]=Kdeஅச்சுபாக்ஸ் +Name[th]=KDEprintFax +Name[vi]=In và Fax của KDE +GenericName=Fax Utility +GenericName[af]=Faks Program +GenericName[ar]=أداة الفاكس +GenericName[be]=Праграма працы з факсам +GenericName[bg]=Програма за факс +GenericName[bn]=ফ্যাক্স টুল +GenericName[br]=Maveg ar faks +GenericName[bs]=Alat za faxove +GenericName[ca]=Utilitat de fax +GenericName[cs]=Faxový nástroj +GenericName[csb]=Faks +GenericName[cy]=Cyfleuster Ffacs +GenericName[da]=FAX-værktøj +GenericName[de]=Fax-Programm +GenericName[el]=Εργαλείο φαξ +GenericName[eo]=Faxutilaĵo +GenericName[es]=Aplicación de fax +GenericName[et]=Faksimise utiliit +GenericName[eu]=Fax tresna +GenericName[fa]=برنامۀ سودمند دورنگار +GenericName[fi]=Faksityökalu +GenericName[fr]=Outil de fax +GenericName[fy]=Faksprogramma +GenericName[ga]=Uirlis Facs +GenericName[gl]=Utilidade de Fax +GenericName[he]=כלי פקסים +GenericName[hi]=फ़ैक्स यूटिलिटी +GenericName[hr]=Alat za fakseve +GenericName[hu]=Faxprogram +GenericName[is]=Faxtól +GenericName[it]=Fax +GenericName[ja]=ファクスユーティリティ +GenericName[ka]=ფაქსთან სამუშაო უტილიტა +GenericName[kk]=Факс утилитасы +GenericName[km]=ឧបករណ៍​ទូរសារ +GenericName[lo]=ເຄື່ອງມືໂທລະສານ +GenericName[lt]=Pagalbinė fakso programėlė +GenericName[lv]=Faksa utilīta +GenericName[mk]=Алатка за факс +GenericName[mn]=Fax-програм +GenericName[ms]=Kemudahan Faks +GenericName[mt]=Għodda tal-faks +GenericName[nb]=Faksverktøy +GenericName[nds]=Faxwarktüüch +GenericName[ne]=फ्याक्स युटिलिटी +GenericName[nl]=Faxprogramma +GenericName[nn]=Faksverktøy +GenericName[nso]=Sebereka sa Fax +GenericName[pa]=ਫੈਕਸ ਸਹੂਲਤ +GenericName[pl]=Faks +GenericName[pt]=Utilitário de Fax +GenericName[pt_BR]=Utilitário de Fax +GenericName[ro]=Utilitar pentru FAX +GenericName[ru]=Утилита работы с факсами +GenericName[rw]=Nkemurabibazo Fagisi +GenericName[se]=Fáksenreaidu +GenericName[sk]=Faxový nástroj +GenericName[sl]=Pripomoček za faks +GenericName[sr]=Факс програм +GenericName[sr@Latn]=Faks program +GenericName[sv]=Faxverktyg +GenericName[ta]=தொலைநகலி கருவி +GenericName[tg]=Обзори дурнамо +GenericName[th]=เครื่องมือโทรสาร +GenericName[tr]=Faks Görüntüleyici +GenericName[tt]=Faks Qoralı +GenericName[uk]=Утиліта факсу +GenericName[uz]=Faks vositasi +GenericName[uz@cyrillic]=Факс воситаси +GenericName[ven]=Tshishumiswa tsha Fax +GenericName[vi]=Các tiện ích Fax +GenericName[wa]=Usteye di facs +GenericName[xh]=Uncedo lwe Fax +GenericName[zh_CN]=传真工具 +GenericName[zh_TW]=傳真工具 +GenericName[zu]=Isisebenzi se-Fax + +Type=Application +Exec=tdeprintfax -caption "%c" %i %m %u +Icon=tdeprintfax +Terminal=false +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;Utility;X-KDE-Utilities-Peripherals; diff --git a/tdeprint/tdeprintfax/tdeprintfax.h b/tdeprint/tdeprintfax/tdeprintfax.h new file mode 100644 index 000000000..fc1a02f7f --- /dev/null +++ b/tdeprint/tdeprintfax/tdeprintfax.h @@ -0,0 +1,115 @@ +/* + * tdeprintfax - a small fax utility + * Copyright (C) 2001 Michael Goffioul + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef KDEPRINTFAX_H +#define KDEPRINTFAX_H + +#include +#include + +class KListBox; +class KListView; +class TQLineEdit; +class TQTextEdit; +class FaxCtrl; +class TQCheckBox; +class TQLabel; +class TQTimeEdit; +class TQComboBox; +class TQPushButton; +class TQListViewItem; + +class KdeprintFax : public KMainWindow +{ + Q_OBJECT +public: + struct FaxItem + { + TQString number; + TQString name; + TQString enterprise; + }; + typedef TQValueList FaxItemList; + typedef TQValueList::ConstIterator FaxItemListIterator; + + KdeprintFax(TQWidget *parent = 0, const char *name = 0); + ~KdeprintFax(); + + void addURL(KURL url); + void setPhone(TQString phone); + void sendFax( bool quitAfterSend ); + TQStringList files(); + int faxCount() const; + //TQString number( int i = 0 ) const; + //TQString name( int i = 0 ) const; + //TQString enterprise( int i = 0 ) const; + FaxItemList faxList() const; + TQString comment() const; + TQString time() const; + TQString subject() const; + bool cover() const; + +protected slots: + void slotToggleMenuBar(); + void slotKab(); + void slotAdd(); + void slotRemove(); + void slotFax(); + void slotAbort(); + void slotMessage(const TQString&); + void slotFaxSent(bool); + void slotViewLog(); + void slotConfigure(); + void slotQuit(); + void slotView(); + void slotTimeComboActivated(int); + void slotMoveUp(); + void slotMoveDown(); + void slotCurrentChanged(); + void slotFaxSelectionChanged(); + void slotFaxRemove(); + void slotFaxAdd(); + void slotFaxExecuted( TQListViewItem* ); + void slotCoverToggled(bool toggle); + +protected: + void initActions(); + void dragEnterEvent(TQDragEnterEvent*); + void dropEvent(TQDropEvent*); + void updateState(); + bool manualFaxDialog( TQString& number, TQString& name, TQString& enterprise ); + //TQListViewItem* faxItem( int i = 0 ) const; + +private: + KListBox *m_files; + KListView *m_numbers; + TQLineEdit *m_subject; + TQTextEdit *m_comment; + FaxCtrl *m_faxctrl; + TQCheckBox *m_cover; + TQLabel *m_msglabel; + TQTimeEdit *m_time; + TQComboBox *m_timecombo; + TQPushButton *m_upbtn, *m_downbtn; + TQPushButton *m_newbtn, *m_abbtn, *m_delbtn; + bool m_quitAfterSend; +}; + +#endif diff --git a/tdeprint/tdeprintfax/tdeprintfaxui.rc b/tdeprint/tdeprintfax/tdeprintfaxui.rc new file mode 100644 index 000000000..ae233a6da --- /dev/null +++ b/tdeprint/tdeprintfax/tdeprintfaxui.rc @@ -0,0 +1,31 @@ + + + + &File + + + + + + Fa&x + + + + + + + + + + + + + + + + + + + + + diff --git a/tdesu/AUTHORS b/tdesu/AUTHORS new file mode 100644 index 000000000..5cabd8892 --- /dev/null +++ b/tdesu/AUTHORS @@ -0,0 +1,2 @@ +Pietro Iglio +Geert Jansen diff --git a/tdesu/CMakeLists.txt b/tdesu/CMakeLists.txt new file mode 100644 index 000000000..c1fef3ba8 --- /dev/null +++ b/tdesu/CMakeLists.txt @@ -0,0 +1,53 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include( CheckCSourceCompiles ) +include( CheckFunctionExists ) + +check_c_source_compiles( " + #define _GNU_SOURCE 1 + #include + int main(int argc, char *argv[]) { struct ucred red; return 0; } " + HAVE_STRUCT_UCRED ) + +check_c_source_runs( " + #include + #include + int main() { struct group *grp = getgrnam(\"nogroup\"); if(grp) return 0; return 1; }" + HAVE_NOGROUP ) + +if( HAVE_NOGROUP ) + set( nogroup nogroup ) +else() + check_c_source_runs(" + #include + #include + int main() { struct group *grp = getgrnam(\"nobody\"); if(grp) return 0; return 1; }" + HAVE_NOBODY ) + if( HAVE_NOBODY ) + set( nogroup nobody ) + else() + set( nogroup 65534 ) + endif() +endif() + +check_function_exists( getpeereid HAVE_GETPEEREID ) +check_include_file( "sys/select.h" HAVE_SYS_SELECT_H ) +check_include_file( "sys/wait.h" HAVE_SYS_WAIT_H ) + +if( WITH_SUDO_KDESU_BACKEND ) + set( DEFAULT_SUPER_USER_COMMAND sudo CACHE INTERNAL "" FORCE ) +else() + set( DEFAULT_SUPER_USER_COMMAND su CACHE INTERNAL "" FORCE ) +endif() + +add_subdirectory( tdesu ) +add_subdirectory( tdesud ) diff --git a/tdesu/ChangeLog b/tdesu/ChangeLog new file mode 100644 index 000000000..ad44b81a5 --- /dev/null +++ b/tdesu/ChangeLog @@ -0,0 +1,128 @@ +Wed, 26 Jan 00 Geert Jansen + + * Build sycoca for target process. + * Use standard debug facilities. + * Use KCmdLineArgs for argument parsing. + * Dialog updated to use KDialogBase. + +Sat, 18 Dec 99 Geert Jansen + + * Add DCOP authentication cookies. + * Fixed SMP install of tdesud. + +Sat, 23 Oct 99 Geert Jansen + + * STL -> QTL + * Use Qt's standard debug facilities. + +Tue, 28 Sep 99 Geert Jansen + + * Integrating tdesu into kdebase + +Sat, 25 Sep 99 Geert Jansen + + * BIG change: su to other user than root. This required a different way + to pass X cookies and stuff to the target process. See + common/tdesu_stub.c for more info. + * Fixed a bug in tdesud/lexer.cpp + +Thu, 23 Sep 99 Geert Jansen + + * Portability issues (root has a csh on FreeBSD ... is this just me?) + * The execution of processes is more efficient now: 2 processess instead + of 3 and 1 tempfile instead of 2. This way possible by setting the + XAUTHORITY env. var. to $HOME/.Xauthority instead of making a new one. + * Fixed a subtle bug in tdesud. tdesud catches SIGCHLD to handle child + exits but this is incompatible with "class RootProcess", which does a + waitpid() and depends on getting the exit code. + * Only connect to daemon when necessary. + +Wed, 22 Sep 99 Geert Jansen + + * Changed WaitSlave() to open slave instead of master pty. + * Added French translation (Pierre Dorgueil). + * Updated German translation (Ludwig Nussel). + * If su has terminal output, feed it back to the user. + +Wed, 8 Sep 99 Geert Jansen + + * If started as root, tdesu does not ask for a password anymore. + +Wed, 1 Sep 99 Geert Jansen + + * Deferred instantiation of kapp in tdesu.cpp. + * Finished porting to KDE2. + +Sun, 29 Aug 99 Geert Jansen + + * Fixed a bug that would let you run only one program with the daemon. + * Adapted debug.h macros. + +Tue, 24 Aug 99 Geert Jansen + + * Version 0.97 + * Fixed the RedHat problem! See the function WaitSlave() in + common/process.cpp. + * Fixed a few GUI bugs. + * Improved password security. Passwords are not kept until + the root program exits, they are deleted right away. + +Fri, 20 Aug 99 Geert Jansen + + * Fixed the glibc 2.1 compile problem (struct ucred test). + +Tue, 17 Aug 99 Geert Jansen + + * Fixed debug.h macros. + * Some more source cleanups. + +Mon, 16 Aug 99 Geert Jansen + + * Added "nogroup" check. + * Updated the HTML documentation. + * Updated the FAQ + +Sun, 15 Aug 99 Geert Jansen + + * KDE su now supports terminal mode apps! (-t switch, no password + keeping, output only) + +Sat, 14 Aug 99 Geert Jansen + + * Version 0.94 + * PTY handling is improved. It should work on more systems now. + (tested: Linux w & w/o UNIX98 PTY's w & w/o GLIBC 2.1, Solaris 7) + * Changed behaviour of "Keep Password" setting. + * Added -n option: don't offer the choice to keep password. + * Added -q, -d options: Quit the daemon and delete a key. + * Source cleanups. + * Various small bugfixes. + * Merged most of the KDE2 fixes from the CVS version. + * KDE su now waits for child programs to finish. Use 'command &' to + exit right away. + +Wed, 02 Jun 99 Geert Jansen + + * Version 0.91 + * The password is passed to su with a pty/tty pair. This should fix the + problems redhat users are experiencing. + * Some portability issues (a.o. AF_LOCAL -> AF_UNIX) + +Thu, 20 May 99 Geert Jansen + + * I am finally able to release 0.9. + +Fri, 09 Apr 99 Geert Jansen + + * Backport to KDE 1.1. Release as tdesu-0.9.tar.gz + +Mon, 22 Mar 99 Geert Jansen + + * Major changes: password keeping, control module, UI changes + * Version 0.9 + +Thu, 25 Feb 99 Geert Jansen + + * Merge with Pietro Iglio's code. + * Version 0.4 + diff --git a/tdesu/FAQ b/tdesu/FAQ new file mode 100644 index 000000000..b7d1499c7 --- /dev/null +++ b/tdesu/FAQ @@ -0,0 +1,46 @@ +Q: On my SuSE system, KDE su does not compile. I get an error that some Qt + header files cannot be found. +A: Install the package qtcompat. + +Q: Is KDE su safe? +A: No program is 100% safe. However, KDE su is not setuid root and it + handles the password you enter with great care so it should be safe + enough. + +Q: How safe is password keeping? +A: Enabling password keeping is less secure that disabling it. However, the + scheme tdesu uses to keep passwords prevents everyone (including you, the + user) from accessing them. Please see the HTML documentation for a full + description of this scheme. + +Q: Can I execute tty applications with tdesu? +A: No. TTY application will probably never be supported. Use the Unix su for + those. + NOTE: As of version 0.94, tty _output_ _only_ is supported with the `-t' + switch. This disables password keeping, though. + +Q: What systems does KDE su support? +A: Tested are: + * Linux 2.x (Redhat 6.x, Mandrake "Cooker", Debian potato, SuSE 6.1) + * Solaris 7 (intel) + * FreeBSD 3.2 (intel, w/ egcs 1.1.2) + It will probably work on more systems but I cannot test that. + +Q: Why doesn't it support every system that is out there. +A: KDE su needs to setup a pty/tty pair for communicating with `su'. This is + because some `su' implementations refuse to read a password from stdin if + that is not a tty. Setting up a pty/tty pair is not completely portable. + +Q: A good debug tip? +A: If tdesu doesn't fire up your application, use the '-t' switch. + This way, you'll get terminal output. Maybe there is something wrong with + the program you're trying to run. + +Q: I always get the warning: "Terminal output not available on non-terminal". +A: Maybe you're not logged on from a terminal but probably you're using + UNIX98 pty's without glibc 2.1 (Linux). The glibc 2.0 ttyname() function + incorrectly reports that UNIX98 slave pty's are no tty's. + +Q: Why not use DCOP for the communications with the daemon? +A: KDE su needs one instance of the daemon per host, instead of per desktop + session. diff --git a/tdesu/LICENSE.readme b/tdesu/LICENSE.readme new file mode 100644 index 000000000..234d3c1d8 --- /dev/null +++ b/tdesu/LICENSE.readme @@ -0,0 +1,125 @@ +tdesu - a KDE front end to su + +Copyright (c) 1998 by Pietro Iglio +Copyright (c) 1999,2000 by Geert Jansen + + The "Artistic License" + + Preamble + + The intent of this document is to state the conditions under which a + Package may be copied, such that the Copyright Holder maintains some + semblance of artistic control over the development of the package, + while giving the users of the package the right to use and + distribute the Package in a more-or-less customary fashion, plus the + right to make reasonable modifications. + + Definitions: + + * "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + * "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes of + the Copyright Holder. + + * "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + * "You" is you, if you're thinking about copying or distributing + this Package. + + * "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people + involved, and so on. (You will not be required to justify it to + the Copyright Holder, but only to the computing community at + large as a market that must bear the fee.) + + * "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + + 1. You may make and give away verbatim copies of the source form of + the Standard Version of this Package without restriction, provided + that you duplicate all of the original copyright notices and + associated disclaimers. + + 2. You may apply bug fixes, portability fixes and other + modifications derived from the Public Domain or from the Copyright + Holder. A Package modified in such a way shall still be considered + the Standard Version. + + 3. You may otherwise modify your copy of this Package in any way, + provided that you insert a prominent notice in each changed file + stating how and when you changed that file, and provided that you do + at least ONE of the following: + + a) place your modifications in the Public Domain or + otherwise make them Freely Available, such as by posting + said modifications to Usenet or an equivalent medium, or + placing the modifications on a major archive site such as + ftp.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation + or organization. + + c) rename any non-standard executables so the names do not + conflict with standard executables, which must also be + provided, and provide a separate manual page for each + non-standard executable that clearly documents how it + differs from the Standard Version. + + d) make other distribution arrangements with the Copyright + Holder. + + 4. You may distribute the programs of this Package in object code or + executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and + library files, together with instructions (in the manual + page or equivalent) on where to get the Standard Version. + + b) accompany the distribution with the machine-readable + source of the Package with your modifications. + + c) accompany any non-standard executables with their + corresponding Standard Version executables, giving the + non-standard executables non-standard names, and clearly + documenting the differences in manual pages (or + equivalent), together with instructions on where to get + the Standard Version. + + d) make other distribution arrangements with the Copyright + Holder. + + 5. You may charge a reasonable copying fee for any distribution of + this Package. You may charge any fee you choose for support of this + Package. You may not charge a fee for this Package itself. However, + you may distribute this Package in aggregate with other (possibly + commercial) programs as part of a larger (possibly commercial) + software distribution provided that you do not advertise this + Package as a product of your own. + + 6. The scripts and library files supplied as input to or produced as + output from the programs of this Package do not automatically fall + under the copyright of this Package, but belong to whomever + generated them, and may be sold commercially, and may be aggregated + with this Package. + + 7. C or perl subroutines supplied by you and linked into this + Package shall not be considered part of this Package. + + 8. The name of the Copyright Holder may not be used to endorse or + promote products derived from this software without specific prior + written permission. + + 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End + + diff --git a/tdesu/Makefile.am b/tdesu/Makefile.am new file mode 100644 index 000000000..a07d47884 --- /dev/null +++ b/tdesu/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = tdesu tdesud diff --git a/tdesu/README b/tdesu/README new file mode 100644 index 000000000..caa2e0d48 --- /dev/null +++ b/tdesu/README @@ -0,0 +1,34 @@ + + KDESU: A KDE front end for `su'. + +What is it? + + KDE su is a graphical front end to the Unix `su' utility. It allows you + to run programs as another user by entering their password. + It is _not_ a setuid root program, it runs completely unprivileged. + The system's program `su' is used for acquiring privileges. + +Usage: + + $ tdesu -h + $ tdesu -c konsole + +Please see the HTML documentation! + +Notes and Acknowledgements: + + Credits go to Pietro Iglio. He was the original author of KDE su + (until version 0.3). I was writing a similar program when I + found out that KDE su already existed. We decided to merge our + projects and that I would continue with it. + + If you find any bug of have a suggestion, feel free to contact me + at . + + +License: + + KDE su comes under the "Artistic License". See the file LICENSE.readme + for the exact terms. + +Alan Eldridge 2002/10/12 diff --git a/tdesu/TODO b/tdesu/TODO new file mode 100644 index 000000000..1be1aec4b --- /dev/null +++ b/tdesu/TODO @@ -0,0 +1,3 @@ +KDE su TODO list. + +* Currently nothing diff --git a/tdesu/configure.in.in b/tdesu/configure.in.in new file mode 100644 index 000000000..512825786 --- /dev/null +++ b/tdesu/configure.in.in @@ -0,0 +1,62 @@ +dnl Check for "struct ucred" +AC_MSG_CHECKING("struct ucred") +AC_TRY_COMPILE( +[ + #define _GNU_SOURCE 1 + #include +], +[ + struct ucred red; +], have_ucred=yes + , have_ucred=no +) +if test "$have_ucred" = "yes"; then + AC_DEFINE(HAVE_STRUCT_UCRED, 1, [Define if you have the struct ucred]) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + +dnl Check for the group "nogroup" or "nobody" Use -2 otherwise. +AC_MSG_CHECKING(nogroup) +AC_TRY_RUN([ + #include + #include + + int main() + { + struct group *grp = getgrnam("nogroup"); + if (grp) return 0; + return 1; + } +], nogroup=nogroup, +AC_TRY_RUN([ + #include + #include + + int main() + { + struct group *grp = getgrnam("nobody"); + if (grp) return 0; + return 1; + } +], nogroup=nobody, +nogroup=65534, nogroup=65534), nogroup=65534) +AC_MSG_RESULT($nogroup) +AC_SUBST(nogroup) +AC_CHECK_FUNCS(getpeereid) + +AC_ARG_WITH(sudo-tdesu-backend, + AC_HELP_STRING([--with-sudo-tdesu-backend], + [use sudo as backend for tdesu (default is su)]), +[ + if test x$withval = xyes; then + use_tdesu_backend="sudo" + else + use_tdesu_backend="su" + fi +], + use_tdesu_backend="su" +) + +AC_DEFINE_UNQUOTED(DEFAULT_SUPER_USER_COMMAND, "$use_tdesu_backend", [Use su or sudo]) diff --git a/tdesu/tdesu/CMakeLists.txt b/tdesu/tdesu/CMakeLists.txt new file mode 100644 index 000000000..7eb878140 --- /dev/null +++ b/tdesu/tdesu/CMakeLists.txt @@ -0,0 +1,30 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### tdesu (executable) ######################## + +tde_add_executable( tdesu AUTOMOC + SOURCES tdesu.cpp sudlg.cpp + LINK tdesu-shared kio-shared + DESTINATION ${BIN_INSTALL_DIR} +) diff --git a/tdesu/tdesu/Makefile.am b/tdesu/tdesu/Makefile.am new file mode 100644 index 000000000..f322f0a6f --- /dev/null +++ b/tdesu/tdesu/Makefile.am @@ -0,0 +1,15 @@ +## Makefile.am for tdesu by Geert Jansen + +INCLUDES= $(all_includes) + +## tdesu +bin_PROGRAMS = tdesu +tdesu_SOURCES = tdesu.cpp sudlg.cpp +tdesu_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_KDECORE) $(LIB_KDEUI) -ltdefx $(LIB_KIO) -lktexteditor +tdesu_LDADD = $(LIB_KIO) -ltdesu +tdesu_METASOURCES = AUTO +noinst_HEADERS = sudlg.h + +## Messages +messages: + $(XGETTEXT) $(tdesu_SOURCES) -o $(podir)/tdesu.pot diff --git a/tdesu/tdesu/sudlg.cpp b/tdesu/tdesu/sudlg.cpp new file mode 100644 index 000000000..cfda9168c --- /dev/null +++ b/tdesu/tdesu/sudlg.cpp @@ -0,0 +1,103 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 2000 Geert Jansen + */ + +#include +#include +#include +#include +#include +#include + +#include +#include "sudlg.h" + +KDEsuDialog::KDEsuDialog(TQCString user, TQCString auth_user, bool enableKeep,const TQString& icon, bool withIgnoreButton) + : KPasswordDialog(Password, enableKeep, (withIgnoreButton ? User1:NoDefault), icon) +{ + KConfig* config = KGlobal::config(); + config->setGroup("super-user-command"); + TQString superUserCommand = config->readEntry("super-user-command", DEFAULT_SUPER_USER_COMMAND); + if ( superUserCommand != "sudo" && superUserCommand != "su" ) { + kdWarning() << "unknown super user command" << endl; + superUserCommand = "su"; + } + + m_User = auth_user; + setCaption(i18n("Run as %1").arg(static_cast(user))); + + TQString prompt; + if (superUserCommand == "sudo" && m_User == "root") { + prompt = i18n("Please enter your password." ); + } else { + if (m_User == "root") { + prompt = i18n("The action you requested needs root privileges. " + "Please enter root's password below or click " + "Ignore to continue with your current privileges."); + } else { + prompt = i18n("The action you requested needs additional privileges. " + "Please enter the password for \"%1\" below or click " + "Ignore to continue with your current privileges.").arg(static_cast(m_User)); + } + } + setPrompt(prompt); + + if( withIgnoreButton ) + setButtonText(User1, i18n("&Ignore")); +} + + +KDEsuDialog::~KDEsuDialog() +{ +} + +bool KDEsuDialog::checkPassword(const char *password) +{ + SuProcess proc; + proc.setUser(m_User); + int status = proc.checkInstall(password); + switch (status) + { + case -1: + KMessageBox::sorry(this, i18n("Conversation with su failed.")); + done(Rejected); + return false; + + case 0: + return true; + + case SuProcess::SuNotFound: + KMessageBox::sorry(this, + i18n("The program 'su' is not found;\n" + "make sure your PATH is set correctly.")); + done(Rejected); + return false; + + case SuProcess::SuNotAllowed: + KMessageBox::sorry(this, + i18n("You are not allowed to use 'su';\n" + "on some systems, you need to be in a special " + "group (often: wheel) to use this program.")); + done(Rejected); + return false; + + case SuProcess::SuIncorrectPassword: + KMessageBox::sorry(this, i18n("Incorrect password; please try again.")); + return false; + + default: + KMessageBox::error(this, i18n("Internal error: illegal return from " + "SuProcess::checkInstall()")); + done(Rejected); + return false; + } +} + +void KDEsuDialog::slotUser1() +{ + done(AsUser); +} + +#include "sudlg.moc" diff --git a/tdesu/tdesu/sudlg.h b/tdesu/tdesu/sudlg.h new file mode 100644 index 000000000..64a283a0e --- /dev/null +++ b/tdesu/tdesu/sudlg.h @@ -0,0 +1,32 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 2000 Geert Jansen + */ + +#ifndef __SuDlg_h_Included__ +#define __SuDlg_h_Included__ + +#include + +class KDEsuDialog + : public KPasswordDialog +{ + Q_OBJECT + +public: + KDEsuDialog(TQCString user, TQCString auth_user, bool enableKeep, const TQString& icon , bool withIgnoreButton=false); + ~KDEsuDialog(); + + enum ResultCodes { AsUser = 10 }; + +protected: + bool checkPassword(const char *password); + void slotUser1(); + +private: + TQCString m_User; +}; + + +#endif // __SuDlg_h_Included__ diff --git a/tdesu/tdesu/tdesu.cpp b/tdesu/tdesu/tdesu.cpp new file mode 100644 index 000000000..d6aeebc6f --- /dev/null +++ b/tdesu/tdesu/tdesu.cpp @@ -0,0 +1,431 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1998 Pietro Iglio + * Copyright (C) 1999,2000 Geert Jansen + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#if defined(HAVE_SYS_WAIT_H) +#include +#endif + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "sudlg.h" + +#define ERR strerror(errno) + +TQCString command; +const char *Version = "1.0"; + +// NOTE: if you change the position of the -u switch, be sure to adjust it +// at the beginning of main() +static KCmdLineOptions options[] = { + { "+command", I18N_NOOP("Specifies the command to run"), 0 }, + { "c ", I18N_NOOP("Specifies the command to run"), "" }, + { "f ", I18N_NOOP("Run command under target uid if is not writable"), "" }, + { "u ", I18N_NOOP("Specifies the target uid"), "root" }, + { "n", I18N_NOOP("Do not keep password"), 0 }, + { "s", I18N_NOOP("Stop the daemon (forgets all passwords)"), 0 }, + { "t", I18N_NOOP("Enable terminal output (no password keeping)"), 0 }, + { "p ", I18N_NOOP("Set priority value: 0 <= prio <= 100, 0 is lowest"), "50" }, + { "r", I18N_NOOP("Use realtime scheduling"), 0 }, + { "newdcop", I18N_NOOP("Create a new dcopserver instance (this can break your current TDE session)"), 0 }, + { "noignorebutton", I18N_NOOP("Do not display ignore button"), 0 }, + { "i ", I18N_NOOP("Specify icon to use in the password dialog"), 0}, + { "d", I18N_NOOP("Do not show the command to be run in the dialog"), 0}, + KCmdLineLastOption +}; + + +TQCString dcopNetworkId() +{ + TQCString result; + result.resize(1025); + TQFile file(DCOPClient::dcopServerFile()); + if (!file.open(IO_ReadOnly)) + return ""; + int i = file.readLine(result.data(), 1024); + if (i <= 0) + return ""; + result.data()[i-1] = '\0'; // strip newline + return result; +} + +static int startApp(); + +int main(int argc, char *argv[]) +{ + // FIXME: this can be considered a poor man's solution, as it's not + // directly obvious to a gui user. :) + // anyway, i vote against removing it even when we have a proper gui + // implementation. -- ossi + const char *duser = ::getenv("ADMIN_ACCOUNT"); + if (duser && duser[0]) + options[3].def = duser; + + KAboutData aboutData("tdesu", I18N_NOOP("KDE su"), + Version, I18N_NOOP("Runs a program with elevated privileges."), + KAboutData::License_Artistic, + "Copyright (c) 1998-2000 Geert Jansen, Pietro Iglio"); + aboutData.addAuthor("Geert Jansen", I18N_NOOP("Maintainer"), + "jansen@kde.org", "http://www.stack.nl/~geertj/"); + aboutData.addAuthor("Pietro Iglio", I18N_NOOP("Original author"), + "iglio@fub.it"); + + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions(options); + KApplication::disableAutoDcopRegistration(); + // tdesu doesn't process SM events, so don't even connect to ksmserver + TQCString session_manager = getenv( "SESSION_MANAGER" ); + unsetenv( "SESSION_MANAGER" ); + KApplication app; + // but propagate it to the started app + if (session_manager.data()) + { + setenv( "SESSION_MANAGER", session_manager.data(), 1 ); + } + + { + KStartupInfoId id; + id.initId( kapp->startupId()); + id.setupStartupEnv(); // make DESKTOP_STARTUP_ID env. var. available again + } + + int result = startApp(); + + if (result == 127) + { + KMessageBox::sorry(0, i18n("Command '%1' not found.").arg(static_cast(command))); + } + + return result; +} + +static int startApp() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + // Stop daemon and exit? + if (args->isSet("s")) + { + KDEsuClient client; + if (client.ping() == -1) + { + kdError(1206) << "Daemon not running -- nothing to stop\n"; + exit(1); + } + if (client.stopServer() != -1) + { + kdDebug(1206) << "Daemon stopped\n"; + exit(0); + } + kdError(1206) << "Could not stop daemon\n"; + exit(1); + } + + TQString icon; + if ( args->isSet("i")) + icon = args->getOption("i"); + + bool prompt = true; + if ( args->isSet("d")) + prompt = false; + + // Get target uid + TQCString user = args->getOption("u"); + TQCString auth_user = user; + struct passwd *pw = getpwnam(user); + if (pw == 0L) + { + kdError(1206) << "User " << user << " does not exist\n"; + exit(1); + } + bool change_uid = (getuid() != pw->pw_uid); + + // If file is writeable, do not change uid + TQString file = TQFile::decodeName(args->getOption("f")); + if (change_uid && !file.isEmpty()) + { + if (file.tqat(0) != '/') + { + KStandardDirs dirs; + dirs.addKDEDefaults(); + file = dirs.findResource("config", file); + if (file.isEmpty()) + { + kdError(1206) << "Config file not found: " << file << "\n"; + exit(1); + } + } + TQFileInfo fi(file); + if (!fi.exists()) + { + kdError(1206) << "File does not exist: " << file << "\n"; + exit(1); + } + change_uid = !fi.isWritable(); + } + + // Get priority/scheduler + TQCString tmp = args->getOption("p"); + bool ok; + int priority = tmp.toInt(&ok); + if (!ok || (priority < 0) || (priority > 100)) + { + KCmdLineArgs::usage(i18n("Illegal priority: %1").arg(static_cast(tmp))); + exit(1); + } + int scheduler = SuProcess::SchedNormal; + if (args->isSet("r")) + scheduler = SuProcess::SchedRealtime; + if ((priority > 50) || (scheduler != SuProcess::SchedNormal)) + { + change_uid = true; + auth_user = "root"; + } + + // Get command + if (args->isSet("c")) + { + command = args->getOption("c"); + for (int i=0; icount(); i++) + { + TQString arg = TQFile::decodeName(args->arg(i)); + KRun::shellQuote(arg); + command += " "; + command += TQFile::encodeName(arg); + } + } + else + { + if( args->count() == 0 ) + { + KCmdLineArgs::usage(i18n("No command specified.")); + exit(1); + } + command = args->arg(0); + for (int i=1; icount(); i++) + { + TQString arg = TQFile::decodeName(args->arg(i)); + KRun::shellQuote(arg); + command += " "; + command += TQFile::encodeName(arg); + } + } + + // Don't change uid if we're don't need to. + if (!change_uid) + { + int result = system(command); + result = WEXITSTATUS(result); + return result; + } + + // Check for daemon and start if necessary + bool just_started = false; + bool have_daemon = true; + KDEsuClient client; + if (!client.isServerSGID()) + { + kdWarning(1206) << "Daemon not safe (not sgid), not using it.\n"; + have_daemon = false; + } + else if (client.ping() == -1) + { + if (client.startServer() == -1) + { + kdWarning(1206) << "Could not start daemon, reduced functionality.\n"; + have_daemon = false; + } + just_started = true; + } + + // Try to exec the command with tdesud. + bool keep = !args->isSet("n") && have_daemon; + bool terminal = true; + bool new_dcop = args->isSet("newdcop"); + bool withIgnoreButton = args->isSet("ignorebutton"); + + QCStringList env; + TQCString options; + env << ( "DESKTOP_STARTUP_ID=" + kapp->startupId()); + + if (pw->pw_uid) + { + // Only propagate KDEHOME for non-root users, + // root uses KDEROOTHOME + + // Translate the KDEHOME of this user to the new user. + TQString kdeHome = KGlobal::dirs()->relativeLocation("home", KGlobal::dirs()->localkdedir()); + if (kdeHome[0] != '/') + kdeHome.prepend("~/"); + else + kdeHome=TQString::null; // Use default + + env << ("KDEHOME="+ TQFile::encodeName(kdeHome)); + } + + KUser u; + env << (TQCString) ("KDESU_USER=" + u.loginName().local8Bit()); + + if (!new_dcop) + { + TQCString ksycoca = "KDESYCOCA="+TQFile::encodeName(locateLocal("cache", "ksycoca")); + env << ksycoca; + + options += "xf"; // X-only, dcop forwarding enabled. + } + + if (keep && !terminal && !just_started) + { + client.setPriority(priority); + client.setScheduler(scheduler); + int result = client.exec(command, user, options, env); + if (result == 0) + { + result = client.exitCode(); + return result; + } + } + + // Set core dump size to 0 because we will have + // root's password in memory. + struct rlimit rlim; + rlim.rlim_cur = rlim.rlim_max = 0; + if (setrlimit(RLIMIT_CORE, &rlim)) + { + kdError(1206) << "rlimit(): " << ERR << "\n"; + exit(1); + } + + // Read configuration + KConfig *config = KGlobal::config(); + config->setGroup("Passwords"); + int timeout = config->readNumEntry("Timeout", defTimeout); + + // Check if we need a password + SuProcess proc; + proc.setUser(auth_user); + int needpw = proc.checkNeedPassword(); + if (needpw < 0) + { + TQString err = i18n("Su returned with an error.\n"); + KMessageBox::error(0L, err); + exit(1); + } + if (needpw == 0) + { + keep = 0; + kdDebug() << "Don't need password!!\n"; + } + + // Start the dialog + TQCString password; + if (needpw) + { + KStartupInfoId id; + id.initId( kapp->startupId()); + KStartupInfoData data; + data.setSilent( KStartupInfoData::Yes ); + KStartupInfo::sendChange( id, data ); + KDEsuDialog dlg(user, auth_user, keep && !terminal,icon, withIgnoreButton); + if (prompt) + dlg.addLine(i18n("Command:"), command); + if ((priority != 50) || (scheduler != SuProcess::SchedNormal)) + { + TQString prio; + if (scheduler == SuProcess::SchedRealtime) + prio += i18n("realtime: "); + prio += TQString("%1/100").arg(priority); + if (prompt) + dlg.addLine(i18n("Priority:"), prio); + } + int ret = dlg.exec(); + if (ret == KDEsuDialog::Rejected) + { + KStartupInfo::sendFinish( id ); + exit(0); + } + if (ret == KDEsuDialog::AsUser) + change_uid = false; + password = dlg.password(); + keep = dlg.keep(); + KConfigGroup(config,"Passwords").writeEntry("Keep", keep); + data.setSilent( KStartupInfoData::No ); + KStartupInfo::sendChange( id, data ); + } + + // Some events may need to be handled (like a button animation) + kapp->processEvents(); + + // Run command + if (!change_uid) + { + int result = system(command); + result = WEXITSTATUS(result); + return result; + } + else if (keep && have_daemon) + { + client.setPass(password, timeout); + client.setPriority(priority); + client.setScheduler(scheduler); + int result = client.exec(command, user, options, env); + if (result == 0) + { + result = client.exitCode(); + return result; + } + } else + { + SuProcess proc; + proc.setTerminal(terminal); + proc.setErase(true); + proc.setUser(user); + if (!new_dcop) + { + proc.setXOnly(true); + proc.setDCOPForwarding(true); + } + proc.setEnvironment(env); + proc.setPriority(priority); + proc.setScheduler(scheduler); + proc.setCommand(command); + int result = proc.exec(password); + return result; + } + return -1; +} + diff --git a/tdesu/tdesud/CMakeLists.txt b/tdesu/tdesud/CMakeLists.txt new file mode 100644 index 000000000..2696a8197 --- /dev/null +++ b/tdesu/tdesud/CMakeLists.txt @@ -0,0 +1,35 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +# FIXME there is used KDE_USE_FPIE + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### tdesud (executable) ####################### + +tde_add_executable( tdesud + SOURCES tdesud.cpp repo.cpp lexer.cpp handler.cpp secure.cpp + LINK tdesu-shared + DESTINATION ${BIN_INSTALL_DIR} +) + +install( CODE "execute_process( COMMAND chown root:${nogroup} \$ENV{DESTDIR}${_destination}/tdesud )" ) +install( CODE "execute_process( COMMAND chmod 2755 \$ENV{DESTDIR}${_destination}/tdesud )" ) diff --git a/tdesu/tdesud/Makefile.am b/tdesu/tdesud/Makefile.am new file mode 100644 index 000000000..140cbce06 --- /dev/null +++ b/tdesu/tdesud/Makefile.am @@ -0,0 +1,31 @@ +## Makefile.am for tdesud + +INCLUDES = $(all_includes) + +KDE_CXXFLAGS = $(KDE_USE_FPIE) + +bin_PROGRAMS = tdesud +tdesud_SOURCES = tdesud.cpp repo.cpp lexer.cpp handler.cpp secure.cpp +tdesud_LDFLAGS = $(KDE_USE_PIE) $(all_libraries) $(KDE_RPATH) +tdesud_LDADD = $(LIB_KDECORE) -ltdesu $(LIBSOCKET) +noinst_HEADERS = repo.h handler.h lexer.h secure.h + +## tdesud needs to be suid or sgid something +install-data-local: + @echo "********************************************************" + @echo "" + @echo "For security reasons, tdesud is installed setgid nogroup." + @echo "Kdesud is the daemon that implements the password caching." + @echo "" + @echo "You should NOT use the password caching feature if tdesud is" + @echo "not installed setgid nogroup." + @echo "" + @echo "********************************************************" + +install-exec-hook: + @(chown root:@nogroup@ $(DESTDIR)$(bindir)/tdesud && chmod 2755 $(DESTDIR)$(bindir)/tdesud) \ + || echo "Error: Could not install tdesud as setgid nogroup!!\n" \ + "The password caching feature is disabled." + +messages: + $(XGETTEXT) $(tdesud_SOURCES) -o $(podir)/tdesud.pot diff --git a/tdesu/tdesud/handler.cpp b/tdesu/tdesud/handler.cpp new file mode 100644 index 000000000..2a744b217 --- /dev/null +++ b/tdesu/tdesud/handler.cpp @@ -0,0 +1,512 @@ +/* + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + * + * handler.cpp: A connection handler for tdesud. + */ + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include + +#include "handler.h" +#include "repo.h" +#include "lexer.h" +#include "secure.h" + + +// Global repository +extern Repository *repo; +void tdesud_cleanup(); + +ConnectionHandler::ConnectionHandler(int fd) + : SocketSecurity(fd), m_exitCode(0), m_hasExitCode(false), m_needExitCode(false), m_pid(0) +{ + m_Fd = fd; + m_Priority = 50; + m_Scheduler = SuProcess::SchedNormal; +} + +ConnectionHandler::~ConnectionHandler() +{ + m_Buf.fill('x'); + m_Pass.fill('x'); + close(m_Fd); +} + +/* + * Handle a connection: make sure we don't block + */ + +int ConnectionHandler::handle() +{ + int ret, nbytes; + + // Add max 100 bytes to connection buffer + + char tmpbuf[100]; + nbytes = recv(m_Fd, tmpbuf, 99, 0); + + if (nbytes < 0) + { + if (errno == EINTR) + return 0; + // read error + return -1; + } else if (nbytes == 0) + { + // eof + return -1; + } + tmpbuf[nbytes] = '\000'; + + if (m_Buf.length()+nbytes > 1024) + { + kdWarning(1205) << "line too long"; + return -1; + } + + m_Buf.append(tmpbuf); + memset(tmpbuf, 'x', nbytes); + + // Do we have a complete command yet? + int n; + TQCString newbuf; + while ((n = m_Buf.find('\n')) != -1) + { + newbuf = m_Buf.left(n+1); + m_Buf.fill('x', n+1); + m_Buf.remove(0, n+1); + ret = doCommand(newbuf); + if (ret < 0) + return ret; + } + + return 0; +} + +TQCString ConnectionHandler::makeKey(int _namespace, TQCString s1, + TQCString s2, TQCString s3) +{ + TQCString res; + res.setNum(_namespace); + res += "*"; + res += s1 + "*" + s2 + "*" + s3; + return res; +} + +void ConnectionHandler::sendExitCode() +{ + if (!m_needExitCode) + return; + TQCString buf; + buf.setNum(m_exitCode); + buf.prepend("OK "); + buf.append("\n"); + + send(m_Fd, buf.data(), buf.length(), 0); +} + +void ConnectionHandler::respond(int ok, TQCString s) +{ + TQCString buf; + + switch (ok) { + case Res_OK: + buf = "OK"; + break; + case Res_NO: + default: + buf = "NO"; + break; + } + + if (!s.isEmpty()) + { + buf += ' '; + buf += s; + } + + buf += '\n'; + + send(m_Fd, buf.data(), buf.length(), 0); +} + +/* + * Parse and do one command. On a parse error, return -1. This will + * close the socket in the main accept loop. + */ + +int ConnectionHandler::doCommand(TQCString buf) +{ + if ((uid_t) peerUid() != getuid()) + { + kdWarning(1205) << "Peer uid not equal to me\n"; + kdWarning(1205) << "Peer: " << peerUid() << " Me: " << getuid() << endl; + return -1; + } + + TQCString key, command, pass, name, user, value, env_check; + Data_entry data; + + Lexer *l = new Lexer(buf); + int tok = l->lex(); + switch (tok) + { + case Lexer::Tok_pass: // "PASS password:string timeout:int\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + m_Pass.fill('x'); + m_Pass = l->lval(); + tok = l->lex(); + if (tok != Lexer::Tok_num) + goto parse_error; + m_Timeout = l->lval().toInt(); + if (l->lex() != '\n') + goto parse_error; + if (m_Pass.isNull()) + m_Pass = ""; + kdDebug(1205) << "Password set!\n"; + respond(Res_OK); + break; + + case Lexer::Tok_host: // "HOST host:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + m_Host = l->lval(); + if (l->lex() != '\n') + goto parse_error; + kdDebug(1205) << "Host set to " << m_Host << endl; + respond(Res_OK); + break; + + case Lexer::Tok_prio: // "PRIO priority:int\n" + tok = l->lex(); + if (tok != Lexer::Tok_num) + goto parse_error; + m_Priority = l->lval().toInt(); + if (l->lex() != '\n') + goto parse_error; + kdDebug(1205) << "priority set to " << m_Priority << endl; + respond(Res_OK); + break; + + case Lexer::Tok_sched: // "SCHD scheduler:int\n" + tok = l->lex(); + if (tok != Lexer::Tok_num) + goto parse_error; + m_Scheduler = l->lval().toInt(); + if (l->lex() != '\n') + goto parse_error; + kdDebug(1205) << "Scheduler set to " << m_Scheduler << endl; + respond(Res_OK); + break; + + case Lexer::Tok_exec: // "EXEC command:string user:string [options:string (env:string)*]\n" + { + TQCString options; + QCStringList env; + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + command = l->lval(); + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + user = l->lval(); + tok = l->lex(); + if (tok != '\n') + { + if (tok != Lexer::Tok_str) + goto parse_error; + options = l->lval(); + tok = l->lex(); + while (tok != '\n') + { + if (tok != Lexer::Tok_str) + goto parse_error; + TQCString env_str = l->lval(); + env.append(env_str); + if (strncmp(env_str, "DESKTOP_STARTUP_ID=", strlen("DESKTOP_STARTUP_ID=")) != 0) + env_check += "*"+env_str; + tok = l->lex(); + } + } + + TQCString auth_user; + if ((m_Scheduler != SuProcess::SchedNormal) || (m_Priority > 50)) + auth_user = "root"; + else + auth_user = user; + key = makeKey(2, m_Host, auth_user, command); + // We only use the command if the environment is the same. + if (repo->find(key) == env_check) + { + key = makeKey(0, m_Host, auth_user, command); + pass = repo->find(key); + } + if (pass.isNull()) // isNull() means no password, isEmpty() can mean empty password + { + if (m_Pass.isNull()) + { + respond(Res_NO); + break; + } + data.value = env_check; + data.timeout = m_Timeout; + key = makeKey(2, m_Host, auth_user, command); + repo->add(key, data); + data.value = m_Pass; + data.timeout = m_Timeout; + key = makeKey(0, m_Host, auth_user, command); + repo->add(key, data); + pass = m_Pass; + } + + // Execute the command asynchronously + kdDebug(1205) << "Executing command: " << command << endl; + pid_t pid = fork(); + if (pid < 0) + { + kdDebug(1205) << "fork(): " << strerror(errno) << endl; + respond(Res_NO); + break; + } else if (pid > 0) + { + m_pid = pid; + respond(Res_OK); + break; + } + + // Ignore SIGCHLD because "class SuProcess" needs waitpid() + signal(SIGCHLD, SIG_DFL); + + int ret; + if (m_Host.isEmpty()) + { + SuProcess proc; + proc.setCommand(command); + proc.setUser(user); + if (options.contains('x')) + proc.setXOnly(true); + if (options.contains('f')) + proc.setDCOPForwarding(true); + proc.setPriority(m_Priority); + proc.setScheduler(m_Scheduler); + proc.setEnvironment(env); + ret = proc.exec(pass.data()); + } else + { + SshProcess proc; + proc.setCommand(command); + proc.setUser(user); + proc.setHost(m_Host); + ret = proc.exec(pass.data()); + } + + kdDebug(1205) << "Command completed: " << command << endl; + _exit(ret); + } + + case Lexer::Tok_delCmd: // "DEL command:string user:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + command = l->lval(); + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + user = l->lval(); + if (l->lex() != '\n') + goto parse_error; + key = makeKey(0, m_Host, user, command); + if (repo->remove(key) < 0) { + kdDebug(1205) << "Unknown command: " << command << endl; + respond(Res_NO); + } + else { + kdDebug(1205) << "Deleted command: " << command << ", user = " + << user << endl; + respond(Res_OK); + } + break; + + case Lexer::Tok_delVar: // "DELV name:string \n" + { + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + tok = l->lex(); + if (tok != '\n') + goto parse_error; + key = makeKey(1, name); + if (repo->remove(key) < 0) + { + kdDebug(1205) << "Unknown name: " << name << endl; + respond(Res_NO); + } + else { + kdDebug(1205) << "Deleted name: " << name << endl; + respond(Res_OK); + } + break; + } + + case Lexer::Tok_delGroup: // "DELG group:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + if (repo->removeGroup(name) < 0) + { + kdDebug(1205) << "No keys found under group: " << name << endl; + respond(Res_NO); + } + else + { + kdDebug(1205) << "Removed all keys under group: " << name << endl; + respond(Res_OK); + } + break; + + case Lexer::Tok_delSpecialKey: // "DELS special_key:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + if (repo->removeSpecialKey(name) < 0) + respond(Res_NO); + else + respond(Res_OK); + break; + + case Lexer::Tok_set: // "SET name:string value:string group:string timeout:int\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + data.value = l->lval(); + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + data.group = l->lval(); + tok = l->lex(); + if (tok != Lexer::Tok_num) + goto parse_error; + data.timeout = l->lval().toInt(); + if (l->lex() != '\n') + goto parse_error; + key = makeKey(1, name); + repo->add(key, data); + kdDebug(1205) << "Stored key: " << key << endl; + respond(Res_OK); + break; + + case Lexer::Tok_get: // "GET name:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + if (l->lex() != '\n') + goto parse_error; + key = makeKey(1, name); + kdDebug(1205) << "Request for key: " << key << endl; + value = repo->find(key); + if (!value.isEmpty()) + respond(Res_OK, value); + else + respond(Res_NO); + break; + + case Lexer::Tok_getKeys: // "GETK groupname:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + if (l->lex() != '\n') + goto parse_error; + kdDebug(1205) << "Request for group key: " << name << endl; + value = repo->findKeys(name); + if (!value.isEmpty()) + respond(Res_OK, value); + else + respond(Res_NO); + break; + + case Lexer::Tok_chkGroup: // "CHKG groupname:string\n" + tok = l->lex(); + if (tok != Lexer::Tok_str) + goto parse_error; + name = l->lval(); + if (l->lex() != '\n') + goto parse_error; + kdDebug(1205) << "Checking for group key: " << name << endl; + if ( repo->hasGroup( name ) < 0 ) + respond(Res_NO); + else + respond(Res_OK); + break; + + case Lexer::Tok_ping: // "PING\n" + tok = l->lex(); + if (tok != '\n') + goto parse_error; + respond(Res_OK); + break; + + case Lexer::Tok_exit: // "EXIT\n" + tok = l->lex(); + if (tok != '\n') + goto parse_error; + m_needExitCode = true; + if (m_hasExitCode) + sendExitCode(); + break; + + case Lexer::Tok_stop: // "STOP\n" + tok = l->lex(); + if (tok != '\n') + goto parse_error; + kdDebug(1205) << "Stopping by command" << endl; + respond(Res_OK); + tdesud_cleanup(); + exit(0); + + default: + kdWarning(1205) << "Unknown command: " << l->lval() << endl; + respond(Res_NO); + goto parse_error; + } + + delete l; + return 0; + +parse_error: + kdWarning(1205) << "Parse error" << endl; + delete l; + return -1; +} + + + diff --git a/tdesu/tdesud/handler.h b/tdesu/tdesud/handler.h new file mode 100644 index 000000000..8728efe78 --- /dev/null +++ b/tdesu/tdesud/handler.h @@ -0,0 +1,52 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + */ + +#ifndef __Handler_h_included__ +#define __Handler_h_included__ + +#include + +#include +#include "secure.h" + +/** + * A ConnectionHandler handles a client. It is called from the main program + * loop whenever there is data to read from a corresponding socket. + * It keeps reading data until a newline is read. Then, a command is parsed + * and executed. + */ + +class ConnectionHandler: public SocketSecurity +{ + +public: + ConnectionHandler(int fd); + ~ConnectionHandler(); + + /** Handle incoming data. */ + int handle(); + + /* Send back exit code. */ + void sendExitCode(); + +private: + enum Results { Res_OK, Res_NO }; + + int doCommand(TQCString buf); + void respond(int ok, TQCString s=0); + TQCString makeKey(int namspace, TQCString s1, TQCString s2=0, TQCString s3=0); + + int m_Fd, m_Timeout; + int m_Priority, m_Scheduler; + TQCString m_Buf, m_Pass, m_Host; +public: + int m_exitCode; + bool m_hasExitCode; + bool m_needExitCode; + pid_t m_pid; +}; + +#endif diff --git a/tdesu/tdesud/lexer.cpp b/tdesu/tdesud/lexer.cpp new file mode 100644 index 000000000..f1932f07d --- /dev/null +++ b/tdesu/tdesud/lexer.cpp @@ -0,0 +1,134 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + * + * lexer.cpp: A lexer for the tdesud protocol. See tdesud.cpp for a + * description of the protocol. + */ + +#include +#include +#include "lexer.h" + + +Lexer::Lexer(const TQCString &input) +{ + m_Input = input; + in = 0; +} + +Lexer::~Lexer() +{ + // Erase buffers + m_Input.fill('x'); + m_Output.fill('x'); +} + +TQCString &Lexer::lval() +{ + return m_Output; +} + +/* + * lex() is the lexer. There is no end-of-input check here so that has to be + * done by the caller. + */ + +int Lexer::lex() +{ + char c; + + c = m_Input[in++]; + m_Output.fill('x'); + m_Output.resize(0); + + while (1) + { + // newline? + if (c == '\n') + return '\n'; + + // No control characters + if (iscntrl(c)) + return Tok_none; + + if (isspace(c)) + while (isspace(c = m_Input[in++])); + + // number? + if (isdigit(c)) + { + m_Output += c; + while (isdigit(c = m_Input[in++])) + m_Output += c; + in--; + return Tok_num; + } + + // quoted string? + if (c == '"') + { + c = m_Input[in++]; + while ((c != '"') && !iscntrl(c)) { + // handle escaped characters + if (c == '\\') + m_Output += m_Input[in++]; + else + m_Output += c; + c = m_Input[in++]; + } + if (c == '"') + return Tok_str; + return Tok_none; + } + + // normal string + while (!isspace(c) && !iscntrl(c)) + { + m_Output += c; + c = m_Input[in++]; + } + in--; + + // command? + if (m_Output.length() <= 4) + { + if (m_Output == "EXEC") + return Tok_exec; + if (m_Output == "PASS") + return Tok_pass; + if (m_Output == "DEL") + return Tok_delCmd; + if (m_Output == "PING") + return Tok_ping; + if (m_Output == "EXIT") + return Tok_exit; + if (m_Output == "STOP") + return Tok_stop; + if (m_Output == "SET") + return Tok_set; + if (m_Output == "GET") + return Tok_get; + if (m_Output == "HOST") + return Tok_host; + if (m_Output == "SCHD") + return Tok_sched; + if (m_Output == "PRIO") + return Tok_prio; + if (m_Output == "DELV") + return Tok_delVar; + if (m_Output == "DELG") + return Tok_delGroup; + if (m_Output == "DELS") + return Tok_delSpecialKey; + if (m_Output == "GETK") + return Tok_getKeys; + if (m_Output == "CHKG") + return Tok_chkGroup; + } + + return Tok_str; + } +} + diff --git a/tdesu/tdesud/lexer.h b/tdesu/tdesud/lexer.h new file mode 100644 index 000000000..d8f529cd8 --- /dev/null +++ b/tdesu/tdesud/lexer.h @@ -0,0 +1,42 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + */ + +#ifndef __Lexer_h_included__ +#define __Lexer_h_included__ + +class TQCString; + +/** + * This is a lexer for the tdesud protocol. + */ + +class Lexer { +public: + Lexer(const TQCString &input); + ~Lexer(); + + /** Read next token. */ + int lex(); + + /** Return the token's value. */ + TQCString &lval(); + + enum Tokens { + Tok_none, Tok_exec=256, Tok_pass, Tok_delCmd, + Tok_ping, Tok_str, Tok_num , Tok_stop, + Tok_set, Tok_get, Tok_delVar, Tok_delGroup, + Tok_host, Tok_prio, Tok_sched, Tok_getKeys, + Tok_chkGroup, Tok_delSpecialKey, Tok_exit + }; + +private: + TQCString m_Input; + TQCString m_Output; + + int in; +}; + +#endif diff --git a/tdesu/tdesud/repo.cpp b/tdesu/tdesud/repo.cpp new file mode 100644 index 000000000..e923d6411 --- /dev/null +++ b/tdesu/tdesud/repo.cpp @@ -0,0 +1,188 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + */ + +#include +#include + +#include +#include +#include +#include + +#include "repo.h" + + +Repository::Repository() +{ + head_time = (unsigned) -1; +} + + +Repository::~Repository() +{} + + +void Repository::add(const TQCString &key, Data_entry &data) +{ + RepoIterator it = repo.find(key); + if (it != repo.end()) + remove(key); + if (data.timeout == 0) + data.timeout = (unsigned) -1; + else + data.timeout += time(0L); + head_time = QMIN(head_time, data.timeout); + repo.insert(key, data); +} + +int Repository::remove(const TQCString &key) +{ + if( key.isEmpty() ) + return -1; + + RepoIterator it = repo.find(key); + if (it == repo.end()) + return -1; + it.data().value.fill('x'); + it.data().group.fill('x'); + repo.remove(it); + return 0; +} + +int Repository::removeSpecialKey(const TQCString &key) +{ + int found = -1; + if ( !key.isEmpty() ) + { + TQValueStack rm_keys; + for (RepoCIterator it=repo.begin(); it!=repo.end(); ++it) + { + if ( key.find( static_cast(it.data().group) ) == 0 && + it.key().find( static_cast(key) ) >= 0 ) + { + rm_keys.push(it.key()); + found = 0; + } + } + while (!rm_keys.isEmpty()) + { + kdDebug(1205) << "Removed key: " << rm_keys.top() << endl; + remove(rm_keys.pop()); + } + } + return found; +} + +int Repository::removeGroup(const TQCString &group) +{ + int found = -1; + if ( !group.isEmpty() ) + { + TQValueStack rm_keys; + for (RepoCIterator it=repo.begin(); it!=repo.end(); ++it) + { + if (it.data().group == group) + { + rm_keys.push(it.key()); + found = 0; + } + } + while (!rm_keys.isEmpty()) + { + kdDebug(1205) << "Removed key: " << rm_keys.top() << endl; + remove(rm_keys.pop()); + } + } + return found; +} + +int Repository::hasGroup(const TQCString &group) const +{ + if ( !group.isEmpty() ) + { + RepoCIterator it; + for (it=repo.begin(); it!=repo.end(); ++it) + { + if (it.data().group == group) + return 0; + } + } + return -1; +} + +TQCString Repository::findKeys(const TQCString &group, const char *sep ) const +{ + TQCString list=""; + if( !group.isEmpty() ) + { + kdDebug(1205) << "Looking for matching key with group key: " << group << endl; + int pos; + TQCString key; + RepoCIterator it; + for (it=repo.begin(); it!=repo.end(); ++it) + { + if (it.data().group == group) + { + key = it.key().copy(); + kdDebug(1205) << "Matching key found: " << key << endl; + pos = key.findRev(sep); + key.truncate( pos ); + key.remove(0, 2); + if (!list.isEmpty()) + { + // Add the same keys only once please :) + if( !list.contains(static_cast(key)) ) + { + kdDebug(1205) << "Key added to list: " << key << endl; + list += '\007'; // I do not know + list.append(key); + } + } + else + list = key; + } + } + } + return list; +} + +TQCString Repository::find(const TQCString &key) const +{ + if( key.isEmpty() ) + return 0; + + RepoCIterator it = repo.find(key); + if (it == repo.end()) + return 0; + return it.data().value; +} + + +int Repository::expire() +{ + unsigned current = time(0L); + if (current < head_time) + return 0; + + unsigned t; + TQValueStack keys; + head_time = (unsigned) -1; + RepoIterator it; + for (it=repo.begin(); it!=repo.end(); ++it) + { + t = it.data().timeout; + if (t <= current) + keys.push(it.key()); + else + head_time = QMIN(head_time, t); + } + + int n = keys.count(); + while (!keys.isEmpty()) + remove(keys.pop()); + return n; +} + diff --git a/tdesu/tdesud/repo.h b/tdesu/tdesud/repo.h new file mode 100644 index 000000000..70027793f --- /dev/null +++ b/tdesu/tdesud/repo.h @@ -0,0 +1,68 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + */ + +#ifndef __Repo_h_included__ +#define __Repo_h_included__ + + +#include +#include + + +/** + * Used internally. + */ +struct Data_entry +{ + TQCString value; + TQCString group; + unsigned int timeout; +}; + + +/** + * String repository. + * + * This class implements a string repository with expiration. + */ +class Repository { +public: + Repository(); + ~Repository(); + + /** Remove data elements which are expired. */ + int expire(); + + /** Add a data element */ + void add(const TQCString& key, Data_entry& data); + + /** Delete a data element. */ + int remove(const TQCString& key); + + /** Delete all data entries having the given group. */ + int removeGroup(const TQCString& group); + + /** Delete all data entries based on key. */ + int removeSpecialKey(const TQCString& key ); + + /** Checks for the existence of the specified group. */ + int hasGroup(const TQCString &group) const; + + /** Return a data value. */ + TQCString find(const TQCString& key) const; + + /** Returns the key values for the given group. */ + TQCString findKeys(const TQCString& group, const char *sep= "-") const; + +private: + + TQMap repo; + typedef TQMap::Iterator RepoIterator; + typedef TQMap::ConstIterator RepoCIterator; + unsigned head_time; +}; + +#endif diff --git a/tdesu/tdesud/secure.cpp b/tdesu/tdesud/secure.cpp new file mode 100644 index 000000000..9b30ab4ee --- /dev/null +++ b/tdesu/tdesud/secure.cpp @@ -0,0 +1,80 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + * + * secure.cpp: Peer credentials for a UNIX socket. + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include "secure.h" + + +/** + * Under Linux, Socket_security is supported. + */ + +#if defined(SO_PEERCRED) + +SocketSecurity::SocketSecurity(int sockfd) +{ + ksocklen_t len = sizeof(struct ucred); + if (getsockopt(sockfd, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) { + kdError() << "getsockopt(SO_PEERCRED) " << perror << endl; + return; + } + + ok = true; +} + +#else +# if defined(HAVE_GETPEEREID) +SocketSecurity::SocketSecurity(int sockfd) +{ + uid_t euid; + gid_t egid; + if (getpeereid(sockfd, &euid, &egid) == 0) { + cred.uid = euid; + cred.gid = egid; + cred.pid = -1; + ok = true; + } +} + +# else + + +/** + * The default version does nothing. + */ + +SocketSecurity::SocketSecurity(int sockfd) +{ + static bool warned_him = FALSE; + + if (!warned_him) { + kdWarning() << "Using void socket security. Please add support for your" << endl; + kdWarning() << "platform to tdesu/tdesud/secure.cpp" << endl; + warned_him = TRUE; + } + + // This passes the test made in handler.cpp + cred.uid = getuid(); + ok = true; +} + +# endif +#endif diff --git a/tdesu/tdesud/secure.h b/tdesu/tdesud/secure.h new file mode 100644 index 000000000..edf58d9c6 --- /dev/null +++ b/tdesu/tdesud/secure.h @@ -0,0 +1,52 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + */ + +#ifndef __Secure_h_included__ +#define __Secure_h_included__ + +#include "config.h" + +#include +#include + +#ifndef HAVE_STRUCT_UCRED + +// `struct ucred' is not defined in glibc 2.0. + +struct ucred { + pid_t pid; + uid_t uid; + gid_t gid; +}; + +#endif // HAVE_STRUCT_UCRED + + +/** + * The Socket_security class autheticates the peer for you. It provides + * the process-id, user-id and group-id plus the MD5 sum of the connected + * binary. + */ + +class SocketSecurity { +public: + SocketSecurity(int fd); + + /** Returns the peer's process-id. */ + int peerPid() { if (!ok) return -1; return cred.pid; } + + /** Returns the peer's user-id */ + int peerUid() { if (!ok) return -1; return cred.uid; } + + /** Returns the peer's group-id */ + int peerGid() { if (!ok) return -1; return cred.gid; } + +private: + bool ok; + struct ucred cred; +}; + +#endif diff --git a/tdesu/tdesud/tdesud.cpp b/tdesu/tdesud/tdesud.cpp new file mode 100644 index 000000000..d369aaf9b --- /dev/null +++ b/tdesu/tdesud/tdesud.cpp @@ -0,0 +1,418 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module tdesu. + * Copyright (C) 1999,2000 Geert Jansen + * + * + * tdesud.cpp: KDE su daemon. Offers "keep password" functionality to kde su. + * + * The socket $KDEHOME/socket-$(HOSTNAME)/tdesud_$(display) is used for communication with + * client programs. + * + * The protocol: Client initiates the connection. All commands and responses + * are terminated by a newline. + * + * Client Server Description + * ------ ------ ----------- + * + * PASS OK Set password for commands in + * this session. Password is + * valid for seconds. + * + * USER OK Set the target user [required] + * + * EXEC OK Execute command . If + * NO has been executed + * before (< timeout) no PASS + * command is needed. + * + * DEL OK Delete password for command + * NO . + * + * PING OK Ping the server (diagnostics). + */ + + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_SYS_SELECT_H +#include // Needed on some systems. +#endif + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "repo.h" +#include "handler.h" + +#include +#include + +#ifndef SUN_LEN +#define SUN_LEN(ptr) ((kde_socklen_t) (((struct sockaddr_un *) 0)->sun_path) \ + + strlen ((ptr)->sun_path)) +#endif + +#define ERR strerror(errno) + +// Globals + +Repository *repo; +const char *Version = "1.01"; +TQCString sock; +Display *x11Display; +int pipeOfDeath[2]; + + +void tdesud_cleanup() +{ + unlink(sock); +} + + +// Borrowed from kdebase/kaudio/kaudioserver.cpp + +extern "C" int xio_errhandler(Display *); + +int xio_errhandler(Display *) +{ + kdError(1205) << "Fatal IO error, exiting...\n"; + tdesud_cleanup(); + exit(1); + return 1; //silence compilers +} + +int initXconnection() +{ + x11Display = XOpenDisplay(NULL); + if (x11Display != 0L) + { + XSetIOErrorHandler(xio_errhandler); + XCreateSimpleWindow(x11Display, DefaultRootWindow(x11Display), + 0, 0, 1, 1, 0, + BlackPixelOfScreen(DefaultScreenOfDisplay(x11Display)), + BlackPixelOfScreen(DefaultScreenOfDisplay(x11Display))); + return XConnectionNumber(x11Display); + } else + { + kdWarning(1205) << "Can't connect to the X Server.\n"; + kdWarning(1205) << "Might not terminate at end of session.\n"; + return -1; + } +} + +extern "C" { + void signal_exit(int); + void sigchld_handler(int); +} + +void signal_exit(int sig) +{ + kdDebug(1205) << "Exiting on signal " << sig << "\n"; + tdesud_cleanup(); + exit(1); +} + +void sigchld_handler(int) +{ + char c = ' '; + write(pipeOfDeath[1], &c, 1); +} + +/** + * Creates an AF_UNIX socket in socket resource, mode 0600. + */ + +int create_socket() +{ + int sockfd; + ksocklen_t addrlen; + struct stat s; + + TQCString display(getenv("DISPLAY")); + if (display.isEmpty()) + { + kdWarning(1205) << "$DISPLAY is not set\n"; + return -1; + } + + // strip the screen number from the display + display.replace(TQRegExp("\\.[0-9]+$"), ""); + + sock = TQFile::encodeName(locateLocal("socket", TQString("tdesud_%1").arg(static_cast(display)))); + int stat_err=lstat(sock, &s); + if(!stat_err && S_ISLNK(s.st_mode)) { + kdWarning(1205) << "Someone is running a symlink attack on you\n"; + if(unlink(sock)) { + kdWarning(1205) << "Could not delete symlink\n"; + return -1; + } + } + + if (!access(sock, R_OK|W_OK)) + { + KDEsuClient client; + if (client.ping() == -1) + { + kdWarning(1205) << "stale socket exists\n"; + if (unlink(sock)) + { + kdWarning(1205) << "Could not delete stale socket\n"; + return -1; + } + } else + { + kdWarning(1205) << "tdesud is already running\n"; + return -1; + } + + } + + sockfd = socket(PF_UNIX, SOCK_STREAM, 0); + if (sockfd < 0) + { + kdError(1205) << "socket(): " << ERR << "\n"; + return -1; + } + + struct sockaddr_un addr; + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, sock, sizeof(addr.sun_path)-1); + addr.sun_path[sizeof(addr.sun_path)-1] = '\000'; + addrlen = SUN_LEN(&addr); + if (bind(sockfd, (struct sockaddr *)&addr, addrlen) < 0) + { + kdError(1205) << "bind(): " << ERR << "\n"; + return -1; + } + + struct linger lin; + lin.l_onoff = lin.l_linger = 0; + if (setsockopt(sockfd, SOL_SOCKET, SO_LINGER, (char *) &lin, + sizeof(linger)) < 0) + { + kdError(1205) << "setsockopt(SO_LINGER): " << ERR << "\n"; + return -1; + } + + int opt = 1; + if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &opt, + sizeof(opt)) < 0) + { + kdError(1205) << "setsockopt(SO_REUSEADDR): " << ERR << "\n"; + return -1; + } + opt = 1; + if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt, + sizeof(opt)) < 0) + { + kdError(1205) << "setsockopt(SO_KEEPALIVE): " << ERR << "\n"; + return -1; + } + chmod(sock, 0600); + return sockfd; +} + + +/** + * Main program + */ + +int main(int argc, char *argv[]) +{ + prctl(PR_SET_DUMPABLE, 0); + + KAboutData aboutData("tdesud", I18N_NOOP("KDE su daemon"), + Version, I18N_NOOP("Daemon used by tdesu"), + KAboutData::License_Artistic, + "Copyright (c) 1999,2000 Geert Jansen"); + aboutData.addAuthor("Geert Jansen", I18N_NOOP("Author"), + "jansen@kde.org", "http://www.stack.nl/~geertj/"); + KCmdLineArgs::init(argc, argv, &aboutData); + KInstance instance(&aboutData); + + // Set core dump size to 0 + struct rlimit rlim; + rlim.rlim_cur = rlim.rlim_max = 0; + if (setrlimit(RLIMIT_CORE, &rlim) < 0) + { + kdError(1205) << "setrlimit(): " << ERR << "\n"; + exit(1); + } + + // Create the Unix socket. + int sockfd = create_socket(); + if (sockfd < 0) + exit(1); + if (listen(sockfd, 1) < 0) + { + kdError(1205) << "listen(): " << ERR << "\n"; + tdesud_cleanup(); + exit(1); + } + int maxfd = sockfd; + + // Ok, we're accepting connections. Fork to the background. + pid_t pid = fork(); + if (pid == -1) + { + kdError(1205) << "fork():" << ERR << "\n"; + tdesud_cleanup(); + exit(1); + } + if (pid) + exit(0); + + // Make sure we exit when the display gets closed. + int x11Fd = initXconnection(); + maxfd = QMAX(maxfd, x11Fd); + + repo = new Repository; + TQPtrVector handler; + handler.setAutoDelete(true); + + pipe(pipeOfDeath); + maxfd = QMAX(maxfd, pipeOfDeath[0]); + + // Signal handlers + struct sigaction sa; + sa.sa_handler = signal_exit; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGHUP, &sa, 0L); + sigaction(SIGINT, &sa, 0L); + sigaction(SIGTERM, &sa, 0L); + sigaction(SIGQUIT, &sa, 0L); + + sa.sa_handler = sigchld_handler; + sa.sa_flags = SA_NOCLDSTOP; + sigaction(SIGCHLD, &sa, 0L); + sa.sa_handler = SIG_IGN; + sigaction(SIGPIPE, &sa, 0L); + + // Main execution loop + + ksocklen_t addrlen; + struct sockaddr_un clientname; + + fd_set tmp_fds, active_fds; + FD_ZERO(&active_fds); + FD_SET(sockfd, &active_fds); + FD_SET(pipeOfDeath[0], &active_fds); + if (x11Fd != -1) + FD_SET(x11Fd, &active_fds); + + while (1) + { + tmp_fds = active_fds; + if(x11Display) + XFlush(x11Display); + if (select(maxfd+1, &tmp_fds, 0L, 0L, 0L) < 0) + { + if (errno == EINTR) continue; + + kdError(1205) << "select(): " << ERR << "\n"; + exit(1); + } + repo->expire(); + for (int i=0; i<=maxfd; i++) + { + if (!FD_ISSET(i, &tmp_fds)) + continue; + + if (i == pipeOfDeath[0]) + { + char buf[101]; + read(pipeOfDeath[0], buf, 100); + pid_t result; + do + { + int status; + result = waitpid((pid_t)-1, &status, WNOHANG); + if (result > 0) + { + for(int j=handler.size(); j--;) + { + if (handler[j] && (handler[j]->m_pid == result)) + { + handler[j]->m_exitCode = WEXITSTATUS(status); + handler[j]->m_hasExitCode = true; + handler[j]->sendExitCode(); + handler[j]->m_pid = 0; + break; + } + } + } + } + while(result > 0); + } + + if (i == x11Fd) + { + // Discard X events + XEvent event_return; + if (x11Display) + while(XPending(x11Display)) + XNextEvent(x11Display, &event_return); + continue; + } + + if (i == sockfd) + { + // Accept new connection + int fd; + addrlen = 64; + fd = accept(sockfd, (struct sockaddr *) &clientname, &addrlen); + if (fd < 0) + { + kdError(1205) << "accept():" << ERR << "\n"; + continue; + } + if (fd+1 > (int) handler.size()) + handler.resize(fd+1); + handler.insert(fd, new ConnectionHandler(fd)); + maxfd = TQMAX(maxfd, fd); + FD_SET(fd, &active_fds); + continue; + } + + // handle alreay established connection + if (handler[i] && handler[i]->handle() < 0) + { + handler.remove(i); + FD_CLR(i, &active_fds); + } + } + } + kdWarning(1205) << "???\n"; +} + -- cgit v1.2.1