diff --git a/.gitignore b/.gitignore
index 1a934e7..34e7179 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/netpbm-10.61.02.tar.xz
+/netpbm-10.66.02.tar.xz
diff --git a/netpbm-compare-same-images.patch b/netpbm-compare-same-images.patch
deleted file mode 100644
index c629c4c..0000000
--- a/netpbm-compare-same-images.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/analyzer/pnmpsnr.c b/analyzer/pnmpsnr.c
-index ce2708b..b04316c 100644
---- a/analyzer/pnmpsnr.c
-+++ b/analyzer/pnmpsnr.c
-@@ -55,14 +55,14 @@ validateInput(struct pam const pam1,
- "maxval of one of them.",
- (unsigned int) pam1.maxval, (unsigned int) pam2.maxval);
-
-- if (streq(pam1.tuple_type, pam2.tuple_type))
-+ if (!streq(pam1.tuple_type, pam2.tuple_type))
- pm_error("images are not of the same type. The tuple types are "
- "'%s' and '%s', respectively.",
- pam1.tuple_type, pam2.tuple_type);
-
-- if (streq(pam1.tuple_type, PAM_PBM_TUPLETYPE) &&
-- streq(pam1.tuple_type, PAM_PGM_TUPLETYPE) &&
-- streq(pam1.tuple_type, PAM_PPM_TUPLETYPE))
-+ if (!streq(pam1.tuple_type, PAM_PBM_TUPLETYPE) &&
-+ !streq(pam1.tuple_type, PAM_PGM_TUPLETYPE) &&
-+ !streq(pam1.tuple_type, PAM_PPM_TUPLETYPE))
- pm_error("Images are not of a PNM type. Tuple type is '%s'",
- pam1.tuple_type);
- }
diff --git a/netpbm-disable-pbmtog3.patch b/netpbm-disable-pbmtog3.patch
new file mode 100644
index 0000000..7fb3ef6
--- /dev/null
+++ b/netpbm-disable-pbmtog3.patch
@@ -0,0 +1,13 @@
+diff --git a/test/Test-Order b/test/Test-Order
+index ff4b985..7ef1d97 100644
+--- a/test/Test-Order
++++ b/test/Test-Order
+@@ -74,7 +74,7 @@ symmetry.test
+
+ # Format converter tests
+
+-pbmtog3.test
++#pbmtog3.test
+ 411toppm.test
+ eyuvtoppm.test
+
diff --git a/netpbm-man-repeated.patch b/netpbm-man-repeated.patch
deleted file mode 100644
index 212bb19..0000000
--- a/netpbm-man-repeated.patch
+++ /dev/null
@@ -1,323 +0,0 @@
-diff --git a/userguide/cameratopam.html b/userguide/cameratopam.html
-index 7a6391e..89f6939 100644
---- a/userguide/cameratopam.html
-+++ b/userguide/cameratopam.html
-@@ -163,7 +163,7 @@ means.
- href="http://www.cybercom.net/~dcoffin/dcraw/">dcraw by Dave
- Coffin, by Bryan Henderson in April 2005. Bryan replaced the part
- that generates the Netpbm output image and removed the Adobe Photoshop
--output function. Bryan changed the command syntax and and made other
-+output function. Bryan changed the command syntax and made other
- small changes to make the program consistent with Netpbm. He also
- split the source code into manageable pieces (dcraw has a
- single 5000 line source file).
-diff --git a/userguide/fiascotopnm.html b/userguide/fiascotopnm.html
-index 2cd4f01..f1f1b17 100644
---- a/userguide/fiascotopnm.html
-+++ b/userguide/fiascotopnm.html
-@@ -76,7 +76,7 @@ Set magnification of the decompressed image. Positive values enlarge
- and negative values reduce the image width and height by a factor of
- 2^|N|.
-
--
-s N, --smooth=N
-+-s N, --smoothing=N
-
- Smooth decompressed image(s) along the partitioning borders by the
- given amount N. N is 1 (minimum) to 100 (maximum); default
-@@ -88,6 +88,10 @@ FIASCO file is used (defined by the FIASCO coder).
- Set number of frames per second to N. When using this option,
- the frame rate specified in the FIASCO file is overridden.
-
-+--verbose=N
-+
-+Set verbose of fiascotopnm to N.
-+
- -v, --version
-
- Print fiascotopnm version number, then exit.
-diff --git a/userguide/pamdepth.html b/userguide/pamdepth.html
-index 1a2b5fd..c188e44 100644
---- a/userguide/pamdepth.html
-+++ b/userguide/pamdepth.html
-@@ -52,7 +52,7 @@ files before April 2000.
- pnmdepth, by Jef Poskanzer. pamdepth is backward compatible
- with pnmdepth and adds the ability to process arbitrary PAM images
- and the ability to process multi-image input streams. pnmdepth
--handled only PNM images and ignored all but the the first in any stream.
-+handled only PNM images and ignored all but the first in any stream.
-
-
- Table Of Contents
-diff --git a/userguide/pamdice.html b/userguide/pamdice.html
-index 0659e15..9053113 100644
---- a/userguide/pamdice.html
-+++ b/userguide/pamdice.html
-@@ -139,7 +139,7 @@ in each direction.
- pgmslice,
- ppmglobe
- pnm
--pnm
-+pam
-
-
- Table Of Contents
-diff --git a/userguide/pamstereogram.html b/userguide/pamstereogram.html
-index c337547..652b887 100644
---- a/userguide/pamstereogram.html
-+++ b/userguide/pamstereogram.html
-@@ -319,7 +319,7 @@ be. Lower (darker) numbers mean further from the eye.
-
-
-
--pamstereogram pays no attention the the image's tuple
-+
pamstereogram pays no attention the image's tuple
- type and ignores all planes other than plane 0.
-
- Like any Netpbm program, pamstereogram will accept PNM
-diff --git a/userguide/pamtofits.html b/userguide/pamtofits.html
-index 445b326..0ecc806 100644
---- a/userguide/pamtofits.html
-+++ b/userguide/pamtofits.html
-@@ -54,7 +54,7 @@ approximation.
-
Pixel Order
-
- The FITS specification does not specify which data in the file corresponds
--to which pixel in the image (i.e. which bytes are the the top left pixel,
-+to which pixel in the image (i.e. which bytes are the top left pixel,
- etc.). Netpbm uses the common sense, most popular arrangement: row major, top
- to bottom, left to right. That means in a 10 wide by 20 high image, the first
- 10 pixels in the file are the top row and the last 10 are the bottom row.
-diff --git a/userguide/pamtojpeg2k.html b/userguide/pamtojpeg2k.html
-index 06b6113..046d740 100644
---- a/userguide/pamtojpeg2k.html
-+++ b/userguide/pamtojpeg2k.html
-@@ -181,7 +181,7 @@ its goal is similar to JPEG. It has two main differences from JPEG.
-
One difference is that it does a much better job on most images of
- throwing out information in order to achieve a smaller output. That
- means when you reconstruct the image from the resulting compressed
--file, it looks a lot closer to the image you started with with
-+file, it looks a lot closer to the image you started with
- JPEG-2000 than with JPEG, for the same compressed file size. Or, looked
- at another way, with JPEG-2000 you get a much smaller file than with
- JPEG for the same image quality.
-diff --git a/userguide/pamtotiff.html b/userguide/pamtotiff.html
-index f07d227..c7a48a0 100644
---- a/userguide/pamtotiff.html
-+++ b/userguide/pamtotiff.html
-@@ -124,7 +124,7 @@ format it produces are therefore controlled by that library.
-
By default, pamtotiff creates a TIFF file with no
- compression. This is your best bet most of the time. If you want to
- try another compression scheme or tweak some of the other even more
--obscure output options, there are a number of options which which to
-+obscure output options, there are a number of options which to
- play.
-
-
Before Netpbm 8.4 (April 2000), the default was to use LZW compression.
-diff --git a/userguide/pamtouil.html b/userguide/pamtouil.html
-index 1074119..6c2356b 100644
---- a/userguide/pamtouil.html
-+++ b/userguide/pamtouil.html
-@@ -57,7 +57,7 @@ in the RGB database.
-
-
SEE ALSO
-
--pam
-+pamstack
- pam
- ppm
-
-diff --git a/userguide/pamundice.html b/userguide/pamundice.html
-index 2b789b4..bf366d6 100644
---- a/userguide/pamundice.html
-+++ b/userguide/pamundice.html
-@@ -208,7 +208,7 @@ clips the bottom edge of each image before joining it to the one below.
- pnmindex,
- pnmtile,
- pnm
--pnm
-+pam
-
-
- Table Of Contents
-diff --git a/userguide/pbm.html b/userguide/pbm.html
-index 63dfa40..7db4886 100644
---- a/userguide/pbm.html
-+++ b/userguide/pbm.html
-@@ -136,7 +136,7 @@ P1
- accepting anything that looks remotely like a bitmap.
-
- All characters referred to herein are encoded in ASCII.
--"newline" refers the the character known in ASCII as Line
-+"newline" refers the character known in ASCII as Line
- Feed or LF. A "white space" character is space, CR, LF,
- TAB, VT, or FF (I.e. what the ANSI standard C isspace() function
- calls white space).
-diff --git a/userguide/pbmtolj.html b/userguide/pbmtolj.html
-index ce7e9bb..6da4555 100644
---- a/userguide/pbmtolj.html
-+++ b/userguide/pbmtolj.html
-@@ -83,7 +83,7 @@ and end of the output file.
-
-
-copies
-
--Specifies the the number of copies. The default is 1. This option
-+Specifies the number of copies. The default is 1. This option
- controls the "number of copies" printer control;
- pbmtolj generates only one copy of the image.
-
-diff --git a/userguide/pgm.html b/userguide/pgm.html
-index d75c9ef..7df1abc 100644
---- a/userguide/pgm.html
-+++ b/userguide/pgm.html
-@@ -153,7 +153,7 @@ P2
- accepting anything that looks remotely like a PGM.
-
- All characters referred to herein are encoded in ASCII.
--"newline" refers the the character known in ASCII as Line
-+"newline" refers the character known in ASCII as Line
- Feed or LF. A "white space" character is space, CR, LF,
- TAB, VT, or FF (I.e. what the ANSI standard C isspace() function
- calls white space).
-diff --git a/userguide/pngtopam.html b/userguide/pngtopam.html
-index 8185843..09406ef 100644
---- a/userguide/pngtopam.html
-+++ b/userguide/pngtopam.html
-@@ -269,7 +269,7 @@ change to the package in Netpbm's renaissance. It and pnmtopng
- were simply copied from the
- pnmtopng package by Greg Roelofs. Those were based on
--simpler reference applications by by Alexander Lehmann
-+simpler reference applications by Alexander Lehmann
- <alex@hal.rhein-main.de> and Willem van Schaik
- <willem@schaik.com> and distributed with their PNG library.
-
-diff --git a/userguide/pnmnorm.html b/userguide/pnmnorm.html
-index c4d2558..5d3ca49 100644
---- a/userguide/pnmnorm.html
-+++ b/userguide/pnmnorm.html
-@@ -146,7 +146,7 @@ value 99 or the white value 101.
- option. Sometimes, too much contrast is a bad thing. If your
- intensities are all concentrated in the middle, -bpercent=2 and
- -wpercent=1 might mean that an intensity of 60 gets stretched
--up to 100 and and intensity of 20 gets stretched down to zero, for a
-+up to 100 and intensity of 20 gets stretched down to zero, for a
- range expansion of 150% (from a range of 40 to a range of 100). That
- much stretching means two adjacent pixels that used to differ in
- intensity by 4 units now differ by 10, and that might be unsightly.
-diff --git a/userguide/pnmtopalm.html b/userguide/pnmtopalm.html
-index 94aa6ff..9ca9c0d 100644
---- a/userguide/pnmtopalm.html
-+++ b/userguide/pnmtopalm.html
-@@ -164,7 +164,7 @@ the -colormap option, for much the same reason.
-
-
-withdummy
-
--This option tells pnmtopalm to put in the stream, after after
-+This option tells pnmtopalm to put in the stream, after
- the image, a dummy image header to introduce subsequent high density
- images.
-
-diff --git a/userguide/ppm.html b/userguide/ppm.html
-index c71aaa4..8e7a111 100644
---- a/userguide/ppm.html
-+++ b/userguide/ppm.html
-@@ -158,7 +158,7 @@ P3
- accepting anything that looks remotely like a PPM image.
-
- All characters referred to herein are encoded in ASCII.
--"newline" refers the the character known in ASCII as Line
-+"newline" refers the character known in ASCII as Line
- Feed or LF. A "white space" character is space, CR, LF,
- TAB, VT, or FF (I.e. what the ANSI standard C isspace() function
- calls white space).
-diff --git a/userguide/ppmtompeg.html b/userguide/ppmtompeg.html
-index 4fa4a53..99efed9 100644
---- a/userguide/ppmtompeg.html
-+++ b/userguide/ppmtompeg.html
-@@ -1023,7 +1023,7 @@ without respect to any other frame in the movie. A P frame
- ("predictive" frame) describes a movie frame by describing how it
- differs from the movie frame described by the latest preceding I or
- P frame. A B frame ("bidirectional" frame) describes a movie frame by
--describing how it differs from the the movie frames described by the
-+describing how it differs from the movie frames described by the
- nearest I or P frame before and after it.
-
-
Note that the first frame of a movie must be described by an I
-diff --git a/userguide/ppmtopj.html b/userguide/ppmtopj.html
-index c07c1d9..b50be28 100644
---- a/userguide/ppmtopj.html
-+++ b/userguide/ppmtopj.html
-@@ -61,7 +61,7 @@ You could convert your input to this format like this:
- pnmremap -map 8color.pam testimg.pam | ppmtopj
-
-
--Or you could use use
-+Or you could use
-
- ppmdither -red 2 -green 2 -blue 2
-
-diff --git a/userguide/qrttoppm.html b/userguide/qrttoppm.html
-index b6bf976..112bf50 100644
---- a/userguide/qrttoppm.html
-+++ b/userguide/qrttoppm.html
-@@ -22,7 +22,7 @@ qrttoppm - convert output from the QRT ray tracer to a PPM image
-
- This program is part of Netpbm.
-
--
qrttoppm reads a QRT file as input and and produces a PPM
-+
qrttoppm reads a QRT file as input and produces a PPM
- image as output.
-
-
-diff --git a/userguide/sbigtopgm.html b/userguide/sbigtopgm.html
-index 400bcaf..78f9454 100644
---- a/userguide/sbigtopgm.html
-+++ b/userguide/sbigtopgm.html
-@@ -22,7 +22,7 @@ sbigtopgm - convert an SBIG CCDOPS file to PGM
-
-
This program is part of Netpbm.
-
--
sbigtopgm reads an an image file in the native format used
-+
sbigtopgm reads an image file in the native format used
- by the Santa Barbara Instrument Group (SBIG) astronomical CCD cameras,
- and produces a PGM image as output. Additional information on SBIG
- cameras and documentation of the file format is available at the Web
-diff --git a/userguide/srftopam.html b/userguide/srftopam.html
-index b27f133..c98586f 100644
---- a/userguide/srftopam.html
-+++ b/userguide/srftopam.html
-@@ -30,7 +30,7 @@
-
-
This program is part of Netpbm.
-
--srftopam reads a a SRF image file as input and produces a
-+
srftopam reads a SRF image file as input and produces a
- multi-image stream of PAM images as output.
-
-
This program performs the inverse of the conversion that pamtosrf
-diff --git a/userguide/sunicontopnm.html b/userguide/sunicontopnm.html
-index 6ccbcde..0290f7b 100644
---- a/userguide/sunicontopnm.html
-+++ b/userguide/sunicontopnm.html
-@@ -54,7 +54,7 @@ mostly XPM files.
- xbmtoppm,
- infotopam,
- pbm
--pbm
-+pgm
-
-
HISTORY
-
-diff --git a/userguide/xpmtoppm.html b/userguide/xpmtoppm.html
-index c7c857b..f96b249 100644
---- a/userguide/xpmtoppm.html
-+++ b/userguide/xpmtoppm.html
-@@ -46,7 +46,7 @@ alpha output to Standard Output and discards the image.
- the alpha output file.
-
- xpmtoppm can't handle a line longer than 8K characters in
--the the XPM input. If an input line exceeds this limit,
-+the XPM input. If an input line exceeds this limit,
- xpmtoppm quits with an error message to that effect. Before
- Netpbm 10.30 (October 2005), the limit was 2K.
-
diff --git a/netpbm-manual-pages.patch b/netpbm-manual-pages.patch
deleted file mode 100644
index 79f0992..0000000
--- a/netpbm-manual-pages.patch
+++ /dev/null
@@ -1,1646 +0,0 @@
-diff --git a/userguide/cameratopam.html b/userguide/cameratopam.html
-index 7a6391e..89f6939 100644
---- a/userguide/cameratopam.html
-+++ b/userguide/cameratopam.html
-@@ -163,7 +163,7 @@ means.
- href="http://www.cybercom.net/~dcoffin/dcraw/">dcraw by Dave
- Coffin, by Bryan Henderson in April 2005. Bryan replaced the part
- that generates the Netpbm output image and removed the Adobe Photoshop
--output function. Bryan changed the command syntax and and made other
-+output function. Bryan changed the command syntax and made other
- small changes to make the program consistent with Netpbm. He also
- split the source code into manageable pieces (dcraw has a
- single 5000 line source file).
-diff --git a/userguide/fiascotopnm.html b/userguide/fiascotopnm.html
-index 2cd4f01..f1f1b17 100644
---- a/userguide/fiascotopnm.html
-+++ b/userguide/fiascotopnm.html
-@@ -76,7 +76,7 @@ Set magnification of the decompressed image. Positive values enlarge
- and negative values reduce the image width and height by a factor of
- 2^|N|.
-
--
-s N, --smooth=N
-+-s N, --smoothing=N
-
- Smooth decompressed image(s) along the partitioning borders by the
- given amount N. N is 1 (minimum) to 100 (maximum); default
-@@ -88,6 +88,10 @@ FIASCO file is used (defined by the FIASCO coder).
- Set number of frames per second to N. When using this option,
- the frame rate specified in the FIASCO file is overridden.
-
-+--verbose=N
-+
-+Set verbose of fiascotopnm to N.
-+
- -v, --version
-
- Print fiascotopnm version number, then exit.
-diff --git a/userguide/pamdepth.html b/userguide/pamdepth.html
-index 1a2b5fd..c188e44 100644
---- a/userguide/pamdepth.html
-+++ b/userguide/pamdepth.html
-@@ -52,7 +52,7 @@ files before April 2000.
- pnmdepth, by Jef Poskanzer. pamdepth is backward compatible
- with pnmdepth and adds the ability to process arbitrary PAM images
- and the ability to process multi-image input streams. pnmdepth
--handled only PNM images and ignored all but the the first in any stream.
-+handled only PNM images and ignored all but the first in any stream.
-
-
- Table Of Contents
-diff --git a/userguide/pamdice.html b/userguide/pamdice.html
-index 0659e15..9053113 100644
---- a/userguide/pamdice.html
-+++ b/userguide/pamdice.html
-@@ -139,7 +139,7 @@ in each direction.
- pgmslice,
- ppmglobe
- pnm
--pnm
-+pam
-
-
- Table Of Contents
-diff --git a/userguide/pamstereogram.html b/userguide/pamstereogram.html
-index c337547..652b887 100644
---- a/userguide/pamstereogram.html
-+++ b/userguide/pamstereogram.html
-@@ -319,7 +319,7 @@ be. Lower (darker) numbers mean further from the eye.
-
-
-
--pamstereogram pays no attention the the image's tuple
-+
pamstereogram pays no attention the image's tuple
- type and ignores all planes other than plane 0.
-
- Like any Netpbm program, pamstereogram will accept PNM
-diff --git a/userguide/pamtofits.html b/userguide/pamtofits.html
-index 445b326..0ecc806 100644
---- a/userguide/pamtofits.html
-+++ b/userguide/pamtofits.html
-@@ -54,7 +54,7 @@ approximation.
-
Pixel Order
-
- The FITS specification does not specify which data in the file corresponds
--to which pixel in the image (i.e. which bytes are the the top left pixel,
-+to which pixel in the image (i.e. which bytes are the top left pixel,
- etc.). Netpbm uses the common sense, most popular arrangement: row major, top
- to bottom, left to right. That means in a 10 wide by 20 high image, the first
- 10 pixels in the file are the top row and the last 10 are the bottom row.
-diff --git a/userguide/pamtojpeg2k.html b/userguide/pamtojpeg2k.html
-index 06b6113..046d740 100644
---- a/userguide/pamtojpeg2k.html
-+++ b/userguide/pamtojpeg2k.html
-@@ -181,7 +181,7 @@ its goal is similar to JPEG. It has two main differences from JPEG.
-
One difference is that it does a much better job on most images of
- throwing out information in order to achieve a smaller output. That
- means when you reconstruct the image from the resulting compressed
--file, it looks a lot closer to the image you started with with
-+file, it looks a lot closer to the image you started with
- JPEG-2000 than with JPEG, for the same compressed file size. Or, looked
- at another way, with JPEG-2000 you get a much smaller file than with
- JPEG for the same image quality.
-diff --git a/userguide/pamtotiff.html b/userguide/pamtotiff.html
-index f07d227..c7a48a0 100644
---- a/userguide/pamtotiff.html
-+++ b/userguide/pamtotiff.html
-@@ -124,7 +124,7 @@ format it produces are therefore controlled by that library.
-
By default, pamtotiff creates a TIFF file with no
- compression. This is your best bet most of the time. If you want to
- try another compression scheme or tweak some of the other even more
--obscure output options, there are a number of options which which to
-+obscure output options, there are a number of options which to
- play.
-
-
Before Netpbm 8.4 (April 2000), the default was to use LZW compression.
-diff --git a/userguide/pamtouil.html b/userguide/pamtouil.html
-index 1074119..6c2356b 100644
---- a/userguide/pamtouil.html
-+++ b/userguide/pamtouil.html
-@@ -57,7 +57,7 @@ in the RGB database.
-
-
SEE ALSO
-
--pam
-+pamstack
- pam
- ppm
-
-diff --git a/userguide/pamundice.html b/userguide/pamundice.html
-index 2b789b4..bf366d6 100644
---- a/userguide/pamundice.html
-+++ b/userguide/pamundice.html
-@@ -208,7 +208,7 @@ clips the bottom edge of each image before joining it to the one below.
- pnmindex,
- pnmtile,
- pnm
--pnm
-+pam
-
-
- Table Of Contents
-diff --git a/userguide/pbm.html b/userguide/pbm.html
-index 63dfa40..7db4886 100644
---- a/userguide/pbm.html
-+++ b/userguide/pbm.html
-@@ -136,7 +136,7 @@ P1
- accepting anything that looks remotely like a bitmap.
-
- All characters referred to herein are encoded in ASCII.
--"newline" refers the the character known in ASCII as Line
-+"newline" refers the character known in ASCII as Line
- Feed or LF. A "white space" character is space, CR, LF,
- TAB, VT, or FF (I.e. what the ANSI standard C isspace() function
- calls white space).
-diff --git a/userguide/pbmtolj.html b/userguide/pbmtolj.html
-index ce7e9bb..6da4555 100644
---- a/userguide/pbmtolj.html
-+++ b/userguide/pbmtolj.html
-@@ -83,7 +83,7 @@ and end of the output file.
-
-
-copies
-
--Specifies the the number of copies. The default is 1. This option
-+Specifies the number of copies. The default is 1. This option
- controls the "number of copies" printer control;
- pbmtolj generates only one copy of the image.
-
-diff --git a/userguide/pgm.html b/userguide/pgm.html
-index d75c9ef..7df1abc 100644
---- a/userguide/pgm.html
-+++ b/userguide/pgm.html
-@@ -153,7 +153,7 @@ P2
- accepting anything that looks remotely like a PGM.
-
- All characters referred to herein are encoded in ASCII.
--"newline" refers the the character known in ASCII as Line
-+"newline" refers the character known in ASCII as Line
- Feed or LF. A "white space" character is space, CR, LF,
- TAB, VT, or FF (I.e. what the ANSI standard C isspace() function
- calls white space).
-diff --git a/userguide/pngtopam.html b/userguide/pngtopam.html
-index 8185843..09406ef 100644
---- a/userguide/pngtopam.html
-+++ b/userguide/pngtopam.html
-@@ -269,7 +269,7 @@ change to the package in Netpbm's renaissance. It and pnmtopng
- were simply copied from the
- pnmtopng package by Greg Roelofs. Those were based on
--simpler reference applications by by Alexander Lehmann
-+simpler reference applications by Alexander Lehmann
- <alex@hal.rhein-main.de> and Willem van Schaik
- <willem@schaik.com> and distributed with their PNG library.
-
-diff --git a/userguide/pnmnorm.html b/userguide/pnmnorm.html
-index c4d2558..5d3ca49 100644
---- a/userguide/pnmnorm.html
-+++ b/userguide/pnmnorm.html
-@@ -146,7 +146,7 @@ value 99 or the white value 101.
- option. Sometimes, too much contrast is a bad thing. If your
- intensities are all concentrated in the middle, -bpercent=2 and
- -wpercent=1 might mean that an intensity of 60 gets stretched
--up to 100 and and intensity of 20 gets stretched down to zero, for a
-+up to 100 and intensity of 20 gets stretched down to zero, for a
- range expansion of 150% (from a range of 40 to a range of 100). That
- much stretching means two adjacent pixels that used to differ in
- intensity by 4 units now differ by 10, and that might be unsightly.
-diff --git a/userguide/pnmtopalm.html b/userguide/pnmtopalm.html
-index 94aa6ff..9ca9c0d 100644
---- a/userguide/pnmtopalm.html
-+++ b/userguide/pnmtopalm.html
-@@ -164,7 +164,7 @@ the -colormap option, for much the same reason.
-
-
-withdummy
-
--This option tells pnmtopalm to put in the stream, after after
-+This option tells pnmtopalm to put in the stream, after
- the image, a dummy image header to introduce subsequent high density
- images.
-
-diff --git a/userguide/ppm.html b/userguide/ppm.html
-index c71aaa4..8e7a111 100644
---- a/userguide/ppm.html
-+++ b/userguide/ppm.html
-@@ -158,7 +158,7 @@ P3
- accepting anything that looks remotely like a PPM image.
-
- All characters referred to herein are encoded in ASCII.
--"newline" refers the the character known in ASCII as Line
-+"newline" refers the character known in ASCII as Line
- Feed or LF. A "white space" character is space, CR, LF,
- TAB, VT, or FF (I.e. what the ANSI standard C isspace() function
- calls white space).
-diff --git a/userguide/ppmtopj.html b/userguide/ppmtopj.html
-index c07c1d9..b50be28 100644
---- a/userguide/ppmtopj.html
-+++ b/userguide/ppmtopj.html
-@@ -61,7 +61,7 @@ You could convert your input to this format like this:
- pnmremap -map 8color.pam testimg.pam | ppmtopj
-
-
--Or you could use use
-+Or you could use
-
- ppmdither -red 2 -green 2 -blue 2
-
-diff --git a/userguide/qrttoppm.html b/userguide/qrttoppm.html
-index b6bf976..112bf50 100644
---- a/userguide/qrttoppm.html
-+++ b/userguide/qrttoppm.html
-@@ -22,7 +22,7 @@ qrttoppm - convert output from the QRT ray tracer to a PPM image
-
- This program is part of Netpbm.
-
--
qrttoppm reads a QRT file as input and and produces a PPM
-+
qrttoppm reads a QRT file as input and produces a PPM
- image as output.
-
-
-diff --git a/userguide/sbigtopgm.html b/userguide/sbigtopgm.html
-index 400bcaf..78f9454 100644
---- a/userguide/sbigtopgm.html
-+++ b/userguide/sbigtopgm.html
-@@ -22,7 +22,7 @@ sbigtopgm - convert an SBIG CCDOPS file to PGM
-
-
This program is part of Netpbm.
-
--
sbigtopgm reads an an image file in the native format used
-+
sbigtopgm reads an image file in the native format used
- by the Santa Barbara Instrument Group (SBIG) astronomical CCD cameras,
- and produces a PGM image as output. Additional information on SBIG
- cameras and documentation of the file format is available at the Web
-diff --git a/userguide/srftopam.html b/userguide/srftopam.html
-index b27f133..c98586f 100644
---- a/userguide/srftopam.html
-+++ b/userguide/srftopam.html
-@@ -30,7 +30,7 @@
-
-
This program is part of Netpbm.
-
--srftopam reads a a SRF image file as input and produces a
-+
srftopam reads a SRF image file as input and produces a
- multi-image stream of PAM images as output.
-
-
This program performs the inverse of the conversion that pamtosrf
-diff --git a/userguide/sunicontopnm.html b/userguide/sunicontopnm.html
-index 6ccbcde..0290f7b 100644
---- a/userguide/sunicontopnm.html
-+++ b/userguide/sunicontopnm.html
-@@ -54,7 +54,7 @@ mostly XPM files.
- xbmtoppm,
- infotopam,
- pbm
--pbm
-+pgm
-
-
HISTORY
-
-diff --git a/userguide/xpmtoppm.html b/userguide/xpmtoppm.html
-index c7c857b..f96b249 100644
---- a/userguide/xpmtoppm.html
-+++ b/userguide/xpmtoppm.html
-@@ -46,7 +46,7 @@ alpha output to Standard Output and discards the image.
- the alpha output file.
-
- xpmtoppm can't handle a line longer than 8K characters in
--the the XPM input. If an input line exceeds this limit,
-+the XPM input. If an input line exceeds this limit,
- xpmtoppm quits with an error message to that effect. Before
- Netpbm 10.30 (October 2005), the limit was 2K.
-
-diff --git a/userguide/infotopam.html b/userguide/infotopam.html
-index 9818c59..177f4d4 100644
---- a/userguide/infotopam.html
-+++ b/userguide/infotopam.html
-@@ -110,7 +110,7 @@ using the -forcecolor option.
- To override the colors, first specify how many colors to override using
- -numcolors, then specify an (index color) pair for each color
- you want to override, where index is a value from 0 to 3 and
-- color the the new color for that index. Specify color as
-+ color the new color for that index. Specify color as
- described for the ppm_parsecolor()
- argument.
-
-diff --git a/userguide/pbmtoppa.html b/userguide/pbmtoppa.html
-index f2ccf11..e0abe05 100644
---- a/userguide/pbmtoppa.html
-+++ b/userguide/pbmtoppa.html
-@@ -254,7 +254,7 @@ StartEntry: DeskJet720C
- About: { \
- This driver supports the HP DeskJet 720C \
- inkjet printer. \
-- It does does not support color printing. \
-+ It does not support color printing. \
- IMPORTANT! Insert \
- "- | pbm2ppa -" \
- in the "Extra GS Options" field.\
-diff --git a/userguide/pnmgamma.html b/userguide/pnmgamma.html
-index 574d7d9..4c884f5 100644
---- a/userguide/pnmgamma.html
-+++ b/userguide/pnmgamma.html
-@@ -242,7 +242,7 @@ the output is the same as that of the input.
-
- Because the transformation is not linear, you need a greater maxval
- in the output in order not to lose any information from the input.
--For example, if you convert to radiance-linear sample values with with
-+For example, if you convert to radiance-linear sample values with
- -ungamma -bt709ramp and default gamma value, and your maxval is
- 255 on both input and output, 3 different input sample values all
- generate output sample value 254. In order to have a different output
-diff --git a/userguide/ppmtompeg.html b/userguide/ppmtompeg.html
-deleted file mode 100644
-index 4fa4a53..0000000
---- a/userguide/ppmtompeg.html
-+++ /dev/null
-@@ -1,1291 +0,0 @@
--
--
--
--Ppmtompeg User Manual
--
--
--Ppmtompeg
--Updated: 23 July 2006
--
--Table Of Contents
--
--NAME
--ppmtompeg - encode an MPEG-1 bitstream
--
--SYNOPSIS
--
--ppmtompeg
--[options]
--parameter-file
--
--DESCRIPTION
--
--This program is part of Netpbm.
--
--
ppmtompeg produces an MPEG-1 video stream. MPEG-1 is the
--first great video compression method, and is what is used in Video CDs
--(VCD). ppmtompeg originated in the year 1995. DVD uses a more
--advanced method, MPEG-2. There is an even newer method called MPEG-4
--which is also called Divx. I don't know where one finds that used.
--
--
There's technically a difference between a compression method for
--video and an actual file (stream) format for a movie, and I don't know
--if it can be validly said that the format of the stream
--ppmtompeg produces is MPEG-1.
--
--
Mencoder from the Mplayer
--package is probably superior for most video format generation
--needs, if for no other reason than that it is more popular.
--
--
The programming library PM2V
--generates MPEG-2 streams.
--
--
Use Mplayer (not part of Netpbm)
--to do the reverse conversion: to create a series of PNM files from an MPEG
--stream.
--
--
param_file is a parameter file which includes a list of
--input files and other parameters. The file is described in detail
--below.
--
--
To understand this program, you need to understand something about
--the complex MPEG-1 format. One source of information about this
--standard format is the section Introduction to MPEG in the Compression FAQ.
--
--
OPTIONS
--
--The -gop, -combine_gops, -frames, and
---combine_frames options are all mutually exclusive.
--
--
--- -stat stat_file
--
--
- This option causes ppmtompeg to append the statistics that
--it write to Standard Output to the file stat_file as well. The
--statistics use the following abbreviations: bits per block (bpb), bits
--per frame (bpf), seconds per frame (spf), and bits per second (bps).
--
--
These statistics include how many I, P, and B frames there were,
--and information about compression and quality.
--
--
--
- -quiet num_seconds
--
--
- causes ppmtompeg not to report remaining time more often
--than every num_seconds seconds (unless the time estimate rises,
--which will happen near the beginning of the run). A negative value
--tells ppmtompeg not to report at all. 0 is the default
--(reports once after each frame). Note that the time remaining is an
--estimate and does not take into account time to read in frames.
--
--
- -realquiet
- causes ppmtompeg to run silently,
--with the only screen output being errors. Particularly useful when
--reading input from stdin.
--
--
-
---no_frame_summary
--
--
- This option prevents ppmtompeg from printing a summary
--line for each frame
--
--
- -float_dct
--
--
- forces ppmtompeg to use a more accurate, yet more
--computationally expensive version of the DCT.
--
--
- -gop gop_num
--
-
--causes ppmtompeg to encode only the numbered GOP (first GOP is 0). The
--parameter file is the same as for normal usage. The output file will be
--the normal output file with the suffix .gop.gop_num.
--ppmtompeg does not output any sequence information.
--
--
- -combine_gops
--
--
- causes ppmtompeg simply to combine some GOP files into a
--single MPEG output stream. ppmtompeg inserts a sequence header
--and trailer. In this case, the parameter file needs only to contain
--the SIZE value, an output file, and perhaps a list of input GOP
--files (see below).
--
--If you don't supply a list of input GOP files is used, then
--ppmtompeg assumes you're using the same parameter file you used
--when you created the input (with the -gop option) and
--calculates the corresponding gop filenames itself. If this is not the
--case, you can specify input GOP files in the same manner as normal
--input files -- except instead of using INPUT_DIR, INPUT, and
--END_INPUT, use GOP_INPUT_DIR, GOP_INPUT, and GOP_END_INPUT. If no
--input GOP files are specified, then the default is to use the output
--file name with suffix .gop.gop_num, with gop_num
--starting from 0, as the input files.
--
--
Thus, unless you're mixing and matching GOP files from different
--sources, you can simply use the same parameter file for creating the
--GOP files (-gop) and for later turning them into an MPEG stream
--(-combine_gops).
--
--
--
- -frames first_frame last_frame
--
--
- This option causes ppmtompeg to encode only the frames numbered
--first_frame to last_frame, inclusive. The parameter
--file is the same as for normal usage. The output will be placed in
--separate files, one per frame, with the file names being the normal
--output file name with the suffix .frame.frame_num. No
--GOP header information is output. (Thus, the parameter file need not
--include the GOP_SIZE value)
--
--
Use ppmtompeg -combine_frames to combine these frames later into
--an MPEG stream.
--
--
--
- -combine_frames
--
--
- This option causes ppmtompeg simply to combine some
--individual MPEG frames (such as you might have created with an earlier
--run of ppmtompeg -frames) into a single MPEG stream. Sequence
--and GOP headers are inserted appropriately. In this case, the
--parameter file needs to contain only the SIZE value, the GOP_SIZE
--value, an output file, and perhaps a list of frame files (see below).
--
--
The parameter file may specify input frame files in the same manner
--as normal input files -- except instead of using INPUT_DIR, INPUT, and
--END_INPUT, use FRAME_INPUT_DIR, FRAME_INPUT, and FRAME_END_INPUT. If
--no input frame files are specified, then the default is to use the
--output file name with suffix .frame.frame_num, with
--frame_num starting from 0, as the input files.
--
--
--
--
- -nice
--
--
- This option causes ppmtompeg to run any remote processes
--"nicely," i.e. at low priority. (This is relevant only if you are
--running ppmtompeg in parallel mode. Otherwise, there are no
--remote processes). See 'man nice.'
--
--
- -max_machines num_machines
--
--
- This option causes ppmtompeg to use no more than
--num_machines machines as slaves for use in parallel encoding.
--
--
- -snr
--
--
- This option causes ppmtompeg to include the signal-to-noise
--ratio in the reported statistics. Prints SNR (Y U V) and peak SNR (Y
--U V) for each frame. In summary, prints averages of luminance only
--(Y). SNR is defined as 10*log(variance of original/variance of
--error). Peak SNR is defined as 20*log(255/RMSE). Note that
--ppmtompeg runs a little slower when you use this option.
--
--
- -mse
--
--
- This option causes ppmtompeg to report the mean squared
--error per block. It also automatically reports the quality of the
--images, so there is no need to specify -snr then.
--
--
- -bit_rate_info rate_file
--
--
- This option makes ppmtompeg write bit rate information
--into the file rate_file. Bit rate information is bits per frame, and
--also bits per I-frame-to-I-frame.
--
--
- -mv_histogram
--
--
- This option causes ppmtompeg to print a histogram of the
--motion vectors as part of statistics. There are three histograms --
--one for P frame, one for forward B frame, and one for backward B frame
--motion vectors.
--
--
The output is in the form of a matrix, each entry corresponding to one
--motion vector in the search window. The center of the matrix
--represents (0,0) motion vectors.
--
--
- -debug_sockets
--
--
- This option causes ppmtompeg to print to Standard Output
--messages that narrate the communication between the machines when you run
--ppmtompeg in parallel mode.
--
--
- -debug_machines
--
--
- This option causes ppmtompeg to print to Standard Output
--messages that narrate the progress of the conversion on the various
--machines when you run ppmtompeg in parallel
--mode.
--
--
--
--PARAMETER FILE
--
--The parameter file must contain the following
--lines (except when using the -combine_gops or -combine_frames
--options):
--
--
--
--- PATTERN pattern
--
--
- This statement specifies the pattern (sequence) of I frames, P frames,
--and B frames. pattern is just a sequence of the letters I, P, and
--B with nothing between. Example:
--
--
-- PATTERN IBBPBBPBBPBBPBB
--
--
--See I Frames, P Frames, B Frames.
--
--
- OUTPUT output file
--
- This names the file where the output MPEG stream goes.
--
--
- INPUT_DIR directory
--
--
- This statement tells where the input images (frames) come from.
--If each frame is in a separate file, directory is the directory
--where they all are. You may use . to refer to the current
--directory. A null directory refers to the root directory of the
--system file tree.
--
--
To have ppmtompeg read all the frames serially from Standard
--Input, specify
--
-- INPUT_DIR stdin
--
--
-- - INPUT
--
-
--This line must be followed by a list of the input files (in display order)
--and then the line END_INPUT.
--
--
There are three types of lines between INPUT and END_INPUT. First,
--a line may simply be the name of an input file. Second, the line
--may be of the form single_star_expr
--[x-y].
--single_star_expr can have a single * in it. It is
--replaced by all the numbers between x and y inclusive. So, for
--example, the line tennis*.ppm [12-15] refers to the files
--tennis12.ppm, tennis13.ppm, tennis14.ppm, tennis15.ppm.
--
--
Uniform zero-padding occurs, as well. For example, the line
--football.*.ppm [001-130] refers to the files football.001.ppm,
--football.002.ppm, ..., football.009.ppm, football.010.ppm, ...,
--football.130.ppm.
--
--
The third type of line is: single_star_expr
--[x-y+s], where the
--line is treated exactly as above, except that we skip by s. Thus, the
--line football.*.ppm [001-130+4] refers to the files
--football.001.ppm, football.005.ppm, football.009.ppm,
--football.013.ppm, etc.
--
--
Furthermore, a line may specify a shell command to execute to
--generate lines to be interpreted as described above, as if those lines
--were in the parameter file instead. Use back ticks, like in the
--Bourne Shell, like this:
--
--
-- `cat myfilelist`
--
--
--
--If input is from Standard Input (per the INPUT_DIR statement),
--ppmtompeg ignores the INPUT/END_INPUT block, but
--it still must be present.
--
--
- BASE_FILE_FORMAT {PPM | PNM | YUV |
-- JPEG | JMOVIE}
--
--
- ppmtompeg must convert all input files to one of the
--following formats as a first step of processing: PNM, YUV, JPEG(v4),
--or JMOVIE. (The conversion may be trivial if your input files are
--already in one of these formats). This line specifies which of the
--four formats. PPM is actually a subset of PNM. The separate
--specification is allowed for backward compatibility. Use PNM instead
--of PPM in new applications.
--
--
- INPUT_CONVERT conversion_command
--
--
- You must specify how to convert a file to the base file format.
--If no conversion is necessary, then you would just say:
--
--
-- INPUT_CONVERT *
--
--
--Otherwise, conversion_command is a shell command that causes
--an image in the format your specified with BASE_FILE_FORMAT to
--be written to Standard Output. ppmtompeg executes the command
--once for each line between INPUT and END_INPUT (which is
--normally, but not necessarily, a file name). In the conversion
--command, ppmtompeg replaces each '*' with the contents of that
--line.
--
-- If you had a bunch of gif files, you might say:
--
-- INPUT_CONVERT giftopnm *
--
--
-- If you have a bunch of separate a.Y, a.U, and a.V files (where
-- the U and V have already been subsampled), then you might say:
--
--
-- INPUT_CONVERT cat *.Y *.U *.V
--
--
--Input conversion is not allowed with input from stdin, so use
--
--
-- INPUT_CONVERT *
--
--
--as described above.
--
-- - SIZE widthxheight
--
--
-
--
--
width and height are the width and height of each
--frame in pixels.
--
--
When ppmtompeg can get this information from the input image
--files, it ignores the SIZE parameter and you may omit it.
--
--
When the image files are in YUV format, the files don't contain
--dimension information, so SIZE is required.
--
--
When ppmtompeg is running in parallel mode, not all of the
--processes in the network have access to the image files, so
--SIZE is required and must give the same dimensions as the
--input image files.
--
--
- YUV_SIZE widthxheight
--
--
- This is an obsolete synonym of SIZE.
--
--
- YUV_FORMAT {ABEKAS | PHILLIPS | UCB |
-- EYUV | pattern}
--
--
- This is meaningful only when BASE_FILE_FORMAT specifies
--YUV format, and then it is required. It specifies the sub-format of
--the YUV class.
--
--
--
- GOP_SIZE n
--
--
- n is the number of frames in a Group of Pictures. Except that
--because a GOP must start with an I frame, ppmtompeg makes a GOP as
--much longer than n as it has to to make the next GOP start with an
--I frame.
--
--
Normally, it makes sense to make your GOP size a multiple of your
--pattern length (the latter is determined by the PATTERN parameter file
--statement).
--
--
See Group Of Pictures.
--
--
- SLICES_PER_FRAME n
--
- n is roughly the number of slices per frame. Note, at
--least one MPEG player may complain if slices do not start at the left
--side of an image. To ensure this does not happen, make sure the
--number of rows is divisible by SLICES_PER_FRAME.
--
--
- PIXEL {FULL | HALF}
--
--
- use half-pixel motion vectors, or just full-pixel ones It is
--usually important that you use half-pixel motion vectors, because it
--results in both better quality and better compression.
--
--
--
- RANGE n
--
- Use a search range of n pixels in each of the four directions
--from a subject pixel. (So the search window is a square n*2 pixels
--on a side).
--
--
- PSEARCH_ALG {EXHAUSTIVE | TWOLEVEL |
-- SUBSAMPLE | LOGARITHMIC}
--
--
- This statement tells ppmtompeg what kind of search
-- technique (algorithm) to use for P frames. You select the desired
-- combination of speed and compression. EXHAUSTIVE gives the
-- best compression, but LOGARITHMIC is the fastest.
-- TWOLEVEL is an exhaustive full-pixel search, followed by a
-- local half- pixel search around the best full-pixel vector (the
-- PIXEL option is ignored for this search technique).
--
--
- BSEARCH_ALG {SIMPLE | CROSS2 | EXHAUSTIVE}
--
--
- This statement tells ppmtompeg what kind of search
-- technique (algorithm) to use for B frames. SIMPLE means
-- find best forward and backward vectors, then interpolate.
-- CROSS2 means find those two vectors, then see what backward
-- vector best matches the best forward vector, and vice versa.
-- EXHAUSTIVE does an n-squared search and is
-- extremely slow in relation to the others (CROSS2
-- is about half as fast as SIMPLE).
--
--
- IQSCALE n
--
- Use n as the qscale for I frames.
-- See Qscale.
--
--
- PQSCALE n
--
- Use n as the qscale for P frames.
-- See Qscale.
--
--
- BQSCALE n
--
- Use n as the qscale for B frames.
-- See Qscale.
--
--
- REFERENCE_FRAME {ORIGINAL | DECODED}
- This
--statement determines whether ppmtompeg uses the original images
--or the decoded images when computing motion vectors. Using decoded
--images is more accurate and should increase the playback quality of
--the output, but it makes the encoding take longer and seems to give
--worse compression. It also causes some complications with parallel
--encoding. (see the section on parallel encoding). One thing you can
--do as a trade-off is select ORIGINAL here, and lower the
--qscale (see QSCALE if the quality is not good enough.
--
--
-- Original or Decoded? (Normalized)
--
--
--
-- Reference |
-- Compression |
-- Speed |
-- Quality I |
-- Quality P |
-- Quality B |
--
--
-- Decoded |
-- 1000 |
-- 1000 |
-- 1000 |
-- 969 |
-- 919 |
--
--
-- Original |
-- 885 |
-- 1373 |
-- 1000 |
-- 912 |
-- 884 |
--
--
--
--
--
--
--
--The following lines are optional:
--
--
--
--- FORCE_ENCODE_LAST_FRAME
--
--
- This statement is obsolete. It does nothing.
--
--
Before Netpbm 10.26 (January 2005), ppmtompeg would drop
--trailing B frames from your movie, since a movie can't end with a B
--frame. (See I Frames, P Frames, B Frames.
--You would have to specify FORCE_ENCODE_LAST_FRAME to stop
--that from happening and get the same function that ppmtompeg
--has today.
--
--
--
- NIQTABLE
--
--
- This statement specifies a custom non-intra quantization table.
--If you don't specify this statement, ppmtompeg uses a default
--non-intra quantization table.
--
--
--The 8 lines immediately following NIQTABLE specify the quantization
--table. Each line defines a table row and consists of 8 integers,
--whitespace-delimited, which define the table columns.
--
--
- IQTABLE
--
--
- This is analogous to NIQTABLE, but for the intra quantization table.
--
--
- ASPECT_RATIO ratio
--
--
- This statement specifies the aspect ratio for ppmtompeg to
--specify in the MPEG output. I'm not sure what this is used for.
--
--
ratio must be 1.0, 0.6735, 0.7031, 0.7615, 0.8055, 0.8437,
--0.8935, 0.9157, 0.9815, 1.0255, 1.0695, 1.0950, 1.1575, or 1.2015.
--
--
- FRAME_RATE rate
--
- This specifies the frame rate for ppmtompeg to specify in the
--MPEG output. Some players use this value to determine the playback rate.
--
--
rate must be 23.976, 24, 25, 29.97, 30, 50, 59.94, or 60.
--
--
- BIT_RATE rate
--
- This specifies the bit rate for Constant Bit Rate (CBR) encoding.
--
--
rate must be an integer.
--
--
- BUFFER_SIZE size
--
--
- This specifies the value
--ppmtompeg is to specify in the MPEG output for the Video
--Buffering Verifier (VBV) buffer size needed to decode the sequence.
--
--
A Video Verifying Buffer is a buffer in which a decoder keeps the
--decoded bits in order to match the uneven speed of the decoding with
--the required constant playback speed.
--
--
As ppmtompeg encodes the image, it simulates the decoding
--process in terms of how many bits would be in the VBV as each frame gets
--decoded, assuming a VBV of the size you indicate.
--
--
If you specify the WARN_VBV_UNDERFLOW statement,
--ppmtompeg issues a warning each time the simulation underflows
--the buffer, which suggests that an underflow would occur on playback,
--which suggests the buffer is too small.
--
--
If you specify the WARN_VBV_OVERFLOW statement,
--ppmtompeg issues a warning each time the simulation overflows
--the buffer, which suggests that an overflow would occur on playback,
--which suggests the buffer is too small.
--
--
- WARN_VBV_UNDERFLOW
--
- WARN_VBV_OVERFLOW
--
--
- See BUFFER_SIZE.
--
--
These options were new in Netpbm 10.26 (January 2005). Before that,
--ppmtompeg issued the warnings always.
--
--
--
--
--The following statements apply only to parallel operation:
--
--
--
--- PARALLEL
--
--
- This statement, paired with END PARALLEL, is what causes
--ppmtompeg to operate in parallel mode. See Parallel Operation.
--
--
- END PARALLEL
--
--
- This goes with PARALLEL.
--
--
- PARALLEL_TEST_FRAMES n
--
--
- The master starts off by measuring each slave's speed. It does
--this by giving each slave n frames to encode and noting how
--long the slave takes to finish. These are not just test frames,
--though -- they're real frames and the results become part of the
--output.
--ppmtompeg is old and measures time in undivided seconds, so
--to get useful timings, specify enough frames that it will take at
--least 5 seconds to process them. The default is 10.
--
--
If you specify FORCE_I_ALIGN, ppmtompeg will increase
--the test frames value enough to maintain the alignment.
--
--
If there aren't enough frames for every slave to have the indicated
--number of test frames, ppmtompeg will give some slaves fewer.
--
--
--
- PARALLEL_TIME_CHUNKS t
--
--
- When you specify this statement, the master attempts to feed work
--to the slaves in chunks that take t seconds to process. It uses
--the speed measurement it made when it started up (see PARALLEL_TEST_FRAMES)
--to decide how many frames to put in the chunk. This statement obviously
--doesn't affect the first batch of work sent to each slave, which is the
--one used to measure the slave's speed.
--
--
Smaller values of t increase communication, but improve load
--balancing. The default is 30 seconds.
--
--
You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER,
--and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best.
--
--
- PARALLEL_CHUNK_TAPER
--
--
- When you specify this statement, the master distributes work like
--with PARALLEL_TIME_CHUNKS, except that the master chooses the number
--of seconds for the chunks. It starts with a large number and, as it
--gets closer to finishing the job, reduces it. That way, it reduces
--scheduling overhead when precise scheduling isn't helpful, but still
--prevents a slave from finishing early after all the work has already
--been handed out to the other slaves, and then sitting idle while
--there's still work to do.
--
--
You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER,
--and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best.
--
--
--
- PARALLEL_PERFECT
--
--
- If this statement is present, ppmtompeg schedules on the
--assumption that each machine is about the same speed. The master will
--simply divide up the frames evenly between the slaves -- each
--slave gets the same number of frames. If some slaves are faster than
--others, they will finish first and remain idle while the slower slaves
--continue.
--
--
This has the advantage of minimal scheduling overhead. Where slaves
--have different speeds, though, it makes inefficient use of the fast
--ones. Where slaves are the same speed, it also has the disadvantage
--that they all finish at the same time and feed their output to the
--single Combine Server in a burst, which makes less efficient use of
--the Combine Server and thus can increase the total elapsed time.
--
--
You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER,
--and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best.
--
--
- RSH remote_shell_command
--
--
- ppmtompeg executes the shell command
--remote_shell_command to start a process on another machine.
--The default command is rsh, and whatever command you specify
--must have compatible semantics. ssh is usually compatible.
--The command ppmtompeg uses is one like this:
--ssh remote.host.com -l username shellcommand.
--
--
Be sure to set up .rhosts files or SSH key authorizations
--where needed. Otherwise, you'll have to type in passwords.
--
--
On some HP machines, rsh is the restricted shell, and you want
--to specify remsh.
--
--
- FORCE_I_ALIGN
--
--
- This statement forces each slave to encode a chunk of frames which
--is a multiple of the pattern length (see PATTERN). Since the
--first frame in any pattern is an I frame, this forces each chunk
--encoded by a slave to begin with an I frame.
--
--
This document used to say there was an argument to
--FORCE_I_ALIGN which was the number of frames ppmtompeg
--would use (and was required to be a multiple of the pattern length).
--But ppmtompeg has apparently always ignored that argument, and
--it does now.
--
--
- KEEP_TEMP_FILES
--
--
- This statement causes ppmtompeg not to delete the temporary
--files it uses to transmit encoded frames to the combine server. This
--means you will be left with a file for each frame, the same as you
--would get with the -frames option.
--
--
This is mostly useful for debugging.
--
--
This works only if you're using a shared filesystem to communicate
--between the servers.
--
--
This option was new in Netpbm 10.26 (January 2005).
--
--
--
--
--Parameter File Notes
--
-- If you use the -combine_gops option, then you need to specify
--only the SIZE and OUTPUT values in the parameter file. In
--addition, the parameter file may specify input GOP files in the same
--manner as normal input files -- except instead of using INPUT_DIR,
--INPUT, and END_INPUT, use GOP_INPUT_DIR, GOP_INPUT, and GOP_END_INPUT.
--If you specify no input GOP files, then ppmtompeg uses by default the
--output file name with suffix .gop.gop_num, with gop_num
--starting from 0, as the input files.
--
--
If you use the -combine_frames option, then you need to
--specify only the SIZE, GOP_SIZE, and OUTPUT values in the
--parameter file. In addition, the parameter file may specify input
--frame files in the same manner as normal input files -- except instead
--of using INPUT_DIR, INPUT, and END_INPUT, use FRAME_INPUT_DIR,
--FRAME_INPUT, and FRAME_END_INPUT. If no input frame files are
--specified, then the default is to use the output file name with suffix
--.frame.frame_num, with frame_num starting from 0,
--as the input files.
--
--
Any number of spaces and tabs may come between each option and value. Lines
--beginning with # are ignored. Any other lines are ignored except for
--those between INPUT and END_INPUT. This allows you to use the same
--parameter file for normal usage and for -combine_gops and
---combine_frames.
--
--
The file format is case-sensitive so all keywords should be in
--upper case.
--
--
The statements may appear in any order, except that the order within
--a block statement (such as INPUT ... END INPUT) is significant.
--
--
ppmtompeg is prepared to handle up to 16 B frames between
--reference frames when encoding with input from stdin. (To build a
--modified ppmtompeg with a higher limit, change the constant
--B_FRAME_RUN in frame.c and recompile).
--
--
GENERAL USAGE INFORMATION
--
--Qscale
--
--The quantization scale values (qscale) give a trade-off between
--quality and compression. Using different Qscale values has very little
--effect on speed. The qscale values can be set separately for I, P, and
--B frames.
--
--
You select the qscale values with the IQSCALE,
--PQSCALE, and BSCALE parameter file statements.
--
--
A qscale value is an integer from 1 to 31. Larger numbers give
--better compression, but worse quality. In the following, the quality
--numbers are peak signal-to-noise ratio, defined as:
--
--where MSE is the mean squared error.
--
--
--
Flower garden tests:
--
--
-- Qscale vs Quality
--
--
--
-- Qscale |
-- I Frames |
-- P Frames |
-- B Frames |
--
--
-- 1 |
-- 43.2 |
-- 46.3 |
-- 46.5 |
--
--
-- 6 |
-- 32.6 |
-- 34.6 |
-- 34.3 |
--
--
-- 11 |
-- 28.6 |
-- 29.5 |
-- 30.0 |
--
--
-- 16 |
-- 26.3 |
-- 26.8 |
-- 28.6 |
--
--
-- 21 |
-- 24.7 |
-- 25.0 |
-- 27.9 |
--
--
-- 26 |
-- 23.5 |
-- 23.9 |
-- 27.5 |
--
--
-- 31 |
-- 22.6 |
-- 23.0 |
-- 27.3 |
--
--
--
--
-- Qscale vs Compression
--
--
--
-- Qscale |
-- I Frames |
-- P Frames |
-- B Frames |
--
--
-- 1 |
-- 2 |
-- 2 |
-- 2 |
--
--
-- 6 |
-- 7 |
-- 10 |
-- 15 |
--
--
-- 11 |
-- 11 |
-- 18 |
-- 43 |
--
--
-- 16 |
-- 15 |
-- 29 |
-- 97 |
--
--
-- 21 |
-- 19 |
-- 41 |
-- 173 |
--
--
-- 26 |
-- 24 |
-- 56 |
-- 256 |
--
--
-- 31 |
-- 28 |
-- 73 |
-- 330 |
--
--
--
--
--Search Techniques
--
--There are several different motion vector search techniques
--available. There are different techniques available for P frame
--search and B frame search. Using different search techniques present
--little difference in quality, but a large difference in compression
--and speed.
--
--
There are 4 types of P frame search: Exhaustive, TwoLevel,
--SubSample, and Logarithmic.
--
--
There are 3 types of B frame search: Exhaustive, Cross2, and
--Simple.
--
--The recommended search techniques are TwoLevel and Logarithmic for
--P frame search, and Cross2 and Simple for B frame search. Here are
--some numbers comparing the different search methods:
--
--
-- P frame Motion Vector Search (Normalized)
--
--
--
-- Technique |
-- Compression1 |
-- Speed 2 |
-- Quality 3 |
--
--
-- Exhaustive |
-- 1000 |
-- 1000 |
-- 1000 |
--
--
-- SubSample |
-- 1008 |
-- 2456 |
-- 1000 |
--
--
-- TwoLevel |
-- 1009 |
-- 3237 |
-- 1000 |
--
--
-- Logarithmic |
-- 1085 |
-- 8229 |
-- 998 |
--
--
--
--
-- B frame Motion Vector Search (Normalized)
--
--
--
-- Technique |
-- Compression1 |
-- Speed2 |
-- Quality3 |
--
--
-- Exhaustive |
-- 1000 |
-- 1000 |
-- 1000 |
--
--
-- Cross2 |
-- 975 |
-- 1000 |
-- 996 |
--
--
-- Simple |
-- 938 |
-- 1765 |
-- 991 |
--
--
--
-- 1Smaller numbers are better
--compression.
--
-- 2Larger numbers mean faster
--execution.
--
-- 3Larger numbers mean better quality.
--
--For some reason, Simple seems to give better compression, but it
--depends on the image sequence.
--
--
Select the search techniques with the PSEARCH_ALG and
--BSEARCH_ALG parameter file statements.
--
--
--
--
Group Of Pictures (GOP)
--
--A Group of Pictures (GOP) is a roughly independently decodable
--sequence of frames. An MPEG video stream is made of one or more
--GOP's. You may specify how many frames should be in each GOP with the
--GOP_SIZE parameter file statement. A GOP always starts with an
--I frame.
--
--
Instead of encoding an entire sequence, you can encode a single
--GOP. To do this, use the -gop command option. You can later
--join the resulting GOP files at any time by running ppmtompeg
--with the -combine_gops command option.
--
--
--
Slices
--
--A slice is an independently decodable unit in a frame. It can be
--as small as one macroblock, or it can be as big as the entire frame.
--Barring transmission error, adding slices does not change quality or
--speed; the only effect is slightly worse compression. More slices are
--used for noisy transmission so that errors are more recoverable. Since
--usually errors are not such a problem, we usually just use one slice
--per frame.
--
--
Control the slice size with the SLICES_PER_FRAME parameter
--file statement.
--
--
Some MPEG playback systems require that each slice consist of whole
--rows of macroblocks. If you are encoding for this kind of player, if
--the height of the image is H pixels, then you should set the
--SLICES_PER_FRAME to some number which divides H/16. For example, if
--the image is 240 pixels (15 macroblocks) high, then you should use
--only 15, 5, 3, or 1 slices per frame.
--
--
Note: these MPEG playback systems are really wrong, since the MPEG
--standard says this doesn't have to be so.
--
--
--
--
Search Window
--
--The search window is the window in which ppmtompeg searches
--for motion vectors. The window is a square. You can specify the size
--of the square, and whether to allow half-pixel motion vectors or not,
--with the RANGE and PIXEL parameter file statements.
--
--
I Frames, P Frames, B Frames
--
--In MPEG-1, a movie is represented as a sequence of MPEG frames,
--each of which is an I Frame, a P Frame, or a B Frame. Each represents
--an actual frame of the movie (don't get confused by the dual use of
--the word "frame." A movie frame is a graphical image. An MPEG frame
--is a set of data that describes a movie frame).
--
--
An I frame ("intra" frame) describes a movie frame in isolation --
--without respect to any other frame in the movie. A P frame
--("predictive" frame) describes a movie frame by describing how it
--differs from the movie frame described by the latest preceding I or
--P frame. A B frame ("bidirectional" frame) describes a movie frame by
--describing how it differs from the the movie frames described by the
--nearest I or P frame before and after it.
--
--
Note that the first frame of a movie must be described by an I
--frame (because there is no previous movie frame) and the last movie
--frame must be described by an I or P frame (because there is no
--subsequent movie frame).
--
--
Beyond that, you can choose which frames are represented by which
--types. You specify a pattern, such as IBPBP and ppmtompeg
--simply repeats it over and over throughout the movie. The pattern
--affects speed, quality, and stream size. Here is a chart which shows
--some of the trade-offs:
--
--
-- Comparison of I/P/B Frames (Normalized)
--
--
--
-- Frame Type |
-- Size |
-- Speed |
-- Quality |
--
--
-- I frames |
-- 1000 |
-- 1000 |
-- 1000 |
--
--
-- P frames |
-- 409 |
-- 609 |
-- 969 |
--
--
-- B frames |
-- 72 |
-- 260 |
-- 919 |
--
--
--
--(this is with constant qscale)
--
--A standard sequence is IBBPBBPBBPBBPBB.
--
--
Select the sequence with the PATTERN parameter file statement.
--
--
Since the last MPEG frame cannot be a B frame (see above), if the
--pattern you specify indicates a B frame for the last movie frame of
--the movie, ppmtompeg makes it an I frame instead.
--
--
Before Netpbm 10.26 (January 2005), ppmtompeg instead drops
--the trailing B frames by default, and you need the
--FORCE_ENCODE_LAST_FRAME parameter file statement to make it do
--this.
--
--
The MPEG frames don't appear in the MPEG-1 stream in the same order that
--the corresponding movie frames appear in the movie -- the B frames come after
--the I and P frames on which they are based. For example, if the movie is
--4 frames that you will represent with the pattern IBBP, the MPEG-1 stream
--will start with an I frame describing movie frame 0. The next frame in
--the MPEG-1 stream is a P frame describing movie frame 3. The last two
--frames in the MPEG-1 stream are B frames describing movie frames 1 and 2,
--respectively.
--
--
--
Specifying Input and Output Files
--
--Specify the input frame images with the INPUT_DIR,
--INPUT, END_INPUT, BASE_FILE_FORMAT,
--SIZE, YUV_FORMAT and INPUT_CONVERT parameter
--file statements.
--
--
Specify the output file with the OUTPUT parameter file statement.
--
--
--
Statistics
--
--ppmtompeg can generate a variety of statistics about the
--encoding. See the -stat, -snr, -mv_histogram,
---quiet, -no_frame_summary, and -bit_rate_info
--options.
--
--
--
PARALLEL OPERATION
--
--You can run ppmtompeg on multiple machines at once, encoding
--the same MPEG stream. When you do, the machines are used as shown in
--the following diagram. We call this "parallel mode."
--
--
--
--
To do parallel processing, put the statement
--
--
-- PARALLEL
--
--
--in the parameter file, followed by a listing of the machines, one
--machine per line, then
--
--
-- END_PARALLEL
--
--
--Each of the machine lines must be in one of two forms. If the machine
--has filesystem access to the input files, then the line is:
--
--
--machine user executable
--
--
The executable is normally ppmtompeg (you may need to give
--the complete path if you've built for different architectures). If
--the machine does not have filesystem access to the input files, the line
--is:
--
--
REMOTE machine user executable
--parameter file
--
--
The -max_machines command option limits the number of
--machines ppmtompeg will use. If you specify more machines in
--the parameter file than -max_machines allows, ppmtompeg
--uses only the machines listed first. This is handy if you want to
--experiment with different amounts of parallelism.
--
--
In general, you should use full path file names when describing
--executables and parameter files. This includes the parameter
--file argument on the original invocation of ppmtompeg.
--
--
All file names must be the same on all systems (so if e.g. you're
--using an NFS filesystem, you must make sure it is mounted at the same
--mountpoint on all systems).
--
--
Because not all of the processes involved in parallel operation
--have easy access to the input files, you must specify the SIZE
--parameter file statement when you do parallel operation.
--
--
The machine on which you originally invoke ppmtompeg is the
--master machine. It hosts a "combine server,", a
--"decode server," and a number of "i/o servers,"
--all as separate processes. The other machines in the network (listed
--in the parameter file) are slave machines. Each hosts a single
--process that continuously requests work from the master and does it.
--The slave process does the computation to encode MPEG frames. It
--processes frames in batches identified by the master.
--
--
The master uses a remote shell command to start a process on a
--slave machine. By default, it uses an rsh shell command to do
--this. But use the RSH parameter file statement to control
--this. The shell command the master executes remotely is
--ppmtompeg, but with options to indicate that it is to perform
--slave functions.
--
--
The various machines talk to each other over TCP connections. Each
--machine finds and binds to a free TCP port number and tells its
--partners the port number. These port numbers are at least 2048.
--
--
Use the PARALLEL_TEST_FRAMES, PARALLEL_TIME_CHUNKS, and
--PARALLEL_PERFECT parameter file statements to control the way the
--master divides up work among the slaves.
--
--
Use the -nice command option to cause all slave processes to run
--"nicely," i.e. as low priority processes. That way, this substantial and
--long-running CPU load will have minimal impact on other, possibly
--interactive, users of the systems.
--
--
--
SPEED
--
--Here is a look at ppmtompeg speed, in single-node (not parallel)
--operation:
--
--
-- Compression Speed
--
--
--
-- Machine Type |
-- Macroblocks per second1 |
--
--
-- HP 9000/755 |
-- 280 |
--
--
-- DEC 3000/400 |
-- 247 |
--
--
-- HP 9000/750 |
-- 191 |
--
--
-- Sparc 10 |
-- 104 |
--
--
-- DEC 5000 |
-- 68 |
--
--
--1A macroblock is a 16x16 pixel square
--
--The measurements in the table are with inputs and outputs via a
--conventional locally attached filesystem. If you are using a network
--filesystem over a single 10 MB/s Ethernet, that constrains your speed more
--than your CPU speed. In that case, don't expect to get better than 4
--or 5 frames per second no matter how fast your CPUs are.
--
--
Network speed is even more of a bottleneck when the slaves do not
--have filesystem access to the input files -- i.e. you declare them
--REMOTE.
--
--
Where I/O is the bottleneck, size of the input frames can make a big
--difference. So YUV input is better than PPM, and JPEG is better than
--both.
--
--
When you're first trying to get parallel mode working, be sure to
--use the -debug_machines option so you can see what's going on.
--Also, -debug_sockets can help you diagnose communication
--problems.
--
--
--
AUTHORS
--
--
--
--- Kevin Gong - University of California, Berkeley, keving@cs.berkeley.edu
--
--
- Ketan Patel - University of California, Berkeley, kpatel@cs.berkeley.edu
--
--
- Dan Wallach - University of California, Berkeley, dwallach@cs.berkeley.edu
--
--
- Darryl Brown - University of California, Berkeley, darryl@cs.berkeley.edu
--
--
- Eugene Hung - University of California, Berkeley, eyhung@cs.berkeley.edu
--
--
- Steve Smoot - University of California, Berkeley, smoot@cs.berkeley.edu
--
--
--
--
--
--Table Of Contents
--
--
--
diff --git a/netpbm-more-files.patch b/netpbm-more-files.patch
deleted file mode 100644
index a3405af..0000000
--- a/netpbm-more-files.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git a/converter/other/pnmtops.c b/converter/other/pnmtops.c
-index e393931..93a5156 100644
---- a/converter/other/pnmtops.c
-+++ b/converter/other/pnmtops.c
-@@ -1994,6 +1994,13 @@ main(int argc, const char * argv[]) {
- name = strdup("noname");
- else
- name = basebasename(cmdline.inputFileName);
-+
-+ /* This program manages file descriptors in a way that assumes
-+ that new files will get file descriptor numbers less than 10,
-+ so we close superfluous files now to make sure that's true.
-+ */
-+ closeAllBut(fileno(ifP), fileno(stdout), fileno(stderr));
-+
- {
- int eof; /* There are no more images in the input file */
- unsigned int imageSeq;
diff --git a/netpbm-multipage-pam.patch b/netpbm-multipage-pam.patch
deleted file mode 100644
index 59b1651..0000000
--- a/netpbm-multipage-pam.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/converter/other/pnmtops.c b/converter/other/pnmtops.c
-index 24dc7df..e393931 100644
---- a/converter/other/pnmtops.c
-+++ b/converter/other/pnmtops.c
-@@ -1909,6 +1909,7 @@ convertPage(FILE * const ifP,
- /* The file stream which is the head of the filter chain; we write to
- this and filtered stuff comes out the other end.
- */
-+ FILE * filterChainOfP;
-
- pnm_readpaminit(ifP, &inpam, PAM_STRUCT_SIZE(tuple_type));
-
-@@ -1951,7 +1952,11 @@ convertPage(FILE * const ifP,
- initOutputEncoder(&oe, inpam.width, bitsPerSample,
- rle, flate, ascii85, psFilter);
-
-- spawnFilters(stdout, &oe, &feedFileP, filterPidList);
-+ fflush(stdout);
-+ filterChainOfP = fdopen(dup(fileno(stdout)), "w");
-+ /* spawnFilters() closes this. See FILE MANAGEMENT above */
-+
-+ spawnFilters(filterChainOfP, &oe, &feedFileP, filterPidList);
-
- convertRaster(&inpam, bitsPerSample, psFilter, feedFileP);
-
diff --git a/netpbm-nodoc.patch b/netpbm-nodoc.patch
index 2ecf665..c35cd9e 100644
--- a/netpbm-nodoc.patch
+++ b/netpbm-nodoc.patch
@@ -1,20 +1,13 @@
---- netpbm-10.24/GNUmakefile.nodoc 2004-08-11 20:41:54.000000000 +0200
-+++ netpbm-10.24/GNUmakefile 2004-09-23 16:08:29.724369240 +0200
-@@ -275,16 +275,12 @@
+diff --git a/GNUmakefile b/GNUmakefile
+index b0b7f00..a46329d 100644
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -369,7 +369,7 @@ install.lib:
endif
- .PHONY: install.manweb
--install.manweb: $(PKGDIR)/man/web/netpbm.url $(PKGDIR)/bin/doc.url
-+install.manweb: $(PKGDIR)/man/web/netpbm.url
+ .PHONY: install.manwebmain
+-install.manwebmain: $(PKGDIR)/man/web/netpbm.url $(PKGDIR)/bin/doc.url
++install.manwebmain: $(PKGDIR)/man/web/netpbm.url
$(PKGDIR)/man/web/netpbm.url: $(PKGDIR)/man/web
echo "$(NETPBM_DOCURL)" > $@
- chmod $(INSTALL_PERM_MAN) $@
-
--$(PKGDIR)/bin/doc.url: $(PKGDIR)/bin
-- echo "$(NETPBM_DOCURL)" > $@
-- chmod $(INSTALL_PERM_MAN) $@
--
- .PHONY: install-dev
- # Note that you might install the development package and NOT the runtime
- # package. If you have a special system for building stuff, maybe for
diff --git a/netpbm-security-code.patch b/netpbm-security-code.patch
index 27b49fb..927773a 100644
--- a/netpbm-security-code.patch
+++ b/netpbm-security-code.patch
@@ -139,38 +139,6 @@ diff -up netpbm-10.58.01/converter/other/pnmtops.c.security-code netpbm-10.58.01
cmdlineP->imageheight = imageheight * 72;
}
else
-diff -up netpbm-10.58.01/converter/other/pnmtorle.c.security-code netpbm-10.58.01/converter/other/pnmtorle.c
---- netpbm-10.58.01/converter/other/pnmtorle.c.security-code 2012-04-09 15:31:42.000000000 +0200
-+++ netpbm-10.58.01/converter/other/pnmtorle.c 2012-04-09 15:40:03.188619976 +0200
-@@ -19,6 +19,8 @@
- * If you modify this software, you should include a notice giving the
- * name of the person performing the modification, the date of modification,
- * and the reason for such modification.
-+ *
-+ * 2002-12-19: Fix maths wrapping bugs. Alan Cox
- */
- /*
- * pnmtorle - A program which will convert pbmplus (ppm or pgm) images
-diff -up netpbm-10.58.01/converter/other/pnmtosgi.c.security-code netpbm-10.58.01/converter/other/pnmtosgi.c
---- netpbm-10.58.01/converter/other/pnmtosgi.c.security-code 2012-04-09 15:31:42.000000000 +0200
-+++ netpbm-10.58.01/converter/other/pnmtosgi.c 2012-04-09 15:40:03.188619976 +0200
-@@ -254,6 +254,7 @@ build_channels(FILE * const ifp, int con
- #endif
-
- if( storage != STORAGE_VERBATIM ) {
-+ overflow2(channels, rows);
- MALLOCARRAY_NOFAIL(table, channels * rows);
- MALLOCARRAY_NOFAIL(rletemp, WORSTCOMPR(cols));
- }
-@@ -306,6 +307,8 @@ compress(ScanElem * temp,
- break;
- case STORAGE_RLE:
- tabrow = chan_no * rows + row;
-+ overflow2(chan_no, rows);
-+ overflow_add(chan_no* rows, row);
- len = rle_compress(temp, cols); /* writes result into rletemp */
- channel[chan_no][row].length = len;
- MALLOCARRAY(p, len);
diff -up netpbm-10.58.01/converter/other/rletopnm.c.security-code netpbm-10.58.01/converter/other/rletopnm.c
--- netpbm-10.58.01/converter/other/rletopnm.c.security-code 2012-04-09 15:31:42.000000000 +0200
+++ netpbm-10.58.01/converter/other/rletopnm.c 2012-04-09 15:40:03.189619963 +0200
@@ -183,25 +151,6 @@ diff -up netpbm-10.58.01/converter/other/rletopnm.c.security-code netpbm-10.58.0
*/
/*
* rletopnm - A conversion program to convert from Utah's "rle" image format
-diff -up netpbm-10.58.01/converter/other/sgitopnm.c.security-code netpbm-10.58.01/converter/other/sgitopnm.c
---- netpbm-10.58.01/converter/other/sgitopnm.c.security-code 2012-04-09 15:31:42.000000000 +0200
-+++ netpbm-10.58.01/converter/other/sgitopnm.c 2012-04-09 15:40:03.189619963 +0200
-@@ -359,10 +359,14 @@ readChannels(FILE * const ifP,
- MALLOCARRAY_NOFAIL(image, head->ysize);
- } else {
- maxchannel = MIN(3, head->zsize);
-+ overflow2(head->ysize, maxchannel);
- MALLOCARRAY_NOFAIL(image, head->ysize * maxchannel);
- }
-- if (table)
-+ if (table) {
-+ overflow2(head->xsize, 2);
-+ overflow_add(head->xsize*2, 2);
- MALLOCARRAY_NOFAIL(temp, WORSTCOMPR(head->xsize));
-+ }
-
- for (channel = 0; channel < maxchannel; ++channel) {
- unsigned int row;
diff -up netpbm-10.58.01/converter/other/sirtopnm.c.security-code netpbm-10.58.01/converter/other/sirtopnm.c
--- netpbm-10.58.01/converter/other/sirtopnm.c.security-code 2012-04-09 15:31:42.000000000 +0200
+++ netpbm-10.58.01/converter/other/sirtopnm.c 2012-04-09 15:40:03.190619951 +0200
@@ -729,46 +678,6 @@ diff -up netpbm-10.58.01/converter/ppm/ppmtoicr.c.security-code netpbm-10.58.01/
p = testimage;
for (i=0; icolors = (Color *)calloc((unsigned int)header->ncolors,
sizeof(Color));
if (header->colors == NULL) {
-diff -up netpbm-10.58.01/converter/ppm/yuvtoppm.c.security-code netpbm-10.58.01/converter/ppm/yuvtoppm.c
---- netpbm-10.58.01/converter/ppm/yuvtoppm.c.security-code 2012-04-09 15:31:44.000000000 +0200
-+++ netpbm-10.58.01/converter/ppm/yuvtoppm.c 2012-04-09 15:40:03.218619602 +0200
-@@ -72,6 +72,7 @@ main(argc, argv)
-
- ppm_writeppminit(stdout, cols, rows, (pixval) 255, 0);
- pixrow = ppm_allocrow(cols);
-+ overflow_add(cols, 1);
- MALLOCARRAY(yuvbuf, (cols+1)/2);
- if (yuvbuf == NULL)
- pm_error("Unable to allocate YUV buffer for %d columns.", cols);
diff -up netpbm-10.58.01/editor/pamcut.c.security-code netpbm-10.58.01/editor/pamcut.c
--- netpbm-10.58.01/editor/pamcut.c.security-code 2012-04-09 15:31:33.000000000 +0200
+++ netpbm-10.58.01/editor/pamcut.c 2012-04-09 15:40:03.218619602 +0200
@@ -1119,29 +1017,6 @@ diff -up netpbm-10.58.01/editor/pnmscalefixed.c.security-code netpbm-10.58.01/ed
sxscale = SCALE * newcols / cols;
syscale = SCALE * newrows / rows;
-diff -up netpbm-10.58.01/editor/pnmshear.c.security-code netpbm-10.58.01/editor/pnmshear.c
---- netpbm-10.58.01/editor/pnmshear.c.security-code 2012-04-09 15:31:33.000000000 +0200
-+++ netpbm-10.58.01/editor/pnmshear.c 2012-04-09 15:40:03.224619526 +0200
-@@ -15,6 +15,7 @@
- #include
- #include
- #include
-+#include
-
- #include "pm_c_util.h"
- #include "ppm.h"
-@@ -236,6 +237,11 @@ main(int argc, char * argv[]) {
-
- shearfac = fabs(tan(cmdline.angle));
-
-+ if(rows * shearfac >= INT_MAX-1)
-+ pm_error("image too large");
-+
-+ overflow_add(rows * shearfac, cols+1);
-+
- newcols = rows * shearfac + cols + 0.999999;
-
- pnm_writepnminit(stdout, newcols, rows, newmaxval, newformat, 0);
diff -up netpbm-10.58.01/editor/ppmdither.c.security-code netpbm-10.58.01/editor/ppmdither.c
--- netpbm-10.58.01/editor/ppmdither.c.security-code 2012-04-09 15:31:33.000000000 +0200
+++ netpbm-10.58.01/editor/ppmdither.c 2012-04-09 15:40:03.224619526 +0200
@@ -1215,18 +1090,6 @@ diff -up netpbm-10.58.01/generator/pgmcrater.c.security-code netpbm-10.58.01/gen
if (aux == NULL)
pm_error("out of memory allocating elevation array");
-diff -up netpbm-10.58.01/generator/pgmkernel.c.security-code netpbm-10.58.01/generator/pgmkernel.c
---- netpbm-10.58.01/generator/pgmkernel.c.security-code 2012-04-09 15:31:34.000000000 +0200
-+++ netpbm-10.58.01/generator/pgmkernel.c 2012-04-09 15:40:03.226619502 +0200
-@@ -68,7 +68,7 @@ main ( argc, argv )
- kycenter = (fysize - 1) / 2.0;
- ixsize = fxsize + 0.999;
- iysize = fysize + 0.999;
-- MALLOCARRAY(fkernel, ixsize * iysize);
-+ fkernel = (double *) malloc3 (ixsize, iysize, sizeof(double));
- for (i = 0; i < iysize; i++)
- for (j = 0; j < ixsize; j++) {
- fkernel[i*ixsize+j] = 1.0 / (1.0 + w * sqrt((double)
diff -up netpbm-10.58.01/lib/libpam.c.security-code netpbm-10.58.01/lib/libpam.c
--- netpbm-10.58.01/lib/libpam.c.security-code 2012-04-09 15:31:38.000000000 +0200
+++ netpbm-10.58.01/lib/libpam.c 2012-04-09 15:40:03.227619490 +0200
@@ -1252,17 +1115,6 @@ diff -up netpbm-10.58.01/lib/libpammap.c.security-code netpbm-10.58.01/lib/libpa
unsigned int const size =
sizeof(*retval) - sizeof(retval->tupleint.tuple)
+ pamP->depth * sizeof(sample);
-diff -up netpbm-10.58.01/lib/libpbm1.c.security-code netpbm-10.58.01/lib/libpbm1.c
---- netpbm-10.58.01/lib/libpbm1.c.security-code 2012-04-09 15:31:38.000000000 +0200
-+++ netpbm-10.58.01/lib/libpbm1.c 2012-04-09 15:40:03.228619477 +0200
-@@ -77,6 +77,7 @@ pbm_check(FILE * file, const enum pm_che
- pm_message("pm_filepos passed to pm_check() is %u bytes",
- sizeof(pm_filepos));
- #endif
-+ overflow2(bytes_per_row, rows);
- pm_check(file, check_type, need_raster_size, retval_p);
- }
- }
diff -up netpbm-10.58.01/lib/libpm.c.security-code netpbm-10.58.01/lib/libpm.c
--- netpbm-10.58.01/lib/libpm.c.security-code 2012-04-09 15:31:38.000000000 +0200
+++ netpbm-10.58.01/lib/libpm.c 2012-04-09 15:40:03.229619464 +0200
@@ -1680,3 +1532,118 @@ diff -up netpbm-10.58.01/urt/scanargs.c.security-code netpbm-10.58.01/urt/scanar
static CONST_DECL char * prformat( CONST_DECL char *, int );
static int isnum( CONST_DECL char *, int, int );
+diff --git a/converter/other/pnmtorle.c b/converter/other/pnmtorle.c
+index 180b144..d99d99f 100644
+--- a/converter/other/pnmtorle.c
++++ b/converter/other/pnmtorle.c
+@@ -19,6 +19,8 @@
+ * If you modify this software, you should include a notice giving the
+ * name of the person performing the modification, the date of modification,
+ * and the reason for such modification.
++ *
++ * 2002-12-19: Fix maths wrapping bugs. Alan Cox
+ */
+ /*
+ * pnmtorle - A program which will convert pbmplus (ppm or pgm) images
+diff --git a/converter/ppm/ppmtoilbm.c b/converter/ppm/ppmtoilbm.c
+index e114457..7c46307 100644
+--- a/converter/ppm/ppmtoilbm.c
++++ b/converter/ppm/ppmtoilbm.c
+@@ -185,6 +185,7 @@ makeValTable(int const oldmaxval,
+ unsigned int i;
+ int * table;
+
++ overflow_add(oldmaxval, 1);
+ MALLOCARRAY_NOFAIL(table, oldmaxval + 1);
+ for (i = 0; i <= oldmaxval; ++i)
+ table[i] = ROUNDDIV(i * newmaxval, oldmaxval);
+@@ -2328,8 +2329,11 @@ main(int argc, char ** argv) {
+ MALLOCARRAY_NOFAIL(coded_rowbuf, RowBytes(cols));
+ for (i = 0; i < RowBytes(cols); ++i)
+ coded_rowbuf[i] = 0;
+- if (DO_COMPRESS)
++ if (DO_COMPRESS) {
++ overflow2(cols,2);
++ overflow_add(cols*2,2);
+ MALLOCARRAY_NOFAIL(compr_rowbuf, WORSTCOMPR(RowBytes(cols)));
++ }
+ }
+
+ switch (mode) {
+diff --git a/editor/pnmshear.c b/editor/pnmshear.c
+index 99fa302..dedce11 100644
+--- a/editor/pnmshear.c
++++ b/editor/pnmshear.c
+@@ -15,6 +15,7 @@
+ #include
+ #include
+ #include
++#include
+
+ #include "pm_c_util.h"
+ #include "mallocvar.h"
+@@ -242,6 +243,11 @@ main(int argc, const char * argv[]) {
+
+ shearfac = fabs(tan(cmdline.angle));
+
++ if(rows * shearfac >= INT_MAX-1)
++ pm_error("image too large");
++
++ overflow_add(rows * shearfac, cols+1);
++
+ newcols = rows * shearfac + cols + 0.999999;
+
+ pnm_writepnminit(stdout, newcols, rows, newmaxval, newformat, 0);
+diff --git a/lib/libpbm1.c b/lib/libpbm1.c
+index c96779e..543fa36 100644
+--- a/lib/libpbm1.c
++++ b/lib/libpbm1.c
+@@ -78,6 +78,7 @@ pbm_check(FILE * const fileP,
+ } else {
+ pm_filepos const bytesPerRow = (cols+7)/8;
+ pm_filepos const needRasterSize = rows * bytesPerRow;
++ overflow2(bytesPerRow, rows);
+ pm_check(fileP, checkType, needRasterSize, retvalP);
+ }
+ }
+diff --git a/converter/other/pnmtosgi.c b/converter/other/pnmtosgi.c
+index a8df532..514e9e6 100644
+--- a/converter/other/pnmtosgi.c
++++ b/converter/other/pnmtosgi.c
+@@ -176,6 +176,8 @@ compress(ScanElem * const tempArg,
+ break;
+ case STORAGE_RLE: {
+ unsigned int const tabrow = chanNum * rows + row;
++ overflow2(chanNum, rows);
++ overflow_add(chanNum* rows, row);
+ unsigned int const len = rleCompress(tempArg, cols);
+ /* writes result into rletemp */
+ unsigned int i;
+@@ -212,6 +214,7 @@ buildChannels(FILE * const ifP,
+ ScanElem * temp;
+
+ if (storage != STORAGE_VERBATIM) {
++ overflow2(channels, rows);
+ MALLOCARRAY_NOFAIL(table, channels * rows);
+ MALLOCARRAY_NOFAIL(rletemp, WORSTCOMPR(cols));
+ } else
+diff --git a/converter/other/sgitopnm.c b/converter/other/sgitopnm.c
+index 008d537..ea9a2e9 100644
+--- a/converter/other/sgitopnm.c
++++ b/converter/other/sgitopnm.c
+@@ -372,10 +372,14 @@ readChannels(FILE * const ifP,
+ MALLOCARRAY_NOFAIL(image, head->ysize);
+ } else {
+ maxchannel = 3;
++ overflow2(head->ysize, maxchannel);
+ MALLOCARRAY_NOFAIL(image, head->ysize * maxchannel);
+ }
+- if (table)
++ if (table) {
++ overflow2(head->xsize, 2);
++ overflow2(head->xsize*2, 2);
+ MALLOCARRAY_NOFAIL(temp, WORSTCOMPR(head->xsize));
++ }
+
+ for (channel = 0; channel < maxchannel; ++channel) {
+ unsigned int row;
diff --git a/netpbm-security-scripts.patch b/netpbm-security-scripts.patch
index 831be82..6a9b197 100644
--- a/netpbm-security-scripts.patch
+++ b/netpbm-security-scripts.patch
@@ -1,7 +1,8 @@
-diff -up netpbm-10.47.05/converter/other/anytopnm.security-scripts netpbm-10.47.05/converter/other/anytopnm
---- netpbm-10.47.05/converter/other/anytopnm.security-scripts 2009-12-10 08:34:36.000000000 +0100
-+++ netpbm-10.47.05/converter/other/anytopnm 2010-03-16 21:28:09.000000000 +0100
-@@ -510,10 +510,7 @@ else
+diff --git a/converter/other/anytopnm b/converter/other/anytopnm
+index acf8813..335312a 100755
+--- a/converter/other/anytopnm
++++ b/converter/other/anytopnm
+@@ -511,10 +511,7 @@ else
inputFile="-"
fi
@@ -13,10 +14,13 @@ diff -up netpbm-10.47.05/converter/other/anytopnm.security-scripts netpbm-10.47.
# Take out all spaces
# Find the filename extension for last-ditch efforts later
-@@ -539,9 +536,17 @@ if [ "$filetype" = "unknown" ]; then
- echo "$progname: unknown file type. " \
- "'file' says mime type is '$mimeType', " 1>&2
- echo "type description is '$typeDescription'" 1>&2
+@@ -537,12 +534,17 @@ typeDescription=`file "$file" | cut -d: -f2- | cut -c2-`
+ determineType "$file" "$mimeType" "$typeDescription" "$fileExtension"
+
+ if [ "$filetype" = "unknown" ]; then
+- echo "$progname: unknown file type. " \
+- "'file' says mime type is '$mimeType', " 1>&2
+- echo "type description is '$typeDescription'" 1>&2
+ if [ -d "$tempdir" ] ; then
+ rm -rf "$tempdir"
+ fi
@@ -31,10 +35,11 @@ diff -up netpbm-10.47.05/converter/other/anytopnm.security-scripts netpbm-10.47.
+fi
+
exit 0
-diff -up netpbm-10.47.05/editor/pamstretch-gen.security-scripts netpbm-10.47.05/editor/pamstretch-gen
---- netpbm-10.47.05/editor/pamstretch-gen.security-scripts 2009-12-10 08:34:32.000000000 +0100
-+++ netpbm-10.47.05/editor/pamstretch-gen 2010-03-16 21:28:47.000000000 +0100
-@@ -31,13 +31,9 @@ if [ "$1" = "" ]; then
+diff --git a/editor/pamstretch-gen b/editor/pamstretch-gen
+index ba0e818..250fca0 100755
+--- a/editor/pamstretch-gen
++++ b/editor/pamstretch-gen
+@@ -31,9 +31,7 @@ if [ "$1" = "" ]; then
exit 1
fi
@@ -44,15 +49,12 @@ diff -up netpbm-10.47.05/editor/pamstretch-gen.security-scripts netpbm-10.47.05/
+tempfile=$(mktemp /tmp/pnmig.XXXXXXXXXX) || exit 1
trap 'rm -rf $tempdir' 0 1 3 15
--tempfile=$tempdir/pnmig
--
- if ! cat $2 >$tempfile 2>/dev/null; then
- echo 'pamstretch-gen: error reading file' 1>&2
- exit 1
-diff -up netpbm-10.47.05/editor/pnmmargin.security-scripts netpbm-10.47.05/editor/pnmmargin
---- netpbm-10.47.05/editor/pnmmargin.security-scripts 2009-12-10 08:34:32.000000000 +0100
-+++ netpbm-10.47.05/editor/pnmmargin 2010-03-16 21:28:09.000000000 +0100
-@@ -11,15 +11,11 @@
+ tempfile=$tempdir/pnmig
+diff --git a/editor/pnmmargin b/editor/pnmmargin
+index 0f57d1d..e0d3625 100755
+--- a/editor/pnmmargin
++++ b/editor/pnmmargin
+@@ -11,11 +11,7 @@
# documentation. This software is provided "as is" without express or
# implied warranty.
@@ -61,47 +63,37 @@ diff -up netpbm-10.47.05/editor/pnmmargin.security-scripts netpbm-10.47.05/edito
- { echo "Could not create temporary file. Exiting." 1>&2; exit 1;}
-trap 'rm -rf $tempdir' 0 1 3 15
-
--tmp1=$tempdir/pnmm1
--tmp2=$tempdir/pnmm2
--tmp3=$tempdir/pnmm3
--tmp4=$tempdir/pnmm4
-+tmpdir=$(mktemp -d -t ppmmargin.XXXXXXX) || exit 1
-+tmp1="$tmpdir/tmp1"
-+tmp2="$tmpdir/tmp2"
-+tmp3="$tmpdir/tmp3"
-+tmp4="$tmpdir/tmp4"
-
- color="-gofigure"
- plainopt=""
++tempdir=$(mktemp -d -t ppmmargin.XXXXXXX) || exit 1
+ tmp1=$tempdir/pnmm1
+ tmp2=$tempdir/pnmm2
+ tmp3=$tempdir/pnmm3
@@ -90,6 +86,7 @@ else
-white | -black )
pnmpad $plainopt $color \
-left=$size -right=$size -top=$size -bottom=$size $tmp1
-+ rm -rf "$tmpdir"
++ rm -rf "$tempdir"
exit
;;
* )
-@@ -102,7 +99,4 @@ else
- pnmcat -lr $tmp2 $tmp1 $tmp2 > $tmp4
+@@ -103,4 +100,4 @@ else
pnmcat -tb $plainopt $tmp3 $tmp4 $tmp3
fi
+
-
--
--
--
-+rm -rf "$tmpdir"
-diff -up netpbm-10.47.05/editor/ppmfade.security-scripts netpbm-10.47.05/editor/ppmfade
---- netpbm-10.47.05/editor/ppmfade.security-scripts 2009-12-10 08:34:32.000000000 +0100
-+++ netpbm-10.47.05/editor/ppmfade 2010-03-16 21:28:09.000000000 +0100
-@@ -14,6 +14,7 @@
++rm -rf "$tempdir"
+diff --git a/editor/ppmfade b/editor/ppmfade
+index 027fc79..8eb094f 100755
+--- a/editor/ppmfade
++++ b/editor/ppmfade
+@@ -40,6 +40,7 @@ exec perl -w -x -S -- "$0" "$@"
#
- #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ ##############################################################################
use strict;
+use File::Temp "tempdir";
my $SPREAD = 1;
my $SHIFT = 2;
-@@ -111,20 +112,26 @@ if ($first_file ne "undefined") {
+@@ -137,20 +138,26 @@ if ($first_file ne "undefined") {
print("Frames are " . $width . "W x " . $height . "H\n");
@@ -132,7 +124,7 @@ diff -up netpbm-10.47.05/editor/ppmfade.security-scripts netpbm-10.47.05/editor/
}
#
-@@ -132,14 +139,14 @@ if ($last_file eq "undefined") {
+@@ -158,14 +165,14 @@ if ($last_file eq "undefined") {
#
# Here's what our temporary files are:
@@ -155,7 +147,7 @@ diff -up netpbm-10.47.05/editor/ppmfade.security-scripts netpbm-10.47.05/editor/
my $i; # Frame number
for ($i = 1; $i <= $nframes; $i++) {
-@@ -147,147 +154,147 @@ for ($i = 1; $i <= $nframes; $i++) {
+@@ -173,147 +180,147 @@ for ($i = 1; $i <= $nframes; $i++) {
if ($mode eq $SPREAD) {
if ($i <= 10) {
my $n = $spline20[$i] * 100;
@@ -356,10 +348,11 @@ diff -up netpbm-10.47.05/editor/ppmfade.security-scripts netpbm-10.47.05/editor/
+system("rm $tmpdir/junk*$$.ppm");
exit(0);
-diff -up netpbm-10.47.05/editor/ppmshadow.security-scripts netpbm-10.47.05/editor/ppmshadow
---- netpbm-10.47.05/editor/ppmshadow.security-scripts 2009-12-10 08:34:32.000000000 +0100
-+++ netpbm-10.47.05/editor/ppmshadow 2010-03-16 21:28:09.000000000 +0100
-@@ -72,9 +72,10 @@ sub makeConvolutionKernel($$) {
+diff --git a/editor/ppmshadow b/editor/ppmshadow
+index 62cdf8b..72e1b22 100755
+--- a/editor/ppmshadow
++++ b/editor/ppmshadow
+@@ -97,9 +97,10 @@ sub makeConvolutionKernel($$) {
my $tmpdir = $ENV{TMPDIR} || "/tmp";
diff --git a/netpbm-werror.patch b/netpbm-werror.patch
new file mode 100644
index 0000000..692bbe4
--- /dev/null
+++ b/netpbm-werror.patch
@@ -0,0 +1,102 @@
+diff --git a/converter/pbm/cmuwmtopbm.c b/converter/pbm/cmuwmtopbm.c
+index 5c138c1..1f9bc6c 100644
+--- a/converter/pbm/cmuwmtopbm.c
++++ b/converter/pbm/cmuwmtopbm.c
+@@ -48,20 +48,20 @@ readCmuwmHeader(FILE * const ifP,
+
+ rc = pm_readbiglong(ifP, &l);
+ if (rc == -1 )
+- pm_error(initReadError);
++ pm_error("%s", initReadError);
+ if ((uint32_t)l != cmuwmMagic)
+ pm_error("bad magic number in CMU window manager file");
+ rc = pm_readbiglong(ifP, &l);
+ if (rc == -1)
+- pm_error(initReadError);
++ pm_error("%s", initReadError);
+ *colsP = l;
+ rc = pm_readbiglong(ifP, &l);
+ if (rc == -1 )
+- pm_error(initReadError);
++ pm_error("%s", initReadError);
+ *rowsP = l;
+ rc = pm_readbigshort(ifP, &s);
+ if (rc == -1)
+- pm_error(initReadError);
++ pm_error("%s", initReadError);
+ *depthP = s;
+ }
+
+diff --git a/converter/other/tifftopnm.c b/converter/other/tifftopnm.c
+index 3aa2e43..b8ebf39 100644
+--- a/converter/other/tifftopnm.c
++++ b/converter/other/tifftopnm.c
+@@ -1459,7 +1459,7 @@ convertRasterInMemory(pnmOut * const pnmOutP,
+ int ok;
+ ok = TIFFRGBAImageOK(tif, emsg);
+ if (!ok) {
+- pm_message(emsg);
++ pm_message("%s", emsg);
+ *statusP = CONV_UNABLE;
+ } else {
+ uint32 * raster;
+@@ -1479,14 +1479,14 @@ convertRasterInMemory(pnmOut * const pnmOutP,
+
+ ok = TIFFRGBAImageBegin(&img, tif, stopOnErrorFalse, emsg);
+ if (!ok) {
+- pm_message(emsg);
++ pm_message("%s", emsg);
+ *statusP = CONV_FAILED;
+ } else {
+ int ok;
+ ok = TIFFRGBAImageGet(&img, raster, cols, rows);
+ TIFFRGBAImageEnd(&img) ;
+ if (!ok) {
+- pm_message(emsg);
++ pm_message("%s", emsg);
+ *statusP = CONV_FAILED;
+ } else {
+ *statusP = CONV_DONE;
+diff --git a/lib/util/pm_c_util.h b/lib/util/pm_c_util.h
+index 01a0765..8f5aa01 100644
+--- a/lib/util/pm_c_util.h
++++ b/lib/util/pm_c_util.h
+@@ -80,10 +80,10 @@
+ #endif
+
+ #ifndef TRUE
+- #define TRUE true
++ #define TRUE 1
+ #endif
+ #ifndef FALSE
+- #define FALSE false
++ #define FALSE 0
+ #endif
+
+ #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
+diff --git a/converter/other/fiasco/pnmtofiasco.c b/converter/other/fiasco/pnmtofiasco.c
+index d78ff6b..761dac5 100644
+--- a/converter/other/fiasco/pnmtofiasco.c
++++ b/converter/other/fiasco/pnmtofiasco.c
+@@ -170,7 +170,7 @@ main (int argc, char **argv)
+ return 0;
+ else
+ {
+- fprintf (stderr, fiasco_get_error_message ());
++ fprintf (stderr, "%s", fiasco_get_error_message ());
+ fprintf (stderr, "\n");
+ return 1;
+ }
+diff --git a/converter/other/fiasco/params.c b/converter/other/fiasco/params.c
+index a4d843a..9659e9f 100644
+--- a/converter/other/fiasco/params.c
++++ b/converter/other/fiasco/params.c
+@@ -656,7 +656,7 @@ usage (const param_t *params, const char *progname, const char *synopsis,
+ fprintf (stderr, "Usage: %s [OPTION]...%s\n", progname,
+ non_opt_string ? non_opt_string : " ");
+ if (synopsis != NULL)
+- fprintf (stderr, synopsis);
++ fprintf (stderr, "%s\n", synopsis);
+ fprintf (stderr, "\n\n");
+ fprintf (stderr, "Mandatory or optional arguments to long options "
+ "are mandatory or optional\nfor short options too. "
diff --git a/netpbm.spec b/netpbm.spec
index fd00155..29bec7d 100644
--- a/netpbm.spec
+++ b/netpbm.spec
@@ -1,7 +1,7 @@
Summary: A library for handling different graphics file formats
Name: netpbm
-Version: 10.61.02
-Release: 9%{?dist}
+Version: 10.66.02
+Release: 1%{?dist}
# See copyright_summary for details
License: BSD and GPLv2 and IJG and MIT and Public Domain
Group: System Environment/Libraries
@@ -33,13 +33,8 @@ Patch22: netpbm-pamtojpeg2k.patch
Patch23: netpbm-manfix.patch
Patch24: netpbm-ppmtopict.patch
Patch25: netpbm-pnmtopclxl.patch
-#Patch26: netpbm-man-repeated.patch
-Patch27: netpbm-multipage-pam.patch
-Patch28: netpbm-compare-same-images.patch
-#Patch29: netpbm-man-corrections.patch
-Patch29: netpbm-manual-pages.patch
-Patch30: netpbm-format-security.patch
-Patch31: netpbm-more-files.patch
+Patch26: netpbm-werror.patch
+Patch27: netpbm-disable-pbmtog3.patch
BuildRequires: libjpeg-devel, libpng-devel, libtiff-devel, flex
BuildRequires: libX11-devel, python, jasper-devel, libxml2-devel
@@ -104,7 +99,7 @@ netpbm-doc. You'll also need to install the netpbm-progs package.
%patch9 -p1 -b .xwdfix
%patch11 -p1 -b .multilib
%patch13 -p1 -b .glibc
-%patch15 -p1
+%patch15 -p1 -b .docfix
%patch16 -p1 -b .ppmfadeusage
%patch17 -p1 -b .fiasco-overflow
%patch20 -p1 -b .noppmtompeg
@@ -113,13 +108,8 @@ netpbm-doc. You'll also need to install the netpbm-progs package.
%patch23 -p1 -b .manfix
%patch24 -p1 -b .ppmtopict
%patch25 -p1 -b .pnmtopclxl
-#%patch26 -p1 -b .man-repeated
-%patch27 -p1 -b .multipage-pam
-%patch28 -p1 -b .compare-same-images
-#%patch29 -p1 -b .man-corrections
-%patch29 -p1 -b .manual-pages
-%patch30 -p1 -b .fmt-sec
-%patch31 -p1 -b .more-files
+%patch26 -p1 -b .werror
+%patch27 -p1 -b .disable-pbmtog3
sed -i 's/STRIPFLAG = -s/STRIPFLAG =/g' config.mk.in
rm -rf converter/other/jpeg2000/libjasper/
@@ -224,6 +214,7 @@ rm -rf $RPM_BUILD_ROOT/usr/misc
rm -rf $RPM_BUILD_ROOT/usr/man
rm -rf $RPM_BUILD_ROOT/usr/pkginfo
rm -rf $RPM_BUILD_ROOT/usr/config_template
+rm -rf $RPM_BUILD_ROOT/usr/pkgconfig_template
# Don't ship the static library
rm -f $RPM_BUILD_ROOT/%{_libdir}/lib*.a
@@ -240,6 +231,7 @@ popd
pushd test
export LD_LIBRARY_PATH=$RPM_BUILD_ROOT%{_libdir}
export PBM_TESTPREFIX=$RPM_BUILD_ROOT%{_bindir}
+export PBM_BINPREFIX=$RPM_BUILD_ROOT%{_bindir}
./Execute-Tests && exit 0
popd
@@ -274,7 +266,10 @@ rm -rf $RPM_BUILD_ROOT
%doc userguide/*
%changelog
-* Wed Nov 13 2013 Petr Hracek - 10.61.02-9
+* Tue May 13 2014 Petr Hracek - 10.66.02-1
+- Update new sources (#1063264)
+
+* Wed Nov 13 2013 Petr Hracek - 10.61.02-8
- pnmtops hangs in case of more then 10 files (#1029512)
* Mon Apr 14 2014 Jaromir Capik - 10.61.02-8
diff --git a/sources b/sources
index 1a5f01c..1f41b8d 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-42bbb9fb283687c82e5c608901b22061 netpbm-10.61.02.tar.xz
+dcb7de91384d630eb399e48c71158f3d netpbm-10.66.02.tar.xz