The use of const alerts the reader that this is effectively
a synonym.
+
If a macro generates anything larger than a single expression (that is,
one or more statements), surround it with BEGIN and
@@ -348,7 +349,7 @@ Restrictions:
-
Don't use typedef for function types, such as
+
Don't use typedef for function types, such as:
typedef int proc_xyz_t(double, int *);
@@ -366,7 +367,7 @@ typedef PROC_XYZ((*proc_xyz_ptr_t)); /* define a type for procedure ptrs */
proc_xyz_ptr_t pp; /* pointer to procedure */
-
+
Don't redefine typedef'ed names, even with the same
definition. Some compilers complain about this, and the standard doesn't
allow it.
@@ -383,14 +384,14 @@ Restrictions:
Don't use anonymous structures if you can possibly avoid it, except
occasionally as components of other structures. Ideally, use the
struct keyword only for declaring named structure types,
-like this:
+like this:
typedef struct xxx_s {
... members ... } xxx_t;
-
+
Use struct only when declaring structure types, never
for referring to them (e.g., never declare a variable as type
struct xxx_s *).
@@ -500,7 +501,7 @@ the same file; if the procedure is global, the prototype should be in a
header file.
If a procedure parameter is itself a procedure, do list its parameter
-types rather than just using (). For example,
+types rather than just using (). For example:
int foo(int (*callback)(int, int));
@@ -512,7 +513,7 @@ rather than just
int foo(int (*callback)());
-
+
Don't use the P* macros in new code. (See the
Procedures section of Language extensions
below for more information.)
@@ -602,12 +603,12 @@ language, such as Java, bool is an enumerated type requiring
an explicit cast to or from int; however, because C's
conditionals are defined as producing int values, we can't
even define bool as a C enum without
-provoking compiler warnings.
-
+provoking compiler warnings.
Even though bool is a synonym for int, treat
them as conceptually different types:
+
Initialize or set bool variables to true
or false, not 0 or 1.
@@ -618,18 +619,18 @@ and || only with Booleans. Don't use the idiom
Use an explicit (int) cast to convert a Boolean to an
integer.
-
+
byte, ushort, uint, ulong
These types are simply shorthands for unsigned char, short, int,
-long.
+long.
In addition, the use of byte * indicates a
Ghostscript-style string, with explicit length given separately, as
opposed to a null terminated C-style string, which is char
*.
-
+
bits8, bits16, bits32
These are unsigned integer types of the given width. Use them wherever
@@ -823,27 +824,27 @@ Parentheses are important in only a few places:
Around the inner subexpressions in expressions that mix
&& and ||, even if they are not
-required by precedence, for example
+required by precedence, for example:
(xx && yy) || zz
-
+
Similarly around inner subexpressions in expressions that mix
&, |, or shifts, especially if mixing
-these with other operators, for instance
+these with other operators, for instance:
(x << 3) | (y >> 5)
-
+
In macro definitions around every use of an argument that logically
-could be an expression, for example
+could be an expression, for example:
((x) * (x) + (y) * (y))
-
+
@@ -854,7 +855,7 @@ For stylistic consistency with the existing Ghostscript code, put
parentheses around conditional expressions even if they aren't
syntactically required, unless you really dislike doing this. Note that
the parentheses should go around the entire expression, not the condition.
-For instance, instead of
hpgl_add_point_to_path(pgls, arccoord_x, arccoord_y,
@@ -1133,7 +1134,7 @@ Every code file should start with comments containing
a copyright notice,
-
the name of the file in the form of an RCS Id:
+
the name of the file in the form of an RCS Id:
/* $Id: filename.ext $*/
@@ -1141,7 +1142,7 @@ Every code file should start with comments containing
(using the comment convention appropriate to the language of the file), and
-
+
a summary, no more than one line, of what the file contains.
diff --git a/doc/DLL.htm b/doc/DLL.htm
index d9c34d369..e1d588e6e 100644
--- a/doc/DLL.htm
+++ b/doc/DLL.htm
@@ -4,13 +4,13 @@
-
+
How to Use the Ghostscript Dynamic Link Library (DLL)
-
@@ -1595,54 +1595,53 @@ valid BitsPerPixel values don't include the actual
-
ProcessColorModel (symbol)
+
ProcessColorModel (symbol)
A symbol taken from /DeviceGray,
/DeviceRGB or /DeviceCMYK which can be used
to select 1, 3 or 4 colors respectively. Note that this parameter takes
precedence over Colors, and that both affect the same
variable of the driver. (See Colors above for values
-combined with BitsPerPixel.)
+combined with BitsPerPixel.)
-
HWResolution (floats array)
+
HWResolution (floats array)
An array of two floats giving the horizontal and vertical resolution in
dots per inch from among 90, 180 and 360 (the default). Both values must
be the same. On the Ghostscript command line, the resolution may be
changed with the -r
-switch.
+switch.
-
ManualFeed (bool)
+
ManualFeed (bool)
Indicate that the sheets won't be fed automatically by the printer,
-false by default. (Not meaningful on the BJC-600, I fear.)
+false by default. (Not meaningful on the BJC-600, I fear.)
-
MediaType (string)
+
MediaType (string)
The media to print on, chosen from among "PlainPaper",
"CoatedPaper", "TransparencyFilm",
"Envelope", "Card" and
"Other". Default is "PlainPaper". For
"Envelope", "Card" or
"Other" the driver puts the printer into thick mode
-automatically regardless of the actual media weight.
+automatically regardless of the actual media weight.
-
MediaWeight (int or null)
+
MediaWeight (int or null)
The weight of the media in grams per square meter. Null (the default)
indicates that the weight is of no importance. If the specified media
weight is greater than 105 (that is, the value of the compilation default
BJC???_MEDIAWEIGHT_THICKLIMIT) then the
-printer will be set to use thick paper.
+printer will be set to use thick paper.
-
dt>PrintQuality (string)
+
PrintQuality (string)
The quality of printing.
-
Value
@@ -1675,6 +1674,8 @@ printer will be set to use thick paper.
Means 200% black and 100% CMY; lights the "Bk+" light on a BJC-600
+
+
@@ -4314,7 +4315,7 @@ while /FSCMYK32 is (almost) identical to
/DeviceCMYKgenerate.
upOutputFormat selects the output method, supporting the values
-/SunRaster, /Epson, /EscP2, /EscP2XY, and/Pcl.
+/SunRaster, /Epson, /EscP2, /EscP2XY, and/Pcl.
@@ -4345,7 +4346,7 @@ while /FSCMYK32 is (almost) identical to
@@ -4362,8 +4363,7 @@ Floyd-Steinberg algorithm (but still carrying out the time-consuming
computation). The related parameter "upComponentShift"
controls positioning the components within raster memory. Each of the
numbers given corresponds to a component which depends on the selected
-"upColorModel":
-
+"upColorModel":
@@ -4464,6 +4464,7 @@ the stored component is White, which is the way PostScript
defines these devices, but most printers require Black.
Thus one has to provide a falling "upWhiteTransfer" for
such printers.
+
upWeaveYPasses is an integer that gives the number of
print head passes required to achieve the requested Ydpi. This makes sense
@@ -4493,7 +4494,7 @@ output file. (Intended for the HP PJL sequences).
upAdjustPageLengthCommand,
upAdjustPageWidthCommand,
upAdjustResolutionCommand, and
-upAdjustTopMarginCommand
+upAdjustTopMarginCommand
Normally uniprint does not change the
@@ -4501,6 +4502,7 @@ Normally uniprint does not change the
However, if the above boolean values are set, the corresponding values are
changed (provided that the code of the formatters supports this change and
the commands to be adjusted are included in the BOP string).
+
upEndPageCommand is the fixed termination sequence for
each page, and of course there is an "upEndJobCommand" too.
I wrote this because the documentation was very brief and I really struggled
@@ -5122,7 +5124,7 @@ on.
at the X parameters yet.
-Determine the nozzle geometry (upOutputPins)
+Determine the nozzle geometry (upOutputPins)
You need to know how many nozzles the printer has and the spacing between
them. Usually you can find this out from the printer manual, or the printer
@@ -5136,10 +5138,10 @@ parameter.
the purpose of demonstration I'll assume that we are using them all.
Determine how many passes are required (upWeaveYPasses)
The number of passes required is going to depend on the required resolution
-and the nozzle spacing.
+and the nozzle spacing.
passes = resolution * nozzle spacing
@@ -5149,9 +5151,10 @@ This will be the value assigned to the upWeaveYPasses parameter.
spaced at 1/90in then 360 * 1/90 = 4 passes are required. For 720 dpi 8
passes would be required. The printer would, of course, have to be capable
of moving the paper in increments of either 360 or 720 dpi too.
-
+
+
-Determine the normal Y feed increment (upWeaveYFeeds)
+Determine the normal Y feed increment (upWeaveYFeeds)
You need to work out how much to feed the paper so that when the paper
has moved by one head length in however many passes you have then each
@@ -5180,7 +5183,7 @@ must equal the physical distance between each nozzle.
-Determine the beginning of page pins (upWeaveInitialPins)
+Determine the beginning of page pins (upWeaveInitialPins)
These values will be assigned to the upWeaveInitialPins parameter and are
the numbers of nozzles to operate in each of the initial passes at the top
@@ -5399,7 +5402,7 @@ The extension adds a format that I have called EscNozzleMap and adds some
additional parameters to uniprint.
upOutputFormatselects the output method, and should be set to the value
-/EscNozzleMap to select this format.
+/EscNozzleMap to select this format.
@@ -5412,6 +5415,7 @@ The extension adds a format that I have called EscNozzleMap and adds some
+
@@ -5486,7 +5490,7 @@ The extension adds a format that I have called EscNozzleMap and adds some
head and whether the nozzles will be used to print. The array index
defines the row index for the nozzle in the output data
and the value defines the colour of the nozzle. The mapping
- of colours to values is defined in the table below.
+ of colours to values is defined in the table below.
@@ -5531,13 +5535,14 @@ The extension adds a format that I have called EscNozzleMap and adds some
A value of 0 means that the nozzle is not used and the row in the output data will be
padded with zeros.
+
upNozzleMapMaskScanOffset
An array of integers that defines the physical position of the nozzles relative
to the first nozzle in the repeated group. The relative distance is measured in
printed line widths and will be different for different printing resolutions.
This parameter is used because the physical spacing of the nozzles may not
correspond to their mapping in the output data. For example the ESC300 has nozzles
- physically arranged something like this:
+ physically arranged something like this:
@@ -5632,6 +5637,8 @@ The extension adds a format that I have called EscNozzleMap and adds some
In the output data the data for the last nozzle in the group would be in row 5
(numbering starts at 0) but the nozzle is physically positioned at 6 spaces from
the first nozzle.
+
+
Example 1 - Epson Stylus Color 300 - 360 dpi colour
diff --git a/doc/Develop.htm b/doc/Develop.htm
index ca0c5db37..f6bbf8cd5 100644
--- a/doc/Develop.htm
+++ b/doc/Develop.htm
@@ -4,13 +4,13 @@
-
+
Information for Ghostscript Developers
-
@@ -192,11 +192,12 @@ The default value if you don't specify this options is usually 72 dpi
These options control the use of subsample antialiasing. Their use is highly recommended
for producing high quality rasterizations of the input files. The size of the subsampling
box n should be 4 for optimum output, but smaller values can be used for faster
-rendering. Antialiasing is enabled separately for text and graphics content.
+rendering. Antialiasing is enabled separately for text and graphics content.
Because this feature relies upon rendering the input it is incompatible, and will generate
an error on attempted use, with any of the vector output devices.
-
-
+
+
+
It is also conventional to call Ghostscript with the '-dSAFER -dBATCH -dNOPAUSE' trio
@@ -237,14 +238,14 @@ anti-aliasing are enabled by default.
-dDownScaleFactor=integer
This causes the internal rendering to be scaled down by the given (integer <= 8) factor before being output. For example, the following will produce
-a 200dpi output png from a 600dpi internal rendering:
+a 200dpi output png from a 600dpi internal rendering:
@@ -409,14 +410,14 @@ drivers that produce uncompressed output:
Produces 32-bit CMYK output (8 bits per component).
tiff64nc
Produces 64-bit CMYK output (16 bits per component).
-
tiffsep
+
tiffsep
The tiffsep device creates multiple output files: a single 32 bit
composite CMYK file and multiple tiffgray files, one for each
separation (unless -dNoSeparationFiles is specified). If separation
files are being produced and more than one page is being generated, the output file
specification must include a format specifier (e.g -o outfile-%d.tif)
-so that each page can have a uniquely named set of separation files.
+so that each page can have a uniquely named set of separation files.
The default compression is lzw but this may be overridden by
the -sCompression= option.
@@ -537,14 +538,15 @@ options, none of these are currently exposed. Any device author
interested in trying these options should contact Artifex for more
information. Currently ETS can be enabled using -dDownScaleETS=1.
-
tiffsep1
+
+
tiffsep1
The tiffsep1 device creates multiple output files, one for each component
or separation color. The device creates multiple tiffg4 files (the compression
can be set using -sCompression= described below). The 1 bit per component
output is halftoned using the current screening set by 'setcolorscreen'
or 'sethalftone' which allows for ordered dither or stochastic threshold
- array dither to be used. This is faster than error diffusion.
+ array dither to be used. This is faster than error diffusion.
The file specified via the OutputFile command line parameter will not be
@@ -559,8 +561,9 @@ name in '(' and ').tif' to the filename.
If the file name specified via the OutputFile parameter ends with the suffix
'.tif', then the suffix is removed prior to adding the component name in
'(' and ').tif'.
+
-
tiffscaled
+
tiffscaled
The tiffscaled device renders internally at the specified resolution to an
8 bit greyscale image. This is then scaled down by an integer scale factor
@@ -569,7 +572,7 @@ The tiffscaled device renders internally at the specified resolutio
below.
-
tiffscaled4
+
tiffscaled4
The tiffscaled4 device renders internally at the specified resolution to an
8 bit cmyk image. This is then scaled down by an integer scale factor
@@ -577,31 +580,31 @@ The tiffscaled4 device renders internally at the specified resoluti
4bpp cmyk output. The compression can be set using -sCompression= as described
below.
-
tiffscaled8
+
tiffscaled8
The tiffscaled8 device renders internally at the specified resolution to an
8 bit greyscale image. This is then scaled down by an integer scale factor
(set by -dDownScaleFactor= described below). The compression can be set using
-sCompression= as described below.
-
tiffscaled24
+
tiffscaled24
The tiffscaled24 device renders internally at the specified resolution to a
24 bit rgb image. This is then scaled down by an integer scale factor
(set by -dDownScaleFactor= described below). The compression can be set using
--sCompression= as described below.
+-sCompression= as described below.
In commercial builds, the -dDeskew option can be used to automatically detect/correct skew when generating output bitmaps.
-
-
tiffscaled32
+
+
tiffscaled32
The tiffscaled32 device renders internally at the specified resolution to a
32 bit cmyk image. This is then scaled down by an integer scale factor
(set by -dDownScaleFactor= described below). The compression can be set using
--sCompression= as described below.
+-sCompression= as described below.
In commercial builds, the -dDeskew option can be used to automatically detect/correct skew when generating output bitmaps.
-
+
@@ -775,11 +778,12 @@ a 200dpi image.
-sPostRenderProfile=path (path to an ICC profile)
If this option set then the page will be color transformed using that
-profile after downscaling.
+profile after downscaling.
This is useful when the file uses overprint to separately paint to some
subset of the C, M, Y, and K colorants, but the final CMYK is to be color
corrected for printing or display.
+
@@ -789,7 +793,7 @@ The tiffsep TIFF device also provide this parameter:
-dPrintSpotCMYK=boolean defaults to false. When set to true
the device will print (to stdout) the name of each ink used on the page, and the CMYK
values which are equivalent to 100% of that ink. The values are 16-bits ranging from 0
-to 32760.
+to 32760.
@@ -1086,14 +1090,14 @@ to use the existing font Encoding. For English text this may give better results
For these reasons the OCR functionality of pdfwrite can be controlled by using a new
parameter -sUseOCR. This has three possible values;
+
-sUseOCR=string
-
-
-
Never
Default - don't use OCR at all even if support is built-in.
-
AsNeeded
If there is no existing ToUnicode information, use OCR.
-
Always
Ignore any existing information and always use OCR.
-
-
+
+
Never
Default - don't use OCR at all even if support is built-in.
+
AsNeeded
If there is no existing ToUnicode information, use OCR.
+
Always
Ignore any existing information and always use OCR.
+
+
@@ -1200,8 +1204,10 @@ OS/2 and the gtk+ versions of ghostscript.
-dDisplayFormat=N (integer bit-field)
Some common values are 16#30804 for Windows RGB, 16#804 for gtk+ RGB,
16#20101 for Windows monochrome, 16#102 for gtk+ monochrome,
-16#20802 grayscale, 16#20808 for CMYK, 16#a0800 for separations.
-The bit fields are
+16#20802 grayscale, 16#20808 for CMYK, 16#a0800 for separations.
+
+The bit fields are:
+
native (1), gray (2), RGB (4), CMYK (8), or separation (80000)
color spaces.
Set the initial resolution resolution for the display device.
This is used by the Windows clients to set the display device
@@ -1329,7 +1336,7 @@ are summarized below:
-rnumber
- -rnumber1xnumber2
+
-rnumber1xnumber2
Sets the resolution, in dpi. If the resolution is not specified,
Ghostscript queries the IJS server to determine the preferred resolution.
When the resolution is specified, it overrides the value (if any)
@@ -1713,7 +1720,7 @@ the Windows printer driver; this option can produce huge print jobs).
Sets additional options, defined in a dictionary. The following properties can
be set:
-
+
/DocumentName string
Defines the user friendly document name which will be displayed by the
Windows spooler.
@@ -1737,7 +1744,7 @@ resolution of 1200/4=300 dpi. This can be very useful to reduce the memory
requirements when printing in True Color on some high resolution ink-jet color
printers.
-
+
diff --git a/doc/Drivers.htm b/doc/Drivers.htm
index 8c10ee12e..217d80c46 100644
--- a/doc/Drivers.htm
+++ b/doc/Drivers.htm
@@ -4,13 +4,13 @@
-
+
The Interface between Ghostscript and Device Drivers
-
@@ -134,7 +136,7 @@ need do is edit contrib.mak in two places.
The list of devices, in the section headed "Catalog". Add
smurf to the list.
-
The section headed "Device drivers".
+
The section headed "Device drivers".
Suppose the files containing the smurf driver are called
@@ -188,6 +190,7 @@ or
Note that the space before the :, and the explicit compilation rules for the
.c files, are required for portability,
+
@@ -387,6 +390,7 @@ structure, or to add procedures, you must change the following places:
(probably just adding NULL procedure entries if the
new procedures don't produce output).
These devices that must have complete (non-defaulted) procedure vectors:
The clip list accumulation "device" in
gxacpath.c.
The clipping "devices" gxclip.c,
@@ -779,7 +784,7 @@ gets gx_color_index values from the device's
procedures. If the separable_and_linear field in the device's
color_info structure is not set to
GX_CINFO_SEP_LIN then Ghostscript does not do
-any computations with gx_color_index values.
+any computations with gx_color_index values.
The special
@@ -820,6 +825,9 @@ For Microsoft and the MSVC compiler, GX_COLOR_INDEX_TYPE will
be set to unsigned _int64 if USE_LARGE_COLOR_INDEX
is set to 1 either on the make command line or by editing the definition
in msvc32.mak
+
+
+
@@ -841,7 +849,7 @@ filling a region (rectangle). gx_tile_bitmap is an
older, deprecated type lacking shift and
rep_shift;
gx_strip_bitmap has superseded it, and should be
-used in new code. Here is a copy of the relevant part of the file:
+used in new code. Here is a copy of the relevant part of the file:
@@ -1356,12 +1367,13 @@ always call gs_opendevice instead.
(nominally 1/72 inch per unit) to device coordinates. The default
procedure computes this from width, height, and
[xy]_pixels_per_inch on the assumption that
-the origin is in the upper left corner, that is
+the origin is in the upper left corner, that is
xx = x_pixels_per_inch/72, xy = 0, yx = 0, yy = -y_pixels_per_inch/72, tx = 0, ty = height.
+
@@ -1471,7 +1483,7 @@ the specified name is not a colorant for the device. A value of 0 to
of the given name. A value of GX_DEVICE_COLOR_MAX_COMPONENTS
indicates that the given name is a valid colorant name for the device but the
colorant is not currently being used. This is used for implementing names
-which are in SeparationColorNames but not in SeparationOrder.
+which are in SeparationColorNames but not in SeparationOrder.
The default procedure returns results based upon process color model
@@ -1479,6 +1491,7 @@ of DeviceGray, DeviceRGB, or DeviceCMYK selected by
color_info.num_components. This procedure must be
defined if another process color model is used by the device or spot colors are
supported by the device.
+
@@ -1488,7 +1501,7 @@ gx_device * dev, const gx_device ** tdev) [OPTIONAL]
+spaces since these already represent device colorants.
In many cases, the device returned in tdev will be the
same as dev, but the caller should not rely on this. For
@@ -1507,6 +1520,7 @@ procedure must be defined if another process color model is used by the
device or spot colors are to be supported. All these procedures take a
gx_device pointer; these should be called with the value
returned in tdev NOT the initial value of dev.
+
@@ -1517,11 +1531,12 @@ value. The range of legal values of the
arguments is 0 to gx_max_color_value. The default procedure
packs bits into a gx_color_index value based upon the
values in color_info.depth and
-color_info.num_components.
+color_info.num_components.
Note that the encode_color procedure
must not return gx_no_color_index (all 1s).
+
@@ -1573,11 +1588,12 @@ the point (x,y) is included in the rectangle, as are
not(x+w,y), (x,y+h), or
(x+w,y+h). If width <= 0 or
height <= 0, fill_rectangle should return 0
-without drawing anything.
+without drawing anything.
Note that fill_rectangle is the only non-optional procedure
in the driver interface.
+
Bitmap imaging
@@ -1608,13 +1624,14 @@ pixel is unaffected if the image bit is 0 or 1 respectively. If
id is different from gx_no_bitmap_id, it
identifies the bitmap contents unambiguously; a call with the same
id will always have the same data,
-raster, and data contents.
+raster, and data contents.
This operation, with
color0 = gx_no_color_index, is
the workhorse for text display in Ghostscript, so implementing it
efficiently is very important.
+
@@ -1632,7 +1649,7 @@ the device coordinate system. (Note that this is backwards from the
PostScript definition of halftone phase.) phase_x and
phase_y are guaranteed to be in the range
[0..tile->width) and
-[0..tile->height) respectively.
+[0..tile->height) respectively.
If color0 and color1 are both
@@ -1646,6 +1663,7 @@ implementing it efficiently for solid tiles (that is, where either
gx_no_color_index, for colored halftones, or neither one is
gx_no_color_index, for monochrome halftones) is very
important.
+
Pixmap imaging
@@ -1739,41 +1757,44 @@ Given a 2d source block of pixels (supplied as scanline data), this
function transforms that data, maps it through the supplied colour
lookup function, clips it, and plots it into the device.
-
In all calls to this function a negative return value indicates an error.
+
In all calls to this function a negative return value indicates an error.
Called first with the transform_pixel_region_init reason code,
this prepares for subsequent calls to scale a region as described in the
data.u.init structure. A pointer to any state required for
this should be written into data.state, and the caller must
-pass that in to subsequent calls.
+pass that in to subsequent calls.
Subsequently this will be called with transform_pixel_region_data_needed.
The function will then check to see if the next scanline of data will be trivially
clipped away. If so, then it will return zero to indicate that it is not needed.
This can help the caller to avoid unnecessary processing. A positive return value
-indicates that the line is required.
+indicates that the line is required.
For every line where the data is required, the function will be called with
transform_pixel_region_process_data. The function will then read
and process the line from data.u.process_data.
The data in the buffer is packed 8 bit values, which will be fed into the supplied
cmapper to set the device color as required. This is then written
-into the device.
+into the device.
Once all the scanlines have been fed through calls to transform_pixel_region_data_needed
and transform_pixel_region_process_data, a final call with transform_pixel_region_end
-is made that frees the state.
+is made that frees the state.
The default implementation of this device function will generally break the pixel
data down into calls to fill_rectangle, though in some cases (notably
the portrait 8 bit per component output case), a faster route through copy_color
-can be used.
+can be used.
Memory devices offer a version of this device function that can accelerate direct
-plotting to the memory array.
+plotting to the memory array.
NOTE: Currently the clipping rectangle is not honoured for skewed (not portrait or landscape)
transformations. This is allowed for in the callers.
+
+
+
Compositing
@@ -1791,7 +1812,7 @@ gx_bitmap_id id, int x, int y, int width,
int height, gx_color_index color, int depth)
[OPTIONAL]
This procedure is somewhat misnamed: it was added to the interface
-before we really understood alpha channel and compositing.
+before we really understood alpha channel and compositing.
Fill a given region with a given color modified by an individual alpha
@@ -1807,6 +1828,7 @@ rule.
with an 8 bit depth. In addition they should accept either 2 or 4 if
the corresponding get_alpha_bits procedure returns either
of those values.
+
@@ -1833,7 +1855,7 @@ it. Accordingly, the caller must watch the return values from this
function to understand if a new device has been created to which future
calls should be made.
-Devices will normally implement this in one of the following standard ways:
+Devices will normally implement this in one of the following standard ways:
Devices that don't do any imaging and don't forward any imaging
@@ -1894,6 +1916,7 @@ Closing a compositor frees all of its storage, including the compositor
itself. However, since the composite call may
return the same device, clients must check for this case, and only call the
close procedure if a separate device was created.
+
Draw a one-pixel-wide line from (fx0,fy0) to
-(fx1,fy1).
+(fx1,fy1).
+
+
Linear color drawing
@@ -1970,8 +1995,9 @@ or uses a non-separable or a non-linear color model.
const gs_fixed_point *p0, const gs_fixed_point *p1,
const gs_fixed_point *p2,
const frac31 *c0, const frac31 *c1, const frac31 *c2)
-
-[OPTIONAL]
+
+[OPTIONAL]
+
This function is the highest level one within the linear color function group.
It fills a triangle with a linearly varying color.
Arguments specify 3 points in the device space - vertices of a triangle, and their colors.
@@ -2031,8 +2057,8 @@ in gdevddrw.c for sample code.
This function is a lower level one within the linear color function group.
The default implementation of fill_linear_color_triangle
calls this function 1-2 times per triangle. Besides that,
@@ -2052,7 +2078,7 @@ All those important notes are applicable here.
Sample code may be found in in gxdtfill.h; be aware it's rather complicated.
A linear color function is generated from it as gx_fill_trapezoid_ns_lc
-with the following template parameters :
+with the following template parameters :
#define LINEAR_COLOR 1
@@ -2067,7 +2093,7 @@ with the following template parameters :
See check_gradient_overflow
(defined in in gdevddrw.c), as an example of an area
that can't be painted in a single action due to 64-bits fixed overflows.
-
+
@@ -2519,7 +2545,7 @@ gx_image_enum_common_t **pinfo) [OPTIONAL]image_plane_data function supplied in the returned image
enumerator will follow, and then a call of
end_image. The parameters of begin_typed_image
-are as follows:
+are as follows:
pis
@@ -2580,6 +2606,7 @@ is called.
begin_typed_image returns 0 normally, or 1 if the image does not
need any data. In the latter case, begin_typed_image does not
allocate an enumeration structure.
+
This call provides more of the image source data: specifically,
height rows, with Width pixels supplied for
-each row.
+each row.
The data for each row are packed big-endian within each byte, as for
@@ -2652,7 +2679,7 @@ arguments, does not require the data to be aligned in any way.
Note that for some image types, different planes may have different
numbers of bits per pixel, as defined in the plane_depths array.
@@ -2787,14 +2814,15 @@ error code as usual, or one of the following values (see
The client has asked to intervene between characters.
This is used for cshow and kshow.
+
int gs_text_release(gs_gstate * pgs, gs_text_enum_t *pte,
-client_name_t cname)
Finish processing text and release
+client_name_t cname)
Finish processing text and release
all associated structures. Clients must call this procedure after
gs_text_process returns 0 or an error, and may call it at
-any time.
+any time.
@@ -2840,9 +2868,9 @@ if the glyph can't be translated to Unicode.
int (*get_bits_rectangle)(gx_device *dev,
const gs_int_rect *prect, gs_get_bits_params_t *params)[OPTIONAL]
-
+
Read a rectangle of bits back from the device. The params
-structure consists of:
+structure consists of:
options
@@ -2865,7 +2893,11 @@ willing to accept. (If the client has more flexibility, the implementation
may be able to return the data more efficiently, by avoiding representation
conversions.) The options are divided into groups.
-
+
+
+
+
+
alignment
Specifies whether the returned data must be aligned in the normal
manner for bitmaps, or whether unaligned data are acceptable.
@@ -2910,7 +2942,9 @@ the standard color space. (Native device pixels use
Specifies whether alpha channel information should be returned as the
first component, the last component, or not at all. Note that for devices
that have no alpha capability, the returned alpha values will be all 1s.
-
+
+
+
The client may set more than one option in each of the above groups; the
diff --git a/doc/Fonts.htm b/doc/Fonts.htm
index cca8bc990..5e0680855 100644
--- a/doc/Fonts.htm
+++ b/doc/Fonts.htm
@@ -4,13 +4,13 @@
-
+
Fonts and Font Facilities Supplied with Ghostscript
-
@@ -85,7 +85,7 @@ This document is a record of changes in Ghostscript releases numbered 9.xx.
Version 9.55.0 (2021-09-27)
Highlights in this release include:
-
This release includes the fix for the %pipe% security issue (CVE-2021-3781).
+
This release includes the fix for the %pipe% security issue (CVE-2021-3781).
New PDF Interpreter: This is an entirely new implementation written in C (rather than
diff --git a/doc/Install.htm b/doc/Install.htm
index 6e2f88c1c..685dec030 100644
--- a/doc/Install.htm
+++ b/doc/Install.htm
@@ -4,13 +4,13 @@
-
+
@@ -62,6 +62,8 @@ platform-specific. See below for details.
Initialization files that Ghostscript reads in when it
starts up; these are the same on all platforms.
+
+
gs_*.ps unless Ghostscript was compiled
using the "compiled initialization files" option. See the documentation of
@@ -77,6 +79,7 @@ appropriate Fontmap.xxx for your platform), unless
you plan always to invoke Ghostscript with the -dNOFONTMAP switch.
+
Fonts, for rendering text. These are platform-independent,
but if you already have fonts of the right kind on your platform,
@@ -183,24 +186,24 @@ no responsibility for RPMs created by others.
We usually distribute Ghostscript releases for Windows as a binary installer,
for the convenience of most users.
-
Windows 3.1 (16-bit)
+
Windows 3.1 (16-bit)
The last version to run on 16-bit Windows 3.1 was Ghostscript 4.03.
-
Windows 95, 98, Me
+
Windows 95, 98, Me
The last version to be available as a binary for Windows 95/98/Me was 8.60. Although
building from source with Visual Studio 2003 should produce a working binary for those
versions.
-
Windows NT4, 2000, XP, 2003 or Vista (32-bit)
+
Windows NT4, 2000, XP, 2003 or Vista (32-bit)
The installer is normally named
gs###w32.exe,
where ### is the release number (e.g., 871 for Ghostscript 8.71,
910 for Ghostscript 9.10).
-
Windows XP x64 edition, 2003 or Vista (64-bit)
+
Windows XP x64 edition, 2003 or Vista (64-bit)
The x64 installer is normally named
gs###w64.exe
@@ -351,28 +354,30 @@ a different location so adjust the following commands accordingly.
Download the fonts and unpack them into
DISK1:[DIR.GHOSTSCRIPT.LIB].
-
Enable access to the program and support files for all users with:
+
Enable access to the program and support files for all users with:
$ set file/prot=w:re DISK1:[DIR]GHOSTSCRIPT.dir
$ set file/prot=w:re DISK1:[DIR.GHOSTSCRIPT...]*.*
-
+
Optionally, add the Ghostscript help instructions to your system wide
-help file:
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.
+has the executable attribute.
Operators defined in this way do one other thing besides running the
@@ -57,6 +57,9 @@ 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.
+
+
+
diff --git a/doc/Language.htm b/doc/Language.htm
index df8984a5e..7691101df 100644
--- a/doc/Language.htm
+++ b/doc/Language.htm
@@ -4,13 +4,13 @@
-
+
Ghostscript and the PostScript Language
-
@@ -588,12 +588,12 @@ current when beginning the layer. THIS AREA IS SUBJECT TO CHANGE.
Begins a new transparency group. The ll/ur coordinates
are the bounding box of the group in the current user coordinate system.
paramdict has the following keys:
-
+
/Isolated
(optional) Boolean; default value = false.
/Knockout
(optional) Boolean; default value = false.
-
+
@@ -609,7 +609,7 @@ onto the group that now becomes current.
The ll/ur coordinates
are the bounding box of the mask in the current user coordinate system.
paramdict has the following keys:
-
+
/Subtype
(required) Name, either /Alpha or
/Luminosity.
@@ -617,16 +617,18 @@ are the bounding box of the mask in the current user coordinate system.
(optional) Array of number.
/TransferFunction
(optional) Function object (produced by applying
-.buildfunction to a Function dictionary).
-
+.buildfunction to a Function dictionary).
+
The cs_set parameter is a boolean indicating whether the color
space for the mask group is the current color space in the graphics state, or
whether mask group color space should be inherited from the previous group
in the transparency group stack. In general, for the most consistent results,
it is recommended that this be set to true, and the intended
color space set in the graphics state prior to the .begintransparencymaskgroup
-call.
+call.
+
+
<mask#> .endtransparencymask -
Ends the current transparency mask group, compositing the mask group being ended
@@ -778,7 +780,7 @@ pushes false on the stack and returns, rather than causing an error.
<string> <file>
Creates and opens a temporary file
like the file operator, also returning the file name. There
-are three cases for the <prefix_string|null> operand:
+are three cases for the <prefix_string|null> operand:
null: create the file in the same directory and with the
@@ -795,46 +797,48 @@ temporary file might be named /tmp/xxa1234.
<prefix_string> as the first part of the file name.
E.g., if <prefix_string> is
/my/tmpdir/zz, the temporary file might be named
-/my/tmpdir/zza1234.
+/my/tmpdir/zza1234.
+
When running in SAFER mode, the absolute path must
be one of the strings on the permit file writing list
-(see -dSAFER) .
Ghostscript also supports the following IODevice in
addition to a subset of those defined in the Adobe documentation:
-
-%pipe%command, which opens a pipe on the given command.
-This is supported only on operating systems that provide
-popen (primarily Unix systems, and not all of those).
-
-%disk#%, which emulates the %disk0
-through %disk9 devices on some Adobe PostScript printers. This pseudo
-device provides a flat filenaming system with a user definable location
-for the files (/Root). These devices will only be present if the
-diskn.dev feature is specified during the build.
-
-
This feature is intended to allow compatibility with font downloaders
-that expect to store fonts on the %disk device of the printer.
-
-Use of the %disk#% devices requires that the location of files be given
-by the user setting the /Root device parameter. The syntax for setting
-the /Root parameter is:
- mark /Root (directory_specification) (%disk#) .putdevparams
-
-For example, to store the files of the %disk0 device on the directory
-/tmp/disk0, use:
- mark /Root (/tmp/disk0/) (%disk0) .putdevparams
-
-
The files will be stored in the specified directory with arbitrary names.
-A mapping file is used to store the association between the file
-names given for the file operations on the %diskn# device and the file
-that resides in the /Root directory.
+
+ %pipe%command, which opens a pipe on the given command.
+ This is supported only on operating systems that provide
+ popen (primarily Unix systems, and not all of those).
+
+ %disk#%, which emulates the %disk0
+ through %disk9 devices on some Adobe PostScript printers. This pseudo
+ device provides a flat filenaming system with a user definable location
+ for the files (/Root). These devices will only be present if the
+ diskn.dev feature is specified during the build.
+
+
This feature is intended to allow compatibility with font downloaders
+ that expect to store fonts on the %disk device of the printer.
+
+ Use of the %disk#% devices requires that the location of files be given
+ by the user setting the /Root device parameter. The syntax for setting
+ the /Root parameter is:
+ mark /Root (directory_specification) (%disk#) .putdevparams
+
+ For example, to store the files of the %disk0 device on the directory
+ /tmp/disk0, use:
+ mark /Root (/tmp/disk0/) (%disk0) .putdevparams
+
+
The files will be stored in the specified directory with arbitrary names.
+ A mapping file is used to store the association between the file
+ names given for the file operations on the %diskn# device and the file
+ that resides in the /Root directory.
+
Miscellaneous operators
@@ -917,7 +921,7 @@ is useful even with release builds.
- .setsafe -
If Ghostscript is started with -dNOSAFER or
-dDELAYSAFER, this operator can be used to enter SAFER
-mode (see -dSAFER)
This operator creates an ordered dither screening pattern with the parameters from the dictionary, returning (by default) a PostScript HalftoneType 3 (threshold array based) dictionary suitable for use with sethalftone or as a component Halftone of a HalftoneType 5 Halftone dictionary. The /OutputType parameter can also select other than Halftone Type 3 as the return paramter,
-<dict> has the following keys (all are optional):
-
+<dict> has the following keys (all are optional):
/Frequency
Integer; default value = 75
/Angle
@@ -1051,10 +1055,6 @@ threshold array bytes (same as /Thresholds of the Type3 dictionary).
First element is the width, next is the height, followed by pairs X, then Y, of the turn-on-sequence of the threshold array. This information can be used to construct a threshold array with a transfer function "pickled into" the threshold array, which is useful if the turn-on-sequence has more than 256 pairs. Refer to toolbin/halftone/thresh_remap for more information.
-
-
-
-
@@ -1278,7 +1278,7 @@ bytes.
Type 1 Font Format documentation. The seed_integer must be
55665 or 4330 as described just above. PDF interpreters don't skip space characters
after operator eexec. Use keep_spaces = true for
-decoding embedded PDF fonts. Recognized dictionary keys are:
+decoding embedded PDF fonts. Recognized dictionary keys are:
Create filters that implement the Adobe Tagged Binary Communications
Protocol. See Adobe documentation for details.
-
+
<target> /zlibEncode filter <file>
@@ -1411,7 +1413,7 @@ is the inverse mapping of the string for the
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:
@@ -1428,11 +1431,12 @@ and decoding:
method, which we've heard is also used in the popular bzip2
compression application. See http://sources.redhat.com/bzip2/
-for more information. The only recognized dictionary key is:
+for more information. The only recognized dictionary key is:
BlockSize <integer> (default=16384)
+
@@ -1451,11 +1455,12 @@ devices:
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.
+if it is already true.
If this parameter is true for the current device, attempt to set a new
device that has .LockSafetyParams false will signal an
invalidaccess error.
+
@@ -2054,60 +2059,51 @@ document these officially, so that in future the functionality would be availabl
The following functions existed in the original PDF interpreter and have been replicated for the new
interpreter. It should be possible to use these for the forseeable future.
-
+
<file> runpdf -
Called from the modified PostScript run operator (which copies stdin to a temp
file if required). Checks for PDF collections, processes all requested pages.
-
<file> runpdfbegin -
+
<file> runpdfbegin -
This must be called before performing any further operations. Its exact action depends on which
-interpreter is being used, but it essentially sets up the environment to process the file as a PDF
-
-
<int> pdfgetpage <pagedict> | <null>
+interpreter is being used, but it essentially sets up the environment to process the file as a PDF
+
<int> pdfgetpage <pagedict> | <null>
int is a number from 1 to N indicating the desired page number from
the PDF file. Returns the a dictionary containing various informational key/value pairs.
- If this fails, returns a null object.
-
-
- pdfshowpage_init -
+ If this fails, returns a null object.
+
- pdfshowpage_init -
In the PostScript PDF interpreter this simply adds 1 to the /DSCPageCount value in a dictionary.
-It has no effect in the new PDF interpreter but is maintained for backwards compatibility.
+It has no effect in the new PDF interpreter but is maintained for backwards compatibility.
-
<pagedict> pdfshowpage_setpage <pagedict>
+
<pagedict> pdfshowpage_setpage <pagedict>
Takes a dictionary as returned from pdfgetpage, extracts various
parameters from it, and sets the media size for the page, taking into
- account the boxes, and requested Box, Rotate value and PDFFitPage.
-
-
<pagedict> pdfshowpage_finish -
+ account the boxes, and requested Box, Rotate value and PDFFitPage.
+
<pagedict> pdfshowpage_finish -
Takes a dictionary as returned from pdfgetpage, renders the page content
- executes showpage to transfer the rendered content to the device.
-
-
- runpdfend -
-
Terminates the PDF processing, executes restore and various cleanup activities.
-
-
<file> pdfopen <dict>
+ executes showpage to transfer the rendered content to the device.
+
- runpdfend -
+
Terminates the PDF processing, executes restore and various cleanup activities.
+
<file> pdfopen <dict>
Open a PDF file and read the header, trailer
- and cross-reference.
-
-
<dict> pdfclose -
+ and cross-reference.
+
<dict> pdfclose -
Terminates processing the original PDF file object. The dictionary parameter
- should be the one returned from pdfopen
-
-
<pagedict> pdfshowpage -
+ should be the one returned from pdfopen
+
<pagedict> pdfshowpage -
Takes a dictionary returned from pdfgetpage and calls the pdfshowpage_init
pdfshowpage_setpage, pdfshowpage_finish trio to start the page, set up the
- media and render the page.
-
-
<int> <int> dopdfpages -
+ media and render the page.
+
<int> <int> dopdfpages -
The integers are the first and last pages to be run from the file. Runs a loop from
the fist integer to the last. NOTE! If the current dictionary contains a PDFPageList
array then we 'get' the entry from the array corresponding to the current loop
index, and use that to determine whether we should draw the page. Otherwise we
- simply draw the page. Uses pdfshowpage to actually render the page.
-
-
- runpdfpagerange <int> <int>
+ simply draw the page. Uses pdfshowpage to actually render the page.
+
- runpdfpagerange <int> <int>
Processes the PostScript /FirstPage, /LastPage and /PageList parameters. These are used together to build an internal array
of page numbers to run, which is used by dopdfpages to actually process the pages if PageList is present,
- and a FirstPage and LastPage value. Despite the name this function does not actually 'run' any pages at all.
+ and a FirstPage and LastPage value. Despite the name this function does not actually 'run' any pages at all.
Normal operation simply calls runpdf with an opened-for-read PostScript file object. The table below shows the normal
calling sequence
@@ -2192,28 +2188,22 @@ would be necessary to set /PageHasTransparency before drawing the first PDF page
using a small number of custom PostScript operators. These operators do not exist in standard PostScript; they
are specific to the Ghostscript implementation. These operators are documented here for the benefit of any
developers wishing to use them directly.
+
-
dict .PDFInit <PDFContext>
+
dict .PDFInit <PDFContext>
Initialises an instance of the PDF interpreter. dict is an optional dictionary that contains any interpreter-level
switches, such as PDFDEBUG, this is used to set the initial state of the PDF interpreter.
-The return value is a PDFcontext object which is an opaque object to be used with the other PDF operators.
-
-
filename PDFcontext .PDFFile -
+The return value is a PDFcontext object which is an opaque object to be used with the other PDF operators.
+
filename PDFcontext .PDFFile -
Opens a named file and associates it with the instance of the PDF interpreter.
Filename is a string containing a fully qualified path to the PDF file to open, this file must have been made accesible
by setting --permit-file-read.
-
-
-
file PDFcontext .PDFStream -
+
file PDFcontext .PDFStream -
Takes an already open (disk-based) file and associates it with the instance of the PDF interpreter.
-
-
-
PDFcontext .PDFClose -
+
PDFcontext .PDFClose -
If the context contains an open PDF file which was opened via the .PDFfile operator, this closes the file.
Files associated with the context by the .PDFStream operator are unaffected. Regardless of the source it then shuts down the PDF interpreter and frees the associated memory.
-
-
-
PDFcontext .PDFInfo dict
+
PDFcontext .PDFInfo dict
PDFcontext is a PDFcontext object returned from a previous call to .PDFInit.
The returned dictionary contains various key/value pairs with useful file level information:
@@ -2222,17 +2212,13 @@ The returned dictionary contains various key/value pairs with useful file level
/Producer string /IsEncrypted boolean
-
-
-
PDFcontext .PDFMetadata -
+
PDFcontext .PDFMetadata -
PDFcontext is a PDFcontext object returned from a previous call to .PDFInit.
For the benefit of high level devices, this is a replacement for 'process_trailer_attrs' which is a seriously misnamed function now.
This function needs to write any required output intents, load and send Outlines to the device, copy the Author, Creator, Title, Subject
and Keywords from the Info dict to the output device, copy Optional Content Properties (OCProperties) to the output device.
If an AcroForm is present send all its fields and link widget annotations to fields, and finally copy the PageLabels. If we add support for anything else, it will be here too..
-
-
-
PDFcontext int .PDFPageInfo -
+
PDFcontext int .PDFPageInfo -
The integer argument is the page number to retrieve information for.
Returns a dictionary with the following key/value pairs:
@@ -2250,27 +2236,28 @@ May also contain (if they are present in the Page dictionary)
/TrimBox [llx lly urx ury] /UserUnit int
-
-
-
PDFcontext int .PDFDrawPage -
+
+
PDFcontext int .PDFDrawPage -
PDFcontext is a PDFcontext object returned from a previous call to .PDFInit.
The integer argument is the page number to be processed.
Interprets the page content stream(s) of the specified page using the current graphics state.
-
+
-
PDFcontext int .PDFDrawAnnots -
+
PDFcontext int .PDFDrawAnnots -
PDFcontext is a PDFcontext object returned from a previous call to .PDFInit.
The integer argument is the page number to be processed.
Renders the Annotations (if any) of the specified page using the current graphics state
For correct results, the graphics state when this operator is run should be the same as when
PDFDrawPage is executed.
-
+
Note: The PDFcontext object created by PDFInit must (clearly) have a PDF file associated
with it before you can usefully use it. Attempting to use a PDFcontext with
any of the processing operators (eg .PDFDrawPage) before using either .PDFStream of .PDFFile
to associate a file with the context will result in an error.
Deletes all the files created by the build process (relocatables,
executables, and miscellaneous temporary files). If you've built an
executable and want to save it, move it first to another place, because
- "make clean" deletes it.
?
+ "make clean" deletes it.
@@ -1118,7 +1118,7 @@ on your particular platform and compiler. In fact, that is the
first place to check if you build Ghostscript and it crashes
or produces obviously incorrect results.
-
make tools
+
make tools
You require a make tool which supports separate directories for
@@ -1142,11 +1142,11 @@ Ghostscript.
H-P RISC workstations
-
+
(see Autoconf-based method above)
-
+
HP-UX versions before 11.0 do not support POSIX threads. Set
SYNC=nosync in the makefile before building.
@@ -1160,6 +1160,8 @@ work. If cc on your system doesn't accept the
If you use H-P's compiler, be sure you have upgraded to a recent
release. Many bizarre symptoms have been reported trying to build
Ghostscript with older, buggier compilers, for example:
+
+
The link step fails with a message about "max" not being defined.
The build succeeds, but the resulting executable fails to start up,
@@ -1168,6 +1170,7 @@ in .registerencoding".
The build succeeds, but the resulting executable produces a black
background on the first page of output.
+
It is reported that On HPUX 9.* you need at least compiler patch
PHSS_5723 and dld.sl patch PHSS_5734 to build Ghostscript. (As of late
@@ -1223,7 +1226,7 @@ please read the following carefully.
- To make the optimizer allocate enough table space, set
+ To make the optimizer allocate enough table space, set
@@ -1231,7 +1234,7 @@ please read the following carefully.
MIPSpro compiler version 3.19 is "older", and 7.1 is "newer"; we aren't
sure at what point in between the latter syntax was introduced.
-
+
With the compiler shipped with Irix 5.2, use the -ansi
option.
@@ -1252,30 +1255,32 @@ incorrect output and binaries that cause segmentation faults. Various
solutions have been suggested and you may want to try them in this order,
until you get a working binary:
-
-Compile idict.c and isave.c separately
-without optimization after doing a normal compile; then relink.e.g.:
-Use only -O2. Compiler produces incorrect output
-with -O3 or "-Ofast=ip32 -show".
-
-
-Irix 6.5.1m with MIPSpro compiler 7.2.1.1m, Irix 6.5.3m with MIPSpro
-compiler 7.2.1, and probably other 6.5x / 7.2x combinations require
-compiling with the -o32 option. Compiling with the (default)
--n32 option produces non-working executables.
--O2 is OK (possibly except for idict.c), but
-not -O3.
-
+
+
+ Compile idict.c and isave.c separately
+ without optimization after doing a normal compile; then relink.e.g.:
+
+
+ cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/idict.o -c ./idict.c
+ cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/isave.o -c ./isave.c
+
+
+ Set CFLAGS= (no optimization).
+
+
+ Use only -O2. Compiler produces incorrect output
+ with -O3 or "-Ofast=ip32 -show".
+
+
+ Irix 6.5.1m with MIPSpro compiler 7.2.1.1m, Irix 6.5.3m with MIPSpro
+ compiler 7.2.1, and probably other 6.5x / 7.2x combinations require
+ compiling with the -o32 option. Compiling with the (default)
+ -n32 option produces non-working executables.
+ -O2 is OK (possibly except for idict.c), but
+ not -O3.
+
+
Oracle/Sun
@@ -1307,13 +1312,14 @@ Solaris 2.3 and later seem to require "EXTRALIBS=-lnsl -lsocket
For Solaris 2.6 (and possibly some other versions), if you set
SHARE_LIBPNG=1, SHARE_ZLIB=1, or
-SHARE_JPEG=1, you may need to set
+SHARE_JPEG=1, you may need to set
XLDFLAGS=-R /usr/local/xxx/lib:/usr/local/lib
using the full path names of the relevant directories.
+
Solaris 2.n uses /usr/openwin/share/include
for the X11 libraries rather than /usr/local/X/include.
This release includes the fix for the %pipe% security issue (CVE-2021-3781).
+
This release includes the fix for the %pipe% security issue (CVE-2021-3781).
New PDF Interpreter: This is an entirely new implementation written in C (rather than
diff --git a/doc/Ps-style.htm b/doc/Ps-style.htm
index 4820f6cc8..206effe1d 100644
--- a/doc/Ps-style.htm
+++ b/doc/Ps-style.htm
@@ -4,13 +4,13 @@
-
+
@@ -56,7 +56,6 @@ These files define the Encodings known to Ghostscript. All of
them except gs_std_e.ps and gs_il1_e.ps
are loaded only if referred to. However some are additionally built into gscencs.c.
-
PostScript Encodings:
@@ -78,7 +77,7 @@ the Ghostscript source distribution.
-
PDF Encodings:
+PDF Encodings:
These files are found in the Resource/Init subdirectory of
the Ghostscript source distribution.
@@ -132,7 +131,7 @@ the Ghostscript source distribution.
-
+
These files are found in the Resource/Init subdirectory of
the Ghostscript source distribution.
@@ -716,13 +716,13 @@ class="offsite">http://ghostscript.com/download/
Do the steps for distributions in general.
-
MS Windows source and executables:
+
MS Windows source and executables:
gs###w32.exegs###w64.exe
-
+
Third-party libraries, as links (upload these if not installed), where
$$$ et al. refer to the version number of the library, which
should be the latest compatible release of the library and should be
@@ -743,13 +743,13 @@ the original name of the upstream file.
Fonts, where $.$$ refers to the most recent version
-number of the fonts:
diff --git a/doc/thirdparty.htm b/doc/thirdparty.htm
index 3c4d74df5..06429da52 100644
--- a/doc/thirdparty.htm
+++ b/doc/thirdparty.htm
@@ -4,13 +4,13 @@
-
+
Third Party Libraries Used by Ghostscript and GhostPDL
-