]> code.delx.au - gnu-emacs/blobdiff - lisp/ps-print.el
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-25
[gnu-emacs] / lisp / ps-print.el
index 5c019b4f347fe1b55f2fca828705f7dcf73e6330..330a09de412ac500edfa9a720d215f6f2a8bedc7 100644 (file)
 ;; Maintainer: Kenichi Handa <handa@etl.go.jp> (multi-byte characters)
 ;;     Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Keywords: wp, print, PostScript
-;; Time-stamp: <2004/03/10 18:57:00 vinicius>
-;; Version: 6.6.4
+;; Time-stamp: <2004/07/21 23:12:05 vinicius>
+;; Version: 6.6.5
 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
 
-(defconst ps-print-version "6.6.4"
-  "ps-print.el, v 6.6.4 <2004/03/10 vinicius>
+(defconst ps-print-version "6.6.5"
+  "ps-print.el, v 6.6.5 <2004/07/21 vinicius>
 
 Vinicius's last change version -- this file may have been edited as part of
 Emacs without changes to the version number.  When reporting bugs, please also
@@ -986,7 +986,7 @@ Please send all bug fixes and enhancements to
 ;;      (my-mixed-family
 ;;       (fonts (normal               . "Courier-Bold")
 ;;              (bold                 . "Helvetica")
-;;              (italic               . "Zapf-Chancery-MediumItalic")
+;;              (italic               . "ZapfChancery-MediumItalic")
 ;;              (bold-italic          . "NewCenturySchlbk-BoldItalic")
 ;;              (w3-table-hack-x-face . "LineDrawNormal"))
 ;;       (size . 10.0)
@@ -1010,7 +1010,7 @@ Please send all bug fixes and enhancements to
 ;;       (fonts (w3-table-hack-x-face . "LineDrawNormal")
 ;;              (bold                 . "Helvetica")
 ;;              (bold-italic          . "NewCenturySchlbk-BoldItalic")
-;;              (italic               . "Zapf-Chancery-MediumItalic")
+;;              (italic               . "ZapfChancery-MediumItalic")
 ;;              (normal               . "Courier-Bold"))
 ;;       (avg-char-width . 6.0)
 ;;       (space-width . 6.0)
@@ -1353,6 +1353,9 @@ Please send all bug fixes and enhancements to
 ;; Acknowledgments
 ;; ---------------
 ;;
+;; Thanks to Michael Piotrowski <mxp@dynalabs.de> for improving the DSC
+;; compliance of the generated PostScript.
+;;
 ;; Thanks to Adam Doppelt <adoppelt@avogadro.com> for face mapping suggestion
 ;; for black/white PostScript printers.
 ;;
@@ -1424,7 +1427,7 @@ Please send all bug fixes and enhancements to
 ;; initial port to Emacs 19.  His code is no longer part of ps-print, but his
 ;; work is still appreciated.
 ;;
-;; Thanks to Remi Houdaille and Michel Train, michel@metasoft.fdn.org, for
+;; Thanks to Remi Houdaille and Michel Train <michel@metasoft.fdn.org> for
 ;; adding underline support.  Their code also is no longer part of ps-print,
 ;; but their efforts are not forgotten.
 ;;
@@ -1440,115 +1443,115 @@ Please send all bug fixes and enhancements to
 
 ;;; Code:
 
-(eval-and-compile
-  (require 'lpr)
 
-  (or (featurep 'lisp-float-type)
-      (error "`ps-print' requires floating point support"))
+(require 'lpr)
 
+(or (featurep 'lisp-float-type)
+    (error "`ps-print' requires floating point support"))
 
-  (defvar ps-print-emacs-type
-    (let ((case-fold-search t))
-      (cond ((string-match "XEmacs" emacs-version) 'xemacs)
-           ((string-match "Lucid" emacs-version)
-            (error "`ps-print' doesn't support Lucid"))
-           ((string-match "Epoch" emacs-version)
-            (error "`ps-print' doesn't support Epoch"))
-           (t
-            (unless (and (boundp 'emacs-major-version)
-                         (> emacs-major-version 19))
-              (error "`ps-print' only supports Emacs 20 and higher"))
-            'emacs))))
+
+(defvar ps-print-emacs-type
+  (let ((case-fold-search t))
+    (cond ((string-match "XEmacs" emacs-version) 'xemacs)
+         ((string-match "Lucid" emacs-version)
+          (error "`ps-print' doesn't support Lucid"))
+         ((string-match "Epoch" emacs-version)
+          (error "`ps-print' doesn't support Epoch"))
+         (t
+          (unless (and (boundp 'emacs-major-version)
+                       (> emacs-major-version 19))
+            (error "`ps-print' only supports Emacs 20 and higher"))
+          'emacs))))
 
 
-  ;; For Emacs 20.2 and the earlier version.
+;; For Emacs 20.2 and the earlier version.
 
-  (or (fboundp 'set-buffer-multibyte)
-      (defun set-buffer-multibyte (arg)
-       (setq enable-multibyte-characters arg)))
+(or (fboundp 'set-buffer-multibyte)
+    (defun set-buffer-multibyte (arg)
+      (setq enable-multibyte-characters arg)))
 
-  (or (fboundp 'string-as-unibyte)
-      (defun string-as-unibyte (arg) arg))
+(or (fboundp 'string-as-unibyte)
+    (defun string-as-unibyte (arg) arg))
 
-  (or (fboundp 'string-as-multibyte)
-      (defun string-as-multibyte (arg) arg))
+(or (fboundp 'string-as-multibyte)
+    (defun string-as-multibyte (arg) arg))
 
-  (or (fboundp 'char-charset)
-      (defun char-charset (arg) 'ascii))
+(or (fboundp 'char-charset)
+    (defun char-charset (arg) 'ascii))
 
-  (or (fboundp 'charset-after)
-      (defun charset-after (&optional arg)
-       (char-charset (char-after arg))))
+(or (fboundp 'charset-after)
+    (defun charset-after (&optional arg)
+      (char-charset (char-after arg))))
 
 
-  ;; GNU Emacs
-  (or (fboundp 'line-beginning-position)
-      (defun line-beginning-position (&optional n)
-       (save-excursion
-         (and n (/= n 1) (forward-line (1- n)))
-         (beginning-of-line)
-         (point))))
-
-
-  ;; to avoid compilation gripes
-
-  ;; XEmacs
-  (defalias 'ps-x-color-instance-p              'color-instance-p)
-  (defalias 'ps-x-color-instance-rgb-components 'color-instance-rgb-components)
-  (defalias 'ps-x-color-name                    'color-name)
-  (defalias 'ps-x-color-specifier-p             'color-specifier-p)
-  (defalias 'ps-x-copy-coding-system            'copy-coding-system)
-  (defalias 'ps-x-device-class                  'device-class)
-  (defalias 'ps-x-extent-end-position           'extent-end-position)
-  (defalias 'ps-x-extent-face                   'extent-face)
-  (defalias 'ps-x-extent-priority               'extent-priority)
-  (defalias 'ps-x-extent-start-position         'extent-start-position)
-  (defalias 'ps-x-face-font-instance            'face-font-instance)
-  (defalias 'ps-x-find-coding-system            'find-coding-system)
-  (defalias 'ps-x-font-instance-properties      'font-instance-properties)
-  (defalias 'ps-x-make-color-instance           'make-color-instance)
-  (defalias 'ps-x-map-extents                   'map-extents)
-
-  ;; GNU Emacs
-  (defalias 'ps-e-face-bold-p         'face-bold-p)
-  (defalias 'ps-e-face-italic-p       'face-italic-p)
-  (defalias 'ps-e-next-overlay-change 'next-overlay-change)
-  (defalias 'ps-e-overlays-at         'overlays-at)
-  (defalias 'ps-e-overlay-get         'overlay-get)
-  (defalias 'ps-e-overlay-end         'overlay-end)
-  (defalias 'ps-e-x-color-values      'x-color-values)
-  (defalias 'ps-e-color-values        'color-values)
-  (if (fboundp 'find-composition)
-      (defalias 'ps-e-find-composition 'find-composition)
-    (defalias 'ps-e-find-composition 'ignore))
-
-
-  (defconst ps-windows-system
-    (memq system-type '(emx win32 w32 mswindows ms-dos windows-nt)))
-  (defconst ps-lp-system
-    (memq system-type '(usg-unix-v dgux hpux irix)))
-
-
-  (defun ps-xemacs-color-name (color)
-    (if (ps-x-color-specifier-p color)
-       (ps-x-color-name color)
-      color))
-
-
-  (cond ((eq ps-print-emacs-type 'emacs) ; emacs
-        (defvar mark-active nil)
-        (defun ps-mark-active-p ()
-          mark-active)
-        (defalias 'ps-face-foreground-name 'face-foreground)
-        (defalias 'ps-face-background-name 'face-background)
-        )
-       (t                              ; xemacs
-        (defalias 'ps-mark-active-p 'region-active-p)
-        (defun ps-face-foreground-name (face)
-          (ps-xemacs-color-name (face-foreground face)))
-        (defun ps-face-background-name (face)
-          (ps-xemacs-color-name (face-background face)))
-        )))
+;; GNU Emacs
+(or (fboundp 'line-beginning-position)
+    (defun line-beginning-position (&optional n)
+      (save-excursion
+       (and n (/= n 1) (forward-line (1- n)))
+       (beginning-of-line)
+       (point))))
+
+
+;; to avoid compilation gripes
+
+;; XEmacs
+(defalias 'ps-x-color-instance-p              'color-instance-p)
+(defalias 'ps-x-color-instance-rgb-components 'color-instance-rgb-components)
+(defalias 'ps-x-color-name                    'color-name)
+(defalias 'ps-x-color-specifier-p             'color-specifier-p)
+(defalias 'ps-x-copy-coding-system            'copy-coding-system)
+(defalias 'ps-x-device-class                  'device-class)
+(defalias 'ps-x-extent-end-position           'extent-end-position)
+(defalias 'ps-x-extent-face                   'extent-face)
+(defalias 'ps-x-extent-priority               'extent-priority)
+(defalias 'ps-x-extent-start-position         'extent-start-position)
+(defalias 'ps-x-face-font-instance            'face-font-instance)
+(defalias 'ps-x-find-coding-system            'find-coding-system)
+(defalias 'ps-x-font-instance-properties      'font-instance-properties)
+(defalias 'ps-x-make-color-instance           'make-color-instance)
+(defalias 'ps-x-map-extents                   'map-extents)
+
+;; GNU Emacs
+(defalias 'ps-e-face-bold-p         'face-bold-p)
+(defalias 'ps-e-face-italic-p       'face-italic-p)
+(defalias 'ps-e-next-overlay-change 'next-overlay-change)
+(defalias 'ps-e-overlays-at         'overlays-at)
+(defalias 'ps-e-overlay-get         'overlay-get)
+(defalias 'ps-e-overlay-end         'overlay-end)
+(defalias 'ps-e-x-color-values      'x-color-values)
+(defalias 'ps-e-color-values        'color-values)
+(if (fboundp 'find-composition)
+    (defalias 'ps-e-find-composition 'find-composition)
+  (defalias 'ps-e-find-composition 'ignore))
+
+
+(defconst ps-windows-system
+  (memq system-type '(emx win32 w32 mswindows ms-dos windows-nt)))
+(defconst ps-lp-system
+  (memq system-type '(usg-unix-v dgux hpux irix)))
+
+
+(defun ps-xemacs-color-name (color)
+  (if (ps-x-color-specifier-p color)
+      (ps-x-color-name color)
+    color))
+
+
+(cond ((featurep 'xemacs)              ; xemacs
+       (defalias 'ps-mark-active-p 'region-active-p)
+       (defun ps-face-foreground-name (face)
+        (ps-xemacs-color-name (face-foreground face)))
+       (defun ps-face-background-name (face)
+        (ps-xemacs-color-name (face-background face)))
+       )
+      (t                               ; emacs
+       (defvar mark-active nil)
+       (defun ps-mark-active-p ()
+        mark-active)
+       (defalias 'ps-face-foreground-name 'face-foreground)
+       (defalias 'ps-face-background-name 'face-background)
+       ))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1560,12 +1563,14 @@ Please send all bug fixes and enhancements to
 (defgroup postscript nil
   "PostScript Group"
   :tag "PostScript"
+  :version "20"
   :group 'emacs)
 
 (defgroup ps-print nil
   "PostScript generator for Emacs"
   :link '(emacs-library-link :tag "Source Lisp File" "ps-print.el")
   :prefix "ps-"
+  :version "20"
   :group 'wp
   :group 'postscript)
 
@@ -1573,36 +1578,42 @@ Please send all bug fixes and enhancements to
   "Horizontal page layout"
   :prefix "ps-"
   :tag "Horizontal"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-vertical nil
   "Vertical page layout"
   :prefix "ps-"
   :tag "Vertical"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-headers nil
   "Headers & footers layout"
   :prefix "ps-"
   :tag "Header & Footer"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-font nil
   "Fonts customization"
   :prefix "ps-"
   :tag "Font"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-color nil
   "Color customization"
   :prefix "ps-"
   :tag "Color"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-face nil
   "Faces customization"
   :prefix "ps-"
   :tag "PS Faces"
+  :version "20"
   :group 'ps-print
   :group 'faces)
 
@@ -1610,36 +1621,42 @@ Please send all bug fixes and enhancements to
   "N-up customization"
   :prefix "ps-"
   :tag "N-Up"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-zebra nil
   "Zebra customization"
   :prefix "ps-"
   :tag "Zebra"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-background nil
   "Background customization"
   :prefix "ps-"
   :tag "Background"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-printer '((lpr custom-group))
   "Printer customization"
   :prefix "ps-"
   :tag "Printer"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-page nil
   "Page customization"
   :prefix "ps-"
   :tag "Page"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-miscellany nil
   "Miscellany customization"
   :prefix "ps-"
   :tag "Miscellany"
+  :version "20"
   :group 'ps-print)
 
 
@@ -1666,6 +1683,7 @@ Any other value is treated as `paper'."
                 :tag "Error Handler Message"
                 (const none)   (const paper)
                 (const system) (const paper-and-system))
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-user-defined-prologue nil
@@ -1697,6 +1715,7 @@ As an example for `ps-user-defined-prologue' setting:
   :type '(choice :menu-tag "User Defined Prologue"
                 :tag "User Defined Prologue"
                 (const :tag "none" nil) string symbol)
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-print-prologue-header nil
@@ -1726,6 +1745,7 @@ For more information about PostScript document comments, see:
   :type '(choice :menu-tag "Prologue Header"
                 :tag "Prologue Header"
                 (const :tag "none" nil) string symbol)
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-printer-name (and (boundp 'printer-name)
@@ -1757,6 +1777,7 @@ See also `ps-printer-name-option' for documentation."
                 (const :tag "No Printer Name" t)
                 (file :tag "Print to file")
                 (string :tag "Pipe to ps-lpr-command"))
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-printer-name-option
@@ -1800,6 +1821,7 @@ Novell Netware respectively) are handled specially, using `ps-printer-name' as
 the destination for output; any other program is treated like `lpr' except that
 an explicit filename is given as the last argument."
   :type 'string
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-lpr-switches lpr-switches
@@ -1808,6 +1830,7 @@ an explicit filename is given as the last argument."
                 (choice :menu-tag "PostScript lpr Switch"
                         :tag "PostScript lpr Switch"
                         string symbol (repeat sexp)))
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-print-region-function nil
@@ -1815,6 +1838,7 @@ an explicit filename is given as the last argument."
 See definition of `call-process-region' for calling conventions.  The fourth
 and the sixth arguments are both nil."
   :type '(choice (const nil) function)
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-manual-feed nil
@@ -1822,12 +1846,14 @@ and the sixth arguments are both nil."
 
 If it's nil, automatic feeding takes place."
   :type 'boolean
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-end-with-control-d (and ps-windows-system t)
   "*Non-nil means insert C-d at end of PostScript file generated."
   :version "21.1"
   :type 'boolean
+  :version "20"
   :group 'ps-print-printer)
 
 ;;; Page layout
@@ -1871,6 +1897,7 @@ See `ps-paper-type'."
                       (number :tag "Width")
                       (number :tag "Height")
                       (string :tag "Media")))
+  :version "20"
   :group 'ps-print-page)
 
 ;;;###autoload
@@ -1884,6 +1911,7 @@ example `letter', `legal' or `a4'."
                                 nil
                               (widget-put wid :error "Unknown paper size")
                               wid)))
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-warn-paper-type t
@@ -1891,11 +1919,13 @@ example `letter', `legal' or `a4'."
 
 It's used when `ps-spool-config' is set to `setpagedevice'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-landscape-mode nil
   "*Non-nil means print in landscape mode."
   :type 'boolean
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-print-upside-down nil
@@ -1928,6 +1958,7 @@ See also `ps-even-or-odd-pages'."
                        (cons :tag "Range"
                              (integer :tag "From")
                              (integer :tag "To"))))
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-even-or-odd-pages nil
@@ -1986,6 +2017,7 @@ sheet parity."
                 (const :tag "Only Odd Pages" odd-page)
                 (const :tag "Only Even Sheets" even-sheet)
                 (const :tag "Only Odd Sheets" odd-sheet))
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-print-control-characters 'control-8-bit
@@ -2017,6 +2049,7 @@ Any other value is treated as nil."
                 :tag "Control Char"
                 (const 8-bit)   (const control-8-bit)
                 (const control) (const :tag "nil" nil))
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-n-up-printing 1
@@ -2032,16 +2065,19 @@ Any other value is treated as nil."
               wid :error
               "Number of pages per sheet paper must be between 1 and 100.")
              wid)))
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-n-up-margin (/ (* 72  1.0) 2.54) ; 1 cm
   "*Specify the margin in points between the sheet border and n-up printing."
   :type 'number
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-n-up-border-p t
   "*Non-nil means a border is drawn around each page."
   :type 'boolean
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-n-up-filling 'left-top
@@ -2073,23 +2109,27 @@ Any other value is treated as `left-top'."
                 (const right-top) (const right-bottom)
                 (const top-left)  (const bottom-left)
                 (const top-right) (const bottom-right))
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-number-of-columns (if ps-landscape-mode 2 1)
   "*Specify the number of columns."
   :type 'number
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-zebra-stripes nil
   "*Non-nil means print zebra stripes.
 See also documentation for `ps-zebra-stripe-height' and `ps-zebra-color'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-zebra-stripe-height 3
   "*Number of zebra stripe lines.
 See also documentation for `ps-zebra-stripes' and `ps-zebra-color'."
   :type 'number
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-zebra-color 0.95
@@ -2103,6 +2143,7 @@ See also documentation for `ps-zebra-stripes' and `ps-zebra-stripe-height'."
                       (number :tag "Red")
                       (number :tag "Green")
                       (number :tag "Blue")))
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-zebra-stripe-follow nil
@@ -2146,11 +2187,13 @@ Any other value is treated as nil."
                 (const :tag "Continue on Next Page" follow)
                 (const :tag "Print Only Full Stripe" full)
                 (const :tag "Continue on Full Stripe" full-follow))
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-line-number nil
   "*Non-nil means print line number."
   :type 'boolean
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-line-number-step 1
@@ -2180,6 +2223,7 @@ Any other value is treated as `zebra'."
                 :tag "Line Number Step"
                 (integer :tag "Step Interval")
                 (const :tag "Synchronize Zebra" zebra))
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-line-number-start 1
@@ -2209,6 +2253,7 @@ The values for `ps-line-number-start':
      value of `ps-zebra-strip-height' inclusive.  Use this combination if you
      wish that line number be relative to zebra stripes."
   :type '(integer :tag "Start Step Interval")
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-print-background-image nil
@@ -2255,6 +2300,7 @@ For example, if you wish to print an EPS image on all pages do:
                          (cons :tag "Range"
                                (integer :tag "From")
                                (integer :tag "To"))))))
+  :version "20"
   :group 'ps-print-background)
 
 (defcustom ps-print-background-text nil
@@ -2306,6 +2352,7 @@ For example, if you wish to print text \"Preliminary\" on all pages do:
                          (cons :tag "Range"
                                (integer :tag "From")
                                (integer :tag "To"))))))
+  :version "20"
   :group 'ps-print-background)
 
 ;;; Horizontal layout
@@ -2319,16 +2366,19 @@ For example, if you wish to print text \"Preliminary\" on all pages do:
 (defcustom ps-left-margin   (/ (* 72  2.0) 2.54) ;   2 cm
   "*Left margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-horizontal)
 
 (defcustom ps-right-margin  (/ (* 72  2.0) 2.54) ;   2 cm
   "*Right margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-horizontal)
 
 (defcustom ps-inter-column  (/ (* 72  2.0) 2.54) ;   2 cm
   "*Horizontal space between columns in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-horizontal)
 
 ;;; Vertical layout
@@ -2348,16 +2398,19 @@ For example, if you wish to print text \"Preliminary\" on all pages do:
 (defcustom ps-bottom-margin (/ (* 72  1.5) 2.54) ; 1.5 cm
   "*Bottom margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-top-margin    (/ (* 72  1.5) 2.54) ; 1.5 cm
   "*Top margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-header-offset (/ (* 72  1.0) 2.54) ; 1.0 cm
   "*Vertical space in points (1/72 inch) between the main text and the header."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-header-line-pad 0.15
@@ -2365,11 +2418,13 @@ For example, if you wish to print text \"Preliminary\" on all pages do:
 The insertion is done between the header frame and the text it contains,
 both in the vertical and horizontal directions."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-footer-offset (/ (* 72  1.0) 2.54) ; 1.0 cm
   "*Vertical space in points (1/72 inch) between the main text and the footer."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-footer-line-pad 0.15
@@ -2377,6 +2432,7 @@ both in the vertical and horizontal directions."
 The insertion is done between the footer frame and the text it contains,
 both in the vertical and horizontal directions."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 ;;; Header/Footer setup
@@ -2387,11 +2443,13 @@ By default, the header displays the buffer name, page number, and, if the
 buffer is visiting a file, the file's directory.  Headers are customizable by
 changing variables `ps-left-header' and `ps-right-header'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-print-header-frame t
   "*Non-nil means draw a gaudy frame around the header."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-header-frame-alist
@@ -2471,11 +2529,13 @@ Don't change this alist directly, instead use customization, or `ps-value',
                                      (number :tag "Red")
                                      (number :tag "Green")
                                      (number :tag "Blue"))))))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-header-lines 2
   "*Number of lines to display in page header, when generating PostScript."
   :type 'integer
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-print-footer nil
@@ -2483,14 +2543,14 @@ Don't change this alist directly, instead use customization, or `ps-value',
 By default, the footer displays page number.
 Footers are customizable by changing variables `ps-left-footer' and
 `ps-right-footer'."
-  :version "21.1"
   :type 'boolean
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-print-footer-frame t
   "*Non-nil means draw a gaudy frame around the footer."
-  :version "21.1"
   :type 'boolean
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-footer-frame-alist
@@ -2505,7 +2565,6 @@ Don't change this alist directly, instead use customization, or `ps-value',
 `ps-get', `ps-put' and `ps-del' functions (see them for documentation).
 
 See also `ps-header-frame-alist' for documentation."
-  :version "21.1"
   :type '(repeat
          (choice :menu-tag "Header Frame Element"
                  :tag ""
@@ -2552,12 +2611,13 @@ See also `ps-header-frame-alist' for documentation."
                                      (number :tag "Red")
                                      (number :tag "Green")
                                      (number :tag "Blue"))))))
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-footer-lines 2
   "*Number of lines to display in page footer, when generating PostScript."
-  :version "21.1"
   :type 'integer
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-print-only-one-header nil
@@ -2566,6 +2626,7 @@ This is useful when printing more than one column, so it is possible to have
 only one header/footer over all columns or one header/footer per column.
 See also `ps-print-header' and `ps-print-footer'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-switch-header 'duplex
@@ -2588,6 +2649,7 @@ See also `ps-print-header' and `ps-print-footer'."
                 (const :tag "Never Switch" nil)
                 (const :tag "Always Switch" t)
                 (const :tag "Switch When Duplexing" duplex))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-show-n-of-n t
@@ -2595,6 +2657,7 @@ See also `ps-print-header' and `ps-print-footer'."
 NOTE: page numbers are displayed as part of headers,
       see variable `ps-print-header'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-spool-config
@@ -2630,6 +2693,7 @@ WARNING: The setpagedevice PostScript operator affects ghostview utility when
                 :tag "Spool Config"
                 (const lpr-switches) (const setpagedevice)
                 (const :tag "nil" nil))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-spool-duplex nil         ; Not many people have duplex printers,
@@ -2643,6 +2707,7 @@ even-numbered pages.
 
 See also `ps-spool-tumble'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-spool-tumble nil
@@ -2653,6 +2718,7 @@ binding at the top or bottom.
 
 It has effect only when `ps-spool-duplex' is non-nil."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 ;;; Fonts
@@ -2754,8 +2820,16 @@ It has effect only when `ps-spool-duplex' is non-nil."
      (line-height . 9.63)
      (space-width . 2.78)
      (avg-char-width . 2.78))
+    (ZapfChancery-MediumItalic
+     (fonts (normal . "ZapfChancery-MediumItalic"))
+     (size . 10.0)
+     (line-height . 11.45)
+     (space-width . 2.2)
+     (avg-char-width . 4.10811))
+    ;; We keep this wrong entry name (but with correct font name) for
+    ;; backward compatibility.
     (Zapf-Chancery-MediumItalic
-     (fonts (normal . "Zapf-Chancery-MediumItalic"))
+     (fonts (normal . "ZapfChancery-MediumItalic"))
      (size . 10.0)
      (line-height . 11.45)
      (space-width . 2.2)
@@ -2803,11 +2877,13 @@ uses the fonts resident in your printer."
                (cons :format "%v"
                      (const :format "" avg-char-width)
                      (number :tag "Average Character Width"))))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-font-family 'Courier
   "*Font family name for ordinary text, when generating PostScript."
   :type 'symbol
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-font-size   '(7 . 8.5)
@@ -2818,11 +2894,13 @@ uses the fonts resident in your printer."
                 (cons :tag "Landscape/Portrait"
                       (number :tag "Landscape Text Size")
                       (number :tag "Portrait Text Size")))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-header-font-family      'Helvetica
   "*Font family name for text in the header, when generating PostScript."
   :type 'symbol
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-header-font-size       '(10 . 12)
@@ -2833,6 +2911,7 @@ uses the fonts resident in your printer."
                 (cons :tag "Landscape/Portrait"
                       (number :tag "Landscape Header Size")
                       (number :tag "Portrait Header Size")))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-header-title-font-size '(12 . 14)
@@ -2843,23 +2922,24 @@ uses the fonts resident in your printer."
                 (cons :tag "Landscape/Portrait"
                       (number :tag "Landscape Header Title Size")
                       (number :tag "Portrait Header Title Size")))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-footer-font-family      'Helvetica
   "*Font family name for text in the footer, when generating PostScript."
-  :version "21.1"
   :type 'symbol
+  :version "21.1"
   :group 'ps-print-font)
 
 (defcustom ps-footer-font-size       '(10 . 12)
   "*Font size, in points, for text in the footer, when generating PostScript."
-  :version "21.1"
   :type '(choice :menu-tag "Footer Font Size"
                 :tag "Footer Font Size"
                 (number :tag "Footer Size")
                 (cons :tag "Landscape/Portrait"
                       (number :tag "Landscape Footer Size")
                       (number :tag "Portrait Footer Size")))
+  :version "21.1"
   :group 'ps-print-font)
 
 (defcustom ps-line-number-color      "black"
@@ -2879,6 +2959,7 @@ uses the fonts resident in your printer."
 (defcustom ps-line-number-font      "Times-Italic"
   "*Font for line-number, when generating PostScript."
   :type 'string
+  :version "20"
   :group 'ps-print-font
   :group 'ps-print-miscellany)
 
@@ -2890,6 +2971,7 @@ uses the fonts resident in your printer."
                 (cons :tag "Landscape/Portrait"
                       (number :tag "Landscape Font Size")
                       (number :tag "Portrait Font Size")))
+  :version "20"
   :group 'ps-print-font
   :group 'ps-print-miscellany)
 
@@ -2920,6 +3002,7 @@ Any other value is treated as t."
                 (const :tag "Do NOT Print Color" nil)
                 (const :tag "Print Always Color" t)
                 (const :tag "Print Black/White Color" black-white))
+  :version "20"
   :group 'ps-print-color)
 
 (defcustom ps-default-fg '(0.0 0.0 0.0) ; black
@@ -2959,6 +3042,7 @@ It's used only when `ps-print-color-p' is non-nil."
                       (number :tag "Red")
                       (number :tag "Green")
                       (number :tag "Blue")))
+  :version "20"
   :group 'ps-print-color)
 
 (defcustom ps-default-bg '(1.0 1.0 1.0) ; white
@@ -3000,6 +3084,7 @@ See also `ps-use-face-background'."
                       (number :tag "Red")
                       (number :tag "Green")
                       (number :tag "Blue")))
+  :version "20"
   :group 'ps-print-color)
 
 (defcustom ps-auto-font-detect t
@@ -3007,6 +3092,7 @@ See also `ps-use-face-background'."
 If nil, we rely solely on the lists `ps-bold-faces', `ps-italic-faces', and
 `ps-underlined-faces'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-black-white-faces
@@ -3046,6 +3132,7 @@ This variable is used only when `ps-print-color-p' is set to `black-white'."
                                (const shadow)
                                (const box)
                                (const outline)))))
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-bold-faces
@@ -3058,6 +3145,7 @@ This variable is used only when `ps-print-color-p' is set to `black-white'."
   "*A list of the \(non-bold\) faces that should be printed in bold font.
 This applies to generating PostScript."
   :type '(repeat face)
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-italic-faces
@@ -3070,6 +3158,7 @@ This applies to generating PostScript."
   "*A list of the \(non-italic\) faces that should be printed in italic font.
 This applies to generating PostScript."
   :type '(repeat face)
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-underlined-faces
@@ -3080,6 +3169,7 @@ This applies to generating PostScript."
   "*A list of the \(non-underlined\) faces that should be printed underlined.
 This applies to generating PostScript."
   :type '(repeat face)
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-use-face-background nil
@@ -3099,6 +3189,7 @@ Any other value will be treated as t."
                 (repeat :menu-tag "Face Background List"
                         :tag "Face Background List"
                         face))
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-left-header
@@ -3122,6 +3213,7 @@ If symbols are unbounded, they are silently ignored."
   :type '(repeat (choice :menu-tag "Left Header"
                         :tag "Left Header"
                         string symbol))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-right-header
@@ -3152,6 +3244,7 @@ You can also create your own time stamp function by using `format-time-string'
   :type '(repeat (choice :menu-tag "Right Header"
                         :tag "Right Header"
                         string symbol))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-left-footer
@@ -3172,10 +3265,10 @@ should be a string to be inserted into the array.  In either case, function or
 variable, the string value has PostScript string delimiters added to it.
 
 If symbols are unbounded, they are silently ignored."
-  :version "21.1"
   :type '(repeat (choice :menu-tag "Left Footer"
                         :tag "Left Footer"
                         string symbol))
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-right-footer
@@ -3203,15 +3296,16 @@ There are the following basic functions implemented:
 
 You can also create your own time stamp function by using `format-time-string'
 \(which see)."
-  :version "21.1"
   :type '(repeat (choice :menu-tag "Right Footer"
                         :tag "Right Footer"
                         string symbol))
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-razzle-dazzle t
   "*Non-nil means report progress while formatting buffer."
   :type 'boolean
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-adobe-tag "%!PS-Adobe-3.0\n"
@@ -3219,6 +3313,7 @@ You can also create your own time stamp function by using `format-time-string'
 By default, `ps-adobe-tag' contains the standard identifier.  Some printers
 require slightly different versions of this line."
   :type 'string
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-build-face-reference t
@@ -3233,6 +3328,7 @@ You should set this value back to t after you change the attributes of any
 face, or create new faces.  Most users shouldn't have to worry about its
 setting, though."
   :type 'boolean
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-always-build-face-reference nil
@@ -3242,28 +3338,30 @@ If this variable is non-nil, ps-print will rebuild its internal reference lists
 of bold and italic faces *every* time one of the ...-with-faces commands is
 called.  Most users shouldn't need to set this variable."
   :type 'boolean
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-banner-page-when-duplexing nil
   "*Non-nil means the very first page is skipped.
 It's like the very first character of buffer (or region) is ^L (\\014)."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-postscript-code-directory
-  (or (cond
-       ((eq ps-print-emacs-type 'emacs)        ; emacs
-       data-directory)
-       ((fboundp 'locate-data-directory) ; xemacs
-       (locate-data-directory "ps-print"))
-       ((boundp 'data-directory)       ; xemacs
-       data-directory)
-       (t                              ; don't know what to do
-       nil))
+  (or (if (featurep 'xemacs)
+         (cond ((fboundp 'locate-data-directory) ; xemacs
+                (locate-data-directory "ps-print"))
+               ((boundp 'data-directory) ; xemacs
+                data-directory)
+               (t                      ; don't know what to do
+                nil))
+       data-directory)                 ; emacs
       (error "`ps-postscript-code-directory' isn't set properly"))
   "*Directory where it's located the PostScript prologue file used by ps-print.
 By default, this directory is the same as in the variable `data-directory'."
   :type 'directory
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-line-spacing 0
@@ -3502,6 +3600,7 @@ The table depends on the current ps-print setup."
      (list
       (concat "\n;;; ps-print version " ps-print-version "\n")
       ";; internal vars"
+      (ps-comment-string "emacs-version      " emacs-version)
       (ps-comment-string "ps-print-emacs-type" ps-print-emacs-type)
       (ps-comment-string "ps-windows-system  " ps-windows-system)
       (ps-comment-string "ps-lp-system       " ps-lp-system)
@@ -3746,106 +3845,105 @@ It can be retrieved with `(ps-get ALIST-SYM KEY)'."
   (format-time-string "%T"))
 
 
-(eval-and-compile
-  (and (eq ps-print-emacs-type 'xemacs)
-       ;; XEmacs change: Need to check for emacs-major-version too.
-       (or (< emacs-major-version 19)
-          (and (= emacs-major-version 19) (< emacs-minor-version 12)))
-       (setq ps-print-color-p nil))
-
-
-  ;; Return t if the device (which can be changed during an emacs session)
-  ;; can handle colors.
-  ;; This function is not yet implemented for GNU emacs.
-  (cond ((and (eq ps-print-emacs-type 'xemacs)
-             ;; XEmacs change: Need to check for emacs-major-version too.
-             (or (> emacs-major-version 19)
-                 (and (= emacs-major-version 19)
-                      (>= emacs-minor-version 12)))) ; xemacs >= 19.12
-        (defun ps-color-device ()
-          (eq (ps-x-device-class) 'color)))
-
-       (t                              ; emacs
-        (defun ps-color-device ()
-          (if (fboundp 'color-values)
-              (ps-e-color-values "Green")
-            t))))
-
-
-  (defun ps-mapper (extent list)
-    (nconc list
-          (list (list (ps-x-extent-start-position extent) 'push extent)
-                (list (ps-x-extent-end-position extent) 'pull extent)))
-    nil)
-
-  (defun ps-extent-sorter (a b)
-    (< (ps-x-extent-priority a) (ps-x-extent-priority b)))
-
-  (defun ps-xemacs-face-kind-p (face kind kind-regex)
-    (let* ((frame-font (or (ps-x-face-font-instance face)
-                          (ps-x-face-font-instance 'default)))
-          (kind-cons
-           (and frame-font
-                (assq kind
-                      (ps-x-font-instance-properties frame-font))))
-          (kind-spec (cdr-safe kind-cons))
-          (case-fold-search t))
-      (and kind-spec (string-match kind-regex kind-spec))))
-
-  (cond ((eq ps-print-emacs-type 'emacs) ; emacs
-
-        (defun ps-color-values (x-color)
+(and (featurep 'xemacs)
+     ;; XEmacs change: Need to check for emacs-major-version too.
+     (or (< emacs-major-version 19)
+        (and (= emacs-major-version 19) (< emacs-minor-version 12)))
+     (setq ps-print-color-p nil))
+
+
+;; Return t if the device (which can be changed during an emacs session)
+;; can handle colors.
+;; This function is not yet implemented for GNU emacs.
+(cond ((and (featurep 'xemacs)
+           ;; XEmacs change: Need to check for emacs-major-version too.
+           (or (> emacs-major-version 19)
+               (and (= emacs-major-version 19)
+                    (>= emacs-minor-version 12)))) ; xemacs >= 19.12
+       (defun ps-color-device ()
+        (eq (ps-x-device-class) 'color)))
+
+      (t                               ; emacs
+       (defun ps-color-device ()
+        (if (fboundp 'color-values)
+            (ps-e-color-values "Green")
+          t))))
+
+
+(defun ps-mapper (extent list)
+  (nconc list
+        (list (list (ps-x-extent-start-position extent) 'push extent)
+              (list (ps-x-extent-end-position extent) 'pull extent)))
+  nil)
+
+(defun ps-extent-sorter (a b)
+  (< (ps-x-extent-priority a) (ps-x-extent-priority b)))
+
+(defun ps-xemacs-face-kind-p (face kind kind-regex)
+  (let* ((frame-font (or (ps-x-face-font-instance face)
+                        (ps-x-face-font-instance 'default)))
+        (kind-cons
+         (and frame-font
+              (assq kind
+                    (ps-x-font-instance-properties frame-font))))
+        (kind-spec (cdr-safe kind-cons))
+        (case-fold-search t))
+    (and kind-spec (string-match kind-regex kind-spec))))
+
+(cond ((featurep 'xemacs)              ; xemacs
+
+       ;; to avoid XEmacs compilation gripes
+       (defvar coding-system-for-write   nil)
+       (defvar coding-system-for-read    nil)
+       (defvar buffer-file-coding-system nil)
+
+       (and (fboundp 'find-coding-system)
+           (or (ps-x-find-coding-system 'raw-text-unix)
+               (ps-x-copy-coding-system 'no-conversion-unix 'raw-text-unix)))
+
+       (defun ps-color-values (x-color)
+        (let ((color (ps-xemacs-color-name x-color)))
           (cond
-           ((fboundp 'color-values)
-            (ps-e-color-values x-color))
            ((fboundp 'x-color-values)
-            (ps-e-x-color-values x-color))
+            (ps-e-x-color-values color))
+           ((and (fboundp 'color-instance-rgb-components)
+                 (ps-color-device))
+            (ps-x-color-instance-rgb-components
+             (if (ps-x-color-instance-p x-color)
+                 x-color
+               (ps-x-make-color-instance color))))
            (t
-            (error "No available function to determine X color values"))))
-
-        (defun ps-face-bold-p (face)
-          (or (ps-e-face-bold-p face)
-              (memq face ps-bold-faces)))
+            (error "No available function to determine X color values")))))
+
+       (defun ps-face-bold-p (face)
+        (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
+            (memq face ps-bold-faces))) ; Kludge-compatible
+
+       (defun ps-face-italic-p (face)
+        (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
+            (ps-xemacs-face-kind-p face 'SLANT "i\\|o")
+            (memq face ps-italic-faces))) ; Kludge-compatible
+       )
+
+      (t                               ; emacs
+
+       (defun ps-color-values (x-color)
+        (cond
+         ((fboundp 'color-values)
+          (ps-e-color-values x-color))
+         ((fboundp 'x-color-values)
+          (ps-e-x-color-values x-color))
+         (t
+          (error "No available function to determine X color values"))))
 
-        (defun ps-face-italic-p (face)
-          (or (ps-e-face-italic-p face)
-              (memq face ps-italic-faces)))
-        )
+       (defun ps-face-bold-p (face)
+        (or (ps-e-face-bold-p face)
+            (memq face ps-bold-faces)))
 
-       (t                              ; xemacs
-
-        ;; to avoid XEmacs compilation gripes
-        (defvar coding-system-for-write   nil)
-        (defvar coding-system-for-read    nil)
-        (defvar buffer-file-coding-system nil)
-
-        (and (fboundp 'find-coding-system)
-             (or (ps-x-find-coding-system 'raw-text-unix)
-                 (ps-x-copy-coding-system 'no-conversion-unix 'raw-text-unix)))
-
-        (defun ps-color-values (x-color)
-          (let ((color (ps-xemacs-color-name x-color)))
-            (cond
-             ((fboundp 'x-color-values)
-              (ps-e-x-color-values color))
-             ((and (fboundp 'color-instance-rgb-components)
-                   (ps-color-device))
-              (ps-x-color-instance-rgb-components
-               (if (ps-x-color-instance-p x-color)
-                   x-color
-                 (ps-x-make-color-instance color))))
-             (t
-              (error "No available function to determine X color values")))))
-
-        (defun ps-face-bold-p (face)
-          (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
-              (memq face ps-bold-faces))) ; Kludge-compatible
-
-        (defun ps-face-italic-p (face)
-          (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
-              (ps-xemacs-face-kind-p face 'SLANT "i\\|o")
-              (memq face ps-italic-faces))) ; Kludge-compatible
-        )))
+       (defun ps-face-italic-p (face)
+        (or (ps-e-face-italic-p face)
+            (memq face ps-italic-faces)))
+       ))
 
 
 (defvar ps-print-color-scale 1.0)
@@ -3928,15 +4026,14 @@ Note: No major/minor-mode is activated and no local variables are evaluated for
 
 (defvar ps-color-p nil)
 (defvar ps-color-format
-  (if (eq ps-print-emacs-type 'emacs)
+  (if (featurep 'xemacs)
+      ;; XEmacs will have to make do with %s (princ) for floats.
+      "%s %s %s"
 
-      ;; Emacs understands the %f format; we'll use it to limit color RGB
-      ;; values to three decimals to cut down some on the size of the
-      ;; PostScript output.
-      "%0.3f %0.3f %0.3f"
-
-    ;; XEmacs will have to make do with %s (princ) for floats.
-    "%s %s %s"))
+    ;; Emacs understands the %f format; we'll use it to limit color RGB
+    ;; values to three decimals to cut down some on the size of the
+    ;; PostScript output.
+    "%0.3f %0.3f %0.3f"))
 
 ;; These values determine how much print-height to deduct when headers/footers
 ;; are turned on.  This is a pretty clumsy way of handling it, but it'll do for
@@ -4162,6 +4259,7 @@ If EXTENSION is any other symbol, it is ignored."
 
 (defun ps-message-log-max ()
   (and (not (string= (buffer-name) "*Messages*"))
+       (boundp 'message-log-max)
        message-log-max))
 
 
@@ -4210,7 +4308,7 @@ If EXTENSION is any other symbol, it is ignored."
 
 
 (defvar ps-printing-region nil
-  "Variable used to indicate if the region that ps-print is printing.
+  "Variable used to indicate the region that ps-print is printing.
 It is a cons, the car of which is the line number where the region begins, and
 its cdr is the total number of lines in the buffer.  Formatting functions can
 use this information to print the original line number (and not the number of
@@ -4719,7 +4817,7 @@ page-height == ((floor print-height ((th + ls) * zh)) * ((th + ls) * zh)) - th
   (save-excursion
     (set-buffer ps-spool-buffer)
     (goto-char (point-max))
-    (insert-file fname)))
+    (insert-file-contents fname)))
 
 ;; These functions insert the arrays that define the contents of the headers.
 
@@ -4819,9 +4917,9 @@ page-height == ((floor print-height ((th + ls) * zh)) * ((th + ls) * zh)) - th
 ;; to three decimals to cut down some on the size of the PostScript output.
 ;; XEmacs will have to make do with %s (princ) for floats.
 
-(defvar ps-float-format (if (eq ps-print-emacs-type 'emacs)
-                           "%0.3f "    ; emacs
-                         "%s "))       ; xemacs
+(defvar ps-float-format (if (featurep 'xemacs)
+                           "%s "       ; xemacs
+                         "%0.3f "))    ; emacs
 
 
 (defun ps-float-format (value &optional default)
@@ -5396,9 +5494,9 @@ XSTART YSTART are the relative position for the first page in a sheet.")
      ps-adobe-tag
      "%%Title: " (buffer-name)         ; Take job name from name of
                                        ; first buffer printed
-     "\n%%Creator: " (user-full-name)
-     " (using ps-print v" ps-print-version
-     ")\n%%CreationDate: " (format-time-string "%T %b %d %Y")
+     "\n%%Creator: ps-print v" ps-print-version
+     "\n%%For: " (user-full-name)
+     "\n%%CreationDate: " (format-time-string "%T %b %d %Y")
      "\n%%Orientation: "
      (if ps-landscape-mode "Landscape" "Portrait")
      "\n%%DocumentNeededResources: font Times-Roman Times-Italic\n%%+ font "
@@ -5406,8 +5504,11 @@ XSTART YSTART are the relative position for the first page in a sheet.")
                (ps-remove-duplicates
                 (append (ps-fonts 'ps-font-for-text)
                         (list (ps-font 'ps-font-for-header 'normal)
-                              (ps-font 'ps-font-for-header 'bold))))
+                              (ps-font 'ps-font-for-header 'bold)
+                              (ps-font 'ps-font-for-footer 'normal)
+                              (ps-font 'ps-font-for-footer 'bold))))
                "\n%%+ font ")
+     "\n%%DocumentSuppliedResources: procset PSPrintUserDefinedPrologue-" (user-login-name) " 0 0"
      "\n%%DocumentMedia: " (ps-page-dimensions-get-media dimensions)
      (format " %d" (round (ps-page-dimensions-get-width dimensions)))
      (format " %d" (round (ps-page-dimensions-get-height dimensions)))
@@ -5427,11 +5528,11 @@ XSTART YSTART are the relative position for the first page in a sheet.")
                                       ps-error-handler-alist))
                           1))          ; send to paper
               ps-print-prologue-0
-              "\n%%BeginProcSet: UserDefinedPrologue\n\n")
+              "\n%%BeginResource: procset PSPrintUserDefinedPrologue-" (user-login-name) " 0 0\n\n")
 
     (ps-insert-string ps-user-defined-prologue)
 
-    (ps-output "\n%%EndProcSet\n\n")
+    (ps-output "\n%%EndResource\n\n")
 
     (ps-output-boolean "LandscapeMode      "
                       (or ps-landscape-mode
@@ -5537,26 +5638,37 @@ XSTART YSTART are the relative position for the first page in a sheet.")
     (setq ps-background-all-pages (nreverse ps-background-all-pages)
          ps-background-pages (nreverse ps-background-pages))
 
-    (ps-output "\n" ps-print-prologue-1)
-
-    (ps-output "\n/printGlobalBackground{\n")
+    (ps-output "\n" ps-print-prologue-1
+              "\n/printGlobalBackground{\n")
     (mapcar 'ps-output ps-background-all-pages)
-    (ps-output "}def\n/printLocalBackground{\n}def\n")
-
-    ;; Header/line number fonts
-    (ps-output (format "/h0 %s(%s)cvn DefFont\n" ; /h0 14/Helvetica-Bold DefFont
-                      ps-header-title-font-size-internal
-                      (ps-font 'ps-font-for-header 'bold))
-              (format "/h1 %s(%s)cvn DefFont\n" ; /h1 12/Helvetica DefFont
-                      ps-header-font-size-internal
-                      (ps-font 'ps-font-for-header 'normal))
-              (format "/L0 %s(%s)cvn DefFont\n" ; /L0 6/Times-Italic DefFont
-                      (ps-get-font-size 'ps-line-number-font-size)
-                      ps-line-number-font)
-              (format "/H0 %s(%s)cvn DefFont\n" ; /H0 12/Helvetica DefFont
-                      ps-footer-font-size-internal
-                      (ps-font 'ps-font-for-footer 'normal))
-              "\n\n% ---- These lines must be kept together because...
+    (ps-output
+     "}def\n/printLocalBackground{\n}def\n"
+     "\n%%EndProlog\n\n%%BeginSetup\n"
+     "\n%%IncludeResource: font Times-Roman"
+     "\n%%IncludeResource: font Times-Italic"
+     "\n%%IncludeResource: font "
+     (mapconcat 'identity
+               (ps-remove-duplicates
+                (append (ps-fonts 'ps-font-for-text)
+                        (list (ps-font 'ps-font-for-header 'normal)
+                              (ps-font 'ps-font-for-header 'bold)
+                              (ps-font 'ps-font-for-footer 'normal)
+                              (ps-font 'ps-font-for-footer 'bold))))
+               "\n%%IncludeResource: font ")
+     ;; Header/line number fonts
+     (format "\n/h0 %s(%s)cvn DefFont\n" ; /h0 14/Helvetica-Bold DefFont
+            ps-header-title-font-size-internal
+            (ps-font 'ps-font-for-header 'bold))
+     (format "/h1 %s(%s)cvn DefFont\n" ; /h1 12/Helvetica DefFont
+            ps-header-font-size-internal
+            (ps-font 'ps-font-for-header 'normal))
+     (format "/L0 %s(%s)cvn DefFont\n" ; /L0 6/Times-Italic DefFont
+            (ps-get-font-size 'ps-line-number-font-size)
+            ps-line-number-font)
+     (format "/H0 %s(%s)cvn DefFont\n" ; /H0 12/Helvetica DefFont
+            ps-footer-font-size-internal
+            (ps-font 'ps-font-for-footer 'normal))
+     "\n\n% ---- These lines must be kept together because...
 
 /h0 F
 /HeaderTitleLineHeight FontHeight def
@@ -5586,7 +5698,6 @@ XSTART YSTART are the relative position for the first page in a sheet.")
       (ps-output (format "/SpaceWidthRatio %f def\n"
                         (/ (ps-lookup 'space-width) (ps-lookup 'size)))))
 
-    (ps-output "\n%%EndProlog\n\n%%BeginSetup\n")
     (unless (eq ps-spool-config 'lpr-switches)
       (ps-output "\n%%BeginFeature: *Duplex "
                 (ps-boolean-capitalized ps-spool-duplex)
@@ -6280,15 +6391,17 @@ If FACE is not a valid face name, it is used default face."
                (ps-face-background-name face))))
 
 
+;; to avoid compilation gripes
+(defalias 'ps-jitify 'jit-lock-fontify-now)
+(defalias 'ps-lazify 'lazy-lock-fontify-region)
+
+
 ;; to avoid compilation gripes
 (defun ps-print-ensure-fontified (start end)
-  (cond
-   ((and (boundp 'jit-lock-mode) (symbol-value 'jit-lock-mode))
-    (defalias 'ps-jitify 'jit-lock-fontify-now) ; avoid compilation gripes
-    (ps-jitify start end))
-   ((and (boundp 'lazy-lock-mode) (symbol-value 'lazy-lock-mode))
-    (defalias 'ps-lazify 'lazy-lock-fontify-region) ; avoid compilation gripes
-    (ps-lazify start end))))
+  (cond ((and (boundp 'jit-lock-mode) (symbol-value 'jit-lock-mode))
+        (ps-jitify start end))
+       ((and (boundp 'lazy-lock-mode) (symbol-value 'lazy-lock-mode))
+        (ps-lazify start end))))
 
 
 (defun ps-generate-postscript-with-faces (from to)
@@ -6314,7 +6427,7 @@ If FACE is not a valid face name, it is used default face."
     (let ((face 'default)
          (position to))
       (cond
-       ((eq ps-print-emacs-type 'xemacs)
+       ((featurep 'xemacs)             ; xemacs
        ;; Build the list of extents...
        (let ((a (cons 'dummy nil))
              record type extent extent-list)
@@ -6358,7 +6471,7 @@ If FACE is not a valid face name, it is used default face."
                  from position
                  a (cdr a)))))
 
-       ((eq ps-print-emacs-type 'emacs)
+       (t                              ; emacs
        (let ((property-change from)
              (overlay-change from)
              (save-buffer-invisibility-spec buffer-invisibility-spec)
@@ -6636,11 +6749,11 @@ If FACE is not a valid face name, it is used default face."
 ;; Don't use it unless you understand what it does!
 
 (defmacro ps-prsc ()
-  `(if (eq ps-print-emacs-type 'emacs) [f22] 'f22))
+  `(if (featurep 'xemacs) 'f22           [f22]))
 (defmacro ps-c-prsc ()
-  `(if (eq ps-print-emacs-type 'emacs) [C-f22] '(control f22)))
+  `(if (featurep 'xemacs) '(control f22) [C-f22]))
 (defmacro ps-s-prsc ()
-  `(if (eq ps-print-emacs-type 'emacs) [S-f22] '(shift f22)))
+  `(if (featurep 'xemacs) '(shift f22)   [S-f22]))
 
 ;; A hook to bind to `rmail-mode-hook' to locally bind prsc and set the
 ;; `ps-left-headers' specially for mail messages.