summaryrefslogtreecommitdiff
path: root/Master/xemtex/doc/ghostscript/Language.htm
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2005-12-28 00:07:27 +0000
committerKarl Berry <karl@freefriends.org>2005-12-28 00:07:27 +0000
commit30dd9f517c9c093ff3319061647a4555264f7914 (patch)
tree0d7a349bf99be5a42cc9c5a80a30f3b7136c4ccd /Master/xemtex/doc/ghostscript/Language.htm
parent08ab8dce83f53b0f915cb66a37bbc8478b22c307 (diff)
trunk
git-svn-id: svn://tug.org/texlive/trunk@9 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/xemtex/doc/ghostscript/Language.htm')
-rw-r--r--Master/xemtex/doc/ghostscript/Language.htm1897
1 files changed, 1897 insertions, 0 deletions
diff --git a/Master/xemtex/doc/ghostscript/Language.htm b/Master/xemtex/doc/ghostscript/Language.htm
new file mode 100644
index 00000000000..b47f003bec9
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Language.htm
@@ -0,0 +1,1897 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript and the PostScript language</title>
+<!-- $Id: Language.htm,v 1.34.2.16.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: language.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript and the PostScript language</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Capabilities">Ghostscript's capabilities in relation to PostScript</a>
+<li><a href="#Implementation_limits">Implementation limits</a>
+<ul>
+<li><a href="#Architectural_limits">Architectural limits</a>
+<li><a href="#Typical_memory_limits">Typical memory limits in LanguageLevel 1</a>
+<li><a href="#VM_consumption">Other differences in VM consumption</a>
+</ul>
+<li><a href="#Additional_operators">Additional operators in Ghostscript</a>
+<ul>
+<li><a href="#Graphics_and_text">Graphics and text operators</a>
+<ul>
+<li><a href="#Transparency">Transparency</a>
+<ul>
+<li><a href="#Transparency_graphics_state_operators">Graphics state operators</a>
+<li><a href="#Transparency_rendering_stack_operators">Rendering stack operators</a>
+<li><a href="#Transparency_ImageType">New ImageType</a>
+</ul>
+<li><a href="#Graphics_state">Other graphics state operators</a>
+<li><a href="#Path">Path operators</a>
+<li><a href="#Painting">Painting operators</a>
+<li><a href="#Character">Character operators</a>
+</ul>
+<li><a href="#Other">Other operators</a>
+<ul>
+<li><a href="#Mathematical">Mathematical operators</a>
+<li><a href="#Dictionary">Dictionary operators</a>
+<li><a href="#String">String and name operators</a>
+<li><a href="#Relational">Relational operators</a>
+<li><a href="#File">File operators</a>
+<li><a href="#Virtual_memory">Virtual memory operators</a>
+<li><a href="#Miscellaneous">Miscellaneous operators</a>
+<li><a href="#Device">Device operators</a>
+</ul>
+</ul>
+<li><a href="#Filters">Filters</a>
+<ul>
+<li><a href="#Standard_filters">Standard filters</a>
+<li><a href="#Non_standard_filters">Non-standard filters</a>
+<li><a href="#Unstable_filters">Unstable filters</a>
+</ul>
+<li><a href="#Device_parameters">Device parameters</a>
+<li><a href="#User_parameters">User parameters</a>
+<li><a href="#Miscellaneous_additions">Miscellaneous additions</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Capabilities"></a>Ghostscript's capabilities in relation to PostScript</h2>
+
+<p>
+The Ghostscript interpreter, except as noted below, is intended to execute
+properly any source program written in the (LanguageLevel 3)
+<b>PostScript</b> language as defined in the <cite>PostScript
+Language Reference, Third Edition</cite> (ISBN 0-201-37922-8) published by
+Addison-Wesley in mid-1999. However, the interpreter is configurable in
+ways that can restrict it to various subsets of this language.
+Specifically, the base interpreter accepts the Level 1 subset of the
+PostScript language, as defined in the first edition of the <cite>PostScript
+Language Reference Manual</cite> (ISBN 0-201-10174-2) Addison-Wesley 1985,
+plus the file system, version 25.0 language, and miscellaneous additions
+listed in sections A.1.6, A.1.7, and A.1.8 of the Second Edition
+respectively, including allowing a string operand for the
+"<b><tt>status</tt></b>" operator. The base interpreter may be configured
+(see the <a href="Make.htm">documentation on building Ghostscript</a> for
+how to configure it) by adding any combination of the following:
+
+<ul>
+<li>The ability to process PostScript Type 1 fonts. This facility is
+normally included in the interpreter.
+
+<li>The CMYK color extensions listed in section A.1.4 of the Second Edition
+(including <b><tt>colorimage</tt></b>). These facilities are available
+only if the <b><tt>color</tt></b>, <b><tt>dps</tt></b>, or
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>The Display PostScript extensions listed in section A.1.3 of the Second
+Edition, but excluding the operators listed in section A.1.2. These
+facilities are available only if the <b><tt>dps</tt></b> feature or the
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>The composite font extensions listed in section A.1.5 of the Second
+Edition, and the ability to handle Type 0 fonts. These facilities are
+available only if the <b><tt>compfont</tt></b> feature or the
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>The ability to load TrueType fonts and to handle PostScript Type 42
+(encapsulated TrueType) fonts. These facilities are available only if the
+<b><tt>ttfont</tt></b> feature was selected when Ghostscript was built.
+
+<li>The PostScript Level 2 "filter" facilities except the
+<b><tt>DCTEncode</tt></b> and <b><tt>DCTDecode</tt></b> filters. These
+facilities are available only if the <b><tt>filter</tt></b>,
+<b><tt>dps</tt></b>, or <b><tt>level2</tt></b> feature was selected when
+Ghostscript was built.
+
+<li>The PostScript Level 2 <b><tt>DCTEncode</tt></b> and
+<b><tt>DCTDecode</tt></b> filters. These facilities are available only if
+the <b><tt>dct</tt></b> or <b><tt>level2</tt></b> feature was selected when
+Ghostscript was built.
+
+<li>All the other PostScript Level 2 operators and facilities listed in
+section A.1.1 of the Second Edition and not listed in any of the other
+A.1.n sections. These facilities are available only if the
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>All PostScript LanguageLevel 3 operators and facilities listed in the
+Third Edition, except as noted below. These facilities are available only
+if the <b><tt>psl3</tt></b> feature was selected when Ghostscript was built.
+
+<li>The ability to recognize DOS EPSF files and process only the PostScript
+part, ignoring bitmap previews or other information. This facility is
+available only if the <b><tt>epsf</tt></b> feature was selected when
+Ghostscript was built.
+</ul>
+
+<p>
+Ghostscript currently does not implement the following PostScript
+LanguageLevel 3 facilities:
+
+<ul>
+<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color
+spaces -- the alternate space is always used.
+
+<li>Settable <b><tt>ProcessColorModel</tt></b> for page devices, except for
+a very few special devices.
+
+<li><b><tt>IODevice</tt></b>s other than <b><tt>%stdin</tt></b>,
+<b><tt>%stdout</tt></b>, <b><tt>%stderr</tt></b>, <b><tt>%lineedit</tt></b>,
+<b><tt>%statementedit</tt></b>, <b><tt>%os%</tt></b>, and (if configured)
+<b><tt>%pipe%</tt></b>.
+</ul>
+
+<p>
+Ghostscript can also interpret files in the Portable Document Format (PDF)
+1.3 format defined in the <a
+href="http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf"><em>Portable
+Document Format Reference Manual</em> Version 1.3</a> of March 11, 1999,
+distributed by <a href="http://www.adobe.com/">Adobe Systems
+Incorporated</a>, except as noted below. This facility is available only if
+the <b><tt>pdf</tt></b> feature was selected when Ghostscript was built.
+
+<p>
+Ghostscript currently does not implement the following PDF 1.3 facilities:
+
+<ul>
+<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color
+spaces, as noted above for PostScript.
+
+<li>Native <b><tt>ICCBased</tt></b> color spaces -- these too always use the
+alternate space.
+</ul>
+
+<p>
+Ghostscript also includes a number of
+<a href="#Additional_operators">additional operators</a> defined below that
+are not in the PostScript language defined by Adobe.
+
+<hr>
+
+<h2><a name="Implementation_limits"></a>Implementation limits</h2>
+
+<p>
+The implementation limits show here correspond to those in Tables B.1 and
+B.2 of the Second and Third Editions, which describe the quantities fully.
+Where Ghostscript's limits are different from those of Adobe's
+implementations (as shown in the Third Edition), Adobe's limits are also
+shown.
+
+<h3><a name="Architectural_limits"></a>Architectural limits</h3>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Architectural limits (corresponds to Adobe table B.1)</font><hr>
+<tr valign=bottom>
+ <th align=left>Quantity
+ <td>&nbsp;&nbsp;
+ <th align=left>Limit
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Adobe
+<tr> <td colspan=7><hr>
+<tr valign=top> <td>integer
+ <td>&nbsp;
+ <td>32-bit
+ <td>&nbsp;
+ <td>twos complement integer
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>real
+ <td>&nbsp;
+ <td>single-precision
+ <td>&nbsp;
+ <td>IEEE float
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>array
+ <td>&nbsp;
+ <td>65535
+ <td>&nbsp;
+ <td>elements
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>dictionary
+ <td>&nbsp;
+ <td>65534
+ <td>&nbsp;
+ <td>elements
+ <td>&nbsp;
+ <td>65535
+<tr valign=top> <td>string
+ <td>&nbsp;
+ <td>65535
+ <td>&nbsp;
+ <td>characters
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>name
+ <td>&nbsp;
+ <td>16383
+ <td>&nbsp;
+ <td>characters
+ <td>&nbsp;
+ <td>127
+<tr valign=top> <td>filename
+ <td>&nbsp;
+ <td>128*
+ <td>&nbsp;
+ <td>characters
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><b><tt>save</tt></b> level
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>15
+<tr valign=top> <td><b><tt>gsave</tt></b> level
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>13
+</table></blockquote>
+
+<p>
+* The limit on the length of a file name is 128 characters if the name
+starts with a %...% IODevice designation, or 124 characters if it does not.
+
+<h3><a name="Typical_memory_limits"></a>Typical memory limits in LanguageLevel 1</h3>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Memory limits (corresponds to Adobe table B.2)</font><hr>
+<tr valign=bottom>
+ <th align=left>Quantity
+ <td>&nbsp;&nbsp;
+ <th align=left>Limit
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Adobe
+<tr> <td colspan=7><hr>
+<tr valign=top> <td><b><tt>userdict</tt></b>
+ <td>&nbsp;
+ <td>200
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><b><tt>FontDirectory</tt></b>
+ <td>&nbsp;
+ <td>100
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>operand stack
+ <td>&nbsp;
+ <td>800
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>500
+<tr valign=top> <td>dictionary stack
+ <td>&nbsp;
+ <td>20
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>execution stack
+ <td>&nbsp;
+ <td>250
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>interpreter level
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>10
+<tr valign=top> <td>path
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>1500
+<tr valign=top> <td>dash
+ <td>&nbsp;
+ <td>11
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>VM
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>240000
+<tr valign=top> <td>file
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(determined by operating system)
+ <td>&nbsp;
+ <td>6
+<tr valign=top> <td>image
+ <td>&nbsp;
+ <td>65535
+ <td>&nbsp;
+ <td>values (samples × components)<br>for1-, 2-, 4-, or 8-bit samples
+ <td>&nbsp;
+ <td>3300
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td>32767
+ <td>&nbsp;
+ <td>values for 12-bit samples
+ <td>&nbsp;
+ <td>3300
+</table></blockquote>
+
+<h3><a name="VM_consumption"></a>Other differences in VM consumption</h3>
+
+<p>
+Packed array elements occupy either 2 bytes or 8 bytes. The average
+element size is probably about 5 bytes. Names occupy 12 bytes plus the
+space for the string.
+
+<hr>
+
+<h2><a name="Additional_operators"></a>Additional operators in Ghostscript</h2>
+
+<h3><a name="Graphics_and_text"></a>Graphics and text operators</h3>
+
+<h4><a name="Transparency"></a>Transparency</h4>
+
+<p>
+Ghostscript provides a set of operators for implementing the transparency
+and compositing facilities of PDF 1.4. These are defined only if the
+<b><tt>transpar</tt></b> option was selected when Ghostscript was built. We
+do not attempt to explain the underlying graphics model here: for details,
+see <a
+href="http://partners.adobe.com/asn/developer/technotes.html#acrobat-pdf"
+class="offsite">Adobe
+Technical Note</a> #5407, "<a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/PDF_Transparency.pdf"
+class="offsite">Transparency
+in PDF</a>". Note, however, that
+Ghostscript's model generalizes that of PDF 1.4 in that Ghostscript
+maintains separate alpha and mask values for opacity and shape, rather than
+a single value with a Boolean that says whether it represents opacity or
+shape. EVERYTHING IN THIS SECTION IS SUBJECT TO CHANGE.
+
+<h5><a name="Transparency_graphics_state_operators"></a>Graphics state
+operators</h5>
+
+<dl>
+<dt><b><tt>&lt;modename&gt; .setblendmode -</tt></b>
+<dd>Sets the blending mode in the graphics state. If the mode name is not
+recognized, causes a <b><tt>rangecheck</tt></b> error. The initial value of
+the blending mode is <b><tt>/Compatible</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentblendmode &lt;modename&gt;</tt></b>
+<dd>Returns the current blending mode.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;0..1&gt; .setopacityalpha -</tt></b>
+<dd>Sets the opacity alpha value in the graphics state.
+The initial opacity alpha value is 1.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentopacityalpha &lt;0..1&gt;</tt></b>
+<dd>Returns the current opacity alpha value.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;0..1&gt; .setshapealpha -</tt></b>
+<dd>Sets the shape alpha value in the graphics state.
+The initial shape alpha value is 1.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentshapealpha &lt;0..1&gt;</tt></b>
+<dd>Returns the current shape alpha value.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .settextknockout -</tt></b>
+<dd>Sets the text knockout flag in the graphics state.
+The initial value of the text knockout flag is <b><tt>true</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>- .currenttextknockout &lt;bool&gt;</tt></b>
+<dd>Returns the current text knockout flag.
+</dl>
+
+<h5><a name="Transparency_rendering_stack_operators"></a>Rendering stack
+operators</h5>
+
+<p>
+The interpreter state is extended to include a (per-context) rendering stack
+for handling transparency groups and masks (generically, "layers"). Groups
+accumulate a full value for each pixel (paint plus transparency); masks
+accumulate only a coverage value. Layers must be properly nested, i.e., the
+'end' or 'discard' operator must match the corresponding 'begin' operator.
+
+<p>
+Beginning and ending layers must nest properly with respect to
+<b><tt>save</tt></b> and <b><tt>restore</tt></b>: <b><tt>save</tt></b> and
+<b><tt>restore</tt></b> do not save and restore the layer stack. Currently,
+layers are not required to nest with respect to <b><tt>gsave</tt></b> and
+<b><tt>grestore</tt></b>, except that the device that is current in the
+graphics state when ending a layer must be the same as the device that was
+current when beginning the layer. THIS AREA IS SUBJECT TO CHANGE.
+
+<dl>
+<dt><b><tt>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
+.begintransparencygroup -</tt></b>
+<dd>Begins a new transparency group. The <b><tt>ll/ur</tt></b> coordinates
+are the bounding box of the group in the current user coordinate system.
+<b><tt>paramdict</tt></b> has the following keys:
+<dl>
+<dt><b><tt>/Isolated</tt></b>
+<dd>(optional) Boolean; default value = <b><tt>false</tt></b>.
+<dt><b><tt>/Knockout</tt></b>
+<dd>(optional) Boolean; default value = <b><tt>false</tt></b>.
+</dl>
+</dl>
+
+<dl>
+<dt><b><tt>- .discardtransparencygroup -</tt></b>
+<dd>Ends and discards the current transparency group.
+</dl>
+
+<dl>
+<dt><b><tt>- .endtransparencygroup -</tt></b>
+<dd>Ends the current transparency group, compositing the group being ended
+onto the group that now becomes current.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
+.begintransparencymask -</tt></b>
+<dd>Begins a new transparency mask. The <b><tt>ll/ur</tt></b> coordinates
+are the bounding box of the mask in the current user coordinate system.
+<b><tt>paramdict</tt></b> has the following keys:
+<dl>
+<dt><b><tt>/Subtype</tt></b>
+<dd>(required) Name, either <b><tt>/Alpha</tt></b> or
+<b><tt>/Luminosity</tt></b>.
+<dt><b><tt>/Background</tt></b>
+<dd>(optional) Array of number.
+<dt><b><tt>/TransferFunction</tt></b>
+<dd>(optional) Function object (produced by applying
+<b><tt>.buildfunction</tt></b> to a Function dictionary).
+</dl>
+</dl>
+
+<dl>
+<dt><b><tt>- .discardtransparencymask -</tt></b>
+<dd>Ends and discards the current transparency mask.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;masknum&gt; .endtransparencymask -</tt></b>
+<dd>Ends the current transparency mask, installing it as the current opacity
+(<b><tt>masknum</tt></b> = 0) or shape (<b><tt>masknum</tt></b> = 1) mask in
+the graphics state.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;masknum&gt; .inittransparencymask -</tt></b>
+<dd>Resets the current opacity (<b><tt>masknum</tt></b> = 0) or shape
+(<b><tt>masknum</tt></b> = 1) mask to an infinite mask with alpha = 1
+everywhere.
+</dl>
+
+<h5><a name="Transparency_ImageType"></a>New ImageType</h5>
+
+<p>
+The transparency extension defines a new ImageType 103, similar to ImageType
+3 with the following differences:
+
+<ul>
+
+<li>The required <b><tt>MaskDict</tt></b> is replaced by two optional
+dictionaries, <b><tt>OpacityMaskDict</tt></b> and
+<b><tt>ShapeMaskDict</tt></b>. If present, these dictionaries must have a
+<b><tt>BitsPerComponent</tt></b> entry, whose value may be greater than 1.
+Note that in contrast to ImageType 3, where any non-zero chunky mask value
+is equivalent to 1, ImageType 103 simply takes the low-order bits of chunky
+mask values.
+
+<li>A <b><tt>Matte</tt></b> entry may be present in one or both mask
+dictionaries, indicating premultiplication of the data values. If both
+<b><tt>MaskDict</tt></b>s have a <b><tt>Matte</tt></b> entry and the values
+of the two <b><tt>Matte</tt></b> entries are different, a
+<b><tt>rangecheck</tt></b> error occurs.
+
+<li><b><tt>InterleaveType</tt></b> appears in the <b><tt>MaskDict</tt></b>s,
+not the <b><tt>DataDict</tt></b>, because each mask has its own
+<b><tt>InterleaveType</tt></b>. <b><tt>InterleaveType</tt></b> 2
+(interlaced scan lines) is not supported.
+
+</ul>
+
+<h4><a name="Graphics_state"></a>Other graphics state operators</h4>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setaccuratecurves -</tt></b>
+<dd>Sets a graphics state flag that determines whether curves and arcs,
+when flattened, always start and end with a line that is a segment of the
+tangent; this also causes butt and square caps to be properly perpendicular
+to the tangent. <b><tt>initgraphics</tt></b> sets this flag to false, to
+match other PostScript implementations.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentaccuratecurves &lt;bool&gt;</tt></b>
+<dd>Returns the current value of the accurate curves flag.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;int&gt; .setcurvejoin -</tt></b>
+<dd>Sets a graphics state parameter that determines how to treat the joins
+between the line segments produced when a curve is flattened. The parameter
+value may be either -1 or a value acceptable to <b><tt>setlinejoin</tt></b>.
+If the parameter value is -1, the join used for flattened curve line
+segments is given by the current line join parameter in the graphics state
+(except that if the line join value is "none", a bevel join is used), which
+matches the Adobe Red Book, but not the Adobe implementations; if the curve
+join parameter value is a line join value, that type of join is used for
+flattened curve line segments, regardless of the value of the graphics state
+line join parameter. The initial (and default) value of the curve join
+parameter is 2, causing bevel joins to be used: this matches the Adobe
+implementations. <b><tt>initgraphics</tt></b> sets the parameter to its
+default value.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentcurvejoin &lt;int&gt;</tt></b>
+<dd>Returns the current value of the curve join parameter.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setdashadapt -</tt></b>
+<dd>Sets a graphics state flag that determines whether dash patterns do
+(true) or do not (false) automatically scale themselves so that each line
+segment consists of an integral number of pattern repetitions.
+<b><tt>initgraphics</tt></b> sets this flag to false.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentdashadapt &lt;bool&gt;</tt></b>
+<dd>Returns the current value of the dash adaptation flag.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;matrix&gt; .setdefaultmatrix -</tt></b>
+<dd>Sets the default matrix that is returned by
+<b><tt>defaultmatrix</tt></b> and installed by <b><tt>initmatrix</tt></b>.
+Ordinary programs should not use this operator.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;num&gt; &lt;bool&gt; .setdotlength -</tt></b>
+<dd>Sets a graphics state parameter that determines the handling of
+zero-length lines (dots). If the dot length is zero, dots are painted as
+circles if round line caps are in effect, otherwise they are not painted at
+all. If the dot length is non-zero, dots are treated exactly like lines of
+the given length: the length is specified in user coordinates (like line
+width) if <b><tt>bool</tt></b> is false, or in default user coordinates of
+points (units of 1/72in; see the <a href="Devices.htm#Measurements">notes
+on measurements</a> in the documentation on devices) if
+<b><tt>bool</tt></b> is true. Dots occurring as part of dash patterns will
+be oriented correctly; isolated dots will be oriented as though they were
+part of a vertical line. <b><tt>initgraphics</tt></b> sets the dot length
+to zero.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentdotlength &lt;num&gt; &lt;bool&gt;</tt></b>
+<dd>Returns the current dot length and dot length mode.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dx&gt; &lt;dy&gt; .setfilladjust2 -</tt></b>
+<dd>Sets graphics state parameters that cause all filled and stroked
+regions to be "fattened" by the given amount relative to an algorithm that
+only paints pixels whose centers fall within the region to be painted.
+<b><tt>dx</tt></b> and <b><tt>dy</tt></b> are numbers between 0 and 0.5,
+measured in device space. The only two values that are likely to be useful
+are 0, which gives a pure center-of-pixel rule, and 0.5, which gives
+Adobe's any-part-of-pixel rule. (0.5 is treated slightly specially in
+order to create half-open pixels per Adobe's specification.)
+</dl>
+
+<dl>
+<dt><b><tt>- .currentfilladjust2 &lt;dx&gt; &lt;dy&gt;</tt></b>
+<dd>Returns the current fill adjustment values.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setlimitclamp -</tt></b>
+<dd>Sets a graphics state flag that determines whether attempts to set the
+current point outside the internally representable range should clamp the
+value to the largest representable value (true) or give a
+<b><tt>limitcheck</tt></b> error (false). <b><tt>initgraphics</tt></b> sets
+this flag to false, to match other PostScript implementations.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentlimitclamp &lt;bool&gt;</tt></b>
+<dd>Returns the current value of the limit clamp flag.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;int&gt; .setoverprintmode -</tt></b>
+<dd>Sets the overprint mode in the graphics state. Legal values are 0 or 1.
+Per the PDF 1.3 specification, if the overprint mode is 1, then when the
+current color space is <b><tt>DeviceCMYK</tt></b>, color components whose
+value is 0 do not write into the target, rather than writing a 0 value.
+THIS BEHAVIOR IS NOT IMPLEMENTED YET. The initial value of the overprint
+mode is 0.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentoverprintmode &lt;int&gt;</tt></b>
+<dd>Returns the current overprint mode.
+</dl>
+
+<h4><a name="Path"></a>Path operators</h4>
+
+<dl>
+<dt><b><tt>- .dashpath -</tt></b>
+<dd>If there is no current dash pattern, does nothing. Otherwise, does the
+equivalent of <b><tt>flattenpath</tt></b> and then chops up the path as
+determined by the dash pattern.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;x&gt; &lt;y&gt; &lt;width&gt; &lt;height&gt; .rectappend -</tt></b>
+<dt><b><tt>&lt;numarray&gt; .rectappend -</tt></b>
+<dt><b><tt>&lt;numstring&gt; .rectappend -</tt></b>
+<dd>Appends a rectangle or rectangles to the current path, in the same
+manner as <b><tt>rectfill</tt></b>, <b><tt>rectclip</tt></b>, etc. Defined
+only if the <b><tt>dps</tt></b> or <b><tt>level2</tt></b> option was
+selected when Ghostscript was built.
+</dl>
+
+<h4><a name="Painting"></a>Painting operators</h4>
+
+<p>
+Ghostscript supports an experimental extension of the PostScript imaging
+model to include <b><tt>RasterOp</tt></b> and some related facilities.
+This extension is available only if the <b><tt>rasterop</tt></b> option was
+selected when building Ghostscript.
+
+<p>
+With the <b><tt>RasterOp</tt></b> extension, imaging operations compute a
+function <b>D&nbsp;=&nbsp;f(D,S,T)</b> in RGB space, where <b>f</b> is an
+arbitrary 3-input Boolean function, <b>D</b> is the destination (frame
+buffer or print buffer), <b>S</b> is the source (described below), and
+<b>T</b> is the texture (the current PostScript color, which may be a
+pattern). The source and texture depend on the PostScript imaging
+operation:
+
+<ul>
+<li>For <b><tt>fill</tt></b> and <b><tt>stroke</tt></b>, the source is
+solid black, covering the region to be painted; the texture is the current
+PostScript color.
+
+<li>For <b><tt>show</tt></b> and <b><tt>imagemask</tt></b>, the source is
+solid black, covering the pixels to be painted; the texture is the current
+PostScript color.
+
+<li>For <b><tt>image</tt></b> and <b><tt>colorimage</tt></b>, the source is
+the image data; the texture depends on an optional Boolean parameter,
+<b><tt>CombineWithColor</tt></b>, in the image dictionary. If
+<b><tt>CombineWithColor</tt></b> is false (the default), the texture is
+solid black. If <b><tt>CombineWithColor</tt></b> is true, the texture is
+the current color. For the non-dictionary form of the image operator,
+<b><tt>CombineWithColor</tt></b> is considered to be false.
+</ul>
+
+<p>
+The <b><tt>rasterop</tt></b> option adds the following operators:
+
+<dl>
+<dt><b><tt>&lt;int8&gt; .setrasterop -</tt></b>
+<dd>Sets the <b><tt>RasterOp</tt></b> function in the graphics state. The
+default function is 252, Source | Texture.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentrasterop &lt;int8&gt;</tt></b>
+<dd>Returns the current <b><tt>RasterOp</tt></b> function.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setsourcetransparent -</tt></b>
+<dd>Sets source transparency in the graphics state. When source
+transparency is true, white source pixels prevent storing into the
+destination, regardless of what the <b><tt>RasterOp</tt></b> function
+returns. The default source transparency is false.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentsourcetransparent &lt;bool&gt; -</tt></b>
+<dd>Returns the current source transparency.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .settexturetransparent -</tt></b>
+<dd>Sets texture transparency in the graphics state. When texture
+transparency is true, white texture pixels prevent storing into the
+destination, regardless of what the <b><tt>RasterOp</tt></b> function
+returns. The default texture transparency is false.
+</dl>
+
+<dl>
+<dt><b><tt>- .currenttexturetransparent &lt;bool&gt; -</tt></b>
+<dd>Returns the current texture transparency.
+</dl>
+
+<p>
+For more information on RasterOp and transparency, please consult chapter 5
+of the "PCL 5 Color Technical Reference Manual",
+<a href="http://www.hp.com/cposupport/printers/support_doc/bpl01354.html">Hewlett-Packard
+Manual Part No. 5961-0635</a>.
+
+<h4><a name="Character"></a>Character operators</h4>
+
+<dl>
+<dt><b><tt>&lt;string&gt; &lt;bool&gt; .charboxpath -</tt></b>
+<dd>For each character <b>C</b> in the rendering of &lt;string&gt;, let the
+bounding box of <b>C</b> <b><em>in device space</em></b> be the four
+<b><em>user-space</em></b> points p1x/y, p2x/y, p3x/y, and p4x/y. For each
+character in order, <b><tt>.charboxpath</tt></b> appends the following to
+the current path:
+
+<ul><li>If <b><tt>&lt;bool&gt;</tt></b> is true, the equivalent of:
+
+<blockquote>
+p1x p1y <b><tt>moveto</tt></b><br>
+p2x p2y <b><tt>lineto</tt></b><br>
+p3x p3y <b><tt>lineto</tt></b><br>
+p4x p4y <b><tt>lineto</tt></b><br>
+<b><tt>closepath</tt></b>
+</blockquote>
+</ul>
+
+<p>
+This creates a path whose <b><tt>pathbbox</tt></b> is the
+<b><tt>bbox</tt></b> of the string.
+
+<ul><li>If <b><tt>&lt;bool&gt;</tt></b> is false, the equivalent of:
+
+<blockquote>
+p1x p1y <b><tt>moveto</tt></b><br>
+p3x p3y <b><tt>lineto</tt></b>
+</blockquote>
+</ul>
+
+<p>
+If the CTM is well-behaved (consists only of reflection, scaling, and
+rotation by multiples of 90 degrees), this too creates a (simpler) path
+whose <b><tt>pathbbox</tt></b> is the <b><tt>bbox</tt></b> of the string.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;font&gt; &lt;charname|charcode&gt; &lt;charname&gt; &lt;charstring&gt; .type1execchar -</tt></b>
+<dd>Does all the work for rendering a Type 1 outline. This operator, like
+<b><tt>setcharwidth</tt></b> and <b><tt>setcachedevice</tt></b>, is valid
+only in the context of a show operator -- that is, it must only be called
+from within a <b><tt>BuildChar</tt></b> or <b><tt>BuildGlyph</tt></b>
+procedure.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;font&gt; &lt;charcode&gt; %Type1BuildChar -</tt></b>
+<dd>This is not a new operator: rather, it is a name known specially to the
+interpreter. Whenever the interpreter needs to render a character (during
+a ...<b><tt>show</tt></b>, <b><tt>stringwidth</tt></b>, or
+<b><tt>charpath</tt></b>), it looks up the name <b><tt>BuildChar</tt></b>
+in the font dictionary to find a procedure to run. If it does not find
+this name, and if the <b><tt>FontType</tt></b> is 1, the interpreter
+instead uses the value (looked up on the dictionary stack in the usual way)
+of the name <b><tt>%Type1BuildChar</tt></b>.
+
+<p>
+The standard definition of <b><tt>%Type1BuildChar</tt></b> is in the
+initialization file <b><tt>gs_type1.ps</tt></b>. Users should not need to
+redefine <b><tt>%Type1BuildChar</tt></b>, except perhaps for tracing or
+debugging.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;font&gt; &lt;charname&gt; %Type1BuildGlyph -</tt></b>
+<dd>Provides the Type 1 implementation of <b><tt>BuildGlyph</tt></b>.
+</dl>
+
+<h3><a name="Other"></a>Other operators</h3>
+
+<h4><a name="Mathematical"></a>Mathematical operators</h4>
+
+<dl>
+<dt><b><tt>&lt;number&gt; arccos &lt;number&gt;</tt></b>
+<dd>Computes the arc cosine of a number between -1 and 1.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;number&gt; arcsin &lt;number&gt;</tt></b>
+<dd>Computes the arc sine of a number between -1 and 1.
+</dl>
+
+<h4><a name="Dictionary"></a>Dictionary operators</h4>
+
+<dl>
+<dt><b><tt>mark &lt;key1&gt; &lt;value1&gt; &lt;key2&gt; &lt;value2&gt; ... .dicttomark &lt;dict&gt;</tt></b>
+<dd>Creates and returns a dictionary with the given keys and values. This
+is the same as the PostScript Level 2 <b><tt>&gt;&gt;</tt></b> operator,
+but is available even in Level 1 configurations.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; &lt;value&gt; .forceput - </tt></b>
+<dd>Equivalent to <b><tt>put</tt></b>, but works even if
+<b><tt>dict</tt></b> is not writable, and (if <b><tt>dict</tt></b> is
+<b><tt>systemdict</tt></b> or the current save level is 0) even if
+<b><tt>dict</tt></b> is in global VM and <b><tt>key</tt></b> and/or
+<b><tt>value</tt></b> is in local VM. <strong>This operator should be used
+only initialization code, and only in executeonly procedures: it must not be
+accessible after initialization.</strong>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; .forceundef - </tt></b>
+<dd>Equivalent to <b><tt>undef</tt></b>, but works even if
+<b><tt>dict</tt></b> is not writable. <strong>This operator should be used
+only initialization code, and only in executeonly procedures: it must not be
+accessible after initialization.</strong>
+</dl>
+
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; .knownget &lt;value&gt; true</tt></b>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; .knownget false</tt></b>
+<dd>Combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the
+obvious way.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;integer&gt; .setmaxlength -</tt></b>
+<dd>Sets the capacity (<b><tt>maxlength</tt></b>) of a dictionary.
+Causes a <b><tt>dictfull</tt></b> error if the dictionary has more
+occupied entries than the requested capacity.
+</dl>
+
+<h4><a name="String"></a>String and name operators</h4>
+
+<dl>
+<dt><b><tt>&lt;integer&gt; .bytestring &lt;bytestring&gt;</tt></b>
+<dd>Allocates and returns a bytestring, a special data type that can be
+larger than the maximum size of a string (64K-1 bytes) and can be used in
+place of a string with a very few operators.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;name&gt; .namestring &lt;string&gt;</tt></b>
+<dd>Returns the (read-only) string for a name.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;obj&gt; &lt;pattern&gt; .stringmatch &lt;bool&gt;</tt></b>
+<dd>Matches <b><tt>obj</tt></b> against a pattern in which '*' matches 0 or
+more characters and '?' matches any single character. If
+<b><tt>obj</tt></b> is a string or a name, matches its characters against
+the pattern; if <b><tt>obj</tt></b> is of any other type, the result is
+<b><tt>true</tt></b> if the pattern is the single character "*" and
+<b><tt>false</tt></b> otherwise.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;state&gt; &lt;fromString&gt; &lt;toString&gt; .type1encrypt &lt;newState&gt; &lt;toSubstring&gt;</tt></b>
+<dd>Encrypts <b><tt>fromString</tt></b> according to the algorithm for
+Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>.
+<b><tt>toString</tt></b> must be at least as long as
+<b><tt>fromString</tt></b>, or a rangecheck error occurs.
+<b><tt>state</tt></b> is the initial state of the encryption algorithm (a
+16-bit non-negative integer); <b><tt>newState</tt></b> is the new state of
+the algorithm.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;state&gt; &lt;fromString&gt; &lt;toString&gt; .type1decrypt &lt;newState&gt; &lt;toSubstring&gt;</tt></b>
+<dd>Decrypts <b><tt>fromString</tt></b> according to the algorithm for
+Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>.
+Other specifications are as for <b><tt>type1encrypt</tt></b>.
+</dl>
+
+<h4><a name="Relational"></a>Relational operators</h4>
+
+<dl>
+<dt><b><tt>&lt;number|string&gt; &lt;number|string&gt; max &lt;number|string&gt;</tt></b>
+<dd>Returns the larger of two numbers or strings.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;number|string&gt; &lt;number|string&gt; min &lt;number|string&gt;</tt></b>
+<dd>Returns the smaller of two numbers or strings.
+</dl>
+
+<h4><a name="File"></a>File operators</h4>
+
+<dl>
+<dt><b><tt>&lt;file&gt; .filename &lt;string&gt; true</tt></b>
+<dt><b><tt>&lt;file&gt; .filename false</tt></b>
+<dd>If the file was opened by the <b><tt>file</tt></b> or
+<b><tt>.tempfile</tt></b> operator, returns the file name and
+<b><tt>true</tt></b>; if the file is a filter, returns
+<b><tt>false</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;file&gt; .fileposition &lt;integer&gt; true</tt></b>
+<dd>Returns the position of <b><tt>file</tt></b>. Unlike the standard
+<b><tt>fileposition</tt></b> operator, which causes an error if the file is
+not positionable, <b><tt>.fileposition</tt></b> works on all files,
+including filters: for non-positionable files, it returns the total number
+of bytes read or written since the file was opened.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;string&gt; findlibfile &lt;foundstring&gt; &lt;file&gt; true</tt></b>
+<dt><b><tt>&lt;string&gt; findlibfile &lt;string&gt; false</tt></b>
+<dd>Opens the file of the given name for reading, searching through
+directories <a href="Use.htm#Finding_files">as described in the usage
+documentation</a>. If the search fails, <b><tt>findlibfile</tt></b> simply
+pushes false on the stack and returns, rather than causing an error.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;file&gt; &lt;string&gt; .peekstring &lt;substring&gt; &lt;filled_bool&gt;</tt></b>
+<dd>Reads bytes from a file like <b><tt>readstring</tt></b>, but also leaves
+the bytes in the file buffer so they will be read again by a subsequent read
+operation. Currently gives a <b><tt>rangecheck</tt></b> error if
+<b><tt>string</tt></b> is larger than the file's buffer.
+</dl>
+
+<a name=Tempfile></a>
+<dl>
+<dt><b><tt>&lt;prefix_string|null&gt; &lt;access_string&gt; .tempfile
+&lt;string&gt; &lt;file&gt;</tt></b>
+<dd>Creates and opens a temporary file
+like the <b><tt>file</tt></b> operator, also returning the file name. There
+are three cases for the <b><tt>&lt;prefix_string|null&gt;</tt></b> operand:
+
+<ul>
+<p>
+<li><b><tt>null</tt></b>: create the file in the same directory and with the
+same name conventions as other temporary files created by the Ghostscript
+implementation on this platform. E.g., the temporary file might be named
+<b><tt>/tmp/gs_a1234</tt></b>.
+<p>
+<li>A string that is not the beginning of an absolute file name (e.g., does
+not begin with <b><tt>.</tt></b> or <b><tt>/</tt></b> on Unix-like
+platforms): create the file in the standard temporary directory, but use the
+<b><tt>&lt;prefix_string&gt;</tt></b> as the first part of the file name.
+E.g., if <b><tt>&lt;prefix_string&gt;</tt></b> is <b><tt>xx</tt></b>, the
+temporary file might be named <b><tt>/tmp/xxa1234</tt></b>.
+<p>
+<li>A string that is the beginning of an absolute file name: use the
+<b><tt>&lt;prefix_string&gt;</tt></b> as the first part of the file name.
+E.g., if <b><tt>&lt;prefix_string&gt;</tt></b> is
+<b><tt>/my/tmpdir/zz</tt></b>, the temporary file might be named
+<b><tt>/my/tmpdir/zza1234</tt></b>.
+<p>
+When running in <b><tt>SAFER</tt></b> mode, the absolute path must
+be one of the strings on the list given by the <b><tt>PermitFileWriting</tt></b>
+userparameter. Temporary files created with <b><tt>.tempfile</tt></b> can
+be deleted when in SAFER mode, and can be renamed to one of the paths
+that is on <b>both</b> the PermitFileControl and PermitFileWriting
+paths.
+</ul>
+
+</dl>
+
+<dl>
+<dt><b><tt>&lt;file&gt; &lt;integer&gt; .unread -</tt></b>
+<dd>Pushes back the last-read character onto the front of the file. If the
+file is open only for writing, or if the integer argument is not the same
+as the last character read from the file, causes an <b><tt>ioerror</tt></b>
+error. May also cause an <b><tt>ioerror</tt></b> if the last operation on
+the file was not a reading operation. This operator is now deprecated:
+use <b><tt>.peekstring</tt></b> in new code.
+</dl>
+
+<p>
+Ghostscript also supports the following <b><tt>IODevice</tt></b> in
+addition to a subset of those defined in the Adobe documentation:
+<b><tt>%pipe%command</tt></b>, which opens a pipe on the given command.
+This is supported only on operating systems that provide
+<b><tt>popen</tt></b> (primarily Unix systems, and not all of those).
+
+<h4><a name="Virtual_memory"></a>Virtual memory operators</h4>
+
+<dl>
+<dt><b><tt>&lt;save&gt; .forgetsave -</tt></b>
+<dd>Cancels the effect of a save, making it as though the save never
+happened.
+</dl>
+
+<h4><a name="Miscellaneous"></a>Miscellaneous operators</h4>
+
+<dl>
+<dt><b><tt>&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; .execn ...</tt></b>
+<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that
+order, essentially equivalent to
+
+<blockquote><pre>
+&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; array astore {exec} forall
+</pre></blockquote>
+
+<p>
+except that it doesn't actually create the array.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;string&gt; getenv &lt;string&gt; true</tt></b>
+<dt><b><tt>&lt;string&gt; getenv false</tt></b>
+<dd>Looks up a name in the shell environment. If the name is found,
+returns the corresponding value and true; if the name is not found, returns
+false.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;name&gt; &lt;array&gt; .makeoperator &lt;operator&gt;</tt></b>
+<dd>Constructs and returns a new operator that is actually the given
+procedure in disguise. The name is only used for printing. The operator
+has the executable attribute.
+
+<p>
+Operators defined in this way do one other thing besides running the
+procedure: if an error occurs during the execution of the procedure, and
+there has been no net reduction in operand or dictionary stack depth, the
+operand or dictionary stack pointer respectively is reset to its position
+at the beginning of the procedure.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;string&gt; &lt;boolean&gt; .setdebug -</tt></b>
+<dd>If the Ghostscript interpreter was built with the <b><tt>DEBUG</tt></b>
+flag set, sets or resets any subset of the debugging flags normally
+controlled by <b><tt>-Z</tt></b> in the command line. Has no effect
+otherwise.
+</dl>
+
+<dl>
+<dt><b><tt>- .oserrno &lt;errno&gt;</tt></b>
+<dd>Returns the error code for the most recent operating system error.
+</dl>
+
+<dl>
+<dt><b><tt>- .oserrorstring &lt;string&gt;</tt></b>
+<dd>Returns the error string for the most recent operating system error.
+</dl>
+
+<a name="Runandhide"></a>
+<dl>
+<dt><b><tt>&lt;array&gt; &lt;procedure&gt; .runandhide ... &lt;array&gt;</tt></b>
+<dd>Runs the <i><tt>&lt;procedure&gt;</tt></i> after removing the
+<i><tt>&lt;array&gt;</tt></i> from the stack. As long as <i><tt>&lt;array&gt;</tt></i>
+is not contained in any readable dictionaries or elsewhere on stacks, it
+will not be accessible to <i><tt>&lt;procedure&gt;</tt></i>.
+<p>
+This operator is intended to allow hiding a <i><tt>&lt;save&gt;</tt></i> object
+during execution of procedures or files that run in <b>SAFER</b> mode.
+If a <b><tt>save</tt></b> is performed prior to entering <b>SAFER</b> mode
+with <b><tt>.setsafe</tt></b>, using the save object as the operand to
+<b><tt>restore</tt></b> will return to <b>NOSAFER</b> mode. In order to
+prevent the procedures running in <b>SAFER</b> mode from being able to
+return to <b>NOSAFER</b> mode, this operator should be used.
+Upon return from the file or procedure <b><tt>restore</tt></b> can be used
+to return to <b>NOSAFER</b> mode.
+<p>
+<b>Note:</b> The array operand hidden during the execution of the file or
+procedure will be placed at the top of the operand stack which may be on
+top of objects that the file or procedure leaves on top of the stack.
+Thus removing objects below the array may be needed to prevent an
+<b><tt>invalidrestore</tt></b> error.
+<p>
+For example, in order for a script or job server to execute a file
+<tt>somefile.ps</tt> with the <b>SAFER</b> mode restrictions in place, returning
+to unrestricted <b>NOSAFER</b> mode when the procedure exits is as follows:
+<pre>
+ Start Ghostscript with <b>-dNOSAFER</b>
+
+ ... % perform any device set up w/o restrictions
+ [ save ] % create a save object before SAFER
+ (somefile.ps) (r) file cvx % open the file to process
+ .setsafe % enter SAFER mode
+ .runandhide % run the file hiding the save object
+ count 1 roll % place array below anything left over
+ count 1 sub { pop } repeat % pop left over stuff
+ cleardictstack % prevent invalidrestore from dicts
+ 0 get restore % go back to NOSAFER mode
+</pre>
+Another refinement on the above would be to execute <b><tt>.runandhide</tt></b>
+using <b><tt>stopped</tt></b> in order to report errors but continue processing.
+</dl>
+
+<dl>
+<dt><b><tt>- .setsafe -</tt></b>
+<dd>If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or
+<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b>
+mode (see <a href="Use.htm#Safer"><b>-dSAFER</b></a>)
+<p>
+<b>Note: </b>If <b><tt>-dPARANOIDSAFER</tt></b> was specified on the command
+line, <b><tt>.setsafe</tt></b> also sets the <b><tt>PermitFileReading</tt></b>
+parameter to an empty array.
+<p>
+Since <b>SAFER</b> mode is implemented with userparameters and device parameters,
+it is possible to use <b><tt>save</tt></b> and <b><tt>restore</tt></b> before
+and after <b><tt>.setsafe</tt></b> to return to <b>NOSAFER</b> mode, but care
+should be taken to ensure that the <i><tt>save</tt></i> object is not
+accessible to any procedures or file run in <b>SAFER</b> mode (see
+<a href="#Runandhide"><b>.runandhide</b></a> above).
+<p>
+<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page
+will be erased as a side effect of this operator</b>
+</dl>
+
+<dl>
+<dt><b><tt>- .locksafe -</tt></b>
+<dd>
+This operator sets the current device's <b><tt>.LockSafetyParams</tt></b>
+and the <b><tt>LockFilePermissions</tt></b> user parameter true as well as
+adding the paths on LIBPATH and FONTPATH and the paths given by the
+system params /GenericResourceDir and /FontResourceDir to the current
+PermitFileReading list of paths.
+<p>
+If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or
+<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b>
+mode with the current set of <b><tt>PermitFile...</tt></b> user parameters
+in effect. Since <b><tt>.setsafe</tt></b> sets the <b><tt>PermitFileWriting</tt></b>
+and <b><tt>PermitFileControl</tt></b> user parameters to empty arrays, a script
+or job server that needs to enable certain paths for file Writing and/or Control
+can use this operator to perform the locking needed to enter <b>SAFER</b> mode.
+<p>
+For example, to enable reading everywhere, but disallow writing and file
+control (deleting and renaming files), the following can be used:
+<pre>
+ { << /PermitFileReading [ (*) ]
+ /PermitFileWriting [ ]
+ /PermitFileControl [ ]
+ >> setuserparams
+ .locksafe
+ } stopped pop
+</pre>
+In the above example, use of stopped will allow the use of this sequence on
+older versions of Ghostscript where <b><tt>.locksafe</tt></b> was not an operator.
+<p>
+<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page
+will be erased as a side effect of this operator</b>
+<p>
+See also <a href="#LockSafetyParams">.LockSafetyParams</a> and
+<a href="#User_parameters">User Parameters</a>.
+<p>
+</dl>
+
+<h4><a name="Device"></a>Device operators</h4>
+
+<dl>
+<dt><b><tt>&lt;device&gt; copydevice &lt;device&gt;</tt></b>
+<dd>Copies a device. The copy is writable and installable. The copy is
+created in the current VM (local or global), usually local VM for executing
+ordinary PostScript files.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;devicename&gt; finddevice &lt;device&gt;</tt></b>
+<dd>Creates a default instance of a device specified by name. The instance
+is created in global VM. If <b><tt>finddevice</tt></b> is called more than
+once with the same device name, it creates the default instance the first
+time, and returns the same instance thereafter.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;devicename&gt; findprotodevice &lt;device&gt;</tt></b>
+<dd>Finds the prototype of a device specified by name. A prototype can be
+used with <b><tt>.getdeviceparams</tt></b> or other parameter-reading
+operators, but it is read-only and cannot be set with
+<b><tt>setdevice</tt></b>: it must be copied first.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; &lt;x&gt; &lt;y&gt; &lt;width&gt; &lt;max_height&gt; &lt;alpha?&gt; &lt;std_depth|null&gt; &lt;string&gt; .getbitsrect &lt;height&gt; &lt;substring&gt;</tt></b>
+<dd>Reads a rectangle of rendered bits back from a device. This is only
+guaranteed to be implemented for image devices (see below).
+<b><tt>alpha?</tt></b> is 0 for no alpha, -1 for alpha first, 1 for alpha
+last. <b><tt>std_depth</tt></b> is null for native pixels, number of bits
+per component for a standard color space.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;index&gt; .getdevice &lt;device&gt;</tt></b>
+<dd>Returns a device from the set of devices known to the system. The
+first device, which is the default, is numbered 0. If the
+<b><tt>index</tt></b> is out of range, causes a <b><tt>rangecheck</tt></b>
+error. This device is actually a prototype, not a directly usable device,
+and is marked read-only; it cannot have its parameters changed or be
+installed as the current device.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;matrix&gt; &lt;width&gt; &lt;height&gt; &lt;palette&gt; makeimagedevice &lt;device&gt;</tt></b>
+<dd>Makes a new device that accumulates an image in memory. <b><tt>
+matrix</tt></b> is the initial transformation matrix: it must be orthogonal
+(that is, [a&nbsp;0&nbsp;0&nbsp;b&nbsp;x&nbsp;y] or
+[0&nbsp;a&nbsp;b&nbsp;0&nbsp;x&nbsp;y]). <b><tt>palette</tt></b> is a
+string of 2^<small><sup><b>N</b></sup></small> or
+3&nbsp;&times;&nbsp;2^<small><sup><b>N</b></sup></small> elements,
+specifying how the 2^<small><sup><b>N</b></sup></small> possible pixel
+values will be interpreted. Each element is interpreted as a gray value,
+or as RGB values, multiplied by 255. For example, if you want a monochrome
+image for which 0=white and 1=black, the palette should be
+<b><tt>&lt;ff&nbsp;00&gt;</tt></b>; if you want a 3-bit deep image with
+just the primary colors and their complements (ignoring the fact that 3-bit
+images are not supported), the palette might be <b><tt>&lt;000000 0000ff
+00ff00 00ffff ff0000 ff00ff ffff00 ffffff&gt;</tt></b>. At present, the
+palette must contain exactly 2, 4, 16, or 256 entries, and must contain an
+entry for black and an entry for white; if it contains any entries that
+aren't black, white, or gray, it must contain at least the six primary
+colors (red, green, blue, and their complements cyan, magenta, and yellow);
+aside from this, its contents are arbitrary.
+
+<p>
+Alternatively, palette can be 16, 24, 32, or null (equivalent to 24).
+These are interpreted as:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th valign=bottom align=left>Palette
+ <td>&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left>Bits allocated per color
+<tr> <td colspan=3><hr>
+<tr valign=top> <td>16
+ <td>&nbsp;
+ <td>5 red, 6 green, 5 blue
+<tr valign=top> <td>24
+ <td>&nbsp;
+ <td>8 red, 8 green, 8 blue
+<tr valign=top> <td>32
+ <td>&nbsp;
+ <td>8C, 8M, 8Y, 8K
+</table></blockquote>
+
+<p>
+Note that one can also make an image device (with the same palette as an
+existing image device) by copying a device using the
+<b><tt>copydevice</tt></b> operator.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;matrix&gt; &lt;width&gt; &lt;height&gt; &lt;palette&gt; &lt;word?&gt; makewordimagedevice &lt;device&gt;</tt></b>
+<dd>Makes an image device as described above. <b><tt>word?</tt></b> is a
+Boolean value indicating whether the data should be stored in a
+word-oriented format internally. No ordinary PostScript programs should
+use this operator.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; &lt;index&gt; &lt;string&gt; copyscanlines &lt;substring&gt;</tt></b>
+<dd>Copies one or more scan lines from an image device into a string,
+starting at a given scan line in the image. The data is in the same format
+as for the <b><tt>image</tt></b> operator. It is an error if the device is
+not an image device or if the string is too small to hold at least one
+complete scan line. Always copies an integral number of scan lines.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; setdevice -</tt></b>
+<dd>Sets the current device to the specified device. Also resets the
+transformation and clipping path to the initial values for the device.
+Signals an <b><tt>invalidaccess</tt></b> error if the device is a
+prototype or if <a href="Language.htm#LockSafetyParams">.LockSafetyParams</a>
+is true for the current device.
+</dl>
+
+<dl>
+<dt><b><tt>- currentdevice &lt;device&gt;</tt></b>
+<dd>Gets the current device from the graphics state.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; getdeviceprops &lt;mark&gt; &lt;name1&gt; &lt;value1&gt; ... &lt;namen&gt; &lt;valuen&gt;</tt></b>
+<dd>Gets the properties of a device. See the section on
+<a href="#Device_parameters">device parameters</a> below for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;mark&gt; &lt;name1&gt; &lt;value1&gt; ... &lt;namen&gt; &lt;valuen&gt; &lt;device&gt; putdeviceprops &lt;device&gt;</tt></b>
+<dd>Sets properties of a device. May cause <b><tt>undefined</tt></b>,
+<b><tt>invalidaccess</tt></b>, <b><tt>typecheck</tt></b>, <b><tt>rangecheck</tt></b>, or
+<b><tt>limitcheck</tt></b> errors.
+</dl>
+
+<dl>
+<dt><b><tt>- flushpage -</tt></b>
+<dd>On displays, flushes any buffered output, so that it is guaranteed to
+show up on the screen; on printers, has no effect.
+</dl>
+
+<hr>
+
+<h2><a name="Filters"></a>Filters</h2>
+
+<h3><a name="Standard_filters"></a>Standard filters</h3>
+
+<p>
+In its usual configuration, Ghostscript supports all the standard PostScript
+LanguageLevel 3 filters, both encoding and decoding, except that it does not
+currently support:
+
+<ul>
+
+<li>the <b><tt>EarlyChange</tt></b> key in the <b><tt>LZWEncode</tt></b>
+filter.
+
+</ul>
+
+<p>
+Ghostscript also supports additional keys in the optional dictionary
+operands for some filters. For the <b><tt>LZWDecode</tt></b> filter:
+
+<dl>
+<dt><b><tt>InitialCodeLength &lt;integer&gt;</tt></b> (default 8)
+<dd>An integer between 2 and 11 specifying the initial number of data bits
+per code. Note that the actual initial code length is 1 greater than this,
+to allow for the reset and end-of-data code values.
+</dl>
+
+<dl>
+<dt><b><tt>FirstBitLowOrder &lt;boolean&gt;</tt></b> (default false)
+<dd>If true, codes appear with their low-order bit first.
+</dl>
+
+<dl>
+<dt><b><tt>BlockData &lt;boolean&gt;</tt></b> (default false)
+<dd>If true, the data is broken into blocks in the manner specified for the
+GIF file format.
+</dl>
+
+<p>
+For the <b><tt>CCITTFaxEncode</tt></b> and <b><tt>CCITTFaxDecode</tt></b>
+filters:
+
+<dl>
+<dt><b><tt>DecodedByteAlign &lt;integer&gt;</tt></b> (default 1)
+<dd>An integer <b>N</b> with the value 1, 2, 4, 8, or 16, specifying that
+decoded data scan lines are always a multiple of <b>N</b> bytes. The
+encoding filter skips data in each scan line from Columns to the next
+multiple of <b>N</b> bytes; the decoding filter pads each scan line to a
+multiple of <b>N</b> bytes.
+</dl>
+
+<h3><a name="Non_standard_filters"></a>Non-standard filters</h3>
+
+<p>
+In addition to the standard PostScript LanguageLevel 3 filters, Ghostscript
+supports the following non-standard filters. Many of these filters are used
+internally to implement standard filters or facilities; they are almost
+certain to remain, in their present form or a backward-compatible one, in
+future Ghostscript releases.
+
+<dl>
+<dt><b><tt>&lt;target&gt; /BCPEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; /BCPDecode filter &lt;file&gt;</tt></b>
+<dd>Create filters that implement the Adobe Binary Communications Protocol.
+See Adobe documentation for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; &lt;seed_integer&gt; /eexecEncode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter for encrypting data into the encrypted format described
+in the Adobe Type 1 Font Format documentation. The
+<b><tt>seed_integer</tt></b> must be 55665 for the <b><tt>eexec</tt></b>
+section of a font, or 4330 for a <b><tt>CharString</tt></b>. Note that for
+the <b><tt>eexec</tt></b> section of a font, this filter produces binary
+output and does not include the initial 4 (or <b><tt>lenIV</tt></b>) garbage
+bytes.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;source&gt; &lt;seed_integer&gt; /eexecDecode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; &lt;dict&gt; /eexecDecode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter for decrypting data encrypted as described in the Adobe
+Type 1 Font Format documentation. The <b><tt>seed_integer</tt></b> must be
+55665 or 4330 as described just above. Recognized dictionary keys are:
+
+<blockquote>
+<b><tt>seed &lt;16-bit integer&gt;</tt></b> (required)<br>
+<b><tt>lenIV &lt;non-negative integer&gt;</tt></b> (default=4)
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; /MD5Encode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter that produces the 16-byte MD5 digest of the input.
+Note that no output is produced until the filter is closed.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;source&gt; &lt;hex_boolean&gt; /PFBDecode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter that decodes data in <b><tt>.PFB</tt></b> format, the
+usual semi-binary representation for Type 1 font files on IBM PC and
+compatible systems. If <b><tt>hex_boolean</tt></b> is true, binary packets
+are converted to hex; if false, binary packets are not converted.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; &lt;dict&gt; /PixelDifferenceEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; &lt;dict&gt; /PixelDifferenceDecode filter &lt;file&gt;</tt></b>
+<dd>Implements the Predictor=2 pixel-differencing option of the LZW
+filters. Recognized keys are:
+
+<blockquote>
+<b><tt>Colors &lt;integer&gt;</tt></b> (1 to 4, default=1)<br>
+<b><tt>BitsPerComponent &lt;integer&gt;</tt></b> (1, 2, 4, or 8, default=8)<br>
+<b><tt>Columns &lt;integer&gt;</tt></b> (&gt;= 0, required)
+</blockquote>
+
+<p>
+See the Adobe <a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf"><em>Portable
+Document Format Reference Manual</em></a> for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; &lt;dict&gt; /PNGPredictorEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; &lt;dict&gt; /PNGPredictorDecode filter &lt;file&gt;</tt></b>
+<dd>Implements the "filter" algorithms of the
+<a href="http://www.libpng.org/pub/png/">Portable Network Graphics (PNG)
+graphics format</a>. Recognized keys are:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Keys recognized in PNG filter algorithms</font><hr>
+<tr valign=bottom>
+ <th align=left>Key
+ <td>&nbsp;&nbsp;
+ <th align=left>Range
+ <td>&nbsp;&nbsp;
+ <th align=left>Default
+<tr> <td colspan=5><hr>
+<tr valign=top> <td><b><tt>Colors &lt;integer&gt;</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>1 to 16
+ <td>&nbsp;&nbsp;
+ <td>16
+<tr valign=top> <td><b><tt>BitsPerComponent &lt;integer&gt;</tt></b>
+ <td>&nbsp;
+ <td>1, 2, 4, 8, or 16
+ <td>&nbsp;&nbsp;
+ <td>8
+<tr valign=top> <td><b><tt>Columns &lt;integer&gt;</tt></b>
+ <td>&nbsp;
+ <td>&gt;= 0
+ <td>&nbsp;&nbsp;
+ <td>1
+<tr valign=top> <td><b><tt>Predictor &lt;integer&gt;</tt></b>
+ <td>&nbsp;
+ <td>10 to 15
+ <td>&nbsp;&nbsp;
+ <td>15
+</table></blockquote>
+
+<p>
+The <b><tt>Predictor</tt></b> is the PNG algorithm number + 10 for the
+<b><tt>Encoding</tt></b> filter; the <b><tt>Decoding</tt></b> filter
+ignores <b><tt>Predictor</tt></b>. 15 means the encoder attempts to
+optimize the choice of algorithm. For more details see the PNG
+specification
+
+<blockquote>
+<a href="http://www.w3.org/TR/WD-png-960128.html">http://www.w3.org/TR/WD-png-960128.html</a>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; /TBCPEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; /TBCPDecode filter &lt;file&gt;</tt></b>
+<dd>Create filters that implement the Adobe Tagged Binary Communications
+Protocol. See Adobe documentation for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; /zlibEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; /zlibDecode filter &lt;file&gt;</tt></b>
+<dd>Creates filters that use the data compression method variously known as
+'zlib' (the name of a popular library that implements it), 'Deflate' (as in
+<a href="http://www.ietf.org/rfc/rfc1951.txt">RFC 1951</a>, which is a
+detailed specification for the method), 'gzip' (the name of a popular
+compression application that uses it), or 'Flate' (Adobe's name). Note that
+the PostScript <b><tt>Flate</tt></b> filters are actually a combination of
+this filter with an optional predictor filter.
+</dl>
+
+<h3><a name="Unstable_filters"></a>Unstable filters</h3>
+
+<p>
+Some versions of Ghostscript may also support other non-standard filters for
+experimental purposes. The current version includes the following such
+filters, which are not documented further. No code should assume that these
+filters will exist in compatible form, or at all, in future versions.
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; &lt;string&gt; ByteTranslateEncode/Decode filter &lt;file&gt;</tt></b>
+<dd><b><tt>string</tt></b> must be a string of exactly 256 bytes. Creates a
+filter that converts each input byte <em>b</em> to
+<b><tt>string</tt></b>[<em>b</em>]. Note that the <b><tt>Encode</tt></b>
+and <b><tt>Decode</tt></b> filters operate identically: the client must
+provide a <b><tt>string</tt></b> for the <b><tt>Decode</tt></b> filter that
+is the inverse mapping of the <b><tt>string</tt></b> for the
+<b><tt>Encode</tt></b> filter.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; &lt;dict&gt; BoundedHuffmanEncode/Decode filter &lt;file&gt;</tt></b>
+<dd>These filters encode and decode data using Huffman codes. Since these
+filters aren't used anywhere, we don't document them further, except to note
+the recognized dictionary keys, which must be set identically for encoding
+and decoding:
+
+<blockquote>
+<b><tt>FirstBitLowOrder &lt;bool&gt;</tt></b> (default=false)<br>
+<b><tt>MaxCodeLength &lt;int&gt;</tt></b> (default=16)<br>
+<b><tt>EndOfData &lt;bool&gt;</tt></b> (default=true)<br>
+<b><tt>EncodeZeroRuns &lt;int&gt;</tt></b> (default=256)<br>
+<b><tt>Tables &lt;int_array&gt;</tt></b>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; &lt;dict&gt; BWBlockSortEncode/Decode filter &lt;file&gt;</tt></b>
+<dd>This filter implements the Burroughs-Wheeler block sorting compression
+method, which we've heard is also used in the popular <b><tt>bzip2</tt></b>
+compression application. See <a
+href="http://sources.redhat.com/bzip2/">http://sources.redhat.com/bzip2/</a>
+for more information. The only recognized dictionary key is:
+
+<blockquote>
+<b><tt>BlockSize &lt;integer&gt;</tt></b> (default=16384)
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; MoveToFrontEncode/Decode filter &lt;file&gt;</tt></b>
+
+<dd>The <b><tt>Encode</tt></b> filter starts by initializing an internal
+256-byte array <b><tt>a</tt></b> to the values 0 .. 255. This array will
+always hold a permutation of these values. Then for each input byte
+<em>b</em>, the filter outputs the index <em>i</em> such that
+<b><tt>a</tt></b>[<em>i</em>] = <em>b</em>, and moves that element to the
+front (element 0) of <b><tt>a</tt></b>, moving elements 0 .. <em>i-1</em> to
+positions 1 .. <em>i</em>. The <b><tt>Decode</tt></b> filter inverts this
+process.
+</dl>
+
+<hr>
+
+<h2><a name="Device_parameters"></a>Device parameters</h2>
+
+Ghostscript supports the concept of device parameters for all devices, not
+just page devices. (For non-page devices, these are accessible through
+<b><tt>getdeviceprops</tt></b> and <b><tt>putdeviceprops</tt></b>, as
+indicated above.) Here are the currently defined parameters for all
+devices:
+
+<dl>
+<a name="LockSafetyParams"></a>
+<dt><b><tt>.LockSafetyParams &lt;boolean&gt;</tt></b>
+<dd>This parameter allows for improved system security by preventing
+PostScript programs from being able to change potentially dangerous
+device paramters such as OutputFile. This parameter cannot be set false
+if it is already true.
+<p>
+If this parameter is true for the current device, attempt to set a new
+device that has <b><tt>.LockSafetyParams</tt></b> false will signal an
+<tt><b> invalidaccess</b></tt> error.
+</dl>
+
+<dl>
+<dt><b><tt>BitsPerPixel &lt;integer&gt; (usually read-only)</tt></b>
+<dd>Number of bits per pixel.
+</dl>
+
+<dl>
+<dt><b><tt>.HWMargins [&lt;four floats&gt;]</tt></b>
+<dd>Size of non-imageable regions around the edges of the page, in points
+(units of 1/72in; see the <a href="Devices.htm#Measurements">notes on
+measurements</a> in the documentation on devices).
+</dl>
+
+<dl>
+<dt><b><tt>HWSize [&lt;integer&gt; &lt;integer&gt;]</tt></b>
+<dd>X and Y size in pixels.
+</dl>
+
+<dl>
+<dt><b><tt>Name &lt;string&gt; (read-only)</tt></b>
+<dd>The device name. Currently the same as <b><tt>OutputDevice</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues (usually read-only)</tt></b>
+<dd>As for the <b><tt>deviceinfo</tt></b> operator of Display PostScript.
+<b><tt>Red</tt></b>, <b><tt>Green</tt></b>, <b><tt>Blue</tt></b>, and
+<b><tt>ColorValues</tt></b> are only defined if
+<b><tt>Colors</tt></b>&nbsp;&gt;&nbsp;1.
+</dl>
+
+<dl>
+<dt><b><tt>TextAlphaBits, GraphicsAlphaBits (usually read-only)</tt></b>
+<dd>The number of bits of anti-aliasing information for text or graphics
+respectively. Legal values are 1 (no anti-aliasing, the default for most
+devices), 2, or 4.
+</dl>
+
+<p>
+In addition, the following are defined per Adobe's documentation for the
+<b><tt>setpagedevice</tt></b> operator:
+
+<blockquote>
+<b><tt>Duplex</tt></b> (if supported)<br>
+<b><tt>HWResolution</tt></b><br>
+<b><tt>ImagingBBox</tt></b><br>
+<b><tt>Margins</tt></b><br>
+<b><tt>NumCopies</tt></b> (for printers only)<br>
+<b><tt>Orientation</tt></b> (if supported)<br>
+<b><tt>OutputDevice</tt></b><br>
+<b><tt>PageOffset</tt></b> (write-only)<br>
+<b><tt>PageSize</tt></b><br>
+<b><tt>ProcessColorModel</tt></b> (usually read-only)<br>
+</blockquote>
+
+<p>
+Some devices may only allow certain values for <b><tt>HWResolution</tt></b>
+and <b><tt>PageSize</tt></b>. The null device ignores attempts to set
+<b><tt>PageSize</tt></b>; its size is always <b><tt>[0&nbsp;0]</tt></b>.
+
+<p>
+For printers these are also defined:
+
+<dl>
+<dt><b><tt>BufferSpace &lt;integer&gt;</tt></b>
+<dd>Buffer space for band lists, if the bitmap is too big to fit in memory.
+</dl>
+
+<dl>
+<dt><b><tt>MaxBitmap &lt;integer&gt;</tt></b>
+<dd>Maximum space for a full bitmap in memory.
+</dl>
+
+<dl>
+<dt><b><tt>OutputFile &lt;string&gt;</tt></b>
+
+<dd>An empty string means "send to printer directly", otherwise specifies
+the file name for output; <b><tt>%d</tt></b> is replaced by the page number;
+on Unix systems <b><tt>%pipe%</tt></b><em>command</em> writes to a pipe.
+(<b><tt>|</tt></b><em>command</em> also writes to a pipe, but is now
+deprecated.)
+<p>
+Attempts to set this parameter if <tt><b>.LockSafetyParams</b></tt> is true
+will signal an <tt><b>invalidaccess</b></tt> error.
+</dl>
+
+<dl>
+<dt><b><tt>OpenOutputFile &lt;boolean&gt;</tt></b>
+<dd>If true, open the device's output file when the device is opened,
+rather than waiting until the first page is ready to print.
+</dl>
+
+<dl>
+<dt><b><tt>PageCount &lt;integer&gt; (read-only)</tt></b>
+<dd>Counts the number of pages printed on the device.
+</dl>
+
+<p>
+The following parameters are for use only by very specialized applications
+that separate band construction from band rasterization. Improper use may
+cause unpredictable errors. In particular, if you only want to allocate
+more memory for banding, to increase band size and improve performance, use
+the <b><tt>BufferSpace</tt></b> parameter, not
+<b><tt>BandBufferSpace</tt></b>.
+
+<dl>
+<dt><b><tt>BandHeight &lt;integer&gt;</tt></b>
+<dd>The height of bands when banding. 0 means use the largest band height
+that will fit within the BandBufferSpace (or BufferSpace, if
+BandBufferSpace is not specified).
+</dl>
+
+<dl>
+<dt><b><tt>BandWidth &lt;integer&gt;</tt></b>
+<dd>The width of bands in the rasterizing pass, in pixels. 0 means use the
+actual page width.
+</dl>
+
+<dl>
+<dt><b><tt>BandBufferSpace &lt;integer&gt;</tt></b>
+<dd>The size of the band buffer in the rasterizing pass, in bytes. 0 means
+use the same buffer size as for the interpretation pass.
+</dl>
+
+<p>
+Ghostscript supports the following parameter for
+<b><tt>setpagedevice</tt></b> and <b><tt>currentpagedevice</tt></b> that is
+not a device parameter per se:
+
+<dl>
+<dt><b><tt>ViewerPreProcess &lt;procedure&gt;</tt></b>
+<dd>Specifies a procedure to be applied to the page device dictionary
+before any other processing is done. The procedure may not alter the
+dictionary, but it may return a modified copy. This "hook" is provided for
+use by viewing programs such as GSview.
+</dl>
+
+<hr>
+
+<h2><a name="User_parameters"></a>User parameters</h2>
+
+Ghostscript supports the following non-standard user parameters:
+
+<dl>
+<dt><b><tt>ProcessDSCComment &lt;procedure|null&gt;</tt></b>
+<dd>If not null, this procedure is called whenever the scanner detects a DSC
+comment (comment beginning with <b><tt>%%</tt></b> or <b><tt>%!</tt></b>).
+There are two operands, the file and the comment (minus any terminating
+EOL), which the procedure must consume.
+</dl>
+
+<dl>
+<dt><b><tt>ProcessComment &lt;procedure|null&gt;</tt></b>
+<dd>If not null, this procedure is called whenever the scanner detects a
+comment (or, if <b><tt>ProcessDSCComment</tt></b> is also not null, a
+comment other than a DSC comment). The operands are the same as for
+<b><tt>ProcessDSCComment</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>LockFilePermissions &lt;boolean&gt;</tt></b>
+<dd>If <tt>true</tt>, this parameter and the three <tt>PermitFile...</tt>
+parameters cannot be changed. Attempts to change any of the values
+when LockFilePermissions is <tt>true</tt> will signal <b><tt>invalidaccess</tt></b>.
+Also, when this value is <tt>true</tt>, the <b><tt>file</tt></b> operator
+will give <b><tt>invalidaccess</tt></b> when attempting to open files
+(processes) using the <b><tt>%pipe</tt></b> device.
+<p>
+Also when <b><tt>LockFilePermissions</tt></b> is <tt>true</tt>, strings
+cannot reference the parent directory (platform specific). For example
+<b><tt>(../../xyz)</tt></b> is illegal on unix, Windows
+and Macintosh, and <b><tt>([.#.#.XYZ])</tt></b> is illegal on VMS.
+<p>
+This parameter is set <tt>true</tt> by the <b><tt>.setsafe</tt></b> and
+<b><tt>.locksafe</tt></b> operators.
+</dl>
+
+<dl>
+<dt><b><tt>PermitFileReading &lt;array of strings&gt;</tt></b>
+<dt><b><tt>PermitFileWriting &lt;array of strings&gt;</tt></b>
+<dt><b><tt>PermitFileControl &lt;array of strings&gt;</tt></b>
+<dd>These parameters specify paths where file reading, writing and the
+'control' operations are permitted, respectively. File control
+operations are <b><tt>deletefile</tt></b> and <b><tt>renamefile</tt></b>.
+For <b><tt>renamefile</tt></b>, the filename for the current filename
+must match one of the paths on the PermitFileControl list, and the
+new filename must be on <b>both</b> the PermitFileControl and the
+PermitFileWriting lists of paths.
+<p>
+The strings can contain wildcard characters as for the <b><tt>filenameforall</tt></b>
+operator and unless specifying a single file, will end with a <b>*</b>
+for directories (folders) to allow access to all files and sub-directories
+in that directory.
+<p>
+<b>Note:</b> The strings are used for stringmatch operations similar
+to <b><tt>filenameforall</tt></b>, thus on MS Windows platforms, use the '/'
+character to separate directories and filenames or use '\\\\' to
+have the string contain '\\' which will match a single '\' in the
+target filename (use of '/' is strongly recommended).
+<p>
+The <a href=Use.htm#Safer><b>SAFER</b></a> mode and the
+<b><tt>.setsafe</tt></b> operator set all three lists to empty arrays,
+thus the only files that can be read are the <b><tt>%stdin</tt></b> device and
+on LIBPATH or FONTPATH or the Resource paths specified by the /FontResourceDir
+or /GenericResourceDir system params. Files cannot be opened for writing
+anywhere and cannot be deleted or renamed except for files created with the
+<a href=#Tempfile><b>.tempfile</b></a> operator).
+</dl>
+
+<hr>
+
+<h2><a name="Miscellaneous_additions"></a>Miscellaneous additions</h2>
+
+<b><tt>run</tt></b> can take either a string or a file as its argument. In
+the latter case, it just runs the file, closing it at the end, and trapping
+errors just as for the string case.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>