about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--411toppm.html73
-rw-r--r--anytopnm.html76
-rw-r--r--asciitopgm.html85
-rw-r--r--atktopbm.html47
-rw-r--r--bioradtopgm.html67
-rw-r--r--blend1.gifbin0 -> 18686 bytes
-rw-r--r--blend3.gifbin0 -> 21744 bytes
-rw-r--r--blend4.gifbin0 -> 25152 bytes
-rw-r--r--blend6.gifbin0 -> 22391 bytes
-rw-r--r--blend7.gifbin0 -> 26915 bytes
-rw-r--r--bmptopnm.html67
-rw-r--r--bmptoppm.html20
-rw-r--r--brushtopbm.html49
-rw-r--r--cameratopam.html192
-rw-r--r--cmuwmtopbm.html49
-rw-r--r--ddbugtopbm.html116
-rw-r--r--directory.html1033
-rw-r--r--error.html250
-rw-r--r--escp2topbm.html92
-rw-r--r--extendedopacity.html162
-rw-r--r--eyuvtoppm.html57
-rw-r--r--fiascotopnm.html227
-rw-r--r--fitstopnm.html93
-rw-r--r--fstopgm.html86
-rw-r--r--g3topbm.html144
-rw-r--r--gemtopbm.html20
-rw-r--r--gemtopnm.html66
-rw-r--r--giftopnm.html182
-rw-r--r--globe.jpgbin0 -> 14379 bytes
-rw-r--r--gobot.gifbin0 -> 1404 bytes
-rw-r--r--gouldtoppm.html48
-rw-r--r--hdifftopam.html66
-rw-r--r--hipstopgm.html53
-rw-r--r--hpcdtoppm.html448
-rw-r--r--icontopbm.html49
-rw-r--r--ilbmtoppm.html117
-rw-r--r--imgtoppm.html53
-rw-r--r--index.html852
-rw-r--r--infotopam.html227
-rw-r--r--jbigtopnm.html129
-rw-r--r--jpeg2ktopam.html149
-rw-r--r--jpegtopnm.html339
-rw-r--r--leaftoppm.html50
-rw-r--r--libnetpbm.html83
-rw-r--r--libnetpbm_dir.html183
-rw-r--r--libnetpbm_draw.html142
-rw-r--r--libnetpbm_image.html712
-rw-r--r--libnetpbm_ug.html303
-rw-r--r--libpbm.html309
-rw-r--r--libpgm.html279
-rw-r--r--libpm.html523
-rw-r--r--libpnm.html357
-rw-r--r--libppm.html823
-rw-r--r--libsystem.html307
-rw-r--r--libtmpfile.html66
-rw-r--r--lispmtopgm.html71
-rw-r--r--macptopbm.html75
-rw-r--r--manweb.html244
-rw-r--r--mdatopbm.html81
-rw-r--r--mgrtopbm.html50
-rw-r--r--mrf.html134
-rw-r--r--mrftopbm.html77
-rw-r--r--mtvtoppm.html51
-rw-r--r--neotoppm.html56
-rw-r--r--palmtopnm.html157
-rw-r--r--pam.html317
-rw-r--r--pamaddnoise.html197
-rw-r--r--pamarith.html253
-rw-r--r--pambackground.html128
-rw-r--r--pambayer.html103
-rw-r--r--pamchannel.html87
-rw-r--r--pamcomp.html310
-rw-r--r--pamcut.html204
-rw-r--r--pamdeinterlace.html97
-rw-r--r--pamdepth.html71
-rw-r--r--pamdice.html141
-rw-r--r--pamditherbw.html155
-rw-r--r--pamedge.html82
-rw-r--r--pamendian.html71
-rw-r--r--pamenlarge.html81
-rw-r--r--pamfile.html107
-rw-r--r--pamflip.html213
-rw-r--r--pamfunc.html166
-rw-r--r--pamgauss.html128
-rw-r--r--pamgradient.html108
-rw-r--r--pamlookup.html294
-rw-r--r--pammasksharpen.html142
-rw-r--r--pammixinterlace.html75
-rw-r--r--pamoil.html94
-rw-r--r--pamperspective.html497
-rw-r--r--pampick.html78
-rw-r--r--pampop9.html96
-rw-r--r--pamrgbatopng.html78
-rw-r--r--pamscale.html573
-rw-r--r--pamseq.html110
-rw-r--r--pamsharpmap.html79
-rw-r--r--pamsharpness.html66
-rw-r--r--pamslice.html130
-rw-r--r--pamsplit.html86
-rw-r--r--pamstack.html102
-rw-r--r--pamstereogram.html286
-rw-r--r--pamstretch-gen.html68
-rw-r--r--pamstretch.html131
-rw-r--r--pamsumm.html137
-rw-r--r--pamsummcol.html135
-rw-r--r--pamthreshold.html148
-rw-r--r--pamtilt.html175
-rw-r--r--pamtodjvurle.html76
-rw-r--r--pamtofits.html91
-rw-r--r--pamtogif.html327
-rw-r--r--pamtohdiff.html97
-rw-r--r--pamtohtmltbl.html99
-rw-r--r--pamtojpeg2k.html227
-rw-r--r--pamtopfm.html108
-rw-r--r--pamtopnm.html92
-rw-r--r--pamtosvg.html214
-rw-r--r--pamtotga.html126
-rw-r--r--pamtotiff.html510
-rw-r--r--pamtouil.html89
-rw-r--r--pamtoxvmini.html48
-rw-r--r--pamx.html247
-rw-r--r--pbm.html156
-rw-r--r--pbmclean.html114
-rw-r--r--pbmlife.html51
-rw-r--r--pbmmake.html65
-rw-r--r--pbmmask.html107
-rw-r--r--pbmpage.html111
-rw-r--r--pbmpscale.html74
-rw-r--r--pbmreduce.html82
-rw-r--r--pbmtext.html221
-rw-r--r--pbmtextps.html121
-rw-r--r--pbmto10x.html61
-rw-r--r--pbmto4425.html72
-rw-r--r--pbmtoascii.html74
-rw-r--r--pbmtoatk.html49
-rw-r--r--pbmtobbnbg.html64
-rw-r--r--pbmtocmuwm.html49
-rw-r--r--pbmtodjvurle.html57
-rw-r--r--pbmtoepsi.html112
-rw-r--r--pbmtoepson.html116
-rw-r--r--pbmtoescp2.html135
-rw-r--r--pbmtog3.html84
-rw-r--r--pbmtogem.html56
-rw-r--r--pbmtogo.html54
-rw-r--r--pbmtoibm23xx.html91
-rw-r--r--pbmtoicon.html50
-rw-r--r--pbmtolj.html125
-rw-r--r--pbmtoln03.html76
-rw-r--r--pbmtolps.html62
-rw-r--r--pbmtomacp.html76
-rw-r--r--pbmtomatrixorbital.html59
-rw-r--r--pbmtomda.html84
-rw-r--r--pbmtomgr.html49
-rw-r--r--pbmtomrf.html66
-rw-r--r--pbmtonokia.html133
-rw-r--r--pbmtopgm.html84
-rw-r--r--pbmtopi3.html51
-rw-r--r--pbmtopk.html161
-rw-r--r--pbmtoplot.html52
-rw-r--r--pbmtoppa.html317
-rw-r--r--pbmtopsg3.html77
-rw-r--r--pbmtoptx.html50
-rw-r--r--pbmtowbmp.html59
-rw-r--r--pbmtox10bm.html17
-rw-r--r--pbmtoxbm.html75
-rw-r--r--pbmtoybm.html52
-rw-r--r--pbmtozinc.html51
-rw-r--r--pbmupc.html86
-rw-r--r--pc1toppm.html55
-rw-r--r--pcdindex.html9
-rw-r--r--pcdovtoppm.html114
-rw-r--r--pcxtoppm.html97
-rw-r--r--pfm.html82
-rw-r--r--pfmtopam.html87
-rw-r--r--pgm.html197
-rw-r--r--pgmabel.html129
-rw-r--r--pgmbentley.html56
-rw-r--r--pgmcrater.html203
-rw-r--r--pgmdeshadow.html77
-rw-r--r--pgmedge.html20
-rw-r--r--pgmenhance.html67
-rw-r--r--pgmhist.html52
-rw-r--r--pgmkernel.html94
-rw-r--r--pgmmake.html77
-rw-r--r--pgmmedian.html135
-rw-r--r--pgmminkowski.html98
-rw-r--r--pgmmorphconv.html110
-rw-r--r--pgmnoise.html52
-rw-r--r--pgmnorm.html20
-rw-r--r--pgmoil.html20
-rw-r--r--pgmramp.html108
-rw-r--r--pgmslice.html23
-rw-r--r--pgmtexture.html89
-rw-r--r--pgmtofs.html54
-rw-r--r--pgmtolispm.html73
-rw-r--r--pgmtopbm.html50
-rw-r--r--pgmtopgm.html65
-rw-r--r--pgmtoppm.html121
-rw-r--r--pi1toppm.html55
-rw-r--r--pi3topbm.html53
-rw-r--r--picttoppm.html175
-rw-r--r--pjtoppm.html59
-rw-r--r--pktopbm.html79
-rw-r--r--pngtopnm.html172
-rw-r--r--pnm.html62
-rw-r--r--pnmalias.html102
-rw-r--r--pnmarith.html29
-rw-r--r--pnmcat.html91
-rw-r--r--pnmcolormap.html229
-rw-r--r--pnmcomp.html69
-rw-r--r--pnmconvol.html163
-rw-r--r--pnmcrop.html188
-rw-r--r--pnmcut.html66
-rw-r--r--pnmdepth.html31
-rw-r--r--pnmenlarge.html20
-rw-r--r--pnmfile.html20
-rw-r--r--pnmflip.html25
-rw-r--r--pnmgamma.html314
-rw-r--r--pnmhisteq.html198
-rw-r--r--pnmhistmap.html188
-rw-r--r--pnmindex.html138
-rw-r--r--pnminterp.html20
-rw-r--r--pnminvert.html57
-rw-r--r--pnmmargin.html76
-rw-r--r--pnmmontage.html123
-rw-r--r--pnmnlfilt.html178
-rw-r--r--pnmnoraw.html24
-rw-r--r--pnmnorm.html241
-rw-r--r--pnmpad.html167
-rw-r--r--pnmpaste.html100
-rw-r--r--pnmpsnr.html71
-rw-r--r--pnmquant.html76
-rw-r--r--pnmremap.html267
-rw-r--r--pnmrotate.html138
-rw-r--r--pnmscale.html65
-rw-r--r--pnmscalefixed.html71
-rw-r--r--pnmshear.html128
-rw-r--r--pnmsmooth.html113
-rw-r--r--pnmsplit.html27
-rw-r--r--pnmstitch.html135
-rw-r--r--pnmtile.html62
-rw-r--r--pnmtoddif.html87
-rw-r--r--pnmtofiasco.html372
-rw-r--r--pnmtofits.html19
-rw-r--r--pnmtojbig.html285
-rw-r--r--pnmtojpeg.html534
-rw-r--r--pnmtopalm.html313
-rw-r--r--pnmtopclxl.html191
-rw-r--r--pnmtoplainpnm.html24
-rw-r--r--pnmtopng.html464
-rw-r--r--pnmtopnm.html78
-rw-r--r--pnmtops.html385
-rw-r--r--pnmtorast.html64
-rw-r--r--pnmtorle.html122
-rw-r--r--pnmtosgi.html87
-rw-r--r--pnmtosir.html55
-rw-r--r--pnmtotiff.html19
-rw-r--r--pnmtotiffcmyk.html224
-rw-r--r--pnmtoxwd.html68
-rw-r--r--ppm.html187
-rw-r--r--ppm3d.html64
-rw-r--r--ppmbrighten.html166
-rw-r--r--ppmchange.html172
-rw-r--r--ppmcie.html395
-rw-r--r--ppmcolormask.html139
-rw-r--r--ppmcolors.html13
-rw-r--r--ppmdcfont.html59
-rw-r--r--ppmddumpfont.html50
-rw-r--r--ppmdim.html57
-rw-r--r--ppmdist.html88
-rw-r--r--ppmdither.html88
-rw-r--r--ppmdmkfont.html53
-rw-r--r--ppmdraw.html255
-rw-r--r--ppmfade.html173
-rw-r--r--ppmflash.html72
-rw-r--r--ppmforge.html395
-rw-r--r--ppmglobe.html148
-rw-r--r--ppmhist.html168
-rw-r--r--ppmlabel.html195
-rw-r--r--ppmmake.html89
-rw-r--r--ppmmix.html64
-rw-r--r--ppmnorm.html20
-rw-r--r--ppmntsc.html119
-rw-r--r--ppmpat.html123
-rw-r--r--ppmquant.html92
-rw-r--r--ppmquantall.html77
-rw-r--r--ppmrainbow.html132
-rw-r--r--ppmrelief.html57
-rw-r--r--ppmrough.html180
-rw-r--r--ppmshadow.html295
-rw-r--r--ppmshift.html90
-rw-r--r--ppmspread.html58
-rw-r--r--ppmsvgalib.html131
-rw-r--r--ppmtoacad.html174
-rw-r--r--ppmtoarbtxt.html215
-rw-r--r--ppmtobmp.html109
-rw-r--r--ppmtoeyuv.html56
-rw-r--r--ppmtogif.html75
-rw-r--r--ppmtoicr.html147
-rw-r--r--ppmtoilbm.html217
-rw-r--r--ppmtojpeg.html21
-rw-r--r--ppmtoleaf.html55
-rw-r--r--ppmtolj.html99
-rw-r--r--ppmtomap.html45
-rw-r--r--ppmtomitsu.html135
-rw-r--r--ppmtompeg-par.gifbin0 -> 37399 bytes
-rw-r--r--ppmtompeg-snr.gifbin0 -> 2352 bytes
-rw-r--r--ppmtompeg.html1291
-rw-r--r--ppmtoneo.html55
-rw-r--r--ppmtopcx.html205
-rw-r--r--ppmtopgm.html78
-rw-r--r--ppmtopi1.html54
-rw-r--r--ppmtopict.html71
-rw-r--r--ppmtopj.html145
-rw-r--r--ppmtopjxl.html102
-rw-r--r--ppmtoppm.html69
-rw-r--r--ppmtopuzz.html53
-rw-r--r--ppmtorgb3.html63
-rw-r--r--ppmtosixel.html100
-rw-r--r--ppmtoterm.html100
-rw-r--r--ppmtotga.html20
-rw-r--r--ppmtouil.html15
-rw-r--r--ppmtowinicon.html132
-rw-r--r--ppmtoxpm.html185
-rw-r--r--ppmtoyuv.html82
-rw-r--r--ppmtoyuvsplit.html72
-rw-r--r--ppmtv.html62
-rw-r--r--ppmwheel.html72
-rw-r--r--psidtopgm.html69
-rw-r--r--pstopnm.html389
-rw-r--r--qrttoppm.html49
-rw-r--r--rasttopnm.html54
-rw-r--r--rawtopgm.html170
-rw-r--r--rawtoppm.html109
-rw-r--r--rgb3toppm.html58
-rw-r--r--rlatopam.html59
-rw-r--r--rletopnm.html147
-rw-r--r--sbigtopgm.html54
-rw-r--r--sgitopnm.html86
-rw-r--r--sirtopnm.html54
-rw-r--r--sldtoppm.html187
-rw-r--r--spctoppm.html51
-rw-r--r--spottopgm.html102
-rw-r--r--sputoppm.html51
-rw-r--r--testimg.pngbin0 -> 49268 bytes
-rw-r--r--testimg_histbar.pngbin0 -> 1102 bytes
-rw-r--r--testimg_histdot.pngbin0 -> 1014 bytes
-rw-r--r--tgatoppm.html87
-rw-r--r--thinkjettopbm.html70
-rw-r--r--tifftopnm.html300
-rw-r--r--vidtoppm.html23
-rw-r--r--wbmptopbm.html61
-rw-r--r--winicontoppm.html101
-rw-r--r--xbmtopbm.html52
-rw-r--r--ximtoppm.html82
-rw-r--r--xpmtoppm.html101
-rw-r--r--xvminitoppm.html53
-rw-r--r--xwdtopnm.html90
-rw-r--r--ybmtopbm.html52
-rw-r--r--yuvsplittoppm.html72
-rw-r--r--yuvtoppm.html66
-rw-r--r--zeisstopnm.html71
362 files changed, 46252 insertions, 0 deletions
diff --git a/411toppm.html b/411toppm.html
new file mode 100644
index 00000000..e4156b53
--- /dev/null
+++ b/411toppm.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>411toppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>411toppm</H1>
+Updated: 03 March 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="ixAAB"></A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+411toppm - convert Sony Mavica .411 image to PPM
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>411toppm</B>
+[<B>-width </B><I>width</I>]
+[<B>-height </B><I>height</I>]
+[<I>411file</I>]
+
+<P>
+All options may be abbreviated to the shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p> <b>411toppm</b> reads a .411 file, such as from a Sony Mavic
+camera, and converts it to a PPM image as output.
+
+<P>
+Output is to Standard Output.
+<P>
+The originator of this program and decipherer of the .411 format,
+Steve Allen
+&lt;<A HREF="mailto:sla@alumni.caltech.edu">sla@alumni.caltech.edu</A>&gt;,
+has this to say about the
+utility of this program: &quot;There's so little image in a 64x48 thumbnail
+(especially when you have the full size JPG file) that the only point
+in doing this was to answer the implicit challenge posed by the manual
+stating that only the camera can use these files.&quot;
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-width</B>
+
+<DD>
+The width (number of columns) of the input image.  Default is 64.
+<DT><B>-height</B>
+
+<DD>
+The height (number of rows) of the input image.  Default is 48.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/anytopnm.html b/anytopnm.html
new file mode 100644
index 00000000..f40ac8b0
--- /dev/null
+++ b/anytopnm.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Anytopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>anytopnm</H1>
+Updated: 05 September 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+anytopnm - convert an arbitrary type of image file to PBM, PGM, or PPM
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>anytopnm</B>
+[<I>file</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>anytopnm</B> converts the input image, which may be in any of
+about 100 graphics formats, to PBM, PGM, or PPM format, depending on
+that nature of the input image, and outputs it to Standard Output.
+
+<P>To determine the format of the input, <B>anytopnm</B> uses the
+<B>file</B> program (possibly assisted by the magic numbers file
+fragment included with Netpbm). If that fails (very few image formats
+have magic numbers), <B>anytopnm</B> looks at the filename extension.
+If that fails, <B>anytopnm</B> punts.
+
+<P>The type of the output file depends on the input image.
+
+<p><b>anytopnm</b> uses the converters for particular graphics formats
+that are in the Netpbm package, so it can't convert any format that
+you couldn't convert with some other Netpbm program.  What
+<b>anytopnm</b> adds is the ability to recognize the format and choose
+the appropriate Netpbm program to convert it.  For example, if you
+invoke <b>anytopnm</b> on a PNG file, <b>anytopnm</b> will recognize
+that it is a PNG file and therefore <b>pngtopnm</b> knows how to
+convert it to PNM, so <b>anytopnm</b> invokes <b>pngtopnm</b>.
+
+<p><b>anytopnm</b> cannot recognize every possible input format, so you
+may still be able to convert an image with a specific Netpbm program when
+<b>anytopnm</b> fails to convert it.
+
+<P>If <B>file</B> indicates that the input file is compressed (either
+via Unix compress, gzip, or bzip compression), <B>anytopnm</B>
+uncompresses it and proceeds as above with the uncompressed result.
+
+<P>If <B>file</B> indicates that the input file is encoded by uuencode
+or btoa, <B>anytopnm</B> decodes it and proceeds as above with the
+decoded result.
+
+<P>If <I>file</I> is <B>-</B> or not given, <B>anytopnm</B> takes its
+input from Standard Input.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamfile.html">pamfile</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B>file</B> man page
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/asciitopgm.html b/asciitopgm.html
new file mode 100644
index 00000000..406cc5a6
--- /dev/null
+++ b/asciitopgm.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Asciitopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>asciitopgm</H1>
+Updated: 05 September 2003
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="ixAAB"></A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+asciitopgm - convert ASCII graphics into a PGM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>asciitopgm</B>
+[<b>-d</b> <i>divisor</I>]
+<I>height</i>
+<i>width</I>
+[<I>asciifile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>asciitopgm</b> reads ASCII data as input and produces a PGM image
+with pixel values which are an approximation of the
+&quot;brightness&quot; of the ASCII characters, assuming
+black-on-white printing.  In other words, a capital M is very dark, a
+period is very light, and a space is white.
+
+<p>Obviously, <b>asciitopgm</b> assumes a certain font in assigning
+a brightness value to a character.
+
+<p><b>asciitopgm</b> considers ASCII control characters to be all
+white.  It assigns special brightnesses to lower case letters which
+have nothing to do with what they look like printed.
+<b>asciitopgm</b> takes the ASCII character code from the lower 7 bits
+of each input byte.  But it warns you if the most signficant bit of
+any input byte is not zero.
+
+<p>Input lines which are fewer than <I>width</I> characters are
+automatically padded with spaces.
+
+<P>The <i>divisor</I> value is an integer (decimal) by which the
+blackness of an input character is divided; the default value is 1.
+You can use this to adjust the brightness of the output: for example,
+if the image is too bright, increase the divisor.
+
+<P>In keeping with (I believe) Fortran line-printer conventions,
+input lines beginning with a <b>+</b> (plus) character are assumed to
+&quot;overstrike&quot; the previous line, allowing a larger range of
+gray values.
+
+<P>If you're looking for something that creates an image of text,
+with that text specified in ASCII, that is something quite different.
+Use <b>pbmtext</b> for that.
+
+<A NAME="lbAE">&nbsp;</A>
+
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtoascii.html">pbmtoascii</A>,
+<A HREF="pbmtext.html">pbmtext</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Wilson H. Bent. Jr. (<A HREF="mailto:whb@usc.edu">whb@usc.edu</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/atktopbm.html b/atktopbm.html
new file mode 100644
index 00000000..cb129ef6
--- /dev/null
+++ b/atktopbm.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Atktopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>atktopbm</H1>
+Updated: 26 September 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="ixAAB"></A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+atktopbm - convert Andrew Toolkit raster object to PBM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>atktopbm</B>
+[<I>atkfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>atktopbm</b> reads an Andrew Toolkit raster object as input.
+and produces a PBM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtoatk.html">pbmtoatk</A>, <A HREF="pbm.html">pbm</A>
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Bill Janssen.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/bioradtopgm.html b/bioradtopgm.html
new file mode 100644
index 00000000..49534f2e
--- /dev/null
+++ b/bioradtopgm.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Bioradtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>bioradtopgm</H1>
+Updated: 28 June 1993
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+bioradtopgm - convert a Biorad confocal file into a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>bioradtopgm</B>
+[<B>-image#</B>]
+[<I>imagedata</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>bioradtopgm</b> reads a Biorad confocal file as input and
+produces a PGM image as output.  If the resulting image is upside
+down, run it through <B>pamflip -tb</B>.
+
+<A NAME="ixAAC"></A>
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-image#</B>
+
+<DD>
+A Biorad image file may contain more than one image. With this option,
+you can specify which image to extract (only one at a time). The first
+image in the file has number zero. If no
+image number is supplied, only information about the image size and
+the number of images in the input is printed out. No output is produced.
+</DL>
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamflip.html">pamflip</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+Copyright (C) 1993 by Oliver Trepte
+<BR>
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/blend1.gif b/blend1.gif
new file mode 100644
index 00000000..3425350c
--- /dev/null
+++ b/blend1.gif
Binary files differdiff --git a/blend3.gif b/blend3.gif
new file mode 100644
index 00000000..ec444b6b
--- /dev/null
+++ b/blend3.gif
Binary files differdiff --git a/blend4.gif b/blend4.gif
new file mode 100644
index 00000000..bca864e7
--- /dev/null
+++ b/blend4.gif
Binary files differdiff --git a/blend6.gif b/blend6.gif
new file mode 100644
index 00000000..d259e7e6
--- /dev/null
+++ b/blend6.gif
Binary files differdiff --git a/blend7.gif b/blend7.gif
new file mode 100644
index 00000000..7d79b915
--- /dev/null
+++ b/blend7.gif
Binary files differdiff --git a/bmptopnm.html b/bmptopnm.html
new file mode 100644
index 00000000..0685022a
--- /dev/null
+++ b/bmptopnm.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Bmptopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>bmptopnm</H1>
+Updated: 24 February 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+bmptopnm - convert a BMP file into a PBM, PGM, or PNM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>bmptopnm</B>
+[<I>bmpfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>bmptopnm</b> reads a Microsoft Windows or OS/2 BMP file as
+input.  and produces a PBM, PGM, or PNM image as output.  If the input
+is colormapped and contains only black and white, the output is PBM.
+If the input is colormapped and contains only black white and gray,
+the output is PGM.  Otherwise, the output is PPM.
+
+<P><b>bmptopnm</b> understands BMP files compressed with run length
+encoding (RLE4/RLE8), but not if that encoding includes a &quot;delta&quot;
+(which is rare).  <b>bmptopnm</b> recognizes the delta and issues an
+error message.
+
+<p><b>bmptopnm</b> cannot convert BMP files compressed with JPEG or
+PNG encoding.  It recognizes the compression and issues an error
+message.  Before Netpbm 10.32 (February 2006), <b>bmptopnm</b>
+couldn't convert RLE BMP files either.
+
+<P>Before Netpbm 10.18 (September 2003), this program could not convert
+BMP images with the BI_BITFIELDS format ("compression type").  It would
+recognize the format and issue an error message.
+
+<P><b>bmptopnm</b> cannot convert OS/2 BMP files with 16 bits per
+pixel (only because the author did not have a complete specification
+for them).  It recognizes the format and issues an error message.
+Before Netpbm 10.16 (June 2003), it also could not convert Windows BMP
+files with 16 bits per pixel.
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmtobmp.html">ppmtobmp</A></B>,
+<B><A HREF="ppmtowinicon.html">ppmtowinicon</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1992 by David W. Sanderson.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/bmptoppm.html b/bmptoppm.html
new file mode 100644
index 00000000..8fbd6387
--- /dev/null
+++ b/bmptoppm.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Bmptoppm User Manual</TITLE>
+</HEAD><BODY>
+<H1>bmptoppm</H1>
+Updated: March 2002
+<BR>
+<H2>NAME</H2>
+<B>bmptoppm</B> - replaced by bmptopnm
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>bmptoppm</b> was replaced in Netpbm 9.25 (March 2002) by
+<b><a href="bmptopnm.html">bmptopnm</a></b>.
+
+<P><B>bmptopnm</b> is backward compatible with <b>bmptoppm</b> except that
+it generates PBM and PGM output when it is more appropriate than PPM.
+
+</BODY>
+</HTML>
diff --git a/brushtopbm.html b/brushtopbm.html
new file mode 100644
index 00000000..36fb0cf9
--- /dev/null
+++ b/brushtopbm.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Brushtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>brushtopbm</H1>
+Updated: 28 August 1988
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+brushtopbm - convert a doodle brush file into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>brushtopbm</B>
+[<I>brushfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>brushtopbm</b> reads a Xerox doodle brush file as input.  and
+produces a portable bitmap as output.
+
+<P>Note that there is currently no pbmtobrush tool.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/cameratopam.html b/cameratopam.html
new file mode 100644
index 00000000..57039afa
--- /dev/null
+++ b/cameratopam.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Cameratopam User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamflip</H1>
+Updated: 12 April 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+cameratopam - convert raw camera image to PAM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>cameratopam</b>
+
+[<i>input_file_name</i>]
+
+[<b>-identify_only</b>]
+[<b>-quick_interpolate</b>]
+[<b>-half_size</b>]
+[<b>-four_color_rgb</b>]
+[<b>-document_mode</b>]
+[<b>-balance_auto</b>]
+[<b>-balance_camera</b>]
+[<b>-red_scale=</b><i>float</i>]
+[<b>-blue_scale=</b><i>float</i>]
+[<b>-brightness=</b><i>fraction</i>]
+[<b>-no_clip_color</b>]
+[<b>-rgb</b>]
+[<b>-secondary</b>]
+[<b>-linear</b>]
+[<b>-verbose</b>]
+
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and
+its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>cameratopam</b> converts from any of dozens of raw camera image
+formats to PAM.  
+
+<p>Digital still cameras often can produce images in a special raw
+format in addition to something more standard such as TIFF or JFIF
+(JPEG).  Software supplied with the camera allows you to manipulate
+the image using information which is lost when the camera converts to
+the common format.  A particular camera model often has a unique raw
+format.
+
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<dl>
+<dt><b>-identify_only</b>
+
+<dd>Report to Standard Error the format of the input image but don't
+generate an output image.  Program fails if it cannot recognize the
+format.
+
+<dt><b>-verbose</b>
+
+<dd>Report to Standard Error details of the processing.
+
+<dt><b>-quick_interpolate</b>
+
+<dd>Use simple bilinear interpolation for quick results.  The default
+is to use a slow, high-quality adaptive algorithm.
+
+<dt><b>-half_size</b>
+
+<dd>Half-size the output image.  Instead of interpolating, reduce
+each 2x2 block of sensors to one pixel.  Much faster than
+<b>-quick_interpolate</b>.
+
+<dt><b>-four_color_rgb</b>
+
+<dd>Interpolate RGB as four colors.  This causes a slight loss of
+detail, so use this only if you see false 2x2 mesh patterns in blue
+sky.
+
+<dt><b>-document_mode</b>
+
+<dd>Show the raw data as a grayscale image with no interpolation.
+This is good for photographing black and white documents.
+
+<dt><b>-balance_auto</b>
+
+<dd>Automatic color balance.  The default is to use a fixed
+color balance based on a white card photographed in sunlight.
+
+<dt><b>-balance_camera</b>
+
+<dd>Use the color balance specified by the camera.  If
+<B>cameratopam</B> can't find this, it prints a warning and reverts to
+the default.
+
+<dt><b>-red_scale=</b><i>float</i>
+<dt><b>-blue_scale</b><i>float</i>
+
+<dd>Further adjust the color balance by multiplying the red and blue
+channels by these values.  Both default to 1.0.
+
+<dt><b>-brightness=</b><i>float</i>
+
+<dd>Change the output brightness.  Default is 1.0.
+
+<dt><b>-no_clip_color</b>
+
+<dd>By default, <b>cameratoapm</b> clips all colors to prevent pink
+hues in the highlights.  Combine this option with
+<b>-brightness=0.25</b> to leave the image data completely unclipped.
+
+<dt><b>-rgb</b>
+
+<dd>Write raw camera colors to the output file.  By default,
+<b>cameratoapm</b> converts to sRGB colorspace.
+
+<dt><b>-secondary</b>
+
+<dd>For cameras based on the Fuji Super CCD SR, this option causes
+<b>cameratopam</b> to use the secondary sensors, in effect
+underexposing the image by four stops to reveal detail in the
+highlights.  <b>cameratopam</b> silently ignores this option for all
+other cameras.
+
+<dt><b>-linear</b>
+
+<dd>This option causes <b>cameratopam</b> to generate a variation on
+PAM that has &quot;linear&quot; color samples.  In true PAM, each
+sample in the image raster is gamma-corrected; i.e. it is essentially
+proportional to brightness.  With the <b>linear</b> option,
+<b>cameratopam</b> generates an image in which the samples are instead
+proportional to light intensity.
+
+<p>Without <b>-linear</b>, the image maxval is 255, so the image
+contains one byte per sample.  With <b>-linear</b>, the maxval is
+65535, so the image contains two bytes per sample.
+
+<p>Without <b>-linear</b>, <b>cameratopam</b> uses a 99th percentile
+white point.  With <b>-linear</b>, it doesn't.  I don't know what that
+means.
+
+</dl>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="411toppm.html">411toppm</A>, 
+<A HREF="pamflip.html">pamflip</A>, 
+<A HREF="pam.html">pam</A>,
+
+<A NAME="lbAG">&nbsp;</A>
+
+<A NAME="history"></A>
+<H2>HISTORY</H2>
+
+<P><b>cameratopam</b> was new in Netpbm 10.28 (June 2005).
+
+<p>It was derived from the program <a
+href="http://www.cybercom.net/~dcoffin/dcraw/"><b>dcraw</b> by Dave
+Coffin</a>, 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
+small changes to make the program consistent with Netpbm.  He also
+split the source code into manageable pieces (<b>dcraw</b> has a
+single 5000 line source file).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<li><A HREF="#lbAB">NAME</A>
+<li><A HREF="#lbAC">SYNOPSIS</A>
+<li><A HREF="#lbAD">DESCRIPTION</A>
+<li><A HREF="#lbAE">OPTIONS</A>
+<li><A HREF="#lbAF">SEE ALSO</A>
+<li><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/cmuwmtopbm.html b/cmuwmtopbm.html
new file mode 100644
index 00000000..97daf7ac
--- /dev/null
+++ b/cmuwmtopbm.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Cmuwmtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>cmuwmtopbm</H1>
+Updated: 15 April 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="ixAAB"></A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+cmuwmtopbm - convert a CMU window manager bitmap into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>cmuwmtopbm</B>
+[<I>cmuwmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>cmuwmtopbm</b> reads a CMU window manager bitmap as input.  and
+produces a PBM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtocmuwm.html">pbmtocmuwm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ddbugtopbm.html b/ddbugtopbm.html
new file mode 100644
index 00000000..8bc6548c
--- /dev/null
+++ b/ddbugtopbm.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ddbugtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ddbugtopbm</H1>
+Updated: 21st August, 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ddbugtopbm - convert Diddle or DiddleBug sketches to PBM files
+
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ddbugtopbm</B>
+
+<A NAME="examples"></A>
+<H2>EXAMPLES</H2>
+
+<pre>
+<B>ddbugtopbm &lt;/path/to/palm/backup/dir/DiddleBugDB.pdb</B>
+
+<B>ddbugtopbm &lt;/path/to/palm/backup/dir/DiddleDB.pdb</B>
+
+<B>ddbugtopbm &lt;/path/to/palm/backup/dir/DiddleIDB.pdb</B>
+</pre>
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ddbugtopbm</b> converts all sketches present in a database used
+by the PalmOS programs <b>Diddle</b> or <b>DiddleBug</b> into
+appropriately-named PBM files.  The backup copy of DiddleBug's
+database you should use as this program's input is usually called
+<B>DiddleBugDB.pdb</b>.  Or if you use the original Diddle, it has two
+separate DBs - <B>DiddleDB.pdb</B>, containing unnamed `scratch'
+sketches, and <B>DiddleIDB.pdb</B>, containing the saved (and named)
+sketches which are listed by its `index' option.  You can feed this
+program any of these three on standard input.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>USING THE PROGRAM</H2>
+
+<p>I recommend you <em>not</em> run <b>ddbugtopbm</b> from your Palm
+backup directory, i.e. don't run it from the directory the DB will
+normally be in.  Instead, run it from some other directory (perhaps you
+could make a directory purely to hold the PBM files, just to keep
+things simple) and use an absolute or relative path to the DB.
+
+<p>The filenames used for the output PBMs are based on the names given
+to each sketch; if you have an unnamed sketch, it's given a name along
+the lines of <B>sketch-0123.pbm</b>.
+
+<p>While the named sketches will overwrite any existing PBM file with
+the same name, the unnamed ones won't - they'll just try using another
+filename.  (I think this is probably the right approach, as you can't
+really tell the unnamed sketches apart.)
+
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>BUGS</H2>
+
+<p>The DiddleBug DB reader is only known to work with DBs from
+DiddleBug version 2.50. But it should probably work on later versions,
+and I think it'll work on DBs from version 2.15 as well.
+
+<P>It might fall over if fed an empty database, and doesn't do much
+(if any) checking of the input.
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Russell Marks (<A HREF="mailto:rus@svgalib.org">rus@svgalib.org</A>).
+
+<P>Mitch Blevins's decompression code is directly from DiddleBug
+itself, which like ddbugtopbm is distributed under the terms of the
+GNU GPL.
+
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<p>
+<a href="palmtopnm.html">palmtopnm</a>,
+<A HREF="pbm.html">pbm</A>
+
+<p>Jens-Chr. Heyer's `didcon' script does something similar.
+
+<A NAME="history"></A>
+<H2>HISTORY</H2>
+
+<p><b>ddbugtopbm</b> was new in Netpbm 10.18 (August 2003).  It was written
+and independently distributed in August 2002.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAC">EXAMPLES</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">USING THE PROGRAM</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/directory.html b/directory.html
new file mode 100644
index 00000000..1558cb49
--- /dev/null
+++ b/directory.html
@@ -0,0 +1,1033 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<html><head><title>Directory of Netpbm programs</title></head>
+
+<body>
+
+<h1>Netpbm Program Directory</h1>
+<BR>
+<?makeman .SH NAME ?>
+<?makeman netpbm_directory \- netpbm library directory ?>
+
+<p>We have the programs divided into these categories:
+
+<ul>
+<li><a href="#converters">Converters</a>
+<li><a href="#editors">Editors</a>
+<li><a href="#generators">Generators</a>
+<li><a href="#analyzers">Analyzers</a>
+</ul>
+
+
+<H2 id="converters">Converters</H2>
+
+<DL COMPACT>
+
+<DT><B><a href=pnmtopnm.html>pnmtopnm</a></B>
+<DD>convert PNM image to PNM raw or plain
+
+<DT><B><a href=pgmtopgm.html>pgmtopgm</a></B>
+<DD>convert PGM or PBM image to PGM
+
+<DT><B><a href=ppmtoppm.html>ppmtoppm</a></B>
+<DD>convert PPM, PGM, or PBM image to PPM
+
+<DT><B><a href=pbmtopgm.html>pbmtopgm</a>     </B>
+<DD>convert PBM image to PGM by averaging areas
+
+<DT><B><a href=pgmtopbm.html>pgmtopbm</a>     </B>
+<DD>(Obsolete) convert PGM image to PBM by dithering
+
+<DT><B><a href=pgmtoppm.html>pgmtoppm</a>      </B>
+<DD>colorize a PGM into a PPM
+
+<DT><B><a href=ppmtopgm.html>ppmtopgm</a>     </B>
+<DD>convert PPM image to PGM
+
+<DT><B><a href=ppmtompeg.html>ppmtompeg</a>    </B>
+<DD>
+convert series of PPM frames to an MPEG movie
+
+<DT><B><a href=jpegtopnm.html>jpegtopnm</a>    </B>
+<DD>
+convert JFIF/JPEG/EXIF file to Netpbm format
+
+<DT><B><a href=pnmtojpeg.html>pnmtojpeg</a>    </B>
+<DD>
+convert PNM to JPEG/JFIF/EXIF format
+
+<DT><B><a href=pamtojpeg2k.html>pamtojpeg2k</a>    </B>
+<DD>
+convert PNM/PAM to JPEG-2000 code stream
+
+<DT><B><a href=jpeg2ktopam.html>jpeg2ktopam</a>    </B>
+<DD>
+convert JPEG-2000 code stream to PAM/PNM
+
+<DT><B><a href=anytopnm.html>anytopnm</a>     </B>
+<DD>
+convert any graphics format to Netpbm format
+
+<DT><B><a href=bmptopnm.html>bmptopnm</a>     </B>
+<DD>
+convert Windows or OS/2 Bitmap file to PPM or PGM
+
+<DT><B><a href=ppmtobmp.html>ppmtobmp</a>     </B>
+<DD>
+convert PPM to Windows or OS/2 Bitmap file
+
+<DT><B><a href=winicontoppm.html>winicontoppm</a></B>
+<DD>
+convert Windows icon file to PPM
+
+<DT><B><a href=ppmtowinicon.html>ppmtowinicon</a></B>
+<DD>
+convert PPM to Windows icon file
+
+<DT><B><a href=giftopnm.html>giftopnm</a>     </B>
+<DD>
+convert GIF to PNM
+
+<DT><B><a href=pamtogif.html>pamtogif</a>     </B>
+<DD>
+convert PAM or PNM to GIF
+
+<DT><B><a href=ppmtogif.html>ppmtogif</a>     </B>
+<DD>
+obsolete compatibility interface to <b>pamtogif</b>
+
+<DT><B><a href=pnmtopng.html>pnmtopng</a>     </B>
+<DD>
+convert Netpbm format to Portable Network Graphics
+
+<DT><B><a href=pngtopnm.html>pngtopnm</a>     </B>
+<DD>
+convert PNG (Portable Network Graphics) to Netpbm formats
+
+<DT><B><a href=pamrgbatopng.html>pamrgbatopng</a>     </B>
+<DD>
+convert PAM color/transparency image to PNG
+
+<DT><B><a href=palmtopnm.html>palmtopnm</a>    </B>
+<DD>
+convert Palm pixmap to Netpbm formats
+
+<DT><B><a href=pnmtopalm.html>pnmtopalm</a>    </B>
+<DD>
+convert Netpbm formats to Palm pixmap
+
+<DT><B><a href=ddbugtopbm.html>ddbugtopbm</a>    </B>
+<DD>
+convert Palm DiddleBug image to PBM
+
+<DT><B><a href=jbigtopnm.html>jbigtopnm</a>    </B>
+<DD>
+convert JBIG BIE (compressed bitmap) to PNM
+
+<DT><B><a href=pamtopnm.html>pamtopnm</a></B>
+<DD>convert a PAM image to PBM, PGM, or PPM
+
+<DT><B><a href=pnmtojbig.html>pnmtojbig</a>    </B>
+<DD>convert PNM to JBIG BIE (compressed bitmap)
+
+<DT><B><a href=pnmtofiasco.html>pnmtofiasco</a>  </B>
+<DD>convert Netpbm image to Fiasco (wfa) highly compressed format
+
+<DT><B><a href=fiascotopnm.html>fiascotopnm</a>  </B>
+<DD>convert Fiasco (wfa) highly compressed format to Netpbm image
+
+<DT><b><a href="pamtosvg.html">pamtosvg</a></b>
+<dd>convert Netpbm image to Scalable Vector Graphics (SVG); trace image
+
+<DT><B><a href=pamtopfm.html>pamtopfm</a>  </B>
+<DD>convert PAM/PNM to HDRshop PFM (Portable Float Map)
+
+<DT><B><a href=pfmtopam.html>pfmtopam</a>  </B>
+<DD>convert HDRshop PFM (Portable Float Map) to PAM
+     
+<DT><B><a href=pbmtomrf.html>pbmtomrf</a>  </B>
+<DD>convert PBM image to MRF (compressed bitmap)
+
+<DT><B><a href=mrftopbm.html>mrftopbm</a>  </B>
+<DD>convert MRF (compressed bitmap) to PBM
+
+<DT><B><a href=hpcdtoppm.html>hpcdtoppm</a>    </B>
+<DD>convert photo CD to PPM
+
+<DT><B><a href=pcdovtoppm.html>pcdovtoppm</a>      </B>
+<DD>Convert a photo CD PCD overview file to PPM
+
+<DT><B><a href=pbmtonokia.html>pbmtonokia</a></B>
+<DD>convert PBM to Nokia Smart Messaging Format (SMF)
+
+<DT><B><a href=pbmtowbmp.html>pbmtowbmp</a>    </B>
+<DD>convert PBM to WAP (Wireless App Protocol) Wireless Bitmap
+
+<DT><B><a href=wbmptopbm.html>wbmptopbm</a>    </B>
+<DD>convert WAP (Wireless App Protocol) Wireless Bitmap to PBM
+
+<DT><B><a href=pamtohtmltbl.html>pamtohtmltbl</a>    </B>
+<DD>convert PNM/PAM to an HTML table with a colored cell for each pixel
+
+<DT><B><a href=pbmtomda.html>pbmtomda</a>     </B>
+<DD>convert from PBM to Microdesign (for Amstrad PCWs)
+
+<DT><B><a href=mdatopbm.html>mdatopbm</a>     </B>
+<DD>convert from Microdesign (for Amstrad PCWs) to PBM
+
+<DT><B><a href=atktopbm.html>atktopbm</a>     </B>
+<DD>convert Andrew Toolkit raster object to PBM
+
+<DT><B><a href=pbmtoatk.html>pbmtoatk</a>     </B>
+<DD>convert PBM to Andrew Toolkit raster object
+
+<DT><B><a href=brushtopbm.html>brushtopbm</a>   </B>
+<DD>convert Xerox doodle brushes to PBM
+
+<DT><B><a href=cmuwmtopbm.html>cmuwmtopbm</a>   </B>
+<DD>convert CMU window manager format to PBM
+
+<DT><B><a href=g3topbm.html>g3topbm</a>      </B>
+<DD>convert Group 3 FAX to PBM
+
+<DT><B><a href=pbmtog3.html>pbmtog3</a>      </B>
+<DD>convert PBM to Group 3 FAX
+
+<DT><B><a href=icontopbm.html>icontopbm</a>    </B>
+<DD>convert Sun icon to PBM
+
+<DT><B><a href=pbmtoicon.html>pbmtoicon</a>    </B>
+<DD>convert PBM to Sun icon
+
+<DT><B><a href=gemtopnm.html>gemtopnm</a>     </B>
+<DD>convert GEM .img format to PBM or pixmap
+
+<DT><B><a href=macptopbm.html>macptopbm</a>    </B>
+<DD>convert MacPaint to PBM
+
+<DT><B><a href=pbmtomacp.html>pbmtomacp</a>    </B>
+<DD>convert PBM to MacPaint
+
+<DT><B><a href=mgrtopbm.html>mgrtopbm</a>     </B>
+<DD>convert MGR format to PBM
+
+<DT><B><a href=pbmtomgr.html>pbmtomgr</a>     </B>
+<DD>convert PBM to MGR format
+
+<DT><B><a href=infotopam.html>infotopam</a>   </B>
+<DD>convert Amiga .info icons to PAM
+
+<DT><B><a href=neotoppm.html>neotoppm</a></B>
+<DD>convert Atari Neochrome (.neo) image to PPM
+
+<DT><B><a href=ppmtoneo.html>ppmtoneo</a></B>
+<DD>convert PPM image to Atari Neochrome (.neo)
+
+<DT><B><a href=pi1toppm.html>pi1toppm</a>     </B>
+<DD>convert Atari Degas .pi1 to PPM
+
+<DT><B><a href=ppmtopi1.html>ppmtopi1</a>     </B>
+<DD>convert PPM to Atari Degas .pi1
+
+<DT><B><a href=pc1toppm.html>pc1toppm</a>     </B>
+<DD>convert Atari Degas .pc1 (compressed pi1) to PPM
+
+<DT><B><a href=pi3topbm.html>pi3topbm</a>     </B>
+<DD>convert Atari Degas .pi3 to PBM
+
+<DT><B><a href=pbmtopi3.html>pbmtopi3</a>     </B>
+<DD>convert PBM to Atari Degas .pi3
+
+<DT><B><a href=xbmtopbm.html>xbmtopbm</a>     </B>
+<DD>convert X10 or X11 bitmap to PBM
+
+<DT><B><a href=pbmtoxbm.html>pbmtoxbm</a>     </B>
+<DD>convert PBM to X10 or X11 bitmap
+
+<DT><B><a href=ybmtopbm.html>ybmtopbm</a>     </B>
+<DD>convert Bennet Yee &quot;face&quot; file into PBM
+
+<DT><B><a href=pbmtoybm.html>pbmtoybm</a>     </B>
+<DD>convert PBM into Bennet Yee &quot;face&quot; file
+
+<DT><B><a href=pbmtoepson.html>pbmtoepson</a>   </B>
+<DD>convert PBM to Epson 9-pin printer graphics
+
+<DT><B><a href=pbmtoescp2.html>pbmtoescp2</a>   </B>
+<DD>convert PBM to Epson ESC/P2 printer graphics
+
+<DT><B><a href=escp2topbm.html>escp2topbm</a>   </B>
+<DD>convert Epson ESC/P2 printer graphics to PBM
+
+<DT><B><a href=pbmto10x.html>pbmto10x</a>     </B>
+<DD>convert PBM to Gemini 10x printer graphics
+
+<DT><B><a href=pnmtopclxl.html>pnmtopclxl</a>      </B>
+<DD>convert PNM to HP PCL-XL (PCL 6) printer language
+
+<DT><B><a href=ppmtopjxl.html>ppmtopjxl</a></B>
+<DD>convert from PPM to HP Paintjet XL PCL printer stream
+
+<DT><B><a href=pbmtolj.html>pbmtolj</a>      </B>
+<DD>convert PBM to HP LaserJet black and white graphics
+
+<DT><B><a href=ppmtolj.html>ppmtolj</a>      </B>
+<DD>convert PPM to HP LaserJet color graphics (PCL 5)
+
+<DT><B><a href=pjtoppm.html>pjtoppm</a>      </B>
+<DD>convert HP PaintJet file to PPM
+
+<DT><B><a href=ppmtopj.html>ppmtopj</a>      </B>
+<DD>convert PPM to HP PaintJet file
+
+<DT><B><a href=thinkjettopbm.html>thinkjettopbm</a></B>
+<DD>convert HP Thinkjet printer stream to PBM
+
+<DT><B><a href=pbmtoppa.html>pbmtoppa</a></B>
+<DD>convert PBM to HP PPA (Printer Performance Architecture) printer stream
+
+<DT><B><a href=ppmtomitsu.html>ppmtomitsu</a></B>
+<DD>convert from PPM to Mitsubishi S340-10 printer stream
+
+<DT><B><a href=pbmtoibm23xx.html>pbmtoibm23xx</a></B>
+<DD>convert from PBM to IBM 23XX printer stream
+
+<DT><B><a href=ppmtoterm.html>ppmtoterm</a>     </B>
+<DD>Display PPM image on ANSI standard text terminal
+
+<DT><B><a href=pbmto4425.html>pbmto4425</a>     </B>
+<DD>Display PBM image on AT&amp;T 4425 ASCII terminal with gfx chars
+
+<DT><B><a href=pbmtoascii.html>pbmtoascii</a>   </B>
+<DD>convert PBM to ASCII graphic form
+
+<DT><B><a href=asciitopgm.html>asciitopgm</a>   </B>
+<DD>convert ASCII character graphics to PGM
+
+<DT><B><a href=pbmtobbnbg.html>pbmtobbnbg</a>   </B>
+<DD>convert PBM to BBN BitGraph graphics
+
+<DT><B><a href=pbmtocmuwm.html>pbmtocmuwm</a>   </B>
+<DD>convert PBM to CMU window manager format
+
+<DT><B><a href=pbmtogem.html>pbmtogem</a>     </B>
+<DD>convert PBM into GEM .img file
+
+<DT><B><a href=pbmtogo.html>pbmtogo</a>      </B>
+<DD>convert PBM to GraphOn graphics
+
+<DT><B><a href=pbmtoplot.html>pbmtoplot</a>    </B>
+<DD>convert PBM into Unix <b>plot</b> file
+
+<DT><B><a href=pbmtoptx.html>pbmtoptx</a>     </B>
+<DD>convert PBM to Printronix graphics
+
+<DT><B><a href=pbmtozinc.html>pbmtozinc</a>    </B>
+<DD>convert PBM to Zinc Interface Library icon
+
+<DT><B><a href=fitstopnm.html>fitstopnm</a>    </B>
+<DD>convert FITS format to PNM
+
+<DT><B><a href=pamtofits.html>pamtofits</a>    </B>
+<DD>convert Netpbm formats to FITS format
+
+<DT><B><a href=fstopgm.html>fstopgm</a>      </B>
+<DD>convert Usenix FaceSaver(tm) format to PGM
+
+<DT><B><a href=pgmtofs.html>pgmtofs</a>      </B>
+<DD>convert PGM to Usenix FaceSaver(tm) format
+
+<DT><B><a href=hipstopgm.html>hipstopgm</a>    </B>
+<DD>convert HIPS format to PGM
+
+<DT><B><a href=lispmtopgm.html>lispmtopgm</a>   </B>
+<DD>convert a Lisp Machine bitmap file into PGM format
+
+<DT><B><a href=pgmtolispm.html>pgmtolispm</a>   </B>
+<DD>convert PGM into Lisp Machine format
+
+<DT><B><a href=pnmtops.html>pnmtops</a>      </B>
+<DD>convert Netpbm formats to Postscript
+
+<DT><B><a href=pstopnm.html>pstopnm</a>      </B>
+<DD>convert Postscript to Netpbm formats
+
+<DT><B><a href=psidtopgm.html>psidtopgm</a>    </B>
+<DD>convert PostScript &quot;image&quot; data to PGM
+
+<DT><B><a href=pbmtolps.html>pbmtolps</a>     </B>
+<DD>convert PBM image to Postscript using lines
+
+<DT><B><a href=pbmtoepsi.html>pbmtoepsi</a>    </B>
+<DD>convert a PBM image to encapsulated Postscript preview bitmap
+
+<DT><B><a href=pbmtopsg3.html>pbmtopsg3</a></B>
+<DD>convert PBM images to Postscript using G3 fax compression.
+
+<DT><B><a href=rawtopgm.html>rawtopgm</a>     </B>
+<DD>convert raw grayscale bytes to PGM
+
+<DT><B><a href=gouldtoppm.html>gouldtoppm</a>   </B>
+<DD>convert Gould scanner file to PPM
+
+<DT><B><a href=ilbmtoppm.html>ilbmtoppm</a>    </B>
+<DD>convert IFF ILBM to PPM
+
+<DT><B><a href=ppmtoilbm.html>ppmtoilbm</a>    </B>
+<DD>convert PPM to IFF ILBM
+
+<DT><B><a href=imgtoppm.html>imgtoppm</a>     </B>
+<DD>convert Img-whatnot to PPM
+
+<DT><B><a href=mtvtoppm.html>mtvtoppm</a>     </B>
+<DD>convert MTV ray-tracer output to PPM
+
+<DT><B><a href=pcxtoppm.html>pcxtoppm</a>     </B>
+<DD>convert PC Paintbrush format to PPM
+
+<DT><B><a href=picttoppm.html>picttoppm</a>    </B>
+<DD>convert Macintosh PICT to PPM
+
+<DT><B><a href=ppmtopict.html>ppmtopict</a>    </B>
+<DD>convert PPM to Macintosh PICT
+
+<DT><B><a href=qrttoppm.html>qrttoppm</a>     </B>
+<DD>convert QRT ray-tracer output to PPM
+
+<DT><B><a href=rawtoppm.html>rawtoppm</a>     </B>
+<DD>convert raw RGB bytes to PPM
+
+<DT><B><a href=sldtoppm.html>sldtoppm</a>     </B>
+<DD>convert an AutoCAD slide file into a PPM
+
+<DT><B><a href=spctoppm.html>spctoppm</a>     </B>
+<DD>convert Atari compressed Spectrum to PPM
+
+<DT><B><a href=sputoppm.html>sputoppm</a>     </B>
+<DD>convert Atari uncompressed Spectrum to PPM
+
+<DT><B><a href=tgatoppm.html>tgatoppm</a>     </B>
+<DD>convert TrueVision Targa file to PPM
+
+<DT><B><a href=pamtotga.html>pamtotga</a>     </B>
+<DD>convert PAM to TrueVision Targa file
+
+<DT><B><a href=ximtoppm.html>ximtoppm</a>     </B>
+<DD>convert Xim to PPM
+
+<DT><B><a href=xpmtoppm.html>xpmtoppm</a>     </B>
+<DD>convert XPM format to PPM
+
+<DT><B><a href=ppmtoxpm.html>ppmtoxpm</a>     </B>
+<DD>convert PPM to XPM format
+
+<DT><B><a href=yuvtoppm.html>yuvtoppm</a>     </B>
+<DD>convert Abekas YUV format to PPM
+
+<DT><B><a href=eyuvtoppm.html>eyuvtoppm</a>    </B>
+<DD>convert Encoder/Berkeley YUV format to PPM
+
+<DT><B><a href=ppmtoeyuv.html>ppmtoeyuv</a>    </B>
+<DD>convert PPM to Encoder/Berkeley YUV format
+
+<DT><B><a href=ppmtoyuv.html>ppmtoyuv</a>     </B>
+<DD>convert PPM to Abekas YUV format
+
+<DT><B><a href=ppmtoyuvsplit.html>ppmtoyuvsplit</a></B>
+<DD>convert PPM to 3 subsampled raw Stanford MPEG YUV files
+
+<DT><B><a href=yuvsplittoppm.html>yuvsplittoppm</a> </B>
+<DD>merge 3 subsampled raw YUV files to one PPM
+
+<DT><B><a href=ppmtoacad.html>ppmtoacad</a>    </B>
+<DD>convert PPM to AutoCAD database or slide
+
+<DT><B><a href=ppmtoicr.html>ppmtoicr</a>     </B>
+<DD>convert PPM to NCSA ICR graphics
+
+<DT><B><a href=ppmtopcx.html>ppmtopcx</a>     </B>
+<DD>convert PPM to PC Paintbrush format
+
+<DT><B><a href=ppmtopuzz.html>ppmtopuzz</a>    </B>
+<DD>convert PPM to X11 &quot;puzzle&quot; file
+
+<DT><B><a href=rasttopnm.html>rasttopnm</a>    </B>
+<DD>convert Sun raster file to Netpbm formats
+
+<DT><B><a href=pnmtorast.html>pnmtorast</a>    </B>
+<DD>convert Netpbm formats to Sun raster file
+
+<DT><B><a href=tifftopnm.html>tifftopnm</a>    </B>
+<DD>convert TIFF file to PNM
+
+<DT><B><a href=pamtotiff.html>pamtotiff</a>    </B>
+<DD>convert Netpbm formats to TIFF RGB file
+
+<DT><B><a href=pnmtotiffcmyk.html>pnmtotiffcmyk</a></B>
+<DD>convert Netpbm formats to TIFF CMYK file
+
+<DT><B><a href=xwdtopnm.html>xwdtopnm</a>     </B>
+<DD>convert X10 or X11 window dump to Netpbm formats
+
+<DT><B><a href=pnmtoxwd.html>pnmtoxwd</a>     </B>
+<DD>convert Netpbm formats to X11 window dump
+
+<DT><B><a href=cameratopam.html>cameratopam</a></B>
+<DD>convert raw camera image to PAM
+
+<DT><B><a href=411toppm.html>411toppm</a>     </B>
+<DD>convert 411 (Sony Mavica) to PPM
+
+<DT><B><a href=ppmtosixel.html>ppmtosixel</a>   </B>
+<DD>convert PPM to DEC sixel format
+
+<DT><B><a href=ppmtouil.html>ppmtouil</a>     </B>
+<DD>convert PPM to Motif UIL icon file
+
+<DT><B><a href=sbigtopgm.html>sbigtopgm</a>    </B>
+<DD>convert Santa Barbara Instrument Group CCD file to PGM
+
+<DT><B><a href=vidtoppm.html>vidtoppm</a>     </B>
+<DD>convert Parallax XVideo JPEG to sequence of PPM files
+
+<DT><B><a href=pnmtorle.html>pnmtorle</a>     </B>
+<DD>convert PNM to Utah Raster Toolkit (urt/rle) file
+
+<DT><B><a href=rletopnm.html>rletopnm</a>     </B>
+<DD>convert Utah Raster Toolkit (urt/rle) file to PNM
+
+<DT><B><a href=pamtodjvurle.html>pamtodjvurle</a>     </B>
+<DD>convert PNM/PAM to DjVu Color RLE format
+
+<DT><B><a href=pbmtodjvurle.html>pbmtodjvurle</a>     </B>
+<DD>convert PBM to DjVu Bitonal RLE format
+
+<DT><B><a href=rlatopam.html>rlatopam</a></B>
+<DD>convert Alias/Wavefront RLA and RPF to PAM
+
+<DT><B><a href=ppmtoleaf.html>ppmtoleaf</a>    </B>
+<DD>convert PPM to Interleaf
+
+<DT><B><a href=leaftoppm.html>leaftoppm</a>    </B>
+<DD>convert Interleaf to PPM
+
+<DT><B><a href=bioradtopgm.html>bioradtopgm</a>  </B>
+<DD>convert Biorad confocal image to PGM
+
+<DT><B><a href=pbmtoln03.html>pbmtoln03</a>    </B>
+<DD>convert PGM image to Dec LN03+ Sixel image
+
+<DT><B><a href=pbmtopk.html>pbmtopk</a>      </B>
+<DD>convert PBM image to packed format (PK) font
+
+<DT><B><a href=pktopbm.html>pktopbm</a>      </B>
+<DD>convert packed format (PK) font to PBM image
+
+<DT><B><a href=pamtohdiff.html>pamtohdiff</a></B>
+<DD>convert PAM image to horizontal difference version of same
+
+<DT><B><a href=hdifftopam.html>hdifftopam</a></B>
+<DD>convert horizontal difference PAM back to original image
+
+<DT><B><a href=pnmtoddif.html>pnmtoddif</a></B>
+<DD>convert from Netpbm formats to DDIF
+
+<DT><B><a href=pnmtosgi.html>pnmtosgi</a></B>
+<DD>convert from Netpbm formats to SGI format
+
+<DT><B><a href=sgitopnm.html>sgitopnm</a></B>
+<DD>convert from SGI format to Netpbm formats
+
+<DT><B><a href=pnmtosir.html>pnmtosir</a></B>
+<DD>convert from Netpbm formats to Solitaire Image Recorder file
+(MGI Type 11 or 17)
+
+<DT><B><a href=sirtopnm.html>sirtopnm</a></B>
+<DD>convert from Solitaire Image Recorder file to Netpbm formats.
+
+<DT><B><a href=spottopgm.html>spottopgm</a></B>
+<DD>convert SPOT satellite image to PGM
+
+<DT><B><a href=pamtoxvmini.html>pamtovmini</a></B>
+<DD>convert from Netpbm formats to Xv "thumbnail" picture
+
+<DT><B><a href=xvminitoppm.html>xvminitoppm</a></B>
+<DD>convert Xv "thumbnail" picture to PPM
+
+<DT><B><a href=zeisstopnm.html>zeisstopnm</a></B>
+<DD>convert a Zeiss confocal file to Netpbm format
+
+<DT><B><a href=ppmtoarbtxt.html>ppmtoarbtxt.html</a></B>
+<DD>convert PPM to just about any text-based format, using a grammar file
+     
+</DL>
+
+
+
+<H2 id="generators">Image Generators</H2>
+
+<P>
+All of these generate Netpbm format output.
+
+<DL COMPACT>
+
+<DT><a href=pbmmake.html><b>pbmmake</b></a>
+<DD>create a blank PBM image of a specified size
+
+<DT><a href=pgmmake.html><b>pgmmake</b></a>
+<DD>create a PGM image of a specified size and shade of gray
+     
+<DT><a href=ppmmake.html><b>ppmmake</b></a>
+<DD>create a PPM image of a specified size and color
+     
+<DT><a href=pgmramp.html><b>pgmramp</b></a>
+<DD>generate a grayscale ramp (gradient)
+
+<DT><a href=pamgradient.html><b>pamgradient</b></a>
+<DD>create a four-corner gradient image
+
+<DT><a href=ppmpat.html><b>ppmpat</b></a>
+<DD>create a pretty PPM image
+
+<DT><a href=ppmrainbow.html><b>ppmrainbow</b></a>
+<DD>create a spectrum-like image with colors fading together.
+
+<DT><a href=ppmrough.html><b>ppmrough</b></a>
+<DD>create PPM image of two colors with a ragged border between them
+
+<DT><a href=pgmnoise.html><b>pgmnoise</b></a>
+<DD>create a PGM image of white noise
+
+<DT><a href=pbmtext.html><b>pbmtext</b></a>
+<DD>render text into a PBM image
+
+<DT><B><a href=pbmtextps.html>pbmtextps</a>     </B>
+<DD>
+     render text into a PBM image using a Postscript interpreter
+     
+<DT><B><a href=pbmupc.html>pbmupc</a>        </B>
+<DD>
+     create a Universal Product Code PBM image
+
+<DT><B><a href=pamstereogram.html>pamstereogram</a>        </B>
+<DD>
+     create a single image stereogram from a height map
+
+<DT><B><a href=ppmwheel.html>ppmwheel</a>        </B>
+<DD>
+     generate a hue-value color wheel
+
+<DT><B><a href=ppmcie.html>ppmcie</a>        </B>
+<DD>
+     generate a CIE color map PPM image
+
+<DT><B><a href=pbmpage.html>pbmpage</a>       </B>
+<DD>
+     create a printer test pattern page in PBM format
+
+<DT><B><a href=pamseq.html>pamseq</a></B>
+<DD>
+     create a PAM image of all possible tuple values.  E.g.
+     a color map containing all possible colors of given maxval
+
+<DT><B><a href=pamgauss.html>pamgauss</a></B>
+<DD>
+     create a PAM image of a Gaussian (bell curve; normal curve) function.
+
+<DT><B><a href=ppm3d.html>ppm3d</a></B>
+<DD>generate a blue/green 3D glasses image from two images
+
+</DL>
+
+
+<H2 id="editors">Image Editors</H2>
+
+<P>All of these work on the Netpbm formats
+
+<DL COMPACT>
+<DT><B><a href=ppmlabel.html>ppmlabel</a>      </B>
+<DD>Add text to an image
+
+<DT><B><a href=ppmdraw.html>ppmdraw</a>      </B>
+<DD>Draw text, lines, shapes, etc. on an image
+
+<DT><B><a href=ppmshadow.html>ppmshadow</a></B>
+<DD>add a shadow to an image so it looks like it's floating
+
+<DT><B><a href=pgmdeshadow.html>pgmdeshadow</a></B>
+<DD>deshadow a PGM image
+
+<DT><B><a href=ppmbrighten.html>ppmbrighten</a>   </B>
+<DD>brighten or dim an image -- change saturation and value
+
+<DT><B><a href=ppmflash.html>ppmflash</a></B>
+<DD>brighten an image
+
+<DT><B><a href=ppmdim.html>ppmdim</a>        </B>
+<DD>dim an image - different way from ppmbrighten
+
+<DT><B><a href=ppmfade.html>ppmfade</a></B>
+<DD>Produce series of images fading from one to another
+     
+<DT><B><a href=pbmreduce.html>pbmreduce</a>     </B>
+<DD>reduce a PBM N times, using Floyd-Steinberg
+
+<DT><B><a href=pnmnorm.html>pnmnorm</a>       </B>
+<DD>normalize contrast 
+
+<DT><B><a href=pbmpscale.html>pbmpscale</a>     </B>
+<DD>enlarge a PBM image with edge smoothing
+
+<DT><B><a href=pamscale.html>pamscale</a>      </B>
+<DD>scale/resample an image with high precision
+
+<DT><B><a href=pnmscale.html>pnmscale</a>      </B>
+<DD>scale an image with high precision - obsolete
+
+<DT><B><a href=pnmscalefixed.html>pnmscalefixed</a> </B>
+<DD>scale an image quickly with low precision
+
+<DT><B><a href=pamenlarge.html>pamenlarge</a>    </B>
+<DD>enlarge an image N times
+
+<DT><B><a href=pamperspective.html>pamperspective</a>    </B>
+<DD>Change perspective distortion in an image
+
+<DT><B><a href=ppmdither.html>ppmdither</a>     </B>
+<DD>ordered dither for color images
+
+<DT><B><a href=pamditherbw.html>pamditherbw</a>     </B>
+<DD>dither a grayscale image to black and white (convert PGM to PBM)
+
+<DT><B><a href=pamthreshold.html>pamthreshold</a>     </B>
+<DD>threshold a grayscale image to black and white (convert PGM to PBM)
+
+<DT><B><a href=pnmcolormap.html>pnmcolormap</a></B>
+<DD>Choose the N best colors to represent an image; create a colormap
+
+<DT><B><a href=pnmremap.html>pnmremap</a></B>
+<DD>Replace colors in an image with those from a color map
+
+<DT><B><a href=ppmquant.html>ppmquant</a>      </B>
+<DD>quantize colors in a color image down to fewer colors - obsolete
+
+<DT><B><a href=pnmquant.html>pnmquant</a>      </B>
+<DD>quantize colors/shades in a color or grayscale image down to fewer
+
+<DT><B><a href=ppmquantall.html>ppmquantall</a>   </B>
+<DD>quantize colors on many files
+
+<DT><B><a href=ppmrelief.html>ppmrelief</a>     </B>
+<DD>run a Laplacian Relief filter on a PPM
+
+<DT><B><a href=pamfunc.html>pamfunc</a></B>
+<DD>apply simple arithmetic function to samples in an image
+     
+<DT><B><a href=pamarith.html>pamarith</a>      </B>
+<DD>apply simple arithmetic binary function to samples in two images
+
+<DT><B><a href=pamsummcol.html>pamsummcol</a>      </B>
+<DD>summarize (sum, average, etc) an image by column
+
+<DT><B><a href=pnmcat.html>pnmcat</a>        </B>
+<DD>concatenate images
+
+<DT><B><a href=pnmpad.html>pnmpad</a>        </B>
+<DD>add borders to an image
+
+<DT><B><a href=pamcomp.html>pamcomp</a>       </B>
+<DD>create composite (overlay) of images
+
+<DT><B><a href=pnmcomp.html>pnmcomp</a>       </B>
+<DD>obsolete version of <b><a href="pamcomp.html">pamcomp</a></b>
+(kept because it may have fewer bugs)
+
+<DT><B><a href=ppmmix.html>ppmmix</a>        </B>
+<DD>mix (overlay) two images.
+
+<DT><B><a href=pnmcrop.html>pnmcrop</a>       </B>
+<DD>crop all like-colored borders off an image
+
+<DT><B><a href=pamcut.html>pamcut</a></B>
+<DD>select a rectangular region from an image
+
+<DT><B><a href=pnmcut.html>pnmcut</a>        </B>
+<DD>obsolete version of <B><a href=pamcut.html>pamcut</a></B> 
+(kept because it may have fewer bugs)
+
+<DT><B><a href=pamdice.html>pamdice</a></B>
+<DD>slice an image into many horizontally and/or vertically
+
+<DT><B><a href=pamdeinterlace.html>pamdeinterlace</a></B>
+
+<DD>remove every other row from an image
+
+<DT><B><a href=pammixinterlace.html>pammixinterlace</a></B>
+
+<DD>mix adjacent lines to merge interlaced images
+
+<DT><B><a href=pnmstitch.html>pnmstitch</a></b>
+
+<DD>stitch together panoramic (side-by-side) photographs
+
+<DT><B><a href=ppmglobe.html>ppmglobe</a></b>
+
+<DD>Turn a cylindrical projection into strips that can be glued onto a sphere
+
+<DT><B><a href=pamlookup.html>pamlookup</a></b>
+<DD>map an image to a new image by using it as indices into a table
+     
+<DT><B><a href=pamdepth.html>pamdepth</a>      </B>
+<DD>change the maxval in an image
+
+<DT><B><a href=pamendian.html>pamendian</a></B>
+<DD>Swap bytes in multi-byte samples of a PAM image
+     
+<DT><B><a href=pamflip.html>pamflip</a>       </B>
+<DD>perform one or more flip operations on an image
+
+<DT><B><a href=pamstretch.html>pamstretch</a></B>
+<DD>scale up an image by inserting interpolated pixels
+
+<DT><B><a href=pamstretch.html>pamstretch-gen</a></B>
+<DD>scale by non-integer values using pamstretch and pamscale
+
+<DT><B><a href=pnminvert.html>pnminvert</a>     </B>
+<DD>invert an image
+
+<DT><B><a href=pnmgamma.html>pnmgamma</a>      </B>
+<DD>perform gamma correction on an image
+
+<DT><B><a href=pnmhisteq.html>pnmhisteq</a></B>
+<DD>histogram equalize image to increase contrast
+
+<DT><B><a href=pnmmargin.html>pnmmargin</a>     </B>
+<DD>add a margin to an image
+
+<DT><B><a href=pnmpaste.html>pnmpaste</a>      </B>
+<DD>paste a rectangle into an image
+
+<DT><B><a href=pnmrotate.html>pnmrotate</a>     </B>
+<DD>rotate an image
+
+<DT><B><a href=pnmshear.html>pnmshear</a>      </B>
+<DD>shear an image
+
+<DT><B><a href=pgmabel.html>pgmabel</a></B>
+<DD>create cross-section of an image using Abel integration for deconvolution
+
+<DT><B><a href=pnmsmooth.html>pnmsmooth</a>     </B>
+<DD>smooth an image
+
+<DT><B><a href=pgmmedian.html>pgmmedian</a>     </B>
+<DD>apply a median filter to an image
+
+<DT><B><a href=pamaddnoise.html>pamaddnoise</a>     </B>
+<DD>add noise to an image
+
+<DT><B><a href=pnmtile.html>pnmtile</a>       </B>
+<DD>replicate an image into a specified size
+
+<DT><B><a href=pbmclean.html>pbmclean</a>      </B>
+<DD>remove lone pixels (snow) from a PBM image
+
+<DT><B><a href=pnmalias.html>pnmalias</a>      </B>
+<DD>antialias an image
+
+<DT><B><a href=ppmchange.html>ppmchange</a>     </B>
+<DD>change all of one color to another in PPM image
+
+<DT><B><a href=pnmnlfilt.html>pnmnlfilt</a></B>
+<DD>filter an image by replacing each pixel with a function of nearby pixels
+
+<DT><B><a href=ppmshift.html>ppmshift</a>      </B>
+<DD>shift lines of PPM image left or right a random amount
+
+<DT><B><a href=ppmspread.html>ppmspread</a>     </B>
+<DD>move pixels of PPM image a random amount
+
+<DT><B><a href=pnmconvol.html>pnmconvol</a>     </B>
+<DD>general MxN convolution on an image.  Can blur an image.
+
+<DT><B><a href=pgmmorphconv.html>pgmmorphconv</a></b>
+<DD>perform morphological convolutions on a PGM image: dilation and erosion.
+     
+<DT><B><a href=pgmminkowski.html>pgmminkowski</a></b>
+<DD>Compute Minkowski integral over a PGM image</DD>
+
+<DT><B><a href=pamedge.html>pamedge</a>       </B>
+<DD>edge-detect (outline) an image
+
+<DT><B><a href=pammasksharpen.html>pammasksharpen</a>       </B>
+<DD>sharpen an image via an unsharp mask
+
+<DT><B><a href=rgb3toppm.html>rgb3toppm</a>     </B>
+<DD>combine three PGMs into one PPM
+
+<DT><B><a href=ppmtorgb3.html>ppmtorgb3</a>     </B>
+<DD>separate a PPM into three PGMs
+
+<DT><B><a href=pgmenhance.html>pgmenhance</a>    </B>
+<DD>edge-enhance a PGM image
+
+<DT><B><a href=pbmlife.html>pbmlife</a>       </B>
+<DD>apply Conway's rules of Life to a PBM image
+
+<DT><B><a href=ppmdist.html>ppmdist</a>       </B>
+<DD>map colors to high contrast grayscales arbitrarily
+
+<DT><B><a href=ppmntsc.html>ppmntsc</a>       </B>
+<DD>adjust colors so they are legal for NTSC or PAL television
+
+</DL>
+
+
+<H2 id="analyzers">Image Analyzers</H2>
+
+<P>
+These all work on the Netpbm formats as input.
+
+<DL COMPACT>
+
+<DT><B><a href=pamfile.html>pamfile</a>       </B>
+<DD>describe an image's vital characteristics
+
+<DT><B><a href=pnmpsnr.html>pnmpsnr</a>       </B>
+<DD>measure difference between two images
+
+<DT><B><a href=pamslice.html>pamslice</a>      </B>
+<DD>print a row or column of an image in ASCII decimal
+
+<DT><B><a href=pgmtexture.html>pgmtexture</a>    </B>
+<DD>calculate textural features on a PGM image
+
+<DT><B><a href=pgmhist.html>pgmhist</a>       </B>
+<DD>print a histogram of the values in a PGM image
+
+<DT><B><a href=ppmhist.html>ppmhist</a>       </B>
+<DD>print a histogram of a PPM
+
+<DT><B><a href=pnmhistmap.html>pnmhistmap</a></B>
+<DD>draw a histogram of a PGM or PPM
+
+<DT><B><a href=pnmcolormap.html>pnmcolormap</a>      </B>
+<DD>create quantization color map for an image
+
+<DT><B><a href=pamsumm.html>pamsumm</a>      </B>
+<DD>Summarize (sum, average, etc.) all samples in an image
+     
+<DT><B><a href=pamsharpness.html>pamsharpness</a>      </B>
+<DD>measure the sharpness of an image
+     
+<DT><B><a href=pamsharpmap.html>pamsharpmap</a>      </B>
+<DD>create map of sharpness in an image
+
+<DT><B><a href=pamtilt.html>pamtilt</a></B>
+<DD>Measure the tilt of an image, i.e. document skew
+
+</DL>
+
+
+<H2 id="miscellaneous">Miscellaneous</H2>
+
+<DL COMPACT>
+
+<DT><B><a href=pamchannel.html>pamchannel</a></B>
+<DD>extract individual planes (channel, e.g. R, G, or B) from an image
+
+<DT><B><a href=pamstack.html>pamstack</a></B>
+<DD>stack the planes of multiple PAM images into a single output image
+
+<DT><B><a href=pampick.html>pampick</a>      </B>
+<DD>pick images out of a multi-image Netpbm image stream
+
+<DT><B><a href=pamsplit.html>pamsplit</a>      </B>
+<DD>split a multi-image Netpbm file into multiple 1-image files
+
+<DT><B><a href=pambayer.html>pambayer</a></B>
+<DD>interpret Bayer patterns
+
+<DT><B><a href=pamx.html>pamx</a></B>
+<DD>display a Netpbm image in an X Window System window
+
+<DT><B><a href=ppmsvgalib.html>ppmsvgalib</a></B>
+<DD>display a PPM image on a Linux virtual console using Svgalib
+
+<DT><B><a href=pbmmask.html>pbmmask</a></B>
+<DD>create a mask bitmap from a regular bitmap
+
+<DT><B><a href=ppmcolormask.html>ppmcolormask</a></B>
+<DD>create mask of areas of a certain color in an image
+
+<DT><B><a href=pambackground.html>pambackground</a></B>
+<DD>create mask of the background of an image
+
+<DT><B><a href=pnmindex.html>pnmindex</a>      </B>
+<DD>build a visual index of a bunch of Netpbm images
+
+<DT><B><a href=pnmmontage.html>pnmmontage</a>    </B>
+<DD>build multiple Netpbm images into a single montage image
+
+<DT><B><a href=pgmbentley.html>pgmbentley</a>    </B>
+<DD>Bentleyize a PGM image
+
+<DT><B><a href=pgmcrater.html>pgmcrater</a>     </B>
+<DD>create cratered terrain by fractal forgery
+
+<DT><B><a href=pamoil.html>pamoil</a>        </B>
+<DD>turn a PNM or PAM image into an oil painting
+
+<DT><B><a href=ppmforge.html>ppmforge</a>      </B>
+<DD>fractal forgeries of clouds, planets, and starry skies
+
+<DT><B><a href=pgmkernel.html>pgmkernel</a>     </B>
+<DD>generate a convolution kernel
+
+<DT><B><a href=ppmtv.html>ppmtv</a>         </B>
+<DD>make an image lined so it looks like an old TV
+
+<DT><B><a href=pampop9.html>pampop9</a>         </B>
+<DD>simulate a multi-lens camera such as the Pop9
+
+<DT><B><a href=ppmdmkfont.html>ppmdmkfont</a>         </B>
+<DD>create Ppmdfont &quot;standard&quot;
+
+<DT><B><a href=ppmddumpfont.html>ppmddumpfont</a>         </B>
+<DD>dump a Ppmdfont file
+
+<DT><B><a href=ppmdcfont.html>ppmdcfont</a>         </B>
+<DD>Turn a Ppmdfont file into C source for a builtin font
+     
+</DL>
+
+
+<H3 id="obsolete">Obsolete Names</H3>
+<p>There used to be programs by the following names.  Each has been either
+renamed to a more illustrative name, or superseded by a more general
+function.  In most cases, Netpbm is installed with symbolic links that allow
+old programs and procedures to use these names but run the replacement
+programs:
+
+<UL>
+<LI><b><a href=ppmtotga.html>ppmtotga</a></b>
+<LI><b><a href=pnmnoraw.html>pnmnoraw</a></b>
+<LI><b><a href=gemtopbm.html>gemtopbm</a></b>
+<LI><b><a href=pnminterp.html>pnminterp</a></b>
+<LI><b><a href=pgmoil.html>pgmoil</a></b>
+<LI><b><a href=ppmtojpeg.html>ppmtojpeg</a></b>
+<LI><b><a href=bmptoppm.html>bmptoppm</a></b>
+<LI><b><a href=pgmnorm.html>pgmnorm</a></b>
+<LI><b><a href=ppmnorm.html>ppmnorm</a></b>
+<LI><b><a href=pnmfile.html>pnmfile</a></b>
+<LI><b><a href=pnmarith.html>pnmarith</a></b>
+<LI><b><a href=pgmedge.html>pgmedge</a></b>
+<LI><b><a href=ppmtouil.html>ppmtoouil</a></b>
+<LI><b><a href=pnmtoplainpnm.html>pnmtoplainpnm</a></b>
+<LI><b><a href=pnmtofits.html>pnmtofits</a></b>
+<LI><b><a href=pnmtotiff.html>pnmtotiff</a></b>
+<LI><b><a href=pnmsplit.html>pnmsplit</a></b>
+<LI><b><a href=pnmdepth.html>pnmdepth</a></b>
+</UL>
+
+
+</body> </html>
diff --git a/error.html b/error.html
new file mode 100644
index 00000000..68383b4f
--- /dev/null
+++ b/error.html
@@ -0,0 +1,250 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>Netpbm User Manual</TITLE>
+</HEAD>
+<BODY>
+<H1>Error Handling</H1>
+
+<h2>Netpbm Programming Library Errors</h2>
+
+<p>As part of Netpbm's mission to make writing graphics programs quick
+and easy, Netpbm recognizes that no programmer likes to deal with
+error conditions.  Therefore, very few Netpbm programming library
+functions return error information.  There are no return codes to
+check.  If for some reason a function can't do what was asked of it,
+it doesn't return at all.
+
+<p>Netpbm's response to encountering an error is called &quot;throwing
+an error.&quot;
+
+<p>The typical way a Netpbm function throws an error (for example,
+when you attempt to open a non-existent file with <b>pm_openr()</b>)
+is that the function writes an error message to the Standard Error
+file and then causes the program to terminate with an exit() system
+call.  The function doesn't do any explicit cleanup, because everything
+a library function sets up gets cleaned up by normal process
+termination.
+
+<p>In many cases, that simply isn't acceptable.  If you're calling
+Netpbm functions from inside a server program, you'd want the program
+to recognize that the immediate task failed, but keep running to do
+other work.
+
+<p>So as an alternative, you can replace that program exit with a
+longjmp instead.  A longjmp is a classic Unix exception handling
+concept.  See the documentation of the standard C library
+<b>setjmp()</b> and <b>longjmp()</b> functions.
+
+<p>In short, you identify a point in your programs for execution to
+hyperjump to from whatever depths of whatever functions it may be in
+at the time it detects an exception.  That hyperjump is called a
+longjmp.  The longjmp unwinds the stack and puts the program in the
+same state as if the subroutines had returned all the way up to the
+function that contains the jump point.  A longjmp does not in itself
+undo things like memory allocations.  But when you have a Netpbm
+function do a longjmp, it also cleans up everything it started.
+
+<p>To select this form of throwing an error, use the
+<b>pm_setjmpbuf()</b> function.  This alternative is not available
+before Netpbm 10.27 (March 2005).
+
+<p>Issuing of the error message is a separate thing.  Regardless
+of whether a library routine exits the program or executes a longjmp,
+it issues an error message first.
+
+<p>You can customize the error message behavior too.  By default, a
+Netpbm function issues an error message by writing it to the Standard
+Error file, formatted into a single line with the program name prefixed.
+But you can register your own error message function to run instead with
+<b>pm_setErrorMsgFn()</b>.
+
+
+<h3 id="pm_setjmpbuf">pm_setjmpbuf()</h3>
+
+<p>pm_setjmpbuf() sets up the process so that when future calls to the
+Netpbm programming library throw an error, they execute a longjmp
+instead of causing the process to exit as they would by default.
+
+<p>This is <em>not</em> analogous to <b>setjmp()</b>.  You do a
+setjmp() first, then tell the Netpbm programming library with
+<b>pm_setjmpbuf()</b> to use the result.
+
+<p>Example:
+
+<pre>
+<code>
+  #include &lt;setjmp.h&gt;
+  #include &lt;pam.h&gt;
+
+  jmp_buf jmpbuf;
+  int rc;
+
+  rc = setjmp(jmpbuf);
+  if (rc == 0) {
+    struct pam pam;
+    pm_setjmpbuf(&amp;jmpbuf);
+    
+    pnm_readpam(stdin, &amp;pam, PAM_STRUCT_SIZE(tuple_type));
+
+    printf(&quot;pnm_readpam() succeeded!\n&quot;);
+
+  } else {
+    printf(&quot;pnm_readpam() failed.  You should have seen &quot;
+           &quot;messages to Standard Error telling you why.\n&quot;);
+  }
+</code>
+</pre>
+
+<P>This example should look really strange to you if you haven't read
+the documentation of <b>setjmp()</b>.  Remember that there is a
+hyperjump such that the program is executing the <b>pnm_readpam()</b>
+and then suddenly is returning a second time from the setjmp()!
+
+<p>Even <b>pm_error()</b> works this way -- if you set up a longjmp with
+<b>pm_setjmpbuf()</b> and then call <b>pm_error()</b>, <b>pm_error()</b>
+will, after issuing your error message, execute the longjmp.
+
+
+<p><b>pm_setjmpbuf()</b> was new in Netpbm 10.27 (March 2005).  Before
+that, Netpbm programming library functions always throw an error by
+exiting the program.
+
+
+<h2>User Detected Errors</h2>
+
+<p>The Netpbm programming library provides a function for you to throw
+an error explicitly: <b>pm_error()</b>.  <b>pm_error()</b> does
+nothing but throw an error, and does so the same way any Netpbm
+library function you call would.  <b>pm_error()</b> is more convenient
+than most standard C facilities for handling errors.
+
+<p>If you don't want to throw an error, but just want to issue an
+error message, use <b>pm_errormsg()</b>.  It issues the message in the
+same way as <b>pm_error()</b> but returns normally instead of longjmping
+or exiting the program.  
+
+<p>Note that <b>libnetpbm</b> distinguishes between an error message
+and an informational message (use <b>pm_errormsg()</b> for the former;
+<b>pm_message()</b> for the latter).  The only practical difference is
+which user message function it calls.  So if you don't register any
+user message function, you won't see any difference, but a program is
+still more maintainable and easier to read when you use the
+appropriate one of these.
+
+
+<h3 id="pm_error">pm_error()</h3>
+
+<h4>Overview</h4>
+
+<p>
+<B>void pm_error(</b>
+<b>char *</B> <I>fmt</I><B>,</B>
+<B>... );</B>
+
+<h4>Example</h4>
+
+<pre>
+<code>
+if (argc-1 &lt; 3)
+    pm_error(&quot;You must specify at least 3 arguments.  &quot;
+             &quot;You specified&quot; only %d&quot;, argc-1);
+</code>
+</pre>
+
+<P><B>pm_error()</B> is a <B>printf()</B> style routine that 
+simply throws an error.  It issues an error message exactly like
+<b>pm_errormsg()</b> would in the process.
+
+
+<h3 id="pm_errormsg">pm_errormsg()</h3>
+
+<h4>Overview</h4>
+
+<p>
+<B>void pm_errormsg(</b>
+<b>char *</B> <I>fmt</I><B>,</B>
+<B>... );</B>
+
+<h4>Example</h4>
+
+<pre>
+<code>
+if (rc = -1)
+    pm_errormsg(&quot;Could not open file.  errno=%d&quot;, errno);
+    return -1;
+</code>
+</pre>
+
+<P><B>pm_errormsg()</B> is a <B>printf()</B> style routine that 
+issues an error message.  By default, it writes the message to Standard
+Error, but you can register a user error message routine to be called
+instead, and that might do something such as write the message into a 
+log file.  See <a href="#pm_setusererrormsgfn"><b>pm_setusererrormsgfn</b></a>.
+
+<p>There is very little advantage to using this over traditional C
+services, but it issues a message in the same way as <b>libnetpbm</b>
+library functions do, so the common handling might be valuable.
+
+<p>Note that the arguments specify the message text, not any formatting
+of it.  Formatting is handled by <b>pm_errormsg()</b>.  So don't put any
+newlines or tabs in it.
+
+
+<h3 id="pm_setusererrormsgfn">pm_setusererrormsgfn()</h3>
+
+<h4>Overview</h4>
+
+<p>
+<B>void pm_setusererrormsgfn(pm_usererrormsgfn *</B> <I>function</I><B>);</b>
+
+<h4>Example</h4>
+
+<pre>
+<code>
+    static pm_usererrormsgfn logfilewrite;
+
+    static void
+    logfilewrite(const char * const msg) {
+        fprintf(myerrorlog, &quot;Netpbm error: %s&quot;, msg);
+    }
+
+    pm_setusererrormsgfn(&amp;logfilewrite);
+    
+    pm_errormsg(&quot;Message for the error log&quot;);
+</code>
+</pre>
+
+<P><B>pm_setusererrormsg()</B> registers a handler for error messages,
+called a user error message routine.  Any library function that wants
+to issue an error message in the future will call that function with
+the message as an argument.
+
+<p>The argument the user error message routine gets is English text
+designed for human reading.  It is just the text of the message; there
+is no attempt at formatting in it (so you won't see any newline or tab
+characters).
+
+<p>You can remove the user error message routine, so that the library
+issues future error messages in its default way (write to Standard Error)
+by specifying a null pointer for <i>function</i>.
+
+<p>The user error message routine does not handle informational messages.
+It handles only error messages.  See <a href="libpm.html#message">
+<b>pm_setusermessagefn()</b></a>.
+
+
+<h2>Error Handling In Netpbm Programs</h2>
+
+<p>Most Netpbm programs respond to encountering an error by issuing a
+message describing the error to the Standard Error file and then
+exiting with exit status 1.
+
+<p>Netpbm programs generally do not follow the Unix convention of very
+terse error messages.  Conventional Unix programs produce error
+messages as if they had to pay by the word.  Netpbm programs tend to
+give a complete description of the problem in human-parseable English.
+These messages are often many terminal lines long.
+
+</body>
+</html>
diff --git a/escp2topbm.html b/escp2topbm.html
new file mode 100644
index 00000000..52128b74
--- /dev/null
+++ b/escp2topbm.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Escp2topbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>escp2topbm</H1>
+Created: 1 August 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+escp2topbm - convert an ESC/P2 printer file to a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>escp2topbm</B>
+[<I>printfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>escp2topbm</b> reads an ESC/P2 printer control stream as input.
+It produces a PBM image as output.
+
+<P><b>escp2topbm</b> filters the raster graphic content from an Epson
+ESC/P2 printer control stream and writes the image it would print as a
+standard (raw) PBM image.
+
+<p>The input is from the file named by the <i>printfile</i> argument, or
+from Standard Input if you don't specify <i>printfile</i>.  The output is
+to Standard Output.
+
+<P><b>escp2topbm</b> understands compression modes 0 (uncompressed)
+and 1 (RLE compressed) in the Epson input stream.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+none
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>HINTS</H2>
+
+<P>As <b>escp2topbm</b> is a simple program, created mainly to test
+<b>pbmtoescp2</b>, there are some restrictions:
+
+<ul>
+<li><b>escp2topbm</b> looks only at "ESC." sequences and ignores
+all data outside these Escape sequences.
+
+<li><b>escp2topbm</b> assumes that only one raster graphic is in the
+printer stream.  If this isn't true, the result is garbage.
+
+<li><b>escp2topbm</b> assumes that all "ESC."  sequences use the same
+width value.  If this isn't true, the result is garbage.
+</ul>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtoescp2.html">pbmtoescp2</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P> Copyright (C) 2003 by Ulrich Walcher 
+(<A HREF="mailto:u.walcher@gmx.de">u.walcher@gmx.de</A>).
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p><b>escp2topbm</b> was added to Netpbm in Release 10.18 (August 2003);
+it was created around the same time.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">HINTS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+
+</BODY>
+</HTML>
diff --git a/extendedopacity.html b/extendedopacity.html
new file mode 100644
index 00000000..92200671
--- /dev/null
+++ b/extendedopacity.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title>Image Processing By Interp and Extrapolation</title>
+<meta name="manual_section" content="5">
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<H1>extendedopacity</H1>
+Created: 17 April 2003
+<BR>
+<?makeman .SH NAME ?>
+<?makeman extendedopacity \- theory of netpbm interpolation and extrapolation ?>
+<?makeman .SH DESCRIPTION ?>
+
+<p>This page is a copy of http://www.sgi.com/misc/grafica/interp/ on
+April 17, 2003, with some slight formatting changes, included in the
+Netpbm documentation for convenience.  Since at least June 11, 2005,
+the source page has been missing.
+
+<h2>Image Processing By Interpolation and Extrapolation</h2>
+<I>Paul Haeberli and Douglas Voorhies</I>
+
+<h3>Introduction</h3>
+<p>
+Interpolation and extrapolation between two images offers a general,
+unifying approach to many common point and area image
+processing operations.  Brightness, contrast, saturation, tint, and
+sharpness can all be controlled with one formula, separately or
+simultaneously.  In several cases, there are also performance benefits.
+<p>
+Linear interpolation is often used to blend two images.
+Blend fractions (alpha) and (1 - alpha) are used in a weighted average
+of each component of each pixel:
+
+<pre>
+      out = (1 - alpha)*in0 + alpha*in1
+</pre>
+
+<p>
+Typically alpha is a number in the range 0.0 to 1.0.  This is
+commonly used to linearly interpolate two images.
+What is less often considered is that alpha may range beyond the
+interval 0.0 to 1.0.
+Values above one subtract a portion of in0 while scaling in1.  Values
+below 0.0 have the opposite effect.
+<p>
+Extrapolation is particularly useful if a degenerate version of the
+image is used as the image to get "away from."  Extrapolating away from
+a black-and-white image increases saturation.  Extrapolating away from a
+blurred image increases sharpness.  The interpolation/extrapolation
+formula offers one-parameter control, making display of a series of
+images, each differing in brightness, contrast, sharpness, color, or
+saturation, particularly easy to compute, and inviting hardware acceleration.
+<p>
+In the following examples, a single alpha value is used per image.
+However other processing is possible, for example where alpha is a function
+of X and Y, or where a brush footprint controls alpha near the cursor.
+
+<h3>Changing Brightness</h3>
+
+<p>
+To control image brightness, we use pure black as the degenerate (zero
+alpha) image.  Interpolation darkens the image, and extrapolation
+brightens it.  In both cases, brighter pixels are affected more.
+
+<img src="blend1.gif" alt="brightness" width=469 height=154>
+
+<h3>Changing Contrast</h3>
+<p>
+Contrast can be controlled using a constant gray image with the average image
+luminance.  Interpolation reduces contrast and extrapolation boosts it.
+Negative alpha generates inverted images with varying contrast.  In
+all cases, the average image luminance is constant.
+
+<img src="blend3.gif" alt="contrast" width=469 height=154>
+<p>
+If middle gray or the average pixel color is used instead, contrast is
+again altered, but with middle gray or the average color left unaffected.
+Shades and colors far away from the chosen value are most affected.
+
+<h3>Changing Saturation</h3>
+<p>
+To alter saturation, pixel components must move towards or away from the
+pixel's luminance value. By using a black-and-white image as the
+degenerate version, saturation can be decreased using interpolation, and
+increased using extrapolation.  This avoids computationally more
+expensive conversions to and from HSV space.  Repeated update in
+an interactive application is especially fast, since the luminance
+of each pixel need not be recomputed.  Negative alpha preserves luminance
+but inverts the hue of the input image.
+
+<img src="blend4.gif" alt="saturation" width=469 height=154>
+
+<h3>Sharpening an Image</h3>
+<p>
+Any convolution, such as sharpening or blurring, can be adjusted by
+this approach.
+If a blurred image is used as the degenerate image,
+interpolation attenuates high frequencies to varying degrees, and
+extrapolation boosts them, sharpening the image by unsharp masking.
+Varying alpha acts as a kernel scale factor, so a series of
+convolutions differing only in scale can be done easily, independent of
+the size of the kernel.  Since blurring, unlike sharpening, is often a
+separable operation, sharpening by extrapolation may be far more
+efficient for large kernels.
+
+<img src="blend6.gif" alt="sharpening" width=469 height=154>
+<p>
+Note that global contrast control, local contrast control, and
+sharpening form a continuum.
+Global contrast pushes pixel components
+towards or away from the average image luminance.  Local contrast is
+similar, but uses local area luminance.  Unsharp masking is the extreme
+case, using only the color of nearby pixels.
+
+<h3>Combined Processing</h3>
+
+<p>
+An unusual property of this interpolation/extrapolation approach is that
+all of these image parameters may be altered simultaneously.  Here
+sharpness, tint, and saturation are all altered.
+
+<img src="blend7.gif" alt="combined" width=469 height=154>
+
+<h3>Conclusion</h3>
+<p>
+Image applications frequently need to produce multiple degrees of
+manipulation interactively.
+Image applications frequently need to interactively manipulate
+an image by continuously changing a single parameter.
+The best hardware mechanisms employ a
+single "inner loop" to achieve a wide variety of effects.  Interpolation
+and extrapolation of images can be a unifying approach, providing a single
+function that supports many common image processing operations.
+<p>
+Since a degenerate image is sometimes easier to calculate, extrapolation
+may offer a more efficient method to achieve effects such as sharpening
+or saturation.  Blending is a linear operation, and so it must be
+performed in linear, not gamma-warped space.  Component range must also be
+monitored, since clamping, especially of the degenerate image, causes
+inaccuracy.
+<p>
+These image manipulation techniques can be used in paint programs to
+easily implement brushes that saturate, sharpen, lighten, darken,
+or modify contrast and color.  The only major change needed is to support
+alpha values outside the range 0.0 to 1.0.
+<p>
+It is surprising and unfortunate how many graphics software packages
+needlessly limit interpolant values to the range 0.0 to 1.0.  Application
+developers should allow users to extrapolate parameters when practical.
+<h3>References</h3>
+<p>
+For a slightly extended version of this article, see:<br>
+P. Haeberli and D. Voorhies. <cite>Image Processing by Linear 
+Interpolation and Extrapolation</cite>. 
+IRIS Universe Magazine No. 28, Silicon Graphics, Aug, 1994.
+<!--no_print--><p>
+<!--no_print--><a href=../index.html#interp>
+<!--no_print--><img src=gobot.gif alt="" width=564 height=25 border=0></a>
+<!--no_print--><br>
+</body>
+</html>
diff --git a/eyuvtoppm.html b/eyuvtoppm.html
new file mode 100644
index 00000000..b55e9464
--- /dev/null
+++ b/eyuvtoppm.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Eyuvtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>eyuvtoppm</H1>
+Updated: 22 April 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+eyuvtoppm - convert a Berkeley YUV file to a portable pixmap (ppm) file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>eyuvtoppm</B>
+[<B>--width</B>
+<I>width</I>]
+[<B>--height</B>
+<I>height</I>]
+[<I>eyuvfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>eyuvtoppm</b> reads a Berkeley Encoder YUV (not the same as
+Abekas YUV) file as input and produces a PPM image on Standard Output.
+
+<P>With no filename argument takes input from Standard Input.
+Otherwise, <I>eyuvfile </I> is the file specification of the input
+file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtoeyuv.html">ppmtoeyuv</A></B>,
+<B><A HREF="yuvtoppm.html">yuvtoppm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
+
+
+
diff --git a/fiascotopnm.html b/fiascotopnm.html
new file mode 100644
index 00000000..ad850138
--- /dev/null
+++ b/fiascotopnm.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Fiascotopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>fiascotopnm</H1>
+Updated: 12 July 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+fiascotopnm - Convert compressed FIASCO image to PGM, or PPM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>fiascotopnm </B>
+[<I>option</I>]...
+[<I>filename</I>]...
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>fiascotopnm</B> decompresses the named FIASCO files, or the
+Standard Input if no file is named, and writes the images as PGM, or
+PPM files, depending on whether the FIASCO image is black and white or
+color.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>All option names may be abbreviated; for example, --output may be
+written --outp or --ou. For all options an one letter short option
+is provided. Mandatory or optional arguments to long options are
+mandatory or optional for short options, too. Both short and long
+options are case sensitive.
+
+<DL COMPACT>
+<DT><B>-o</B>[<I>name</I>], <B>--output=</B>[<I>name</I>]
+
+<DD> Write decompressed image to the file <I>name</I>.ppm (if PPM) or
+<I>name</I>.pgm (if PGM).  If <I>name</I> is <b>-</b>, then produce
+the image file on the standard output. The optional argument
+<I>name</I> can be omitted, then the input filename is used as
+basename with the suffix .ppm or .pgm. In case of video streams, the
+frames are stored in the files <I>name</I>.<B>N</B>.ppm where <B>N</B>
+is the frame number (of the form 00..0 - 99..9); output on the
+standard output is not possible with video streams.
+
+<P> If <I>name</I> is a relative path and the environment variable
+<B>FIASCO_IMAGES</B> is a (colon-separated) list of directories, then
+the output file(s) are written to the first (writable) directory of
+this list. Otherwise, the current directory is used to store the
+output file(s).
+
+<DT><B>-z</B>, <B>--fast</B>
+<DD>
+Decompress images in the 4:2:0 format; i.e., each chroma channel is
+decompressed to an image of halved width and height. Use this option
+on slow machines when the desired frame rate is not achieved; the
+output quality is only slightly decreased. 
+
+<DT><B>-d</B>, <B>--double</B><DD>
+Double the size of the X11 window both in width and height; no pixel
+interpolation is used, each pixel is just replaced by four identical
+pixels.
+
+<DT><B>-p</B>, <B>--panel</B>
+<DD>
+Show a panel with play, stop, pause, record and exit buttons to
+control the display of videos. When pressing the record button, all
+frames are decompressed and stored in memory. The other buttons work
+in the usual way.
+
+<DT><B>-m</B> <I>N</I>, <B>--magnify=</B><I>N</I>
+<DD>
+Set magnification of the decompressed image. Positive values enlarge
+and negative values reduce the image width and height by a factor of
+2^|<I>N</I>|.
+
+<DT><B>-s</B> <I>N</I>, <B>--smooth=</B><I>N</I>
+<DD>
+Smooth decompressed image(s) along the partitioning borders by the
+given amount <I>N</I>. <I>N</I> is 1 (minimum) to 100 (maximum); default
+is 70. When <I>N</I>=0, then the smoothing amount specified in the
+FIASCO file is used (defined by the FIASCO coder).
+
+<DT><B>-F</B> <I>N</I>, <B>--fps=</B><I>N</I>
+<DD>
+Set number of frames per second to <I>N</I>. When using this option,
+the frame rate specified in the FIASCO file is overridden.
+
+<DT><B>-v</B>, <B>--version</B>
+<DD>
+Print <B>fiascotopnm</B> version number, then exit.
+
+<DT><B>-f</B> <I>name</I>, <B>--config=</B><I>name</I>
+
+<DD>Load parameter file <I>name</I> to initialize the options of
+<B>fiascotopnm</B>.  See file <B>system.fiascorc</B> for an example of
+the syntax. Options of <B>fiascotopnm </B> are set by any of the
+following methods (in the specified order):
+
+<OL>
+<LI>Global ressource file <B>/etc/system.fiascorc</B>
+
+<LI>$HOME<B>/.fiascorc</B>
+
+<LI>command line
+
+<LI>--config=<I>name</I>
+</OL>
+
+<DT><B>-h</B>, <B>--info</B>
+<DD>
+Print brief help, then exit.
+
+<DT><B>-H</B>, <B>--help</B>
+<DD>
+Print detailed help, then exit.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<PRE>
+fiascotopnm foo.wfa &gt;foo.ppm
+</PRE>
+
+<P>Decompress the FIASCO file &quot;foo.wfa&quot; and store it as
+&quot;foo.ppm&quot;.
+
+<PRE>
+fiascotopnm -o foo1.wfa foo2.wfa
+</PRE>
+
+<P>Decompress the FIASCO files &quot;foo1.wfa&quot; and
+&quot;foo2.wfa&quot; and write the frames to the image files
+&quot;foo1.wfa.ppm&quot; and &quot;foo2.wfa.ppm&quot;.
+
+<PRE>
+fiascotopnm -oimage foo1.wfa
+</PRE>
+
+<P>Decompress the FIASCO file &quot;foo1.wfa&quot; and write all 15
+frames to the image files &quot;image.00.ppm&quot;, ... ,
+&quot;image.14.ppm&quot;.
+
+<PRE>
+fiascotopnm --fast --magnify=-1 --double video.wfa &gt;stream.ppm
+</PRE>
+
+<P>Decompress the FIASCO file &quot;video.wfa&quot;.  The
+decompression speed is as fast as possible: the image is decompressed
+(in 4:2:0 format) at a quarter of its original size; then the image is
+enlarged again by pixel doubling.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>FILES</H2>
+
+<DL COMPACT>
+<DT><B>/etc/system.fiascorc</B>
+
+<DD>The systemwide initialization file.
+
+<DT>$HOME<B>/.fiascorc</B>
+
+<DD>The personal initialization file.
+
+</DL>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>ENVIRONMENT</H2>
+
+<DL COMPACT>
+<DT><B>FIASCO_IMAGES</B>
+
+<DD>Save path for image files. Default is &quot;./&quot;.
+
+<DT><B>FIASCO_DATA</B>
+
+<DD>Search path for FIASCO files. Default is &quot;./&quot;.
+
+</DL>
+
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmtofiasco.html">pnmtofiasco</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<P>
+Ullrich Hafner, Juergen Albert, Stefan Frank, and Michael Unger.
+<B>Weighted Finite Automata for Video Compression</B>, IEEE Journal on
+Selected Areas In Communications, January 1998
+<BR>
+
+Ullrich Hafner. <B>Low Bit-Rate Image and Video Coding with Weighted
+Finite Automata</B>, Ph.D. thesis, Mensch &amp; Buch Verlag, ISBN
+3-89820-002-7, October 1999.
+
+<A NAME="lbAJ">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Ullrich Hafner &lt;<A HREF="mailto:hafner@bigfoot.de">hafner@bigfoot.de</A>&gt;
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">FILES</A>
+<LI><A HREF="#lbAH">ENVIRONMENT</A>
+<LI><A HREF="#lbAI">SEE ALSO</A>
+<LI><A HREF="#lbAJ">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
diff --git a/fitstopnm.html b/fitstopnm.html
new file mode 100644
index 00000000..c7d60f85
--- /dev/null
+++ b/fitstopnm.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Fitstopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>fitstopnm</H1>
+Updated: 20 September 89
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+fitstopnm - convert a FITS file into a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>fitstopnm</B>
+[<B>-image</B> <I>N</I>]
+[<B>-scanmax</B>]
+[<B>-printmax</B>]
+[<B>-min</B> <I>f</I>]
+[<B>-max</B> <I>f</I>]
+[<I>FITSfile</I>]
+
+<P>All options may be abbreviated to their shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>fitstopnm</b> reads a FITS file as input and produces a PPM
+image if the FITS file consists of 3 image planes (NAXIS = 3 and
+NAXIS3 = 3), or a PGM image if the FITS file consists of 2 image
+planes (NAXIS = 2), or if you specify the <B>-image</B> option.  The
+results may need to be flipped top for bottom; if so, just pipe the
+output through <B>pamflip -tb</B>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The <B>-image</B> option is for FITS files with three axes.  The
+assumption is that the third axis is for multiple images, and this
+option lets you select which one you want.
+
+<P>You can use options <B>-min</B> and <B>-max</B> to override the min
+and max values as read from the FITS header or the image data if no
+DATAMIN and DATAMAX keywords are found.
+
+<p>You can use the <B>-scanmax</B> option to force the program to scan
+the data even when DATAMIN and DATAMAX are found in the header. If you
+specify <B>-printmax</B>, the program will just print the min and max
+values and quit.
+
+<P>The program tells you what kind of PNM image it is writing.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+<p>FITS stands for Flexible Image Transport System.  A full description
+can be found in Astronomy &amp; Astrophysics Supplement Series 44 (1981),
+page 363.
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtofits.html">pnmtofits</A>,
+<A HREF="pamflip.html">pamflip</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer, with modifications by Daniel
+Briggs (<A HREF="mailto:dbriggs@nrao.edu">dbriggs@nrao.edu</A>) and
+Alberto Accomazzi (<A
+HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>).
+
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">REFERENCES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/fstopgm.html b/fstopgm.html
new file mode 100644
index 00000000..a6e68cc6
--- /dev/null
+++ b/fstopgm.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Fstopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>fstopgm</H1>
+Updated: 06 April 89
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+fstopgm - convert a Usenix FaceSaver(tm) file into a PGM image
+
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>fstopgm</B>
+[<I>fsfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>fstopgm</b> reads a Usenix FaceSaver(tm) file as input and
+produces a PGM image as output.
+
+<P>FaceSaver(tm) files sometimes have rectangular pixels.  While
+<B>fstopgm</B> won't re-scale them into square pixels for you, it will
+give you the precise <B>pamscale</B> command that will do the job.
+Because of this, reading a FaceSaver(tm) image is a two-step process.
+First you do:
+
+<PRE>
+  fstopgm &gt; /dev/null
+</PRE>
+
+This will tell you whether you need to use <B>pamscale.</B>
+
+Then use one of the following pipelines:
+<PRE>
+  fstopgm | pgmnorm
+  fstopgm | pamscale -whatever | pgmnorm
+</PRE>
+
+To go to PBM, you want something more like one of these:
+<PRE>
+  fstopgm | pamenlarge 3 | pgmnorm | pamditherbw
+  fstopgm | pamenlarge 3 | pamscale &lt;whatever&gt; | pgmnorm | pamditherbw
+</PRE>
+
+You want to enlarge when going to a bitmap because otherwise you lose
+information; but enlarging by more than 3 does not look good.
+
+<P>FaceSaver is a registered trademark of Metron Computerware Ltd. of
+Oakland, CA.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmtofs.html">pgmtofs</A>,
+<A HREF="pgm.html">pgm</A>,
+<A HREF="pgmnorm.html">pgmnorm</A>,
+<A HREF="pamenlarge.html">pamenlarge</A>,
+<A HREF="pamscale.html">pamscale</A>,
+<A HREF="pamditherbw.html">pamditherbw</A>
+<A NAME="lbAF">&nbsp;</A>
+
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/g3topbm.html b/g3topbm.html
new file mode 100644
index 00000000..e04ed5b8
--- /dev/null
+++ b/g3topbm.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>G3topbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>g3topbm</H1>
+Updated: 28 February 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+g3topbm - convert a Group 3 fax file into a PBM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>g3topbm</B>
+[<B>-kludge</B>]
+[<B>-reversebits</B>]
+[<B>-stretch</B>]
+[{<B>-width=</B><i>pixels</i> | paper_size={A3,A4,A5,A6,B4}]
+[<B>-stop_error</B>]
+[<I>g3file</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>g3topbm</b> reads a Group 3 fax file as input and produces a PBM
+image as output.
+
+<p><b>g3topbm</b> tolerates various deviations from the standard,
+so as to recover some of the image if there was a transmission error.
+One thing it tolerates is lines of varying length.  The standard requires
+all the lines to be the same length; <b>g3topbm</b> makes the output
+image as wide as the longest line in the input and pads the others on
+the right.  It warns you when it does this.
+
+<p>You can use the <b>stop_error</b> option to make <b>g3topbm</b>
+insist on valid input.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-kludge</B>
+
+<DD>Tells <b>g3topbm</b> to ignore the first few lines of the file;
+sometimes fax files have some junk at the beginning.
+
+<DT><B>-reversebits</B>
+
+<DD>Tells <b>g3topbm</b> to interpret bits least-significant first,
+instead of the default most-significant first.  Apparently some fax
+modems do it one way and others do it the other way.  If you get a
+whole bunch of &quot;bad code word&quot; messages, try using this
+option.
+
+<DT><B>-stretch</B>
+
+<DD>This option tells <b>g3topbm</b> to stretch the image vertically by
+duplicating each row.  This is for the low-quality transmission mode.
+
+<dt><b>-width=</b><i>pixels</i>
+
+<dd>This option tells <b>g3topbm</b> that the image is supposed to be
+<i>pixels</i> pixels wide.  If any line in it is not that size, <b>g3topbm</b>
+issues a warning or fails, depending on whether you specify
+<b>-stop_error</b>.
+
+<p>You cannot specify both <b>-width</b> and <b>-paper_size</b>.
+
+<p>This option was new in Netpbm 10.33 (March 2006).
+
+<dt><b>-paper_size=</b>{<B>A3</B>,<B>A4</B>,<B>A5</B>,<b>A6</b>,<b>B4</b>}
+
+<dd>This option tells <b>g3topbm</b> for what size paper this image is
+supposed to be formatted.  <b>g3topbm</b> uses the width of the paper
+the same way as with the <b>-width</b> option.  <b>g3topbm</b>
+does not use the height of the paper for anything.
+
+<p>You cannot specify both <b>-width</b> and <b>-paper_size</b>.
+
+<p>This option was new in Netpbm 10.33 (March 2006).
+
+<DT><B>-stop_error</B>
+
+<DD>This option tells <b>g3topbm</b> to fail when it finds a problem
+in the input.  &quot;Fail&quot; means it terminates with a nonzero
+status code with the contents of the output file undefined.
+
+<p>If you don't specify this option, <b>g3topbm</b> does its best to
+work around input errors and salvage as much of the image as possible
+in the output image.  It first tries to resynchronize to a later line
+by searching for the next End Of Line marker, skipping any lines or
+partial lines in between.  It saves the beginning of the line in which
+it encountered the problem.  If the input file ends prematurely,
+<b>g3topbm</b> produces output containing the lines up to where it
+encountered the problem.
+
+<p><b>g3topbm</b> issues warning messages when it continues in spite of
+input errors.
+
+<p>This option was new in Netpbm 10.24 (August 2004).  Before that,
+<b>g3topbm</b> always failed when it encountered premature EOF and
+never failed when it encountered other problems.
+
+</DL>
+
+<H2 id="g3">ABOUT G3</H2>
+
+<P>G3 is the near universal format used by fax machines.  There is also
+a newer, more capable G4.
+
+<p>The standard for Group 3 fax is defined in CCITT Recommendation T.4.
+In the U.S., that is implemented by EIA standards EIA-465 and EIA-466.
+These standards cover the layers below the image format (which are
+irrelevant to <b>g3topbm</b> as well.
+
+<p>G3 faxes are 204 dots per inch (dpi) horizontally and 98 dpi (196
+dpi optionally, in fine-detail mode) vertically.  Since G3 neither
+assumes error free transmission nor retransmits when errors occur, the
+encoding scheme used is differential only over small segments never
+exceeding 2 lines at standard resolution or 4 lines for fine-detail.
+(The incremental G3 encoding scheme is called two-dimensional and the
+number of lines so encoded is specified by a parameter called k.)
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pbmtog3.html">pbmtog3</A>,
+<A HREF="pbm.html">pbm</A>
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#g3">ABOUT G3</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/gemtopbm.html b/gemtopbm.html
new file mode 100644
index 00000000..402e4895
--- /dev/null
+++ b/gemtopbm.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Gemtopbm User Manual</TITLE>
+</HEAD><BODY>
+<H1>gemtopbm</H1>
+Updated: May 2000
+<BR>
+<H2>NAME</H2>
+<B>gemtopbm</B> - replaced by gemtopnm
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>gemtopbm</b> was replaced in Netpbm 9.1 (May 2000) by 
+<b><a href="gemtopnm.html">gemtopnm</a></b>.
+
+<P><B>gemtopnm</b> is backward compatible with <b>gemtopbm</b>, but
+works on color images as well.
+
+</BODY>
+</HTML>
diff --git a/gemtopnm.html b/gemtopnm.html
new file mode 100644
index 00000000..39c9d387
--- /dev/null
+++ b/gemtopnm.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Gemtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>gemtopnm</H1>
+Updated: 30 April 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+gemtopnm - convert a GEM .img file into a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>gemtopnm</B>
+[<B>-d</B>]
+[<I>gemfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>gemtopnm</b> reads a GEM .img file, either the one plane
+(black/white) or four plane (16 color) varieety, as input and produces
+a PBM or PPM file as output, depending on whether the input is one or
+four plane.
+
+<p>The input file is <i>gemfile</i> if you specify that argument, or
+Standard Input otherwise.  Output is to Standard Output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-d</B>
+
+<DD>Produce output describing the contents of the .img file.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtogem.html">pbmtogem</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1988 Diomidis D. Spinellis (<A
+HREF="mailto:dds@cc.ic.ac.uk">dds@cc.ic.ac.uk</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/giftopnm.html b/giftopnm.html
new file mode 100644
index 00000000..3a3d2f2e
--- /dev/null
+++ b/giftopnm.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Giftopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>giftopnm</H1>
+Updated: 6 August 2006
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+giftopnm - convert a GIF file into a PNM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>giftopnm</B>
+[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}]
+[<B>-verbose</B>]
+[<B>-comments</B>]
+[<B>-image=</B>{<I>N</I>,<B>all</b>}]
+[<B>-quitearly</B>]
+[<I>GIFfile</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>This is a graphics format converter from the GIF format to the PNM 
+(i.e. PBM, PGM, or PPM) format.
+
+<P>If the image contains only black and maximally bright white, the
+output is PBM.  If the image contains more than those two colors, but
+only grays, the output is PGM.  If the image contains other colors,
+the output is PPM.
+
+<P> A GIF image contains rectangular pixels.  They all have the same
+aspect ratio, but may not be square (it's actually quite unusual for
+them not to be square, but it could happen).  The pixels of a Netpbm
+image are always square.  Because of the engineering complexity to do
+otherwise, <B>giftopnm</B> converts a GIF image to a Netpbm image
+pixel-for-pixel.  This means if the GIF pixels are not square, the
+Netpbm output image has the wrong aspect ratio.  In this case,
+<B>giftopnm</B> issues an informational message telling you to run
+<B>pamscale</B> to correct the output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>--alphaout=</B><I>alpha-filename</I>
+
+<DD><B>giftopnm </B> creates a PGM (portable graymap) file containing
+the alpha channel values in the input image.  If the input image
+doesn't contain an alpha channel, the <I>alpha-filename</I> file
+contains all zero (transparent) alpha values.  If you don't specify
+<B>--alphaout</B>, <B>giftopnm</B> does not generate an alpha file,
+and if the input image has an alpha channel, <B>giftopnm</B> simply
+discards it.
+
+<P>If you specify <B>-</B> as the filename, <B>giftopnm</B> writes the
+alpha output to Standard Output and discards the image.
+
+<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use
+the alpha output file.  
+
+<DT><B>-verbose</B>
+
+<DD>Produce verbose output about the GIF file input.
+
+<DT><B>-comments</B>
+
+<DD>
+Only output GIF89 comment fields.
+
+<DT><B>-image=</B>{<I>N</I>,<B>all</b>}
+
+<DD>
+This option identifies which image from the GIF stream you want.  
+You can select either one image or all the images.  Select al the 
+images with <b>all</b>.  Select one image by specifying its sequence
+number in the stream: <b>1</b>, <b>2</b>, <b>3</b>, etc.
+
+<p>The default is just Image 1.
+
+<p>A GIF stream normally contains only one image, so you don't need
+this option.  But some streams, including animated GIFs, have multiple
+images.
+
+<p>When you select multiple GIF images, the output is a PNM stream with
+multiple images.
+
+<p>If you specify a single image, <b>giftopnm</b> must read and
+partially validate the images before that in the stream.  It may or may
+not do the same for the images after it; see <b>-quitearly</b>.
+
+<p>The <b>all</b> value was added in Netpbm 10.16 (June 2003).  Earlier
+<b>giftopnm</b> can extract only one image.
+
+<dt><b>-quitearly</b>
+
+<dd>This options makes <b>giftopnm</b> stop reading its input file as soon
+as it has converted and output the images from the input that you requested.
+By default, <b>giftopnm</b> reads until the end of the GIF stream, ignoring
+any data after the images you requested.
+
+<p>Two reasons <em>not</em> to use this option:
+<ul>
+<li>The input file is a pipe and the process that is filling that pipe
+expects the pipe to take the entire stream and will fail or get stuck
+if it doesn't.
+
+<li>You want to validate the entire GIF stream.
+
+</ul>
+
+<p>Two reasons to use this option:
+
+<ul>
+<li>It saves the time and other resources to read the end of the stream.
+<li>There are errors in the end of the stream that make <b>giftopnm</b> fail.
+</ul>
+
+<p>This option has no effect if you also specify <b>-image=all</b>
+
+<P>This option was new in Netpbm 10.35 (August 2006).  Before that, 
+<b>giftopnm</b> always reads the entire stream.
+     
+</DL>
+
+<H2 id="restrictions">RESTRICTIONS</H2>
+
+<p>This does not correctly handle the Plain Text Extension of the
+GIF89 standard, since I did not have any example input files
+containing them.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamtogif.html">pamtogif</A></B>,
+<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+&lt;<A
+HREF="http://www.lcdf.org/gifsicle">http://www.lcdf.org/gifsicle</A>&gt;,
+<B><A HREF="ppm.html">ppm</A></B>.
+
+<H2 id="author">AUTHOR</H2>
+
+<p>Copyright (c) 1993 by David Koblas (<A
+HREF="mailto:koblas@netcom.com">koblas@netcom.com</A>)
+
+<H2 id="license">LICENSE</H2>
+
+<p>As a historical note, for a long time if you used <B>giftopnm</B>,
+you were using a patent on the LZW compression method which was owned
+by Unisys, and in all probability you did not have a license from
+Unisys to do so.  Unisys typically asked $5000 for a license for
+trivial use of the patent.  Unisys never enforced the patent against
+trivial users, and made statements that it is much less concerned
+about people using the patent for decompression (which is what
+<B>giftopnm</B> does than for compression.  The patent expired in
+2003.
+
+<P>Rumor has it that IBM also owns a patent covering <B>giftopnm</B>.
+
+<P>A replacement for the GIF format that has never required any patent
+license to use is the PNG format.
+
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#restrictions">RESTRICTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+<LI><A HREF="#license">LICENSE</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/globe.jpg b/globe.jpg
new file mode 100644
index 00000000..51dfb634
--- /dev/null
+++ b/globe.jpg
Binary files differdiff --git a/gobot.gif b/gobot.gif
new file mode 100644
index 00000000..d7f767d1
--- /dev/null
+++ b/gobot.gif
Binary files differdiff --git a/gouldtoppm.html b/gouldtoppm.html
new file mode 100644
index 00000000..c2949427
--- /dev/null
+++ b/gouldtoppm.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Gouldtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>gouldtoppm</H1>
+Updated: 20 May 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+gouldtoppm - convert Gould scanner file into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>gouldtoppm</B>
+[<I>gouldfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>gouldtoppm</b> reads a file produced by the Gould scanner as
+input and produces a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright(C) 1990 by Stephen Paul Lesniewski
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/hdifftopam.html b/hdifftopam.html
new file mode 100644
index 00000000..ae1d9dcf
--- /dev/null
+++ b/hdifftopam.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Hdifftopam User Manual</TITLE></HEAD>
+<BODY>
+<H1>hdifftopam</H1>
+Updated: 15 April 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+hdifftopam - convert horizontal difference image to original PAM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>hdifftopam</B>[<I>pamfile</I>]
+[<B>-pnm</B>]
+[<B>-verbose</B>]
+
+<P>
+Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>hdifftopam</B> undoes what <B>pamtohdiff</B> does.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+<DL COMPACT>
+<DT><B>-pnm</B>
+
+<DD>
+     This option tells <B>hdifftopam</B> to create a PNM image (i.e. PGM or
+     PPM).  Without it, <B>hdifftopam</B> creates a PAM image (with a
+     tuple type of "unhdiff").  If the PAM does not have the proper depth
+     to be a PGM or PPM (i.e. 1 or 3) and you specify <B>-pnm</B>,
+     <B>hdifftopam</B> fails.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamtohdiff.html">pamtohdiff</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Bryan Henderson
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/hipstopgm.html b/hipstopgm.html
new file mode 100644
index 00000000..fae9c743
--- /dev/null
+++ b/hipstopgm.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Hipstopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>hipstopgm</H1>
+Updated: 24 August 89
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+hipstopgm - convert a HIPS file into a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>hipstopgm</B>
+[<I>hipsfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>hipstopgm</b> reads a HIPS file as input and produces a PGM
+image as output.
+
+<P>If the HIPS file contains more than one frame in sequence,
+<b>hipstopgm</b> will concatenate all the frames vertically.
+
+<P>HIPS is a format developed at the Human Information Processing
+Laboratory, NYU.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/hpcdtoppm.html b/hpcdtoppm.html
new file mode 100644
index 00000000..885ed253
--- /dev/null
+++ b/hpcdtoppm.html
@@ -0,0 +1,448 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Hpcdtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>hpcdtoppm</H1>
+Updated: 7 August 2003
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+hpcdtoppm - convert a Photo-CD image into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>hpcdtoppm</B>
+<I>infile</I>
+[<B>-a</B>]
+[{<B>-C</B>|<B>-0</B>|<B>-Overview</B>|<B>-O</B>} <I>file opt</I>]
+[<B>-c0</B>]
+[<B>-c-</B>]
+[<B>-c+</B>]
+[<B>-crop</B>]
+[<B>-d</B>]
+[<B>-dpi</B> <I>f</I>]
+[<B>-eps</B>]
+[<B>-epsd</B>]
+[<B>-epsg</B>]
+[<B>-fak</B> <I>scale</I>]
+[<B>-hori</B>]
+[<B>-i</B>]
+[<B>-l</B>]
+[<B>-m</B>]
+[<B>-n</B>]
+[<B>-pb</B> <I>pos</I>]
+[<B>-pgm</B>]
+[<B>-ph</B> <I>height</I>]
+[<B>-pl</B> <I>pos</I>]
+[<B>-pos</B>]
+[<B>-ppm</B>]
+[<B>-ps</B>]
+[<B>-psd</B>]
+[<B>-psg</B>]
+[<B>-pw</B> <I>width</I>]
+[<B>-r</B>]
+[<B>-rep</B>]
+[<B>-S</B> <I>long short</I>]
+[<B>-s</B>]
+[<B>-vert</B>]
+[<B>-x</B>]
+[<B>-ycc</B>]
+[<B>-1</B>|<B>-Base/16</B>|<B>-128x192</B>]
+[<B>-2</B>|<B>-Base/4</B>|<B>-256x384</B>]
+[<B>-3</B>|<B>-Base</B>|<B>-512x768</B>]
+[<B>-4</B>|<B>-4Base</B>|<B>-1024x1536</B>]
+[<B>-5</B>|<B>-16Base</B>|<B>-2048x3072</B>]
+[<B>-6</B>|<B>-64Base</B>|<B>-4096x6144</B>]
+[<I>outfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>This program accepts Photo-CD image or overview file data from the
+specified input file, <I>infile</I> (or, if the resolution is lower
+than 64Base and the file argument is specified as <B>-</B>, from
+standard input), and writes either PBM Format or PostScript to the
+specified output file (or to standard output if no file is specified).
+
+<P>On a standard Photo-CD, image files appear in the directory
+<b>photo_cd/images</b>, in files with names of the form
+img<I>nnnn</i>.pcd, where <I>nnnn</I> is a 4-digit-number.  The
+overview file appears in <B>photo_cd/overview.pcd</B>.
+
+<P>Photo-CD images are stored using as many as 6 different resolutions:
+
+
+<PRE>
+          Format              Resolution
+          ------              ----------
+          64Base              4096x6144 (ProPhotoCD only)
+          16Base              2048x3072
+          4Base               1024x1536
+          Base                512x768
+          Base/4              256x384
+          Base/16             128x192
+</PRE>
+
+<P>The overview file employs Base/16 format.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+Invoking <b>hpcdtoppm</b> without arguments produces a list of default
+values.  Note that you can supply only one size option.
+
+<DL COMPACT>
+<DT><B>-a</B>
+
+<DD>Automatically determine image orientation (this option is
+experimental, and does not work for overview files).
+
+<DT>{<B>-C</B> | <B>-0</B> | <B>-Overview</B> | <B>-O</B> } <I>file opt</I>
+
+<DD>Extract all images from an overview file.  The mandatory
+<I>file</I> argument is the name of a PPM file; output files are named
+<i>filennnn</I>, where <I>nnnn</I> is a 4-digit number.  Overview
+images are extracted in their original Base/16 format.  The value of
+<I>opt</I> determines the orientation of the contact sheet image;
+recognized values are:
+
+<DL COMPACT>
+<DT><B>n</B>
+
+<DD>Do not rotate the image.
+
+<DT><B>l</B>
+
+<DD>Rotate the picture counter-clockwise (portrait mode).
+
+<DT><B>r</B>
+
+<DD>Rotate the picture clockwise (portrait mode).
+
+</DL>
+
+<DT><B>-c0</B>
+
+<DD>Do not correct (brighten or darken) the image.
+
+<DT><B>-c-</B>
+
+<DD>Darken the image.
+
+<DT><B>-c+</B>
+
+<DD>Brighten the image.
+
+<DT><B>-crop</B>
+
+<DD>Cut off the black frame which sometimes appears at the image
+borders.
+
+<DT><B>-d</B>
+
+<DD>Show only the decompressed difference rather than the complete image
+(applicable only to 4Base and 16Base images).
+
+<DT><B>-dpi</b> <i>res</i>
+
+<DD>Set the printer resolution to <I>res</I> for dithered Postscript
+images.
+
+<DT><B>-eps</B>
+
+<DD>Write a RGB Encapsulated Postscript color image.
+
+<DT><B>-epsd</B>
+
+<DD>Write a Floyd-Steinberg dithered image in Encapsulated Postscript.
+
+<DT><B>-epsg</B>
+
+<DD>Write a grayscale image in Encapsulated Postscript.
+
+<DT><B>-fak</b> <i>scale</i>
+
+<DD>Set the scaling factor for dithered PostScript images to
+<I>scale</I>.
+
+<DT><B>-hori</B>
+
+<DD>Flip the image horizontally.
+
+<DT><B>-i</B>
+
+<DD>Send information from an image file header to Standard Error.
+
+<DT><B>-l</B>
+
+<DD>Rotate the picture counter-clockwise (portrait mode).
+
+<DT><B>-m</B>
+
+<DD>Write messages about the phases of decoding to standard error.
+
+<DT><B>-n</B>
+
+<DD>Do not rotate the image.
+
+<DT><B>-pb</b> <i>pos</i>
+
+<DD>Set the bottom position of the Postscript image to <I>pos</I>.
+
+<DT><B>-pgm</B>
+
+<DD>Write a <I>pgm</I> (grayscale) image.
+
+<DT><B>-ph height</B>
+
+<DD>Set the height of the Postscript image to <I>height</I>.
+
+<DT><B>-pl</b> <i>pos</i>
+
+<DD>Set the leftmost position of the Postscript image to <I>pos</I>.
+
+<DT><B>-pos</B>
+
+<DD>Print the relative starting position of the data for the current
+resolution.  
+
+<DT><B>-ppm</B>
+
+<DD>Write a <I>ppm</I> RGB (color) image.
+
+<DT><B>-ps</B>
+
+<DD>Write a RGB Postscript color image.
+
+<DT><B>-psd</B>
+
+<DD>Write a Floyd-Steinberg dithered image in Postscript.
+
+<DT><B>-psg</B>
+
+<DD>Write a Postscript grayscale image.
+
+<DT><B>-pw width</B>
+
+<DD>Set the width of the Postscript image to <I>width</I>.
+
+<DT><B>-r</B>
+
+<DD>Rotate the picture clockwise (portrait mode).
+
+<DT><B>-rep</B>
+
+<DD>Try to jump over reading errors in the Huffman code. 
+
+<DT><B>-S</b> <i>long</i> <i>short</i>
+
+<DD>Cut out a subrectangle with boundaries defined by the values:
+
+<DL COMPACT>
+<DT><I>long</I>
+
+<DD>For the longer side of the image.
+
+<DT><I>short</I>
+
+<DD>For the shorter side of the image.
+
+</DL>
+
+where <I>long</I> and <I>short</I> take one of two forms:
+
+<DL COMPACT>
+<DT><B>a-b</B>
+
+<DD>Cut from position <I>a</I> to position <I>b</I>.
+
+<DT><B>a+b</B>
+
+<DD>Starting at offset <I>a</I>, cut a length of <I>b</I>.
+
+</DL>
+
+and where <I>a</I> and <I>b</I> are either integers representing pixel
+locations, or floating point values over the range [0.0 ... 1.0],
+representing the fraction of the length of a side.
+
+<DT><B>-s</B>
+
+<DD>Apply a simple sharpness operator to the luminosity channel.
+
+<DT><B>-vert</B>
+
+<DD>Flip the image vertically.
+
+<DT><B>-x</B>
+
+<DD> Overskip Mode (applicable to Base/16, Base/4, Base and 4Base).
+In Photo-CD images the luminosity channel is stored in full
+resolution, the two chromaticity channels are stored in half
+resolution only and have to be interpolated.  In Overskip Mode, the
+chromaticity channels of the next higher resolution are taken instead
+of interpolating.  To see the difference, generate one PPM with and
+one PPM without this option.  Use <B><A
+HREF="pamarith.html">pamarith</A></B> to generate the difference image
+of these two images.  Call <B><A HREF="ppmhist.html">ppmhist</A></B>
+for this difference or show it with <b>xv</b> (push the <B>HistEq</B> button
+in the color editor).
+
+<DT><B>-ycc</B>
+
+<DD>Write the image in a variation on PPM format in which the samples
+are YCC instead of RGB.
+
+<DT><B>-1</B>|<B>-Base/16</B>|<B>-128x192</B>
+
+<DD>Extract the Base/16 image.
+
+<DT><B>-2</b>|<b>-Base/4</b>|<b>-256x384</B>
+
+<DD>Extract the Base/4 image.
+
+<DT><B>-3</b>|<b>-Base</b>|<b>-512x768</B>
+
+<DD>Extract the Base image.
+
+<DT><B>-4</b>|<b>-4Base</b>|<b>-1024x1536</B>
+
+<DD>Extract the 4Base image.
+
+<DT><B>-5</b>|<b>-16Base</b>|<b>-2048x3072</B>
+
+<DD>Extract the 16Base image.
+
+<DT><B>-6</b>|<b>-64Base</b>|<b>-4096x6144</B>
+
+<DD>Extract the 64Base image.  This resolution can be extracted from
+ProPhotoCD images only.  The path of the 64Base extension files is
+derived from the path to the image file. This means that it doesn't
+work on stdin an the directory structure must be the very same as on
+the ProPhotoCD.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>Postcript Output</H2>
+
+<p>For Postscript output (options <B>-ps</B>, <B>-eps</B>,
+<B>-psg</B>, <B>-epsg</B>, <B>-psd</B>, <B>-epsg</B>) you can define
+both the resolution and placement of the image.  Both size and
+position are specified in points (1/72 inch).
+
+<P>The position of the image (where the origin is assumed to be at the
+lower left corner of the page) is controlled by the <B>-pl</B> and
+<B>-pb</B> options (applicable at all resolutions).  
+
+<P>The size of color and grayscale images is changed with the
+<B>-pw</B> and <B>-ph</B> options.  Every image pixel is mapped onto
+one Postscript pixel.
+
+<P>There are three modes of control for dithered Postscript: 
+
+<DL COMPACT>
+<DT>Image size
+
+<DD> (<B>-pw</B> and <B>-ph</B>)
+
+<DT>Printer resolution
+
+<DD>(<B>-dpi</B>)
+
+<DT>Scaling factor
+
+<DD>(<B>-fak</B>)
+
+</DL>
+
+<P>These three factors are interdependent, hence no more then two can
+be specified simultaneously.  Using <B>-dpi</B> and the
+<B>-pw</B>/<B>-ph</B> options together often yields pleasing results.
+Even using the default values for these options will produce results
+differing from those obtained without use of the options.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>Limitations</H2>
+<p>The program ignores read protection.
+
+<P>The <B>-i</B> option is not working correctly.
+
+<P>Available information obout the Photo-CD format is vague; this
+program was developed by trial-and-error after staring at hex-dumps.
+Please send bugs reports and patches to the author.
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pcdovtoppm.html">pcdovtoppm</A>,
+<A HREF="pamarith.html">pamarith</A>,
+<A HREF="ppm.html">ppm</A>,
+<A HREF="ppmhist.html">ppmhist</A>,
+<A HREF="pnmquant.html">pnmquant</A>,
+<A HREF="ppmtopgm.html">ppmtopgm</A>,
+<A HREF="ppmtorgb3.html">ppmtorgb3</A>,
+<b>xv</b>
+
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>VERSION</H2>
+
+<p>The name <b>hpcdtoppm</b> stands for &quot;Hadmut's pcdtoppm,&quot; to
+make it distinguishable in the event that someone else is building a
+similar application and naming it <b>pcdtoppm</b>.
+
+<p>This is version 0.6.
+
+
+<A NAME="lbAJ">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (c) 1992, 1993, 1994 by Hadmut Danisch (<A
+HREF="mailto:danisch@ira.uka.de">danisch@ira.uka.de</A>).
+
+<p>Hadmut Danish has given permission to Bryan Henderson (August 2003)
+to distribute this documentation as part of Netpbm on Sourceforge and
+therefore to license this copy of this documentation to the public
+with the following Sourceforge-compatible license.  Note that this
+license does not contain a restriction on one's right to sell the
+material, as does the <b>hpcdtoppm</b> program itself and other copies
+of this documentation.
+
+<p>This software is not public domain.  Permission to use and
+distribute this software and its documentation for noncommercial use
+and without fee is hereby granted, provided that the above copyright
+notice appear in all copies and that both that copyright notice and
+this permission notice appear in supporting documentation.
+
+<P>The <b>hpcdtoppm</b> software itself (as opposed to this supporting
+documentation) is licensed by Danisch under a similar license, but
+with an additional restriction that a recipient may not sell the
+software or use it in profit-making activity.  See the source code of
+the program for details on its license.
+
+<P> Manual page extensively modified by R. P. C. Rodgers (<A
+HREF="mailto:rodgers@nlm.nih.gov">rodgers@nlm.nih.gov</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">POSTSCRIPT OUTPUT</A>
+<LI><A HREF="#lbAG">LIMITATIONS</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">VERSION</A>
+<LI><A HREF="#lbAJ">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/icontopbm.html b/icontopbm.html
new file mode 100644
index 00000000..5947a51a
--- /dev/null
+++ b/icontopbm.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Icontopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>icontopbm</H1>
+Updated: 31 August 1988
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+icontopbm - convert a Sun icon into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>icontopbm</B>
+[<I>iconfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>icontopbm</b> reads a Sun icon as input and
+produces a PBM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtoicon.html">pbmtoicon</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/ilbmtoppm.html b/ilbmtoppm.html
new file mode 100644
index 00000000..5df75159
--- /dev/null
+++ b/ilbmtoppm.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ilbmtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ilbmtoppm</H1>
+Updated: 04 October 1993
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ilbmtoppm - convert an ILBM file into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ilbmtoppm</B>
+[<B>-verbose</B>]
+[<B>-ignore</B>&lt;chunkID&gt;<B>]</B>
+[<B>-isham</B>|<B>-isehb</B>]
+[<B>-adjustcolors</B>]
+[<I>ILBMfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ilbmtoppm</b> reads an IFF ILBM file as input and produces a PPM
+image as output.  <b>ilbmtoppm</b> can handle the following ILBM types:
+
+<UL>
+<LI>Normal ILBMs with 1-16 planes.
+<LI>Amiga Extra_Halfbrite (EHB)
+<LI>Amiga HAM with 3-16 planes.
+<LI>24 bit.
+<LI>Multiplatte (normal or HAM) pictures.
+<LI>Color map (BMHD + CMAP chunk only, nPlanes = 0).
+<LI>Unofficial direct color.
+1-16 planes for each color component.
+</UL>
+
+<P><B>ilbmtoppm</b> uses these ILBM chunks: BMHD, CMAP, CAMG (only HAM
+&amp; EHB flags used), PCHG, BODY unofficial DCOL chunk to identify
+direct color ILBM.  It ignores these chunks: GRAB, DEST, SPRT, CRNG,
+CCRT, CLUT, DPPV, DRNG, EPSF.  It ignores, but displays in verbose
+mode, these: NAME, AUTH, (c), ANNO, DPI.  It skips chunks whose type
+it doesn't recognize.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-verbose</B>
+
+<DD>Give some information about the ILBM file.
+
+<DT><B>-ignore</b> <i>chunkID</i>
+
+<DD>Skip a chunk.  <i>chunkID</i> is the 4-letter IFF chunk identifier
+of the chunk to be skipped.
+
+<DT><B>-isham</b> | <b>-isehb</B>
+
+<DD>Treat the input file as a HAM or Extra_Halfbrite picture, even if
+these flags are not set in the CAMG chunk (or if there is no CAMG
+chunk).
+
+<DT><B>-adjustcolors</B>
+
+<DD>If all colors in the CMAP have a value of less then 16, ilbmtoppm
+assumes a 4-bit colormap and gives a warning.  With this option the
+colormap is scaled to 8 bits.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>The multipalette PCHG BigLineChanges and Huffman decompression code
+is untested.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+Amiga ROM Kernel Reference Manual - Devices (3rd Ed.)
+Addison Wesley, ISBN 0-201-56775-X
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtoilbm.html">ppmtoilbm</A>,
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<p>Modified October 1993 by Ingo Wilken (<A
+HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">REFERENCES</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/imgtoppm.html b/imgtoppm.html
new file mode 100644
index 00000000..9fac15f4
--- /dev/null
+++ b/imgtoppm.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Imgtoppm User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>imgtoppm</H1>
+Updated: 05 September 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+imgtoppm - convert an Img-whatnot file into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>imgtoppm</B>
+[<I>imgfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>imgtoppm</b>reads an Img-whatnot file as input and produces a
+PPM image as output.  The Img-whatnot toolkit is available for FTP on
+venera.isi.edu, along with numerous images in this format.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Based on a simple conversion program posted to comp.graphics by Ed Falk.
+<P>
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Index</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..505f8b94
--- /dev/null
+++ b/index.html
@@ -0,0 +1,852 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>User manual for Netpbm</TITLE></HEAD>
+<BODY>
+<H1>Netpbm</H1>
+Updated: 24 August 2006
+<BR>
+<?makeman .SH NAME ?>
+<?makeman netpbm \- netpbm library overview ?>
+
+<H2 id="overview">Overview Of Netpbm</H2>
+
+<P><B>Netpbm</B> is a package of graphics programs and a programming
+library.  <P> There are over 220 separate programs in the package,
+most of which have &quot;pbm&quot;, &quot;pgm&quot;, &quot;ppm&quot;,
+&quot;pam&quot;, or &quot;pnm&quot; in their names.  For example,
+<B><a href="pamscale.html">pamscale</a></B> and <B><a
+href="giftopnm.html">giftopnm</a></B>.
+
+<P>For example, you might use <B>pamscale</B> to shrink an image by
+10%.  Or use <B>pamcomp</B> to overlay one image on top of another.
+Or use <B>pbmtext</B> to create an image of text.  Or reduce the number
+of colors in an image with <B>pnmquant</B>.
+
+<p><b>Netpbm</b> is an open source software package, distributed via
+the <a href="http://sourceforge.net/projects/netpbm">Sourceforge 
+<b>netpbm</b> project</a>.
+
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#overview">Overview Of Netpbm</A>
+<LI><A HREF="#formats">The Netpbm Formats</A>
+<UL>
+  <LI><A HREF="#impconv">Implied Format Conversion</A>
+  <LI><A HREF="#transparency">Netpbm and Transparency</A>
+  </UL>
+<LI><A HREF="#programs">The Netpbm Programs</A>
+<UL>
+  <LI><A HREF="#commonoptions">Common Options</A>
+  <LI><A HREF="#directory">Directory</A>
+  <LI><A HREF="#prognotes">How To Use The Programs</A>
+  </UL>
+<LI><A HREF="#libnetpbm">The Netpbm Library</A>
+<LI><A HREF="#config">netpbm-config</A>
+<li><a href="#memoryusage">Memory Usage</a>
+<li><a href="#cpuusage">CPU Usage</a>
+<LI><A HREF="#companion">Companion Software</A>
+<ul>
+  <LI><A HREF="#phpnetpbm">PHP-NetPBM</A>
+  </ul>
+<LI><A HREF="#othersoftware">Other Graphics Software</A>
+<ul>
+  <li><a href="#viewers">Image Viewers</a>
+  <li><a href="#visual">Visual Graphics Software</a>
+  <li><a href="#programmingtools">Programming Tools</a>
+  <li><a href="#toolsforformats">Tools For Specific Graphics Formats</a>
+  <li><a href="#document">Document/Graphics Software</a>
+  <li><a href="#otherothersoftware">Other</a>
+  </ul>
+<LI><A HREF="#otherfmt">Other Graphics Formats</A>
+<LI><A HREF="#history">History</A>
+<LI><A HREF="#author">Author</A>
+</UL>
+
+<H2 id="programs">The Netpbm Programs</H2>
+
+<P>The Netpbm programs are generally useful run by a person from a
+command shell, but are also designed to be used by programs.  A common
+characteristic of Netpbm programs is that they are simple, fundamental
+building blocks.  They are most powerful when stacked in pipelines.
+Netpbm programs do not use graphical user interfaces and do not seek
+input from a user.  The only programs that display graphics at all are
+the very primitive display programs <b>pamx</b> and <b>ppmsvgalib</b>,
+and they don't do anything but that.
+
+<P>Each of these programs has its own manual, as linked in the
+directory below.
+
+<P>The Netpbm programs can read and write files greater than 2 GiB wherever
+the underlying system can.  There may be exceptions where the programs use
+external libraries (The JPEG library, etc.) to access files and the external
+library does not have large file capability.  Before Netpbm 10.15 (April
+2003), no Netpbm program could read a file that large.
+
+<H3 id="commonoptions">Common Options</H3>
+
+<P>
+There are a few options that are present on all programs that are based
+on the Netpbm library, including virtually all Netpbm programs.  These
+are not mentioned in the individual manuals for the programs.
+
+<p>You can use two hyphens instead of one on these options if you like.
+
+<DL COMPACT>
+
+<DT><B>-quiet</B>
+
+<DD> Suppress all informational messages that would otherwise be
+issued to Standard Error.  (To be precise, this only works to the
+extent that the program in question implements the Netpbm convention
+of issuing all informational messages via the <B>pm_message()</B>
+service of the Netpbm library).
+
+<DT><B>-version</B>
+
+<DD>Instead of doing anything else, report the version of the
+<B>libnetpbm</B> library linked with the program (it may have been
+linked statically into the program, or dynamically linked at run
+time).  Normally, the Netpbm programs and the library are installed
+at the same time, so this tells you the version of the program and all
+the other Netpbm files it uses as well.
+
+<DT><B>-plain</b>
+
+<DD>If the program generates an image in Netpbm format, generate it in
+the "plain" (aka "ascii") version of the format, as opposed to the
+"raw" (aka "binary") version.
+
+<p>
+This option was introduced in Netpbm 10.10 (October 2002).
+     
+</DL>
+
+<H3 id="directory">Directory</H3>
+<P>Here is a complete list of all the Netpbm programs (with links to
+their manuals):
+
+<p>
+<a href="directory.html">Netpbm program directory</a>
+
+
+<H3 id="prognotes">How To Use The Programs</H3>
+
+<P>
+As a collection of primitive tools, the power of Netpbm is multiplied
+by the power of all the other unix tools you can use with them.  These
+notes remind you of some of the more useful ways to do this.  Often,
+when people want to add high level functions to the Netpbm tools, they
+have overlooked some existing tool that, in combination with Netpbm,
+already does it.
+<P>
+Often, you need to apply some conversion or edit to a whole bunch of files.
+<P>
+As a rule, Netpbm programs take one input file and produce one output file,
+usually on Standard Output.  This is for flexibility, since you so often 
+have to pipeline many tools together.
+<P>
+Here is an example of a shell command to convert all your of PNG files
+(named *.png) to JPEG files named *.jpg:
+<pre>
+for i in *.png; do pngtopnm $i | ppmtojpeg &gt;`basename $i .png`.jpg; done
+</pre>
+
+<P>
+Or you might just generate a stream of individual shell commands, one
+per file, with awk or perl.  Here's how to brighten 30 YUV images that
+make up one second of a movie, keeping the images in the same files:
+
+<pre>
+ls *.yuv
+   | perl -ne 'chomp;
+   print yuvtoppm $_ | ppmbrighten -v 100 | ppmtoyuv &gt;tmp$$.yuv;
+   mv tmp$$.yuv $_ 
+   '
+   | sh
+</pre>
+
+<P>The tools <B>find</B> (with the <B>-exec</B> option) and 
+<B>xargs</B> are also useful for simple manipulation of groups of files.
+
+<P>
+Some shells' &quot;process substitution&quot; facility can help where a
+non-Netpbm program expects you to identify a disk file for input and
+you want it to use the result of a Netpbm manipulation.  Say
+the hypothetical program <b>printcmyk</b>
+takes the filename of a Tiff CMYK file as input and what you have is a
+PNG file 
+<B>abc.png</B>.
+
+Try:
+<pre>
+printcmyk &lt;({ pngtopnm abc.png | pnmtotiffcmyk ; })
+</pre>
+
+<P>It works in the other direction too, if you have a program that
+makes you name its output file and you want the output to go through a
+Netpbm tool.
+
+
+<H2 id="formats">The Netpbm Formats</H2>
+
+<P>
+All of the programs work with a set of graphics formats called the 
+&quot;netpbm&quot; formats.  Specifically, these formats are
+<A HREF="pbm.html">pbm</A>,
+<A HREF="pgm.html">pgm</A>,
+<A HREF="ppm.html">ppm</A>,
+and
+<A HREF="pam.html">pam</A>.
+
+The first three of these are sometimes known generically as
+&quot;pnm&quot;.
+
+Many of the Netpbm programs convert from a Netpbm format to another
+format or vice versa.  This is so you can use the Netpbm programs to
+work on graphics of any format.  It is also common to use a
+combination of Netpbm programs to convert from one non-Netpbm format
+to another non-Netpbm format.  Netpbm has converters for about 100
+graphics formats, and as a package Netpbm lets you do more graphics
+format conversions than any other computer graphics facility.
+<P>
+The Netpbm formats are all raster formats, i.e. they describe an image
+as a matrix of rows and columns of pixels.  In the PBM format, the
+pixels are black and white.  In the PGM format, pixels are shades of
+gray.  In the PPM format, the pixels are in full color.  The PAM format
+is more sophisticated.  A replacement for all three of the other formats,
+it can represent matrices of general data including but not limited to
+black and white, grayscale, and color images.
+<P>
+Programs designed to work with PBM images have &quot;pbm&quot; in their names.
+Programs designed to work with PGM, PPM, and PAM images similarly have
+&quot;pgm&quot;, &quot;ppm&quot;, and &quot;pam&quot; in their names.
+<P>
+All Netpbm programs designed to read PGM images see PBM images as if
+they were PGM too.  All Netpbm programs designed to read PPM images
+see PGM and PBM images as if they were PPM.  See <a href="#impconv">
+Implied Format Conversion</a>.
+
+<P> Programs that have &quot;pnm&quot; in their names read PBM, PGM,
+and PPM but unlike &quot;ppm&quot; programs, they distinguish between
+them and their function depends on the format.  For example, <B><a
+href="pnmtopng.html">pnmtopng</a></B> creates a black and white PNG
+output image if its input is PBM or PGM, but a color PNG output image
+if its input is PPM.  And <B>pnmrotate</B> produces an output image of
+the same format as the input.  A hypothetical <B>ppmrotate</B> program
+would also read all three PNM input formats, but would see them all as
+PPM and would always generate PPM output.
+
+<P>Programs that have "pam" in their names read all the Netpbm
+formats: PBM, PGM, PPM, and PAM.  They sometimes treat them all as if
+they are PAM, using an implied conversion, but often they recognize
+the individual formats and behave accordingly, like a "pnm" program
+does.  See <a href="#impconv">Implied Format Conversion</a>.
+
+<P> If it seems wasteful to you to have three separate PNM formats, be
+aware that there is a historical reason for it.  In the beginning,
+there were only PBMs.  PGMs came later, and then PPMs.  Much later
+came PAM, which realizes the possibility of having just one aggregate
+format.
+
+<P>The formats are described in the specifications of
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+and
+<B><A HREF="pam.html">pam</A></B>.
+
+<H3 id="impconv">Implied Format Conversion</H3>
+
+<P>A program that uses the PGM library subroutines to read an image
+can read a PBM image as well as a PGM image.  The program sees the PBM
+image as if it were the equivalent PGM image, with a maxval of 255.
+<strong>note:</strong> This sometimes confuses people who are looking
+at the formats at a lower layer than they ought to be because a zero
+value in a PBM raster means white, while a zero value in a PGM raster
+means black.
+
+<P>A program that uses the PPM library subroutines to read an image
+can read a PGM image as well as a PPM image and a PBM image as well as
+a PGM image.  The program sees the PBM or PGM image as if it were the
+equivalent PPM image, with a maxval of 255 in the PBM case and the
+same maxval as the PGM in the PGM case.
+
+<P>A program that uses the PAM library subroutines to read an image
+can read a PBM, PGM, or PPM image as well as a PAM image.  The program
+sees a PBM image as if it were the equivalent PAM image with tuple
+type <b>BLACKANDWHITE</b>.  It sees a PGM image as if it were the
+equivalent PAM image with tuple type <b>GRAYSCALE</b>.  It sees a PPM
+image as if it were the equivalent PAM image with tuple type
+<b>RGB</b>.  But the program actually can see deeper if it wants to.
+It can tell exactly which format the input was and may respond
+accordingly.  For example, a PAM program typically produces output in
+the same format as its input.
+
+<H3 id="transparency">Netpbm and Transparency</H3>
+
+<P>In many graphics formats, there's a means of indicating that certain
+parts of the image are wholly or partially transparent, meaning that
+if it were displayed &quot;over&quot; another image, the other image
+would show through there.  Netpbm formats deliberately omit that
+capability, since their purpose is to be extremely simple.
+
+<P>In Netpbm, you handle transparency via a transparency mask in a
+separate (slightly redefined) PGM image.  In this pseudo-PGM, what
+would normally be a pixel's intensity is instead an opaqueness value.
+See <B><A HREF="pgm.html">pgm</A></B>.  <B><a
+href="pamcomp.html">pamcomp</a></B> is an example of a program that uses
+a PGM transparency mask.
+
+<P>Another means of representing transparency information has recently
+developed in Netpbm, using PAM images.  In spite of the argument given
+above that Netpbm formats should be too simple to have transparency
+information built in, it turns out to be extremely inconvenient to
+have to carry the transparency information around separately.  This is
+primarily because Unix shells don't provide easy ways to have networks
+of pipelines.  You get one input and one output from each program in a
+pipeline.  So you'd like to have both the color information and the
+transparency information for an image in the same pipe at the same
+time.
+
+<p>For that reason, some new (and recently renovated) Netpbm programs
+recognize and generate a PAM image with tuple type RGB_ALPHA or
+GRAYSCALE_ALPHA, which contains a plane for the transparency
+information.  See <a href="pam.html">the PAM specification</a>.
+
+
+
+
+<H2 id="libnetpbm">The Netpbm Library</H2>
+
+<P>The Netpbm programming library, <B><a
+href="libnetpbm.html">libnetpbm</a></B>, makes it easy to write programs
+that manipulate graphic images.  Its main function is to read and
+write files in the Netpbm formats, and because the Netpbm package
+contains converters for all the popular graphics formats, if your
+program reads and writes the Netpbm formats, you can use it with any
+formats.
+
+<P>
+But the library also contain some utility functions, such as character
+drawing and RGB/YCrCb conversion.
+<P>
+The library has the conventional C linkage.  Virtually all programs
+in the Netpbm package are based on the Netpbm library.
+
+
+<h2 id="config">netpbm-config</h2>
+
+<p>In a standard installation of Netpbm, there is a program named
+<b>netpbm-config</b> in the regular program search path.  We don't
+consider this a Netpbm program -- it's just an ancillary part of a
+Netpbm installation.  This program tells you information about the
+Netpbm installation, and is intended to be run by other programs that
+interface with Netpbm.  In fact, <b>netpbm-config</b> is really a
+configuration file, like those you typically see in the <i>/etc/</i>
+directory of a Unix system.
+
+<p>Example:
+<pre>
+    $netpbm-config --datadir
+    /usr/local/netpbm/data
+</pre>
+
+If you write a program that needs to access a Netpbm data file, it can
+use such a shell command to find out where the Netpbm data files are.
+
+<p><b>netpbm-config</b> is the only file that must be installed in
+a standard directory (it must be in a directory that is in the default
+program search path).  You can use <b>netpbm-config</b> as a bootstrap
+to find all the other Netpbm files.
+
+<p>There is no detailed documentation of <b>netpbm-config</b>.  If you're
+in a position to use it, you should have no trouble reading the file
+itself to figure out how to use it.
+
+<h2 id="memoryusage">Memory Usage</h2>
+
+<p>An important characteristic that varies among graphics software is
+how much memory it uses, and how.  Does it read an entire image into
+memory, work on it there, then write it out all at once?  Does it read one
+and write one pixel at a time?  In Netpbm, it differs from one program
+to the next, but there are some generalizations we can make.
+
+<p>Most Netpbm programs keep one row of pixels at a time in memory.
+Such a program reads a row from an input file, processes it, then
+writes a row to an output file.  Some programs execute algorithms that
+can't work like that, so they keep a small window of rows in memory.
+Others must keep the entire image in memory.  If you think of what job
+the program does, you can probably guess which one it does.
+
+<p>When Netpbm keeps a pixel in memory, it normally uses a lot more
+space for it than it occupies in the Netpbm image file format.
+
+<p>The older programs (most of Netpbm) use 12 bytes per pixel.  This
+is true even for a PBM image, for which it only really takes one bit
+to totally describe the pixel.  Netpbm does this expansion to make
+implementing the programs easier -- it uses the same format regardless
+of the type of image.
+
+<p>Newer programs use the &quot;pam&quot; family of library functions
+internally, which use memory a little differently.  These functions
+are designed to handle generic tuples with a variable numbers of
+planes, so no fixed size per-tuple storage is possible.  A program of
+this type uses 4 bytes per sample (a tuple is composed of samples),
+plus another 4 bytes per tuple.  In a graphic image, a tuple is a
+pixel.  So an ordinary color image takes 16 bytes per pixel.
+
+<p>When considering memory usage, it is important to remember that
+memory and disk storage are equivalent in two ways:
+
+<ul>
+<li>Memory is often virtual, backed by swap space on disk storage.  So
+accessing memory may mean doing disk I/O.
+
+<li>Files are usually cached and buffered, so that accessing a disk file
+may just mean accessing memory.
+</ul>
+
+<p>This means that the consequences of whether a program works from
+the image file or from a memory copy are not straightforward.
+
+<p>Note that an image takes a lot less space in a Netpbm format file,
+and therefore in an operating system's file cache, than in Netpbm's
+in-memory format.  In non-Netpbm image formats, the data is even
+smaller.  So reading through an input file multiple times instead of
+keeping a copy in regular memory can be the best use of memory, and many
+Netpbm programs do that.  But some files can't be read multiple times.
+In particular, you can't rewind and re-read a pipe, and a pipe is
+often the input for a Netpbm program.  Netpbm programs that re-read
+files detect such input files and read them into a temporary file,
+then read that temporary file multiple times.
+
+<p>A few Netpbm programs use an in-memory format that is just one bit
+per pixel.  These are programs that convert between PBM and a format that
+has a raster format very much like PBM's.  In this case, it would actually
+make the program more complicated (in addition to much slower) to use
+Netpbm's generic 12 byte or 8 byte pixel representation.
+
+<p>By the way, the old axiom that memory is way faster than disk is not
+necessarily true.  On small systems, it typically is true, but on a
+system with a large network of disks, especially with striping, it is
+quite easy for the disk storage to be capable of supplying data faster
+than the CPU can use it.
+
+<h2 id="cpuusage">CPU Usage</h2>
+
+<p>People sometimes wonder what CPU facilities Netpbm programs and the
+Netpbm programming library use.  The programs never depend on particular
+features existing (assuming they're compiled properly), but the speed
+and cost of running a program varies depending upon the CPU features.
+
+<p>One area of particular importance is floating point arithmetic.
+The Netpbm image formats are based on integers, and Netpbm arithmetic
+is done with integers where possible.  But there is one significant
+area that is floating point: programs that must deal with light
+intensity.  The Netpbm formats use integers that are proportional to
+brightness, and brightness is exponentially related to light
+intensity.  The programs have to keep the intermediate intensity
+values in floating point in order not to lose precision.  And the
+conversion (gamma function) between the two is heavy-duty floating
+point arithmetic.
+
+Programs that mix pixels together have to combine light intensity, so
+they do heavy floating point.  Three of the most popular Netpbm
+programs do that: <a href="pamscale.html"><b>pamscale</b></a>
+(shrink/expand an image), <a href="pamcomp.html"><b>pamcomp</b></a>
+(overlay an image over another one), and <a
+href="pamditherbw.html"><b>pamditherbw</b></a> (Make a black and white
+image that approximates a grayscale image).
+
+<p>The Netpbm image formats use 16 bit integers.  The Netpbm code uses
+&quot;unsigned int&quot; size integers to work with them.
+
+
+<h2 id="companion">Companion Software</h2>
+
+<h3 id="php-netpbm">PHP-NetPBM</h3>
+
+<p>If you're using Netpbm to do graphics for a website, you can invoke
+the Netpbm programs from a PHP script.  To make this even easier,
+check out <a href="http://sourceforge.net/projects/phpnetpbm">PHP-NetPBM</a>,
+a PHP class that interacts with Netpbm.  Its main goal is to decrease the
+pain of using Netpbm when working with images in various formats.  It
+includes macro commands to perform manipulations on many files.
+
+<p>I can't actually recommend PHP-NetPBM.  I spent some time staring
+at it and was unable to make sense of it.  Some documentation is in
+fractured English and other is in an unusual character set.  But a PHP
+expert might be able to figure it out and get some use out of it.
+
+<H2 id="othersoftware">Other Graphics Software</H2>
+
+<P>Netpbm contains primitive building blocks.  It certainly is not a
+complete graphics software library.
+
+<h3 id="viewers">Graphics Viewers</h3>
+
+<P>The first thing you will want to make use of any of these tools is
+a viewer.  (On GNU/Linux, you can use <B>ppmsvgalib</B> in a pinch,
+but it is pretty limiting).  <B>zgv</B> is a good full service viewer
+to use on a GNU/Linux system with the SVGALIB graphics display driver
+library.  You can find <B>zgv</B> at <B><A
+HREF="ftp://ftp.ibiblio.org/pub/Linux/apps/graphics/viewers/svga">ftp://ftp.ibiblio.org/pub/Linux/apps/graphics/viewers/svga</A>.</B>
+
+<P><B>zgv</B> even has a feature in it wherein you can visually crop
+an image and write an output file of the cropped image using
+<B><a href="pamcut.html">pamcut</a></B>.
+
+See the <B>-s</B> option to <B>zgv</B>.
+
+<P>For the X inclined, there is also <B>xzgv</B>.
+
+<P><B>xloadimage</B> and its extension <B>xli</B> are also common
+ways to display a graphic image in X.
+
+<p><b>gqview</b> is a more modern X-based image viewer.
+
+<p><b>qiv</b> is a small, very fast viewer for X.
+
+<P>To play mpeg movies, such as produced by <B>ppmtompeg</B>,
+try <b><a href="http://www.mplayerhq.hu/design7/info.html">mplayer</a></b> or
+<b><a href="http://sourceforge.net/projects/xine">xine</a>.</b>
+
+<p>See <B><A
+HREF="ftp://metalab.unc.edu/pub/Linux/apps/graphics/viewers/X">ftp://metalab.unc.edu/pub/Linux/apps/graphics/viewers/X</A></B>.
+
+<h3 id="visual">Visual Graphics Software</h3>
+
+<p>Visual graphics software is modern point-and-click software that
+displays an image and lets you work on it and see the results as you go.
+This is fundamentally different from what Netpbm programs do.
+
+<P><B>ImageMagick</B> is like a visual version of Netpbm.  Using the
+X/Window system on Unix, you can do basic editing of images and lots
+of format conversions.  The package does include at least some
+non-visual tools.  <b>convert</b>, <b>mogrify</b>, <b>montage</b>, and
+<b>animate</b> are popular programs from the <B>ImageMagick</B>
+package.  <B>ImageMagick</B> runs on Unix, Windows, Windows NT,
+Macintosh, and VMS.
+
+<p><b>xv</b> is a very old and very popular simple image editor in the
+Unix world.  It does not have much in the way of current support,
+or maintenance, though.
+
+<P>The Gimp is a visual image editor for Unix and X, in the same
+category as the more famous, less capable, and much more expensive
+Adobe Photoshop, etc. for Windows.  See <B><A
+HREF="http://www.gimp.org">http://www.gimp.org</A></B>.
+
+<p>Electric Eyes, <b>kuickshow</b>, and <b>gthumb</b> are also visual
+editors for the X/Window system, and <b>KView</b> and <b>gwenview</b>
+are specifically for KDE.
+
+<h3 id="programmingtools">Programming Tools</h3>
+
+<P>If you're writing a program in C to draw and manipulate images,
+check out <a href="http://www.boutell.com/gd">gd</a>.  Netpbm contains a
+C library for drawing images, but it is probably not as capable or
+documented as <b>gd</b>.  You can easily run any Netpbm program from a
+C program with the <b>pm_system</b> function from the Netpbm
+programming library, but that is less efficient than <b>gd</b>
+functions that do the same thing.
+
+<P><B>Ilib</B> is a C subroutine library with functions for adding
+text to an image (as you might do at a higher level with
+<B>pbmtext</B>, <B>pamcomp</B>, etc.).  It works with Netpbm input and
+output.  Find it at <B><A
+HREF="http://www.k5n.us/Ilib.php">k5n.us</A></B>.
+Netpbm also includes character drawing functions in the <B><a
+href="libnetpbm.html">libnetpbm</a></B> library, but they do not have as
+fancy font capabilities (see <B><a href="ppmlabel.html">ppmlabel</a></B>
+for an example of use of the Netpbm character drawing functions).
+
+<P><B>GD</B> is a library of graphics routines that is part of PHP.
+It has a subset of Netpbm's functions and has been found to resize
+images more slowly and with less quality.
+
+<h3 id="toolsforformats">Tools For Specific Graphics Formats</h3>
+
+<p><b>mencode</b>, which is part of the <b><a
+href="http://www.mplayerhq.hu/design7/info.html">mplayer</a></b> package,
+creates movie files.  It's like a much more advanced version of <a
+href="ppmtompeg.html"><b>ppmtompeg</b></a>, without the Netpbm
+building block simplicity.
+
+<P>To create an animated GIF, or extract a frame from one, use
+<B>gifsicle</B>.  <B>gifsicle</B> converts between animated GIF and
+still GIF, and you can use <B>pamtogif</B> and <B>giftopnm</B> to
+connect up to all the Netpbm utilities.  See <B><A
+HREF="http://www.lcdf.org/gifsicle">http://www.lcdf.org/gifsicle</A></B>.
+
+<P>To convert an image of text to text (optical character recongition
+- OCR), use <B>gocr</B> (think of it as an inverse of <B>pbmtext</B>).
+See <B> <a
+href="http://jocr.sourceforge.net/">http://jocr.sourceforge.net/</a></b>.
+
+<P><B><A HREF="http://schaik.com/pngsuite">http://schaik.com/pngsuite</A></B>
+contains a PNG test suite -- a whole bunch of PNG images exploiting the
+various features of the PNG format.
+
+<P>Another version of Netpbm's <B>pnmtopng</B>/<B>pngtopnm</B> is at
+<B><A
+HREF="http://www.schaik.com/png/pnmtopng.html">http://www.schaik.com/png/pnmtopng.html</A></B>.
+
+<p>The version in Netpbm was actually based on that package a long time
+ago, and you can expect to find better exploitation of the PNG format,
+especially recent enhancements, in that package.  It may be a little
+less consistent with the Netpbm project and less exploitive of recent
+Netpbm format enhancements, though.
+
+<p><b><a href="http://pngwriter.sourceforge.net">pngwriter</a></b> is a
+C++ library for creating PNG images.  With it, you plot an image pixel
+by pixel.  You can also render text with the FreeType2 library.
+
+<P><B>jpegtran</B> Does some of the same transformations as Netpbm is
+famous for, but does them specifically on JPEG files and does them
+without loss of information.  By contrast, if you were to use Netpbm,
+you would first decompress the JPEG image to Netpbm format, then
+transform the image, then compress it back to JPEG format.  In that
+recompression, you lose a little image information because JPEG is a
+lossy compression.  Of course, only a few kinds of lossless
+transformation are possible.  <B>jpegtran</B> comes with the
+Independent Jpeg Group's (<A
+HREF="http://www.ijg.org">http://www.ijg.org)</A> JPEG library.
+
+<P> Some tools to deal with EXIF files (see also Netpbm's <B><a
+href="jpegtopnm.html">jpegtopnm</a></B> and <B><a
+href="pnmtojpeg.html">pnmtojpeg</a></B>):
+
+To dump (interpret) an EXIF header: Exifdump ((<A
+HREF="http://topo.math.u-psud.fr/~bousch/exifdump.py">http://topo.math.u-psud.fr/~bousch/exifdump.py)</A>)
+or <A HREF="http://www.sentex.net/~mwandel/jhead">Jhead</a>.
+
+<P>A Python EXIF library and dumper: <A
+HREF="http://pyexif.sourceforge.net.">http://pyexif.sourceforge.net.</A>
+
+<P>Here's some software to work with IOCA (Image Object Content
+Architecture): <a
+href="http://www.forminnovation.com">ImageToolbox</a> ($2500, demo
+available).  This can convert from TIFF -&gt; IOCA and back again.
+<a href="http://www.thethinktanksoftware.com/details.html">Ameri-Imager</a>
+($40 Windows only).
+
+<P><B>pnm2ppa</B> converts to HP's &quot;Winprinter&quot; format (for
+HP 710, 720, 820, 1000, etc).  It is a superset of Netpbm's
+<B>pbmtoppa </B> and handles, notably, color.  However, it is more of
+a printer driver than a Netpbm-style primitive graphics building
+block.  See <A
+HREF="http://sourceforge.net/projects/pnm2ppa">The Pnm2ppa /Sourceforge
+Project</a>
+
+<p><b>DjVuLibre</b> is a package of software for using the DjVu
+format.  It includes viewers, browser plugins, decoders, simple
+encoders, and utilities.  The encoders and decoders can convert
+between DjVu and PNM.  See <a
+href="http://djvulibre.djvuzone.org/index.html"> the DjVu website.</a>
+
+
+<h3 id="document">Document/Graphics Software</h3>
+
+<p>There is a large class of software that does document processing,
+and that is somewhat related to graphics because documents contain
+graphics and a page of a document is for many purposes a graphic
+image.  Because of this slight intersection with graphics, I cover
+document processing software here briefly, but it is for the most part
+beyond the scope of this document.
+
+<p>First, we look at where Netpbm meets document processing.
+<b>pstopnm</b> converts from Postscript and PDF to PNM.  It
+effectively renders the document into images of printed pages.
+<b>pstopnm</b> is nothing but a convenient wrapper for <a
+href="http://www.ghostscript.com/">Ghostscript</a>, and in particular
+Netpbm-format device drivers that are part of it.  <b>pnmtops</b> and
+<b>pbmtoepsi</b> convert a PNM image to a Postscript program for
+printing the image.  But to really use PDF and Postscript files, you
+generally need more complex document processing software.
+
+<P>Adobe invented Postscript and PDF and products from Adobe are for many
+purposes the quintessential Postscript and PDF tools.
+
+<P>Adobe's free Acrobat Reader displays PDF and converts to
+Postscript.  The Acrobat Reader for unix has a program name of
+&quot;acroread&quot; and the -toPostScript option (also see the
+-level2 option) is useful.
+
+<P>Other software from Adobe, available for purchase, interprets and
+creates Postscript and PDF files.  &quot;Distill&quot;
+is a program that converts Postscript to PDF.
+
+<p><a href="http://www.foolabs.com/xpdf/"><b>xpdf</b></a> also reads
+PDF files.
+
+<p>GSview, ghostview, gv, ggv, and kghostview are some other viewers
+for Postscript and PDF files.
+
+<p>The program <b>ps2pdf</b>, part of Ghostscript, converts from Postscript
+to PDF.
+
+<P>Two packages that produce more kinds of Encapsulated Postscript
+than the Netpbm programs, including compressed kinds, are <a
+href="http://bmeps.sourceforge.net/">bmeps</a> and <a
+href="http://imgtops.sourceforge.net/">imgtops</a>.
+
+<p><b>dvips</b> converts from DVI format to Postscript.  DVI is the format
+that Tex produces.  Netpbm can convert from Postscript to PNM.  Thus, you
+can use these in combination to work with Tex/Latex documents graphically.
+
+<p><a href="http://wvware.sourceforge.net"><b>wvware</b></a> converts
+a Microsoft Word document (.doc file) to various other formats.  While
+the web page doesn't seem to mention it, it reportedly can extract an
+embedded image in a Word document as a PNG.
+
+<p><A href="http://www.verypdf.com/artprint">Document Printer</a>
+converts various print document formats (Microsoft Word, PDF, HTML, etc.)
+to various graphic image formats.  ($38, Windows only).
+
+<P>Latex2html converts Latex document source to HTML document source.
+Part of that involves graphics, and Latex2html uses Netpbm tools for
+some of that.  But Latex2html through its history has had some rather
+esoteric codependencies with Netpbm.  Older Latex2html doesn't work
+with current Netpbm.  Latex2html-99.2beta8 works, though.
+
+<h3 id="otherothersoftware">Other</h3>
+
+<P>The <B>file</B> program looks at a file and tells you what kind of
+file it is.  It recognizes most of the graphics formats with which
+Netpbm deals, so it is pretty handy for graphics work.  Netpbm's
+<B><a href="anytopnm.html">anytopnm</a></B> program depends on <B>file.</B>
+See 
+<B><A HREF="ftp://ftp.astron.com/pub/file">ftp://ftp.astron.com/pub/file</A></B>.
+
+<P>The Utah Raster Toolkit serves a lot of the same purpose as Netpbm,
+but without the emphasis on format conversions.  This package is based
+on the RLE format, which you can convert to and from the Netpbm
+formats.  The website of the <a
+href="http://www.cs.utah.edu/gdc">Geometric Design And Computation
+group</a> in the Department of Computer Science at University of Utah
+used to (ca. 2002) have information on the Utah Raster Toolkit, but
+now it doesn't.
+
+<P><B>Ivtools</B> is a suite of free X Windows drawing editors for
+Postscript, Tex, and web graphics production, as well as an embeddable
+and extendable vector graphic shell.  It uses the Netpbm facilities.
+See <B><A
+HREF="http://www.ivtools.org">http://www.ivtools.org</A></B>.
+
+<P>The program <B>morph</B> morphs one image into another.  It uses
+Targa format images, but you can use <B>tgatoppm</B> and
+<B>ppmtotga</B> to deal with that format.  You have to use the
+graphical (X/Tk) Xmorph to create the mesh files that you must feed to
+<B>morph</B>.  <B>morph</B> is part of the Xmorph package.  See <B><A
+HREF="http://xmorph.sourceforge.net/">http://xmorph.sourceforge.net/</A></B>.
+
+<H2 id="otherfmt">Other Graphics Formats</H2>
+
+<P>People never seem to tire of inventing new graphics formats, often
+completely redundant with pre-existing ones.  Netpbm cannot keep up
+with them.  Here is a list of a few that we know Netpbm does
+<em>not</em> handle (yet).
+
+<p>Various commercial Windows software handles dozens of formats that
+Netpbm does not, especially formats typically used with Windows programs.
+ImageMagick is probably the most used free image format converter and it
+also handles lots of formats Netpbm does not.
+
+<UL>
+
+<li>DjVu is a web-centric format and software platform for
+distributing documents and images.  Promoters say it is a good
+replacement for PDF, PS, TIFF, JPEG, and GIF for distributing scanned
+documents, digital documents, or high-resolution pictures, because it
+downloads faster, displays and renders faster, looks nicer on a
+screen, and consumes less client resources than competing formats.
+
+<p>For more information, see <a
+href="http://djvulibre.djvuzone.org/index.html"> the DjVu website.</a>
+
+<LI> <a
+href="http://www.web3d.org/x3d/specifications/vrml">VRML
+(Virtual Reality Modelling Language)</a>
+
+<LI>
+CALS (originated by US Department Of Defense, favored by architects).
+It is described in this 1997 listing of graphicas formats:
+<A HREF="http://www.faqs.org/faqs/graphics/fileformats-faq/part3/">
+http://www.faqs.org/faqs/graphics/fileformats-faq/part3/</A>.  CALS
+has at times been an abbreviation of various things, all of which appear
+to be essentially the same format, but possibly slightly different:
+
+<ul>
+<li>Computer Aided Logistics Support
+<li>Computer Aided Acquisition and Logistics Support
+<li>Continuous Acquisition and Life-cycle Support
+<li>Commerce At Light Speed
+
+</ul>
+
+The US Navy publishes <a
+href="http://www.dt.navy.mil/tot-shi-sys/des-int-pro/tec-inf-sys/cal-std/index.html">specs</a>
+for it.
+
+
+<LI>
+array formats dx, general, netcdf, CDF, hdf, cm
+<LI>
+CGM+
+<LI>Windows Meta File (.WMF).  Libwmf converts from WMF to things like
+Latex, PDF, PNG.  Some of these can be input to Netpbm.
+
+<LI>Microsoft Word .doc format.  Microsoft keeps a proprietary hold on
+this format.  Any software you see that can handle it is likely to
+cost money.
+
+<li>RTF
+
+<LI>
+DXF (AutoCAD)
+<LI>
+IOCA (Image Object Content Architecture)
+The specification of this format is documented by IBM:
+<a href="http://publibz.boulder.ibm.com/epubs/pdf/c3168055.pdf">
+Data Stream and Object Architectures: Image Object Content Architecture
+Reference</a>.  See above for software that processes this format.
+
+<LI>OpenEXR is an HDR format (like <a href="pamtopfm.html">PFM</a>).
+See <a href="http://www.openexr.com">
+http://www.openexr.com</a>.
+
+<li>Xv Visual Schnauzer thumbnail image.  This is a rather antiquated
+format used by the Xv program.  In Netpbm circles, it is best known
+for the fact that it is very similar to Netpbm formats and uses the
+same signature (&quot;P7&quot;) as PAM because it was developed as
+sort of a fork of the Netpbm format specifications.
+
+<li>YUV 4:2:0, aka YUV 420, and the simlar YUV 4:4:4, YUV 4:2:2,
+YUV 4:1:1, YUV 4:1:1s, and YUV 4:1:0.  Video systems often use this.
+     
+</UL>
+
+<H2 id="history">History</H2>
+
+<P>Netpbm has a long history, starting with Jef Poskanzer's 
+Pbmplus package in 1988.  The file <I>HISTORY</I>
+in the Netpbm source code contains a historical overview as well as a
+detailed history release by release.
+
+<H2 id="author">Author</H2>
+
+<P>Netpbm is based on the Pbmplus package by Jef Poskanzer, first
+distributed in 1988 and maintained by him until 1991.  But the package
+contains work by countless other authors, added since Jef's original
+work.  In fact, the name is derived from the fact that the work was
+contributed by people all over the world via the Internet, when such
+collaboration was still novel enough to merit naming the package after
+it.
+
+<P>Bryan Henderson has been maintaining Netpbm since 1999.  In
+addition to packaging work by others, Bryan has also written a
+significant amount of new material for the package.
+
+</BODY>
+</HTML>
diff --git a/infotopam.html b/infotopam.html
new file mode 100644
index 00000000..aeab5395
--- /dev/null
+++ b/infotopam.html
@@ -0,0 +1,227 @@
+<?xml version="1.1" encoding="iso-8859-1" ?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<head>
+<title>Infotopam User Manual</title>
+</head>
+
+<body>
+
+<h1>infotopam</h1>
+
+<p>Updated: 07 April 2004</p>
+
+<p><a href="#index">Table Of Contents</a></p>
+
+<h2 id="name">NAME</h2>
+
+<p>infotopam - convert Amiga .info icons to PAM</p>
+
+<h2 id="synopsis">SYNOPSIS</h2>
+
+<p>
+<b>infotopam</b>
+[<b>-forcecolor</b>]
+[<b>-numcolors</b> <i>numcolors</i>]
+[<b>-selected</b>]
+[<i>index color</i> ...]
+[<i>filename</i>]
+</p>
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white space in
+place of the equals sign to separate an option name from its value.</p>
+
+<h2 id="examples">EXAMPLES</h2>
+
+<p>By default, <b>infotopam</b> converts the first icon in a .info file:</p>
+
+  <pre>
+    infotopam amiga.info &gt; amiga.first.pam
+  </pre>
+
+<p>Use the <i>-selected</i> option to convert the second icon in a .info
+file.  Here <b>infotopam</b> reads from Standard Input:</p>
+
+  <pre>
+    infotopam -selected &lt; amiga.info &gt; amiga.second.pam
+  </pre>
+
+<p>Use the <i>-forcecolor</i> option to force color conversion for a 1
+bit-plane .info file:</p>
+
+  <pre>
+    infotopam -forcecolor bw.info &gt; bw.pam
+  </pre>
+
+<p>Use <i>-numcolors</i> to override colors for indexes 0 and 3.  Notice the
+two ways to specify the color:</p>
+
+  <pre>
+    infotopam -numcolors 2 0 green 3 #FF0000 icon.info &gt; icon.pam
+  </pre>
+
+<p>Since Amiga monitors do not use square pixels, some icons may appear
+squished.  Filtering the output through <b>pamscale</b> can fix this:</p>
+
+  <pre>
+     infotopam squish.info | pamtopnm | pamscale -yscale 1.7 &gt; normal.pnm
+  </pre>
+
+<h2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>infotopam</b> converts an Amiga .info (icon) file to a PAM image.
+<b>infotopam</b> reads a .info file from <i>filename</i>, or from Standard
+Input if you do not specify a file name, and writes the converted PAM image to
+Standard Output.</p>
+
+<p><b>infotopam</b> currently handles 1 and 2 bit-plane icons.  If the .info
+icon only has 1 bit-plane, <b>infotopam</b> generates a bitmap
+(black&amp;white) PAM image; otherwise it generates a color PAM image.  You
+can force <b>infotopam</b> to convert 1 bit-plane images to color PAM images by
+using the <i>-forcecolor</i> option.</p>
+
+<h2 id="options">OPTIONS</h2>
+
+<dl>
+  <dt><b>-forcecolor</b></dt>
+
+  <dd><p>Forces <b>infotopam</b> to convert 1 bit-plane icons to color PAM
+  images instead of bitmap PAM images.  <b>infotopam</b> uses the index 2
+  color for black and the index 1 color for white (more on this
+  below).</p></dd>
+
+  <dt><b>-numcolors</b> <i>numcolors</i></dt>
+
+  <dd><p>Tells <b>infotopam</b> how many colors to override.  Pixels in the
+  Amiga .info files are assigned an index value rather than a specific color.
+  The standard colors for a 2 bit-plane icon are:</p>
+
+  <pre>
+    Index 0:  Blue   (00, 55, AA)
+    Index 1:  White  (FF, FF, FF)
+    Index 2:  Black  (00, 00, 20)
+    Index 3:  Orange (FF, 8A, 00)
+  </pre>
+
+  <p>To override the colors, first specify how many colors to override using
+  <i>-numcolors</i>, then specify an (<i>index color</i>) pair for each color
+  you want to override, where <i>index</i> is a value from 0 to 3 and
+  <i>color</i> the the new color for that index.  Specify <i>color</i> as
+  described for the <a href= "libppm.html#colorname"><b>ppm_parsecolor()</b>
+  argument</a>.</p></dd>
+
+  <dt><b>-selected</b></dt>
+
+  <dd>Tells <b>infotopam</b> to convert the selected (second) icon instead of
+  the normal (first) icon.  Each Amiga .info icon file contains two icon
+  images.  The first image is the normal, unselected icon, and the second
+  image is the selected icon.  By default <b>infotopam</b> converts the first
+  icon.  You can tell <b>infotopam</b> to convert the second icon by using the
+  <i>-selected</i> option.</dd>
+
+</dl>
+
+<p>All options can be abbreviated to their shortest unique prefix.</p>
+
+<h2 id="seealso">SEE ALSO</h2>
+
+<p>
+  <a href="pam.html">pam</a>
+  <a href="pamtopnm.html">pamtopnm</a>
+  <a href="pamscale.html">pamscale</a>
+</p>
+
+<h2 id="notes">NOTES</h2>
+
+<p>Thanks to the following people on comp.sys.amiga.programmer for tips
+and pointers on decoding the info file format:</p>
+
+<ul>
+  <li>Ben Hutchings</li>
+  <li>Thomas Richter</li>
+  <li>Kjetil Svalastog Matheussen</li>
+  <li>Anders Melchiorsen</li>
+  <li>Dirk Stoecker</li>
+  <li>Ronald V.D.</li>
+</ul>
+
+<p>The format of the Amiga .info file is as follows:</p>
+
+  <pre>
+    DiskObject header            78 bytes
+    Optional DrawerData header   56 bytes
+    First icon header            20 bytes
+    First icon data              Varies
+    Second icon header           20 bytes
+    Second icon data             Varies  
+  </pre>
+
+<p>The DiskObject header contains, among other things, the magic number
+(0xE310), the object width and height (inside the embedded Gadget header),
+and the version.</p>
+
+<p>Each icon header contains the icon width and height, which can be smaller
+than the object width and height, and the number of bit-planes.</p>
+
+<p>The icon data has the following format:</p>
+
+  <blockquote>
+    <p><i>BIT-PLANE</i> planes, each with <i>HEIGHT</i> rows of (<i>WIDTH</i>
+    +15) / 16 * 2 bytes length.</p>
+  </blockquote>
+
+<p>So if you have a 9x3x2 icon, the icon data will look like this:</p>
+
+  <pre>
+    aaaa aaaa a000 0000
+    aaaa aaaa a000 0000
+    aaaa aaaa a000 0000
+    bbbb bbbb b000 0000
+    bbbb bbbb b000 0000
+    bbbb bbbb b000 0000
+  </pre>
+
+<p>where <i>a</i> is a bit for the first bit-plane, <i>b</i> is a bit for the
+second bit-plane, and <i>0</i> is padding.  Thanks again to Ben Hutchings for
+his very helpful post!</p>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>infotopam</b> was new in Netpbm 10.22 (April 2004).
+
+<h2 id="limitations">LIMITATIONS</h2>
+
+
+<p><b>infotopam</b> currently only handles 1 and 2 bit-plane icons.</p>
+
+<p>There is no <b>pamtoinfo</b> command, since the .info files contain a lot
+more than just icon data, and mapping the colors would be difficult.</p>
+
+<h2 id="author">AUTHOR</h2>
+
+<p>Copyright (C) 2000, 2004 by Richard Griswold.</p>
+
+<hr />
+
+<a id="index">&nbsp;</a>
+<h2>Table Of Contents</h2>
+
+<ul>
+  <li><a href="#name">NAME</a></li>
+  <li><a href="#synopsis">SYNOPSIS</a></li>
+  <li><a href="#examples">EXAMPLES</a></li>
+  <li><a href="#description">DESCRIPTION</a></li>
+  <li><a href="#options">OPTIONS</a></li>
+  <li><a href="#seealso">SEE ALSO</a></li>
+  <li><a href="#notes">NOTES</a></li>
+  <li><a href="#history">HISTORY</a></li>
+  <li><a href="#limitations">LIMITATIONS</a></li>
+  <li><a href="#author">AUTHOR</a></li>
+</ul>
+
+</body>
+</html>
diff --git a/jbigtopnm.html b/jbigtopnm.html
new file mode 100644
index 00000000..4d92d1a0
--- /dev/null
+++ b/jbigtopnm.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Jbigtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>Jbigtopnm</H1>
+Updated: 19 November 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+jbigtopnm - JBIG to PNM image file converter
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>jbigtopnm</B>
+[<I>options</I>]
+[<I>input-file</I> [<I>output-file</I>]]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>jbigtopnm</b> reads a JBIG bi-level image entity (BIE) from a
+file or standard input, decompresses it, and outputs a PBM or PGM
+file.  If the input has one plane, or you choose just one plane of it,
+the output is PBM.  Otherwise, the output is PGM.
+
+<P>JBIG is a highly effective lossless compression algorithm for
+bi-level images (one bit per pixel), which is particularly suitable
+for scanned document pages.
+
+<P>A JBIG encoded image can be stored in several resolutions in one or
+several BIEs. All resolution layers except the lowest one are stored
+efficiently as differences to the next lower resolution layer.  You
+can use options <B>-x</B> and <B>-y</B> to stop the decompression at a
+specified maximal output image size.  The input file can consist of
+several concatenated BIEs which contain different increasing
+resolution layers of the same image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-x</B> <I>number</I>
+
+<DD>Decode only up to the largest resolution layer which is still not
+more than <I>number</I> pixels wide.  If no such resolution layer
+exists, then use the smallest one available.
+
+<DT><B>-y</B><I> number</I>
+
+<DD>Decode only up to the largest resolution layer which is still not
+more than <I>number</I> pixels high.  If no such resolution layer
+exists, then use the smallest one available.  You can also use options
+<B>-x</B> and <B>-y</B> together which selects the largest layer that
+satisfies both limits.
+
+<DT><B>-b</B>
+
+<DD>Use binary values instead of Gray code words in order to decode
+pixel values from multiple bitplanes.  This option has effect only if
+the input has more than one bitplane and you don't select just one of
+those bitplanes.  Note that the decoder has to be used in the same
+mode as the encoder and cannot determine from the BIE, whether Gray or
+binary code words were used by the encoder.
+
+<DT><B>-d</B>
+
+<DD>Diagnose a BIE.  With this option, <B>jbigtopnm</B> only prints a
+summary of the header information found in the input file and then
+exits.
+
+<DT><B>-p</B><I> number</I>
+
+<DD>If the input contains multiple bitplanes, then extract only the
+specified single plane as a PBM file.  The first plane has number 0.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>STANDARDS</H2>
+
+<p>This program implements the JBIG image coding algorithm as
+specified in ISO/IEC 11544:1993 and ITU-T T.82(1993).
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<!-- jbgtopnm below is not a typo.  It is not meant to be jbigtopnm -->
+<p><B>jbigtopnm</B> is based on the JBIG library by Markus Kuhn, part
+of his <a
+href="http://www.cl.cam.ac.uk/~mgk25/jbigkit/"><B>JBIG-KIT</B>
+package</a>.  The <B>jbgtopbm</B> program is part of the
+<B>JBIG-KIT</B> package.
+
+<P><B>jbigtopnm</B> is part of the Netpbm package of graphics tools.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pnmtojbig.html">pnmtojbig</A></B>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>LICENSE</H2>
+
+If you use <B>jbigtopnm</B>, you are using various patents,
+particularly on its arithmetic encoding method, and in all probability
+you do not have a license from the patent owners to do so.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">STANDARDS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">LICENSE</A>
+</UL>
+</BODY>
+</HTML>
+
+
diff --git a/jpeg2ktopam.html b/jpeg2ktopam.html
new file mode 100644
index 00000000..1c3104da
--- /dev/null
+++ b/jpeg2ktopam.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Jpeg2ktopam User Manual</TITLE></HEAD>
+<BODY>
+<H1>Jpeg2ktopam</H1>
+Updated: 27 October 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+jpeg2ktopam - convert JPEG-2000 code stream to PAM/PNM
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>jpeg2ktopam</B>
+[<B>-verbose</B>]
+[<B>-debuglevel=</B><I>number</I>]
+<I>filename</I>
+
+<?makeman .SH OPTION USAGE ?>
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>jpeg2ktopam</b> converts the named JPEG-2000 code stream file,
+or Standard Input if no file is named, to a PBM, PGM, PPM, or PAM
+file on Standard Output.
+
+<P>The JPEG-2000 specification specifies two different formats: JP2
+and JPEG-2000 code stream (JPC).  JP2 represents a visual image quite
+specifically, whereas JPC is a more or less arbitrary array of
+codes.  JP2 images are a subset of JPC images.  <b>jpeg2ktopam</b>
+converts any JPC image.  If the color space identified in the image is
+grayscale (JAS_IMAGE_CS_GRAY), <B>jpeg2ktopam</b> generates a PGM
+image, unless the image contains only one bit per pixel, in which case
+<b>jpeg2ktopam</b> generates PBM.  If the color space is RGB
+(JAS_IMAGE_CS_RGB), <b>jpeg2ktopam</b> generates a PPM image.  If the
+input image is anything else, <b>jpeg2ktopam</b> generates a PAM image
+with no tuple type identified.
+
+<P>In the PGM and PPM cases, <b>jpeg2ktopam</b> assumes the intensity
+values in the input image have the same meaning as for PGM and PPM.
+One thing that implies is the ITU-R Recommendation BT.709 color space,
+which means the assumption is false for JP2 input.  JP2 input uses
+SRGB color encoding.  So if you use <b>jpeg2ktopam</b> to convert a
+JP2 image to PPM, it changes the visual image (slightly) -- the colors
+in the output are not the same as in the input.
+
+<p>In the PAM image, the output samples are numerically identical to
+the input samples.  If the input samples are signed, they are
+represented in two's complement form in the output (because PAM
+samples are always unsigned).  The PAM plane numbers are identical to
+the JPC component numbers.
+
+<p>A JPC image has a "precision," which is the number of bits used for
+each code (in Netpbm lingo, "sample").  Actually, each component has a
+separate precision.  The maxval of a PGM, PPM, or PAM output is the
+largest number you can represent in the JPC precision of the JPC
+component with the greatest precision.  The samples in all components are
+scaled to that maxval.  So if the red component has a precision of 4 bits
+and the green component has a precision of 6 bits, the maxval is 63 and
+the red component codes from the JPC image are multiplied by 63/15 to
+generate the output samples.
+
+<P><b>jpeg2ktopam</b> interprets the JPC input with the <a
+href="http://www.ece.uvic.ca/~mdadams/jasper/">Jasper JPEG-2000
+library</a>.  See documentation of the library for details on what
+<b>jpeg2ktopam</b> handles.  Note that the Jasper library contains
+facilities for writing PNM images, but <b>jpeg2ktopam</b> does not use
+those.  It uses the Netpbm library instead.  Note that the makers of
+the Jasper library write it "JasPer," but Netpbm documentation follows
+standard American English typography rules, which don't allow that
+kind of capitalization.
+
+<P>Use <b>pamtojpeg2k</b> to convert in the other direction.
+
+<p>The program <b>jasper</b>, which is packaged with the Jasper 
+JPEG-2000 library, also converts between JPEG-2000 and PNM formats.
+Because it's packaged with the library, it may exploit it better, 
+especially recently added features.  However, since it does not use the
+Netpbm library to read and write the Netpbm formats, it doesn't do as
+good a job on that side.
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-verbose</b>
+
+<DD>This option causes <b>jpeg2ktopam</b> to issue informational
+messages about the conversion process.
+
+<DT><B>-debuglevel</b>=<i>number</i>
+
+<DD>This option controls debug messages from the Jasper library.  
+<b>jpeg2ktopam</b> passes <i>number</i> as the debug level to the Jasper
+JPC decoder.
+
+</DL>
+     
+<A NAME="examples">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<pre>
+  jpeg2ktopam myimg.jpc &gt;myimg.ppm
+</pre>
+
+
+<A NAME="jpeg2000">&nbsp;</A>
+<H2>ABOUT JPEG-2000</H2>
+
+<p>See <a href="pamtojpeg2k.html">the <b>pamtojpeg2k</b> manual</a>
+for general information on JPEG-2000 compression and the
+JPEG-2000 formats.
+
+
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamtojpeg2k.html">jpctopam</A></B>,
+<B><A HREF="jpegtopnm.html">pnmtopeg</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+
+<H2>History</H2>
+
+<p><b>jpeg2ktopam</b> was added to Netpbm in Release 10.12 (November 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/jpegtopnm.html b/jpegtopnm.html
new file mode 100644
index 00000000..86a44d50
--- /dev/null
+++ b/jpegtopnm.html
@@ -0,0 +1,339 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Jpegtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>JPEGTOPNM</H1>
+Updated: 13 October 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+jpegtopnm - convert JPEG/JFIF file to PPM or PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>jpegtopnm</B>
+[<B>-dct</B> {<B>int</B>|<B>fast</B>|<B>float</B>}]
+[<B>-nosmooth</B>]
+[<B>-maxmemory</B> <I>N</I>]
+[{<B>-adobe</B>|<B>-notadobe</B>}]
+[<B>-comments</B>]
+[<B>-dumpexif</B>]
+[<B>-exif=</B><I>filespec</I>]
+[<B>-multiple</B>]
+[<B>-verbose</B>]
+[<B>-tracelevel</B> <I>N</I>]
+[<I>filename</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>jpegtopnm</B> converts JFIF images to PPM or PGM images.
+
+<p>By default, <b>jpegtopnm</b> expects the input stream to contain one
+JFIF image and produces one PGM or PPM image as output.  It fails if the
+input stream is empty.
+
+<p>But with the <b>-multiple</b> option, <b>jpegtopnm</b> reads JFIF
+images sequentially from the input stream and writes one PPM or PGM image
+to the output stream for each JFIF input.  If the input stream is empty,
+so is the output.
+
+<p>The input stream is the <i>filename</i> you specify or, if you
+don't specify <i>filename</i>, Standard Input.  The output stream is
+Standard Output.
+
+<p>If a JFIF input image is of the grayscale variety, <B>jpegtopnm</B>
+generates a PGM image.  Otherwise, it generates a PPM image.
+
+<p>Before Netpbm 10.11 (October 2002), <b>jpegtopnm</b> did not have
+the multiple image stream capability.  From 10.11 through 10.22,
+Netpbm always behaved as if you specified <b>-multiple</b>.  Starting
+with Netpbm 10.23 (July 2004), Netpbm's default behavior went back to
+the pre-10.11 behavior and the new <b>-multiple</b> option selected
+the 10.12 behavior.  The reason for the reversion was that there were
+discovered in the world files that contain JFIF images followed by
+something other than another JFIF image.  The producers of these files
+expect them to work with any JFIF interpreter because most JFIF
+interpreters just stop reading the file after the first JFIF image.
+
+<p><B>jpegtopnm</B> uses the Independent JPEG Group's JPEG library to
+interpret the input file.  See <B><A
+HREF="http://www.ijg.org">http://www.ijg.org</A> </B>
+for information on the library.
+
+<P>&quot;JFIF&quot; is the correct name for the image format commonly
+known as &quot;JPEG.&quot; Strictly speaking, JPEG is a method of
+compression.  The image format using JPEG compression that is by far
+the most common is JFIF.  There is also a subformat of TIFF that uses
+JPEG compression.
+
+<P>EXIF is an image format that is a subformat of JFIF (to wit, a JFIF
+file that contains an EXIF header as an APP1 marker).
+<B>jpegtopnm</B> handles EXIF.
+
+<P>JFIF files can have either 8 bits per sample or 12 bits per sample.
+The 8 bit variety is by far the most common.  There are two versions
+of the IJG JPEG library.  One reads only 8 bit files and the other
+reads only 12 bit files.  You must link the appropriate one of these
+libraries with <B>jpegtopnm</B>.  Ordinarily, this means the library
+is in your shared library search path when you run <B>jpegtopnm</B>.
+
+<P><B>jpegtopnm</B> generates output with either one byte or two bytes
+per sample depending on whether the JFIF input has either 8 bits or 12
+bits per sample.  You can use <B>pamdepth</B> to reduce a
+two-byte-per-sample file to a one-byte-per-sample file if you need to.
+
+<P>If the JFIF file uses the CMYK or YCCK color space, the input does
+not actually contain enough information to know what color each pixel
+is.  To know what color a pixel is, one would have to know the
+properties of the inks to which the color space refers.
+<B>jpegtopnm</B> interprets the colors using the common transformation
+which assumes all the inks are simply subtractive and linear.
+
+<p>See the <a href="jpegtopnm.html"><B>jpegtopnm</B> manual</a>
+for information on how images lose quality when you convert to and
+from JFIF.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+The options are only for advanced users:
+<DL COMPACT>
+<DT><B>-dct int</B>
+
+<DD>
+Use integer DCT method (default).
+
+<DT><B>-dct fast</B>
+
+<DD>
+Use fast integer DCT (less accurate).
+
+<DT><B>-dct float</B>
+
+<DD>
+Use floating-point DCT method.
+The float method is very slightly more accurate than the int method, but is
+much slower unless your machine has very fast floating-point hardware.  Also
+note that results of the floating-point method may vary slightly across
+machines, while the integer methods should give the same results everywhere.
+The fast integer method is much less accurate than the other two.
+
+<DT><B>-nosmooth</B>
+
+<DD>
+Use a faster, lower-quality upsampling routine.
+<DT><B>-maxmemory</B><I> N</I>
+
+<DD>Set limit on the amount of memory <B>jpegtopnm</B> uses in
+processing large images.  Value is in thousands of bytes, or millions
+of bytes if &quot;M&quot; is suffixed to the number.  For example,
+<B>-maxmemory 4m</B> selects 4000000 bytes.  If <B>jpegtopnm</B> needs
+more space, it uses temporary files.
+
+<DT><B>-adobe</B>
+<DT><B>-notadobe</B>
+
+<DD>
+There are two variations on the CMYK (and likewise YCCK) color space that
+may be used in the JFIF input.  In the normal one, a zero value for a color
+components indicates absence of ink.  In the other, a zero value means the
+maximum ink coverage.  The latter is used by Adobe Photoshop when it creates
+a bare JFIF output file (but not when it creates JFIF output as part of
+Encapsulated Postscript output).  
+
+<P>These options tell <B>jpegtopnm</B> which version of the CMYK or
+YCCK color space the image uses.  If you specify neither,
+<B>jpegtopnm</B> tries to figure it out on its own.  In the present
+version, it doesn't try very hard at all: It just assumes the
+Photoshop version, since Photoshop and its emulators seem to be the
+main source of CMYK and YCCK images.  But with experience of use,
+future versions might be more sophisticated.
+
+<P>If the JFIF image does not indicate that it is CMYK or YCCK, these
+options have no effect.
+
+<P>If you don't use the right one of these options, the symptom is
+output that looks like a negative.
+
+<DT><B>-dumpexif</B>
+
+<DD>Print the interpreted contents of any Exif header in the input
+file to the Standard Error file.  Similar to the program <B>jhead</B>
+(not part of the Netpbm package).
+
+<p>This option was added in Netpbm 9.19 (September 2001).
+     
+<DT><B>-exif=</B><I>filespec</I>
+
+<DD>Extract the contents of the EXIF header from the input image and
+write it to the file <I>filespec</I>.  <I>filespec</I>=<B>-</B> means
+write it to Standard Output.  When you write the EXIF header to
+Standard Output, <B>jpegtopnm</B> does not output the converted image
+(which is what normally would go to Standard Output) at all.
+
+<p><B>jpegtopnm</B> writes the contents of the EXIF header
+byte-for-byte, starting with the two byte length field (which length
+includes those two bytes).
+
+<P>You can use this file as input to <B>pnmtojpeg</B> to insert an
+identical EXIF header into a new JFIF image.
+
+<P>If there is no EXIF header, <B>jpegtopnm</B> writes two bytes of
+binary zero and nothing else.
+
+<P>An EXIF header takes the form of a JFIF APP1 marker.  Only the
+first such marker within the JFIF header counts.
+
+<p>This option was added in Netpbm 9.19 (September 2001).
+
+<DT><B>-multiple</B>
+
+<dd>Read multiple JFIF images sequentially from the input stream.
+See <a href="#description">Description section</a> for details.
+
+<p>This option was new in Netpbm 10.23 (July 2004).
+
+<DT><B>-comments</B>
+
+<DD>
+Print any comments in the input file to the Standard Error file.
+<DT><B>-verbose</B>
+
+<DD>
+Print details about the conversion to the Standard Error file.
+<DT><B>-tracelevel</B><I> n</I>
+
+<DD>Turn on the JPEG library's trace messages to the Standard Error
+file.  A higher value of <I>n</I> gets more trace information.
+<B>-verbose</B> implies a trace level of at least 1.
+
+</DL>
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<P>This example converts the color JFIF file foo.jpg to a PPM file
+named foo.ppm:
+
+<PRE>
+    jpegtopnm foo.jpg &gt;foo.ppm
+</PRE>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>HINTS</H2>
+
+You can use <B>pnmquant</B> to color quantize the result, i.e. to
+reduce the number of distinct colors in the image.  In fact, you may
+have to if you want to convert the PPM file to certain other formats.
+<B>ppmdither</B> Does a more sophisticated quantization.
+
+<p>Use <B>pamscale</B> to change the dimensions of the resulting
+image.
+
+<P>Use <B>ppmtopgm </B> to convert a color JFIF file to a grayscale
+PGM file.
+
+<P>You can easily use these converters together.  E.g.:
+
+<PRE>
+    jpegtopnm foo.jpg | ppmtopgm | pamscale .25 &gt;foo.pgm
+</PRE>
+
+<P><B>-dct fast</B> and/or <B>-nosmooth</B> gain speed at a small
+sacrifice in quality.
+
+<P>If you are fortunate enough to have very fast floating point
+hardware, <B>-dct float</B> may be even faster than <B>-dct fast</B>.
+But on most machines <B>-dct float</B> is slower than <B>-dct int</B>;
+in this case it is not worth using, because its theoretical accuracy
+advantage is too small to be significant in practice.
+
+<P>Another program, <B>djpeg</B>, is similar.  <B>djpeg</B> is
+maintained by the Independent JPEG Group and packaged with the JPEG
+library which <B>jpegtopnm</B> uses for all its JPEG work.  Because of
+that, you may expect it to exploit more current JPEG features.  Also,
+since you have to have the library to run <B>jpegtopnm</B>, but not
+vice versa, <B>cjpeg</B> may be more commonly available.
+
+<P>On the other hand, <B>djpeg</B> does not use the NetPBM libraries
+to generate its output, as all the NetPBM tools such as
+<B>jpegtopnm</B> do.  This means it is less likely to be consistent
+with all the other programs that deal with the NetPBM formats.  Also,
+the command syntax of <B>jpegtopnm</B> is consistent with that of the
+other Netpbm tools, unlike <B>djpeg</B>.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>ENVIRONMENT</H2>
+
+<DL COMPACT>
+<DT><B>JPEGMEM</B>
+
+<DD>If this environment variable is set, its value is the default
+memory limit.  The value is specified as described for the
+<B>-maxmemory</B> option.  An explicit <B>-maxmemory </B> option
+overrides any <B>JPEGMEM</B>.
+
+</DL>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<p>
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="pnmtojpeg.html">pnmtojpeg</A></B>,
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>,
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+
+<p>
+<B>djpeg</B> man page,
+<B>cjpeg</B> man page,
+<B>jpegtran</B> man page,
+<B>rdjpgcom</B> man page,
+<B>wrjpgcom</B> man page,
+<B>jhead</B> man page
+
+<p>Wallace, Gregory K.  &quot;The JPEG Still Picture Compression
+Standard&quot;, Communications of the ACM, April 1991 (vol. 34,
+no. 4), pp. 30-44.
+
+<A NAME="lbAJ">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>Arithmetic coding is not offered for legal reasons.  The program
+could be much faster.
+
+<A NAME="lbAK">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p><B>jpegtopnm</B> and this manual were derived in large part from
+<B>djpeg</B>, by the Independent JPEG Group.  The program is otherwise
+by Bryan Henderson on March 19, 2000.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">HINTS</A>
+<LI><A HREF="#lbAH">ENVIRONMENT</A>
+<LI><A HREF="#lbAI">SEE ALSO</A>
+<LI><A HREF="#lbAJ">LIMITATIONS</A>
+<LI><A HREF="#lbAK">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/leaftoppm.html b/leaftoppm.html
new file mode 100644
index 00000000..f7bfb73e
--- /dev/null
+++ b/leaftoppm.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Leaftoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>leaftoppm</H1>
+Updated: 01 June 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+leaftoppm - convert Interleaf image format to PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>leaftoppm</B>
+[<I>leaffile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>leaftoppm</b> reads a PPM image as input and generates an
+Interleaf image file as output.
+
+<P>Interleaf is a now-defunct (actually purchased ca. 2000 by
+BroadVision) technical publishing software company.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>The program is copyright (C) 1994 by Bill O'Donnell.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/libnetpbm.html b/libnetpbm.html
new file mode 100644
index 00000000..f835376d
--- /dev/null
+++ b/libnetpbm.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>Libnetpbm manual</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>libnetpbm</H1>
+Updated: December 2003
+<BR>
+<?makeman .SH NAME ?>
+<?makeman libnetpbm \- general introduction to the netpbm library ?>
+<?makeman .SH DESCRIPTION ?>
+
+<p><b>libnetpbm</b> is a C programming library for reading, writing, and
+manipulating Netpbm images.  It also contains a few general graphics
+manipulation tools, but it is not intended to be a graphics tools
+library.  For graphics tools, Netpbm expects you to run the Netpbm
+programs.  From a C program, the <b>libnetpbm</b> function
+<b>pm_system()</b> makes this easy.  However, since it creates a
+process and execs a program, this may be too heavyweight for some
+applications.
+
+<p>To use <b>libnetpbm</b> services in your C program, #include the
+<b>pam.h</b> interface header file.  For historical reasons, you can
+also get by in some cases with <b>pbm.h</b>, <b>pgm.h</b>,
+<b>ppm.h</b>, or <b>pnm.h</b>, but there's really no point to that
+anymore.
+
+<p>The <b>libnetpbm</b> functions are divided into these categories:
+<ul>
+<li>PBM functions.  These have names that start with <b>pbm</b> and work
+only on PBM images.
+<li>PGM functions.  These have names that start with <b>pgm</b> and work
+only on PGM images.
+<li>PPM functions.  These have names that start with <b>ppm</b> and work
+only on PPM images.
+<li>PNM functions.  These have names that start with <b>pnm</b> and work on
+PBM, PGM, and PPM images.
+<li>PAM functions.  These also have names that start with <b>pnm</b> and 
+work on all the Netpbm image types.
+<li>PM functions.  These are utility functions that aren't specific to any
+particular image format.
+</ul>
+
+<p>For new programming, you rarely need to concern yourself with the
+PBM, PGM, PPM, and PNM functions, because the newer PAM functions do
+the same thing and are easier to use.  For certain processing of
+bi-level images, the PBM functions are significantly more efficient,
+though.
+
+<p><b>libnetpbm</b> has a backward compatibility feature that means a
+function designed to read one format can read some others too,
+converting on the fly.  In particular, a function that reads a PGM
+image will also read a PBM image, but converts it as it reads it so
+that for programming purposes, it is a PGM image.  Similarly, a
+function that reads PPM can read PBM and PGM as well.  And a function
+that reads PBM, PGM, or PPM can read a PAM that has an equivalent
+tuple type.
+
+<p>For each of the five classes of <b>libnetpbm</b> image processing
+functions, <b>libnetpbm</b> has in in-memory representation for a
+pixel, a row, and a whole image.  Do not confuse this format with the
+actual image format, as you would see in a file.  The <b>libnetpbm</b>
+in-memory format is designed to make programming very easy.  It is
+sometimes extremely inefficient, even more than the actual image
+format.  For example, a pixel that a PPM image represents with 3
+bytes, <b>libnetpbm</b>'s PAM functions represent with 16 bytes.  A
+pixel in a PBM image is represented by a single bit, but the PNM
+functions represent that pixel in memory with 96 bits.
+
+<p>See <a href="libnetpbm_ug.html">Libnetpbm User's Manual</a> for the
+basics on using <b>libnetpbm</b> in a program.
+
+<p>You can look up the reference information for a particular function
+in <a href="libnetpbm_dir.html">The libnetpbm Directory</a>.
+
+<P>Before Netpbm release 10 (June 2002), this library was split into
+four: libpbm, libpgm, libppm, and libpnm.  That's largely the reason
+for the multiple sets of functions and scattered documentation.
+
+</BODY>
+</HTML>
diff --git a/libnetpbm_dir.html b/libnetpbm_dir.html
new file mode 100644
index 00000000..bc37070a
--- /dev/null
+++ b/libnetpbm_dir.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Libnetpbm Directory</TITLE></HEAD>
+<BODY>
+<p>This is a directory of all the Netpbm programming library (<b>libnetpbm</b>)
+services.
+
+<p>For general information about <b>libnetpbm</b>, see
+<a href="libnetpbm.html">The Libnetpbm Manual</a>.
+
+<h1>PM functions</h1>
+<ul>
+  <li><a href="libpm.html#initialization">pm_init()</a>
+  <li><a href="libpm.html#file">pm_openr()</a>
+  <li><a href="libpm.html#file">pm_openw()</a>
+  <li><a href="libpm.html#file">pm_openr_seekable()</a>
+  <li><a href="libpm.html#file">pm_tell2()</a>
+  <li><a href="libpm.html#file">pm_tell()</a>
+  <li><a href="libpm.html#file">pm_seek2()</a>
+  <li><a href="libpm.html#file">pm_seek()</a>
+  <li><a href="libpm.html#file">pm_read_unknown_size()</a>
+  <li><a href="libpm.html#endian">pm_readchar()</a>
+  <li><a href="libpm.html#endian">pm_writechar()</a>
+  <li><a href="libpm.html#endian">pm_readbigshort()</a>
+  <li><a href="libpm.html#endian">pm_writebigshort()</a>
+  <li><a href="libpm.html#endian">pm_readbiglong()</a>
+  <li><a href="libpm.html#endian">pm_writebiglong()</a>
+  <li><a href="libpm.html#endian">pm_readlittleshort()</a>
+  <li><a href="libpm.html#endian">pm_writelittleshort()</a>
+  <li><a href="libpm.html#endian">pm_readlittelong()</a>
+  <li><a href="libpm.html#endian">pm_writelittelong()</a>
+  <li><a href="libpm.html#endian">pm_readcharu()</a>
+  <li><a href="libpm.html#endian">pm_writecharu()</a>
+  <li><a href="libpm.html#endian">pm_readbigshortu()</a>
+  <li><a href="libpm.html#endian">pm_writebigshortu()</a>
+  <li><a href="libpm.html#endian">pm_readbiglongu()</a>
+  <li><a href="libpm.html#endian">pm_writebiglongu()</a>
+  <li><a href="libpm.html#endian">pm_readlittleshortu()</a>
+  <li><a href="libpm.html#endian">pm_writelittleshortu()</a>
+  <li><a href="libpm.html#endian">pm_readlittelongu()</a>
+  <li><a href="libpm.html#endian">pm_writelittelongu()</a>
+  <li><a href="libsystem.html">pm_system()</a>
+  <li><a href="libtmpfile.html">pm_tmpfile()</a>
+  <li><a href="libpm.html#maxval">pm_maxvaltobits()</a>
+  <li><a href="libpm.html#maxval">pm_bitstomaxval()</a>
+  <li><a href="libpm.html#maxval">pm_lcm()</a>
+  <li><a href="libpm.html#gamma">pm_gamma709()</a>
+  <li><a href="libpm.html#gamma">pm_ungamma709()</a>
+  <li><a href="libpm.html#message">pm_message()</a>
+  <li><a href="libpm.html#message">pm_setusermessagefn()</a>
+  <li><a href="error.html#pm_error">pm_error()</a>
+  <li><a href="error.html#pm_errormsg">pm_errormsg()</a>
+  <li><a href="error.html#pm_setusererrormsgfn">pm_setusererrormsgfn()</a>
+  <li><a href="error.html#pm_setjmpbuf">pm_setjmpbuf()</a>
+  <li><a href="libpm.html#keyword">pm_keymatch()</a>
+  </ul>
+
+<h1>PAM Functions</h1>
+<ul>
+  <li><a href="libnetpbm_image.html#memory">pnm_allocpamarray()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_allocpamrow()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_allocpamrown()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_freepamarray()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_freepamrow()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_freepamrown()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_allocpamtuple()</a>
+  <li><a href="libnetpbm_image.html#memory">pnm_freepamtuple()</a>
+  <li><a href="libnetpbm_image.html#reading">pnm_readpaminit()</a>
+  <li><a href="libnetpbm_image.html#reading">pnm_readpamrow()</a>
+  <li><a href="libnetpbm_image.html#reading">pnm_readpamrown()</a>
+  <li><a href="libnetpbm_image.html#reading">pnm_readpam()</a>
+  <li><a href="libnetpbm_image.html#writing">pnm_writepaminit()</a>
+  <li><a href="libnetpbm_image.html#writing">pnm_writepamrow()</a>
+  <li><a href="libnetpbm_image.html#writing">pnm_writepamrown()</a>
+  <li><a href="libnetpbm_image.html#writing">pnm_writepam()</a>
+  <li><a href="libnetpbm_image.html#misc">pnm_checkpam()</a>
+  <li><a href="libnetpbm_image.html#misc">pnm_nextimage()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_YCbCrtuple()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_YCbCr_to_rgbtuple()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_lumin_factor[]</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_gammarown()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_ungammarown()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_applyopacityrown()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_unapplyopacityrown()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_creategammatransform()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_freegammatransform()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_createungammatransform()</a>
+  <li><a href="libnetpbm_image.html#transform">pnm_freeungammatransform()</a>
+</ul>
+
+<h1>PBM Functions</h1>
+<ul>
+  <li><a href="libpbm.html">pbm_init()</a>
+  <li><a href="libpbm.html">pbm_allocarray()</a>
+  <li><a href="libpbm.html">pbm_allocrow()</a>
+  <li><a href="libpbm.html">pbm_freearray()</a>
+  <li><a href="libpbm.html">pbm_freerow()</a>
+  <li><a href="libpbm.html">pbm_readpbminit()</a>
+  <li><a href="libpbm.html">pbm_readpbmrow()</a>
+  <li><a href="libpbm.html">pbm_readpbmrowpacked()</a>
+  <li><a href="libpbm.html">pbm_readpbm()</a>
+  <li><a href="libpbm.html">pbm_writepbminit()</a>
+  <li><a href="libpbm.html">pbm_writepbmrow()</a>
+  <li><a href="libpbm.html">pbm_writepbmrowpacked()</a>
+  <li><a href="libpbm.html">pbm_writepbm()</a>
+  <li><a href="libpbm.html">pbm_nextimage()</a>
+  <li><a href="libpbm.html">pbm_check()</a>
+</ul>
+<h1>PGM Functions</h1>
+<ul>
+  <li><a href="libpgm.html">pgm_init()</a>
+  <li><a href="libpgm.html">pgm_allocarray()</a>
+  <li><a href="libpgm.html">pgm_allocrow()</a>
+  <li><a href="libpgm.html">pgm_freearray()</a>
+  <li><a href="libpgm.html">pgm_freerow()</a>
+  <li><a href="libpgm.html">pgm_readpgminit()</a>
+  <li><a href="libpgm.html">pgm_readpgmrow()</a>
+  <li><a href="libpgm.html">pgm_readpgm()</a>
+  <li><a href="libpgm.html">pgm_writepgminit()</a>
+  <li><a href="libpgm.html">pgm_writepgmrow()</a>
+  <li><a href="libpgm.html">pgm_writepgm()</a>
+  <li><a href="libpgm.html">pgm_nextimage()</a>
+  <li><a href="libpgm.html">pgm_check()</a>
+  </ul>
+<h1>PPM Functions</h1>
+<ul>
+  <li><a href="libppm.html">ppm_init()</a>
+  <li><a href="libppm.html">ppm_allocarray()</a>
+  <li><a href="libppm.html">ppm_allocrow()</a>
+  <li><a href="libppm.html">ppm_freearray()</a>
+  <li><a href="libppm.html">ppm_freerow()</a>
+  <li><a href="libppm.html">ppm_readppminit()</a>
+  <li><a href="libppm.html">ppm_readppmrow()</a>
+  <li><a href="libppm.html">ppm_readppm()</a>
+  <li><a href="libppm.html">ppm_writeppminit()</a>
+  <li><a href="libppm.html">ppm_writeppmrow()</a>
+  <li><a href="libppm.html">ppm_writeppm()</a>
+  <li><a href="libppm.html">ppm_nextimage()</a>
+  <li><a href="libppm.html">ppm_check()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_GETR()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_GETG()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_GETB()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_ASSIGN()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_EQUAL()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_ISGRAY()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_DEPTH()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_LUMIN()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_CHROM_R()</a>
+  <li><a href="libppm.html#manipulating_pixels">PPM_CHROM_B()</a>
+  <li><a href="libppm.html#ppm_parsecolor">ppm_parsecolor()</a>
+  <li><a href="libppm.html#ppm_colorname">ppm_colorname()</a>
+  <li><a href="libppm.html#ppm_readcolornamefile">ppm_readcolornamefile()</a>
+  <li><a href="libppm.html#berlinkay">ppm_name_from_bk_color()</a>
+  <li><a href="libppm.html#berlinkay">ppm_bk_color_from_name()</a>
+  <li><a href="libppm.html#berlinkay">ppm_color_from_bk_color()</a>
+  <li><a href="libppm.html#berlinkay">ppm_bk_color_from_color()</a>
+
+  </ul>
+<h1>PNM Functions</h1>
+<ul>
+  <li><a href="libnetpbm_image.html">pnm_init()</a>
+  <li><a href="libpnm.html">pnm_allocarray()</a>
+  <li><a href="libpnm.html">pnm_allocrow()</a>
+  <li><a href="libpnm.html">pnm_freearray()</a>
+  <li><a href="libpnm.html">pnm_freerow()</a>
+  <li><a href="libpnm.html">pnm_readpnminit()</a>
+  <li><a href="libpnm.html">pnm_readpnmrow()</a>
+  <li><a href="libpnm.html">pnm_readpnm()</a>
+  <li><a href="libpnm.html">pnm_writepnminit()</a>
+  <li><a href="libpnm.html">pnm_writepnmrow()</a>
+  <li><a href="libpnm.html">pnm_writepnm()</a>
+  <li><a href="libpnm.html">pnm_nextimage()</a>
+  <li><a href="libpnm.html">pnm_check()</a>
+  <li><a href="libpnm.html">pnm_promoteformatrow()</a>
+  <li><a href="libpnm.html">pnm_promoteformat()</a>
+  <li><a href="libpnm.html">pnm_whitexel()</a>
+  <li><a href="libpnm.html">pnm_blackxel()</a>
+  <li><a href="libpnm.html">pnm_invertxel()</a>
+  <li><a href="libpnm.html">pnm_backgroundxelrow()</a>
+  <li><a href="libpnm.html">pnm_backgroundxel()</a>
+</ul>
+
+</BODY>
+</HTML>
diff --git a/libnetpbm_draw.html b/libnetpbm_draw.html
new file mode 100644
index 00000000..168ed0e0
--- /dev/null
+++ b/libnetpbm_draw.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>Libnetpbm PPM Drawing Function Manual</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>Libnetpbm PPM Drawing Function Manual</H1>
+Updated: September 2005
+<br>
+<p><A HREF="#toc">Table Of Contents</A>
+<?makeman .SH NAME ?>
+<?makeman libnetpbm_draw \- Libnetpbm PPM Drawing Function Manual ?>
+<?makeman .SH DESCRIPTION ?>
+
+<p>This reference manual covers functions in the <b>libnetpbm</b>
+library for drawing images, using the PPM image format and the
+<b>libnetpbm</b> in-memory image formats.
+
+<p>We actually have very little information here; this is mainly a
+framework for adding documentation later if someone becomes interested
+in this facility.
+
+
+<h2 id="functions">The Functions</h2>
+
+<p>The functions are all declared in the <b>ppmdraw.h</b> header file.
+
+<h3><b>ppmd_point_drawproc</b></h3>
+
+<h3><b>ppmd_setlinetype</b></h3>
+
+<h3><b>ppmd_setlineclip</b></h3>
+
+<h3><b>ppmd_line</b></h3>
+
+<h3><b>ppmd_spline3</b></h3>
+
+<h3><b>ppmd_polyspline</b></h3>
+
+<h3><b>ppmd_circle</b></h3>
+
+<h3><b>ppmd_filledrectangle</b></h3>
+
+<h3><b>ppmd_fill_init</b></h3>
+
+<h3><b>ppmd_fill_drawproc</b></h3>
+
+<h3><b>ppmd_fill</b></h3>
+
+<h3><b>ppmd_text</b></h3>
+
+<h3><b>ppmd_text_box</b></h3>
+
+
+<h2 id="fonts">Fonts</h2>
+
+<p>
+The <b>ppmd_text</b> and <b>ppmd_text_box</b> functions use fonts.
+You control the fonts using functions described in this section.
+There is one font that comes with Netpbm, called &quot;standard&quot;.
+It is built into the function library and is the default font.  You
+can create additional fonts and use them instead.
+
+<p>In a program that uses Netpbm drawing facilities, there is a
+&quot;current font.&quot; all drawing of text uses the current font.
+When the program starts, the current font is &quot;standard&quot;; you
+can change it after that by calling the <b>ppmd_setfont</b> function.
+
+<p>Other than a built-in font, a font lives in file in a format
+special to Netpbm called Ppmdfont.  The file typically has a name that
+ends in &quot;.ppmdfont&quot;.
+
+<p>Use the <b>ppmddumpfont</b> program to dump the contents of a
+Ppmdfont file in human readable format.
+
+<p>Use the <b>ppmdmkfont</b> program to generate the &quot;standard&quot;
+font as a Ppmdfont file.  You don't normally need to do this, becuase
+&quot;standard&quot; is built into <b>libnetpbm</b>.
+
+<p>Use the <b>ppmdcfont</b> program to turn a Ppmdfont file into a C
+source file that you can compile into a program as a built-in font.
+Though we don't give full instructions here on how to do that,
+<b>libnetpbm</b>'s built-in &quot;standard&quot; font is a good
+example.  In Netpbm source code, you will find the C source file
+<b>standardppmdfont.c</b>, which was generated from the file
+<b>standard.ppmdfont</b> by <b>ppmdcfont</b>.  You simply use a
+pointer to the structure that the C file defines as a font handle,
+just like one you would get from <b>ppmd_readfont</b>.
+
+
+<h2>Font File Format</h2>
+
+<p>The font file starts with the characters &quot;ppmdfont&quot; (without
+the quotation marks) in ASCII.
+
+<p>The rest of the format is not yet documented, but it generally
+describes, for each code point, a sequence of straight line plotting
+commands to form the glyph for the indicated character.  I.e. it is a
+vector, not raster, font.
+
+
+<h2 id="fontcontrol">Font Control Functions</h2>
+
+<p>These functions are declared in the header file <b>ppmdfont.h</b>.
+
+<h3><b>ppmd_readfont</b></h3>
+
+<p>This function associates a Ppmdfont file, which you identify by
+naming the Ppmdfont file, with a handle that you can use to identify
+the font to other functions.  Technically, this function reads the
+font into memory.
+
+<h3><b>ppmd_freefont</b></h3>
+
+<p>This function releases the handle that you get from
+<b>ppmd_readfont</b>.  It frees resources associated with it; you
+can't use the handle after this.
+
+<h3><b>ppmd_getfont</b></h3>
+
+<p>This function returns the handle of the currently selected font.
+
+<h3><b>ppmd_setfont</b></h3>
+
+<p>This function sets the currently selected font.  You identify the
+font to which to set it with a handle such as you get from
+<b>ppmd_readfont</b> or <b>ppmd_getfont</b>.
+
+<HR>
+<A NAME="toc">&nbsp;</A>
+<H2>Table Of Contents</H2>
+
+<ul>
+  <li><a href="#functions">The Functions</a>
+  <li><a href="#fonts">Fonts</a>
+  </ul>
+
+
+
+</BODY>
+</HTML>
diff --git a/libnetpbm_image.html b/libnetpbm_image.html
new file mode 100644
index 00000000..af87c3d6
--- /dev/null
+++ b/libnetpbm_image.html
@@ -0,0 +1,712 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>Libnetpbm Image Processing Manual</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>Libnetpbm Image Processing Manual</H1>
+Updated: December 2003
+<br>
+<p><A HREF="#toc">Table Of Contents</A>
+<?makeman .SH NAME ?>
+<?makeman libnetpbm_image \- overview of netpbm image-processing functions ?>
+<?makeman .SH DESCRIPTION ?>
+
+<p>This reference manual covers functions in the <b>libnetpbm</b>
+library for processing images, using the Netpbm image formats and the
+<b>libnetpbm</b> in-memory image formats.
+
+<p>For historical reasons as well as to avoid clutter, it does not cover
+the largely obsolete PBM, PGM, PPM, and PNM classes of
+<b>libnetpbm</b> functions.  For those, see <a href="libpbm.html">PBM
+Function Manual</a>, <a href="libpgm.html">PGM Function Manual</a>, <a
+href="libppm.html">PPM Function Manual</a>, and <a
+href="libpnm.html">PNM Function Manual</a>.  Note that you do <em>not</em>
+need those functions to process PBM, PGM, PPM, and PNM images.  The
+functions in this manual are sufficient for that.
+
+<p>The PPM Drawing function are covered separately in
+<a href="libnetpbm_draw.html">PPM Drawing Function Manual</a>.
+
+<p>For introductory and general information using <b>libnetpbm</b>, see
+<a href="libnetpbm_ug.html">Libnetpbm User's Guide</a>.
+
+<p><b>libnetpbm</b> also contains functions that are not specifically
+oriented toward processing image data.  Read about those in the
+<a href="libpm.html">Libnetpbm Utility Manual</a>.
+
+
+<p>To use these services, #include <b>pam.h</b>.
+
+
+<a name="types"></a>
+<H2>Types</h2>
+
+<p>Here are some important types that you use with <b>libnetpbm</b>:
+
+<dl>
+
+<dt>sample
+
+<dd>A sample of a Netpbm image.  See the format specifications -- as an
+example, the red intensity of a particular pixel of a PPM image is a
+sample.  This is an integer type.
+
+<dt>tuple
+
+<dd>A tuple from a PAM image or the PAM equivalent of a PNM image.
+See the PAM format specification -- as an example, a pixel of a PPM image
+would be a tuple.  A tuple is an array of samples.
+
+<dt>samplen
+
+<dd>Same as <b>sample</b>, except in normalized form.  This is a floating
+point type with a value in the range 0..1.  0 corresponds to a PAM/PNM
+sample value of 0.  1 corresponds to a PAM/PNM sample value equal to the
+image's maxval.
+
+<dt>tuplen
+
+<dd>The same as <b>tuple</b>, except composed of normalized samples
+(<b>samplen</b>) intead of regular samples (<b>sample</b>).
+
+</dl>
+
+
+
+<p>The main argument to most of the PAM functions is the address of
+a <b>pam</b> structure, which is defined as follows:
+
+<P>
+<a name="#pamstruct"></a>
+<B>struct pam {</B>
+<BR>
+<B>int </B><I>size</I>
+<BR>
+<B>int </B><I>len</I>
+<BR>
+<B>FILE *</B><I>file   </I>
+<BR>
+<B>int </B><I>format</I>
+<BR>
+<B>int </B><I>plainformat</I>
+<BR>
+<B>int </B><I>height</I>
+<BR>
+<B>int </B><I>width</I>
+<BR>
+<B>int </B><I>depth</I>
+<BR>
+<B>sample </B><I>maxval</I>
+<BR>
+<B>int </B><I>bytes_per_sample</I>
+<BR>
+<B>char </B><I>tuple_type</I><B>[256];</B>
+<B>}</B>
+
+<p>See <a href="libnetpbm_ug.html#pamstruct">The Libnetbm User's Guide</a>
+for information on the <b>pam</b> structure.
+
+
+<a name="macros"></a>
+<H2>Macros</h2>
+
+<B>PNM_MAXMAXVAL</B> is the maximum maxval that Netpbm images could
+historically have: 255.  Many programs aren't capable of handling Netpbm
+images with a maxval larger than this.  It's named this way for backward
+compatibility -- it had this name back when it was <em>the</em> maximum
+maxval.
+
+<p><B>PNM_OVERALLMAXVAL</b> is the maximum maxval that Netpbm images can
+have today (65535).
+
+<P><B>PBM_FORMAT</b>, <B>RPBM_FORMAT</b>, <B>PGM_FORMAT</b>,
+<B>RPGM_FORMAT</B>, <b>PPM_FORMAT</B>, <B>RPPM_FORMAT</B>, and
+<B>PAM_FORMAT</B> are the format codes of the various Netpbm formats.
+<B>RPBM_FORMAT</B> is the raw PBM format and <B>PBM_FORMAT</B> is the
+plain PBM format, and so on.  See the <i>format</i> member of <a
+href="libnetpbm_ug.html#pamstruct">the <b>pam</b> structure</a>.
+
+<p><B>PAM_FORMAT_TYPE(</B><I>format</I><B>)</B> gives the type of a
+format, given the format code.  The types of formats are PBM, PGM,
+PPM, and PAM and macros for the type codes are, respectively,
+PBM_TYPE, PGM_TYPE, PPM_TYPE, and PAM_TYPE.  Note that there are more
+format codes then there are format types because there are different
+format codes for the plain and raw subformats of each format.
+
+
+
+<a name="functions"></a>
+<H2>Functions</H2>
+
+<p>These interfaces are declared in <b>pam.h</b>.
+
+<a name="memory"></a>
+<h3>Memory Management</h3>
+<h4>Synopsis</h4>
+<P>
+<B>tuple ** pnm_allocpamarray(</B>
+<B>struct pam *</B><I>pamP</I><B>);</B>
+
+<P>
+<B>tuple * pnm_allocpamrow(</B>
+<B>struct pam *</B><I>pamP</I><B>);</B>
+
+<P>
+<B>void pnm_freepamarray(</B>
+<B>tuple **</B><I>tuplearray</I><B>,</B>
+<B>struct pam *</B><I>pamP</I><B>);</B>
+
+<P>
+<B>void pnm_freepamrow(</B>
+<B>tuple *</B><I>tuplerow</I><B>);</B>
+
+<P>
+<B>tuple * allocpamtuple(</B>
+<B>struct pam *</B><I>pamP</I><B>);</B>
+
+<P>
+<B>void pnm_freepamtuple(</B>
+<B>tuple </B><I>tuple</I>
+<B>);</B>
+
+<P>
+<B>tuplen * pnm_allocpamrown(</B>
+<B>struct pam *</B><I>pamP</I><B>);</B>
+
+<P>
+<B>void pnm_freepamrown(</B>
+<B>tuple *</B><I>tuplenrow</I><B>);</B>
+
+
+
+<h4>Description</h4>
+
+<p><B>pnm_allocpamarray()</B> allocates space for an array of tuples.
+<B>pnm_freepamarray()</B> frees an array space allocated by
+<B>pnm_allocpamarray()</B> or <B>pnm_readpam()</B>.
+
+<P><B>pnm_allocpamrow() </B> allocates space for a row of a PAM image,
+in basic form.  <B>pnm_freepamrow()</B> frees it.
+
+<p><b>pnm_allocpamrown()</b> is the same as <b>pnm_allocpamrow()</b> 
+except that it allocates space for a PAM row in the normalized form.
+<b>pnm_freepamrown()</b> is similarly like <b>pnm_freepamrow</b>.
+
+
+<a name="reading"></a>
+<h3>Reading Netpbm Files</h3>
+<h4>Synopsis</h4>
+
+<P>
+<B>void pnm_readpaminit(</B>
+<B>FILE *</B><I>file</I><B>,</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>int </B><I>size</I><B>);</B>
+
+<P>
+<B>void pnm_readpamrow(</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>tuple *</B><I>tuplerow</I><B>);</B>
+
+<P>
+<B>tuple ** pnm_readpam(</B>
+<B>FILE *</B><I>file</I><B>,</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<BR>
+<B>int </B><I>size</I><B>);</B>
+
+<P>
+<B>void pnm_readpamrown(</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>tuplen *</B><I>tuplenrow</I><B>);</B>
+
+
+<h4>Description</h4>
+
+<P><B>pnm_readpaminit()</B> reads the header of a Netpbm image.
+
+<p>See above for a general description of the <i>pamP</i> argument.
+
+<p><b>pnm_readpaminit()</b> returns the information from the header in
+the <B>*</B><I>pamP</I> structure.  It does not require any members of
+<B>*</B><I>pamP</I> through <b>tuple_type</b> to be set at invocation,
+and sets all of those members.  It expects all members after
+<b>tuple_type</b> to be meaningful.
+
+<p><I>size</I> is the size of the <B>*</B><I>pamP</I> structure as
+understood by the program processing the image.
+<b>pnm_readpaminit()</B> does not attempt to use or set any members of
+the structure beyond that.  The point of this argument is that the
+definition of the structure may change over time, with additional
+fields being added to the end.  This argument allows
+<b>pnm_readpaminit</b> to distinguish between a new program that wants
+to exploit the additional features and an old program that cannot (or
+a new program that just doesn't want to deal with the added
+complexity).  At a minimum, this size must contain the members up
+through <b>tuple_type</b>.  You should use the <b>PAM_STRUCT_SIZE</B>
+macro to compute this argument.
+E.g. <b>PAM_STRUCT_SIZE(tuple_type)</b>.
+
+<P>The function expects to find the image file positioned to the start
+of the header and leaves it positioned to the start of the raster.
+
+<P><B>pnm_readpamrow()</B> reads a row of the raster from a Netpbm
+image file.  It expects all of the members of the <B>*pamP</B>
+structure to be set upon invocation and does not modify any of them.
+It expects to find the file positioned to the start of the row in
+question in the raster and leaves it positioned just after it.  It
+returns the row as the array of tuples <I>tuplerow</I>, which must
+already have its column pointers set up so that it forms a C
+2-dimensional array.  The leftmost tuple is Element 0 of this array.
+
+<P><B>pnm_readpam()</B> reads an entire image from a PAM or PNM image
+file and allocates the space in which to return the raster.  It
+expects to find the file positioned to the first byte of the image and
+leaves it positioned just after the image.  <P> The function does not
+require <B>*</B><I>pamP</I> to have any of its members set and sets
+them all.  <I>size</I> is the storage size in bytes of the
+<B>*</B><I>pamP</I> structure, normally <B>sizeof(struct pam)</B>.
+
+<P>The return value is a newly allocated array of the rows of the image,
+with the top row being Element 0 of the array.  Each row is represented
+as <B>pnm_readpamrow()</B> would return.
+
+<P>The return value is also effectively a 3-dimensional C array of
+samples, with the dimensions corresponding to the height, width, and
+depth of the image, in that order.
+
+<P><B>pnm_readpam()</B> combines the functions of
+<B>pnm_allocpamarray()</B>, <B>pnm_readpaminit()</B>, and iterations
+of <B>pnm_readpamrow()</B>.  It may require more dynamic storage than
+you can afford.
+
+<p><b>pnm_readpamrown()</b> is like <b>pnm_readpamrow()</b> except that
+it returns the row contents in normalized form (composed of normalized
+tuples (<b>tuplen</b>) instead of basic form (<b>tuple</b>).
+
+<p><b>pnm_readpaminit()</b> and <b>pnm_readpam</b> abort the program
+with a message to Standard Error if the PAM or PNM image header is not
+syntactically valid, including if it contains a number too large to be
+processed using the system's normal data structures (to wit, a number
+that won't fit in a C 'int').
+
+<a name="writing"></a>
+<h3>Writing Netpbm Files</h3>
+<h4>Synopsis</h4>
+<P>
+<B>void pnm_writepaminit(</B>
+<B>struct pam *</B><I>pamP</I><B>);</B>
+
+<P>
+<B>void pnm_writepamrow(</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>const tuple *</B><I>tuplerow</I><B>);</B>
+
+<P>
+<B>void pnm_writepam(</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>const tuple * const *</B><I>tuplearray</I><B>);</B>
+
+<P>
+<B>void pnm_writepamrown(</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>const tuplen *</B><I>tuplerown</I><B>);</B>
+
+<p>
+<b>void pnm_formatpamrow(</b>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>const tuple *</B><I>tuplerow</I>
+<b>unsigned char * const <i>outbuf</i>,</b>
+<b>unsigned int * const <i>rowSizeP</i></b>
+<B>);</B>
+
+<h4>Description</h4>
+
+<P><B>pnm_writepaminit()</B> writes the header of a PAM or PNM image
+and computes some of the fields of the pam structure.
+
+<p>See above for a description of the <i>pamP</i> argument.
+
+<P>The following members of the <B>*</B><I>pamP</I> structure must be
+set upon invocation to tell the function how and what to write.
+<B>size</B>, <B>len</B>, <B>file</B>, <B>format</B>, <B>height</B>,
+<B>width</B>, <B>depth</B>, <B>maxval</B>, <B>tuple_type</B>.
+
+<P><B>pnm_writepaminit()</B> sets the <B>plainformat</B> and
+<B>bytes_per_sample</B> members based on the information supplied.
+
+<P><B>pnm_writepamrow()</B> writes a row of the raster into a PAM or
+PNM image file.  It expects to find the file positioned where the row
+should start and leaves it positioned just after the row.  The
+function requires all the elements of <B>*</B><I>pamP</I> to be set
+upon invocation and doesn't modify them.
+
+<P><I>tuplerow</I> is an array of tuples representing the row.  The
+leftmost tuple is Element 0 of this array.
+
+<p><B>pnm_writepam()</B> writes an entire PAM or PNM image to a PAM or
+PNM image file.  It expects to find the file positioned to where the
+image should start and leaves it positioned just after the image.  <P>
+The following members of the <B>*</B><I>pamP</I> structure must be set
+upon invocation to tell the function how and what to write:
+<B>size</B>, <B>len</B>, <B>file</B>, <B>format</B>, <B>height</B>,
+<B>width</B>, <B>depth</B>, <B>maxval</B>, <B>tuple_type</B>.
+
+<P><B>pnm_writepam()</B> sets the <B>plainformat</B> and
+<B>bytes_per_sample</B> members based on the information supplied.
+
+<P><I>tuplearray</I> is an array of rows such that you would pass to
+<B>pnm_writepamrow()</B>, with the top row being Element 0 of the
+array.
+
+<P><B>pnm_writepam()</B> combines the functions of
+<B>pnm_writepaminit()</B>, and iterations of <B>pnm_writepamrow()</B>.
+Its raster input may be more storage than you can afford.
+
+<p><b>pnm_writepamrown()</b> is like <b>pnm_writepamrow()</b> except that
+it takes the row contents in normalized form (composed of normalized
+tuples (<b>tuplen</b>) instead of basic form (<b>tuple</b>).
+
+<p><b>pnm_formatpamrow()</b> is like <b>pnm_writepamrow()</b>, except
+that instead of writing a row to a file, it places the same bytes that
+would go in the file in a buffer you supply.  There isn't an equivalent
+function to construct an image header; i.e. there is no analog to
+<b>pnm_writepaminit()</b>.  But the header format, particularly for
+PAM, is so simple that you can easily build it yourself with standard
+C library string functions.
+
+<p><b>pnm_formatpamrow()</b> was new in Netpbm 10.25 (October 2004).
+
+<h3 id="transform">Transforming Pixels</h3>
+
+<h4>Synopsis</h4>
+
+
+<P>
+<B>void pnm_YCbCrtuple(</B>
+<br>
+<B>tuple</B><I>tuple</I><B>,</B>
+<B>double *</B><I>YP</I><B>,</B>
+<B>double *</B><I>CrP</I><B>,</B>
+<B>double *</B><I>CbP</I><B>);</B>
+
+<p>
+<b>void pnm_YCbCr_to_rgbtuple(
+<br>
+const struct pam * const <i>pamP</i>,
+<br>
+   tuple              const <i>tuple</i>,
+<br>
+   double             const <i>Y</i>,
+   double             const <i>Cb</i>, 
+   double             const <i>Cr</i>,
+<br>
+   int *              const <i>overflowP</i>
+);
+</b>
+
+<p>
+<b>extern double pnm_lumin_factor[3];</b>
+
+<p>
+<b>
+void
+pnm_normalizetuple(
+<br>
+  struct pam * const <i>pamP</i>,
+  tuple        const <i>tuple</i>,
+  tuplen       const <i>tuplen</i>);
+</b>
+
+<p>
+<b>
+void
+pnm_unnormalizetuple(
+<br>
+  struct pam * const <i>pamP</i>,
+  tuplen       const <i>tuplen</i>,
+  tuple        const <i>tuple</i>);
+</b>
+
+<p>
+<b>
+void
+pnm_normalizeRow(
+<br>
+  struct pam *       const <i>pamP</i>,
+  const tuple *      const <i>tuplerow</i>,
+  pnm_transformMap * const <i>transform</i>,
+  tuplen *           const <i>tuplenrow</i>);
+</b>
+
+<p>
+<b>
+void
+pnm_unnormalizeRow(
+<br>
+  struct pam *       const <i>pamP</i>,
+  const tuplen *     const <i>tuplenrow</i>,
+  pnm_transformMap * const <i>transform</i>,
+  tuple *            const <i>tuplerow</i>);
+</b>
+
+<p>
+<b>
+void
+pnm_gammarown(
+<br>
+  struct pam * const <i>pamP</i>,
+  tuplen *     const <i>row</i>
+);
+</b>
+
+<p>
+<b>
+void
+pnm_ungammarown(
+<br>
+  struct pam * const <i>pamP</i>,
+  tuplen *     const <i>row</i>
+);
+</b>
+
+<p>
+<b>
+void
+pnm_applyopacityrown(
+<br>
+  struct pam * const <i>pamP</i>,
+  tuplen *     const <i>tuplenrow</i>
+);
+</b>
+
+<p>
+<b>
+void
+pnm_unapplyopacityrown(
+<br>
+  struct pam * const <i>pamP</i>,
+  tuplen *     const <i>tuplenrow</i>
+);
+
+</b>
+
+<p>
+<b>
+pnm_transformMap *
+pnm_creategammatransform(
+<br>
+  const struct pam * const <i>pamP</i>
+);
+</b>
+
+<p>
+<b>
+void
+pnm_freegammatransform(
+<br>
+  const pnm_transformMap * const <i>transform</i>,
+  const struct pam *       const <i>pamP</i>
+);
+</b>
+
+<p>
+<b>
+pnm_transformMap *
+pnm_createungammatransform(
+<br>
+  const struct pam * const <i>pamP</i>
+);
+</b>
+
+<p>
+<b>
+void
+pnm_freeungammatransform(
+<br>
+  const pnm_transformMap * const <i>transform</i>,
+  const struct pam *       const <i>pamP</i>
+);
+</b>
+
+
+<h4>Description</h4>
+
+<P><B>pnm_YCbCrtuple()</B> returns the Y/Cb/Cr luminance/chrominance
+representation of the color represented by the input tuple, assuming
+that the tuple is an RGB color representation (which is the case if it
+was read from a PPM image).  The output components are based on the
+same scale (maxval) as the input tuple, but are floating point
+nonetheless to avoid losing information due to rounding.  Divide them
+by the maxval to get normalized [0..1] values.
+
+<p><b>pnm_YCbCr_to_rgbtuple()</b> does the reverse.  <i>pamP</i>
+indicates the maxval for the returned <i>tuple</i>, and the <i>Y</i>,
+<i>Cb</i>, and <i>Cr</i> arguments are of the same scale.
+
+<p>It is possible for <i>Y</i>, <i>Cb</i>, and <i>Cr</i> to describe a
+color that cannot be represented in RGB form.  In that case,
+<b>pnm_YCbCr_to_rgbtuple()</b> chooses a color as close as possible
+(by clipping each component to 0 and the maxval) and sets *overflowP
+true.  It otherwise sets *overflowP false.
+
+
+<b>pnm_lumin_factor[]</b> is the factors (weights) one uses to compute
+the intensity of a color (according to some standard -- I don't know
+which).  pnm_lumin_factor[0] is for the red component, [1] is for the
+green, and [2] is for the blue.  They add up to 1.
+
+<p><b>pnm_gammarown()</b> and <b>pnm_ungammarown()</b> apply and unapply
+gamma correction to a row of an image using the same transformation as
+<a href="libpm.html#gamma"><b>pm_gamma()</b> and <b>pm_ungamma()</b></a>.
+Note that these operate on a row of normalized tuples (<b>tuplen</b>,
+not <b>tuple</b>).
+
+<p><b>pnm_applyopacity()</b> reduces the intensity of samples in accordance
+with the opacity plane of an image.  The opacity plane, if it exists, tells
+how much of the light from that pixel should show when the image is composed
+with another image.  You use <b>pnm_applyopacity()</b> in preparation for
+doing such a composition.  For example, if the opacity plane says that the
+top half of the image is 50% opaque and the bottom half 100% opaque,
+<b>pnm_applyopacity()</b> will reduce the intensity of each sample of each
+tuple (pixel) in the upper half of the image by 50%, and leave the rest
+alone.
+
+<p>If the image does not have an opacity plane (i.e. its tuple type is
+not one that <b>libnetpbm</b> recognizes as having an opacity plane),
+<b>pnm_applyopacity()</b> does nothing (which is the same as assuming
+opacity 100%).  The tuple types that <b>libnetpbm</b> recognizes as
+having opacity are <B>RGB_ALPHA</B> and <B>GRAYSCALE_ALPHA</B>.
+
+<p><b>pnm_unapplyopacity()</b> does the reverse.  It assumes the
+intensities are already reduced according to the opacity plane, and
+raises back to normal.
+
+<p><b>pnm_applyopacity()</b> works on (takes as input and produces as
+output) <em>normalized</em>, <em>intensity-proportional</em> tuples.
+That means you will typically read the row from the image file with
+<b>pnm_readpamrown()</b> and then gamma-correct it with
+<b>pnm_ungammarown()</b>, and then do <b>pnm_applyopacity()</b>.  You
+then manipulate the row further (perhaps add it with other rows you've
+processed similarly), then do <b>pnm_unapplyopacity()</b>, then
+<b>pnm_gammarown()</b>, then <b>pnm_writegammarown()</b>.
+
+<p><b>pnm_normalizeTuple()</b> and <b>pnm_unnormalizeTuple()</b>
+convert between a <b>tuple</b> data type and a <b>tuplen</b> data
+type.  The former represents a sample value using the same unsigned
+integer that is in the PAM image, while the latter represents a
+sample value as a number scaled by the maxval to the range 0..1.
+I.e. <b>pnm_normalizeTuple()</b> divides every sample value by the
+maxval and <b>pnm_unnormalizeTuple()</b> multiples every sample by the
+maxval.
+
+<p><b>pnm_normalizeRow()</b> and <b>pnm_unnormalizeRow()</b> do the same
+thing on an entire tuple row, but also have an extra feature:  You can
+specify a transform function to be applied in addition.  Typically, this
+is a gamma transform function.  You can of course more easily apply your
+transform function separately from normalizing, but doing it all at once
+is usually way faster.  Why?  Because you can use a lookup table that
+is indexed by an integer on one side and produces a floating point number
+on the other.  To do it separately, you'd either have to do floating point
+arithmetic on the normalized value or do the transform on the integer
+values and lose a lot of precision.
+
+<p>If you don't have any transformation to apply, just specify
+<b>NULL</b> for the <i>transform</i> argument and the function will
+just normalize (i.e. divide or multiply by the maxval).
+
+<p>Here's an example of doing a transformation.  The example composes
+two images together, something that has to be done with intensity-linear
+sample values.
+
+<pre>
+
+pnm_transformMap * const transform1 = pnm_createungammatransform(&amp;inpam1);
+pnm_transformMap * const transform2 = pnm_createungammatransform(&amp;inpam2);
+pnm_transformMap * const transformOut = pnm_creategammatransform(&amp;outpam);
+
+pnm_readpamrow(&amp;inpam1, inrow1);
+pnm_readpamrow(&amp;inpam2, inrow2);
+
+pnm_normalizeRow(&amp;inpam1, inrow1, transform1, normInrow1);
+pnm_normalizeRow(&amp;inpam2, inrow2, transform2, normInrow2);
+
+for (col = 0; col &lt; outpam.width; ++col)
+    normOutrow[col] = (normInrow1[col] + normInrow2[col])/2;
+
+pnm_unnormalizeRow(&amp;outpam, normOutrow, transformOut, outrow);
+
+pnm_writepamrow(&amp;outpam, outrow);
+
+</pre>
+
+<p>To specify a transform, you must create a special
+<b>pnm_transformMap</b> object and pass it as the <i>transform</i>
+argument.  Typically, your transform is a gamma transformation because
+you want to work in intensity-proportional sample values and the PAM
+image format uses gamma-adjusted ones.  In that case, just use
+<b>pnm_creategammtransform()</b> and
+<b>pnm_createungammatransform()</b> to create this object and don't
+worry about what's inside it.
+
+<p><b>pnm_creategammatransform()</b> and
+<b>pnm_createungammatransform()</b> create objects that you use with
+<b>pnm_normalizeRow()</b> and <b>pnm_unnormalizeRow()</b> as described
+above.  The created object describes a transform that applies or
+reverses the ITU-R Recommendation BT.709 gamma adjustment that is used
+in PAM visual images and normalizes or unnormalizes the sample values.
+
+<b>pnm_freegammatransform()</b> and <b>pnm_freeungammatransform()</b>
+destroy the objects.
+
+
+<h3 id="misc">Miscellaneous</h3>
+
+<h4>Synopsis</h4>
+
+
+<P>
+<B>void pnm_checkpam(</B>
+<B>struct pam *</B><I>pamP</I><B>,</B>
+<B>const enum pm_check_type </B><I>check_type</I><B>,</B>
+<B>enum pm_check_code *</B><I>retvalP</I><B>);</B>
+
+<P>
+<B>void pnm_nextimage(</B>
+<B>FILE *</B><I>file</I><B>,</B>
+<B>int * const </B><I>eofP</I><B>);</B>
+
+<h4>Description</h4>
+
+<P><B>pnm_checkpam()</B> checks for the common file integrity error
+where the file is the wrong size to contain the raster, according to
+the information in the header.
+
+<P><B>pnm_nextimage()</B>positions a Netpbm image input file to the
+next image in it (so that a subsequent <B>pnm_readpaminit()</B> reads
+its header).
+
+
+<HR>
+<A NAME="toc">&nbsp;</A>
+<H2>Table Of Contents</H2>
+
+<ul>
+  <li><a href="#types">Types</a>
+  <li><a href="#macros">Macros</a>
+  <li><a href="#functions">Functions</a>
+  <ul>
+    <li><a href="#memory">Memory Management</a>
+    <li><a href="#reading">Reading Netpbm Files</a>
+    <li><a href="#writing">Writing Netpbm Files</a>
+    <li><a href="#transform">Transforming Pixels</a>
+    <li><a href="#misc">Miscellaneous</a>
+    </ul>
+  </ul>
+
+
+
+</BODY>
+</HTML>
diff --git a/libnetpbm_ug.html b/libnetpbm_ug.html
new file mode 100644
index 00000000..6eb3081b
--- /dev/null
+++ b/libnetpbm_ug.html
@@ -0,0 +1,303 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>Libnetpbm Image Processing Manual</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>Libnetpbm User's Guide</H1>
+<?makeman .SH NAME ?>
+<?makeman libnetpbm_ug \- netpbm sample code ?>
+
+<p>The Libnetpbm programming library is part of <a
+href="index.html">Netpbm</a>.
+
+<H2>Example</H2>
+
+<p>Here is an example of a C program that uses <b>libnetpbm</b> to read a
+Netpbm image input and produce a Netpbm image output.
+
+<pre>
+   /* Example program fragment to read a PAM or PNM image
+      from stdin, add up the values of every sample in it
+      (I don't know why), and write the image unchanged to
+      stdout. */
+
+   #include &lt;pam.h&gt;
+
+   struct pam inpam, outpam;
+   unsigned int row;
+
+   pnm_init(&amp;argc, argv);
+
+   pnm_readpaminit(stdin, &amp;inpam, PAM_STRUCT_SIZE(tuple_type));
+
+   outpam = inpam; outpam.file = stdout;
+
+   pnm_writepaminit(&amp;outpam);
+
+   tuplerow = pnm_allocpamrow(&amp;inpam);
+
+   for (row = 0; row &lt; inpam.height; row++) {
+       unsigned int column;
+       pnm_readpamrow(&amp;inpam, tuplerow);
+       for (column = 0; column &lt; inpam.width; ++column) {
+           unsigned int plane;
+           for (plane = 0; plane &lt; inpam.depth; ++plane) {
+               grand_total += tuplerow[column][plane];
+           }
+       }
+       pnm_writepamrow(&amp;outpam, tuplerow); }
+
+   pnm_freepamrow(tuplerow);
+
+</pre>
+
+<H2>Guide To Using Libnetpbm</H2>
+
+<h3><b>libnetpbm classes</b></h3>
+
+<p>In this section, we cover only the PAM functions in
+<b>libnetpbm</b>.  As described in <a href="libnetpbm.html">the
+introduction to <b>libnetpbm</b></a>, there are four other classes of
+image processing functions (PBM, PGM, PPM, PNM).  They are less
+important, since you can do everything more easily with the PAM
+functions, but if you're working on old programs or need the extra
+efficiency those older functions can sometimes provide, you can find
+them documented as here: <a href="libpbm.html">PBM Function Manual</a>,
+<a href="libpgm.html">PGM Function Manual</a>,<a
+href="libppm.html">PPM Function Manual</a>, and <a
+href="libpnm.html">PNM Function Manual</a>.
+
+<p>In case you're wondering, what makes the PAM functions easier to use
+is:
+<ul>
+<li>Each function handles all the formats.  It does so without converting
+to a common format, so your program can treat the different formats 
+differently if it wants.  However, the interface makes it easy for your
+program to ignore the differences between the formats if that's what you
+want.
+
+<li>The PAM function parameter lists convey most information about the
+image with which you're working with a single <b>pam</b> structure,
+which you can build once and use over and over, whereas the older
+functions require you to pass up to 5 pieces of image information
+(height, width, etc.) as separate arguments to every function.
+</ul>
+
+<H3 id="pamstruct">THE pam STRUCTURE</H3>
+
+<P>The PAM functions take most of their arguments in the form of a
+single <B>pam</B> structure.  This is not an opaque object, but just a
+convenient way to organize the information upon which most the
+functions depend.  So you are free to access or set the elements of
+the structure however you want.  But you will find in most cases it is
+most convenient to call <B>pnm_readpaminit()</B> or
+<B>pnm_writepaminit()</B> to set the fields in the <B>pam</B>
+structure before calling any other pam functions, and then just to
+pass the structure unchanged in all future calls to pam functions.
+
+<P>The fields are:
+
+<DL COMPACT>
+<DT><B>size</B>
+<DD>
+The storage size in bytes of this entire structure.
+
+<DT><B>len</B>
+
+<DD>The length, in bytes, of the information in this structure.  The
+information starts in the first byte and is contiguous.  This cannot
+be greater than <B>size</B>.  <B>size</B> and <B>len</B> can be used
+to make programs compatible with newer and older versions of the
+Netpbm libraries.
+
+<DT><B>file</B>
+
+<DD>The file.
+
+<DT><B>format</B>
+
+<DD>The format code of the image.  This is <B>PAM_FORMAT</B>
+unless the PAM image is really a view of a PBM, PGM, or PPM image.
+Then it's <B>PBM_FORMAT</B>, <B>RPBM_FORMAT</B>, etc.
+<p>
+There is an important quirk in the meaning of this member when you use
+the pam structure to write an image: Only the type portion of it is
+meaningful.  A Netpbm format code conveys two pieces of information:
+The format type (PBM, PGM, PPM, or PAM) and the plainness (plain PBM
+vs raw PBM, etc.).  But when writing, <b>libnetpbm</b> ignores the
+plainness part and instead takes the plainness from the
+<b>plainformat</b> member.  So <B>PBM_FORMAT</B> and
+<B>RPBM_FORMAT</B> are identical when writing.
+<p>
+This quirk exists for historical purposes; it's necessary for consistency
+with the older functions such as <b>pnm_writepnmrow()</b> whose
+<i>format</i> and <i>forceplain</i> arguments are analogous.
+<p>
+Before Netpbm 10.32 (February 2006), <b>libnetpbm</b> did not ignore the
+plainness.  This caused many programs to behave poorly, producing plain
+format output when they should, for backward compatibility at the very
+least, produce raw format output.
+<p>
+A common way to use this member is to copy it and the
+<b>plainformat</b> member from a pam for an input image to a pam for
+an output image.  When you do that, your output image will be raw
+format regardless of whether your input image was plain or raw, and
+this is the conventional behavior of Netpbm programs.
+
+<DT><B>plainformat</B>
+
+<DD>This is a boolean value (0 = false, 1 = true), meaningful only
+when writing an image file.  It means to write in the plain (text)
+version of the format indicated by <b>format</b> as oppposed to the
+raw (binary) version.  Note that the format code in <b>format</b>
+would appear to completely specify the format, making
+<b>plainformat</b> redundant.  But see the description of
+<b>format</b> for why that isn't true.
+<p>
+Until Netpbm 10.32 (Februrary 2006), this was defined a little differently.
+The <b>format</b> member did in fact completely identify the format and
+<b>plainformat</b> was redundant and existed as a separate member only
+for computational speed.  But this was inconsistent with the older
+<b>libnetpbm</b> interface (e.g. <b>pnm_writepnm()</b>, and it made it
+difficult to write backward compatible programs.  Before Netpbm 10.32,
+it affected reading as well as writing.
+<p>
+<b>libnetpbm</b> image reading functions set this field to false, for your
+convenience in building an output image pam from an input image pam.
+
+<DT><B>height</B>
+
+<DD>The height of the image in rows.
+
+<DT><B>width</B>
+
+<DD>The width of the image in number of columns (tuples per row).
+
+<DT><B>depth</B>
+
+<DD>The depth of the image (degree of or number of samples in each tuple).
+
+<DT><B>maxval</B>
+
+<DD>The maxval of the image.  See definitions in <A HREF="pam.html">pam</A>.
+
+<DT><B>bytes_per_sample</B>
+
+<DD>The number of bytes used to represent each sample in the image
+file.  See the format definition in <A HREF="pam.html">pam</A>.  This
+is entirely redundant with <B>maxval</B>.  It exists as a separate
+member for computational speed.
+
+<DT><B>tuple_type</B>
+
+<DD>The tuple type of the image.  See definitions in <A
+HREF="pam.html">pam</A>.  Netpbm does not define any values for this
+except the following, which are used for a PAM image which is really a
+view of a PBM, PGM, or PPM image: <B>PAM_PBM_TUPLETYPE</B>,
+<B>PAM_PGM_TUPLETYPE</B>, <B>PAM_PPM_TUPLETYPE</B>.
+
+<DT><B>allocation_depth</B>
+
+<dd>The number of samples for which memory is allocated for any tuple
+associated with this PAM structure.  This must be at least as great as
+'depth'.  Only the first 'depth' of the samples of a tuple are
+meaningful.
+
+<p>The purpose of this is to make it possible for a program to change
+the type of a tuple to one with more or fewer planes.
+
+<p>0 means the allocation depth is the same as the image depth.
+
+<dt><b>comments_p</b>
+
+<dd>Pointer to a pointer to a NUL-terminated ASCII string of comments.
+When reading an image, this contains the comments from the image's PAM
+header; when writing, the image gets these as comments, right after
+the magic number line.  The individual comments are delimited by
+newlines and are in the same order as in the PAM header.  The &quot;#&quot;
+at the beginning of a PAM header line that indicates the line is a comment
+is not part of the comment.
+
+<p>On output, NULL means no comments.
+
+<p>On input, libnetpbm mallocs storage for the comments and placed the
+pointer at *comment_p.  Caller must free it.  NULL means libnetpbm
+does not return comments and does not allocate any storage.
+
+<p>Examples:
+
+<pre>
+<code>
+    const char * comments;
+    ...
+    pam.comment_p = &amp;comments;
+    pnm_readpaminit(fileP, &amp;pam, PAM_STRUCT_SIZE(comment_p));
+    printf(&quot;The comments are:\n&quot;);
+    printf(&quot;%s&quot;, comments)
+    free(comments);
+</code>
+</pre>
+
+<pre>
+<code>
+    const char * comments;
+    ...
+    comments = strdup(&quot;This is a comment 1\nThis is comment 2\n&quot;);
+    pam.comment_p = &amp;comments;
+    pnm_writepaminit(&amp;pam);
+    free(comments);
+</code>
+</pre>
+
+<p>This works only for PAM images.  If you read a PNM image, you
+always get back a null string.  If you write a PNM image, you always get
+an image that contains no comments.
+
+<p>This member does not exist before Netpbm 10.35 (August 2006).  Before that,
+there is no way with libnetpbm to get or set comments.  The macro
+<B>PAM_HAVE_COMMENT_P</B> is defined in <b>pam.h</b> where the member
+exists.
+
+</DL>
+
+
+
+<H3 id="plainvsraw">PLAIN VERSUS RAW FORMAT</H3>
+
+<P>The PNM formats each come in two varieties: the older plain (text)
+format and the newer raw (binary) format.  There are different format
+codes for the plain and raw formats, but which of the two formats the
+pnm and pam functions write is independent of the format code you pass
+to them.
+
+<P>The pam functions always write raw formats.  If you specify the format
+code for a plain format, a pam function assumes instead the raw
+version of that format.
+
+<P>The pnm functions choose between plain and raw based on the
+<I>forceplain</I> parameter that every write-type pnm function has.
+If this boolean value is true, the function writes the plain version
+of the format specified by the format code.  If it is false, the
+function writes the raw version of the format specified by the format
+code.
+
+<P>We are trying to stamp out the older plain formats, so it would be
+a wise choice not to write a program that sets <I>forceplain</I> true
+under any circumstance.  A user who needs a plain format can use the
+<B>pnmtoplainpnm</B> program to convert the output of your program to
+plain format.
+
+<H3>Reference</h3>
+
+<p>The <a href="libnetpbm_image.html">Libnetpbm Netpbm Image
+Processing Manual</a> describes the the <b>libnetpbm</b> functions for
+processing image data.
+
+<p>The <a href="libpm.html">Libnetpbm Utility Manual</a>
+describes the functions that are not specifically related to the Netpbm
+image formats.
+
+</BODY>
+</HTML>
diff --git a/libpbm.html b/libpbm.html
new file mode 100644
index 00000000..23005f31
--- /dev/null
+++ b/libpbm.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>User manual for old pbm functions</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+
+<H1>pbm Functions</H1>
+Updated: 22 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+libpbm - libnetpbm functions to read and write PBM image files
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>#include &lt;pbm.h&gt;</B>
+
+<P>
+<B>bit **pbm_allocarray(int</B>
+<I>cols</I><B>,  int </B><I>rows</I><B>);</B>
+
+<P>
+<B>bit *pbm_allocrow(int</B>
+<I>cols</I><B>);</B>
+
+<P>
+<B>pbm_freearray(bit </B>
+<B>**</B><I>bits</I><B>, int </B><I>rows</I><B>);</B>
+
+<P>
+<B>pbm_freerow(bit</B>
+<B>*</B><I>bitrow</I><B>);</B>
+
+<P>
+<B>void pbm_readpbminit(FILE *</B>
+<I>fp</I><B>,
+int *</B><I>colsP</I><B>,
+int *</B><I>rowsP</I><B>,
+int *</B><I>formatP</I><B>);</B>
+
+<P>
+<B>void pbm_readpbmrow(FILE *</B>
+<I>fp</I><B>,
+bit *</B><I>bitrow</I><B>,
+int </B><I>cols</I><B>,
+int </B><I>format</I><B>);</B>
+
+<P>
+<B>void pbm_readpbmrow_packed(FILE *</B>
+<I>fp</I><B>,</B>
+
+<BR>
+
+<B>unsigned char * const </B><I>packed_bits</I><B>,</B>
+<B>const int </B><I>cols</I><B>,</B>
+<B>const int </B><I>format</I><B>);</B>
+
+<P>
+<B>void bit** pbm_readpbm(FILE *</B>
+<I>fp</I><B>, int *</B><I>colsP</I><B>, int *</B><I>rowsP</I><B>);</B>
+
+<P>
+<B>void pbm_writepbminit(FILE *</B>
+<I>fp</I><B>,
+int </B><I>cols</I><B>,
+int </B><I>rows</I><B>,
+int </B><I>forceplain</I><B>);</B>
+
+<P>
+<B>void pbm_writepbmrow(FILE *</B>
+<I>fp</I><B>,
+bit *</B><I>bitrow</I><B>,
+int </B><I>cols</I><B>,
+int </B><I>forceplain</I><B>);</B>
+
+<P>
+<B>void pbm_writepbmrow_packed(FILE *</B>
+<I>fp</I><B>,</B>
+
+<BR>
+
+<B>unsigned char * const </B><I>packed_bits</I><B>,</B>
+<B>const int </B><I>cols</I><B>,</B>
+<B>const int </B><I>forceplain</I><B>);</B>
+
+<P>
+<B>void pbm_writepbm(FILE *</B>
+<I>fp</I><B>,
+bit **</B><I>bits</I><B>,
+int </B><I>cols</I><B>,
+int </B><I>rows</I><B>,
+int </B><I>forceplain</I><B>);</B>
+
+<P>
+<B>#define pbm_packed_bytes(</B><I>cols</I><B>) ...</B>
+
+<P>
+<B>void pbm_nextimage(</B>
+<B>FILE *</B><I>file</I><B>,</B>
+<B>int * const </B><I>eofP</I><B>);</B>
+
+<P>
+<B>void pbm_check(</B>
+<B>FILE * </B><I>file</I><B>,</B>
+<B>const enum pm_check_type </B><I>check_type</I><B>,</B>
+<B>const int </B><I>format</I><B>,</B>
+<B>const int </B><I>cols</I><B>,</B>
+<B>const int </B><I>rows</I><B>,</B>
+<B>enum pm_check_code * const </B><I>retval</I><B>);</B>
+
+
+<A NAME="lbAK">&nbsp;</A>
+<H2>DESCRIPTION - PBM-SPECIFIC ROUTINES</H2>
+
+<p>These library functions are part of <a href="index.html">Netpbm</a>.
+
+<A NAME="lbAL">&nbsp;</A>
+<H3>TYPES AND CONSTANTS</H3>
+
+<B>typedef ... bit;</B>
+
+<P>
+<B>#define PBM_WHITE ...</B>
+
+<P>
+<B>#define PBM_BLACK ...</B>
+
+<P>Each <B>bit</B> should contain only the values of <B>PBM_WHITE</B>
+or <B>PBM_BLACK</B>.
+
+<P><B>#define PBM_FORMAT ...</B>
+
+<P><B>#define RPBM_FORMAT ...</B>
+
+<P><B>#define PBM_TYPE PBM_FORMAT</B>
+
+<P><B>#define </B>
+<B>PBM_FORMAT_TYPE(</B><I>f</I><B>) ...</B>
+
+<P>These are for distinguishing different file formats and types.
+
+<A NAME="lbAM">&nbsp;</A>
+<H3>INITIALIZATION</H3>
+
+<p><b>pbm_init()</b> is identical to <b>pm_init()</b>.
+
+<A NAME="lbAN">&nbsp;</A>
+<H3>MEMORY MANAGEMENT</H3>
+
+<B>pbm_allocarray()</B> allocates an array of bits.
+<B>pbm_allocrow()</B> allocates a row of the given number of bits.
+<B>pbm_freearray()</B> frees the array allocated with
+<B>pbm_allocarray()</B> containing the given number of rows.
+<B>pbm_freerow()</B> frees a row of bits.
+
+
+<A NAME="lbAO">&nbsp;</A>
+<H3>READING PBM IMAGE FILES</H3>
+
+<P><B>pbm_readpbminit()</B> reads the header from a PBM image in a PBM
+file, filling in the rows, cols and format variables.
+<B>pbm_readpbmrow()</B> reads a row of bits into the <I>bitrow </I>
+array.  Format and cols were filled in by <B>pbm_readpbminit()</B>.
+
+<B>pbm_readpbmrow_packed()</B> is like <B>pbm_readrow()</B> except
+instead of returning a <B>bits</B> array, it returns an array
+<I>packed_bits</I> of bytes with the pixels of the image row packed
+into them.  The pixels are in order from left to right across the row
+and from the beginning of the array to the end.  Within a byte, the
+bits are in order from the most significant bit to the least
+significant bit.  If the number of pixels in the row is not a multiple
+of 8, the last byte returned is padded on the least signficant bit
+side with undefined bits.  White is represented by a <B>PBM_WHITE</B>
+bit; black by <B>PBM_BLACK</B>.
+
+<P><B>pbm_readpbm()</B> reads an entire bitmap file into memory,
+returning the allocated array and filling in the rows and cols
+variables.  This function combines <B>pbm_readpbminit()</B>,
+<B>pbm_allocarray()</B> and <B>pbm_readpbmrow()</B>.
+
+<p><b>pbm_readpbminit()</b> and <b>pbm_readpbm</b> abort the program with
+a message to Standard Error if the PBM image header is not syntactically
+valid, including if it contains a number too large to be processed using
+the system's normal data structures (to wit, a number that won't fit in
+a C 'int').
+
+<p><b>ppm_readppminit()</b> and <b>ppm_readppm</b> abort the program with
+a message to Standard Error if the PPM image header is not syntactically
+valid, including if it contains a number too large to be processed using
+the system's normal data structures (to wit, a number that won't fit in
+a C 'int').
+
+<A NAME="lbAP">&nbsp;</A>
+<H3>WRITING PBM IMAGE FILES</H3>
+
+<B>pbm_writepbminit()</B> writes the header for a PBM image in a PBM
+file.  <I>forceplain</I> is a boolean value specifying that a plain
+format (text) file to be written, as opposed to a raw format (binary)
+one.  <B>pbm_writepbmrow()</B> writes a row to a PBM file.
+<B>pbm_writepbmrow_packed()</B> is the same as
+<B>pbm_writepbmrow()</B> except that you supply the row to write as an
+array of bytes packed with bits instead of as a <B>bits</B> array.
+The format of <I>packed_bits </I> is the same as that returned by
+<B>pbm_readpbmrow()</B>.
+
+<P><B>pbm_writepbm()</B> writes the header and all data for a PBM
+image to a PBM file.  This function combines <B>pbm_writepbminit()</B>
+and <B>pbm_writepbmrow()</B>.
+
+<A NAME="lbAQ">&nbsp;</A>
+<H3>MISCELLANEOUS</H3>
+
+<P><B>pbm_nextimage()</B> positions a PBM input file to the next image
+in it (so that a subsequent <B>pbm_readpbminit()</B> reads its
+header).
+
+<P>Immediately before a call to <B>pbm_nextimage()</B>, the file must
+be positioned either at its beginning (i.e. nothing has been read from
+the file yet) or just after an image (i.e. as left by a
+<B>pbm_readpbmrow() </B> of the last row in the image).
+
+<P>In effect, then, all <B>pbm_nextimage()</B> does is test whether
+there is a next image or the file is positioned at end-of-file.
+
+<P>If <B>pbm_nextimage() </B> successfully positions to the next
+image, it returns <B>*</B><I>eofP</I> false (0).  If there is no next
+image in the file, it returns <B>*</B><I>eofP</I> true .  If it can't
+position or determine the file status due to a file error, it issues
+an error message and exits the program with an error exit code.
+
+<P><B>pbm_check()</B> checks for the common file integrity error where
+the file is the wrong size to contain all the image data.
+<B>pbm_check()</B> assumes the file is positioned after an image
+header (as if <B>pbm_readpbminit() </B> was the last operation on the
+file).  It checks the file size to see if the number of bytes left in
+the file are the number required to contain the image raster.  If the
+file is too short, <B>pbm_check()</B> causes the program to exit with
+an error message and error completion code.  Otherwise, it returns one
+of the following values (enumerations of the <B>enum pm_check_code</B>
+type) as <B>*</B><I>retval</I>:
+
+<DL COMPACT>
+<DT><B>PM_CHECK_OK</B>
+
+<DD>The file's size is exactly what is required to hold the image raster.
+
+<DT><B>PM_CHECK_UNKNOWN_TYPE</B>
+
+<DD><I>format</I> is not a format whose size <B>pbm_check()</B> can
+anticipate.  The only format with which <B>pbm_check()</B> can deal is
+raw PBM format.
+
+<DT><B>PM_CHECK_TOO_LONG</B>
+
+<DD>The file is longer than it needs to be to contain the image
+raster.  The extra data might be another image.
+
+<DT><B>PM_CHECK_UNCHECKABLE</B>
+
+<DD>The file is not a kind that has a predictable size, so there is no
+simple way for <B>pbm_check()</B> to know if it is the right size.
+Only a regular file has predictable size.  A pipe is a common example
+of a file that does not.
+
+</DL>
+
+<P><I>check_type</I> must have the value <B>PM_CHECK_BASIC </B> (an
+enumerated value of the <B>pm_check_type</B> enumerated type).
+Otherwise, the effect of <B>pbm_check()</B> is unpredictable.  This
+argument exists for future backward compatible expansion of the
+function of <B>pbm_check()</B>.
+
+<A NAME="lbAR">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="libpgm.html">libpgm</A></B>,
+<B><A HREF="libppm.html">libppm</A></B>,
+<B><A HREF="libpnm.html">libpnm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAS">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+
+<UL>
+<LI><A HREF="#lbAK">DESCRIPTION - PBM-SPECIFIC ROUTINES</A>
+<UL>
+<LI><A HREF="#lbAL">TYPES AND CONSTANTS</A>
+<LI><A HREF="#lbAM">INITIALIZATION</A>
+<LI><A HREF="#lbAN">MEMORY MANAGEMENT</A>
+<LI><A HREF="#lbAO">READING PBM IMAGE FILES</A>
+<LI><A HREF="#lbAP">WRITING PBM IMAGE FILES</A>
+<LI><A HREF="#lbAQ">MISCELLANEOUS</A>
+</UL>
+<LI><A HREF="#lbAR">SEE ALSO</A>
+<LI><A HREF="#lbAS">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/libpgm.html b/libpgm.html
new file mode 100644
index 00000000..9c89da8b
--- /dev/null
+++ b/libpgm.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>User manual for old pgm functions</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>pgm Functions</H1>
+Updated: 22 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+libpgm - libnetpbm functions to read and write PGM image files
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>#include &lt;pgm.h&gt;</B>
+
+<P>
+<B>void pgm_init( </B>
+<B>int *</B><I>argcP</I><B>,</B>
+<B>char *</B><I>argv</I><B>[]</B>
+<B>);</B>
+
+<P>
+<B>gray ** pgm_allocarray(</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B> );</B>
+
+<P>
+<B>gray * pgm_allocrow(</B>
+<B>int</B><I>cols</I><B> );</B>
+
+<P>
+<B>void pgm_freearray(</B>
+<B>gray **</B><I>grays</I><B>,</B>
+<B>int</B><I>rows</I><B> );</B>
+
+<P>
+<B>void pgm_freerow(</B>
+<B>gray *</B><I>grayrow</I><B>);</B>
+
+<P>
+<B>void pgm_readpgminit( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>int *</B><I>colsP</I><B>,</B>
+<B>int *</B><I>rowsP</I><B>,</B>
+<B>gray *</B><I>maxvalP</I><B>,</B>
+<B>int *</B><I>formatP</I><B> );</B>
+
+<P>
+<B>void pgm_readpgmrow( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>gray *</B><I>grayrow</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>gray </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B> );</B>
+
+<P>
+<B>gray ** pgm_readpgm( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>int *</B><I>colsP</I><B>,</B>
+<B>int *</B><I>rowsP</I><B>,</B>
+<B>gray *</B><I>maxvalP</I><B> );</B>
+
+<P>
+<B>void pgm_writepgminit( </B>
+<B>FILE *  fp , </B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>,</B>
+<B>gray </B><I>maxval</I><B>,</B>
+<B>int </B><I>forceplain</I><B> );</B>
+
+<P>
+<B>void pgm_writepgmrow( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>gray *</B><I>grayrow</I><B>,</B>
+<B>int cols</B><I>,</I>
+<B>gray </B><I>maxval</I><B>,</B>
+<B>int </B><I>forceplain</I><B> );</B>
+
+<P>
+<B>void pgm_writepgm( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>gray ** </B><I>grays</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>,</B>
+<B>gray </B><I>maxval</I><B>,</B>
+<B>int </B><I>forceplain</I><B> );</B>
+
+<P>
+<B>void pgm_writepgm( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>gray **</B><I>grays</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>,</B>
+<B>gray </B><I>maxval</I><B>,</B>
+<B>int </B><I>forceplain</I><B> );</B>
+
+<P>
+<B>void pgm_nextimage(</B>
+<B>FILE *</B><I>file</I><B>,</B>
+<B>int * const </B><I>eofP</I><B>);</B>
+
+<P>
+<B>void pgm_check(</B>
+<B>FILE * </B><I>file</I><B>,</B>
+<B>const enum pm_check_type </B><I>check_type</I><B>,</B>
+<B>const int </B><I>format</I><B>,</B>
+<B>const int </B><I>cols</I><B>,</B>
+<B>const int </B><I>rows</I><B>,</B>
+<B>const int </B><I>maxval</I><B>,</B>
+<B>enum pm_check_code * const </B><I>retval</I><B>);</B>
+
+<P>
+<B>typedef ... gray;</B>
+
+<P>
+<B>#define PGM_MAXMAXVAL ...</B>
+
+<P>
+<B>#define PGM_OVERALLMAXVAL ...</B>
+
+<P>
+<B>extern gray pgm_pbmmaxval;</B>
+
+<P>
+<B>#define PGM_FORMAT ...</B>
+
+<P>
+<B>#define RPGM_FORMAT ...</B>
+
+<P>
+<B>#define PGM_TYPE PGM_FORMAT</B>
+
+<P>
+<B>#define </B>
+
+<B>PGM_FORMAT_TYPE(</B><I>format</I><B>)</B>
+<B>...</B>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>These library functions are part of <a href="index.html">Netpbm</a>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H3>TYPES AND CONSTANTS</H3>
+
+<P>Each <B>gray</B> should contain only the values between <B>0</B>
+and <B>PGM_OVERALLMAXVAL</B>.  <B>pgm_pbmmaxval</B> is the maxval used
+when a PGM program reads a PBM file.  Normally it is 1; however, for
+some programs, a larger value gives better results.
+
+<P><B>PGM_OVERALLMAXVAL</B> is the maximum value of a maxval in a PGM
+file.  <B>PGM_MAXMAXVAL</B> is the maximum value of a maxval in a PGM
+file that is compatible with the PGM format as it existed before April
+2000.  It is also the maximum value of a maxval that results in the
+minimum possible raster size for a particular image.  I.e an image
+with a maxval higher than <B>PGM_MAXMAXVAL</B> cannot be read or
+generated by old PGM processing programs and requires more file space.
+
+<P><B>PGM_FORMAT </B> is the format code for a Plain PGM format image
+file.  <B>RPGM_FORMAT</B> is the format code for a Raw PGM format
+image file.  <B>PGM_TYPE </B> is the format type code for the PGM
+formats.  <B>PGM_FORMAT_TYPE</B> is a macro that generates code to
+compute the format type code of a PBM or PGM format from the format
+code which is its argument.
+
+<A NAME="lbAF">&nbsp;</A>
+<H3>INITIALIZATION</H3>
+
+<P><b>pgm_init</b> is identical to <b>pm_init()</b>.
+
+<A NAME="lbAG">&nbsp;</A>
+<H3>MEMORY MANAGEMENT</H3>
+
+<B>pgm_allocarray()</B> allocates an array of grays.
+
+<P><B>pgm_allocrow()</B> allocates a row of the given number of grays.
+
+<P><B>pgm_freearray()</B> frees the array allocated with
+<B>pgm_allocarray()</B> containing the given number of rows.
+
+<P><B>pgm_freerow()</B> frees a row of grays allocated with
+<B>pgm_allocrow()</B>.
+
+<A NAME="lbAH">&nbsp;</A>
+<H3>READING FILES</H3>
+
+<P>If a function in this section is called on a PBM format file, it
+translates the PBM file into a PGM file on the fly and functions as if
+it were called on the equivalent PGM file.  The <I>format</I> value
+returned by <B>pgm_readpgminit()</B> is, however, not translated.  It
+represents the actual format of the PBM file.
+
+<P><B>pgm_readpgminit()</B> reads the header of a PGM file, returning
+all the information from the header and leaving the file positioned
+just after the header.
+
+<P><B>pgm_readpgmrow()</B> reads a row of grays into the <I>grayrow
+</I> array.  <I>format</I>, <I>cols</I>, and <I>maxval </I> are the
+values returned by <B>pgm_readpgminit()</B>.
+
+<P><B>pgm_readpgm()</B> reads an entire PGM image into memory,
+returning the allocated array as its return value and returning the
+information from the header as <I>rows</I>, <I>cols</I>, and
+<I>maxval</I>.  This function combines <B>pgm_readpgminit()</B>,
+<B>pgm_allocarray()</B>, and <B>pgm_readpgmrow()</B>.
+
+<p><b>pgm_readpgminit()</b> and <b>pgm_readpgm</b> abort the program with
+a message to Standard Error if the PGM image header is not syntactically
+valid, including if it contains a number too large to be processed using
+the system's normal data structures (to wit, a number that won't fit in
+a C 'int').
+
+
+<A NAME="lbAI">&nbsp;</A>
+<H3>WRITING FILES</H3>
+
+<B>pgm_writepgminit()</B> writes the header for a PGM file and leaves
+it positioned just after the header.
+
+<P><I>forceplain</I> is a logical value that tells
+<B>pgm_writepgminit() </B> to write a header for a plain PGM format
+file, as opposed to a raw PGM format file.
+
+<P><B>pgm_writepgmrow()</B> writes the row <I>grayrow</I> to a PGM
+file.  For meaningful results, <I>cols</I>, <I>maxval</I>, and
+<I>forceplain</I> must be the same as was used with
+<B>pgm_writepgminit()</B>.
+
+<P><B>pgm_writepgm()</B> write the header and all data for a PGM
+image.  This function combines <B>pgm_writepgminit()</B> and
+<B>pgm_writepgmrow()</B>.
+
+<A NAME="lbAJ">&nbsp;</A>
+<H3>MISCELLANEOUS</H3>
+
+<P><B>pgm_nextimage()</B> positions a PGM input file to the next image
+in it (so that a subsequent <B>pgm_readpgminit()</B> reads its
+header).
+
+<P><B>pgm_nextimage()</B> is analogous to <B>pbm_nextimage()</B>, but
+works on PGM and PBM files.
+
+<P><B>pgm_check() </B> checks for the common file integrity error
+where the file is the wrong size to contain all the image data.
+
+<P><B>pgm_check() </B> is analogous to <B>pbm_check()</B>, but works
+on PGM and PBM files.
+
+<A NAME="lbAK">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="libpbm.html">libpbm</A></B>,
+<B><A HREF="libppm.html">libppm</A></B>,
+<B><A HREF="libpnm.html">libpnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<UL>
+<LI><A HREF="#lbAE">TYPES AND CONSTANTS</A>
+<LI><A HREF="#lbAF">INITIALIZATION</A>
+<LI><A HREF="#lbAG">MEMORY MANAGEMENT</A>
+<LI><A HREF="#lbAH">READING FILES</A>
+<LI><A HREF="#lbAI">WRITING FILES</A>
+<LI><A HREF="#lbAJ">MISCELLANEOUS</A>
+</UL>
+<LI><A HREF="#lbAK">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/libpm.html b/libpm.html
new file mode 100644
index 00000000..7f1c47af
--- /dev/null
+++ b/libpm.html
@@ -0,0 +1,523 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html> <head>
+<title>Libnetbpm Utility Functions</title>
+<meta name="manual_section" content="3">
+</head>
+<body>
+<h1>Libnetpbm Utility Functions</h1>
+Updated: 27 August 2006
+<BR>
+<p><A HREF="#toc">Table Of Contents</A>
+
+<H2>NAME</H2>
+libpm - netpbm utility functions
+<H2>DESCRIPTION</H2>
+
+<p>These library functions are part of <a href="index.html">Netpbm</a>.
+
+<p>This page documents functions in the Netpbm subroutine library that
+are not directly related to image data.
+
+<p>For introductory and general information using <b>libnetpbm</b>, see
+<a href="libnetpbm_ug.html">Libnetpbm User's Guide</a>.
+
+<p>The most commonly used <b>libnetpbm</b> functions are those that
+read and write and process Netpbm images.  Those are documented in <a
+href="libnetpbm_image.html">Libnetpbm Netpbm Image Processing
+Manual</a>
+
+<p>To use these services, #include <b>pam.h</b>.
+
+<H2 id="functions">Functions</H2>
+
+<h3 id="initialization">Initialization</h3>
+
+<h4>Overview</h4>
+
+<p>
+<B>void pm_init(</B>
+<B>int *</B><I>argcP</I><B>,</B>
+<B>char *</B><I>argv</I><B>[]</B>
+<B>);</B>
+
+<h4>Description</h4>
+
+<p>All Netpbm programs must call <b>pm_init()</b> just after
+startup, before they process their arguments.  <b>pm_init()</b>,
+among other things, processes Netpbm universal arguments and removes
+them from the argument list.
+
+<p>A program that isn't a Netpbm program, but just uses <b>libnetpbm</b>
+services, need not invoke <b>pm_init</b>.
+
+<h3 id="file">File Or Image Stream Access</h3>
+
+<h4>Overview</h4>
+<P>
+<B>FILE *pm_openr(</b>
+<b>char *</B> <I>name</I><B>)</B>
+
+<P>
+<B>FILE *pm_openw(</b>
+<b>char *</B> <I>name</I>
+<B>);</B>
+
+<P>
+<B>FILE *pm_openr_seekable(</b>
+<b>const char *</B> <I>name</I>
+<B>);</B>
+
+<P>
+<B>FILE *pm_close(</b>
+<b>FILE *</B> <I>fp</I>
+<B>);</B>
+
+<P>
+<B>void pm_tell2(</b>
+<b>FILE * </B> <I>fileP</I><B>,</b>
+<b>pm_filepos *</B> <I>fileposP</I><B>,</b>
+<b>unsigned int</b> <i>fileposSize</i>
+<B>);</B>
+
+<P>
+<B>unsigned int pm_tell(</b>
+<b>FILE *</B> <I>fileP</I>
+<B>);</B>
+
+<P>
+<B>void pm_seek2(</b>
+<b>FILE * </B> <I>fileP</I><B>,</b>
+<b>const pm_filepos *</B> <I>fileposP</I><B>,</b>
+<b>unsigned int</b> <i>fileposSize</i>
+<B>);</B>
+
+<P>
+<B>void pm_seek(</b>
+<b>FILE * </B> <I>fileP</I><B>,</b>
+<b>unsigned long</B> <I>filepos</I>
+<B>);</B>
+
+<P>
+<B>char *pm_read_unknown_size(</b>
+<b>FILE *</B> <I>fp</I><B>,</b>
+<b>long *</B> <I>nread</I>
+<B>);</B>
+
+
+<h4>Description</h4>
+
+<p>An image stream is just a file stream (represented in the standard C
+library as type <b>FILE *</b>).
+
+<p>These routines work on files &gt; 2 GiB if the underlying system does,
+using the standard large file interface.  Before Netpbm 10.15 (April 2003),
+though, they would fail to open any file that large or process any offset
+in a file that could not be represented in 32 bits.
+
+<p><B>pm_openr()</B> opens the given file for reading, with
+appropriate error checking.  A filename of <B>-</B> is taken to mean
+Standard Input.  <B>pm_openw()</B> opens the given file for writing,
+with appropriate error checking.  <B>pm_close()</B> closes the file
+descriptor, with appropriate error checking.
+
+<P><B>pm_openr_seekable()</B> appears to open the file just like
+<B>pm_openr()</B>, but the file thus opened is guaranteed to be
+seekable (you can use ftell() and fseek() on it).
+<B>pm_openr_seekable()</B> pulls this off by copying the entire file
+to a temporary file and giving you the handle of the temporary file,
+if it has to.  If the file you name is a regular file, it's already
+seekable so <B>pm_openr_seekable()</B> just does the same thing as
+<B>pm_openr()</B>.
+
+But if it is, say, a pipe, it isn't seekable.  So
+<B>pm_openr_seekable()</B> reads the pipe until EOF into a temporary
+file, then opens that temporary file and returns the handle of the
+temporary file.  The temporary file is seekable.  <P> The file
+<B>pm_openr_seekable()</B> creates is one that the operating system
+recognizes as temporary, so when you close the file, by any means, it
+gets deleted.
+
+<P>
+You need a seekable file if you intend to make multiple passes through
+the file.  The only alternative is to read the entire image into
+memory and work from that copy.  That may use too much memory.  Note
+that the image takes less space in the file cache than in a buffer in
+memory.  As much as 96 times less space!  Each sample is an integer in
+the buffer, which is usually 96 bits.  In the file, a sample may be as
+small as 1 bit and rarely more than 8 bits.
+
+<P><B>pm_tell2()</B> returns a handle for the current position of the
+image stream (file), whether it be the header or a row of the raster.
+Use the handle as an argument to <B>pm_seek2()</B> to reposition the
+file there later.  The file must be seekable (which you can ensure by
+opening it with <B>pm_openr_seekable()</B>) or this may fail.
+
+<p>The file position handle is of type <b>pm_filepos</b>, which is
+intended to be opaque, i.e. used only with these two functions.  In
+practice, it is a file offset and is 32 bits or 64 bits depending upon
+the capability of the underlying system.  For maximum backward and
+forward compatibility, the functions that take or return a
+<b>pm_filepos</b> have a <i>fileposSize</i> argument for the size of
+the data structure.  In C, simply code <b>sizeof(pm_filepos)</b> for
+that.
+
+<p><b>pm_seek()</b> and <b>pm_tell</b> are for backward compatibility
+only.  Do not use them in new code.  These functions are not capable of
+handle positions in files whose byte offset cannot be represented in 32
+bits.
+
+<p><b>pm_tell2()</b> and <b>pm_seek2()</b> replaced <b>pm_tell()</b> and
+<b>pm_seek()</b> in Netpbm 10.15 (April 2003).
+
+<P><B>pm_read_unknown_size()</B> reads an entire file or input stream
+of unknown size to a buffer.  It allocates more memory as needed.  The
+calling routine has to free the allocated buffer with <B>free()</B>.
+
+<P><B>pm_read_unknown_size()</B> returns a pointer to the allocated
+buffer.  The <B>nread</B> argument returns the number of bytes read.
+
+
+<a name="endian"></a>
+<h3>Endian I/O</h3>
+
+<h4>Entry Points</h4>
+
+<P>
+<B>void pm_readchar(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>char *</B> <I>sP</I>
+<B>);</B>
+
+<P>
+<B>void pm_writechar(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>char</B> <I>s</I>
+<B>);</B>
+
+<P>
+<B>int pm_readbigshort(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>short *</B> <I>sP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writebigshort(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>short</B> <I>s</I>
+<B>);</B>
+
+<P>
+<B>int pm_readbiglong(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>long *</B> <I>lP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writebiglong(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>long</B> <I>l</I>
+<B>);</B>
+
+<P>
+<B>int pm_readlittleshort(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>short *</B> <I>sP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writelittleshort(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>short</B> <I>s</I>
+<B>);</B>
+
+<P>
+<B>int pm_readlittlelong(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>long *</B> <I>lP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writelittlelong(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>long</B> <I>l</I>
+<B>);</B>
+
+<P>
+<B>void pm_readcharu(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>char *</B> <I>sP</I>
+<B>);</B>
+
+<P>
+<B>void pm_writecharu(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>char</B> <I>s</I>
+<B>);</B>
+
+<P>
+<B>int pm_readbigshortu(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>short *</B> <I>sP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writebigshortu(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>short</B> <I>s</I>
+<B>);</B>
+
+<P>
+<B>int pm_readbiglongu(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>long *</B> <I>lP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writebiglongu(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>long</B> <I>l</I>
+<B>);</B>
+
+<P>
+<B>int pm_readlittleshortu(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>short *</B> <I>sP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writelittleshortu(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>short</B> <I>s</I>
+<B>);</B>
+
+<P>
+<B>int pm_readlittlelongu(</b>
+<b>FILE *</B> <I>in</I><B>,</b>
+<b>long *</B> <I>lP</I>
+<B>);</B>
+
+<P>
+<B>int pm_writelittlelongu(</b>
+<b>FILE *</B> <I>out</I><B>,</b>
+<b>long</B> <I>l</I>
+<B>);</B>
+
+<h4>Description</h4>
+
+<B>pm_readchar()</B>, <B>pm_writechar()</B>, <B>pm_readbigshort()</B>,
+<B>pm_writebigshort()</B>, <B>pm_readbiglong()</B>,
+<B>pm_writebiglong()</B>, <B>pm_readlittleshort()</B>,
+<B>pm_writelittleshort()</B>, <B>pm_readlittlelong()</B>, and
+<B>pm_writelittlelong()</B> are routines to read and write 1-byte,
+2-byte, and 4-byte pure binary integers in either big- or
+little-endian byte order.  Note that a &quot;long int&quot; C type might
+be wider than 4 bytes, but the &quot;long&quot; routines still read and
+write 4 bytes.
+
+<p><b>pm_readbiglongu()</b>, etc. (names ending in <b>u</b>) are the same
+except they work on unsigned versions of the type.
+
+<P>The routines with declared return values always return 0.  Before
+Netpbm 10.27 (March 2005), they returned -1 on failure, including EOF.
+Now, they issue an error message to Standard Error and abort the program
+if the I/O fails or encounters EOF.
+
+<p>The 1-byte routines were new in Netpbm 10.27 (March 2005).
+The unsigned versions were new somewhere around Netpbm 10.21 (2004).
+
+<A NAME="maxval">&nbsp;</A>
+<H3>Maxval Arithmetic</H3>
+
+<h4>Entry Points</h4>
+<P>
+<B>int pm_maxvaltobits(</b>
+<b>int</B> <I>maxval</I>
+<B>);</B>
+
+<P>
+<B>int pm_bitstomaxval(</b>
+<b>int</B> <I>bits</I>
+<B>);</B>
+
+<P>
+<B>unsigned int pm_lcm(</b>
+<b>unsigned int</B> <I>x</I><B>,</B>
+<B>unsigned int</B> <I>y</I><B>,</B>
+<B>unsigned int</B> <I>z</I><B>,</B>
+<B>unsigned int</B> <I>limit</I>
+<B>);</B>
+
+<h4>Description</h4>
+
+<p><B>pm_maxvaltobits()</B> and <B>pm_bitstomaxval()</B> convert
+between a maxval and the minimum number of bits required to hold it.
+
+<P><B>pm_lcm()</B> computes the least common multiple of 3 integers.
+You also specify a limit and if the LCM would be higher than that
+limit, <B>pm_lcm()</B> just returns that limit.
+
+<H3 id="gamma">Gamma Arithmetic</H3>
+
+<h4>Entry Points</h4>
+<P>
+<B>float pm_gamma(</b>
+<b>float</B> <I>intensity</I>
+<B>);</B>
+
+<P>
+<B>float pm_ungamma(</b>
+<b>float</B> <I>brightness</I>
+<B>);</B>
+
+
+<h4>Description</h4>
+
+<p>In graphics processing, there are two common ways of representing
+numerically the intensity of a pixel, or a component of a pixel.
+
+<p>The obvious way is with a number that is directly proportional to
+the light intensity (e.g. 10 means twice as many milliwatts per square
+centimeter as 5).  There are two problems with this:
+
+<ul>
+  <li>To the human eye, a 1 milliwatt per square centimeter difference
+       in a bright image is much less apparent than a 1 milliwatt per
+       square centimeter difference in a dark image.  So if you have
+       a fixed number of bits in which to store the intensity value,
+       you're wasting resolution at the bright end and skimping on it at
+       the dark end.
+  <li>Monitor inputs and camera outputs aren't directly proportional to
+       the light intensity they project or detect.
+</ul>
+
+<p>For these reasons, light intensities are often represented in
+graphics processing by an exponential scale.  The transfer function is
+called a gamma function and the resulting numbers are called
+gamma-corrected or gamma-adjusted.  There are various gamma functions.
+The Netpbm formats specify that intensities are represented by
+gamma-adjusted numbers of a particular gamma transfer function.
+
+<p>These functions let you convert back and forth between these two
+scales, using the same gamma transfer function that is specified in the
+Netpbm format specifications.
+
+<p><b>pm_gamma709</b> converts from an intensity-proportional intensity
+value to a gamma-adjusted intensity value (roughly proportional to
+brightness, which is the human subjective perception of intensity),
+using the ITU-R Recommendation BT.709 gamma transfer function.
+
+<P><B>pm_ungamma709</b> is the inverse of <b>pm_gamma709</b>.
+
+<H3 id="message">Messages</H3>
+
+<h4>Overview</h4>
+
+<P>
+<B>void pm_message(</b>
+<b>char *</B> <I>fmt</I><B>,</B>
+<B>... );</B>
+
+<p>
+<B>void pm_setusermessagefn(pm_usermessagefn *</B> <I>function</I><B>);</b>
+
+<h4>Description</h4>
+
+<p><B>pm_message()</B> is a <B>printf()</B> style routine to write an
+informational message to the Standard Error file stream.
+<B>pm_message()</B> suppresses the message, however, if the user
+specified the <B>-quiet</B> option on the command line.  See the
+initialization functions, e.g. <B>pnm_init()</B>, for information on
+the <B>-quiet</B> option.  Note that Netpbm programs are often used
+interactively, but also often used by programs.  In the interactive
+case, it is nice to issue messages about what the program is doing,
+but in the program case, such messages are usually undesirable.  By
+using <B>pm_message()</B> for all your messages, you make your program
+usable in both cases.  Without any effort on your part, program users
+of your program can avoid the messages by specifying the <B>-quiet</B>
+option.
+
+<p>Netpbm distinguishes between error messages and information
+messages; <b>pm_message()</b> is just for informational messages.  To
+issue an error message, see
+<a href="error.html#pm_errormsg"><b>pm_errormsg()</b></a>.
+
+<p><b>pm_setusermessagefn</b> registers a handler for informational
+messages, called a user message routine.  Any library function
+(including <b>pm_message()</b>) that wants to issue an informational
+message in the future will call that function with the message as an
+argument instead of writing the message to Standard Error.
+
+<p>The argument the user message routine gets is English text designed
+for human reading.  It is just the text of the message; there is no
+attempt at formatting in it (so you won't see any newline or tab
+characters).
+
+<p>To capture error messages in addition to informational messages,
+see
+<a href="error.html#pm_setusererrormsgfn"><b>pm_setusererrormsgfn()</b></a>.
+
+<p>You can remove the user message routine, so that the library issues
+future informational messages in its default way (write to Standard
+Error) by specifying a null pointer for <i>function</i>.
+
+Example:
+
+<pre>
+<code>
+    static pm_usermessagefn logfilewrite;
+
+    static void
+    logfilewrite(const char * const msg) {
+        fprintf(mymsglog, &quot;Netpbm message: %s&quot;, msg);
+    }
+
+    pm_setusermessagefn(&amp;logfilewrite);
+    
+    pm_message(&quot;Message for the message log&quot;);
+</code>
+</pre>
+
+
+<h3 id="system">System Utilities</h3>
+
+<ul>
+<li><a href="libsystem.html">pm_system</a>
+<li><a href="libtmpfile.html">pm_tmpfile</a>
+</ul>
+
+<H3 id="keyword">Keyword Matching</H3>
+
+<h4>Entry Points</h4>
+
+<P>
+<B>void pm_keymatch();</b>
+
+<h4>Description</h4>
+
+<p>This subroutine is obsolete.  It used to be used for command line
+option processing.  Today, you can do better option processing more
+easily with the shhopt facility.  See any recent program in the Netpbm
+package for an example.
+
+<B>pm_keymatch()</B> does a case-insensitive match of <B>str</B>
+against <B>keyword</B>.  <B>str</B> can be a leading substring of
+<B>keyword</B>, but at least <B>minchars</B> must be present.
+
+
+<HR>
+<H2 id="toc">Table Of Contents</H2>
+
+<ul>
+  <li><a href="#functions">Functions</a>
+  <ul>
+    <li><a href="#initialization">Initialization</a>
+    <li><a href="#file">File Or Image Stream Access</a>
+    <li><a href="#endian">Endian I/O</a>
+    <li><a href="#maxval">Maxval Arithmetic</a>
+    <li><a href="#message">Messages And Errors</a>
+    <li><a href="#keyword">Keyword</a>
+    </ul>
+  </ul>
+
+
+</body> </html>
diff --git a/libpnm.html b/libpnm.html
new file mode 100644
index 00000000..00482a43
--- /dev/null
+++ b/libpnm.html
@@ -0,0 +1,357 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>User manual for old pnm functions</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>pnm Functions</H1>
+Updated: 22 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+libpnm - libnetpbm functions to read and write PNM image files
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>#include &lt;pnm.h&gt;</B>
+
+<P>
+<B>void pnm_init(</B>
+<B>int *</B><I>argcP</I><B>,</B>
+<B>char *</B><I>argv</I><B>[]</B>
+<B>);</B>
+
+<P>
+<B>xel ** pnm_allocarray(</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>);</B>
+
+<P>
+<B>xel * pnm_allocrow(</B>
+<B>int </B><I>cols</I><B>);</B>
+
+<P>
+<B>void pnm_freearray(</B>
+<B>xel **</B><I>xels</I><B>,</B>
+<B>int </B><I>rows</I><B>);</B>
+
+<P>
+<B>void pnm_freerow(</B>
+<B>xel *</B><I>xelrow</I><B>);</B>
+
+<P>
+<B>void pnm_readpnminit( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>int *</B><I>colsP</I><B>,</B>
+<B>int *</B><I>rowsP</I><B>,</B>
+<B>xelval *</B><I>maxvalP</I><B>,</B>
+<B>int *</B><I>formatP</I><B> );</B>
+
+<P>
+<B>void pnm_readpnmrow( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>xel *</B><I>xelrow</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+
+<BR>
+
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B> );</B>
+
+<P>
+<B>xel ** pnm_readpnm( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>int *</B><I>colsP</I><B>,</B>
+<B>int *</B><I>rowsP</I><B>,</B>
+
+<BR>
+
+<B>xelval *</B><I>maxvalP</I><B>, int</B><I>*</I><B> formatP </B><I>);</I>
+
+<P>
+<B>void pnm_writepnminit( </B>
+<B>FILE *  fp , </B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>,</B>
+<B>int </B><I>forceplain</I><B>);</B>
+
+<P>
+<B>void pnm_writepnmrow( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>xel *</B><I>xelrow</I><B>,</B>
+<B>int cols</B><I>,</I>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>,</B>
+<B>int </B><I>forceplain</I><B> );</B>
+
+<P>
+<B>void pnm_writepnm( </B>
+<B>FILE *</B><I>fp</I><B>,</B>
+<B>xel ** </B><I>xels</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>,</B>
+<B>int </B><I>forceplain</I><B> );</B>
+
+<P>
+<B>void pnm_check(</B>
+<B>FILE * </B><I>file</I><B>,</B>
+<B>const enum pm_check_type </B><I>check_type</I><B>,</B>
+<B>const int </B><I>format</I><B>,</B>
+<B>const int </B><I>cols</I><B>,</B>
+<B>const int </B><I>rows</I><B>,</B>
+<B>const xelval </B><I>maxval</I><B>,</B>
+<B>enum pm_check_code *</B><I>retvalP</I><B>);</B>
+
+<P>
+<B>void pnm_promoteformatrow( </B>
+<B>xel *</B><I>xelrow</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>,</B>
+<B>xelval </B><I>newmaxval</I><B>,</B>
+<B>int </B><I>newformat</I><B>);</B>
+
+<P>
+<B>void pnm_promoteformat( </B>
+<B>xel **</B><I>xels</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>,</B>
+<B>xelval </B><I>newmaxval</I><B>,</B>
+<B>int </B><I>newformat</I><B>);</B>
+
+<P>
+<B>xel pnm_whitexel( </B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>);</B>
+
+<P>
+<B>xel pnm_blackxel( </B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>);</B>
+
+<P>
+<B>void pnm_invertxel( </B>
+<B>xel *</B><I>x</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>);</B>
+
+<P>
+<B>xel pnm_backgroundxelrow( </B>
+<B>xel *</B><I>xelrow</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>);</B>
+
+<P>
+<B>xel pnm_backgroundxel( </B>
+<B>xel **</B><I>xels</I><B>,</B>
+<B>int </B><I>cols</I><B>,</B>
+<B>int </B><I>rows</I><B>,</B>
+<B>xelval </B><I>maxval</I><B>,</B>
+<B>int </B><I>format</I><B>);</B>
+<P><B>typedef ... xelval;</B>
+<P><B>typedef ... xel;</B>
+<P><B>extern xelval pnm_pbmmaxval;</B>
+
+<P>
+<B>#define </B>
+<B>PNM_ASSIGN1(</B><I>x</I><B>,</B><I>v</I><B>)</B>
+<B>...</B>
+
+<P>
+<B>#define </B>
+<B>PNM_GET1(</B><I>x</I><B>)</B>
+<B>...</B>
+
+<P>
+<B>#define </B>
+<B>PNM_EQUAL(</B><I>x</I><B>,</B><I>y</I><B>)</B>
+<B>...</B>
+
+<P>
+<B>#define </B>
+<B>PNM_FORMAT_TYPE(</B><I>format</I><B>)</B>
+<B>...</B>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>These library functions are part of <a href="index.html">Netpbm</a>.
+
+
+<A NAME="lbAI">&nbsp;</A>
+<H3>PNM TYPES AND CONSTANTS</H3>
+
+<P>Each <B>xel</B> contains three <B>xelval</B>s, each of which should
+contain only the values between <B>0</B> and <B>PNM_MAXMAXVAL</B>,
+inclusive.  <B>pnm_pbmmaxval</B> is the maxval used when a PNM program
+reads a PBM file.  Normally it is 1; however, for some programs, a
+larger value gives better results.
+
+<A NAME="lbAJ">&nbsp;</A>
+<H3>PNM XEL MANIPULATIONS</H3>
+
+<A NAME="lbAK">&nbsp;</A>
+
+<p>The <B>PNM_GET1</B> macro extracts a single value from an xel, when
+you know it's from a PBM or PGM file.  When it's from a PPM file, use
+<B>PPM_GETR()</B>, <B>PPM_GETG()</B>, and <B>PPM_GETB()</B>.
+
+<P>The <B>PNM_ASSIGN1</B> macro assigns a single value to an xel, when
+you know it's from a PBM or PGM file.  When it's from a PPM file, use
+<B>PPM_ASSIGN</B>.
+
+The <B>PNM_EQUAL</B> macro checks two xels for equality.  The
+<B>PNM_FORMAT_TYPE</B> macro computes a
+format type code from a format code.  The format types are PBM, PGM,
+PPM, and PAM.  But note that PBM, PGM, and PPM each are two different
+formats: a plain one and a raw one.  So there are four format types,
+but seven formats.  <B>PNM_FORMAT_TYPE</B> does not work on the PAM
+format code.
+
+<A NAME="lbAL">&nbsp;</A>
+<H3>INITIALIZATION</H3>
+
+<p><b>pnm_init</b> is identical to <b>pm_init()</b>.
+
+<A NAME="lbAM">&nbsp;</A>
+<H3>MEMORY MANAGEMENT</H3>
+
+<P><B>pnm_allocarray()</B> allocates space for an array of xels.
+<B>pnm_freearray()</B> frees an array space allocated by
+<B>pnm_allocarray()</B> or <B>pnm_readpnm()</B>.
+
+<P><B>pnm_allocrow()</B> allocates space for a row of a PNM image.
+<B>pnm_freerow()</B> frees it.
+
+
+<A NAME="lbAN">&nbsp;</A>
+<H3>READING PNM FILES</H3>
+
+<P><B>pnm_readpnminit()</B> is similar to <B>pnm_readpaminit()</B>,
+but reads only PNM images and has a different parameter list.
+
+<P><B>pnm_readpnmrow()</B> is similar to <B>pnm_readpamrow()</B>
+but only works on PNM images and has a different parameter list and returns
+the row as an array of xels instead of tuples.
+
+<P><B>pnm_readpnm()</B> is similar to <B>pnm_readpam()</B> except that
+it reads only PNM images and uses a different parameter list and
+returns an array of rows such that <B>pnm_readpnmrow()</B> would
+return rather than such that <B>pnm_readpamrow()</B> would return.
+
+
+<A NAME="lbAO">&nbsp;</A>
+<H3>WRITING FILES</H3>
+
+<P><B>pnm_writepnminit()</B> is similar to <B>pnm_writepaminit()</B>
+except that it can write only a PNM header and has a different
+parameter list.
+
+<P><i>forceplain</i> is a binary value.  True (nonzero) means to write
+the image in the plain (ASCII) version of the selected format.  False
+(zero) means to write it in the raw (binary) version of the selected
+format.  See <a href="pnm.html">PNM format specification</a>.
+
+<P><B>pnm_writepnmrow()</B> is similar to <B>pnm_writepamrow()</B>
+except that it works only on PNM images and has a different parameter
+list and takes an array of xels instead of an array of tuples.  See
+the description of <I>forceplain </I> above.
+
+<P><B>pnm_writepnm()</B> is similar to <B>pnm_writepam()</B> except
+that it works only on PNM image, has a different parameter list, and
+takes an array of rows of xels instead of an array of rows of tuples.
+See the description of <I>forceplain</I> above.
+
+
+<A NAME="lbAP">&nbsp;</A>
+<H3>MISCELLANEOUS</H3>
+
+<P> <B>pnm_check()</B> is similar to <B>pnm_checkpam()</B> except it
+works only on PNM images.
+
+<P><B>pnm_check()</B> is identical to <B>ppm_check()</B>.
+
+<A NAME="lbAQ">&nbsp;</A>
+<H3>PNM FORMAT PROMOTION</H3>
+
+<B>pnm_promoteformatrow()</B> promotes a row of xels from one maxval
+and format to a new set.  Use this when you are combining multiple
+anymaps of different types - just take the maximum of the maxvals and
+the maximum of the formats, and promote them all to that.
+
+<P><B>pnm_promoteformat()</B> promotes an entire anymap.
+
+
+<A NAME="lbAR">&nbsp;</A>
+<H3>PNM XEL MANIPULATION</H3>
+
+<B>pnm_whitexel()</B> and <B>pnm_blackxel()</B> return a white or
+black xel, respectively, for the given <I>maxval</I> and
+<I>format</I>.
+
+<P><B>pnm_invertxel()</B> inverts an xel.
+
+<P><B>pnm_backgroundxelrow()</B> figures out an appropriate background
+xel based on the row of xels <I>xelrow</I>, which is <I>cols</I> xels
+wide, has maxval <I>maxval</I>, and represents an image with format
+<I>format</I>.
+
+<P>This estimate works best when the row is the top or bottom row of
+the image.
+
+<P><B>pnm_backgroundxel()</B> does the same thing as
+<B>pnm_backgroundxelrow()</B>, except based on an entire image instead
+of just one row.  This tends to do a slightly better job than
+<B>pnmbackgroundxelrow()</B>.
+
+<A NAME="lbAS">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="libnetpbm.html">Libnetpbm</A></B>,
+<B><A HREF="libnetpbm_ug.html">Libnetpbm User's Guide</A></B>,
+<B><A HREF="libnetpbm_dir.html">Libnetpbm Directory</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="libpbm.html">libpbm</A></B>,
+<B><A HREF="libpgm.html">libpgm</A></B>,
+<B><A HREF="libppm.html">libppm</A></B>
+
+<A NAME="lbAT">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+  <LI><A HREF="#lbAB">NAME</A>
+  <LI><A HREF="#lbAD">SYNOPSIS</A>
+  <LI><A HREF="#lbAE">DESCRIPTION</A>
+  <UL>
+    <LI><A HREF="#lbAI">PNM TYPES AND CONSTANTS</A>
+    <LI><A HREF="#lbAJ">PNM XEL MANIPULATIONS</A>
+    <LI><A HREF="#lbAK">The </A>
+    <LI><A HREF="#lbAL">INITIALIZATION</A>
+    <LI><A HREF="#lbAM">MEMORY MANAGEMENT</A>
+    <LI><A HREF="#lbAN">READING PNM FILES</A>
+    <LI><A HREF="#lbAO">WRITING FILES</A>
+    <LI><A HREF="#lbAP">MISCELLANEOUS</A>
+    <LI><A HREF="#lbAQ">PNM FORMAT PROMOTION</A>
+    <LI><A HREF="#lbAR">PNM XEL MANIPULATION</A>
+    </UL>
+  <LI><A HREF="#lbAS">SEE ALSO</A>
+  <LI><A HREF="#lbAT">AUTHOR</A>
+  </UL>
+</BODY>
+</HTML>
diff --git a/libppm.html b/libppm.html
new file mode 100644
index 00000000..3d83709d
--- /dev/null
+++ b/libppm.html
@@ -0,0 +1,823 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>User manual for old ppm functions</TITLE>
+<META NAME="manual_section" CONTENT="3">
+</HEAD>
+<BODY>
+<H1>libppm</H1>
+Updated: 22 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+libppm - functions for PPM programs
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>#include &lt;<A HREF="file:/usr/include/ppm.h">ppm.h</A>&gt;</B>
+
+<P>
+<B>void ppm_init(</B><B>int *</B> <I>argcP</I><B>,</B>
+  <B>char *</B> <I>argv</I><B>[]</B><B>);</B>
+
+<P>
+<B>pixel ** ppm_allocarray(</B>
+
+<B>int </B><I>cols</I><B>,</B><B>int</B> <I>rows</I><B>);</B>
+
+<P>
+<B>pixel * ppm_allocrow(</B><B>int</B> <I>cols</I><B>);</B>
+
+<P>
+<B>void ppm_freearray(</B><B>pixel **</B> <I>pixels</I><B>,</B>
+  <B>int</B> <I>rows</I><B>);</B>
+
+<P>
+<B>void ppm_freerow(</B><B>pixel *</B> <I>pixelrow</I><B>);</B>
+
+<P>
+<B>void ppm_readppminit(</B><B>FILE *</B> <I>fp</I><B>,</B>
+  <B>int *</B> <I>colsP</I><B>,</B>
+  <B>int *</B> <I>rowsP</I><B>,</B>
+
+<B>pixval *</B> <I>maxvalP</I><B>,</B><B>int *</B> <I>formatP</I><B> );</B>
+
+<P>
+<B>void ppm_readppmrow(</B><B>FILE *</B><I>fp</I><B>,</B>
+  <B>pixel *</B> <I>pixelrow</I><B>,</B>
+  <B>int </B><I>cols</I><B>,</B>
+  <B>pixval </B><I>maxval</I><B>,</B>
+  <B>int </B><I>format</I><B>);</B>
+
+<P>
+<B>pixel ** ppm_readppm(</B><B>FILE *</B> <I>fp</I><B>,</B>
+  <B>int *</B> <I>colsP</I><B>,</B>
+  <B>int *</B> <I>rowsP</I><B>,</B>
+  <B>pixvalP *</B> <I>maxvalP</I><B>);</B>
+
+<P>
+<B>void ppm_writeppminit(</B><B>FILE * <i>fp</i>,</B>
+  <B>int</B> <I>cols</I><B>,</B>
+  <B>int</B> <I>rows</I><B>,</B>
+  <B>pixval</B> <I>maxval</I><B>,</B>
+  <B>int</B> <I>forceplain</I><B>);</B>
+
+<P>
+<B>void ppm_writeppmrow(</B><B>FILE *</B> <I>fp</I><B>,</B>
+  <B>pixel *</B> <I>pixelrow</I><B>,</B>
+  <B>int</b> <i>cols</i><B>,</B>
+  <B>pixval</B> <I>maxval</I><B>,</B>
+  <B>int</B> <I>forceplain</I><B>);</B>
+
+<P>
+<B>void ppm_writeppm(</B><B>FILE *</B> <I>fp</I><B>,</B>
+  <B>pixel **</B> <I>pixels</I><B>,</B>
+  <B>int</B> <I>cols</I><B>,</B>
+  <B>int</B> <I>rows</I><B>,</B>
+  <B>pixval</B> <I>maxval</I><B>,</B>
+  <B>int</B> <I>forceplain</I><B>);</B>
+
+<P>
+<B>void ppm_writeppm(</B><B>FILE *</B> <I>fp</I><B>,</B>
+  <B>pixel **</B> <I>pixels</I><B>,</B>
+  <B>int</B> <I>cols</I><B>,</B>
+  <B>int</B> <I>rows</I><B>,</B>
+  <B>pixval</B> <I>maxval</I><B>,</B>
+  <B>int</B> <I>forceplain</I><B>);</B>
+
+<P>
+<B>void ppm_nextimage(</B><B>FILE *</B> <I>file</I><B>,</B>
+  <B>int * const</B> <I>eofP</I><B>);</B>
+
+<P>
+<B>void ppm_check(</B><B>FILE *</B> <I>file</I><B>,</B>
+  <B>const enum pm_check_type</B> <I>check_type</I><B>,</B>
+  <B>const int</B> <I>format</I><B>,</B>
+  <B>const int</B> <I>cols</I><B>,</B>
+  <B>const int</B> <I>rows</I><B>,</B>
+  <B>const int</B> <I>maxval</I><B>,</B>
+
+<BR>
+
+<B>enum pm_check_code * const</B> <I>retval</I><B>);</B>
+
+<P>
+<B>typedef ... pixel;</B>
+
+<B>typedef ... pixval;</B>
+
+<P>
+<B>#define PPM_MAXMAXVAL ...</B>
+
+<P>
+<B>#define PPM_OVERALLMAXVAL ...</B>
+
+<P>
+<B>#define PPM_FORMAT ...</B>
+
+<P>
+<B>#define RPPM_FORMAT ...</B>
+
+<P>
+<B>#define PPM_TYPE PPM_FORMAT</B>
+
+<P>
+<B>#define</B> <B>PPM_FORMAT_TYPE(</B><I>format</I><B>)</B> <B>...</B>
+
+<P>
+<B>extern pixval ppm_pbmmaxval;</B>
+
+<P>
+<B>pixval PPM_GETR(pixel</B> <I>p</I><B>)</B>
+
+<p>
+<B>pixval PPM_GETG(pixel</B> <I>p</I><B>)</B>
+
+<p>
+<B>pixval PPM_GETB(pixel</B> <I>p</I><B>)</B>
+
+<P>
+<B>void PPM_ASSIGN(pixel</B> <I>p</I><B>,</B>
+  <B>pixval</B> <I>red</I><B>,</b>
+  <b>pixval</B> <I>grn</I><B>,</b>
+  <b>pixval</B> <I>blu</I><B>)</B>
+
+<P>
+<B>int PPM_EQUAL(pixel</B> <I>p</I><B>,</b>
+  <b>pixel</B> <I>q</I><B>)</B>
+
+<P>
+<B>int PPM_ISGRAY(pixel</B> <I>p</I><B>)</B>
+
+<P>
+<B>void</b>
+  <b>PPM_DEPTH(pixel</B> <I>newp</I><B>,</b>
+  <b>pixel</B> <I>p</I><B>,</B>
+  <B>pixval</B> <I>oldmaxval</I><B>,</b>
+  <b>pixval</B> <I>newmaxval</I><B>)</B>
+
+<P>
+<B>pixel ppm_parsecolor(char *</B> <I>colorname</I><B>,</b>
+   <b>pixval</B> <I>maxval</I><B>)</B>
+
+<P>
+<B>char * ppm_colorname(pixel *</B> <I>colorP</I><B>,</b>
+  <b>pixval</B> <I>maxval</I><B>,</b>
+  <b>int</B> <I>hexok</I><B>)</B>
+
+<P>
+<B>void ppm_readcolornamefile(</b>
+  <b>const char *</b><i>fileName</i>, 
+  <b>int</b> <i>mustOpen</i>,
+  <b>colorhash_table *</b> <i>chtP</i>, 
+  <b>const char ***</b> <i>colornamesP</i>
+  <b>)</b>
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>These library functions are part of <a href="index.html">Netpbm</a>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H3>TYPES AND CONSTANTS</H3>
+
+Each <B>pixel</B> contains three <B>pixval</B>s, each of which should
+contain only the values between <B>0</B> and <B>PPM_MAXMAXVAL</B>.
+<B>ppm_pbmmaxval</B> is the maxval used when a PPM program reads a PBM
+file.  Normally it is 1; however, for some programs, a larger value
+gives better results.
+
+
+<H3 id="manipulating_pixels">MANIPULATING PIXELS</H3>
+
+<p>The macros <B>PPM_GETR</B>, <B>PPM_GETG</B>, and <B>PPM_GETB</B>
+retrieve the red, green, or blue sample, respectively, from the given
+pixel.
+
+<P>The <B>PPM_ASSIGN</B> macro assigns the given values to the red,
+green, and blue samples of the given pixel.
+
+<P>The <B>PPM_EQUAL</B> macro tests two pixels for equality.
+
+<P>The <B>PPM_ISGRAY</B> macro tests a pixel for being gray.  It
+returns true if and only if the color of pixel <i>p</i> is black,
+white, or gray.
+
+<P>The <B>PPM_DEPTH</B> macro scales the colors of pixel <I>p</I>
+according the old and new maxvals and assigns the new values to
+<I>newp</I>.  It is intended to make writing ppmtowhatever easier.
+
+<P>The <B>PPM_LUMIN</B>, <B>PPM_CHROM_R</B>, and <B>PPM_CHROM_B</B>
+macros determine the luminance, red chrominance, and blue chrominance,
+respectively, of the pixel <I>p</I>.  The scale of all these values is
+the same as the scale of the input samples (i.e. 0 to maxval for
+luminance, -maxval/2 to maxval/2 for chrominance).
+
+<P>Note that the macros do it by floating point multiplication.  If
+you are computing these values over an entire image, it may be
+significantly faster to do it with multiplication tables instead.
+Compute all the possible products once up front, then for each pixel,
+just look up the products in the tables.
+
+<A NAME="lbAG">&nbsp;</A>
+<H3>INITIALIZATION</H3>
+
+<P><b>ppm_init()</b> is identical to <b>pm_init</b>.
+
+<A NAME="lbAH">&nbsp;</A>
+<H3>MEMORY MANAGEMENT</H3>
+
+<B>ppm_allocarray()</B> allocates an array of pixels.
+
+<P><B>ppm_allocrow()</B> allocates a row of the given number of
+pixels.
+
+<P><B>ppm_freearray()</B> frees the array allocated with
+<B>ppm_allocarray()</B> containing the given number of rows.
+
+<P><B>ppm_freerow()</B> frees a row of pixelss allocated with
+<B>ppm_allocrow()</B>.
+
+<A NAME="lbAI">&nbsp;</A>
+<H3>READING FILES</H3>
+
+<P>If a function in this section is called on a PBM or PGM format
+file, it translates the PBM or PGM file into a PPM file on the fly and
+functions as if it were called on the equivalent PPM file.  The
+<I>format</I> value returned by <B>ppm_readppminit()</B> is, however,
+not translated.  It represents the actual format of the PBM or PGM
+file.
+
+<P><B>ppm_readppminit()</B> reads the header of a PPM file, returning
+all the information from the header and leaving the file positioned
+just after the header.
+
+<P><B>ppm_readppmrow()</B> reads a row of pixels into the
+<I>pixelrow</I> array.  <I>format</I>, <I>cols</I>, and <I>maxval</I>
+are the values returned by <B>ppm_readppminit()</B>.
+
+<P><B>ppm_readppm()</B> reads an entire PPM image into memory,
+returning the allocated array as its return value and returning the
+information from the header as <I>rows</I>, <I>cols</I>, and
+<I>maxval</I>.  This function combines <B>ppm_readppminit()</B>,
+<B>ppm_allocarray()</B>, and <B>ppm_readppmrow()</B>.
+
+
+<A NAME="lbAJ">&nbsp;</A>
+<H3>WRITING FILES</H3>
+
+<B>ppm_writeppminit()</B> writes the header for a PPM file and leaves
+it positioned just after the header.
+
+<P><I>forceplain</I> is a logical value that tells
+<B>ppm_writeppminit() </B> to write a header for a plain PPM format
+file, as opposed to a raw PPM format file.
+
+<P><B>ppm_writeppmrow()</B> writes the row <I>pixelrow</I> to a PPM
+file.  For meaningful results, <I>cols</I>, <I>maxval</I>, and
+<I>forceplain</I> must be the same as was used with
+<B>ppm_writeppminit()</B>.
+
+<P><B>ppm_writeppm()</B> write the header and all data for a PPM
+image.  This function combines <B>ppm_writeppminit()</B> and
+<B>ppm_writeppmrow()</B>.
+
+<H3 id="miscellaneous">MISCELLANEOUS</H3>
+
+<P><B>ppm_nextimage()</B> positions a PPM input file to the next image
+in it (so that a subsequent <B>ppm_readppminit()</B> reads its
+header).
+
+<P><B>ppm_nextimage()</B> is analogous to <B>pbm_nextimage()</B>, but
+works on PPM, PGM, and PBM files.
+
+<P><B>ppm_check() </B> checks for the common file integrity error
+where the file is the wrong size to contain all the image data.
+
+<P><B>ppm_check() </B> is analogous to <B>pbm_check()</B>, but works
+on PPM, PGM, and PBM files.
+
+
+<h3 id="color">COLOR</h3>
+
+<H4>Luminance, Chrominance (YcbCr)</H4>
+
+<pre>
+<code>
+    float PPM_LUMIN(pixel p);
+    float PPM_CHROM_B(pixel p);
+    float PPM_CHROM_R(pixel p);
+</code>
+</pre>
+
+<p><B>PPM_LUMIN</B> takes a <b>pixel</b> as an argument and returns
+the luminance of that pixel, with the same maxval as the pixel
+(e.g. if the pixel's maxval is 255, a <b>PPM_LUMIN</b> value of 255
+means fully luminant).
+
+<p><b>PPM_CHROM_B</b> and <b>PPM_CHROM_R</b> are similar, for the red
+and blue chrominance values.
+
+
+<PRE>
+<CODE>
+    pixel
+    ppm_color_from_ycbcr(unsigned int y, 
+                         int          cb, 
+                         int          cr);
+</CODE>
+</PRE>
+
+<p><b>ppm_color_from_ycbcr()</b> converts in the other direction.
+Given luminance and chrominance, it returns a pixel value.
+
+<h4 id="hsv">Hue, Saturation, Value (HSV)</h4>
+
+<pre>
+<code>
+    struct hsv {
+        double h;  /* hue (degrees)  0..360 */
+        double s;  /* saturation (0-1) */
+        double v;  /* value (0-1) */
+    };
+</code>
+</pre>
+
+<pre>
+<code>
+    pixel
+    ppm_color_from_hsv(struct hsv const hsv,
+                       pixval     const maxval);
+</code>
+</pre>
+
+<pre>
+<code>
+    struct hsv
+    ppm_hsv_from_color(pixel  const color,
+                       pixval const maxval);
+</code>
+</pre>
+
+<p>These convert a color between from <b>pixel</b> (RGB) form and HSV.
+
+<pre>
+<code>
+    pixval
+    ppm_saturation(pixel  const p,
+                   pixval const maxval);
+</code>
+</pre>
+
+<p>This gives you the saturation of a color, as a pixval.  (e.g. if
+the saturation of <i>p</i> is 50% and <i>maxval</i> is 100,
+<b>ppm_saturation()</b> returns 50).
+
+
+<h4 id="berlinkay">Berlin-Kay Color</h4>
+
+<p>Brent Berlin and Paul Kay in 1969 did a study which identified
+a set of 11 basic colors people universally recognize.  They are:
+
+<ul>
+<li>black
+<li>gray
+<li>white
+<li>red
+<li>orange
+<li>yellow
+<li>green
+<li>blue
+<li>violet
+<li>purple
+<li>brown
+</ul>
+
+<p>The <b>bk_color</b> type represents a color from this set:
+
+<pre>
+<code>
+    typedef enum {
+        BKCOLOR_BLACK = 0,
+        BKCOLOR_GRAY,
+        BKCOLOR_WHITE,
+        BKCOLOR_RED,
+        BKCOLOR_ORANGE,
+        BKCOLOR_YELLOW,
+        BKCOLOR_GREEN,
+        BKCOLOR_BLUE,
+        BKCOLOR_VIOLET,
+        BKCOLOR_PURPLE,
+        BKCOLOR_BROWN
+    } bk_color;
+</code>
+</pre>
+
+<p>You can use this as an index of an array, in which case you might also
+want macro <b>BKCOLOR_COUNT</b>, which is the number of colors in the
+set (11).
+
+<p>To translate between the <b>bk_color</b> type and the English names
+of the colors, use <b>ppm_bk_color_from_name()</b> and
+<b>ppm_name_from_bk_color()</b>:
+
+<pre>
+<code>
+    bk_color
+    ppm_bk_color_from_name(const char * name);
+    
+    const char *
+    ppm_name_from_bk_color(bk_color bkColor);
+</code>
+</pre>
+
+
+<p><b>ppm_bk_color_from_color()</b> tells you to which Berlin-Kay color
+a certain color is closest, by way of a fuzzy color matching algorithm:
+
+<pre>
+<code>
+    bk_color
+    ppm_bk_color_from_color(pixel  color,
+                            pixval maxval);
+</code>
+</pre>
+
+<p><i>maxval</i> is the maxval on which <i>color</i> is based.
+
+<p><b>ppm_color_from_bk_color()</b> converts the opposite way: given
+a Berlin-Kay color, it gives the color, in <b>pixel</b> form, that best
+represents it.
+
+<pre>
+<code>
+    pixel
+    ppm_color_from_bk_color(bk_color bkColor,
+                            pixval   maxval);
+</code>
+</pre>
+
+<p><i>maxval</i> is the maxval on which the returned color is based.
+
+<p>All of the facilities in this section were new in Netpbm 10.34
+(June 2006).
+
+<H3 id="colorname">COLOR NAMES</H3>
+
+<A NAME="rgb.txt">&nbsp;</a>
+<h4>System Color Dictionary</h4>
+
+<P>Netpbm uses the system's X11 color dictionary (usually in
+<b>/usr/lib/X11/rgb.txt</b>).  This is the same file the X Window
+System typically uses to associate colors with their names.
+
+<p>The color dictionary that Netpbm uses is in the file whose name is
+the value of the <B>RGBDEF</B> environment variable.  If <B>RGBDEF</B>
+is not set, Netpbm defaults to the first existing file from this list:
+
+<ol>
+<li><b>/usr/lib/X11/rgb.txt</b>
+<li><b>/usr/openwinlib/rgb.txt</b>
+<li><b>/usr/X11R6/lib/X11/rgb.txt</b>
+</ol>
+
+<P>You can see the color names from a typical X11 color dictionary,
+which is probably very close to what is on your system, along with the
+colors, <a
+href="http://www.swiss.ai.mit.edu/~jaffer/Color/x11.pdf">here</a>.  <a
+href="http://www.swiss.ai.mit.edu/~jaffer/Color/Dictionaries.html">This
+website</a> shows a bunch of other versions you could use.
+
+<P>Netpbm is packaged with a color dictionary.  A standard Netpbm
+installation installs this file as "misc/rgb.txt" in the Netpbm
+directory.  This color dictionary has colors from everywhere the
+Netpbm maintainer could find them, and is a superset of XFree 86's
+color dictionary.
+
+<H4 id="ppm_parsecolor">ppm_parsecolor</H4>
+
+<p><B>ppm_parsecolor()</B> interprets a color specification and returns a
+pixel of the color that it indicates.  The color specification is
+ASCII text, in one of these formats:
+
+<ul>
+
+<li>a name, as defined in the <a href="#rgb.txt">system color dictionary
+</a>.
+
+<LI> An X11-style hexadecimal specifier:
+<tt>rgb:<i>r</i>/<i>g</i>/<i>b</i></tt>, where <i>r</i>, <i>g</i>, and
+<i>b</i> are each 1- to 4-digit hexadecimal numbers.  For each, the maxval
+is the maximum number that can be represented in the number of hexadecimal
+digits given.  Example: <tt>rgb:01/ff/8000</tt> specifies 1/255 red
+intensity, maximum green intensity, and about half blue intensity.
+
+<LI> An X11-style decimal specifier:
+<tt>rgbi:<i>r</i>/<i>g</i>/<i>b</i></tt>, where <i>r</i>, <i>g</i>,
+and <i>b</i> are floating point numbers from 0 to 1.
+
+<li>an old-X11-style hexadecimal triple: <tt>#rgb</tt>, <tt>#rrggbb</tt>, 
+<tt>#rrrgggbbb</tt>, or <tt>#rrrrggggbbbb</tt>.
+
+<li>A triplet of decimal floating point numbers from 0.0 to 1.0,
+representing red, green, and blue intensities respectively, separated
+by commas.  E.g. <tt>1.0,0.5,.25</tt>.  This is for backwards compatibility;
+it was in use before MIT came up with the similar and preferred rgbi style).
+
+</ul>
+
+<P>If the color specification does not conform to any of these
+formats, including the case that it is a name, but is not in the
+system color dictionary, <B>ppm_parsecolor()</B> <a
+href="error.html">throws an error</a>.
+
+<h4 id="ppm_colorname">ppm_colorname</h4>
+
+<P><B>ppm_colorname()</B> returns a string that describes the color
+of the given pixel.  If a <a href="#rgb.txt">system color dictionary</a>
+is available and the color appears in it, <B>ppm_colorname()</B>
+returns the name of the color from the file.  If the color does not
+appear in a system color dictionary and <I>hexok</I> is true,
+<B>ppm_colorname()</B> returns a hexadecimal color specification
+triple (#rrggbb).  If a system color dictionary is available but the
+color does not appear in it and <I>hexok</I> is false,
+<B>ppm_colorname()</B> returns the name of the closest matching color
+in the color file.  Finally, if there is no system color dictionary
+available and <I>hexok</I> is false, <B>ppm_colorname()</B> fails and
+exits the program with an error message.
+
+<P>The string returned is in static libppm library storage which is
+overwritten by every call to <B>ppm_colorname()</B>.
+
+
+<h4 id="ppm_readcolornamefile">ppm_readcolornamefile</h4>
+
+<P><b>ppm_readcolornamefile()</b> reads the entire contents of the color
+dictionary in the file named <i>fileName</i> into data structures you
+can use to access it easily.
+
+<p>The function returns all the color names as an array of
+null-terminated strings.  It mallocs the space for this array and
+returns its address at <i>colornamesP</i>.
+<b>(*colornamesP)[</b><i>i</i><b>]</b> is the address of the first
+character in the null-terminated string that is the name of the
+<i>i</i>th color in the dictionary.
+
+<p>The function also returns a <b>colorhash_table</b> (see <a
+href="#colorindex">COLOR INDEXING</a>) that matches all these color names
+up to the colors they represent.  It mallocs the space for the
+<b>colorhash_table</b> and returns its address at <i>chtP</i>.  The
+number that the <b>colorhash_table</b> associates with each color is
+the index into the color name array described above of the name of
+that color.
+
+<p>You may specify a null pointer for <i>fileName</i> to indicate the
+default color dictionary.
+
+<p><i>mustOpen</i> is a boolean.  If it is nonzero, the function fails
+and aborts the program if it is unable to open the specified color dictionary
+file.  If it is zero, though, it simply treats an unopenable color dictionary
+as an empty one.  The colorhash and color name array it returns contain no
+colors or names.
+
+<p><b>ppm_readcolornamefile()</b> was new in Netpbm 10.15 (April 2003).
+
+
+<A NAME="colorindex">&nbsp;</A>
+<H3>COLOR INDEXING</H3>
+
+<P>Sometimes in processing images, you want to associate a value with
+a particular color.  Most often, that's because you're generating a
+color mapped graphics format.  In a color mapped graphics format, the
+raster contains small numbers, and the file contains a color map that
+tells what color each of those small numbers refers to.  If your image
+has only 256 colors, but each color takes 24 bits to describe, this
+can make your output file much smaller than a straightforward RGB
+raster would.
+
+<P>So, continuing the above example, say you have a <B>pixel</B> value
+for chartreuse and in your output file and you are going to represent
+chartreuse by the number 12.  You need a data structure that allows
+your program quickly to find out that the number for a chartreuse
+<B>pixel</B> is 12.  Netpbm's color indexing data types and functions
+give you that.
+
+<P><B>colorhash_table</B> is a C data type that associates an integer
+with each of an arbitrary number of colors.  It is a hash table, so it
+uses far less space than an array indexed by the color's RGB values
+would.
+
+<P>The problem with a <B>colorhash_table</B> is that you can only look
+things up in it.  You can't find out what colors are in it.  So Netpbm
+has another data type for representing the same information, the
+poorly but historically named <B>colorhist_vector</B>.  A
+<B>colorhist_vector</B> is just an array.  Each entry represents a
+color and contains the color's value (as a <B>pixel</B>) and the
+integer value associated with it.  The entries are filled in starting
+with subscript 0 and going consecutively up for the number of colors
+in the histogram.
+
+<P>(The reason the name is poor is because a color histogram is only
+one of many things that could be represented by it).
+
+<P><B>colorhash_table ppm_alloccolorhash()</B>
+
+<P>This creates a <B>colorhash_table</B> using dynamically allocated
+storage.  There are no colors in it.  If there is not enough storage,
+it exits the program with an error message.
+
+<P><B>void ppm_freecolorhash()</B>
+
+<P>This destroys a <B>ppm_freecolorhash </B> and frees all the storage
+associated with it.
+
+<P><B>int ppm_addtocolorhash( colorhash_table cht, const pixel * const
+colorP, const int value)</B>
+
+<P>This adds the specified color to the specified <B>colorhash_table
+</B> and associates the specified value with it.
+
+<P>You must ensure that the color you are adding isn't already present
+in the <B>colorhash_table</B>.
+
+<P>There is no way to update an entry or delete an entry from a 
+<B>colorhash_table</B>.
+
+<P><B>int ppm_lookupcolor( const colorhash_table cht, const pixel *
+const colorP )</B>
+
+<P>This looks up the specified color in the specified
+<B>colorhash_table</B>.  It returns the integer value associated with
+that color.
+
+<P>If the specified color is not in the hash table, the function
+returns -1.  (So if you assign the value -1 to a color, the return
+value is ambiguous).
+
+<P><B>colorhist_vector ppm_colorhashtocolorhist( const colorhash_table cht,</B>
+
+<B>const int ncolors )</B>
+
+<P>This converts a <B>colorhash_table</B> to a
+<B>colorhist_vector</B>.  The return value is a new
+<B>colorhist_vector</B> which you must eventually free with
+<B>ppm_freecolorhist()</B>.
+
+<P><B>ncolors</B> is the number of colors in <B>cht</B>.  If it has
+more colors than that, <B>ppm_colorhashtocolorhist</B> does not create
+a <B>colorhist_vector</B> and returns NULL.
+
+<P><B>colorhash_table ppm_colorhisttocolorhash( const colorhist_vector chv, 
+const int ncolors ) </B>
+
+<P>This poorly named function does <em>not</em> convert from a
+<B>colorhist_vector</B> to a <B>colorhash_table</B>.
+
+<P>It does create a <B>colorhash_table</B> based on a
+<B>colorhist_vector</B> input, but the integer value for a given color
+in the output is not the same as the integer value for that same color
+in the input.  <B>ppm_colorhisttocolorhash()</B> ignores the integer
+values in the input.  In the output, the integer value for a color is
+the index in the input <B>colorhist_vector</B> for that color.
+
+<P>You can easily create a color map for an image by running
+<B>ppm_computecolorhist() </B> over the image, then
+<B>ppm_colorhisttocolorhash()</B> over the result.  Now you can use
+<B>ppm_lookupcolor()</B> to find a unique color index for any pixel in
+the input.
+
+<P>If the same color appears twice in the input,
+<B>ppm_colorhisttocolorhash() </B> exit the program with an error
+message.
+
+<P><B>ncolors</B> is the number of colors in <B>chv</B>.
+
+<P>The return value is a new <B>colorhash_table</B> which you must
+eventually free with <B>ppm_freecolorhash()</B>.
+
+<A NAME="lbAN">&nbsp;</A>
+<H3>COLOR HISTOGRAMS</H3>
+
+<P>The Netpbm libraries give you functions to examine a Netpbm image
+and determine what colors are in it and how many pixels of each color
+are in it.  This information is known as a color histogram.  Netpbm
+uses its <B>colorhash_table</B> data type to represent a color
+histogram.
+
+<P><B>colorhash_table ppm_computecolorhash( pixel ** const pixels,
+const int cols, const int rows, const int maxcolors, int* const colorsP )</B>
+
+<P>This poorly but historically named function generates a
+<B>colorhash_table</B> whose value for each color is the number of
+pixels in a specified image that have that color.  (I.e. a color
+histogram).  As a bonus, it returns the number of colors in the image.
+
+<P>(It's poorly named because not all <B>colorhash_table</B>s are
+color histograms, but that's all it generates).
+
+<P><B>pixels</B>, <B>cols</B>, and <B>rows</B> describe the input
+image.
+
+<P><B>maxcolors</B> is the maximum number of colors you want
+processed.  If there are more colors that that in the input image,
+<B>ppm_computecolorhash()</B> returns NULL as its return value and
+stops processing as soon as it discovers this.  This makes it run
+faster and use less memory.  One use for <B>maxcolors</B> is when you
+just want to find out whether or not the image has more than N colors
+and don't want to wait to generate a huge color table if so.  If you
+don't want any limit on the number of colors, specify
+<B>maxcolors</B>=<B>0</B>.
+
+<P><B>ppm_computecolorhash()</B> returns the actual number of colors
+in the image as <B>*colorsP</B>, but only if it is less than or equal
+to <B>maxcolors</B>.
+
+<P><B>colorhash_table ppm_computecolorhash2( FILE * const ifp,
+const int cols, const int rows, const pixval maxval, const int format,</B>
+
+<B>const int maxcolors, int* const colorsP )</B>
+
+<P>This is the same as <B>ppm_computecolorhash()</B> except that
+instead of feeding it an array of pixels in storage, you give it an
+open file stream and it reads the image from the file.  The file must
+be positioned after the header, at the raster.  Upon return, the file
+is still open, but its position is undefined.
+
+<P><B>maxval</B> and <B>format</B> are the values for the image
+(i.e. information from the file's header).
+
+<P><B>colorhist_vector ppm_computecolorhist( pixel ** pixels,
+int cols, int rows, int maxcolors, int * colorsP )</B>
+
+<P>This is like <B>ppm_computecolorhash()</B> except that it creates a
+<B>colorhist_vector</B> instead of a <B>colorhash_table</B>.
+
+<P>If you supply a nonzero <B>maxcolors</B> argument, that is the
+maximum number of colors you expect to find in the input image.  If
+there are more colors than you say in the image,
+<B>ppm_computecolorhist()</B> returns a null pointer as its return
+value and nothing meaningful as <B>*colorsP</B>.
+
+<P>If not, the function returns the new <B>colorhist_vector </B> as
+its return value and the actual number of colors in the image as
+<B>*colorsP</B>.  The returned array has space allocated for the
+specified number of colors regardless of how many actually exist.  The
+extra space is at the high end of the array and is available for your
+use in expanding the <B>colorhist_vector</B>.
+
+<P>If you specify <B>maxcolors</B>=<B>0</B>, there is no limit on the
+number of colors returned and the return array has space for 5 extra
+colors at the high end for your use in expanding the
+<B>colorhist_vector</B>.
+
+<P><B>colorhist_vector ppm_computecolorhist2( FILE * ifp,
+int cols, int rows, int maxcolors, pixval maxval, int format,
+int * colorsP )</B>
+
+<P>This is the same as <B>ppm_computecolorhist()</B> except that
+instead of feeding it an array of pixels in storage, you give it an
+open file stream and it reads the image from the file.  The file must
+be positioned after the header, at the raster.  Upon return, the file
+is still open, but its position is undefined.
+
+<A NAME="lbAO">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="libpbm.html">libpbm</A></B>
+
+<A NAME="lbAP">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<UL>
+<LI><A HREF="#lbAE">TYPES AND CONSTANTS</A>
+<LI><A HREF="#manipulating_pixels">MANIPULATING PIXELS</A>
+<LI><A HREF="#lbAG">INITIALIZATION</A>
+<LI><A HREF="#lbAH">MEMORY MANAGEMENT</A>
+<LI><A HREF="#lbAI">READING FILES</A>
+<LI><A HREF="#lbAJ">WRITING FILES</A>
+<LI><A HREF="#miscellaneous">MISCELLANEOUS</A>
+<LI><A HREF="#color">COLOR</A>
+<LI><A HREF="#colorname">COLOR NAMES</A>
+<LI><A HREF="#colorindex">COLOR INDEXING</A>
+<LI><A HREF="#lbAN">COLOR HISTOGRAMS</A>
+</UL>
+<LI><A HREF="#lbAO">SEE ALSO</A>
+<LI><A HREF="#lbAP">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/libsystem.html b/libsystem.html
new file mode 100644
index 00000000..db969303
--- /dev/null
+++ b/libsystem.html
@@ -0,0 +1,307 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html> 
+<head>
+<title>Netpbm subroutine library: pm_system() subroutine</title>
+<meta name="manual_section" content="3">
+</head>
+
+<body>
+<h1>pm_system()</h1>
+Updated: 17 October 2006
+<br>
+
+<h2>Name</h2>
+pm_system - run a Netpbm program with program input and output
+
+<h2>Synopsis</h2>
+
+<pre>
+#include &lt;netpbm/pm_system.h&gt;
+
+pm_system(void                  stdinFeeder(int, void *),
+          void *          const feederParm,
+          void                  stdoutAccepter(int, void *),
+          void *          const accepterParm,
+          const char *    const shellCommand);
+</pre>
+
+<h2>Example</h2>
+
+<p>This simple example converts a PNM image on Standard Input to a
+JFIF (JPEG) image on Standard Output.  In this case,
+<b>pm_system()</b> is doing no more than <b>system()</b> would do.
+
+<pre>
+    pm_system(NULL, NULL, NULL, NULL, "pnmtojpeg");
+</pre>
+
+
+<p>This example does the same thing, but moves the data through memory
+buffers to illustrate use with memory buffers, and we throw in a stage
+to shrink the image too:
+<pre>
+#include &lt;netpbm/pm_system.h&gt;
+
+char              pnmData[100*1024];   /* Input file better be &lt; 100K */
+char              jfifData[100*1024];
+struct bufferDesc pnmBuffer;
+struct bufferDesc jfifBuffer;
+unsigned int      jfifSize;
+
+pnmBuffer.size = fread(pnmData, 1, sizeof(pnmData), stdin);
+pnmBuffer.buffer = pnmData;
+pnmBuffer.bytesTransferredP = NULL;
+
+jfifBuffer.size = sizeof(jfifData);
+jfifBuffer.buffer = jfifData;
+jfifBuffer.bytesTransferredP = &amp;jfifSize; 
+
+pm_system(&amp;pm_feed_from_memory, &amp;pnmBuffer,
+          &amp;pm_accept_to_memory, &amp;jfifBuffer,
+          "pamscale .5 | pnmtojpeg");
+
+fwrite(jfifData, 1, jfifSize, stdout);
+
+</pre>
+
+
+<p>This example reads an image into libnetpbm PAM structures, then
+brightens it, then writes it out, to illustrate use of <b>pm_system</b>
+with PAM structures.
+<pre>
+#include &lt;netpbm/pam.h&gt;
+#include &lt;netpbm/pm_system.h&gt;
+
+struct pam       inpam;
+struct pam       outpam;
+tuple **         inTuples;
+tuple **         outTuples;
+struct pamtuples inPamtuples;
+struct pamtuples outPamtuples;
+
+inTuples = pnm_readpam(stdin, &amp;inpam, sizeof(inpam));
+
+outpam = inpam;
+
+inPamtuples.pamP = &amp;inpam;
+inPamtuples.tuplesP = &amp;inTuples;
+outPamtuples.pamP = &amp;outpam;
+outPamtuples.tuplesP = &amp;outTuples;
+
+pm_system(&amp;pm_feed_from_pamtuples, &amp;inPamtuples,
+          &amp;pm_accept_to_pamtuples, &amp;outPamtuples,
+          "ppmbrighten -v 100");
+
+outpam.file = stdout;
+pnm_writepam(&amp;outpam, outTuples);
+
+</pre>
+
+
+
+<h2>DESCRIPTION</H2>
+
+<p>This library function is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pm_system()</b> is a lot like the standard C library
+<b>system()</b> subroutine.  It runs a shell and has that shell
+execute a shell command that you specify.  But <b>pm_system()</b>
+gives you more control over the Standard Input and Standard Output of
+that shell command than <b>system()</b>.  <b>system()</b> passes to the
+shell command as Standard Input and Output whatever is the Standard Input
+and Output of the process that calls <b>system()</b>.  But with
+<b>pm_system()</b>, you specify as arguments subroutines to execute to
+generate the shell command's Standard Input stream and to process the
+shell command's Standard Output stream.
+
+<p>Your Standard Input feeder subroutine can generate the stream in
+limitless ways.  <b>pm_system()</b> gives it a file descriptor of a
+pipe to which to write the stream it generates.  <b>pm_system()</b>
+hooks up the other end of that pipe to the shell command's Standard
+Input.
+
+<p>Likewise, your Standard Output accepter subroutine can do anything
+it wants with the stream it gets.  <b>pm_system()</b> gives it a file
+descriptor of a pipe from which to read the stream.
+<b>pm_system()</b> hooks up the other end of that pipe to the shell
+command's Standard Output.
+
+<p>The argument <i>stdinFeeder</i> is a function pointer that
+identifies your Standard Input feeder subroutine.  <b>pm_system()</b>
+runs it in a child process and waits for that process to terminate (and
+accepts its completion status) before returning.  <i>feederParm</i> is
+the argument that <b>pm_system()</b> passes to the subroutine; it is
+opaque to <b>pm_system()</b>.
+
+<p>If you pass <i>stdinFeeder</i> = NULL, <b>pm_system()</b> simply
+passes your current Standard Input stream to the shell command (as
+<b>system()</b> would do), and does not create a child process.
+
+<p>The argument <i>stdoutAccepter</i> is a function pointer that
+identifies your Standard Output accepter subroutine.
+<b>pm_system()</b> calls it in the current process.
+<i>accepterParm</i> is an argument analogous to <i>feederParm</i>.
+
+<p>If you pass <i>stdoutAccepter</i> = NULL, <b>pm_system()</b> simply
+passes your current Standard Output stream to the shell command (as
+<b>system()</b> would do.
+
+<p>The argument <i>shellCommand</i> is a null-terminated string
+containing the shell command that the shell is to execute.  It can be
+any command that means something to the shell and can take a pipe for
+Standard Input and Output.  Example:
+
+<pre>
+<kbd>
+ppmbrighten -v 100 | pamdepth 255 | pamscale .5
+</kbd>
+</pre>
+
+<b>pm_system()</b> creates a child process to run the shell and waits
+for that process to terminate (and accepts its completion status)
+before returning.
+
+
+<h2>Applications</h2>
+
+<p>The point of <b>pm_system()</b> is to allow you write a C program that
+uses other programs internally, as a shell script would.  This is particularly
+desirable with Netpbm, because Netpbm consists of a lot of programs that
+perform basic graphic manipulations and you'd like to be able to build a
+program that does a more sophisticated graphic manipulation by calling the
+more basic Netpbm programs.  These building block programs typically take
+input from Standard Input and write output to Standard Output.
+
+<p>The obvious alternative is to use a higher level language -- Bourne Shell
+or Perl, for example.  But often you want your program to do manipulations
+of your graphical data that are easier and more efficient in C.  Or you want
+to use the Netpbm subroutine library in your program.  The Netpbm subroutine
+library is a C-linkage library; the subroutines in it are not usable from a
+Bourne Shell or Perl program.
+
+<p>A typical use of <b>pm_system()</b> is to place the contents of
+some graphical image file in memory, run a Netpbm program against it,
+and have what would ordinarily go into an output file in memory too,
+for further processing.  To do that, you can use the memory buffer
+Standard Input feeder and Standard Output accepter described below.
+
+<p>If your program uses the Netpbm subroutine library to read, write, and
+manipulate images, you may have an image in an array of PAM tuples.  If you
+want to manipulate that image with a Netpbm program (perhaps remap the
+colors using <b>pnmremap</b>), you can use the pamtuple Standard Input
+feeder and Standard Output acceptor described below.
+
+<h2>Broken Pipe Behavior</h2>
+
+<p>When you set up a shell command to take input from a pipe, as
+you do with <b>pm_system()</b>, you need to understand how pipes work with
+respect to the programs at either end of the pipe agreeing to how much
+data is to be transferred.  Here are some notes on that.
+
+<p>It is normal to read a pipe before the process on the other end has
+written the data you hope to read, and it is normal to write to a pipe
+before the process on the other end has tried to read your data.
+Writes to a pipe can be buffered until the reading end requests the
+data.  A process reading or writing a pipe can block until the other
+end is ready.  Or a read or write can complete with an indication that
+the other end is not ready at the moment and therefore no data, or
+less data than was requested, was transferred.
+
+<p>The pipe is normally controlled by the writing end.  When you read
+from a pipe, you keep reading until the program on the other end of
+the pipe closes it, and then you get an end-of-file indication.  You then
+normally close the reading end of the pipe, since it is no longer useful.
+
+<p>When you close the reading end of a pipe before getting the
+end-of-file indication and the writer subsequently tries to write to
+the pipe, that is an error condition for the writer.  In a typical
+default Unix environment, that error causes the writer to receive a
+SIGPIP signal and that signal causes the writer process to terminate
+abnormally.  But if, alternatively, the writer has ordered that SIGPIPE
+be blocked, ignored, or handled, the signal does not cause the death of
+the writer.  Instead, the write operation simply completes with an error
+indication.
+
+
+<h2>Standard Feeders And Acceptors</h2>
+
+<p>You can supply anything you like as a Standard Input feeder or
+Standard Output acceptor, but the Netpbm subroutine library comes with
+a few that perform commonly needed functions.
+
+<h3>Memory Buffer</h3>
+
+<p>These routines are for when you just want to treat an area of
+memory as a file.  If the shell command would ordinarily read a 513
+byte regular file from its Standard Input, you want it to take 513 bytes
+from a certain address in your process' memory.  Whatever bytes the
+shell command wants to write to its output file you want it to store at
+another address in your process' memory.
+
+<p>The Standard Input feeder for this is called <b>pm_feed_from_memory</b>.
+The Standard Output accepter is <b>pm_accept_to_memory</b>.
+
+<p>For both of these, the argument is the address of a <b>struct
+bufferDesc</b>, which is defined as follows:
+
+<pre>
+struct bufferDesc {
+    unsigned int    size;
+    unsigned char * buffer;
+    unsigned int *  bytesTransferredP;
+};
+</pre>
+
+<i>size</i> is the size of the memory buffer and <i>buffer</i> is its
+location in memory (address).  The Standard Input feeder will attempt
+to feed the entire buffer to the shell command's Standard Input; the
+Standard Output accepter will not accept any more data from the shell
+command's Standard Output than will fit in the buffer.  Both return
+the actual amount of data read or written, in bytes, at the location
+identified by <i>bytesTransferredP</i>.  Unless
+<b>bytesTransferredP</b> is NULL.
+
+<p>Because a process typically terminates abnormally when it is not
+able to write everything to a pipe that it wanted to,
+<i>bytesTransferredP</i> is not usually useful in the Standard Input feeder
+case.
+
+
+<h3>Pamtuple</h3>
+
+<p>These routines are for when you have images in memory in the data
+structures used by the PAM family of subroutines in the Netpbm library --
+i.e. struct PAM and an array of struct tuple.  With these routines, you
+can run a Netpbm program against such an image just as you would against
+the same image in a regular file.
+
+<p>The Standard Input feeder for this is called
+<b>pm_feed_from_pamtuples</b>.  The Standard Output accepter is
+<b>pm_accept_to_pamtuples</b>.
+
+<p>For both of these, the argument is the address of a <b>struct
+pamtuples</b>, which is defined as follows:
+
+<pre>
+struct pamtuples {
+    struct pam * pamP;
+    tuple ***    tuplesP;
+};
+</pre>
+
+<p>For the Standard Input feeder, you supply a struct pam, valid up
+through the <i>tuple_type</i> member (except it doesn't matter what
+the <i>file</i> member is) and array of tuples.
+
+<p>For the Standard Output Accepter, you supply only space in memory
+for the struct pam and the address of the tuple array.  The routine
+fills in the struct pam up through the <i>tuple_type</i> member
+(except leaves the <i>file</i> member undefined) and allocates space
+for the tuple array with malloc().  You are responsible for freeing
+that memory.
+
+<h2>HISTORY</h2>
+<b>pm_system()</b> was introduced in Netpbm 10.13 (January 2003).
+
+</body>
+</html>
diff --git a/libtmpfile.html b/libtmpfile.html
new file mode 100644
index 00000000..39671b1f
--- /dev/null
+++ b/libtmpfile.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html> <head>
+<title>Netpbm subroutine library: pm_tmpfile() function</title>
+<meta name="manual_section" content="3">
+</head>
+
+<body>
+<h1>pm_tmpfile()</h1>
+Updated: 22 July 2004
+<br>
+<h2>NAME</h2>
+pm_tmpfile() - tempfile creation routine using TMPFILE
+<h2>SYNOPSIS</h2>
+
+<pre>
+#include &lt;netpbm/pm.h&gt;
+
+FILE *
+pm_tmpfile(void);
+</pre>
+
+<h2>EXAMPLE</h2>
+
+<p>This simple example creates a temporary file, writes "hello world"
+to it, then reads back and prints those contents.
+
+<pre>
+#include &lt;netpbm/pm.h&gt;
+
+FILE * myfile;
+
+myfile = pm_tmpfile();
+
+fprintf(myfile, "hello world\n");
+
+fseek(myfile, 0, SEEK_SET);
+
+fread(buffer, sizeof(buffer), 1, myfile);
+
+fprintf(STDOUT, "temp file contains '%s'\n", buffer);
+
+fclose(myfile);
+
+</pre>
+
+<h2>DESCRIPTION</H2>
+
+<p>This library function is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pm_tmpfile()</b> creates and opens an unnamed temporary file.
+It is basically the same thing as the standard C library
+<b>tmpfile()</b> function, except that it uses the <b>TMPFILE</B>
+environment variable to decide where to create the temporary file.
+If <b>TMPFILE</b> is not set or is set to something unusable (e.g.
+too long), <b>pm_tmpfile()</b> falls back to the value of the
+standard C library symbol <b>P_tmpdir</b>, just like <b>tmpfile()</b>.
+
+<p>Unlike <b>tmpfile()</b>, <b>pm_tmpfile()</b> never returns NULL.
+If it fails, it issues a message to Standard Error and aborts the
+program, like most libnetpbm routines do.
+
+<h2>HISTORY</h2>
+<b>pm_tmpfile()</b> was introduced in Netpbm 10.20 (January 2004).
+
+</body>
+</html>
diff --git a/lispmtopgm.html b/lispmtopgm.html
new file mode 100644
index 00000000..aa3875e9
--- /dev/null
+++ b/lispmtopgm.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Lispmtopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>lispmtopgm</H1>
+Updated: 06 March 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+lispmtopgm - convert a Lisp Machine bitmap file to PGM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>lispmtopgm</B>
+[<I>lispmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>listpmfile</b> reads a Lisp Machine bitmap as input and
+produces a PGM image as output.
+
+<P>This is the file format written by the tv:write-bit-array-file
+function on TI Explorer and Symbolics lisp machines.
+
+<P>Multi-plane bitmaps on lisp machines are color; but the Lispm image
+file format does not include a color map, so we must treat it as a
+monochrome instead and produce PGM.  This is unfortunate.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmtolispm.html">pgmtolispm</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+The Lispm bitmap file format is a bit quirky;  Usually the image in the file
+has its width rounded up to the next higher multiple of 32, but not always.
+If the width is not a multiple of 32, we don't deal with it properly, but 
+because of the Lispm microcode, such arrays are probably not image data 
+anyway.
+
+<P>Also, the Lispm code for saving bitmaps has a bug, in that if you
+are writing a bitmap which is not mod32 across, the file may be up to
+7 bits too short!  They round down instead of up, and we don't handle
+this bug gracefully.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer.
+
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/macptopbm.html b/macptopbm.html
new file mode 100644
index 00000000..9ddd7868
--- /dev/null
+++ b/macptopbm.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Macptopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>macptopbm</H1>
+Updated: 29 March 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+macptopbm - convert a MacPaint file into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>macptopbm</B>
+[<B>-extraskip</B> <I>N</I>]
+[<I>macpfile</I>]
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>macptopbm</b>reads a MacPaint file as input and produces a PBM
+image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-extraskip</B>
+
+<DD>This option is to get around a problem with some methods of
+transferring files from the Mac world to the Unix world.  Most of
+these methods leave the Mac files alone, but a few of them add the
+&quot;finderinfo&quot; data onto the front of the Unix file.  This
+means an extra 128 bytes to skip over when reading the file.  The
+symptom to watch for is that the resulting PBM file looks shifted to
+one side.  If you get this, try <B>-extraskip</B> 128, and if that
+still doesn't look right try another value.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="picttoppm.html">picttoppm</A>,
+<A HREF="pbmtomacp.html">pbmtomacp</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+The MacPaint-reading code is copyright (c) 1987 by Patrick J. Naughton
+(<A HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/manweb.html b/manweb.html
new file mode 100644
index 00000000..f498ed08
--- /dev/null
+++ b/manweb.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html> <head>
+<title>Manweb Reference Documentation</title>
+</head>
+
+<body>
+
+<h1>SYNOPSIS</h1>
+
+<b>manweb</b> <b>-help</b>
+<p>
+<b>manweb</b>
+[<b>-config=<i>configfile</i></b>]
+[<i>topic</i> [ <i>subtopic</i> ... ] ]
+
+<h1>EXAMPLES</h1>
+
+<pre>
+manweb
+</pre>
+This gets a master index of documentation.
+<pre>
+manweb netpbm
+</pre>
+This gets the main documentation page for the Netpbm package, with hyperlinks
+to the rest of the documentation.
+<pre>
+manweb netpbm pngtopnm
+</pre>
+This goes directly to the documentation page for the Pngtopnm program in
+the Netpbm package.
+<pre>
+manweb pngtopnm
+</pre>
+This also goes directly to the documentation page for the Pngtopnm program in
+the Netpbm package, if that's what would run in response to a <b>pngtopnm</b>
+shell command (your <b>PATH</b> environment variable is involved).
+<pre>
+manweb 3 fopen
+</pre>
+This gets the traditional man page for the fopen() subroutine using
+<b>man</b>.
+<pre>
+manweb cp
+</pre>
+This gets the GNU Info manual for the <b>cp</b> program, using <b>info</b>.
+
+
+<h1>DESCRIPTION</h1>
+
+<p><b>manweb</b> displays reference documentation via quick shell
+commands.  It is a replacement for the well-known <b>man</b>.
+
+<h2>Differences Between Man and Manweb</h2>
+
+<p><b>manweb</b>'s advantages over <b>man</b> are:
+
+<ul>
+  <li>
+       You can access documentation that is on the worldwide web instead of
+       having locally installed copies.  This saves installation work and gets
+       you more current documentation.
+       </li>
+  <li>
+       Documentation can be in HTML, which is more widely known, more widely
+       useful, and more expressive than the nroff/troff format used by
+       <b>man</b>.
+       </li>
+  <li>
+       <b>manweb</b> puts your topics in a tree for multilevel documentation.
+       <b>man</b> is intended for a single level of documentation.  For
+       example, you can have a man page for each shell command, but not for
+       the subcommands of a shell command.  And you cannot properly have
+       man pages for the members of multiple subroutine libraries.
+       </li>
+  <li>
+       Documentation can be hyperlinked.
+</ul>
+
+<p>Web servers need not be involved -- the documentation can be in local
+files.  Graphics need not be involved -- the <b>lynx</b> browser works fine
+in the same kind of terminals in which <b>man</b> works.
+
+<p><b>manweb</b> finds the documentation you specify and calls a web
+browser of your choice to display it.  The documentation <b>manweb</b>
+finds can be either an HTML file on your system, in which case,
+<b>manweb</b> gives a <b>file:</b> URL to your browser, or an explicit
+URL.  That explicit URL might be an <b>http:</b> URL referring to an
+HTML file on a web server somewhere, or anything else your browser
+understands.
+
+<p>If <b>manweb</b> finds neither an HTML file nor a URL, but your parameters
+look like they could mean something to <b>man</b>, <b>manweb</b> calls
+<b>man</b>.  Therefore, you can use a single command to access the vast
+body of traditional man pages, plus any newer <b>manweb</b> documentation.
+You can make "man" a shell alias of "manweb".
+
+<p><b>manweb</b> finds Info documentation as well.  It looks for the
+topic you specify as an Info topic after looking for HTML and URL
+documentation and before running <b>man</b>.  If <b>manweb</b> finds a
+corresponding Info topic, it runs the program <b>info</b> on it.  Info
+is the documentation system that the GNU project invented to, among
+other things, replace traditional Unix man pages.  However, HTML and the
+Worldwide Web were invented shortly afterward, so Info fizzled.  But there
+is still a lot of GNU software that is documented as Info topics.
+
+<h2>How Manweb Finds Documentation</h2>
+
+<p><b>manweb</b> passes a URL to a web browser.  This section tells
+how your <b>manweb</b> invocation parameters turn into that URL.
+
+<p><b>manweb</b>'s search starts in the "web directory" directory.
+That's either the value of the <b>webdir</b> keyword in your
+<b>manweb</b> configuration file, or the default <b>/usr/man/web</b>.
+
+<p>Your invocation parameters form a "topic chain."  Going from left to right,
+the first parameter is the main topic, the 2nd is a subtopic of the main
+topic, and so on.
+
+<p>Let's look at the simple case where you specify exactly one parameter --
+a main topic.  We'll call it <i>maintopic</i> and look at 4 ways
+<b>manweb</b> might find it:
+
+<ol>
+  <li>
+       <p>If <b>manweb</b> finds a file named <i>maintopic</i><b>.html</b>
+       in the web directory, the URL <b>manweb</b> passes to the
+       browser is just a <b>file:</b> URL that specifies that .html
+       file.
+       </li>
+  <li>
+       <p>If there's no .html file, but there is a file named
+       <i>maintopic</i><b>.url</b>, the contents of the first line of
+       that .url file is what <b>manweb</b> passes to the browser.  It
+       doesn't interpret the contents at all.  If it's garbage, the
+       browser chokes on it.
+       </li>
+  <li>       
+       <p>If there's neither a .html nor a .url file, but there is a
+       directory named <i>maintopic</i>, <b>manweb</b> looks in the
+       directory for a file named <i>index.html</i>.  If there is one,
+       <b>manweb</b> passes a <b>file:</b> URL specifying that
+       index.html file to the browser.  If there's no
+       <i>index.html</i>, <b>manweb</b> uses a <b>file:</b> URL that
+       specifies the directory itself.
+       </li>
+  <li>
+       <p>If <b>manweb</b> doesn't find documentation in any of the
+       above ways, it searches your executable search path (as defined
+       by your <b>PATH</b> environment variable) for a program named
+       <i>maintopic</i>.  If it finds one, it looks in the directory
+       that contains the program for a file named <b>doc.url</b>.  If
+       it finds one, it appends <i>maintopic</i><b>.html</b> to the
+       first line of the file and passes that to the browser.  Unless 
+       the first line does <em>not</em> end with a slash -- in that 
+       case, <b>manweb</b> passes the first line of the file unmodified
+       to the browser.
+       </ol>
+
+<p>It gets a little more interesting when you have subtopics.  Looking
+at each of the 4 cases above:
+
+<ol>
+  <li>
+       Where <i>maintopic</i><b>.html</b> exists, subtopics are invalid.
+       You get a warning message and the subtopics are ignored.
+       </li>
+  <li>
+       Where there's no .html file but <i>maintopic</i><b>.url</b> exists,
+       <b>manweb</b> appends the subtopic chain to the URL it gets from the
+       .url file as in the following example:  .url file contains
+       <b>http://acme.com/productxyz/</b> and subtopics are
+       <b>create</b> and
+       <b>database</b>.  The URL <b>manweb</b> passes to the browser is
+       <b>http://acme.com/productxyz/create/database.html</b>.
+
+       <p><b>manweb</b> doesn't check that this kind of appendage makes
+       any sense for the URL in question, except that if the URL in the
+       .url file doesn't end with a slash (<b>/</b>), <b>manweb</b>
+       issues a warning and doesn't append anything (ignores the subtopics).
+  <li>
+       Where there's neither a .html file nor a .url file, but there's a
+       <i>maintopic</i> directory, <b>manweb</b> recurses into that
+       directory and begins a whole new search using the first subtopic
+       as the main topic and the rest of the subtopics as subtopics of that.
+  <li>
+       When there are subtopics, the <b>PATH</b> thing doesn't make sense,
+       so <b>manweb</b> doesn't do it.
+</ol>
+
+If you give subtopics, the <b>PATH</b> thing described above for one
+topic doesn't apply.
+
+<p>If you give no parameters at all, <b>manweb</b> generates a URL for the
+web directory itself as described above for subdirectories.
+
+<p>The above is simplified by the assumption of a single web
+directory.  In reality, the <b>webdir</b> keyword in the configuration
+file can specify a chain of web directories.  <b>manweb</b> searches
+each one in turn, doing all the kinds of searches in each web directory
+before moving on to the next one.
+
+<h2>The Configuration File</h2>
+
+<p>The default location of the <b>manweb</b> configuration file is
+<b>/etc/manweb.conf</b>.  But you can override this with the environment
+variable <b>MANWEB_CONF_FILE</b>, and override that with the
+<b>-config</b> invocation option.
+
+<p>Lines starting with "#" are comments and are ignored, as are blank lines.
+
+<p>All other lines have the format <i>keyword</i>=<i>value</i>.  The
+keywords defined are:
+<dl>
+  <dt>webdir
+  <dd>
+       A colon-delimited sequence of directories to search for
+       documentation as described above.  If you
+       don't specify this, the default is <b>/usr/man/web</b> alone.
+  <dt>browser
+  <dd>
+       The file specification <b>manweb</b> of the web browser <b>manweb</b>
+       is to invoke
+       to display documentation (except when it uses <b>man</b> to display
+       a conventional man page).
+       If the file specification does not include a slash, <b>manweb</b>
+       searches for the file in the PATH search path.
+
+       <p>If you don't specify this, the default is the value of the
+       <b>BROWSER</b> environment variable, and if that is not set,
+       <b>lynx</b>.
+</dl>
+
+Example:
+<pre>
+# Configuration file for Manweb
+
+webdir=/usr/share/manweb
+browser=netscape
+</pre>
+
+
+</body> </html>
+
diff --git a/mdatopbm.html b/mdatopbm.html
new file mode 100644
index 00000000..efef800d
--- /dev/null
+++ b/mdatopbm.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Mdatopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>mdatopbm</H1>
+Updated: 3 December 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+mdatopbm - convert a Microdesign .mda or .mdp file into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>mdatopbm</B>
+[<B>-a</B>]
+[<B>-d</B>]
+[<B>-i</B>]
+[<B>--</B>]
+[<I>mdafile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>mdatopbm</b> reads a MicroDesign file as input and Produces a
+PBM image as output.
+
+<p>If you don't specify <i>mdafile</i>, <b>mdatopbm</b> takes its input
+from Standard Input.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-a</B>
+
+<DD>Generate Plain PBM output instead of Raw PBM
+
+<DT><B>-d</B>
+
+<DD>Double the height of the output file, to compensate for the aspect
+ratio used in MicroDesign files.
+
+<DT><B>-i</B>
+
+<DD>Invert the colors used.
+
+<DT><B>--</B>
+
+<DD>End of options (use this if the filename starts with &quot;-&quot;)
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtomda.html">pbmtomda</A>,
+<A HREF="pbm.html">pbm</A>
+<A NAME="lbAG">&nbsp;</A>
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1999 John Elliott &lt;<A
+HREF="mailto:jce@seasip.demon.co.uk">jce@seasip.demon.co.uk</A>&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/mgrtopbm.html b/mgrtopbm.html
new file mode 100644
index 00000000..d28ee360
--- /dev/null
+++ b/mgrtopbm.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Mgrtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>mgrtopbm</H1>
+Updated: 06 November 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+mgrtopbm - convert a MGR bitmap into a PBM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>mgrtopbm</B>
+[<I>mgrfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>mgrtopbm</b> reads a MGR bitmap as input and produces a PBM
+image as output.
+
+<p><a
+href="ftp://sunsite.unc.edu/pub/Linux/apps/MGR/!INDEX.html">MGR</a> is
+a window manager that is a smaller alternative to the X Windows
+System.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pbmtomgr.html">pbmtomgr</A>,
+<A HREF="pbm.html">pbm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/mrf.html b/mrf.html
new file mode 100644
index 00000000..fe7bdd70
--- /dev/null
+++ b/mrf.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>MRF image format specification</TITLE></HEAD>
+<BODY>
+<A HREF="#index">Table Of Contents</A>
+
+<H1>MRF format</H1>
+Updated: 1991
+<BR>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+MRF - monochrome recursive format (compressed bitmaps)
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>MRF is a compressed format for bilevel (1-bit mono) images.  It
+achieves better compression for some such images than either GIF or
+PNG. (It's also very easy to implement (about the same difficulty as
+RLE, I'd say) and an MRF reader needs no tables/buffers, which may
+make it useful for tiny machines).
+
+<P>In case the above hasn't made it sufficiently clear, I'll make this
+next point explicitly: <em>MRF cannot represent color at all.</em> Nor
+can it represent grayscale.  It's a specifically mono format.  (If you
+want to compress a color or grayscale image, my advice is to use
+JPEG2000).
+
+<P>First, here's what goes where in an MRF file. I'll explain how the
+compression works afterward.
+
+<DL COMPACT>
+<DT>Offset<DD>
+Description
+<DT>0
+<DD>
+magic number - &quot;MRF1&quot; (in ASCII)
+
+<DT>4
+<DD>
+width (32-bit, MSB first (i.e. big-endian))
+
+<DT>8
+<DD>
+height (same)
+
+<DT>12
+<DD>
+reserved (single byte, must be zero)
+
+<DT>13
+<DD>
+compressed data
+
+</DL>
+
+<P>Note that there is no end-of-file marker in the file itself - the
+compressed data carries on right up to EOF.
+
+<P>The way the picture is compressed is essentially very simple, but
+as they say, the devil is in the detail.  So don't be put off if it
+sounds confusing.
+
+<P>The image is treated as a number of 64x64 squares, forming a grid
+large enough to encompass it. (If an image is (say) 129x65, it'll be
+treated in the same way as a 192x128 one. On decompression, the extra
+area which was encoded (the contents of this area is undefined) should
+be ignored.) Each of these squares in turn (in left-to-right,
+top-to-bottom order) is recursively subdivided until the smallest
+completely black or white squares are found. Some pseudocode (eek!)
+for the recursive subdivision routine should make things clearer:
+
+<PRE>
+    if square size &gt; 1x1 and square is all one color, output 1 bit
+    if whole square is black, output a 0 bit and return
+    if whole square is white, output a 1 bit and return
+    output a 0 bit
+    divide the square into four quarters, calling routine for
+    each in this order: top-left, top-right, bottom-left, bottom-right
+</PRE>
+
+<P>(Note that the &quot;output a 0 bit&quot; stage is not reached for squares
+of size 1x1, which is what stops it recursing infinitely.  I mention
+this as it may not be immediately obvious.)
+
+<P>The whole of the compressed data is made up of the bits output by
+the above routine. The bits are packed into bytes MSB first, so for
+example outputting the bits 1,0,0,0,0,0,0,0 would result in a 80h byte
+being output. Any `unused' bits in the last byte output are undefined;
+these are effectively after EOF and their value is unimportant.
+
+<P>If writing that sounds too much like hard work :-), you could
+always adapt <b>pbmtomrf</b> and/or <b>mrftopbm</b>.  That's the main
+reason their source code is public domain, after all.
+
+<P>Above, I said the contents of any extra area encoded (when a bitmap
+smaller than the grid of squares is compressed) is undefined.  This is
+deliberate so that the MRF compressor can make these unseen areas
+anything it wants so as to maximize compression, rather than simply
+leaving it blank. <b>pbmtomrf</b> does a little in this respect but
+could definitely be improved upon.
+
+<P><b>mrftopbm</b>'s <b>-1</b> option causes it to include the edges, if
+any, in the output PBM.  This may help when debugging a compressor's
+edge optimization.
+
+<p>Note that the "F" in the name "MRF" comes from "format," which is redundant
+because it is the name of a format.  That sort of makes "MRF format" sound
+as stupid as "PIN number," but it's not really that bad.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="mrftopbm.html">mrftopbm</A></B>,
+<B><A HREF="pbmtomrf.html">pbmtomrf</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Russell Marks.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Index</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/mrftopbm.html b/mrftopbm.html
new file mode 100644
index 00000000..626b4da5
--- /dev/null
+++ b/mrftopbm.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Mrftopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>mrftopbm</H1>
+<BR>
+Updated: 10 August 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+mrftopbm - convert an MRF image to PBM format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>mrftopbm</B>
+[ <b>-a</b> ]
+[ <I>input.mrf</I> ]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>mrftopbm</b> converts an MRF image to PBM format. 
+
+<p><b>mrftopbm</b> takes the MRF image from the file named by the
+<i>input.mrf</i> argument, or Standard Input if you don't specify
+<i>input.mrf</i>.  The output goes to Standard Output.
+
+<P>For more information about mrf, see <A HREF="mrf.html">the MRF
+specification</A>.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<dl compact>
+<dt><b>-a</b>
+<dd>
+causes <b>mrftopbm</b> to include the edges, if any, in the output
+PBM.  This may help when debugging a compressor's edge optimization.
+</dl>
+
+<A NAME="lbAF">&nbsp;</A>
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Russell Marks.
+
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtomrf.html">pbmtomrf</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="mrf.html">mrf</A></B>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/mtvtoppm.html b/mtvtoppm.html
new file mode 100644
index 00000000..33acadb9
--- /dev/null
+++ b/mtvtoppm.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Mtvtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>mtvtoppm</H1>
+Updated: 02 February 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+mtvtoppm - convert output from an MTV or PRT ray tracer into a PPM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>mtvtoppm</B>
+[<I>mtvfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>mtvtoppm</b> reads an input file from Mark VanDeWettering's MTV
+ray tracer and produces a PPM image as output.
+
+<p>The PRT raytracer also produces this format.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/neotoppm.html b/neotoppm.html
new file mode 100644
index 00000000..2991ac8f
--- /dev/null
+++ b/neotoppm.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Neotoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>neotoppm</H1>
+Updated: 24 April 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+neotoppm - convert an Atari Neochrome .neo into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>neotoppm</B>
+[<I>neofile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>neotoppm</b> reads an Atari Neochrome .neo file as input and
+produces a portable pixmap as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtoneo.html">ppmtoneo</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2001 by Teemu Hukkanen &lt;<A
+HREF="mailto:tjhukkan@iki.fi">tjhukkan@iki.fi</A>&gt;, based on
+pi1toppm by Steve Belczyk (<A
+HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer.
+
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/palmtopnm.html b/palmtopnm.html
new file mode 100644
index 00000000..b4ea250b
--- /dev/null
+++ b/palmtopnm.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Palmtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>palmtopnm</H1>
+Updated: 26 January 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+palmtopnm - convert a Palm Bitmap to a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>palmtopnm</B>
+
+[<B>-verbose</B>]
+
+[<B>-rendition</B> <I>N</I>]
+
+[<B>-showhist</B>]
+
+<BR>
+
+[<I>palmfile</I>]
+
+<BR>
+
+<B>palmtopnm</B>
+
+<B>-transparent</B>
+
+[<B>-verbose</B>]
+
+[<I>palmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>palmtopnm</b> reads a Palm Bitmap as input, from Standard Input or
+<I>palmfile</I> and produces a PPM image as output.
+
+<p>Alternatively (when you specify <b>-transparent</b>),
+<b>palmtopnm</b> writes the value of the transparent color in the Palm
+Bitmap to Standard Output.
+
+
+<p><b>Palmtopnm</b> can convert Palm Bitmaps with the following features.
+This does not mean that it doesn't handle other features.  These are just
+the ones we found worth mentioning.
+<ul>
+<li>Version 0
+<li>Version 1
+<li>Version 2
+<li>Version 3 (new in Netpbm 10.27 (March 2005))
+<li>Scanline compression
+<li>RLE compression
+<li>Packbits compression (new in Netpbm 10.27 (March 2005))
+</ul>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-verbose</B>
+
+<DD>
+Display various interesting information about the input file and process.
+
+<DT><B>-transparent</B>
+
+<DD>
+If the Palm Bitmap has a transparent color set, 
+<b>palmtopnm</b> writes the value for that
+color to Standard Output in the form #RRGGBB, where
+RR, GG, and BB are two-digit hexadecimal numbers
+indicating a value in the range 0 through 255.  If no transparent color is set
+in the Bitmap, <b>palmtopnm</b> writes nothing.  <b>palmtopnm</b> does not
+generate any output image when you specify <b>-transparent</b>.
+
+<DT><B>-rendition N</B>
+
+<DD>
+Palm Bitmaps may contain several different renditions of the same
+image, with different depths.  By default, <B>palmtopnm </B> operates
+on the first rendition (rendition number 1) in the image.  This
+switch allows you to operate on a different rendition.  The value must
+be between 1 and the number of renditions in the image, inclusive.
+
+<DT><B>-showhist</B>
+
+<DD>
+This option causes <b>palmtopnm</b> to 
+write a histogram of colors in the input file to Standard Error.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmtopalm.html">pnmtopalm</A></B>,
+
+<A HREF="pnm.html">pnm</A>,
+
+<a
+href="http://www.palmos.com/dev/support/docs/palmos/PalmOSReference/Bitmap.html">PalmOS
+Reference</a>,
+
+<a
+href="http://www.palmos.com/dev/support/docs/palmos/PalmOSCompanion/UserInterface.html#1010236">PalmOS
+Companion</a>.
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+<P>You cannot generate an alpha mask if the Palm Bitmap has a
+transparent color.  However, you can still do this with
+<B>ppmcolormask</B> with a Netpbm pipe similar to:
+
+<P>
+<B>palmtopnm bitmap.palm | 
+ppmcolormask `palmtopnm -transparent bitmap.palm`</B>
+
+<A name="history"></A>
+<h2>HISTORY</h2>
+
+<p>Before Netpbm 10.23 (July 2004), there was a <b>-forceplain</b>
+option.  But that had been redundant for a long time, since the Netpbm 
+common option <b>-plain</b> does the same thing.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+This program was originally written as Tbmptopnm.c, by Ian Goldberg.
+It was heavily modified by Bill Janssen to add color, compression, and
+transparency function.
+
+<p>Copyright 1995-2001 by Ian Goldberg and Bill Janssen.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#limitations">LIMITATIONS</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAH">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pam.html b/pam.html
new file mode 100644
index 00000000..27a48d26
--- /dev/null
+++ b/pam.html
@@ -0,0 +1,317 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>PAM format specification</TITLE>
+<META NAME="manual_section" CONTENT="5">
+</HEAD>
+<BODY>
+<A HREF="#index">Table Of Contents</A>
+
+<H1>pam</H1>
+Updated: 09 October 2005
+<BR>
+<?makeman .SH NAME ?>
+<?makeman pam - Netpbm common 2-dimensional bitmap format ?>
+
+<H2 id="general">GENERAL</H2>
+
+<p>The PAM image format is a lowest common denominator 2 dimensional map
+format.
+
+<P>It is designed to be used for any of myriad kinds of graphics, but can
+theoretically be used for any kind of data that is arranged as a two
+dimensional rectangular array.  Actually, from another perspective it
+can be seen as a format for data arranged as a three dimensional
+array.
+
+<P>The name &quot;PAM&quot; is an acronym derived from &quot;Portable
+Arbitrary Map.&quot; This derivation makes more sense if you consider
+it in the context of the other Netpbm format names: PBM, PGM, and PPM.
+
+<P>This format does not define the meaning of the data at any particular
+point in the array.  It could be red, green, and blue light
+intensities such that the array represents a visual image, or it could
+be the same red, green, and blue components plus a transparency
+component, or it could contain annual rainfalls for places on the
+surface of the Earth.  Any process that uses the PAM format must 
+further define the format to specify the meanings of the data.
+
+<P>A PAM image describes a two dimensional grid of tuples.  The tuples
+are arranged in rows and columns.  The width of the image is the
+number of columns.  The height of the image is the number of rows.
+All rows are the same width and all columns are the same height.  The
+tuples may have any degree, but all tuples have the same degree.  The
+degree of the tuples is called the depth of the image.  Each member of
+a tuple is called a sample.  A sample is an unsigned integer which
+represents a locus along a scale which starts at zero and ends at a
+certain maximum value greater than zero called the maxval.  The maxval
+is the same for every sample in the image.  The two dimensional array
+of all the Nth samples of each tuple is called the Nth plane or Nth
+channel of the image.
+
+<P>Though the basic format does not assign any meaning to the tuple values, it
+does include an optional string that describes that meaning.  The
+contents of this string, called the tuple type, are arbitrary from the
+point of view of the basic PAM format, but users of the format may assign
+meaning to it by convention so they can identify their particular
+implementations of the PAM format.  Some tuple types are defined as
+official subformats of PAM.  See <a href="#tupletype">Defined Tuple Types</a>.
+
+<H2 id="format_universe">The Confusing Universe of Netpbm Formats</H2>
+
+<P>It is easy to get confused about the relationship between the PAM
+format and PBM, PGM, PPM, and PNM.  Here is a little enlightenment:
+
+<P>"PNM" is not really a format.  It is a shorthand for the PBM, PGM,
+and PPM formats collectively.  It is also the name of a group of
+library functions that can each handle all three of those formats.
+
+<P>&quot;PAM&quot; is in fact a fourth format.  But it is so general
+that you can represent the same information in a PAM image as you can
+in a PBM, PGM, or PPM image.  And in fact a program that is designed
+to read PBM, PGM, or PPM and does so with a recent version of the
+Netpbm library, will read an equivalent PAM image just fine and the
+program will never know the difference.
+
+<P>To confuse things more, there is a collection of library routines
+called the &quot;pam&quot; functions that read and write the PAM
+format, but also read and write the PBM, PGM, and PPM formats.  They
+do this because the latter formats are much older and more popular, so
+even a new program must work with them.  Having the library handle all
+the formats makes it convenient to write programs that use the newer
+PAM format as well.
+
+<H2 id="layout">THE LAYOUT</H2>
+
+<P>A convenient way to read and write the PAM format accurately is via the
+<a href="libnetpbm.html">libnetpbm</a> C subroutine library.
+
+<P>A PAM file consists of a sequence of one or more PAM images.  There are
+no data, delimiters, or padding before, after, or between images.
+
+<P>
+Each PAM image consists of a header followed immediately by a raster.
+<P>
+Here is an example header:
+<P>
+<B>P7</B>
+
+<BR>
+
+<B>WIDTH 227</B>
+
+<BR>
+
+<B>HEIGHT 149</B>
+
+<BR>
+
+<B>DEPTH 3</B>
+
+<BR>
+
+<B>MAXVAL 255</B>
+
+<BR>
+
+<B>TUPLTYPE RGB</B>
+
+<BR>
+
+<B>ENDHDR</B>
+
+<P>The header begins with the ASCII characters &quot;P7&quot; followed
+by newline.  This is the magic number.
+
+<P>Note: <b>xv</b> thumbnail images also start with the "P7" magic number.
+(This and PAM were independent extensions to the Netpbm formats).  The rest
+of the format makes it easy to distinguish PAM from that format, though).
+
+<P>The header continues with an arbitrary number of lines of ASCII
+text.  Each line ends with and is delimited by a newline character.
+
+<P>Each header line consists of zero or more whitespace-delimited
+tokens or begins with &quot;#&quot;.  If it begins with &quot;#&quot;
+it is a comment and the rest of this specification does not apply to
+it.
+
+<P>A header line which has zero tokens is valid but has no meaning.
+
+<P>The type of header line is identified by its first token, which is
+8 characters or less:
+
+<DL COMPACT>
+<DT><B>ENDHDR  </B>
+
+<DD>This is the last line in the header.  The header must contain
+exactly one of these header lines.
+
+<DT><B>HEIGHT  </B>
+
+<DD>The second token is a decimal number representing the height
+of the image (number of rows).  The header must contain exactly one
+of these header lines.
+
+<DT><B>WIDTH</B>
+
+<DD>The second token is a decimal number representing the width of the
+image (number of columns).  The header must contain exactly one of
+these header lines.
+
+<DT><B>DEPTH</B>
+
+<DD>The second token is a decimal number representing the depth of the
+image (number of planes or channels).  The header must contain exactly
+one of these header lines.
+
+<DT><B>MAXVAL</B>
+
+<DD>The second token is a decimal number representing the maxval of the image.
+The header must contain exactly one of these header lines.
+
+<DT><B>TUPLTYPE</B>
+
+<DD>The header may contain any number of these header lines, including
+zero.  The rest of the line is part of the tuple type.  The rest of
+the line is not tokenized, but the tuple type does not include any
+white space immediately following <B>TUPLTYPE </B> or at the very end
+of the line.  It does not include a newline.  If there are multiple
+<B>TUPLTYPE</B> header lines, the tuple type is the concatenation of
+the values from each of them, separated by a single blank, in the
+order in which they appear in the header.  If there are no
+<B>TUPLTYPE</B> header lines the tuple type is the null string.  
+
+</DL>
+
+<P>
+The raster consists of each row of the image, in order from top to bottom,
+consecutive with no delimiter of any kind between, before, or after, rows.
+<P>
+Each row consists of every tuple in the row, in order from left to
+right, consecutive with no delimiter of any kind between, before, or
+after, tuples.
+<P>
+Each tuple consists of every sample in the tuple, in order,
+consecutive with no delimiter of any kind between, before, or after,
+samples.
+<P>
+Each sample consists of an unsigned integer in pure binary format,
+with the most significant byte first.  The number of bytes is the
+minimum number of bytes required to represent the maxval of the image.
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+<P>The maxval of an image is never greater than 65535.  (The reason it is
+limited is to make it easier to build an image processor, in which
+intermediate arithmetic values often have to fit within 31 or 32 bits).
+There was no specified limitation before October, 2005, but essentially
+all implementations have always observed it.
+
+<p>Height and width are at least 1.
+
+<p>Height and width have no defined maximum, but processors and generators
+of images usually have their own limitations.
+
+<H2 id="tupletype">DEFINED TUPLE TYPES</h2>
+
+<p>Some tuple types are defined in this specification to specify
+official subformats of PAM for especially popular applications of the
+format.  Users of the format may also define their own tuple types,
+and thus their own subformats.
+
+<A NAME="visual">&nbsp;</A>
+<H3>PAM Used For Visual Images</H3>
+
+<P>A common use of PAM images is to represent visual images such
+as are typically represented by images in the older and more concrete
+PBM, PGM, and PPM formats.
+
+<h4>Black And White (PBM)</h4>
+
+<P>A black and white image, such as would be represented by a PBM
+image, has a tuple type of "BLACKANDWHITE".  Such a PAM image
+has a depth of 1 and maxval 1 where the one sample in each tuple is 0
+to represent a black pixel and 1 to represent a white one.  The
+height, width, and raster bear the obvious relationship to those of
+the equivalent PBM image.
+
+<P>Note that in the PBM format, a zero value means white, but in PAM,
+zero means black.
+
+<h4>Grayscale (PGM)</h4>
+
+<P>A grayscale image, such as would be represented by a PGM image, has
+a tuple type of "GRAYSCALE".  Such a PAM image has a depth of 1.  The
+maxval, height, width, and raster bear the obvious relationship to
+those of the equivalent PGM image.
+
+<h4>Color (PPM)</h4>
+
+<P>A color image, such as would be represented by a PPM image, has a
+typle type of "RGB".  Such a PAM image has a depth of 3.  The maxval,
+height, width, and raster bear the obvious relationship to those of
+the PPM image.  The first plane represents red, the second blue, and
+the third green.
+
+<h4>Transparent</h4>
+
+<p>Each of the visual image formats mentioned above has a variation that
+contains transparency information.  In that variation, the tuple type
+has &quot;_ALPHA&quot; added to it (e.g. &quot;RGB_ALPHA&quot;) and one
+more plane.  The highest numbered plane is the opacity plane (sometimes
+called an alpha plane or transparency plane).
+
+<p>In this kind of image, the color represented by a pixel is actually
+a combination of an explicitly specified foreground color and a background
+color to be identified later.
+
+<p>The planes other than the opacity plane describe the foreground
+color.  A sample in the opacity plane tells how opaque the pixel is, by
+telling what fraction of the pixel's light comes from the foreground
+color.  The rest of the pixel's light comes from the (unspecified)
+background color.
+
+<p>For example, in a GRAYSCALE_ALPHA image, assume Plane 0 indicates
+a gray tone 60% of white and Plane 1 indicates opacity 25%.  The
+foreground color is the 60% gray, and 25% of that contributes to the
+ultimate color of the pixel.  The other 75% comes from some background
+color.  So let's assume further that the background color of the pixel
+is full white.  Then the color of the pixel is 90% of white:  25% of
+the foreground 60%, plus 75% of the background 100%.
+
+<p>The sample value is the opacity fraction just described, as a fraction
+of the maxval.  Note that it is <em>not</em> gamma-adjusted like the
+foreground color samples.
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="index.html">Netpbm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="libnetpbm.html">libnetpbm</A></B>
+
+
+<HR>
+<H2 id="contents">Table Of Contents</H2>
+<UL>
+  <LI><A HREF="#general">GENERAL</A>
+  <LI><A HREF="#layout">THE LAYOUT</A>
+  <LI><A HREF="#limitations">LIMITATIONS</A>
+  <LI><A HREF="#format_universe">The Confusing Universe of Netpbm Formats</A>
+  <LI><A HREF="#tupletype">DEFINED TUPLE TYPES</A>
+    <UL>
+      <LI><A HREF="#visual">PAM Used For Visual Images</A>
+        <UL>
+          <LI>Black And White
+          <LI>Grayscale
+          <LI>Color
+          </UL>
+      </UL>
+  <LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+
+</BODY>
+</HTML>
diff --git a/pamaddnoise.html b/pamaddnoise.html
new file mode 100644
index 00000000..6e9057c5
--- /dev/null
+++ b/pamaddnoise.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamaddnoise User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamaddnoise</H1>
+Updated: 14 November 1995
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamaddnoise - add noise to a Netpbm image
+
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamaddnoise</B>
+
+[<B>-type</B> <I>noise_type</I>]
+
+[<B>-seed</B> <I>int</I>]
+
+<BR>
+
+<B>pamaddnoise</B> <B>-type</B> <B>gaussian</B>
+
+[<B>-sigma1</B> <I>value</I>]
+
+[<B>-sigma2</B> <I>value</I>]
+
+<BR>
+
+[<B>-seed</B> <I>int</I>]
+
+[<I>netpbmfile</I>]
+
+<BR>
+
+<B>pamaddnoise</B> <B>-type </B> <B>multiplicative_gaussian</B>
+
+[<B>-msigma</B> <I>value</I>]
+
+<BR>
+
+[<B>-seed</B> <I>int</I>]
+
+[<I>netpbmfile</I>]
+
+<BR>
+
+<B>pamaddnoise</B> <B>-type</B> <B>impulse</B>
+
+[<B>-tolerance</B> <i>ratio</I>]
+
+[<B>-seed</B> <I>int</I>]
+
+<BR>
+
+[<I>netpbmfile</I>]
+
+<BR>
+
+<B>pamaddnoise</B> <B>-type </B> <B>laplacian</B>
+
+[<B>-lsigma</B> <I>value</I>]
+
+[<B>-seed</B> <I>int</I>]
+
+<BR>
+
+[<I>netpbmfile</I>]
+
+<BR>
+
+<B>pamaddnoise</B> <B>-type </B> <B>poisson</B>
+
+[<B>-lambda</B> <I>value</I>]
+
+[<B>-seed</B> <I>int</I>]
+
+<BR>
+
+[<I>netpbmfile</I>]
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamaddnoise</b> adds the specified noise type to a Netpbm image.
+<b>pamaddnoise</b> treats a PPM image as 3 independent planes, not as
+a plane of colors in a color space.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-lambda</b> <i>value</i>
+
+<DD>Used for poisson noise only.  The default value is 0.05.
+
+<DT><B>-lsigma</b> <i>value</i>
+
+<DD>Used for laplacian noise only.  The default value is 10.0.
+
+<DT><B>-msigma</b> <i>value</i>
+
+<DD>Used for mutliplicative gaussian noise only.  The default value is
+0.5.
+
+<DT><B>-seed</b> <i>int</i>
+
+<DD>Used for all noise types.  Set the initial random number generator
+seed value.
+
+<DT><B>-sigma1</b> <i>value</i>
+
+<DD>Used for gaussian noise only.  The default value is 4.0.
+
+<DT><B>-sigma2</b> <i>value</i>
+
+<DD>Used for gaussian noise only.  The default value is 20.0.
+
+<DT><B>-tolerance</b> <i>ratio</i>
+
+<DD>
+Used for impulse noise only.  The default value is 0.10.  This means
+that 5% of all pixel values will be set to 0 and 5% will be set to
+the maxval
+
+<DT><B>-type</b> <i>noise_type</i>
+
+<DD>
+Select type of noise by name.  The following noise types are
+available: gaussian, multiplicative_gaussian, impulse, laplacian,
+poisson.  Only enough letters to be unique are required for the noise
+type option.  The default noise type is <b>gaussian</b>.
+
+<ul>
+<li><b>gaussian</b>
+<li><b>mulitiplicative_gaussian</b>
+<li><b>impulse</b>
+<li><b>laplacian</b>
+<li><b>poisson</b>
+</ul>
+
+</DL>
+
+<H2 id="references">REFERENCES</H2>
+
+<UL>
+<LI>&quot;Adaptive Image Restoration in Signal-Dependent Noise&quot;
+by R. Kasturi Institute for Electronic Science, Texas Tech University,
+1982
+
+<LI>&quot;Digital Image Processing Algorithms&quot; by Ioannis Pitas,
+Prentice Hall, 1993 ISBN 0-13-145814-0
+
+</UL>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pgmnoise.html">pgmnoise</A>,
+<A HREF="pgmmedian.html">pgmmedian</A>,
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pam.html">pam</A>,
+
+<h2 id="history">HISTORY</h2>
+
+<P><b>pamaddnoise</b> was added to Netpbm in Version 10.29 (August 2005).
+It had been distributed by Mike Burns via his own web site before that
+(and continued to be so).
+
+<p>Burns' version, and the one in Netpbm 10.29, was called <b>pnmaddnoise</b>
+and worked only on PNM images.  In Netpbm 10.30, it was converted to handle
+PAM images and renamed to <b>pamaddnoise</b>.
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1995 by Mike Burns &lt;<A
+HREF="mailto:burns@cac.psu.edu">burns@cac.psu.edu</A>&gt;
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#references">REFERENCES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamarith.html b/pamarith.html
new file mode 100644
index 00000000..d2fa2c0b
--- /dev/null
+++ b/pamarith.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamarith User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamarith</H1>
+Updated: 08 October 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamarith - perform arithmetic on two Netpbm images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamarith</B>
+<B>-add</B> | <B>-subtract</B> | <B>-multiply</B> | <b>-divide</b> |
+<B>-difference</B> |
+<B>-minimum</B> | <B>-maximum</B> | <B>-mean</B> | <B>-compare</B> |
+<B>-and</B> | <B>-or</B> | <B>-nand</B> | <B>-nor</B> | <B>-xor</B> |
+<B>-shiftleft</B> | <B>-shiftright</B>
+<I>pamfile1</I> <I>pamfile2</I>
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pamarith</b> reads two PBM, PGM, PPM, or PAM images as input.
+It performs the specified binary arithmetic operation on their sample
+values and produces an output of a format which is the more general of
+the two input formats.  The two input images must be of the same width
+and height.  The arithmetic is performed on each pair of identically
+located tuples to generate the identically located tuple of the
+output.
+
+<P>For the purpose of the calculation, it assumes any PBM, PGM, or PPM
+input image is the equivalent PAM image of tuple type
+<B>BLACKANDWHITE</B>, <B>GRAYSCALE</B>, or <B>RGB</B>, respectively,
+and if it produces a PBM, PGM, or PPM output, produces the equivalent
+of the PAM image which is the result of the calculation.
+
+<p>The first <i>pamfile</i> argument identifies the &quot;left&quot;
+argument image; the second <i>pamfile</i> argument identifies the
+&quot;right&quot; one.
+
+<p>If the output is PAM, the tuple type is the same as the tuple type of
+the left input image.
+
+<P><b>pamarith</b> performs the arithmetic on each pair of identically
+located tuples in the two input images.
+
+<p>The arithmetic operation is in all cases fundamentally a function
+from two integers to an integer.  The operation is performed on two
+tuples as follows.  The two input images must have the same depth, or
+one of them must have depth one.  <b>pamarith</b> fails if one of
+these is not the case.
+
+<p>If they have the same depth, <b>pamarith</b> simply carries out the
+arithmetic one sample at a time.  I.e. if at a particular position the
+left input image contains the tuple (s1,s2,...,sN) and the right
+input image contains the tuple (t1,t2,...tN), and the function is f,
+then the output image contains the tuple
+(f(s1,t1),f(s2,t2),...,f(sN,tN)).
+
+<p>If one of the images has depth 1, the arithmetic is performed
+between the one sample in that image and each of the samples in the
+other.  I.e. if at a particular position the left input image
+contains the tuple (s) and the right input image contains the tuple
+(t1,t2,...tN), and the function is f, then the output image contains
+the tuple (f(s,t1),f(s,t2),...,f(s,tN)).
+
+<h3 id="maxval">Maxval</h3>
+
+<p>The meanings of the samples with respect to the maxval varies
+according to the function you select.
+
+<p>In PAM images in general, the most usual meaning of a sample (the
+one that applies when a PAM image represents a visual image), is that
+it represents a fraction of some maximum.  The maxval of the image
+corresponds to some maximum value (in the case of a visual image, it
+corresponds to &quot;full intensity.&quot;), and a sample value
+divided by the maxval gives the fraction.
+
+<p>For <b>pamarith</b>, this interpretation applies to the regular
+arithmetic functions: <B>-add</B>, <B>-subtract</B>, <B>-multiply</B>,
+<b>-divide</b>,
+<B>-difference</B>, <B>-minimum</B>, <B>-maximum</B>, <B>-mean</B>,
+and <B>-compare</B>.  For those, you should think of the arguments and
+result as numbers in the range [0,1).  For example, if the maxval of
+the left argument image is 100 and the maxval of the right argument
+image is 200 and the maxval of the output image is 200, and the left
+sample value in an <b>-add</b> calculation is 50 and the right sample
+is 60, the actual calculation is 50/100 + 60/200 = 160/200, and
+the output sample value is 160.
+
+<P>For these functions, <b>pamarith</b> makes the output image's
+maxval the maximum of the two input maxvals, except with
+<b>-compare</b>, where <b>pamarith</b> uses an output maxval of 2.
+
+<p>If the result of a calculation falls outside the range [0, 1),
+<b>pamarith</b> clips it -- i.e.  considers it to be zero or 1-.
+
+<p>In many cases, where both your input maxvals are the same, you can
+just think of the operation as taking place between the sample values
+directly, with no consideration of the maxval except for the clipping.
+E.g. an <b>-add</b> of sample value 5 to sample value 8 yields sample
+value 13.
+
+<p>But with <b>-multiply</b>, this doesn't work.  Say your two input
+images have maxval 255, which means the output image also has maxval
+255.  Consider a location in the image where the input sample values
+are 5 and 10.  You might think the multiplicative product of those
+would yield 50 in the output.  But <b>pamarith</b> carries out the
+arithmetic on the fractions 5/255 and 10/255.  It multiplies those
+together and then rescales to the output maxval, giving a sample value
+in the output PAM of 50/255 rounded to the nearest integer: 0.
+
+<P>With the bit string operations, the maxval has a whole different
+meaning.  The operations in question are: <B>-and</B>, <B>-or</B>,
+<B>-nand</B>, <B>-nor</B>, <B>-xor</B>, and <B>-shiftleft</B>,
+<B>-shiftright</B>.
+
+<p>With these, each sample value in one or both input images, and in
+the output image, represents a bit string, not a number.  The maxval
+tells how wide the bit string is.  The maxval must be a full binary
+count (a power of two minus one, such as 0xff) and the number of ones
+in it is the width of the bit string.  For the dyadic bit string
+operations (that's everything but the shift functions), the maxvals of
+the input images must be the same and <b>pamarith</b> makes the maxval
+of the output image the same.
+
+<p>For the bit shift operations, the output maxval is the same as the
+left input maxval.  The right input image (which contains the shift
+counts) can have any maxval and the maxval is irrelevant to the
+interpretation of the samples.  The sample value is the actual shift
+count.  But it's still required that no sample value exceed the
+maxval.
+
+<h3 id="operations">The Operations</h3>
+
+<p>Most of the operations are obvious from the option name.
+
+<P><B>-subtract</B> subtracts a value in the right input image from a
+value in the left input image.
+
+<P><B>-difference</B> calculates the absolute value of
+the difference.
+
+<p><b>-multiply</b> does an ordinary arithmetic multiplication, but
+tends to produce nonobvious results because of the way <b>pamarith</b>
+interprets sample values.  See <a href="#maxval">Maxval</a>.
+
+<P><b>-divide</b> divides a value in the left input image by the value
+in the left input image.  But like <b>-multiply</b>, it tends to
+produce nonobvious results.  Note that <b>pamarith</b> clipping
+behavior makes this of little use when the left argument (dividend) is
+greater than the right argument (divisor) -- the result in that case
+is always the maxval.  If the divisor is 0, the result is the maxval.
+This option was new in Netpbm 10.30 (October 2005).
+
+<P><B>-compare</B> produces the value <b>0</b> when the value in the
+left input image is less than the value in the right input image,
+<b>1</b> when the values are equal, and <b>2</b> when the left is
+greater than the right.
+
+<p>If the maxvals of the input images are not identical, <b>pamarith</b>
+may claim two values are not equal when in fact they are, due to
+the precision with which it does the arithmetic.  However, it will never
+say A is greater than B if A is less than B.
+
+<p><b>-compare</b> was new in Netpbm 10.13 (December 2002).
+
+<p><b>-and</b>, <b>-nand</b>, <b>-or</b>, <b>-nor</b>, and <b>-xor</b>
+consider the input and output images to contain bit strings; they compute
+bitwise logic operations.
+
+<p><b>-shiftleft</b> and <b>-shiftright</b> consider the left input
+image and output image to contain bit strings.  They compute a bit
+shift operation, with bits falling off the left or right end and
+zeroes shifting in, as opposed to bits off one end to the other.  The
+right input image sample value is the number of bit positions to
+shift.
+
+<p>Note that the maxval (see <a href="#maxval">Maxval</a>) determines
+the width of the frame within which you are shifting.
+
+<h3 id="notes">Notes</h3>
+
+<P>If you want to apply a unary function, e.g. "halve", to a single
+image, use <b>pamfunc</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamfunc.html"><b>pamfunc</b></A>,
+<A HREF="pamsummcol.html"><b>pamsummcol</b></A>,
+<A HREF="pamsumm.html"><b>pamsumm</b></A>,
+<A HREF="pnminvert.html"><b>pnminvert</b></A>,
+<A HREF="ppmbrighten.html"><b>ppmbrighten</b></A>,
+<A HREF="ppmdim.html"><b>ppmdim</b></A>,
+<A HREF="pnmconvol.html"><b>pnmconvol</b></A>,
+<A HREF="pamdepth.html"><b>pamdepth</b></A>,
+<A HREF="pnmpsnr.html"><b>pnmpsnr</b></A>,
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pam.html">pam</A>
+
+
+<A NAME="history"></A>
+<H2>HISTORY</h2>
+
+<p><b>pamarith</b> replaced <b>pnmarith</b> in Netpbm 10.3 (June 2002).
+
+<p>In Netpbm 10.3 through 10.8, though, <b>pamarith</b> was not
+backward compatible because it required the input images to be of the
+same depth, so you could not multiply a PBM by a PPM as is often done
+for masking.  (It was not intended at the time that <b>pnmarith</b>
+would be removed from Netpbm -- the plan was just to rewrite it to use
+<b>pamarith</b>; it was removed by mistake).
+
+<p>But starting with Netpbm 10.9 (September 2002), <b>pamarith</b> allows
+the images to have different depths as long as one of them has depth 1, and
+that made it backward compatible with <b>pnmarith</b>.
+
+<P>The original <b>pnmarith</b> did not have the <b>-mean</b> option.
+
+<P>The <b>-compare</b> option was added in Netpbm 10.13 (December 2002).
+
+<p>The bit string operations were added in Netpbm 10.27 (March 2005).
+
+<P>The <b>-divide</b> option was added in Netpbm 10.30 (October 2005).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#maxval">MAXVAL</A>
+<LI><A HREF="#operations">THE OPERATIONS</A>
+<LI><A HREF="#notes">NOTES</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pambackground.html b/pambackground.html
new file mode 100644
index 00000000..0da0ef40
--- /dev/null
+++ b/pambackground.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pambackground User Manual</TITLE></HEAD>
+<BODY>
+<H1>pambackground</H1>
+Updated: 24 December 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pambackground - create a mask of the background area of an image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pambackground</B>
+
+[<I>netpbmfile</I>
+
+[<b>-verbose=</b>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pambackground</b> reads a PNM or PAM image as input.
+It generates as output a PAM image that identifies the background area
+of the image (a mask).
+
+<p>To identify the background, <b>pambackground</b> assumes the image
+is a foreground image, smaller than the total image size, placed over
+a single-color background.  It assumes that foreground image is solid
+-- it does not have holes through which the background can be seen.
+So in specific, <b>pambackground</b> first identifies the background
+color, then finds all contiguous pixels of that color in regions
+touching any edge of the image.  Think of it as starting at each of
+the four edges and moving inward as far as possible until it hits
+pixels of another color (the foreground image).
+
+<p><b>pambackground</b> identifies the background color as follows:
+If any 3 corners of the image are the same color, that's the background
+color.  If not, but 2 corners are the same color, the background color
+is the color of a pair of identically colored corners in this priority
+order: top, right, left, bottom.  If no two corners have the same color,
+the background color is the color of the upper left corner.
+
+<p>In a typical photograph, the area that you would consider the
+background is many shades of a color, so to <b>pambackground</b> it is
+multiple colors and <b>pambackground</b> will not meaningfully
+identify the background of your image.  To use <b>pambackground</b> in
+this case, you might use <b>ppmchange</b> to change all similar colors
+to a single one first.  For example, if the photograph is a building
+against a blue sky, where nothing remotely sky-blue appears in the
+building, you could use <b>ppmchange</b> to change all pixels within
+20% of &quot;SkyBlue&quot; to SkyBlue, then run <b>pambackground</b>
+on it.
+
+<p>As currently implemented, <b>pambackground</b> does not really
+do what is promised above.  It can't see places where the background
+appears in the middle of a row (think of the sky between two buildings).
+It will take a considerably more sophisticated algorithm to fix that;
+feel free to write the code and submit it for inclusion in Netpbm.
+
+<p>The PAM that <b>pambackground</b> creates has a single plane, with
+a maxval of 1.  The sample value 1 means background; 0 means
+foreground.  There is no tuple type.  Some older programs (but none
+that are part of Netpbm) don't know what a PAM is and expect a mask to
+be in the form of a PGM or PBM image.  To convert
+<b>pambackground</b>'s output to PBM, use <b>pamtopnm -assume</b>.  To
+convert to PGM, use <b>pgmtopgm</b>.
+
+<P><I>netpbmfile</I> is the file specification of the input file, or
+<B>-</B> to indicate Standard Input.  The default is Standard Input.
+
+<p>A common use for a background mask is with <b>pamcomp</b>.  You
+could replace the entire background (or foreground) of your 
+image with something else.
+
+<p>Another common use is to make an image with the background
+transparent (in some image format that has a concept of transparency;
+not Netpbm formats) so that image can be overlaid onto another image
+later.  Netpbm's converters to image formats that have transparency
+(e.g. PNG) let you use the mask that <b>pambackground</b> generates
+to identify the transparent areas for the output.
+
+<p>To simply make a mask of all the areas of a specified color, use
+<b>ppmcolormask</b>.  If you have a unique background color (one that
+doesn't occur in the foreground) and know what it is, this can create
+a background mask in cases that <b>pambackground</b> cannot: where there
+are see-through holes in the foreground image.
+
+<H2 id="options">OPTIONS</H2>
+
+<dl>
+
+<dt><b>-verbose</b>
+
+<dd>Tell interesting facts about the process.
+
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+<B><A HREF="pgmtopgm.html">pgmtopgm</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+
+<h2 id="history">HISTORY</h2>
+
+<P><B>pambackground</B> was new in Netpbm 10.37 (December 2006).
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pambayer.html b/pambayer.html
new file mode 100644
index 00000000..87417751
--- /dev/null
+++ b/pambayer.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pambayer User Manual</TITLE></HEAD>
+<BODY>
+<H1>pambayer</H1>
+Updated: 18 August 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pambayer - interpret Bayer patterns
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pambayer</B>
+<b>-type=</b>{<b>1</b>, <b>2</b>, <b>3</b>, <b>4</b>}
+[<I>pamfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pambayer</b> reads a Bayer pattern in a 1-deep Netpbm image and
+produces a color image in PAM RGB format as output.
+
+<p>A Bayer pattern is what you get from the optical sensor in some
+digital cameras.  Such a camera doesn't have a red, green, and blue
+sensor in the exact same place for an individual pixel.  Instead, it
+has red, green, and blue sensors laid out in a two dimensional array.
+The pattern in which they are laid out is the Bayer pattern.  The
+input to <b>pambayer</b> is one sample value for each of those
+sensors, so some samples are red, some are green, and some are blue.
+
+
+<p>The input image is a PNM image or PAM image of arbitrary tuple type.
+<b>pambayer</b> looks at only the first plane of the input.
+
+<p>The output image is a PAM image of tuple type &quot;RGB&quot;, i.e.
+a standard color image.  You can convert this to PPM with
+<a href="pamtopnm.html"><b>pamtopnm</b></a>.
+
+<p>If you're interested in just one of the primary colors, use
+<b>pamchannel</b> on the output of <b>pambayer</b> to extract it.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<dt><b>type=</b><i>n</i>
+
+<dd>This tells which Bayer pattern the input is:
+
+<dl>
+<dt>1
+<dd>GBG/RGR/GBG matrix
+<dt>2
+<dd>RGR/GBG/RGR matrix
+<dt>3
+<dd>BGB/GRG/BGB matrix
+<dt>4
+<dd>GRG/BGB/GRG matrix
+</dl>
+
+This option is mandatory.
+
+</DL>
+
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="cameratopam.html">cameratopam</A></B>
+<B><A HREF="pam.html">pam</A></B>
+
+<H2 id="history">HISTORY</H2>
+
+<p><b>pambayer</b> was new in Netpbm 10.30 (October 2005).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamchannel.html b/pamchannel.html
new file mode 100644
index 00000000..2ced2807
--- /dev/null
+++ b/pamchannel.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamchannel User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamchannel</H1>
+Updated: 10 January 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+pamchannel - extract channels from a PAM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamchannel</B>
+[<B>-infile </B><I>infile</I>]
+[<B>-tupletype </B><I>tupletype</I>]
+[<I>channum</I> ...]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamchannel</b> reads a PAM or PNM image as input and produces a
+PAM image as output, consisting of the indicated channels (planes) of
+the input.
+
+<P>The output is the same dimensions as the input, except that the depth
+is the number of <I>channum</I> arguments you supply.  The tuple type
+is a null string unless you specify the <B>-tupletype</B> option.
+
+<p>This program works on multi-image streams, producing a
+corresponding output stream.  But before Netpbm 10.32 (February 2006),
+it ignored every image after the first.
+
+<P><B>pamstack</B> does the opposite of <B>pamchannel</B>:  It takes multiple
+PAM or PNM images as input and stacks their planes (channels) on top of
+one another to yield a single PAM.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-infile</B> <I>infile</I>
+<DD>
+This specifies the input file, which defaults to Standard Input.  You
+may specify <B>-</B> to select Standard Input explicitly.
+<P>
+This is a little unconventional for Netpbm programs, which usually 
+have the input file specification as an argument.  For <B>pamchannel</B>,
+the arguments are channel numbers.
+
+<DT><B>-tupletype</B> <I>tupletype</I>
+<DD>
+This specified the tuple type name to be recorded in the output.  You may
+use any string up to 255 characters.  Some programs recognize some names.
+If you omit this option, the default tuple type name is null.
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pam.html">pam</A></B>
+<B><A HREF="pamstack.html">pamstack</A></B>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamchannel</b> was new, along with the PAM format, in Netpbm
+9.7 (August 2000).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pamcomp.html b/pamcomp.html
new file mode 100644
index 00000000..b0c2f67b
--- /dev/null
+++ b/pamcomp.html
@@ -0,0 +1,310 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamcomp User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamcomp</H1>
+Updated: 17 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pamcomp - composite (overlay) two Netpbm images together
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamcomp</B>
+
+[<B>-align=</B>{<B>left</B>|<B>center</B>|<B>right</B>|
+<B>beyondleft</b>|<b>beyondright</b>}]
+<BR>
+[<B>-valign=</B>{<B>top</B>|<B>middle</B>|<B>bottom</B>|
+<b>above</b>|<b>below</b>}]
+<BR>
+[<B>-xoff=</B><I>X</I>]
+[<B>-yoff=</B><I>Y</I>]
+<BR>
+[<B>-alpha=</B><I>alpha-pgmfile</I>]
+[<B>-invert</B>]
+[<B>-opacity=<i>opacity</i></B>]
+[<b>-linear</b>]
+<BR>
+<I>overlay_file</I>
+[<I>underlying_file</I> [<I>output_file</I>]]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pamcomp</B> reads two images and produces a composite image with
+one of the images overlayed on top of the other, possible
+translucently.  The images need not be the same size.  The input and
+outputs are Netpbm format image files.
+
+<P>In its simplest use, <B>pamcomp</B> simply places the image in the
+file <I>overlay_file</I> on top of the image in the file
+<I>underlying_file</I>, blocking out the part of <I>underlying_file</I>
+beneath it.
+
+<P>If you add the <B>-alpha</B> option, then <B>pamcomp</B> uses the
+image in file <I>alpha-pgmfile</I> as an alpha mask, which means it
+determines the level of transparency of each point in the overlay
+image.  The alpha mask must have the same dimensions as the overlay
+image.  In places where the alpha mask defines the overlay image to be
+opaque, the composite output contains only the contents of the overlay
+image; the underlying image is totally blocked out.  In places where
+the alpha mask defines the overlay image to be transparent, the
+composite output contains none of the overlay image; the underlying
+image shows through completely.  In places where the alpha mask shows
+a value in between opaque and transparent (translucence), the
+composite image contains a mixture of the overlay image and the
+underlying image and the level of translucence determines how much of
+each.
+
+<P>The alpha mask is a PGM file in which a white pixel represents
+opaqueness and a black pixel transparency.  Anything in between is
+translucent.  (Like any Netpbm program, <B>pamcomp</B> will see a PBM
+file as if it is PGM).
+
+<p>If the overlay image is a PAM image of tuple type RGB_ALPHA or
+GRAYSCALE_ALPHA, then the overlay image contains transparency
+information itself and <b>pamcomp</b> uses it the same way as the
+alpha mask described above.  If you supply both an overlay image that
+has transparency information and an alpha mask, <b>pamcomp</b>
+multiplies the two opacities to get the opacity of the overlay pixel.
+
+<p>Before Netpbm 10.25 (October 2004), <b>pamcomp</b> did not
+recognize the transparency information in a PAM image -- it just
+ignored it.  So people had to make appropriate alpha masks in order to
+have a non-opaque overlay.  Some Netpbm programs that convert from
+image formats such as PNG that contain transparency information are
+not able to create RGB_ALPHA or GRAYSCALE_ALPHA PAM output, so you
+have to use the old method -- extract the transparency information from
+the original into a separate alpha mask and use that as input to
+<b>pamcomp</b>.
+
+<P>The output image is always of the same dimensions as the underlying
+image.  <B>pamcomp</B> uses only parts of the overlay image that fit
+within the underlying image.
+
+<P>To specify where on the underlying image to place the overlay
+image, use the <B>-align</B>, <B>-valign</B>, <B>-xoff</B>, and
+<B>-yoff</B> options.  Without these options, the default horizontal
+position is flush left and the default vertical position is flush top.
+
+<p>The overlay image, in the position you specify, need not fit entirely
+within the underlying image.  <b>pamcomp</b> uses only the parts of the
+overlay image that appear above the underlying image.  It is possible to
+specify positioning such that <em>none</em> of the overlay image is 
+over the underlying image -- i.e. the overlay is out of frame.  If you
+do that, <b>pamcomp</b> issues a warning.
+
+<P> The overlay and underlying images may be of different formats
+(e.g.  overlaying a PBM text image over a full color PPM image) and
+have different maxvals.  The output image has the more general of the
+two input formats and a maxval that is the least common multiple the
+two maxvals (or the maximum maxval allowable by the format, if the LCM
+is more than that).
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-align=</b><i>alignment</i>
+<DD>
+This option selects the basic horizontal position of the overlay image
+with respect to the underlying image, in syntax reminiscent of HTML.
+<b>left</b> means flush left, <b>center</b> means centered, and <b>right</b>
+means flush right.
+
+<p>The <b>-xoff</b> option modifies this position.
+
+<b>beyondleft</b> means just out of frame to the left -- the right edge of
+the overlay is flush with the left edge of the underlying image.  
+<b>beyondright</b> means just out of frame to the right.  These alignments
+are useful only if you add a <b>-xoff</b> option.    These two values were
+added in Netpbm 10.10 (October 2002).
+
+<p>The default is <b>left</b>.
+
+<DT><B>-valign=</b><i>alignment</i>
+<DD>
+
+This option selects the basic vertical position of the overlay image
+with respect to the underlying image, in syntax reminiscent of HTML.
+<b>top</b> means flush top, <b>middle</b> means centered, and <b>bottom</b>
+means flush bottom.
+
+<p>The <b>-yoff</b> option modifies this position.
+
+<b>above</b> means just out of frame to the top -- the bottom edge of
+the overlay is flush with the top edge of the underlying image.  
+<b>below</b> means just out of frame to the bottom.  These alignments
+are useful only if you add a <b>-yoff</b> option.  These two values were
+added in Netpbm 10.10 (October 2002).
+
+<p>The default is <b>top</b>.
+
+<DT><B>-xoff=</B><I>x</I>
+
+<DD>This option modifies the horizontal positioning of the overlay
+image with respect to the underlying image as selected by the
+<b>-align</b> option.  <b>pamcomp</b> shifts the overlay image from
+that basic position <i>x</i> pixels to the right.  <i>x</i> can be
+negative to indicate shifting to the left.
+
+<p>The overlay need not fit entirely (or at all) on the underlying image.
+<B>pamcomp</B> uses only the parts that lie over the underlying image.
+
+<P>Before Netpbm 10.10 (October 2002), <b>-xoff</b> was mutually 
+exclusive with <b>-align</b> and always measured from the left edge.
+
+<DT><B>-yoff=</B><I>y</I>
+
+<DD>This option modifies the vertical positioning of the overlay
+image with respect to the underlying image as selected by the
+<b>-valign</b> option.  <b>pamcomp</b> shifts the overlay image from
+that basic position <i>y</i> pixels downward.  <i>y</i> can be
+negative to indicate shifting upward.
+
+<p>The overlay need not fit entirely (or at all) on the underlying image.
+<B>pamcomp</B> uses only the parts that lie over the underlying image.
+
+<P>Before Netpbm 10.10 (October 2002), <b>-xoff</b> was mutually 
+exclusive with <b>-valign</b> and always measured from the top edge.
+
+<DT><B>-alpha=</B><i>alpha-pgmfile</i>
+<DD>
+This option names a file that contains the alpha mask.  If you don't
+specify this option, there is no alpha mask, which is equivalent to 
+having an alpha mask specify total opaqueness everywhere.
+<p>
+You can specify <b>-</b> as the value of this option and the alpha
+mask will come from Standard Input.  If you do this, don't specify
+Standard Input as the source of any other input image.
+
+<DT><B>-invert</B>
+<DD>
+This option inverts the sense of the values in the alpha mask, which 
+effectively switches the roles of the overlay image and the underlying
+image in places where the two intersect.
+
+<DT><B>-opacity=</B><i>opacity</i>
+<DD>
+This option tells how opaque the overlay image is to be, i.e. how much
+of the composite image should be from the overlay image, as opposed to
+the underlying image.  <i>opacity</i> is a floating point number, with
+1.0 meaning the overlay image is totally opaque and 0.0 meaning it is
+totally transparent.  The default is 1.0.
+
+<p>If you specify an alpha mask (the <b>-alpha</b> option),
+<b>pamcomp</b> uses the product of the opacity indicated by the alpha
+mask (as modified by the <b>-invert</b> option, as a fraction, and
+this opacity value.  The <b>-invert</b> option does not apply to this
+opacity value.
+
+<p>As a simple opacity value, the value makes sense only if it is
+between 0 and 1, inclusive.  However, <b>pamcomp</b> accepts all
+values and performs the same arithmetic computation using whatever
+value you provide.  An opacity value less than zero means the underlay
+image is intensified and then the overlay image is "subtracted" from
+it.  An opacity value greater than unity means the overlay image is
+intensified and the underlaying image subtracted from it.  In either
+case, <b>pamcomp</b> clips the resulting color component intensities
+so they are nonnegative and don't exceed the output image's maxval.
+
+<p>This may seem like a strange thing to do, but it has uses.  You
+can use it to brighten or darken or saturate or desaturate areas of the
+underlaying image.  See <a href="extendedopacity.html">
+this description</a> of the technique.
+     
+<p>This option was added in Netpbm 10.6 (July 2002).  Before Netpbm 10.15
+(April 2003), values less than zero or greater than unity were not allowed.
+
+<dt><b>-linear</b>
+
+<dd>This option indicates that the inputs are not true Netpbm images
+but rather a non-gamma-adjusted variation.  This is relevant only when
+you mix pixels, using the <b>-opacity</b> option or an alpha mask
+(the <b>-alpha</b> option).
+
+<p>The alpha mask and <b>-opacity</b> values indicate a fraction of
+the light intensity of a pixel.  But the PNM and PNM-equivalent PAM
+image formats represent intensities with gamma-adjusted numbers that
+are not linearly proportional to intensity.  So <b>pamcomp</b>, by
+default, performs a calculation on each sample read from its input and
+each sample written to its output to convert between these
+gamma-adjusted numbers and internal intensity-proportional numbers.
+
+<p>Sometimes you are not working with true PNM or PAM images, but
+rather a variation in which the sample values are in fact directly
+proportional to intensity.  If so, use the <b>-linear</b> option to
+tell <b>pamcomp</b> this.  <b>pamcomp</B> then will skip the
+conversions.
+
+<p>The conversion takes time.  And the difference between
+intensity-proportional values and gamma-adjusted values may be small
+enough that you would barely see a difference in the result if you
+just pretended that the gamma-adjusted values were in fact
+intensity-proportional.  So just to save time, at the expense of some
+image quality, you can specify <b>-linear</b> even when you have true
+PPM input and expect true PPM output.
+
+<p>For the first 13 years of Netpbm's life, until Netpbm 10.20
+(January 2004), <b>pamcomp</b>'s predecessor <b>pnmcomp</b> always
+treated the PPM samples as intensity-proportional even though they
+were not, and drew few complaints.  So using <b>-linear</b> as a lie
+is a reasonable thing to do if speed is important to you.
+
+<p>Another technique to consider is to convert your PNM image to the
+linear variation with <b>pnmgamma</b>, run <b>pamcomp</b> on it and
+other transformations that like linear PNM, and then convert it back
+to true PNM with <b>pnmgamma -ungamma</b>.  <b>pnmgamma</b> is often
+faster than <b>pamcomp</b> in doing the conversion.
+
+</DL>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<p><B><A HREF="ppmmix.html">ppmmix</A></B> and <B><A
+HREF="pnmpaste.html">pnmpaste</A></B> are simpler, less general
+versions of the same tool.
+
+<p><B><A HREF="ppmcolormask.html">ppmcolormask</A></B> and <B><A
+HREF="pbmmask.html">pbmmask</A></B>, and <a
+href="pambackground.html"><b>pambackground</b></a> can help with
+generating an alpha mask.
+
+<p><B><A HREF="pnmcomp.html">pnmcomp</A></B> is an older program that
+runs faster, but has less function.
+
+<P><B><A HREF="pnm.html">pnm</A></B>
+
+
+<H2 id="history">HISTORY</H2>
+
+<p><b>pamcomp</b> was new in Netpbm 10.21 (March 2004).  Its predecessor,
+<b>pnmcomp</b>, was one of the first programs added to Netpbm when the
+project went global in 1993.
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1992 by David Koblas (<A
+HREF="mailto:koblas@mips.com">koblas@mips.com</A>).
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamcut.html b/pamcut.html
new file mode 100644
index 00000000..6eea7845
--- /dev/null
+++ b/pamcut.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamcut User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamcut</H1>
+Updated: 05 April 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamcut - cut a rectangle out of a PAM, PBM, PGM, or PPM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamcut</B>
+
+[<B>-left </B><I>colnum</I>]
+
+[<B>-right </B><I>colnum</I>]
+
+[<B>-top </B><I>rownum</I>]
+
+[<B>-bottom </B><I>rownum</I>]
+
+[<B>-width </B><I>cols</I>]
+
+[<B>-height </B><I>rows</I>]
+
+[<B>-pad</B>]
+
+[<B>-verbose</B>]
+
+[<I>left</i> <i>top</i> <i>width</i> <i>height</I>]
+
+[<I>pnmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pamcut</b> reads a PAM, PBM, PGM, or PPM image as input and
+extracts the specified rectangle, and produces the same kind of image
+as output.
+
+<P>There are two ways to specify the rectangle to cut: arguments and
+options.  Options are easier to remember and read, more expressive,
+and allow you to use defaults.  Arguments were the only way available
+before July 2000.
+
+<P>If you use both options and arguments, the two specifications get
+mixed in an unspecified way.
+
+<p>In any case, remember that you are specifying the rectangle to
+keep, not the bits to discard.  Otherwise, you'll be tempted to
+believe that <b>-right=9</b> means to delete the 9 rightmost columns.
+(It really means keep the stuff up to Column 9 and delete the rest).
+
+<P>To use options, just code any mixture of the <B>-left</B>,
+<B>-right</B>, <B>-top</B>, <B>-bottom</B>, <B>-width</B>, and
+<B>-height</B> options.  What you don't specify defaults.  Those
+defaults are in favor of minimal cutting and in favor of cutting the
+right and bottom edges off.  It is an error to overspecify, i.e. to
+specify all three of <B>-left</B>, <B>-right</B>, and <B>-width</B> or
+<B>-top</B>, <B>-bottom</B>, and <B>-height</B>.
+
+<P>To use arguments, specify all four of the <I>left</I>,
+<I>top</I>, <I>width</I>, and <I>height</I> arguments.  <I>left</I>
+and <I>top</I> have the same effect as specifying them as the argument
+of a <B>-left</B> or <B>-top</B> option, respectively.  <I>width</I>
+and <I>height</I> have the same effect as specifying them as the
+argument of a <B>-width</B> or <B>-height</B> option, respectively,
+where they are positive.  Where they are not positive, they have the
+same effect as specifying one less than the value as the argument to a
+<B>-right</B> or <B>-bottom</B> option, respectively.  (E.g.
+<I>width</I> = 0 makes the cut go all the way to the right edge).
+Before July 2000, negative numbers were not allowed for <I>width</I>
+and <I>height</I>.
+
+<P>Input is from Standard Input if you don't specify the input file
+<I>pnmfile</I>.
+
+<P>Output is to Standard Output.
+
+<p><b>pamcut</b> works on a multi-image stream.  It cuts each image in the
+stream independently and produces a multi-image stream output.  Before
+Netpbm 10.32 (March 2006), it ignored all but the first image in the stream.
+
+<P>If you are splitting a single image into multiple same-size images,
+<B>pamdice</B> is faster than running <B>pamcut</B> multiple times.
+
+<p><b>pamcomp</b> is also useful for cutting and padding an image to a
+certain size.  You create a background image of the desired frame
+dimensions and overlay the subject image on it.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-left=</B><i>colnum</i>
+
+<DD>The column number of the leftmost column to be in the output.
+Columns left of this get cut out.  If a nonnegative number, it refers
+to columns numbered from 0 at the left, increasing to the right.  If
+negative, it refers to columns numbered -1 at the right, decreasing to
+the left.
+
+<p>To delete <i>N</i> columns at the left edge, specify
+<b>-left=</b><i>N</i>.
+
+<p>To delete <i>N</i> columns at the right edge, specify
+<b>-left=-</b><i>-(N+1)</i>.
+
+<DT><B>-right=</B><i>colnum</i>
+
+<DD>The column number of the rightmost column to be in the output,
+numbered the same as for <B>-left.</B>  Columns to the right of this
+get cut out.
+
+<DT><B>-top=</B><i>rownum</i>
+
+<DD>The row number of the topmost row to be in the output.  Rows above
+this get cut out.  If a nonnegative number it refers to rows numbered
+from 0 at the top, increasing downward.  If negative, it refers to
+columns numbered -1 at the bottom, decreasing upward.
+
+<p>To delete <i>N</i> rows at the top, specify <b>-top=</b><i>N</i>.
+
+<p>To delete <i>N</i> rows at the bottom, specify <b>-bottom=</b><i>-(N+1)</i>.
+
+<DT><B>-bottom=</B><i>rownum</i>
+
+<DD>The row number of the bottom-most row to be in the output,
+numbered the same as for <B>-top</B>.  Rows below this get cut out.
+
+<DT><B>-width=</B><i>cols</i>
+
+<DD>The number of columns to be in the output.  Must be positive.
+
+<DT><B>-height=</B><i>rows</i>
+
+<DD>The number of rows to be in the output.  Must be positive.
+
+<DT><B>-pad</B>
+
+<DD>If the rectangle you specify is not entirely within the input
+image, <B>pamcut</B> fails unless you also specify <B>-pad</B>.  In
+that case, it pads the output with black up to the edges you specify.
+You can use this option if you need to have an image of certain
+dimensions and have an image of arbitrary dimensions.
+
+<P><B>pnmpad</B> also adds borders to an image, but you specify their
+width directly.
+
+<p><b>pamcomp</b> does a more general form of this padding.  Create a
+background image of the frame dimensions and overlay the subject image
+on it.  You can use options to have the subject image in the center of
+the frame or against any edge and make the padding any color (the padding
+color is the color of the background image).
+
+<DT><B>-verbose</B>
+
+<DD>
+Print information about the processing to Standard Error.
+
+</DL>
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnmcrop.html">pnmcrop</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="pnmpad.html">pnmpad</A></B>,
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+<B><A HREF="pgmslice.html">pgmslice</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<h2 id="history">HISTORY</h2>
+
+<P><B>pamcut</b> was derived from <b>pnmcut</b> in Netpbm 9.20 (May 2001).
+It was the first Netpbm program adapted to the new PAM format and programming
+library.
+
+<p>The predecessor <b>pnmcut</b> was one of the oldest tools in the Netpbm
+package.
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamdeinterlace.html b/pamdeinterlace.html
new file mode 100644
index 00000000..62991a95
--- /dev/null
+++ b/pamdeinterlace.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamdeinterlace User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamdeinterlace</H1>
+Updated: 11 November 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamdeinterlace - remove every other row from a PAM/PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamdeinterlace</B>
+
+[<B>-takeodd</B>]
+
+[<B>-takeeven</B>]
+
+[<I>infile</I>]
+
+<P>You can use the minimum unique abbreviation of the options.  You
+can use two hyphens instead of one.  You can separate an option name
+from its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pamdeinterlace</B> removes all the even-numbered or odd-numbered
+rows from the input PNM or PAM image.  Specify which with the
+<B>-takeeven</B> and <B>-takeodd</B> options.
+
+<P>This can be useful if the image is a video capture from an
+interlaced video source.  In that case, each row shows the subject
+1/60 second before or after the two rows that surround it.  If the
+subject is moving, this can detract from the quality of the image.
+
+<P>Because the resulting image is half the height of the input image,
+you will then want to use <B>pamstretch</B> or <B>pamscale</B> to
+restore it to its normal height:
+
+<pre>
+<kbd>
+pamdeinterlace myimage.ppm | pamstretch -yscale=2 &gt;newimage.ppm
+</kbd>
+</pre>
+
+<p>Another, usually better, way to deinterlace an image is with
+<b>pammixinterlace</b>.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-takeodd</B>
+
+<DD>Take the odd-numbered rows from the input and put them in the
+output.  The rows are numbered starting at zero, so the first row in
+the output is the second row from the input.  You cannot specify both
+<B>-takeeven</B> and <B>-takeodd</B>.
+
+<DT><B>-takeeven</B>
+
+<DD>Take the even-numbered rows from the input and put them in the
+output.  The rows are numbered starting at zero, so the first row in
+the output is the first row from the input.  This is the default.  You
+cannot specify both <B>-takeeven</B> and <B>-takeodd</B>.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+
+<B><A HREF="pammixinterlace.html">pammixinterlace</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+<B><A HREF="pnm.html">pnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamdepth.html b/pamdepth.html
new file mode 100644
index 00000000..885edd9e
--- /dev/null
+++ b/pamdepth.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamdepth User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamdepth</H1>
+Updated: 08 April 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamdepth - change the maxval in a Netpbm image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamdepth</B>
+
+<I>newmaxval</I>
+
+[<I>netpbmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamdepth</b> reads a Netpbm image as input, scales all the pixel
+values, and writes out the image with the new maxval.  Scaling the
+colors down to a smaller maxval will result in some loss of
+information.
+
+<p>This program works on multi-image streams.
+
+<P>Be careful of off-by-one errors when choosing the new maxval.  For
+instance, if you want the color values to be five bits wide, use a
+maxval of 31, not 32.
+
+<P>One important use of <B>pamdepth</B> is to convert a new format
+2-byte-per-sample PNM file to the older 1-byte-per-sample format.
+Before April 2000, essentially all raw (binary) format PNM files had a
+maxval less than 256 and one byte per sample, and many programs may
+rely on that.  If you specify a <I>newmaxval</I> less than 256, the
+resulting file should be readable by any program that worked with PNM
+files before April 2000.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pam.html">pam</A>,
+<A HREF="pnmquant.html">pnmquant</A>,
+<A HREF="ppmdither.html">ppmdither</A>
+<A HREF="ppmbrighten.html">ppmbrighten</A>
+<A HREF="pamfunc.html">pamfunc</A>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamdepth</b> was new in Netpbm 10.32 (February 2006).  It replaced
+<b>pnmdepth</b>, by Jef Poskanzer.  <b>pamdepth</b> is backward compatible
+with <b>pamdepth</b> and adds the ability to process arbitrary PAM images
+and the ability to process multi-image input streams.  <b>pnmdepth</b>
+handled only PNM images and ignored all but the the first in any stream.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamdice.html b/pamdice.html
new file mode 100644
index 00000000..1495cc80
--- /dev/null
+++ b/pamdice.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamdice User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamdice</H1>
+Updated: 29 July 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamdice - slice a Netpbm image into many horizontally and/or vertically
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamdice</B>
+
+<B>-outstem=</B><I>filenamestem</I>
+
+[<B>-width=</B><I>width</I>]
+
+[<B>-height=</B><I>height</I>]
+
+[<B>-hoverlap=</B><I>hoverlap</I>]
+
+[<B>-voverlap=</B><I>voverlap</I>]
+
+[<B>-verbose</B>]
+
+[<I>filename</I>]
+
+<P>You can use the minimum unique abbreviation of the options.  You can use
+two hyphens instead of one.  You can separate an option name from its value
+with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamdice</b> reads a PAM, PBM, PGM, or PPM image as input and
+splits it horizontally and/or vertically into equal size pieces and
+writes them into separate files as the same kind of image.  You can
+optionally make the pieces overlap.
+
+<P>See the <B>-outstem</B> option for information on naming of the
+output files.
+
+<P>The <B>-width</B> and <B>-height</B> options determine the size of
+the output pieces.
+
+<P><B>pnmcat</B> can rejoin the images.
+
+<p>One use for this is to make pieces that take less computer resources
+than the whole image to process.  For example, you might have an image
+so large that an image editor can't read it all into memory or processes
+it very slowly.  With <b>pamdice</b>, you can split it into smaller pieces,
+edit one a time, and then reassemble them.
+
+<p>Another use for this is to print a large image in small printer-sized
+pieces that you can glue together.  <b>ppmglobe</b> does a similar thing;
+it lets you glue the pieces together into a sphere.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-outstem=</B>filenamestem
+
+<DD>This option determines the names of the output files.  Each output
+file is named
+<I>filenamestem</I><B>_</B><I>y</I><B>_</B><I>x</I><B>.</B><I>type</I>
+where <I>filenamestem</I> is the value of the <B>-outstem</B> option,
+<I>x</I> and y are the horizontal and vertical locations,
+respectively, in the input image of the output image, zero being the
+leftmost and top, and <I>type</I> is <B>.pbm</B>, <B>.pgm</B>,
+<B>.ppm</B>, or <B>.pam</B>, depending on the type of image.
+
+<DT><B>-width=</B><I>width</I>
+
+<DD>gives the width in pixels of the output images.  The rightmost
+pieces are smaller than this if the input image is not a multiple of
+<I>width</I> pixels wide.
+
+<DT><B>-height=</B><I>height</I>
+
+<DD>gives the height in pixels of the output images.  The bottom
+pieces are smaller than this if the input image is not a multiple of
+<I>height</I> pixels high.
+
+<DT><B>-hoverlap=</B><I>hoverlap</I>
+
+<DD>gives the horizontal overlap in pixels between output images.
+Each image in a row will overlap the previous one by <I>hoverlap</I>
+pixels.  By default, there is no overlap.
+
+<p>This option was new in Netpbm 10.23 (July 2004).
+
+<DT><B>-voverlap=</B><I>voverlap</I>
+
+<DD>gives the vertical overlap in pixels between output images.
+Each row of images will overlap the previous row by <I>voverlap</I>
+pixels.  By default, there is no overlap.
+
+<p>This option was new in Netpbm 10.23 (July 2004).
+
+<DT><B>-verbose</B>
+
+<DD>Print information about the processing to Standard Error.
+
+</DL>
+
+<H2 id="history">HISTORY</H2>
+
+<p>Before Netpbm 10.29 (August 2005), there was a limit of 100 slices
+in each direction.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+<B><A HREF="pgmslice.html">pgmslice</A></B>,
+<B><A HREF="ppmglobe.html">ppmglobe</A></B>
+<B><A HREF="pnm.html">pnm</A></B>
+<B><A HREF="pam.html">pnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamditherbw.html b/pamditherbw.html
new file mode 100644
index 00000000..e6d2cd9e
--- /dev/null
+++ b/pamditherbw.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamditherbw User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamditherbw</H1>
+Updated: 20 June 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamditherbw - dither grayscale image to black and white
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamditherbw</B>
+
+[<B>-floyd</B> | <B>-fs</B> | <B>-threshold</B>
+| <B>-hilbert</B>
+| <B>-dither8</B> | <B>-d8</B> | <B>-cluster3</B>
+| <B>-c3</B> | <B>-cluster4</B> | <B>-c4</B>
+| <B>-cluster8</B> | <B>-c8</B>]
+
+[<B>-value</B> <I>val</I>]
+
+[<B>-clump</B> <I>size</I>]
+
+[<I>pamfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pamditherbw</b> dithers a grayscale image.  Dithering means turning
+each shade of gray into a pattern of black and white pixels that, from
+a distance, look the same as the gray.
+
+<p>The input should be a PGM image or a PAM image of tuple type
+GRAYSCALE.  However, <b>pamditherbw</b> doesn't check, so if you feed
+it e.g. a PPM image, it will produce arbitrary results (actually, it
+just takes the first channel of whatever you give it and treats it as
+if it represented gray levels).
+
+<p>The output is a PAM with tuple type BLACKANDWHITE.  You can turn
+this into a PBM (if you need to use it with an older program doesn't
+understand PAM) with <b>pamtopnm</b>.
+
+<P>To do the opposite of dithering, you can usually just scale the image
+down and then back up again with <b>pamscale</b>, possibly smoothing or
+blurring the result with <b>pnmsmooth</b> or <b>pnmconvol</b>.  Or use
+the special case program <b>pbmtopgm</b>.
+
+<p>To dither a color image (to reduce the number of pixel colors),
+use <b>ppmdither</b>.
+
+<p>Another way to convert a grayscale image to a black and white image
+is thresholding.  Thresholding is simply replacing each grayscale pixel
+with a black or white pixel depending on wether its brightness is above or
+below a threshold.  That threshold might vary.  Simple thresholding is a
+degenerate case of dithering, so <b>pamditherbw</b> does very simple
+thresholding with its <b>-threshold</b> option.  But <b>pamthreshold</b>
+does more sophisticated thresholding.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<P>The default quantization method is boustrophedonic Floyd-Steinberg
+error diffusion (<B>-floyd</B> or <B>-fs</B>).
+
+<p>Also available are simple thresholding (<B>-threshold</B>); Bayer's
+ordered dither (<B>-dither8</B>) with a 16x16 matrix; and three
+different sizes of 45-degree clustered-dot dither (<B>-cluster3</B>,
+<B>-cluster4</B>, <B>-cluster8</B>).
+
+<p>A space filling curve halftoning method using the Hilbert curve is
+also available (<B>-hilbert</B>).
+
+<P>Floyd-Steinberg will almost always give the best looking results;
+however, looking good is not always what you want.  For instance,
+thresholding can be used in a pipeline with the <b>pnmconvol</b> tool,
+for tasks like edge and peak detection.  And clustered-dot dithering
+gives a newspaper-ish look, a useful special effect.
+
+<P>The <B>-value</B> option alters the thresholding value for
+Floyd-Steinberg and simple thresholding.  It should be a real number
+between 0 and 1.  Above 0.5 means darker images; below 0.5 means
+lighter.
+
+<P>The Hilbert curve method is useful for processing images before
+display on devices that do not render individual pixels distinctly
+(like laser printers).  This dithering method can give better results
+than the dithering usually done by the laser printers themselves.  The
+<B>-clump</B> option alters the number of pixels in a clump.  This is
+usually an integer between 2 and 100 (default 5).  Smaller clump sizes
+smear the image less and are less grainy, but seem to loose some grey
+scale linearity. Typically a PGM image will have to be scaled to fit
+on a laser printer page (2400 x 3000 pixels for an A4 300 dpi page),
+and then dithered to a PBM image before being converted to a
+postscript file.  A printing pipeline might look something like:
+
+<pre>
+    pamscale -xysize 2400 3000 image.pgm | pamditherbw -hilbert |  \
+      pamtopnm | pnmtops -scale 0.25 &gt; image.ps 
+</pre>
+
+<P>All options can be abbreviated to their shortest unique prefix.
+
+<H2 id="references">REFERENCES</H2>
+
+<p>The only reference you need for this stuff is &quot;Digital
+Halftoning&quot; by Robert Ulichney, MIT Press, ISBN 0-262-21009-6.
+
+<P>The Hilbert curve space filling method is taken from &quot;Digital
+Halftoning with Space Filling Curves&quot; by Luiz Velho, Computer
+Graphics Volume 25, Number 4, proceedings of SIGRAPH '91, page
+81. ISBN 0-89791-436-8
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pamtopnm.html">pamtopnm</A>,
+<A HREF="pgmtopgm.html">pgmtopgm</A>,
+<A HREF="pbmtopgm.html">pbmtopgm</A>,
+<A HREF="pamthreshold.html">pamthreshold</A>,
+<A HREF="pbmreduce.html">pbmreduce</A>,
+<A HREF="pnmconvol.html">pnmconvol</A>,
+<A HREF="pamscale.html">pamscale</A>,
+<A HREF="pam.html">pam</A>,
+<A HREF="pnm.html">pnm</A>,
+
+<H2 id="history">HISTORY</H2>
+
+<p><b>pamditherbw</b> was new in Netpbm 10.23 (July 2004), but is
+essentially the same program as <b>pgmtopbm</b> that has existed
+practically since the beginning.  <b>pamditherbw</b> differs from its
+predecessor in that it properly deals with gamma adjustment and that
+it accepts PAM input in addition to PGM and PBM and produces PAM
+output.
+
+<p><b>pamditherbw</b> obsoletes <b>pgmtopbm</b>.
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#references">REFERENCES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamedge.html b/pamedge.html
new file mode 100644
index 00000000..94fe3dce
--- /dev/null
+++ b/pamedge.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamedge User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamedge</H1>
+Updated: 11 January 2003
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamedge - edge-detect an image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamedge</B> [<I>imagefile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamedge</b> reads a Netpbm image (PNM or PAM) and produces
+an image that outlines the edges.
+
+<p>The output image is of the same type as the input, except that the
+maxval of the output is at least 255 and if the input is PBM, the output
+is PGM.
+
+<p>You can pipe the result through <tt>pamditherbw -threshold</tt> and play
+with the threshold value to get a PBM (bilevel image) of the edges.
+
+The edge detection technique used is to take the Pythagorean sum of
+two Sobel gradient operators at 90 degrees to each other.  For more
+details see &quot;Digital Image Processing&quot; by Gonzalez and
+Wintz, chapter 7.
+
+<P>The maxval of the output is the same as the maxval of the input
+The effect is better with larger maxvals, so you may want to increase
+the maxval of the input by running it through <B>pamdepth</B> first.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgmenhance.html">pgmenhance</A></B>,
+<B><A HREF="pamditherbw.html">pamditherbw</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="pammasksharpen.html">pammasksharpen</A></B>,
+<B><A HREF="pamsharpness.html">pamsharpness</A></B>,
+<B><A HREF="pamsharpmap.html">pamsharpmap</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="history"></a>
+<h2>HISTORY</h2>
+
+<p><b>pamedge</b> was added to Netpbm in Release 10.14 (March 2003).
+It replaced <b>pgmedge</b>, which was the same thing, but worked only on
+PGM and PBM images.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.  Adapted to <b>pnmedge</b> Peter
+Kichgessner in 1995, and then to <b>pamedge</b> by Bryan Henderson in
+2003.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF=#history>HISTORY</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamendian.html b/pamendian.html
new file mode 100644
index 00000000..772ec293
--- /dev/null
+++ b/pamendian.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamendian User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamendian</H1>
+Updated: 16 March 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamendian - reverse endianness of a Netpbm image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamendian</B>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>All Netpbm formats that have samples in pure binary format with multiple
+bytes are defined to have them in big endian (most significant byte first)
+order.  However, there exist variations on these formats, primarily developed
+before official multibyte Netpbm formats existed, that are identical to 
+Netpbm formats in every respect except that samples are in little endian
+(least signficant byte first) order.
+
+<P><B>pamendian</B> reverses the byte order of the sample to convert
+between the two formats.  If the input is true PAM, PGM, or PPM, the
+output is the little endian variation on that format, and vice versa.
+
+<P>Programs that come with the Independent Jpeg Group's JPEG library
+are known to use the little endian variation of PGM and PPM.
+
+<P>This program takes input only on Standard Input.  Its output is
+always on Standard Output.
+
+<P>You should never have to use this program with images generated by
+programs in the Netpbm package or programs that use the Netpbm
+libraries.  If you do, that probably means something needs to be fixed
+in those programs.  The Netpbm converter for any graphics format that
+represents numbers in little endian form should properly reverse the
+bytes to create correct Netpbm output.
+
+<P>If you create a Netpbm image from a generic stream of samples,
+using <B>rawtopgm</B> or <B>rawtoppm</B>, use options on those
+programs to declare the endianness of your input, thus creating
+correct endianness in your PGM or PPM output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="rawtopgm.html">rawtopgm</A></B>,
+<B><A HREF="rawtoppm.html">rawtoppm</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<HR>
+<A NAME="Table Of Contents">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pamenlarge.html b/pamenlarge.html
new file mode 100644
index 00000000..f4cf6181
--- /dev/null
+++ b/pamenlarge.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamenlarge User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamenlarge</H1>
+Updated: 26 September 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamenlarge - Enlarge a Netpbm image N times
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamenlarge</B>
+
+<I>N</I>
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamenlarge</b> reads a Netpbm image as input, replicates its pixels
+<I>N</I> times, and produces a Netpbm image as output.  The output is
+the same type of image as the input.
+
+<P>If you enlarge by a factor of 3 or more, you should probably add a
+<b>pnmsmooth</b> step; otherwise, you can see the original pixels in
+the resulting image.
+
+<P><b>pamenlarge</b> can enlarge only by integer factors.  The slower
+but more general <b>pamscale</B> can enlarge or reduce by arbitrary
+factors.  <b>pamscale</b> allows you to enlarge by resampling, which
+gives you smoother enlargements.  But it is much slower.
+
+<p><b>pamstretch</b> is another enlarging program that enlarges by
+integer factors.  It does a simple kind of resampling that gives you a
+smoothed enlargement with less computational cost.
+
+<p><b>pbmreduce</b> can reduce by integer factors, but only for PBM
+images.
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamenlarge</b> was new in Netpbm 10.25 (October 2004).  It is
+designed as a replacement for <b>pnmenlarge</b> by Jef Poskanzer,
+which was in Pbmplus as far back as 1989.  The major difference is that
+<b>pamenlarge</b> can enlarge PAM format images in addition to PNM.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmreduce.html">pbmreduce</A>,
+<A HREF="pamscale.html">pamscale</A>,
+<A HREF="pamstretch.html">pamstretch</A>,
+<A HREF="pnmsmooth.html">pnmsmooth</A>,
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamfile.html b/pamfile.html
new file mode 100644
index 00000000..f78ba740
--- /dev/null
+++ b/pamfile.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamfile User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamfile</H1>
+Updated: 11 July 2006;
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamfile - describe a Netpbm (PAM or PNM) file
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamfile</B>
+
+[<B>-allimages</B>]
+[<B>-count</B>]
+[<B>-comments</B>]
+
+[<I>file</i> ...]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pamfile</b> reads one or more Netpbm files as input and writes
+out short descriptions of the image type, size, etc.  This is partly
+for use in shell scripts, so the format is not particularly pretty.
+
+<p>By default, <b>pamfile</b> reads only the header of the input file.
+If that file is a pipe, that might cause problems for the process that is
+feeding the pipe.  In that case, see the <b>-allimages</b> option.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-allimages</B>
+
+<DD>This option causes <b>pamfile</b> to describe every image in each
+input file.  Without this option, <B>pamfile</B> describes only the
+first image in each input file.
+
+<p>This option also causes <b>pamfile</b> to read all the images from 
+the input stream, whereas without it, <b>pamfile</b> reads only the header
+of the first one.  If the input stream is from a pipe, the process that is
+feeding the pipe might require the entire stream to be consumed.  In
+that case, use this option even if the stream contains only one image.
+
+<p>This option has no effect if you also specify <b>-count</b>.
+
+<p>Note that before July 2000, a file could not contain more than one
+image and many programs ignore all but the first.
+
+<p>This option was new in Netpbm 9.5 (July 2000).
+
+<dt><b>-comments</b>
+
+<dd>This option causes <b>pamfile</b> to include for each PAM image
+a report of the comments from the header of the image.
+
+<p>For a PBM, PGM, or PPM image, <b>pamfile</b> reports there are no
+comments, even if there are.
+
+<p>This option was new in Netpbm 10.35 (August 2006).
+
+<dt><b>-count</b>
+
+<dd>This option causes <b>pamfile</b> to display only a count of how many
+images are in each input file.
+
+<p>As with <b>-allimages</b>, this causes <b>pamfile</b> to read all the
+images.
+
+<p>This option was new with Netpbm 10.31 (December 2005).
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="ppmhist.html">ppmhist</A></B>,
+<B>file</B>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pamflip.html b/pamflip.html
new file mode 100644
index 00000000..15f0e5b4
--- /dev/null
+++ b/pamflip.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamflip User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamflip</H1>
+Updated: 18 February 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamflip - flip or rotate a PAM or PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamflip</B>
+{
+<B>-leftright</B> | <B>-lr</B> |
+<B>-topbottom</B> | <B>-tb</B> |
+<B>-transpose</B> | <B>-xy</B> |
+<B>-rotate90</B> | <B>-r90</B> | <B>-cw</B> |
+<B>-rotate270</B> | <B>-r270</B> | <B>-ccw</B> |
+<B>-rotate180</B> | <B>-r180</B>
+<B>-null</B> |
+<B>-xform=</b><i>xform1</i><b>,</b><i>xform2</i>...
+}
+[<B>-memsize=</b><i>mebibytes</i>]
+[<B>-pagesize=</b><i>bytes</i>]
+[<I>pamfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and
+its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamflip</b> flips a PAM or PNM image top for bottom or left for right,
+or transposes it horizontal for vertical, or rotates it 1, 2, or 3
+quarter turns.
+
+<p>To rotate at other angles, use <b>pnmrotate</b>.  It is much slower,
+though.
+
+<p>The input image is <i>pamfile</i>, or Standard Input if <i>pamfile</i>
+is not specified.
+
+<p>To flip/rotate a JFIF (JPEG) image losslessly, use <b>jpegtran</b>.
+<b>jpegtran</b> is part of the Independent Jpeg Group's compression
+library package, not part of Netpbm.  The normal Netpbm way to flip a
+JFIF file would be to convert it to PNM, use <b>pamflip</b>, and convert
+back to JFIF.  But since JPEG compression is lossy, the resulting image
+would have less quality than the original.  <b>jpegtran</b>, on the other
+hand, can do this particular transformation directly on the compressed
+data without loss.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>You must supply exactly one of the following options:
+
+<p><b>pamflip</b>'s predecessor (before Netpbm 10.7 - August 2002)
+<b>pnmflip</b> did not have the <b>-xform</b> option and instead
+allowed you to specify any number of the other options, including
+zero.  It applied all the indicated transformations, in the order
+given, just like with <b>pamflip</b>'s <b>-xform</b> option.  (Reason
+for the change: this kind of interpretation of options is inconsistent
+with the rest of Netpbm and most of the Unix world, and thus hard to
+understand and to implement).
+
+<DL>
+<DT><B>-leftright</B>
+<DT><B>-lr</B>
+<DD>Flip left for right.
+
+<DT><B>-topbottom</B>
+<DT><B>-tb</B>
+<DD>Flip top for bottom.
+
+<DT><B>-transpose</B>
+<DT><B>-xy</B>
+<DD>Transpose horizontal for vertical.  I.e. make the pixel at (x,y) be
+at (y,x).
+
+<DT><B>-rotate90</B>
+<DT><B>-r90</B>
+<DT><B>-ccw</B>
+<DD>Rotate counterclockwise 90 degrees.
+
+<DT><B>-rotate180</B>
+<DT><B>-r180</B>
+<DD>Rotate 180 degrees.
+
+<DT><B>-rotate270</B>
+<DT><B>-r270</B>
+<DT><B>-cw</B>
+<DD>Rotate counterclockwise 270 degrees (clockwise 90 degrees)
+
+<DT><B>-null</b> 
+<DD>No change.  (The purpose of this option is the
+convenience of programs that invoke <b>pamflip</b> after computing the
+kind of transformation desired, including none at all).
+
+<P>This option was new in Netpbm 10.13 (December 2002).
+     
+<DT><B>-xform=</b><i>xform1</i><b>,</b><i>xform2</i>...
+
+<DD>Apply all the transforms listed, in order.  The valid values for
+the transforms are as follows and have the same meanings as the
+identically named options above.
+<UL>
+<LI>leftright
+<LI>topbottom
+<LI>transpose
+</UL>
+
+<P>This option was new in Netpbm 10.13 (December 2002).
+
+</DL>
+
+<p>The following options help <b>pamflip</b> use memory efficiently.
+Some flipping operations on very large images can cause <b>pamflip</b>
+to have a very large working set, which means if you don't have enough
+real memory, the program can page thrash, which means it takes a
+ridiculous amount time to run.  If your entire image fits in real
+memory, you don't have a problem.  If you're just flipping top for
+bottom or left for right, you don't have a problem.  Otherwise, pay
+attention.  If you're interested in the details of the thrashing
+problem and how <b>pamflip</b> approaches it, you're invited to read
+a complete explanation in comments in the source code.
+
+<dl>
+<dt><b>-memsize=</b><i>mebibytes</i>
+
+<dd><i>mebibytes</i> is the size in mebibytes (aka megabytes) of
+<em>real</em> memory (not virtual) available for <b>pamflip</b>.
+<b>pamflip</b> does nothing special to allocate real memory or control
+it's allocation -- it gets whatever it gets just by referencing
+virtual memory normally.  This is the maximum amount that
+<b>pamflip</b> can be expected to end up with by doing that.  This is
+just about impossible for you to know, of course, but you can
+estimate.  The total real memory in your system should be a major
+factor in your estimate.
+
+<p>When you specify <b>-memsize</b> and are doing a row for column type
+of transformation, <b>pamflip</b> does the transformation in multiple
+passes, each one with a working set size less than the specified value.
+
+<p>If your estimate is even slightly too large, it's the same as
+infinity.  If you estimate too small, <b>pamflip</b> will use more
+passes than it needs to, and thus will slow down proportional to the
+underestimate.
+
+<p>If you do not specify <b>-memsize</b>, <b>pamflip</b> assumes infinite
+real memory and does the entire transformation in one pass.
+
+<p>This option did not exist before Netpbm 10.7 (August 2002).
+     
+<dt><b>-pagesize=</b><i>bytes</i>
+<dd><i>bytes</i> is the size in bytes of a paging unit -- the amount of
+memory that gets paged in or out as an indivisible unit -- in your system.
+The default is 4KiB.
+
+<p>This option did not exist before Netpbm 10.7 (August 2002).
+
+</dl>
+
+Miscellaneous options:
+<dl>
+<dt><b>-verbose</b>
+<dd>This option causes <b>pamflip</b> to issue messages to Standard Error
+about its progress.
+</dl>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmrotate.html">pnmrotate</A>, 
+<A HREF="pnm.html">pnm</A>,
+<b>jpegtran</b> manual
+<A NAME="lbAG">&nbsp;</A>
+
+<A NAME="history"></A>
+<H2>HISTORY</H2>
+
+<P><b>pamflip</b> replaced <b>pnmflip</b> in Netpbm 10.13 (December 2002).
+<b>pamflip</b> is backward compatible, but also works on PAM images.
+
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<li><A HREF="#lbAB">NAME</A>
+<li><A HREF="#lbAC">SYNOPSIS</A>
+<li><A HREF="#lbAD">DESCRIPTION</A>
+<li><A HREF="#lbAE">OPTIONS</A>
+<li><A HREF="#lbAF">SEE ALSO</A>
+<li><A HREF="#history">HISTORY</A>
+<li><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamfunc.html b/pamfunc.html
new file mode 100644
index 00000000..478863a2
--- /dev/null
+++ b/pamfunc.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamfunc User Manual</TITLE></HEAD>
+
+<BODY>
+<H1>pamfunc</H1>
+Updated: June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamfunc - Apply simple arithmetic functions to a Netpbm image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamfunc</B>
+{
+<b>-multiplier=</b><i>realnum</i> |
+<b>-divisor=</b><i>realnum</i> |
+<b>-adder=</b><i>integer</i> |
+<b>-subtractor=</b><i>integer</i> |
+<b>-min=</b><i>wholenum</i> |
+<b>-max=</b><i>wholenum</i>
+}
+[<I>filespec</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pamfunc</b> reads a Netpbm image as input and produces a Netpbm
+image as output, with the same format, maxval, and dimensions as the
+input.  <b>pamfunc</b> applies a simple transfer function to each
+sample in the input to generate the corresponding sample in the
+output.  The options determine what function.
+
+<P><b>pamarith</b> is the same thing, except only for PNM images, for
+binary functions -- it takes two PNM images as input and applies a
+specified simple arithmetic function (e.g. addition) on pairs of
+samples from the two to produce the single output image.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-multiplier=<i>realnum</i></B>
+
+<DD>
+     <P>This option makes the transfer function that of multiplying by
+     <i>realnum</i>.  <i>realnum</i> must be nonnegative.  If the result
+     is greater than the image maxval, it is clipped to the maxval.
+
+     <P>Where the input is a PGM or PPM image, this has the effect of
+     dimming or brightening it.  For a different kind of brightening,
+     see <a href="ppmbrighten.html"><b>ppmbrighten</b></a> and
+     <a href="ppmflash.html"><b>ppmflash</b></a>
+
+     <P>Also, see <a href="ppmdim.html"><b>ppmdim</b></a>, which does the
+     same thing as <b>pamfunc -multiplier</b> on a PPM image with a
+     multiplier between 0 and 1,
+     except it uses integer arithmetic, so it may be faster.
+
+     <P>And <a href="ppmfade.html"><b>ppmfade</b></a> can generate a whole
+     sequence of images of brightness declining to black or increasing to
+     white, if that's what you want.
+     
+<DT><B>-divisor=<i>realnum</i></B>
+
+<DD>
+     <P>This option makes the transfer function that of dividing by
+     <i>realnum</i>.  <i>realnum</i> must be nonnegative.  If the result
+     is greater than the image maxval, it is clipped to the maxval.
+
+     <P>This is the same function as you would get with <b>-multiplier</b>,
+     specifying the multiplicative inverse of <i>realnum</i>.
+     
+<DT><B>-adder=<i>integer</i></B>
+
+<DD>
+     <P>This option makes the transfer function that of adding
+     <i>wholenum</i>.  If the result is greater than the image maxval,
+     it is clipped to the maxval.  If it is less than zero, it is
+     clipped to zero.
+
+     <p>Note that in mathematics, this entity is called an &quot;addend,&quot;
+     and an &quot;adder&quot; is a snake.  We use &quot;adder&quot; because
+     it makes more sense.
+     
+<DT><B>-subtractor=<i>integer</i></B>
+
+<DD>
+     <P>This option makes the transfer function that of subtracting
+     <i>wholenum</i>.  If the result is greater than the image maxval,
+     it is clipped to the maxval.  If it is less than zero, it is
+     clipped to zero.
+
+     <p>Note that in mathematics, this entity is called a
+     &quot;subtrahend&quot; rather than a &quot;subtractor.&quot;  We
+     use &quot;subtractor&quot; because it makes more sense.
+
+     <P>This is the same function as you would get with <b>-multiplier</b>,
+     specifying the negative of <i>integer</i>.
+     
+<DT><B>-min=<i>wholenum</i></B>
+
+<DD>
+     <P>This option makes the transfer function that of taking the
+     maximum of the argument and <i>wholenum</i>.  I.e the minimum
+     value in the output will be <i>wholenum</i>.
+
+     If <i>wholenum</i> is greater than the maxval, though, every sample
+     in the output will be maxval.
+
+<DT><B>-max=<i>wholenum</i></B>
+
+<DD>
+     <P>This option makes the transfer function that of taking the
+     minimum of the argument and <i>wholenum</i>.  I.e the maximum
+     value in the output will be <i>wholenum</i>.
+
+     If <i>wholenum</i> is greater than the maxval, the function is
+     idempotent -- the output is identical to the input.
+     
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmdim.html">ppmdim</A></B>,
+<B><A HREF="ppmbrighten.html">ppmbrighten</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="pamarith.html">pamarith</A></B>,
+<b><A HREF="pamsummcol.html">pamsummcol</A></b>,
+<b><A HREF="pamsumm.html">pamsumm</A></b>,
+<B><A HREF="ppmfade.html">ppmfade</A></B>,
+
+<B><A HREF="pam.html">pam</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p>This program was added to Netpbm in Release 10.3 (June 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamgauss.html b/pamgauss.html
new file mode 100644
index 00000000..cef20227
--- /dev/null
+++ b/pamgauss.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamgauss User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamgauss</H1>
+Updated: 8 May 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="name">&nbsp;</A>
+<H2>NAME</H2>
+
+pamgauss - create a two dimensional gaussian function as a PAM image
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamgauss</B>
+<i>width</i>
+<i>height</i>
+<b>-sigma=</b><i>number</i>
+[<b>-maxval=</b><i>number</i>]
+[<b>-tupletype=</b><i>string</i>]
+
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+
+<A NAME="examples">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<pre>
+     pamgauss 3 3 -sigma=.5 -tupletype=GRAYSCALE | pamtopnm &gt;gauss.pgm
+     pnmconvol -nooffset gauss.pgm myimage.ppm &gt;blurred.ppm
+</pre>
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamgauss</b> generates a one-plane PAM image whose samples are a
+gaussian function of their distance from the center of the image.  I.e.
+the sample value is highest in the center and goes down, in a bell curve
+shape, as you move away from the center.
+
+<p>The values are scaled so that the area under the surface of the
+two-dimensional Gaussian function is the maxval of the image.
+
+<p>You can use this image, converted to PGM, as a convolution kernel
+with <b>pnmconvol</b> to blur an image.  (This technique is known as
+Gaussian blurring).
+
+<i>width</i> and <i>height</i> are the dimensions of the image that
+<b>pamgauss</b> generates.  Mathematically speaking, they are the domain
+of the two dimensional gaussian function.
+
+<p>The sum of all the samples is equal to the image's maxval (within
+rounding error).  This is true even if you clip the Gaussian function
+by making the image too small.  If you want to be sure you get a whole
+Gaussian function, make sure that you choose a sigma and image
+dimensions so that if you made it any larger, the sample values at the
+edges would be zero.
+
+<p>The output image is PAM.  To turn it into a PGM that you can use
+with <b>pnmconvol</b>, specify <b>-tupletype=GRAYSCALE</b> and pass
+the output through <b>pamtopnm</b>.  You must use the <b>-nooffset</b>
+option on <b>pnmconvol</b> because zero means zero in the PAM that
+<b>pamgauss</b> generates.
+
+<A NAME="options">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<dl>
+<dt><b>-sigma=</b><i>number</i>
+
+<dd>This is the sigma parameter of the Gaussian function (if it were a
+Gaussian probability function, this would be its standard deviation).
+The higher the number, the more spread out the function is.  Normally,
+you want to make this number low enough that the function reaches zero
+value before the edge of your image.
+
+<p><i>number</i> is in units of pixels.
+
+<p>This option is required.  There is no default.
+
+<dt><b>-maxval=</b><i>number</i>
+<dd>This is the maxval for the output image.  It defaults to 255.
+
+<dt><b>-tupletype=</b><i>string</i>
+<dd>
+This is the value of the "tuple_type" attribute of the created PAM image.
+It can be any string up to 255 characters.  If you don't specify this,
+<b>pamgauss</b> generates a PAM with unspecified tuple type.
+
+</dl>
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmconvol.html">pnmconvol</A></B>,
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+<B><A HREF="pgmkernel.html">pgmkernel</A></B>,
+<B><A HREF="pamseq.html">pamseq</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p><b>pamgauss</b> was new in Netpbm 10.23 (July 2004).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#examples">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamgradient.html b/pamgradient.html
new file mode 100644
index 00000000..b6369536
--- /dev/null
+++ b/pamgradient.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+  <TITLE>Pamgradient User Manual</TITLE>
+</HEAD>
+<BODY>
+
+<H1>pamgradient</H1>Updated: 21 October 2005
+<BR>
+<A href="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+pamgradient - create a four-corner gradient PAM or PNM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamgradient</B>
+[<B>-maxval=</B><I>maxval</I>]
+<I>color-tl</i> <i>color-tr</i> <i>color-bl</i> <i>color-br</i>
+<br>
+<i>width</i> <i>height</I>
+
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<P>This program is part of <A href="index.html">Netpbm</A>.
+
+<P><B>pamgradient</B> creates an image of the specified
+dimensions <I>width</I> by <I>height</I> which contains a smooth,
+two-dimensional gradient between the specified colors of the four
+corners (from top left to bottom right).
+
+<P>Specify the colors as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+
+<P>If all four colors are gray values, <B>pamgradient</B> creates a
+grayscale image (PAM tuple type GRAYSCALE).  Otherwise, it creates
+a color image (PAM tuple type RGB).
+
+<H2 id="options">OPTIONS</H2>
+
+<DL compact>
+  <DT><B>-maxval=</B><I>maxval</I>
+
+  <DD>maxval of the generated image.  (See <a href="pam.html">PAM</a> and
+  <a href="pnm.html">PNM</a> specifications).
+</DL>
+
+<H2 id="see_also">SEE ALSO</H2>
+
+<A href="ppmmake.html"><b>ppmmake</b></A>,
+<A href="ppmrainbow.html"><b>ppmrainbow</b></A>,
+<A href="pgmramp.html"><b>pgmramp</b></A>,
+<A href="ppmpat.html"><b>ppmpat</b></A>,
+<A href="pam.html">pam</A>,
+<A href="pnm.html">pnm</A>
+
+<H2 id="note">NOTE</H2>
+
+<P>Only the top left corner of the generated image has exactly
+the specified color.  The color of the top right corner is a bit
+shifted to the left, the bottom left corner a bit up, and the
+bottom right corner left and up. This ensures nice transitions
+when combining adjacent (very narrow) gradients, and doesn't play
+a role when the gradient butts against a solid surface.
+
+<P>This effect is created by the integer arithmetic used for the
+interpolation of the color values, and since it doesn't make a
+difference for all practical purposes I might as well sell it as a
+feature.
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamgradient</b> was new in Netpbm 10.31 (December 2005).
+
+<H2 id="author">AUTHOR</H2>
+
+<P>pamgradient was written by Daniel Haude in October 2005.
+<HR>
+
+<H2 id="index">Table Of Contents</H2>
+
+<UL>
+  <LI><A href="#name">NAME</A>
+
+  <LI><A href="#synopsis">SYNOPSIS</A>
+
+  <LI><A href="#description">DESCRIPTION</A>
+
+  <LI><A href="#options">OPTIONS</A>
+
+  <LI><A href="#see_also">SEE ALSO</A>
+
+  <LI><A href="#note">NOTE</A>
+
+  <LI><A href="#history">HISTORY</A>
+
+  <LI><A href="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamlookup.html b/pamlookup.html
new file mode 100644
index 00000000..fb938a88
--- /dev/null
+++ b/pamlookup.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pamlookup User Manual</title></HEAD>
+<BODY>
+<H1>pamlookup</H1>
+Updated: 10 November 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamlookup - map an image to a new image by using it as indices into a table
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamlookup</B>
+<B>-lookupfile=</B><i>lookupfile</i>
+<B>-missingcolor=</B><i>color</i>
+[<B>-fit</B>]
+<I>indexfile</I>
+
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamlookup</b> takes a two dimensional array of indices and a lookup
+table as input.  For each position in the index array, it looks up the index
+in the lookup table and places the result of the lookup in the output image.
+The output thus has the same width and height as the index image, and tuple
+types determined by the lookup table.
+
+<p>An index is either a whole number or an ordered pair of whole
+numbers.  If the index image has a depth of one, each index in it is a
+whole number: the value of the one sample.  If the index image has a
+depth greater than one, each index in it is an ordered pair of the first
+and second samples in the relevant tuple.
+
+<p>The lookup table is a PAM or PNM image.  If the index image
+contains whole number indices, the lookup image is a single row and
+the index is a column number.  The lookup result is the value of the
+tuple or pixel at the indicated column in the one row in the lookup
+table.  If the index image contains ordered pair indices, the first
+element of the ordered pair is a row number and the second element of
+the ordered pair is a column number.  The lookup result is the value
+of the tuple or pixel at the indicated row and column in the lookup
+table.
+
+<p>For example:  Consider an index image consisting of a 3x2x1 PAM
+as follows:
+
+<table summary="3x2x1 index image">
+<?makeman l l l. ?>
+<tr> <td>0</td> <td>1</td> <td>0</td> </tr>
+<tr> <td>2</td> <td>2</td> <td>2</td> </tr>
+</table>
+
+and a lookup table consisting of a 3x1 PPM image as follows:
+
+<table summary="3x1 lookup table">
+<?makeman l l l. ?>
+<tr> <td>red</td> <td>yellow</td> <td>beige</td> </tr>
+</table>
+
+The lookup table above says Index 0 corresponds to the color red,
+Index 1 corresponds to yellow, and Index 2 corresponds to beige.  The output
+of <b>pamlookup</b> is the following PPM image:
+
+<table summary="output image">
+<?makeman l l l. ?>
+<tr> <td>red</td> <td>yellow</td> <td>red</td> </tr>
+<tr> <td>beige</td> <td>beige</td> <td>beige</td> </tr>
+</table>
+
+<p>Now let's look at an example of the more complex case where the
+indices are ordered pairs of whole numbers instead of whole numbers.
+Our index image will be this 3x2x2 PAM image:
+
+<table summary="3x2x2 index image">
+<?makeman l l l. ?>
+<tr> <td>(0,0)</td> <td>(0,1)</td> <td>(0,0)</td> </tr>
+<tr> <td>(1,1)</td> <td>(1,0)</td> <td>(0,0)</td> </tr>
+</table>
+
+Our lookup table for the example will be this two dimensional PPM:
+
+<table summary="2x2 lookup table">
+<?makeman l l l. ?>
+<tr> <td>red</td>   <td>yellow</td> </tr>
+<tr> <td>green</td> <td>black</td> </tr>
+</table>
+
+This lookup table says Index (0,0) corresponds to the color red,
+Index (0,1) corresponds to yellow, Index (1,0) corresponds to green,
+and Index (1,1) corresponds to black.  The output of <b>pamlookup</b>
+is the following PPM image:
+
+<table summary="output image">
+<?makeman l l l. ?>
+<tr> <td>red</td>   <td>yellow</td> <td>red</td> </tr>
+<tr> <td>black</td> <td>green</td>  <td>red</td> </tr>
+</table>
+
+<p>If an index specifies a row or column that exceeds the dimensions of
+the lookup table image, <b>pamlookup</b> uses the value from the top left
+corner of the lookup image, or the value you specify with the
+<b>-missingcolor</b> option.
+
+<p>The <i>indexfile</i> argument identifies the file containing the index
+PAM or PNM image.  <b>-</b> means Standard Input.  The mandatory
+<b>-lookupfile</b> option identifies the file containing the lookup table
+image.  Again, <b>-</b> means Standard Input.  It won't work if both the
+index image file and lookup table file are Standard Input.  The output image
+goes to Standard Output.
+
+<p>You can use <b>ppmmake</b> and <b>pnmcat</b> to create a lookup table file.
+
+<p>If you want to use two separate 1-plane images as indices (so that your
+output reflects the combination of both inputs), use <b>pamstack</b> to combine
+the two into one two-plane image (and use a 2-dimensional lookup table image).
+
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-lookupfile=</B><i>lookupfile</i>
+
+<DD><i>lookupfile</i> names the file that contains the PAM or PNM
+image that is the lookup table.  This option is mandatory.
+
+<DT><B>-missingcolor=</B><i>color</i>
+
+<DD>This option is meaningful only if the lookup image (and therefore the 
+output) is a PNM image.  <i>color</i> specifies the color that 
+is to go in the output wherever the index from the input is not present
+in the lookup table (not present means the index exceeds the dimensions
+of the lookup image -- e.g. index is 100 but the lookup image is a 50 x 1
+PPM).
+
+<p>If you don't specify this option of <b>-fit</b>, <b>pamlookup</b>
+uses the value from the top left corner of the lookup image whenever
+an index exceeds the dimensions of the lookup image.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<P>Another way to deal with a too-small lookup image is to use the 
+<b>-fit</b> option.
+
+<DT><B>-fit</B>
+
+<DD>This option says to shrink or expand the lookup image as necessary
+to fit the indices present in the index image, per the index image's
+maxval.  For example, if your index image has a single plane and a
+maxval of 255 and your lookup image is 1 row of 10 columns,
+<b>pamlookup</b> stretches your lookup image to 255 columns before
+doing the lookups.  <b>pamlookup</b> does the stretching (or
+shrinking) with the <a href="pamscale.html"><b>pamscale</b></a>
+program.
+
+<p>When you use <b>-fit</b>, <b>pamlookup</b> never fails or warns you
+due to invalid lookup image dimensions, and the <b>-missingcolor</b>
+option has no effect.
+
+</DL>
+
+<A NAME="examples">&nbsp;</a>
+<H2>EXAMPLES</H2>
+
+<h3>Example: rainfall map</h3>
+
+<p>Say you have a set of rainfall data in a single plane PAM image.
+The rows and columns of the PAM indicate lattitude and longitude.  The
+sample values are the annual rainfall in (whole) centimeters.  The highest
+rainfall value in the image is 199 centimeters.  The image is in the file
+rainfall.pam.
+
+<p>You want to produce a PPM rainfall map with green for the wettest places,
+red for the driest, and other colors in between.
+
+<p>First, compose a lookup table image, probably with a graphical editor
+and the image blown way up so you can work with individual pixels.  The
+image must have a single row and 200 columns.  Make the leftmost pixel 
+red and the rightmost pixel green and choose appropriate colors in between.
+Call it colorkey.ppm.
+
+<pre>
+<kbd>
+    pamlookup rainfall.ppm -lookupfile=colorkey.ppm &gt;rainfallmap.ppm
+</kbd>
+</pre>
+
+<p>Now lets say you're too lazy to type in 200 color values and nobody really
+cares about the places that have more than 99 centimeters of annual 
+rainfall.  In that case, just make colorkey.ppm 100 columns wide and do
+this:
+
+<pre>
+<kbd>
+    pamlookup rainfall.ppm -lookupfile=colorkey.ppm -missingcolor=black \
+       &gt;rainfallmap.ppm
+</kbd>
+</pre>
+
+Now if there are areas that get more than 100 centimeters of rainfall, they
+will just show up black in the output.
+
+<h3>Example: graphical diff</h3>
+<P>
+Say you want to compare two PBM (black and white) images visually.  Each
+consists of black foreground pixels on a white background.  You want to
+create an image that contains background where both images contain background
+and foreground where both images contain foreground.  But where Image 1
+has a foreground pixel and Image 2 does not, you want red in the output;
+where Image 2 has a foreground pixel and Image 1 does not, you want green.
+
+<p>First, we create a single image that contains the information from both
+input PBMs:
+
+<pre>
+<kbd>
+    pamstack image1.pbm image2.pbm &gt;bothimages.pam
+</kbd>
+</pre>
+
+Note that this image has 1 of 4 possible tuple values at each location:
+(0,0), (0,1), (1,0), or (1,1).
+
+<p>
+Now, we create a lookup table that we can index with those 4 values:
+
+<pre>
+<kbd>
+    ppmmake white 1 1 &gt;white.ppm
+    ppmmake black 1 1 &gt;black.ppm
+    ppmmake red   1 1 &gt;red.ppm
+    ppmmake green 1 1 &gt;green.ppm
+    pnmcat -leftright black.ppm red.ppm   &gt;blackred.ppm
+    pnmcat -leftright green.ppm white.ppm &gt;greenwhite.ppm
+    pnmcat -topbottom blackred.ppm greenwhite.ppm &gt;lookup.ppm
+</kbd>
+</pre>
+
+<p>Finally, we look up the indices from our index in our lookup table and
+produce the output:
+
+<pre>
+<kbd>
+    pamlookup bothimages.ppm -lookupfile=lookup.ppm &gt;imagediff.ppm
+</kbd>
+</pre>
+
+     
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmremap.html">pnmremap</A>,
+<A HREF="ppmmake.html">ppmmake</A>,
+<A HREF="pnmcat.html">pnmcat</A>,
+<A HREF="pamstack.html">pamstack</A>,
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pam.html">pam</A>
+
+
+<A NAME="history"></A>
+<H2>HISTORY</h2>
+
+<p><b>pamlookup</b> was new in Netpbm 10.13 (December 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL COMPACT>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
diff --git a/pammasksharpen.html b/pammasksharpen.html
new file mode 100644
index 00000000..8fc14e3f
--- /dev/null
+++ b/pammasksharpen.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pammasksharpen User Manual</TITLE></HEAD>
+<BODY>
+<H1>pammasksharpen</H1>
+Updated: 14 June 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pammasksharpen - Sharpen an image via an unsharp mask
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pammasksharpen</B>
+[<b>-sharpness=</b><i>realnum</i>
+[<b>-threshold=</b><i>realnum</i>
+<I>maskfile</I>
+[<I>inputfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+
+<H2 id="examples">EXAMPLES</H2>
+
+<pre>
+   pamgauss 5 5 -sigma=.7 -tupletype=GRAYSCALE | pamtopnm >gauss.pgm
+   pnmconvol gauss.pgm myimage.ppm >blurred.ppm
+   pammasksharpen blurred.ppm myimage.ppm >sharpened.ppm
+</pre>
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pammasksharpen</b> reads a Netpbm image as input and produces a
+sharpened version of it, in the same format, as output.  It does this
+via an unsharp mask, which you supply as another Netpbm image.
+
+<p>An unsharp mask is generally a blurred version of the original
+image.  The sharpening computation is this: Calculate the
+&quot;edgeness&quot; of a sample in the input image as the signed
+difference between the sample value and the corresponding sample in
+the unsharp mask.  This tells how different the pixel is from its
+neighbors.  Add a multiple of the edgeness to the original sample to
+get the corresponding output sample.  Clip as necessary.  This causes
+pixels that are brighter than their neighbors to get even brighter,
+while pixels that are dimmer than their neighbors get even dimmer.
+This makes edges -- places where pixel values change quickly in space
+-- stand out more.
+
+<p>The unsharp mask must be the same dimensions and have the same maxval
+as the input image.
+
+<h3>The Unsharp Mask</h3>
+
+<p>You usually create the unsharp mask as a gaussian blur of the
+original image, which you can do using <b>pamgauss</b> and
+<b>pnmconvol</b> as in the example above.  The convolution kernel you
+use with <b>pnmconvol</b> is normally a square with side length an odd
+number of pixels.
+
+<p>When you create an unsharp mask like this, you will have to choose
+the side length of the convolution kernel.  That length implements the
+parameter of unsharp mask sharpening usually known as
+&quot;radius.&quot;  In particular, a radius of R pixels corresponds to a 
+convolution kernel 2R+1 pixels on a side.
+
+<p>Radius is a very important parameter; you can ruin an image with a
+radius too large.  You can safely use the highest radius with an
+inanimate object, while a human face demands the least.  Landscapes
+fall in between.  But it really depends on the size of the details.
+Fine detail needs a smaller radius, or else you may obliterate tiny
+detail of the same size as the Radius width.  A large image often has
+larger detail (more pixels involved), so can use a larger radius.
+Radius and sharpness (see <b>-sharpness</b> option) interact: reducing
+one allows you to increase the other.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-sharpness=</B><I>realnum</I>
+
+<DD>This specifies the magnitude of the sharpening.  It is the multiple
+of edgeness that gets added to each sample as described above.
+
+<p><i>realnum</i> is a nonnegative real decimal number.  Zero means
+no sharpening at all.
+
+<p>This parameter is known as &quot;amount&quot; in ImageMagick.
+
+<p>The default is 1.0.
+
+<p>This option was new in Netpbm 10.30 (October 2005).  Before that,
+the sharpness was always 1.0.
+
+<DT><B>-threshold=</B><I>realnum</I>
+
+<dd>This minimum amount of edgeness that will be considered edgeness
+at all.  i.e. if the magnitude of the edgeness is less than this,
+<b>pammasksharpen</b> will treat the edgeness as zero.
+
+<p>A nonzero value may be necessary here to avoid speckling in smooth
+areas.
+
+<p>This is a fraction of the maxval (so it is in the range [0, 1.0]).
+
+<p>The default is 0.
+
+<p>This option was new in Netpbm 10.34 (June 2006).
+
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pnmconvol.html">pnmconvol</A>,
+<A HREF="pamedge.html">pamedge</A>,
+<A HREF="pamsharpness.html">pamsharpness</A>,
+<A HREF="pamsharpmap.html">pamsharpmap</A>,
+<A HREF="pamarith.html">pamarith</A>,
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pam.html">pam</A>
+
+
+<H2 id="history">HISTORY</h2>
+
+<p><b>pammasksharpen</b> was new in Netpbm 10.23 (July 2004).
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pammixinterlace.html b/pammixinterlace.html
new file mode 100644
index 00000000..a431be2c
--- /dev/null
+++ b/pammixinterlace.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pammixinterlace User Manual</TITLE></HEAD>
+<BODY>
+<H1>pammixinterlace</H1>
+Updated: 02 July 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pammixinterlace - mix adjacent lines to merge interlaced images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pammixinterlace</B>
+
+[<I>infile</I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pammixinterlace</B> is meant to operate on an image which is the
+interlacing of two images, where raster rows 0, 2, 4, etc. are from
+one image and rows 1, 3, 5, etc. are from another.  (See below for
+why you might expect to encounter such an image).
+
+<p><b>pammixinterlace</b> makes each row of the output a mixture
+of the corresponding row of the input and its two neighbors.  It uses
+half of the main row and a quarter each of the two neighbor rows.
+
+<P>This can be useful if the image is a video capture from an
+interlaced video source.  In that case, each row shows the subject
+1/60 second before or after the two rows that surround it.  If the
+subject is moving, this can detract from the quality of the image.
+
+<p>In video data streams, you often find each frame contains only half
+the rows of the image -- the odd half or the even half.  The displayer
+of the stream displays the rows in their proper positions on a CRT as
+they come in.  When you display the rows in this order, the CRT has
+less flicker because a particular area of the screen gets refreshed
+twice as often.  In the process of capturing such a stream, computers
+often generate the interlaced image of the type that
+<b>pammixinterlace</b> works with.  But this interlaced image, when
+displayed on a CRT, does not look the same as if a displayer were
+rendering the stream directly on a CRT as it arrived, because of the
+timing of when the various pixels get drawn and subsequently fade.
+That's why you need something like <b>pammixinterlace</b>.
+
+<p>You may prefer the effect of simply extracting one of two images.
+You can do that with <b>pamdeinterlace</b>.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamdeinterlace.html">pamdeinterlace</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+<B><A HREF="pnm.html">pnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamoil.html b/pamoil.html
new file mode 100644
index 00000000..8bae9fa1
--- /dev/null
+++ b/pamoil.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamoil User Manual</TITLE>
+</HEAD><BODY>
+<H1>pamoil</H1>
+Updated: 25 June 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamoil - turn a PAM image into an oil painting
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamoil</B>
+
+[<B>-n</B> <I>N</I>]
+
+[<I>pamfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamoil</b> reads a Netpbm image as input and does an &quot;oil
+transfer&quot;, and writes the same type of Netpbm image as output.
+
+<P>The oil transfer is described in &quot;Beyond Photography&quot; by
+Holzmann, chapter 4, photo 7.  It's a sort of localized smearing.
+
+<P>The smearing works like this: First, assume a grayscale image.  For
+each pixel in the image, <B>pamoil</B> looks at a square neighborhood
+around it.  <B>pamoil</B> determines what is the most common pixel
+intensity in the neighborhood, and puts a pixel of that intensity into
+the output in the same position as the input pixel.
+
+<P>For color images, or any arbitrary multi-channel image,
+<B>pamoil</B> computes each channel (e.g. red, green, and blue)
+separately the same way as the grayscale case above.
+
+<P>At the edges of the image, where the regular neighborhood would run
+off the edge of the image, <B>pamoil</B> uses a clipped neighborhood.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-n</B> <I>size</I>
+
+<DD>This is the size of the neighborhood used in the smearing.  The
+neighborhood is this many pixels in all four directions.
+
+<P>The default is 3.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgmbentley.html">pgmbentley</A></B>,
+
+<B><A HREF="ppmrelief.html">ppmrelief</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<P>
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>This program is based on pgmoil Copyright (C) 1990 by Wilson Bent
+(<A HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>)
+
+<P>Modified to ppm by Chris Sheppard, June 25, 2001
+
+<P>Modified to pnm, using pam functions, by Bryan Henderson June 28,
+2001.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamperspective.html b/pamperspective.html
new file mode 100644
index 00000000..e3964ec4
--- /dev/null
+++ b/pamperspective.html
@@ -0,0 +1,497 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head><title>Pamperspective User Manual</title></head>
+
+<body>
+
+<h1>pamperspective</h1>
+Updated: 2 September 2004
+<br>
+<a href="#index">Table Of Contents</a>
+
+<a name="name"></a>
+<h2>NAME</h2>
+
+pamperspective - a reverse scanline renderer for Netpbm images
+
+<a name="synopsis"></a>
+<h2>SYNOPSIS</h2>
+
+<pre>
+<b>pamperspective</b> 
+    [<b>--bottom_margin=</b><i>num</i>]
+    [<b>--detail=</b><i>num</i>]
+    [<b>--frame_include=</b><i>bool</i>]
+    [<b>--height=</b><i>num</i>]
+    [<b>--include=[</b><i>x1</i>,<i>y1</i>;<i>x2</i>,<i>y2</i>; ...]]
+    [<b>--input_system=</b><i>spec</i>]
+    [<b>--input_unit=</b><i>spec</i>]
+    [<b>--interpolation=</b><i>spec</i>]
+    [<b>--left_margin=</b><i>num</i>]
+    [<b>--margin=</b><i>num</i>]
+    [<b>--output_system=</b><i>spec</i>]
+    [<b>--proportion=</b><i>spec</i>]
+    [<b>--ratio=</b><i>num</i>]
+    [<b>--right_margin=</b><i>num</i>]
+    [<b>--top_margin=</b><i>num</i>]
+    [<b>--width=</b><i>num</i>]
+    {
+      {
+        <i>upper_left_x</i> <i>upper_left_y</i> <i>upper_right_x</i> <i>upper_right_y</i>
+        <i>lower_left_x</i> <i>lower_left_y</i> <i>lower_right_x</i> <i>lower_right_y</i>
+      }
+      |
+      {
+        {<b>--upper_left_x</b>|<b>--ulx</b>}<b>=</b><i>upper_left_x</i>
+        {<b>--upper_left_y</b>|<b>--uly</b>}<b>=</b><i>upper_left_y</i>
+        {<b>--upper_right_x</b>|<b>--urx</b>}<b>=</b><i>upper_right_x</i>
+        {<b>--upper_right_y</b>|<b>--ury</b>}<b>=</b><i>upper_right_y</i>
+        {<b>--lower_left_x</b>|<b>--llx</b>}<b>=</b><i>lower_left_x</i>
+        {<b>--lower_left_y</b>|<b>--lly</b>}<b>=</b><i>lower_left_y</i>
+        {<b>--lower_right_x</b>|<b>--lrx</b>}<b>=</b><i>lower_right_x</i>
+        {<b>--lower_right_y</b>|<b>--lry</b>}<b>=</b><i>lower_right_y</i>
+      }
+   }
+   [<i>infile</i>]
+
+</pre>
+
+<?makeman .SH OPTION USAGE ?>
+<p>Minimum unique abbreviation of option is acceptable. (But note 
+that shortest unique prefixes might be longer in future versions of 
+the program.) You may use single hyphens instead of double hyphen to 
+denote options. You may use white space in place of the equals sign 
+to separate an option name from its value. All options starting with 
+hyphens may be given in any order. 
+
+
+<a name="description"></a>
+<h2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pamperspective</b> reads a Netpbm image as input and produces a
+Netpbm image of the same format as output.
+
+<p>The values <i>upper_left_x</i> ... <i>lower_right_y</i>, that are
+required on the command line, specify a quadrilateral in the input
+image.  <b>pamperspective</b> interprets the input image as a
+perspective projection of a three dimensional scene, for example a
+photograph.  <b>pamperspective</b> assumes the specified quadrilateral
+represents a parallelogram in that scene.  The output image consists
+of this parallelogram, sheared to a rectangle.  In this way
+<b>pamperspective</b> undoes the effect of a raytracer or scanline
+renderer.
+
+<p>The input is from <i>infile</i>, or from Standard Input, if
+<i>infile</i> is not specified.  The output is to Standard Output.
+
+
+<a name="options"></a>
+<h2>OPTIONS</h2>
+
+<p>For options of the form <b>--name=</b><i>num</i>, You can specify
+the value <i>num</i> in any of the traditional ways.  Additionally,
+you can specify it as <i>num1</i>/<i>num2</i>, where <i>num1</i> and
+<i>num2</i> are specified traditionally.  This is useful for
+specifying a width/height ratio of 4/3, without having to write
+infinitely many digits.  Where <i>num</i> is supposed to be a natural
+number, <b>pamperspective</b> does not allow this format.
+
+<h3>Quadrilateral specification options</h3>
+
+<dl>
+  <dt><b>--upper_left_x=</b><i>num</i></dt>
+  <dt><b>--ulx=</b><i>num</i></dt>
+
+  <dd>This specifies the horizontal coordinate of the upper left
+  vertex of the quadrilateral.  The meaning of 'upper left' is
+  relative to the output image.  The interpretation of <i>num</i>
+  depends on the values for <b>--input_system</b> and
+  <b>--input_unit</b>.</dd>
+
+  <dt><b>--upper_left_y=</b><i>num</i></dt>
+  <dt><b>--uly=</b><i>num</i></dt>
+
+  <dd>This specifies the vertical coordinate of the upper left vertex
+  of the quadrilateral.  The meaning of 'upper left' is relative to
+  the output image.  The interpretation of <i>num</i> depends on the
+  values for <b>--input_system</b> and <b>--input_unit</b>.</dd>
+
+  <dt><b>--upper_right_x=</b><i>num</i></dt>
+  <dt><b>--urx=</b><i>num</i></dt>
+
+  <dd>This specifies the horizontal coordinate of the upper right
+  vertex of the quadrilateral.  The meaning of 'upper right' is
+  relative to the output image.  The interpretation of <i>num</i>
+  depends on the values for <b>--input_system</b> and
+  <b>--input_unit</b>.</dd>
+
+  <dt><b>--upper_right_y=</b><i>num</i></dt>
+  <dt><b>--ury=</b><i>num</i></dt>
+
+  <dd>This specifies the vertical coordinate of the upper right vertex
+  of the quadrilateral.  The meaning of 'upper right' is relative to
+  the output image.  The interpretation of <i>num</i> depends on the
+  values for <b>--input_system</b> and <b>--input_unit</b>.</dd>
+
+  <dt><b>--lower_left_x=</b><i>num</i></dt>
+  <dt><b>--llx=</b><i>num</i></dt>
+
+  <dd>This specifies the horizontal coordinate of the lower left
+  vertex of the quadrilateral.  The meaning of 'lower left' is
+  relative to the output image.  The interpretation of <i>num</i>
+  depends on the values for <b>--input_system</b> and
+  <b>--input_unit</b>.</dd>
+
+  <dt><b>--lower_left_y=</b><i>num</i></dt>
+  <dt><b>--lly=</b><i>num</i></dt>
+
+  <dd>This specifies the vertical coordinate of the lower left vertex
+  of the quadrilateral.  The meaning of 'lower left' is relative to
+  the output image.  The interpretation of <i>num</i> depends on the
+  values for <b>--input_system</b> and <b>--input_unit</b>.</dd>
+
+  <dt><b>--lower_right_x=</b><i>num</i></dt>
+  <dt><b>--lrx=</b><i>num</i></dt>
+
+  <dd>This specifies the horizontal coordinate of the lower right
+  vertex of the quadrilateral.  The meaning of 'lower right' is
+  relative to the output image.  The interpretation of <i>num</i>
+  depends on the values for <b>--input_system</b> and
+  <b>--input_unit</b>.</dd>
+
+  <dt><b>--lower_right_y=</b><i>num</i></dt>
+  <dt><b>--lry=</b><i>num</i></dt>
+
+  <dd>This specifies the vertical coordinate of the lower right vertex
+  of the quadrilateral.  The meaning of 'lower right' is relative to
+  the output image.  The interpretation of <i>num</i> depends on the
+  values for <b>--input_system</b> and <b>--input_unit</b>.</dd>
+
+  <dt><b>--input_system=</b><i>system</i></dt>
+  <dt><b>--input_unit=</b><i>unit</i></dt>
+
+  <dd>The input image consists of pixels, which are, from the point of
+  view of a scanline renderer, solid squares.  These options specify
+  how the coordinates are interpreted:
+
+  <dl>
+    <dt><i>system</i>=<b>lattice</b>, <i>unit</i>=<b>image</b></dt>
+
+    <dd>(0,0) refers to the upper left corner of the upper left pixel
+    and (1,1) refers to the lower right corner of the lower right
+    pixel.</dd>
+
+    <dt><i>system</i>=<b>lattice</b>, <i>unit</i>=<b>pixel</b></dt>
+
+    <dd>(0,0) refers to the upper left corner of the upper left pixel
+    and (<i>width</i>,<i>height</i>) refers to the lower right corner
+    of the lower right pixel.  Here <i>width</i> and <i>height</i> are
+    the width and height of the input image.</dd>
+
+    <dt><i>system</i>=<b>pixel</b>, <i>unit</i>=<b>image</b></dt>
+
+    <dd>(0,0) refers to the centre of the upper left pixel and (1,1)
+    refers to the centre of the lower right pixel.</dd>
+
+    <dt><i>system</i>=<b>pixel</b>, <i>unit</i>=<b>pixel</b></dt>
+
+    <dd>(0,0) refers to the centre of the upper left pixel and
+    (<i>width</i>-1,<i>height</i>-1) refers to the centre of the lower
+    right pixel.  Here <i>width</i> and <i>height</i> are the width
+    and height of the input image.</dd>
+
+    </dl>
+
+  The defaults are <b>--input_system</b>=<b>lattice</b> and
+  <b>--input_unit</b>=<b>pixel</b>.  Point-and-click front ends should
+  use <b>--input_system</b>=<b>pixel</b>.</dd>
+
+  </dl>
+
+<h3>Frame options</h3>
+
+By default <b>pamperspective</b> outputs exactly the above
+parallelogram, sheared to a rectangle.  With the following options, it
+is possible to make <b>pamperspective</b> output a larger or smaller
+portion, which we call the &quot;visible part.&quot; We refer to the
+default rectangle as the &quot;frame.&quot; The visible part is always
+a rectangle the axes of which are parallel to those of the frame.
+
+<p>The frame options are additive.  All the parts of the image
+specified by either margin options, <b>--include_frame</b>, or
+<b>--include</b> (or their defaults) are in the visible part.  The
+visible part is the smallest possible rectangle that contains the
+parts specified those three ways.
+
+<p>The visible part must have nonzero size.  That means if you specify
+<b>--frame-include=no</b> (overriding the default), you'll need to
+specify other frame options in order to have something in the visible
+part.
+
+<dl>
+  <dt>[<b>--margin=</b><i>num</i>]</dt>
+
+  <dd>This specifies an area surrounding the frame that is to be
+  included in the visible part.  The units of <i>num</i> are the width
+  of the frame for the horizontal extensions and the height of the
+  frame for vertical extensions.
+
+  <p>For example, <b>--margin=1</b> makes the visible part 9 times as large,
+  because it makes the visible part extend one frame's worth to the left
+  of the frame, one frame's worth to the right, one frame's worth above
+  the frame, and one frame's worth below the frame, for a total of
+  3 frames' worth in both dimensions.
+
+  <p>A negative value has an effect only if you specify
+  <b>--frame_include=no</b>.  The default is no margin.
+
+  <p>The individual margin options below override this common margin
+  setting.
+  </dd>
+
+  <dt>[<b>--top_margin=</b><i>num</i>]</dt>
+  <dt>[<b>--left_margin=</b><i>num</i>]</dt>
+  <dt>[<b>--right_margin=</b><i>num</i>]</dt>
+  <dt>[<b>--bottom_margin=</b><i>num</i>]</dt>
+
+  <dd>These are like <b>--margin</b>, but they specify only one of 
+  the 4 sides.  The default value for each is the value (or default) of
+  <b>--margin</b>.
+  </dd>
+
+  <dt>[<b>--frame_include=</b><i>bool</i>]</dt>
+
+  <dd>Valid values for <i>bool</i> are:
+
+  <dl>
+    <dt><b>yes</b></dt>
+    <dt><b>true</b></dt>
+    <dt><b>on</b></dt>
+
+    <dd>The frame itself is in the visible part.</dd>
+
+    <dt><b>no</b></dt>
+    <dt><b>false</b></dt>
+    <dt><b>off</b></dt>
+
+    <dd>The frame itself is not necessarily in the visible part
+    (but it could be if other options cause it to be).
+    </dd>
+
+    </dl>
+
+  The default value is <b>yes</b></dd>
+
+  <dt><b>--include=[</b><i>x1</i>,<i>y1</i>;<i>x2</i>,<i>y2</i>; ...]
+
+  <dd>The visible part is made large enough such that every point
+  (<i>x1</i>,<i>y1</i>), (<i>x2</i>,<i>y2</i>), of the <em>input</em> image is 
+  visible.  The meaning of <i>x</i> and <i>y</i> is determined by
+  <b>--input_system</b> and <b>--input_unit</b>.  You can specify any
+  number of semicolon-delimited points, including zero.
+
+  <p>If you're supplying these options via a Unix command shell, be
+  sure to use proper quoting, because semicolon (<b>;</b>) is usually
+  a shell control character.
+
+  </dl>
+
+  <p>The frame options were new in Netpbm 10.25 (October 2004).
+
+<h3>Output size options</h3>
+
+<dl>
+  <dt><b>--width=</b><i>width</i></dt>
+  <dt><b>--height=</b><i>height</i></dt>
+
+  <dd>These specify the size of the output image in horizontal and
+  vertical direction.  The values are numbers of pixels, so only
+  natural numbers are valid.  These values override the default
+  means to determine the output size.</dd>
+
+  <dt><b>--detail=</b><i>num</i></dt>
+
+  <dd>If you do not specify <b>--width</b>, <b>pamperspective</b>
+  determines the width of the output image such that moving <i>num</i>
+  output pixels horizontally does not change the corresponding pixel
+  coordinates of the input image by more than 1.
+  <b>pamperspective</b> determines the height of the output image
+  analogously.  The default value is 1.</dd>
+
+  <dt><b>--proportion=</b><i>prop</i></dt>
+  <dt><b>--ratio=</b><i>ratio</i></dt>
+
+  <dd>Valid values for <i>prop</i> are:
+
+  <dl>
+    <dt><b>free</b></dt>
+
+    <dd>In this case <b>--ratio</b> does not have any effect.</dd>
+
+    <dt><b>fixed</b></dt><dd>After the width and height are determined
+    according to <b>--detail</b>, one of both will be increased, in
+    order to obtain width/height=<i>ratio</i>.</dd>
+
+    </dl>
+
+  The defaults are <b>--proportion</b>=<b>free</b> and
+  <b>--ratio</b>=1.</dd>
+
+  </dl>
+
+<h3>Output options</h3>
+
+<dl>
+  <dt><b>--output_system=</b><i>spec</i></dt>
+
+  <dd>The output image consists of pixels, which are, from the point
+  of view of a scanline renderer, solid squares.  This option
+  specifies how the four vertices of the quadrilateral correspond to
+  the pixels of the output image.  Valid values for <i>spec</i> are:
+
+  <dl>
+    <dt><b>lattice</b></dt>
+
+    <dd>The upper left vertex corresponds to the upper left corner of
+    the upper left pixel and The lower right vertex corresponds to the
+    lower right corner of the lower right
+    pixel.</dd>
+
+    <dt><b>pixel</b></dt>
+
+    <dd>The upper left vertex corresponds to the centre of the upper
+    left pixel and The lower right vertex corresponds to the centre of
+    the lower right pixel.</dd>
+
+    </dl>
+
+  The default value is <b>lattice</b>.  Point-and-click front ends
+  should use <b>pixel</b>.</dd>
+
+  <dt><b>--interpolation=</b><i>spec</i></dt>
+
+  <dd>Usually (centres of) output pixels do not exactly correspond to
+  (centres of) input pixels.  This option determines how the program
+  will choose the new pixels.  Valid values for <i>spec</i> are:
+
+  <dl>
+    <dt><b>nearest</b></dt>
+
+    <dd>The output pixel will be identical to the nearest input
+    pixel.</dd>
+
+    <dt><b>linear</b></dt>
+
+    <dd>The output pixel will be a bilinear interpolation of the four
+    surrounding input pixels.</dd>
+
+    </dl>
+
+  The default value is <b>nearest</b>.</dd>
+
+  </dl>
+
+<a name="hints"></a>
+<h2>HINTS</h2>
+
+<p>It might be tempting always to use the options
+<b>--include 0,0;0,1;1,0;1,1</b> 
+(assuming <b>--input_system=lattice</b> and <b>--input_unit=image</b>), 
+so that no part of the input image is missing in the output. 
+There are problems with that:
+
+<ul>
+  <li>If the threedimensional plane defined by the quadrilateral has a
+  visible horizon in the input image, then the above asks <b>pamperspective</b>
+  to include points that cannot ever be part of the output.
+
+  <li>If the horizon is not visible, but close to the border of the input
+  image, this may result in <em>very</em> large output files. Consider a
+  picture of a road. If you ask a point close to the horizon to be included,
+  then this point is far away from the viewer. The output will cover many
+  kilometers of road, while <b>--detail</b> perhaps makes a pixel equal to a
+  square centimeter.
+
+  </ul>
+
+<p>When working with large files <b>pamperspective</b>'s memory usage
+might be an issue.  In order to keep it small, you should minimize each
+of the following:
+
+<ul>
+  <li>The vertical range that the top output line consumes in the
+  input image;
+
+  <li>The vertical range that the bottom output line consumes in the
+  input image;
+
+  <li>The vertical range from the topmost (with respect to the 
+  input image) quadrilateral point to the top (with respect to the output 
+  image) output line.
+
+  </ul>
+
+For this purpose you can use <b>pamflip</b> before and/or after
+<b>pamperspective</b>. Example: Instead of
+
+<pre>
+<b>pamperspective 10 0 100 50 0 20 95 100 infile &gt; outfile</b>
+</pre>
+
+you can use
+
+<pre>
+<b>
+pamflip -rotate90 infile | 
+   pamperspective 50 0 100 5 0 90 20 100 | 
+   pamflip -rotate270 &gt; outfile
+</b>
+</pre>
+  
+<a name="seealso"></a>
+<h2>SEE ALSO</h2>
+
+<a href="http://netpbm.sourceforge.net/doc/index.html"><b>netpbm</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pam.html"><b>pam</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pnm.html"><b>pnm</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pamcut.html"><b>pamcut</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pamflip.html"><b>pamflip</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pnmrotate.html"><b>pnmrotate</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pamscale.html"><b>pamscale</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pnmshear.html"><b>pnmshear</b></a>,
+<a href="http://netpbm.sourceforge.net/doc/pnmstitch.html"><b>pnmstitch</b></a>
+
+<a name="history"></a>
+<h2>HISTORY</h2>
+
+<p>Mark Weyer wrote <b>pamperspective</b> in March 2004.
+
+<p>It was new in Netpbm 10.22 (April 2004).
+
+
+<a name="author"></a>
+</p><h2>AUTHOR</h2>
+
+This documentation was written by Mark Weyer.  Permission is granted
+to copy, distribute and/or modify this document under the terms of the
+GNU General Public License, Version 2 or any later version published
+by the Free Software Foundation.
+
+<a name="index"></a>
+<h2>Table Of Contents</h2>
+<ul>
+  <li><a href="#name">NAME</a>
+  </li><li><a href="#synopsis">SYNOPSIS</a>
+  </li><li><a href="#description">DESCRIPTION</a>
+  </li><li><a href="#options">OPTIONS</a>
+  </li><li><a href="#hints">HINTS</a>  
+  </li><li><a href="#seealso">SEE ALSO</a>  
+  </li><li><a href="#history">HISTORY</a>  
+  </li><li><a href="#author">AUTHOR</a>  
+  </li></ul>
+
+</body></html>
+
+
+
diff --git a/pampick.html b/pampick.html
new file mode 100644
index 00000000..8aeb004c
--- /dev/null
+++ b/pampick.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pampick User Manual</TITLE></HEAD>
+<BODY>
+<H1>pampick</H1>
+Updated: 25 October 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+pampick - pick images out of a multi-image Netpbm image stream
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pampick</B>
+
+<I>image_sequence_number</I> ...
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pampick</b> reads a PNM or PAM image stream as input.  It
+picks certain images from the stream and copies them to a new image
+stream on Standard Output.
+
+<p>You identify the images to pick by sequence number within the stream.
+Each <i>image_sequence_number</i> is a decimal sequence number, with zero
+meaning the first image.
+
+<p>The arguments must be in increasing order, without duplicates.  The
+results are undefined if they are not.  (There are a number of
+enhancements that might be made in future releases that would make
+whatever <b>pampick</b> does today when you break this rule change).
+<b>pampick</b> outputs the images in the same order as they appear in
+the input.  If you specify no sequence numbers, <b>pampick</b> outputs
+nothing.  If you specify a sequence number that is beyond what is in
+the input, <b>pampick</b> fails with an error message to that effect.
+
+<p><b>pampick</b> always reads the entire input stream.  (This is helpful
+when the input stream is a pipe and whatever is feeding the pipe would be
+upset if it filled up or broke).
+
+<p>To see how many images, and what kind, are in a stream, use
+<b>pamfile</b>.
+
+<p>To extract all the images in a stream into separate named files,
+use <b>pamsplit</b>.
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamfile.html">pamfile</A></B>,
+<B><A HREF="pamsplit.html">pamsplit</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B>cat</b> man page
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pampick</b> was new in Netpbm 10.31 (December 2005);
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pampop9.html b/pampop9.html
new file mode 100644
index 00000000..00f66db9
--- /dev/null
+++ b/pampop9.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head><title>Pampop9 User Manual</title></head>
+<body>
+
+<h1>pampop9</h1>
+Updated: 02 March 2003
+<br>
+<a HREF="#index">Table Of Contents</a>
+
+<a NAME="name"></a>
+<h2>NAME</h2>
+pampop9 - simulate a multi-lens camera such as the Pop9
+
+<a NAME="synopsis"></a>
+<h2>SYNOPSIS</h2>
+
+<b>pampop9</b>
+<i>pnmfile|-</i>
+<i>xtiles</i>
+<i>ytiles</i>
+<i>xdelta</i>
+<i>ydelta</i>
+
+<a NAME="description"></a>
+<h2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>
+<b>pampop9</b> tiles your starting image <i>xtiles</i> by <i>ytiles</i>
+times.
+Each of these tiles is taken from a slightly different offset within the
+source, as determined by the <i>xdelta</i> and <i>ydelta</i> arguments.
+</p>
+
+<p>
+The top line of tiles in the output is taken from the top of the source
+image, the second starts with the <i>ydelta</i> row of the source image,
+the next with the 2*<i>ydelta</i> row, and so on.
+Similarly, the first column of tiles in the output is taken from the left
+of the source image, the next starts with the <i>xdelta</i> column, the
+next with the 2*<i>xdelta</i> column, and so on.
+</p>
+
+<a name="examples">&nbsp;</a>
+<h2>EXAMPLES</h2>
+
+<p>
+With a 100 x 100 source image, then the output image from
+<b>pampop9</b> <i>3 3 10 10</i> will appear to be a three-by-three grid,
+each tile being 80 x 80 pixels.
+If the origin is taken to be the top-left corner, then the top row of
+tiles will take start at (0, 0) (10, 0) (20, 0) within the source image,
+the middle row will start at (0, 10) (10, 10) (20, 10), and the bottom
+row at (0, 20) (10, 20) (20, 20).
+</p>
+
+<a NAME="history"></a>
+<h2>HISTORY</h2>
+
+<p><b>pampop9</b> was new in Netpbm 10.15 (April 2003).  It was
+adapted slightly from <b>pampup9</b>, which was distributed by Robert
+Tinsley.  At that time, it was distributed via
+http://www.thepoacher.net/code/#pampup9.  By October 2004, that URL
+no longer was valid.
+
+<a NAME="see-also">&nbsp;</a>
+<h2>SEE ALSO</h2>
+
+<a HREF="pnmtile.html">pnmtile</a>
+
+<a NAME="author"></a>
+<h2>AUTHOR</h2>
+
+<p>Copyright (C) 2003 by Robert Tinsley.  This software is released
+under the GPL (<a href="http://www.fsf.org/licensing/licenses/gpl.txt">
+http://www.fsf.org/licenses/gpl.txt</a>).
+
+<hr>
+
+<a NAME="index"></a>
+<h2>Table Of Contents</h2>
+
+<UL>
+<LI><a HREF="#name">NAME</a>
+<LI><a HREF="#synopsis">SYNOPSIS</a>
+<LI><a HREF="#description">DESCRIPTION</a>
+<LI><a HREF="#examples">EXAMPLES</a>
+<LI><a HREF="#see-also">SEE ALSO</a>
+<LI><a HREF="#history">HISTORY</a>
+<LI><a HREF="#author">AUTHOR</a>
+</UL>
+
+</body>
+</html>
+
diff --git a/pamrgbatopng.html b/pamrgbatopng.html
new file mode 100644
index 00000000..7dd0df91
--- /dev/null
+++ b/pamrgbatopng.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamrgbtopng User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamrgbatopng</H1>
+Updated: 24 July 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+pamrgbatopng - convert PAM color/transparency image to PNG
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamrgbatopng</B>
+[<i>pamfile</i>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamrgbatopng</b> reads a PAM image with the RGB_ALPHA
+tuple type (a color visual image with transparency) and produces an
+equivalent PNG image as output.
+
+<p>The input image if from the file named by the <i>pamfile</i> argument,
+or Standard Input if you don't specify <i>pamfile</i>.  The output goes
+to Standard Output.
+
+<p>The maxval of the input image must be 255.  You can use
+<b>pamdepth</b> to change the maxval of an image to 255 if necessary.
+
+<p><a href="pnmtopng.html"><b>pnmtopng</b></a> is a much more powerful
+program for generating PNG images from Netpbm images, but it cannot
+take PAM images with transparency as input.  To supply transparency
+information, you must supply it in a separate PGM image.  That makes
+it considerably less convenient to use.
+
+<p>(But note that <b>pnmtopng</b> takes PAM images, even with RGB_ALPHA
+tuple type just fine -- it just ignores the alpha plane).
+
+<p>Netpbm's strategic direction is to add to <b>pnmtopng</b> all the
+capabilities of <b>pamrgbatopng</b> and retire <b>pamrtbatopng</b>.
+But there's no telling when that will happen.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<p>None.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pam.html">pam</A></B>
+<B><A HREF="pnmtopng.html">pnmtopng</A></B>
+<B><A HREF="pngtopnm.html">pngtopnm</A></B>
+
+<H2 ID="history">HISTORY</H2>
+
+<p><b>pamrgbatopng</b> was new in Netpbm 10.30 (October 2005).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pamscale.html b/pamscale.html
new file mode 100644
index 00000000..7fff919f
--- /dev/null
+++ b/pamscale.html
@@ -0,0 +1,573 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamscale User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamscale</H1>
+Updated: 18 February 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamscale - scale a Netpbm image
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<pre>
+   <B>pamscale</B>
+      [ 
+         <I>scale_factor</I> 
+         |
+         {<B>-xyfit</B> | <B>-xyfill</b> | <b>-xysize</b>} <I>cols</i> <i>rows</I> 
+         |
+         <B>-reduce</B> <I>reduction_factor</I> 
+         |
+         [<B>-xsize=</B><I>cols</I> | <B>-width=</B><I>cols</I> | <B>-xscale=</B><I>factor</I>]
+         [<B>-ysize=</B><I>rows</I> | <B>-height=</B><I>rows</I> | <B>-yscale=</B><I>factor</I>]
+         |
+         <b>-pixels</B> <I>n</I>
+      ]
+      [
+         [<B>-verbose</b>]
+         [
+            <b>-nomix</B> 
+            |
+            <b>-filter=</b><i>functionName</i> [<b>-window=</b>functionName]
+         ]
+         [<b>-linear</b>]
+      }
+      [<I>pnmfile</I>]
+
+</pre>
+<?makeman .SH OPTION USAGE ?>
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pamscale</b> scales a Netpbm image by a specified factor, or
+scales individually horizontally and vertically by specified factors.
+
+<P>You can either enlarge (scale factor &gt; 1) or reduce (scale factor
+&lt; 1).
+
+<h3 id="scalefactor">The Scale Factors</h3>
+
+<P>When you specify an absolute size or scale factor for both
+dimensions, <B>pamscale</B> scales each dimension independently
+without consideration of the aspect ratio.
+
+<P>If you specify one dimension as a pixel size and don't specify the
+other dimension, <B>pamscale</B> scales the unspecified dimension to
+preserve the aspect ratio.
+
+<P>If you specify one dimension as a scale factor and don't specify
+the other dimension, <B>pamscale</B> leaves the unspecified dimension
+unchanged from the input.
+
+<P>If you specify the <I>scale_factor</I> parameter instead of
+dimension options, that is the scale factor for both dimensions.  It
+is equivalent to <B>-xscale=</B><I>scale_factor</I><B>
+-yscale=</B><I>scale_factor</I>.
+
+<P>Specifying the <B>-reduce</B> <I>reduction_factor</I> option is
+equivalent to specifying the <I>scale_factor </I> parameter, where
+<I>scale_factor</I> is the reciprocal of <I>reduction_factor</I>.
+
+<P><B>-xyfit</B> specifies a bounding box.  <B>pamscale</B> scales
+the input image to the largest size that fits within the box, while
+preserving its aspect ratio.  <b>-xysize</b> is a synonym for this.
+Before Netpbm 10.20 (January 2004), <b>-xyfit</b> did not exist, but
+<b>-xysize</b> did.
+
+<p><b>-xyfill</b> is similar, but <b>pamscale</b> scales the input image
+to the smallest size that completely fills the box, while preserving
+its aspect ratio.  This option has existed since Netpbm 10.20 (January
+2004).
+
+<P><B>-pixels</B> specifies a maximum total number of output pixels.
+<B>pamscale</B> scales the image down to that number of pixels.  If
+the input image is already no more than that many pixels,
+<B>pamscale</B> just copies it as output; <B>pamscale</B> does not
+scale up with <B>-pixels</B>.
+
+<P>If you enlarge by a factor of 3 or more, you should probably add a
+<I>pnmsmooth</I> step; otherwise, you can see the original pixels in
+the resulting image.
+
+
+<h3 id="usage">Usage Notes</h3>
+
+<P>A useful application of <B>pamscale</B> is to blur an image.  Scale
+it down (without <B>-nomix</B>) to discard some information, then
+scale it back up using <B>pamstretch</B>.
+
+<P>Or scale it back up with <B>pamscale</B> and create a
+&quot;pixelized&quot; image, which is sort of a computer-age version
+of blurring.
+
+
+<h3 id="transparency">Transparency</h3>
+
+<p><b>pamscale</b> understands transparency and properly mixes pixels
+considering the pixels' transparency.  
+
+<p>Proper mixing <em>does not</em> mean just mixing the transparency
+value and the color component values separately.  In a PAM image, a
+pixel which is not opaque represents a color that contains light of
+the foreground color indicated explicitly in the PAM and light of a
+background color to be named later.  But the numerical scale of a
+color component sample in a PAM is as if the pixel is opaque.  So a
+pixel that is supposed to contain half-strength red light for the
+foreground plus some light from the background has a red color sample
+that says <em>full</em> red and a transparency sample that says 50%
+opaque.  In order to mix pixels, you have to first convert the color
+sample values to numbers that represent amount of light directly
+(i.e. multiply by the opaqueness) and after mixing, convert back
+(divide by the opaqueness).
+
+<h3 id="imagetype">Input And Output Image Types</h3>
+
+<p><b>pamscale</b> produces output of the same type (and tuple type if
+the type is PAM) as the input, except if the input is PBM.  In that
+case, the output is PGM with maxval 255.  The purpose of this is to
+allow meaningful pixel mixing.  Note that there is no equivalent
+exception when the input is PAM.  If the PAM input tuple type is
+BLACKANDWHITE, the PAM output tuple type is also BLACKANDWHITE, and
+you get no meaningful pixel mixing.
+
+<P>If you want PBM output with PBM input, use <B>pamditherbw</B> to
+convert <B>pamscale</B>'s output to PBM.  Also consider
+<B>pbmreduce</B>.
+
+<p><b>pamscale</b>'s function is essentially undefined for PAM input
+images that are not of tuple type RGB, GRAYSCALE, BLACKANDWHITE, or
+the _ALPHA variations of those.  (By standard Netpbm backward compatibility,
+this includes PBM, PGM, and PPM images).
+
+<p>You might think it would have an obvious effect on other tuple
+types, but remember that the aforementioned tuple types have
+gamma-adjusted sample values, and <b>pamscale</b> uses that fact in
+its calculations.  And it treats a transparency plane different from any
+other plane.
+
+<p><b>pamscale</b> does not simply reject unrecognized tuple types
+because there's a possibility that just by coincidence you can get
+useful function out of it with some other tuple type and the right
+combination of options (consider <b>-linear</b> in particular).
+
+
+<h3 id="methods">Methods Of Scaling</h3>
+
+<p>There are numerous ways to scale an image.  <b>pamscale</b> implements
+a bunch of them; you select among them with invocation options.
+
+<h4 id="mixing">Pixel Mixing</h4>
+
+<p>Pamscale's default method is pixel mixing.  To understand this,
+imagine the source image as composed of square tiles.  Each tile is a
+pixel and has uniform color.  The tiles are all the same size.  Now
+lay over that a transparent sheet of the same size, marked off in a
+square grid.  Each cell in the grid stands for a pixel of the target
+image.  For example, if you are scaling a 100x200 image up by 1.5, the
+source image is 100 x 200 tiles, and the transparent sheet is marked
+off in 150 x 300 cells.
+
+<p>Each cell covers parts of multiple tiles.  To make the target image,
+just color in each cell with the color which is the average of the colors
+the cell covers -- weighted by the amount of that color it covers.  A
+cell in our example might cover 4/9 of a blue tile, 2/9 of a red tile,
+2/9 of a green tile, and 1/9 of a white tile.  So the target pixel
+would be somewhat unsaturated blue.
+
+<p>When you are scaling up or down by an integer, the results are
+simple.  When scaling up, pixels get duplicated.  When scaling down,
+pixels get thrown away.  In either case, the colors in the target
+image are a subset of those in the source image.
+
+<p>When the scale factor is weirder than that, the target image can
+have colors that didn't exist in the original.  For example, a red
+pixel next to a white pixel in the source might become a red pixel,
+a pink pixel, and a white pixel in the target.
+
+<p>This method tends to replicate what the human eye does as it moves
+closer to or further away from an image.  It also tends to replicate
+what the human eye sees, when far enough away to make the pixelization
+disappear, if an image is not made of pixels and simply stretches
+or shrinks.
+
+<h4 id="sampling">Discrete Sampling</h4>
+
+<p>Discrete sampling is basically the same thing as pixel mixing except
+that, in the model described above, instead of averaging the colors of
+the tiles the cell covers, you pick the one color that covers the most
+area.
+
+<p>The result you see is that when you enlarge an image, pixels
+get duplicated and when you reduce an image, some pixels get discarded.
+
+<p>The advantage of this is that you end up with an image made from the
+same color palette as the original.  Sometimes that's important.
+
+<p>The disadvantage is that it distorts the picture.  If you scale up
+by 1.5 horizontally, for example, the even numbered input pixels are
+doubled in the output and the odd numbered ones are copied singly.  If
+you have a bunch of one pixel wide lines in the source, you may find
+that some of them stretch to 2 pixels, others remain 1 pixel when you
+enlarge.  When you reduce, you may find that some of the lines
+disappear completely.
+
+<p>You select discrete sampling with <b>pamscale</b>'s <b>-nomix</b>
+option.
+
+<p>Actually, <B>-nomix</b> doesn't do exactly what I described above.
+It does the scaling in two passes - first horizontal, then vertical.
+This can produce slightly different results.
+
+<p>There is one common case in which one often finds it burdensome to
+have <b>pamscale</b> make up colors that weren't there originally:
+Where one is working with an image format such as GIF that has a
+limited number of possible colors per image.  If you take a GIF with
+256 colors, convert it to PPM, scale by .625, and convert back to GIF,
+you will probably find that the reduced image has way more than 256
+colors, and therefore cannot be converted to GIF.  One way to solve
+this problem is to do the reduction with discrete sampling instead of
+pixel mixing.  Probably a better way is to do the pixel mixing, but
+then color quantize the result with <b>pnmquant</b> before converting
+to GIF.
+
+<P>When the scale factor is an integer (which means you're scaling
+up), discrete sampling and pixel mixing are identical -- output pixels
+are always just N copies of the input pixels.  In this case, though,
+consider using <B>pamstretch</B> instead of <B>pamscale</B> to get the
+added pixels interpolated instead of just copied and thereby get a
+smoother enlargement.
+
+<P><b>pamscale</b>'s discrete sampling is faster than pixel mixing,
+but <B>pamenlarge</B> is faster still.  <B>pamenlarge</B> works only
+on integer enlargements.
+
+<p>discrete sampling (<b>-nomix</b>) was new in Netpbm 9.24 (January
+2002).
+
+
+<h4 id="resampling">Resampling</h4>
+
+<p>Resampling assumes that the source image is a discrete sampling of some
+original continuous image.  That is, it assumes there is some non-pixelized
+original image and each pixel of the source image is simply the color of
+that image at a particular point.  Those points, naturally, are the
+intersections of a square grid.
+
+<p>The idea of resampling is just to compute that original image, then
+sample it at a different frequency (a grid of a different scale).
+
+<p>The problem, of course, is that sampling necessarily throws away the
+information you need to rebuild the original image.  So we have to make
+a bunch of assumptions about the makeup of the original image.
+
+<p>You tell <b>pamscale</b> to use the resampling method by specifying
+the <b>-filter</b> option.  The value of this option is the name of a
+function, from the set listed below.
+
+<p><strong>To explain resampling, we are going to talk about a simple
+one dimensional scaling</strong> -- scaling a single row of grayscale
+pixels horizontally.  If you can understand that, you can easily
+understand how to do a whole image: Scale each of the rows of the
+image, then scale each of the resulting columns.  And scale each of the
+color component planes separately.
+
+<p>As a first step in resampling, <b>pamscale</b> converts the source
+image, which is a set of discrete pixel values, into a continuous step
+function.  A step function is a function whose graph is a staircase-y
+thing.
+
+<p>Now, we convolve the step function with a proper scaling of the
+filter function that you identified with <b>-filter</b>.  If you don't
+know what the mathematical concept of convolution (convolving) is, you
+are officially lost.  You cannot understand this explanation.  The
+result of this convolution is the imaginary original continuous image
+we've been talking about.
+
+<p>Finally, we make target pixels by picking values from that function.
+
+<p>To understand what is going on, we use Fourier analysis:
+
+<p>The idea is that the only difference between our step function and
+the original continuous function (remember that we constructed the
+step function from the source image, which is itself a sampling of the
+original continuous function) is that the step function has a bunch of
+high frequency Fourier components added.  If we could chop out all the
+higher frequency components of the step function, and know that
+they're all higher than any frequency in the original function, we'd
+have the original function back.  
+
+<p>The resampling method <em>assumes</em> that the original function
+was sampled at a high enough frequency to form a perfect sampling.  A
+perfect sampling is one from which you can recover exactly the
+original continuous function.  The Nyquist theorem says that as long
+as your sample rate is at least twice the highest frequency in your
+original function, the sampling is perfect.  So we <em>assume</em>
+that the image is a sampling of something whose highest frequency is
+half the sample rate (pixel resolution) or less.  Given that, our
+filtering does in fact recover the original continuous image from the
+samples (pixels).
+
+<p>To chop out all the components above a certain frequency, we just
+multiply the Fourier transform of the step function by a rectangle
+function.
+
+<p>We could find the Fourier transform of the step function, multiply
+it by a rectangle function, and then Fourier transform the result
+back, but there's an easier way.  Mathematicians tell us that
+multiplying in the frequency domain is equivalent to convolving in the
+time domain.  That means multiplying the Fourier transform of F by a
+rectangle function R is the same as convolving F with the Fourier
+transform of R.  It's a lot better to take the Fourier transform of
+R, and build it into <b>pamscale</b> than to have <b>pamscale</b>
+take the Fourier transform of the input image dynamically.
+
+<p>That leaves only one question:  What <em>is</em> the Fourier
+transform of a rectangle function?  Answer: sinc.  Recall from
+math that sinc is defined as sinc(x) = sin(PI*x)/PI*x.
+
+<p>Hence, when you specify <b>-filter=sinc</b>, you are effectively
+passing the step function of the source image through a low pass
+frequency filter and recovering a good approximation of the original
+continuous image.
+
+<h5>Refiltering</h5>
+
+<p>There's another twist: If you simply sample the reconstructed
+original continuous image at the new sample rate, and that new sample
+rate isn't at least twice the highest frequency in the original
+continuous image, you won't get a perfect sampling.  In fact, you'll
+get something with ugly aliasing in it.  Note that this can't be a
+problem when you're scaling up (increasing the sample rate), because
+the fact that the old sample rate was above the Nyquist level means so
+is the new one.  But when scaling down, it's a problem.  Obviously,
+you have to give up image quality when scaling down, but aliasing is
+not the best way to do it.  It's better just to remove high frequency
+components from the original continuous image before sampling, and
+then get a perfect sampling of that.
+
+<p>Therefore, <b>pamscale</b> filters out frequencies above half the
+new sample rate before picking the new samples.
+
+<h5>Approximations</h5>
+
+<p>Unfortunately, <b>pamscale</b> doesn't do the convolution
+precisely.  Instead of evaluating the filter function at every point,
+it samples it -- assumes that it doesn't change any more often than
+the step function does.  <b>pamscale</b> could actually do the true
+integration fairly easily.  Since the filter functions are built into
+the program, the integrals of them could be too.  Maybe someday it
+will.
+
+<p>There is one more complication with the Fourier analysis.  sinc
+has nonzero values on out to infinity and minus infinity.  That makes
+it hard to compute a convolution with it.  So instead, there are
+filter functions that approximate sinc but are nonzero only within a
+manageable range.  To get those, you multiply the sinc function by a
+<i>window function</i>, which you select with the <b>-window</b>
+option.  The same holds for other filter functions that go on forever
+like sinc.  By default, for a filter that needs a window function,
+the window function is the Blackman function.
+
+<h5>Filter Functions Besides Sinc</h5>
+
+<p>The math described above works only with sinc as the filter
+function.  <b>pamscale</b> offers many other filter functions, though.
+Some of these approximate sinc and are faster to compute.  For most of
+them, I have no idea of the mathematical explanation for them, but
+people do find they give pleasing results.  They may not be based on
+resampling at all, but just exploit the fact the convolution that is
+coincidentally part of a resampling calculation.
+
+<p>For some filter functions, you can tell just by looking at the
+convolution how they vary the resampling process from the perfect one
+based on sinc:
+
+<p>The impulse filter assumes that the original continuous image is in
+fact a step function -- the very one we computed as the first step in
+the resampling.  This is mathematically equivalent to the discrete
+sampling method.
+
+<p>The box (rectangle) filter assumes the original image is a piecewise
+linear function.  Its graph just looks like straight lines connecting
+the pixel values.  This is mathematically equivalent to the pixel mixing
+method when scaling down, and interpolation (ala <b>pamstretch</b>)
+when scaling up.
+
+<h5>Gamma</h5>
+
+<p><b>pamscale</b> assumes the underlying continuous function is a
+function of brightness (as opposed to light intensity), and therefore
+does all this math using the gamma-adjusted numbers found in a PNM or
+PAM image.  The <b>-linear</b> option is not available with resampling
+(it causes <b>pamscale</b> to fail), because it wouldn't be useful enough
+to justify the implementation effort.
+
+<p>Resampling (<b>-filter</b>) was new in Netpbm 10.20 (January 2004).
+
+<h5>The filter functions</h5>
+
+<p>Here is a list of the function names you can specify for the
+<b>-filter</b> option.  For most of them, you're on your own to figure
+out just what the function is and what kind of scaling it does.  These
+are common functions from mathematics.
+
+<dl>
+<dt>point
+<dd>The graph of this is a single point at X=0, Y=1.
+
+<dt>box
+
+<dd>The graph of this is a rectangle sitting on the X axis and centered
+on the Y axis with height 1 and base 1.
+
+<dt>triangle
+
+<dd>The graph of this is an isosceles triangle sitting on the X axis
+and centered on the Y axis with height 1 and base 2.
+
+<dt>quadratic
+<dt>cubic
+<dt>catrom
+<dt>mitchell
+<dt>gauss
+<dt>sinc
+<dt>bessel
+<dt>hanning
+<dt>hamming
+<dt>blackman
+<dt>kaiser
+<dt>normal
+<dt>hermite
+<dt>lanczos
+</dl>
+
+
+<H3 id="linear">Linear vs Gamma-adjusted</H3>
+
+<p>The pixel mixing scaling method described above involves intensities
+of pixels (more precisely, it involves individual intensities of
+primary color components of pixels).  But the PNM and PNM-equivalent
+PAM image formats represent intensities with gamma-adjusted numbers
+that are not linearly proportional to intensity.  So <b>pamscale</b>,
+by default, performs a calculation on each sample read from its input
+and each sample written to its output to convert between these
+gamma-adjusted numbers and internal intensity-proportional numbers.
+
+<p>Sometimes you are not working with true PNM or PAM images, but
+rather a variation in which the sample values are in fact directly
+proportional to intensity.  If so, use the <b>-linear</b> option to
+tell <b>pamscale</b> this.  <b>pamscale</B> then will skip the
+conversions.
+
+<p>The conversion takes time.  In one experiment, it increased the
+time required to reduce an image by a factor of 10.  And the
+difference between intensity-proportional values and gamma-adjusted
+values may be small enough that you would barely see a difference in
+the result if you just pretended that the gamma-adjusted values were
+in fact intensity-proportional.  So just to save time, at the expense
+of some image quality, you can specify <b>-linear</b> even when you
+have true PPM input and expect true PPM output.
+
+<p>For the first 13 years of Netpbm's life, until Netpbm 10.20
+(January 2004), <b>pamscale</b>'s predecessor <b>pnmscale</b> always
+treated the PPM samples as intensity-proportional even though they
+were not, and drew few complaints.  So using <b>-linear</b> as a lie
+is a reasonable thing to do if speed is important to you.  But if
+speed is important, you also should consider the <b>-nomix</b> option
+and <b>pnmscalefixed</b>.
+
+<p>Another technique to consider is to convert your PNM image to the
+linear variation with <b>pnmgamma</b>, run <b>pamscale</b> on it and
+other transformations that like linear PNM, and then convert it back
+to true PNM with <b>pnmgamma -ungamma</b>.  <b>pnmgamma</b> is often
+faster than <b>pamscale</b> in doing the conversion.
+
+<p>With <b>-nomix</b>, <b>-linear</b> has no effect.  That's because
+<b>pamscale</b> does not concern itself with the meaning of the sample
+values in this method; <b>pamscale</b> just copies numbers from its
+input to its output.
+
+
+<H3 id="precision">Precision</H3>
+
+<P><B>pamscale</B> uses floating point arithmetic internally.  There
+is a speed cost associated with this.  For some images, you can get
+the acceptable results (in fact, sometimes identical results) faster
+with <B>pnmscalefixed</B>, which uses fixed point arithmetic.
+<B>pnmscalefixed</B> may, however, distort your image a little.  See
+the <B>pnmscalefixed</B> user manual for a complete discussion of the
+difference.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnmscalefixed.html">pnmscalefixed</A></B>,
+<B><A HREF="pamstretch.html">pamstretch</A></B>,
+<B><A HREF="pamditherbw.html">pamditherbw</A></B>,
+<B><A HREF="pbmreduce.html">pbmreduce</A></B>,
+<B><A HREF="pbmpscale.html">pbmpscale</A></B>,
+<B><A HREF="pamenlarge.html">pamenlarge</A></B>,
+<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnmgamma.html">pnmgamma</A></B>,
+<B><A HREF="pnmscale.html">pnmscale</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+
+<H2 id="history">HISTORY</H2>
+
+<p><b>pamscale</b> was new in Netpbm 10.20 (January 2004).  It was
+adapted from, and obsoleted, <b>pnmscale</b>.  <b>pamscale</b>'s
+primary difference from <b>pnmscale</b> is that it handles the PAM
+format and uses the "pam" facilities of the Netpbm programming
+library.  But it also added the resampling class of scaling method.
+Furthermore, it properly does its pixel mixing arithmetic (by default)
+using intensity-proportional values instead of the gamma-adjusted
+values the <b>pnmscale</b> uses.  To get the old <b>pnmscale</b>
+arithmetic, you can specify the <b>-linear</b> option.
+
+<p>The intensity proportional stuff came out of suggestions by <a
+href="mailto://amc+j5luho+@nicemice.net">Adam M Costello</a> in January
+2004.
+
+<p>The resampling algorithms are mostly taken from code contributed by
+<a href="mailto://reinelt@eunet.at">Michael Reinelt</a> in December 2003.
+
+<p>The version of <b>pnmscale</b> from which <b>pamscale</b> was
+derived, itself evolved out of the original Pbmplus version of
+<b>pnmscale</b> by Jef Poskanzer (1989, 1991).  But none of that
+original code remains.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+  <LI><A HREF="#synopsis">SYNOPSIS</A>
+  <LI><A HREF="#description">DESCRIPTION</A>
+  <UL>
+    <LI><A HREF="#scalefactor">The Scale Factors</a>
+    <LI><A HREF="#usage">Usage Notes</a>
+    <LI><A HREF="#transparency">Transparency</a>
+    <LI><A HREF="#imagetype">Input And Output Image Types</a>
+    <LI><A HREF="#methods">Methods Of Scaling</a>
+    <UL>
+      <LI><A HREF="#mixing">Pixel Mixing</a>
+      <LI><A HREF="#sampling">Discreate Sampling</a>
+      <LI><A HREF="#resampling">Resampling</a>
+      </UL>
+    <LI><A HREF="#linear">Linear vs Gamma-adjusted</a>
+    <LI><A HREF="#precision">Precision</A>
+    </UL>
+  <LI><A HREF="#seealso">SEE ALSO</A>  
+  <LI><A HREF="#history">HISTORY</A>  
+  </UL>
+
+</BODY>
+</HTML>
diff --git a/pamseq.html b/pamseq.html
new file mode 100644
index 00000000..ba772ae9
--- /dev/null
+++ b/pamseq.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Pamseq User Manual</title></HEAD>
+<BODY>
+<H1>pamseq</H1>
+<BR>
+Updated: 8 May 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamseq - generate PAM image of all possible tuple values, in sequence
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamseq</B>
+[<B>-tupletype</B> <I>tupletype</I>]
+<I>depth</I>
+<I>maxval</I>
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and its
+value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pamseq</B> generates a PAM image of a specified depth and specified
+maxval that consists of a single row.  The row consists of one tuple of
+every possible value, in order.
+
+<P>For a depth of one, the order is simple: From 0 to maxval, going from
+left to right.  For higher depths, the highest numbered plane goes from
+0 to maxval (going left to right) while all the other planes have value 0.
+Then the sequence repeats except with the next highest plane set to a value
+of 1, then 2, etc.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-tupletype</B>
+<DD>
+This is the value of the "tuple_type" attribute of the created PAM image.
+It can be any string up to 255 characters.
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>USAGE</H2>
+
+<p>To create a simple ramp of the values 0..255, for input to various matrix
+calculations, try
+<pre>
+<kbd>
+  pamseq 1 255 
+</kbd>
+</pre>
+(Before <b>pamseq</b> existed, <b>pgmramp</b> was often pressed into service
+for this).
+
+<P>To create a PPM color map of all the possible colors representable with a
+maxval of 5, do
+<pre>
+<kbd>
+  pamseq 3 5 -tupletype=RGB | pamtopnm
+</kbd>
+</pre>
+
+Again, with a modern program based on the Netpbm library, you don't need
+the <b>pamtopnm</b> because a PAM RGB image is equivalent to a PPM image.
+
+<p>You can use such a color map with <b><a
+href="pnmremap.html">pnmremap</a></b> to quantize the colors in an
+image.  With the maxval of 5 given in the example, you get a color map
+of the set of "web safe" colors as defined by Netscape.  Most web
+browsers guarantee that they can produce at least these 216 colors
+(215 plus black).
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmremap.html">pnmremap</A></B>,
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+<b>pamseq</b> was added to Netpbm in June 2002.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">USAGE</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
+
+
diff --git a/pamsharpmap.html b/pamsharpmap.html
new file mode 100644
index 00000000..0cd4c4ed
--- /dev/null
+++ b/pamsharpmap.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamsharpmap User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamsharpmap</H1>
+Updated: 07 February 2004
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamsharpmap - create map of sharpness in a PNM/PAM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>pamsharpmap</B> [<I>imagefile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamsharpmap</b> reads a Netpbm image (PNM or PAM) and produces
+an image that shows how sharp it is at each location.
+
+<p>Sharpness is a measure of how suddenly (in space) colors change in
+the image.  <b>pamsharpmap</b> computes the sharpness of each
+component color (R, G, B) separately and produces a pixel whose
+intensity of each component color is directly proportional to the
+sharpness of that component color at the same location in the input
+image.  Thus, at a point where the image is very sharp in its red and
+green components, but dull in its blue component, you will see a
+yellow pixel in the output.
+
+<p><b>pamsharpmap</b> computes sharpness at a point simply as the
+average difference in intensity between the pixel at that point and
+the 8 pixels surrounding it.
+
+<p>At the edges of the image, where there are not 8 pixels surrounding
+a pixel, <b>pamsharpmap</b> assumes the image is extended with a black
+border.
+
+<p><b>pamsharpmap</b> assumes that the image is a PNM or PNM
+equivalent PAM.  If it isn't, the results are not necessarily
+meaningful.
+
+<p>The output image is the same dimensions, depth, and tuple type as
+the input, and has maxval 255.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamsharpness.html">pamsharpness</A></B>,
+<B><A HREF="pammasksharpen.html">pammasksharpen</A></B>,
+<B><A HREF="pamedge.html">pamedge</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="history"></A>
+<h2>HISTORY</h2>
+
+<p><b>pamsharpmap</b> was added to Netpbm in Release 10.21 (March
+2004).  Bryan Henderson derived it from the program <b>pnmsharp</b> by
+B.W. van Schooten and distributed as part of the Photopnmtools
+package.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF=#history>HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamsharpness.html b/pamsharpness.html
new file mode 100644
index 00000000..0f66cb1b
--- /dev/null
+++ b/pamsharpness.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamsharpness User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamsharpness</H1>
+Updated: 07 Februrary 2004
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamsharpness - measure the sharpness of a PNM/PAM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>pamsharpness</B> [<I>imagefile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamsharpness</b>reads a Netpbm image (PNM or PAM) and prints a
+number that tells how sharp it is.
+
+<p>Sharpness is a measure of how suddenly (in space) colors change in
+the image.  <b>pamsharpness</b> computes the sharpness of the image as
+the average difference in intensity between each pixel and its 8 surrounding
+pixels, in each of the color components (R, G, B).
+
+<p><b>pamsharpness</b> does not include the edges of the image, where
+there are not 8 pixels surrounding a pixel, in its computation.
+
+<p><b>pamsharpness</b> assumes that the image is a PNM or PNM
+equivalent PAM.  If it isn't, the results are not necessarily
+meaningful.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamsharpmap.html">pamsharpmap</A></B>,
+<B><A HREF="pammasksharpen.html">pammasksharpen</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="history">&nbsp;</a>
+<h2>HISTORY</h2>
+
+<p><b>pamsharpness</b> was added to Netpbm in Release 10.21 (March
+2004).  Bryan Henderson derived it from the program <b>pnmsharp</b> by
+B.W. van Schooten and distributed as part of the Photopnmtools
+package.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF=#history>HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamslice.html b/pamslice.html
new file mode 100644
index 00000000..efb42efe
--- /dev/null
+++ b/pamslice.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamslice User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamslice</H1>
+Updated: 22 June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamslice - extract one line of values out of a Netpbm image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamslice</B>
+{<B>-row=</B><i>rownumber</i> | <B>-column=</B><i>columnnumber</i>}
+[<B>-plane=</b><i>planenumber</i>]
+[<I>imagefile</I>]
+
+<?makeman .SH OPTION USAGE ?>
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamslice</b> extracts one line of tuples (pixels) out of a
+Netpbm image and prints their values in a table.  A line means a row
+or column.  It shows you a one-dimensional cross section of a
+two-dimensional image.  (With the <b>-plane</b> option, it can be
+thought of as a one-dimensional cross-section of a three-dimensional
+image).
+
+<p>The table has one line per tuple, consisting of blank-separated
+ASCII decimal numbers.  The first number is the column number if you
+specified a row slice or the row number if you specified a column
+slice.  The rest of the numbers are the sample values in plane number
+order.  For a PBM or PGM input, there is only one plane.  For a PPM
+input, Plane 0 is red, Plane 1 is green, and Plane 2 is blue.  See the
+specifications of the image formats for details on exactly what these
+numbers mean.
+
+If you want to see all the pixels in a PPM, PGM, or PBM image in ASCII
+decimal, <b>pnmtoplainpnm</b> is a good way to do that.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-row=</B><i>rownumber</i>
+<DD>
+     This indicates that the slice is to be horizontal -- i.e. one row of the
+     image -- and indicates which row.  Rows are numbered from the top
+     starting with 0.
+
+     <P>You cannot specify both <b>-row</b> and <b>-column</b>.
+
+<DT><B>-column=</B><i>colnumber</i>
+<DD>
+     This indicates that the slice is to be vertical -- i.e. one column of the
+     image -- and indicates which column.  Columns are numbered from the left
+     starting with 0.
+
+     <P>You cannot specify both <b>-row</b> and <b>-column</b>.
+
+<DT><B>-plane=</B><i>planenumber</i>
+<DD>
+     This specifies that you are interested in only one plane of the image
+     and which one.  Planes are numbered from 0 and have meanings that vary
+     on the type of image.  In a PPM image, Plane 0 is red, Plane 1 is
+     green, and Plane 2 is blue.
+
+     <p>If you don't specify <b>-plane</b>, you get all the planes -- each
+     line of output has multiple numbers in addition to the sequence number.
+     If you do specify <b>-plane</b>, each line of output contains one
+     number in addition to the sequence number.
+
+<DT><B>-xmgr</B>
+<DD>
+     This option causes <b>pamslice</b> to format the output as input for a
+     <b>xmgr</b> so you can plot it.  The only difference this option makes
+     is that it adds header information to the beginning of the output.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamcut.html">pamcut</A>
+<A HREF="pnmtoplainpnm.html">pnmtoplainpnm</A>
+<A HREF="pamchannel.html">pnmtoplainpnm</A>
+<A HREF="pnm.html">pnm</A>
+<A NAME="lbAG">&nbsp;</A>
+
+<a name="history">&nbsp;</a>
+<H2>HISTORY</H2>
+
+<P><b>pamslice</b> replaced <b>pgmslice</b> in Netpbm 10.3 (June 2002).
+It was backward compatible, but worked on Netpbm images other than PGM and
+PBM and added the <b>-plane</b> and <b>-xmgr</b> options.
+
+<a name="author"></a>
+<H2>AUTHOR</H2>
+
+<P>Jos Dingjan &lt;<A
+HREF="mailto:jos@tuatha.org">jos@tuatha.org</A>&gt; wrote
+<b>pgmslice</b> after being unable to find the source code to Marco
+Beijersbergen's program with the same name.  Bryan Henderson converted it
+to <b>pamslice</b>.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pamsplit.html b/pamsplit.html
new file mode 100644
index 00000000..ab5dff9b
--- /dev/null
+++ b/pamsplit.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamsplit User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamsplit</H1>
+Updated: 23 October 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamsplit - split a multi-image PNM/PAM file into single-image files
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamsplit</B>
+
+[<I>netpbmfile</I>
+
+[<I> output_file_pattern</I>]]
+
+[<b>-padname=</b><i>n</i>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamsplit</b> reads a PNM or PAM stream as input.  It copies each image
+in the input into a separate file, in the same format.
+
+<P><I>netpbmfile</I> is the file specification of the input file, or
+<B>-</B> to indicate Standard Input.  The default is Standard Input.
+
+<P><I>output_file_pattern</I> tells how to name the output files.  It
+is the file specification of the output file, except that the first
+occurence of &quot;%d&quot; in it is replaced by the image sequence
+number in unpadded ASCII decimal, with the sequence starting at 0.  If
+there is no &quot;%d&quot; in the pattern, <B>pamsplit</B> fails.
+
+<P>The default output file pattern is &quot;image%d&quot;.
+
+<p>The <b>-padname</b> option specifies to how many characters you
+want the image sequence number in the output file name padded with
+zeroes.  <b>pamsplit</b> adds leading zeroes to the image sequence
+number to get up to at least that number of characters.  This is just
+the number of characters in the sequence number part of the name.  For
+example, <b>pamsplit - outputfile%d.ppm -padname=3</b> would yield
+output filenames <b>outputfile000.ppm</b>, <b>outputfile001.ppm</b>,
+etc.
+
+<p>The default is no padding (equivalent to <b>-padname=0</b>.
+<P>The <b>-padname</b> option was new in Netpbm 10.23 (July 2004).
+Before that, there was never any padding.
+
+
+<P>Note that to do the reverse operation (combining multiple
+single-image Netpbm files into a multi-image one), there is no special
+Netpbm program.  Just use <B>cat</B>.
+
+<p>If you just want to find out basic information about the images in a
+stream, you can use <b>pamfile</b> on the stream.
+
+<p>To extract images from a stream and generate a single stream containing
+them, use <b>pampick</b>.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamfile.html">pamfile</A></B>,
+<B><A HREF="pampick.html">pampick</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B>cat</b> man page
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamstack.html b/pamstack.html
new file mode 100644
index 00000000..295a01fd
--- /dev/null
+++ b/pamstack.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamstack User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>pamstack</H1>
+Updated: 10 January 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+pamstack - stack planes of multiple PAM images into one PAM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamstack</B>
+[<B>-tupletype </B><I>tupletype</I>]
+[<I>inputfilespec</I> ...]
+
+<P>All options may be abbreviated to the shortest unique prefix.  You
+may use two hyphens instead of one.  You may separate an option from
+its value with a space instead of <B>=</B>.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pamstack</b> reads multiple PAM or PNM images as input and
+produces a PAM image as output, consisting of all the planes
+(channels) of the inputs, stacked in the order specified.
+
+<P>The output is the same dimensions as the inputs, except that the
+depth is the sum of the depths of the inputs.  It has the same maxval.
+<B>pamstack</B> fails if the inputs are not all the same width, height,
+and maxval.  The tuple type is a null string unless you specify the
+<B>-tupletype</B> option.
+
+<p><b>pamstack</b> works with multi-image streams.  It stacks the 1st
+image in all the streams into one output image (the first one in the
+output stream), then stacks the 2nd image in all the streams into the
+2nd image in the output stream, and so on, until one of the streams
+runs dry.  It's like a matrix operation.
+
+<p>Before Netpbm 10.32 (February 2006), <b>pamstack</b> ignored all but
+the first image in each input stream.
+
+<P><B>pamchannel</B> does the opposite of <B>pamstack</B>:  It extracts
+individual planes from a single PAM.
+
+<P>Use <a href="pamtopnm.html">pamtopnm</a> to convert a suitable PAM
+image to a more traditional PNM (PBM, PGM, or PPM) image.  (But there's
+no need to do that if you're going to feed it to a modern Netpbm program --
+they all take suitable PAM input directly).
+
+<P>One example of using <B>pamstack</B> is that some Netpbm programs
+accept as input a PAM that represents graphic image with transparency
+information.  Taking a color image for example, this would be a PAM
+with tuple type "RGB_ALPHA".  In Netpbm, such images were
+traditionally represented as two images - a PPM for the color and a
+PGM for the transparency.  To convert a PPM/PGM pair into
+PAM(RGB_ALPHA) input that newer programs require, do something like
+this:
+
+<pre>
+<kbd>
+$ pamstack -tupletype=RGB_ALPHA myimage.ppm myalpha.pgm | \
+      pamtouil &gt;myimage.uil
+</kbd>
+</pre>
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-tupletype </B><I>tupletype</I>
+<DD>
+This specifies the tuple type name to be recorded in the output.  You may
+use any string up to 255 characters.  Some programs recognize some names.
+If you omit this option, the default tuple type name is null.
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pam.html">pam</A></B>
+<B><A HREF="pamchannel.html">pamchannel</A></B>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamstack</b> was new in Netpbm 10.0 (June 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamstereogram.html b/pamstereogram.html
new file mode 100644
index 00000000..d367f7ca
--- /dev/null
+++ b/pamstereogram.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<title>Pamstereogram User Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+</head>
+
+<body>
+
+<h1>pamstereogram</h1>
+
+<p>Updated: 6 January 2006</p>
+
+<p><a href="#contents">Table Of Contents</a></p>
+
+
+<h2 id="name">NAME</h2>
+
+<p>pamstereogram - create a single-image stereogram from a PAM
+height map</p>
+
+<h2 id="synopsis">SYNOPSIS</h2>
+
+<p>
+<b>pamstereogram</b>
+[<b>-help</b>]
+[<b>-verbose</b>]
+[<b>-blackandwhite</b> | <b>-grayscale</b> | <b>-color</b>]
+[<b>-maxval=</b><i>value</i>]
+[<b>-patfile=</b><i>pamfile</i>]
+[<b>-xshift=</b><i>pixels</i>]
+[<b>-yshift=</b><i>pixels</i>]
+[<b>-magnifypat=</b><i>scale</i>]
+[<b>-guidesize=</b><i>pixels</i>]
+[<b>-dpi=</b><i>resolution</i>]
+[<b>-crosseyed</b>]
+[<b>-makemask</b>]
+[<b>-eyesep=</b><i>inches</i>]
+[<b>-depth=</b><i>fraction</i>]
+[<b>-randomseed=</b><i>integer</i>
+[<i>infile</i>]
+</p>
+
+<p>You may use either single or double hyphens to denote options.  You
+may use either whitespace or an equals sign to separate an option name
+from its value.</p>
+
+
+<h2 id="description">DESCRIPTION</h2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.</p>
+
+<p><b>pamstereogram</b> inputs a height map (a map of the distances
+from your eye of the points in a scene) and outputs a single-image
+stereogram (SIS). A SIS is a 2-D image specially designed to appear
+three dimensional when viewed with relaxed, slightly unfocused
+eyes. What's exciting about single-image stereograms is that they
+don't require special glasses to view, although it does require a bit
+of practice to train your eyes to unfocus properly.  The
+<b>pamstereogram</b> program provides a wealth of control over how the
+stereogram is generated, including the following:</p>
+
+<ul>
+<li>black and white, grayscale, or color output</li>
+
+<li>single-image random-dot stereograms (SIRDS) or single-image
+stereograms (SIS) using a tiled image</li>
+
+<li>images targeting a given device resolution and eye
+separation</li>
+
+<li>optional guide boxes to assist in focusing</li>
+
+<li>the ability to trade off depth levels for easier viewing</li>
+
+<li>choice of wall-eyed or cross-eyed stereograms</li>
+
+</ul>
+<p>The output is a PAM image on standard output.  Options control
+the exact format of the PAM.  If you want a PNM (PBM, PGM, or PPM)
+image, use <b>pamtopnm</b> on the output.  There is no need to convert
+if you will use the image as input to a current Netpbm program, but
+many other programs don't know what a PAM is.
+
+<p>To make a red/green type of stereogram (that you view with 3-D
+glasses) instead, see <b>ppm3d</b>.</p>
+
+
+<h2 id="options">OPTIONS</h2>
+
+<dl>
+
+<dt><b>-verbose</b></dt>
+<dd>Display messages about image sizes and formats and properties
+of the stereogram being generated.</dd>
+
+<dt><b>-blackandwhite</b></dt>
+<dd>Produce a single-image random-dot black-and-white stereogram.
+This is the default.</dd>
+
+<dt><b>-grayscale</b></dt>
+<dd>Produce a single-image random-dot grayscale stereogram.</dd>
+
+<dt><b>-color</b></dt>
+<dd>Produce a single-image random-dot color stereogram.</dd>
+
+<dt><b>-maxval=</b><i>value</i></dt>
+<dd>Designate the maximum value of each gray/color component, i.e.
+the color resolution. Smaller values make the output image have
+smaller numbers of unique grays/colors. If you don't specify
+<b>-maxval</b>, <b>pamstereogram</b> uses the maxval of the input
+image. This option has no effect with <b>-blackandwhite</b>.</dd>
+
+<dt><b>-patfile=</b><i>pnmfile</i></dt>
+<dd>Specify an image to use as a repeated background pattern for
+the stereogram instead of a random-dot pattern. Intricate images
+generally produce a crisper 3-D effect that simpler images. The
+output file will have the same maxval and format (black and white,
+grayscale or color) as the pattern file. You cannot specify the
+<b>-patfile</b> option along with <b>-blackandwhite</b>,
+<b>-grayscale</b>, <b>-color</b>, or <b>-maxval</b>.</dd>
+
+<dt><b>-xshift=</b><i>pixels</i></dt>
+<dd>Shift the pattern image (designated by <b>-patfile</b>) to the
+right by <i>pixels</i> pixels (default: 0).
+<!-- <b>-xshift</b> is helpful when creating "true-color" stereograms. -->
+This option is valid only along with <b>-patfile</b>.</dd>
+
+<dt><b>-yshift</b> <i>pixels</i></dt>
+<dd>Shift the pattern image (designated by <b>-patfile</b>)
+downwards by <i>pixels</i> pixels (default: 0). This option is
+valid only along with <b>-patfile</b>.</dd>
+
+<dt><b>-magnifypat=</b><i>scale</i></dt>
+<dd>Magnify each pixel in the pattern file or each random dot by
+integral scaling factor <i>scale</i>. Note that
+<b>pamstereogram</b> applies the pattern magnification
+<em>after</em> pattern shifting (<b>-xshift</b> and
+<b>-yshift</b>).</dd>
+
+<dt><b>-guidesize=</b><i>pixels</i></dt>
+<dd>Draw a pair of <i>pixels</i> by <i>pixels</i> black squares on
+a white background underneath the stereogram proper. These squares
+help you guide your eyes into proper focus to view the 3-D image.
+The trick is to focus your eyes some distance behind the image,
+causing you to see four black squares, then continue altering your
+focus distance until the middle two black squares fuse into a
+single black square. At that point, a crisp, 3-D image will appear.
+<p>If <i>pixels</i> is negative, <b>pamstereogram</b> will draw the
+guide squares above the stereogram instead of below it. If
+<i>pixels</i> is zero (the default), <b>pamstereogram</b> will draw
+no guide squares.</p>
+</dd>
+
+<dt><b>-dpi=</b><i>resolution</i></dt>
+<dd>Specify the resolution of the output device in dots per inch.
+The default is 96 DPI, which represents a fairly crisp screen
+resolution.</dd>
+
+<dt><b>-crosseyed</b></dt>
+<dd>Invert the gray levels in the height map (input image) so that
+the 3-D image pops out of the page where it would otherwise sink
+into the page and vice versa. Some people are unable to diverge
+their eyes and can only cross them. The <b>-crosseyed</b> option
+enables such people to see the 3-D image as intended.</dd>
+
+<dt><b>-makemask</b></dt>
+<dd>Instead of a stereogram, output a PAM mask image showing
+coloring constraints. New pixels will be taken from the pattern
+file where the mask is black. Copies of existing pixels will be
+taken from the pattern file where the mask is white. The
+<b>-makemask</b> option can be used to help create more
+sophisticated pattern files (to use with <b>-patfile</b>) Note that
+<b>-makemask</b> ignores <b>-magnifypat</b>; it always produces
+masks that assume a pattern magnification of 1.</dd>
+
+<dt><b>-eyesep=</b><i>inches</i></dt>
+<dd>Specify the separation in inches between your eyes. The
+default, 2.5 inches (6.4 cm), should be sufficient for most people
+and probably doesn't need to be changed.</dd>
+
+<dt><b>-depth=</b><i>fraction</i></dt>
+<dd>Specify the output image's depth of field. That is,
+<i>fraction</i> represents the fractional distance of the near
+plane from the far plane. Smaller numbers make the 3-D image easier
+to perceive but flatter. Larger numbers make the 3-D image more
+difficult to perceive but deeper. The default, 0.3333, generally
+works fairly well.</dd>
+
+<dt><b>-randomseed=</b><i>integer</i>
+<dd>Specify a seed to be used for the random number generator.
+The default is to use a seed based on the time of day, to one second
+granularity.
+
+<p>It is useful to specify the seed if you want to create reproducible
+results.  With the same random seed, you should get identical results
+every time you run <b>pamstereogram</b>.
+
+<p>This is irrelevant if you use a pattern file (<b>-patfile</b>
+option), because there is no random element to <b>pamstereogram</b>'s
+behavior.
+
+<p>This option was new in Netpbm 10.32 (Februrary 2006).
+
+</dl>
+
+
+<h2 id="parameters">PARAMETERS</h2>
+
+<p>The only parameter, <i>infile</i>, is the name of an input file
+that is a height map image. If you don't specify <i>infile</i>, the
+input is from standard input.</p>
+
+<p>The input is a PAM image of depth 1. Each sample represents the
+distance from the eye that the 3-D image at that location should
+be. Higher numbers mean further from the eye.</p>
+
+<p><b>pamstereogram</b> pays no attention the the image's tuple
+type and ignores all planes other than plane 0.</p>
+
+<p>Like any Netpbm program, <b>pamstereogram</b> will accept PNM
+input as if it were the PAM equivalent.</p>
+
+<p>A good initial test is to input an image consisting of a solid
+shape of distance 0 within a large field of maximum distance (e.g., a
+black square on a white background).</p>
+
+
+
+<h2 id="examples">EXAMPLES</h2>
+
+<p>Generate a SIRDS out of small, brightly colored squares and
+prepare it for display on an 87 DPI monitor:</p>
+<pre>
+   pamstereogram heightmap.pam \
+                 -dpi 87 -verbose -color -maxval 1 -magnifypat 3 \
+                 &gt;3d.pam
+</pre>
+<p>Generate a SIS by tiling a PPM file (a prior run with
+<b>-verbose</b> indicates how wide the pattern file should be for
+seamless tiling, although any width is acceptable for producing
+SISes):</p>
+<pre>
+   pamstereogram myheights.pam -patfile mypattern.ppm &gt;mysis.pam
+</pre>
+
+
+<h2 id="seealso">SEE ALSO</h2>
+<ul>
+<li><a href="pam.html">pam</a></li>
+
+<li><a href="ppm3d.html">ppm3d</a></li>
+
+<li>Harold W. Thimbleby, Stuart Inglis, and Ian H. Witten.
+<em>Displaying 3D Images: Algorithms for Single Image Random Dot
+Stereograms</em>. In IEEE Computer, <strong>27</strong>(10):38-48,
+October 1994.  DOI <a
+href="http://dx.doi.org/10.1109/2.318576">10.1109/2.318576</a>.</li>
+
+</ul>
+
+
+<h2><a id="history">HISTORY</a></h2>
+<p><b>pamstereogram</b> was new in Netpbm 10.22 (April 2004),
+but probably broken beyond usability until 
+Netpbm 10.32 (Februrary 2006) and Netpbm 10.26.23 (January 2006).</p>
+
+
+<h2><a id="author">AUTHOR</a></h2>
+<p>Copyright (C) 2006 Scott Pakin, <a href=
+"mailto:scott+pbm@pakin.org">scott+pbm@pakin.org</a>.</p>
+<h2><a id="contents">Table Of Contents</a></h2>
+<ul>
+<li><a href="#synopsis">SYNOPSIS</a></li>
+<li><a href="#description">DESCRIPTION</a></li>
+<li><a href="#options">OPTIONS</a></li>
+<li><a href="#parameters">PARAMETERS</a></li>
+<li><a href="#examples">EXAMPLES</a></li>
+<li><a href="#seealso">SEE ALSO</a></li>
+<li><a href="#history">HISTORY</a></li>
+<li><a href="#author">AUTHOR</a></li>
+</ul>
+</body>
+</html>
diff --git a/pamstretch-gen.html b/pamstretch-gen.html
new file mode 100644
index 00000000..306a0f3f
--- /dev/null
+++ b/pamstretch-gen.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamstretch-gen User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamstretch-gen</H1>
+Updated: 10 April 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamstretch-gen - use pamstretch and pamscale to scale by non-integer values
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamstretch-gen</B>
+
+<I>N</I>
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pamstretch-gen</B> is a program which uses <B><A
+HREF="pamstretch.html">pamstretch</A></B>, <B><A
+HREF="pnmfile.html">pnmfile</A></B>, and <B><A
+HREF="pamscale.html">pamscale</A></B> to smoothly scale up a PNM file
+by any ratio; it's like a more general version of pamstretch (hence
+the name). But other than the `any ratio' bit, it's much the same as
+pamstretch. :-)
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+The program uses <b>awk</b> just to make some simple floating-point
+calculations, which is probably overkill.  But using <b>dc</b> makes
+my head hurt.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamstretch.html">pamstretch</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Russell Marks (<A
+HREF="mailto:russell.marks@ntlworld.com">russell.marks@ntlworld.com</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">BUGS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamstretch.html b/pamstretch.html
new file mode 100644
index 00000000..0c4247df
--- /dev/null
+++ b/pamstretch.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamstretch User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamstretch</H1>
+Updated: 11 November 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamstretch - scale up a PNM or PAM image by interpolating between pixels.
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamstretch</B>
+
+[<B>-xscale=</B><I>X</I>]
+
+[<B>-yscale=</B><I>Y</I>]
+
+<BR>
+
+[<B>-blackedge</B>]
+
+[<B>-dropedge</B>]
+
+<I>N</I>
+
+[<I>infile</I>]
+
+<P>You can use the minimum unique abbreviation of the options.  You can use
+two hyphens instead of one.  You can separate an option name from its value
+with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pamstretch </B> scales up pictures by integer values, either
+vertically, horizontally, or both.  <B>pamstretch </B> differs from
+<B>pamscale</B> and <B>pamenlarge</B> in that when it inserts the
+additional rows and columns, instead of making the new row or column a
+copy of its neighbor, <B>pamstretch</B> makes the new row or column an
+interpolation between its neighbors.  In some images, this produces
+better looking output.
+
+<P>To scale up to non-integer pixel sizes, e.g. 2.5, try <B><A
+HREF="pamstretch-gen.html">pamstretch-gen</A></B> instead.
+
+<P>Options let you select alternative methods of dealing with the
+right/bottom edges of the picture.  Since the interpolation is done
+between the top-left corners of the scaled-up pixels, it's not obvious
+what to do with the right/bottom edges.  The default behaviour is to
+scale those up without interpolation (more precisely, the right edge
+is only interpolated vertically, and the bottom edge is only
+interpolated horizontally), but there are two other possibilities,
+selected by the <B>blackedge</B> and <B>dropedge</B> options.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>PARAMETERS</H2>
+
+<P>The <I>N</I> parameter is the scale factor.  It is valid only if
+you <em>don't</em> specify <B>-xscale</B> or <B>-yscale</B>.  In that
+case, <B>pamstretch</B> scales in both dimensions and by the scale
+factor <I>N</I>.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-xscale=</B><I>X</I>
+
+<DD>This is the horizontal scale factor.  If you don't specify this, but do
+specify a vertical scale factor, the horizontal scale factor is 1. 
+
+<DT><B>-yscale=</B><I>Y</I>
+
+<DD>This is the vertical scale factor.  If you don't specify this, but
+do specify a horizontal scale factor, the vertical scale factor is 1.
+
+<DT><B>-blackedge</B>
+
+<DD>interpolate to black at right/bottom edges.
+
+<DT><B>-dropedge</B>
+
+<DD>drop one (source) pixel at right/bottom edges. This is arguably
+more logical than the default behaviour, but it means producing output
+which is a slightly odd size.
+
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>BUGS</H2>
+
+<p>Usually produces fairly ugly output for PBMs. For most PBM input
+you'll probably want to reduce the `noise' first using something like
+<B><A HREF="pnmnlfilt.html">pnmnlfilt</A></B>.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamstretch-gen.html">pamstretch-gen</A></B>,
+<B><A HREF="pamenlarge.html">pamenlarge</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="pnmnlfilt.html">pnmnlfilt</A></B>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Russell Marks (<A
+HREF="mailto:russell.marks@ntlworld.com">russell.marks@ntlworld.com</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">PARAMETERS</A>
+<LI><A HREF="#lbAF">OPTIONS</A>
+<LI><A HREF="#lbAG">BUGS</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamsumm.html b/pamsumm.html
new file mode 100644
index 00000000..c47941c7
--- /dev/null
+++ b/pamsumm.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamsumm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamsumm</H1>
+Updated: 07 February 2004
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamsumm - Summarize the samples in a Netpbm image arithmetically
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>pamsumm</B>
+{
+<b>-sum</b> |
+<b>-mean</b> |
+<b>-min</b> |
+<b>-max</b>
+}
+[<b>-normalize</b>]
+[<b>-brief</b>]
+[<I>imagefile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamsumm</b> reads a Netpbm image (PNM or PAM) and performs a
+summary function over all the samples in all the rows, columns, and planes
+and prints the result to Standard Output.
+
+<p><b>pamsumm</b> performs the operation on the actual sample values,
+not on the light intensities represented by them in the case that the
+image is a PGM or PPM image or PAM equivalent.  If you want to do
+arithmetic on light intensities of such a visual image, you can use
+<b>pnmgamma</b> to convert it to one with samples proportional to
+light intensity, and then use <b>pamsumm</b> on the result.
+
+<p>If you want to summarize by column (e.g. add up the columns
+separately), use <b>pamsummcol</b>.  If you want to summarize by row,
+use a combination of <b>pamsummcol</b> and <b>pamflip</b>.  If you
+want to summarize a particular plane, use <b>pamchannel</b> to
+extract it and then <b>pamsumm</b>.
+
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>You must specify exactly one of <b>-sum</b>, <b>-mean</b>,
+<b>-min</b>, or <b>-max</b>.
+
+<DL COMPACT>
+<DT><B>-sum</b>
+
+<DD>
+     <P>This option makes the summary function addition.
+
+<DT><B>-mean</b>
+
+<DD>
+     <P>This option makes the summary function arithmetic mean.
+
+<DT><B>-min</b>
+
+<DD>
+     <P>This option makes the summary function arithmetic minimum.
+
+<DT><B>-max</b>
+
+<DD>
+     <P>This option makes the summary function arithmetic maximum.
+
+<DT><B>-normalize</b>
+
+<DD>
+     <P>This option causes each sample to be normalized to a fraction
+     (in the range 0..1) so the result is independent of the image's
+     maxval.  E.g. if you request the mean of an image which has maxval
+     200 and all the samples have value 50, <b>pamsumm</b> will give you
+     50 as an answer.  But <b>pamsumm -normalize</b> will give you .25.
+
+     <p>If you want a result that is independent of maxval but still in
+     integers, and your input is PNM, you can use <b>pamdepth</b> to
+     convert to some standard maxval.  For example, if you want the mean
+     intensity of a PPM image, on a scale of 0 to 99, do
+
+<pre>
+<kbd>
+    pamdepth 99 myimage.ppm | pamsumm -mean
+</kbd>
+</pre>
+
+<p>This option was new in Netpbm 10.22 (April 2004)
+     
+<dt><b>-brief</b>
+<dd>
+     <p>This option causes <b>pamsumm</b> to display the answer as a bare
+     number, rather than in a complete sentence.
+
+<p>This option was new in Netpbm 10.22 (April 2004)
+
+</DL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamsummcol.html">pamsumm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<h2>HISTORY</h2>
+
+<p><b>pamsumm</b> was added to Netpbm in Release 10.21 (March
+2004).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF=#history>HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamsummcol.html b/pamsummcol.html
new file mode 100644
index 00000000..871f2452
--- /dev/null
+++ b/pamsummcol.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamsummcol User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamsummcol</H1>
+Updated: 07 February 2004
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pamsummcol - summarize (sum, average, etc) a Netpbm image by column
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>pamsummcol</B>
+{
+<b>-sum</b> |
+<b>-mean</b> |
+<b>-min</b> |
+<b>-max</b>
+}
+[<I>imagefile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamsummcol</b> reads a Netpbm image (PNM or PAM) and performs a
+summary function over all the rows in each column (sum, mean, etc.).
+It produces an image of the same kind that the same width and depth as
+the input, and one row high.  Its sample values are the result of the
+summary.
+
+<p><b>pamsummcol</b> performs the summary operation on each plane
+independently.
+
+<p><b>pamsummcol</b> performs the operation on the actual sample values,
+not on the light intensities represented by them in the case that the
+image is a PGM or PPM image.
+
+<p>If you want to summarize by row instead of by column, run the input
+through <b>pamflip</b> first (and if you want the output to be a single
+column instead of a single row, use <b>pamflip</b> again).
+
+<p>If you want to summarize over the entire image instead of over columns
+separately, use <b>pamsumm</b>.
+
+<p><b>pamsummcol</b> performs the operation on the actual sample values,
+not on the light intensities represented by them in the case that the
+image is a PGM or PPM image or PAM equivalent.  You can use
+<b>pnmgamma</b> to convert such an image to one with samples proportional
+to light intensity, and then use <b>pamsummcol</b> on the result.
+
+<p>You can achieve the same thing as <b>pamsummcol -mean</b> with
+<b>pamscale</b>.  Just scale vertically to a single row, without scaling
+horizontally at all.  Use the pixel mixing method.
+
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>You must specify exactly one of <b>-sum</b>, <b>-mean</b>,
+<b>-min</b>, or <b>-max</b>.
+
+<DL COMPACT>
+<DT><B>-sum</b>
+
+<DD>
+     <P>This option makes the summary function addition.
+     In each column and plane of the output row, the sample value is the
+     sum of all the samples values in the same column and plane of the input.
+     If a result is greater than the image maxval, it is clipped to
+     the maxval.
+
+<DT><B>-mean</b>
+
+<DD>
+     <P>This option makes the summary function arithmetic mean.
+     In each column and plane of the output row, the sample value is the
+     mean of all the samples values in the same column and plane of the input.
+
+<DT><B>-min</b>
+
+<DD>
+     <P>This option makes the summary function arithmetic minimum.
+     In each column and plane of the output row, the sample value is the
+     minimum of all the samples values in the same column and plane of
+     the input.
+
+<DT><B>-max</b>
+
+<DD>
+     <P>This option makes the summary function arithmetic maximum.
+     In each column and plane of the output row, the sample value is
+     the maximum of all the samples values in the same column and
+     plane of the input.
+
+</DL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamsumm.html">pamsumm</A></B>,
+<B><A HREF="pamflip.html">pamscale</A></B>,
+<B><A HREF="pamfunc.html">pamfunc</A></B>,
+<B><A HREF="pamarith.html">pamarith</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+
+<A NAME="history"></a>
+<h2>HISTORY</h2>
+
+<p><b>pamsummcol</b> was added to Netpbm in Release 10.21 (March
+2004).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF=#history>HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamthreshold.html b/pamthreshold.html
new file mode 100644
index 00000000..5c1dd2d8
--- /dev/null
+++ b/pamthreshold.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamthreshold User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamthreshold</H1>
+Updated: 12 May 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamthreshold - threshold grayscale image to black and white
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamthreshold</B>
+[<b>-simple</b>]
+[<b>-local=</b><i>width</i><b>x</b><i>height</i>]
+[<b>-dual=</b><i>width</i><b>x</b><i>height</i>]
+[<b>-threshold=</b><i>threshold</i>]
+[<b>-contrast=</b><i>threshold</i>]
+[<I>inputpamfile</I>]
+
+<P>Minimum unique abbreviation of options is acceptable. You may use
+double hyphens instead of a single hyphen to denote options. You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pamthreshold</b> thresholds a grayscale image. Thresholding means
+dividing the image into background and foreground by comparing every pixel
+to a thresholding value.
+
+<p>The input should be a PGM image or a PAM image of tuple type
+GRAYSCALE.  However, pamthreshold doesn't check; it just thresholds the
+first channel as if it were grayscale samples.  So if you
+feed it e.g. a PPM image, it will work but produce probably useless
+results.
+
+<p>The output is a PAM with tuple type BLACKANDWHITE. You can turn
+this into a PBM (if you need to use it with an older program that
+doesn't understand PAM, or you can't afford the 8X amount of space
+that PAM uses for the image) with <b>pamtopnm</b>.
+
+<p>The output is to Standard Output.
+
+<p>Another way to convert a grayscale image to black and white is to
+dither.  Dithering is using clustered black and white pixels such that
+if you step back and look at the picture, you see varying levels of
+gray.  <B>pamditherbw</B> does dithering.
+
+<H2 id="options">OPTIONS</H2>
+
+<p>Without any options, <b>pamthreshold</b> uses an iterative
+algorithm found in the <a
+href="http://www.wikipedia.org/">wikipedia</a> article
+<a href="http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29">
+<i>Thresholding (image processing)</i></a> to compute the
+thresholding value.  It uses this threshold to globally threshold the
+image.  This should work well for most images.  The program issues a
+message telling you what threshold it used.  (Netpbm messages go to
+Standard Error, and you can turn them off with the Netpbm command
+option <b>-quiet</b>).
+
+<DL COMPACT>
+
+<dt><b>-simple</b></dt>
+
+<dd>This selects simple or global thresholding,
+i.e. <b>pamthreshold</b> compares every pixel to the threshold you
+specify with <b>-threshold</b>.  This works well for black and white
+text pages scanned with a flatbed scanner and is faster than the
+default method that iteratively determines the thresholding value
+first.
+
+<dt><b>-local=</b><i>width</i><b>x</b><i>height</i></dt>
+
+<dd>This selects local adaptive thresholding (also known as dynamic
+thresholding) using the neighborhood of <i>width</i> and <i>height</i>
+around every pixel.  <b>pamthreshold</b> computes the threshold
+individually for each pixel of the image.  This can accommodate
+changing lighting conditions in the image.  Depending on the size of
+the neighborhood this can be quite slow.
+
+<dt><b>-dual=</b><i>width</i><b>x</b><i>height</i></dt>
+
+<dd>This selects a dual thresholding algorithm using a global threshold
+for low contrast neighborhoods and local thresholding otherwise.  This
+can preserve larger back- respectively foreground areas than local
+adaptive thresholding.  This algorithm was proposed in the paper
+"An Approach To Licence Plate Recognition" by J.R. Parker and Pavol Federl.
+
+<dt><b>-threshold=</b><i>threshold</i></dt>
+
+<dd>This sets the thresholding value for simple or local thresholding.
+The value is a floating point number in the range [0, 1], where 0
+is black and 1 is the maxval of the image.
+
+<p>If you don't specify this option, <b>pamthreshold</b> uses a threshold
+of 0.5.  Without <b>-simple</b> or <b>-local</b> this option is
+meaningless.
+
+<dt><b>-contrast=</b><i>threshold</i></dt>
+
+<dd>This sets the threshold to determine if a neighborhood has low contrast
+or not for dual thresholding.  The value is a floating point number in
+the range [0, 1].
+
+<p>If you don't specify this option, <b>pamthreshold</b> uses a contrast
+threshold of 0.05.  Without <b>-dual</b> this option is meaningless.
+
+</DL>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamditherbw.html">pamditherbw</A></B>,
+<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>,
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+
+<H2 id="history">HISTORY</H2>
+
+<p><b>pamthreshold</b> was new in Netpbm 10.34 (June 2006).
+
+<h2 id="author">AUTHOR</h2>
+<p>
+<b>pamthreshold</b> is Copyright &copy; 2006 by Erik Auerswald and released
+under the <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pamtilt.html b/pamtilt.html
new file mode 100644
index 00000000..e5e0566a
--- /dev/null
+++ b/pamtilt.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtilt User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtilt</H1>
+Updated: 28 August 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+pamtilt - print the tilt angle of a PGM file
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<b>pamtilt</b>
+[<b>-angle=</b><i>maxangle</i>]
+[<b>-fast</b>]
+[<b>-quality=</b><i>q</i>
+[<b>-hstep=</b><i>n</i>]
+[<b>-vstep=</b><i>n</i>]
+<br>
+[<b>-dstep=</b><i>n</i>]
+[<b>-astep=</b><i>n</i>]
+[<b>-verbose</b>]
+[<i>pgmfile</i>]
+
+<h2 id="examples">EXAMPLES</h2>
+
+<pre>
+<kbd>
+    scanimage --mode Gray --resolution 300 >crooked.pgm
+    pnmrotate -b white `pamtilt crooked.pgm` crooked.pgm >straight.pgm
+</kbd>
+    (then crop, threshold, etc.)
+</pre>
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtilt</b> tries to find the correct angle for untilting
+(de-skewing) a scanned text document.  The output is a single
+floating-point number (the angle in degrees) for use as the argument
+to pnmrotate.
+
+<p>&quot;Document skew&quot; is the name given to what happens when
+you feed a page into an image scanner at an angle: the resulting image
+is tilted.  <b>pamtilt</b> aims to correct that.
+
+<p><b>pamtilt</b> makes three iterations at successively finer
+increments, testing prospective rotation angles to find the best one.
+<b>pamtilt</b> works best for straightening images with strong
+horizontal lines and does poorly with arbitrary photos.  If
+<b>pamtilt</b> has no confidence in its results, it prints the special
+value 00.00; you can check for this or just pass it as a legal
+argument to pnmrotate.
+
+<p><b>pamtilt</b> operates on the first plane of the input image,
+which is either PNM or PAM, and ignores any other planes.  Ordinarily,
+the input is PGM or GRAYSCALE PAM, so there is only one plane.
+
+<p><b>pamtilt</b> works on bilevel (PBM, BLACKANDWHITE PAM) images as
+well as grayscale, but you will minimize artifacts if you scan and
+rotate in grayscale before you apply a threshold to make a bilevel
+image.
+        
+<H2 id="options">OPTIONS</H2>
+
+<p>A few options have general utility:
+
+<DL COMPACT>
+
+<dt><b>-angle=</b><i>maxangle</i>
+
+<dd>
+Assume a maximum tilt angle of <i>maxangle</i> (measured in degrees).
+The default value is sufficient for most images, even those scanned
+somewhat carelessly.
+
+<p>The default is 10.0.
+
+<dt><b>-fast</b>
+
+<dd>
+Skip the third iteration for speed at the expense of accuracy.
+
+<dt><b>-verbose</b>
+<dd>
+Show on Standard Error the measurements computed at each tested angle.
+
+</dl>
+
+<p>Here are some other options you can use to tune the operation of
+<b>pamtilt</b> but they're seldom needed.  The default values
+accommodate a wide variety of input documents.
+
+<dl>
+<DT>
+<B>-quality=</B><i>q</i>
+
+<dd>Require a signal-to-noise ratio of a least <i>q</i> on the first
+iteration to report a valid result.  Larger values reduce the chances
+of obtaining a bogus result at the risk of obtaining no result at all.
+
+<p>The default is 1.0.
+
+<dt><b>-hstep=</b><i>n</i>
+<dd>
+Set the horizontal increment to check every <i>n</i>th column.  This
+value affects both run time and memory requirements.
+
+<p>The default is 11.
+
+<dt><b>-vstep=</b><i>n</i>
+
+<dd>
+Set the vertical increment to check every nth row.  Larger values
+usually work, reducing run time, but they increase the risk of
+incorrect results.
+
+<p>The default is 5.
+
+<dt><b>-dstep=</b><i>n</i>
+
+<dd>
+Set the vertical distance used when checking pixels in a column.  The
+default is intended to minimize the effect of noise along a horizontal
+boundary.
+
+<p>The default is 2.
+
+<dt><b>-astep=</b><i>n</i>
+
+<dd>
+Set the angle increment of the first iteration, in degrees.
+
+<p>The default is 1.0.
+
+</dl>
+
+
+<h2 id="references">REFERENCES</h2>
+
+<p><B>pamtilt</B> implements a somewhat simplified algorithm inspired
+by: "Measuring Document Image Skew and Orientation", by Bloomberg,
+Kopec, and Dasari.  In SPIE Volume 2422, Document Recognition II,
+pages 302-316, February 1995.
+
+<h2 id="seealso">SEE ALSO</h2>
+
+<ul>
+<li><a href="pnmrotate.html"><b>pnmrotate</b></a>
+<li><a href="pgm.html">pgm</a>
+</ul>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamtilt</b> was new in Netpbm 10.30 (October 2005).
+
+<p>Gregg Townsend wrote it and sent it to Bryan Henderson in August
+2005.  Bryan recoded it to fit Netpbm conventions.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtodjvurle.html b/pamtodjvurle.html
new file mode 100644
index 00000000..3a78502e
--- /dev/null
+++ b/pamtodjvurle.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtodjvurle User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtodjvurle</H1>
+Updated: 10 April 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtodjvurle - convert a Netpbm image to DjVu Color RLE format
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtodjvurle</B>
+
+[<b>-transparent</b> <i>color</i>]
+[<I>netpbmfile</I> [<I>rlefile</I>]]
+
+<p>Mininum unique abbreviation of options in acceptable.
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtodjvurle</b> reads a Netpbm image (PNM or PAM equivalent of
+PNM) as input and produces DjVu Color RLE format as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-transparent</b> <i>colorname</i>
+
+<DD>This option indicates which color in the image should be
+considered transparent.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>Default is &quot;white&quot;.
+</DL>
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtodjvurle.html">pbmtodjvurle</A>
+<A HREF="pam.html">pam</A>
+
+<a name="history"></a>
+<H2>HISTORY</H2>
+
+<p><b>pamtodjvurle</b> was new in Netpbm 10.22 (April 2004) but a
+program that did almost the same thing, called <b>ppmtodjvurle</b>,
+was in Netpbm 10.21 (March 2004).  The latter was written and
+contributed to Netpbm by Scott Pakin &lt;scott+pbm@pakin.org&gt;.
+<b>pamtodjvurle</b> uses techniques taken from <b>ppmtodjvurle</b>,
+but no code is copied between them.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtofits.html b/pamtofits.html
new file mode 100644
index 00000000..cebb38e0
--- /dev/null
+++ b/pamtofits.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtofits User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtofits</H1>
+Updated: 25 September 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtofits - convert a Netpbm image into FITS format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtofits</B>
+[<B>-max</B> <I>f</I>]
+[<B>-min</B> <I>f</I>]
+[<I>pamfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtofits</b> reads a PNM or PAM image as input and produces a FITS
+(Flexible Image Transport System) file as output.  The resolution of
+the output file is either 8 bits/pixel, or 16 bits/pixel, depending on
+the value of maxval in the input file.  If the input file is a PBM or
+PGM image, the output file consists of a single plane image (NAXIS =
+2). If instead the input file is a PPM image, the output file will
+consist of a three-plane image (NAXIS = 3, NAXIS3 = 3).
+
+<p>You can find a full description of the FITS format in Astronomy
+&amp; Astrophysics Supplement Series 44 (1981), page 363.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p><b>-min</b> and <b>-max</b> tell <b>pamtofits</b> what &quot;physical
+values&quot; zero and maxval sample values, respectively, in the input
+image represent.  Physical values are a FITS concept.  <b>pamtofits</b>
+sets up the <b>BSCALE</b> and <b>BZERO</b> FITS header cards to indicate
+this information.
+
+<p>The default for <b>-min</b> is 0 and for <b>-max</b> is the maxval,
+which means if you don't specify these options, the FITS physical values
+are in fact the original Netpbm sample values.
+
+<p><b>pamtofits</b> always sets up the FITS header <b>DATAMIN</b> and
+<b>DATAMAX</b> cards to indicate that the highest physical value in
+the image is the one corresponding to the Netpbm maxval and the lowest is
+that corresponding to Netpbm zero.  This isn't really how those cards are
+supposed to be used, since the input image doesn't necessarily contain
+the full possible range of sample values.  It is a conservative
+approximation.
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamtofits</b> was originally <b>pnmtofits</b> and did not handle
+PAM input.  It was extended and renamed in Netpbm 10.30 (October 2005).
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="fitstopnm.html">fitstopnm</A>,
+<A HREF="pam.html">pam</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Wilson H. Bent (<A
+HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>), with
+modifications by Alberto Accomazzi (<A
+HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtogif.html b/pamtogif.html
new file mode 100644
index 00000000..8b1e39ed
--- /dev/null
+++ b/pamtogif.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtogif User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtogif</H1>
+Updated: 25 November 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamtogif - convert a Netpbm image to a GIF image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamtogif</B>
+
+[<B>-interlace</B>]
+
+[<B>-sort</B>]
+
+[<B>-mapfile=</B><I>mapfile</I>]
+
+<BR>
+
+[<B>-transparent=</B>[<B>=</B>]<I>color</I>]
+
+[<b>-alphacolor=</b><i>color</i>]
+
+[<B>-comment=</B><I>text</I>]
+
+[<B>-nolzw</B>]
+
+[<B>-verbose</B>]
+
+<BR>
+
+[<I>netpbmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and its
+value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtogif</b> reads a Netpbm image as input and produces a GIF file
+as output.
+
+<P>This program creates only individual GIF images.  To combine
+multiple GIF images into an animated GIF, use <a
+href="http://www.lcdf.org/gifsicle/"><B>gifsicle</B></a> (not part of
+the Netpbm package).
+
+<P><B>pamtogif</B> creates either an original GIF87 format GIF file or
+the newer GIF89 format.  It creates GIF89 when you request features
+that were new with GIF89, to wit the <B>-transparent</B> or
+<B>-comment</B> options.  Otherwise, it creates GIF87.  Really old GIF
+readers conceivably could not recognize GIF89.
+
+<p>The GIF format is not capable of representing an image with more than
+256 colors in it (it contains a color map with a maximum size of 256).
+If the image you want to convert has more colors than that (<b>ppmhist</b>
+can tell you), you can use <b>pnmquant</b> to reduce it to 256.
+
+<p>If your input image is a PAM with transparency information, <b>ppmtogif</b>
+uses one entry in the GIF colormap specifically for the transparent pixels,
+so you can have at most 255 opaque colors.  In contrast, if you use the
+<b>-transparent</b> option, one of the colors from the input becomes
+transparent, so the limit is still 256.
+
+<p><b>pamtogif</b> was new in Netpbm 10.37 (December 2006).  In older Netpbm,
+use <b>ppmtogif</b>.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-interlace</B>
+
+<DD>
+Produce an interlaced GIF file.
+
+<DT><B>-sort</B>
+
+<DD>
+Produce a GIF file with a color map sorted in a predictable order.
+
+<p>This does <em>not</em> produce the sorted color map which is part
+of the GIF format.  That kind of sorted color map is one where the
+colors are sorted according to how important they are, and the GIF
+header tells the viewer that it is sorted that way.  Its purpose is to
+allow the viewer to use fewer colors than are in the color map if it
+is not capable of displaying all the colors.
+
+<p>What this option produces is a color map sorted by red value, then
+green, then blue.  That can be useful in analyzing GIF images, particularly
+those made with two versions of the program, because it removes some of
+the variability.
+
+
+<DT><B>-mapfile=</B><I>mapfile</I>
+
+<DD>
+
+<P>Use the colors found in the file <I>mapfile</I> to create the
+colormap in the GIF file, instead of the colors from <I>ppmfile</I>.
+<I>mapfile</I> can be any PPM file; all that matters is the colors in
+it.  If the colors in <I>ppmfile</I> do not match those in
+<I>mapfile</I>, <b>pamtogif</b> matches them to a &quot;best
+match.&quot; You can obtain a much better result by using <b>pnmremap</b>
+to change the colors in the input to those in the map file.
+
+<p>The <i>mapfile</i> file is not a palette file, just an image whose
+colors you want to use.  The order of colors in the GIF palette have
+nothing to do with where they appear in the <i>mapfile</i> image, and
+duplication of colors in the image is irrelevant.
+
+<DT><B>-transparent=</B><I>color</I>
+
+<DD>
+<B>pamtogif</B> marks the specified color as transparent in the GIF image.
+
+<P>If you don't specify <B>-transparent</B>, <B>pamtogif</B> does not
+mark any color transparent (except as indicated by the transparency
+information in the input file).
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>If the color you specify is not present in the image, <B>pamtogif</B>
+selects instead the color in the image that is closest to the one you
+specify.  Closeness is measured as a cartesian distance between colors
+in RGB space.  If multiple colors are equidistant, <B>pamtogif</B>
+chooses one of them arbitrarily.
+
+<P>However, if you prefix your color specification with &quot;=&quot;,
+e.g.  <B>-transparent==red</B>, only the exact color you specify will
+be transparent.  If that color does not appear in the image, there
+will be no transparency.  <B>pamtogif</B> issues an information
+message when this is the case.
+
+<p>When you specify <b>-transparent</b>, <b>pamtogif</b> ignores
+explicit transparency information (the &quot;alpha channel&quot;) in
+the input image.
+
+<DT><B>-alpha=</B><I>pgmfile</I>
+
+<DD>There is no <b>-alpha</b> option.  <b>pamtogif</b>'s predecessor had
+such an option because it was not capable of taking PAM input that contains
+a transparency (alpha) plane, so one used this option to supply a
+transparency plane as a separate PGM file.
+
+ This option names a PGM file that contains an alpha mask for the
+image.  <B>pamtogif</B> creates fully transparent pixels wherever the
+alpha mask indicates transparency greater than 50%.  The color of
+those pixels is that specified by the <B>-alphacolor</B>
+option, or black by default.
+
+<P>To do this, <B>pamtogif</B> creates an entry in the GIF colormap in
+addition to the entries for colors that are actually in the image.  It
+marks that colormap entry as transparent and uses that colormap index
+in the output image to create a transparent pixel.
+
+<P> The alpha image must be the same dimensions as the input
+image, but may have any maxval.  White means opaque and black means
+transparent.
+
+<P> You cannot specify both <B>-transparent</B> and <B>-alpha</B>.  
+
+<DT><B>-alphacolor=</B><i>color</i>
+
+<DD>This specifies the foreground color for transparent pixels.  A
+viewer may use the foreground color for a transparent pixel if it
+chooses not to have another color &quot;show through.&quot;.  The
+default is black.
+
+<p>This applies only to pixels that are transparent in the GIF because
+they are transparent in the Netpbm input.  If a GIF pixel is
+transparent because of the <b>-transparent</b> option, the foreground
+color is the color indicated by that option.
+
+<p>Note that in GIF, all transparent pixels have the same foreground
+color.  (There is only one entry in the GIF colormap for transparent
+pixels).
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<DT><B>-comment=</B><I>text</I>
+
+<DD>
+Include a comment in the GIF output with comment text <I>text</I>.
+
+<p>Without this option, there are no comments in the output.
+
+<p>Note that in a command shell, you'll have to use quotation marks around
+<i>text</i> if it contains characters (e.g. space) that would make the shell
+think it is multiple arguments:
+<pre>
+$ pamtogif -comment "this is a comment" &lt;xxx.ppm &gt;xxx.gif
+</pre>
+
+<DT><B>-nolzw</B>
+
+<DD>
+<p>This option is mainly of historical interest -- it involves use of
+a patent that is now expired.
+
+<p>This option causes the GIF output, and thus <B>pamtogif</B>, not to
+use LZW (Lempel-Ziv) compression.  As a result, the image file is
+larger and, before the patent expired, no royalties would be owed to
+the holder of the patent on LZW.  See the section LICENSE below.
+
+<P>LZW is a method for combining the information from multiple pixels into a
+single GIF code.  With the <B>-nolzw</B> option, <B>pamtogif</B>
+creates one GIF code per pixel, so it is not doing any compression and not
+using LZW.  However, any GIF decoder, whether it uses an LZW decompressor
+or not, will correctly decode this uncompressed format.  An LZW decompressor
+would see this as a particular case of LZW compression.
+
+<P>Note that if someone uses an LZW decompressor such as the one in
+<B>giftopnm</B> or pretty much any graphics display program to process
+the output of <B>pamtogif -nolzw </B>, he is then using the LZW
+patent.  But the patent holder expressed far less interest in
+enforcing the patent on decoding than on encoding.
+
+<DT><B>-verbose</B>
+
+<DD>This option causes <b>pamtogif</b> to display information about the
+conversion process and the image it produces.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="giftopnm.html">giftopnm</A></B>,
+
+<B><A HREF="ppmquant.html">ppmquant</A></B>,
+
+<B><A HREF="pngtopnm.html">pngtopnm</A></B>,
+
+<B><A HREF="ppmtogif.html">ppmtogif</A></B>,
+
+<B>gifsicle</B> &lt;<A
+HREF="http://www.lcdf.org/gifsicle">http://www.lcdf.org/gifsicle</A>&gt;,
+
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<B><A HREF="pam.html">pam</A></B>.
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamtogif</b> was new in Netpbm 10.37 (December 2006).  It
+replaced <b>ppmtogif</b>, which created GIF images for Pbmplus/Netpbm
+users since 1989.
+
+<p>The main outward change in the conversion from <b>ppmtogif</b> to
+<b>pamtogif</b> was that <b>pamtogif</b> was able to use transparency
+information (&quot;alpha channel&quot;) in PAM input, whereas with
+<b>ppmtogif</b>, one had to supply the transparency mask in a separate
+pseudo-PGM image (via the <b>-alpha</b> option).
+
+<p>Jef Poskanzer wrote <b>ppmtogif</b> in 1989, and it has always been
+a cornerstone of Pbmplus/Netpbm because GIF is such a popular image
+format.  Jef based the LZW encoding on GIFENCOD by David Rowley &lt;<A
+HREF="mailto:mgardi@watdcsu.waterloo.edu">mgardi@watdcsu.waterloo.edu</A>&gt;.
+Jef included GIFENCOD's GIFCOMPR.C file pretty much whole.  Rowley, in
+turn, adapted the LZW compression code from classic Unix
+<b>compress</b>, which used techniques described in IEEE Computer,
+June 1984.
+
+<p>Jef's <b>ppmtogif</b> notably lacked the ability to use a
+transparency mask with it.  You could create transparent pixels in a
+GIF, but only with the <b>-transparent</b> option, which allowed one
+to specify that all pixels of a certain color in the input were to be
+transparent.  Bryan Henderson added the <b>-alpha</b> option in July
+2001 so you could supply a mask image that indicates exactly which
+pixels are to be transparent, and those pixels could have the same
+color as other opaque ones.
+
+<p>Bryan Henderson added another significant piece of code and
+function in October 2001: the ability to generate a GIF without using
+the LZW patent -- an uncompressed GIF.  This was very important to
+many people at the time because the GIF patent was still in force, and
+this allowed them to make an image that any GIF viewer could display,
+royalty-free.  Bryan adapted code from the Independent Jpeg Group's
+<b>djpeg</b> for that.
+
+<p>There is no code in <b>pamtogif</b> from Jef's original, but Jef
+may still hold copyright over it due to the way in which it evolved.
+Virtually all of the code in <b>pamtogif</b> was written by Bryan
+Henderson and contributed to the public domain.
+
+
+<H2 id="license">LICENSE</H2>
+
+<p>If you use <B>pamtogif</B> without the <B>-nolzw</B> option, you
+are using a patent on the LZW compression method which is owned by
+Unisys.  The patent has expired (in 2003 in the US and in 2004
+elsewhere), so it doesn't matter.  While the patent was in force, most
+people who used <b>pamtogif</b> and similar programs did so without a
+license from Unisys to do so.  Unisys typically asked $5000 for a
+license for trivial use of the patent.  Unisys never enforced the
+patent against trivial users.
+
+<P>Rumor has it that IBM also owns or owned a patent covering
+<B>pamtogif</B>.
+
+<P>A replacement for the GIF format that never required any patents to
+use is the PNG format.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#license">LICENSE</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtohdiff.html b/pamtohdiff.html
new file mode 100644
index 00000000..8bd12dc6
--- /dev/null
+++ b/pamtohdiff.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtohdiff User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtohdiff</H1>
+Updated: 15 April 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtohdiff - convert PAM image to horizontal difference image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtohdiff</B>
+[<I>pamfile</I>]
+[<B>-verbose</B>]
+
+<P>
+Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphens to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pamtohdiff</B> takes a PAM (or PNM) image as input and produced a
+horizontal difference image version of it as output.  A horizontal
+difference image is one where the samples in each row indicate the
+difference between the sample value in the corresponding sample of the
+input image and the sample directly above it (in the previous row) in
+the input image.  The horizontal difference image has the property
+that if a row of the original image is identical to the row above it
+over a long extent, the corresponding row in the horizontal difference
+image will contain all zeroes.  That makes it compress better than the
+original image.
+
+<P>Because the horizontal difference samples can be positive or
+negative, but PAM samples are unsigned integers, the samples in the
+horizontal difference image PAM are defined to be the difference
+modulus the range of the input (maxval + 1).  This doesn't lose any
+information, as it might seem, because: of the two differences that
+could result in the same <b>pamtohdiff</b> output value (e.g. if
+maxval is 99, +20 and -80 would both result in "20" in the output),
+only one is possible in context and the other would result, when
+reconstructing the original image, in a value less than 0 or greater
+than maxval.
+
+<p>Before the modulus operation, the values <b>pamtohdiff</b>
+computes are also biased by half the maxval.  This is to make the
+results easier to inspect visually.  Because of the bias, you can
+display the <b>pamtohdiff</b> output as if it were a PNM image.  As
+long as none of your differences are more than half the maxval, large
+negative differences show up as dark spots, smaller negative
+differences are lighter, zero differences are medium intensity, and
+positive differences are light.  If you want this to work even for
+images that have differences that exceed half the maxval, just use
+<b>ppmdim 50</b> on the original image.  To avoid losing information,
+though, do a <b>pamdepth</b> to double the maxval first.
+
+<p>Note that because of the transfer function just described, a 
+difference of zero, which is most common, is represented by a PAM sample
+value in the output of one half the maxval.
+
+<P>The output PAM has a tuple type of "hdiff".
+
+<P>You can use <B>hdifftopam</B> to recover the original image from a
+horizontal difference image PAM.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="hdifftopam.html">hdifftopam</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Bryan Henderson
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtohtmltbl.html b/pamtohtmltbl.html
new file mode 100644
index 00000000..bbcb6d73
--- /dev/null
+++ b/pamtohtmltbl.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pamtohtmltbl User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtohtmltbl</H1>
+Updated: 29 March 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtohtmltbl - convert pnm/pam visual image to an HTML table
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtohtmltbl</B>
+[<b>-transparent=</b><i>color</i>]
+[<b>-verbose</b>]
+[<I>file</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pamtohtmltbl</b> converts a visual image to an HTML table with one
+cell per pixel.  The cell is empty, but its background color is that of the
+pixel.
+
+<P><i>file</i> is a PBM, PGM, PPM, or PAM file.  If PAM, it must be
+a standard visual image of tuple type RGB, GRAYSCALE, or BLACKANDWHITE, or
+something equivalent with extra higher numbered channels, but
+<b>pamtohtmltbl</b> doesn't check the tuple type; it just assumes.
+
+<P>Note that the more normal way to include a visual image in an HTML
+document is with a &lt;IMG&gt; tag.
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-transparent=</B><i>color</i>
+
+<DD>
+This option indicates that pixels of the specified color are to be transparent
+in the HTML table.  The table cell for a pixel of this color will have no
+background color specified.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+
+<DT><B>-verbose</b>
+
+<dd>This option causes <b>pamtohtmltbl</b> to display messages about the
+conversion process.
+     
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>
+<B><A HREF="pam.html">pam</A></B>
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<P><b>pamtohtmltbl</b> was new in Netpbm 10.15 (April 2003).
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+<p>Alexander B. Ivanov (SSH) wrote a program he called
+<b>pnm2html</b>.  Bryan Henderson adapted it to use the Netpbm
+libraries and handle PAM images and follow Netpbm conventions, and
+named it <b>pamtohtmltbl</b>.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtojpeg2k.html b/pamtojpeg2k.html
new file mode 100644
index 00000000..c0396144
--- /dev/null
+++ b/pamtojpeg2k.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtojpeg2k User Manual</TITLE></HEAD>
+<BODY>
+<H1>PAMTOJPEG2K</H1>
+Updated: 27 October 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pamtojpeg2k - convert PAM/PNM image to a JPEG-2000 code stream
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtojpeg2k</B>
+[<B>-imgareatlx=</B><I>column</I>]
+[<B>-imgareatly=</B><I>row</I>]
+[<B>-tilegrdtlx=</B><I>column</I>]
+[<B>-tilegrdtly=</B><I>row</I>]
+[<B>-tilewidth=</B><I>columns</I>]
+[<B>-tileheight=</B><I>rows</I>]
+[<B>-prcwidth=</B><I>columns</I>]
+[<B>-prcheight=</B><I>rows</I>]
+[<B>-cblkwidth=</B><I>columns</I>]
+[<B>-cblkheight=</B><I>rows</I>]
+[<B>-mode=</B>{<B>integer</B>|<B>int</B>|<B>real</B>}]
+[<B>-compression=</B><I>ratio</I>]
+[<B>-ilyrrates=</B><I>ratestring</I>]
+[<B>-numrlvls=</B><I>number</I>]
+[<B>-progression=</B>{<B>lrcp</B>|<B>rlcp</B>|<B>rpcl</B>|<B>pcrl</B>|<B>cprl</B>}]
+[<B>-numgbits=</B><I>number</I>]
+[<B>-nomct</B>]
+[<B>-sop</B>]
+[<B>-eph</B>]
+[<B>-lazy</B>]
+[<B>-termall</B>]
+[<B>-segsym</B>]
+[<B>-vcausal</B>]
+[<B>-pterm</B>]
+[<B>-resetprob</B>]
+[<B>-verbose</B>]
+[<B>-debuglevel=</B><I>number</I>]
+<I>filename</I>
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pamtojpeg2k</b> converts the named PBM, PGM, PPM, or PAM file,
+or Standard Input if no file is named, to a JPEG-2000 code stream
+(JPC) file on Standard Output.
+
+<P>The JPEG-2000 specification specifies two different formats: JP2
+and JPEG-2000 code stream (JPC).  JP2 represents a visual image quite
+specifically, whereas JPC is a more or less arbitrary array of codes.
+<B>pamtojpeg2k</B> can't produce a JP2, but the JPC image that
+<b>pamtojpeg2k</b> produces is very similar to a JP2 if the input is a
+PBM, PGM, or PPM image or equivalent PAM image.  One difference is
+that that RGB intensity values in a JP2 are SRGB values, while
+<b>pamtojpeg2k</b> produces ITU-R Recommedation BT.709 values.  Those
+are very similar, but not identical.  Another difference is that a JP2
+can contain extra information about an image that JPC cannot.
+
+<p>When the input is a PAM image other than a PBM, PGM, or PPM equivalent,
+the JPC raster produced contains whatever the PAM raster does.  It can have
+any number of planes with any meanings; the planes are in the same order in
+the JPC output as in the PAM input.
+
+<p>A JPC image has a "precision," which is the number of bits used for
+each code (in Netpbm lingo, "sample").  Actually, it has a separate
+precision for each component.  <b>pamtojpeg2k</b> uses for the
+precision of every component the least number of bits that can
+represent the maxval of the input image.  A JPC image does not have an
+independent concept of maxval; the maxval of a JPC sample is the
+maximum value that the number of bits specified by the precision can
+represent in pure binary code.  E.g. if the precision is 4, the maxval
+is 15.  <b>pamtojpeg2k</b> does of course scale the sample values from
+the input maxval to the output maxval.  Example: The input maxval is
+99.  This means JPC precision is 7 bits and the JPC maxval is 127.  A
+sample value of 33 in the input becomes a sample value of 43 in the
+output.
+
+<P><b>pamtojpeg2k</b> generates the JPC output with the <a
+href="http://www.ece.uvic.ca/~mdadams/jasper/">Jasper JPEG-2000
+library</a>.  See documentation of the library for details on what
+<b>pamtojpeg2k</b> produces.  Note that the Jasper library contains
+facilities for reading PNM images, but <b>pamtojpeg2k</b> does not use
+those.  It uses the Netpbm library instead.  Note that the makers of
+the Jasper library write it "JasPer," but Netpbm documentation follows
+standard American English typography rules, which don't allow that
+kind of capitalization.
+
+<P>Use <b>jpeg2ktopam</b> to convert in the other direction.
+
+<p>The program <b>jasper</b>, which is packaged with the Jasper 
+JPEG-2000 library, also converts between JPEG-2000 and PNM formats.
+Because it's packaged with the library, it may exploit it better, 
+especially recently added features.  However, since it does not use the
+Netpbm library to read and write the Netpbm formats, it doesn't do as
+good a job on that side.
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+Most of the options are identical in name and function to options that the
+Jasper library JPC encoder subroutine takes.  See
+<a href="http://www.ece.uvic.ca/~mdadams/jasper/">Jasper documentation</a>
+for details.  Here, we document only options that are not direct analogs
+of Jasper options.
+
+<DL COMPACT>
+
+<DT><B>-compression=</b><i>ratio</i>
+
+<DD><i>ratio</i> is a floating point number that specifies the compression
+ratio.  <b>pamtojpeg2k</b> will adjust quality as necessary to ensure that
+you get this compression ratio.  E.g. 4 means the output will be about
+one fourth the size in bytes of the input file.
+
+<p>The compression ratio must be at least 1.  The default is 1, which means
+the output has all the quality of the input -- the conversion is lossless.
+
+<p>Note that though Jasper library takes a compression factor, this
+option specifies a compression ratio.  The compression factor is the
+multiplicative inverse of (1 divided by) the compression ratio.
+
+<DT><B>-verbose</b>
+
+<DD>This option causes <b>pamtojpeg2k</b> to issue informational messages about
+the conversion process.
+
+<DT><B>-debuglevel</b>=<i>number</i>
+
+<DD>This option controls debug messages from the Jasper library.  
+<b>pamtojpeg2k</b> passes <i>number</i> as the debug level to the Jasper
+JPC encoder.
+
+</DL>
+     
+<A NAME="examples">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<P>This example compresses losslessly.
+
+<pre>
+  pamtojpeg2k myimg.ppm &gt;myimg.jpc
+</pre>
+
+<b>jpeg2ktopam</b> will recreate myimg.ppm exactly.
+
+<p>This example compresses the file to one tenth its original size, throwing
+away information as necessary.
+
+<pre>
+  pamtojpeg2k -compression=10 myimg.pgm &gt;myimg.jpc
+</pre>
+
+
+<A NAME="jpeg2000"></a>
+<H2>ABOUT JPEG-2000</H2>
+
+<p>JPEG-2000 is a format that compresses a visual image (or a similar set of
+data) into a minimal number of bytes for storage or transmission.  In that,
+its goal is similar to JPEG.  It has two main differences from JPEG.  
+
+<p>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
+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.
+
+<p>The second difference is that with JPEG-2000, you decide how much
+compression you want and the compressor adjusts the quality to meet your
+requirement, whereas with JPEG, you decide how much quality you want
+and the compressor adjusts the size of the output to meet your requirement.
+I.e. with JPEG-2000, the quality of the result depends on the compressibility
+of the input, but with JPEG, the <em>size</em> of the result depends on
+the compressibility of the input.
+
+<p>With JPEG-2000, you can specify lossless compression, thus making it 
+compete with GIF and PNG.  With standard JPEG, you always lose something.
+(There are rumored to be variations of JPEG around that are lossless,
+though).
+
+<p>JPEG is much older than JPEG-2000 and far more popular.  JPEG is one of
+the half dozen most popular graphics formats and virtually all graphics
+facilities understand it.  JPEG-2000 is virtually unknown.
+
+<p>There is no compatibility between JPEG and JPEG-2000.  Programs that 
+read JPEG do not automatically read JPEG-2000 and vice versa.
+
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="jpeg2ktopam.html">jpeg2ktopam</A></B>,
+<B><A HREF="pnmtojpeg.html">pnmtopeg</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+
+<H2>History</H2>
+
+<p><b>pamtojpeg2k</b> was added to Netpbm in Release 10.12 (November 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#jpeg2000">ABOUT JPEG-2000</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtopfm.html b/pamtopfm.html
new file mode 100644
index 00000000..5068c574
--- /dev/null
+++ b/pamtopfm.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtopfm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtopfm</H1>
+Updated: 10 April 2004
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="name">&nbsp;</A>
+<H2>NAME</H2>
+pamtopfm - Convert Netpbm image to PFM (Portable Float Map)
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>pamtopfm</B>
+[<b>-endian=</b>{<b>big</b>|<b>little</b>}]
+[<b>-scale=</b><i>float</i>]
+[<I>imagefile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtopfm</b> reads a Netpbm image (PNM or PAM) and converts it
+to a PFM (Portable Float Map) image.
+
+<p>The PFM (Portable Float Map) image format is a lot like PPM, but uses
+floating point numbers with no maxval to achieve a High Dynamic Range
+(HDR) format.  That means it doesn't have a concept of absolute color
+and it can represent generic light intensity information rather than
+just visual information like PPM does.  For example, two pixels that
+are so close in intensity that the human eye cannot tell them apart
+are not visually distinct, so a visual image format such as PPM would
+have no reason to use different sample values for them.  But an HDR format
+would.
+
+<p>There are details of the PFM format in the <a href="pfm.html">PFM
+Format Description</a>.
+
+<p><a href="http://www.debevec.org/HDRShop">USC's HDRShop
+program</a> and a program called Lefty use it.
+
+<b>pamtopfm</b> creates a color PFM image if its input is RGB (PPM)
+and a non-color PFM otherwise.
+
+<p>Use <a href="pfmtopam.html"><b>pfmtopam</b></a> to convert a PFM
+image to Netpbm format.
+
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-scale=</b><i>float</i>
+
+<DD>
+     <P>This specifies the scale factor of the PFM image.  
+     Scale factor is a component of the PFM format.
+     Default is 1.0.
+
+<DT><B>-endian=</b>{<b>big</b>|<b>little</b>}
+
+<DD>
+     <P>This specifies the endianness of the PFM image.  The samples
+     in the raster of a PFM image are 4 byte IEEE floating point
+     numbers.  A parameter of the IEEE format, and therefore the PFM
+     format, is endianness, i.e. whether the specified bytes are
+     ordered from low addresses to high addresses or vice versa.
+
+     <p><b>big</b> means big endian -- the natural ordering;
+     <b>little</b> means little-endian, the Intel-friendly ordering.
+
+     <p>Default is whichever endianness the machine on which <b>pamtopfm</b>
+     runs uses internally, which results in the faster execution.
+
+</DL>
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="index.html">Netpbm</A></B>,
+<B><A HREF="pfmtopam.html">pfmtopam</A></B>,
+<B><A HREF="pam.html">pam</A></B>
+
+<A NAME="history"></a>
+<h2>HISTORY</h2>
+
+<p><b>pamtopfm</b> was added to Netpbm in Release 10.22 (April 2004).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtopnm.html b/pamtopnm.html
new file mode 100644
index 00000000..67657ae7
--- /dev/null
+++ b/pamtopnm.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtopnm</H1>
+Updated: 03 August 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+pamtopnm - convert PAM image to PBM, PGM, or PPM
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamtopnm</B>
+
+[<B>-assume</B>]
+
+[<I>pnmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtopnm</b> reads a PAM image as input and produces an
+equivalent PBM, PGM, or PPM (i.e. PNM) image, whichever is most
+appropriate, as output.
+
+<P><B>pamtopnm</B> assumes the PAM image represents the information
+required for a PBM, PGM, or PPM image if its tuple type is
+&quot;BLACKANDWHITE&quot;, &quot;GRAYSCALE&quot;, or &quot;RGB&quot;
+and its depth and maxval are appropriate.  If this is not the case,
+<B>pamtopnm</B> fails.
+
+<P>However, you can override the tuple type requirement with the
+<B>-assume</B> option.
+
+<P>As with any Netpbm program that reads PAM images, <B>pamtopnm</B>
+also reads PNM images as if they were PAM.  In that case,
+<B>pamtopnm</B>'s functions reduces to simply copying the input to the
+output.  But this can be useful in a program that doesn't know whether
+its input is PAM or PNM but needs to feed it to a program that only
+recognizes PNM.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-assume</B>
+
+<DD>When you specify <B>-assume</B>, you tell <B>pamtopnm</B> that you
+personally vouch for the fact that the tuples contain the same data as
+belongs in the channels of a PBM, PGM, or PPM file.  The depth must
+still conform, though, so to truly force a conversion, you may have to
+run the input through <B>pamchannel</B> first.  But be careful with
+<B>-assume</B>.  When you -assume, you make an -ass of u and me.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pbmtopgm.html">pbmtopgm</A></B>,
+<B><A HREF="pamditherbw.html">pamditherbw</A></B>,
+<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>,
+<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamtopnm</b> was new, along with the PAM format, in Netpbm
+9.7 (August 2000).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtosvg.html b/pamtosvg.html
new file mode 100644
index 00000000..752473b8
--- /dev/null
+++ b/pamtosvg.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtosvg User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtosvg</H1>
+Updated: 23 April 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pamtosvg - convert a Netpbm image to a SVG (Scalable Vector Graphics) image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamtosvg</B>
+
+[<b>-background-color=</b><i>colorname</i>]
+[<b>-centerline</b>]
+[<b>-corner-threshold=</b><i>angle</i>]
+[<b>-corner-always-threshold=</b><i>angle</i>]
+[<b>-corner-surround=</b><i>integer</i>]
+[<b>-tangent-surround=</b><i>integer</i>]
+[<b>-error-threshold=</b><i>float</i>]
+[<b>-filter-iterations=</b><i>count</i>]
+[<b>-line-reversion-threshold=</b><i>float</i>]
+[<b>-line-threshold=</b><i>float</i>]
+[<b>-width-factor=</b><i>float</i>]
+[<b>-preserve-width</b>]
+[<b>-remove-adjacent-corners</b>]
+[<b>-log</b>]
+[<b>-report-progress</b>]
+
+[<I>pnmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtosvg</b> reads a PNM image as input and produce an SVG
+(Scalable Vector Graphics) image as output.  Thus, it traces curves
+in the input image and creates a set of splines that represent the
+image.
+
+<p>SVG is a vector image format, which means it describes curves that
+compose an image.  By contrast, PNM is a raster format, which means it
+describes dots that compose an image.  The main practical difference
+between the two types is that you can scale vector images better.  A
+vector image also takes a lot less data to describe an image if the
+image is composed of simple curves.
+
+<p>That means it is really an understatement to say that <b>pamtosvg</b>
+is an image format converter.  It's really an image tracer.  Its main job
+is to trace a raster image and find the lines in it.  It then represents
+its findings in SVG format.
+
+<p><b>pamtosvg</b> does the same kind of thing that StreamLine,
+CorelTrace, and Autotrace do.  It is in fact derived from Autotrace.
+
+<p>SVG is a gigantic format, capable of amazing things.  <b>pamtosvg</b>
+exploits only a morsel of it.  The SVG image produced by <b>pamtosvg</b>
+consists of a single &lt;svg&gt; element, which has a &quot;width&quot;
+attribute and a &quot;height&quot; attribute.  The value of that element
+is composed of &lt;path&gt; elements.  That's it.
+
+<p>In the SVG output, distances are unitless, with one unit corresponding
+to one pixel of the input.
+
+<p>So that <b>pamtosvg</b> will find simple curves in the image, you
+may want to remove speckles from it with <b>pbmclean</b> and consolidate
+multiple shades into single colors with <b>pnmquant</b> first.
+
+<p>For more information on SVG, see <a
+href="http://www.w3.org/Graphics/SVG/">the Worldwide Web Consortium's
+SVG web page</a>.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<dt><b>-background-color=</b><i>colorname</i>
+
+<dd>Treat the specified color as the background color and ignore it.
+
+<p>If you don't specify this option, <b>pamtosvg</b> does not recognize
+any background color.
+
+<P>Specify the color (<i>colorname</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<dt><b>-centerline</b>
+
+<dd>Trace an object's centerline.
+
+<p>By default, <b>pamtosvg</b> traces an object's outline.
+
+<dt><b>-corner-always-threshold=</b><i>angle</i>
+
+<dd>Consider any angle at a pixel which falls below angle <i>angle</i>
+(in decimal floating point degrees) as a corner, even if it is
+bordered by other corner pixels.  Default is 60 degrees.
+
+<dt><b>-corner-surround=</b><i>integer</i>
+
+<dd>Consider the specified number of pixels on either side of a
+point when determining if that point is a corner.  Default is 4.
+
+<dt><b>-corner-threshold=</b><i>angle</i>
+
+<dd>Consider any pixel which forms an angle with its predecessors and
+successors that is smaller than <i>angle</i> (in decimal floating
+point degrees) as a corner.  Default is 100.
+
+<dt><b>-error-threshold=</b><i>float</i>
+
+<dd>Subdivide fitted curves that are offset by a number of pixels
+exceeding the specified number.  Default is 2.0.
+
+<dt><b>-filter-iterations=</b><i>integer</i>
+
+<dd>Smooth the curve the specified number of times prior to fitting
+Default is 4.
+
+<dt><b>-line-reversion-threshold=</b><i>float</i>
+
+<dd>When a spline is closer to a straight line than the specified real
+number weighted by the square of the curve length, maintain it as a
+straight line, even if it is a list with curves.
+
+<p>Default is .01.
+
+<dt><b>-line-threshold=</b><i>float</i>
+
+<dd>If a spline does not deviate from the straight line defined by its
+endpoints by more than the specified number of pixels, then treat it
+as a straight line.
+
+<p>Default is 1.
+
+<dt><b>-log</b>
+
+<dd>Send a detailed progress report to the file named
+<i>inputfile</i><b>.log</b>, where <i>inputfile</i> is the root of the
+input file name, or &quot;pamtosvg&quot; if the input is from 
+Standard Input or a file with a weird name.
+
+<dt><b>-preserve-width</b>
+
+<dd>Preserve line width prior to thinning.  Meaningful only with
+<b>-centerline</b>.
+
+<dt><b>remove-adjacent-corners</b>
+
+<dd>Remove adjacent corners.
+
+<dt><b>-report-progress</b>
+
+<dd>Report the progress of the tracing to Standard Error as it happens.
+
+<dt><b>-tangent-surround</b>
+
+<dd>Consider the specified number of points to either side of a point
+when computing the tangent at that point.  Default is 3.
+
+<dt><b>-width-factor</b>
+
+<dd>Weight factor for fitting the linewidth.
+
+</DL>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="pbmclean.html">pbmclean</A></B>,
+<A HREF="pnm.html">pnm</A>,
+<a href="http://autotrace.sourceforge.net">Autotrace</a>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamtosvg</b> was added to Netpbm in Version 10.33 (March 2006).
+
+<p>The core of <b>pamtosvg</b> -- the curve tracing logic -- was taken
+nearly unmodified from Martin Weber's Autotrace program.  That program
+duplicates a lot of Netpbm function, so <b>pamtosvg</b> is a much leaner
+program.
+
+<p>Bryan Henderson created <b>pamtosvg</b>, basically just by adapting
+Autotrace to Netpbm.
+
+<p>Autotrace was first released in 2000 and updates were released
+through 2002.  A number of people wrote the code in it, but Masatake
+Yamato and Martin Weber appear to be the principal creators of it.
+
+<p>As of June 2006, there was a <a
+href="http://autotrace.sourceforge.net">Sourceforge project</a> for it.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtotga.html b/pamtotga.html
new file mode 100644
index 00000000..3f9ddce0
--- /dev/null
+++ b/pamtotga.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtotga User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtotga</H1>
+Updated: 21 July 2002
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtotga - convert a Netpbm image to a TrueVision Targa file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtotga</B>
+[<B>-mono|-cmap|-rgb</B>]
+[<B>-norle</B>]
+[<I>pamfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or equals signs between an option name and its
+value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtotga</b> reads a PBM, PGM, PPM, or PAM image as input and
+produces a TrueVision Targa file as output.  The PAM image may be
+either a BLACKANDWHITE, GRAYSCALE, RGB, or RGB_ALPHA image.
+
+<p>To create a TGA image with transparency (i.e. with an alpha mask),
+use RGB_ALPHA PAM input.  Some Netpbm programs that generate images with
+alpha masks generate them in that format.  For another way to create
+the proper input stream, see <a href="pamstack.html"><b>pamstack</b></a>.
+
+<p>It is unclear that anything except <b>pamtotga</b> knows about TGAs
+with transparency.  The history behind this feature of <b>pamtotga</b>
+is not clear.  The format <b>pamtotga</b> produces is simply the same
+as an ordinary RGB TGA image except with a 4th plane added for
+transparency.  The PixelSize field of the TGA header specifies 32 bits
+instead of 24 and the raster has an extra byte added to each pixel, at
+the tail end.  The value of that byte has the same meaning as in a PAM
+image with maxval 255.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-cmap</B>
+<DD>
+Make output Targa file of type 24 bit colormapped.  Input must contain no
+more than 256 distinct colors. 
+
+<DT><B>-mono</B>
+<DD>
+Make output Targa file of type 8 bit monochrome.  Input must be PBM or PGM
+or a PAM with BLACKANDWHITE or GRAYSCALE tuple type.
+See <b>-cmap</b>.
+
+<p>You may specify at most one of <b>-mono</b>, <b>-cmap</b>, and
+<b>-rgb</b>.  If you specify neither, the default image type is the
+most highly constrained compatible type is used, where monochrome is
+more constrained than colormapped which is in turn more constrained
+than unmapped.
+
+<DT><B>-rgb</B>
+<DD>
+Make output Targa file of type 24 bit unmapped color.  See <b>-cmap</b>.
+
+<DT><B>-norle</B>
+<DD>Do not use run-length encoding in the output Targa file.
+Run-length encoded files are smaller, but Some Targa readers can't
+read run-length encoded files.
+
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="tgatoppm.html">tgatoppm</A>,
+<A HREF="pnmquant.html">pnmquant</a>,
+<A HREF="pamstack.html">pamstack</a>,
+<A HREF="pam.html">pam</A>
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="history"></A>
+<H2>HISTORY</H2>
+
+<p>This program was called <b>ppmtotga</b> until Netpbm 10.6 (July 2002).
+That was always a misnomer, though, because a PPM class program would not be
+able to tell the difference between PGM and PPM input (it would all look like
+PPM), and thus could not choose the output Targa image type based on the type
+of the input.  Netpbm 10.6 also added the ability to handle an alpha channel,
+so it became a PAM class program.
+
+<p>In Netpbm 10.15 (April 2003), the program became the first in the
+Netpbm package to recognize an alpha channel in a PAM.  It recognized
+tuple type &quot;RGBA&quot;.  But when this kind of PAM image was later
+added to the PAM specification, it was specified with tuple type
+&quot;RGB_ALPHA&quot;.  So in Netpbm 10-26 (January 2005), <b>pamtotga</b>
+changed to recognize &quot;RGB_ALPHA&quot; instead of &quot;RGBA&quot;.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Mark Shand and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtotiff.html b/pamtotiff.html
new file mode 100644
index 00000000..0df659f7
--- /dev/null
+++ b/pamtotiff.html
@@ -0,0 +1,510 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtotiff User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamtotiff</H1>
+Updated: 27 March 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtotiff - convert a Netpbm image to a TIFF file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtotiff</B>
+
+[<B>-none</B> | <B>-packbits</B> | <B>-lzw</B> | <B>-g3</B> | <B>-g4</B>
+| <B>-flate</B> | <B>-adobeflate</B>]
+
+[<B>-2d</B>]
+
+[<B>-fill</B>]
+
+[<B>-predictor=</B><I>n</I>]
+
+[<B>-msb2lsb</B>|<B>-lsb2msb</B>]
+
+[<B>-rowsperstrip=</B><I>n</I>]
+
+[<B>-minisblack</B>|<B>-miniswhite</B>|<B>mb</B>|<b>mw</b>]
+
+[<B>-truecolor</B>]
+
+[<B>-color</B>]
+
+[<B>-indexbits=</B><I>bitwidthlist</I>]
+
+<br>
+[<B>-xresolution=</b><i>xres</i>]
+
+[<B>-yresolution=</b><i>yres</i>]
+
+<br>
+[<B>-resolutionunit=</b>{<b>inch</b> | <b>centimeter</b> | <b>none</b> |
+<b>in</b> | <b>cm</b> | <b>no</b>}]
+
+[<B>-indexbits=</b>[<b>1</b>[<b>2</b>[<b>4</b>[<b>8</b>]]]]]
+
+[<b>-append</b>]
+
+[<b>-tag=</b><i>taglist</i>]
+
+[<I>pamfile</I>]
+
+<P>You can use the minimum unique abbreviation of the options.  You
+can use two hyphens instead of one.  You can separate an option name
+from its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtotiff</b> reads a PNM or PAM image as input and produces a TIFF file
+as output.
+
+<p>Actually, it handles multi-image Netpbm streams, producing multi-image
+TIFF streams (i.e. a TIFF stream with multiple
+&quot;directories&quot;).  But before Netpbm 10.27 (March 2005), it
+ignored all but the first Netpbm image in the input stream.
+
+<h3>The Output File</h3>
+
+<P>The output goes to Standard Output.  <b>pamtotiff</b> approaches
+this output file differently from Unix and Netpbm convention.  This is
+entirely due to <b>pamtotiff</b>'s use of the TIFF library to do all
+TIFF output.
+
+<ul>
+<li>The output file must be seekable.  <b>pamtotiff</b> does not
+write it sequentially.  Therefore, you can't use a pipe; you can't
+pipe the output of <b>pamtotiff</b> to some other program.  But any
+regular file should work.
+
+<li>If the output file descriptor is readable, you must either specify
+<b>-append</b> so as to add to the existing file, or make sure the
+file is empty.  Otherwise, <b>pamtotiff</b> will fail with an
+unhelpful message telling you that a TIFF library function failed to
+open the TIFF output stream.
+
+<li>If you are converting multiple images (your input stream contains
+multiple images), the output file must be both readable and writable.
+
+</ul>
+
+<p>If you're using a Unix command shell to run <b>pamtotiff</b>, you
+use facilities of your shell to set up Standard Output.  In Bash,
+for example, you would set up a write-only Standard Output to the
+file /tmp/myimage.tiff like this:
+
+<pre>
+<tt>
+    $ pamtotiff myimage.pnm &gt;/tmp/myimage.tiff
+</tt>
+</pre>
+
+In Bash, you would set up a read/write Standard Output to the file
+/tmp/myimage.tiff like this:
+
+<pre>
+<tt>
+    $ pamtotiff myimage.pnm 1&lt;&gt;/tmp/myimage.tiff
+</tt>
+</pre>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<h3>Compression</h3>
+
+<P>By default, <B>pamtotiff</B> 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
+play.
+
+<p>Before Netpbm 8.4 (April 2000), the default was to use LZW compression.
+But then new releases of the TIFF library started omitting the LZW
+compression capability due to concern about patents on LZW.  So
+since then, the default has been no compression.  The LZW patents have
+now expired and new TIFF libraries do LZW, but the <b>pamtotiff</b>
+behavior remains the same for compatibility with older TIFF libraries
+and applications of <b>pamtotiff</b>.
+
+<P>The <B>-none</B>, <B>-packbits</B>, <B>-lzw</B>, <B>-g3</B>,
+<B>-g4</B>, <B>-flate</B>, and <B>-adobeflate</B> options are used to
+override the default and set the compression scheme used in creating
+the output file.  The CCITT Group 3 and Group 4 compression algorithms
+can be used only with bilevel data.  The <B>-2d</B> and <B>-fill</B>
+options are meaningful only with Group 3 compression: <B>-2d</B>
+requests 2-dimensional encoding, while <B>-fill</B> requests that each
+encoded scanline be zero-filled to a byte boundary.  The
+<B>-predictor</B> option is meaningful only with LZW compression: a
+predictor value of 2 causes each scanline of the output image to
+undergo horizontal differencing before it is encoded; a value of 1
+forces each scanline to be encoded without differencing.  By default,
+<B>pamtotiff</B> creates a TIFF file with msb-to-lsb fill order.  The
+<B>-msb2lsb</B> and <B>-lsb2msb</B> options are used to override the
+default and set the fill order used in creating the file.
+
+<P>With some older TIFF libraries, <B>-lzw</B> doesn't work because
+the TIFF library doesn't do LZW compression.  This is because of
+concerns about Unisys's patent on LZW which was then in force.
+Actually, with very old TIFF libraries, <b>-lzw</b> works because no
+distributors of the TIFF library were sensitive yet to the patent
+issue.
+
+<p><b>-flate</b> chooses &quot;flate&quot; compression, which is the
+patent-free compression common in the Unix world implemented by the 
+&quot;Z&quot; library.  It is what the PNG format uses.
+
+
+<h3>Fill Order</h3>
+<p>The <b>-msb2lsb</b> and <b>lsb2msb</b> options control the fill order.
+
+<P>The fill order is the order in which pixels are packed into a byte in
+the Tiff raster, in the case that there are multiple pixels per byte.
+msb-to-lsb means that the leftmost columns go into the most
+significant bits of the byte in the Tiff image.  However, there is
+considerable confusion about the meaning of fill order.  Some believe
+it means whether 16 bit sample values in the Tiff image are
+little-endian or big-endian.  This is totally erroneous (The
+endianness of integers in a Tiff image is designated by the image's
+magic number).  However, ImageMagick and older Netpbm both have been known
+to implement that interpretation.  2001.09.06.
+
+<P>If the image does not have sub-byte pixels, these options have no
+effect other than to set the value of the FILLORDER tag in the Tiff
+image (which may be useful for those programs that misinterpret the
+tag with reference to 16 bit samples).
+
+<h3>Color Space</h3>
+
+<P><B>-color</B> tells <B>pamtotiff</B> to produce a color, as
+opposed to grayscale, TIFF image if the input is PPM, even if it
+contains only shades of gray.  Without this option, <B>pamtotiff</B>
+produces a grayscale TIFF image if the input is PPM and contains only
+shades of gray, and at most 256 shades.  Otherwise, it produces a
+color TIFF output.  For PBM and PGM input, <B>pamtotiff</B> always
+produces grayscale TIFF output and this option has no effect.
+
+<P>The <B>-color</B> option can prevent <B>pamtotiff</B> from making
+two passes through the input file, thus improving speed and memory
+usage.  See <a href="#multipass">Multiple Passes</a>.
+
+<P><B>-truecolor</B> tells <B>pamtotiff</B> to produce the 24-bit RGB
+form of TIFF output if it is producing a color TIFF image.  Without
+this option, <B>pamtotiff</B> produces a colormapped (paletted) TIFF
+image unless there are more than 256 colors (and in the latter case,
+issues a warning).
+
+<P>The <B>-truecolor</B> option can prevent <B>pamtotiff</B> from
+making two passes through the input file, thus improving speed and
+memory usage.  See <a href="#multipass">Multiple Passes</a>.
+
+<P>The <B>-color</b> and <b>-truecolor</b> options did not exist
+before Netpbm 9.21 (December 2001).
+
+<P>If <B>pamtotiff</B> produces a grayscale TIFF image, this option
+has no effect.
+
+<P>The <B>-minisblack</B> and <B>-miniswhite</B> options force the
+output image to have a &quot;minimum is black&quot; or &quot;minimum
+is white&quot; photometric, respectively.  If you don't specify
+either, <B>pamtotiff</b> uses minimum is black except when using Group
+3 or Group 4 compression, in which case <B>pamtotiff</B> follows CCITT
+fax standards and uses &quot;minimum is white.&quot; This usually
+results in better compression and is generally preferred for bilevel
+coding.
+
+<P>Before February 2001, <B>pamtotiff</B> always produced
+&quot;minimum is black,&quot; due to a bug.  In either case,
+<B>pamtotiff</B> sets the photometric interpretation tag in the TIFF
+output according to which photometric is actually used.
+
+<P>The <B>-indexbits</B> option is meaningful only for a colormapped
+(paletted) image.  In this kind of image, the raster contains values
+which are indexes into a table of colors, with the indexes normally
+taking less space that the color description in the table.
+<B>pamtotiff</B> can generate indexes of 1, 2, 4, or 8 bits.  By
+default, it will use 8, because many programs that interpret TIFF
+images can't handle any other width.
+
+<P>But if you have a small number of colors, you can make your image
+considerably smaller by allowing fewer than 8 bits per index, using the
+<B>-indexbits</B> option.  The value is a comma-separated list of the
+bit widths you allow.  <B>pamtotiff</B> chooses the smallest width you allow
+that allows it to index the entire color table.  If you don't allow any
+such width, <B>pamtotiff</B> fails.  Normally, the only useful value for
+this option is <B>1,2,4,8</B>, because a program either understands the 8
+bit width (default) or understands them all.
+
+<P>In a Baseline TIFF image, according to the 1992 TIFF 6.0
+specification, 4 and 8 are the only valid widths.  There are no formal
+standards that allow any other values.
+
+<P>This option was added in June 2002.  Before that, only 8 bit indices were
+possible.
+
+<h3>Extra Tags</h3>
+
+<p>There are lots of tag types in the TIFF format that don't correspond to
+any information in the PNM format or to anything in the conversion process.
+For example, a TIFF_ARTIST tag names the artist who created the image.
+
+<p>You can tell <b>pamtotiff</b> explicitly to include tags such as this
+in its output with the <b>-tag</b> option.  You identify a list of tag
+types and values and <b>pamtotiff</b> includes a tag in the output for
+each item in your list.
+
+<p>The value of <b>-tag</b> is the list of tags, like this example:
+
+<pre>
+<code>
+    -tag=subfiletype=reducedimage,documentname=Fred,xposition=25
+</code>
+</pre>
+
+<p>As you see, it is a list of tag specifications separated by commas.
+Each tag specification is a name and a value separated by an equal
+sign.  The name is the name of the tag type, except in arbitrary
+upper/lower case.  One place to see the names of TIFF tag types is in
+the TIFF library's <b>tiff.h</b> file, where there is a macro defined
+for each consisting of &quot;TIFF_&quot; plus the name.  E.g. for
+the SUBFILETYPE tag type, there is a macro TIFF_SUBFILETYPE.
+
+<p>The format of the value specification for a tag (stuff after the
+equal sign) depends upon what kind of value the tag type has:
+
+<ul>
+<li>Integer: a decimal number
+
+<li>Floating point number: a decimal number
+
+<li>String: a string
+
+<li>Enumerated (For example, a 'subfiletype' tag takes an enumerated
+value.  Its possible values are REDUCEDIMAGE, PAGE, and MASK.): The
+name of the value.  You can see the possible value names in the TIFF
+library's <b>tiff.h</b> foile, where there is a macro defined for each
+consisting of a qualifier plus the value name.  E.g. for the
+REDUCEDIMAGE value of a SUBFILETYPE tag, you see the macro
+FILETYPE_REDUCEDIMAGE.
+
+<p>The TIFF format assigns a unique number to each enumerated value and
+you can specify that number, in decimal, as an alternative.  This is useful
+if you are using an extension of TIFF that <b>pamtotiff</b> doesn't
+know about.
+
+</ul>
+
+<p>If you specify a tag type with <b>-tag</b> that is not independent
+of the content of your PNM source image and <b>pamtotiff</b>'s
+conversion process (i.e. a tag type in which <b>pamtotiff</b> is
+interested), <b>pamtotiff</b> fails.  For example, you cannot specify
+an IMAGEWIDTH tag with <b>-tag</b>, because <b>pamtotiff</b> generates
+an IMAGEWIDTH tag that gives the actual width of the image.
+
+<p><b>-tag</b> was new in Netpbm 10.31 (December 2005).
+
+<h3>Other</h3>
+
+<P>You can use the <B>-rowsperstrip</B> option to set the number of
+rows (scanlines) in each strip of data in the output file.  By
+default, the output file has the number of rows per strip set to a
+value that will ensure each strip is no more than 8 kilobytes long.
+
+<p>The <b>-append</b> option tells <b>pamtotiff</b> to add images to
+the existing output file (a TIFF file may contain multiple images)
+instead of the default, which is to replace the output file.
+
+<p><b>-append</b> was new in Netpbm 10.27 (March 2005).
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>NOTES</H2>
+
+<P>There are myriad variations of the TIFF format, and this program
+generates only a few of them.  <B>pamtotiff</B> creates a grayscale
+TIFF file if its input is a PBM (monochrome) or PGM (grayscale) or
+equivalent PAM file.  <B>pamtotiff</B> also creates a grayscale file
+if it input is PPM (color) or equivalent PAM, but there is only one
+color in the image.
+
+<p>If the input is a PPM (color) file and there are 256 colors or
+fewer, but more than 1, <B>pamtotiff</B> generates a color palette
+TIFF file.  If there are more colors than that, <B>pamtotiff</B>
+generates an RGB (not RGBA) single plane TIFF file.  Use
+<B>pnmtotiffcmyk</B> to generate the cyan-magenta-yellow-black ink
+color separation TIFF format.
+
+<P>The number of bits per sample in the TIFF output is determined by
+the maxval of the Netpbm input.  If the maxval is less than 256, the bits
+per sample in the output is the smallest number that can encode the
+maxval.  If the maxval is greater than or equal to 256, there are 16
+bits per sample in the output.
+
+<h3 id="extrachannel">Extra Channels</h3>
+
+<p>Like most Netpbm programs, <b>pamtotiff</b>'s function is mostly
+undefined if the input is PAM image with tuple type other than
+BLACKANDWHITE, GRAYSCALE, or RGB.  Most of the statements in this manual
+assume the input is not such an exotic PAM.  But there is a little
+defined processing of other PAM subformats.
+
+<p><b>pamtotiff</b> assumes any 1 plane PAM image is BLACKANDWHITE
+or GRAYSCALE (and doesn't distinguish between those two).
+
+<p><b>pamtotiff</b> assumes a PAM with more than 1 plane is of tuple
+type RGB except with that number of planes instead of 3.
+<b>pamtotiff</b> doesn't really understand red, green, and blue, so it
+has no trouble with a 2-component or 5-component color space.  The
+TIFF format allows an arbitrary number of color compoonents, so
+<b>pamtotiff</b> simply maps the PAM planes directly to TIFF color
+components.  I don't know if the meanings of 5 components in a TIFF image
+are standard at all, but the function is there if you want to use it.
+
+<p>Note that <b>pamtotiff</b> may generate either a truecolor or
+colormapped image with an arbitrary number of color components.  In
+the truecolor case, the raster has that number of planes.  In the
+colormapped case, the raster has of course 1 plane, but the color map
+has all the color components in it.
+
+<p>The most common reason for a PAM to have extra planes is when the tuple
+type is xxx_ALPHA, which means the highest numbered plane is a transparency
+plane (alpha channel).  At least one user found that a TIFF with an extra
+plane for transparency was useful.
+
+<p>Note that the grayscale detection works on N-component colors, so if
+your planes aren't really color components, you'll want to disable this
+via the <b>-color</b> option.
+
+
+<H3 id="multipass">Multiple Passes</H3>
+
+<P><B>pamtotiff</B> reads the input image once if it can, and
+otherwise twice.  It needs that second pass (which happens before the
+main pass, of course) to analyze the colors in the image and generate
+a color map (palette) and determine if the image is grayscale.  So the
+second pass happens only when the input is PPM.  And you can avoid it
+then by specifying both the <B>-truecolor</B> and <B>-color</B>
+options.
+
+<P> If the input image is small enough to fit in your system's file
+cache, the second pass is very fast.  If not, it requires reading from
+disk twice, which can be slow.
+
+<P>When the input is from a file that cannot be rewound and reread,
+<B>pamtotiff</B> reads the entire input image into a temporary file
+which can, and works from that.  Even if it needs only one pass.
+
+<P>Before Netpbm 9.21 (December 2001), <b>pamtotiff</b> always read
+the entire image into virtual memory and then did one, two, or three
+passes through the memory copy.  The <b>-truecolor</b> and
+<b>-color</b> options did not exist.  The passes through memory would
+involve page faults if the entire image did not fit into real memory.
+The image in memory required considerably more memory (12 bytes per
+pixel) than the cached file version of the image would.
+
+
+<h3>Resolution</h3>
+
+<p>A Tiff image may contain information about the resolution of the image,
+which means how big in real dimensions (centimeters, etc.) each pixel in the
+raster is.  That information is in the TIFF XRESOLUTION, YRESOLUTION,
+and RESOLUTIONUNIT tags.  By default, <b>pamtotiff</b> does not include
+any tags of these types, but you can specify them with the <b>-tags</b>
+option.
+
+<p>There are also options <b>-xresolution</b>, <b>-yresolution</b>,
+and <b>-resolutionunit</b>, but those are obsolete.  Before <b>-tags</b>
+existed (before Netpbm 10.31 (December 2005), they were the only way.
+
+<p>Note that the number of pixels in the image and how much information
+each contains is determined independently from the setting of the
+resolution tags.  The number of pixels in the output is the same as in
+the input, and each pixel contains the same information.  For your
+resolution tags to be meaningful, they have to consistent with
+whatever created the PNM input.  E.g. if a scanner turned a 10 centimeter
+wide image into a 1000 pixel wide PNM image, then your horizontal
+resolution is 100 pixels per centimeter, and if your XRESOLUTION
+tag says anything else, something that prints your TIFF image won't
+print the proper 10 centimeter image.
+
+<p>The value of the XRESOLUTION tag is a floating point decimal number
+that tells how many pixels there are per unit of distance in the
+horizontal direction.  <b>-yresolution</b> is analogous for the
+vertical direction.
+
+<p>The unit of distance is given by the value of the RESOLUTIONUNIT
+option.  That value is either INCH, CENTIMETER, or NONE.  NONE
+means the unit is arbitrary or unspecified.  This could mean that the
+creator and user of the image have a separate agreement as to what the
+unit is.  But usually, it just means that the horizontal and vertical
+resolution values cannot be used for anything except to determine
+aspect ratio (because even though the unit is arbitrary or
+unspecified, it has to be the same for both resolution numbers).
+
+<p>If you <em>don't</em> use a <b>-tag</b> option to specify the
+resolution tag and use the obsolete options instead, note the
+following:
+
+<ul>
+<li>If you don't include an specify <b>-xresolution</b>, the Tiff image
+does not contain horizontal resolution information.  Likewise for
+<b>-yresolution</b>.  If you don't specify <b>-resolutionunit</b>, the
+default is inches.
+
+<li>Before Netpbm 10.16 (June 2003), <B>-resolutionunit</b> did not
+exist and the resolution unit was always inches.
+
+</ul>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamtotiff</b> was originally <b>pnmtotiff</b> and did not handle
+PAM input.  It was extended and renamed in Netpbm 10.30 (October 2005).
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="tifftopnm.html">tifftopnm</A></B>,
+
+<B><A HREF="pnmtotiffcmyk.html">pnmtotiffcmyk</A></B>,
+
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+
+<B><A HREF="pam.html">pam</A></B>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Derived by Jef Poskanzer from ras2tiff.c, which is
+Copyright (c) 1990 by Sun Microsystems, Inc.
+Author: Patrick J. Naughton (<A HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">NOTES</A>
+<UL>
+<LI><A HREF="#multipass">Multiple Passes</A>
+<LI><A HREF="#extrachannel">Extra Channels</A>
+</UL>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtouil.html b/pamtouil.html
new file mode 100644
index 00000000..10741192
--- /dev/null
+++ b/pamtouil.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtouil User Manual</TITLE></HEAD><BODY>
+<H1>pamtouil</H1>
+Updated: 05 May 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pamtouil - convert a PNM or PNM/alpha image into a Motif UIL icon file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pamtouil</B> [<B>-name=</B><I>uilname</I>] [<I>pamfile</I>]
+
+<p>You may abbreviate any option to its shortest unique prefix.
+You may use two hyphens instead of one to delimit an option.  You may
+separate an option from its value with whitespace instead of <b>=</b>.
+
+<A NAME="lbAD">&nbsp;</A>
+
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtouil</b> reads a PNM or PAM image as input and produces a
+Motif UIL icon file as output.  If the input is PAM, it may be either
+a regular grayscale or color image or grayscale+alpha or color+alpha.
+Where the alpha channel is present, <b>pamtouil</b> renders pixels
+that are more than half transparent as transparent in the output.
+
+<P>In the UIL's colormap, <b>pamtouil</b> uses the color names from
+the RGB database -- the same one <b><a href="ppmmake.html">ppmmake</a></b>
+uses.  Where a color in the input does not exactly match one of the colors
+named in the RGB database, <b>pamtouil</b> uses the closest color named
+in the RGB database.
+
+<A NAME="lbAE">&nbsp;</A>
+
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-name</B>
+
+<DD>
+     Allows you to specify the prefix string which is printed in the
+     resulting UIL output.  If not specified, will default to the filename
+     (without extension) of the ppmfile argument.  If <B>-name</B> is not
+     specified and no ppmfile is specified (i.e. piped input), the
+     prefix string will default to the string &quot;noname&quot;.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamstack.html">pam</A>
+<A HREF="pam.html">pam</A>
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<P>Before May 2002, <b>pamtouil</b> was called <b>ppmtouil</b> and had no
+way to specify transparency.
+
+
+<H2>AUTHOR</H2>
+
+Converted by Bryan Henderson from ppmtouil.c, which was converted by
+Jef Poskanzer from ppmtoxpm.c, which is Copyright (C) 1990 by Mark
+W. Snitily
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamtoxvmini.html b/pamtoxvmini.html
new file mode 100644
index 00000000..969aceda
--- /dev/null
+++ b/pamtoxvmini.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamtoxvmini User Manual</TITLE></HEAD>
+<BODY>
+<H1>xvminitoppm</H1>
+Updated: 02 April 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamtoxvmini - convert Netpbm image to an XV &quot;thumbnail&quot; picture
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamtoxvmini</B>
+
+[<I>xvminipic</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pamtoxvmini</b> reads a Netpbm image (PAM or PNM) and produces
+an XV &quot;thumbnail&quot; picture (a miniature picture normally
+generated by the &quot;VisualSchnauzer&quot; browser) as output.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="xvminitoppm.html">xvminitoppm</A>, 
+<A HREF="ppm.html">ppm</A>, 
+<b>xv</b> manual
+
+<h2 id="history">HISTORY</h2>
+
+<p>This program was new in Netpbm 10.34 (April 2006).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pamx.html b/pamx.html
new file mode 100644
index 00000000..2ceda427
--- /dev/null
+++ b/pamx.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pamx User Manual</TITLE></HEAD>
+<BODY>
+<H1>pamx</H1>
+Updated: 25 March 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pamx - display Netpbm image in X Window System window
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pamx</B>
+
+[<b>-fullscreen</b>]
+[<b>-install</b>]
+[<b>-private</b>]
+[<b>-fit</b>]
+[<b>-pixmap</b>]
+[<b>-verbose</b>]
+[<b>-display=</b><i>x-display</i>]
+[<b>-title=</b><i>text</i>]
+[<b>-foreground=</b><i>color</i>]
+[<b>-background=</b><i>color</i>]
+[<b>-border=</b><i>color</i>]
+[<b>-geometry=</b><i>x-geometry-string</i>]
+[<b>-visual=</b><i>name</i>]
+
+<i>netpbm_file</i>
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and its
+value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+
+<p><b>pamx</b> displays a Netpbm image in an X Window System window.
+It is like a very simple version of the classic X image viewer
+<b>xloadimage</b>.
+
+<p>If you don't specify the input file <i>netpbm_file</i>, the input is
+from Standard Input.  The input image can be any Netpbm image format.
+If the input is a multi-image stream, <b>pamx</b> ignores all but the
+first image.
+
+<p><b>pamx</b> is not the best choice for general purpose viewing of
+images, because it is a traditional simple Netpbm building block.  It
+is a good thing to build into other programs and can be useful for
+debugging more complex systems, but you can get much more powerful
+viewers that can display Netpbm images.  For example, <b>xloadimage</b>,
+<b>xli</b>, <b>xzgv</b>, and any web browser.
+
+<p>The initial window is at most 90% of the size of the display unless
+the window manager does not correctly handle window size requests or
+if you've used the <b>-fullscreen</b> option.  You may move the image
+around in the window by dragging with the first mouse button.  The
+cursor will indicate which directions you may drag, if any.  You may
+exit the window by typing 'q' or control-C when the keyboard focus is
+on the window.
+
+<p><b>ppmsvgalib</b> is a similar program that displays an image on a
+Linux system without the need for the X Window System.
+
+
+<h2 id="resource">X RESOURCE CLASS</h2>
+
+<p><b>pamx</b> uses the resource class name <b>Xloadimage</b> for
+window managers which need this resource set.  This is, of course, the
+same resource class that the conventional viewer program
+<b>xloadimage</b> uses.
+
+<h2 id="options">OPTIONS</h2>
+
+<dl>
+<dt><b>-border=</b><i>color</i>
+
+<dd>This sets the background portion of the window which is not
+covered by any images to be <i>color</i>.
+
+<dt><b>-display=</b><i>display_name</i>
+
+<dd>This names the X display in which to put the window.  E.g. <b>0:0</b>.
+
+<dt><b>-fit</b>
+
+<dd>Force image to use the default visual and colormap.  This is
+useful if you do not want technicolor effects when the colormap focus
+is inside the image window, but it may reduce the quality of the
+displayed image.
+
+<dt><b>-fullscreen</b>
+
+<dd>Use the entire screen to display the image.
+
+<dt><b>-geometry=</b><I>W</I><b>x</b><i>H</i>[{<b>+</b>,<b>-</b>}<i>X</i>{<b>+</b>,<b>-</b>}<i>Y</i>
+
+<dd>This sets the size and position of the window in which <b>pamx</b>
+displays the image.
+
+<p>By default, the window size exactly matches the image size, except that
+if you don't specify <b>-fullscreen</b>, the maximum is 90% of the screen
+dimensions.
+
+<dt><b>-install</b>
+
+<dd>Forcibly install the image's colormap when the window is focused.
+This violates ICCCM standards and only exists to allow operation with
+naive window managers.  Use this option only if your window manager
+does not install colormaps properly.
+
+<dt><b>-pixmap</b>
+
+<dd>Force the use of a pixmap as backing-store.  This is provided for
+servers where backing-store is broken (such as some versions of the
+AIXWindows server).  It may improve scrolling performance on servers
+which provide backing-store.
+
+<dt><b>-private</b>
+
+<dd>Force <b>pamx</b> to use of a private colormap.  By default,
+<b>pamx</b> allocates colors shared unless there are not enough colors
+available.
+
+<dt><b>-verbose</b>
+
+<dd>Causes <b>pamx</b> to print various information about what it's
+doing to Standard Error.
+
+<dt><b>-visual=</b><i>visual_name</i>
+
+<dd>
+Force the use of a specific visual type to display an image.  By
+default, <b>pamx</b> tries to pick the best available image for a
+particular image type.  The available visual types are:
+<b>DirectColor</b>, <b>TrueColor</b>, <b>PseudoColor</b>,
+<b>StaticColor</b>, <b>GrayScale</b>, and <b>StaticGray</b>.
+You may use the shortest unique prefix of these names, and case is
+not significant.
+
+<dt><b>-background=</b><i>color</i>
+
+<dd>Use <i>color</i> as the background color instead of the default
+(usually white but this depends on the image type) if you are
+transferring a monochrome image to a color display.
+
+<dt><b>-foreground=</b><i>color</i>
+
+<dd>
+Use <i>color</i> as the foreground color instead of black if you are
+transferring a monochrome image to a color display.  You can also use
+this to invert the foreground and background colors of a monochrome
+image.
+
+<dt><b>-title=</b><i>text</i>
+
+<dd>Set the title bar title of the window.  Default is the file name of
+the input file, or &quot;stdin&quot; if the image is from Standard Input.
+
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmsvgalib.html">ppmsvgalib</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B>xzgv</B>,
+<b>xloadimage</b>,
+<b>xli</b>
+
+<h2 id="author">AUTHOR</h2>
+
+<p><b>pamx</b> is by Bryan Henderson, in March 2006, based on
+<b>xloadimage</b> by Jim Frost, Centerline Software,
+jimf@centerline.com, 1989-1993.
+
+<p>Jim's code contained the following copyright notice and license:
+
+<blockquote>
+<p>Copyright 1989, 1993 Jim Frost
+   
+<p>Permission to use, copy, modify, distribute, and sell this software
+and its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.  The author makes no representations about
+the suitability of this software for any purpose.  It is provided "as
+is" without express or implied warranty.
+   
+<p>THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+</blockquote>
+
+<p>Lots of other people contributed to Xloadimage, and they are listed
+in the file COPYRIGHT in the source code.
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pamx</b> was new in Netpbm 10.34 (May 2006).
+
+<p><b>pamx</b> is essentially based on the classic X displayer program
+<b>xloadimage</b> by Jim Frost, 1989.  Bryan Henderson stripped it
+down and adapted it to Netpbm in March 2006.
+
+<p>The following features of <b>xloadimage</b> are left out of <b>pamx</b>,
+to be more compatible with Netpbm's philosophy of simple building blocks.
+Note that there are other programs in Netpbm that do all of these things:
+<ul>
+<li>slide show
+<li>zoom in/out
+<li>ability to accept formats other than Netpbm
+<li>ability to display on the root window
+<li>image transformations (brightening, clipping, rotating, etc)
+<li>decompressing and other decoding of input
+</ul>
+
+<b>pamx</b> also differs from <b>xloadimage</b> in that it uses
+Libnetpbm.
+
+<p>There is virtually no code from <b>xloadimage</b> actually in
+<b>pamx</b>, because Bryan rewrote it all to make it easier to
+understand.
+
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#resource">X RESOURCE CLASS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbm.html b/pbm.html
new file mode 100644
index 00000000..80c850c4
--- /dev/null
+++ b/pbm.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>The PBM Format</TITLE>
+<META NAME="manual_section" CONTENT="5">
+</HEAD>
+<BODY>
+<H1>pbm</H1>
+Updated: 22 September 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pbm - Netpbm bi-level image format
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>The PBM format is a lowest common denominator monochrome file format.
+<A NAME="ixAAB"></A> It serves as the common language of a large
+family of bitmap image conversion filters.  Because the format pays no heed
+to efficiency, it is simple and general enough that one can easily
+develop programs to convert to and from just about any other graphics
+format, or to manipulate the image.
+
+<P>The name "PBM" is an acronym derived from "Portable Bit Map."
+
+<P>This is not a format that one would normally use to store a file
+or to transmit it to someone -- it's too expensive and not expressive
+enough for that.  It's just an intermediary format.  In it's purest
+use, it lives only in a pipe between two other programs.
+
+<P>The format definition is as follows.
+
+<P>A PBM file consists of a sequence of one or more PBM images. There are
+no data, delimiters, or padding before, after, or between images.
+
+<P>Each PBM image consists of the following:
+
+<OL>
+
+<LI>A &quot;magic number&quot; for identifying the file type.
+A pbm image's magic number is the two characters &quot;P4&quot;.
+
+<LI>Whitespace (blanks, TABs, CRs, LFs).
+
+<LI>The width in pixels of the image, formatted as ASCII characters in decimal.
+
+<LI>Whitespace.
+
+<LI>The height in pixels of the image, again in ASCII decimal.
+
+<LI>Newline or other single whitespace character.
+
+<LI>A raster of Height rows, in order from top to bottom.  Each row is
+Width bits, packed 8 to a byte, with don't care bits to fill out the
+last byte in the row.  Each bit represents a pixel: 1 is black, 0 is
+white.  The order of the pixels is left to right.  The order of their
+storage within each file byte is most significant bit to least
+significant bit.  The order of the file bytes is from the beginning of
+the file toward the end of the file.
+
+
+<P>A row of an image is horizontal.  A column is vertical.  The pixels
+in the image are square and contiguous.
+
+<LI>Characters from a &quot;#&quot; to the next end-of-line, before
+the width/height line, are comments and are ignored.
+
+</OL>
+
+<P>
+There is actually another version of the PBM format, even more more
+simplistic, more lavishly wasteful of space than PBM, called Plain
+PBM.  Plain PBM actually came first, but even its inventor couldn't
+stand its recklessly squanderous use of resources after a while and
+switched to what we now know as the regular PBM format.  But Plain PBM
+is so redundant -- so overstated -- that it's virtually impossible to
+break.  You can send it through the most liberal mail system (which
+was the original purpose of the PBM format) and it will arrive still
+readable.  You can flip a dozen random bits and easily piece back
+together the original image.  And we hardly need to define the format
+here, because you can decode it by inspection.
+
+<p>Netpbm programs generate Raw PBM format instead of Plain PBM by
+default, but the <a href="index.html#commonoptions">common option</a>
+<b>-plain</b> chooses Plain PBM.
+
+<P>The difference is:
+<DL COMPACT>
+<DT>-<DD>
+There is exactly one image in a file.
+<DT>-<DD>
+The &quot;magic number&quot; is &quot;P1&quot; instead of &quot;P4&quot;.
+<DT>-<DD>
+Each pixel in the raster is represented by a byte containing ASCII '1' or '0',
+representing black and white respectively.  There are no fill bits at the
+end of a row.
+<DT>-<DD>
+White space in the raster section is ignored.
+<DT>-<DD>
+You can put any junk you want after the raster, if it starts with a 
+white space character.
+<DT>-<DD>
+No line should be longer than 70 characters.
+</DL>
+<P>
+
+Here is an example of a small image in the plain PBM format.
+<PRE>
+P1
+# feep.pbm
+24 7
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
+0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
+0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
+0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
+0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+</PRE>
+
+<p>There is a newline character at the end of each of these lines.
+
+<P>You can generate the Plain PBM format from the regular PBM format
+(first image in the file only) with the <B>pnmtoplainpnm</B> program.
+
+<P>Programs that read this format should be as lenient as possible,
+accepting anything that looks remotely like a bitmap.
+
+<H2 id="compatibility">COMPATIBILITY</H2>
+
+<P>Before July 2000, there could be at most one image in a PBM file.  As
+a result, most tools to process PBM files ignore (and don't read) any
+data after the first image.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="libnetpbm.html">libnetpbm</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+<B><A HREF="directory.html">programs that process PBM</A></B>
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#compatibility">COMPATIBILITY</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmclean.html b/pbmclean.html
new file mode 100644
index 00000000..9c5ac187
--- /dev/null
+++ b/pbmclean.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmclean User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmclean</H1>
+Updated: 27 Feb 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmclean - flip isolated pixels in portable bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmclean</B>
+[<B>-minneighbors=</B><I>N</I>]
+[<B>-black</B>|<B>-white</B>]
+[<I>pbmfile</I>]
+
+<?makeman .SH OPTION USAGE ?>
+<P>You can use the minimum unique abbreviation of the options.  You
+can use two hyphens instead of one.  You can separate an option name
+from its value with white space instead of an equals sign.
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pbmclean</B> cleans up a PBM image of random specks.  It reads a
+PBM image as input and outputs a PBM that is the same as the input
+except with isolated pixels inverted.  An isolated pixel is one that
+has very few neighboring pixels of the same color.  The
+<b>-minneighbors</b> option gives the number of same-color neighbors
+are required.
+
+<P>The default is 1 pixel -- only completely isolated pixels are
+flipped.
+
+<P>(A <b>-minneighbors</b> value greater than 8 generates a completely
+inverted image (but use <B>pnminvert</B> to do that) -- or a
+completely white or completely black image with the <B>-black</B> or
+<B>-white</B> option).
+
+<P><B>pbmclean</B> considers the area beyond the edges of the image to
+be white.  (This matters when you consider pixels right on the edge of
+the image).
+
+<P>You can use <B>pbmclean </B> to clean up &quot;snow&quot; on bitmap
+images.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-black</B>
+
+<DT><B>-white</B>
+
+<DD>Flip pixels of the specified color.  By default, if you specify
+neither <B>-black</B> nor <B>-white</B>, <B>pbmclean</B> flips both
+black and white pixels which do not have sufficient identical
+neighbors.  If you specify <B>-black</B>, <B>pbmclean</B> leaves the
+white pixels alone and just erases isolated black pixels.  Vice versa
+for <B>-white</B>.  You may specify both <B>-black</B> and
+<B>-white</B> to get the same as the default behavior.
+
+<dt><b>-minneighbors=</b><i>N</i>
+
+<dd>This determines how many pixels must be in a cluster in order
+for <b>pbmclean</b> to consider them legitimate and not clean them
+out of the image.  See <a href="#description">Description</a>.
+
+<P>Before December 2001, <B>pbmclean</B> accepted <B>-</B><I>N</I>
+instead of <B>-minneighbors</B>.  Before Netpbm 10.27 (March 2005),
+<b>-minneighbors</b> was <b>-minneighbor</b>.
+
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Angus Duggan
+Copyright (C) 1989 by Jef Poskanzer.
+Copyright (C) 2001 by Michael Sternberg.
+<P>
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.  This software is provided &quot;as is&quot; without express or
+implied warranty.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmlife.html b/pbmlife.html
new file mode 100644
index 00000000..b403343d
--- /dev/null
+++ b/pbmlife.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmlife User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmlife</H1>
+Updated: 21 February 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmlife - apply Conway's rules of Life to a portable bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmlife</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmlife</b> reads a portable bitmap as input, applies the rules
+of Life to it for one generation, and produces a PBM image as output.
+
+<P>A white pixel in the image is interpreted as a live beastie, and a
+black pixel as an empty space.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmmake.html b/pbmmake.html
new file mode 100644
index 00000000..dd13d891
--- /dev/null
+++ b/pbmmake.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmmake User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmmake</H1>
+Updated: 13 December 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmmake - create a blank bitmap of a specified size
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmmake</B>
+[<B>-white</B>|<B>-black</B>|<B>-gray</B>]
+<I>width</I>
+<i>height</I>
+
+<p>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmmake</b> produces a PBM image of the specified width and
+height, either all black, all white, or a dithered gray.  The default
+is white.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>In addition to the usual <B>-white</B> and <B>-black</B>, this
+program implements <B>-gray</B>.  This gives a simple 50% gray pattern
+with 1's and 0's alternating.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmmake.html">pgmmake</A>,
+<A HREF="ppmmake.html">ppmmake</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmmask.html b/pbmmask.html
new file mode 100644
index 00000000..e592c322
--- /dev/null
+++ b/pbmmask.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmmask User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmmask</H1>
+Updated: 08 August 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmmask - create a mask bitmap from a regular bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmmask</B>
+[<B>-expand</B>]
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmmask</b> reads a PBM image as input and Generates a
+corresponding mask of the foreground areas as another PBM image.
+
+<P>The color to be interpreted as &quot;background&quot; is
+determined automatically.  Regardless of which color is background,
+the mask will be white where the background is and black where the
+figure is.
+
+<P>This lets you do a masked paste like this, for objects with a black
+background:
+
+<PRE>
+    pbmmask obj &gt; objmask
+    pnmpaste &lt; dest -and objmask &lt;x&gt; &lt;y&gt; | pnmpaste -or obj &lt;x&gt; &lt;y&gt;
+</PRE>
+
+For objects with a white background, you can either invert them or
+add a step:
+<PRE>
+    pbmmask obj &gt; objmask
+    pnminvert objmask | pnmpaste -and obj 0 0 &gt; blackback
+    pnmpaste &lt; dest -and objmask &lt;x&gt; &lt;y&gt; | pnmpaste -or blackback &lt;x&gt; &lt;y&gt;
+</PRE>
+
+Note that this three-step version works for objects with black backgrounds
+too, if you don't care about the wasted time.
+
+<P>You can also use masks with graymaps and pixmaps, using the
+<I>pnmarith</I> tool.  For instance:
+
+<PRE>
+    ppmtopgm obj.ppm | pamditherbw -threshold | pbmmask &gt; objmask.pbm
+    pnmarith -multiply dest.ppm objmask.pbm &gt; t1.ppm
+    pnminvert objmask.pbm | pnmarith -multiply obj.ppm - &gt; t2.ppm
+    pnmarith -add t1.ppm t2.ppm
+</PRE>
+
+An interesting variation on this is to pipe the mask through
+<I>pnmsmooth</I> before using it.  This makes the boundary between the
+two images less sharp.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-expand</B>
+
+<DD>Expands the mask by one pixel out from the image.  This is useful
+if you want a little white border around your image.  (A better
+solution might be to turn the <b>pbmlife</b> program into a general
+cellular automaton tool...)
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>,
+<B><A HREF="pnmpaste.html">pnmpaste</A></B>,
+<B><A HREF="pnminvert.html">pnminvert</A></B>,
+<B><A HREF="pnmarith.html">pnmarith</A></B>,
+<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>
+<B><A HREF="pbm.html">pbm</A></B>,
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmpage.html b/pbmpage.html
new file mode 100644
index 00000000..542efc7a
--- /dev/null
+++ b/pbmpage.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmpage User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmpage</H1>
+Updated: 01 May 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmpage - create a one page test pattern for printing
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmpage</B>
+[<B>-a4</B>]
+<I>test_pattern</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pbmpage</B> generates a one page test pattern to print on a
+sheet of paper, for use in calibrating a printer.  The test pattern in
+is PBM format.
+
+<P><B>pbmpage</B> produces an image intended for 600 dots per inch
+printer resolution.
+
+<P>If you are printing on an HP PPA printer, you can convert the
+output of this program to a stream that you can feed to the printer
+with <B>pbmtoppa</B>.
+
+<P>
+Bear in mind that when you print the test pattern, you are testing not
+only the printer, but any converter or driver software along the
+printing path.  Any one of these components may adjust margins, crop
+the image, erase edges, and such.
+
+<P>If, due to addition of margins, the printer refuses to print the
+image because it is too big, use <B>pamcut</B> to cut the right and
+bottom edges off the test pattern until it is small enough to print.
+
+<P><I>test_pattern </I> is the number of the test pattern to generate,
+as follows.  The default is <B>1</B>.
+
+<DL COMPACT>
+<DT><B>1</B>
+
+<DD>
+A black on white grid ruled in numbers of pixels.  A black one pixel box
+is at the very edges of the paper.     
+
+<p>Before Netpbm 10.18 (August 2003), the perimeter box was not there.
+
+<DT><B>2</B>
+
+<DD>
+A vertical line segment, one pixel wide, extending 1/2&quot; up from the
+exact center of the page.
+<DT><B>3</B>
+
+<DD>
+Two diagonal line segments, one starting at the upper left corner of the
+page, the other starting from the lower left corner of the page.  Both
+extend 1/2&quot; toward the center of the page at 45 degrees.
+</DL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-a4</B>
+
+<DD>Generate an image for A4 (European) paper.  Without this option,
+<B>pbmpage</B> generates an image for US standard paper (8 1/2&quot;
+wide x 11&quot; high).
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtoppa.html">pbmtoppa</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Tim Norman.  Copyright (C) 1998.  Licensed under GNU Public License
+
+<P>Manual page by Bryan Henderson, May 2000.  Contributed to the public
+domain by its author.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmpscale.html b/pbmpscale.html
new file mode 100644
index 00000000..41cd6e27
--- /dev/null
+++ b/pbmpscale.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmpscale User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmpscale</H1>
+Updated: 03 October 2003
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmpscale - enlarge a PBM image with edge smoothing
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>pbmpscale</b>
+<i>N</i>
+[<i>pbmfile</i>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmpscale</b> reads a PBM image as input, and outputs a PBM
+image enlarged N times.  <b>pbmpscale</b> does this enlargement by
+pixel replication, with some additional smoothing of corners and
+edges.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamenlarge.html">pamenlarge</A>,
+<A HREF="pamscale.html">pamscale</A>,
+<A HREF="pbm.html">pbm</A>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Angus Duggan
+Copyright (C) 1989 by Jef Poskanzer.
+
+<P>Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.  This software is provided &quot;as is&quot; without express or
+implied warranty.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>NOTES</H2>
+
+<p><b>pbmpscale</b> works best for enlargements of 2. Enlargements
+greater than 2 should be done by as many enlargements of 2 as
+possible, followed by an enlargement by the remaining factor.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+<LI><A HREF="#lbAG">NOTES</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pbmreduce.html b/pbmreduce.html
new file mode 100644
index 00000000..488ea5a2
--- /dev/null
+++ b/pbmreduce.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmreduce User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmreduce</H1>
+Updated: 02 August 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmreduce - read a PBM image and reduce it N times
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmreduce</B>
+[<B>-floyd</B>|<B>-fs</B>|<B>-threshold</B>]
+[<B>-value</B> <I>val</I>]
+<I>N</I>
+[<I>pbmfile</I>]
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmreduce</b> reads a PBM image as input and reduces it by a
+factor of <I>N</I>, producing a PBM image as output.
+
+<P><b>pbmreduce</b> duplicates a lot of the functionality of
+<b>pamditherbw</b>; you could do something like <tt>pamscale |
+pamditherbw</tt>, but <b>pbmreduce</b> is a lot faster.
+
+<P>You can use <B>pbmreduce</B> to &quot;re-halftone&quot; an image.
+Let's say you have a scanner that only produces black&amp;white, not
+grayscale, and it does a terrible job of halftoning (most b&amp;w
+scanners fit this description).  One way to fix the halftoning is to
+scan at the highest possible resolution, say 300 dpi, and then reduce
+by a factor of three or so using <b>pbmreduce</b>.  You can even
+correct the brightness of an image, by using the <B>-value</B> option.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>By default, <b>pbmreduce</b> does the halftoning after the
+reduction via boustrophedonic Floyd-Steinberg error diffusion;
+however, you can use the <B>-threshold</B> option to specify simple
+thresholding.  This gives better results when reducing line drawings.
+
+<P>The <B>-value</B> option alters the thresholding value for all
+quantizations.  It should be a real number between 0 and 1.  Above 0.5
+means darker images; below 0.5 means lighter.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamenlarge.html">pamenlarge</A>,
+<A HREF="pamscale.html">pamscale</A>,
+<A HREF="pamditherbw.html">pamditherbw</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtext.html b/pbmtext.html
new file mode 100644
index 00000000..53d8f13c
--- /dev/null
+++ b/pbmtext.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtext User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtext</H1>
+Updated: 14 April 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtext - render text into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtext</B>
+[<B>-font</B> <I>fontfile</I>]
+[<B>-builtin</B> <I>fontname</I>]
+[<B>-space</B> <I>pixels</I>]
+[<B>-lspace</B> <I>pixels</I>]
+[<B>-nomargins</B>]
+[<B>-width</B> <i>pixels</i>]
+[<I>text</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pbmtext</b> takes the specified text, either a single line from
+the command line or multiple lines from standard input, and renders it
+into a PBM graphical image.
+
+<P>In the image, each line of input is a line of output.  Formatting
+characters such as newline have no effect on the formatting; like any
+unprintable character, they turn into spaces.
+
+<P>The image is just wide enough for the longest line of text, plus
+margins, and just high enough to contain the lines of text, plus
+margins.
+
+<P>The left and right margins are twice the width of the widest
+character in the font; the top and bottom margins are the height of
+the tallest character in the font.  But if the text is only one line,
+all the margins are half of this.  You can use the <b>-nomargins</b> option
+to eliminate the margins.
+
+<p><b>pbmtextps</b> does the same thing as <b>pbmtext</b>, but uses
+Ghostscript to generate the characters, which means it's a lot more
+sophisticated and you can use Postscript fonts.  But it also means you
+have to have Ghostscript installed and it isn't as fast.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-font</B>
+<DT><B>-builtin</B>
+
+<DD>
+
+<b>-builtin</b> selects a font among those built into Netpbm.
+
+<b>-font</b> selects a font that you supply yourself either as an X
+Window System BDF (Bitmap Distribution Format) file or as a PBM file
+in a special form.
+
+<p>The default is the built in font &quot;bdf.&quot;
+
+<p>&quot;bdf&quot; is Times-Roman 15 pixels high.  (That's about 14
+point type printed at 75 dpi).
+
+<p>&quot;fixed&quot; is a built in fixed with font.
+
+<p>To create a font as a PBM file (to use with the <b>-font</b>
+option), do this: In your window system of choice, display the
+following text in the desired (fixed-width) font:
+
+<PRE>
+
+    M &quot;,/^_[`jpqy| M
+
+    /  !&quot;#$%&amp;'()*+ /
+    &lt; ,-./01234567 &lt;
+    &gt; 89:;&lt;=&gt;?@ABC &gt;
+    @ DEFGHIJKLMNO @
+    _ PQRSTUVWXYZ[ _
+    { \]^_`abcdefg {
+    } hijklmnopqrs }
+    ~ tuvwxyz{|}~  ~
+
+    M &quot;,/^_[`jpqy| M
+
+</PRE>
+
+Do a screen grab or window dump of that text, using for instance
+<B>xwd</B>, <B>xgrabsc</B>, or <B>screendump</B>.  Convert the result
+into a pbm file.  If necessary, use <B>pamcut</B> to remove everything
+except the text.  Finally, run it through <B>pnmcrop</B>.  to make
+sure the edges are right up against the text.  <B>pbmtext</B>
+can figure out the sizes and spacings from that.
+
+<DT><B>-space</B> <I>pixels</I>
+
+<DD> Add <I>pixels</I> pixels of space between characters.  This is in
+addition to whatever space surrounding characters is built into the
+font, which is usually enough to produce a reasonable string of text.
+
+<P><I>pixels</I> may be fractional, in which case the number of
+pixels added varies so as to achieve the specified average.  For
+example <B>-space=1.5</B> causes half the spaces to be 1 pixel and
+half to be 2 pixels.
+
+<P><I>pixels</I> may be negative to crowd text together, but the
+author has not put much thought or testing into how this works in
+every possible case, so it might cause disastrous results.
+
+<DT><B>-lspace</B> <I>pixels</I>
+
+<DD> Add <I>pixels</I> pixels of space between lines.  This is in
+addition to whatever space above and below characters is built into
+the font, which is usually enough to produce a reasonable line
+spacing.
+
+<P><I>pixels</I> must be a whole number.
+
+<P><I>pixels</I> may be negative to crowd lines together, but the
+author has not put much thought or testing into how this works in
+every possible case, so it might cause disastrous results.
+
+<DT><b>-nomargins</b>
+
+<DD>By default, <b>pbmtext</b> adds margins all around the image as
+described above.  This option causes <b>pbmtext</b> not to add any
+margins.
+
+<p>Note that there may still be space beyond the edges of the type
+because a character itself may include space at its edges.  To eliminate
+all surrounding background, so the type touches all four edges of the
+image, use <b>pnmcrop</b>.
+
+<DT><b>-width</b> <i>pixels</i>
+
+<DD>This specifies how much horizontal space the text is supposed to fit
+into.  
+
+<p>If the input is one line, <b>pbmtext</b> breaks it into multiple
+lines as needed to fit the specified width.  It breaks it between
+characters, but does not pay attention to white space; it may break in
+the middle of a word and a line may begin or end with white space.
+
+<p>If the input is multiple lines, <b>pbmtext</b> assumes you already
+have line breaks where they make sense, and <b>pbmtext</b> simply
+truncates each line as needed to fit the specified width.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>USAGE</H2>
+
+<P>Often, you want to place text over another image.  One way to do
+this is with <B>ppmlabel</B>.  <B>ppmlabel</B> does not give you the
+font options that <B>pbmtext</B> does, though.
+
+<P>Another way is to use <B>pbmtext</B> to create an image containing
+the text, then use <B>pamcomp</B> to overlay the text image onto your
+base image.  To make only the text (and not the entire rectangle
+containing it) cover the base image, you will need to give
+<B>pamcomp</B> a mask, via its <B>-alpha</B> option.  You can just use
+the text image itself as the mask, as long as you also specify the
+<B>-invert</B> option to <B>pamcomp</B>.
+
+<P>If you want to overlay colored text instead of black, just use
+<B>ppmchange</B> to change all black pixels to the color of your
+choice before overlaying the text image.  But still use the original
+black and white image for the alpha mask.
+
+<P>If you want the text at an angle, use <B>pnmrotate</B> on the text
+image (and alpha mask) before overlaying.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtextps.html">pbmtextps</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnmcrop.html">pnmcrop</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="ppmchange.html">ppmchange</A></B>,
+<B><A HREF="pnmrotate.html">pnmrotate</A></B>,
+<B><A HREF="ppmlabel.html">ppmlabel</A></B>,
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Jef Poskanzer and George Phillips
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">USAGE</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtextps.html b/pbmtextps.html
new file mode 100644
index 00000000..41068fb0
--- /dev/null
+++ b/pbmtextps.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Pbmtextps User Manual</title></HEAD>
+<BODY>
+<H1>pbmtextps</H1>
+Updated: 7 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="ixAAB"></A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtextps - render text into a PBM image using a postscript interpreter
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtextps</B>
+[<B>-font</B> <I>fontname</I>]
+[<B>-fontsize</B> <I>fontsize</I>]
+[<B>-resolution</B> <I>resolution</I>]
+[<B>-stroke</B> <I>strokesize</I>]
+<I>text</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pbmtextps</b> takes a single line of text from the command line
+and renders it into a PBM image.
+
+<P>The image is cropped at the top and the right.  It is not cropped
+at the left or bottom so that the text begins at the same position
+relative to the origin.  You can use <b>pnmcrop</b> to crop it all the
+way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-font</B>
+<DD>
+By default, <b>pbmtextps</b> uses TimesRoman.
+
+<P>You can specify the font to use with the <B>-font</B> option.
+This is the name of any valid postscript font which is installed on your
+system.
+
+<DT><B>-fontsize</B>
+<DD>
+Size of font in points.  See the <b>-resolution</b> option for information
+on how to interpret this size.
+
+<p>Default is 24 points.
+
+<DT><B>-resolution</B>
+<DD>
+Resolution in dots per inch of distance measurements pertaining to generation
+of the image.  PBM images don't have any inherent resolution, so a distance
+such as "1 inch" doesn't mean anything unless you separately specify what
+resolution you're talking about.  That's what this option does.
+
+<p>In particular, the meaning of the font size is determined by this
+resolution.  If the font size is 24 points and the resolution is 150
+dpi, then the font size is 50 pixels.
+
+<p>Default is 150 dpi.
+
+<DT><B>-stroke</B>
+<DD>
+Width of line to use for stroke font.  There is no default stroke width
+because the letters are solid by default.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>USAGE</H2>
+
+You can generate antialiased text by using a larger resolution than the
+default and scaling the image down using <b>pamscale</b>.
+
+<P>See the manual for the similar <B>pbmtext</B> for more advice on
+usage.
+
+<A NAME="history"></a>
+<H2>HISTORY</H2>
+
+<p><b>pbmtextps</b> was added to Netpbm in Release 10.0 (June 2002).
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtext.html">pbmtext</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnmcrop.html">pnmcrop</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="ppmchange.html">ppmchange</A></B>,
+<B><A HREF="pnmrotate.html">pnmrotate</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="ppmlabel.html">ppmlabel</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2002 by James McCann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">USAGE</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmto10x.html b/pbmto10x.html
new file mode 100644
index 00000000..9639fc2b
--- /dev/null
+++ b/pbmto10x.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmto10x User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmto10x</H1>
+Updated: 1 January 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmto10x - convert a PBM image into Gemini 10X printer graphics
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmto10x</B>
+[<B>-h</B>]
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmto10x</b> reads a PBM image as input and produces a file of
+Gemini 10X printer graphics as output.  The 10x's printer codes are
+alleged to be similar to the Epson codes.
+
+<P>Note that there is no 10xtopbm tool - this transformation is one
+way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The resolution is normally 60H by 72V.  If you specify the
+<B>-h</B> option, resolution is 120H by 144V.  You may find it useful
+to rotate landscape images before printing.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+<A NAME="lbAG">&nbsp;</A>
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Ken Yap
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmto4425.html b/pbmto4425.html
new file mode 100644
index 00000000..d6948936
--- /dev/null
+++ b/pbmto4425.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmto4425 User Manual</TITLE></HEAD>
+<BODY>
+<H1>Pbmto4425</H1>
+Updated: 1994
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmto4425 - Display PBM images on an AT&amp;T 4425 terminal
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmto4425</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pbmto4425</b> displays PBM format images on an AT&amp;T 4425 ASCII
+terminal using that terminal's mosaic graphics character set.  The
+program should also work with other VT100-like terminals with mosaic
+graphics character sets such as the C. Itoh CIT-101, but it has not
+yet been tested on terminals other than the 4425.
+
+<P> <b>Pbmto4425</b> puts the terminal into 132 column mode to achieve
+the maximum resolution of the terminal.  In this mode the terminal has
+a resolution of 264 columns by 69 rows.  The pixels have an aspect
+ratio of 1:2.6, therefore an image should be processed before being
+displayed in a manner such as this:
+
+
+<PRE>
+<B>% pamscale -xscale 2.6 </B><I>pamfile</I> <B>\
+    | pamscale -xysize 264 69 \
+    | ppmtopgm \
+    | pamditherbw \
+    | pbmto4425</B>
+</PRE>
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtoascii.html">pbmtoascii</a></b>,
+<B><A HREF="ppmtoterm.html">ppmtoterm</a></b>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Robert Perlberg
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#lbAE">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
+
diff --git a/pbmtoascii.html b/pbmtoascii.html
new file mode 100644
index 00000000..2375c53e
--- /dev/null
+++ b/pbmtoascii.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoascii User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoascii</H1>
+Updated: 11 August 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoascii - convert a PBM image to ASCII graphics
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoascii</B>
+
+[<B>-1x2</B>|<B>-2x4</B>]
+
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pbmtoascii</b> reads a PBM image as input and produces a somewhat
+crude ASCII graphic image as output.
+
+<P>To convert back, use <A HREF="asciitopgm.html">asciitopgm</A>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>The <B>-1x2</B> and <B>-2x4</B> options give you two alternate ways for
+the pixels to get mapped to characters.  With <B>1x2</B>, the default,
+each character represents a group of 1 pixel across by 2 pixels down.
+With <B>-2x4</B>, each character represents 2 pixels across by 4
+pixels down.  With the 1x2 mode you can see the individual pixels, so
+it's useful for previewing small images on a non-graphics terminal.
+The 2x4 mode lets you display larger images on a standard 80-column
+display, but it obscures pixel-level details.  2x4 mode is also good
+for displaying PGM images:
+
+<pre>
+pamscale -width 158 | pnmnorm | pamditherbw -threshold
+</pre>
+
+should give good results.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="asciitopgm.html">asciitopgm</A>
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988, 1992 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoatk.html b/pbmtoatk.html
new file mode 100644
index 00000000..c746d08a
--- /dev/null
+++ b/pbmtoatk.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoatk User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoatk</H1>
+Updated: 26 September 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoatk - convert a PBM image to a Andrew Toolkit raster object
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoatk</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtoatk</b> reads a PBM image as input and produces a Andrew
+Toolkit raster object as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="atktopbm.html">atktopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Bill Janssen.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtobbnbg.html b/pbmtobbnbg.html
new file mode 100644
index 00000000..22bee438
--- /dev/null
+++ b/pbmtobbnbg.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtobbnbg User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtobbnbg</H1>
+Updated: 16 May 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtobbnbg - convert a PBM image into BitGraph graphics
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtobbng</B>
+[<I>rasterop</I>]
+[<I>x</I> <I>y</I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtobbnbg</b> reads a portable bitmap as input and produces BBN
+BitGraph terminal Display Pixel Data (DPD) sequence as output.
+
+<P>
+The rasterop can be specified on the command line.  If this is omitted, 3
+(replace) will be used.  A position in (x,y) coordinates can also be
+specified.  If both are given, the rasterop comes first.  The portable bitmap
+is always taken from the standard input.
+
+<P>
+Note that there is no bgtopbm tool.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright 1989 by Mike Parker.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
+
+
diff --git a/pbmtocmuwm.html b/pbmtocmuwm.html
new file mode 100644
index 00000000..67e5d01a
--- /dev/null
+++ b/pbmtocmuwm.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtocmuwm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtocmuwm</H1>
+Updated: 15 April 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtocmuwm - convert a PBM image into a CMU window manager bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtocmuwm</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtocmuwm</b> reads a portable bitmap as input and produces a CMU
+window manager bitmap as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="cmuwmtopbm.html">cmuwmtopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtodjvurle.html b/pbmtodjvurle.html
new file mode 100644
index 00000000..f52a7a38
--- /dev/null
+++ b/pbmtodjvurle.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtodjvurle User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtodjvurle</H1>
+Updated: 10 April 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="name">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtodjvurle - convert a PBM image to DjVu Bitonal RLE format
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtodjvurle</B>
+
+[<I>pbmfile</I> [<I>rlefile</I>]]
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtodjvurle</b> reads a PBM image as input and produces
+DjVu Bitonal RLE format as output.
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamtodjvurle.html">pamtodjvurle</A>
+<A HREF="pbm.html">pbm</A>
+
+<a name="history"></a>
+<H2>HISTORY</H2>
+<p>
+<b>pbmtodjvurle</b> was new in Netpbm 10.22 (April 2004).
+
+<A NAME="author">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2004 Scott Pakin &lt;scott+pbm@pakin.org&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoepsi.html b/pbmtoepsi.html
new file mode 100644
index 00000000..d6732425
--- /dev/null
+++ b/pbmtoepsi.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pbmtoepsi User Manual</title></HEAD>
+
+<BODY>
+<H1>pbmtoepsi</H1>
+Updated: June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoepsi - convert a PBM image to an encapsulated PostScript
+style preview bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoepsi</B>
+[<B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>]]
+[<B>-bbonly</B>]
+[<I>pbmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>Reads a PBM image as input.  Produces an encapsulated Postscript
+style bitmap as output.  The output is not a stand alone postscript
+file, it is only a preview bitmap, which can be included in an
+encapsulated PostScript file.
+
+<P><b>pbmtoepsi</b> assumes the PBM input describes a whole output
+page, with one pixel on the page corresponding to one PBM pixel.  It
+detects white borders in the image and generates Postscript output
+that contains a Bounding Box statement to describe the location of the
+principal image (the image excluding the white borders) on the page
+and thus does not include the borders in the raster part of the
+Postscript output.
+
+<P>There is no <b>epsitopbm</b> tool - this transformation is one way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>]
+
+<DD>
+     <P>This option specifies the resolution in dots per inch of the
+     ultimate output device.  You must specify this because the
+     Bounding Box statement defines the bounding box in absolute
+     distances, not in pixels.  <b>pbmtoepsi</b> assumes in
+     calculating the bounding box that each PBM pixel will become one
+     dot on the output device, and applies your <b>dpi</b>
+     specification to calculate the size and location on the page of
+     the bounding box.
+
+     <P>If you specify <I>N</I><B>x</B>N, the first number is the
+     horizontal resolution and the second number is the vertical
+     resolution.  If you specify just a single number <I>N</I>, that is the
+     resolution in both directions.
+
+     <P>The default is 72 dots per inch in both directions.
+
+     <P>This option was new In Netpbm 10.3 (June 2002).  Before that, 
+     <b>pbmtoepsi</b> always assumed 72 dots per inch in both directions.
+     
+<DT><B>-bbonly</B>
+
+<DD>
+Only create a boundary box, don't fill it with the image.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbm.html">pbm</A></B>,
+
+<B><A HREF="pnmtops.html">pnmtops</A></B>,
+
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+
+<B><A HREF="psidtopgm.html">psidtopgm</A></B>,
+
+<B><A HREF="pbmtolps.html">pbmtolps</A></B>,
+
+Postscript language documentation
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 Jef Poskanzer, modified by Doug Crabill 1992
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoepson.html b/pbmtoepson.html
new file mode 100644
index 00000000..7d92d53d
--- /dev/null
+++ b/pbmtoepson.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoepson User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoepson</H1>
+Updated: 8 August 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoepson - convert a PBM image into Epson printer graphics
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoepson</B>
+
+[<b>-dpi=</b><i>n</i>]
+[<b>-protocol=</b>{<b>escp9</b>|<B>escp</B>}]
+[<b>-adjacent</b>]
+[<b>-noadjacent</b>]
+
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pbmtoepson</b> reads a PBM image as input and produces a stream of
+Epson printer graphics as output.
+
+<p>The input is from the file identified by the <i>pbmfile</i> argument
+or, if you don't specify <i>pbmfile</i>, from Standard Input.  Output is
+to Standard Output.
+
+<p>The output is for traditional (ca 1991) Epson 9-wire dot matrix
+(sometimes called ESC/P 9-wire) printers or newer ESC/P printers.  For
+a more modern Epson ESC/P2 type printer, try <b>pbmtoescp2</b>.
+
+<p>Before Netpbm 10.23 (July 2004), <b>pbmtoepson</b> could not produce
+ESC/P streams -- only ESC/P 9-wire.
+
+<p>The Epson printer protocols are described in
+<a href="http://www.epson.co.uk/support/manuals/pdf/ESCP/Part_1.pdf">
+Epson's protocol specification</a>.
+
+<p>Note that there is no epsontopbm tool - this transformation is one way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<dl COMPACT>
+
+<dt><b>-protocol=</b>{<b>escp9</b>|<B>escp</B>}
+
+<dd>This determines which Epson printer protocol the output uses.
+<b>escp9</b> is the older ESC/P 9-pin protocol.  <b>escp</b> is the
+newer ESC/P protocol.  For the even newer <b>ESC/P2</b> protocol, you
+have to use <b>pbmtoescp2</b> instead.
+
+<p>This option was new in Netpbm 10.23 (July 2004).     
+</dd>
+
+<dt><b>-dpi=</b><i>n</i>
+
+<dd>This specifies the horizontal print density in dots per inch.  The
+protocol allows only certain values: 60, 72, 80, 90, 120, 144, and 240.
+Actually, the ESC/P protocol allows a few others, but <b>pbmtoepson</b>
+doesn't know how to generate the command streams that use them.
+
+<p>If you don't specify this, <b>pbmtoepson</b> chooses a horizontal
+print density for you consistent with your other options.
+
+<p>This option was new in Netpbm 10.23 (July 2004).     
+
+<dt><b>-adjacent</b>
+<dt><b>-noadjacent</b>
+
+<dd>These options determine whether the output select &quot;adjacent dot
+printing&quot; or not, whatever that is.
+
+<p>If you don't specify this, <b>pbmtoepson</b> selects adjacent dot
+printing unless that is incompatible with your other options.
+
+<p>This option was new in Netpbm 10.23 (July 2004).     
+
+</dl>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtoescp2.html">pbmtoescp2</A>,
+<A HREF="pbm.html">pbm</A>,
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by John Tiller (<A
+HREF="mailto:tiller@galois.msfc.nasa.gov">tiller@galois.msfc.nasa.gov</A>)
+and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<li><A HREF="#lbAB">NAME</A>
+<li><A HREF="#lbAC">SYNOPSIS</A>
+<li><A HREF="#lbAD">DESCRIPTION</A>
+<li><A HREF="#lbAE">OPTIONS</A>
+<li><A HREF="#lbAF">SEE ALSO</A>
+<li><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoescp2.html b/pbmtoescp2.html
new file mode 100644
index 00000000..340c99f5
--- /dev/null
+++ b/pbmtoescp2.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoescp2 User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoescp2</H1>
+Updated: 4 April 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtoescp2 - convert a PBM image to a ESC/P2 printer file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoescp2</B>
+
+[<B>-compress=</B><I>compressionmode</I>]
+[<B>-resolution=</B><I>dpi</I>]
+
+[<I>pbmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or equals signs between an option name and its
+value.
+
+<P>Input is read from file <I>pbmfile</I> if specified, otherwise from
+stdin. Output is written to stdout.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtoescp2</b> reads a PBM image as input.  It produces an ESC/P2
+raster graphic printer control stream as output.
+
+<P> This program creates an output that is printable on Epson printers
+that understand the <a
+href="http://www.epson.co.uk/support/manuals/pdf/ESCP/Part_1.pdf">ESC/P2
+printer control language</a> (e.g. the Stylus models).  For older
+Epson 9-pin dot matrix printers, which use the ESC/P protocol, see
+<B>pbmtoepson</B>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<dl COMPACT>
+
+<dt><b>-compress=</b><i>compressionmode</i>
+
+<dd>This determines the compression mode that <b>pbmtoescp2</b> uses
+in its output.  Valid values for <I>compressionmode</I> are <b>0</b>
+and <b>1</b>.  <b>-compress=0</B> results in a printer control stream
+with uncompressed raster graphic data.  <b>-compress=1</b> results in
+a printer control stream with RLE compressed raster graphic data
+(RLE means Run Length Encoding).  The default is <b>-compress=1</b>.
+</dd>
+
+<dt><b>-resolution=</b><i>dpi</i></dt>
+
+<dd>This determines the horizontal and the vertical print resolution
+set in the printer control stream.  Another way of looking at it is a
+declaration of what the resolution of the input image is (PBM images
+don't have inherent resolution).  Valid values for <i>dpi</i> are
+<b>180</b> and <b>360</b>.  See <a href="#hints">hints</a> for more
+information on this.
+
+<p>The default is <b>-resolution=360</b>.
+
+
+</dd>
+
+</dl>
+
+<H2 id="hints">HINTS</H2>
+
+<P>RLE compresses very well bitmaps of line drawings, preferably
+horizontal oriented contents like texts, sheets of music, etc.
+However, bitmaps derived from photographs are not ideal for RLE.  In
+extreme cases, when no byte repetitions occur in the input, the result
+will be even slightly bigger than the input.  To avoid this, use
+compression mode 0 to switch off RLE.
+
+<p>Each pixel in the input PBM image becomes one dot in the printed
+output.  Therefore, you must make sure the width and height of the
+input are appropriate for the print resolution you choose and the
+print area you want.  E.g. if you print at 180 dpi and want the image
+to print as 8 inches by 10, you must supply a PBM that is 1440
+pixels wide by 1800 pixels high.  You can adjust the size of the
+input with <b>pamscale</b>, <b>pamstretch</b>, <b>pbmreduce</b>, or
+<b>pamenlarge</b>.
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="escp2topbm.html">escp2topbm</A></B>,
+<B><A HREF="pbmtoepson.html">pbmtoepson</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="pamstretch.html">pamstretch</A></B>,
+<B><A HREF="pbmreduce.html">pbmreduce</A></B>,
+<B><A HREF="pamenlarge.html">pamenlarge</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Copyright (C) 2003 by Ulrich Walcher (<A
+HREF="mailto:u.walcher@gmx.de">u.walcher@gmx.de</A>).
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p><b>pbmtoescp2</b> was added to Netpbm in Release 10.18 (August 2003);
+it was created around the same time.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#hints">HINTS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/pbmtog3.html b/pbmtog3.html
new file mode 100644
index 00000000..bbe314ba
--- /dev/null
+++ b/pbmtog3.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtog3 User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtog3</H1>
+Updated: July 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtog3 - convert a PBM image into a Group 3 fax file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtog3</B>
+[<b>-reversebits</b>]
+[<b>-nofixedwidth</b>]
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtog3</b> reads a PBM image as input and produces a Group 3
+fax file as output.
+
+<A NAME="options"></A>
+<H2>OPTIONS</H2>
+<dl>
+<dt><b>-reversebits</b>
+
+<dd>This option causes the output to have the bits in every byte
+reversed so the least signficant bit becomes the most signficant bit.
+Apparently, there is some ambiguity in transmission protocols so that
+the bits get reversed on transmission, and this compensates for that.
+If you get a whole bunch of "bad code word" messages when you try to
+read the G3 file (e.g. with <b>g3topbm</b>, try using this option.
+Note that the output is not G3 when you use this option.
+
+<dt><b>-nofixedwidth</b>
+
+<dd>Most fax machines expect the image to be 1728 columns wide, so
+<b>pbmtog3</b> cuts the output to this width by default.  If you want to
+keep the width of the original image, use this option.
+
+<p>This option was new in Netpbm 10.6 (July 2002).  Before that,
+<b>pbmtog3</b> always kept the width of the original image.
+     
+</dl>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+<p>The standard for Group 3 fax is defined in CCITT Recommendation T.4.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="g3topbm.html">g3topbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Paul Haeberli &lt;<A
+HREF="mailto:paul@manray.sgi.com">paul@manray.sgi.com</A>&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">REFERENCES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtogem.html b/pbmtogem.html
new file mode 100644
index 00000000..f92e81a0
--- /dev/null
+++ b/pbmtogem.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtogem User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtogem</H1>
+Updated: 11 July 1992
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtogem - convert a PBM image into a GEM .img file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtogem</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtogem</b> reads a PBM image as input and produces a
+compressed GEM .img file as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+pbmtogem does not support compression of repeated lines
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="gemtopbm.html">gemtopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by David Beckemeyer (bdt!david) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">BUGS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtogo.html b/pbmtogo.html
new file mode 100644
index 00000000..59c4ac9c
--- /dev/null
+++ b/pbmtogo.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtogo User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtogo</H1>
+Updated: 24 November 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtogo - convert a PBM image into compressed GraphOn graphics
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtogo</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtogo</b> reads a PBM image as input and produces 2D
+compressed GraphOn graphics as output.
+
+<p>Be sure to set up your GraphOn with the following modes: 8 bits /
+no parity; obeys no XON/XOFF; NULs are accepted.  These are all on the
+Comm menu.  Also, remember to turn off tty post processing.  Note that
+there is no gotopbm tool.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988, 1989 by Jef Poskanzer, Michael Haberler, and Bo Thide'.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoibm23xx.html b/pbmtoibm23xx.html
new file mode 100644
index 00000000..1812de5e
--- /dev/null
+++ b/pbmtoibm23xx.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoibm23xx User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoibm23xx</H1>
+Updated: October 16, 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+pbmtoibm23xx - convert a PBM image to IBM 23XX printer stream
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pbmtoibm23xxx</B>
+[<b>-xres=</b><i>dpi</i>]
+[<b>-yres=</b><i>dpi</i>]
+[<I>pbmfile</I> ...]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtoibm23xx</b> reads one or more PBM files as input and
+writes an IBM 23XX printer command stream to generate all the images in
+all the files to Standard Output.
+
+<p>If you don't specify any file names, <b>pbmtoibm23xx</b> reads from
+Standard Input.
+
+<H2 id="options">OPTIONS</H2>
+<dl>
+<dt><b>-xres=</b><i>dpi</i>
+
+<dd>This option specifies the horizontal resolution in dots per inch.
+Valid values are 60, 120, and 240.
+
+<dt><b>-yres=</b><i>dpi</i>
+
+<dd>This option specifies the vertical resolution in dots per inch.
+Valid values are 60, 120, and 240.
+
+<dt><b>-slow</b>
+
+<dd>
+Use the slower printing mode where two modes with the same resolution
+are available.  This usually produces better quality prints.  This
+affects only modes with horizontal resolution 120, but might affect
+other modes in future versions of the program.
+     
+</dl>
+
+<h2 id="limitations">LIMITATIONS</h2>
+
+<p>There are probably better ways to control the IBM 23XX printers.  Let
+me know if you find any.
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>pbmtoibm23xx</b> was new in Netpbm 10.25 (October 2004).
+
+<H2 id="seealso">SEE ALSO</H2>
+
+
+<A HREF="pbm.html">pbm</A>,
+Ghostscript (<b>gs</b>).
+
+<H2 id="author">AUTHOR</H2>
+
+<p>Copyright (C) 2004 Jorrit Fahlke &lt;jorrit@jorrit.de&gt;.  Copying
+policy: GNU GPL version 2
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#limitations">LIMITATIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoicon.html b/pbmtoicon.html
new file mode 100644
index 00000000..11959f98
--- /dev/null
+++ b/pbmtoicon.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoicon User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoicon</H1>
+Updated: 31 August 1988
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtoicon - convert a PBM image into a Sun icon
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoicon</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pbmtoicon</b> reads a PBM image as input and produces a Sun icon
+as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="icontopbm.html">icontopbm</A>,
+<A HREF="pbm.html">pbm</A>
+<A NAME="lbAF">&nbsp;</A>
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtolj.html b/pbmtolj.html
new file mode 100644
index 00000000..23e9210a
--- /dev/null
+++ b/pbmtolj.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtolj User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtolj</H1>
+Updated: 23 April 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtolj - convert a PBM image to HP LaserJet format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtolj</B>
+[<B>-resolution</B> <I>N</I>]
+[<B>-float</B>]
+[<B>-noreset</B>]
+[<B>-packbits</B>]
+[<B>-delta</B>]
+[<B>-compress</B>]
+[<I>pbmfile</I>]
+[<B>-copies</B> <I>N</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtolj</b> reads a PBM image as input and produces HP LaserJet
+data as output.  You can send this data to a LaserJet or DeskJet printer
+(at least some of them).
+
+<p>Each pixel in the input PBM image becomes one dot in the printed
+output.  Therefore, you must make sure the width and height of the
+input are appropriate for the print resolution you choose and the
+print area you want.  E.g. if you print at 300 dpi and want the image
+to print as 8 inches by 10, you must supply a PBM that is 2400
+pixels wide by 3000 pixels high.  You can adjust the size of the
+input with <b>pamscale</b>, <b>pamstretch</b>, <b>pbmreduce</b>, or
+<b>pamenlarge</b>.
+
+<p>The input may be a multi-image PBM stream.  Each input image
+becomes a page of output.  But before Netpbm 10.28 (June 2005), images
+after the first one are ignored.
+
+<p>Note that there is no ljtopbm tool.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-resolution</B>
+
+<DD>Specifies the resolution of the output device, in dpi.  Another
+way to look at this is as a declaration of the resolution of the input
+image (PBM images don't have inherent resolution).  Typical values are
+75, 100, 150, 300, and 600.  The default is 75.
+
+<DT><B>-float</B>
+
+<DD>Suppresses positioning commands.  By default, <b>pbmtolj</b>
+places the sequence <I>ESC &amp; l 0 E</I> in the output, which means
+to force the top margin to zero.  With <b>-float</b>, <b>pbmtolj</b>
+omits that command.
+
+<DT><B>-noreset</B>
+
+<DD>Prevents pbmtolj from writing the reset sequences to the beginning
+and end of the output file.
+
+<DT><B>-packbits</B>
+
+<DD>Enables use of TIFF packbits compression.
+
+<DT><B>-delta</B>
+
+<DD>Enables use of delta-between-rows compression.
+
+<DT><B>-compress</B>
+
+<DD>Enables use of both TIFF packbits, and delta-between-rows compression.
+
+<DT><B>-copies</B>
+
+<DD>Specifies the the number of copies. The default is 1.  This option
+controls the &quot;number of copies&quot; printer control;
+<B>pbmtolj</B> generates only one copy of the image.
+
+</DL>
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<a href="pnmtopclxl.html"><b>pnmtopclxl.html</b></a>,
+<a href="pbmtolj.html"><b>ppmtolj.html</b></a>,
+<a href="pjtoppm.html"><b>pjtoppm.html</b></a>,
+<a href="ppmtopj.html"><b>ppmtopj</b></a>,
+<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer and Michael Haberler.
+<B>-float</B> and <B>-noreset</B> options added by Wim Lewis.
+<B>-delta, -packbits,</B> and <B>-compress</B> options added by Dave
+Platt.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+X<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoln03.html b/pbmtoln03.html
new file mode 100644
index 00000000..99f0ff61
--- /dev/null
+++ b/pbmtoln03.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoln03 User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoln03</H1>
+Updated: 7 May 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoln03 - convert PBM image to DEC LN03+ Sixel output
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoln03</B>
+[<B>-rltbf</B>]
+<I>pbmfile</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtoln03</b> reads a PBM image as input and produces a DEC
+LN03+ Sixel output file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-l nn</B>
+
+<DD>Use &quot;nn&quot; as value for left margin (default 0).
+
+<DT><B>-r nn</B>
+
+<DD>Use &quot;nn&quot; as value for right margin (default 2400).
+
+<DT><B>-t nn</B>
+
+<DD>Use &quot;nn&quot; as value for top margin (default 0).
+
+<DT><B>-b nn</B>
+
+<DD>Use &quot;nn&quot; as value for bottom margin (default 3400).
+
+<DT><B>-f nn</B>
+
+<DD>Use &quot;nn&quot; as value for form length (default 3400).
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Tim Cook, 26 Feb 1992
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtolps.html b/pbmtolps.html
new file mode 100644
index 00000000..cd3cb746
--- /dev/null
+++ b/pbmtolps.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtolps User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>pbmtolps</H1>
+Updated: 12 Dec 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtolps - convert PBM image to PostScript
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>pbmtolps</b>
+[<b>-dpi</b> <i>n</i>]
+[<i>pbmfile</i>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtolps</b> reads a PBM image as input and outputs PostScript.
+The output Postscript uses lines instead of the image operator to
+generate a (device dependent) picture which will be imaged much
+faster.
+
+<P>The Postscript path length is constrained to be less that 1000
+points so that no limits are overrun on the Apple Laserwriter and
+(presumably) no other printers.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmtops.html">pnmtops</A></B>,
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>,
+<B><A HREF="psidtopgm.html">psidtopgm</A></B>,
+<B>gs</B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+George Phillips &lt;<A
+HREF="mailto:phillips@cs.ubc.ca">phillips@cs.ubc.ca</A>&gt;
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtomacp.html b/pbmtomacp.html
new file mode 100644
index 00000000..fb4570f9
--- /dev/null
+++ b/pbmtomacp.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtomacp User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtomacp</H1>
+Updated: 31 August 1988
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtomacp - convert a PBM image into a MacPaint file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtomacp</B>
+[<B>-l</B> <I>left</I>]
+
+[<B>-r</B> <I>right</I>]
+
+[<B>-b</B> <I>bottom</I>]
+
+[<B>-t</B> <I>top</I>]
+
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtomacp</b> reads a PBM image as input and produces a MacPaint
+file as output.
+
+<p>If you do not specify <i>pbmfile</i>, <b>pbmtomacp</b> uses Standard Input.
+
+<P> The generated file is only the data fork of a picture.  You will
+need a program such as <B>mcvert</B> to generate a Macbinary or a
+BinHex file that contains the necessary information to identify the
+file as a PNTG file to MacOS.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P> <b>-l</b>, <b>-r</b>, <b>-b</b>, and <b>-t</b> let you define a
+square into the pbm file, that must be converted.  Default is the
+whole file.  If the file is too large for a MacPaint-file, the bitmap
+is cut to fit from ( left, top ).
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtopict.html">ppmtopict</A>,
+<A HREF="macptopbm.html">macptopbm</A>,
+<A HREF="pbm.html">pbm</A>,
+<b>mcvert</b> documentation
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Douwe van der Schaaf (...!mcvax!uvapsy!vdschaaf).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtomatrixorbital.html b/pbmtomatrixorbital.html
new file mode 100644
index 00000000..575ad45c
--- /dev/null
+++ b/pbmtomatrixorbital.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtomatrixorbital User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtomatrixorbital</H1>
+Updated: 06 September 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="name">&nbsp;</A>
+<H2>NAME</H2>
+pbmtomatrixorbital - convert a PBM image to a Matrix Orbital LCD image
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtomatrixorbital</B>
+
+[<I>pbmfile</I>]
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pbmtomatrixorbital</b> reads a PBM image as input and produces as output
+an image that can be uploaded to a Matrix Orbital LCD display.
+
+<p>You can upload the image to the LCD via the serial port to which it
+is connected with the program <b>mo-upload.pl</b>, which you can get from
+the package <b>pbmtomatrixorbital</b>.  Yes, the package is the same name
+as this Netpbm program, and it contains its own <b>pbmtomatrixorbital</b>
+program which is slightly different from this one because it is not part
+of the Netpbm package.
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p><b>pbmtomatrixorbital</b> was added to Netpbm in Release 10.18
+(September 2003).
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtox10bm.html">pbmtox10bm</A>,
+<A HREF="xbmtopbm.html">xbmtopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtomda.html b/pbmtomda.html
new file mode 100644
index 00000000..f016bdec
--- /dev/null
+++ b/pbmtomda.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtomda User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtomda</H1>
+Updated: 3 June 1999
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtomda - convert a PBM image to a Microdesign .mda
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtomda</B>
+
+[<B>-d</B>]
+[<B>-i</B>]
+[<B>--</B>]
+
+[<i>pbmfile</i>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtomda</b> reads a PBM image as input and
+produces a MicroDesign 2 area file (.MDA) as output.
+
+<p>If you do not specify <i>pbmfile</i>, <b>pbmtomda</b> uses Standard Input.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-d</B>
+
+<DD>
+Halve the height of the output file, to compensate for the aspect 
+ratio used in MicroDesign files.
+<DT><B>-i</B>
+
+<DD>
+Invert the colors used.
+<DT><B>--</B>
+
+<DD>
+End of options (use this if the filename starts with &quot;-&quot;)
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+There's no way to produce files in MicroDesign 3 format. MD3 itself and 
+<A HREF="mdatopbm.html">mdatopbm</A> can read files in either format.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="mdatopbm.html">mdatopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1999 John Elliott &lt;<A HREF="mailto:jce@seasip.demon.co.uk">jce@seasip.demon.co.uk</A>&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtomgr.html b/pbmtomgr.html
new file mode 100644
index 00000000..ed6e410c
--- /dev/null
+++ b/pbmtomgr.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtomgr User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtomgr</H1>
+Updated: 06 November 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pbmtomgr - convert a PBM image into a MGR bitmap
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pbmtomgr</B>
+
+[<I>pbmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtomgr</b> reads a PBM image as input and produces a MGR
+bitmap as output.
+
+<p><a
+href="ftp://sunsite.unc.edu/pub/Linux/apps/MGR/!INDEX.html">MGR</a> is
+a window manager that is a smaller alternative to the X Windows
+System.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="mgrtopbm.html">mgrtopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtomrf.html b/pbmtomrf.html
new file mode 100644
index 00000000..530a2013
--- /dev/null
+++ b/pbmtomrf.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtomrf User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtomrf</H1>
+Updated: 1991
+<BR>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtomrf - convert a PBM format image to MRF
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtomrf</B>
+
+[<I>pbmfile</I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtomrf</b> converts a PBM image to MRF format.
+
+<P>For more information about mrf, see <A HREF="mrf.html">the MRF
+specification</A>.
+
+<p><b>pbmtomrf</b> takes the PBM image from the file named by the
+<i>input.pbm</i> argument, or Standard Input if you don't specify
+<i>input.pbm</i>.  The output goes to Standard Output.
+
+<P>The compression of the edges of pictures with width and/or height
+not an exact multiple of 64 is not optimal in all cases.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+none.
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Russell Marks.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmtomrf.html">pbmtomrf</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="mrf.html">mrf</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtonokia.html b/pbmtonokia.html
new file mode 100644
index 00000000..431eb93c
--- /dev/null
+++ b/pbmtonokia.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtonokia User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtonokia</H1>
+Updated: 14 September 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pbmtonokia - convert a PBM image to Nokia Smart Messaging Formats
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pbmtonokia</b>
+[
+<b>-fmt</b>
+  {
+    <B>HEX_NOL</B>,
+    <B>HEX_NGG</B>,
+    <B>HEX_NPM</B>,
+    <B>NOL</B>,
+    <B>NGG</B>,
+    <B>NPM</B>
+  }   
+]
+<br>
+[<B>-net</b> <i>networkcode</i>]
+[<b>-txt</b> <i>text</i>]
+[<I>pbmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtonokia</b> reads a PBM image as input and produces a Nokia
+Smart Messaging (hexcode, .nok, .ngg) file as output.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-fmt</B>
+<DD>
+Specifies the output format (default is HEX_NOL).
+
+<dl>
+<DT><b>HEX_NOL</b>
+<DD>
+Nokia Operator Logo as (uploadable) hexcode.
+Use option -net to specify network code.
+
+<DT><b>HEX_NGG</b>
+<DD>
+Nokia Group Graphic as (uploadable) hexcode.
+
+<DT><b>HEX_NPM</b>
+<DD>
+Nokia Picture Message as (uploadable) hexcode.
+Use option <b>-txt</b> to specify an optional text message.
+
+<DT><b>NOL</b>
+<DD>Nokia Operator Logo as .nol format. This is editable by
+the Group-Graphic Editor from Kessler Wireless Design (<A
+HREF="http://www.kessler-design.com">www.kessler-design.com</A>)
+
+<DT><b>NGG</b>
+
+<DD>Nokia Group Graphic as .ngg format. This is editable by the
+Group-Graphic Editor from Kessler Wireless Design (<A
+HREF="http://www.kessler-design.com">www.kessler-design.com</A>)
+
+<DT><b>NPM</b>
+
+<DD>Nokia Picture Message as .npm format. This is editable by the
+Picture-Message Editor from Kessler Wireless Design (<A
+HREF="http://www.kessler-design.com">www.kessler-design.com</A>)
+
+<p>This option was new in Netpbm 10.36 (October 2006).
+
+</dl>
+     
+<DT><B>-net</B>
+
+<DD>Specifies the 6 hex-digit operator network code for Operator
+Logos (Default is 62F210 = D1,Germany).
+
+<DT><B>-txt</B>
+
+<DD>
+Specifies the text message for Picture Messages.  The maximum size
+text message allowed by the format is 120 characters.
+
+<p>Default is no text message.
+
+</DL>
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+Currently limited to rows&lt;=255 and columns&lt;=255.  Generates only
+black and white graphics, not animated.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<ul>
+<li><B><A HREF="pbm.html">pbm</A></B>,
+
+<li><B>Nokia Smart Messaging Specification (<A
+HREF="http://forum.nokia.com)">http://forum.nokia.com)</A></B>
+
+<li><a href="http://www.kessler-design.com/wireless/samples.html">
+http://www.kessler-design.com/wireless/samples.html</a>
+
+<li><a href="http://www.gnokii.org">Gnokii</a>
+
+</ul>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 2001 Tim Ruehsen &lt;<A
+HREF="mailto:tim.ruehsen@openmediasystem.de">tim.ruehsen@openmediasystem.de</A>&gt;.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#limitations">LIMITATIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtopgm.html b/pbmtopgm.html
new file mode 100644
index 00000000..f68dfcad
--- /dev/null
+++ b/pbmtopgm.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtopgm User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>pbmtopgm</H1>
+<p>Updated: 05 Feb 2003
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtopgm - convert PBM image to PGM by averaging areas
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtopgm </B>
+<I>width</I>
+<I>height</I>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pbmtopgm</B> reads a PBM image as input.  It outputs a PGM image
+in which each pixel's gray level is the average of the surrounding
+black and white input pixels.  The surrounding area is a rectangle of
+<I>width</I> by <I>height</I> pixels.
+
+<P>In other words, this is a convolution.  <B>pbmtopgm</B> is similar
+to a special case of <B>pnmconvol</B>.
+
+<P>You may need a <B>pnmsmooth</B> step after <B>pbmtopgm</B>.
+
+<P><B>pbmtopgm</B> has the effect of anti-aliasing bitmaps which
+contain distinct line features.
+
+<P><B>pbmtopgm</B> works best with odd sample width and heights.
+
+<P>You don't need <B>pbmtopgm</B> just to use a PGM program on a PBM
+image.  Any PGM program (assuming it uses the Netpbm libraries to read
+the PGM input) takes PBM input as if it were PGM, with only the
+mininum and maximum gray levels.  So unless your convolution rectangle
+is bigger than one pixel, you're not gaining anything with a
+<B>pbmtopgm</B> step.
+
+<p>The opposite transformation (which would turn a PGM into a PBM) is
+dithering.  See <b>pamditherbw</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamditherbw.html">pamditherbw</A></B>,
+<B><A HREF="pnmconvol.html">pnmconvol</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Copyright (C) 1990 by Angus Duggan.
+<P>Copyright (C) 1989 by Jef Poskanzer.
+
+<P>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.  This software is provided &quot;as is&quot;
+without express or implied warranty.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtopi3.html b/pbmtopi3.html
new file mode 100644
index 00000000..5a7b153b
--- /dev/null
+++ b/pbmtopi3.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtopi3 User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtopi3</H1>
+Updated: 11 March 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtopi3 - convert a PBM image into an Atari Degas .pi3 file 
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtopi3</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtopi3</b> reads a PBM image as input and produces an Atari
+Degas .pi3 file as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pi3topbm.html">pi3topbm</A>,
+<A HREF="ppmtopi1.html">ppmtopi1</A>,
+<A HREF="pi1toppm.html">pi1toppm</A>
+<A HREF="pbm.html">pbm</A>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by David Beckemeyer (bdt!david) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtopk.html b/pbmtopk.html
new file mode 100644
index 00000000..744ffd1c
--- /dev/null
+++ b/pbmtopk.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtopk User Manual</TITLE>
+</HEAD><BODY>
+<H1>pbmtopk</H1>
+Updated: 6 August 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtopk - convert a PBM image into a packed (PK) format font
+<A NAME="lbAC">&nbsp;</A>
+
+<H2>SYNOPSIS</H2>
+
+<b>pbmtopk</b>
+<i>pkfile</i>[<b>.pk</b>]
+<i>tfmfile</i>[<b>.tfm</b>]
+<i>resolution</i>
+[<b>-s</b> <i>designsize</i>]
+[<b>-p</b> <i>num</i> <i>param</i>...]
+[<b>-C</b> <i>codingscheme</i>]
+[<b>-F</b> <i>family</i>]
+[<b>-f</b> <i>optfile</i>]
+[<b>-c</b> <i>num</i>]
+[<b>-W</b> <i>width</i>]
+[<b>-H</b> <i>height</i>]
+[<b>-D</b> <i>depth</i>]
+[<b>-I</b> <i>ital</i>]
+[<b>-h</b> <i>horiz</I>]
+[<b>-v</b> <i>vert</i>]
+[<b>-x</b> <i>xoff</i>]
+[<b>-y</b> <i>yoff</i>]
+[<i>pbmfile</i> ...]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtopk</b> reads PBM images as input and produces a packed (PK)
+font file and a TFM (TeX font metric) file as output. The resolution
+parameter indicates the resolution of the font, in dots per inch. If
+the filename &quot;-&quot; is used for any of the filenames,
+<b>pbmtopk</b> uses Standard Input or Standard Output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><b>-s</b> <i>designsize</i>
+<DD>
+Sets the design size of the font, in TeX's points (72.27pt to the inch). The
+default design size is 1. The TFM parameters are given as multiples of the
+design size.
+
+<DT><b>-p</b> <i>num</i> <i>param</i>...
+
+<DD>Sets the first num font parameters for the font. The first seven
+parameters are the slant, interword spacing, interword space
+stretchability, interword space shrinkability, x-height, quad width,
+and post-sentence extra space of the font. Math and symbol fonts may
+have more parameters; see The TeXbook for a list of these. Reasonable
+default values are chosen for parameters which are not specified.
+
+<DT><b>-C</b> <i>codingscheme</i>
+
+<DD>
+Sets the coding scheme comment in the TFM file.
+
+<DT><b>-F</b> <i>family</i><DD>
+Sets the font family comment in the TFM file.
+
+<DT><b>-f</b> <i>optfile</i>
+
+<DD>Reads the file optfile, which should contain a lines of the form:
+
+<PRE>
+   filename xoff yoff horiz vert width height depth ital
+</PRE>
+
+
+<P>The PBM files specified by the filename parameters are inserted
+consecutively in the font with the specified attributes. If any of the
+attributes are omitted, or replaced with &quot;*&quot;, a default
+value will be calculated from the size of the bitmap. The settings of
+the -W, -H, -D, -I, -h, -v, -x, and -y options do not affected
+characters created in this way.  The character number can be changed
+by including a line starting with &quot;=&quot;, followed by the new
+number.  Lines beginning with &quot;%&quot; or &quot;#&quot; are
+ignored.
+
+<DT><B>-c</B> <I>num</I>
+<DD>Sets the character number of the next bitmap encountered to num.
+
+<DT><B>-W</B> <I>width</I>
+
+<DD>Sets the TFM width of the next character to width (in design size
+multiples).
+
+<DT><B>-H</B> <I>height</I>
+
+<DD>Sets the TFM height of the next character to height (in design
+size multiples).
+
+<DT><B>-D</B> <I>depth</I>
+
+<DD>Sets the TFM depth of the next character to depth (in design size
+multiples).
+
+<DT><B>-I</B> <I>ital</I>
+
+<DD>Sets the italic correction of the next character to ital (in
+design size multiples).
+
+<DT><B>-h</B> <I>horiz</I>
+
+<DD>Sets the horizontal escapement of the next character to horiz (in
+pixels).
+
+<DT><B>-v</B> <I>vert</I>
+
+<DD>Sets the vertical escapement of the next character to vert (in pixels).
+
+<DT><B>-x</B> <I>xoff</I>
+
+<DD>Sets the horizontal offset of the next character to xoff (in
+pixels).
+
+<DT><B>-y</B> <I>yoff</I>
+
+<DD>Sets the vertical offset of the next character to yoff (in pixels,
+from the top row).
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pktopbm.html">pktopbm</A>, 
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Adapted from Tom Rokicki's pxtopk by Angus Duggan &lt;<A
+HREF="mailto:ajcd@dcs.ed.ac.uk">ajcd@dcs.ed.ac.uk</A>&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoplot.html b/pbmtoplot.html
new file mode 100644
index 00000000..97fe341a
--- /dev/null
+++ b/pbmtoplot.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoplot User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoplot</H1>
+Updated: 1 September 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoplot - convert a PBM image into a Unix 'plot' file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoplot</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtoplot</b> reads a PBM image as input and produces a Unix
+<B>plot</B> file as output.
+
+<P>
+Note that there is no plottopbm tool - this transformation is one-way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>,
+<b>plot</b>(1)
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Arthur David Olson.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoppa.html b/pbmtoppa.html
new file mode 100644
index 00000000..ab605b29
--- /dev/null
+++ b/pbmtoppa.html
@@ -0,0 +1,317 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoppa User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoppa</H1>
+Updated: 01 May 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoppa - convert PBM image to HP Printer Performance Architecture (PPA)
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoppa</B>
+[<I>pbm_file</I>
+[<I>ppa_file</I>]]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pbmtoppa</B> converts page images in PBM format to Hewlett
+Packard's PPA (Printer Performance Architecture) format, which is the
+data stream format expected by some HP &quot;Windows-only&quot;
+printers including the HP Deskjet 820C series, the HP DeskJet 720
+series, and the HP DeskJet 1000 series.
+
+<P><I>pbm_file</I> is the file specification of the input file or
+<B>-</B> for Standard Input.  The default is Standard Input.
+
+<P>The input file contains one or more PBM images, with each one
+being a single page.  Each image must have the exact dimensions of a
+page (at 600 pixels per inch in both directions).  Significantly, this
+is the format that Ghostscript produces.
+
+<P><I>ppa_file</I> is the file specification of the output file or
+<B>-</B> for Standard Output.  The default is Standard Output.
+
+<P>To print Postscript on an HP PPA printer, just use Ghostscript with
+the <B>pbmraw</B> (or <B>pbm</B>) device driver.
+
+<P>You can generate a test page for use with this program with
+<B>pbmpage</B>.
+
+<P>You can also set up a printer filter so you can submit PBM input
+directly to your print queue.  See the documentation for your print
+spooler for information on how to do that, or look in hp820install.doc
+for an example lpd print filter for Postscript and text files.
+
+<P>Sometimes, <B>pbmtoppa</B> generates a file which the printer will
+not print (because <B>pbmtoppa</B>'s input is unprintable).  When this
+happens, all three lights blink to signal the error.  This is usually
+because there is material outside of the printer's printable area.  To
+make the file print, increase the margins via <B>pbmtoppa</B> options
+or a configuration file.  See <a href="#calibration">the section on
+calibration </a> below.
+
+<h3>About PPA</h3>
+
+<p>The PPA printer language is a far lower level language than most.
+When you use a PPA printer, most of the processing that a conventional
+printer does is done instead on the computer end of the wire.  In
+particular, <b>pbmtoppa</b> has to do &quot;swath cutting,&quot; and
+&quot;sweep formatting,&quot; which other printers do themselves.
+There is very little intelligence inside a PPA printer;
+<b>pbmtoppa</b> generates direct controls for the printer's hardware.
+
+<p>The design goal of PPA was to reduce the cost of a printer by exploiting
+computing resources already present in the computer that requests the
+printing.  CPU power, ROM, and RAM requirements inside the printer are all
+reduced compared to a conventional printer.
+
+<p>PPA was new in 1997.  It was predated by Hewlett Packard's PCL
+(Printer Control Language) language.  HP manufactured PPA printers for only
+a few years, and no one else ever did.
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-v</B> <I>version</I>
+
+<DD>
+printer version (720, 820, or 1000)
+
+<DT><B>-x</B> <I>xoff</I>
+
+<DD>
+horizontal offset adjustment in 1/600 inches.
+
+<DT><B>-y</B> <I>yoff</I>
+
+<DD>
+vertical offset adjustment in 1/600 inches.
+
+<DT><B>-t</B> <I>topmarg</I>
+
+<DD>
+top margin in 1/600 inches    (default: 150 = 0.25 inch)
+
+<DT><B>-l</B> <I>leftmarg</I>
+
+<DD>
+left margin in 1/600 inches   (default: 150 = 0.25 inch)
+
+<DT><B>-r</B> <I>rightmarg</I>
+
+<DD>
+right margin in 1/600 inches (default: 150 = 0.25 inch)
+
+<DT><B>-b</B> <I>botmarg</I>
+
+<DD>
+bottom margin in 1/600 inches (default: 150 = 0.25 inch)
+
+<DT><B>-s</B> <I>paper</I>
+
+<DD>paper size: <B>us</B> or <B>a4</B>.  Default is <B>us</B>.
+
+<dt><b>-d</b> <i>dpi</i>
+<dd>
+Print resolution in dots per inch.
+
+<DT><B>-f</B> <I>cfgfile</I>
+
+<DD>Read parameters from the configuration file named <I>cfgfile</I>.
+See <a href="#configfile">CONFIGURATION FILES</a>
+
+</DL>
+
+<P>The offset adjustments you specify with <B>-x</B> and <B>-y</B>
+accumulate.  I.e. if you specify them multiple times, the total offset
+adjustment is the sum of the adjustments you specify.  <b>-x 60 -x 120</b>
+is the same as <b>-x 180</b>.
+
+<P>The <B>-v</B> option undoes any preceding <b>-x</b> and <b>-y</b>
+options, leaving the horizontal and vertical adjustments their
+default values.
+
+
+<H2 id="configfile">CONFIGURATION FILES</H2>
+
+<P>You can use a configuration file to specify parameters rather than
+use invocation options.  <B>pbmtoppa</B> processes the file
+<b>/etc/pbmtoppa.conf</b>, if it exists, before processing any
+options.  It then processes each configuration file named by a
+<B>-f</B> option in order, applying the parameters from the
+configuration file as if they were invocation options used in the
+place of the <B>-f</B> option.
+
+<P>Configuration files have the following format:
+
+<PRE>
+<B>#</B><I>Comment</I>
+<I>key1</I> <I>value1</I>
+<I>key2</I> <I>value2</I>
+[etc.]
+</PRE>
+
+<P>Valid <I>key</I>s are <B>version</B>, <B>xoffset</B>,
+<B>yoffset</B>, <B>topmargin</B>, <B>leftmargin</B>,
+<B>rightmargin</B>, <B>bottommargin</B>, <B>papersize</B>, or any
+non-null prefix of these words.  Valid values are the same as with the
+corresponding invocation parameters.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<P>Print a test pattern: 
+<PRE>
+<B>pbmpage | pbmppa &gt;/dev/lp1</B>
+</pre>
+
+<P>
+Print three pages:
+<PRE>
+<B>cat page1.pbm page2.pbm page3.pbm | pbmppa &gt;/dev/lp1</B>
+</pre>
+<P>
+Print the Postscript file myfile.ps:
+<PRE>
+gs -sDEVICE=rawpbm -q -dNOPAUSE -r600 \
+   -sOutputFile=- myfile.ps ;\
+| pbmtoppa | lpr
+</pre>
+
+<A NAME="calibration">&nbsp;</A>
+<H2>CALIBRATION</H2>
+
+<p>To be able to print successfully and properly, you need to tell
+<B>pbmtoppa</B> an X and a Y offset appropriate for your printer to
+use when generating the page.  You can specify these offsets with the
+<B>-x</B> and <B>-y</B> invocation options or with the <B>xoff</B> and
+<B>yoff</B> parameters in a <B>pbmtoppa</B> configuration file.
+
+<P>To determine the correct offsets, use the <B>pbmpage</B> program.
+
+<P>If while trying to do this calibration, the printer refuses to
+print a page, but just blinks all three lights, specify large margins
+(e.g. 600 pixels -- one inch) via <B>pbmpage</B> invocation options
+while doing the calibration.
+
+<P>For example:
+<PRE>
+<B>pbmpage | pbmtoppa &gt;/dev/lp1</B>
+</pre>
+or
+<pre>
+<B>pbmpage | pbmtoppa | lpr -l</B>
+</pre>
+
+(if your printer filter recognizes the '-l' (direct output) parameter).
+
+<P>In the test pattern, the grid is marked off in pixel coordinate
+numbers.  Unfortunately, these coordinates are probably cut off before
+the edge of the paper.  You'll have to use a ruler to estimate the
+pixel coordinate of the left and top edges of the actual sheet of
+paper (should be within +/- 300, may be negative; there are 600 pixels
+per inch).
+
+<P>Add these coordinates to the X and Y offsets by either editing the
+configuration file or using the <B>-x </B> and <B>-y</B> command-line
+parameters.
+
+<P>When <B>pbmtoppa</B> is properly calibrated, the center mark should
+be in the center of the paper.  Also, the margins should be able to be
+as small as 1/4 inch without causing the printer to choke with
+'blinking lights syndrome'.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>REDHAT LINUX INSTALLATION</H2>
+
+<P>RedHat users may find the following tip from Panayotis Vryonis
+&lt;<A HREF="mailto:vrypan@hol.gr">vrypan@hol.gr</A>&gt; helpful.  The
+same should work for the 820 and 1000, but it hasn't been tested.
+Also, use the pbmraw GSDriver if you have it; it's faster.
+
+<P>Here is a tip to intergrate HP720C support in RedHat's printtool:
+
+<P>Install pbmtoppa. Copy pbmtoppa to /usr/bin.
+
+<P>Edit &quot;printerdb&quot; (in my system it is found in
+/usr/lib/rhs/rhs-printfilters ) and append the following lines:
+
+<PRE>
+----------------------Cut here-----------------------
+
+StartEntry: DeskJet720C
+&nbsp;&nbsp;GSDriver:&nbsp;pbm
+&nbsp;&nbsp;Description:&nbsp;{HP&nbsp;DeskJet&nbsp;720C}
+&nbsp;&nbsp;About:&nbsp;{&nbsp;\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;driver&nbsp;supports&nbsp;the&nbsp;HP&nbsp;DeskJet&nbsp;720C&nbsp;\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inkjet&nbsp;printer.&nbsp;\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It&nbsp;does&nbsp;does&nbsp;not&nbsp;support&nbsp;color&nbsp;printing.&nbsp;\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORTANT!&nbsp;Insert&nbsp;\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;-&nbsp;|&nbsp;pbm2ppa&nbsp;-&quot;&nbsp;\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;the&nbsp;&quot;Extra&nbsp;GS&nbsp;Otions&quot;&nbsp;field.\
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+
+&nbsp;&nbsp;Resolution:&nbsp;{600}&nbsp;{600}&nbsp;{}
+
+EndEntry
+----------------------------------------------------
+</pre>
+
+<P>Now you can add an HP720C printer just like any other, using
+printtool.
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmpage.html">pbmpage</A></B>,
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<P><B>pnm2ppa</B> is not part of Netpbm, but does the same things as
+<B>pbmtoppa</B> except it also works with color and has lots more
+features.  See &lt;<A
+HREF="http://sourceforge.net/projects/pnm2ppa">http://sourceforge.net/projects/pnm2ppa</A>&gt;.
+
+<P>The file INSTALL-MORE in the pbmtoppa directory of the Netpbm
+source code contains detailed instructions on setting up a system to
+use pbmtoppa to allow convenient printing on HP PPA printers.  It was
+written by Michael Buehlmann.
+
+<P>For information about the PPA protocol and the separately
+distributed pbm2ppa program from which <B>pbmtoppa</B> was derived,
+see &lt;<A
+HREF="http://www.httptech.com/ppa">http://www.httptech.com/ppa</A>&gt;.
+
+<A NAME="lbAJ">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Tim Norman.  Copyright (C) 1998.  Licensed under GNU Public License
+
+<P>Manual page by Bryan Henderson, May 2000.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#configfile">CONFIGURATION FILES</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#calibration">CALIBRATION</A>
+<LI><A HREF="#lbAH">REDHAT LINUX INSTALLATION</A>
+<LI><A HREF="#lbAI">SEE ALSO</A>
+<LI><A HREF="#lbAJ">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtopsg3.html b/pbmtopsg3.html
new file mode 100644
index 00000000..fff9b889
--- /dev/null
+++ b/pbmtopsg3.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtopsg3 User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtopsg3</H1>
+Updated: 22 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtopsg3 - convert PBM images to Postscript with G3 fax compression
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtopsg3</B>
+[<B>--title=</B><I>title</I>]
+[<B>--dpi=</B><I>dpi</I>]
+[<I>filespec</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pbmtopsg3</b> converts the PBM images in the input PBM file to
+pages in a Postscript file encoded with G3 fax compression.
+
+<P>If you don't specify <I>filespec</I>, the input is from Standard
+Input.
+
+<P>Remember that you can create a multi-image PBM file simply by
+concatenating single-image PBM files, so if each page is in a
+different file, you might do:
+
+<pre>
+cat faxpage* | pbmtopsg3 &gt;fax.ps
+</pre>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-title</B>
+
+<DD>The Postscript title value.  Default is no title.
+
+<DT><B>-dpi</B>
+
+<DD>The resolution of the Postscript output.  Default is 72 dpi.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmtops.html">pnmtops</A></B>,
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+<B>gs</b>(1),
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+<B><A HREF="pbmtolps.html">pbmtolps</A></B>,
+<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>,
+<B><A HREF="pbmtog3.html">pbmtog3</A></B>,
+<B><A HREF="g3topbm.html">g3topbm</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoptx.html b/pbmtoptx.html
new file mode 100644
index 00000000..2614d95b
--- /dev/null
+++ b/pbmtoptx.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoptx User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoptx</H1>
+Updated: 31 August 1988
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtoptx - convert a PBM image into Printronix printer graphics
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoptx</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtoptx</b> reads a PBM image as input and produces a file of
+Printronix printer graphics as output.
+
+<P>Note that there is no ptxtopbm tool - this transformation is one way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtowbmp.html b/pbmtowbmp.html
new file mode 100644
index 00000000..833987fb
--- /dev/null
+++ b/pbmtowbmp.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtowbmp User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtowbmp</H1>
+Updated: 19 November 1999
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pbmtowbmp - convert a PBM image to a wireless bitmap (wbmp) file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtowbmp</B>
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pbmtowbmp</b> reads a PBM image as input and
+produces a wbmp file as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p><b>pbmtowbmp</b> can generate only WBMP type 0. This is the only
+type specified in the WAP 1.1 specifications.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="wbmptopbm.html">wbmptopbm</A></B>,
+
+<B>Wireless Application Environment Specification</B>.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1999 Terje Sannum &lt;<A HREF="mailto:terje@looplab.com">terje@looplab.com</A>&gt;.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">LIMITATIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtox10bm.html b/pbmtox10bm.html
new file mode 100644
index 00000000..7dafb2bf
--- /dev/null
+++ b/pbmtox10bm.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pbmtox10bm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtox10bm</H1>
+<BR>
+<p><b>pbmtox10bm</b> was replaced in Netpbm 10.37 (December 2006) by
+<b><a href=pbmtoxbm.html>pbmtoxbm</a></b>.
+
+<P><B>pbmtoxbm</b> with the <b>-x10</b> option is backward compatible
+with <b>pbmtox10bm</b>.  <b>pbmtoxbm</b> also can generate X11 bitmaps.
+
+<P>You should not make any new use of <b>pbmtox10bm</b> and if you modify an
+existing use, you should upgrade to <b>pbmtoxbm</b>.
+
+</BODY>
+</HTML>
diff --git a/pbmtoxbm.html b/pbmtoxbm.html
new file mode 100644
index 00000000..256e2679
--- /dev/null
+++ b/pbmtoxbm.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoxbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoxbm</H1>
+Updated: 25 October 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pbmtoxbm - convert a PBM image to an X11 bitmap
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pbmtoxbm</B>
+
+[{<b>-x10</b>|<b>-x11</b>}]
+
+[<I>pbmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pbmtoxbm</b> reads a PBM image as input and produces an X10 or X11 bitmap
+as output.
+
+
+<h2 id="options">OPTIONS</h2>
+
+<dl>
+<dt><b>-x10</b>
+
+<dd>This option causes <b>pbmtoxbm</b> to generate the X10 version of
+XBM.
+
+<p>You may not specify this with <b>-x11</b>.
+
+<p>This option was new with Netpbm 10.37 (December 2006).  Before that,
+use <b>pbmtox10bm</b> instead.
+
+<dt><b>-x11</b>
+
+<dd>This option causes <b>pbmtoxbm</b> to generate the X11 version of
+XBM.
+
+<p>You may not specify this with <b>-x10</b>.
+
+<p>The X11 version is the default, so this option has no effect.
+
+<p>This option was new with Netpbm 10.37 (December 2006).
+
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pbmtox10bm.html">pbmtox10bm</A>,
+<A HREF="xbmtopbm.html">xbmtopbm</A>,
+<A HREF="pbm.html">pbm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtoybm.html b/pbmtoybm.html
new file mode 100644
index 00000000..7857a020
--- /dev/null
+++ b/pbmtoybm.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtoybm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtoybm</H1>
+Updated: 06 March 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmtoybm - convert a PBM image into a Bennet Yee &quot;face&quot; file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtoybm</B>
+
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pbmtoybm</b> reads a PBM image as input and produces as output a
+file acceptable to the <B>face</B> and <B>xbm</B> programs by Bennet
+Yee (<A HREF="mailto:bsy+@cs.cmu.edu">bsy+@cs.cmu.edu</A>).
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ybmtopbm.html">ybmtopbm</A>,
+<A HREF="pbm.html">pbm</A>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmtozinc.html b/pbmtozinc.html
new file mode 100644
index 00000000..cf336d7b
--- /dev/null
+++ b/pbmtozinc.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmtozinc User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmtozinc</H1>
+Updated: 02 November 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmtozinc - convert a PBM image into a Zinc bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmtozinc</B>
+
+[<I>pbmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmtozinc</b> reads a PBM image as input and produces a bitmap
+in the format used by the Zinc Interface Library (ZIL) Version 1.0 as
+output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by James Darrell McCauley (<A HREF="mailto:jdm5548@diamond.tamu.edu">jdm5548@diamond.tamu.edu</A>) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pbmupc.html b/pbmupc.html
new file mode 100644
index 00000000..f6b9c27e
--- /dev/null
+++ b/pbmupc.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pbmupc User Manual</TITLE></HEAD>
+<BODY>
+<H1>pbmupc</H1>
+Updated: 14 March 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pbmupc - create a Universal Product Code PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pbmupc</B>
+
+[<B>-s1</B> | <B>-s2</B>]
+
+<I>type</i>
+<i>manufacturer</i>
+<i>product</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pbmupc</b> generates an image of a Universal Product Code symbol.
+The three arguments are: a one digit product type, a five digit
+manufacturer code, and a five digit product code.
+For example, &quot;0 72890 00011&quot; is the code for Heineken.
+
+<P>As presently configured, <b>pbmupc</b> produces an image 230 bits
+wide and 175 bits high.  The size can be altered by changing the
+defines at the beginning of the program, or by running the output
+through <B>pamenlarge</B> or <B>pamscale</B>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The <B>-s1</B> and <B>-s2</B> options select the style of UPC to
+generate.  The default, <B>-s1</B>, looks more or less like this:
+
+<PRE>
+ ||||||||||||||||
+ ||||||||||||||||
+ ||||||||||||||||
+ ||||||||||||||||
+0||12345||67890||5
+</PRE>
+
+The other style, <B>-s2</B>, puts the product type digit higher up,
+and doesn't display the checksum digit:
+
+<PRE>
+ ||||||||||||||||
+ ||||||||||||||||
+0||||||||||||||||
+ ||||||||||||||||
+ ||12345||67890||
+</PRE>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbm.html">pbm</A>
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pc1toppm.html b/pc1toppm.html
new file mode 100644
index 00000000..8a6335d5
--- /dev/null
+++ b/pc1toppm.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pc1toppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pc1toppm</H1>
+Updated: 30 April 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pc1toppm - convert an Atari Degas .pc1 into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pc1toppm</B>
+
+[<I>pc1file</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pc1toppm</b> reads an Atari Degas .pc1 file as input and
+produces a PPM image as output.
+
+<p>The .pc1 format is a compressed (run length encoded) variation on .pi1.
+
+<A NAME="history"></a>
+<h2>HISTORY</h2>
+<p><b>pc1toppm</b> was new in Netpbm 10.22 (April 2004)
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>,
+<A HREF="pi1toppm.html">pi1toppm</A>,
+<A HREF="pi3topbm.html">pi3topbm</A>,
+<A HREF="pbmtopi3.html">pbmtopi3</A>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
+
diff --git a/pcdindex.html b/pcdindex.html
new file mode 100644
index 00000000..def152d7
--- /dev/null
+++ b/pcdindex.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pcdinex Renamed</TITLE></HEAD>
+
+<body>
+The program <B>pcdindex</B> has been renamed <A
+HREF="pcdovtoppm.html">pcdovtoppm</A>.
+</body>
+
+</html>
diff --git a/pcdovtoppm.html b/pcdovtoppm.html
new file mode 100644
index 00000000..8d603f7d
--- /dev/null
+++ b/pcdovtoppm.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pcdovtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pcdovtoppm</H1>
+Updated: 01 June 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pcdovtoppm - create index image for a photo CD
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pcdovtoppm</B>
+[<B>-m </B><I>width</I>]
+[<B>-s </B><I>size</I>]
+[<B>-a </B><I>across</I>]
+[<B>-c </B><I>colors</I>]
+[<B>-f </B><I>font</I>]
+[<B>-b</B>|<B>-w</B>]
+[<I>pcdfile</I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>This program generates an index image in PPM format for a photo CD,
+based on the photo CD overview file.
+
+<P>You can achieve a similar result with <B>hpcdtoppm -Overview</B>
+followed by <B>pnmindex -black</B> on the generated PPM images.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-w</B><I>width</I>
+
+<DD>
+Maximum width of the result image (default: 1152).
+<DT><B>-s</B><I>size</I>
+
+<DD>
+Maximum size of each of the images (default: 192).
+<DT><B>-a</B><I>across</I>
+
+<DD>
+Maximum number of images across (default: 6).
+<DT><B>-c</B><I>colors</I>
+
+<DD>
+Maximum number of colors, or 
+<B>n</B>
+
+to mean no quantization
+<DT><B>-f</B><I>font</I>
+
+<DD>
+Font to be used for annotation (default: internal font).
+<DT><B>-b</B>
+
+<DD>
+Black background color (default).
+<DT><B>-w</B>
+
+<DD>
+White background color.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<PRE>
+<B>pcdovtoppm -m 768 -s 96 -f smallfont.pbm overview.pcd &gt; overview.ppm</B>
+</prE>
+
+<PRE>
+<B>pcdovtoppm /cdrom/photo_cd/overview.pcd | ppmtojpeg &gt; overview.jpg</B>
+</PRE>
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<P>This program was formerly called <b>pcdindex</b>, which did not fit
+Netpbm naming conventions.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="hpcdtoppm.html">hpcdtoppm</A></B>,
+<B><A HREF="pnmindex.html">pnmindex</A></B>,
+<B><A HREF="ppmtojpeg.html">ppmtojpeg</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#history">HISTORY></A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pcxtoppm.html b/pcxtoppm.html
new file mode 100644
index 00000000..4b629151
--- /dev/null
+++ b/pcxtoppm.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pcxtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pcxtoppm</H1>
+Updated: 19 April 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pcxtoppm - convert a PCX file into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pcxtoppm</B>
+[<B>-stdpalette</B>]
+[<B>-verbose</B>]
+[<I>pcxfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pcxtoppm</b> reads a PCX file as input and produces a PPM image
+as output.
+
+<p><b>pcxtoppm</b> recognizes the following PCX types:
+
+<UL COMPACT>
+<LI>Colormapped files with 2-16 colors.
+
+<P>&quot;Packed pixel&quot; format (1, 2 or 4 bits/pixel, 1 plane) or
+bitplane format (1 bit/pixel, 1-4 planes).  The program uses a
+predefined standard palette if the image does not provide one.
+&quot;Does not provide one&quot; means the palette in the PCX header is
+completely black.
+
+<LI>Colormapped files with 256 colors.
+
+<P>8 bits/pixel, 1 plane, colormap at the end of the file.
+
+<LI>24bit truecolor files.
+
+<P>24bit RGB: 8 bits/pixel, 3 planes.
+
+<LI>32bit truecolor files.
+
+<P>24bit RGB + 8bit intensity: 8 bits/pixel, 4 planes.
+
+</UL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-stdpalette</B>
+
+<DD>This option causes <b>pcxtoppm</b> to use its predefined standard 
+palette even if the PCX image provides its own.  This is meaningful only
+for an image in the 16 color paletted PCX format.
+
+<p>The image may appear to provide its own palette but in fact be created
+by a program too primitive to understand palettes that created a random
+palette by accident.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtopcx.html">ppmtopcx</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+<p>Copyright 1990 by Michael Davidson.
+
+<p>Modified 1994 by Ingo Wilken (<A
+HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pfm.html b/pfm.html
new file mode 100644
index 00000000..c08c3a53
--- /dev/null
+++ b/pfm.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>PFM Format Description</TITLE></HEAD>
+<BODY>
+<H1>PFM Format</H1>
+<p>
+This document describes the PFM graphic image file format as understood by
+the Netpbm converters <a href="pamtopfm.html"><b>pamtopfm</b></a> and
+<a href="pfmtopam.html"><b>pfmtopam</b></a>.
+
+<p>There are multiple similar formats known as PFM in the world, none
+of them authoritatively documented.  The format described here is one
+that Bryan Henderson deduced from a program he found somewhere that
+dealt with a &quot;PFM&quot; format.
+
+<p>The PFM format is inspired by the Netpbm formats, and you will see
+lots of similarity.  It is not, however, an official Netpbm format.
+Its goal is not consistent with those of Netpbm formats.
+
+<h2>The format</h2>
+
+<p>A PFM image is a stream of bytes.  The stream consists of a header
+followed immediately by a raster.  These two components are described
+below.  There are no delimeters before or after the sections as
+described.
+
+<h3>PFM header</h3>
+
+<p>The PFM header is 3 consecutive &quot;lines&quot; of ASCII text.
+After each line is a white space character.  That character is
+typically a newline character, hence the term &quot;line,&quot; but
+doesn't have to be.
+
+<p><b>pamtopfm</b> uses a newline in the PFM it generates.
+
+<h4>Identifier Line</h4>
+
+<p>The identifier line contains the characters &quot;PF&quot; or
+&quot;Pf&quot;.  PF means it's a color PFM.  Pf means it's a grayscale
+PFM.
+
+<h4>Dimensions Line</h4>
+
+<p>The dimensions line contains two positive decimal integers,
+separated by a blank.  The first is the width of the image; the second
+is the height.  Both are in pixels.
+
+<h4>Scale Factor / Endianness</h4>
+
+<p>The Scale Factor / Endianness line is a queer line that jams
+endianness information into an otherwise sane description of a scale.
+The line consists of a nonzero decimal number, not necessarily an
+integer.  If the number is negative, that means the PFM raster is
+little endian.  Otherwise, it is big endian.  The absolute value of
+the number is the scale factor for the image.
+
+<p>The scale factor tells the units of the samples in the raster.  You
+use somehow it along with some separately understood unit information
+to turn a sample value into something meaningful, such as watts per
+square meter.
+
+
+<h3>PFM raster</h3>
+
+<p>The raster is a sequence of pixels, packed one after another, with no
+delimiters of any kind.  They are in standard Western reading order:
+left to right and top to bottom within the image.
+
+<p>Each pixel consists of 1 or 3 samples, packed one after another,
+with no delimiters of any kind.  1 sample for a grayscale PFM and 3 for a
+color PFM (see the Identifier Line of the PFM header).
+
+<p>Each sample consists of 4 consecutive bytes.  The bytes represent a
+32 bit string, in either big endian or little endian format, as determined
+by the Scale Factor / Endianness line of the PFM header.  That string is
+an IEEE 32 bit floating point number code.  Since that's the same format
+that most CPUs and compiler use, you can usually just make a program use
+the bytes directly as a floating point number, after taking care of the
+endianness variation.
+
+</BODY>
+</HTML>
+
diff --git a/pfmtopam.html b/pfmtopam.html
new file mode 100644
index 00000000..b8949b5b
--- /dev/null
+++ b/pfmtopam.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pfmtopam User Manual</TITLE></HEAD>
+<BODY>
+<H1>pfmtopam</H1>
+Updated: 10 April 2004
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="name">&nbsp;</A>
+<H2>NAME</H2>
+pamtopfm - Convert PFM (Portable Float Map) image to Netpbm format
+
+<A NAME="synopsis">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>pfmtopam</B>
+[<b>-maxval=</b><i>n</i>]
+[<b>-verbose</b>]
+[<I>imagefile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pfmtopam</b> reads a PFM (Portable Float Map) image and converts
+it to PAM.
+
+<p>See <a href="pamtopfm.html"><b>pamtopfm</b></a> for a description of
+PFM.
+
+<p>If you want one of the older, more portable Netpbm formats, run the
+output through <b>pamtopnm</b>.
+
+<b>pamtopfm</b> creates a PAM with tuple type &quot;RGB&quot; or
+&quot;GRAYSCALE&quot; depending on whether or not the PFM is in the color
+subformat.
+
+<p>Use <a href="pamtopfm.html"><b>pamtopfm</b></a> to convert a PFM
+image to Netpbm format.
+
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-maxval=</b><i>n</i>
+
+<DD>
+     <P>This specifies the maxval for the PAM.  Default is 255.
+
+<DT><B>-verbose</b>
+
+<DD>
+     <P>This causes <b>pfmtopam</b> to display messages describing 
+     the PFM input file.
+
+</DL>
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamtopfm.html">pamtopfm</A></B>,
+<B><A HREF="pam.html">pam</A></B>,
+
+<A NAME="history"></a>
+<h2>HISTORY</h2>
+
+<p><b>pfmtopam</b> was added to Netpbm in Release 10.22 (April 2004).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgm.html b/pgm.html
new file mode 100644
index 00000000..9e1a14d2
--- /dev/null
+++ b/pgm.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>PGM Format Specification</TITLE>
+<META NAME="manual_section" CONTENT="5">
+</HEAD>
+<BODY>
+<H1>pgm</H1>
+Updated: 03 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgm - Netpbm grayscale image format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>The PGM format is a lowest common denominator grayscale file format.
+<A NAME="ixAAB"></A>
+It is designed to be extremely easy to learn and write programs for.
+(It's so simple that most people will simply reverse engineer it
+because it's easier than reading this specification).
+
+<P>A PGM image represents a grayscale graphic image.  There are many
+psueudo-PGM formats in use where everything is as specified herein except
+for the meaning of individual pixel values.  For most purposes, a PGM
+image can just be thought of an array of arbitrary integers, and all the
+programs in the world that think they're processing a grayscale image 
+can easily be tricked into processing something else.
+
+<P>The name "PGM" is an acronym derived from "Portable Gray Map."
+
+<P>One official variant of PGM is the transparency mask.  A transparency
+mask in Netpbm is represented by a PGM image, except that in place of 
+pixel intensities, there are opaqueness values.  See below.
+
+<P>The format definition is as follows.  You can use the <a
+href="libnetpbm.html">libnetpbm</a> C subroutine library to conveniently
+and accurately read and interpret the format.
+
+<P>A PGM file consists of a sequence of one or more PGM images. There are
+no data, delimiters, or padding before, after, or between images.
+
+<P>Each PGM image consists of the following:
+
+<OL>
+  
+<LI>A &quot;magic number&quot; for identifying the file type.
+A pgm image's magic number is the two characters &quot;P5&quot;.
+
+<LI>Whitespace (blanks, TABs, CRs, LFs).
+
+<LI>A width, formatted as ASCII characters in decimal.
+
+<LI>Whitespace.
+
+<LI>A height, again in ASCII decimal.
+
+<LI>Whitespace.
+
+<LI>The maximum gray value (Maxval), again in ASCII decimal.  Must be less
+than 65536, and more than zero.
+
+<LI>Newline or other single whitespace character.
+
+<LI>A raster of Height rows, in order from top to bottom.  Each row
+consists of Width gray values, in order from left to right.  Each gray
+value is a number from 0 through Maxval, with 0 being black and Maxval
+being white.  Each gray value is represented in pure binary by either
+1 or 2 bytes.  If the Maxval is less than 256, it is 1 byte.
+Otherwise, it is 2 bytes.  The most significant byte is first.
+
+<P>A row of an image is horizontal.  A column is vertical.  The pixels
+in the image are square and contiguous.
+
+<LI>Each gray value is a number proportional to the intensity of the
+pixel, adjusted by the ITU-R Recommendation BT.709 gamma transfer
+function.  (That transfer function specifies a gamma number of 2.2 and
+has a linear section for small intensities).  A value of zero is
+therefore black.  A value of Maxval represents CIE D65 white and the
+most intense value in the image and any other image to which the image
+might be compared.
+
+<LI>Note that a common variation on the PGM format is to have the
+gray value be &quot;linear,&quot; i.e. as specified above except
+without the gamma adjustment.  <B>pnmgamma</B> takes such a PGM
+variant as input and produces a true PGM as output.
+
+<LI>In the transparency mask variation on PGM, the value represents
+opaqueness.  It is proportional to the fraction of intensity of a
+pixel that would show in place of an underlying pixel.  So what
+normally means white represents total opaqueness and what normally
+means black represents total transparency.  In between, you would
+compute the intensity of a composite pixel of an &quot;under&quot; and
+&quot;over&quot; pixel as under * (1-(alpha/alpha_maxval)) + over *
+(alpha/alpha_maxval).  Note that there is no gamma transfer function
+in the transparency mask.
+
+<LI>Characters from a &quot;#&quot; to
+the next end-of-line, before the maxval line, are comments and are
+ignored.
+
+</OL> 
+
+<P>Note that you can use <B>pamdepth</B> to convert between a the
+format with 1 byte per gray value and the one with 2 bytes per gray
+value.
+
+<P>There is actually another version of the PGM format that is fairly
+rare: &quot;plain&quot; PGM format.  The format above, which generally
+considered the normal one, is known as the &quot;raw&quot; PGM format.
+See <B><A HREF="pbm.html">pbm</A></B> for some commentary on how plain
+and raw formats relate to one another and how to use them.
+
+<P>The difference in the plain format is:
+
+<DL COMPACT>
+<DT>-<DD>
+There is exactly one image in a file.
+<DT>-<DD>
+The magic number is P2 instead of P5.
+<DT>-<DD>
+Each pixel in the raster is represented as an ASCII decimal number 
+(of arbitrary size).
+<DT>-<DD>
+Each pixel in the raster has white space before and after it.  There must
+be at least one character of white space between any two pixels, but there
+is no maximum.
+<DT>-<DD>
+No line should be longer than 70 characters.
+</DL>
+<P>
+
+Here is an example of a small image in the plain PGM format.
+<PRE>
+P2
+# feep.pgm
+24 7
+15
+0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
+0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
+0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
+0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
+0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
+0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
+0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
+</PRE>
+
+<P>There is a newline character at the end of each of these lines.
+
+<p>Programs that read this format should be as lenient as possible,
+accepting anything that looks remotely like a PGM.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>COMPATIBILITY</H2>
+
+<P>
+Before April 2000, a raw format PGM file could not have a maxval greater
+than 255.  Hence, it could not have more than one byte per sample.  Old
+programs may depend on this.
+<P>
+Before July 2000, there could be at most one image in a PGM file.  As
+a result, most tools to process PGM files ignore (and don't read) any
+data after the first image.
+<P>
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pbm.html">pbm</A>,
+<A HREF="ppm.html">ppm</A>,
+<A HREF="pam.html">pam</A>,
+<A HREF="libnetpbm.html">libnetpbm</A>,
+<A HREF="directory.html">programs that process PGM</A>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">DESCRIPTION</A>
+<LI><A HREF="#lbAD">COMPATIBILITY</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmabel.html b/pgmabel.html
new file mode 100644
index 00000000..31f170a2
--- /dev/null
+++ b/pgmabel.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pgmabel User Manual</title></HEAD>
+
+<BODY>
+<H1>pgmabel</H1>
+Updated: June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pgmabel - create cross section using Abel Integration for Deconvolution
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>pgmabel</b>
+[<b>-help</b>]
+[<b>-axis</b> <i>axis</i>]
+[<b>-factor</b> <i>factor</i>]
+[<b>-pixsize</b> <i>pixsize</i>]
+[<b>-left</b> | <b>-right</b>]
+[<b>-verbose</b>]
+[<I>filespec</I>]
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmabel</b> reads as input a PGM image, which it assumes to be an
+image of a rotational symmetric transparent object.  The image must have
+a vertical symmetry axis.  <b>pgmabel</b> produces as output an image of
+a cross-section of the image.
+
+<b>pgmabel</b> does the calculation by performing the Abel Integration
+for Deconvolution of an axial-symmetrical image by solving the system
+of linear equations.
+
+After integration, <b>pgmabel</b> weights all gray-values of one side
+by the surface area of the calculated ring in square pixels divided by
+4*<i>factor</i> multiplied by the size of one pixel (<i>pixsize</i>).
+With the <b>-verbose</b> option, <b>pgmabel</b> prints the weighting
+factors.
+
+<P>Where the caculation generates a negative result, the output is black.
+
+<P>The computation is unstable against periodic structures with size 2 in
+the vertical direction.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<dt><b>-help</b>
+<dd>Prints a help message.
+
+<dt><b>-axis</b> <i>axis</i>
+<dd>Position of the axis of symmetry in the image in pixels from the left
+edge of the image.  Default is the center of the image.
+
+<dt><b>-factor</b> <i>factor</i>
+<dd>User defined factor for enhancement of the output.  Use a <i>factor</i>
+less than 1 for decreasing gary values.  Default is 1.0.
+
+<dt><b>-pixsize</b> <i>pixsize</i>
+<dd>The size of a pixel for getting scale invariant.  Default is 0.1.
+
+<dt><b>-left</b>
+Calculate only the left side of the image.  You cannot specify both
+<b>left</b> and <b>right</b>.
+
+<dt><b>-right</b>
+Analogous to <b>-left</b>.
+
+<dt><b>-verbose</b>
+<dd>print information about the calculation.
+
+</DL>
+
+<A NAME="example">&nbsp;</A>
+<h2>EXAMPLE</h2>
+
+<p>Rotate a PGM image to get an image with a vertical axis of symmetry,
+then calculate the cross section:
+
+<pre>
+    pnmrotate 90 file.pgm | pgmabel -axis 140 &gt;cross_section.pgm
+</pre>
+
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmrotate.html">pnmrotate</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p>This program was added to Netpbm in Release 10.3 (June 2002).
+
+<A NAME="author"></a>
+<h2>AUTHOR</h2>
+
+<p>Volker Schmidt (lefti@voyager.boerde.de)
+
+<p>Copyright (C) 1997-2002 German Aerospace research establishment
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#example">EXAMPLE</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmbentley.html b/pgmbentley.html
new file mode 100644
index 00000000..39e1d4bb
--- /dev/null
+++ b/pgmbentley.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmbentley User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmbentley</H1>
+Updated: 11 January 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pgmbentley - Bentleyize a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmbentley</B>
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmbentley</b>reads a PTM image as input and performs the
+Bentley Effect, and writes a PGM image as output.
+
+<p>The Bentley Effect is described in &quot;Beyond Photography&quot;
+by Holzmann, chapter 4, photo 4.  It's a vertical smearing based on
+brightness.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmoil.html">pgmoil</A>,
+<A HREF="ppmrelief.html">ppmrelief</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Wilson Bent (<A
+HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>)
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmcrater.html b/pgmcrater.html
new file mode 100644
index 00000000..7aa1fc43
--- /dev/null
+++ b/pgmcrater.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmcrater User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmcrater</H1>
+Updated: 15 October 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmcrater - create cratered terrain by fractal forgery
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+
+<B>pgmcrater</B>
+
+[<B>-number</B> <I>n</I>]
+
+[<B>-height</B>|<B>-ysize</B> <I>s</I>]
+
+[<B>-width</B>|<B>-xsize</B> <I>s</I>]
+
+[<B>-gamma</B> <I>g</I>]
+
+
+<P>All options can be abbreviated to their shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pgmcrater</B> creates a PGM image which mimics cratered terrain.
+The PGM image is created by simulating the impact of a given number of
+craters with random position and size, then rendering the resulting
+terrain elevations based on a light source shining from one side of
+the screen.  The size distribution of the craters is based on a power
+law which results in many more small craters than large ones.  The
+number of craters of a given size varies as the reciprocal of the area
+as described on pages 31 and 32 of Peitgen and Saupe[1]; cratered
+bodies in the Solar System are observed to obey this relationship.
+The formula used to obtain crater radii governed by this law from a
+uniformly distributed pseudorandom sequence was developed by Rudy
+Rucker.
+
+<P>High resolution images with large numbers of craters often benefit
+from being piped through <B>pnmsmooth</B>.  The averaging performed by
+this process eliminates some of the jagged pixels and lends a mellow
+``telescopic image'' feel to the overall picture.
+
+<P><B>pgmcrater</B> simulates only small craters, which are
+hemispherical in shape (regardless of the incidence angle of the
+impacting body, as long as the velocity is sufficiently high).  Large
+craters, such as Copernicus and Tycho on the Moon, have a ``walled
+plain'' shape with a cross-section more like:
+
+<PRE>
+                /\                            /\
+<BR>
+          _____/  \____________/\____________/  \_____
+</PRE>
+
+
+Larger craters should really use this profile, including the central
+peak, and totally obliterate the pre-existing terrain.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-number</B> <I>n</I>
+
+<DD>Causes <I>n</I> craters to be generated.  If no <B>-number</B>
+specification is given, 50000 craters will be generated.  Don't expect
+to see them all!  For every large crater there are many, many more
+tiny ones which tend simply to erode the landscape.  In general, the
+more craters you specify the more realistic the result; ideally you
+want the entire terrain to have been extensively turned over again and
+again by cratering.  High resolution images containing five to ten
+million craters are stunning but take quite a while to create.
+
+<DT><B>-height</B> <I>height</I>
+
+<DD>Sets the height of the generated image to <I>height</I> pixels.
+The default height is 256 pixels.
+
+<DT><B>-width</B> <I>width</I>
+
+<DD>Sets the width of the generated image to <I>width</I> pixels.  The
+default width is 256 pixels.
+
+<DT><B>-xsize</B> <I>width</I>
+
+<DD>Sets the width of the generated image to <I>width</I> pixels.  The
+default width is 256 pixels.
+
+<DT><B>-ysize</B> <I>height</I>
+
+<DD>Sets the height of the generated image to <I>height</I> pixels.
+The default height is 256 pixels.
+
+<DT><B>-gamma</B> <I>factor</I>
+
+<DD>The specified <I>factor</I> is used to gamma adjust the image in
+the same manner as performed by <B>pnmgamma</B>.  The default value is
+1.0, which results in a medium contrast image.  Values larger than 1
+lighten the image and reduce contrast, while values less than 1 darken
+the image, increasing contrast.
+
+<P>Note that this is separate from the gamma correction that is part
+of the definition of the PGM format.  The image <B>pnmgamma</B>
+generates is a genuine, gamma-corrected PGM image in any case.  This
+option simply changes the contrast and may compensate for a display
+device that does not correctly render PGM images.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>DESIGN NOTES</H2>
+
+The<B>-gamma</B> option isn't really necessary since you can achieve
+the same effect by piping the output from <B>pgmcrater</B> through
+<B>pnmgamma</B>.  However, <B>pgmcrater</B> performs an internal gamma
+map anyway in the process of rendering the elevation array into the
+PGM format, so there's no additional overhead in allowing an
+additional gamma adjustment.
+
+<P>Real craters have two distinct morphologies.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmgamma.html">pnmgamma</A></B>,
+
+<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>
+
+<B><A HREF="pgm.html">pgm</A></B>,
+
+<DL COMPACT>
+<DT>[1]
+<DD>Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images,
+New York: Springer Verlag, 1988.
+
+</DL>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<PRE>
+John Walker
+Autodesk SA
+Avenue des Champs-Montants 14b
+CH-2074 MARIN
+Suisse/Schweiz/Svizzera/Svizra/Switzerland
+    <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A>
+    <B>Fax:</B>038/33 88 15
+    <B>Voice:</B>038/33 76 33
+</PRE>
+
+<P>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided
+&quot;as is&quot; without express or implied warranty.
+
+<a name="history"></a>
+<H2>HISTORY</H2>
+
+
+<P>The original 1991 version of this manual contains the following:
+
+<h3>PLUGWARE!</h3>
+
+<p>If you like this kind of stuff, you may also enjoy &quot;James Gleick's
+Chaos--The Software&quot; for MS-DOS, available for $59.95 from your
+local software store or directly from Autodesk, Inc., Attn: Science
+Series, 2320 Marinship Way, Sausalito, CA 94965, USA.  Telephone:
+(800) 688-2344 toll-free or, outside the U.S. (415) 332-2344 Ext
+4886.  Fax: (415) 289-4718.  &quot;Chaos--The Software&quot; includes a more
+comprehensive fractal forgery generator which creates
+three-dimensional landscapes as well as clouds and planets, plus five
+more modules which explore other aspects of Chaos.  The user guide of
+more than 200 pages includes an introduction by James Gleick and
+detailed explanations by Rudy Rucker of the mathematics and algorithms
+used by each program.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">DESIGN NOTES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmdeshadow.html b/pgmdeshadow.html
new file mode 100644
index 00000000..6b54f7e6
--- /dev/null
+++ b/pgmdeshadow.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmdeshadow User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmdeshadow</H1>
+Updated: 06 July 2006
+<p>
+
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pgmdeshadow - Deshadow a PGM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pgmdeshadow</B>
+
+[<I>pnmfile</I>]
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmdeshadow</b> removes gray shadows from an image.  This is
+useful for an image containing text, such as a scanned book pages,
+where a shadow typically appears near the book crease or near one side
+of the image.  <b>pgmdeshadow</b> recognizes a gray shadow as an area
+of smoothly changing color, starting from the outer edges of the
+image.  The program uses a simple image reconstruction algorithm to
+determine the local shadow gray level, then divides each pixel's gray
+level by the local shadow gray level.
+
+<p>The algorithm is the &quot;fast hybrid grayscale reruction&quot;
+algorithm from Luc Vincent, "Morphological Grayscale Reruction in
+Image Analysis: Applications and Efficient Algorithms.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<p>None.
+
+<H2 id="references">REFERENCES</H2>
+
+<ul>
+
+<li>Luc Vincent, &quot;Morphological Grayscale Reruction in Image
+Analysis: Applications and Efficient Algorithms,&quot; IEEE
+Transactions on Image Processing, vol. 2, no. 2, April 1993,
+pp. 176-201.
+
+</ul>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="ppmshadow.html">ppmshadow</A>,
+<A HREF="pgm.html">pgm</A>
+
+<h2 id="history">HISTORY</h2>
+
+<P><b>pgmdeshadow</b> was added to Netpbm in Version 10.35 (August 2006).
+
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#references">REFERENCES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+
+</BODY>
+</HTML>
diff --git a/pgmedge.html b/pgmedge.html
new file mode 100644
index 00000000..b0ff54b4
--- /dev/null
+++ b/pgmedge.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pgmedge User Manual</TITLE>
+</HEAD><BODY>
+<H1>pgmedge</H1>
+Updated: March 2002
+<BR>
+<H2>NAME</H2>
+<B>pgmedge</B> - replaced by pamedge
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pgmedge</b> was replaced in Netpbm 10.14 (March 2002) by
+<b><a href="pamedge.html">pamedge</a></b>.
+
+<P><B>pamedge</b> is backward compatible with <b>pgmedge</b>, but works on
+color images too.
+
+</BODY>
+</HTML>
diff --git a/pgmenhance.html b/pgmenhance.html
new file mode 100644
index 00000000..3d9eb98e
--- /dev/null
+++ b/pgmenhance.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmenhance User Manual</TITLE>
+</HEAD><BODY>
+<H1>pgmenhance</H1>
+Updated: 13 January 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmenhance - edge-enhance a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmenhance</B>
+
+[-<I>N</I>]
+
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pgmenhance</b> reads a PGM image as input, enhances the edges,
+and writes a PGM image as output.
+
+<P>The edge enhancing technique is taken from Philip R. Thompson's
+&quot;xim&quot; program, which in turn took it from section 6 of
+&quot;Digital Halftones by Dot Diffusion&quot;, D. E. Knuth, ACM
+Transaction on Graphics Vol. 6, No. 4, October 1987, which in turn got
+it from two 1976 papers by J. F. Jarvis et. al.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The optional <b>-</b><I>N</I> option should be a digit from 1 to 9.
+1 is the lowest level of enhancement; 9 is the highest.  The default
+is 9.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmedge.html">pgmedge</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmhist.html b/pgmhist.html
new file mode 100644
index 00000000..fbe1e40f
--- /dev/null
+++ b/pgmhist.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmhist User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmhist</H1>
+Updated: 28 February 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmhist - print a histogram of the values in a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmhist</B>
+
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmhist</b> reads a PGM image as input and 
+prints a histogram of the gray values.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmnorm.html">pgmnorm</A>,
+<A HREF="ppmhist.html">ppmhist</A>
+<A HREF="pgm.html">pgm</A>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmkernel.html b/pgmkernel.html
new file mode 100644
index 00000000..2a65ecf9
--- /dev/null
+++ b/pgmkernel.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmkernel User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmkernel</H1>
+Updated: 10 December 1992
+<BR>
+<A HREF="#index">Table Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmkernel - generate a convolution kernel
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmkernel</B>
+
+[<B>-weight</B> <I>w</I>]
+
+<I>width </I>
+
+[<I>height </I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmkernel</b> generates a convolution kernel that you can use
+with <b>pnmconvol</b>.  The kernel is one where the weight of each location
+is inversely proportional to its distance from the center of the kernel.
+
+<p><b>pgmkernel</b> generates a PGM image of size <I>width</I> by
+<I>height</I> (or <I>width</I> by <I>width</I> if you don't specify
+<I>height</I>).
+
+<p><b>pgmkernel</b> computes the convolution function K as follows.
+
+<blockquote>
+K(i,j) = 1 / ( 1 + w * sqrt(i^2 + j^2)) 
+</blockquote>
+
+where <I>w</I> is a coefficient specified via the <b>-weight</b>
+option.  <i>i</i> and <i>j</i> are measured in pixels.  K is zero
+everywhere beyond the specified kernel width and height.
+
+<P><b>pgmkernel</b> generates the output PGM file in the Plain (text)
+variation of PGM.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+The optional <b>-weight</b> value should be a real number greater than
+-1.  The default value is 6.0.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P>The computation time is proportional to <I>width</I>*<I>height</I>.
+This increases rapidly with the increase of the kernel size.  A better
+approach could be using a FFT in these cases.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmconvol.html">pnmconvol</A>,
+<A HREF="pnmsmooth.html">pnmsmooth</A>
+<A HREF="pamgauss.html">pamgauss</A>
+<A HREF="pgm.html">pgm</A>
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Alberto Accomazzi (<A
+HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmmake.html b/pgmmake.html
new file mode 100644
index 00000000..8874dd06
--- /dev/null
+++ b/pgmmake.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Pgmmake User Manual</title></HEAD>
+<BODY>
+<H1>pgmmake</H1>
+Updated: 19 February 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pgmmake - create a PGM image of a specified gray level and dimensions
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pgmmake</B>
+<b>-maxval=</b><i>maxval</i>
+<I>graylevel</I>
+<I>width</I>
+<i>height</I>
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or an equals sign between an option name
+and its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pgmmake</b> produces a PGM image of the specified gray level, width,
+height, and maxval.
+
+<P>Specify the gray level (<i>graylevel</i>) as a decimal floating point
+number in the range [0, 1].  E.g. 1 is white, 0 is black, and 0.5 is
+half luminosity gray.
+
+<h2 id="example">EXAMPLES</H2>
+
+<pre>
+    pgmmake 1 50 50
+</pre>
+<pre>
+    pgmmake .2 50 100 -maxval=5
+</pre>
+
+
+<H2 id="options">OPTIONS</H2>
+
+<DL>
+<DT><b>-maxval=</b><i>maxval</i>
+<DD>
+     The maxval for the generated image.  Default is 255.
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pbmmake.html">pbmmake</A>,
+<A HREF="ppmmake.html">ppmmake</A>,
+<A HREF="pgm.html">pgm</A>
+
+<h2 id="history">HISTORY</h2>
+
+<p>This program was new in Netpbm 10.32 (February 2006).
+
+<p>With older Netpbm, use <b>ppmmake</b> and <b>ppmtopgm</b>.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#example">EXAMPLES</A>
+<LI><A HREF="#options">OPTIONS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmmedian.html b/pgmmedian.html
new file mode 100644
index 00000000..8a2a1a1f
--- /dev/null
+++ b/pgmmedian.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmmedian User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmmedian</H1>
+Updated: 28 August 2005
+<p>
+
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pgmmedian - apply a median filter to a PGM file
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pgmmedian</B>
+
+[<b>-width=</b><i>n</i>]
+
+[<b>-height=</b><i>n</i>]
+
+[<B>-type=</B><I>median_type</I>]
+
+[<B>-cutoff=</B><I>int</I>]
+
+[<I>pnmfile</I>]
+
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmmedian</b> applies a median filter to a PGM image, using either
+the histogram sort of select kth value method to determine the median.
+
+<p>See the <b>-type</b> and <b>-cutoff</b> options for information on
+how <b>pgmmedian</b> chooses between the two methods.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-cutoff</b> <i>int</i>
+
+<DD>This option provides the cutoff value that <b>pgmmedian</b> uses
+to decide between using the histogram sort or select kth value method
+to find the median.
+
+If (<i>maxval</i> / ((<i>width</i> * <i>height</i>) - 1)), where
+<i>maxval</i> is the maxval of the image and <i>width</i> and
+<i>height</i> are the dimensions of the mask, is less than the cutoff
+value, <b>pgmmedian</b> uses histogram sort.  Otherwise, it uses kth
+value.
+
+<p>If expression is less than the cutoff, <b>pgmmedian</b> uses the
+histogram sort.  Otherwise it uses the select kth value method.
+
+<p>This option has no effect if you specify <b>-type</b>.
+
+<p>The default is 250
+
+<DT><B>-width=</b><i>n</i>
+
+<DD>Width of the median mask to apply.
+
+<p>Default is 3.
+
+<DT><B>-height=</b><i>n</i>
+
+<DD>Height of the median mask to apply.
+
+<p>Default is 3.
+
+<DT><B>-type</b> <i>median_type</i>
+
+<DD>This option selects which method to use to find median regardless
+of cutoff value.  Choices are <b>histogram_sort</b> and <b>select</b>.
+
+<p>By default, <b>pgmmedian</b> decides which method to use as described
+under the <b>-cutoff</b> option.
+
+</DL>
+
+<H2 id="references">REFERENCES</H2>
+
+<ul>
+
+<li>&quot;Collected Algorithms from ACM&quot; Volume II, Algorithm 489
+by Robert W. Floyd
+
+<li>&quot;A Fast Two-Dimensional Median Filtering Algorithm&quot; in
+&quot;IEEE Transactions on Acoustics, Speech, and Signal
+Processing&quot; Vol. ASSP-27, No. 1, February 1979
+
+<li>&quot;Digital Image Processing Algorithms&quot; by Ioannis
+Pitas, Prentice Hall, 1993 ISBN 0-13-145814-0
+
+</ul>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pgmnoise.html">pgmnoise</A>,
+<A HREF="pamaddnoise.html">pamaddnoise</A>,
+<A HREF="pgm.html">pgm</A>
+
+<h2 id="history">HISTORY</h2>
+
+<P><b>pgmmedian</b> was added to Netpbm in Version 10.29 (August 2005).
+It had been distributed by Mike Burns via his own web site before that
+(and continued to be so).
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1996 by Mike Burns &lt;<A
+HREF="mailto:burns@cac.psu.edu">burns@cac.psu.edu</A>&gt;
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#references">REFERENCES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+
+</BODY>
+</HTML>
diff --git a/pgmminkowski.html b/pgmminkowski.html
new file mode 100644
index 00000000..29b03a64
--- /dev/null
+++ b/pgmminkowski.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmminkowski User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmminkowski</H1>
+Updated: 29 October 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmminkowski - compute Minkowski integral
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pgmminkowski</B> <I>pgmfile</I>
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pgmminkowski</b> computes the 3 Minkowski integrals of a PGM image. 
+
+<p>The Minkowski integrals mathematically characterize the shapes in the
+image and hence are the basis of "morphological image analysis."
+
+<p>Hadwiger's theorem has it that these integrals are the only
+motion-invariant, additive and conditionally continuous functions of a
+two-dimensional image, which means that they are preserved under
+certain kinds of deformations of the image.  On top of that, they are
+very easy and quickly calculated.  This makes them of interest for
+certain kinds of pattern recognition.
+
+<p>Basically, the Minkowski integrals are the area, total perimeter
+length, and the Euler characteristic of the image, where these metrics
+apply to the foreground image, not the rectangular PGM image itself.  The
+foreground image consists of all the pixels in the image that are
+white.  For a grayscale image, there is some threshold of intensity
+applied to categorize pixels into black and white, and the Minkowski
+integrals are calculated as a function of this threshold value. The
+total surface area refers to the number of white pixels in the PGM and
+the perimeter is the sum of perimeters of each closed white region in
+the PGM.
+
+<p>For a grayscale image, these numbers are a function of the threshold
+of what you want to call black or white.  <b>pgmminkowski</b> reports these
+numbers as a function of the threshold for all possible threshold
+values.  Since the total surface area can increase only as a function
+of the threshold, it is a reparameterization of the threshold.  It
+turns out that if you consider the other two functions, the boundary
+length and the Euler characteristic, as a function of the first one,
+the surface, you get two functions that are a fingerprint of the
+picture.  This fingerprint is e.g. sufficient to recognize the
+difference between pictures of different crystal lattices under a
+scanning tunnelling electron microscope.
+
+<p>For more information about Minkowski integrals, see e.g. 
+<ul>
+<li><a
+href="http://rugth30.phys.rug.nl/compphys0/2001.htm"> K. Michielsen and
+H. De Raedt, "Integral-Geometry Morphological Image Analysis", 
+Phys. Rep. 347, 461-538 (2001).</a>
+
+<li><a href="http://rugth30.phys.rug.nl/pdf/prechaos.pdf">
+J.S. Kole, K. Michielsen, and H. De Raedt,
+"Morphological Image Analysis of Quantum Motion in Billiards",
+Phys. Rev. E 63, 016201-1 - 016201-7 (2001)
+</a>
+</ul>
+
+<p>The output is suitable for direct use as a datafile in <b>gnuplot</b>.
+
+<p>In addition to the three Minkowski integrals, <b>pgmminkowski</b> also
+lists the horizontal and vertical edge counts.
+
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pgmmorphconv.html">pgmmorphconv</A></B>
+<B><A HREF="pgm.html">pgm</A></B>
+
+<H2 id="authors">AUTHORS</H2>
+
+Luuk van Dijk, 2001.
+
+<p>Based on work which is Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#authors">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmmorphconv.html b/pgmmorphconv.html
new file mode 100644
index 00000000..524b06b7
--- /dev/null
+++ b/pgmmorphconv.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pgmmorphconv User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmmorphconv</H1>
+Updated: 29 October 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pgmmorphconv - perform morphological convolutions: dilation, erosion
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pgmmorphconv</B>
+[ <b>-erode</b> | <b>-dilate</b> | <b>-open</b> | <b>-close</b> ]
+<I>templatefile</I>
+[<I>pgmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pgmmorphconv</b> performs morphological convolutions on a
+PGM image: dilation and erosion.
+
+<p><b>pgmmorphconv</b> performs a "topological" convolution.  For each
+pixel of the input, <b>pgmmorphconv</b> generates an output pixel in
+the same position.  To determine the intensity of the output pixel,
+<b>pgmmorphconv</b> lays the template image over the input image such
+that the middle pixel of the template is over the input pixel in
+question.  <b>pgmmorphconv</b> looks at the input pixels underneath each
+white pixel in the template.  For a dilation, the maximum intensity of
+all those pixels is the intensity of the output pixel.  For an erosion,
+it is the minimum.
+
+<p>Thus, the dilation effect is that bright areas of the input get bigger
+and dark areas smaller.  The erosion effect is the opposite.  The simplest
+template image would be one with a white pixel in the middle and the rest
+black.  This would produce an output image identical to the input.  Another
+simple template image is a fully white square.  This causes bright or dark
+areas to expand in all directions.  A template image that is white on the
+left side and black on the right would smear the image to the right.
+
+<p>The template file named by <i>templatefile</i> contains the
+template image as a PBM image.  It must have an odd number of rows and
+an odd number of columns, so there is a definite middle pixel.  It
+must contain at least one white pixel.
+
+<p>This is similar to the continuous convolution done by
+<b>pnmconvol</b>, except that with <b>pnmconvol</b> the output intensity is
+a weighted average of nearby input pixels instead of a minimum or maximum.
+
+<p>This convolution changes the three Minkowski integrals in a predefined
+way, and can be used to filter an image to enhance certain features, to
+ease their automatic recognition.
+
+<p>The options <b>-erode</b> and <b>-dilate</b> obviously produce an
+erosion or dilation, respectively.  <p>The <b>-open</b> option causes
+<b>pgmmorphconv</b> to perform first an erode and then a dilate
+operation.  The <b>-close</b> option causes a dilate first and then an
+erode.  If you specify none of these options, it is the same as
+<b>-dilate</b>.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<ul>
+<li><B><A HREF="pgmminkowski.html">pgmminkowski</A></B>
+<li><B><A HREF="pnmconvol.html">pnmconvol</A></B>
+<li><B><A HREF="pgm.html">pgm</A></B>
+</ul>
+
+<p>For more information about morphological convolutions, see e.g. 
+<ul>
+<li><a
+href="http://rugth30.phys.rug.nl/compphys0/2001.htm"> K. Michielsen and
+H. De Raedt, "Integral-Geometry Morphological Image Analysis", 
+Phys. Rep. 347, 461-538 (2001).</a>
+
+<li><a href="http://rugth30.phys.rug.nl/pdf/prechaos.pdf">
+J.S. Kole, K. Michielsen, and H. De Raedt,
+"Morphological Image Analysis of Quantum Motion in Billiards",
+Phys. Rev. E 63, 016201-1 - 016201-7 (2001)
+</a>
+</ul>
+
+
+<H2 id="authors">AUTHORS</H2>
+
+Luuk van Dijk, 2001.
+
+<p>Based on work which is Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#authors">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmnoise.html b/pgmnoise.html
new file mode 100644
index 00000000..20d4ab32
--- /dev/null
+++ b/pgmnoise.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmnoise User Manual</TITLE>
+</HEAD><BODY>
+<H1>pgmnoise</H1>
+Updated: 16 November 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmnoise - create a graymap made up of white noise
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmnoise </B>
+
+<I>width</i> <i>height</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pgmnoise</b> creates a portable graymap that is made up of
+random pixels with gray values in the range of 0 to PGM_MAXMAXVAL
+(depends on the compilation, either 255 or 65535). The graymap has a
+size of width * height pixels.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgm.html">pgm</A>
+<A NAME="lbAF">&nbsp;</A>
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmnorm.html b/pgmnorm.html
new file mode 100644
index 00000000..b076b3bc
--- /dev/null
+++ b/pgmnorm.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pgmnorm User Manual</TITLE>
+</HEAD><BODY>
+<H1>pgmnorm</H1>
+Updated: March 2002
+<BR>
+<H2>NAME</H2>
+<B>pgmnorm</B> - replaced by pnmnorm
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pgmnorm</b> was replaced in Netpbm 9.25 (March 2002) by
+<b><a href="pnmnorm.html">pnmnorm</a></b>.
+
+<P><B>pnmnorm</b> is backward compatible with <b>pgmnorm</b>, but it also
+handles PPM images.
+
+</BODY>
+</HTML>
diff --git a/pgmoil.html b/pgmoil.html
new file mode 100644
index 00000000..fd3b6f48
--- /dev/null
+++ b/pgmoil.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pgmoil User Manual</TITLE>
+</HEAD><BODY>
+<H1>pgmoil</H1>
+Updated: July 2001
+<BR>
+<H2>NAME</H2>
+<B>pgmoil</B> - replaced by pamoil
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pgmoil</b> was replaced in Netpbm 9.16 (July 2001) by
+<b><a href="pamoil.html">pamoil</a></b>.
+
+<P><B>pamoil</b> is backward compatible with <b>pgmoil</b>, but works on
+color images too.
+
+</BODY>
+</HTML>
diff --git a/pgmramp.html b/pgmramp.html
new file mode 100644
index 00000000..1e1bc0b3
--- /dev/null
+++ b/pgmramp.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Pgmramp User Manual</title>
+</HEAD><BODY>
+<H1>pgmramp</H1>
+Updated: 04 June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmramp - generate a grayscale ramp
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmramp</B>
+<B>-lr</B>|<B>-tb</B>|<B>-rectangle</B>|<B>-ellipse</B>
+<b>-maxval=</b><i>maxval</i>
+<I>width</i> <i>height</I>
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or an equals sign between an option name
+and its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>Generates a graymap of the specified size containing a
+black-to-white ramp.  These ramps are useful for multiplying with
+other images, using <b>pamarith</b>.
+
+<p>The ramp is linear in brightness, not intensity.  I.e. the
+gamma-corrected sample values in the PGM rise linearly with distance
+from the corner of the image.  If you want a ramp that is linear in
+light intensity, use <b>pnmgamma</b> with <b>pgmramp</b>.
+
+<P>To generate a simple ramp of all the values from 0 to maxval, and not
+necessarily a graphic image, use <b><a href="pamseq.html">pamseq</a></b>.
+
+<p><b>ppmrainbow</b> does something similar to what <b>pgmramp</b> does,
+but for color.  The image fades between two colors of your choice.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+You must specify exactly one of the ramp type options.
+<DL COMPACT>
+<DT><B>-lr</B>
+<DD>
+A left to right ramp.
+
+<DT><B>-tb</B>
+<DD>
+A top to bottom ramp.
+
+<DT><B>-rectangle</B>
+<DD>
+An outside-in rectangular ramp.  It is black around the edges and white
+in the center.
+
+<DT><B>-ellipse</B>
+<DD>
+An outside-in elliptical ramp.  It is black around the edge and white
+in the center.
+
+<DT><b>-maxval=</b><i>maxval</i>
+<DD>
+     The maxval for the generated image.  Default is 255.
+<p>
+     This option did not exist before June 2002.  Before, the maxval was
+     always 255.
+     
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamarith.html"><b>pamarith</b></A>,
+<A HREF="pnmgamma.html"><b>pnmgamma</b></A>,
+<A HREF="pamseq.html"><b>pamseq</b></A>,
+<A HREF="ppmrainbow.html"><b>ppmrainbow</b></A>,
+<A HREF="pamgradient.html"><b>pamgradient</b></A>,
+<A HREF="pgm.html">pgm</A>
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmslice.html b/pgmslice.html
new file mode 100644
index 00000000..a71c044b
--- /dev/null
+++ b/pgmslice.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pgmslice User Manual</title>
+</HEAD><BODY>
+<H1>pgmslice</H1>
+Updated: 22 June 2002
+<BR>
+<H2>NAME</H2>
+pgmslice - extract one line of pixel values out of a PGM
+
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>Starting with Netpbm 10.3, <b>pgmslice</b> is obsolete.  Use
+<a href="pamslice.html"><b>pamslice</b></a> instead.  It is backward
+compatible.
+
+</BODY>
+</HTML>
+
+
+
diff --git a/pgmtexture.html b/pgmtexture.html
new file mode 100644
index 00000000..ebb37123
--- /dev/null
+++ b/pgmtexture.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmtexture User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmtexture</H1>
+Updated: 22 Aug 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmtexture - calculate textural features on a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmtexture</B>
+
+[<B>-d</B> <I>d</I>]
+
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmtexture</b> reads a PGM image as input and calculates
+textural features based on spatial dependence matrices at 0, 45, 90,
+and 135 degrees for a distance <I>d</I> (default = 1).
+
+<p>Textural features include:
+
+<UL>
+<LI>Angular Second Moment
+<LI>Contrast
+<LI>Correlation
+<LI>Variance
+<LI>Inverse Difference Moment
+<LI>Sum Average
+<LI>Sum Variance
+<LI>Sum Entropy
+<LI>Entropy
+<LI>Difference Variance
+<LI>Difference Entropy
+<LI>Information Measures of Correlation
+<LI>Maximal Correlation Coefficient
+</UL>
+     
+<P>Algorithm taken from: <CITE>Haralick, R.M., K. Shanmugam, and
+I. Dinstein. 1973. Textural features for image classification.
+<I>IEEE Transactions on Systems, Man, and Cybertinetics,</I>
+SMC-3(6):610-621.</cite>
+     
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>The program can run incredibly slow for large images (larger than
+64 x 64) and command line options are limited.  The method for finding
+the Maximal Correlation Coefficient, which requires finding the second
+largest eigenvalue of a matrix Q, does not always converge.
+
+<H2>SEE ALSO</H2>
+
+<A HREF="pgm.html">pgm</A>,
+<A HREF="pamsharpness.html">pamsharpness</A>,
+<A HREF="pamsharpmap.html">pamsharpmap</A>,
+<A HREF="pgmedge.html">pgmedge</A>,
+<A HREF="pgmminkowski.html">pgmminkowski</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Texas Agricultural Experiment Station, employer for
+hire of James Darrell McCauley. 
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">BUGS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmtofs.html b/pgmtofs.html
new file mode 100644
index 00000000..204c17ae
--- /dev/null
+++ b/pgmtofs.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmtofs User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmtofs</H1>
+Updated: 18 May 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmtofs - convert PGM image to Usenix FaceSaver(tm) format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmtofs</B>
+
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmtofs</b> reads a PGM image as input and produces Usenix
+FaceSaver(tm) format as output.
+
+<P>FaceSaver is a registered trademark of Metron Computerware Ltd. of
+Oakland, CA.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="fstopgm.html">fstopgm</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmtolispm.html b/pgmtolispm.html
new file mode 100644
index 00000000..2cec5109
--- /dev/null
+++ b/pgmtolispm.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmtolispm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmtolispm</H1>
+Updated: 06 March 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmtolispm - convert a PGM image to Lisp Machine format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmtolispm</B>
+
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmtolispm</b> reads a PGM image as input and produces a Lisp
+Machine bitmap as output.
+
+<P>This is the file format read by the tv:read-bit-array-file function
+on TI Explorer and Symbolics lisp machines.
+
+<P>Given a PGM (instead of a PBM), <b>pgmtolispm</b> outputs a
+multi-plane image.  This is probably not useful unless you have a
+color lisp machine.
+
+<P>Multi-plane bitmaps on lisp machines are color; but the lispm image
+file format does not include a color map, so we must treat it as a
+graymap instead.  This is unfortunate.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="lispmtopgm.html">lispmtopgm</A>,
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>Output width is always rounded up to the nearest multiple of 32;
+this might not always be what you want, but it probably is (arrays
+which are not modulo 32 cannot be passed to the Lispm BITBLT function,
+and thus cannot easily be displayed on the screen).
+
+<P>No color.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmtopbm.html b/pgmtopbm.html
new file mode 100644
index 00000000..39377764
--- /dev/null
+++ b/pgmtopbm.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmtopbm</H1>
+Updated: 20 June 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pgmtopbm - convert a PGM image to PBM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmtopbm</B>
+
+[<B>-floyd</B> | <B>-fs</B> | <B>-threshold</B>
+| <B>-hilbert</B>
+| <B>-dither8</B> | <B>-d8</B> | <B>-cluster3</B>
+| <B>-c3</B> | <B>-cluster4</B> | <B>-c4</B>
+| <B>-cluster8</B> | <B>-c8</B>]
+
+[<B>-value</B> <I>val</I>]
+
+[<B>-clump</B> <I>size</I>]
+
+[<I>pgmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>This program is obsolete since Netpbm 10.23 (July 2004).  Use <a
+href="pamditherbw.html"><b>pamditherbw</b></a> to do what this program
+used to do.
+
+<p><b>pgmtopbm</b> never was the simple converter it appeared to be.
+It was a dithering program.  Unfortunately, it didn't do the dithering
+properly because it treated the PGM input samples as if they were
+directly proportional to light intensity, but they are actually
+gamma-adjusted.
+
+<p><b>pamditherbw</b> is backward compatible with <b>pgmtopbm</b>
+except that it does the correct gamma adjustments.
+
+</BODY>
+</HTML>
diff --git a/pgmtopgm.html b/pgmtopgm.html
new file mode 100644
index 00000000..6a9555ac
--- /dev/null
+++ b/pgmtopgm.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Pgmtopgm User Manual</title></HEAD>
+
+<BODY>
+<H1>pgmtopgm</H1>
+Updated: September 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pgmtopgm - copy PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pgmtopgm</B>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pgmtopgm</b> simply copies a PGM image from Standard Input to
+Standard Output.  This may seem an unnecessary duplication of
+<b>cat</b>, but remember that a PGM program can read a PBM image as
+if it were PGM.  So <b>pgmtopgm</b> can read either a PBM or PGM
+image and produce a PGM image as output.
+
+<p>Even that is of limited usefulness because of the fact that almost
+any program to which you would feed the resulting PGM image could also
+just take the original image directly.  However, sometimes you really
+need a true PGM image.
+
+<p>When you know you have a PBM image and want a PGM image,
+<b>pbmtopgm</b> is a more general way to do that conversion.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtoppm.html">ppmtoppm</A></B>,
+<B><A HREF="pnmtopnm.html">pnmtopnm</A></B>,
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+<B><A HREF="pbmtopgm.html">pbmtopgm</A></B>,
+<B><A HREF="pbm.html">pgm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p>This program was added to Netpbm in Release 10.9 (September 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pgmtoppm.html b/pgmtoppm.html
new file mode 100644
index 00000000..ea93a60c
--- /dev/null
+++ b/pgmtoppm.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pgmtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pgmtoppm</H1>
+Updated: 10 December 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pgmtoppm - colorize a PGM (grayscale) image into a PPM (color) image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pgmtoppm</B>
+
+<I>colorspec</I>
+
+[<I>pgmfile</I>]
+
+<BR>
+
+<B>pgmtoppm</B>
+
+<I>colorspec1</I><B>-</B><I>colorspec2</I>
+
+[<I>pgmfile</I>]
+
+<BR>
+
+<B>pgmtoppm</b>
+<b>-map=</B><I>mapfile</I>
+
+[<I>pgmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pgmtoppm</b> reads a PGM as input and produces a PPM file as
+output with a specific color assigned to each gray value in the input.
+
+<P>If you specify one color argument, black in the pgm file stays
+black and white in the pgm file turns into the specified color in the
+ppm file.  Gray values in between are linearly mapped to differing
+intensities of the specified color.
+
+<P>If you specify two color arguments (separated by a hyphen), then
+black gets mapped to the first color and white gets mapped to the
+second and gray values in between get mapped linearly (across a three
+dimensional space) to colors in between.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>Also, you can specify an entire colormap with the <B>-map</B>
+option.  The mapfile is just a <B>ppm</B> file; it can be any shape,
+all that matters is the colors in it and their order.  In this case,
+black gets mapped into the first color in the map file, and white gets
+mapped to the last and gray values in between are mapped linearly onto
+the sequence of colors in between.  The maxval of the output image is
+the maxval of the map image.
+
+<p>A more direct way to specify a particular color to replace each
+particular gray level is to use <b>pamlookup</b>.  You make an index
+file that explicitly associates a color with each possible gray level.
+
+<H2 id="maxval">NOTE - MAXVAL</H2>
+
+<P>When you don't use <b>-map</b>, the &quot;maxval,&quot; or depth,
+of the output image is the same as that of the input image.  The
+maxval affects the color resolution, which may cause quantization
+errors you don't anticipate in your output.  For example, you have a
+simple black and white image as a PGM with maxval 1.  Run this image
+through <B>pgmtoppm 0f/00/00</B> to try to make the image black and
+faint red.  Because the output image will also have maxval 1, there is
+no such thing as faint red.  It has to be either full-on red or black.
+<B>pgmtoppm</B> rounds the color 0f/00/00 down to black, and you get
+an output image that is nothing but black.
+
+<P>The fix is easy: Pass the input through <B>pamdepth</B> on the way
+into <B>pgmtoppm</B> to increase its depth to something that would
+give you the resolution you need to get your desired color.  In this
+case, <B>pamdepth 16</B> would do it.  Or spare yourself the
+unnecessary thinking and just say <B>pamdepth 255</B>.
+
+<p>PBM input is a special case.  While you might think this would be
+equivalent to a PGM with maxval 1 since only two gray levels are
+necessary to represent a PBM image, <b>pgmtoppm</b>, like all Netpbm
+programs, in fact treats it as a maxval of 255.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="rgb3toppm.html">rgb3toppm</A></B>,
+<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>,
+<B><A HREF="ppmtorgb3.html">ppmtorgb3</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#maxval">NOTE - MAXVAL</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pi1toppm.html b/pi1toppm.html
new file mode 100644
index 00000000..097bf696
--- /dev/null
+++ b/pi1toppm.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pi1toppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pi1toppm</H1>
+Updated: 19 July 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pi1toppm - convert an Atari Degas .pi1 into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pi1toppm</B>
+
+[<I>pi1file</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pi1toppm</b> reads an Atari Degas .pi1 file as input and
+produces a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtopi1.html">ppmtopi1</A>,
+<A HREF="pc1toppm.html">pc1toppm</A>,
+<A HREF="ppm.html">ppm</A>,
+<A HREF="pi3topbm.html">pi3topbm</A>,
+<A HREF="pbmtopi3.html">pbmtopi3</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Steve Belczyk (<A
+HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pi3topbm.html b/pi3topbm.html
new file mode 100644
index 00000000..514bd05b
--- /dev/null
+++ b/pi3topbm.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pi3topbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pi3topbm</H1>
+Updated: 11 March 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pi3topbm - convert an Atari Degas .pi3 file into a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pi3topbm</B>
+
+[<I>pi3file</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pi3topbm</b> reads an Atari Degas .pi3 file as input and
+produces a PBM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtopi3.html">pbmtopi3</A>,
+<A HREF="pbm.html">pbm</A>,
+<A HREF="pi1toppm.html">pi1toppm</A>,
+<A HREF="ppmtopi1.html">ppmtopi1</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1988 by David Beckemeyer (bdt!david) and Diomidis D. Spinellis.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/picttoppm.html b/picttoppm.html
new file mode 100644
index 00000000..67e0d98d
--- /dev/null
+++ b/picttoppm.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Picttoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>picttoppm</H1>
+Updated: 17 June 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+picttoppm - convert a Macintosh PICT file to a PPM
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>picttoppm</B>
+
+[<B>-verbose</B>]
+
+[<B>-fullres</B>]
+
+[<B>-noheader</B>]
+
+[<B>-quickdraw</B>]
+
+[<B>-fontdir</B>file<B>]</B>
+
+[<I>pictfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>picttoppm</b> reads a PICT file (version 1 or 2) and outputs a PPM
+image.
+
+<p>This is useful as the first step in converting a scanned image to
+something that can be displayed on Unix.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-fontdir </B><I>file</I>
+
+<DD>Make the list of BDF fonts in <i>file</i> available for use by
+<b>picttoppm</b> when drawing text.  See below for the format of the
+fontdir file.  This is in addition to the built-in fonts and those in
+the file <b>fontdir</b>.
+
+<DT><B>-fullres</B>
+
+<DD>Force any images in the PICT file to be output with at least their
+full resolution.  A PICT file may indicate that a contained
+image is to be scaled down before output.  This option forces images
+to retain their sizes and prevent information loss.
+This option disables all PICT operations except images.
+
+<DT><B>-noheader</B>
+
+<DD>Do not skip the 512 byte header that is present on all PICT files.
+This is useful when you have PICT data that was not stored in
+the data fork of a PICT file.
+
+<DT><B>-quickdraw</B>
+
+<DD>Execute only pure quickdraw operations.  In particular, turn off
+the interpretation of special PostScript printer operations.
+
+<DT><B>-verbose</B>
+
+<DD>Print a whole bunch of information about the PICT file and the
+conversion process that only <b>picttoppm</b> hackers really care
+about.
+
+</DL>
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+The PICT file format is a general drawing format.  <b>picttoppm</b>
+does not recognize all the drawing commands, but it does fully
+implement all image commands and mostly implement line, rectangle,
+polgon and text drawing.  It is useful for converting scanned images
+and some drawing conversion.
+
+<P>Memory is used very liberally with at least 6 bytes needed for
+every pixel.  Large bitmap PICT files will likely run your computer
+out of memory.
+
+<h2 id="fonts">FONTS</h2>
+
+<p>Some of the information in a PICT file is text, with a number
+indicating the font in which the text is supposed to rendered.
+<b>picttoppm</b> has one built-in font, but you can add others by
+directing <b>picttoppm</b> to BDF font files, which you do with font
+directory files.
+
+<p><b>picttoppm</b> automatically uses the file named <b>fontdir</b>
+in the current directory, if it exists.  You may specify an additional
+font directory file with the <b>-fontdir</b> option.
+
+<P>Obviously the font defintions are strongly related to the
+Macintosh.  You can find more font numbers and information about fonts
+in Macintosh documentation.
+
+<H3 id="fontdir">FONT DIR FILE FORMAT</H3>
+
+<p>Each line in the file is either a comment or font information.  A
+comment begins with <b>#</b>.  The font information consists of 4
+whitespace spearated fields.  The first is the font number, the second
+is the font size in pixels, the third is the font style and the fourth
+is the name of a BDF file containing the font.  The BDF format is
+defined by the X Window System and is beyond the scope of this document.
+
+<P>The font number indicates the type face.  Here is a list of known
+font numbers and their faces.
+
+<dl>
+<dt>0       <dd>Chicago
+<dt>1       <dd>application font
+<dt>2       <dd>New York
+<dt>3       <dd>Geneva
+<dt>4       <dd>Monaco
+<dt>5       <dd>Venice
+<dt>6       <dd>London
+<dt>7       <dd>Athens
+<dt>8       <dd>San Franciso
+<dt>9       <dd>Toronto
+<dt>11      <dd>Cairo
+<dt>12      <dd>Los Angeles
+<dt>20      <dd>Times Roman
+<dt>21      <dd>Helvetica
+<dt>22      <dd>Courier
+<dt>23      <dd>Symbol
+<dt>24      <dd>Taliesin
+</dl>
+
+<P>The font style indicates a variation on the font.  Multiple
+variations may apply to a font and the font style is the sum of the
+variation numbers which are:
+
+<dl>
+<dt>1       <dd>Boldface
+<dt>2       <dd>Italic
+<dt>4       <dd>Underlined
+<dt>8       <dd>Outlined
+<dt>16      <dd>Shadow
+<dt>32      <dd>Condensed
+<dt>64      <dd>Extended
+</dl>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+Inside Macintosh volumes 1 and 5,
+<A HREF="ppmtopict.html">ppmtopict</A>,
+<A HREF="ppm.html">ppm</A>
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright 1993 George Phillips
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#limitations">BUGS</A>
+<LI><A HREF="#fonts">FONTS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pjtoppm.html b/pjtoppm.html
new file mode 100644
index 00000000..4610281e
--- /dev/null
+++ b/pjtoppm.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pjtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pjtoppm</H1>
+Updated: 14 July 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pjtoppm - convert an HP PaintJet file to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pjtoppm</B>
+
+[<I>paintjet</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pjtoppm</b> reads an HP PaintJet file as input and converts it
+into a PPM image.  This was a quick hack to save some trees, and it
+only handles a small subset of the paintjet commands.  In particular,
+it will only handle enough commands to convert most raster image
+files.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+HP PaintJet XL Color Graphics Printer User's Guide
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtopj.html">ppmtopj</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Christos Zoulas.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">REFERENCES</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pktopbm.html b/pktopbm.html
new file mode 100644
index 00000000..709e27af
--- /dev/null
+++ b/pktopbm.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pktopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pktopbm</H1>
+Updated: 6 August 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pktopbm - convert packed (PK) format font into PBM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+pktopbm pkfile[.pk] [ -x width ] [ -y height ] [-c num] pbmfile ...
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pktopbm</b> reads a packed (PK) font file as input, and produces
+PBM images as output. If the filename &quot;-&quot; is used for any of
+the filenames, the standard input stream (or standard output where
+appropriate) will be used. If either the width or height is specified,
+this value will be used for all bitmaps produced. Also if one or both
+values are specified, the bitmap will be relocated with the hoffset
+and voffset given in the pkfile. The basepoint will be placed in the
+lower left corner of the bitmap if the bitmap is bigger than the
+specified size it will be truncated at the top or right.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><b>-c</b> <i>num</i>
+<DD>
+Sets the character number of the next bitmap written to <i>num</i>.
+
+<DT><b>-x</b> <i>width</i>
+<DD>
+Sets the width of the image in columns.
+
+<DT><b>-y</b> <i>width</i>
+<DD>
+Sets the height of the image in rows.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtopk.html">pbmtopk</A>,
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Adapted from Tom Rokicki's pxtopk by Angus Duggan &lt;<A
+HREF="mailto:ajcd@dcs.ed.ac.uk">ajcd@dcs.ed.ac.uk</A>&gt;.  &lt;<A
+HREF="mailto:bartel@informatik.tu-muenchen.de">bartel@informatik.tu-muenchen.de</A>&gt;
+in March 1995.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pngtopnm.html b/pngtopnm.html
new file mode 100644
index 00000000..3c3d5c23
--- /dev/null
+++ b/pngtopnm.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pngtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pngtopnm</H1>
+Updated: 24 March 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pngtopnm - convert a PNG image into a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pngtopnm</B>
+[<b>-verbose</b>]
+[<b>-alpha</b> | <b>-mix</b>]
+[<b>-background</b>=<i>color</i>]
+<BR>
+[<b>-gamma</b>=<i>value</i>]
+[<b>-text</b>=<i>filename</i>]
+[<b>-time</b>]
+[<I>pngfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pngtopnm</b> reads a PNG image (Portable Network Graphics) as
+input and produces a PPM image as output.  The type of the output file
+depends on the input file - if it's black &amp; white, <b>pngtopnm</b>
+creates a PBM file.  If it's grayscale, <b>pngtopnm</b> creates a PGM
+file.  Otherwise, it creates a PPM file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-verbose</B>
+
+<DD>Display various information about the input PNG image and the
+conversion process.
+
+<p>If you want even more information about the PNG image, use
+<b>pngcheck</b> (not part of Netpbm).
+     
+<DT><B>-alpha</B>
+
+<DD>Output the alpha channel or transparency mask of the image. The
+result is either a PBM file or a PGM file, depending on whether
+different levels of transparency appear.
+
+<DT><B>-mix</B>
+
+<DD>Compose the image with the transparency or alpha mask against a
+background.  The background color is determined by the bKGD chunk in
+the PNG, except that you can override it with <b>-background</b>.
+If the PNG has no bKGD chunk and you don't specify <b>-background</b>,
+the background color is white.
+
+<DT><B>-background=</b><i>color</i>
+
+<DD>
+This option specifies the background color with which to mix the image
+when you specify <b>-mix</b>.  
+
+<P><i>color</i> is as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>Examples:
+
+<ul>
+<li><tt>-background=rgb:01/ff/80</tt>
+<li><tt>-background=rgbi:1/255/128</tt>
+</ul>
+
+<p>If you don't specify <b>-background</b>, the background color is what
+is specified in the PNG image, and if the PNG doesn't specify anything,
+white.
+
+<p>You cannot specify <b>-background</b> unless you also specify
+<b>-mix</b>.  Before Netpbm 10.27 (March 2005), you could specify
+<b>-background</b> with <b>-mix</b> and it was just ignored.  (This caused
+a usability problem).
+
+
+<DT><B>-gamma=</b> <i>value</i>
+
+<DD>Converts the image to a new display-gamma value.  If a gAMA chunk
+is present in the <I>png-file</I>, <b>pngtopnm</b> uses the specified
+image-gamma value.  If not, <b>pngtopnm</b> considers the image-gamma
+to be 1.0.  Based on the image-gamma and the display-gamma given with
+this option, <b>pngtopnm</b> adjusts the colors written to the
+<I>pnm-file</I>.
+
+<p>Because the gammas of uncompensated monitors are around 2.6, which results 
+in an image-gamma of 0.45, some typical situations are: 
+when the image-gamma is 0.45 (use -verbose to check) and the picture is too 
+light, your system is gamma-corrected, so convert with &quot;-gamma 1.0&quot;. 
+When no gAMA chunk is present or the image-gamma is 1.0, use 2.2 to make the 
+picture lighter and 0.45 to make the picture darker.
+
+<DT><B>-text=</b><i>file</i>
+
+<DD>Writes the tEXt and zTXt chunks to a file, in a format as
+described in the <b>pnmtopng</b> user manual.  These chunks contain
+text comments or annotations.
+
+<DT><B>-time</B>
+
+<DD>Prints the tIME chunk to stderr.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtopng.html">pnmtopng</A>,
+<b>ptot</b>,
+<A HREF="pnmgamma.html">pnmgamma</A>, 
+<A HREF="pnm.html">pnm</A>
+
+<p>For information on the PNG format, see <a
+href="http://schaik.com/png">http://schaik.com/png</a>.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>NOTE</H2>
+
+<p>A PNG image contains a lot of information that can't be represented in 
+Netpbm formats.  Therefore, you lose information when you convert to 
+another format with "pngtopnm | pnmtoxxx".  If there is a specialized 
+converter that converts directly to the other format, e.g. <b>ptot</b>
+to convert from PNG to TIFF, you'll get better results using that.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+There could be an option to read the comment text from pnm comments instead
+of a separate file.
+
+<P>The program could be much faster, with a bit of code optimizing.
+As with any Netpbm program, speed always takes a back seat to quick
+present and future development.
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+Copyright (C) 1995-1997 by Alexander Lehmann and Willem van Schaik.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">NOTE</A>
+<LI><A HREF="#lbAH">LIMITATIONS</A>
+<LI><A HREF="#lbAI">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnm.html b/pnm.html
new file mode 100644
index 00000000..6223f1d3
--- /dev/null
+++ b/pnm.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>The PNM Format</TITLE>
+<META NAME="manual_section" CONTENT="5">
+</HEAD>
+<BODY>
+
+<H1>pnm</H1>
+Updated: 03 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnm - Netpbm superformat
+
+<H2 id="description">DESCRIPTION</H2>
+
+<P>The PNM format is just an abstraction of the PBM, PGM, and PPM
+formats.  I.e. the name &quot;PNM&quot; refers collectively to
+PBM, PGM, and PPM.
+
+<P>The name &quot;PNM&quot; is an acronym derived from &quot;Portable
+Any Map.&quot; This derivation makes more sense if you consider
+it in the context of the other Netpbm format names: PBM, PGM, and PPM.
+
+<P>The more general term &quot;Netpbm format&quot; refers to the PNM
+formats plus PAM.
+
+<p>PNM is principally used with <a href="index.html">Netpbm</a>.
+
+<P>Note that besides being names of formats, PBM, PGM, PPM, and PNM
+are also classes of programs.  A PNM program can take PBM, PGM, or PPM
+input.  That's nothing special -- a PPM program can too.  But a PNM
+program can often produce multiple output formats as well, and a PNM
+program can see the difference between PBM, PGM, and PPM input and
+respond to each differently whereas a PPM program sees everything as
+if it were PPM.  This is discussed more in <a href="index.html">the
+description of the netpbm programs</a>.
+
+<P>&quot;pnm&quot; also appears in the names of the most general <a
+href="libnetpbm.html">Netpbm library routines</a>, some of which aren't even
+related to the PNM format.
+
+<H2 id="seealso">SEE ALSO</H2>
+<A HREF="ppm.html">ppm</A>,
+<A HREF="pgm.html">pgm</A>,
+<A HREF="pbm.html">pbm</A>,
+<A HREF="pam.html">pam</A>,
+<A HREF="directory.html">programs that process PNM</A>,
+<A HREF="libnetpbm.html">libnetpbm</A>
+
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmalias.html b/pnmalias.html
new file mode 100644
index 00000000..e8e0528e
--- /dev/null
+++ b/pnmalias.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmalias User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmalias</H1>
+Updated: 15 March 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmalias - antialias a PNM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmalias</B>
+
+[<B>-bgcolor</B> <I>color</I>]
+
+[<B>-fgcolor</B> <I>color</I>]
+
+[<B>-bonly</B>]
+
+[<B>-fonly</B>]
+
+[<B>-balias</B>]
+
+[<B>-falias</B>]
+
+[<B>-weight</B> <I>w</I>]
+
+[<I>pnmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmalias</b> reads a PNM image as input, and applies
+anti-aliasing to background and foreground pixels.  If the input file
+is a PBM, <b>pnmalias</b> promotes the output anti-aliased image to a
+PGM, and prints a message informing the user of the change in format.
+
+<H2 id="options">OPTIONS</H2>
+
+<P><B>-bgcolor</B> <I>colorb</I> sets the background color the
+<i>colorb</i>.
+
+<p><B>-fgcolor</B> <I>colorf</I> sets the foreground color to
+<i>colorf</i>.
+
+<p>Pixels with these values will be anti-aliased.  By default,
+<b>pnmalias</b> takes the background color to be black, and foreground
+color to be white.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<P>Note that even when dealing with PGMs, background and foreground
+colors need to be specified in the fashion described above.  In this
+case, <b>pnmalias</b> takes the background and foreground pixel values
+to be the value of the red component for the specified color.
+
+<P><B>-bonly</B> says to apply anti-aliasing only to the background pixels.
+
+<p><B>-fonly</B> says to apply anti-aliasing only to the foreground pixels.
+
+<P><B>-balias</B> says to apply anti-aliasing to all pixels surrounding
+background pixels.
+
+<P><B>-falias</B> says to apply anti-aliasing to all pixels surrounding
+foreground pixels.
+
+<p>If you specify neither <b>-balias</b> nor <b>-falias</b>,
+<b>pnmalias</b> applies anti-aliasing only among neighboring
+background and foreground pixels.
+
+<P><B>-weight</B> <I>w</I> says to use <I>w</I> as the central weight
+for the aliasing filter.  <I>w</I> must be a real number in the range
+0 &lt; <I>w</I> &lt; 1.  The lower the value of <I>w</I> is, the
+&quot;blurrier&quot; the output image is.  The default is w = 1/3.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pbmtext.html">pbmtext</A>,
+<A HREF="pnmsmooth.html">pnmsmooth</A>,
+<A HREF="pnm.html">pnm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1992 by Alberto Accomazzi, Smithsonian Astrophysical Observatory.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmarith.html b/pnmarith.html
new file mode 100644
index 00000000..41439084
--- /dev/null
+++ b/pnmarith.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pnmarith User Manual</title></HEAD>
+
+<BODY>
+<H1>pnmarith</H1>
+Updated: 22 June 2002
+<BR>
+<H2>NAME</H2>
+pnmarith - perform arithmetic on two PNM images
+
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>Starting with Netpbm 10.3, <b>pnmarith</b> is obsolete.  Use
+<a href="pamarith.html"><b>pamarith</b></a> instead.
+
+<b>pamarith</b> is backward compatible with <b>pnmarith</b> except where
+your input images have different depths.  <b>pnmarith</b> would convert
+the one with the lesser depth to have the higher depth before doing the
+arithmetic.  With <b>pamarith</b>, you must do that step separately, using
+<b>pgmtoppm</b>.
+
+</BODY>
+</HTML>
+
+
+
diff --git a/pnmcat.html b/pnmcat.html
new file mode 100644
index 00000000..e47b9b51
--- /dev/null
+++ b/pnmcat.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmcat User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmcat</H1>
+Updated: 12 March 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmcat - concatenate Netpbm images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmcat</B>
+
+{<B>-leftright</B> | <B>-lr</B> | <B>-topbottom</b> | <b>-tb</b>}
+
+[<B>-white</B>|<B>-black</B>]
+
+[<B>-jtop</B>|<B>-jbottom</B>|<B>-jcenter</b>]
+
+<I>pnmfile</i> ...
+
+
+<P>
+Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmcat</b> reads one or more PNM images as input, concatenates them
+either left to right or top to bottom, and produces a single PNM image
+as output.
+
+<p>To do the reverse, you might use <B>pamdice</B> to split an image
+up into smaller ones of equal size or <B>pamcut</B> to chop off part
+of an image or extract part of an image.
+
+<P><B>pnmtile</B> concatenates a single input image to itself repeatedly.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>If the PNM images are not all the same height (left-right) or width
+(top-bottom), the smaller ones have to be justified with the largest.
+By default, <b>pnmcat</b> centers them, but you can specify
+justification to one side or the other with one of the
+<b>-j</b><i>xxx</i> options.  So, <B>-topbottom -jleft</B> would stack
+the PNMs on top of each other, flush with the left edge.
+
+<P>The <B>-white</B> and <B>-black</B> options specify what color to
+use to fill in the extra space when doing this justification.  If
+neither is specified, <b>pnmcat</b> chooses whichever seems to be
+right for the images.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamdice.html">pamdice</A></B>,
+
+<B><A HREF="pnmtile.html">pnmtile</A></B>,
+
+<B><A HREF="pamcut.html">pamcut</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmcolormap.html b/pnmcolormap.html
new file mode 100644
index 00000000..a7752d18
--- /dev/null
+++ b/pnmcolormap.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmcolormap User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmcolormap</H1>
+Updated: 23 October 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmcolormap - create quantization color map for a Netpbm image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmcolormap</B>
+
+[<B>-center</B>|<B>-meancolor</B>|<B>-meanpixel</B>]
+
+[<B>-spreadbrightness</B>|<B>-spreadluminosity</B>]
+
+[<B>-sort</B>]
+
+[<B>-square</B>]
+
+<I>ncolors</I>|<B>all</B>
+
+[<I>pnmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and
+its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmcolormap</b> reads a PNM or PAM image as input, chooses
+<I>ncolors</I> colors to best represent the image and writes a PNM
+color map defining them as output.  A PAM image may actually contain
+tuples of any kind, but <b>pnmcolormap</b>'s concept of the tuple values
+that best represent the ones present in the image may not make sense if
+the tuple type isn't RGB or GRAYSCALE.  The design of the program, and
+the rest of this manual, assumes the tuples represent colors.
+
+<P>You can use this map as input to <B>pnmremap</B> on the same input
+image to quantize the colors in that image, I.e. produce a similar
+image with fewer colors.  <B>pnmquant</B> does both the <B>pnmcolormap</B>
+and <B>pnmremap</B> steps for you.
+
+<P>A PNM colormap is a PNM image of any dimensions that contains at
+least one pixel of each color in the set of colors it represents.  The
+ones <b>pnmcolormap</b> generates have exactly one pixel of each color,
+except where padding is necessary with the <b>-square</b> option.
+
+<P>The quantization method is Heckbert's &quot;median cut&quot;.
+See <a href="#quant">QUANTIZATION METHOD</a>.
+
+<P>The output image is of the same format (PBM, PGM, PPM, PAM) as the
+input image.  Note that a colormap of a PBM image is not very
+interesting.
+
+<P>The colormap generally has the same maxval as the input image, but
+<B>pnmcolormap</B> may reduce it if there are too many colors in the
+input, as part of its quantization algorithm.
+
+<p><b>pnmcolormap</b> works on a multi-image input stream.  In that
+case, it produces one colormap that applies to all of the colors in
+all of the input images.  All the images must have the same format,
+depth, and maxval (but may have different height and width).  This is
+useful if you need to quantize a bunch of images that will form a
+movie or otherwise be used together -- you generally want them all to
+draw from the same palette, whereas computing a colormap separately
+from each image would make the same color in two images map to
+different colors.  Before Netpbm 10.31 (December 2005), <b>pnmcolormap</b>
+ignored any image after the first.
+
+<P>If you want to create a colormap without basing it on the colors in
+an input image, <B>pamseq</B>, <b>ppmmake</b>, and <b>pnmcat</b> can
+be useful.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>PARAMETERS</H2>
+
+<P>The single parameter, which is required, is the number of colors you want
+in the output colormap.  <B>pnmcolormap</B> may produce a color map with slightly fewer colors than that.  You may
+specify <B>all</B> to get a colormap of every color in the input image (no quantization).
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-sort</B>
+
+<DD>This option causes the output colormap to be sorted by the red
+component intensity, then the green, then the blue in ascending order.
+This is an insertion sort, so it is not very fast on large colormaps.
+Sorting is useful because it allows you to compare two sets of colors.
+
+<DT><B>-square</B>
+
+<DD>By default, <B>pnmcolormap</B> produces as the color map a PPM
+image with one row and one column for each color in the colormap.
+This option causes <B>pnmcolormap</B> instead to produce a PPM image
+that is within one row or column of being square, with the last pixel
+duplicated as necessary to create a number of pixels which is such an
+almost-perfect square.
+
+<DT><B>-verbose</B>
+
+<DD>This option causes <B>pnmcolormap</B> to display messages to
+Standard Error about the quantization.  <DT><B>-center</B>
+
+<DT><B>-meancolor</B>
+
+<DT><B>-meanpixel</B>
+
+<DT><B>-spreadbrightness</B>
+
+<DT><B>-spreadluminosity</B>
+
+<DD>These options control the quantization algorithm.  See <a
+href="#quant">QUANTIZATION METHOD</a>.
+
+</DL>
+
+
+<A NAME="quant">&nbsp;</A>
+<H2>QUANTIZATION METHOD</H2>
+
+<P>A quantization method is a way to choose which colors, being fewer
+in number than in the input, you want in the output.
+<B>pnmcolormap</B> uses Heckbert's &quot;median cut&quot; quantization
+method.
+
+<P>This method involves separating all the colors into
+&quot;boxes,&quot; each holding colors that represent about the same
+number of pixels.  You start with one box and split boxes in two until
+the number of boxes is the same as the number of colors you want in
+the output, and choose one color to represent each box.
+
+<P>When you split a box, you do it so that all the colors in one
+sub-box are &quot;greater&quot; than all the colors in the other.
+&quot;Greater,&quot; for a particular box, means it is brighter in the
+color component (red, green, blue) which has the largest spread in
+that box.  <B>pnmcolormap</B> gives you two ways to define
+&quot;largest spread.&quot;: 1) largest spread of brightness; 2)
+largest spread of contribution to the luminosity of the color.
+E.g. red is weighted much more than blue.  Select among these with the
+<B>-spreadbrightness</B> and <B>-spreadluminosity</B> options.  The
+default is <B>-spreadbrightness</B>.
+
+<P><B>pnmcolormap</B> provides three ways of choosing a color to
+represent a box: 1) the center color - the color halfway between the
+greatest and least colors in the box, using the above definition of
+&quot;greater&quot;; 2) the mean of the colors (each component
+averaged separately by brightness) in the box; 3) the mean weighted by
+the number of pixels of a color in the image.
+
+<P>Note that in all three methods, there may be colors in the output
+which do not appear in the input at all.
+
+<P>Select among these with the <B>-center</B>, <B>-meancolor</B>, and
+<B>-meanpixel</B> options.  The default is <B>-center</B>.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+&quot;Color Image Quantization for Frame Buffer Display&quot; by Paul Heckbert,
+SIGGRAPH '82 Proceedings, page 297.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmremap.html">pnmremap</A></B>,
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="ppmquantall.html">ppmquantall</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+<B><A HREF="pamseq.html">pamseq</A></B>,
+<B><A HREF="ppmmake.html">ppmmake</A></B>,
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<P>Before Netpbm 10.15 (April 2003), <b>pnmcolormap</b> used a lot
+more memory for large images because it kept the entire input image in
+memory.  Now, it processes it a row at a time, but because it
+sometimes must make multiple passes through the image, it first copies
+the input into a temporary seekable file if it is not already in a seekable
+file.
+
+<p><b>pnmcolormap</b> first appeared in Netpbm 9.23 (January 2002).
+Before that, its function was available only as part of the function
+of <b>pnmquant</b> (which was derived from the much older
+<b>ppmquant</b>).  Color quantization really has two main subfunctions, so
+Netpbm 9.23 split it out into two separate programs:
+<b>pnmcolormap</b> and <b>pnmremap</b> and then Netpbm 9.24 replaced
+<b>pnmquant</b> with a program that simply calls <b>pnmcolormap</b> and
+<b>pnmremap</b>.
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">PARAMETERS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#quant">QUANTIZATION METHOD</A>
+<LI><A HREF="#lbAG">REFERENCES</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmcomp.html b/pnmcomp.html
new file mode 100644
index 00000000..5b5641e5
--- /dev/null
+++ b/pnmcomp.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmcomp User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmcomp</H1>
+Updated: 15 February 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmcomp - composite (overlay) two PNM images together
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmcomp</B>
+
+[<B>-align=</B>{<B>left</B>|<B>center</B>|<B>right</B>|
+<B>beyondleft</b>|<b>beyondright</b>}]
+<BR>
+[<B>-valign=</B>{<B>top</B>|<B>middle</B>|<B>bottom</B>|
+<b>above</b>|<b>below</b>}]
+<BR>
+[<B>-xoff=</B><I>X</I>]
+[<B>-yoff=</B><I>Y</I>]
+<BR>
+[<B>-alpha=</B><I>alpha-pgmfile</I>]
+[<B>-invert</B>]
+[<B>-opacity=<i>opacity</i></B>]
+<BR>
+<I>overlay_file</I>
+[<I>underlying_file</I> [<I>output_file</I>]]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmcomp</b> was obsoleted by <a
+href="pamcomp.html"><b>pamcomp</b></a>, introduced with Netpbm 10.21
+(March 2004).  <b>pamcomp</b> is backward compatible with
+<b>pnmcomp</b>, plus adds many additional functions, including the
+ability to process PAM images, and tends to produce better transparency
+results.
+
+<p><b>pnmcomp</b> remains in the Netpbm package because it probably
+has fewer bugs for now than <b>pamcomp</b>, and is faster.  Some day,
+<b>pnmcomp</b> will probably become an alias for <b>pamcomp</b>.
+
+<p>You can use the <b>pamcomp</b> documentation for <b>pnmcomp</b>,
+considering the following differences:
+
+<ul>
+<li><b>pnmcomp</b> options are a subset of <b>pamscale</b>'s, as
+     documented above.
+<li><b>pnmcomp</b> always assumes the input is linear, as <b>pamcomp</b>
+     does when you specify its <b>-linear</b> option.
+<li><b>pnmcomp</b> cannot process PAM images.
+</ul>
+
+</BODY>
+</HTML>
+
diff --git a/pnmconvol.html b/pnmconvol.html
new file mode 100644
index 00000000..cce61cde
--- /dev/null
+++ b/pnmconvol.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmconvol User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmconvol</H1>
+Updated: 29 June 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmconvol - general MxN convolution on a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmconvol</B>
+
+<I>convolution_matrix_file</I>
+[-nooffset]
+[<I>pnmfile</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmconvol</b> reads two PNM images as input, convolves the
+second using the first, and writes a PNM image as output.
+
+<P>Convolution means replacing each pixel with a weighted average of
+the nearby pixels.  The weights and the area to average are determined
+by the convolution matrix (sometimes called a convolution kernel),
+which you supply by way of the PNM image in the file you identify with
+the <i>convolution_matrix_file</i> argument.  There are two ways
+<b>pnmconvol</b> interprets the PNM convolution matrix image pixels as
+weights: with offsets, and without offsets.
+
+<p>The simpler of the two is without offsets.  That is what happens
+when you specify the <b>-nooffset</b> option.  In that case,
+<b>pnmconvol</b> simply normalizes the sample values in the PNM image
+by dividing by the maxval.
+
+<p>For example, here is a sample convolution file that causes an output pixel
+to be a simple average of its corresponding input pixel and its 8 neighbors,
+resulting in a smoothed image:
+
+<PRE>
+    P2
+    3 3
+    18
+    2 2 2
+    2 2 2
+    2 2 2
+</PRE>
+
+<p>(Note that the above text is an actual PGM file -- you can cut and paste
+it.  If you're not familiar with the plain PGM format, see
+<a href="pgm.html">the PGM format specification</a>).
+
+<p><b>pnmconvol</b> divides each of the sample values (2) by the maxval
+(18) so the weight of each of the 9 input pixels gets is 1/9, which is
+exactly what you want to keep the overall brightness of the image the
+same.  <b>pnmconvol</b> creates an output pixel by multiplying the
+values of each of 9 pixels by 1/9 and adding.
+
+<p>Note that with maxval 18, the range of possible values is 0 to 18.
+After scaling, the range is 0 to 1.
+
+<p>For a normal convolution, where you're neither adding nor
+subtracting total value from the image, but merely moving it around,
+you'll want to make sure that all the scaled values in (each plane of)
+your convolution PNM add up to 1, which means all the actual sample
+values add up to the maxval.
+
+<p>When you <em>don't</em> specify <b>-nooffset</b>, <b>pnmconvol</b>
+applies an offset, the purpose of which is to allow you to indicate
+negative weights even though PNM sample values are never negative.  In
+this case, <b>pnmconvol</b> subtracts half the maxval from each sample
+and then normalizes by dividing by half the maxval.  So to get the
+same result as we did above with <b>-nooffset</b>, the convolution
+matrix PNM image would have to look like this:
+
+<PRE>
+    P2
+    3 3
+    18
+    10 10 10
+    10 10 10
+    10 10 10
+</PRE>
+
+<P>To see how this works, do the above-mentioned offset: 10 - 18/2
+gives 1.  The normalization step divides by 18/2 = 9, which makes it
+1/9 - exactly what you want.  The equivalent matrix for 5x5 smoothing
+would have maxval 50 and be filled with 26.
+
+<p>Note that with maxval 18, the range of possible values is 0 to 18.
+After offset, that's -9 to 9, and after normalizing, the range is -1 to 1.
+
+<p>For a normal convolution, where you're neither adding nor
+subtracting total value from the image, but merely moving it around,
+you'll want to make sure that all the offset, scaled values in (each
+plane of) your convolution PNM add up to 1.  That means the actual
+sample values, less half the maxval, add up to half the maxval as in
+the example above.
+
+<P>The convolution file will usually be a PGM, so that the same
+convolution gets applied to each color component.  However, if you
+want to use a PPM and do a different convolution to different
+colors, you can certainly do that.
+
+<P>At the edges of the convolved image, where the convolution matrix
+would extend over the edge of the image, <B>pnmconvol</B> just copies
+the input pixels directly to the output.
+
+<p>The convolution computation can result in a value which is outside the
+range representable in the output.  When that happens, <b>pnmconvol</b> just
+clips the output, which means brightness is not conserved.
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+<p>The <b>-nooffset</b> option was new in Netpbm 10.23 (July 2004).
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>,
+<B><A HREF="pgmmorphconv.html">pgmmorphconv</A></B>,
+<B><A HREF="pnmnlfilt.html">pnmnlfilt</A></B>,
+<B><A HREF="pgmkernel.html">pgmkernel</A></B>,
+<B><A HREF="pamgauss.html">pamgauss</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+<BR>
+
+Modified 26 November 1994 by Mike Burns, <A
+HREF="mailto:burns@chem.psu.edu">burns@chem.psu.edu</A>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAF">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmcrop.html b/pnmcrop.html
new file mode 100644
index 00000000..2d1542d5
--- /dev/null
+++ b/pnmcrop.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmcrop User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmcrop</H1>
+Updated: 30 November 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmcrop - crop a PNM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmcrop</B>
+
+[<B>-white</B>|<B>-black</B>|<B>-sides</B>]
+
+[<B>-left</B>]
+
+[<B>-right</B>]
+
+[<B>-top</B>]
+
+[<B>-bottom</B>]
+
+[<B>-margin=</B><i>pixels</i>]
+
+[<B>-borderfile=</B><i>filename</i>]
+
+[<I>pnmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmcrop</b> reads a PBM, PGM, or PPM image as input, removes
+borders that are the background color, and produces the same type of
+image as output.
+
+<P>If you don't specify otherwise, <B>pnmcrop</B> assumes the
+background color is whatever color the top left and right corners of
+the image are and if they are different colors, something midway
+between them.  You can specify that the background is white or black
+with the <B>-white</B> and <B>-black</B> options or make
+<B>pnmcrop</B> base its guess on all four corners instead of just two
+with <B>-sides</B>.
+
+<P>By default, <B>pnmcrop</B> chops off any stripe of background color
+it finds, on all four sides.  You can tell <B>pnmcrop</B> to remove
+only specific borders with the <B>-left</B>, <B>-right</B>,
+<B>-top</B>, and <B>-bottom</B> options.
+
+<p>If you want to leave some border, use the <b>-margin</b> option.  It
+will not only spare some of the border from cropping, but will fill in
+(with what <b>pnmcrop</b> considers the background color) if necessary
+to get up to that size.
+
+<p>If the input is a multi-image stream, <b>pnmcrop</b> processes each
+one independently and produces a multi-image stream as output.  It chooses
+where to crop independently for each image.  So if you start with a stream
+of images of the same dimensions, you may end up with images of differing
+dimensions.  Before Netpbm 10.37 (December 2006), <b>pnmcrop</b> ignored
+all input images but the first.
+
+<P>If you want to chop a specific amount off the side of an image, use
+<B>pamcut</B>.
+
+<P>If you want to add different borders after removing the existing
+ones, use <B>pnmcat</B> or <B>pamcomp</B>.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-white</B>
+
+<DD>Take white to be the background color.  <B>pnmcrop</B> removes
+borders which are white.
+
+<DT><B>-black</B>
+
+<DD>Take black to be the background color.  <B>pnmcrop </B> removes
+borders which are black.
+
+<DT><B>-sides</B>
+
+<DD>Determine the background color from the colors of the four corners
+of the input image.  <B>pnmcrop</B> removes borders which are of the
+background color.
+
+<P>If at least three of the four corners are the same color,
+<B>pnmcrop </B> takes that as the background color.  If not,
+<B>pnmcrop</B> looks for two corners of the same color in the
+following order, taking the first found as the background color: top,
+left, right, bottom.  If all four corners are different colors,
+<B>pnmcrop</B> assumes an average of the four colors as the background
+color.
+
+<P>The <B>-sides</B> option slows <B>pnmcrop</B> down, as it reads the
+entire image to determine the background color in addition to the up
+to three times that it would read it without <B>-sides</B>.
+
+<DT><B>-left</B>
+
+<DD>Remove any left border.
+
+<DT><B>-right</B>
+
+<DD>Remove any right border.
+
+<DT><B>-top</B>
+
+<DD>Remove any top border.
+
+<DT><B>-bottom</B>
+
+<DD>Remove any bottom border.
+
+<dt><b>-margin=</b><i>pixels</i>
+
+<dd>Leave <i>pixels</i> pixels of border.  Expand the border to this size
+if necessary.
+
+<p>This option was new in Netpbm 10.29 (August 2005).
+
+<dt><b>-borderfile=</b><i>filename</i>
+
+<dd>Use the image in the file named <i>filename</i> instead of the input
+image to determine where the borders of the input image are.
+
+<p>Without this option, <b>pnmcrop</b> examines the input image and
+figures out what part of the image is border and what part is
+foreground (not border).  With this option, <b>pnmcrop</b> finds the
+borders in one image, then uses the those four border sizes (left,
+right, top, bottom) in cropping a different image.
+
+<p>The point of this is that you may want to help <b>pnmcrop</b> to
+come to a different conclusion as to where the border are by
+preprocessing the input image.  For example, consider an image that
+has speckles of noise in its borders.  <b>pnmcrop</b> isn't smart
+enough to recognize these as noise; it sees them as foreground image.
+So <b>pnmcrop</b> considers most of your borders to be foreground and
+does not crop them off as you want.  To fix this, run the image
+through a despeckler such as <b>pbmclean</b> and tell <b>pnmcrop</b>
+to use the despeckled version of the image as the <b>-borderfile</b>
+image, but the original speckled version as the input image.  That
+way, you crop the borders, but retain the true foreground image,
+speckles and all.
+
+<p>This option was new in Netpbm 10.29 (August 2005).
+
+<DT><B>-verbose</B>
+
+<DD>Print on Standard Error information about the processing,
+including exactly how much is being cropped off of which sides.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamcut.html">pamcut</A></B>,
+
+<B><A HREF="pamfile.html">pamfile</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmcut.html b/pnmcut.html
new file mode 100644
index 00000000..fed6b74d
--- /dev/null
+++ b/pnmcut.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmcut User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmcut</H1>
+Updated: 15 March 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmcut - cut a rectangle out of a PBM, PGM, or PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmcut</B>
+
+[<B>-left </B><I>leftcol</I>]
+
+[<B>-right </B><I>rightcol</I>]
+
+[<B>-top </B><I>toprow</I>]
+
+[<B>-bottom </B><I>bottomrow</I>]
+
+[<B>-width </B><I>width</I>]
+
+[<B>-height </B><I>height</I>]
+
+[<B>-pad</B>]
+
+[<B>-verbose</B>]
+
+[<I>left top width height</I>]
+
+[<I>pnmfile</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmcut</b> was obsoleted by <a
+href="pamcut.html"><b>pamcut</b></a>, introduced with Netpbm 9.20 (May
+2001).  <b>pamcut</b> is backward compatible with <b>pnmcut</b>, plus
+adds many additional functions, including the ability to process PAM
+images.
+
+<p><b>pnmcut</b> remains in the Netpbm package because it probably has
+fewer bugs for now than <b>pamcut</b>.  Some day, <b>pnmcut</b> will
+probably become an alias for <b>pamcut</b>.
+
+<p>You can use the <b>pamcut</b> documentation for <b>pnmcut</b>, as long
+as you avoid any function which it says was added after Netpbm 9.20.
+
+</BODY>
+</HTML>
+
+
+
diff --git a/pnmdepth.html b/pnmdepth.html
new file mode 100644
index 00000000..f0ff2048
--- /dev/null
+++ b/pnmdepth.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pnmdepth User Manual</title></HEAD>
+
+<BODY>
+<H1>pnmdepth</H1>
+Updated: 06 March 2006
+<BR>
+<H2>NAME</H2>
+pnmdepth - change the maxval in a PNM image
+
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>Starting with Netpbm 10.32 (Februrary 2006), <b>pnmdepth</b> is
+obsolete.  Use <a href="pamdepth.html"><b>pamdepth</b></a> instead.
+
+<b>pamdepth</b> is backward compatible with <b>pnmdepth</b>.  You can
+use the <b>pamdepth</b> manual for <b>pnmdepth</b> as long as you ignore
+features that were added after Netpbm 10.31.
+
+<p>For backward compatibility, the name 'pnmdepth' continues to exist
+as an alias for 'pamdepth'.  But due to a bug, that name doesn't work
+in Netpbm 10.32.  You have to fix the symbolic link.
+
+</BODY>
+</HTML>
+
+
+
diff --git a/pnmenlarge.html b/pnmenlarge.html
new file mode 100644
index 00000000..50d0367f
--- /dev/null
+++ b/pnmenlarge.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pnmenlarge User Manual</TITLE>
+</HEAD><BODY>
+<H1>pgmedge</H1>
+Updated: September 2004
+<BR>
+<H2>NAME</H2>
+<B>pnmenlarge</B> - replaced by pamenlarge
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pnmenlarge</b> was replaced in Netpbm 10.25 (October 2004) by
+<b><a href="pamenlarge.html">pamenlarge</a></b>.
+
+<P><B>pamenlarge</b> is backward compatible with <b>pnmenlarge</b>,
+but works on PAM images too.
+
+</BODY>
+</HTML>
diff --git a/pnmfile.html b/pnmfile.html
new file mode 100644
index 00000000..47945d11
--- /dev/null
+++ b/pnmfile.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pnmfile User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmfile</H1>
+Updated: September 2002
+<BR>
+<H2>NAME</H2>
+<b>pnmfile</b> - replaced by pamfile
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pnmfile</b> was replaced in Netpbm 10.9 (September 2002) by
+<b><a href="pamfile.html">pamfile</a></b>.
+
+<P><B>pamfile</b> is backward compatible with <b>pnmfile</b>, but works on
+PAM images too.
+
+</BODY>
+</HTML>
diff --git a/pnmflip.html b/pnmflip.html
new file mode 100644
index 00000000..7fc07294
--- /dev/null
+++ b/pnmflip.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pnmflip User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmflip</H1>
+<BR>
+<p><b>pnmflip</b> was replaced in Netpbm 10.13 (December 2002) by
+<b><a href=pamflip.html>pamflip</a></b>.
+
+<P><B>pamflip</b> is mostly backward compatible with <b>pnmflip</b>,
+but works on PAM images too.
+
+<P>One way <b>pamflip</b> is not backward compatible with <b>pnmflip</b>
+is that <b>pnmflip</b> lets you specify any number of basic flip options,
+whereas <b>pamflip</b> requires exactly one.  (<b>pamflip</b> provides
+the <b>-xform</b> option for requesting multiple transformations, though).
+Because of this incompatibility, <b>pnmflip</b> still exists as a
+separate program, and all it does is translate its options to <b>pamflip</b>
+style and run <b>pamflip</b>.
+
+<P>You should not make any new use of <b>pnmflip</b> and if you modify an
+existing use, you should upgrade to <b>pamflip</b>.
+
+</BODY>
+</HTML>
diff --git a/pnmgamma.html b/pnmgamma.html
new file mode 100644
index 00000000..5ce9ceae
--- /dev/null
+++ b/pnmgamma.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmgamma User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmgamma</H1>
+Updated: 18 February 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmgamma - perform gamma correction on a PNM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmgamma </B>
+
+<br>
+[
+ <B>-bt709ramp</B> |
+ <B>-srgbramp</B> |
+]
+[<b>-ungamma</b>]
+<br>
+[<I>gamma</I> | <i>redgamma</i> <i>greengamma</i> <i>bluegamma</i>
+[<I>pnmfile</I>]]
+
+<b>pnmgamma</b>
+{
+ <b>-bt709tolinear</b> | 
+ <b>-lineartobt709</b> |
+ <b>-bt709tosrgb</b> | 
+ <b>-srgbtobt709</b>
+}
+[<b>-gamma=</b><i>float</i>]
+[<b>-rgamma=</b><i>float</i>]
+[<b>-ggamma=</b><i>float</i>]
+[<b>-bgamma=</b><i>float</i>]
+
+[<i>pnmfile</i>]
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>Pnmgamma</b> performs gamma correction on pseudo-PNM images.
+
+<P>The PPM format specification specifies that certain sample values
+in a file represent certain light intensities in an image.  In
+particular, they specify that the sample values are directly
+proportional to luminance as defined by ITU-R Recommendation BT.709.
+
+<P>However, people sometimes work with approximations of PPM and PGM
+where the sample values represent intensity in different ways.  For
+example, the sample value might be directly proportional to radiance
+(often called &quot;linear intensity&quot;).  Or a different gamma
+transfer function may be used.  The relationship between the sample
+values and radiance is often called a gamma transfer function.
+
+<P><B>pnmgamma</B> allows you to manipulate the gamma transfer
+function, thus working with and/or creating pseudo-PPM files that are
+useful for various things.
+
+<P>For example, if you feed a true PPM to <kbd>pnmgamma -bt709tolinear
+</kbd>, you get as output a file which is PPM in every respect except
+that the sample values are radiances.  If you feed such a file to
+<kbd>pnmgamma -linearto709</kbd>, you get back a true PPM.
+
+<P>The situation for PGM images is analogous.  And <B>pnmgamma</B>
+treats PBM images as PGM images.
+
+<P>When you feed a radiance-proportional pseudo-PPM image to a display
+program that expects a true PPM, the display appears darker than it
+should, so <B>pnmgamma</B> has the effect of lightening the image.
+When you feed a true PPM to a display program that expects
+radiance-proportional sample values, and therefore does a gamma
+correction of its own on them, the display appears lighter than it
+should, so <B>pnmgamma</B> with a gamma value less than one (the
+multiplicative inverse of whatever gamma value the display program
+uses) has the effect of darkening the image.
+
+<H2 id="parameters">PARAMETERS</H2>
+
+<p>The form of the parameters depends on whether you're using the old
+syntax or the new syntax.  With the old syntax, the parameters are
+a mixture of gamma values and the input file name.  With the new
+syntax, the only parameter is the input file name and you specify gamma
+values with option.
+
+<p>You use the old syntax if you specify <b>-bt709ramp</b> (or
+its synonym <b>-cieramp</b>) or <b>-srgramp</b> or if you don't specify
+any transfer function at all (and thus default to a simple exponential).
+Otherwise, you use the new syntax.
+
+<p>With the old syntax, you may specify a single gamma value or 3
+separate gamma values (red, green, and blue) or no gamma values.  In
+any case, the meanings of those parameters is the same as the more
+modern <b>-gamma</b>, <b>-rgamma</b>, <b>-ggamma</b>, and
+<b>-bgamma</b> options described below.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<dt><b>-bt709tolinear</b>
+
+<dd>Convert the image from ITU Recommendation BT.709 luminance to
+radiance (sometimes called &quot;linear&quot;).  I.e. convert from
+true PPM or PGM to a radiance-linear variation that can be used with
+certain tools that need it.
+
+<p>This option was new in Netpbm 10.32 (February 2006).
+
+<dt><b>-lineartobt709</b>
+
+<dd>Convert the image from radiance to ITU Recommendation BT.709
+luminance.  I.e. convert to true PPM or PGM from a &quot;linear&quot;
+variation.
+
+<p>This option was new in Netpbm 10.32 (February 2006).
+
+<dt><b>-bt709tosrgb</b>
+
+<dd>Convert the image from ITU Recommendation BT.709 luminance to SRGB
+luminance.  I.e. convert from true PPM or PGM to an SRGB-based
+variation that is required by certain tools and display devices.
+
+<p>This option was new in Netpbm 10.32 (February 2006).
+
+<dt><b>-srgbtobt709</b>
+
+<dd>Convert the image from SRGB luminance to ITU Recommendation BT.709
+luminance.  I.e. convert to true PPM or PGM from an SRGB-based
+variation.
+
+<p>This option was new in Netpbm 10.32 (February 2006).
+
+
+<DT><B>-bt709ramp</B>
+
+<DD>Use the ITU-R Recommendation BT.709 gamma transfer function.  Note
+that it is true BT.709 only if you use the default gamma value
+(i.e. don't specify any gamma parameters).  This transfer function is
+a power function modified with a linear ramp near black.
+
+<P>If you specify none of the transfer functions the transfer function
+defaults to a simple power function.
+
+<P>This option was renamed in Netpbm 10.32 (February 2006).  Before that,
+its name is <b>-cieramp</b>.
+
+<dt><b>-cieramp</b>
+
+<dd>This is an obsolete synonym for <b>-bt709ramp</b>.
+
+<P>The name of this option comes from a former belief that this was a
+standard of CIE (International Commission On Illumination), but it now
+(August 2005) looks like it never was.
+
+<DT><B>-srgbramp </B>
+
+<DD>Use the Internation Electrotechnical Commission (IEC) SRGB gamma
+transfer function (as specified in the standard IEC 61966-2-1).  Note
+that it is true SRGB only if you use the default gamma value
+(i.e. don't specify any gamma parameters).  This transfer function is
+like the one selected by <B>-bt709ramp</B>, but with different constants
+in it.
+
+<P>Note that SRGB is often spelled &quot;sRGB&quot;.  In this
+document, we use standard English typography, though, which doesn't
+allow for that kind of capitalization.
+
+<P>If you specify neither <B>-bt709ramp</B> nor <B>-srgbramp</B>, the
+transfer function defaults to a simple power function.
+
+<DT><B>-ungamma</B>
+
+<DD>Apply the inverse of the specified transfer function (i.e. go from
+gamma-corrected luminance to radiance).
+
+<p>This is valid only with <b>-bt709ramp</b> (aka <b>-cieramp</b>),
+<b>-srgbramp</b>, and the default exponential transfer function.
+
+
+<dt><b>-gamma=</b><i>float</i>
+
+<dd>This specifies the gamma value to use in the transfer function.  All
+of the transfer functions involve an exponent, and the gamma value is that
+exponent.
+
+<p>The standards specify a particular gamma value.  If you use anything
+else, you are varying from the standard.
+
+<p>The default is the standard value.  For the simple exponential transfer
+function (which is not a standard), the default is 2.2.
+
+<p>If you specify one of the component-specific options (<b>-rgamma</b>,
+etc.), that overrides the <b>-gamma</b> value.
+
+<p>With the <b>-bt709ramp</b> (aka <b>-cieramp</b>), <b>-srgbramp</b>,
+or the default exponentional transfer function, you can't actually use
+this option, but you specify the same thing with <a
+href="#parameters">parameters.</a>
+
+<p>This option was new in Netpbm 10.32 (February 2006).
+
+<dt><b>-rgamma=</b><i>float</i>
+<dt><b>-ggamma=</b><i>float</i>
+<dt><b>-bgamma=</b><i>float</i>
+
+<dd>These options are just like <b>-gamma</b>, except they specify the
+value for a particular one of the color components.
+
+<p>If you don't specify this option for a particular color component,
+the default is the <b>-gamma</b> value (or <b>-gamma</b>'s default if
+you didn't specify that either).
+
+<p>With the <b>-bt709ramp</b> (aka <b>-cieramp</b>), <b>-srgbramp</b>,
+or the default exponentional transfer function, you can't actually use
+this option, but you specify the same thing with <a
+href="#parameters">parameters.</a>
+
+<p>This option was new in Netpbm 10.32 (February 2006).
+
+<dt><b>-maxval=</b><i>maxval</i>
+
+<dd>This is the maxval of the output image.  By default, the maxval of
+the output is the same as that of the input.
+
+<p>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
+<kbd>-ungamma -bt709ramp</kbd> 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
+sample value for each input sample value, you would need an output
+maxval at least 3 times the input maxval.
+
+<p>This option was new in Netpbm 10.32 (February 2006).  Before that,
+you can achieve the same result by increasing the maxval of the input
+or decreasing the maxval of the output using <b>pnmdepth</b>.
+
+</DL>
+
+<H2 id="gamma">WHAT IS GAMMA?</H2>
+
+<P>A good explanation of gamma is in Charles Poynton's Gamma FAQ at
+<A HREF="http://www.poynton.com/GammaFAQ.html">
+http://www.poynton.com/GammaFAQ.html</A> and Color FAQ at <A
+HREF="http://www.poynton.com/ColorFAQ.html">
+http://www.poynton.com/ColorFAQ.html</A>.
+
+<P>In brief: The simplest way to code an image is by using sample
+values that are directly proportional to the radiance of the color
+components.  Radiance is a physical quantification based on the amount
+of power in the light; it is easily measurable in a laboratory, but
+does not take into account what the light looks like to a person.  It
+wastes the sample space because the human eye can't discern
+differences between low-radiance colors as well as it can between
+high-radiance colors.  So instead, we pass the radiance values
+through a transfer function that makes it so that changing a sample
+value by 1 causes the same level of perceived color change anywhere in
+the sample range.  We store those resulting values in the image file.
+That transfer function is called the gamma transfer function and the
+transformation is called gamma correcting.
+
+<p>The gamma-corrected value, proportional to subjective brightness,
+are known as the luminance of the pixel.
+
+<p>There is no precise objective way to measure luminance, since it's
+psychological.  Also, perception of brightness varies according to a
+variety of factors, including the surrounding in which an image is
+viewed.  Therefore, there is not just one gamma transfer function.
+
+<P>Virtually all image formats, either specified or de facto, use
+gamma-corrected values for their sample values.
+
+<P>What's really nice about gamma is that by coincidence, the inverse
+function that you have to do to convert the gamma-corrected values
+back to radiance is done automatically by CRTs.  You just apply a
+voltage to the CRT's electron gun that is proportional to the
+gamma-corrected sample value, and the radiance of the light that comes
+out of the screen is close to the radiance value you had before you
+applied the gamma transfer function!
+
+<P>And when you consider that computer video devices usually want you
+to store in video memory a value proportional to the signal voltage
+you want to go to the monitor, which the monitor turns into a
+proportional drive voltage on the electron gun, it is really
+convenient to work with gamma-corrected sample values.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1991 by Bill Davidson and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#parameters">PARAMETERS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#gamma">WHAT IS GAMMA?</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmhisteq.html b/pnmhisteq.html
new file mode 100644
index 00000000..458b3389
--- /dev/null
+++ b/pnmhisteq.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmhisteq User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmhisteq</H1>
+Updated: 10 September 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmhisteq - histogram equalize a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmhisteq</B>
+
+[<B>-gray</B>]
+
+[<B>-rmap</B> <I>pgmfile</I>]
+
+[<B>-wmap</B> <I>pgmfile</I>]
+
+[<B>-verbose</B>]
+
+[<I>pnmfile</I>]
+
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pnmhisteq</B> increases the contrast of a PGM or PPM image
+through the technique of &quot;histogram equalization.&quot;[1]
+
+<p><b>pnmhisteq</b> computes a histogram of the luminosity of the
+pixels in the image.  It then calculates a mapping between each
+luminosity and a new luminosity such that it spreads out intensity
+levels around histogram peaks and compresses them at troughs.  I.e.
+it moves pixels around in the histogram so as to make it flat.  It
+applies that mapping to the input image to produce the output image.
+The effect of this is that the image has equal numbers of pixels at each
+possible intensity level, which means it uses the available levels of
+intensity more efficiently and thereby has more visible detail.
+
+<P>Mathematically, the luminosity mapping is this: Assume the pixels
+are sorted by luminosity into <i>B</i> buckets numbered from 0 (lowest
+luminosity) to <i>B</i>-1.  <i>N[i]</I> is the number of pixels in
+bucket <I>i</I>.  <I>T</I> is the total number of pixels (sum of
+<i>N[i]</i> over all <i>i</i>).  <i>W</i> is the luminosity of white.
+
+<p><b>pnmhisteq</b> replaces an input pixel whose luminosity falls into
+bucket <i>j</i> with one whose luminosity is:
+
+<pre>
+
+      j
+     ---
+     \
+      &gt; (N[i] / T) * W
+     /
+     ---
+     i=0
+</pre>
+
+<p>Considering a grayscale image for simplicity, this means that
+pixels in the most luminous bucket become white.  Pixels in the 10th
+per centile of luminosity become 10% of white.
+
+
+<P>If you're processing a related set of images, for example frames of
+an animation, it's generally best to apply the same luminosity mapping
+to every frame, since otherwise you'll get distracting frame-to-frame
+changes in the brightness of objects.  <B>pnmhisteq</B>'s <B>-wmap</B>
+option allows you to save, as a PGM image, the luminosity map it
+computes from an image.  The <b>-rmap</b> option causes <b>pnmisteq</b>
+to use such an image as its luminosity map.
+
+<p>So you can run <b>pnmhisteq</b> with <b>-wmap</b> on a composite
+you created with <b>pnmcat</b> of the images you intend to process.
+Then, you can run <b>pnmisteq</b> with <b>-rmap</b> on each of the
+individual images, using the luminosity map you generated from the
+composite.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-gray</B>
+
+<DD>When processing a pixmap, only gray pixels (those with identical
+red, green, and blue values) are included in the histogram and
+modified in the output image.  This is a special purpose option
+intended for images where the actual data are gray scale, with color
+annotations you don't want modified.  Weather satellite images that
+show continent outlines in color are best processed using this option.
+The option has no effect when the input is a graymap.
+
+<DT><B>-rmap</B> <I>mapfile</I>
+
+<DD>Process the image using the luminosity map specified by the PGM
+file <I>mapfile</I>.
+
+The PGM image, usually created by an earlier run of <B>pnmhisteq</B>
+with the <B>-wmap</B> option, contains a single row with number of
+columns equal to the maxval (greatest intensity value) of the image
+plus one.  Each pixel in the image is transformed by looking up its
+luminosity in the corresponding column in the map file (column number
+= luminosity) and changing it to the value given by that column.
+
+<DT><B>-wmap</B> <I>mapfile</I>
+
+<DD>Creates a PGM file <I>mapfile</I>, containing the luminosity map
+computed from the histogram of the input image.  This map file can be
+read on subsequent runs of <B>pnmhisteq</B> with the <B>-rmap</B>
+option, allowing a group of images to be processed with an identical
+map.
+
+<DT><B>-verbose</B>
+
+<DD>Prints the histogram and luminosity map on Standard Error.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>Histogram equalization is effective for increasing the visible
+detail in scientific imagery and in some continuous-tone pictures.  It
+is often too drastic, however, for scanned halftone images, where it
+does an excellent job of making halftone artifacts apparent.  You
+might want to experiment with <B>pnmnorm</B> and <B>pnmgamma</B> for
+more subtle contrast enhancement.
+
+<P>The luminosity map file supplied by the <B>-rmap</B> option must
+have the same maxval as the input image.  This is always the case when
+the map file was created by the <B>-wmap</B> option of
+<B>pnmhisteq</B>.  If this restriction causes a problem, simply adjust
+the maxval of the map with <B>pamdepth</B> to agree with the input
+image.
+
+<P>If the input is a PBM file (on which histogram equalization is an
+identity operation), the only effect of passing the file through
+<B>pnmhisteq</B> will be the passage of time.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmnorm.html">pnmnorm</A></B>,
+
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+
+<B><A HREF="pnmgamma.html">pnmgamma</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<DL COMPACT>
+<DT>[1]
+
+<DD>Russ, John C.  The Image Processing Handbook.  Boca Raton: CRC
+Press, 1992.  Pages 105-110.
+
+</DL>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1995 by John Walker (<A
+HREF="mailto:kelvin@fourmilab.ch">kelvin@fourmilab.ch</A>).  WWW home
+page: <A HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A>
+
+<P>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided
+&quot;as is&quot; without express or implied warranty.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmhistmap.html b/pnmhistmap.html
new file mode 100644
index 00000000..45d70663
--- /dev/null
+++ b/pnmhistmap.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmhistmap User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmhistmap</H1>
+Updated: 25 October 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmhistmap - draw a histogram for a PGM or PPM file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmhistmap</B>
+
+[<B>-black</B>]
+
+[<B>-white</B>]
+
+[<B>-max</B> <I>N</I>]
+
+[<B>-verbose</B>]
+
+[<I>pnmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmhistmap</b> reads a PNM image as input and produces an image
+showing a histogram of the color (or gray) values in the input.  A PGM
+input results in a PBM output.  A PPM input results in a PPM output
+with three overlaid histograms: a red one for the red input, a green
+one for the green input, and a blue one for the blue input.
+
+<p>For example, from the following image produces the following histogram:
+
+<p><img src="testimg.png" alt="image">
+<img src="testimg_histbar.png" alt="histogram from image">
+
+<p>If the input is PBM, <b>pnmhistmap</B> produces an error message
+and no output image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<dl>
+
+<dt><b>-red</b>
+<dt><b>-green</b>
+<dt><b>-blue</b>
+
+<dd>Include the indicated color component in the output.  If you
+specify none of these, <b>pnmhistmap</b> include all three.
+
+<p>These options are meaningless if the input is PGM.
+
+<p>These options were new in Netpbm 10.26 (January 2005).  Before
+that, <b>pnmhistmap</b> always included all three color components.
+
+<dt><b>-dots</b>
+
+<dd>Plot the histogram as dots.  By default, <b>pnmhistmap</b> plots
+bars.
+
+<p>Example of dots: <img src="testimg_histdot.png" alt="-dots example">
+
+<p>This option was new in Netpbm 10.26 (January 2005).  Before that,
+<b>pnmhistmap</b> always plotted bars.
+
+<dt><b>-lval</b> <i>minpixval</i>
+<dt><b>-rval</b> <i>maxpixval</i>
+
+<dd>These options specify the range of intensity values to include.
+<b>pnmhistmap</b> ignores intensities less than <i>minpixval</i> and
+greater than <i>maxpixval</i>.  So the left side of the histogram
+corresponds to <i>minpixval</i> and the right side corresponds to
+<i>maxpixval</i>.
+
+<p>By default, <b>pnmhistmap</b> plots the entire possible range: zero
+to the maxval.
+
+<p>These options were new in Netpbm 10.26 (January 2005).  Before that,
+<b>pnmhistmap</b> always plotted from zero to the maxval.
+
+<dt>-height
+<dt>-width
+
+<dd>These options specify the dimensions, in pixels of the histogram image.
+
+<p>The default height is 200 pixels.
+
+<p>The default width is one pixel for each plotted intensity value (so it's 
+controlled by the maxval of the image and the <b>-lval</b> and <b>-rval</b>
+options).  The &quot;count buckets&quot; in the histogram are always
+one pixel wide.  If you specify a width less than the number of plotted
+intensity values, a bucket represents more than one intensity value.
+If you specify a width greater that the number of plotted intensity values,
+some buckets represent no color (the count is zero).
+
+<p>This option was new in Netpbm 10.26 (January 2005).  Before that,
+the dimensions were always what the default is today.
+
+</dl>
+
+
+<DL COMPACT>
+<DT><B>-black </B>
+
+<DD>Ignore the count of black pixels when scaling the histogram.
+
+<DT><B>-white</B>
+
+<DD>Ignore the count of white pixels when scaling the histogram.
+
+</DL>
+
+<P>The -black and -white options, which can be used separately or
+together, are useful for images with a large percentage of pixels
+whose value is zero or 255, which can cause the remaining histogram
+data to become unreadbaly small.  Note that, for pixmap inputs, these
+options apply to all colors; if, for example, the input has a large
+number of bright-red areas, you will probably want to use the -white
+option.
+
+<DL COMPACT>
+<DT><B>-max N</B>
+
+<DD>Force the scaling of the histogram to use N as the largest-count value.
+This is useful for inputs with a large percentage of single-color pixels
+which are not black or white.
+
+<DT><B>-verbose</B>
+
+<DD>Report the progress of making the histogram, including the largest-count
+value used to scale the output.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P><b>pnmhistmap</b> assumes maxval is always 255.  Images with a
+smaller maxval will only use the lower-value side of the histogram.
+You can overcome this either by piping the input through
+<b>pamdepth</b> or by cutting and scaling the lower-value side of the
+histogram.  Neither is a particularly elegant solution to the problem.
+
+<P>The program does not allow you to specify the output size.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmhist.html">pgmhist</A>,
+<A HREF="ppmhist.html">ppmhist</A>,
+<A HREF="pgm.html">pgm</A>,
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Wilson H. Bent. Jr. (<A HREF="mailto:whb@usc.edu">whb@usc.edu</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmindex.html b/pnmindex.html
new file mode 100644
index 00000000..5512ae4b
--- /dev/null
+++ b/pnmindex.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmindex User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmindex</H1>
+Updated: 9 January 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmindex - build a visual index of a bunch of PNM images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmindex</B>
+
+[<B>-size</B> <I>N</I>]
+
+[<B>-across</B> <I>N</I>]
+
+[<B>-colors</B> <I>N</I>]
+
+[<B>-black</B>]
+
+[<B>-title</B> <I>title</I>]
+
+[<B>-quant</B>|<B>-noquant</B>]
+
+<I>pnmfile</I>...
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pnmindex</B> creates an index image containing thumbnail (small)
+versions of a bunch of PNM files you supply.
+
+<P><B>pnmindex</B> labels each thumbnail and, optionally, contains a
+title.
+
+<P>If you just want to concatenate some images together, use
+<B>pnmcat</b> for that.  If you want to make a grid of the same image
+repeated over and over, that's <b>pnmtile</b>.
+
+<p>If you want to take apart the image you generated with <b>pnmindex</b>,
+use <b>pamdice</b> or <b>pamcut</b>.
+
+<A NAME="ixAAC"></A>
+<P>
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-size</B> <I>N</I>
+
+<DD>The size of each thumbnail.  The image is scaled to fit maximally
+inside a <I>N</I> x <I>N</I> pixel box without changing its aspect
+ratio.  Default is 100.
+
+<DT><B>-across</B> <I>N</I>
+
+<DD>The number of thumbnails in each row.  Default is 6.
+
+<DT><B>-colors</B> <I>N</I>
+
+<DD>The maximum number of colors allowed in the overall image.  If it
+would otherwise have more colors than these, <B>pnmindex</B> quantizes
+the result.  The default is 256.
+
+<P>However, this value is meaningless if you specify the
+<B>-noquant</B> option.
+
+<DT><B>-black</B>
+
+<DD>This controls the color of the padding between the images;
+normally it's white and the labels are black lettering on white
+background, but the <B>-black</B> option reverses this.
+
+<DT><B>-title </B><I>title</I>
+
+<DD>
+Specifies a title top place at the top of the image.
+Default is no title.
+
+<DT><B>-quant</B>
+
+<DD>Enables quanization (to the number of colors specified by
+<B>-colors</B>).  Quantization is on by default but you can disable
+it with <B>-noquant.</B>
+
+<DT><B>-noquant</B>
+
+<DD>See <B>-quant</B>.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamscale.html">pamscale</A></B>,
+
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+
+<B><A HREF="pbmtext.html">pbmtext</A></B>,
+
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+
+<B><A HREF="pamcut.html">pamcut</A></B>,
+
+<B><A HREF="pamdice.html">pamdice</A></B>,
+
+<B><A HREF="pnmtile.html">pnmtile</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1991 by Jef Poskanzer.
+
+<p><B>-title</B> and <B>-noquant</B> added 2000 by John Heidemann.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnminterp.html b/pnminterp.html
new file mode 100644
index 00000000..6c21fa30
--- /dev/null
+++ b/pnminterp.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pnminterp User Manual</TITLE>
+</HEAD><BODY>
+<H1>pnminterp</H1>
+Updated: December 2001
+<BR>
+<H2>NAME</H2>
+<B>pnminterp</B> - replaced by pamstretch
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pnminterp</b> was replaced in Netpbm 9.21 (December 2001) by
+<b><a href="pamstretch.html">pamstretch</a></b>.
+
+<P><B>pamstretch</b> is backward compatible with <b>pnminterp</b>, but
+also recognizes PAM input, including that with an alpha channel.
+
+</BODY>
+</HTML>
diff --git a/pnminvert.html b/pnminvert.html
new file mode 100644
index 00000000..ff858dfc
--- /dev/null
+++ b/pnminvert.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnminvert User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnminvert</H1>
+Updated: 08 August 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnminvert - invert a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnminvert</B>
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnminvert</b> reads a PNM image as input, inverts it black for
+white, and produces a PNM image as output.
+
+<p>If the image is grayscale, <b>pnminvert</b> replaces a pixel with
+one of complementary brightness, i.e. if the original pixel has gamma-adjusted
+gray value G, the output pixel has gray value maxval - G.
+
+<p>If the image is color, <b>pnminvert</b> inverts each individual RGB
+component the same as for a grayscale image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmmargin.html b/pnmmargin.html
new file mode 100644
index 00000000..f9f3c223
--- /dev/null
+++ b/pnmmargin.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmmargin User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmmargin</H1>
+Updated: 01 June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmmargin - add a border to a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmmargin</B>
+
+[<B>-white</B>|<B>-black</B>|<B>-color</B>
+
+<I>colorspec</I>]
+
+<I>size</I>
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmmargin</b> adds a border around a PNM image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>You can specify the border color with the <B>-white</B>,
+<B>-black</B>, and <B>-color</B> options.  If no color is specified,
+the program makes a guess.
+
+<P>To remove a border of a specified size from an image, use
+<B>pamcut</B>.  <b>pnmcrop</b> also removes borders, but determines by itself
+what is border and what is subject.
+
+<P>For lower level control, including to add different size borders to
+different sides of the image, look at <b>pnmcat</b>.
+
+<P>If all you're trying to do is get the image up to a certain required
+size, <b>pamcut</b> may be what you want.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamcut.html">pamcut</A>
+<A HREF="pnmcrop.html">pnmcrop</A>
+<A HREF="pnmcat.html">pnmcat</A>
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmmontage.html b/pnmmontage.html
new file mode 100644
index 00000000..7273cb93
--- /dev/null
+++ b/pnmmontage.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmmontage User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmmontage</H1>
+Updated: 31 December 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmmontage - create a montage of PNM images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmmontage</B>
+
+[<B>-header=</B><I>headerfile</I>]
+
+[<B>-quality=</B><I>n</I>]
+
+[<B>-prefix=</B><I>prefix</I>]
+
+[<B>-0</B>|<B>-1</B>|<B>-2</B>|<B>...</B>|<B>-9</B>]
+
+<i>pnmfile</I>...
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmmontage</b> packs images of differing sizes into a
+minimum-area composite image, optionally producing a C header file
+with the locations of the subimages within the composite image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-header</B>
+
+<DD>Tells <B>pnmmontage</B> to write a C header file of the locations
+of the original images within the packed image.  Each original image
+generates four #defines within the packed file: xxxX, xxxY, xxxSZX,
+and xxxSZY, where xxx is the name of the file, converted to all
+uppercase.  The ouput also includes #defines OVERALLX and OVERALLY, which
+specifies the total size of the montage image.
+
+<DT><B>-prefix</B>
+
+<DD>Tells <B>pnmmontage</B> to use the specified prefix on all of the
+#defines it generates.
+
+<DT><B>-quality</B>
+
+<DD>Before attempting to place the subimages, <B>pnmmontage</B> will
+calculate a minimum possible area for the montage; this is either the
+total of the areas of all the subimages, or the width of the widest
+subimage times the height of the tallest subimage, whichever is
+greater.  <B>pnmmontage</B> then initiates a problem-space search to
+find the best packing; if it finds a solution that is (at least) as
+good as the minimum area times the quality as a percent, it will break
+out of the search.  Thus, <B>-q 100</B> will find the best possible
+solution; however, it may take a very long time to do so.  The default
+is <B>-q 200.</B>
+
+<DT><B>-0</b>, <b>-1</b>, ... <b>-9</B>
+
+<DD>These options control the quality at a higher level than
+<B>-q</B>; <B>-0</B> is the worst quality (literally pick the first
+solution found), while <B>-9</B> is the best quality (perform an
+exhaustive search of problem space for the absolute best packing).
+The higher the number, the slower the computation.  The default is
+<B>-5</B>.
+
+</DL>
+<A NAME="lbAF">&nbsp;</A>
+<H2>NOTES</H2>
+
+<p>Using <B>-9</B> is excessively slow on all but the smallest image
+sets.  If the anymaps differ in maxvals, then pnmmontage will pick the
+smallest maxval which is evenly divisible by each of the maxvals of
+the original images.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+
+<B><A HREF="pnmindex.html">pnmindex</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<B><A HREF="pam.html">pam</A></B>,
+
+<B><A HREF="pbm.html">pbm</A></B>,
+
+<B><A HREF="pgm.html">pgm</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2000 by Ben Olmstead.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">NOTES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmnlfilt.html b/pnmnlfilt.html
new file mode 100644
index 00000000..401472c0
--- /dev/null
+++ b/pnmnlfilt.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmnlfilt User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmnlfilt</H1>
+Updated: 24 October 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmnlfilt - non-linear filters: smooth, alpha trim mean, optimal
+estimation smoothing, edge enhancement.
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmnlfilt</B>
+<I>alpha</I>
+<I>radius</I>
+[<I>pnmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>pnmnlfilt</B> produces an output image where the pixels are a
+summary of multiple pixels near the corresponding location in an input
+image.
+
+<P>This program works on multi-image streams.
+
+<P>This is something of a swiss army knife filter.  It has 3 distinct
+operating modes.  In all of the modes <b>pnmnlfilt</b> examines each
+pixel in the image and processes it according to the values of it and
+its surrounding pixels.  Rather than using a square block of
+surrounding pixels (e.g. the subject pixel and its 8 immediate
+neighbors, in a 3x3 square), <b>pnmnlfilt</b> uses 7 hexagonal areas.
+You choose the size of the hexagons with the radius parameter.  A
+radius value of 1/3 means that the 7 hexagons essentially fit into the
+subject pixel (ie.  there will be no filtering effect).  A radius
+value of 1.0 means that the 7 hexagons essentially cover the 3x3
+immediate neighbor square.
+
+<p>Your choice of &quot;alpha&quot; parameter selects among the three
+modes.
+
+<H3 id="alphatrimmedmean">
+Alpha trimmed mean filter (0.0 &lt;= alpha &lt;= 0.5)</H3>
+
+<P>The value of the center pixel will be replaced by the mean of
+the 7 hexagon values, but the 7 values are sorted by size and the top
+and bottom alpha portion of the 7 are excluded from the mean.  This
+implies that an alpha value of 0.0 gives the same sort of output as a
+normal convolution (ie. averaging or smoothing filter), where radius
+will determine the &quot;strength&quot; of the filter. A good value to
+start from for subtle filtering is alpha = 0.0, radius = 0.55 For a
+more blatant effect, try alpha 0.0 and radius 1.0
+
+<P>An alpha value of 0.5 will cause the median value of the 7 hexagons
+to be used to replace the center pixel value. This sort of filter is
+good for eliminating &quot;pop&quot; or single pixel noise from an
+image without spreading the noise out or smudging features on the
+image. Judicious use of the radius parameter will fine tune the
+filtering. Intermediate values of alpha give effects somewhere between
+smoothing and &quot;pop&quot; noise reduction. For subtle filtering
+try starting with values of alpha = 0.4, radius = 0.6 For a more
+blatant effect try alpha = 0.5, radius = 1.0
+
+<H3 id="optimalestsmooth">
+Optimal estimation smoothing. (1.0 &lt;= alpha &lt;= 2.0)</H3>
+
+<P>This type of filter applies a smoothing filter adaptively over the
+image.  For each pixel the variance of the surrounding hexagon values
+is calculated, and the amount of smoothing is made inversely
+proportional to it. The idea is that if the variance is small then it
+is due to noise in the image, while if the variance is large, it is
+because of &quot;wanted&quot; image features. As usual the radius
+parameter controls the effective radius, but it probably advisable to
+leave the radius between 0.8 and 1.0 for the variance calculation to
+be meaningful.  The alpha parameter sets the noise threshold, over
+which less smoothing will be done.  This means that small values of
+alpha will give the most subtle filtering effect, while large values
+will tend to smooth all parts of the image. You could start with
+values like alpha = 1.2, radius = 1.0 and try increasing or decreasing
+the alpha parameter to get the desired effect. This type of filter is
+best for filtering out dithering noise in both bitmap and color
+images.
+
+<H3 id="edgeenhance">Edge enhancement. (-0.1 &gt;= alpha &gt;= -0.9)</H3>
+
+<P>This is the opposite type of filter to the smoothing filter. It
+enhances edges. The alpha parameter controls the amount of edge
+enhancement, from subtle (-0.1) to blatant (-0.9). The radius
+parameter controls the effective radius as usual, but useful values
+are between 0.5 and 0.9. Try starting with values of alpha = 0.3,
+radius = 0.8
+
+<H3 id="combination">Combination use.</H3>
+
+<P>The various modes of <B>pnmnlfilt</B> can be used one after the
+other to get the desired result. For instance to turn a monochrome
+dithered image into a grayscale image you could try one or two passes
+of the smoothing filter, followed by a pass of the optimal estimation
+filter, then some subtle edge enhancement. Note that using edge
+enhancement is only likely to be useful after one of the non-linear
+filters (alpha trimmed mean or optimal estimation filter), as edge
+enhancement is the direct opposite of smoothing.
+
+<P>For reducing color quantization noise in images (ie. turning .gif
+files back into 24 bit files) you could try a pass of the optimal
+estimation filter (alpha 1.2, radius 1.0), a pass of the median filter
+(alpha 0.5, radius 0.55), and possibly a pass of the edge enhancement
+filter.  Several passes of the optimal estimation filter with
+declining alpha values are more effective than a single pass with a
+large alpha value.  As usual, there is a tradeoff between filtering
+effectiveness and loosing detail. Experimentation is encouraged.
+
+<H2 id="references">References:</H2>
+
+<P>The alpha-trimmed mean filter is based on the description in IEEE
+CG&amp;A May 1990 Page 23 by Mark E. Lee and Richard A. Redner, and
+has been enhanced to allow continuous alpha adjustment.
+
+<P>The optimal estimation filter is taken from an article
+&quot;Converting Dithered Images Back to Gray Scale&quot; by Allen
+Stenger, Dr Dobb's Journal, November 1992, and this article references
+&quot;Digital Image Enhancement and Noise Filtering by Use of Local
+Statistics&quot;, Jong-Sen Lee, IEEE Transactions on Pattern Analysis
+and Machine Intelligence, March 1980.
+
+<P>The edge enhancement details are from <A
+HREF="pgmenhance.html">pgmenhance</A>, which is taken from Philip
+R. Thompson's &quot;xim&quot; program, which in turn took it from
+section 6 of &quot;Digital Halftones by Dot Diffusion&quot;,
+D. E. Knuth, ACM Transaction on Graphics Vol. 6, No. 4, October 1987,
+which in turn got it from two 1976 papers by J. F. Jarvis et. al.
+
+<h2 id="parameters"></h2>
+
+<p>The parameters are:
+
+<dl>
+<dt><i>alpha</i>
+<dd>The alpha value (described above), in decimal.  May be fractional.
+
+<dt><i>radius</i>
+<dd>The radius (described above), in decimal.  May be fractional.
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pgmenhance.html">pgmenhance</A>,
+<A HREF="pnmconvol.html">pnmconvol</A>,
+<A HREF="pnm.html">pnm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Graeme W. Gill <A HREF="mailto:graeme@labtam.oz.au">graeme@labtam.oz.au</A>
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<ul>
+  <LI><A HREF="#alphatrimmedmean">
+      Alpha trimmed mean filter.(0.0 &lt;= alpha &lt;= 0.5)</A>
+  <LI><A HREF="#optimalestsmooth">
+       Optimal estimation smoothing. (1.0 &lt;= alpha &lt;= 2.0)</A>
+  <LI><A HREF="#edgeenhance">
+      Edge enhancement. (-0.1 &gt;= alpha &gt;= -0.9)</A>
+  <LI><A HREF="#combination">Combination use.</A>
+  </ul>
+<LI><A HREF="#references">References:</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmnoraw.html b/pnmnoraw.html
new file mode 100644
index 00000000..06bbbced
--- /dev/null
+++ b/pnmnoraw.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pnmnoraw User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmnoraw</H1>
+Updated: March 2000
+<BR>
+<H2>NAME</H2>
+<B>pnmnoraw</B> - replaced by pnmtoplainpnm
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pnmnoraw</b> was replaced in Netpbm 8.2 (March 2000) by <b><a
+href="pnmtoplainpnm.html">pnmtoplainpnm</a></b>, which was obsoleted by
+<b>pnmtopnm</b> in Netpbm 10.23 (July 2004).
+
+<P><B>pnmtoplainpnm</b> was actually the same program; it was just renamed
+to make it clear that is just a format converter.
+
+<P><B>pnmtopnm</b> is more general, in that it can go both directions.
+<b>pnmtopnm -plain</b> is the same as <b>pnmnoraw</b>.
+
+</BODY>
+</HTML>
diff --git a/pnmnorm.html b/pnmnorm.html
new file mode 100644
index 00000000..6ade6a3f
--- /dev/null
+++ b/pnmnorm.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmnorm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmnorm</H1>
+Updated: 6 January 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmnorm - normalize the contrast in a Netbpm image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmnorm</B>
+
+[<B>-bpercent=</B><I>N</I> | <B>-bvalue=</B><I>N</I>]
+
+[<B>-wpercent=</B><I>N</I> | <B>-wvalue=</B><I>N</I>]
+
+[<b>-maxexpand</b>
+
+[<B>-keephues</B>]
+
+[<B>-luminosity</B> | <B>-colorvalue</B> | <B>-saturation</B>]
+
+[<I>ppmfile</I>]
+
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or an equals sign between an option name
+and its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmnorm</b> reads a PNM image (PBM, PGM, or PPM).  It normalizes
+the contrast by forcing the brightest pixels to white, the darkest
+pixels to black, and linearly rescaling the ones in between; and
+produces the same kind of file as output.  This is pretty useless for
+a PBM image.
+
+<P>The program first determines a mapping of old brightness to new
+brightness.  For each possible brightness of a pixel, the program
+determines a corresponding brightness for the output image.
+
+<P>Then for each pixel in the image, the program computes a color which has
+the desired output brightness and puts that in the output.  With a color
+image, it is not always possible to compute such a color and retain any
+semblance of the original hue, so the brightest and dimmest pixels may only
+approximate the desired brightness.
+
+<p>For a PPM image, you have a choice of three different ways to
+define brightness:
+<ol>
+<li>luminosity
+<li>color value
+<li>saturation
+</ol>
+
+In the case of saturation, &quot;brightness&quot; is pretty much a
+misnomer, but you can use the brightness analogy to see what it does.
+In the analogy, bright means saturated and dark means unsaturated.
+
+<P>Note that all of these are different from separately normalizing
+the individual color components.
+
+<p>An alternative way to spread out the brightnesses in an image is
+<b>pnmhisteq</b>.  <b>pnmhisteq</b> stretches the brightest pixels to
+white and the darkest pixels to black, but rather than linearly
+adjusting the ones in between, it adjusts them so that there are an
+equal number of pixels of each brightness throughout the range.  This
+gives you more contrast than <b>pnmnorm</b> does, but can considerably
+change the picture in exchange.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<P>By default, the darkest 2 percent of all pixels are mapped to
+black, and the brightest 1 percent are mapped to white.  You can
+override these percentages by using the <B>-bpercent</B> and
+<B>-wpercent</B> options, or you can specify the exact pixel values to
+be mapped by using the <B>-bvalue</B> and <B>-wvalue</B> options.
+You can get appropriate numbers for the options from
+<b>ppmhist</b>.  If you just want to enhance the contrast, then
+choose values at elbows in the histogram; e.g. if value 29 represents
+3% of the image but value 30 represents 20%, choose 30 for
+<I>bvalue</I>.  If you want to brighten the image, then set
+<I>bvalue</I> to 0 and just fiddle with <I>wvalue</I>; similarly, to
+darken the image, set <I>wvalue</I> to maxval and play with
+<I>bvalue</I>.
+
+<p>If you specify both <b>-bvalue</b> and <b>-bpercent</b>, <b>pnmnorm</b>
+uses the one that produces the least change.  The same goes for
+<b>-wvalue</b> and <b>-wpercent</b>.
+
+<p>If you want to maximize the change instead of minimizing it, just
+cascade two runs of <b>pnmnorm</b>, specifying values for the first
+and percentages for the second.
+
+<p>This is further constrained by the <b>-maxexpand</b> option.
+Sometimes, too much contrast is a bad thing.  If your intensities are
+all concentrated in the middle, <b>-bpercent=2</b> and
+<b>-wpercent=1</b> might mean that an intensity of 60 gets stretched
+up to 100 and and intensity of 40 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.
+
+<p>So that you can put a limit on the amount of expansion without
+having to examine the image first, there is the <b>-maxexpand</b>
+option.  It specifies the maximum expansion you will tolerate, as an
+additional per centage.  In the example above, you could say
+<b>-maxexpand=50</b> to say you want the range to expand by at most
+50%, regardless of your other options.  <b>pnmnorm</b> figures out
+what intensity to stretch to full intensity and what intensity to
+stretch to zero intensity as described above, and then raises the
+former and lowers the latter as needed to limit the expansion to the
+amount you specified.
+
+<p>When <b>pnmnorm</b> limits the expansion due to <b>-maxexpand</b>,
+it tells you about it with a message like this:
+<pre>
+<tt>
+    limiting expansion of 150% to 50%
+</tt>
+</pre>
+
+<p>In any case, <b>pnmnorm</b> tells you exactly what expansion it's
+doing, like this:
+
+<pre>
+<tt>
+    remapping 25..75 to 0..100
+</tt>
+</pre>
+
+<p>Before Netpbm 10.26 (December 2004), it was not valid to specify both
+<b>-bvalue</b> and <b>-bpercent</b> or <b>-wvalue</b> and <b>-wpercent</b>.
+
+<p><b>-maxexpand</b> was new in Netpbm 10.32 (February 2006).
+
+<P>The <B>-keephues</B> option says to keep each pixel the same hue as
+it is in the input; just adjust its brightness.  You normally want this;
+the only reason it is not the default behavior is backward compatibility
+with a design mistake.
+
+<p>By default, <B>pnmnorm</B> normalizes contrast in each component
+independently (except that the meaning of the <B>-wpercent</B> and
+<B>-bpercent</B> options are based on the overall brightnesses of the
+colors, not each component taken separately).  So if you have a color
+which is intensely red but dimly green, <B>pnmnorm</B> would make the
+red more intense and the green less intense, so you end up with a
+different hue than you started with.
+
+<P>If you specify <B>-keephues</B>, <B>pnmnorm</B> would likely leave
+this pixel alone, since its overall brightness is medium.
+
+<P><B>-keephues</B> can cause clipping, because a certain color may be
+below a target intensity while one of its components is saturated.
+Where that's the case, <B>pnmnorm</B> uses the maximum representable
+intensity for the saturated component and the pixel ends up with less
+overall intensity, and a different hue, than it is supposed to have.
+
+<P>This option is meaningless on grayscale images.
+
+<p>When you <em>don't</em> specify <b>-keephues</b>, the
+<b>-luminosity</b>, <b>-colorvalue</b>, and <b>-saturation</b> options
+affect the transfer function (which is the same for all three RGB
+components), but are meaningless when it comes to applying the
+transfer function (since it is applied to each individual RGB
+component).
+
+<P>Before Netpbm 9.25 (March 2002), there was no <B>-keephues</B> option.
+
+<p><b>-luminosity</b>, <b>-colorvalue</b>, and <b>-saturation</b> determine
+what property of the pixels <b>pnmnorm</b> normalizes.  I.e., what kind of
+brightness.  You cannot specify more than one of these.
+
+<P>The <B>-luminosity</B> option says to use the luminosity (i.e. the
+&quot;Y&quot; in the YUV or YCbCr color space) as the pixel's brightness.  The
+luminosity is a measure of how bright a human eye would find the color,
+taking into account the fact that the human eye is more sensitive to some
+RGB components than others.
+
+<p>This option is default.
+
+<P>This option is meaningless on grayscale images.
+
+<P>Before Netpbm 10.28 (August 2005), there was no <B>-luminosity</B> option,
+but its meaning was still the default.
+
+<P>Before Netpbm 10.28 (August 2005), there was no <B>-colorvalue</B> option.
+
+<P>The <B>-colorvalue</B> option says to use the color value (i.e. the
+&quot;V&quot; in the HSV color space) as the pixel's brightness.  The
+color value is the gamma-adjusted intensity of the most intense RGB
+component.
+
+<P>This option is meaningless on grayscale images.
+
+<P>Before Netpbm 10.28 (August 2005), there was no <B>-colorvalue</B> option.
+
+<p>The <b>-saturation</b> option says to use the saturation (i.e. the
+&quot;S&quot; in the HSV color space) as the pixel's brightness.  The
+saturation is the ratio of the intensity of the most intense RGB
+component to the difference between the intensities of the most and least
+intense RGB component (all intensities gamma-adjusted).
+
+<p>In this case, &quot;brightness&quot; is more of a metaphor than anything.
+&quot;bright&quot; means saturated and &quot;dark&quot; means unsaturated.
+
+<p>This option is meaningless on grayscale images.
+
+<P>Before Netpbm 10.28 (August 2005), there was no <B>-colorvalue</B> option.
+
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnmhisteq.html">pnmhisteq</A></B>,
+<B><A HREF="ppmhist.html">ppmhist</A></B>,
+<B><A HREF="pgmhist.html">pgmhist</A></B>,
+<B><A HREF="pnmgamma.html">pnmgamma</A></B>,
+<B><A HREF="ppmbrighten.html">ppmbrighten</A></B>,
+<B><A HREF="ppmdim.html">ppmdim</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmpad.html b/pnmpad.html
new file mode 100644
index 00000000..3b5f556f
--- /dev/null
+++ b/pnmpad.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmpad User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmpad</H1>
+Updated: 26 January 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmpad - add borders to a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmpad </B>
+[<B>-verbose</B>]
+[<B>-white</B>|<B>-black</B>]
+<BR>
+[<B>-width=</B><I>pixels</I>]
+[<B>-halign=</B><I>ratio</I>]
+<BR>
+[<B>-left=</B><I>pixels</I>]
+[<B>-right=</B><I>pixels</I>]
+<BR>
+[<B>-height=</B><I>pixels</I>]
+[<B>-valign=</B><I>ratio</I>]
+<BR>
+[<B>-top=</B><I>pixels</I>]
+[<B>-bottom=</B><I>pixels</I>]
+<BR>
+[<I>pnmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and
+its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pnmpad</b> reads a PNM image as input and outputs a PNM image
+that is the input image plus black or white borders of the sizes
+specified.
+
+<P>If you just need to convert an image to a certain size regardless
+of the original dimensions, <B>pamcut</B> with the <B>-pad</B> option
+may be a better choice.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL>
+<DT><B>-verbose</B>
+
+<DD>
+Verbose output.
+
+<dt><B>-white</B>
+<dt><B>-black</B>
+
+<dd>Set pad color.  Default is <b>-black</b>.
+
+
+<dt><B>-left=</B><I>pixels</I>
+<dt><B>-right=</B><I>pixels</I>
+<dt><B>-width=</B><I>width</I>
+<dt><B>-halign=</B><I>ratio</I>
+
+<dd>Specify amount of left and right padding in pixels.
+
+<p><b>-left</b> and <b>-right</b> directly specify the amount of
+padding added to the left and right sides, respectively, of the image.
+
+<p>Alternatively, you can specify <b>-width</b> and just one of
+<b>-left</b> and <b>-right</b> and <b>pnmpad</b> calculates the required
+padding on the other side based on the width of the input image.  If
+the <b>-width</b> value is less than the width of the image plus the
+specified padding, the <b>-width</b> values is ignored.
+
+<p>If you specify all three of <b>-width</b>, <b>-left</b>, and
+<b>-right</b>, you must ensure that the <b>-left</b> and <b>-right</b>
+padding are sufficient to make the image at least as wide as
+<b>-width</b> specifies.  Otherwise, <b>pnmpad</b> fails.
+
+<p>When you specify <b>-width</b> without <b>-left</b> or
+<b>-right</b>, and <b>-width</b> is larger than the input image,
+<b>pnmpad</b> chooses left and right padding amounts in a certain
+ratio.  That ratio defaults to half, but you can set it to anything
+(from 0 to 1) with the <b>-halign</b> option.  If the input image is
+already at least as wide as <b>-width</b> specifies, <b>pnmpad</b>
+adds no padding.
+
+<p>Common values for <b>-halign</b> are:
+<DL COMPACT>
+<DT><B>0.0</B> <DD>left aligned
+
+<DT><B>0.5</B> <DD>center aligned (default)
+
+<DT><B>1.0</B> <DD>right aligned
+</DL>
+
+<p>Before Netpbm 10.23 (July 2004), <b>pnmpad</b> did not allow the
+<b>-left</b> or <b>-right</b> option together with <b>-width</b>.
+
+<dt><B>-top=</B><I>pixels</I>
+<dt><B>-bottom=</B><I>pixels</I>
+<dt><B>-height=</B><I>height</I>
+<dt><B>-valign=</B><I>ratio</I>
+
+<dd>
+These options determine the vertical padding.  They are analogous
+to the horizontal padding options above.
+
+</dl>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p>Before February 2002, <B>pnmpad</B> had a different option syntax
+which was less expressive and not like conventional Netpbm programs.
+That syntax is still understood by <B>pnmpad</B> for backward
+compatibility, but not documented or supported for future use.
+
+<A NAME="lbAG">&nbsp;</A> 
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbmmake.html">pbmmake</A></B>,
+<B><A HREF="pnmpaste.html">pnmpaste</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnmcrop.html">pnmcrop</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="pbm.html">pbm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 2002 by Martin van Beilen
+
+<p>Copyright (C) 1990 by Angus Duggan
+
+<p>Copyright (C) 1989 by Jef Poskanzer.
+
+<P>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.  This software is provided &quot;as is&quot;
+without express or implied warranty.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">HISTORY</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmpaste.html b/pnmpaste.html
new file mode 100644
index 00000000..62ffd9f7
--- /dev/null
+++ b/pnmpaste.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmpaste User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmpaste</H1>
+Updated: 21 February 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmpaste - paste a rectangle into a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmpaste</B>
+
+[<B>-replace</B>|<B>-or</B>|<B>-and</B>|<B>-xor</B>]
+
+<I>frompnmfile x y</I>
+
+[<I>intopnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmpaste</b> reads two PNM images as input and inserts the first
+image (the "pasted image") into the second (the "base image") at the
+specified location, and produces a PNM image the same size and type as
+the base image as output.  If you don't specify the second file,
+<b>pnmpaste</b> reads the base image from Standard Input.
+
+<p><i>x</i> and <i>y</i> specify the location in the base image at
+which to put the top left corner of the pasted image, <i>x</i> giving
+the horizontal position and <i>x</i> giving the vertical position.  A
+nonnegative value indicates the number of pixels right of the right
+edge or below the top edge of the base image, while a negative value
+indicates the number of pixels right of the right edge or below the
+bottom edge (so x = -5 means 5 pixels left of the right edge).
+
+<P>If any part of the pasted image does not fit within the base image,
+<b>pnmpaste</b> fails.
+
+<p>This tool is most useful in combination with <I>pamcut</I>.  For
+instance, if you want to edit a small segment of a large image, and
+your image editor cannot edit the large image, you can cut out the
+segment you are interested in, edit it, and then paste it back in.
+
+<P>Another useful companion tool is <B>pbmmask</B>.
+
+<P><B>pamcomp</B> is a more general tool, except that it lacks the
+&quot;or,&quot; &quot;and,&quot; and &quot;xor&quot; functions.
+<B>pamcomp</B> allows you to specify an alpha mask in order to have
+only part of the inserted image get inserted.  So the inserted pixels
+need not be a rectangle.  You can also have the inserted image be
+translucent, so the resulting image is a mixture of the inserted image
+and the base image.
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The option specifies the operation to use when doing the
+paste.  The default is <B>-replace</B>.  The other logical operations
+are only allowed if both input images are PBM images.  These operations
+act as if white is TRUE and black is FALSE.
+
+<P>You can abbreviate all options to their shortest unique prefix.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnminvert.html">pnminvert</A></B>,
+<B><A HREF="pnmarith.html">pnmarith</A></B>,
+<B><A HREF="pbmmask.html">pbmmask</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmpsnr.html b/pnmpsnr.html
new file mode 100644
index 00000000..296a8dca
--- /dev/null
+++ b/pnmpsnr.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmpsnr User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmpsnr</H1>
+Updated: 04 March 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmpsnr - compute the difference between two images (the PSNR)
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmpsnr</B>
+
+[<I>pnmfile1</I>]
+
+[<I>pnmfile2</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmpsnr</b> reads two PBM, PGM, or PPM files, or PAM
+equivalents, as input and prints the peak signal-to-noise ratio (PSNR)
+difference between the two images.  This metric is typically used in
+image compression papers to rate the distortion between original and
+decoded image.
+
+<P>If the inputs are PBM or PGM, <B>pnmpsnr</B> prints the PSNR of the
+luminance only.  Otherwise, it prints the separate PSNRs of the
+luminance, and chrominance (Cb and Cr) components of the colors.
+
+<P>The PSNR of a given component is the ratio of the mean square
+difference of the component for the two images to the maximum mean
+square difference that can exist between any two images.  It is
+expressed as a decibel value.
+
+<P>The mean square difference of a component for two images is the
+mean square difference of the component value, comparing each pixel
+with the pixel in the same position of the other image.  For the
+purposes of this computation, components are normalized to the scale
+[0..1].
+
+<P>The maximum mean square difference is identically 1.
+
+<P>So the higher the PSNR, the closer the images are.  A luminance
+PSNR of 20 means the mean square difference of the luminances of the
+pixels is 100 times less than the maximum possible difference,
+i.e. 0.01.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmquant.html b/pnmquant.html
new file mode 100644
index 00000000..cf97e37a
--- /dev/null
+++ b/pnmquant.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmquant User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmquant</H1>
+Updated: 22 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pnmquant - quantize the colors in a Netpbm image to a smaller set
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmquant</B>
+[<B>-center</B>|<B>-meancolor</B>|<B>-meanpixel</B>]
+[<B>-floyd</B>|<B>-fs</B>]
+[<B>-nofloyd</B>|<B>-nofs</B>]
+[<B>-spreadbrightness</B>|<B>-spreadluminosity</B>]
+<I>ncolors</I>
+[<I>pnmfile</I>]
+
+<P>
+All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or equals signs between an option name and its
+value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmquant</b> reads a PNM image as input.  It chooses <I>ncolors</I>
+colors to best represent the image, maps the existing colors
+to the new ones, and writes a PNM image as output.
+
+<P>This program is simply a combination of <B>pnmcolormap</B> and
+<B>pnmremap</B>, where the colors of the input are remapped using a
+color map which is generated from the colors in that same input.  The
+options have the same meaning as in those programs.  See their
+documentation to understand <B>pnmquant</B>.
+
+<P>It is much faster to call <B>pnmcolormap</B> and <B>pnmremap</B>
+directly than to run <B>pnmquant</B>.  You save the overhead of the
+Perl interpreter and creating two extra processes.  <B>pnmquant</B> is
+just a convenience.
+
+<p><b>pnmquant</b> did not exist before Netpbm 9.21 (January 2001).
+Before that, <b>ppmquant</b> did the same thing, but only on PPM
+images.  <b>ppmquant</b> continues to exist, but is only a front end
+(for name compatibility) to <b>pnmquant</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>,
+<B><A HREF="pnmremap.html">pnmremap</A></B>,
+<B><A HREF="ppmquantall.html">ppmquantall</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+<B><A HREF="ppmquant.html">ppmquant</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmremap.html b/pnmremap.html
new file mode 100644
index 00000000..6343f43c
--- /dev/null
+++ b/pnmremap.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmremap User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmremap</H1>
+Updated: 01 January 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmremap - replace colors in a PNM image with colors from another set
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmremap</B>
+
+<B>-mapfile=</B><I>palettefile</I>
+
+[<B>-floyd</B>|<B>-fs</B>|<B>-nfloyd</B>|<B>-nofs</B>]
+
+[<B>-firstisdefault</B>]
+
+[<B>-verbose</B>]
+
+[<B>-missingcolor=</B><I>color</I>]
+
+[<I>pnmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or an equals sign between an option name
+and its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>pnmremap</B> replaces the colors in an input image with those
+from a palette you specify.  Where colors in the input are present in
+the palette, they just stay the same in the output.  But where the
+input contains a color that is not in the palette, <b>pnmremap</b>
+gives you these choices:
+<ul>
+
+<li>Choose the closest color from the palette.
+
+<li>Choose the first color from the palette.
+
+<li>Use a color specified by a command option (<b>-missing</b>).
+
+<li>Dither.  This means rather than mapping pixel by pixel,
+<b>pnmremap</b> uses colors from the palette to try to make
+multi-pixel regions of the output have the same average color as the
+input (for another kind of dithering, see <b>ppmdither</b>).
+
+</ul>
+
+<P>Two reasons to use this program are: 1) you want to reduce the
+number of colors in the input image; and 2) you need to feed the image
+to something that can handle only certain colors.
+
+<P>To reduce colors, you can generate the palette with
+<B>pnmcolormap</B>.
+
+<p>By default, <b>pnmremap</b> maps an input color that is not in the
+palette to the closest color that <em>is</em> in the palette.  Closest
+means with the smallest cartesian distance in the red, green, blue
+brightness space (smallest sum of the squares of the differences in
+red, green, and blue ITU-R Recommedation BT.709 gamma-adjusted
+intensities).
+
+<p>You can instead specify a single default color for <b>pnmremap</b>
+to use for any color in the input image that is not in the palette.
+Use the <b>-missing</b> option for this.
+
+<p>You can also specify that the first color in the palette image
+is the default.  Use the <b>-firstisdefault</b> option for this.
+
+<p>The palette is simply a PNM image.  The colors of the pixels in the
+image are the colors in the palette.  Where the pixels appear in the
+image, and the dimensions of the image, are irrelevant.  Multiple
+pixels of the same color are fine.  However, a palette image is
+typically a single row with one pixel per color.
+
+<p>If you specify <b>-missing</b>, the color you so specify is in
+the palette in addition to whatever is in the palette image.
+
+<p>For historical reasons, Netpbm sometimes calls the palette a
+&quot;colormap.&quot; But it doesn't really map anything.
+<b>pnmremap</b> creates its own map, based on the palette, to map
+colors from the input image to output colors.
+
+<h3 id="mismatch">Palette/Image Type Mismatch</h3>
+
+<p>In the simple case, the palette image is of the same depth (number
+of planes, i.e. number of components in each tuple (pixel)) as the
+input image and <b>pnmremap</b> just does a straightforward search of
+the palette for each input tuple (pixel).  In fact, <b>pnmremap</b>
+doesn't even care if the image is a visual image.
+
+<p>But what about when the depths differ?  In that case,
+<b>pnmremap</b> converts the input image (in its own memory) to match
+the palette and then proceeds as above.
+
+<p>There are only two such cases in which <b>pnmremap</b> knows how to
+do the conversion:  when one of them is tuple type RGB, depth 3, and the
+other is tuple type GRAYSCALE or BLACKANDWHITE, depth 1; and vice
+versa.
+
+<p>In any other case, <b>pnmremap</b> issues and error message and fails.
+
+<p>Note that as long as your input and palette images are PNM, they'll
+always fall into one of the cases <b>pnmremap</b> can handle.  There's an
+issue only if you're using some exotic PAM image.
+
+<p>Before Netpbm 10.27 (March 2005), <b>pnmremap</b> could not handle
+the case of a palette of greater depth than the input image.  (It would
+issue an error message and fail in that case).
+
+<p>In any case, the output image has the same tuple type and depth as
+the palette image.
+
+<h3 id="multiple">Multiple Image Stream</h3>
+
+<p><b>pnmremap</b> handles a multiple image input stream, producing a
+multiple image output stream.  The input images need not be similar in
+any way.
+
+<p>Before Netpbm 10.30 (October 2005), <b>pnmremap</b> ignored any image
+after the first.
+
+
+<h3 id="example">Examples</h3>
+
+<pre>
+pnmcolormap testimg.ppm 256 &gt;palette.ppm
+
+pnmremap -map=palette.ppm testimg.ppm &gt;reduced_testimg.ppm
+</pre>
+
+<P>To limit colors to a certain set, a typical example is to create an
+image for posting on the World Wide Web, where different browsers know
+different colors.  But all browsers are supposed to know the 216
+&quot;web safe&quot; colors which are essentially all the colors you
+can represent in a PPM image with a maxval of 5.  So you can do this:
+
+<PRE>
+pamseq 3 5 &gt;websafe.pam
+
+pnmremap -map=websafe.pam testimg.ppm &gt;websafe_testimg.ppm
+</PRE>
+
+<p>Another useful palette is one for the 8 color IBM TTL color set, which
+you can create with
+<pre>
+pamseq 3 1 &gt;ibmttl.pam
+</pre>
+
+<p>If you want to quantize one image to use the colors in another one,
+just use the second one as the palette.  You don't have to reduce it
+down to only one pixel of each color, just use it as is.
+
+<P>The output image has the same type and maxval as the palette image.
+
+<H2 id="parameters">PARAMETERS</H2>
+
+<P>There is one parameter, which is required: The file specification of
+the input PNM file.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-mapfile=</B><i>palettefilename</i>
+<DD>
+This names the file that contains the palette image.
+
+<P>This option is mandatory.
+
+<DT><B>-floyd</B>
+<DT><B>-fs</B>
+<DT><B>-nofloyd</B>
+<DT><B>-nofs</B>
+<DD>
+These options determine whether Floyd-Steinberg dithering is done.
+Without Floyd-Steinberg, the selection of output color of a pixel is based
+on the color of only the corresponding input pixel.  With Floyd-Steinberg,
+multiple input pixels are considered so that the average color of an area
+tends to stay more the same than without Floyd-Steinberg.  For example, 
+if you map an image with a black, gray, gray, and white pixel
+adjacent, to a palette that contains only black and white, it might 
+result in an output of black, black, white, white.  Pixel-by-pixel
+mapping would instead map both the gray pixels to the same color.
+
+
+<p>Floyd-Steinberg gives vastly better results on images where
+unmodified quantization has banding or other artifacts, especially
+when going to a small number of colors such as the above IBM set.
+However, it does take substantially more CPU time.
+     
+<P><B>-fs</B> is a synomym for <B>-floyd</B>.  <B>-nofs</B> is a
+synonym for <B>-nofloyd</B>.
+
+<P>The default is <B>-nofloyd</B>.
+
+<DT><B>-firstisdefault</B>
+
+<DD>This tells <b>pnmremap</b> to map any input color that is not in
+the palette to the first color in the palette (the color of the pixel
+in the top left corner of the palette image)
+
+<p>See <a href="#description">DESCRIPTION</a>.
+
+<P>If you specify <B>-firstisdefault</B>, the maxval of your input
+must match the maxval of your palette image.
+
+<DT><B>-missingcolor=</B><I>color</I>
+
+<DD>This specifies the default color for <b>pnmremap</b> to map to a
+color in the input image that isn't in the palette.  <I>color</I> may
+or may not be in the palette image; it is part of the palette
+regardless.
+
+<P>If you specify <B>-missingcolor</B>, the maxval of your input must
+match the maxval of your palette image.
+
+<DT><B>-verbose</B>
+
+<DD>Display helpful messages about the mapping process.
+
+</DL>
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>,
+<B><A HREF="pamseq.html">pamseq</A></B>,
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="ppmquantall.html">ppmquantall</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+<B><A HREF="ppmquant.html">ppmquant</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<ul>
+  <LI><A HREF="#mismatch">Palette/Image Type Mismatch</A>
+  <LI><A HREF="#multiple">Multiple Image Stream</A>
+  <LI><A HREF="#example">Examples</A>
+  </ul>
+<LI><A HREF="#parameters">PARAMETERS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmrotate.html b/pnmrotate.html
new file mode 100644
index 00000000..bb80240f
--- /dev/null
+++ b/pnmrotate.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmrotate User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmrotate</H1>
+Updated: 30 August 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pnmrotate - rotate a PNM image by some angle
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmrotate</B>
+[<B>-noantialias</B>]
+[<B>-background=</B><I>color</I>]
+<I>angle</I>
+[<I>pnmfile</I>]
+
+<P>
+All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or equals signs between an option name and its
+value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pnmrotate</b> reads a PNM image as input.  It rotates it by the
+specified angle and produces the same kind of PNM image as output.
+
+<p>The input is the file named by <i>pnmfile</i> or Standard Input if you
+don't specify <i>pnmfile</i>.  The output goes to Standard Output.
+
+<p>The resulting image is a rectangle that contains the (rectangular)
+input image within it, rotated with respect to its bottom edge.  The
+containing rectangle is as small as possible to contain the rotated
+image.  The background of the containing image is a single color that
+<b>pnmrotate</b> determines to be the background color of the original
+image, or that you specify explicitly.
+
+<p><i>angle</i> is in decimal degrees (floating point), measured
+counter-clockwise.  It can be negative, but it should be between -90
+and 90.
+
+<p>You should use <b>pamflip</b> instead for rotations that are a
+multiple of a quarter turn.  It is faster and more accurate.
+
+<p>For rotations greater than 45 degrees you may get better results if
+you first use <I>pamflip</I> to do a 90 degree rotation and then
+<I>pnmrotate</I> less than 45 degrees back the other direction.
+
+<P>The rotation algorithm is Alan Paeth's three-shear method.  Each
+shear is implemented by looping over the source pixels and
+distributing fractions to each of the destination pixels.  This has an
+&quot;anti-aliasing&quot; effect - it avoids jagged edges and similar
+artifacts.  However, it also means that the original colors or gray
+levels in the image are modified.  If you need to keep precisely the
+same set of colors, you can use the <B>-noantialias</B> option.
+
+<p>The program runs faster and uses less real memory with the
+<b>-noantialias</b> option.  It uses a large amount of virtual memory
+either way, as it keeps a copy of the input image and a copy of the
+output image in memory, using 12 bytes per pixel for each.  But with
+<b>-noantialias</b>, it accesses this memory sequentially in half a
+dozen passes, with only a few pages of memory at a time required in
+real memory.
+
+<p>In contrast, without <b>-noantialias</b>, the program's real memory
+working set size is one page per input image row plus one page per output
+image row.  Before Netpbm 10.16 (June 2003), <b>-noantialias</b> had the
+same memory requirement.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><b>-background=</b><i>color</i>
+
+<DD>This determines the color of the background on which the rotated image
+sits.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>By default, if you don't specify this option, <b>pnmrotate</b> selects
+what appears to it to be the background color of the original image.  It 
+determines this color rather simplisticly, by taking an average of the colors
+of the two top corners of the image.
+
+<p>This option was new in Netpbm 10.15.  Before that, <b>pnmrotate</b>
+always behaved as is the default now.
+
+<dt><b>-noantialias</b>
+
+<dd>This option forces <b>pnmrotate</b> to simply move pixels around instead 
+of synthesizing output pixels from multiple input pixels.  The latter could
+cause the output to contain colors that are not in the input, which may not
+be desirable.  It also probably makes the output contain a large number of
+colors.  If you need a small number of colors, but it doesn't matter if they
+are the exact ones from the input, consider using <b>pnmquant</B> on the 
+output instead of using <b>-noantialias</b>.
+
+<p>Note that to ensure the output does not contain colors that are not
+in the input, you also must consider the background color.  See the
+<b>-background</b> option.
+
+</dl>
+
+<H2 id="references">REFERENCES</H2>
+
+&quot;A Fast Algorithm for General Raster Rotation&quot; by Alan Paeth,
+Graphics Interface '86, pp. 77-81.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pnmshear.html">pnmshear</A>,
+<A HREF="pamflip.html">pamflip</A>,
+<A HREF="pnmquant.html">pnmquant</A>,
+<A HREF="pnm.html">pnm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#references">REFERENCES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmscale.html b/pnmscale.html
new file mode 100644
index 00000000..428fb8a6
--- /dev/null
+++ b/pnmscale.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmscale User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmscale</H1>
+Updated: 25 January 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmscale - scale a PNM image
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<pre>
+   <B>pnmscale</B>
+      [ 
+         <I>scale_factor</I> 
+         |
+         <b>-xysize</b> <I>cols</i> <i>rows</I> 
+         |
+         <B>-reduce</B> <I>reduction_factor</I> 
+         |
+         [<B>-xsize=</B><I>cols</I> | <B>-width=</B><I>cols</I> | <B>-xscale=</B><I>factor</I>]
+         [<B>-ysize=</B><I>rows</I> | <B>-height=</B><I>rows</I> | <B>-yscale=</B><I>factor</I>]
+         |
+         <b>-pixels</B> <I>n</I>
+      ]
+      [<B>-verbose</b>]
+      [<b>-nomix</B>]
+      [<I>pnmfile</I>]
+
+</pre>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmscale</b> was obsoleted by <a
+href="pamscale.html"><b>pamscale</b></a>, introduced with Netpbm 10.20
+(January 2004).  <b>pamscale</b> is backward compatible with
+<b>pnmscale</b>, plus adds many additional functions, including the
+ability to process PAM images, and tends to produce better results.
+
+<p><b>pnmscale</b> remains in the current Netpbm package because it
+probably has fewer bugs for now than <b>pamscale</b>, and may have
+superior performance characteristics in some cases.  Some day,
+<b>pnmscale</b> will probably become an alias for <b>pamscale</b>.
+
+<p>You can use the <b>pamscale</b> documentation for <b>pnmscale</b>,
+considering the following differences:
+
+<ul>
+<li><b>pnmscale</b> options are a subset of <b>pamscale</b>'s, as
+     documented above.
+<li><b>pnmscale</b> always assumes the input is linear, as <b>pamscale</b>
+     does when you specify its <b>-linear</b> option.
+<li><b>pnmscale</b> cannot process PAM images.
+</ul>
+
+</BODY>
+</HTML>
+
diff --git a/pnmscalefixed.html b/pnmscalefixed.html
new file mode 100644
index 00000000..58dfde35
--- /dev/null
+++ b/pnmscalefixed.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmscalefixed User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmscalefixed</H1>
+Updated: 18 November 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmscale - scale a PNM file quickly
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pnmscalefixed</B> is the same thing as <B>pnmscale</B> except that
+it uses fixed point arithmetic internally instead of floating point,
+which makes it run faster.  In turn, it is less accurate and may
+distort the image.
+
+<P>Use the <B>pnmscale</B> user manual with <B>pnmscalefixed</B>.  This
+document only describes the difference.
+
+<P><B>pnmscalefixed</B> uses fixed point 12 bit arithmetic.  By
+contrast, <B>pnmscale</B> uses floating point arithmetic which on most
+machines is probably 24 bit precision.  This makes
+<B>pnmscalefixed</B> run faster (30% faster in one experiment), but
+the imprecision can cause distortions at the right and bottom edges.
+
+<P>The distortion takes the following form: One pixel from the edge of
+the input is rendered larger in the output than the scaling factor
+requires.  Consequently, the rest of the image is smaller than the
+scaling factor requires, because the overall dimensions of the image
+are always as requested.  This distortion will usually be very hard to
+see.
+
+<P><B>pnmscalefixed</B> with the <B>-verbose</B> option tells you how
+much distortion there is.
+
+<P>The amount of distortion depends on the size of the input image and how
+close the scaling factor is to an integral 1/4096th.
+
+<P>If the scaling factor is an exact multiple of 1/4096, there is no
+distortion.  So, for example doubling or halving an image causes no
+distortion.  But reducing it or enlarging it by a third would cause
+some distortion.  To consider an extreme case, scaling a 100,000 row
+image down to 50,022 rows would create an output image with all of the
+input squeezed into the top 50,000 rows, and the last row of the input
+copied into the bottom 22 rows of output.
+
+<P><B>pnmscalefixed</B> could probably be modified to use 16 bit or
+better arithmetic without losing anything.  The modification would
+consist of a single constant in the source code.  Until there is a
+demonstrated need for that, though, the Netpbm maintainer wants to
+keep the safety cushion afforded by the original 12 bit precision.
+
+<P><B>pnmscalefixed</B> does not have <B>pnmscale</b>'s <B>-nomix</B>
+option.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">DESCRIPTION</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmshear.html b/pnmshear.html
new file mode 100644
index 00000000..2be0cf74
--- /dev/null
+++ b/pnmshear.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmshear User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmshear</H1>
+Updated: 27 November 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmshear - shear a PNM image by a specified angle
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmshear</B>
+
+[<B>-noantialias</B>]
+
+[<B>-background=</B><I>color</I>]
+
+<I>angle</I>
+
+[<I>pnmfile</I>]
+
+<P>
+All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or equals signs between an option name and its
+value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmshear</b> reads a PNM image as input and shears it by the
+specified angle and produce a PNM image as output.  If the input file
+is in color, the output will be too, otherwise it will be grayscale.
+The angle is in degrees (floating point), and measures this:
+
+<PRE>
+    +-------+  +-------+
+    |       |  |\       \
+    |  OLD  |  | \  NEW  \
+    |       |  |an\       \
+    +-------+  |gle+-------+
+</PRE>
+
+If the angle is negative, it shears the other way:
+<PRE>
+    +-------+  |-an+-------+
+    |       |  |gl/       /
+    |  OLD  |  |e/  NEW  /
+    |       |  |/       /
+    +-------+  +-------+
+</PRE>
+
+The angle should not get too close to 90 or -90, or the resulting
+anymap will be unreasonably wide.
+
+<P><b>pnmshear</b> does the shearing by looping over the source pixels
+and distributing fractions to each of the destination pixels.  This
+has an &quot;anti-aliasing&quot; effect - it avoids jagged edges and
+similar artifacts.  However, it also means that the original colors in
+the image are modified and there are typically more of them than you
+started with.  If you need to keep precisely the same set of colors,
+see the <B>-noantialias</B> option.  If the expanded palette is a
+problem, you can run the result through <b>pnmquant</b>.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><b>-background=</b><i>color</i>
+
+<DD>This determines the color of the background on which the sheared image
+sits.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>By default, if you don't specify this option, <b>pnmshear</b> selects
+what appears to it to be the background color of the original image.  It 
+determines this color rather simplisticly, by taking an average of the colors
+of the two top corners of the image.
+
+<p>This option was new in Netpbm 10.37 (December 2006).  Before that,
+<b>pnmshear</b> always behaved as is the default now.
+
+<dt><b>-noantialias</b>
+
+<dd>This option forces <b>pnmrotate</b> to simply move pixels around instead 
+of synthesizing output pixels from multiple input pixels.  The latter could
+cause the output to contain colors that are not in the input, which may not
+be desirable.  It also probably makes the output contain a large number of
+colors.  If you need a small number of colors, but it doesn't matter if they
+are the exact ones from the input, consider using <b>pnmquant</B> on the 
+output instead of using <b>-noantialias</b>.
+
+<p>Note that to ensure the output does not contain colors that are not
+in the input, you also must consider the background color.  See the
+<b>-background</b> option.
+
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pnmrotate.html">pnmrotate</A>,
+<A HREF="pamflip.html">pamflip</A>,
+<A HREF="pnmquant.html">pnmquant</A>,
+<A HREF="pnm.html">pnm</A>
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmsmooth.html b/pnmsmooth.html
new file mode 100644
index 00000000..4eb6f837
--- /dev/null
+++ b/pnmsmooth.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmsmooth User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmsmooth</H1>
+Updated: 4 December 1994
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<h2>NAME</H2>
+
+pnmsmooth - smooth out an image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmsmooth</B>
+
+[<b>-width=</b><i>cols</i>]
+[<b>-height=</b><i>rows</i>]
+
+[<B>-dump</B>=<I>dumpfile</I>]
+
+[<I>pnmfile</I>]
+
+<p>Deprecated backward-compatibility option:
+
+[<b>-size</b>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmsmooth</b> smoothes out an image by replacing each pixel with
+the average of its width X height neighbors.  It is implemented as a
+progam that generates a PGM convolution matrix and then invokes
+<b>pnmconvol</b> with it.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<dt><b>-width=</b><i>cols</i>
+<dt><b>-height</b>=<i>rows</i>
+
+<dd>
+These options specify the dimensions of the convolution matrix.
+Default dimensions are 3 wide and 3 high.  Each dimension must be odd.
+The maximum size of the convolution matrix is limited by the maxval of
+the image such that width * height * 2 must not exceed the maxval.
+(use <b>pamdepth</b> to increase the maxval if necessary).
+
+<p>These options were new in Netpbm 10.32 (February 2006).  Before that,
+use <b>-size</b>.
+
+<DT><B>-size</b>
+
+<DD>This deprecated option exists in current Netpbm for backward
+compatibility.  It was obsoleted by <b>-width</b> and <b>-height</b>
+in Netpbm 10.32 (February 2006).
+
+<p>When you use this option, the first two program arguments are the width
+and height, respectively, of the convolution matrix and do the same thing
+as the <b>-width</b> and <b>-height</b> option values.  The third
+(optional) program argument is the input file name.
+
+<p>In reality, in old <b>pnmsmooth</b>, the width and height are two
+values of the <b>-size</b> option, but the modern Netpbm command syntax
+paradigm doesn't allow an option with multiple values, so instead
+<b>-size</b> is an option with no value and width and height are program
+arguments.  That has the fortunate effect of making the following command
+mean the same in current <b>pnmsmooth</b> as in old <b>pnmsmooth</b>:
+<pre>
+<kbd>
+     pnmsmooth -size 5 5 infile.ppm &gt;outfile.ppm
+</kbd>
+</pre>
+
+<DT><B>-dump=</b><i>dumpfile</i>
+
+<DD>This options makes <b>pnmsmooth</b> only generate and save the
+convolution file.  It does not invoke <b>pnmconvol</B> and does not
+produce an output image.
+
+</DL>
+
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pnmconvol.html">pnmconvol</A>,
+<A HREF="pnm.html">pnm</A>
+
+<h2 id="history">HISTORY</h2>
+
+<p>Before Netpbm 10.32 (February 2006), <b>pnmsmooth</b> did not use
+the modern Netpbm command line parser, so had an unconventional command line
+syntax.  Most importantly, you could not use an equal size or double
+hyphens in the options.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmsplit.html b/pnmsplit.html
new file mode 100644
index 00000000..733a2c96
--- /dev/null
+++ b/pnmsplit.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Pnmsplit User Manual</title></HEAD>
+
+<BODY>
+<H1>pnmsplit</H1>
+Updated: 23 October 2005
+<BR>
+<H2>NAME</H2>
+pnmsplit - split a multi-image PNM file into multiple single-image files
+
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>Starting with Netpbm 10.31 (December 2005), <b>pnmsplit</b> is
+obsolete.  Use <a href="pamsplit.html"><b>pamsplit</b></a> instead.
+
+<b>pamsplit</b> is backward compatible with <b>pnmsplit</b>.  You can
+use the <b>pamsplit</b> manual for <b>pnmsplit</b> as long as you ignore
+features that were added after Netpbm 10.30.
+
+</BODY>
+</HTML>
+
+
+
diff --git a/pnmstitch.html b/pnmstitch.html
new file mode 100644
index 00000000..d9398747
--- /dev/null
+++ b/pnmstitch.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Pnmstitch User Manual</title></HEAD>
+
+<BODY>
+<H1>pnmstitch</H1>
+Updated: July 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pnmstitch - stitch together two panoramic (side-by-side) photographs
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmstitch</B>
+[
+[<i>left_filespec</i>] <i>right_filespec</i> |
+<br>
+<i>left_filespec</i> <i>right_filespec</i> <i>output_filespec</i>
+]
+<br>
+[<b>-width=</b><i>width</i>]
+[<b>-height=</b><i>height</i>]
+[<b>-xrightpos=</b><i>column</i>]
+[<b>-yrightpos=</b><i>row</i>]
+[<b>-stitcher=</b>{<b>RotateSliver</b>,
+<b>BiLinearSliver</b>,<b>LinearSliver</b>}]
+[<b>-filter=</b>{<b>LineAtATime</b>,<b>HorizontalCrop</b>}]
+[<b>-output=</b><i>output_filespec</i>]
+[<b>-verbose</b>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pnmstitch</b> stitches together two panoramic photographs.  This
+means if you have photographs of the left and right side of something
+that is too big for a single camera frame, <b>pnmstitch</b> can join them
+into one wide picture.
+
+<p><b>pnmstitch</b> works only on side-by-side images, not top and bottom
+(though you could certainly use <b>pnmrotate</b> in combination with
+<b>pnmstitch</b> to achieve this).  It stitches together two images, but
+you can use it repeatedly to stitch together as many as you need to.
+
+<p>Your photographs must overlap in order for <b>pnmstitch</b> to
+work, and the overlap should be substantial.  <b>pnmstitch</b> shifts
+and stretches the right hand image to match it up the left hand image.
+You probably want to crop the result with <b>pamcut</b> to make a nice
+rectangular image.
+
+<p>If you're just trying to join (concatenate) two images at their edges, use
+<b>pnmcat</b>.
+
+<p>The <i>left_filespec</i> and <i>right_filespec</i> arguments are the
+specifications (names) of the PNM files containing the left hand and
+right hand images.  If you specify only <i>right_filespec</i>, the
+left hand image comes from Standard Input.  If you specify neither, both
+images come from Standard Input as a multi-image file containing first the
+left and then the right image.
+
+<p><i>output_filespec</i> is the specification (name) of the output PNM file.
+The <b>-output</b> option also specifies the output file.  You cannot specify
+both the argument and the option.  If you specify neither, the output goes to
+Standard Output.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-width=<i>width</i></B>
+<DT><B>-height=<i>height</i></B>
+<DT><B>-xrightpos=<i>column</i></B>
+<DT><B>-yrightpos=<i>row</i></B>
+<DD>
+These are constraints on where <b>pnmstitch</b> stitches the images together.
+For the <b>LinearSliver</b> method, <i>column</i> and <i>row</i> tell what
+location in the right hand image matches up to the top right corner of the
+left hand image.
+     
+<DT><b>-stitcher=</b>{<b>RotateSliver</b>,<b>BiLinearSliver</b>,
+     <b>LinearSliver</b>}
+<DD>
+The default is <b>RotateSliver</b>.
+
+<dt><b>-filter=</b>{<b>LineAtATime</b>,<b>HorizontalCrop</b>}
+<DD>
+No details available.
+     
+<dt><b>-output=</b><i>output_filespec</i>
+<DD>
+Name of output file.  If you don't specify this option, the output image
+goes to Standard Output.
+
+<DT><B>-verbose</B>
+
+<DD>This option causes <b>pnmstitch</b> to issue messages to Standard Error
+     about the stitching process.
+     
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+<B><A HREF="pnmrotate.html">pnmrotate</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p>This program was added to Netpbm in Release 10.7 (August 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtile.html b/pnmtile.html
new file mode 100644
index 00000000..ebc00dec
--- /dev/null
+++ b/pnmtile.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtile User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtile</H1>
+Updated: 06 March 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pnmtile - replicate an image to fill a specified region
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtile</B>
+<I>width</I>
+<i>height</I>
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtile</b> reads a PNM image as input.  Replicates it to fill
+an area of the specified dimensions and produces an image in the same
+format as output.
+
+<p>You can do pretty much the reverse with <b>pamdice</b>.
+
+<p>You can explicitly concatenate an image to itself (or anything else)
+with <b>pnmcat</b>.
+
+<p>If you're trying to tile multiple images into a superimage (such as
+a thumbnail sheet), see <b>pnmindex</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmcat.html">pnmcat</A>,
+<A HREF="pamdice.html">pamdice</A>,
+<A HREF="pnmindex.html">pnmindex</A>,
+<A HREF="pampop9.html">pampop9</A>,
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtoddif.html b/pnmtoddif.html
new file mode 100644
index 00000000..987cabf2
--- /dev/null
+++ b/pnmtoddif.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtoddif User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtoddif</H1>
+Updated: 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtoddif - Convert a PNM image to DDIF format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtoddif</B>
+[<b>-resolution</b> <i>x</i> <i>y</i>]
+[<i>pnmfile</i> [<i>ddiffile</i>]]
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtoddif</b> takes a PNM image and converts it into a DDIF image
+file.
+
+<P><b>pnmtoddif</b> writes PBM format (bitmap) data as a 1 bit DDIF,
+PGM format data (grayscale) as an 8 bit grayscale DDIF, and PPM format
+(color) data as an 8,8,8 bit color DDIF.  <b>pnmtoddif</b> writes any
+DDIF image file uncompressed.  The data plane organization is
+interleaved by pixel.
+
+<P>In addition to the number of pixels in the width and height
+dimension, DDIF images also carry information about the size that the
+image should have, that is, the physical space that a pixel occupies.
+Netpbm images do not carry this information, hence you have to supply
+it externally.  The default of 78 dpi has the beneficial property of
+not causing a resize on most Digital Equipment Corporation color
+monitors.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>resolution</b> <i>x</i> <i>y</I>
+
+<DD>The horizontal and vertical resolution of the output image in dots
+per inch.  Default is 78 dpi.
+
+</DL>
+
+<a name="arguments"></a>
+<h2>ARGUMENTS</h2>
+
+<dl>
+<DT><I>pnmfile</I>
+
+<DD>The filename for the image file in pnm format.  Default is to
+read from Standard Input.
+
+<DT><I>ddiffile</I>
+
+<DD>The filename for the image file to be created in DDIF format.  By
+default, <b>pnmtoddif</b> writes to Standard Output.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Burkhard Neidecker-Lutz, Digital Equipment Corporation, CEC Karlsruhe
+<A HREF="mailto:neideck@nestvx.enet.dec.com">neideck@nestvx.enet.dec.com</A>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAE">DESCRIPTION</A>
+<LI><A HREF="#lbAD">OPTIONS</A>
+<LI><A HREF="#arguments">ARGUMENTS</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtofiasco.html b/pnmtofiasco.html
new file mode 100644
index 00000000..a01ae535
--- /dev/null
+++ b/pnmtofiasco.html
@@ -0,0 +1,372 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtofiasco User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtofiasco</H1>
+Updated: July 12, 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmtofiasco - Convert PNM file to FIASCO compressed file
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmtofiasco</B>
+[<I>option</I>]...
+[<I>filename</I>]...
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pnmtofiasco</B> compresses the named pbm, pgm, or ppm image files,
+or Standard Input if no file is named, and produces a FIASCO file on
+Standard Output.
+
+<H2 id="options">OPTIONS</H2>
+
+<p>All option names may be abbreviated; for example, --optimize may be
+written --optim or --opt. For most options a one letter short option
+is provided.  Mandatory or optional arguments to long options are
+mandatory or optional for short options, too.  Both short and long
+options are case sensitive.
+
+<P>The basic options are:
+
+<DL COMPACT>
+<DT><B>-i</B> <I>name</I>, <B>--input-name=</B><I>name</I>
+
+<DD>Compress the named images, not Standard Input.  If <I>name</I> is
+<B>-</B>, read Standard Input.  <I>name</I> has to be either an image
+filename or a template of the form:
+
+<PRE>
+prefix[start-end{+,-}step]suffix<BR>
+</PRE>
+
+<P>Templates are useful when compressing video streams: e.g., if you
+specify the template <B>img0[12-01-2].pgm</B>, then <B>pnmtofiasco</B>
+compresses the images img012.pgm, img010.pgm, ..., img002.pgm.
+
+<P>If <I>name</I> is a relative path, <B>pnmtofiasco </B> searches for
+the image files in the current directory and in the (colon-separated)
+list of directories given by the environment variable
+<B>FIASCO_IMAGES</B>.
+
+<DT><B>-o</B> <I>output-file</I>, <B>--output-name=</B><I>name</I>
+
+<DD>Write FIASCO output to the named file, not to Standard Output.
+
+<P>If <I>name</I> is a relative path and the environment variable
+<B>FIASCO_DATA</B> is a (colon-separated) list of directories, then
+<B>pnmtofiasco</B> writes the output file to the first (writable)
+directory of this list. Otherwise, <B>pnmtofiasco</B> write it to the
+current directory.
+
+<DT><B>-q</B> <I>N</I>, <B>--quality=</B><I>N</I>
+
+<DD>Set quality of compression to <I>N</I>.  Quality is 1 (worst) to
+100 (best); default is 20.
+
+<DT><B>-v</B>, <B>--version</B>
+
+<DD>Print <B>pnmtofiasco</B> version number, then exit.
+
+<DT><B>-V</B> <I>N</I>, <B>--verbose </B><I>N</I>
+
+<DD>Set level of verbosity to <I>N</I>.  Level is 0 (no output at
+all), 1 (show progress meter), or 2 (show detailed compression
+statistics); default is 1.
+
+<DT><B>-B</B> <I>N</I>, <B>--progress-meter </B><I>N</I>
+
+<DD>Set type of progress-meter to <I>N</I>.  The following types are
+available; default is 1:
+
+<dl>
+<dt><B>0</B>
+<dd>no progress meter
+
+<dt><B>1</B>
+<dd>RPM style progress bar using 50 hash marks
+
+<dt><B>2</B>
+
+<dd>percentage meter
+
+</dl>
+
+<DT><B>-f</B> <I>name</I>, <B>--config=</B><I>name</I>
+
+<DD>Load parameter file <I>name </I> to initialize the options of
+<B>pnmtofiasco</B>.  See file <B>system.fiascorc</B> for an example of
+the syntax. Options of <B>pnmtofiasco</B> are set by any of the
+following methods (in the specified order):
+
+<ol>
+<li>Global resource file <B>/etc/system.fiascorc</B>
+<li>$HOME/.fiascorc
+<li>command line
+<li>--config=<I>name</I>
+</ol>
+
+<DT><B>-h</B>, <B>--info</B>
+
+<DD>Print brief help, then exit.
+
+<DT><B>-H</B>, <B>--help</B>
+
+<DD>Print detailed help, then exit.
+
+</dl>
+
+<p>The options for advanced users are:
+
+<dl>
+<DT><B>-b</B> <I>name</I>, <B>--basis-name=</B><I>name</I>
+
+<DD>Preload compression basis <I>name</I> into FIASCO.  The basis
+<I>name</I> provides the initial compression dictionary.  Either use
+one of the files &quot;small.fco&quot;, &quot;medium.fco&quot;, or
+&quot;large.fco&quot; that come with <B>pnmtofiasco </B> or create a
+new ASCII basis file.
+
+<DT><B>-z</B> <I>N</I>, <B>--optimize=</B><I>N</I> 
+
+<dd>Set optimization level to <I>N</I>.  Level is 0 (fastest) to 3
+(slowest); default is 1.  Be warned, the encoding time dramatically
+increased when <I>N</I>=<B>2</B> or <I>N</I>=<B>3</B> while the
+compression performance only slightly improves.
+
+<DT><B>-P</B>, <B>--prediction</B>
+
+<DD>Use additional predictive coding.  If this optimization is enabled
+then the image is compressed in two steps.  In the first step, a coarse
+approximation of the image is computed using large unichrome
+blocks.  Finally, the delta image is computed and the prediction error
+is approximated using the standard FIASCO algorithm.
+
+<DT><B>-D</B> <I>N</I>, <B>--dictionary-size=</B><I>N</I>
+
+<DD>Set size of dictionary that is used when coding the luminance band
+to <I>N</I>; default is 10000, i.e., the dictionary is not restricted.
+
+<DT><B>-C</B> <I>N</I>, <B>--chroma-dictionary=</B><I>N</I>
+
+<DD>Set size of dictionary that is used when coding chroma bands to
+<I>N</I>; default is 40.
+
+<DT><B>-Q</B> <I>N</I>, <B>--chroma-qfactor=</B><I>N</I>
+
+<DD>Reduce the quality of chroma band compression <I>N</I>-times with
+respect to the user defined quality <I>q</I> of the luminance band
+compression (<B>--quality</B>=<I>q</I>); default is 2.
+
+<DT><B>-t</B> <I>N</I>, <B>--tiling-exponent=</B><I>N</I>
+
+<DD>Subdivide the image into 2^<I>N</I> tiles prior coding; default is
+4, i.e. the image is subdivided into 16 tiles. The processing order of
+the individual tiles is defined by the option
+<B>--tiling-method=</B><I>name</I>.
+
+<DT><B>-T</B> <I>name</I>, <B>--tiling-method=</B><I>name</I>
+
+<DD>Order the individual image tiles (the image is subdivided into;
+see option <B>--tiling-exponent=</B><I>N</I>) by method <I>name</I>;
+default is <b>desc-variance</b>.
+
+<dl>
+<dt><B>desc-variance</B>
+<dd>Tiles with small variances are processed first.
+
+<dt><B>asc-variance</B>
+<dd>Tiles with large variances are processed first.
+
+<dt><B>desc-spiral</B>
+<dd>Tiles are process in spiral order starting in the middle. 
+
+<dt><B>asc-spiral</B>
+<dd>Tiles are process in spiral order starting at the border.
+
+</dl>
+
+<DT><B>--rpf-mantissa=</B><I>N</I>
+
+<DD>Use <I>N</I> mantissa bits for quantized coefficients.
+
+<DT><B>--dc-rpf-mantissa=</B><I>N</I>
+<DD>Use <I>N</I> mantissa bits for quantized DC coefficients.
+
+<DT><B>--rpf-range=</B><I>N</I>
+
+<DD>Coefficients outside the quantization interval
+[-<I>N</I>,+<I>N</I>] are set to zero.
+
+<DT><B>--dc-rpf-range=</B><I>N</I>
+
+<DD>DC coefficients outside the quantization interval
+[-<I>N</I>,+<I>N</I>] are set to zero.
+
+</dl>
+
+<p>Additional options for video compression are
+
+<dl>
+<DT><B>-s</B> <I>N</I>, <B>--smooth=</B><I>N</I>
+
+<DD>Smooth decompressed reference frames along the partitioning
+borders by the given amount <I>N</I>.  <I>N</I> is 0 (no smoothing) to
+100; default is 70.  This factor is stored in the FIASCO file.
+
+<DT><B>-m</B> <I>N</I>, <B>--min-level=</B><I>N</I>
+
+<DD>Start prediction (motion compensated prediction or additional
+prediction) on block level <I>N</I>; default is level 6.  I.e., motion
+compensation is applied to all image blocks of at least 8x8 pixels
+(binary tree level <I>N</I>=6), 16x8 (<I>N</I>=7), 16x16 (<I>N</I>=8),
+etc.
+
+<DT><B>-M</B> <I>N</I>, <B>--max-level=</B><I>N</I>
+
+<DD>Stop prediction (motion compensated prediction or additional
+prediction) on block level <I>N</I>; default is level 10.  I.e.,
+motion compensation is applied to all image blocks of at most 16x16
+pixels (<I>N</I>=8), 32x16 (<I>N</I>=9), 32x32 (<I>N</I>=10), etc.
+
+<DT><B>-2</B>, <B>--half-pixel</B>
+
+<DD>Use half pixel precise motion compensation.
+
+<DT><B>-F</B> <I>N</I>, <B>--fps=</B><I>N</I>
+
+<DD>Set number of frames per second to <I>N</I>.  This value is stored
+in the FIASCO output file and is used in the decoder <A
+HREF="fiascotopnm.html">fiascotopnm</A> to control the framerate.
+
+<DT><B>-p</B> <I>type</I>, <B>--pattern=</B><I>type</I>
+
+<DD>Defines the type of inter frame compression which should be
+applied to individual frames of a video stream.  <I>type</I> is a
+sequence of characters; default is &quot;IPPPPPPPPP&quot;.  Element
+<B>N</B> defines the type of predicting which should be used for frame
+<B>N</B>; the frame type pattern is periodically extended.  Valid
+characters are:
+
+<dl>
+<dt><B>I</B>
+<dd>intra frame, i.e., no motion compensated prediction is used at
+all.
+
+<dt><B>P</B>
+<dd>predicted frame, i.e., a previously encoded frame is used for
+prediction (forward prediction).
+
+<dt><B>B</B>
+<dd>bidirectional predicted frame, i.e., not only a previously shown
+frame but also a frame of the future is used for prediction (forward,
+backward or interpolated prediction).
+
+</dl>
+
+<DT><B>--cross-B-search</B>
+
+<DD>Instead of using exhaustive search the &quot;Cross-B-Search&quot;
+algorithm is used to find the best interpolated prediction of
+B-frames.
+
+<DT>--B-as-past-ref
+
+<DD>Also use previously encoded B-frames when prediction the current
+frame. If this option is not set, only I- and P-frames are used to
+predict the current frame.
+
+</DL>
+
+
+<H2 id="examples">EXAMPLES</H2>
+
+<p>Compress the still image &quot;foo.ppm&quot; to the FIASCO file
+&quot;foo.wfa&quot; using the default options:
+
+<pre>
+        pnmtofiasco &lt; foo.ppm &gt;foo.wfa
+</pre>
+
+<P>Compress the video frames &quot;foo0*.ppm&quot; to the FIASCO file
+&quot;video.wfa&quot; using half pixel precise motion compensation at
+a frame rate of 15 frames per second.  Intra frame 1 is used to
+predict P-frame 4, frames 1 and 4 are used to predict B-frames 2 and
+3, and so on.  Frame 10 is again an intra-frame.
+
+<pre>
+        pnmtofiasco -2 -p &quot;IBBPBBPBB&quot; -fps 15 -o video.wfa foo0*.ppm
+</pre>
+
+<H2 id="files">FILES</H2>
+
+<DL COMPACT>
+<DT><B>/etc/system.fiascorc</B>
+
+<DD>The systemwide initialization file.
+
+<DT>$HOME<B>/.fiascorc</B>
+
+<DD>The personal initialization file.
+
+</DL>
+
+<H2 id="environment">ENVIRONMENT</H2>
+
+
+<DL COMPACT>
+
+<DT><B>FIASCO_IMAGES</B>
+
+<DD>Search path for image files.  Default is &quot;./&quot;.
+
+<DT><B>FIASCO_DATA</B>
+
+<DD>Search and save path for FIASCO files.  Default is &quot;./&quot;.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="fiascotopnm.html">fiascotopnm</A></B>,
+<B><A HREF="pnmtojpeg.html">ppmtojpeg</A></B>,
+<B><A HREF="pnmtojbig.html">pnmtojbig</A></B>,
+<B><A HREF="pamtogif.html">pamtogif</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<P>Ullrich Hafner, Juergen Albert, Stefan Frank, and Michael Unger.
+<B>Weighted Finite Automata for Video Compression</B>, IEEE Journal on
+Selected Areas In Communications, January 1998
+
+<p>Ullrich Hafner. <B>Low Bit-Rate Image and Video Coding with
+Weighted Finite Automata</B>, Ph.D. thesis, Mensch &amp; Buch Verlag,
+ISBN 3-89820-002-7, October 1999.
+
+<p><a href="http://www.linuxjournal.com/node/4367/print">FIASCO: An
+Open-Source Fractal Image and Sequence Codec</a>, Linux Journal,
+January 2001.
+
+<H2 id="author">AUTHOR</H2>
+
+Ullrich Hafner &lt;<A HREF="mailto:hafner@bigfoot.de">hafner@bigfoot.de</A>&gt;
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#files">FILES</A>
+<LI><A HREF="#environment">ENVIRONMENT</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtofits.html b/pnmtofits.html
new file mode 100644
index 00000000..5430f42d
--- /dev/null
+++ b/pnmtofits.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head>
+<title>pnmtofits</title>
+</head><body>
+<h1>pnmtofits</h1>
+Updated: September 2005
+<br>
+<h2>NAME</h2>
+<B>pnmtofits</B> - replaced by pamtofits
+<h2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+In Netpbm 10.30 (October 2005), <b>pnmtofits</b> was extended and renamed to
+<b><a href="pamtofits.html">pamtofits</a></b>.
+
+<p><b>pamtofits</b> is backward compatible with <b>pnmtofits</b>.
+
+</body>
+</html>
diff --git a/pnmtojbig.html b/pnmtojbig.html
new file mode 100644
index 00000000..01200628
--- /dev/null
+++ b/pnmtojbig.html
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtojbig User Manual</TITLE></HEAD>
+<BODY>
+<H1>PNMTOJBIG</H1>
+Updated: 20 May 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtojbig - PNM to JBIG file converter
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtojbig</B>
+
+[<I>options</I>]
+[<I>input-file</I> [<I>output-file</I>]]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtojbig</b> reads a PBM or PGM image, compresses it, and
+outputs the image as a JBIG bi-level image entity (BIE) file.
+
+<P>JBIG is a highly effective lossless compression algorithm for
+bi-level images (one bit per pixel), which is particularly suitable
+for scanned document pages.
+
+<P>A JBIG encoded image can be stored in several resolutions
+(progressive mode).  These resolution layers can be stored all in one
+single BIE or they can be stored in several separate BIE files.  All
+resolution layers except the lowest one are stored merely as
+differences to the next lower resolution layer, because this requires
+less space than encoding the full image completely every time. Each
+resolution layer has twice the number of horizontal and vertical
+pixels than the next lower layer.  JBIG files can also store several
+bits per pixel as separate bitmap planes, and <B>pnmtojbig</B>
+can read a PGM file and transform it into a multi-bitplane BIE.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-q</B>
+
+<DD>Encode the image in one single resolution layer (sequential
+mode). This is usually the most efficient compression method. By
+default, the number of resolution layers is chosen automatically such
+that the lowest layer image is not larger than 640 &#215; 480 pixels.
+
+<DT><B>-x</B> <I>number</I>
+
+<DD>Specify the maximal horizontal size of the lowest resolution
+layer.  The default is 640 pixels.
+
+<DT><B>-y</B> <I>number</I>
+
+<DD>Specify the maximal vertical size of the lowest resolution layer.
+The default is 480 pixels.
+
+<DT><B>-l</B> <I>number</I>
+
+<DD>Select the lowest resolution layer that will be written to the
+BIE.  It is possible to store the various resolution layers of a JBIG
+image in progressive mode into different BIEs.  Options <B>-l</B> and
+<B>-h</B> allow you to select the resolution-layer interval that will
+appear in the created BIE.  The lowest resolution layer has number 0
+and this is also the default value.  By default, <b>pnmtojbig</b>
+writes all layers.
+
+<DT><B>-h</B> <I>number</I>
+
+<DD>Select the highest resolution layer that will be written to the
+BIE.  By default, <b>pnmtojbig</b> writes all layers.  See also option
+<B>-l</B>.
+
+<DT><B>-b</B>
+
+<DD>Use binary values instead of Gray code words in order to encode
+pixel values in multiple bitplanes.  This option has only an effect if
+the input is a PGM file and if more than one bitplane is
+produced. Note that the decoder has to make the same selection but
+cannot determine from the BIE, whether Gray or binary code words were
+used by the encoder.
+
+<DT><B>-d</B> <I>number</I>
+
+<DD>Specify the total number of differential resolution layers into
+which the input image will be split in addition to the lowest layer.
+Each additional layer reduces the size of layer 0 by 50 %.  This
+option overrides options <B>-x</B> and <B>-y</B>, which are usually a
+more comfortable way of selecting the number of resolution layers.
+
+<DT><B>-s</B> <I>number</I>
+
+<DD>The JBIG algorithm splits each image into a number of horizontal
+stripes.  This option specifies that each stripe shall have
+<I>number</I> lines in layer 0.  The default value is selected so that
+approximately 35 stripes will be used for the whole image.
+
+<DT><B>-m</B> <I>number</I>
+
+<DD>Select the maximum horizontal offset of the adaptive template
+pixel.  The JBIG encoder uses a number of neighbour pixels in order to
+get statistical a priori knowledge of the probability, whether the
+next pixel will be black or white.  One single pixel out of this
+template of context neighbor pixels can be moved around.  Especially
+for dithered images it can be a significant advantage to have one
+neighbor pixel which has a distance large enough to cover the period
+of a dither function.  By default, the adaptive template pixel can be
+moved up to 8 pixels away.  This encoder supports up to 23 pixels,
+however as decoders are only required to support at least a distance
+of 16 pixels by the standard, no higher value than 16 for
+<I>number</I> is recommended in order to maintain interoperability
+with other JBIG implementations.  The maximal vertical offset of the
+adaptive template pixel is always zero.
+
+<DT><B>-t</B> <I>number</I>
+
+<DD>Encode only the specified number of most significant bit planes.
+This option allows to reduce the depth of an input PGM file if not all
+bits per pixel are needed in the output.
+
+<DT><B>-o</B> <I>number</I>
+
+<DD>JBIG separates an image into several horizontal stripes,
+resolution layers and planes, were each plane contains one bit per
+pixel.  One single stripe in one plane and layer is encoded as a data
+unit called stripe data entity (SDE) inside the BIE.  There are 12
+different possible orders in which the SDEs can be stored inside the
+BIE and <I>number</I> selects which one shall be used.  The order of
+the SDEs is only relevant for applications that want to decode a JBIG
+file which has not yet completely arrived from e.g. a slow network
+connection.  For instance some applications prefer that the outermost
+of the three loops (stripes, layers, planes) is over all layers so
+that all data of the lowest resolution layer is transmitted first.
+
+<p>The following values for <I>number</I> select these loop
+arrangements for writing the SDEs (outermost loop first):
+
+<dl>
+<dt>0
+<dd>planes, layers, stripes
+
+<dt>2
+<dd>layers, planes, stripes
+
+<dt>3
+<dd>layers, stripes, planes
+
+<dt>4
+<dd>stripes, planes, layers
+
+<dt>5
+<dd>planes, stripes, layers
+
+<dt>6
+<dd>stripes, layers, planes
+
+</dl>
+
+<P>All loops count starting with zero, however by adding 8 to the
+above order code, the layer loop can be reversed so that it counts
+down to zero and then higher resolution layers will be stored before
+lower layers.  Default order is 3 which writes at first all planes of
+the first stripe and then completes layer 0 before continuing with the
+next layer and so on.
+
+<DT><B>-p</B> <I>number</I>
+
+<DD>This option allows you to activate or deactivate various optional
+algorithms defined in the JBIG standard.  Just add the numbers of the
+following options which you want to activate in order to get the
+<I>number</I> value:
+
+
+<dl>
+<dt>4
+<dd>deterministic prediction (DPON)
+
+<dt>8
+<dd>typical prediction (TPBON)
+
+<dt>16
+<dd>diff. layer typical prediction (TPDON)
+
+<dt>64
+<dd>layer 0 two-line template (LRLTWO)
+
+</dl>
+
+<P>Except for special applications (like communication with JBIG
+subset implementations) and for debugging purposes you will normally
+not want to change anything here.  The default is 28, which provides
+the best compression result.
+
+<DT><B>-c</B>
+
+<DD>The adaptive template pixel movement is determined as suggested in
+annex C of the standard.  By default the template change takes place
+directly in the next line which is most effective.  However a few
+conformance test examples in the standard require the adaptive
+template change to be delayed until the first line of the next stripe.
+This option selects this special behavior, which is normally not
+required except in order to pass some conformance test suite.
+
+<DT><B>-v</B>
+
+<DD>After <b>pnmtojbig</b> creates the BIE, it lists a few technical
+details of the created file (verbose mode).
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>FORMATS</H2>
+
+<P>Most of the format <B>pnmtojbig</B> creates is defined by the
+JBIG standard.
+
+<P>The standard, however, does not specify which values in the BIE mean
+white and which mean black.  It contains a recommendation that for a 
+single plane image zero mean background and one mean foreground, but
+the Netpbm formats have no concept of foreground and background.  And
+the standard says nothing about values for multiple plane BIEs.
+
+<P><B>pnmtojbig</B> follows Markus Kuhn's implementation of the
+standard in the <B>pbmtojbg</B> program that comes with his
+JBIG library:  If the BIE is a single plane BIE, zero means
+white and one means black.  If it is a multiple plane BIE, zero means
+black and the maximal value is white.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>STANDARDS</H2>
+
+<p>This program implements the JBIG image coding algorithm as
+specified in ISO/IEC 11544:1993 and ITU-T T.82(1993).
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<B>pnmtojbig</B> is based on the JBIG library by Markus Kuhn, part of
+his <B>JBIG-KIT</B> package.  The <B>pbmtojbg</B> program is part of
+the <I>JBIG-KIT</I> package.  The most recent version of that library
+and tools set is freely available on the Internet from anonymous ftp
+server <A
+HREF="ftp://ftp.informatik.uni-erlangen.de">ftp.informatik.uni-erlangen.de</A>
+in directory pub/doc/ISO/JBIG/.
+
+<P><B>pnmtojbig</B> is part of the Netpbm package of graphics tools.
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="jbigtopnm.html">jbigtopnm</A></B>
+
+<A NAME="lbAJ">&nbsp;</A>
+<H2>LICENSE</H2>
+
+If you use <B>pnmtojbig</B>, you are using various patents,
+particularly on its arithmetic encoding method, and in all probability
+you do not have a license from the patent owners to do so.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">FORMATS</A>
+<LI><A HREF="#lbAG">STANDARDS</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+<LI><A HREF="#lbAI">SEE ALSO</A>
+<LI><A HREF="#lbAJ">LICENSE</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtojpeg.html b/pnmtojpeg.html
new file mode 100644
index 00000000..656fc28e
--- /dev/null
+++ b/pnmtojpeg.html
@@ -0,0 +1,534 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtojpeg User Manual</TITLE></HEAD>
+<BODY>
+<H1>PNMTOJPEG</H1>
+Updated: 27 September 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pnmtojpeg - convert PNM image to a JFIF (&quot;JPEG&quot;) image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmtojpeg</B>
+[<B>-exif=</B><I>filespec</I>]
+[<B>-quality=</B><I>n</I>]
+[{<B>-grayscale</B>|<B>-greyscale</B>}]
+[<B>-density=</B><I>n</I><b>x</b><i>n</i>[<b>dpi</b>,<b>dpcm</b>]]
+[<B>-optimize</B>|<b>-optimise</b>]
+[<B>-rgb</B>]
+[<B>-progressive</B>]
+[<B>-comment=</B><I>text</I>]
+[<B>-dct=</b>{<b>int</B>|<b>fast</b>|<b>float</b>}]
+[<B>-arithmetic</b>]
+[<B>-restart=</B><I>n</I>]
+[<B>-smooth=</B><I>n</I>]
+[<B>-maxmemory=</B><I>n</I>]
+[<B>-verbose</B>]
+[<B>-baseline</B>]
+[<B>-qtables=</B><I>filespec</I>]
+[<B>-qslots=n[,...]</B>]
+[<B>-sample=</B><I>H</i><b>x</b><i>V</i>[,...]]
+[<B>-scans=</B><I>filespec</I>]
+[<B>-tracelevel=</b><i>N</i>]
+
+<I>filename</I>
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>pnmtojpeg</B> converts the named PBM, PGM, or PPM image file, or
+the standard input if no file is named, to a JFIF file on the standard
+output.
+
+<P><B>pnmtojpeg</B> uses the Independent JPEG Group's JPEG library to
+create the output file.  See <B><A
+HREF="http://www.ijg.org">http://www.ijg.org</A> </B> for information
+on the library.
+
+<P>&quot;JFIF&quot; is the correct name for the image format commonly
+known as &quot;JPEG.&quot; Strictly speaking, JPEG is a method of
+compression.  The image format using JPEG compression that is by far
+the most common is JFIF.  There is also a subformat of TIFF that uses
+JPEG compression.
+
+<P>EXIF is an image format that is a subformat of JFIF (to wit, a JFIF
+file that contains an EXIF header as an APP1 marker).
+<B>pnmtojpeg</B> creates an EXIF image when you specify the
+<B>-exif</B> option.
+
+<H2 id="options">OPTIONS</H2>
+
+<p>The basic options are:
+
+<DL COMPACT>
+<DT><B>-exif=</B><I>filespec</I>
+
+<DD>
+This option specifies that the output image is to be EXIF (a subformat
+of JFIF), i.e. it will have an EXIF header as a JFIF APP1 marker.
+The contents of that marker are the contents of the specified file.
+The special value <B>-</B> 
+means to read the EXIF header contents from standard input.  It is
+invalid to specify standard input for both the EXIF header and the
+input image.
+<P>
+The EXIF file starts with a two byte field which is the length of
+the file, including the length field, in pure binary, most significant
+byte first.  The special value of zero for the length field means there
+is to be no EXIF header, i.e. the same as no <B>-exif</B>
+option.  This is useful for when you convert a file from JFIF to PNM
+using <B>jpegtopnm</B>,
+then transform it, then convert it back to JFIF with
+<B>pnmtojpeg</B>, and you don't know whether or not it includes an EXIF header.
+<B>jpegtopnm</B>
+creates an EXIF file containing nothing but two bytes of zero when
+the input JFIF file has no EXIF header.  Thus, you can transfer
+any EXIF header from the input JFIF to the output JFIF without
+worrying about whether an EXIF header actually exists.
+<P>
+The contents of the EXIF file after the length field are the exact
+byte for byte contents of the APP1 marker, not counting the length
+field, that constitutes the EXIF header.
+
+<DT><B>-quality=</B><I>n</I>
+
+<DD>Scale quantization tables to adjust image quality.  <I>n</I> is 0
+(worst) to 100 (best); default is 75.  Below about 25 can produce images
+some interpreters won't be able to interpret.  See below for more info.
+
+<DT><B>-grayscale</B>
+<DT><B>-greyscale</B>
+<dt><b>-rgb</b>
+
+<dd>These options determine the color space used in the JFIF output.
+<b>-grayscale</b> (or <b>-greyscale</b>) means to create a gray scale
+JFIF, converting from color PPM input if necessary.  <b>-rgb</b> means to
+create an RGB JFIF, and the program fails if the input is not PPM.
+
+<p>If you specify neither, The output file is in YCbCr format if the
+input is PPM, and grayscale format if the input is PBM or PGM.
+
+<p>YCbCr format (a color is represented by an intensity value and two
+chrominance values) usually compresses much better than RGB (a color
+is represented by one red, one green, and one blue value).  RGB is
+rare.  But you may be able to convert between JFIF and PPM faster with
+RGB, since it's the same color space PPM uses.
+
+<p>The <b>testimg.ppm</b> file that comes with Netpbm is 2.3 times
+larger with the <b>-rgb</b> option that with the YCbCr default, and in
+one experiment <b>pnmtojpeg</b> took 16% more CPU time to convert it.
+The extra CPU time probably indicates that processing of all the extra
+compressed data consumed all the CPU time saved by not having to
+convert the RGB inputs to YCbCr.
+
+<P>Grayscale format takes up a lot less space and takes less time to create
+and process than the color formats, even if the image contains nothing
+but black, white, and gray.
+
+<p>The <b>-rgb</b> option was added in Netpbm 10.11 in October 2002.
+
+<dt><b>-density=</b><i>density</i>
+
+<dd>This option determines the density (aka resolution) information
+recorded in the JFIF output image.  It does not affect the raster in
+any way; it just tells whoever reads the JFIF how to interpret the
+raster.
+
+<p>The density value takes the form <i>x</i><b>x</b><i>y</i> followed
+by an optional unit specifier of <b>dpi</b> or <b>dpcm</b>.  Examples:
+<b>1x1</b>, <b>3x2</b>, <b>300x300dpi</b>, <b>100x200dpcm</b>.  The
+first number is the horizontal density; the 2nd number is the vertical
+density.  Each may be any integer from 1 to 65535.  The unit specifier
+is <b>dpi</b> for dots per inch or <b>dpcm</b> for dots per
+centimeter.  If you don't specify the units, the density information
+goes into the JFIF explicitly stating "density unspecified" (also
+interpreted as "unknown").  This may seem pointless, but note that
+even without specifying the units, the density numbers tell the aspect
+ratio of the pixels.  E.g. <b>1x1</b> tells you the pixels are square.
+<b>3x2</b> tells you the pixels are vertical rectangles.
+
+<p>Note that if you specify different horizontal and vertical
+densities, the resulting JFIF image is <em>not</em> a true
+representation of the input PNM image, because <b>pnmtojpeg</b>
+converts the raster pixel-for-pixel and the pixels of a PNM image are
+defined to be square.  Thus, if you start with a square PNM image and
+specify <b>-density=3x2</b>, the resulting JFIF image is a horizontally
+squashed version of the original.  However, it is common to use an
+input image which is a slight variation on PNM rather than true PNM
+such that the pixels are not square.  In that case, the appropriate
+-density option yields a faithful reproduction of the input pseudo-PNM
+image.
+
+<p>The default is 1x1 in unspecified units.
+
+<p>Before Netpbm 10.15 (April 2003), this option did not exist and the
+<b>pnmtojpeg</b> always created a JFIF with a density of 1x1 in
+unspecified units.
+
+<DT><B>-optimize</B>
+
+<DD> Perform optimization of entropy encoding parameters.  Without
+this, <B>pnmtojpeg</B> uses default encoding parameters.
+<B>-optimize</B> usually makes the JFIF file a little smaller, but
+<B>pnmtojpeg</B> runs somewhat slower and needs much more memory.
+Image quality and speed of decompression are unaffected by
+<B>-optimize</B>.
+
+<DT><B>-progressive</B>
+
+<DD>
+Create a progressive JPEG file (see below).
+<DT><B>-comment=</B><I>text</I>
+
+<DD>
+Include a comment marker in the JFIF output, with comment text 
+<I>text</I>.
+
+Without this option, there are no comment markers in the output.
+
+</DL>
+
+<P>The <B>-quality</B> option lets you trade off compressed file size
+against quality of the reconstructed image: the higher the quality
+setting, the larger the JFIF file, and the closer the output image
+will be to the original input.  Normally you want to use the lowest
+quality setting (smallest file) that decompresses into something
+visually indistinguishable from the original image.  For this purpose
+the quality setting should be between 50 and 95 for reasonable
+results; the default of 75 is often about right.  If you see defects
+at <B>-quality=75</B>, then go up 5 or 10 counts at a time until you
+are happy with the output image.  (The optimal setting will vary from
+one image to another.)
+
+<p><B>-quality=100</B> generates a quantization table of all 1's,
+minimizing loss in the quantization step (but there is still
+information loss in subsampling, as well as roundoff error).  This
+setting is mainly of interest for experimental purposes.  Quality
+values above about 95 are <em>not</em> recommended for normal use; the
+compressed file size goes up dramatically for hardly any gain in
+output image quality.
+
+<P>In the other direction, quality values below 50 will produce very
+small files of low image quality.  Settings around 5 to 10 might be
+useful in preparing an index of a large image library, for example.
+Try <B>-quality=2</B> (or so) for some amusing Cubist effects.  (Note:
+quality values below about 25 generate 2-byte quantization tables,
+which are considered optional in the JFIF standard.  <B>pnmtojpeg</B>
+emits a warning message when you give such a quality value, because
+some other JFIF programs may be unable to decode the resulting file.
+Use <B>-baseline</B> if you need to ensure compatibility at low
+quality values.)
+
+<P>The <B>-progressive</B> option creates a &quot;progressive
+JPEG&quot; file.  In this type of JFIF file, the data is stored in
+multiple scans of increasing quality.  If the file is being
+transmitted over a slow communications link, the decoder can use the
+first scan to display a low-quality image very quickly, and can then
+improve the display with each subsequent scan.  The final image is
+exactly equivalent to a standard JFIF file of the same quality
+setting, and the total file size is about the same -- often a little
+smaller.
+
+<p><strong>Caution:</strong> progressive JPEG is not yet widely
+implemented, so many decoders will be unable to view a progressive
+JPEG file at all.
+
+<p>If you're trying to control the quality/file size tradeoff, you
+might consider the JPEG2000 format instead.  See <a
+href="pamtojpeg2k.html">pamtojpeg2k</a>.
+
+<p>Options for advanced users:
+<DL COMPACT>
+
+<DT><B>-dct=int</B>
+
+<DD>Use integer DCT method (default).
+
+<DT><B>-dct=fast</B>
+
+<DD>Use fast integer DCT (less accurate).
+
+<DT><B>-dct=float</B>
+
+<DD>Use floating-point DCT method.  The float method is very slightly
+more accurate than the int method, but is much slower unless your
+machine has very fast floating-point hardware.  Also note that results
+of the floating-point method may vary slightly across machines, while
+the integer methods should give the same results everywhere.  The fast
+integer method is much less accurate than the other two.
+
+<DT><B>-arithmetic</b>
+<dd>Use arithmetic coding.  Default is Huffman encoding.  Arithmetic coding
+tends to get you a smaller result.
+
+<p>You may need patent licenses to use this option.  According to 
+<a href="http://www.faqs.org/faqs/jpeg-faq">the JPEG FAQ</a>,
+This method is covered by patents owned by IBM, AT&amp;T, and Mitsubishi.
+
+<p>The author of the FAQ recommends against using arithmetic coding (and
+therefore this option) because the space savings is not great enough to
+justify the legal hassles.
+     
+<DT><B>-restart=</B><I>n</I>
+
+<DD>
+Emit a JPEG restart marker every <I>n</I> MCU rows, or every <I>n</I>
+MCU blocks if you append <B>B</B> to the number.  <B>-restart 0</B>
+(the default) means no restart markers.
+
+<DT><B>-smooth=</B><I>n</I>
+
+<DD>
+Smooth the input image to eliminate dithering noise.  <I>n</I>,
+ranging from 1 to 100, indicates the strength of smoothing.  0 (the
+default) means no smoothing.
+
+<DT><B>-maxmemory=</B><I>n</I>
+
+<DD>
+Set a limit for amount of memory to use in processing large images.  Value is
+in thousands of bytes, or millions of bytes if you append
+<B>M</B> to the number.  For example, <B>-max=4m</B>
+selects 4,000,000 bytes.  If <B>pnmtojpeg</B>
+needs more space, it will use temporary files.
+
+<DT><B>-verbose</B>
+
+<DD>
+Print to the Standard Error file messages about the conversion process.
+This can be helpful in debugging problems.
+</DL>
+
+<P>The <B>-restart</B> option tells <B>pnmtojpeg </B> to insert extra
+markers that allow a JPEG decoder to resynchronize after a
+transmission error.  Without restart markers, any damage to a
+compressed file will usually ruin the image from the point of the
+error to the end of the image; with restart markers, the damage is
+usually confined to the portion of the image up to the next restart
+marker.  Of course, the restart markers occupy extra space.  We
+recommend <B>-restart=1</B> for images that will be transmitted
+across unreliable networks such as Usenet.
+
+<P>The <B>-smooth</B> option filters the input to eliminate
+fine-scale noise.  This is often useful when converting dithered
+images to JFIF: a moderate smoothing factor of 10 to 50 gets rid of
+dithering patterns in the input file, resulting in a smaller JFIF file
+and a better-looking image.  Too large a smoothing factor will visibly
+blur the image, however.
+
+<P>Options for wizards:
+
+<DL COMPACT>
+<DT><B>-baseline</B>
+
+<DD>Force baseline-compatible quantization tables to be generated.
+This clamps quantization values to 8 bits even at low quality
+settings.  (This switch is poorly named, since it does not ensure that
+the output is actually baseline JPEG.  For example, you can use
+<B>-baseline</B> and <B>-progressive</B> together.)
+
+<DT><B>-qtables=</B><I>filespec</I>
+
+<DD>Use the quantization tables given in the specified text file.
+
+<DT><B>-qslots=n[,...]</B>
+
+<DD>Select which quantization table to use for each color component.
+
+<DT><B>-sample=</B><I>H</i><b>x</b><i>V</i>[,...]
+
+<DD>Set JPEG sampling factors for each color component.
+
+<DT><B>-scans=</B><I>filespec</I>
+
+<DD>Use the scan script given in the specified text file.  See below
+for information on scan scripts.
+
+<DT><B>-tracelevel=</B><I>N</I>
+
+<DD>This sets the level of debug tracing the program outputs as it runs.
+0 means none, and is the default.  This level primarily controls tracing
+of the JPEG library, and you can get some pretty interesting information
+about the compression process.
+
+</DL>
+
+<P>The &quot;wizard&quot; options are intended for experimentation
+with JPEG.  If you don't know what you are doing, <strong>don't use
+them</strong>.  These switches are documented further in the file
+wizard.doc that comes with the Independent JPEG Group's JPEG library.
+
+<H2 id="examples">EXAMPLES</H2>
+
+<P>This example compresses the PPM file foo.ppm with a quality factor
+of 60 and saves the output as foo.jpg:
+
+<pre>
+    <B>pnmtojpeg -quality=60 foo.ppm &gt; foo.jpg</B>
+</pre>
+
+<p>Here's a more typical example.  It converts from BMP to JFIF:
+
+<pre>
+    <B>cat foo.bmp | bmptoppm | pnmtojpeg &gt; foo.jpg</B>
+</pre>
+
+<h2 id="loss">JPEG Loss</h2>
+
+<p>When you compress with JPEG, you lose information -- i.e. the resulting
+image has somewhat lower quality than the original.  This is a characteristic
+of JPEG itself, not any particular program.  So if you do the usual 
+Netpbm thing and convert from JFIF to PNM, manipulate, then convert back
+to JFIF, you will lose quality.  The more you do it, the more you lose.
+Drawings (charts, cartoons, line drawings, and such with few colors
+and sharp edges) suffer the most.
+
+<P>To avoid this, you can use a compressed image format other than
+JPEG.  PNG and JPEG2000 are good choices, and Netpbm contains converters
+for those.
+
+<p>If you need to use JFIF on a drawing, you should experiment with
+<B>pnmtojpeg</B>'s <B>-quality</B> and <B>-smooth</B> options to get a
+satisfactory conversion.  <B>-smooth 10</B> or so is often helpful.
+
+<P>Because of the loss, you should do all the manipulation you have to
+do on the image in some other format and convert to JFIF as the last
+step.  And if you can keep a copy in the original format, so much the
+better.
+
+The <B>-optimize</B> option to <B>pnmtojpeg</B> is worth using when
+you are making a &quot;final&quot; version for posting or archiving.
+It's also a win when you are using low quality settings to make very
+small JFIF files; the percentage improvement is often a lot more than
+it is on larger files.  (At present, <B>-optimize</B> mode is
+automatically in effect when you generate a progressive JPEG file).
+
+<p>You can do flipping and rotating transformations losslessly with
+the program <b>jpegtran</b>, which is packaged with the Independent
+Jpeg Group's JPEG library.  <b>jpegtran</b> exercises its intimate
+knowledge of the way JPEG works to do the transformation without ever
+actually decompressing the image.
+
+<h2 id="otherprog"></h2>
+
+<P>Another program, <B>cjpeg</B>, is similar.  <B>cjpeg</B> is
+maintained by the Independent JPEG Group and packaged with the JPEG
+library which <B>pnmtojpeg</B> uses for all its JPEG work.  Because of
+that, you may expect it to exploit more current JPEG features.  Also,
+since you have to have the library to run <B>pnmtojpeg</B>, but not
+vice versa, <B>cjpeg</B> may be more commonly available.
+
+<p>On the other hand, <B>cjpeg</B> does not use the NetPBM libraries
+to process its input, as all the NetPBM tools such as <B>pnmtojpeg</B>
+do.  This means it is less likely to be consistent with all the other
+programs that deal with the NetPBM formats.  Also, the command syntax
+of <B>pnmtojpeg</B> is consistent with that of the other Netpbm tools,
+unlike <B>cjpeg</B>.
+
+<H2 id="scanscripts">SCAN SCRIPTS</H2>
+
+<P>Use the <B>-scan</B> option to specify a scan script.  Or use the
+<B>-progressive</B> option to specify a particular built-in scan
+script.
+
+<P>Just what a scan script is, and the basic format of the scan script
+file, is covered in the <B>wizard.doc</B> file that comes with the
+Independent JPEG Group's JPEG library.  Scan scripts are same for
+<B>pnmtojpeg</B> as the are for <B>cjpeg</B>.
+
+<P>This section contains additional information that isn't, but
+probably should be, in that document.
+
+<P>First, there are many restrictions on what is a valid scan script.
+The JPEG library, and thus <B>pnmtojpeg</B>, checks thoroughly for any
+lack of compliance with these restrictions, but does little to tell
+you how the script fails to comply.  The messages are very general and
+sometimes untrue.
+
+<P>
+To start with, the entries for the DC coefficient must come before any
+entries for the AC coefficients.  The DC coefficient is Coefficient 0;
+all the other coefficients are AC coefficients.  So in an entry for
+the DC coefficient, the two numbers after the colon must be 0 and 0.
+In an entry for AC coefficients, the first number after the colon must
+not be 0.
+<P>
+In a DC entry, the color components must be in increasing order.
+E.g. &quot;0,2,1&quot; before the colon is wrong.  So is &quot;0,0,0&quot;.
+<P>
+In an entry for an AC coeffient, you must specify only one color
+component.  I.e. there can be only one number before the colon.
+<P>
+In the first entry for a particular coefficient for a particular color
+component, the &quot;Ah&quot; value must be zero, but the Al value can be any
+valid bit number.  In subsequent entries, Ah must be the Al value from
+the previous entry (for that coefficient for that color component),
+and the Al value must be one less than the Ah value.
+<P>
+The script must ultimately specify at least some of the DC coefficent
+for every color component.  Otherwise, you get the error message
+&quot;Script does not transmit all the data.&quot;  You need not specify all of
+the bits of the DC coefficient, or any of the AC coefficients.
+<P>
+There is a standard option in building the JPEG library to omit scan
+script capability.  If for some reason your library was built with
+this option, you get the message &quot;Requested feature was omitted at
+compile time.&quot;
+
+<H2 id="environment">ENVIRONMENT</H2>
+
+<DL COMPACT>
+<DT><B>JPEGMEM</B>
+
+<DD>If this environment variable is set, its value is the default
+memory limit.  The value is specified as described for the
+<B>-maxmemory</B> option.  An explicit <B>-maxmemory </B> option
+overrides any <B>JPEGMEM</B>.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="jpegtopnm.html">jpegtopnm</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>,
+<B>cjpeg</B> man page,
+<B>djpeg</b> man page,
+<B>jpegtran</B> man page,
+<B>rdjpgcom</B> man page,
+<B>wrjpgcom</B> man page
+
+<p>Wallace, Gregory K.  &quot;The JPEG Still Picture Compression
+Standard&quot;, Communications of the ACM, April 1991 (vol. 34,
+no. 4), pp. 30-44.
+
+
+<H2 id="author">AUTHOR</H2>
+
+<B>pnmtojpeg</B> and this manual were derived in large part from
+<B>cjpeg</B>, by the Independent JPEG Group.  The program is otherwise
+by Bryan Henderson on March 07, 2000.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#loss">JPEG LOSS</A>
+<LI><A HREF="#otherprog">OTHER PROGRAMS</A>
+<LI><A HREF="#scanscripts">SCAN SCRIPTS</A>
+<LI><A HREF="#environment">ENVIRONMENT</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtopalm.html b/pnmtopalm.html
new file mode 100644
index 00000000..74878386
--- /dev/null
+++ b/pnmtopalm.html
@@ -0,0 +1,313 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtopalm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtopalm</H1>
+Updated: 05 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pnmtopalm - convert a PNM image to a Palm Bitmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtopalm</B>
+
+[<B>-verbose</B>]
+
+[<B>-depth=</B><I>N</I>]
+
+[<B>-maxdepth=</B><I>N</I>]
+
+[<B>-colormap</B>]
+
+[<B>-transparent=</B><I>color</I>]
+
+[<B>-density=</B><i>N</i>]
+
+[<B>-offset</B>]
+
+[<B>-withdummy</B>]
+
+<BR>
+
+[<B>-scanline-compression</B> | <B>-rle-compression</B> |
+<B>-packbits-compression</B>]
+
+[<I>pnmfile</I>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtopalm</b> reads a PNM image as input, from Standard Input or
+<I>pnmfile</I> and produces a Palm Bitmap as output.
+
+<P>Palm Bitmap files are either grayscale files 1, 2, or 4 bits wide,
+or color files 8 bits wide, so <B>pnmtopalm</B> automatically scales
+colors to have an appropriate maxval, unless you specify a depth or
+max depth.  Input files must have an appropriate number and set of
+colors for the selected output constraints.
+
+<p>This often means that you should run the PNM image through
+<B>pnmquant</B> or <b>pnmremap</b> before you pass it to
+<B>pnmtopalm</B>.  Netpbm comes with several colormap files you can
+use with <B>pnmremap</B> for this purpose.  They are
+<i>palmgray2.map</i> (4 shades of gray for a depth of 2),
+<i>palmgray4.map</i> (16 shades of gray for a depth of 4), and
+<i>palmcolor8.map</i> (232 colors in default Palm colormap).  In a
+standard Netpbm installation, these are in the Netpbm data directory,
+and you can find the Netpbm data directory with a <b>netpbm-config
+--datadir</b> shell command.
+
+<p>Example:
+
+<pre>
+  pnmremap myimage.ppm \
+           -mapfile=$(netpbm-config --datadir)/palmgray2.map \
+  | pnmtopalm -depth=2 &gt;myimage.palm
+
+</pre>
+
+
+<h3 id="version">Palm Bitmap Version</h3>
+
+<p><b>pnmtopalm</b> generates a Version 0, 1, 2, or 3 Palm Bitmap.
+It generates the oldest (lowest) version it can for the given image and
+the options you specify.
+
+<ul>
+<li>If you specify a density (<b>-density</b> option) higher than
+&quot;low,&quot; the version is at least 3.
+
+<li>If you specify transparency (<b>-transparent</b> option) or 
+any compression, the version is at least 2.
+
+<li>If you specify a custom colormap (<b>-colormap</b> option), the
+verison is at least 1.
+
+<li>If the image has more than one bit per pixel, the version is at least
+1.  The image has more than one bit per pixel if you specify it with
+<b>-depth</b> or if you let it default and the image has more than
+two colors (or shades of gray).
+
+</ul>
+
+<p>All releases of Palm OS can read a Version 0 bitmap.  Palm OS 3.0 and
+later can read a Version 1 bitmap.  Palm OS 3.5 and later can read a
+Version 2 bitmap.  To read a Version 3 bitmap, you need Palm OS Garnet
+or a handheld running the High Density Display Feature Set.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-verbose</B>
+<DD>
+Display the format of the output file.
+
+<DT><B>-depth=</B><I>N</I>
+<DD>
+Produce a file of depth <I>N</I>, where <I>N</I> must be either 1, 2,
+4, 8, or 16.  Because the default Palm 8-bit colormap is not
+grayscale, if the input is a grayscale or monochrome image, the
+output will never be more than 4 bits deep, regardless of the
+specified depth.  Note that 8-bit color works only in PalmOS 3.5 (and
+higher), and 16-bit direct color works only in PalmOS 4.0 (and
+higher).  However, the 16-bit direct color format is also compatible
+with the various PalmOS 3.x versions used in the Handspring Visor, so
+these images may also work in that device.
+
+<DT><B>-maxdepth=</B><I>N</I>
+<DD>
+Produce a file of minimal depth, but in any case less than <I>N</I>
+bits wide.  If you specify 16-bit, the output will always be 16-bit
+direct color.
+
+<DT><B>-offset</B>
+<DD>
+Set the <B>nextDepthOffset</B> field in the palm file header to indicate
+the end of the file (and pad the end of the file to 4 bytes, since
+<b>nextDepthOffset</b> can point only to 4 byte boundaries).
+
+<p>A palm image file can contain multiple renditions of the same image,
+with different color depths, so a viewer can choose one appropriate for
+the display.  The <b>nextDepthOffset</b> field tells where in the stream
+the next rendition begins.
+
+<p><b>pnmtopalm</b> creates a file that contains only one image, but
+you can separately concatenate multiple one-image files to create a
+multi-image file.  If you do that, you'll need to use <b>-offset</b>
+so that the resulting concatenation is a correct stream.
+
+<p>By default (if you don't specify <b>-offset</b>), <b>pnmtopalm</b>
+generates a <b>nextDepthOffset</b> field that says there is no following
+image (and does not add any padding after the image).
+
+<p>Version 3 Palm Bitmaps actually have a <b>nextBitmapOffset</b>
+field instead of the <b>nextDepthOffset</b>.  The foregoing applies to
+whichever is relevant.
+
+<p>The <b>-offset</b> option was new in Netpbm 10.26 (January 2005).
+Before that, <b>pnmtopalm</b> always set the <b>nextDepthOffset</b>
+field to &quot;none.&quot;
+
+<p>Before Netpbm 10.27 (March 2005), you cannot use <b>-offset</b> if
+you create a compressed raster (because <b>pnmtopalm</b> isn't smart
+enough to be able to know the size of the image at the time it writes
+the header).  You also cannot use it with 16 bit color depth or with
+the <b>-colormap</b> option, for much the same reason.
+
+<dt><b>-withdummy</b>
+<dd>
+This option tells <b>pnmtopalm</b> to put in the stream, after after
+the image, a dummy image header to introduce subsequent high density
+images.
+
+<p>This dummy image header is a special sequence specified in Palm Bitmap
+specifications.  It looks to an older Palm Bitmap interpreter like an invalid
+image header, so such an intepreter will stop reading the stream
+there.  But a new Palm Bitmap interpreter recognizes it for what it is (just
+something to choke an old interpreter) and skips over it.  Presumably,
+you will add to the stream after this high density images which would
+confuse an older interpreter.
+
+<p>If you specify <b>-withdummy</b>, you must also specify <b>-offset</b>,
+since it doesn't make any sense otherwise.
+
+<p><b>-withdummy</b> was new in Netpbm 10.27 (March 2005).
+
+<DT><B>-colormap</B>
+<DD>
+Build a custom colormap and include it in the output file.  This is
+not recommended by Palm, for efficiency reasons.  Otherwise, <B>pnmtopalm</B>
+uses the default Palm colormap for color output.
+
+<DT><B>-transparent=</B><I>color</I>
+
+<DD>
+
+Marks <EM>one</EM> particular color as fully transparent.  The format
+to specify the color is either (when for example orange)
+&quot;1.0,0.5,0.0&quot;, where the values are floats between zero and
+one, or with the syntax &quot;#RGB&quot;, &quot;#RRGGBB&quot; or
+&quot;#RRRRGGGGBBBB&quot; where R, G and B are hexadecimal numbers.
+Transparency works only on Palm OS 3.5 and higher.
+
+<DT><B>-scanline-compression</B>
+<DD>
+Specifies that the output Palm bitmap will use the Palm scanline
+compression scheme.  Scanline compression works only in Palm OS 2.0
+and higher.
+
+<DT><B>-rle-compression</B>
+<DD>
+Specifies that the output Palm bitmap will use the Palm RLE
+compression scheme.  RLE compression works only with Palm OS 3.5 and
+higher.
+
+<DT><B>-packbits-compression</B>
+<DD>
+Specifies that the output Palm bitmap will use the Palm packbits
+compression scheme.  Packbits compression works only with Palm OS 4.0 and
+higher.
+
+<p>This option was new in Netpbm 10.27 (March 2005).
+
+<dt><b>-density</b>=<i>N</i>
+<dd>
+This specifies the Palm Bitmap density.  The density is a number that
+is proportional to the resolution the image should have when displayed.
+The proportionality factor is up to whatever is doing the displaying,
+but it's helpful to think of these numbers as being pixels per inch.
+The allowable values are:
+
+<ul>
+<li>72
+<li>108
+<li>144
+<li>216
+<li>288
+</ul>
+
+<p>This option was new in Netpbm 10.27 (March 2005).  Earlier Netpbm
+could not generate Version 3 Palm Bitmaps, so there was no such thing
+as density.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="palmtopnm.html">palmtopnm</A></B>,
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="pnmremap.html">pnmremap</A></B>,
+<A HREF="pnm.html">pnm</A>,
+<a
+href="http://www.palmos.com/dev/support/docs/palmos/PalmOSReference/Bitmap.html">PalmOS
+Reference</a>,
+
+<a
+href="http://www.palmos.com/dev/support/docs/palmos/PalmOSCompanion/UserInterface.html#1010236">PalmOS
+Companion</a>.
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>NOTES</H2>
+
+<P>Palm Bitmaps may contains multiple renditions of the same bitmap,
+in different depths.  To construct an N-multiple-rendition Palm Bitmap
+with <B>pnmtopalm</B>, first construct renditions 1 through N-1 using
+the <B>-offset</B> option, then construct the Nth image without the
+<B>-offset</B> option.  Then concatenate the individual renditions
+together in a single file using <B>cat</B>.
+
+<p>If you will include both high density and low density renditions,
+put the high density images last and when you create the last of the
+low density images, use the <b>-withdummy</b> option.
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+<P>You cannot generate an alpha mask if the Palm pixmap has a
+transparent color.  However, you can still do this with
+<B>ppmcolormask</B> with a Netpbm pipe similar to:
+
+<P>
+<B>palmtopnm pixmap.palm | ppmcolormask `palmtopnm -transparent pixmap.palm`</B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+This program was originally written as ppmtoTbmp.c, by Ian Goldberg
+and George Caswell.  It was completely re-written by Bill Janssen to
+add color, compression, and transparency function.
+<BR>
+
+Copyright 1995-2001 by Ian Goldberg, George Caswell, and Bill Janssen.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#version">PALM BITMAP VERSION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">NOTES</A>
+<LI><A HREF="#limitations">NOTES</A>
+<LI><A HREF="#lbAH">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtopclxl.html b/pnmtopclxl.html
new file mode 100644
index 00000000..1516d508
--- /dev/null
+++ b/pnmtopclxl.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtopclxl User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtopclxl</H1>
+Updated: 20 July 2005
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pnmtopclxl - convert a PNM image to an HP LaserJet PCL XL printer stream
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtopclxl</b>
+[<b>-dpi</b> <i>N</i>]
+[<b>-xoffs</b> <i>N</i>]
+[<b>-yoffs</b> <i>N</i>]
+[<b>-center</b>]
+[<b>-duplex</b> {<b>vertical</b>|<b>horizontal</b>}]
+[<b>-format</b> <i>paperformat</i>]
+[<b>-feeder</b> <i>N</i>]
+[<b>-copies</b> <i>N</i>]
+[<b>-colorok</b>]
+[<b>-rendergray</b>]
+[<b>-jobsetup=</b><i>filename</i>]
+<i>pnmfile1</i> <i>pnmfile2</i> ...
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>pnmtopclxl</b> reads one or more PNM input streams, each containing one
+or more PNM images, and generates a sequence of output pages in the
+HP PCL-XL (formerly named PCL 6) printer control language.  You can send
+this stream to a PCL-XL printer to print the images.
+
+<p>If the input is PPM, the output is a color printer stream (the PCL
+color space is RGB).  Otherwise, the output is grayscale (the PCL color space
+is grayscale).  If you want a grayscale output from a color input, run your
+input through <b><a href="ppmtopgm.html">ppmtopgm</a></b>.  See the 
+<b>-colorok</b> option for more information about choosing between color
+and grayscale.
+
+<p>The output goes to Standard Output.  All of the pages go to one
+file, concatenated in the same order as the input images.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<dt><b>-dpi</b> <i>N</i>
+<dd>This option selects the resolution of the image (not the printer!).
+<i>N</i> is the resolution in dots per inch, from 1 to 65535.  The default
+is 300.
+
+<dt><b>-xoffs</b> <i>N</i>
+<dd>This option and <b>-yoffs</b> determine the location on the page of the
+upper left corner of each image.  Note that the image may have built in
+borders tool, which would make the main image within more left and down 
+that what you specify here.
+
+<p><b>-xoffs</b> and <b>-yoffs</b> specify the distance from the left of the
+page and from the top of the page, respectively, in inches, of the upper left
+corner of the image.  The default for each is zero.
+
+<p>These options are meaningless if you specify <b>-center</b>.
+
+<dt><b>-yoffs</b> <i>N</i>
+<dd>See <b>-xoffs</b>.
+
+<dt><b>-center</b>
+<dd>This option tells <b>pnmtopclxl</b> to center each image on the page.
+If you don't specify this option, the position of an image on the page is
+determined by <b>-xoffs</b> and <b>-yoffs</b> (or their defaults).
+
+<dt><b>-duplex</b> {<b>vertical</b>|<b>horizontal</b>} <dd>This option
+causes <b>pnmtopclxl</b> to create a printer stream that prints pages
+on boths sides of the sheet of paper.  <b>vertical</b> means to print
+them so that the left edge of both pages is on the same edge of the
+sheet, while <b>horizontal</b> means the more usual duplexing where the
+top of both pages is on the same edge of the sheet.
+
+<dt><b>-format</b> <i>paperformat</i>
+<dd>This option selects the media (e.g. paper size) that the printer
+control stream specifies.  <i>paperformat</i> is one of the following
+self-explanatory keywords:
+
+<ul>
+<li>letter
+<li>legal
+<li>a3
+<li>a4
+<li>a5
+<li>a6
+<li>jb4
+<li>jb5
+<li>jb6
+<li>exec
+<li>ledger
+<li>b5envelope
+<li>c5envelope
+<li>com10envelope
+<li>monarchenvelope
+<li>dlenvelope
+<li>jpostcard
+<li>jdoublepostcard
+</ul>
+
+<p>The default is "letter".
+
+<dt><b>-feeder</b> <i>N</i>
+<dd>This options selects the media source (e.g. paper tray) that the
+printer control stream specifies.
+
+<dt><b>-copies</b> <i>N</i>
+<dd>This option specifies the number of copies that the printer control
+stream tells the printer to print.
+
+<dt><b>-colorok</b>
+<dd>This option simply tells <b>pnmtopclxl</b> not to warn you if you supply
+a color input and therefore get color output.  By default, <b>pnmtopclxl</b>
+issues a warning any time it produces a color printer stream because it is
+usually a mistake.  It's a mistake because PCL XL is mainly used for laser
+printers, and laser printers are mainly black and white.  If you send a color
+print stream to a black and white printer, it typically refuses to print
+anything, and even if it manages to convert it to black and white and print
+it, it takes 3 times as long to transmit a color stream to the printer than
+to transmit the grayscale image that gives the same result.
+
+<dt><b>-rendergray</b>
+
+<dd>This option causes <b>pnmtopclxl</b> to include in the output
+stream a command to set the RENDERMODE environment variable to
+GRAYSCALE, which typically causes the printer to print in grayscale
+regardless of the colors in the input, and may cause it to run much
+faster even if the image is grayscale anyway.
+
+<p>This option was new in Netpbm 10.29 (August 2005).
+
+<dt><b>-jobsetup=</b><i>filename</i>
+
+<dd>This option causes <b>pnmtopclxl</b> to include arbitary job setup
+PJL commands at the beginning of the output stream.  It reads them from
+the named file.
+
+<p><b>pnmtopclxl</b> does not inspect these commands in any way, but it
+does expect them to be job setup commands.  If you have garbage in your
+file, you will hear from the printer.
+
+<p>This option was new in Netpbm 10.29 (August 2005).
+
+</DL>
+
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<a href="ppmtolj.html"><b>ppmtolj</b></a>,
+<a href="pbmtolj.html"><b>pbmtolj</b></a>,
+<a href="ppmtopj.html"><b>ppmtopj</b></a>,
+<a href="ppmtopjxl.html"><b>ppmtopjxl</b></a>,
+<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>,
+<a href="ppm.html"><b>ppm</b></a>
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p><b>pnmtopclxl</b> was added to Netpbm in Release 10.6 (July 2002).
+It was contributed by
+<a href="mailto:cip307@cip.physik.uni-wuerzburg.de">Jochen Karrer</a>.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtoplainpnm.html b/pnmtoplainpnm.html
new file mode 100644
index 00000000..a0515513
--- /dev/null
+++ b/pnmtoplainpnm.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Pnmtoplainpnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtoplainpnm</H1>
+Updated: July 2004
+<BR>
+<H2>NAME</H2>
+<B>pnmtoplainpnm</B> - replaced by pnmtopnm
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>pnmtoplainpnm</b> was obsoleted in Netpbm 10.23 (July 2004) by <b><a
+href="pnmtopnm.html">pnmtopnm</a></b>.  Just use the Netpbm common option
+<b>-plain</b>.
+
+<P><B>pnmtoplainpnm</b> exists today for backward compatibility; all it
+does is call <b>pnmtopnm -plain</b>.
+
+<p><b>pnmtoplainpnm</b> was new in Netpbm 8.2 (March 2000) as a renaming
+of <b>pnmnoraw</b>, which was new in Pbmplus in November 1989.
+
+</BODY>
+</HTML>
diff --git a/pnmtopng.html b/pnmtopng.html
new file mode 100644
index 00000000..876e029a
--- /dev/null
+++ b/pnmtopng.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Pnmtopng User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtopng</H1>
+Updated: June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+pnmtopng - convert a PNM image to PNG
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmtopng</B>
+[<b>-verbose</b>]
+[<b>-downscale</b>]
+[<b>-interlace</b>]
+[<b>-alpha=</b><i>file</i>]
+[<b>-transparent=</b>[<b>=</b>]<i>color</i>]
+[<b>-background=</b><i>color</i>]
+[<b>-palette=</b><i>palettefile</i>]
+[<b>-gamma=</b><i>value</i>]
+[<b>-hist</b>]
+[<b>-text=</b><i>file</i>]
+[<b>-ztxt=</b><i>file</i>]
+<br>
+[<b>-rgb=&quot;</b><i>wx</i> <i>wy</i>
+  <i>rx</i> <i>ry</i> <i>gx</i> <i>gy</i> <i>bx</i> <i>by</i><b>&quot;</b>]
+[<b>-size=&quot;</b><i>x</i> <i>y</i> <i>unit</i><b>&quot;</b>]
+[<b>-modtime=&quot;</b>[<i>yy</i>]<i>yy</i><b>-</b><i>mm</i><b>-</b><i>dd</i>
+  <i>hh</i><b>:</b><i>mm</i><b>:</b><i>ss</i><b>&quot;</b>]
+[<b>-nofilter</b>]
+[<b>-sub</b>]
+[<b>-up</b>]
+[<b>-avg</b>]
+[<b>-paeth</b>]
+[<b>-compression=</b><i>n</i>]
+[<b>-comp_mem_level=</b><i>n</i>]
+<br>
+[<b>-comp_strategy=</b>{<b>huffman_only</b>|<b>filtered</b>}]
+[<b>-comp_method=</b><b>deflated</b>]
+[<b>-comp_window_bits=</b><i>n</i>]
+[<b>-comp_buffer_size=</b><i>n</i>]
+[<b>-force</b>]
+[<b>-libversion</b>]
+[<I>pnmfile</I>]
+
+
+<?makeman .SH OPTION USAGE ?>
+<p>
+Obsolete options:
+<p>
+[<b>-filter </b><I>n</I>]
+
+<p>
+Options available only in older versions:
+<p>
+[<b>-chroma</b> <i>wx wy rx ry gx gy bx by</i>]
+[<b>-phys</b> <i>x</i> <i>y</i> <i>unit</i>]
+<br>
+[<b>-time </b>[<i>yy</i>]<i>yy</i><b>-</b><i>mm</i><b>-</b><i>dd</i>
+  <i>hh</i><b>:</b><i>mm</i><b>:</b><i>ss</i>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtopng</b> reads a PNM image as input and produces a PNG image as
+output.
+
+<P>Color values in PNG files are either eight or sixteen bits wide, so
+<I>pnmtopng</I> will automatically scale colors to have a maxval of
+255 or 65535.  Grayscale files will be produced with bit depths 1, 2,
+4, 8 or 16.  An extra <B>pamdepth</B> step is not necessary.
+
+<H2 id="options">OPTIONS</H2>
+
+<p><b>pnmtopng</b> changed in Netpbm 10.30 (October 2005) to use the
+standard Netpbm command line syntax.  Before that, you could not
+use double hyphens to denote an option and could not use an equal
+sign to separate an option name from its value.  And the options had
+to come before the non-option program arguments.
+
+<p>Furthermore, the options <b>-chroma</b>, <b>-phys</b>, and
+<b>-time</b> were replaced by <b>-rgb</b>, <b>size</b>, and
+<b>-modtime</b>, respectively.  The only difference, taking
+<b>-phys</b>/<b>-size</b> as an example, is that <b>-phys</b> takes
+multiple program arguments as the option argument, whereas <b>-rgb</b>
+takes a single program argument which is composed of multiple words.
+E.g.  The old shell command
+
+<pre>
+<kbd>
+   pnmtopng -phys 800 800 0 input.pnm >output.png
+</kbd>
+</pre>
+
+<p>is equivalent to the new shell command
+
+<pre>
+<kbd>
+   pnmtopng -size &quot;800 800 0&quot; input.pnm >output.png
+</kbd>
+</pre>
+
+<p>If you're writing a program that needs to work with both new and old
+<b>pnmtopng</b>, have it first try with the new syntax, and if it fails
+with &quot;unrecognized option,&quot; fall back to the old syntax.
+
+<DL COMPACT>
+<DT><B>-verbose</B>
+<DD>
+     Display the format of the output file.
+<DT><B>-downscale</B>
+<DD>
+     Enables scaling of maxvalues of more then 65535 to 16 bit. Since
+     this means loss of image data, the step is not performed by default.
+<DT><B>-interlace</B>
+<DD>
+     Creates an interlaced PNG file (Adam7).
+<DT><B>-alpha=</b><i>filename</i>
+
+<DD> This specifies the transparency (alpha channel) of the image.
+You supply the alpha channel as a standard PGM alpha mask (see the <a
+href="pgm.html">PGM</a> specification.  <b>pnmtopng</b> does not
+necessarily represents the transparency information as an alpha channel in
+the PNG format.  If it can represent the transparency information through
+a palette, it will do so in order to make a smaller PNG file.
+<b>pnmtopng</b> even sorts the palette so it can omit the opaque colors
+from the transparency part of the palette and save space for the palette.
+
+<DT><B>-transparent=</b><i>color</i>
+<DD>
+<B>pnmtopng</B> marks the specified color as transparent in the PNG image.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+E.g. <B>red</B> or
+<B>rgb:ff/00/0d</B>.  If the color you specify is not present in the
+image, <B>pnmtopng</B> selects instead the color in the image that is
+closest to the one you specify.  Closeness is measured as a cartesian
+distance between colors in RGB space.  If multiple colors are
+equidistant, <B>pnmtopng</B> chooses one of them arbitrarily.
+
+<P>However, if you prefix your color specification with
+&quot;=&quot;, e.g.
+
+<pre>
+                    -transparent =red
+
+</pre>
+
+<P> only the exact color you specify will be transparent.  If that
+color does not appear in the image, there will be no transparency.
+<B>pnmtopng</B> issues an information message when this is the case.
+
+<DT><B>-background=</b><i>color</i>
+<DD>
+Causes <b>pnmtopng</b> to create a background color chunk in the PNG output
+which can be used for subsequent alpha channel or transparent color
+conversions.  Specify <i>color</i> the same as for <b>-transparent</b>.
+
+<DT><B>-palette=</b><i>palettefile</i>
+
+<DD>This option specifies a palette to use in the PNG.  It forces
+<b>pnmtopng</b> to create the paletted (colormapped) variety of PNG --
+if that isn't possible, <b>pnmtopng</b> fails.  If the palette you
+specify doesn't contain exactly the colors in the image,
+<b>pnmtopng</b> fails.  Since <b>pnmtopng</b> will automatically
+generate a paletted PNG, with a correct palette, when appropriate, the
+only reason you would specify the <b>-palette</b> option is if you care
+in what order the colors appear in the palette.  The PNG palette has colors
+in the same order as the palette you specify.
+
+<P>You specify the palette by naming a PPM file that has one pixel for
+each color in the palette.
+
+<P>Alternatively, consider the case that have a palette and you want
+to make sure your PNG contains only colors from the palette,
+approximating if necessary.  You don't care what indexes the PNG uses
+internally for the colors (i.e. the order of the PNG palette).  In
+this case, you don't need <b>-palette</b>.  Pass the Netpbm input
+image and your palette PPM through <b>pnmremap</b>.  Though you might
+think it would, using <b>-palette</b> in this case wouldn't even save
+<b>pnmtopng</b> any work.
+
+<DT><B>-gamma=</b><i>value</i>
+
+<DD>Causes <b>pnmtopng</b> to create a gAMA chunk.  This information helps
+describe how the color values in the PNG must be interpreted.  Without
+the gAMA chunk, whatever interprets the PNG must get this information
+separately (or just assume something standard).  If your input is a true
+PPM or PGM image, you should specify <b>-gamma .45</b>.  But sometimes 
+people generate images which are ostensibly PPM except the image uses a 
+different gamma transfer function than the one specified for PPM.  A common
+case of this is when the image is created by simple hardware that doesn't
+have digital computational ability.  Also, some simple programs that generate
+images from scratch do it with a gamma transfer in which the gamma value is
+1.0.
+
+<DT><B>-hist</B>
+
+<DD>Use this parameter to create a chunk that specifies the frequency
+(or histogram) of the colors in the image.
+
+<DT><B>-rgb=</b><i>chroma_list</i>
+
+<DD>This option specifies how red, green, and blue component values
+of a pixel specify a particular color, by telling the chromaticities
+of those 3 primary illuminants and of white (i.e. full strength of
+all three).
+
+<p>The <i>chroma_list</i> value is a blank-separated list of 8 floating
+point decimal numbers.  The CIE-1931 X and Y chromaticities (in that
+order) of each of white, red, green, and blue, in that order.
+
+<p>This information goes into the PNG's cHRM chunk.
+
+<p>In a shell command, make sure you use quotation marks so that the
+blanks in <i>chroma_list</i> don't make the shell see multiple command
+arguments.
+
+<p>This option was new in Netpbm 10.30 (October 2005).  Before that,
+the option <b>-chroma</b> does the same thing, but with slightly
+different syntax.
+
+<DT><B>-size=&quot;</b><i>x</i> <i>y</i> <i>unit</i><b>&quot;</b>
+
+<DD>This option determines the aspect ratio of the individual pixels
+of your image as well as the physical resolution of it.
+
+<p><i>unit</i> is either <b>0</b> or <i>1</i>.  When it is <i>1</i>,
+the option specifies the physical resolution of the image in pixels
+per meter.  For example, <b>-size=&quot;10000 15000 1&quot;</b> means
+that when someone displays the image, he should make it so that 10,000
+pixels horizontally occupy 1 meter and 15,000 pixels vertically occupy
+one meter.  And even if he doesn't take this advice on the overall
+size of the displayed image, he should at least make it so that each
+pixel displays as 1.5 times as high as wide.
+
+<p>When <i>unit</i> is <b>0</b>, that means there is no advice on
+the absolute physical resolution; just on the ratio of horizontal to 
+vertical physical resolution.
+
+<p>This information goes into the PNG's pHYS chunk.
+
+<p>When you don't specify <b>-size</b>, <b>pnmtopng</b> creates the image
+with no pHYS chunk, which means square pixels of no absolute resolution.
+
+<p>This option was new in Netpbm 10.30 (October 2005).  Before that,
+the option <b>-phys</b> does the same thing, but with slightly
+different syntax.
+
+<DT><B>-text=</b><i>filename</i>
+
+<DD>
+This option lets you include comments in the text chunk of the PNG output.
+<i>file</i> is the name of a file that contains your text comments.
+
+<p>Here is an example of a comment file:
+<pre>
+           Title           PNG file
+           
+           Author          Bryan Henderson
+           
+           Description     how to include a text chunk
+                           PNG file
+           "Creation date" 3-feb-1987
+           
+           Software        pnmtopng
+</pre>
+
+<p>The format of the file is as follows:  The file is divided into lines,
+delimited by newline characters.  The last line need not end with a newline
+character.  A group of consecutive lines represents a comment.  
+
+<p>A "delimiter character" is a blank or tab or null character.  The
+first line representing a comment must not start with a delimiter
+character.  Every other line in the group is a "continuation line" and
+must start with a delimiter character.
+
+<p>The first line representing a comment consists of a keyword and the
+first line of comment text.  The keyword begins in Column 1 of the
+file line and continues up to, but not including, the first delimiter
+character, or the end of the line, whichever is first.  Exception: you
+can enclose the keyword in double quotes and spaces and tabs within
+the double quotes are part of the keyword.  The quotes are not part of
+the keyword.  A NUL character is not allowed in a keyword.
+
+<p>The first line of the comment text is all the text in the file line
+beginning after the keyword and any delimiter characters after it.
+immediately after the delimiter character that marks the end of the
+keyword.
+
+<p>A continuation line defines a subsequent line of the comment.  The
+comment line is all the text on the continuation line starting with the
+first non-delimiter character.
+
+<p>There is one newline character between every two comment lines.  There
+is no newline character after the last line of comment text.
+
+<p>There is no limit on the length of a file line or keyword or comment text
+line or comment text.  There is no limit on the number of comments or
+size of or number of lines in the file.
+
+<DT><B>-ztxt=</b><i>filename</i>
+
+<DD>The same as <b>-text</b>, except <b>pnmtopng</b> considers the
+text compressed.
+
+<DT><B>-modtime=&quot;</b>[<i>yy</i>]<i>yy-mm-dd hh:mm:ss</i><b>&quot;</b> 
+
+<DD>This option allows you to specify the modification time value to
+be placed in the PNG output.  You can specify the year parameter
+either as a two digit or four digit value.
+
+<p>This option was new in Netpbm 10.30 (October 2005).  Before that,
+the option <b>-time</b> does the same thing, but with slightly
+different syntax.
+
+<DT><B>-filter=</b><i>n</i>
+
+<DD>This option is obsolete.  Before Netpbm 10.22 (April 2004), this was
+the only way to specify a row filter.  It specifies a single type of
+row filter, by number, that <b>pnmtopng</b> must use on each row.
+
+<p>Use <b>-nofilter</b>, <b>-sub</b>, <b>-up</b>, <b>-avg</b>, and
+<b>-paeth</b> in current Netpbm.
+
+<dt><b>-nofilter</b>
+<dt><b>-sub</b>
+<dt><b>-up</b>
+<dt><b>-avg</b>
+<dt><b>-paeth</b>
+
+<dd>Each of these options permits <b>pnmtopng</b> to use one type of
+row filter.  <b>pnmtopng</b> chooses whichever of the permitted
+filters it finds to be optimal.  If you specify none of these options,
+it is the same as specifying all of them -- <b>pnmtopng</b> uses any
+row filter type it finds optimal.
+
+<p>These options were new with Netpbm 10.22 (April 2004).  Before that,
+you could use the <b>-filter</b> option to specify one permitted row
+filter type.  The default, when you specify no filter options, was the
+same.
+
+<DT><B>-compression=</b><i>n</i>
+
+<DD>This option sets set the compression level of the zlib
+compression.  Select a level from 0 for no compression (maximum speed)
+to 9 for maximum compression (minimum speed).
+
+<dt><b>-comp_mem_level=</b><i>n</i>
+
+<dd>This option sets the memory usage level of the zlib compression.
+Select a level from 1 for minimum memory usage (and minimum speed) to
+9 for maximum memory usage (and speed).
+
+<p>This option was new in Netpbm 10.30 (October 2005).
+
+<dt><b>-comp_strategy=</b>{<b>huffman_only</b>|<b>filtered</b>}
+
+<dd>This options sets the compression strategy of the zlib compression.
+See Zlib documentation for information on what these strategies are.
+
+<p>This option was new in Netpbm 10.30 (October 2005).
+
+<dt><b>-comp_method=</b><b>deflated</b>
+
+<dd>This option does nothing.  It is here for mathematical
+completeness and for possible forward compatibility.  It theoretically
+selects the compression method of the zlib compression, but the Z
+library knows only one method today, so there's nothing to choose.
+
+<p>This option was new in Netpbm 10.30 (October 2005).
+
+<dt><b>-comp_window_bits=</b><I>N</I>
+
+<dd>This option tells how big a window the zlib compression algorithm
+uses.  The value is the base 2 logarithm of the window size in bytes,
+so 8 means 256 bytes.  The value must be from 8 to 15 (i.e. 256 bytes
+to 32K).
+
+<p>See Zlib documentation for details on what this window size is.
+
+<p>This option was new in Netpbm 10.30 (October 2005).
+
+<dt><b>-comp_buffer_size</b>=<I>N</I>
+
+<dd>This option determines in what size pieces <b>pnmtopng</b> does the
+zlib compression.  One compressed piece goes in each IDAT chunk in the
+PNG.  So the bigger this value, the fewer IDAT chunks your PNG will have.
+Theoretically, this makes the PNG smaller because 1) you have less
+per-IDAT-chunk overhead, and 2) the compression algorithm has more data
+to work with.  But in reality, the difference will probably not be
+noticeable above about 8K, which is the default.
+
+<p>The value <i>n</i> is the size of the compressed piece (i.e. the
+compression buffer) in bytes.
+
+<p>This option was new in Netpbm 10.30 (October 2005).
+
+
+<DT><B>-force</B>
+
+<DD>
+When you specify this, <b>pnmtopng</b> limits its optimizations.
+The resulting PNG output is as similar to the Netpbm input as possible.
+For example, the PNG output will not be paletted and the alpha channel
+will be represented as a full alpha channel even if the information could
+be represented more succinctly with a transparency chunk.
+
+
+<DT><B>-libversion</B>
+
+<DD>
+This option causes <b>pnmtopng</b> to display version information
+about itself and the libraries it uses, <strong>in addition to all its
+normal function</strong>.  Do not confuse this with the Netpbm common
+option <b>-version</b>, which causes the program to display version
+information about the Netpbm library and do nothing else.
+
+<p>You can't really use this option in a program that invokes
+<b>pnmtopng</b> and needs to know which version it is.  Its function
+has changed too much over the history of <b>pnmtopng</b>.  The option
+is only good for human eyes.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pngtopnm.html">pngtopnm</A>, 
+<A HREF="pamrgbatopng.html">pamrgbatopng</A>,
+<A HREF="pnmremap.html">pnmremap</A>,
+<A HREF="pnmgamma.html">pnmgamma</A>, 
+<A HREF="pnm.html">pnm</A>
+
+<p>For information on the PNG format, see <a
+href="http://schaik.com/png">http://schaik.com/png</a>.
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1995-1997 by Alexander Lehmann and Willem van Schaik.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
diff --git a/pnmtopnm.html b/pnmtopnm.html
new file mode 100644
index 00000000..2fd4aa3b
--- /dev/null
+++ b/pnmtopnm.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtopnm</H1>
+Updated: 24 March 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtopnm - copy a PNM image
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtopnm</B>
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pnmtopnm</b> simply copies a PNM image to Standard Output.  The
+output has the same major PNM format (PBM, PGM, or PPM) and maxval as
+the input.  This may seem an unnecessary duplication of <b>cat</b>,
+but it lets you convert between the plain (ASCII) and raw (binary)
+subformats of PNM.  Use the <b>-plain</b> Netpbm common option to
+ensure the output is plain PNM, and don't use <b>-plain</b> to ensure
+the output is raw PNM.  See <a href="index.html#commonoptions"> Common
+Options</a>.
+
+<p>You don't normally need to convert between the PNM subformats, because
+any program that uses the Netpbm library to read a PNM image will read
+all of them directly.  But there are a lot of programs that don't use
+the Netpbm library and understand only the raw format.  Plain format
+is nice because it is human readable; people often use it to debug
+programs that process PNM images.
+
+<p><b>pnmtopnm</b> is really just another name for the program
+<b>pamtopnm</b>.  The latter does the job because like any Netpbm
+program that takes PAM input via the Netpbm programming library
+facilities, it also takes PNM input.
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p><b>pnmtopnm</b> was new in Netpbm 10.23 (July 2004).  It obsoleted
+<b>pnmtoplainpnm</b>, which specifically did the conversion to plain
+PNM.  There was no program to explicitly convert to raw PNM, but many
+Netpbm programs can be made, with the right options, to be idempotent
+(i.e. to do the same thing as <b>pnmtopnm</b>).
+
+<p>Then David Jones realized that the existing <b>pamtopnm</b> already
+did everything that <b>pnmtopnm</b> did and more, so 
+in Netpbm 10.27 (March 2005), <b>pnmtopnm</b> became simply an alternate
+name for <b>pamtopnm</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtoppm.html">ppmtoppm</A>
+<A HREF="pgmtopgm.html">pgmtopgm</A>
+<A HREF="pamtopnm.html">pamtopnm</A>
+<A HREF="pnm.html">pnm</A>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtops.html b/pnmtops.html
new file mode 100644
index 00000000..9df3a800
--- /dev/null
+++ b/pnmtops.html
@@ -0,0 +1,385 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtops User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtops</H1>
+Updated: 10 February 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+pnmtops - convert PNM image to PostScript
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>pnmtops</B>
+[<B>-scale=</B><I>s</I>]
+[<B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>]]
+[<B>-imagewidth=</B><I>n</I>]
+[<B>-imageheight=</B><I>n</I>]
+[<B>-width=</B><I>N</I>]
+[<B>-height=</B><I>N</I>]
+[<B>-equalpixels</B>]
+[<B>-turn</B>|<B>-noturn</B>]
+[<B>-rle</B>|<B>-runlength</B>]
+[<b>-flate</b>]
+[<b>-ascii85</b>]
+[<B>-nocenter</B>]
+[<B>-nosetpage</B>]
+[<b>-level=</b><i>N</i>]
+[<b>-psfilter</b>]
+[<B>-noshowpage</B>]
+[<I>pnmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtops</b> reads a Netpbm image stream as input and produces
+Encapsulated PostScript (EPSF) as output.
+
+<P>If the input file is in color (PPM), <B>pnmtops</B> generates a
+color PostScript file.  Some PostScript interpreters can't handle
+color PostScript.  If you have one of these you will need to run your
+image through <B>ppmtopgm</B> first.
+
+<P>If you specify no output dimensioning options, the output image is
+dimensioned as if you had specified <B>-scale=1.0</B>, which means
+aproximately 72 pixels of the input image generate one inch of output
+(if that fits the page).
+
+<P>Use <B>-imagewidth</B>, <B>-imageheight</B>, <B>-equalpixels</B>,
+<B>-width</B>, <B>-height</B>, and <B>-scale</B> to adjust that.
+
+<p>Each image in the input stream becomes one complete one-page Postscript 
+program in the output.  (This may not be the best way to create a multi-page
+Postscript stream; someone who knows Postscript should work on this).
+
+<p>The line at the top of the file produced by <b>pnmtops</b> is
+either &quot;%!PS-Adobe-3.0 EPSF-3.0&quot; or just
+&quot;%!PS-Adobe-3.0&quot;.  The numbers do not reflect the Postscript
+language level, but the version of the DSC comment specification and
+EPS specification implmented.  The Postscript language level is in the
+"%%LanguageLevel:" comment.  <b>pnmtops</b> omits "EPSF-3.0" if you
+specify <b>-setpage</b>, because it is incorrect to claim EPS
+compliance if the file uses <b>setpagedevice</b>.
+
+
+<h3>What is Encapsulated Postscript?</h3>
+
+<p>Encapsulated Postscript (EPSF) is a subset of Postscript (i.e. the
+set of streams that conform to EPSF is a subset of those that conform
+to Postscript).  It is designed so that an EPSF stream can be embedded
+in another Postscript stream.  A typical reason to do that is where an
+EPSF stream describes a picture you want in a larger document.
+
+<p>An Encapsulated Postscript document conforms to the DSC (Document
+Structuring Convention).  The DSC defines some Postscript comments
+(they're comments from a Postscript point of view, but have semantic
+value from a DSC point of view).
+
+<p>More information about Encapsulated Postscript is at 
+<a href="http://www.cs.indiana.edu/docproject/programming/postscript/eps.html">
+http://www.cs.indiana.edu/docproject/programming/postscript/eps.html</a>.
+
+<p>Many of the ideas in <b>pnmtops</b> come from Dirk Krause's <b>bmeps</b>.
+See <a href="#seealso">SEE ALSO</a>
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-imagewidth</B>, <B>-imageheight</B>
+<DD>
+Tells how wide and high you want the image on the page, in inches.
+The aspect ratio of the image is preserved, so if you specify both of these,
+the image on the page will be the largest image that will fit within the
+box of those dimensions.
+<P>
+If these dimensions are greater than the page size, you get Postscript
+output that runs off the page.
+
+<P>You cannot use <B>imagewidth</B> or <B>imageheight</B> with
+<B>-scale</B> or <B>-equalpixels</B>.
+
+<DT><B>-equalpixels</B>
+
+<DD>
+This option causes the output image to have the same number of pixels
+as the input image.  So if the output device is 600 dpi and your image
+is 3000 pixels wide, the output image would be 5 inches wide.
+
+<P>You cannot use <B>-equalpixels</B> with <B>-imagewidth</B>,
+<B>-imageheight</B>, or <B>-scale</B>.
+
+<DT><B>-scale</B>
+<DD>
+tells how big you want the image on the page.  The value is the number of
+inches of output image that you want 72 pixels of the input to generate.
+
+<P>But <B>pnmtops </B> rounds the number to something that is an
+integral number of output device pixels.  E.g. if the output device is
+300 dpi and you specify <B>-scale=1.0</B>, then 75 (not 72) pixels of
+input becomes one inch of output (4 output pixels for each input
+pixel).  Note that the <B>-dpi</B> option tells <B>pnmtops</B> how
+many pixels per inch the output device generates.
+
+<P>If the size so specified does not fit on the page (as measured
+either by the <B>-width</B> and <B>-height</B> options or the default
+page size of 8.5 inches by 11 inches), <B>pnmtops</B> ignores the
+<B>-scale</B> option, issues a warning, and scales the image to fit on
+the page.
+
+<DT><B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>]
+
+<DD>
+     
+<P>This option specifies the dots per inch resolution of your output
+device.  The default is 300 dpi.  In theory PostScript is
+device-independent and you don't have to worry about this, but in
+practice its raster rendering can have unsightly bands if the device
+pixels and the image pixels aren't in sync.
+
+<P>Also this option is crucial to the working of the
+<B>equalpixels</B> option.
+
+<P>If you specify <I>N</I><B>x</B>N, the first number is the
+horizontal resolution and the second number is the vertical
+resolution.  If you specify just a single number <I>N</I>, that is the
+resolution in both directions.
+     
+<DT><B>-width</B>, <b>-height</b>
+
+<DD> These options specify the dimensions, in inches, of the page on
+which the output is to be printed.  This can affect the size of the
+output image.
+
+<P>
+The page size has no effect, however, when you specify the 
+<B>-imagewidth</B>, <B>-imageheight</B>, or <B>-equalpixels</B> options.
+
+<P>These options may also affect positioning of the image on the page and
+even the paper selected (or cut) by the printer/plotter when the
+output is printed.  See the <B>-nosetpage</B> option.
+
+<P>
+The default is 8.5 inches by 11 inches.
+
+<DT><B>-turn</B>
+
+<DT><B>-noturn</B> 
+
+<dd>These options control whether the image gets turned 90 degrees.
+Normally, if an image fits the page better when turned (e.g. the image
+is wider than it is tall, but the page is taller than it is wide), it
+gets turned automatically to better fit the page.  If you specify the
+<B>-turn</B> option, <B>pnmtops </B> turns the image no matter what
+its shape; If you specify <B>-noturn</B>, <B>pnmtops</B> does
+<em>not</em> turn it no matter what its shape.
+
+<DT><B>-rle</B>
+
+<DT><B>-runlength</B>
+
+<dd>These identical options tell <b>pnmtops</b> to use run length
+compression in encoding the image in the Postscript program.  This may
+save time if the host-to-printer link is slow; but normally the
+printer's processing time dominates, so <B>-rle</B> has no effect (and
+in the absence of buffering, may make things slower.
+
+<p>This may, however, make the Postscript program considerable smaller.
+
+<p>This usually doesn't help at all with a color image and
+<b>-psfilter</b>, because in that case, the Postscript program
+<b>pnmtops</b> creates has the red, green, and blue values for each
+pixel together, which means you would see long runs of identical bytes
+only in the unlikely event that the red, green, and blue values for a
+bunch of adjacent pixels are all the same.  But without
+<b>-psfilter</b>, the Postscript program has all the red values, then
+all the green values, then all the blue values, so long runs appear
+wherever there are long stretches of the same color.
+
+<dt><b>-flate</b>
+
+<dd>This option tells <b>pnmtops</b> to use &quot;flate&quot;
+compression (i.e. compression via the &quot;Z&quot; library -- the
+same as PNG).
+
+<p>See the <b>-rle</b> option for information about compression in general.
+
+<p>You must specify <b>-psfilter</b> if you specify <b>-flate</b>.
+
+<p>This option was new in Netbpm 10.27 (March 2005).
+
+<p>Before Netpbm 10.32 (February 2005), you could not specify <b>-rle</b>
+and <b>-flate</b> together.
+
+<dt><b>-ascii85</b>
+
+<dd>By default, <b>pnmtops</b> uses &quot;asciihex&quot; encoding of
+the image raster.  The image raster is a stream of bits, while a Postscript
+program is text, so there has to be an encoding from bits to text.  Asciihex
+encoding is just the common hexadecimal representation of bits.  E.g. 8
+1 bits would be encoded as the two characters &quot;FF&quot;.
+
+<p>With the <b>-ascii85</b> option, <b>pnmtops</b> uses
+&quot;ascii85&quot; encoding instead.  This is an encoding in which 32
+bits are encoded into five characters of text.  Thus, it produces less
+text for the same raster than asciihex.  But ascii85 is not available
+in Postscript Level 1, whereas asciihex is.
+
+<p>This option was new in Netbpm 10.27 (March 2005).
+
+<dt><b>-psfilter</b>
+
+<dd><b>pnmtops</b> can generate two different kinds of Encapsulated
+Postscript programs to represent an image.  By default, it generates a
+program that redefines <b>readstring</b> in a custom manner and
+doesn't rely on any built-in Postscript filters.  But with the
+<b>-psfilter</b> option, <b>pnmtops</b> leaves <b>readstring</b> alone
+and uses the built-in Postscript filters <b>/ASCII85Decode</b>,
+<b>/ASCIIHexDecode</b>, <b>/RunLengthDecode</b>, and <b>/FlateDecode</b>.
+
+<p>This option was new in Netbpm 10.27 (March 2005).  Before that, 
+<b>pnmtops</b> always used the custom <b>readstring</b>.
+
+<P>The custom code can't do flate or ascii85 encoding, so you must use
+<b>-psfilter</b> if you want those (see <b>-flate</b>, <b>-ascii85</b>).
+
+<dt><b>-level</b>
+
+<dd>This option determines the level (version number) of Postscript that
+<b>pnmtops</b> uses.  By default, <b>pnmtops</b> uses Level 2.  Some
+features of <b>pnmtops</b> are available only in higher Postscript levels,
+so if you specify too low a level for your image and your options,
+<b>pnmtops</b> fails.  For example, <b>pnmtops</b> cannot do a color image
+in Level 1.
+
+<P>This option was new in Netpbm 10.27 (March 2005).  Before that,
+<b>pnmtops</b> always used Level 2.
+
+<dt><b>-dict</b>
+
+<dd>This causes the Postscript program create a separated dictionary
+for its local variables and remove it from the stack as it exits.
+
+<p>This option was new in Netbpm 10.27 (March 2005).
+
+<dt><b>-vmreclaim</b>
+
+<dd>This option causes the Postscript program to force a memory garbage
+collection as it exits.
+
+<p>This option was new in Netbpm 10.27 (March 2005).
+
+<DT><B>-nocenter</B>
+<DD>
+     By default, <B>pnmtops</B> centers the image on the output page.
+     You can cause <B>pnmtops</B> to instead put the image against the
+     lower left corner of the page with the <B>-nocenter </B>
+     option.  This is useful for programs which can include
+     PostScript files, but can't cope with pictures which are not
+     positioned in the lower left corner.
+     <P>
+     For backward compatibility, <B>pnmtops</B> accepts the option
+     <B>-center</B>, but it has no effect.
+
+<DT><B>-setpage</B>
+     This causes <b>pnmtops</b> to include a &quot;setpagedevice&quot;
+     directive in the output.  This causes the output to violate specifications
+     of EPSF encapsulated Postscript, but if you're not using it in an
+     encapsulated way, may be what you need.  The directive tells the
+     printer/plotter what size paper to use (or cut).  The dimensions it
+     specifies on this directive are those selected by the
+     <b>-width</b> and <b>-height</b> options or defaulted.
+
+     <p>From January through May 2002, the default was to include
+     &quot;setpagedevice&quot; and this option did not exist.  Before
+     January 2002, there was no way to include &quot;setpagedevice&quot;
+     and neither the <b>-setpage</b> nor <b>-nosetpage</b> option existed.
+     
+<DT><B>-nosetpage</B>
+<DD>
+     This tells <b>pnmtops</b> not to include a &quot;setpagedevice&quot;
+     directive in the output.  This is the default, so the option has no
+     effect.
+
+     <p>See the <b>-setpage</b> option for the history of this option.
+
+<DT><B>-noshowpage</B>
+<DD>
+     This tells <b>pnmtops</b> not to include a &quot;showpage&quot;
+     directive in the output.  By default, <b>pnmtops</b> includes a
+     &quot;showpage&quot; at the end of the EPSF program  According to
+     EPSF specs, this is OK, and the program that includes the EPSF is
+     supposed to redefine showpage so this doesn't cause undesirable
+     behavior.  But it's often easier just not to have the showpage.
+
+     <p>This options was new in Netpbm 10.27 (March 2005).  Earlier
+     versions of <b>pnmtops</b> always include the showpage.
+
+<dt><b>-showpage</b>
+<dd>
+    This tells <b>pnmtops</b> to include a &quot;showpage&quot; directive
+    at the end of the EPSF output.  This is the default, so the option has
+    no effect.
+
+    <p>This option was new in Netpbm 10.27 (March 2005).
+
+
+</DL>
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+<p>If the PNM image has a maxval greater than 255, <b>pnmtops</b> will
+probably produce incorrect output unless you use the <b>-psfilter</b>
+option or use the <b>-level</b> option to demand Postscript Level 1.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<p>Postscript is described in the <a
+href="http://www.adobe.com/products/postscript/pdfs/PLRM.pdf">Postscript
+Language Reference Manual</a>.
+
+<p><a href="http://bmeps.sourceforge.net"><b>bmeps</b></a> converts
+from Netpbm and other formats to Encapsulated Postscript.  It is suitable
+for hooking up to <b>dvips</b> so you can include an image in a Latex
+document just with an \includegraphics directive.
+
+<b>bmeps</b> has a few functions <b>pnmtops</b> does not, such as the ability
+to include a transparency mask in the Postscript program (but not from PAM
+input -- only from PNG input).
+
+<p>
+<B><A HREF="pnm.html">pnm</A></B>,
+<B>gs</b>,
+<B><A HREF="psidtopgm.html">psidtopgm</A></B>,
+<B><A HREF="pstopnm.html">pstopnm</A></B>,
+<B><A HREF="pbmtolps.html">pbmtolps</A></B>,
+<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>,
+<B><A HREF="pbmtopsg3.html">pbmtopsg3</A></B>,
+<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>,
+
+<H2 id="author">AUTHOR</H2>
+
+<p>Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<p>Modified November 1993 by Wolfgang Stuerzlinger, <A
+HREF="mailto:wrzl@gup.uni-linz.ac.at">wrzl@gup.uni-linz.ac.at</A>
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#limitations">LIMITATIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtorast.html b/pnmtorast.html
new file mode 100644
index 00000000..a17f234a
--- /dev/null
+++ b/pnmtorast.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtorast User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtorast</H1>
+Updated: 12 January 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+pnmtorast - convert a PPM into a Sun rasterfile
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtorast</B>
+[<B>-standard</B>|<B>-rle</B>]
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtorast</b>reads a portable pixmap as input and produces a Sun
+rasterfile as output.
+
+<P>Color values in Sun rasterfiles are eight bits wide, so
+<B>pnmtorast</B> will automatically scale colors to have a maxval of
+255.  An extra <B>pamdepth</B> step is not necessary.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The <B>-standard</B> option forces the result to be in RT_STANDARD
+form; the <B>-rle</B> option, RT_BYTE_ENCODED, which is smaller but,
+well, less standard.  The default is <B>-rle</B>.
+
+<P>All options can be abbreviated to their shortest unique prefix.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<p><A HREF="rasttopnm.html">rasttopnm</A>,
+<A HREF="pnm.html">pnm</A>
+<A NAME="lbAG">&nbsp;</A>
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtorle.html b/pnmtorle.html
new file mode 100644
index 00000000..70751107
--- /dev/null
+++ b/pnmtorle.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtorle User Manual</TITLE></HEAD>
+<BODY>
+<H1>PNMTORLE</H1>
+Updated: March 31, 1994
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtorle - convert a Netpbm image file into an RLE image file.
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtorle</B>
+
+[<B>-h</B>]
+[<B>-v</B>]
+[<B>-a</B>]
+[<B>-o</B> <I>outfile</I>]
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>This program converts Netpbm image files into Utah RLE image files.
+You can include an alpha mask.  If the input is a multiple image file,
+the output consists of several concatenated RLE images.
+
+<P>The RLE file will contain either a three channel color image (24
+bits) or a single channel grayscale image (8 bits) depending upon the
+pnm file depth.  If a converted ppm is displayed on an 8 bit display,
+the image must be dithered.  In order to produce a better looking
+image (on 8 bit displays), it is recommended that the image be
+quantizing (to 8 bit mapped color) prior to its display.  This may be
+done by piping the output of this program into the Utah <b>mcut</b> or
+<b>rlequant</b> utilities.  We show an example of this later.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-v</B>
+
+<DD>
+This option will cause <b>pnmtorle</b> to operate in verbose mode.  The header
+information is written to &quot;stderr&quot;.  Actually, there is not much header
+information stored in a Netpbm file, so this information is minimal.
+<DT><B>-h</B>
+
+<DD>
+This option allows the header of the Netpbm image to be dumped to &quot;stderr&quot;
+without converting the file.  It is equivalent to using the -v option except
+that no file conversion takes place.
+<DT><B>-a</B>
+
+<DD>
+This option causes <b>pnmtorle</b> to include an alpha channel in the output
+image.  The alpha channel is based on the image:  Wherever a pixel 
+is black, the corresponding alpha value is transparent.  Everywhere
+else, the alpha value is fully opaque.
+
+<DT><B>-o</B> <I>outfile</I>
+
+<DD>If you specify this option, <b>pnmtorle</b> writes the output to
+this file.  If <I>outfile</I> is <b>-</b> or you don't specify
+<b>-o</b>, <b>pnmtorle</b> writes the output to Standard Output.
+
+<DT><I>pnmfile</I>
+
+<DD>
+The name of the Netpbm image data file to be converted.  If not specified,
+standard input is assumed.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<pre>
+   pnmtorle -v file.ppm -o file.rle
+</pre>
+
+<p>While running in verbose mode, convert file.ppm to RLE format and store
+resulting data in file.rle.
+
+<pre>
+   pnmtorle -h file.pgm
+</pre>
+
+<p>Dump the header information of the Netpbm file called file.pgm.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="rletopnm.html">rletopnm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<pre>
+Wes Barris,
+Army High Performance Computing Research Center (AHPCRC)
+Minnesota Supercomputer Center, Inc.
+</pre>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtosgi.html b/pnmtosgi.html
new file mode 100644
index 00000000..468c59b1
--- /dev/null
+++ b/pnmtosgi.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtosgi User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtosgi</H1>
+Updated: 29 January 1994
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtosgi - convert a PNM image to a SGI image file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtosgi</B>
+
+[<B>-verbatim</B>|<B>-rle</B>]
+
+[<B>-imagename</B> <I>Name</I>]
+
+[<B>pnmfile</B>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>pnmtosgi</b> reads a PNM image as input and produces an SGI
+image file as output.  The SGI image will be 2-dimensional (1 channel)
+for PBM and PGM input, and 3-dimensional (3 channels) for PPM.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-verbatim</B>
+
+<DD>
+Write an uncompressed file.
+<DT><B>-rle</B> (default)
+
+<DD>
+Write a compressed (run length encoded) file.
+<DT><B>-imagename</b> <i>name</i>
+
+<DD>
+Write the string &quot;name&quot; into the imagename field of the header.
+The name string is limited to 79 characters.
+If no name is given, pnmtosgi writes &quot;no name&quot; into this field.
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+SGI Image File Format documentation (draft v0.95) by Paul Haeberli (<A
+HREF="mailto:paul@sgi.com">paul@sgi.com</A>).  Available via ftp at
+sgi.com:graphics/SGIIMAGESPEC.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnm.html">pnm</A>,
+<A HREF="sgitopnm.html">sgitopnm</A>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1994 by Ingo Wilken (<A
+HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>)
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">REFERENCES</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtosir.html b/pnmtosir.html
new file mode 100644
index 00000000..b16d96f6
--- /dev/null
+++ b/pnmtosir.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtosir User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtosir</H1>
+Updated: 20 March 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtosir - convert a PNM image into a Solitaire format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtosir</B>
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtosir</b> reads a PNM image as input and produces a Solitaire
+Image Recorder format image.
+
+<P><b>pnmtosir</b> produces an MGI TYPE 17 file for PBM and PGM files.  For
+PPM, it writes a MGI TYPE 11 file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="sirtopnm.html">sirtopnm</A>,
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Marvin Landis.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtotiff.html b/pnmtotiff.html
new file mode 100644
index 00000000..c0a65b17
--- /dev/null
+++ b/pnmtotiff.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head>
+<title>pnmtotiff</title>
+</head><body>
+<h1>pnmtotiff</h1>
+Updated: September 2005
+<br>
+<h2>NAME</h2>
+<B>pnmtotiff</B> - replaced by pamtotiff
+<h2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+In Netpbm 10.30 (October 2005), <b>pnmtotiff</b> was extended and renamed to
+<b><a href="pamtotiff.html">pamtotiff</a></b>.
+
+<p><b>pamtotiff</b> is backward compatible with <b>pnmtotiff</b>.
+
+</body>
+</html>
diff --git a/pnmtotiffcmyk.html b/pnmtotiffcmyk.html
new file mode 100644
index 00000000..1a7e36c3
--- /dev/null
+++ b/pnmtotiffcmyk.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtotiffcmyk User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtotiffcmyk</H1>
+Updated: 07 February 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtotiffcmyk - convert a Netpbm image into a CMYK encoded TIFF file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtotiffcmyk </B>
+
+[<i>Compargs</i>][<i>Tiffargs</i>][<i>Convargs</i>][<I>pnmfile</I>]
+
+<p><i>Compargs</i>:
+<p>
+[<B>-none</B>|<B>-packbits</B>|<B>-lzw</B>
+
+[<B>-predictor</B> <I>n</I>]]
+
+<p><i>Tiffargs</i>:
+<p>
+[<B>-msb2lsb</B>|<B>-lsb2msb</B>]
+
+[<B>-rowsperstrip</B> <I>n</I>]
+
+<BR>
+
+[<B>-lowdotrange</B> <I>n</I>]
+
+[<B>-highdotrange</B> <I>n</I>]
+
+<BR>
+
+[<B>-knormal</B>|<B>-konly</B>|<B>-kremove</B>]
+
+<p><i>Convargs</i>:
+<p>
+[[<B>-default</B>][<B>Defargs</B>]|<B>-negative</B>]
+
+<p><i>Defargs</i>:
+<p>
+[<B>-theta</B> <I>deg</I>]
+
+[<B>-gamma</B> <I>n</I>]
+
+[<B>-gammap</B> <I>-1</I> | <B>-gammap</B> <I>n</I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtotiffcmyk</b>reads a PNM image as input and produces a CMYK
+encoded TIFF file as output.  It optionally modifies the color
+balance and black level, and modifies removal of CMY from under K.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>The order of most options is not important, but options for particular
+conversion algorithms must appear after the algorithm is selected
+(<B>-default</B>,<B>-negative</B>).  If you don't select an algorithm,
+<b>pnmtotiffcmyk</b> assumes <B>-default</B> and the appropriate
+options (<B>-theta</B>,<B>-gamma</B>,<B>-gammap</B>) can appear
+anywhere.
+
+<h3><B>-none</B>,<B>-packbits</B>,<B>-lzw</B>,<B>-predictor</B></h3>
+
+<p>Tiff files can be compressed.  By default, <b>pnmtotiffcmyk</b>
+uses LZW decompression, but (apparently) some readers cannot read
+this, so you may want to select a different algorithm
+(<B>-none</B>,<B>-packbits</B>).  For LZW compression, a
+<B>-predictor</B> value of 2 forces horizontal differencing of
+scanlines before encoding; a value of 1 forces no differencing.
+
+<h3><B>-msb2lsb</B>,<B>-lsb2msb</B></h3>
+
+<p>These options control fill order (default is <B>-msb2lsb</B>).
+
+<h3><B>-rowsperstrip</B></h3>
+
+<p>This sets the number of rows in an image strip (data in the Tiff
+files generated by this program is stored in strips - each strip is
+compressed individually).  The default gives a strip size of no more
+than 8 kb.
+
+<h3><B>-lowdotrange</B>,<B>-highdotrange</B></h3>
+
+<p>These options set tag values that may be useful for printers.
+
+<h3><B>-knormal</B>,<B>-kremove</B>,<B>-konly</B></h3>
+
+<p>These options control the calculation of the CMYK ink levels.
+They are useful only for testing and debugging the code.
+
+<P><B>-kremove</B> sets the black (K) levels to zero while leaving the
+other ink levels as they would be if the black level were normal.
+
+<p><B>-konly</B> sets all inks to the normal black value.
+
+<h3><B>-default</B>,<B>-negative</B></h3>
+
+<p>These options control what ink levels <b>pnmtotiffcmyk</b> uses to
+represent each input color.
+
+<p><B>-negative</B> selects a simple algorithm that generates a color
+negative.  None of the following options apply to this algorithm.  The
+algorithm is included as an example in the source code to help
+implementors of other conversions.
+
+<p><B>-default</B> is not necessary, unless you have to countermand a
+<B>-negative</B> on the same command line.  
+
+<p>The default conversion from RGB to CMYK is as follows: The basic
+values of the 3 pigments are C = 1-R, M = 1-G, Y = 1-B.  From this,
+<b>pnmtotiffcmyk</b> chooses a black (K) level which is the minimum of
+those three.  It then replaces that much of the 3 pigments with the
+black.  I.e. it substracts K from each of the basic C, M, and Y
+values.
+
+<p>The options below modify this conversion.
+
+<h3><B>-theta</B> <I>deg</I></h3>
+
+<p><B>-theta</B> provides a simple correction for any color bias that
+may occur in the printed image because, in practice, inks do not
+exactly complement the primary colors.  It rotates the colors (before
+black replacement) by <I>deg</I> degrees in the color wheel.  Unless
+you are trying to produce unusual effects you will need to use small
+values.  Try generating three images at -10, 0 (the default) and 10
+degrees and see which has the best color balance.
+
+<h3><B>-gamma</B> <I>n</I></h3>
+
+<p><B>-gamma</B> applies a gamma correction to the black (K) value
+described above.  Specifically, instead of calculating the K value as
+min(C,M,Y), <b>pnmtotiffcmyk</b> raises that value (normalised to the
+range 0 to 1) to the <I>n</I>th power.  In practice, this means that a
+value greater than 1 makes the image lighter and a value less than 1
+makes the image darker.  The range of allowed values is 0.1 to 10.
+
+<h3><B>-gammap</B> <I>n</I></h3>
+
+<p>This option controls the black replacement.
+
+<p>If you specify <B>-gammap</B>, <b>pnmtotiffcmyk</b> uses the specified
+gamma value in computing how much ink to remove from the 3 pigments, but
+still uses the regular gamma value (<b>-gamma</b> option) to generate the
+actual amount of black ink with which to replace it.
+
+<p>Values of <i>n</i> from 0.01 to 10 are valid.
+
+<p>For example, it may be best to only subtract black from the
+colored inks in the very darkest regions.  In that case, <I>n</I>
+should be a large value, such as 5.
+
+<p>As a special case, if <I>n</I> is -1, <b>pnmtotiffcmyk</b> does not
+remove any pigment (but still adds the black ink).  This means dark
+areas are even darker.  Furthermore, when printed, dark areas contain
+a lot of ink which can make high contrast areas, like lettering,
+appear fuzzy.  It's hard to see what the utility of this is.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtotiff.html">pnmtotiff</A>, 
+<A HREF="tifftopnm.html">tifftopnm</A>, 
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (c) 1999 Andrew Cooke (Jara Software).  Released under the
+GPL with no warranty.  See source or COPYRIGHT and LICENCE files in
+distribution for full details.
+
+Much of the code uses ideas from other Netpbm programs, written by Jef
+Poskanzer (thanks go to him and libtiff maintainer Sam Leffler).  A
+small section of the code - some of the tiff tag settings - is derived
+directly from pnmtotiff, by Jef Poskanzer, which, in turn,
+acknowledges Patrick Naughton with the following text:
+
+<blockquote>
+<p>Derived by Jef Poskanzer from ras2tif.c, which is:
+
+<p>Copyright (c) 1990 by Sun Microsystems, Inc.
+
+<p>Author: Patrick J. Naughton
+<A HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>
+
+<p>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.
+
+<p>This file is provided AS IS with no warranties of any kind.  The
+author shall have no liability with respect to the infringement of
+copyrights, trade secrets or any patents by this file or any part
+thereof.  In no event will the author be liable for any lost revenue
+or profits or other special, indirect and consequential damages.
+
+</blockquote>
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Index</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pnmtoxwd.html b/pnmtoxwd.html
new file mode 100644
index 00000000..a8def604
--- /dev/null
+++ b/pnmtoxwd.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pnmtoxwd User Manual</TITLE></HEAD>
+<BODY>
+<H1>pnmtoxwd</H1>
+Updated: 24 September 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pnmtoxwd - convert a PNM into an X11 window dump
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pnmtoxwd</B>
+
+[<B>-pseudodepth</B> <I>n</I>]
+
+[<B>-directcolor</B>]
+
+[<I>pnmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pnmtoxwd</b> reads a PNM image as input and produces an X11
+window dump as output.  You can display this output with <b>xwud</b>.
+
+<P>Normally, pnmtoxwd produces a StaticGray dump file for PBM and PGM
+files.  For PPM, it writes a PseudoColor dump file if there are up to
+256 colors in the input, and a DirectColor dump file otherwise.  You
+can use the <B>-directcolor</B> option to force a DirectColor dump.
+And you can use <B>-pseudodepth</B> to change the depth of PseudoColor
+dumps from the default of 8 bits / 256 colors.
+
+<p>In an X11 window dump file, various integers can be represented in
+either big endian (most significant byte first) or little endian code.
+Those generated by <b>pnmtoxwd</b> are always big endian.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="xwdtopnm.html">xwdtopnm</A>,
+<A HREF="pnm.html">pnm</A>,
+<b>xwud</b>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppm.html b/ppm.html
new file mode 100644
index 00000000..2c90804b
--- /dev/null
+++ b/ppm.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>PPM Format Specification</TITLE>
+<META NAME="manual_section" CONTENT="5">
+</HEAD>
+<BODY>
+<H1>ppm</H1>
+Updated: 03 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+PPM - Netpbm color image format
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>The PPM format is a lowest common denominator color image file
+format.
+
+<P>It should be noted that this format is egregiously inefficient.
+It is highly redundant, while containing a lot of information that the
+human eye can't even discern.  Furthermore, the format allows very
+little information about the image besides basic color, which means
+you may have to couple a file in this format with other independent
+information to get any decent use out of it.  However, it is very easy
+to write and analyze programs to process this format, and that is the
+point.
+
+<P>It should also be noted that files often conform to this format in
+every respect except the precise semantics of the sample values.
+These files are useful because of the way PPM is used as an
+intermediary format.  They are informally called PPM files, but to be
+absolutely precise, you should indicate the variation from true PPM.
+For example, &quot;PPM using the red, green, and blue colors that the
+scanner in question uses.&quot;
+
+<P>The name "PPM" is an acronym derived from "Portable Pixel Map."
+Images in this format (or a precursor of it) were once also called
+"portable pixmaps."
+
+<P>The format definition is as follows.  You can use the <a
+href="libnetpbm.html">libnetpbm</a> C subroutine library to read and
+interpret the format conveniently and accurately.
+
+<P>A PPM file consists of a sequence of one or more PPM images. There are
+no data, delimiters, or padding before, after, or between images.
+
+<P>Each PPM image consists of the following:
+
+<OL>
+<LI>A &quot;magic number&quot; for identifying the file type.
+A ppm image's magic number is the two characters &quot;P6&quot;.
+<LI>
+Whitespace (blanks, TABs, CRs, LFs).
+<LI>
+A width, formatted as ASCII characters in decimal.
+<LI>
+Whitespace.
+<LI>
+A height, again in ASCII decimal.
+<LI>
+Whitespace.
+<LI>
+The maximum color value (Maxval), again in ASCII decimal.  Must be less
+than 65536 and more than zero.
+<LI>
+Newline or other single whitespace character.
+
+<LI>A raster of Height rows, in order from top to bottom.  Each row
+consists of Width pixels, in order from left to right.  Each pixel is
+a triplet of red, green, and blue samples, in that order.  Each sample
+is represented in pure binary by either 1 or 2 bytes.  If the Maxval
+is less than 256, it is 1 byte.  Otherwise, it is 2 bytes.  The most
+significant byte is first.
+
+<P>A row of an image is horizontal.  A column is vertical.  The pixels
+in the image are square and contiguous.
+     
+<LI>In the raster, the sample values are &quot;nonlinear.&quot; They are
+proportional to the intensity of the ITU-R Recommendation BT.709 red,
+green, and blue in the pixel, adjusted by the BT.709 gamma transfer
+function.  (That transfer function specifies a gamma number of 2.2 and
+has a linear section for small intensities).  A value of Maxval for
+all three samples represents CIE D65 white and the most intense color
+in the color universe of which the image is part (the color universe
+is all the colors in all images to which this image might be
+compared).
+
+<p>ITU-R Recommendation BT.709 is a renaming of the former CCIR
+Recommendation 709.  When CCIR was absorbed into its parent
+organization, the ITU, ca. 2000, the standard was renamed.  This
+document once referred to the standard as CIE Rec. 709, but it isn't
+clear now that CIE ever sponsored such a standard.
+
+<P>Note that another popular color space is the newer sRGB.  A common
+variation on PPM is to subsitute this color space for the one specified.
+
+<LI>
+Note that a common variation on the PPM format is to have the sample
+values be &quot;linear,&quot; i.e. as specified above except without
+the gamma adjustment.  <B>pnmgamma</B> takes such a PPM variant as
+input and produces a true PPM as output.
+
+<LI>Characters from a &quot;#&quot; to the next end-of-line, before
+the maxval line, are comments and are ignored.
+
+</OL>
+
+<P>Note that you can use <B>pamdepth</B> to convert between a the
+format with 1 byte per sample and the one with 2 bytes per sample.
+
+<P>There is actually another version of the PPM format that is fairly
+rare: &quot;plain&quot; PPM format.  The format above, which generally
+considered the normal one, is known as the &quot;raw&quot; PPM format.
+See <B><A HREF="pbm.html">pbm</A></B> for some commentary on how plain
+and raw formats relate to one another and how to use them.
+
+<P>The difference in the plain format is:
+
+<DL COMPACT>
+<DT>-<DD>
+There is exactly one image in a file.
+<DT>-<DD>
+The magic number is P3 instead of P6.
+<DT>-<DD>
+Each sample in the raster is represented as an ASCII decimal number
+(of arbitrary size).
+<DT>-<DD>
+Each sample in the raster has white space before and after it.  There must
+be at least one character of white space between any two samples, but there
+is no maximum.  There is no particular separation of one pixel from another --
+just the required separation between the blue sample of one pixel from the
+red sample of the next pixel.
+<DT>-<DD>
+No line should be longer than 70 characters.
+</DL>
+<P>
+
+Here is an example of a small pixmap in this format.
+<PRE>
+P3
+# feep.ppm
+4 4
+15
+ 0  0  0    0  0  0    0  0  0   15  0 15
+ 0  0  0    0 15  7    0  0  0    0  0  0
+ 0  0  0    0  0  0    0 15  7    0  0  0
+15  0 15    0  0  0    0  0  0    0  0  0
+</PRE>
+
+<P>There is a newline character at the end of each of these lines.
+
+<P>Programs that read this format should be as lenient as possible,
+accepting anything that looks remotely like a pixmap.
+
+<H2 id="compatibility">COMPATIBILITY</H2>
+
+<P>Before April 2000, a raw format PPM file could not have a maxval greater
+than 255.  Hence, it could not have more than one byte per sample.  Old
+programs may depend on this.
+
+<P>Before July 2000, there could be at most one image in a PPM file.  As
+a result, most tools to process PPM files ignore (and don't read) any
+data after the first image.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pnm.html">pnm</A>,
+<A HREF="pgm.html">pgm</A>,
+<A HREF="pbm.html">pbm</A>,
+<A HREF="pam.html">pam</A>,
+<A HREF="directory.html">programs that process PPM</A>
+
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#compatibility">COMPATIBILITY</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppm3d.html b/ppm3d.html
new file mode 100644
index 00000000..de602fc3
--- /dev/null
+++ b/ppm3d.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppm3d User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppm3d</H1>
+Updated: 24 April 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppm3d - convert two PPM images into a red/blue 3d glasses PPM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppm3d</B>
+<I>leftppmfile</I>
+<I>rightppmfile</I>
+[<I>horizontal_offset</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppm3d</b> reads two PPM images as input and produces a PPM as
+output, with the images overlapping by <I>horizontal_offset</I> pixels
+in blue/red format.  The idea is that if you look at the image with
+3-D glasses (glasses that admit only red through one eye and only green
+through the other), you see an image with depth.  This is called a
+stereogram.
+
+<P><I>horizontal_offset</I> defaults to 30 pixels.  The input PPMs
+must be the same dimensions.
+
+<p>To make a different kind of stereogram, use <b>pamstereogram</b>.
+That makes a steregram that you view without special glasses, just by
+letting your eyes unfocus so that each eye sees different parts of the
+image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pamstereogram.html">pamstereogram</A>
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by David K. Drum.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmbrighten.html b/ppmbrighten.html
new file mode 100644
index 00000000..542cce0f
--- /dev/null
+++ b/ppmbrighten.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmbrighten User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmbrighten</H1>
+Updated: 09 January 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmbrighten - change a PPM image's Saturation and Value
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>ppmbrighten</b>
+[<b>-normalize</b>]
+[<b>-saturation </b>[<b>+</b>|<b>-</b><i>saturation_percent</i>]]
+[<b>-value </b>[<b>+</b>|<b>-</b><i>value_percent</i>]]
+<i>ppmfile</i>
+
+<?makeman .SH OPTION USAGE ?>
+<P>All options can be abbreviated to their shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmbrighten</b> increases or decreases the Saturation and Value
+(from the HSV color space) of each pixel of a PPM image.  You specify
+the per centage change for each of those parameters.
+
+<p>You can also remap the colors of the pixels so their Values cover
+the full range of possible Values.
+
+<p>Hue-Saturation-Value, or HSV, is one way to represent a color, like
+the more well-known RGB.  Hue, Saturation, and Value are numbers in
+the range from 0 to 1.  We always capitalize them in this document
+when we mean the number from the HSV color space, especially since
+"value" as a conventional English word has a much more abstract
+meaning.
+
+<p>Value is a measure of how much total light intensity is in the
+color, relative to some specified maximum (the PPM format is also
+defined in terms of a specified maximum intensity -- For the purposes
+of this program, they are the same).  In particular, it is the
+intensity of the most intense primary color component of the color
+divided by the maximum intensity possible for a component.  Zero Value
+means black.  White has full Value.
+
+<p>Hue is an indication of the secondary color with the same intensity
+that most closely approximates the color.  A secondary color is made
+of a combination of at most two of the primary colors.
+
+<p>Saturation is a measure of how close the color is to the color
+indicated by the Hue and Value.  A lower number means more light of
+the third primary color must be added to get the exact color.  Full
+Saturation means the color is a secondary color.  Zero Saturation
+means the color is gray (or black or white).  Decreasing the
+saturation of a color tends to make it washed out.
+
+<p>If it is impossible to increase the Value of a pixel by the amount you
+specify (e.g. the Value is .5 and you specify +200%), <b>ppmbrighten</b>
+increases it to full Value instead.
+
+<p>If it is impossible to increase the Saturation of a pixel by the amount
+you specify (e.g. it is already half saturated and you specify +200%),
+<b>ppmbrighten</b> increases it to full Saturation instead.
+
+<p>For a simpler kind of brightening, you can use <b>pamfunc
+-multiplier</b> simply to increase the intensity of each pixel by a
+specified per centage, clipping each RGB component where the
+calculated intensity would exceed full intensity.  Thus, the brightest
+colors in the image would change chromaticity in addition to not
+getting the specified intensity boost.  For <em>decreasing</em>
+brightness, <b>pamfunc</b> should do the same thing as
+<b>ppmbrighten</b>.
+
+<p><b>ppmflash</b> does another kind of brightening.  It changes the
+color of each pixel to bring it a specified per centage closer to white.
+This increases the value and saturation.
+
+<A NAME="examples"></a>
+<H2>EXAMPLES</H2>
+<p>To double the Value of each pixel:
+<pre>
+ppmbrighten -v 100
+</pre>
+
+<p>To double the Saturation and halve the value of each pixel:
+<pre>
+ppmbrighten -s 100 -v -50
+</pre>
+
+<A NAME="options"></a>
+<H2>OPTIONS</H2>
+
+<DL>
+<DT><b>-value </b><i>value_percent</i>
+
+<DD>This option specifies the amount, as a per centage, by which you want
+to change the Value of each pixel.  It may be negative.
+
+<DT><b>-saturation </b><i>value_percent</i>
+
+<DD>This option specifies the amount, as a per centage, by which you want
+to change the Saturation of each pixel.  It may be negative.
+
+
+<DT><b>-normalize</b>
+
+<DD>This option causes <b>ppmbrighten</b> to linearly remap the Values
+of the pixels to cover the range 0 to 1.  The option name is wrong --
+this operation is not normalization (it was named in error and the
+name has been kept for backward compatibility).
+
+<p><b>ppmbrighten</b> applies the brightening that you specify with 
+the <b>-value</b> option <em>after</em> the remapping.
+
+<p>Before Netpbm 10.14 (March 2003), your input must be from a seekable
+file (not a pipe) to use <b>-normalize</b>.  If it isn't, the program fails
+with a bogus error message.
+
+</DL>  
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmnorm.html">pgmnorm</A>, 
+<A HREF="ppmdim.html">ppmdim</A>, 
+<A HREF="pamfunc.html">pamfunc</A>, 
+<A HREF="ppmflash.html">ppmflash</A>, 
+<A HREF="pamdepth.html">pamdepth</A>, 
+<A HREF="pnmgamma.html">pnmgamma</A>, 
+<A HREF="ppmhist.html">ppmhist</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1990 by Brian Moffet.
+Copyright (C) 1989 by Jef Poskanzer.
+
+<P>
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.  This software is provided &quot;as is&quot; without express or
+implied warranty.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmchange.html b/ppmchange.html
new file mode 100644
index 00000000..2414e8d9
--- /dev/null
+++ b/ppmchange.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmchange User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmchange</H1>
+Updated: September 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmchange - change all pixels of one color to another in a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmchange</B>
+
+[<B>-closeness=</B><I>closeness_percent</I>]
+[<B>-remainder=</B><I>remainder_color</I>]
+[<B>-closeok</b>]
+[<I>oldcolor newcolor</I>] ...
+[<I>ppmfile</I>]
+
+<A NAME="example"></a>
+<H2>EXAMPLES</H2>
+
+<PRE>
+<b>ppmchange red blue redimage.ppm &gt;blueimage.ppm</b>
+
+<b>ppmchange red red -remainder=black myimage.ppm &gt;redblack.ppm</b>
+
+<b>ppmchange -closeness=90 white white black black</b>
+
+</PRE>
+
+<A NAME="description">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmchange</b> reads a PPM image as input and changes all pixels of
+colr <I>oldcolor</I> to color <I>newcolor</I>.
+
+You may specify up to 256 oldcolor/newcolor pairs on the command line.
+<B>ppmchange</B> leaves all colors not mentioned unchanged, unless you
+specify the <B>-remainder</B> option, in which case they are all
+changed to the single specified color.
+
+<P>You can specify that colors similar, but not identical, to the ones
+you specify get replaced by specifying a &quot;closeness&quot; factor.
+
+<P>Specify the colors as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<P>If a pixel matches two different <I>oldcolor</I>s, <B>ppmchange</B>
+replaces it with the <I>newcolor</I> of the leftmost specified one.
+
+<p>The maxval of the output image is the same as that of the input
+image.  If a <i>newcolor</i> you specify cannot be exactly represented
+in that maxval, <b>ppmchange</b> assumes a color that is as close as
+possible to what you specified but can be represented with your
+maxval.  Unless you specify the <b>-closeok</b> option,
+<b>ppmchange</b> issues a warning that it is using an approximation.
+
+<p>A common way that you can have this maxval problem, where the color
+you specify cannot be represented with your maxval, is that your input
+is a PBM (black and white) image that you are colorizing.  The maxval
+in this case is 1, which severely limits the colors to which you can
+change.  To avoid this problem, use <b>pamdepth</b> to make the maxval
+of your input something consistent with your colors.  255 is usually a
+good choice.
+
+<p>Before Netpbm 10.22 (April 2004), <b>ppmchange</b> always behaved as
+if the user specified <b>-closeok</b> and there was no <b>-closeok</b>
+option.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-closeness </B><I>closeness_percent</I>
+
+<DD><I>closeness</I> is an integer per centage indicating how close
+to the color you specified a pixel must be to get replaced.  By
+default, it is 0, which means the pixel must be the exact color you
+specified.
+
+<P>A pixel gets replaced if the distance in color between it and the
+color you specified is less than or equal to <I>closeness</I> per cent
+of the maxval.
+
+<P>The &quot;distance&quot; in color is defined as the cartesian sum of the
+individual differences in red, green, and blue intensities between the
+two pixels, normalized so that the difference between black and white
+is 100%.
+
+<P>This is probably simpler than what you want most the time.  You
+probably would like to change colors that have similar chrominance,
+regardless of their intensity.  So if there's a red barn that is
+variously shadowed, you want the entire barn changed.  But because the
+shadowing significantly changes the color according to
+<B>ppmchange</B>'s distance formula, parts of the barn are probably
+about as distant in color from other parts of the barn as they are
+from green grass next to the barn.
+
+<P>Maybe <B>ppmchange</B> will be enhanced some day to do chrominance
+analysis.
+
+<dt><b>-closeok</b>
+
+<dd>This option affects how <b>ppmchange</b> interprets a color you
+specify in the arguments.  When you specify this option, <b>ppmchange</b>
+may use a color close to, but not the same as what you specify.  See
+<a href="#description">the description section</a> for details.
+
+<p>This option was new in Netpbm 10.22 (April 2004).  Before that,
+<b>ppmchange</b> always behaved as if you specified this option.
+     
+<DT><B>-remainder </B><I>color</I>
+
+<DD><B>ppmchange</B> changes all pixels which are not of a color for
+which you specify an explicit replacement color on the command line to
+color <I>color</I>.
+
+<P>An example application of this is
+
+<pre>
+<B>ppmchange -remainder=black red red</B>
+</pre>
+
+to lift only the red portions from an image, or
+<pre>
+<B>ppmchange -remainder=black red white | ppmtopgm</B>
+</pre>
+
+to create a mask file for the red portions of the image.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>,
+
+<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Wilson H. Bent. Jr. (<A HREF="mailto:whb@usc.edu">whb@usc.edu</A>)
+with modifications by Alberto Accomazzi (<A
+HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmcie.html b/ppmcie.html
new file mode 100644
index 00000000..326a793a
--- /dev/null
+++ b/ppmcie.html
@@ -0,0 +1,395 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmcie User Manual</TITLE></HEAD>
+<BODY>
+<H1>PPMCIE</H1>
+Updated: July 31, 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmcie - draw a CIE color chart as a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+
+
+<B>ppmcie</B>
+
+[
+<B>-rec709</B>|<B>-cie</B>|<B>-ebu</B>|<B>-hdtv</B>|<B>-ntsc</B>|<B>-smpte</B>
+]
+[<B>-xy</B>|<B>-upvp</B>]
+
+[<B>-red</B> <I>rx</I> <I>ry</I>]
+
+[<B>-green</B> <I>gx</I> <I>gy</I>]
+
+[<B>-blue</B> <I>bx</I> <I>by</I>]
+
+[<B>-white</B> <I>wx</I> <I>wy</I>]
+
+[<B>-size</B> <I>edge</I>]
+
+[{<B>-xsize</B>|<B>-width</B>} <I>width</I>]
+
+[{<B>-ysize</B>|<B>-height</B>} <I>height</I>]
+
+[<B>-noblack</B>]
+[<B>-nowpoint</B>]
+[<B>-nolabel</B>]
+[<B>-noaxes</B>]
+[<B>-full</B>]
+
+<p>You may abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>ppmcie</B> creates a PPM file containing a plot of the CIE
+&quot;tongue&quot; color chart -- to the extent possible in a PPM
+image.  Alternatively, creates a pseudo-PPM image of the color tongue
+using RGB values from a color system of your choice.
+
+<P>
+The CIE color tongue is an image of all the hues that can be described
+by CIE X-Y chromaticity coordinates.  They are arranged on a two
+dimensional coordinate plane with the X chromaticity on the horizontal
+axis and the Y chromaticity on the vertical scale.  (You can choose
+alternatively to use CIE u'-v' chromaticity coordinates, but the
+general idea of the color tongue is the same).
+
+<P>
+Note that the PPM format specifies that the RGB values in the file are
+from the ITU-R Recommendation BT.709 color system, gamma-corrected.
+And positive.  See <B><A HREF="ppm.html">ppm</A></B> for details.  If
+you use one of the color system options on <B>ppmcie</B>, what you get
+is not a true PPM image, but is very similar.  If you display such
+<B>ppmcie</B> output using a device that expects PPM input (which
+includes just about any computer graphics display program), it will
+display the wrong colors.
+
+<P>
+However, you may have a device that expects one of these variations on 
+PPM.
+
+<P>
+In every RGB color system you can specify, including the default
+(which produces a true PPM image) there are hues in the color tongue
+that can't be represented.  For example, monochromatic blue-green with 
+a wavelength of 500nm cannot be represented in a PPM image.  
+
+<P>
+For these hues, <B>ppmcie</B> substitutes a similar hue as follows:
+They are desaturated and rendered as the shade where the edge of the
+Maxwell triangle intersects a line drawn from the requested shade to
+the white point defined by the color system's white point.
+Furthermore, unless you specify the <B>-full</B> option, <B>ppmcie</B>
+reduces their intensity by 25% compared to the true hues in the image.
+
+<P>
+<B>ppmcie</B> draws and labels the CIE X-Y coordinate axes unless you
+choose otherwise with options.
+
+<P>
+<B>ppmcie</B> draws the Maxwell triangle for the color system in use
+on the color tongue.  The Maxwell triangle is the triangle whose
+vertices are the primary illuminant hues for the color system.  The
+hues inside the triangle show the color gamut for the color system.
+They are also the only ones that are correct for the CIE X-Y
+chromaticity coordinates shown.  (See explanation above).  <b>ppmcie</b>
+denotes the Maxwell triangle by rendering it at full brightness, while
+rendering the rest of the color tongue as 3/4 brightness.  You can turn
+this off with options.
+
+<P>
+<B>ppmcie</B> also places a black cross at the color system's white
+point (with the center of the cross open so you can actually see the
+white color) and displays in text the CIE X-Y chromaticities of the
+primary illuminants and white point for the color system.  You can
+turn this off with options, though.
+
+<P>
+<B>ppmcie</B> annotates the periphery of the color tongue with the
+wavelength, in nanometers of the monochromatic hues which appear
+there.
+
+<P>
+<B>ppmcie</B> displays the black body chromaticity curve for Planckian
+radiators from 1000 to 30000 kelvins on the image.  This curve traces the
+colors of black bodies as various temperatures.
+
+<P>
+You can choose from several standard color systems, or specify one of
+your own numerically.
+
+<P>
+CIE charts, by their very nature, contain a very large number of
+colors.  If you're encoding the chart for a color mapped device or
+file format, you'll need to use <B>pnmquant</B> or <B>ppmdither</B> to
+reduce the number of colors in the image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-rec709</B>
+<DT><B>-cie</B>
+<DT><B>-ebu</B>
+<DT><B>-hdtv</B>
+<DT><B>-ntsc</B>
+<DT><B>-smpte</B>
+
+<DD>
+Select a standard color system whose gamut to plot.  The default is
+<B>-rec709</B>, which chooses ITU-R Recommendation BT.709,
+gamma-corrected.  This is the only color system for which
+<B>ppmcie</B>'s output is a true PPM image.  See explanation above.
+<B>-ebu</B> chooses the primaries used in the PAL and SECAM
+broadcasting standards.  <B>-ntsc</B> chooses the primaries specified
+by the NTSC broadcasting system (few modern monitors actually cover
+this range).  <B>-smpte</B> selects the primaries recommended by the
+Society of Motion Picture and Television Engineers (SMPTE) in
+standards RP-37 and RP-145, and <B>-hdtv</B> uses the much broader
+<I>HDTV ideal</I> primaries.  <B>-cie</B> chooses a color system that
+has the largest possible gamut within the spectrum of the chart.  This
+is the same color system as you get with the <B>-cie</B> option to
+John Walker's <B>cietoppm</B> program.
+
+<DT><B>-xy</B>
+
+<DD>
+plot CIE 1931 x y chromaticities.  This is the default.
+
+<DT><B>-upvp</B>
+
+<DD>
+plot u' v' 1976 chromaticities rather than CIE 1931 x y
+chromaticities.  The advantage of u' v' coordinates is that equal
+intervals of distance on the u' v' plane correspond roughly to the
+eye's ability to discriminate colors.
+
+<DT><B>-red</B><I> rx ry</I>
+
+<DD>
+specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the red
+illuminant of a custom color system and selects the custom system.
+
+<DT><B>-green</B><I> gx gy</I>
+
+<DD>
+specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the green
+illuminant of the color system and selects the custom system.
+
+<DT><B>-blue</B><I> bx by</I>
+
+<DD>
+specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the blue
+illuminant of the color system and selects the custom system.
+
+<DT><B>-white</B><I> wx wy</I>
+
+<DD>
+specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the white
+point of the color system and selects the custom system.
+
+<DT><B>-size</B><I> edge</I>
+
+<DD>
+Create a pixmap of <I>edge</I> by <I>edge</I> pixels.  The default is
+512x512.
+
+<DT><B>-xsize|-width</B><I> width</I>
+
+<DD>
+Sets the width of the generated image to <I>width</I> pixels.  The
+default width is 512 pixels.  If the height and width of the image are
+not the same, the CIE diagram will be stretched in the longer
+dimension.
+
+<DT><B>-ysize|-height</B><I> height</I>
+
+<DD>
+Sets the height of the generated image to <I>height</I> pixels.  The
+default height is 512 pixels.  If the height and width of the image
+are not the same, the CIE diagram will be stretched in the longer
+dimension.
+
+<DT><B>-noblack</B>
+
+<DD>
+Don't plot the black body chromaticity curve.
+
+<DT><B>-nowpoint</B>
+
+<DD>
+Don't plot the color system's white point.
+
+<DT><B>-nolabel</B>
+
+<DD>
+Omit the label.
+
+<DT><B>-noaxes</B>
+
+<DD>
+Don't plot axes.
+
+<DT><B>-full</B>
+
+<DD>
+Plot the entire CIE tongue in full brightness; don't dim the part
+which is outside the gamut of the specified color system (i.e. outside
+the Maxwell triangle).
+
+</DL>
+
+<h2 id="interpret">INTERPRETATION OF COLOR CHART</h2>
+
+<p>A color spectrum is a linear combination of one or more monochromatic
+colors.
+
+<p>A color is a set of color spectra that all look the same to the
+human eye (and brain).  Actually, for the purposes of the definition,
+we assume the eye has infinite precision, so we can call two color
+spectra different colors even though they're so close a person
+couldn't possibly tell them apart.
+
+<p>The eye contains 3 kinds of color receptors (cones).  Each has a
+different response to the various monochromatic colors.  One kind
+responds most strongly to blue, another red, another green.  Because
+there are only three, many different color spectra will excite the
+cones at exactly the same level, so the eye cannot tell them apart.
+All such spectra that excite the cones in the same way are a single
+color.
+
+<p>Each point in the color tongue represents a unique color.  But
+there are an infinite number of color spectra in the set that is that
+color; i.e. an infinite number of color spectra that would look to you
+like this point.  A machine could tell them apart, but you could not.
+
+<p>Remember that the colors outside the highlighted triangle are
+approximations of the real colors because the PPM format cannot
+represent them (and your display device probably cannot display them).
+That is, unless you're using a variation of PPM and a special display
+device, as discussed earlier in this manual.
+
+<p>A color is always relative to some given maximum brightness.  A
+particular beam of light looks lime green if in a dim field, but
+pea green if in a bright field.  An image on a movie screen may
+look pitch black because the projector is not shining any light on
+it, but when you turn off the projector and look at the same spot in
+room light, the screen looks quite white.  The same light from that spot
+hit your eye with the project on as with it off.
+
+<p>The chart shows two dimensions of color.  The third is intensity.
+All the colors in the chart have the same intensity.  To get all
+possible colors in the gamut, Make copies of the whole chart at every
+intensity between zero and the maximum.
+
+<p>The edge of the tongue consists of all the monochromatic colors.
+A monochromatic color is one with a single wavelength.  I.e. a color
+that is in a rainbow.  The numbers you see are the wavelengths in
+nanometers.
+
+<p>Any straight line segment within the tongue contains colors which
+are linear combinations of two colors -- the colors at either end of
+the line segment.
+
+<p>Any color in the chart can be created from two other colors (actually,
+from any of an infinite number of pairs of other colors).
+
+<p>All the colors within a triangle inside the tongue can be created
+from a linear combination of the colors at the vertices of that triangle.
+
+<p>Any color in the tongue can be created from at most 3 monochromatic
+colors.
+
+<p>The highlighted triangle shows the colors that can be expressed
+in the tristimulus color system you chose.  (ITU-R BT.709 by default).
+The corners of the triangle are the 3 primary illuminants in that
+system (a certain red, green, and blue for BT.709).  The edges of
+the triangle, then, represent the colors you can represent with two
+of the primary illuminants (saturated colors), and the interior colors
+require all three primary illuminants (are not saturated).
+
+<p>In the ITU-R BT.709 color system (the default), the white point is
+defined as D65, which is (and is named after) the color of a black
+body at 6502 kelvins.  Therefore, you should see the temperature curve
+on the image pass through the white part of the image, and the cross
+that marks the white point, at 6502 kelvins.
+
+<p>D65 white is supposed to be the color of the sun.  If you have a
+perfect BT.709 display device, you should see the color of the sun
+at the white point cross.  That's an important color, because when you
+look at an object in sunlight, the color that reflects of the object
+is based on the color of sunlight.  Note that the sun produces a
+particular color spectrum, but many other color spectra are the same
+color, and display devices never use the actual color spectrum of the
+sun.
+
+<p>The colors at the corners of the triangle have the chromaticities
+phosphors in a monitor that uses the selected color system.  Note
+that in BT.709 they are very close to monochromatic red, green,
+and blue, but not quite.  That's why you can't display even one true
+color of the rainbow on a video monitor.
+
+<p>Remember that the chart shows colors of constant intensity,
+therefore the corners of the triangles are not the full colors of the
+primary illuminants, but only their chromaticities.  In fact, the
+illuminants typically have different intensities.  In BT.709, the
+blue primary illuminant is far more intense than the green, which is
+more intense than the red.  Designers did this in order to make an
+equal combination of red, green, and blue generate gray.  I.e.  a
+combination of full strength red, full strength green, and full
+strength blue BT.709 primary illuminants is D65 white.
+
+<p>The tongue has a sharp straight edge at the bottom because that's
+the limit of human vision.  There are colors below that line, but they
+involve infrared and ultraviolet light, so you can't see them.  This
+line is called the &quot;line of purples.&quot;
+
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>
+Copyright (C) 1995 by John Walker (<A
+HREF="mailto:kelvin@fourmilab.ch">kelvin@fourmilab.ch</A>)
+
+<p>
+WWW home page: <A
+HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A>
+
+<P>
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided as
+is without express or implied warranty.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#interpretation">INTERPRETATION OF COLOR CHART</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmcolormask.html b/ppmcolormask.html
new file mode 100644
index 00000000..82cf12e5
--- /dev/null
+++ b/ppmcolormask.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmcolormask User Manual</TITLE></HEAD>
+
+<BODY>
+
+<H1>ppmcolormask</H1>
+Updated: 1 May 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+ppmcolormask - produce mask of areas of a certain color in a PPM file
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmcolormask</B>
+
+<b>-color=</b><i>color_list</i>
+
+[<I>ppmfile</I>]
+
+<p>Obsolete:
+
+<p>
+<B>ppmcolormask</B>
+
+<I>color</I>
+
+[<I>ppmfile</I>]
+
+<h2 id="examples">EXAMPLES</h2>
+
+<pre>
+<code>
+    ppmcolormask -color red testimg.ppm &gt;redmask.pbm
+    pamcomp background.ppm testimg.ppm -alpha=redmask.pbm &gt;test.ppm
+
+    ppmcolormask -color=red,pink,salmon testimg.ppm &gt;reddishmask.pbm
+
+    ppmcolormask -color=bk:red,bk:orange,bk:yellow testimg.ppm &gt;firemask.pbm
+
+</code>
+</pre>
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>ppmcolormask</b> reads a PPM file as input and produces a PBM
+(bitmap) file as output.  The output file is the same dimensions as
+the input file and is black in all places where the input file is a
+color indicated by the <b>-color</b> option, and white everywhere
+else.
+
+<P>The output of <B>ppmcolormask</B> is useful as an alpha mask input
+to <B>pamcomp</B>.  Note that you can generate such an alpha mask
+automatically as you convert to PNG format with <B><A
+HREF="pnmtopng.html">pnmtopng</A></B>.  Use its <B>-transparent</B>
+option.
+
+<P><I>ppmfile</I> is the input file.  If you don't specify
+<I>ppmfile</I>, the input is from Standard Input.
+
+<P>The output goes to Standard Output.
+
+<p>In the obsolete alternative syntax, specifying the <i>color</i>
+names a single exact color to be masked.
+
+<p><b>ppmchange</b> does a similar thing: it modifies an image by
+changing colors you specify to other colors you specify.  The two
+programs give you somewhat different means of specifying colors in the
+input image.
+
+<p>To make a mask of an image's background, without having to tell it
+what color it is, use <b>pambackground</b>.
+
+<h2 id="options">OPTIONS</h2>
+
+<dl>
+<dt><b>-color=</b><I>color_list</I>
+
+<dd>This mandatory option specifies the colors that are to be masked
+(where the image is one of these colors, the output mask will be black).
+
+<p>Examples:
+
+<ul>
+<li><b>-color=red</b>
+<li><b>-color=red,pink,salmon</b>
+<li><b>-color=rgb:80/80/ff</b>
+<li><b>-color=bk:red,bk:orange,bk:yellow</b>
+</ul>
+
+<p><i>color_list</i> is a list of colors separated by commas.  Each
+color is either an exact color name as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a> or one of the <a
+href="libppm.html#berlinkay">Berlin-Kay color names</a>.  In the
+latter case, all colors that are better described by that Berlin-Kay
+color name than any other are in the mask set.
+
+<p>The algorithm <b>ppmcolormask</b> uses to determine to which colors
+a Berlin-Kay color name applies is based on a Sugeno-type fuzzy
+inference system developed by <a
+href="mailto:kenan@unix.ba">Kenan Kalajdzic</a> in 2006.  The
+fuzzy model consists of partially linear membership functions defined
+in the HSV color space.  Although more complex algorithms for fuzzy
+color matching exist, this algorithm is intentionally simplified to
+achieve a satisfactory speed using relatively compact code.
+
+<p>This option was new in Netpbm 10.34 (June 2006).  Before that,
+you must use the <i>color</i> argument and cannot specify a Berlin-Kay
+color.
+
+</dl>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pambackground.html">pambackground</A></B>,
+<B><A HREF="ppmchange.html">ppmchange</A></B>,
+<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="pbmmask.html">pbmmask</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmcolors.html b/ppmcolors.html
new file mode 100644
index 00000000..c2c958b4
--- /dev/null
+++ b/ppmcolors.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmcolors User Manual</TITLE></HEAD>
+
+<BODY>
+
+<p><b>ppmcolors</b> is obsolete.  The more general program <b><a
+href=pamseq.html>pamseq</a></b> took its place in June 2002.
+<b>ppmcolors</b> remains for backward compatibility, but all it does is
+run <b>pamseq</b>.  It is slower and less flexible than running
+<b>pamseq</b> directly.
+
+</BODY>
+</HTML>
diff --git a/ppmdcfont.html b/ppmdcfont.html
new file mode 100644
index 00000000..c7b79291
--- /dev/null
+++ b/ppmdcfont.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmdcfont User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmdcfont</H1>
+Updated: September 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+ppmdcfont - Turn a Ppmdfont file into C source for a builtin font
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmdcfont</B>
+
+
+<p>(There are no arguments or options)
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmdcfont</b> creates a C source file that you can compile into
+a built-in font for use with the Netpbm PPM drawing facilities.  It
+reads a Ppmdfont file on Standard Input and writes the C source code to
+Standard Output.
+
+<p>The output C source code has the font object's name hardcoded as
+<b>ppmd_standardfont</b>, which you will definitely want to edit,
+because that is the name of the font built in to <b>libnetpbm</b>.  If
+you don't change it, it will conflict both cognitively and in program
+linking.  There should obviously be an option on <b>ppmdcfont</b> to
+choose this, but the development effort has not been justified so far.
+
+<p>See <A HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function
+Manual</A> for details on Ppmdfont files.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmdraw.html">ppmdraw</A></B>, <B><A
+HREF="ppmddumpfont.html">ppmddumpfont</A></B>, <B><A
+HREF="ppmdcfont.html">ppmdcfont</A></B>, <A
+HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function Manual</A>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/ppmddumpfont.html b/ppmddumpfont.html
new file mode 100644
index 00000000..f17e3bff
--- /dev/null
+++ b/ppmddumpfont.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmddumpfont User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmddumpfont</H1>
+Updated: September 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+ppmddumpfont - dump a Ppmdfont file
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmddumpfont</B>
+
+
+<p>(There are no arguments or options)
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmddumpfont</b> reads a Ppmdfont file on Standard Input and
+writes to Standard Error a human readable description of the font.
+
+<p>See <A HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function
+Manual</A> for details on Ppmdfont files.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmdraw.html">ppmdraw</A></B>, <B><A
+HREF="ppmdmkfont.html">ppmdmkfont</A></B>, <B><A
+HREF="ppmdcfont.html">ppmdcfont</A></B>, <A
+HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function Manual</A>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/ppmdim.html b/ppmdim.html
new file mode 100644
index 00000000..0e17c5b7
--- /dev/null
+++ b/ppmdim.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmdim User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmdim</H1>
+Updated: June 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmdim - dim a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+ppmdim
+<I>dimfactor</I>
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>This program is largely obsoleted by the more general <A
+HREF="pamfunc.html"><b>pamfunc</b></A> (use the <b>-multiplier</b>
+option).  <b>ppmdim</b> remains for backward compatibility and also
+because its use of integer arithmetic may make it faster.
+
+<b>ppmdim</b> reads a PPM image input. Diminishes its brightness by
+the specified dimfactor.  The dimfactor may be in the range from 0.0
+(total blackness, deep night, nada, null, nothing) to 1.0 (original
+picture's brightness).
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>,
+<A HREF="pamfunc.html">pamfunc</A>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmdist.html b/ppmdist.html
new file mode 100644
index 00000000..0cdcc0d3
--- /dev/null
+++ b/ppmdist.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmdist User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmdist</H1>
+Updated: 22 July 1992
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmdist - simplistic grayscale assignment for machine generated, color images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmdist</B>
+
+[<B>-intensity</B>|<B>-frequency</B>]
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmdist</b> reads a PPM image as input and performs a simplistic
+grayscale assignment intended for use with grayscale or bitmap
+printers.
+
+<P>Often conversion from ppm to pgm will yield an image with contrast
+too low for good printer output.  The program maximizes contrast
+between the gray levels output.
+
+<P>A ppm input of n colors is read, and a pgm of n gray levels is
+written.  The gray levels take on the values 0..n-1, while maxval
+takes on n-1.
+
+<P>The mapping from color to stepped grayscale can be performed in
+order of input pixel intensity, or input pixel frequency (number of
+repetitions).
+
+<p>This program is helpful only for images with a very small number of
+colors.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-frequency</B>
+
+<DD>Sort input colors by the number of times a color appears in the
+input, before mapping to evenly distributed graylevels of output.
+
+<DT><B>-intensity</B>
+
+<dd>Sort input colors by their grayscale intensity, before mapping to
+evenly distributed graylevels of output.  This is the default.
+
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtopgm.html">ppmtopgm</A>,
+<A HREF="ppmhist.html">ppmhist</A>,
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Dan Stromberg.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmdither.html b/ppmdither.html
new file mode 100644
index 00000000..fd3eaaa4
--- /dev/null
+++ b/ppmdither.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmdither User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmdither</H1>
+Updated: 14 July 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+ppmdither - ordered dither for color images
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmdither</B>
+
+[<B>-dim</B> <I>power</I>]
+
+[<B>-red</B> <I>shades</I>]
+
+[<B>-green</B> <I>shades</I>]
+
+[<B>-blue</B> <I>shades</I>]
+
+[<I>ppmfile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmdither</b> reads a PPM image as input, and applies dithering
+to it to reduce the number of colors used down to the specified number
+of shades for each primary.  The default number of shades is red=5,
+green=9, blue=5, for a total of 225 colors.  To convert the image to a
+binary rgb format suitable for color printers, use -red 2 -green 2
+-blue 2.
+
+<p>You can do another kind of dither -- Floyd-Steinberg -- with 
+<b>pnmquant</b> or <b>pnmremap</b>.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-dim</B> <I>power</I>
+
+<DD> The size of the dithering matrix.  The dithering matrix is a
+square whose dimension is a power of 2.  <I>power</I> is that power of
+2.  The default is 4, for a 16 by 16 matrix.
+
+<DT><B>-red</B> <I>shades</I>
+
+<DD>
+The number of red shades to be used, including black; minimum of 2.
+
+<DT><B>-green</B> <I>shades</I>
+
+<DD>
+The number of green shades to be used, including black; minimum of 2.
+
+<DT><B>-blue</B> <I>shades</I>
+
+<DD>
+The number of blue shades to be used, including black; minimum of 2.
+
+</DL>
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pamdepth.html">pamdepth</A>,
+<A HREF="pnmquant.html">pnmquant</A>,
+<A href="pnmremap.html">pnmremap</A>,
+<A HREF="ppm.html">ppm</A>
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1991 by Christos Zoulas.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmdmkfont.html b/ppmdmkfont.html
new file mode 100644
index 00000000..6f66d1b0
--- /dev/null
+++ b/ppmdmkfont.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmdmkfont User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmdmkfont</H1>
+Updated: September 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+ppmdmkfont - Create Ppmdfont &quot;standard&quot;.
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmdmkfont</B>
+
+
+<p>(There are no arguments or options)
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmdmkfont</b> creates the &quot;standard&quot; Ppmdfont font as
+a Ppmdfont file.  It has no input; it always generates identical files.
+
+<p>This program is useful mainly as an example for creating other fonts.
+<b>libnetpbm</b> has the &quot;stanard&quot; font built in.
+
+<p>See <A HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function
+Manual</A> for details on Ppmdfont files.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmdraw.html">ppmdraw</A></B>, <B><A
+HREF="ppmddumpfont.html">ppmddumpfont</A></B>, <B><A
+HREF="ppmdcfont.html">ppmdcfont</A></B>, <A
+HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function Manual</A>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/ppmdraw.html b/ppmdraw.html
new file mode 100644
index 00000000..643da3ca
--- /dev/null
+++ b/ppmdraw.html
@@ -0,0 +1,255 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmdraw User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>ppmdraw</H1>
+Updated: 22 June 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+ppmdraw - draw lines, text, etc on a PPM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmdraw</B>
+
+{
+<B>-script=</B><I>script</I>
+|
+<B>-scriptfile=</B><i>filename</i>
+}
+[<b>-verbose</b>]
+
+[<I>ppmfile</I>]
+
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or an equals sign between an option name
+and its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>ppmdraw</B> draws lines, shapes, text, etc. on a PPM image.  It is
+essentially an easy-to-program front end to <b>libnetpbm</b>'s
+&quot;ppmd&quot; subroutines.  It lets you create a human-friendly
+script to describe the drawing rather than write a C program.
+
+<p>You supply drawing instructions with a script, which you supply either
+in a file named by a <b>-scriptfile</b> option or as the value of a
+<b>-script</b> option.  Here is an example script:
+
+<pre>
+<code>
+setpos 50 50;
+text_here 10 30 &quot;hello&quot;;
+setcolor black;
+text_here 10 0 &quot;there&quot;;
+line_here 5 20;
+</code>
+</pre>
+
+<p>This example starts at Column 50, Row 50 of the input image and
+writes the word &quot;hello&quot; there in 10 pixel high white letters
+at a 30 degree angle up from horizontal.  Then, from where that leaves
+off, the script writes &quot;there&quot; in 10 pixel high black
+letters horizontally.  Finally, it draws a black line to a point 5
+pixels over and 20 pixels down from the end of &quot;there.&quot;
+
+<P>If you don't specify <I>ppmfile</I>, <B>ppmdraw</B> reads its input
+PPM image from Standard Input.
+
+<P>The output image goes to Standard Output.
+
+<p><b>ppmdraw</b> works on multi-image streams.  It executes the same
+script on each input image and produces an output stream with one image
+for each input image.  But before Netpbm 10.32 (February 2006),
+<b>ppmdraw</b> ignored every image after the first.
+
+<p>If you just want to add a single line of text to an image,
+<b>ppmlabel</b> may be more what you want.
+
+
+<H2 id="options">OPTIONS</H2>
+
+
+<DL COMPACT>
+<DT><B>-script=</B><I>script</I>
+
+<DD>This option gives the script.  See <a href="#script">Script</a>.
+
+<p>You may not specify both <b>-script</b> and <b>-scriptfile</b>.
+
+<dt><b>-scriptfile=</b><i>filename</i>
+
+<dd>This option names a file that contains the script.  <b>-</b>
+means Standard Input.
+
+<p>You may not specify both <b>-script</b> and <b>-scriptfile</b>.
+
+<p>You may not specify <b>-</b> (Standard Input) for both
+<b>-scriptfile</b> and the input image file.
+
+</DL>
+
+
+<H2 ID="script">SCRIPT</H2>
+
+<p>The heart of <b>ppmdraw</b> function is its script.  The script is
+a character stream.  The stream consists of commands.  Commands are
+separated by semicolons.  White space is regarded just like in C: Any
+contiguous stretch of unquoted white space is equivalent to a single
+space character.  Note that this means newlines have no particular
+significance.
+
+<p>A command is composed of tokens, separated from each other by
+white space.  To write a token that contains white space, enclose
+it in double quotes.  Everything between two matched quotation marks
+is one token.
+
+<p>The first token of a command is the verb, which determines the
+basic function of the command.  The rest of the tokens of the command
+are arguments, the meaning of which depends upon the verb.  The
+following list gives all the valid verbs, and for each its meaning and
+its arguments.
+
+<dl>
+<dt>setpos
+
+<dd>Set the &quot;current position&quot; in the image.  This affects
+where subsequent commands draw things.  The 2 arguments are the column
+and row number.
+
+<p>At the start of the script, the current position is (0,0).
+
+<dt>setlinetype
+
+<dd>The 1 argument is &quot;normal&quot; or &quot;nodiag.&quot;.  This
+effects a <b>ppmd_setlinetype()</b> call.  Further details are not yet
+documented.
+
+<dt>setlineclip
+
+<dd>This effects a <b>ppmd_setlineclip()</b> call.  Not yet documented.
+
+<dt>setcolor
+
+<dd>This sets the &quot;current color&quot;, which determines the color
+in which subsequent drawing commands draw.  Before the first
+<b>setcolor</b>, the current color is white.
+
+<dt>setfont
+
+<dd>This sets the &quot;current font&quot;, which determines the font
+in which subsequent text drawing commands draw.  Before the first
+<b>setfont</b>, the current color is a built in font called
+&quot;standard.&quot;
+
+<p>The argument of this command is a file name.  It is the name of a
+Netpbm PPMD font file.
+
+<p>A Netpbm PPMD font file typically has a name that ends in
+&quot;.ppmdfont&quot; and its first 8 bytes are the ASCII encoding of
+&quot;ppmdfont&quot;.
+
+<p>There is only one of these fonts as far as we know.  It is
+distributed with Netpbm as the file <b>standard.ppmdfont</b>, but you
+don't need to use that file because the same font is built into the
+Netpbm library and is the default.  If you want to make a new font,
+you can find the format of a ppmdfont file in the Netpbm interface
+header file <b>ppmdfont.h</b>, but you'll have to make your own tools
+to build it.
+
+<dt>line
+
+<dd>This draws a one pixel wide line in the current color.  The 4 arguments
+are: starting column, starting row, ending column, ending row.
+
+<p>This command does not affect the current position.
+
+<dt>line_here
+
+<dd>This is like <b>line</b>, except it works in a more relative way.
+
+<p>The line starts at the current point.  The two arguments are the
+rightward and downard displacement from there of the terminal point.
+The command moves the current position to the terminal point after drawing.
+
+<dt>spline3
+
+<dd>This draws a spline in the current color through 3 points.  The 6
+arguments are the starting column, starting row, middle column, middle
+row, ending column, and ending row.
+
+<p>This command does not affect the current position.
+
+<dt>circle
+
+<dd>This command draws a circle in the current color.  The three
+arguments are the column number and row number of the center of the
+circle and the radius of the circle in pixels.
+
+<dt>filledrectangle
+
+<dd>This command draws a rectangle filled with the current color.
+
+The 4 arguments are the column and row numbers of the upper left corner
+of the rectangle, the width of the rectangle, and the height of the
+rectangle.
+
+<dt>text
+
+<dd>This command draws text in the current color in the built-in font.
+The 5 arguments are:
+
+<ol>
+<li>column number of starting point of baseline
+<li>row number of starting point of baseline
+<li>height of characters, in pixels
+<li>angle of baseline in degrees elevated from the horizontal
+<li>text
+</ol>
+
+<p>Note that if your text contains white space, you'll have to use double
+quotes to cause it to be a single token.
+
+<dt>text_here
+
+<dd>This is like <b>text</b>, except that the baseline starts at
+the current position and the command updates the current position to the
+other end of the baseline after it draws.
+
+<p>Bear in mind that a script starts with the current position in the
+top line, so if you leave it there, only the bottom line of your text
+will be within the image!
+
+</dl>
+
+<h2 id="history">HISTORY</h2>
+
+<P><B>ppmdraw</B> was new in Netpbm 10.29 (August 2005).
+
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppmlabel.html">ppmlabel</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#script">SCRIPT</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmfade.html b/ppmfade.html
new file mode 100644
index 00000000..2d1c8eb6
--- /dev/null
+++ b/ppmfade.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmfade User Manual</TITLE></HEAD>
+<BODY>
+<H1>PPMFADE</H1>
+Updated: April 1, 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmfade - generate a transition between two image files using special effects
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmfade</B>
+[<B>-f</B> <I>first.ppm</I>]
+[<B>-l</B> <I>last.ppm</I>]
+[<B>-mix</B>|<B>-spread</B>|<B>-shift</B>|
+<B>-relief</B>|<B>-oil</B>|<B>-edge</B>|<B>-bentley</B>|<B>-block</B>]
+[<B>-base</B> <I>name</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmfade</b>generates a transition between either two input
+images or between one input image and black.  You can use the 30
+intermediate images generated to show a smooth transition between
+segments of a movie.  The input and output images are in the PPM
+format.  If you specify both input images, they should both be the
+same size.  If you want to fade from black to an image, specify only
+the last image.  If you want to fade from an image to black, specify
+only the first image.  <B>ppmfade</B> names the resulting image files
+<I>base</I><B>.</B><I>nnnn</I><B>.ppm</B>, where <I>nnnn</I> is a
+number varying between 0001 and 0030 and <I>base</I> is what you
+specify with via the <B>-base</B> option (default <B>fade</B>).
+
+<P>Another way to convert by steps from one image to another is
+morphing.  You can use <B>xmorph</B> to do that.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-f</b> <i>first.ppm</i>
+
+<DD>
+This is the image file (PPM format) to be used at the beginning of the
+transition.  If you don't specify this, the fade will start from black.
+
+<DT><B>-l</b> <i>last.ppm</i>
+
+<DD>
+This is the image file (PPM format) to be used at the ending of the
+transition.  If you don't specify this, the fade will end with black.
+
+<DT><B>-mix</B>
+
+<DD>
+The two images are superimposed with the brightness of the first image
+decreasing from full to none and the brightness of the final image
+increasing from none to full.  The transition is quadratic in brightness
+with faster transition in the beginning and slower at the end.
+
+<DT><B>-spread</B>
+
+<DD>
+The pixels in the first image will be moved (spread) further and further
+from their original location and then moved into the proper location in
+the final image.  This is the default transition.
+
+<DT><B>-shift</B>
+
+<DD>
+The pixels in the first image will be shifted further and further horizontally
+from their original location and then moved into the proper location in
+the final image.
+
+<DT><B>-relief</B>
+
+<DD>
+The first image is faded to a Laplacian relief filtered version of the
+first image.  This is then faded to a Laplacian relief filtered version
+of the second image and finally faded to the final image.
+
+<DT><B>-oil</B>
+
+<DD>The first image is faded to an &quot;oil transfer&quot; version
+of the first image.  This is then faded to an &quot;oil transfer&quot;
+version of the second image and finally faded to the final image.
+
+<DT><B>-edge</B>
+
+<DD>
+The first image is faded to an edge detected version of the first image.
+This is then faded to an edge detected version of the second image and
+finally faded to the final image.
+
+<DT><B>-bentley</B>
+
+<DD> The first image is faded to a &quot;Bentley Effect&quot; version
+of the first image.  This is then faded to a &quot;Bentley
+Effect&quot; version of the second image and finally faded to the
+final image.
+
+<DT><B>-block</B>
+
+<DD>
+The first image is defocused to small blocks.  The small blocks are converted
+to match a defocused version of the last image.  The block version of the last
+image is then focused to the final image.
+
+<DT><B>-base</B> <I>name</I>
+
+<DD>
+This forms part of the output filenames, as described above.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<B>ppmfade -f teapot.ppm -l pyr.ppm</B>
+
+<P>
+Fade from teapot.ppm to pyr.ppm generating fade.0001.ppm to fade.0030.ppm using
+the &quot;spread&quot; transition.
+
+<P>
+<B>ppmfade -l teapot.ppm</B>
+
+<P>
+Fade from black to teapot.ppm generating fade.0001.ppm to fade.0030.ppm.
+
+<P>
+<B>ppmfade -f teapot.ppm -base end</B>
+
+<P>
+Fade from teapot.ppm to black generating end.0001.ppm to end.0030.ppm.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B>tontsc</B> manual,
+<B>sgifade</B> manual,
+<B>smart_vfr</B> manual,
+<B>xmorph</B> manual,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+Bryan Henderson, Olympia WA; April 2000
+
+<p>Inspired by and intended as a replacement for <b>pbmfade</b> (not a
+Netpbm program) by Wesley C. Barris.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmflash.html b/ppmflash.html
new file mode 100644
index 00000000..7b86ab5a
--- /dev/null
+++ b/ppmflash.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmflash User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmflash</H1>
+Updated: 26 January 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmflash - brighten a picture to approach white
+
+<A NAME="lbAC">&nbsp;</A>
+
+<H2>SYNOPSIS</H2>
+ppmflash 
+<I>flashfactor</I>
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmflash</b> reads a PPM image as input.  It changes the color of
+each pixel to bring it a specified amount closer to white.  It
+generates a PPM image of the result.
+
+<p><i>flashfactor</i> is a real number between 0 and 1, inclusive.
+<b>ppmflash</b> increases the intensity of each RGB component by the
+fraction <i>flashfactor</i> of the difference between the current
+value and full intensity.  So if a pixel contains 60% full red, 10%
+full green, and no blue and you specify 0.5 (half), <b>ppmflash</b>
+increases the red to 80% (because it was 40% from full intensity, so
+it adds half of 40% to the original 60%), the green to 55%, and the
+blue to 50%.
+
+<p>If <i>flashfactor</i> is zero, the output is identical to the input.
+If <i>flashfactor</i> is one, the output is all white.
+
+<p><b>ppmbrighten</b> does a more normal kind of brightening.
+<b>pamfunc</b> does a very simple brightening.  Both
+<b>ppmbrighten</b> and <b>pamfunc</b> can reduce brightness as well.
+
+<p><b>pnmgamma</b> is another way people do a similar brightening, though
+it isn't really intended for that.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmbrighten.html">ppmbrighten</A>
+<A HREF="pamfunc.html">pamfunc</A>,
+<A HREF="pnmgamma.html">pnmgamma</A>,
+<A HREF="ppm.html">ppm</A>,
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmforge.html b/ppmforge.html
new file mode 100644
index 00000000..85164be5
--- /dev/null
+++ b/ppmforge.html
@@ -0,0 +1,395 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmforge User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmforge</H1>
+Updated: 25 October 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmforge - fractal forgeries of clouds, planets, and starry skies
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmforge</B>
+
+[<B>-clouds</B>]
+[<B>-night</B>]
+[<B>-dimension</B> <I>dimen</I>]
+[<B>-hour</B> <I>hour</I>]
+[<B>-inclination|-tilt</B> <I>angle</I>]
+[<B>-mesh</B> <I>size</I>]
+[<B>-power</B> <I>factor</I>]
+[<B>-glaciers</B> <I>level</I>]
+[<B>-ice</B> <I>level</I>]
+[<B>-saturation</B> <I>sat</I>]
+[<B>-seed</B> <I>seed</I>]
+[<B>-stars</B> <I>fraction</I>]
+[{<B>-xsize</b>|<b>-width</B>} <I>width</I>]
+[{<B>-ysize</b>|<b>-height</B>} <I>height</I>]
+
+
+<P>You can abbreviate any options to its shortest unique prefix.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>ppmforge</B> generates three kinds of ``random fractal forgeries,''
+the term coined by Richard F. Voss of the IBM Thomas J. Watson
+Research Center for seemingly realistic pictures of natural objects
+generated by simple algorithms embodying randomness and fractal
+self-similarity.  The techniques used by <B>ppmforge</B> are
+essentially those given by Voss[1], particularly the technique of
+spectral synthesis explained in more detail by Dietmar Saupe[2].
+
+<P>The program generates two varieties of pictures: planets and
+clouds, which are just different renderings of data generated in an
+identical manner, illustrating the unity of the fractal structure of
+these very different objects.  A third type of picture, a starry sky,
+is synthesised directly from pseudorandom numbers.
+
+<P>The generation of planets or clouds begins with the preparation of
+an array of random data in the frequency domain.  The size of this
+array, the ``mesh size,'' can be set with the <B>-mesh</B> option; the
+larger the mesh the more realistic the pictures but the calculation
+time and memory requirement increases as the square of the mesh size.
+The fractal dimension, which you can specify with the
+<B>-dimension</B> option, determines the roughness of the terrain on
+the planet or the scale of detail in the clouds.  As the fractal
+dimension is increased, more high frequency components are added into
+the random mesh.
+
+<P>Once the mesh is generated, an inverse two dimensional Fourier
+transform is performed upon it.  This converts the original random
+frequency domain data into spatial amplitudes.  We scale the real
+components that result from the Fourier transform into numbers from 0
+to 1 associated with each point on the mesh.  You can further modify
+this number by applying a ``power law scale'' to it with the
+<B>-power</B> option.  Unity scale leaves the numbers unmodified; a
+power scale of 0.5 takes the square root of the numbers in the mesh,
+while a power scale of 3 replaces the numbers in the mesh with their
+cubes.  Power law scaling is best envisioned by thinking of the data
+as representing the elevation of terrain; powers less than 1 yield
+landscapes with vertical scarps that look like glacially-carved
+valleys; powers greater than one make fairy-castle spires (which
+require large mesh sizes and high resolution for best results).
+
+<P>After these calculations, we have a array of the specified size
+containing numbers that range from 0 to 1.  The pixmaps are generated
+as follows:
+
+<DL COMPACT>
+<DT><B>Clouds</B>
+
+<DD>
+A color map is created that ranges from pure blue to white by
+increasing admixture (desaturation) of blue with white.  Numbers less
+than 0.5 are colored blue, numbers between 0.5 and 1.0 are colored
+with corresponding levels of white, with 1.0 being pure white.
+
+<DT><B>Planet</B>
+
+<DD>
+The mesh is projected onto a sphere.  Values less than 0.5 are treated
+as water and values between 0.5 and 1.0 as land.  The water areas are
+colored based upon the water depth, and land based on its elevation.
+The random depth data are used to create clouds over the oceans.  An
+atmosphere approximately like the Earth's is simulated; its light
+absorption is calculated to create a blue cast around the limb of the
+planet.  A function that rises from 0 to 1 based on latitude is
+modulated by the local elevation to generate polar ice caps--high
+altitude terrain carries glaciers farther from the pole.  Based on the
+position of the star with respect to the observer, the apparent color
+of each pixel of the planet is calculated by ray-tracing from the star
+to the planet to the observer and applying a lighting model that sums
+ambient light and diffuse reflection (for most planets ambient light
+is zero, as their primary star is the only source of illumination).
+Additional random data are used to generate stars around the planet.
+
+<DT><B>Night</B>
+
+<DD>
+A sequence of pseudorandom numbers is used to generate stars with a
+user specified density.
+</DL>
+
+<P>Cloud pictures always contain 256 or fewer colors and may be
+displayed on most color mapped devices without further processing.
+Planet pictures often contain tens of thousands of colors which must
+be compressed with <B>pnmquant</B> or <B>ppmdither</B> before encoding
+in a color mapped format.  If the display resolution is high enough,
+<B>ppmdither</B> generally produces better looking planets.
+<B>pnmquant</B> tends to create discrete color bands, particularly in
+the oceans, which are unrealistic and distracting.  The number of
+colors in starry sky pictures generated with the <B>-night</B> option
+depends on the value specified for <B>-saturation</B>.  Small values
+limit the color temperature distribution of the stars and reduce the
+number of colors in the image.  If the <B>-saturation</B> is set to
+0, none of the stars will be colored and the resulting image will
+never contain more than 256 colors.  Night sky pictures with many
+different star colors often look best when color compressed by
+<B>pamdepth</B> rather than <B>pnmquant</B> or <B>ppmdither</B>.  Try
+<I>newmaxval</I> settings of 63, 31, or 15 with <B>pamdepth</B> to
+reduce the number of colors in the picture to 256 or fewer.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-clouds</B>
+
+<DD>
+Generate clouds.  A pixmap of fractal clouds is generated.  Selecting clouds
+sets the default for fractal dimension to 2.15 and power scale factor
+to 0.75.
+
+<DT><B>-dimension</B> <I>dimen</I>
+
+<DD> Sets the fractal dimension to the specified <I>dimen</I>, which
+may be any floating point value between 0 and 3.  Higher fractal
+dimensions create more ``chaotic'' images, which require higher
+resolution output and a larger FFT mesh size to look good.  If no
+dimension is specified, 2.4 is used when generating planets and 2.15
+for clouds.
+
+<DT><B>-glaciers</B> <I>level</I>
+
+<DD>The floating point <I>level</I> setting controls the extent to
+which terrain elevation causes ice to appear at lower latitudes.  The
+default value of 0.75 makes the polar caps extend toward the equator
+across high terrain and forms glaciers in the highest mountains, as on
+Earth.  Higher values make ice sheets that cover more and more of the
+land surface, simulating planets in the midst of an ice age.  Lower
+values tend to be boring, resulting in unrealistic
+geometrically-precise ice cap boundaries.
+
+<DT><B>-hour</B> <I>hour</I>
+
+<DD>When generating a planet, <b>ppmforge</b> uses <I>hour</I> as the
+&quot;hour angle at the central meridian.&quot;  If you specify <B>-hour
+12</B>, for example, the planet will be fully illuminated,
+corresponding to high noon at the longitude at the center of the
+screen.  You can specify any floating point value between 0 and 24 for
+<I>hour</I>, but values which place most of the planet in darkness (0
+to 4 and 20 to 24) result in crescents which, while pretty, don't give
+you many illuminated pixels for the amount of computing that's
+required.  If no <B>-hour</B> option is specified, a random hour angle
+is chosen, biased so that only 25% of the images generated will be
+crescents.
+
+<DT><B>-ice</B> <I>level</I>
+
+<DD>Sets the extent of the polar ice caps to the given floating point
+<I>level</I>.  The default level of 0.4 produces ice caps similar to
+those of the Earth.  Smaller values reduce the amount of ice, while
+larger <B>-ice</B> settings create more prominent ice caps.
+Sufficiently large values, such as 100 or more, in conjunction with
+small settings for <B>-glaciers</B> (try 0.1) create &quot;ice
+balls&quot; like Europa.
+
+<DT><B>-inclination|-tilt</B> <I>angle</I>
+
+<DD>The inclination angle of the planet with regard to its primary
+star is set to <I>angle</I>, which can be any floating point value
+from -90 to 90.  The inclination angle can be thought of as
+specifying, in degrees, the ``season'' the planet is presently
+experiencing or, more precisely, the latitude at which the star
+transits the zenith at local noon.  If 0, the planet is at equinox;
+the star is directly overhead at the equator.  Positive values
+represent summer in the northern hemisphere, negative values summer in
+the southern hemisphere.  The Earth's inclination angle, for example,
+is about 23.5 at the June solstice, 0 at the equinoxes in March and
+September, and -23.5 at the December solstice.  If no inclination
+angle is specified, a random value between -21.6 and 21.6 degrees is
+chosen.
+
+<DT><B>-mesh</B> <I>size</I>
+
+<DD>A mesh of <I>size</I> by <I>size</I> will be used for the fast
+Fourier transform (FFT).  Note that memory requirements and
+computation speed increase as the square of <I>size</I>; if you double
+the mesh size, the program will use four times the memory and run four
+times as long.  The default mesh is 256x256, which produces reasonably
+good looking pictures while using half a megabyte for the 256x256
+array of single precision complex numbers required by the FFT.  On
+machines with limited memory capacity, you may have to reduce the mesh
+size to avoid running out of RAM.  Increasing the mesh size produces
+better looking pictures; the difference becomes particularly
+noticeable when generating high resolution images with relatively high
+fractal dimensions (between 2.2 and 3).
+
+<DT><B>-night</B>
+
+<DD>A starry sky is generated.  The stars are created by the same
+algorithm used for the stars that surround planet pictures, but the
+output consists exclusively of stars.
+
+<DT><B>-power</B> <I>factor</I>
+
+<DD>Sets the &quot;power factor&quot; used to scale elevations
+synthesised from the FFT to <I>factor</I>, which can be any floating
+point number greater than zero.  If no factor is specified a default
+of 1.2 is used if a planet is being generated, or 0.75 if clouds are
+selected by the <B>-clouds</B> option.  The result of the FFT image
+synthesis is an array of elevation values between 0 and 1.  A
+non-unity power factor exponentiates each of these elevations to the
+specified power.  For example, a power factor of 2 squares each value,
+while a power factor of 0.5 replaces each with its square root.  (Note
+that exponentiating values between 0 and 1 yields values that remain
+within that range.)  Power factors less than 1 emphasise large-scale
+elevation changes at the expense of small variations.  Power factors
+greater than 1 increase the roughness of the terrain and, like high
+fractal dimensions, may require a larger FFT mesh size and/or higher
+screen resolution to look good.
+
+<DT><B>-saturation</B> <I>sat</I>
+
+<DD>Controls the degree of color saturation of the stars that surround
+planet pictures and fill starry skies created with the <B>-night</B>
+option.  The default value of 125 creates stars which resemble the sky
+as seen by the human eye from Earth's surface.  Stars are dim; only
+the brightest activate the cones in the human retina, causing color to
+be perceived.  Higher values of <I>sat</I> approximate the appearance
+of stars from Earth orbit, where better dark adaptation, absence of
+skyglow, and the concentration of light from a given star onto a
+smaller area of the retina thanks to the lack of atmospheric
+turbulence enhances the perception of color.  Values greater than 250
+create ``science fiction'' skies that, while pretty, don't occur in
+this universe.
+
+<p>Thanks to the inverse square law combined with Nature's love of
+mediocrity, there are many, many dim stars for every bright one.  This
+population relationship is accurately reflected in the skies created
+by <B>ppmforge</B>.  Dim, low mass stars live much longer than bright
+massive stars, consequently there are many reddish stars for every
+blue giant.  This relationship is preserved by <B>ppmforge</B>.  You
+can reverse the proportion, simulating the sky as seen in a starburst
+galaxy, by specifying a negative <I>sat</I> value.
+
+<DT><B>-seed</B> <I>num</I>
+
+<DD>Sets the seed for the random number generator to the integer
+<I>num</I>.  The seed used to create each picture is displayed on
+standard output (unless suppressed with the <B>-quiet</B> option).
+Pictures generated with the same seed will be identical.  If no
+<B>-seed</B> is specified, a random seed derived from the date and
+time will be chosen.  Specifying an explicit seed allows you to
+re-render a picture you particularly like at a higher resolution or
+with different viewing parameters.
+
+<DT><B>-stars</B> <I>fraction</I>
+
+<DD>Specifies the percentage of pixels, in tenths of a percent, which
+will appear as stars, either surrounding a planet or filling the
+entire frame if <B>-night</B> is specified.  The default
+<I>fraction</I> is 100.
+
+<DT><B>-xsize|-width</B><I> width</I>
+
+<DD>Sets the width of the generated image to <I>width</I> pixels.  The
+default width is 256 pixels.  Images must be at least as wide as they
+are high; if a width less than the height is specified, it will be
+increased to equal the height.  If you must have a long skinny pixmap,
+make a square one with <B>ppmforge</B>, then use <B>pamcut</B> to
+extract a portion of the shape and size you require.
+
+<DT><B>-ysize|-height</B> <I>height</I>
+
+<DD>Sets the height of the generated image to <I>height</I> pixels.
+The default height is 256 pixels.  If the height specified exceeds the
+width, the width will be increased to equal the height.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P>The algorithms require the output pixmap to be at least as wide as
+it is high, and the width to be an even number of pixels.  These
+constraints are enforced by increasing the size of the requested
+pixmap if necessary.
+
+<P>You may have to reduce the FFT mesh size on machines with 16 bit
+integers and segmented pointer architectures.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<DL COMPACT>
+<DT>[1] 
+<DD>
+Voss, Richard F., ``Random Fractal Forgeries,'' in Earnshaw
+et. al., Fundamental Algorithms for Computer Graphics, Berlin:
+Springer-Verlag, 1985.
+
+<DT>[2]
+<DD>
+Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images,
+New York: Springer Verlag, 1988.
+
+</DL>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<PRE>
+John Walker
+Autodesk SA
+Avenue des Champs-Montants 14b
+CH-2074 MARIN
+Suisse/Schweiz/Svizzera/Svizra/Switzerland
+    <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A>
+    <B>Fax:</B>038/33 88 15
+    <B>Voice:</B>038/33 76 33
+</PRE>
+
+<P>
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided ``as
+is'' without express or implied warranty.
+
+<h3>PLUGWARE!</h3>
+
+If you like this kind of stuff, you may also enjoy ``James Gleick's
+Chaos--The Software'' for MS-DOS, available for $59.95 from your
+local software store or directly from Autodesk, Inc., Attn: Science
+Series, 2320 Marinship Way, Sausalito, CA 94965, USA.  Telephone:
+(800) 688-2344 toll-free or, outside the U.S. (415) 332-2344 Ext
+4886.  Fax: (415) 289-4718.  ``Chaos--The Software'' includes a more
+comprehensive fractal forgery generator which creates
+three-dimensional landscapes as well as clouds and planets, plus five
+more modules which explore other aspects of Chaos.  The user guide of
+more than 200 pages includes an introduction by James Gleick and
+detailed explanations by Rudy Rucker of the mathematics and algorithms
+used by each program.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
diff --git a/ppmglobe.html b/ppmglobe.html
new file mode 100644
index 00000000..ff1c3e39
--- /dev/null
+++ b/ppmglobe.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><TITLE>Ppmglobe User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmglobe</H1>
+Updated: 23 February 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2 id="name">NAME</H2>
+
+ppmglobe - generate strips to glue onto a sphere
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmglobe</B>
+[<b>-background=</b><i>colorname</i>]
+[<b>-closeok</b>]
+<i>stripcount</i>
+[<i>filename</i>]
+
+<P>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmglobe</b> does the inverse of a cylindrical projection of a
+sphere.  Starting with a cylindrical projection, it produces an image
+you can cut up and glue onto a sphere to obtain the spherical image of
+which it is the cylindrical projection.
+
+<p>What is a cylindrical projection?  Imagine a map of the Earth on
+flat paper.  There are lots of different ways cartographers show the
+three dimensional information in such a two dimensional map.  The
+cylindrical projection is one.  You could make a cylindrical projection
+by putting a light inside a globe and wrapping a rectangular sheet of
+paper around the globe, touching the globe at the Equator.  Then trace
+the image that the light projects onto the paper.  Lay the paper out flat
+and you have a cylindrical projection.
+
+<p>Here's where <b>ppmglobe</b> comes in:  Pass the image on that paper
+through <b>ppmglobe</b> and what comes out the other side looks something
+like this:
+
+<p>
+<img src="globe.jpg" alt="Example of map of the earth run through ppmglobe">
+
+<p>You could cut out the strips and glue it onto a sphere and you'd
+have a copy of the original globe.
+
+<p>Note that cylindrical projections are not what you normally see as
+maps of the Earth.  You're more likely to see a Mercator projection.
+In the Mercator projection, the Earth gets stretched North-South as
+well as East-West as you move away from the Equator.  It was invented
+for use in navigation, because you can draw straight compass courses
+on it, but is used today because it is pretty.
+
+<p>You can find maps of planets at <a
+href="http://maps.jpl.nasa.gov">maps.jpl.nasa.gov</a>.
+
+<H2 id="parameters">PARAMETERS</H2>
+
+<p><i>stripcount</i> is the number of strips <b>ppmglobe</b> is to
+generate in the output.  More strips makes it easier to fit onto a
+sphere (less stretching, tearing, and crumpling of paper), but makes
+you do more cutting out of the strips.
+
+<p>The strips are all the same width.  If the number of columns of
+pixels in the image doesn't evenly divide by the number of strips,
+<b>ppmglobe</b> truncates the image on the right to create nothing but
+whole strips.  In the pathological case that there are fewer columns
+of pixels than the number of strips you asked for, <b>ppmglobe</b>
+fails.
+
+<p>Before Netpbm 10.32 (February 2006), instead of truncating the image
+on the right, <b>ppmglobe</b> produces a fractional strip on the right.
+
+<p><i>filename</i> is the name of the input file.  If you don't
+specify this, <b>ppmglobe</b> reads the image from Standard Input.
+
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-background=</B><I>colorname</I>
+<DD>
+This specifies the color that goes between the strips.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p>The default is black.
+
+<p>This option was new in Netpbm 10.31 (December 2005).  Before that,
+the background is always black.
+
+<DT><B>-closeok</B>
+<DD>
+This means it is OK if the background isn't exactly the color you specify.
+Sometimes, it is impossible to represent a named color exactly due to the
+precision (i.e. maxval) of the image's color space.  If you specify
+<b>-closeok</b> and <b>ppmglobe</b> can't represent the color you name
+exactly, it will use instead the closest color to it that is possible.
+If you don't specify <b>closeok</b>, <b>ppmglobe</b> fails in that
+situation.
+
+<p>This option was new in Netpbm 10.31 (December 2005).
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<H2 id="history">HISTORY</H2>
+
+<P><b>ppmglobe</b> was new in Netpbm 10.16 (June 2003).
+
+<p>It is derived from <a href="http://www.gensthaler.de/projekte/ppmglobemap">
+Max Gensthaler's <b>ppmglobemap</b></a>.
+
+<H2 id="authors">AUTHORS</H2>
+
+<p><a href="mailto:Max@Gensthaler.de">Max Gensthaler</a>
+wrote a program he called
+<b>ppmglobemap</b> in June 2003 and suggested it for inclusion in
+Netpbm.  Bryan Henderson modified the code slightly and included it in
+Netpbm as <b>ppmglobe</b>.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#name">NAME</A>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#parameters">PARAMETERS</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#authors">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmhist.html b/ppmhist.html
new file mode 100644
index 00000000..3ed9a6c7
--- /dev/null
+++ b/ppmhist.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmhist User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmhist</H1>
+Updated: 24 June 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmhist - print a histogram of the colors in a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmhist</B>
+[<B>-hexcolor</B> | <B>-float</B> | <B>-colorname</B> | <B>-map</B>]
+[<B>-nomap</B>]
+[<B>-noheader</B>]
+[<B>-sort=</B>{<B>frequency</B>,<B>rgb</B>}]
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmhist</b>reads a PPM image as input and generates a histogram
+of the colors in the image, i.e. a list of all the colors and how many
+pixels of each color are in the image.
+
+<a name="output"></a>
+<h3>Output Format</h3>
+
+<p>The output is in one of two basic formats:  a report for humans
+and a PPM image for use by programs.  The PPM image is actually quite
+readable by humans too.
+
+<h4>Human Report</h4>
+
+<p>You get this format by specifying (or defaulting to) the
+<b>-nomap</b> option.
+
+<p>The format is one line for each color in the input image.
+
+<p>By default, there are two lines of column header at the top.  Use the
+<b>-noheader</b> option to suppress those lines.
+
+<p>In each line, <b>ppmhist</b> identifies the color by red, green,
+and blue components.  By default, it lists each of these in decimal,
+using the exact values that are in the PPM input.  So if the image has
+a maxval of 255, the numbers in the listing range from 0 to 255.  With
+the <b>-hexcolor</b> option, you can change these numbers to
+hexadecimal.  With the <b>-float</b> option, the numbers are
+fractional, adjusted to a maxval of 1.
+
+<p>Each line lists the luminosity of the color.  It is in decimal
+on the same scale as the rgb values (see above).
+
+<p>Each line lists the number of pixels in the image that have the color.
+This is in decimal.
+
+
+<h4>PPM Output</h4>
+
+<p>You get this format with the <b>-map</b> option.
+
+<p>The output file is a genuine PPM image, but it is PPM Plain format
+and contains comments so that it is not a lot different from the
+human report described above.
+
+<p>As a PPM image, it can be useful as input to other programs that
+need some kind of palette.  The image is a single row with one
+column for each distinct color in the image.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-sort=</B>{<B>frequency</B>,<B>rgb</B>}
+
+<DD>The <B>-sort</B> option determines the order in which the colors
+are listed in the output.  <B>frequency</B> means to list them in
+order of how pixels in the input image have the color, with the most
+represented colors first.  <B>rgb</B> means to sort them first by the
+intensity of the red component of the color, then of the green, then of
+the blue, with the least intense first.  
+
+<P>The default is <B>frequency</B>.
+
+<DT><B>-hexcolor</B>
+
+<DD>Print the color components in hexadecimal.  See <a
+href="#output">output format</a>.
+
+<p>You may not specify this option along with <b>-float</b> or <b>map</b>.
+
+<DT><B>-float</B>
+
+<DD>Print the color components and the luminosity as floating point
+numbers in the range [0,1].  See <a href="#output">output format</a>.
+
+<p>You may not specify this option along with <b>-hexcolor</b> or <b>map</b>.
+
+<p>This option was added in Netpbm 10.19 (November 2003).
+
+<DT><B>-map</B>
+
+<DD>Generates a PPM file of the colormap for the image, with the
+color histogram as comments.  See <a href="#output">output format</a>.
+
+<p>You may not specify this option along with <b>-float</b> or <b>hexcolor</b>.
+
+<DT><B>-nomap</B>
+
+<DD>
+Generates the histogram for human reading.  This is the default.
+
+<DT><B>-colorname</b>
+
+<dd>Add the color name to the output.  This is the name from the <a
+href="libppm.html#rgb.txt">system color dictionary</a>.  If the exact
+color is not in the color dictionary, it is the closest color that is
+in the dictionary and is preceded by a '*'.  If you don't have a 
+system color dictionary, the program fails.
+
+<p>This option was added in Netpbm 10.10 (October 2002).
+
+<DT><B>-noheader</B>
+
+<DD>Do not print the column headings.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppm.html">ppm</A></B>,
+
+<B><A HREF="pgmhist.html">pgmhist</A></B>,
+
+<B><A HREF="pnmcolormap.html">pnmcolormmap</A></B>,
+
+<B><A HREF="pnmhistmap.html">pnmhistmap</A></B>,
+
+<B><A HREF="ppmchange.html">ppmchange</A></B>
+
+<P>
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmlabel.html b/ppmlabel.html
new file mode 100644
index 00000000..8e38955b
--- /dev/null
+++ b/ppmlabel.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmlabel User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>ppmlabel</H1>
+Updated: 15 April 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+ppmlabel - add text to a PPM image
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmlabel</B>
+
+[<B>-angle</B> <I>angle</I>]
+
+[<B>-background</B> { <B>transparent</B> | <I>color</I> } ]
+
+[<B>-color</B> <I>color</I>]
+
+[<B>-file</B> <I>filename</I>]
+
+[<B>-size</B>
+
+<I>textsize</I>]
+
+[<B>-text</B> <I>text_string</i>]
+
+[<B>-x</B> <I>column</I>]
+
+[<B>-y</B> <I>row</I>]
+
+...
+
+[<I>ppmfile</I>]
+
+
+<h2 id="example">EXAMPLE</h2>
+
+<pre>
+<code>
+    ppmlabel -x 50 -y 50 -text hello \
+             -angle -30 -text there \
+             testimg.ppm 
+</code>
+</pre>
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>ppmlabel</B> uses the text drawing facilities of <B>libnetpbm</B>'s
+&quot;ppmd&quot; component to add text to a PBM image.  You control
+the location, size, baseline angle, color of the text, and background
+color (if any) with command line arguments.  You can specify the text
+on the command line or supply it in files.
+
+<p>You can add any number of separate labels in a single invocation of
+<B>ppmlabel</B>, limited only by any restrictions your environment has
+on the number and size of program arguments (e.g. a shell's command 
+size limit).
+
+<P>If you don't specify <I>ppmfile</I>, <B>ppmlabel</B> reads its input
+PPM image from Standard Input.
+
+<P>The output image goes to Standard Output.
+
+<P>A more sophisticated way to add a label to an image is to use
+<b>pbmtext</b> or <b>pbmtextps</b> to create an image of the text, then
+<b>pamcomp</b> to overlay it onto the base image.
+
+<p>Another more general program is <b>ppmdraw</b>.  It is slightly harder
+to use for simple labelling.
+
+<H2 id="options">OPTIONS</H2>
+
+<p>The arguments on the <B>ppmlabel</B> command line are not options in
+the strict sense; they are commands which control the placement and
+appearance of the text being added to the input image.  They are
+executed left to right, and any number of arguments may appear.
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<DL COMPACT>
+<DT><B>-angle</B><I> angle</I>
+
+<DD>This option sets the angle of the baseline of subsequent text.
+<I>angle</I> is an integral number of degrees, measured
+counterclockwise from the row axis of the image.
+
+<DT><B>-background</b> { <b>transparent</b> | <I>color</I> }
+
+<DD>If the argument is <B>transparent</B>, <b>ppmlabel</b> draws the
+text over the existing pixels in the image.  If you specify a
+<I>color</I> (see the <B>-color</B> option below for information on
+how to specify colors), <b>ppmlabel</b> generates background rectangles
+enclosing subsequent text, and those rectangles are filled with that
+color.
+
+<DT><B>-color</B> <I>color</I>
+
+<DD>This option sets the color for subsequent text.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+<p><b>-colour</b> is an acceptable alternate spelling.
+
+<DT><B>-file</B> <I>filename</I>
+
+<DD>This option causes <b>ppmlabel</b> to read lines of text from the file
+named <I>filename</I> and draw it on successive lines.
+
+<DT><B>-size</B> <I>textsize</I>
+
+<DD>This option sets the height of the tallest characters above the
+baseline to <I>textsize</I> pixels.
+
+<DT><B>-text</B> <I>text_string</I>
+
+<DD>This option causes <b>ppmlabel</b> to draw the specified text
+string.  It advances the location for subsequent text down 1.75 times
+the current <i>textsize</i>.  That lets you draw multiple lines of
+text in a reasonable manner without specifying the position of each
+line.
+<p>
+Note that if you invoke <b>ppmlabel</b> via a shell command and your
+text string contains spaces, you'll have to quote it so the shell treats
+the whole string as a single token.  E.g.
+<pre>
+  $ ppmlabel -text "this is my text" baseimage.ppm &gt;annotatedimage.ppm
+</pre>
+
+
+<DT><B>-x</B> <I>column</I>
+
+<DD>This option sets the pixel column at which subsequent text will
+be left justified.  Depending on the shape of the first character, the
+actual text may begin a few pixels to the right of this point.
+
+<DT><B>-y</B> <I>row</I>
+
+<DD>This option sets the pixel row which will form the baseline of
+subsequent text.  Characters with descenders, such as "y," will extend
+below this line.  
+
+</DL>
+
+<H2 id="limitations">LIMITATIONS</H2>
+
+<P>Text strings are restricted to 7 bit ASCII.  The text font used by
+<B>ppmlabel</B> doesn't include definitions for 8 bit ISO 8859/1 characters.
+
+<P>When drawing multiple lines of text with a non-transparent
+background, it should probably fill the space between the lines with
+the background color.  This is tricky to get right when the text is
+rotated to a non-orthogonal angle.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+
+<B><A HREF="ppmmake.html">ppmmake</A></B>,
+<B><A HREF="ppmdraw.html">ppmdraw</A></B>,
+<B><A HREF="pbmtext.html">pbmtext</A></B>,
+<B><A HREF="pbmtextps.html">pbmtextps</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<H2 id="author">AUTHOR</H2>
+
+Copyright (C) 1995 by John Walker (<A HREF="mailto:kelvin@fourmilab.ch">kelvin@fourmilab.ch</A>)<BR>
+WWW home page: <A HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A><BR>
+
+<P>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided
+``as is'' without express or implied warranty.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#example">EXAMPLE</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#limitations">LIMITATIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmmake.html b/ppmmake.html
new file mode 100644
index 00000000..37d64c86
--- /dev/null
+++ b/ppmmake.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><title>Ppmmake User Manual</title></HEAD>
+<BODY>
+<H1>ppmmake</H1>
+Updated: 02 September 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmmake - create a PPM image of a specified color and dimensions
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmmake</B>
+<b>-maxval=</b><i>maxval</i>
+<I>color</I>
+<I>width</I>
+<i>height</I>
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or an equals sign between an option name
+and its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>ppmmake</b> produces a PPM image of the specified color, width,
+height, and maxval.
+
+<P>Specify the color (<i>color</i>) as described for the <a
+href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b>
+library routine</a>.
+
+
+<A NAME="example">&nbsp;</a>
+<h2>EXAMPLES</H2>
+
+<pre>
+    ppmmake red 50 50
+</pre>
+<pre>
+    ppmmake rgb:ff/80/80 50 100 -maxval=5
+</pre>
+
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL>
+<DT><b>-maxval=</b><i>maxval</i>
+<DD>
+     The maxval for the generated image.  Default is 255.
+<p>
+     This option did not exist before June 2002.  Before, the maxval was
+     always 255.
+</DL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmmake.html">pbmmake</A>,
+<A HREF="pgmmake.html">pgmmake</A>,
+<A HREF="ppmpat.html">ppmpat</A>,
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#example">EXAMPLES</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmmix.html b/ppmmix.html
new file mode 100644
index 00000000..b65a5503
--- /dev/null
+++ b/ppmmix.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmmix User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmmix</H1>
+Updated: 16 November 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmmix - blend together two PPM images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+ppmmix 
+<I>fadefactor</I>
+
+<I>ppmfile1</i>
+
+<i>ppmfile2</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmmix</b> reads two PPM images as input and mixes them together
+using the specified fade factor.  The fade factor may be in the range
+from 0.0 (only ppmfile1's image data) to 1.0 (only ppmfile2's image
+data).  Anything in between specifies a smooth blend between the two
+images.
+
+<P>The two pixmaps must have the same size.
+
+<P><B>pamcomp</B> is a more general alternative.  It allows you to mix
+images of different size and to have the fade factor vary throughout
+the image (through the use of an alpha mask).
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmnorm.html b/ppmnorm.html
new file mode 100644
index 00000000..1dcd7397
--- /dev/null
+++ b/ppmnorm.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Ppmnorm User Manual</TITLE>
+</HEAD><BODY>
+<H1>ppmnorm</H1>
+Updated: March 2002
+<BR>
+<H2>NAME</H2>
+<B>ppmnorm</B> - replaced by pnmnorm
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>ppmnorm</b> was replaced in Netpbm 9.25 (March 2002) by
+<b><a href="pnmnorm.html">pnmnorm</a></b>.
+
+<P><B>pnmnorm</b> is backward compatible with <b>ppmnorm</b> except that
+for PBM and PGM input, it produced PBM and PGM output.
+
+</BODY>
+</HTML>
diff --git a/ppmntsc.html b/ppmntsc.html
new file mode 100644
index 00000000..31c34945
--- /dev/null
+++ b/ppmntsc.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmntsc User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmntsc</H1>
+Updated: April 19, 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmntsc - Make RGB colors legal for NTSC or PAL color systems.
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmntsc</B>
+
+[<B>--pal</B>]
+[<B>--legalonly</B>]
+[<B>--illegalonly</B>]
+[<B>--correctedonly</B>]
+[<B>--verbose</B>]
+[<B>--debug</B>]
+[<I>infile</I>]
+
+<P>Minimum unique abbreviations of options are acceptable.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p>This program makes colors legal in the NTSC (or PAL) color systems.
+Often, images generated on the computer are made for use in movies
+which ultimately end up on video tape.  However, the range of colors
+(as specified by their RGB values) on a computer does not match the
+range of colors that can be represented using the NTSC (or PAL)
+systems.  If an image with &quot;illegal&quot; colors is sent directly
+to an NTSC (or PAL) video system for recording, the
+&quot;illegal&quot; colors will be clipped.  This may result in an
+undesirable looking picture.
+
+<P>This utility tests each pixel in an image to see if it falls
+within the legal NTSC (or PAL) range.  If not, it raises or lowers the
+pixel's saturation in the output so that it does fall within legal
+limits.  Pixels that are already OK just go unmodified into the
+output.
+
+<P>Input is from the file named <I>input</I>.  If <I>input</I> is
+<B>-</B>, input is from Standard Input.  If you don't specify
+<I>input</I>, input is from Standard Input.
+
+<P>Output is always to Standard Output.
+
+<P>This program handles multi-image PPM input, producing multi-image
+PPM output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>--pal</B>
+<DD>
+Use the PAL transform instead of the default NTSC.
+
+<DT><B>--verbose</B>
+<DD>
+Print a grand total of the number of illegal pixels.
+
+<DT><B>--debug</B>
+<DD>
+Produce a humongous listing of illegal colors and their legal counterparts.
+NOTE:  This option may produce a great deal of output.
+
+<DT><B>--legalonly</B>
+<DD>
+Output only pixels that are already legal.  Output black in place of pixels
+that are not.
+
+<DT><B>--illegalonly</B>
+<DD>
+Output only pixels that are illegal (and output them uncorrected).
+Output black in place of pixels that are already legal.
+
+<DT><B>--correctedonly</B>
+<DD>
+Output only pixels that are corrected versions of illegal pixels.  Output
+black in place of pixels that are already legal.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="ppmdim.html">ppmdim</A></B>,
+<B><A HREF="ppmbrighten.html">ppmbrighten</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Wes Barris, Minnesota Supercomputer Center, Inc., Bryan Henderson
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmpat.html b/ppmpat.html
new file mode 100644
index 00000000..d8a92a89
--- /dev/null
+++ b/ppmpat.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmpat User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmpat</H1>
+Updated: 12 June 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmpat - make a pretty PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmpat</B>
+{<B>-gingham2</B>|<B>-g2</B>} |
+{<B>-gingham3</B>|<B>-g3</B>} |
+<B>-madras</B> |
+<B>-tartan</B> |
+<B>-poles</B> |
+<B>-squig</B> |
+<B>-camo</B> |
+<B>-anticamo</B>
+<I>width</I> <I>height</I>
+
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmpat</b> produces a PPM of the specified width and height,
+with a pattern in it.
+
+<P>This program is mainly to demonstrate use of the ppmdraw routines,
+a simple but powerful drawing library.  See the ppmdraw.h include file
+for more info on using these routines.  Still, some of the patterns
+can be rather pretty.  If you have a color workstation, something like
+<B>ppmpat -squig 300 300 | pnmquant 128</B>
+should generate a nice background.
+
+<p>Some of these patterns have large numbers of colors, so if you want
+a simpler pattern, use <b>pnmquant</b> on the output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>The options specify various pattern types:
+
+<DL COMPACT>
+<DT><B>-gingham2</B>
+
+<DD>A gingham check pattern.  Can be tiled.
+
+<DT><B>-gingham3</B>
+
+<DD>A slightly more complicated gingham.  Can be tiled.
+
+<DT><B>-madras</B>
+
+<DD>A madras plaid.  Can be tiled.
+
+<DT><B>-tartan</B>
+
+<DD>A tartan plaid.  Can be tiled.
+
+<DT><B>-poles</B>
+
+<DD>Color gradients centered on randomly-placed poles.
+
+<DT><B>-squig</B>
+
+<DD>Squiggley tubular pattern.  Can be tiled.
+
+<DT><B>-camo</B>
+
+<DD>Camouflage pattern.
+
+<DT><B>-anticamo</B>
+
+<DD>Anti-camouflage pattern - like -camo, but ultra-bright colors.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+Some of the patterns are from &quot;Designer's Guide to Color 3&quot;
+by Jeanne Allen.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtile.html">pnmtile</A>, 
+<A HREF="pnmquant.html">pnmquant</A>, 
+<A HREF="ppmmake.html">ppmmake</A>, 
+<A HREF="ppmrainbow.html">ppmrainbow</A>, 
+<A HREF="pamgradient.html">pamgradient</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">REFERENCES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmquant.html b/ppmquant.html
new file mode 100644
index 00000000..e002a6cb
--- /dev/null
+++ b/ppmquant.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmquant User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmquant</H1>
+Updated: 22 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmquant - quantize the colors in a PPM image down to a specified number
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmquant</B>
+[<B>-floyd</B>|<B>-fs</B>]
+<I>ncolors</I>
+[<I>ppmfile</I>]
+<BR>
+<B>ppmquant</B>
+[<B>-floyd</B>|<B>-fs</B>]
+[<B>-nofloyd</B>|<B>-nofs</B>]
+<B>-mapfile</B>
+<I>mapfile</I>
+[<I>ppmfile</I>]
+
+<P>
+All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or equals signs between an option name and its
+value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmquant</b> is obsolete.  All it does now is invoke
+<b>pnmquant</b> or <b>pnmremap</b>.  You should use one of those
+programs in any new program, or if you are modifying an old program,
+and your program does not have to work with a version of Netpbm before
+9.21 (January 2001).  <b>ppmquant</b> exists only for name
+compatibility.
+
+<p><b>pnmquant</b> is fully backward compatible with <b>ppmquant</B>
+<em>without</em> the <b>-mapfile</b> option; <b>pnmremap</b> is fully
+backward compatible with <b>ppmquant</b> <em>with</em> the
+<b>-mapfile</b> option.
+
+<p>Except with differences suggested by the syntax synopsis above,
+<b>ppmquant</B>'s function is the same as <b>pnmquant</b> and
+<b>pnmremap</b>.
+
+<p>Before Netpbm 10.19 (November 2003), <b>ppmquant</b> was a completely
+separate program from <b>pnmquant</b>, and was a bona fide PPM program.
+That means if you gave it a PGM or PBM image as input, it would process it
+as if it were PPM and generate a PPM output.  Now, since it is really a
+PNM program, it processes PBM and PGM inputs as what they are and produces
+the same kind of output.
+
+<p>Note: The reason <b>ppmquant</b> was changed in Netpbm 10.19 is
+that for some time before that, <b>ppmquant</b> had a serious bug that
+would have been difficult to fix -- it chose the wrong color set.
+Maintaining two versions of the same code did not make sense.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="pnmremap.html">pnmremap</A></B>,
+<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>,
+<B><A HREF="pamseq.html">pamseq</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">REFERENCES</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmquantall.html b/ppmquantall.html
new file mode 100644
index 00000000..d49f5fcb
--- /dev/null
+++ b/ppmquantall.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmquantall User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmquantall</H1>
+Updated: 27 July 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmquantall - run Pnmquant on a bunch of files all at once, so they
+share a common colormap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmquantall</B>
+
+[<B>-ext</B> <I>extension</I>]
+
+<I>ncolors</i>
+
+<i>ppmfile</I> ...
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmquantall</b> takes a bunch of PPM images as input, chooses
+<I>ncolors</I> colors to best represent all of the images, maps the
+existing colors to the new ones, and <strong>overwrites the input
+files</strong> with the new quantized versions.
+
+<P>If you don't want to overwrite your input files, use the
+<B>-ext</B> option.  The output files are then named the same as the
+input files, plus a period and the extension text you specify.
+
+<P>Verbose explanation: Let's say you've got a dozen PPMs that you
+want to display on the screen all at the same time.  Your screen can
+only display 256 different colors, but the PPMs have a total of a
+thousand or so different colors.  For a single PPM you solve this
+problem with <b>pnmquant</b>; <b>ppmquantall</b> solves it for
+multiple PPMs.  All it does is concatenate them together into one big
+PPM, run <b>pnmquant</b> on that, and then split it up into little
+PPMs again.
+
+<P>(Note that another way to solve this problem is to pre-select a set
+of colors and then use <b>pnmremap</b> to separately quantize each PPM
+to that set.)
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+<B><A HREF="pnmremap.html">pnmremap</A></B>,
+<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmrainbow.html b/ppmrainbow.html
new file mode 100644
index 00000000..f1d36268
--- /dev/null
+++ b/ppmrainbow.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmrainbow User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmrainbow</H1>
+Updated: 14 October 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmrainbow - Generate a rainbow
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmrainbow</B>
+
+[<B>-width=</B><I>number</I>]
+
+[<B>-height=</B><I>number</I>]
+
+<BR>
+
+[<B>-tmpdir=</B><I>directory</I>]
+
+[<B>-norepeat</B>]
+
+[<B>-verbose</B>]
+
+<I>color</I> ...
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one to designate an option.  You
+may use either white space or equals signs between an option name and
+its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>ppmrainbow</B> generates a PPM image that fades from one color to
+another to another from left to right, like a rainbow.  The colors are
+those you specify on the command line, in that order.  The first color
+is added again on the right end of the image unless you specify the
+<b>-norepeat</b> option.
+
+<P>If you want a vertical or other non-horizontal rainbow, run the output
+through <B>pnmrotate</B> or <b>pamflip</b>.
+
+<P>One use for such a rainbow is to compose it with another image
+under an alpha mask in order to add a rainbow area to another image.
+In fact, you can make rainbow-colored text by using <B>pbmtext</B>,
+<B>pamcomp</B>, and <B>ppmrainbow</B>.
+
+<p><b>pgmramp</b> does a similar thing for grayscale images.
+
+<p>If you just want an image containing all the possible colors (for some
+kind of processing; not to look at), see <b>pamseq</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-width </B><I>number</I>
+
+<DD>
+The width in pixels of the output image.
+
+<P>Default is 600.
+
+<DT><B>-height </B><I>number</I>
+
+<DD>
+The height in pixels of the output image.
+
+<P>Default is 8.
+
+<DT><b>-norepeat</b>
+     
+<dd>This option makes <b>ppmrainbow</b> end the rainbow with the last
+color you specify.  Without this option, <b>ppmrainbow</b> adds the
+first color you specify to the right end of the rainbow as if you had
+repeated it.  <i>(I don't understand the point of this default behavior;
+it exists today just for backward compatibility).</i>
+
+<DT><B>-tmpdir</B>
+
+<DD>The directory specification of the directory <B>ppmrainbow</B> is
+to use for temporary files.
+
+<P>Default is the value of the <B>TMPDIR</B> environment variable, or
+<b>/tmp</b> if <B>TMPDIR</B> is not set.
+
+<DT><B>-verbose</B>
+
+<DD>Print the &quot;commands&quot; (invocations of other Netpbm
+programs) that <B>ppmrainbow</B> uses to create the image.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgmramp.html">pgmramp</A></B>,
+<B><A HREF="pamseq.html">pamseq</A></B>,
+<B><A HREF="pamgradient.html">pamgradient</A></B>,
+<B><A HREF="ppmmake.html">ppmmake</A></B>,
+<B><A HREF="ppmfade.html">ppmfade</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Arjen Bax wrote <B>ppmrainbow</B> in June 2001 and contributed it
+to the Netpbm package.  Bryan Henderson wrote this manual in July
+2001.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmrelief.html b/ppmrelief.html
new file mode 100644
index 00000000..b56c1a40
--- /dev/null
+++ b/ppmrelief.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmrelief User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmrelief</H1>
+Updated: 11 January 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmrelief - run a Laplacian relief filter on a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmrelief</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmrelief</b> reads a PPM image as input,
+does a Laplacian relief filter, and writes a PPM image as output.
+
+<P>The Laplacian relief filter is described in &quot;Beyond
+Photography&quot; by Holzmann, equation 3.19.  It's a sort of
+edge-detection.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pgmbentley.html">pgmbentley</A>, 
+<A HREF="pgmoil.html">pgmoil</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Wilson Bent (<A
+HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmrough.html b/ppmrough.html
new file mode 100644
index 00000000..20f6f098
--- /dev/null
+++ b/ppmrough.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmrough User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmrough</H1>
+Updated: 23 August 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmrough - create PPM image of two colors with a ragged border between them
+<A NAME="lbAC">&nbsp;</A>
+
+<H2>SYNOPSIS</H2>
+
+<B>ppmrough</B>
+
+[<B>-left </B><I>pixels</I>]
+
+[<B>-right </B><I>pixels</I>]
+
+[<B>-top </B><I>pixels</I>]
+
+[<B>-bottom </B><I>pixels</I>]
+
+[<B>-width </B><I>pixels</I>]
+
+[<B>-height </B><I>pixels</I>]
+
+[<B>-bg </B><I>rgb:##/##/##</I>]
+
+[<B>-fg </B><I>rgb:##/##/##</I>]
+
+[<B>-var </B><I>pixels</I>]
+
+[<B>-init </B><I>seed</I>]
+
+[<B>-verbose</B>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<P>
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>ppmrough</b> generates a PPM image of the specified width, height, and
+colors.  <B>ppmrough</B> tiles the image into semi-rectangular regions
+with a ragged borders between them.  It calculates the fluctuations 
+with the <b>rand()</b> standard C library function.
+
+<P><B>ppmrough</B> writes the PPM image to Standard Output.
+
+<P>The maxval of the output image is 255 (You can change this with
+<b>pamdepth</b>).
+
+<P>Use the options <B>-left</B> or <B>-right</B>, respectively, to
+make vertical borders, and <B>-top</B> or <B>-bottom</B>,
+respectively, to generate horizontal borders inside the image.  Each of
+these options needs an integer value <I>pixels</I> that determines the
+average distance of the interior border to the related edge of the
+image.  You may combine the <B>-left</B>, <B>-right</B>, <B>-top</B>,
+and <B>-bottom</B> options to generate an image with more than one
+border.  The algorithm ensures that you can concatenate two images
+produced with the same (i.e. <B>-left</B>) value without dislocations.
+
+<P>You specify the dimensions of the generated image with the
+<B>-width</B> and <B>-height</B> options.
+
+<P>Use the <B>-bg</B> and <B>-fg</B> options to set the background
+(margin) color and the foreground (interior) color, respectively.  If
+you don't specify any of the <B>-left</B>, <B>-right</B>, <B>-top</B>,
+and <B>-bottom</B> options, all pixels are set to foreground color.
+The defaults are white foreground and black background.
+
+<P>Use the <B>-var</B> option to control the &quot;raggedness&quot; of
+the border.  The less its value is the smoother the border is.  You
+can initialize the pseudo-random generator with the <B>-init</B>
+option.
+
+<P>You could use <b>ppmrough</b> with <b>ppmtopgm</b> to create a PGM
+alpha mask and use it to roughen up the edges of another image.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-left </B><I>pixels</I>
+
+<DD> Specifies the mean distance of the border from the left margin
+(default: no border).
+
+<DT><B>-right </B><I>pixels</I>
+
+<DD>Specifies the mean distance of the border from the right margin
+(default: no border).
+
+<DT><B>-top </B><I>pixels</I>
+
+<DD>Specifies the mean distance of the border from the top margin
+(default: no border).
+
+<DT><B>-bottom </B><I>pixels</I>
+
+<DD>Specifies the mean distance of the border from the bottom margin
+(default: no border).
+
+<DT><B>-width </B><I>pixels</I>
+
+<DD>Specifies the width of the image (default: 100).
+
+<DT><B>-height </B><I>pixels</I>
+
+<DD>Specifies the height of the image (default: 100).
+
+<DT><B>-bg </B><I>color</I>
+
+<DD>Background color.  Specify this the same way you specify a color with
+     <b>ppmmake</b>.  Default is black.
+
+<DT><B>-fg </B><I>color</I>
+
+<DD>Foreground color.  Specify this the same way you specify a color with
+     <b>ppmmake</b>.  Default is white.
+
+<DT><B>-var </B><I>pixels</I>
+
+<DD> Specifies the variance of the ragged border (default: 10). Must
+be a positive integer.  Set <I>pixels</I> to 1 to get a straight
+border.
+
+<DT><B>-init </B><I>seed</I>
+
+<DD>Use this option to initialize the pseudo-random number generator
+(the Standard C library <b>rand()</b> function) with <I>seed</I>.
+
+<DT><B>-verbose</B>
+
+<DD>Run <B>ppmrough</B> in verbose mode.  It reports all parameters on
+Standard Error.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmmake.html">ppmmake</A></B>,
+<B><A HREF="pnmcat.html">pnmcat</A></B>,
+<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<P>
+This program was added to Netpbm in Release 10.9 (September 2002).
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2002 by Eckard Specht.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+<HR>
+</BODY>
+</HTML>
diff --git a/ppmshadow.html b/ppmshadow.html
new file mode 100644
index 00000000..2089c7a7
--- /dev/null
+++ b/ppmshadow.html
@@ -0,0 +1,295 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmshadow User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmshadow</H1>
+Updated: 17 April 2005
+<BR><A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmshadow - add simulated shadows to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmshadow</B>
+[<B>-b</B> <I>blur_size</I>]
+[<B>-k</B>]
+[<B>-t</B>]
+[<B>-x</B> <I>xoffset</I>]
+[<B>-y</B> <I>yoffset</I>]
+[<I>ppmfile</I>]
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><B>ppmshadow</B> adds a simulated shadow to an image, giving the
+appearance that the contents of the image float above the page,
+casting a diffuse shadow on the background.  Shadows can either be
+black, as cast by opaque objects, or translucent, where the shadow
+takes on the color of the object which casts it.  You can specify the
+crispness of the shadow and its displacement from the image with command
+line options.
+
+<p><b>ppmshadow</b> sees your image as a foreground on a background.
+The background color is whatever color the top left pixel of your image is.
+The background is all the pixels that are that color and the foreground
+is everything else.  The shadow that <b>ppmshadow</b> generates is a
+shadow of the foreground, cast on the background.
+
+<p>The shadow is the same size as the foreground, plus some fringes
+as determined by the <b>-b</b> option.  It is truncated to fit in your
+image.  The output image is the same dimensions as the input image.
+
+<p>You can use <b>pamcomp</b> to place a foreground image over a background
+before running <b>ppmshadow</b> on it.  You can use <b>ppmmake</b> to make
+the background image (just an image of a solid color).
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-b</B> <I>blur_size</I>
+
+<DD>
+Sets the distance of the light source from the image.  Larger values
+move the light source closer, casting a more diffuse shadow, while
+smaller settings move the light further away, yielding a sharper
+shadow.  <i>blur_size</i> is the number of pixels of fringe there is
+on the shadow, beyond where the shadow would be if there were no
+blurring.
+
+<p>The default is 11 pixels.
+
+<p>Note that this option controls only the fringing effect of moving
+the light source closer to the object.  It does not make the shadow
+grow or shrink as would happpen in the real world if you moved a point
+light source closer to and further from an object.
+
+<DT><B>-k</B>
+<DD>
+Keep the intermediate temporary image files.  When debugging, these
+intermediate files provide many clues as to the source of an error.
+See <a href="#files">below</a> for a list of the contents of each file.
+
+<DT><B>-t</B>
+<DD>
+Consider the non-background material in the image translucent -- it
+casts shadows of its own color rather than a black shadow, which is
+default.  This often results in fuzzy, difficult-to-read images but in
+some circumstances may look better.
+
+<DT><B>-x</B><I> xoffset</I>
+
+<DD>Specifies the displacement of the light source to the left of the
+image.  Larger settings of <B>xoffset</B> displace the shadow to the
+right, as would be cast by a light further to the left.  If not
+specified, the horizontal offset is half of <I>blur_size </I> (above),
+to the left.
+
+<DT><B>-y</B><I> yoffset</I>
+
+<DD> Specifies the displacement of the light source above the top of
+the image.  Larger settings displace the shadow downward,
+corresponding to moving the light further above the top of the image.
+If you don't specify <B>-y</B>, the vertical offset defaults to the
+same as the horizontal offset (above), upward.
+
+</DL>
+
+
+<A NAME="files"></a>
+<H2>FILES</H2>
+
+<p>Input is a PPM file named by the <I>ppmfile</I> command line
+argument; if you don't specify <I>ppmfile</I>, the input is Standard
+Input.
+
+<P>The output is a PPM file, written to Standard Output.
+
+<p><B>ppmshadow</B> creates a number of temporary files as it executes.  It
+creates a new directory for them, <b>/tmp/ppmshadow</b><i>pid</i>,
+where <i>pid</i> is the process ID of the <b>ppmshadow</b> process.
+If the <b>TMPDIR</b> environment variable is set, <b>ppmshadow</b> creates
+the directory there instead of <b>/tmp</b>.
+
+In normal operation, <B>ppmshadow</B> deletes each temporary file as
+soon as it is done with it and leaves no debris around after it
+completes.  To preserve the intermediate files for debugging, use the
+<B>-k</B> command line option.
+
+<p>The temporary files are: 
+<DL COMPACT>
+
+<DT><B>infile.ppm</b>
+<DD>
+A copy of the input.
+
+<DT><B>bgmask.ppm</B>
+<DD>
+Positive binary mask
+
+<DT><B>convkernel.ppm</B>
+<DD>
+Convolution kernel for blurring shadow
+
+<DT><B>blurred.ppm</B>
+<DD>
+Blurred, colored shadow image
+
+<DT><B>blurred2.ppm</B>
+<DD>
+Blurred shadow image before coloring
+
+<DT><B>shadow.ppm</B>
+<DD>
+Clipped shadow image, offset as requested
+
+<DT><B>background.ppm</B>
+<DD>
+Blank image with background of source image
+
+<DT><B>shadow.ppm</B>
+<DD>
+Offset shadow
+
+<DT><B>fgmask.ppm</B>
+<DD>
+Inverse mask file
+
+<DT><B>justfg.ppm</B>
+<DD>
+Just the foreground.  Rest is black.  Original image times inverse mask.
+
+<DT><B>shadback.ppm</B>
+<DD>
+Generated shadow times positive mask
+
+<DT><B>allbutfg.ppm</b>
+<dd>
+Everything but the foreground (foreground area is black).
+
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>The source image must contain sufficient space on the edges in the
+direction in which the shadow is cast to contain the shadow -- if it
+doesn't some of the internal steps may fail.  You can usually expand
+the border of a too-tightly-cropped image with <B>pnmmargin</B> before
+processing it with <B>ppmshadow</B>.
+
+<P>Black pixels and pixels with the same color as the image
+background don't cast a shadow.  If this causes unintentional
+&quot;holes&quot; in the shadow, fill the offending areas with a color
+which differs from black or the background by RGB values of 1, which
+will be imperceptible to the viewer.  Since the comparison is exact,
+the modified areas will now cast shadows.  
+
+<P>The background color of the source image (which is preserved in
+the output) is deemed to be the color of the pixel at the top left of
+the input image.  If that pixel isn't part of the background, simply
+add a one-pixel border at the top of the image, generate the shadow
+image, then delete the border from it.
+
+<P>If something goes wrong along the way, the error messages from the
+various Netpbm programs <B>ppmshadow</B> calls will, in general,
+provide little or no clue as to where <B>ppmshadow</B> went astray.
+In this case, Specify the <B>-k</B> option and examine the
+intermediate results in the temporary files (which this option causes
+to be preserved).  If you manually run the commands that
+<B>ppmshadow</B> runs on these files, you can figure out where the
+problem is.  In problem cases where you want to manually tweak the
+image generation process along the way, you can keep the intermediate
+files with the <B>-k </B> option, modify them appropriately with an
+image editor, then recombine them with the steps used by the code in
+<B>ppmshadow</B>.
+
+See the <B>ppmshadow.doc</B> file in the Netpbm source tree for
+additional details and examples of the intermediate files and debugging
+<b>ppmshadow</b>.
+
+<P>Shadows are by default black, as cast by opaque material in the
+image occluding white light.  Use the <B>-t</B> option to simulate
+translucent material, where the shadow takes on the color of the
+object that casts it.  If the contrast between the image and
+background is insufficient, the <B>-t</B> option may yield
+unattractive results which resemble simple blurring of the original
+image.
+
+<P>Because Netpbm used to have a maximum maxval of 255, which meant
+that the largest convolution kernel <B>pnmconvol</B> could use was 11
+by 11, <B>ppmshadow</B> includes a horrid, CPU-time-burning kludge
+which, if a blur of greater than 11 is requested, performs an initial
+convolution with an 11 x 11 kernel, then calls <B>pnmsmooth</B>
+(which is itself a program that calls <b>pnmconvol</b> with a 3 x 3
+kernel) as many times as the requested blur exceeds 11.  It's ugly,
+but it gets the job done on those rare occasions where you need a blur
+greater than 11.
+
+<P>If you wish to generate an image at high resolution, then scale it
+to publication size with <B>pamscale</B> in order to eliminate jagged
+edges by resampling, it's best to generate the shadow in the original
+high resolution image, prior to scaling it down in size.  If you scale
+first and then add the shadow, you'll get an unsightly jagged stripe
+between the edge of material and its shadow, due to resampled pixels
+intermediate between the image and background obscuring the shadow.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>EXIT STATUS</H2>
+
+<B>ppmshadow</B> returns status 0 if processing was completed without
+errors, and a nonzero Unix error code if an error prevented generation
+of output.  Some errors may result in the script aborting, usually
+displaying error messages from various Netpbm components it uses,
+without returning a nonzero error code.  When this happens, the output
+file will be empty, so be sure to test this if you need to know if the
+program succeeded. 
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>,
+<B><A HREF="pnmmargin.html">pnmmargin</A></B>,
+<B><A HREF="pnmconvol.html">pnmconvol</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<A NAME="lbAJ">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+John Walker &lt;<A
+HREF="http://www.fourmilab.ch">http://www.fourmilab.ch</A>&gt; August
+8, 1997
+
+<A NAME="lbAK">&nbsp;</A>
+<H2>COPYRIGHT</H2>
+This software is in the public domain.  Permission to use, copy,
+modify, and distribute this software and its documentation for any
+purpose and without fee is hereby granted, without any conditions or
+restrictions.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#files">FILES</A>
+<LI><A HREF="#lbAG">LIMITATIONS</A>
+<LI><A HREF="#lbAH">EXIT STATUS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#lbAJ">AUTHOR</A>
+<LI><A HREF="#lbAK">COPYRIGHT</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmshift.html b/ppmshift.html
new file mode 100644
index 00000000..356731b9
--- /dev/null
+++ b/ppmshift.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmshift User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmshift</H1>
+Updated: 16 November 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmshift - shift lines of a PPM image left or right by a random amount
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>ppmshift</b>
+<I>shift</I>
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmshift</b> reads a PPM image as input.  Shifts every row of
+image data to the left or right by a certain amount.  The <i>shift</i>
+parameter determines by how many pixels a row is to be shifted at
+most.
+
+<P>This is another one of those effects I intended to use for MPEG
+tests.  Unfortunately, this program will not help me here - it creates
+too random patterns to be used for animations.  Still, it might give
+interesting results on still images.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>EXAMPLE</H2>
+
+Check this out: Save your favourite model's picture from something like
+alt.binaries.pictures.supermodels (ok, or from any other picture source),
+convert it to ppm, and process it e.g. like this, assuming the picture is 
+800x600 pixels:
+
+<pre>
+     #take the upper half, and leave it like it is
+     pamcut -top=0 -width=800 -height=300 cs.ppm &gt;upper.ppm
+     
+     #take the lower half, flip it upside down, dim it and distort it a little
+     pamcut -top=300 -width=800 -height=300 cs.ppm | \
+         pamflip -topbottom | \
+         ppmdim 0.7 | \
+         ppmshift 10 &gt;lower.ppm
+     
+     #and concatenate the two pieces
+     pnmcat -topbottom upper.ppm lower.ppm &gt;newpic.ppm
+
+</pre>
+
+The resulting picture looks like the image being reflected on a water 
+surface with slight ripples.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>,
+<A HREF="pamcut.html">pamcut</A>,
+<A HREF="pamflip.html">pamflip</A>,
+<A HREF="ppmdim.html">ppmdim</A>,
+<A HREF="pnmcat.html">pnmcat</A>
+
+
+<A NAME="lbAG">&nbsp;</A>
+
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">EXAMPLE</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmspread.html b/ppmspread.html
new file mode 100644
index 00000000..7e333987
--- /dev/null
+++ b/ppmspread.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmspread User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmspread</H1>
+Updated: 16 November 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmspread - displace a PPM image's pixels by a random amount
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<b>ppmspread</b>
+
+<I>amount</I>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmspread</b> reads a PPM image as input and moves every pixel
+around a bit relative to its original position. <i>amount</i>
+determines by how many pixels a pixel is to be moved around at most.
+
+<P>Pictures processed with this filter will seem to be somewhat
+dissolved or unfocussed (although they appear more coarse than images
+processed by something like <I>pnmconvol</I>).
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="pnmconvol.html">pnmconvol</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmsvgalib.html b/ppmsvgalib.html
new file mode 100644
index 00000000..fddbe7cc
--- /dev/null
+++ b/ppmsvgalib.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmsvgalib User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmsvgalib</H1>
+Updated: 11 May 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+ppmsvgalib - display PPM image on Linux console using Svgalib
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmsvgalib</B>
+
+[<B>-mode=</B><I>mode</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.  You
+may use two hyphens instead of one to designate an option.  You may
+use either white space or an equals sign between an option name and its
+value.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<B>ppmsvgalib</B> displays a PPM image on a Linux virtual console
+using the Svgalib facility.  Svgalib is a popular means of displaying
+Graphics in Linux without the use of the X Window System.  (To display
+a Netpbm image in an X window, see <b>pamx</b>).
+
+<P>If you run <B>ppmsvgalib</B> with a version of Svgalib earlier than
+1.9, you must run it with CAP_SYS_RAWIO capability (on most Linux
+systems, that means you run it as superuser), because Svgalib uses the
+<b>ioperm()</b> system call to access the console hardware.  Newer
+Svgalib has its own device driver, so you need only proper
+permissions on a device special file to access the console.
+
+<P><B>ppmsvgalib</B> is not capable of using color mapped video modes.
+These are the old video modes that are usually called &quot;8
+bit&quot; color modes.
+
+<P><B>ppmsvgalib</B> is a bare displayer.  It won't do any
+manipulation of the image and is not interactive in any way.  If you
+want a regular interactive graphics viewer that uses Svgalib, try
+<B>zgv</B> (not part of Netpbm).
+
+<P>To exit <B>ppmsvgalib</B> while it is displaying your image, send
+it a SIGINTR signal (normally, this means &quot;hit control C&quot;).
+
+<P><B>ppmsvgalib</B> draws a white border around the edges of the
+screen.  It does this to help you isolate problems between the image
+you're displaying and the facilities you're using to display it.
+
+<P>(Note: if the image you're displaying reaches the edges of the
+screen, it will replace the white border).
+
+<P><B>ppmsvgalib</B> places the image in the center of the screen.
+
+<P>If your image is too big to display in the video mode you selected,
+<B>ppmsvgalib</B> fails.  You can use <B>pamcut</B> to cut out a part
+of the image to display or use <B>pamscale</B> to shrink the image to
+fit.
+
+<P>If you want to play with <B>ppmsvgalib</B>, <B>ppmcie</B> is a good
+way to generate a test image.
+
+<P>To be pedantic, we must observe that <B>ppmsvgalib</B> displays a
+PPM image in the correct colors only if the display has a transfer
+function which is the exact inverse of the gamma function that is
+specified in the PPM specification.  Happily, most CRT displays are
+pretty close.
+
+<P>Running the PPM image through <B>pnmgamma</B> can help cause
+<B>ppmsvgalib</B> to display the correct colors.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-mode=</B><I>mode</I>
+
+<DD>This tells <B>ppmsvgalib</B> what video mode to use.  <I>mode</I>
+is the Svgalib video mode number.  You can get a list of all the video
+modes and their Svgalib video mode numbers with the program
+<B>vgatest</B> that is packaged with Svgalib.  (Unfortunately, the
+various interesting programs that are packaged with Svgalib are
+typically not installed on systems that have the Svgalib library
+installed).
+
+<P>In practice, there are probably only two modes you'll ever care
+about: 25 is the standard SVGA direct color mode, which is 1024
+columns by 768 rows with 8 bit red, green, and blue components for
+each pixel and no fancy options.  28 is the same, but with the popular
+higher resolution of 1280 x 1024.
+
+<P>But if you have an older video controller (with less than 4MB of
+memory), those modes aren't available and you might like mode 19,
+which is 640 x 480 and takes less than a megabyte of video memory.
+This is a standard VGA video mode.
+
+</DL>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pamx.html">pamx</A></B>,
+<B><A HREF="pamcut.html">pamcut</A></B>,
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="ppmcie.html">ppmcie</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B>zgv</B>,
+<B>Svgalib</B>,
+<B>vgatest</B>
+
+<H2 id="author">AUTHOR</H2>
+
+<p>By Bryan Henderson, January 2002.
+
+<P>Contributed to the public domain.
+
+<HR>
+<H2 id="index">Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoacad.html b/ppmtoacad.html
new file mode 100644
index 00000000..eaca8c6a
--- /dev/null
+++ b/ppmtoacad.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoacad User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoacad</H1>
+Updated: 10 October 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoacad - convert PPM to Autocad database or slide
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+
+<B>ppmtoacad</B>
+
+[<B>-dxb</B>]
+
+[<B>-poly</B>]
+
+[<B>-background</B> <I>color</I>]
+
+[<B>-white</B>]
+
+[<B>-aspect</B> <I>ratio</I>]
+
+[<B>-8</B>]
+
+[<I>ppmfile</I>]
+
+
+<P>You may abbreviate any option to its shortest unique prefix.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoacad</b> reads a PPM image as input and produces an
+Autocad&#174; slide file or binary database import (.dxb) file as
+output.  If you don't specify <I>ppmfile</I>,
+<b>ppmtoacad</b> takes the input from Standard Input.
+
+<p>(Typographical note: the name of Autocad is often rendered as
+AutoCAD.  Netpbm documentation uses standard American typography, wherein
+that is not a valid form of capitalization).
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-dxb</B>
+
+<DD><b>ppmtoacad</b> writes an Autocad binary database import (.dxb)
+file.  You read this file with the DXBIN command and, once loaded, it
+becomes part of the Autocad geometrical database, so you can view and
+edit it like any other object.  Each sequence of identical pixels
+becomes a separate object in the database; this can result in very
+large Autocad drawing files.  However, if you want to trace over a
+bitmap, it lets you zoom and pan around the bitmap as you wish.
+
+<DT><B>-poly</B>
+
+<DD>If you don't specify the <B>-dxb</B> option, <b>ppmtoacad</b>
+generates an Autocad slide file.  Normally each row of pixels is
+represented by an Autocad line entity.  If you specify <B>-poly</B>,
+<b>ppmtoacad</b> renders the pixels as filled polygons.  If you view
+the slide on a display with higher resolution than the source image,
+this will cause the pixels to expand instead of appearing as discrete
+lines against the screen background color.  Regrettably, this
+representation yields slide files which occupy more storage space and
+take longer to display.
+
+<DT><B>-background</B> <I>color</I>
+
+<DD>Most Autocad display drivers can be configured to use any
+available color as the screen background.  Some users prefer a black
+screen background, others white, while splinter groups advocate burnt
+ocher, tawny puce, and shocking gray.  Discarding pixels whose closest
+Autocad color representation is equal to the background color can
+substantially reduce the size of the Autocad database or slide file
+needed to represent a bitmap.  If you don't specify
+<B>-background</B>, <b>ppmtoacad</b> assumes the screen background
+color to be black.  You may specify any Autocad color number as the
+screen background; <b>ppmtoacad</b> assumes color numbers to specify
+the hues defined in the standard Autocad 256 color palette.
+
+<DT><B>-white</B>
+
+<DD>Since many Autocad users choose a white screen background, this
+option is provided as a short-cut.  Specifying <B>-white</B> is
+identical in effect to <B>-background 7</B>.
+
+<DT><B>-aspect</B> <I>ratio</I>
+
+<DD>If the source image had non-square pixels (which means it is not
+standard PPM), specify the ratio of the pixel width to pixel height as
+<I>ratio</I>.  <b>ppmtoacad</b> will correct the resulting slide or
+.dxb file so that pixels on the Autocad screen will be square.  For
+example, to correct an image made for a 320x200 VGA/MCGA screen,
+specify <B>-aspect 0.8333</B>.
+
+<DT><B>-8</B>
+
+<DD>Restricts the colors in the output file to the 8 RGB shades.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>RESTRICTIONS</H2>
+
+<P>Autocad has a fixed palette of 256 colors, distributed along the
+hue, lightness, and saturation axes.  So it may poorly render images
+which contain many nearly-identical colors, or colors not closely
+approximated by Autocad's palette.
+
+<P><B>ppmtoacad</B> works best if the system displaying its output can
+display the full 256 color Autocad palette.  Monochrome, 8 color, and
+16 color configurations will produce less than optimal results.
+
+<P>When creating a .dxb file or a slide file with the <B>-poly</B>
+option, <B>ppmtoacad</B> finds both vertical and horizontal runs of
+identical pixels and consolidates them into rectangular regions to
+reduce the size of the output file.  This is effective for images with
+large areas of constant color but it's no substitute for true raster
+to vector conversion.  In particular, this process does not optimize
+thin diagonal lines at all.
+
+<P>Output files can be huge.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<p>Autocad Reference Manual: <I>Slide File Format</I> and <I>Binary
+Drawing Interchange (DXB) Files</I>, <B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<PRE>
+John Walker
+Autodesk SA
+Avenue des Champs-Montants 14b
+CH-2074 MARIN
+Suisse/Schweiz/Svizzera/Svizra/Switzerland
+    <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A>
+    <B>Fax:</B>038/33 88 15
+    <B>Voice:</B>038/33 76 33
+</PRE>
+
+<P>Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided
+&quot;as is&quot; without express or implied warranty.
+
+<P>Autocad and Autodesk are registered trademarks of Autodesk, Inc.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoarbtxt.html b/ppmtoarbtxt.html
new file mode 100644
index 00000000..8e9f0f57
--- /dev/null
+++ b/ppmtoarbtxt.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoarbtxt User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoarbtxt</H1>
+<BR>
+Updated: 27 April 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmtoarbtxt - generate image in arbitrary text format from PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoarbtxt</B>
+<I>bodyskl</I>
+[<B>-hd</B> <I>headskl</I>]
+[<B>-tl</B> <I>tailskl</I>]
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>ppmtoarbtxt</b> generates simple text-based graphics formats based on
+format descriptions given as input.  A text-based graphics format is one in
+which an image is represented by text (like PNM plain format, but unlike
+PNM raw format).
+
+<b>ppmtoarbtxt</b>reads a PPM image as input.  For each pixel in the
+image, <b>ppmtoarbtxt</b> writes the contents of the skeleton file
+<I>bodyskl</I>, with certain substitutions based on the value of the
+pixel, to stdout.  The substitutions are as follows:
+
+<DL COMPACT>
+<DT><B>#(ired</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>generates an integer in the range <I>blackref</I> to
+<I>whiteref</I> using <I>format</I> representing the red intensity of
+the pixel.  A red intensity of 0 becomes <I>blackref</I>; a red
+intensity of maxval becomes <I>whiteref</I>.
+
+<p><B>#(ired)</B> is equivalent to <B>#(ired %d 0 255)</B>.
+
+<DT><B>#(igreen</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(ired...</B>, but for green.
+
+<DT><B>#(iblue</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(ired...</B>, but for blue.
+
+<DT><B>#(ilum</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(ired...</B>, but representing the luminance value
+(0.299*red + 0.587*green + 0.114*blue) of the pixel.
+
+<DT><B>#(fred</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(ired...</B>, but generates a floating point number instead
+of an integer.
+
+<p>
+<B>#(fred)</B> is equivalent to <B>#(fred %f 0.0 1.0)</B>.
+
+<DT><B>#(fgreen</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(fred...</B>, but for green.
+
+<DT><B>#(fblue</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(fred...</B>, but for blue.
+
+<DT><B>#(flum</B><I> format blackref whiteref</I><B>)</B>
+
+<DD>Same as <B>#(fred...</B>, but representing the luminance value
+(0.299*red + 0.587*green + 0.114*blue) of the pixel.
+
+
+<DT><B>#(width)</B>
+
+<DD>Generates the width in pixels of the image.
+
+<DT><B>#(height)</B>
+
+<DD>Generates the height in pixels of the image.
+
+
+<DT><B>#(posx)</B> 
+
+<DD>Generates the horizontal position of the pixel, in pixels from the left
+edge of the image.
+
+<DT><B>#(posy)</B> 
+
+<DD>Generates the vertical position of the pixel, in pixels from the top
+edge of the image.
+
+</DL>
+
+
+<P>If the skeleton file ends with a LF-character, <b>ppmtoarbtxt</b>
+ignores it -- it does not include it in the output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-hd</B> <I>headskl</I>
+
+<DD>This option causes <b>ppmtoarbtxt</b> to place the contents of
+the file named <I>headskl</I> at the beginning of the output, before
+the first pixel.  It does the same substitutions as for
+<I>bodyskl</I>, except substitutions based on a pixel value are
+undefined.
+
+<DT><B>-tl</B> <I>tailskl</I>
+
+<DD>This option causes <b>ppmtoarbtxt</b> to place the contents of
+the file named <i>tailskl</i> at the end of the output, after the
+last pixel.  It is analogous to <b>-hd</b>.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+<h3>gray inversion</H3>
+
+<P>Here we generate a PGM plain-format image with gray inversion
+(like <b>ppmtopgm | pnminvert</b>).
+
+<p>Contents of our head skeleton file:
+
+<pre>
+P2
+#(width) #(height)
+255
+</pre>
+
+<P>Contents of our body skeleton file:
+
+<pre>
+#(ilum %d 255 0)
+</pre>
+
+<h3>povray file</h3>
+
+<P>Here we generate a povray file where each pixel is represented by a
+sphere at location (x,y,z) = (posx,height-posy,luminance).  The color
+of the sphere is the color of the pixel.
+
+<p>Contents of our head skeleton:
+
+<pre>
+#include &quot;colors.inc&quot;
+#include &quot;textures.inc&quot;
+camera {
+   location  &lt;#(width) * 0.6, #(height) * 0.7, 80&gt;
+   look_at   &lt;#(width) * 0.5, #(height) * 0.5, 0&gt;
+}
+
+light_source { &lt;#(width) * 0.5, #(height) * 0.5, 25&gt; color White
+}
+</pre>
+
+<p>Contents of our body skeleton:
+
+<pre>
+sphere { &lt;#(posx),#(height)-#(posy),#(ilum %d 0 10)&gt;, 0.5
+  texture {
+    pigment {
+      color rgb &lt;#(fred),#(fgreen),#(fblue)&gt;
+    }
+    finish {
+      phong 1
+    }
+  }
+}
+</pre>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A href="pnmtoplainpnm.html">pnmtoplainpnm</A>
+<A href="ppm.html">ppm</A>
+
+<H2>HISTORY</H2>
+<A NAME="history">&nbsp;</A>
+
+<P><B>ppmtoarbtxt</b> was added to Netpbm in Release 10.14 (March 2003).
+It existed under the name <b>ppmtotxt</b> since 1995.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1995 by Peter Kirchgessner
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtobmp.html b/ppmtobmp.html
new file mode 100644
index 00000000..ca6717c4
--- /dev/null
+++ b/ppmtobmp.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtobmp User Manual</TITLE>
+</HEAD><BODY>
+<H1>ppmtobmp</H1>
+Updated: 13 June 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtobmp - convert a PPM image into a BMP file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtobmp</B>
+
+[<B>-windows</B>]
+
+[<B>-os2</B>]
+
+[<B>-bpp=</B><I>bits_per_pixel</I>]
+
+[<I>ppmfile</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtobmp</b> reads a PPM image as input and produces a Microsoft
+Windows or OS/2 BMP file as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-windows</B>
+
+<DD>Tells the program to produce a Microsoft Windows BMP file.  (This
+is the default.)
+
+<DT><B>-os2</B>
+
+<DD>Tells the program to produce an OS/2 BMP file.  (Before August
+2000, this was the default).
+
+<DT><B>-bpp</B>
+
+<DD>This tells how many bits per pixel you want the BMP file to
+contain.  Only 1, 4, 8, and 24 are possible.  By default,
+<B>ppmtobmp</B> chooses the smallest number with which it can
+represent all the colors in the input image.  If you specify a number
+too small to represent all the colors in the input image,
+<B>ppmtobmp</B> tells you and terminates.  You can use <B>pnmquant</B>
+or <B>ppmdither</B> to reduce the number of colors in the image.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>NOTES</H2>
+
+<P>To get a faithful reproduction of the input image, the maxval of the
+input image must be 255.  If it is something else, 
+the colors in the BMP file may be slightly different from the colors
+in the input.
+
+<P>Windows icons are not BMP files.  Use <B>ppmtowinicon</B> to
+create those.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="bmptoppm.html">bmptoppm</A></B>,
+
+<B><A HREF="ppmtowinicon.html">ppmtowinicon</A></B>,
+
+<B><A HREF="pnmquant.html">pnmquant</A></B>,
+
+<B><A HREF="ppmdither.html">ppmdither</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1992 by David W. Sanderson.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">NOTES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoeyuv.html b/ppmtoeyuv.html
new file mode 100644
index 00000000..4c3a5fe8
--- /dev/null
+++ b/ppmtoeyuv.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoeyuv User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoeyuv</H1>
+Updated: April 3, 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoeyuv - convert a PPM image into a Berkeley YUV file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoeyuv</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoeyuv</b> reads a PPM image as input and produces a Berkeley
+Encoder YUV (not the same as Abekas YUV) file on the Standard Output
+file.
+
+<P>With no argument, <b>ppmtoeyuv</b>takes input from Standard Input.
+Otherwise, <I>ppmfile</I> is the file specification of the input file.
+
+<P><B>ppmtoeyuv</B> handles multi-image PPM input streams, outputting
+consecutive eyuv images.  There must be at least one image, though.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="eyuvtoppm.html">eyuvtoppm</A></B>,
+
+<B><A HREF="ppmtoyuv.html">ppmtoyuv</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtogif.html b/ppmtogif.html
new file mode 100644
index 00000000..8fd50f61
--- /dev/null
+++ b/ppmtogif.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Ppmtogif User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtogif</H1>
+<BR>
+<p><b>ppmtogif</b> was replaced in Netpbm 10.37 (December 2002) by
+<b><a href=pamtogif.html>pamtogif</a></b>.
+
+<P><B>pamtogif</b> is mostly backward compatible with <b>ppmtogif</b>.
+
+<P>One way <b>pamtogif</b> is not backward compatible with <b>ppmtogif</b>
+is that to specify a transparency (alpha) mask with <b>ppmtogif</b>, you
+supply the transparency as a separate pseudo-PGM image and use the
+<b>-alpha</b> option, whereas with <b>pamtogif</b>, you supply an input
+image that has the transparency integrated into it, and there is no
+<b>-alpha</b> option.
+
+<p><b>ppmtogif</b> still exists as a separate program for backward 
+compatibility, but it runs <b>pamtogif</b> to do the essential work.
+The compatibility <b>ppmtogif</b> interprets an <b>-alpha</b> option
+by reading the transparency image and combining it with the input
+image, then feeding <b>pamtogif</b> the combined image it expects.
+Other than that, the compatibility <b>ppmtogif</b> just passes input and
+options directly to <b>pamtogif</b>.
+
+<P>You should not make any new use of <b>ppmtogif</b> and if you modify an
+existing use, you should upgrade to <b>pamtogif</b>.
+
+<p>Unless you use the <b>-alpha</b> option, you can simply change the name
+of the program.  If you use <b>-alpha</b>, here is how to upgrade:
+
+<pre>
+<kbd>
+  $ ppmtogif -alpha=myalpha.pgm myinput.ppm &gt;myoutput.gif
+</kbd>
+</pre>
+
+becomes
+
+<pre>
+<kbd>
+  $ pamstack -tupletype=RGB_ALPHA myinput.ppm myalpha.pgm |  \
+      pamtogif &gt;myoutput.gif
+</kbd>
+</pre>
+
+
+<h2>Original Ppmtogif</h2>
+
+<p>If you are using Netpbm before 10.37, <b>pamtogif</b> doesn't exist,
+so you use <b>ppmtogif</b>.  You can use the <b>pamtogif</b> manual
+for <b>ppmtogif</b>, with the following exceptions.
+
+<p>The current documentation of <b>pamtogif</b> documents all versions
+of that program.  Use the information for Version 10.37 only.
+
+<p><b>ppmtogif</b> before Netpbm 10.31 does not accept PAM input at all.
+
+<p><b>ppmtogif</b> does not accept PAM input with transparency information
+in it.  Instead, <b>ppmtogif</b> has an <b>-alpha</b> option.
+
+<p>The syntax of the option is <b>-alpha=</b><i>pgmfile</i>.
+<b>ppmtogif</b> treats the contents of the named PGM file the same as
+<b>pamtogif</b> treats the alpha plane of a PAM.  The PGM image must
+have the same dimensions as the input file.  But unlike the PAM case,
+the alpha image need not have the same maxval as the input.
+<b>ppmtogif</b> interprets the alpha file using the alpha file's
+maxval.
+
+<P>You cannot specify both <B>-transparent</B> and <B>-alpha</B>.
+
+
+</BODY>
+</HTML>
diff --git a/ppmtoicr.html b/ppmtoicr.html
new file mode 100644
index 00000000..b58e2943
--- /dev/null
+++ b/ppmtoicr.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoicr User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoicr</H1>
+Updated: 30 July 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoicr - convert a PPM image into NCSA ICR format 
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoicr</B>
+
+[<B>-windowname</B> <I>name</I>]
+
+[<B>-expand</B> <I>expand</I>]
+
+[<B>-display</B> <I>display</I>]
+
+[<B>-rle</B>]
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoicr</b> reads a PPM file as input.  Produces an NCSA Telnet
+Interactive Color Raster graphic file as output.
+
+If <I>ppmfile</I> is not supplied, <b>ppmtoicr</b> reads from Standard
+Input.
+
+<P>Interactive Color Raster (ICR) is a protocol for displaying raster
+graphics on workstation screens. The protocol is implemented in NCSA
+Telnet for the Macintosh version 2.3.  The ICR protocol shares
+characteristics of the Tektronix graphics terminal emulation protocol.
+For example, escape sequences are used to control the display.
+
+<P><b>ppmtoicr</b> will output the appropriate sequences to create a
+window of the dimensions of the input pixmap, create a colormap of up
+to 256 colors on the display, then load the picture data into the
+window.
+
+<P>Note that there is no icrtoppm tool - this transformation is one
+way.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-windowname</B> <I>name</I>
+
+<DD>Output will be displayed in <I>name</I> (Default is to use
+<I>ppmfile</I> or &quot;untitled&quot; if the input is from Standard
+Input).
+
+<DT><B>-expand</B> <I>expand</I>
+
+<DD>Output will be expanded on display by factor <I>expand</I> (For
+example, a value of 2 will cause four pixels to be displayed for every
+input pixel.)
+
+<DT><B>-display</B> <I>display</I>
+
+<DD>Output will be displayed on screen numbered <I>display</I>
+
+<DT><B>-rle</B>
+
+<DD>Use run-length encoded format for display. (This will nearly
+always result in a quicker display, but may skew the colormap).
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>EXAMPLES</H2>
+
+To display a PPM file named <b>ppmfile</b> using the protocol:
+
+<PRE>
+    ppmtoicr ppmfile
+</PRE>
+
+This will create a window named <I>ppmfile</I> on the display with the
+correct dimensions for <I>ppmfile</I>, create and download a colormap
+of up to 256 colors, and download the picture into the window.  You
+may achieve the same effect with the following sequence:
+
+<PRE>
+    ppmtoicr ppmfile &gt; filename
+    cat filename
+</PRE>
+
+<p>To display a GIF file using the protocol in a window titled after the
+input file, zoom the displayed image by a factor of 2, and run-length
+encode the data:
+
+<PRE>
+    giftopnm giffile | ppmtoicr -w giffile -r -e 2
+</PRE>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P>The protocol uses frequent fflush() calls to speed up display.  If
+you save the output to a file for later display via <B>cat</B>,
+<b>ppmtoicr</b> will draw much more slowly.  In either case,
+increasing the blocksize limit on the display will speed up
+transmission substantially.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<P>NCSA Telnet for the Macintosh, University of Illinois at
+Urbana-Champaign (1989)
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Kanthan Pillay (<A
+HREF="mailto:svpillay@Princeton.EDU">svpillay@Princeton.EDU</A>),
+Princeton University Computing and Information Technology.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">EXAMPLES</A>
+<LI><A HREF="#lbAG">LIMITATIONS</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoilbm.html b/ppmtoilbm.html
new file mode 100644
index 00000000..b8159e8a
--- /dev/null
+++ b/ppmtoilbm.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoilbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoilbm</H1>
+Updated: 31 October 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoilbm - convert a PPM image into an ILBM file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoilbm</B>
+
+[<B>-maxplanes</B>|<B>-mp</B> <I>N</I>]
+
+[<B>-fixplanes</B>|<B>-fp</B> <I>N</I>]
+
+[<B>-ham6</B>|<B>-ham8</B>]
+
+[{<B>-dcbits</B>|<B>-dcplanes</B>} <i>r</i> <i>g</i> <i>b</i>]
+
+[
+<B>-normal</B>|<B>-hamif</B>|<B>-hamforce</B>|<B>-24if</B>|<B>-24force</B>|
+<b>-dcif</b>|<b>-dcforce</B>|<b>-cmaponly</B>
+]
+
+[<B>-ecs</B>|<B>-aga</B>]
+
+[<B>-compress</B>|<B>-nocompress</B>]
+
+[<B>-cmethod</B> <I>type</I>]
+
+[<B>-map</B> <i>ppmfile</i>]
+
+[<B>-savemem</B>]
+
+[<B>ppmfile</B>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoilbm</b> reads a PPM image as input.  Produces an ILBM file
+as output.  <b>ppmtoilbm</b> understands the following ILBM types:
+
+<UL COMPACT>
+
+<LI>Normal ILBMs with 1-16 planes
+
+<LI>Amiga HAM with 3-16 planes
+
+<LI>24 bit
+
+<LI>Color map (BMHD + CMAP chunk only, nPlanes = 0)
+
+<LI>Unofficial direct color.  1-16 planes for each color component.
+
+</ul>
+
+<p>Chunks written: BMHD, CMAP, CAMG (only for HAM), BODY (not for
+colormap files) unofficial DCOL chunk for direct color ILBM.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<p>Options marked with (*) can be prefixed with a &quot;no&quot;,
+e.g. &quot;-nohamif&quot;.  All options can be abbreviated to their
+shortest unique prefix.
+
+<DL COMPACT>
+<DT><B>-maxplanes</b> | <b>-mp</b> <i>n</i>
+
+<DD>(default 5, minimum 1, maximum 16) Maximum planes to write in a
+normal ILBM.  If the pixmap does not fit into &lt;n&gt; planes,
+ppmtoilbm writes a HAM file (if -hamif is used), a 24bit file (if
+-24if is used) or a direct color file (if -dcif is used) or aborts
+with an error.
+
+<DT><B>-fixplanes</b> | <b>-fp</b> <i>b</i>
+
+<DD>(min 1, max 16) If a normal ILBM is written, it will have exactly
+&lt;n&gt; planes.
+
+<DT><B>-hambits</b> | <b>-hamplanes</b> <i>n</i>
+
+<DD>(default 6, min 3, max 16) Select number of planes for HAM
+picture.  The current Amiga hardware supports 6 and 8 planes, so for
+now you should only use this values.
+
+<DT><B>-normal</B>
+
+<DD>Turns off -hamif/-24if/-dcif, -hamforce/-24force/-dcforce and
+-cmaponly.  Also sets compression type to byterun1.
+
+<p>This is the default.
+
+<DT><B>-hamif</B> (*)
+<DT><B>-24if</B> (*)
+<DT><B>-dcif</B> (*)
+
+<DD>Write a HAM/24bit/direct color file if the image does not fit into
+&lt;maxplanes&gt; planes.
+
+<DT><B>-hamforce</B> (*)
+<DT><B>-24force</B> (*)
+<DT><B>-dcforce</B> (*)
+
+<DD>Write a HAM/24bit/direct color file.
+
+<DT><B>-dcbits</b> <i>r</i> <i>g</i> <i>b</i>
+<DT><b>-dcplanes</b> <i>r</i> <i>g</i> <i>b</i>
+
+<DD>(default 5, min 1, max 16).  Select number of bits for red, green
+and blue in a direct color ILBM.
+
+<DT><B>-ecs</B>
+
+<DD>Shortcut for: -hamplanes 6 -maxplanes 5
+
+<p>This is the default.
+
+<DT><B>-aga</B>
+
+<DD>Shortcut for: <b>-hamplanes 8 -maxplanes 8</B>
+
+<DT><B>-ham6</B>
+
+<DD>Shortcut for: <b>-hamplanes 6 -hamforce</B>
+
+<DT><B>-ham8</B>
+
+<DD>Shortcut for: <b>-hamplanes 8 -hamforce</b>
+
+<DT><B>-compress</B> (*)
+
+<DD>This is the default.
+
+<DD>Compress the BODY chunk.  The default compression method is
+byterun1.  Compression requires building the ILBM image in memory;
+turning compression off allows stream-writing of the image, but the
+resulting file will usually be 30% to 50% larger.  Another alternative
+is the -savemem option, this will keep memory requirements for
+compression at a minimum, but is very slow.
+
+<DT><B>-cmethod</b> <b>none</b>|<b>byterun1</B>
+
+<DD>This option does the same thing as <b>-compress</b>.
+
+<DT><B>-map</b> <i>ppmfile</i>
+
+<DD>Write a normal ILBM using the colors in &lt;ppmfile&gt; as the
+colormap.  The colormap file also determines the number of planes, a
+<b>-maxplanes</b> or <b>-fixplanes</b> option is ignored.
+
+<DT><B>-cmaponly</B>
+
+<DD>Write a colormap file: only BMHD and CMAP chunks, no BODY chunk,
+nPlanes = 0.
+
+<DT><B>-savemem</B>
+
+<DD>See the <b>-compress</b> option.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>HAM pictures will always get a grayscale colormap; a real color
+selection algorithm might give better results.  On the other hand,
+this allows row-by-row operation on HAM images, and all HAM images of
+the same depth (no. of planes) share a common colormap, which is
+useful for building HAM animations.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+Amiga ROM Kernel Reference Manual - Devices (3rd Ed.)
+<BR>
+Addison Wesley, ISBN 0-201-56775-X
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="ilbmtoppm.html">ilbmtoppm</A>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+<p>Copyright (C) 1989 by Jef Poskanzer.
+
+<p>Modified October 1993 by Ingo Wilken (<A
+HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">REFERENCES</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtojpeg.html b/ppmtojpeg.html
new file mode 100644
index 00000000..4cc0aff7
--- /dev/null
+++ b/ppmtojpeg.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Ppmtojpeg User Manual</TITLE>
+</HEAD><BODY>
+<H1>ppmtojpeg</H1>
+Updated: September 2001
+<BR>
+<H2>NAME</H2>
+<b>ppmtojpeg</b> - replaced by pnmtojpeg
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>ppmtojpeg</b> was replaced in Netpbm 9.19 (September 2001) by
+<b><a href="pnmtojpeg.html">pnmtojpeg</a></b>.
+
+<P><B>pnmtojpeg</b> is backward compatible with <b>ppmtojpeg</b>
+except that with PGM or PBM input, it generates JPEG output in the special
+grayscale format.
+
+</BODY>
+</HTML>
diff --git a/ppmtoleaf.html b/ppmtoleaf.html
new file mode 100644
index 00000000..ffad778b
--- /dev/null
+++ b/ppmtoleaf.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoleaf User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoleaf</H1>
+Updated: 01 June 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoleaf - convert PPM image to Interleaf image format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoleaf</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoleaf</b> reads an Interleaf image file as input and
+generates a PPM image as output.
+
+<P>Interleaf is a now-defunct (actually purchased ca. 2000 by
+BroadVision) technical publishing software company.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppm.html">ppm</A></B>,
+
+<B><A HREF="pnmquant.html">pnmquant</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>The program is copyright (C) 1994 by Bill O'Donnell.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtolj.html b/ppmtolj.html
new file mode 100644
index 00000000..a015d4da
--- /dev/null
+++ b/ppmtolj.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtolj User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtolj</H1>
+Updated: 4 Sept 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtolj - convert a PPM image to an HP LaserJet PCL 5 Color file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtolj</B>
+
+[<b>-gamma</b> <I>val</I>]
+
+[<B>-resolution</B> <B>75</b>|<b>100</b>|<b>150</b>|<b>300</b>|<b>600</B>]
+
+[<B>-delta</B>]
+
+[<B>-float</B>]
+
+[<B>-noreset</b>] 
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtolj</b> reads a PPM image as input and converts it into a
+color file suitable to be printed by an HP color PCL 5 printer.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-delta</B>
+
+<DD>
+Apply delta row compression to reduce the size of the pcl file. 
+<DT><B>-gamma</B> <I>int</I>
+
+<DD>
+Gamma correct the image using the integet parameter as a gamma (default 0).
+
+<DT><B>-float</B>
+
+<DD>
+Suppress positioning information.  The default is to write the sequence 
+ESC&amp;l0E to the output.
+
+<DT><B>-noreset</B>
+
+<DD>
+Don't write the reset sequence to the begining and end of the output.
+
+<DT><B>-resolution</B>
+
+<DD>
+Set the required output resolution 75|100|150|300|600
+
+</DL>
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+HP PCL 5 &amp; Color Reference Guide,
+<a href="pnmtopclxl.html"><b>pnmtopclxl.html</b></a>,
+<a href="pbmtolj.html"><b>pbmtolj.html</b></a>,
+<a href="ppmtopj.html"><b>ppmtopj</b></a>,
+<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>,
+<a href="ppm.html"><b>ppm.html</b></a>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2000 by Jonathan Melvin.(<A
+HREF="mailto:jonathan.melvin@heywood.co.uk">jonathan.melvin@heywood.co.uk</A>)
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtomap.html b/ppmtomap.html
new file mode 100644
index 00000000..fbd93536
--- /dev/null
+++ b/ppmtomap.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtomap User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtomap</H1>
+Updated: 06 January 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtomap - create a map of all colors in a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P>This program exists only for backward compatibility.
+
+<P>Use <B>pnmcolormap</B>, which replaced it in January 2002.
+
+<P>One trivial difference between <B>ppmtomap</B> and <B>pnmcolormap
+all</B> is that if the input is PBM or PGM, <B>ppmtomap</B> would
+produce PPM output, whereas <B>pnmcolormap all</B> produces the same
+kind of output as the input.  This should not be very noticeable,
+though, as PBM and PGM images are usually usable anywhere a PPM image
+is.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">DESCRIPTION</A>
+<LI><A HREF="#lbAD">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtomitsu.html b/ppmtomitsu.html
new file mode 100644
index 00000000..48817344
--- /dev/null
+++ b/ppmtomitsu.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtomitsu User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtomitsu</H1>
+Updated: 29 Jan 1992
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtomitsu - convert a PPM image to a Mitsubishi S340-10 file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtomitsu</B>
+
+[-sharpness <I>val</I>]
+
+[<B>-enlarge</B> <I>val</I>]
+
+[<B>-media</B> <I>string</I>]
+
+[<B>-copy</B> <I>val</I>]
+
+[<B>-dpi300</B>]
+
+[<B>-tiny</B>]
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtomitsu</b> reads a PPM image as input and converts it into a
+format suitable to be printed by a Mitsubishi S340-10 printer, or any
+other Mitsubishi color sublimation printer.
+
+<P>The Mitsubishi S340-10 Color Sublimation printer supports 24bit
+color.  Images of the available sizes take so long to transfer that
+there is a fast method, employing a lookuptable, that ppmtomitsu will
+use if there is a maximum of 256 colors in the pixmap.  ppmtomitsu
+will try to position your image to the center of the paper, and will
+rotate your image for you if xsize is larger than ysize.  If your
+image is larger than the media allows, ppmtomitsu will quit with an
+error message. (We decided that the media were too expensive to have
+careless users produce misprints.)  Once data transmission has
+started, the job can't be stopped in a sane way without resetting the
+printer.  The printer understands putting together images in the
+printers memory; ppmtomitsu doesn't utilize this as pnmcat etc provide
+the same functionality and let you view the result on-screen, too.
+The S340-10 is the lowest common denominator printer; for higher
+resolution printers there's the dpi300 option. The other printers also
+support higher values for enlarge eg, but I don't think that's
+essential enough to warrant a change in the program.
+
+<A NAME="options">&nbsp;</A>
+<h2>OPTIONS</h2>
+
+<DL COMPACT>
+<DT><B>-sharpness</B> <I>1-4</I>
+
+<DD>
+&quot;sharpness&quot; designation.  Default is  to use the current sharpness.
+
+<DT><B>-enlarge</B> <I>1-3</I>
+
+<DD>
+Enlarge by a factor; Default is 1 (no enlarge)
+
+<DT><B>-media</B> {<B>A</B>|<B>A4</B>|<B>AS</B>|<B>A4S</B>}
+
+<DD>
+Designate the media you're using.  Default is 1184 x 1350, which will
+fit on any media.  A is 1216 x 1350, A4 is 1184 x 1452, AS is 1216 x
+1650 and A4S is 1184 x 1754.  A warning: If you specify a different
+media than the printer currently has, the printer will wait until you
+put in the correct media or switch it off.
+
+<DT><B>-copy</B> <I>1-9</I>
+
+<DD>
+The number of copies to produce.  Default is 1.
+
+<DT><B>-dpi300</B>
+
+<DD>
+Double the number of allowed pixels for a S3600-30 Printer in S340-10
+compatibility mode.  (The S3600-30 has 300 dpi).
+
+<DT><B>-tiny</B>
+
+<DD>
+Memory-safing, but always slow. The printer will get the data
+line-by-line in 24bit. It's probably a good idea to use this if your
+machine starts paging a lot without this option.
+
+</DL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+Mitsubishi Sublimation Full Color Printer S340-10 Specifications of
+Parallel Interface LSP-F0232F
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmquant.html">pnmquant</A>, 
+<A HREF="pamscale.html">pamscale</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1992, 93 by S.Petra Zeidler, MPIfR Bonn, Germany.  (<A
+HREF="mailto:spz@specklec.mpifr-bonn.mpg.de">spz@specklec.mpifr-bonn.mpg.de</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAE">REFERENCES</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtompeg-par.gif b/ppmtompeg-par.gif
new file mode 100644
index 00000000..dbaf615a
--- /dev/null
+++ b/ppmtompeg-par.gif
Binary files differdiff --git a/ppmtompeg-snr.gif b/ppmtompeg-snr.gif
new file mode 100644
index 00000000..551490ac
--- /dev/null
+++ b/ppmtompeg-snr.gif
Binary files differdiff --git a/ppmtompeg.html b/ppmtompeg.html
new file mode 100644
index 00000000..ccafd14f
--- /dev/null
+++ b/ppmtompeg.html
@@ -0,0 +1,1291 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<TITLE>Ppmtompeg User Manual</TITLE>
+</HEAD>
+<BODY>
+<H1>Ppmtompeg</H1>
+Updated: 23 July 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+ppmtompeg - encode an MPEG-1 bitstream
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>ppmtompeg</B>
+[<I>options</I>]
+<I>parameter-file</I>
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>ppmtompeg</B> produces an MPEG-1 video stream.  MPEG-1 is the
+first great video compression method, and is what is used in Video CDs
+(VCD).  <b>ppmtompeg</b> 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.
+
+<p>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
+<b>ppmtompeg</b> produces is MPEG-1.
+
+<p>Mencoder from the <a href="http://www.mplayerhq.hu">Mplayer
+package</a> is probably superior for most video format generation
+needs, if for no other reason than that it is more popular.
+
+<p>The programming library <a href="http://pm2v.free.fr"><b>PM2V</b></a>
+generates MPEG-2 streams.
+
+<p>Use <a href="http://www.mplayerhq.hu">Mplayer</a> (not part of Netpbm)
+to do the reverse conversion: to create a series of PNM files from an MPEG
+stream.
+
+<p><i>param_file</i> is a parameter file which includes a list of
+input files and other parameters.  The file is described in detail
+below.
+
+<P>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<a
+href="http://www.faqs.org/faqs/compression-faq">Compression FAQ</a>.
+
+<H2 id="options">OPTIONS</H2>
+
+<p>The <b>-gop</b>, <b>-combine_gops</b>, <b>-frames</b>, and
+<b>-combine_frames</b> options are all exclusive.
+
+<DL COMPACT>
+<DT><B>-stat stat_file</B>
+
+<DD>This option causes <b>ppmtompeg</b> to append the statistics that
+it write to Standard Output to the file <I>stat_file</I> 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).
+
+<p>These statistics include how many I, P, and B frames there were,
+and information about compression and quality.
+
+
+<DT><B>-quiet</b> <i>num_seconds</i>
+
+<DD> causes <b>ppmtompeg</b> not to report remaining time more often
+than every <i>num_seconds</i> seconds (unless the time estimate rises,
+which will happen near the beginning of the run).  A negative value
+tells <b>ppmtompeg</b> 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.
+
+<DT><B>-realquiet</B> <DD> causes <b>ppmtompeg</b> to run silently,
+with the only screen output being errors.  Particularly useful when
+reading input from stdin.
+
+<DT>
+<B>-no_frame_summary</B>
+
+<DD> This option prevents <b>ppmtompeg</b> from printing a summary
+line for each frame
+
+<DT><B>-float_dct</B>
+
+<DD> forces <b>ppmtompeg</b> to use a more accurate, yet more
+computationally expensive version of the DCT.
+
+<DT><B>-gop</b> <i>gop_num</i>
+<DD>
+causes <b>ppmtompeg</b> 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 <b>.gop.</b><i>gop_num</i>.
+<b>ppmtompeg</b> does not output any sequence information.
+
+<DT><B>-combine_gops</B>
+
+<DD> causes <b>ppmtompeg</b> simply to combine some GOP files into a
+single MPEG output stream.  <b>ppmtompeg</b> 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
+<b>ppmtompeg</b> assumes you're using the same parameter file you used
+when you created the input (with the <b>-gop</b> 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 <b>.gop.</b><i>gop_num</i>, with <i>gop_num</i>
+starting from 0, as the input files.
+     
+<p>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 (<b>-gop</b>) and for later turning them into an MPEG stream
+(<b>-combine_gops</b>).
+     
+
+<DT><B>-frames <i>first_frame</i> <i>last_frame</i></B>
+
+<DD>This option causes <b>ppmtompeg</b> to encode only the frames numbered
+<i>first_frame</i> to <i>last_frame</i>, 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 <b>.frame.</b><i>frame_num</i>.  No
+GOP header information is output.  (Thus, the parameter file need not
+include the GOP_SIZE value)
+
+<p>Use <b>ppmtompeg -combine_frames</b> to combine these frames later into
+an MPEG stream.
+
+
+<DT><B>-combine_frames</B>
+
+<DD> This option causes <b>ppmtompeg</b> simply to combine some
+individual MPEG frames (such as you might have created with an earlier
+run of <b>ppmtompeg -frames</b>) 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).
+
+<p>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 <b>.frame.</b><i>frame_num</i>, with
+<i>frame_num</i> starting from 0, as the input files.
+     
+
+
+<DT><B>-nice</B>
+
+<DD>This option causes <b>ppmtompeg</b> to run any remote processes
+"nicely," i.e.  at low priority.  (This is relevant only if you are
+running <b>ppmtompeg</b> in parallel mode.  Otherwise, there are no
+remote processes).  See 'man nice.'
+
+<DT><B>-max_machines <i>num_machines</i></B>
+
+<DD>This option causes <b>ppmtompeg</b> to use no more than
+<i>num_machines</i> machines as slaves for use in parallel encoding.
+
+<DT><B>-snr</B> 
+
+<DD>This option causes <b>ppmtompeg</b> 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
+<b>ppmtompeg</b> runs a little slower when you use this option.
+
+<DT><B>-mse</B>
+
+<DD>This option causes <b>ppmtompeg</b> to report the mean squared
+error per block.  It also automatically reports the quality of the
+images, so there is no need to specify <b>-snr</b> then.
+
+<DT><B>-bit_rate_info</b> <i>rate_file</i>
+
+<DD> This option makes <b>ppmtompeg</b> write bit rate information
+into the file <i>rate_file</i>.  Bit rate information is bits per frame, and
+also bits per I-frame-to-I-frame.
+
+<DT><B>-mv_histogram</B> 
+
+<DD> This option causes <b>ppmtompeg</b> 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.
+
+<p>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.
+
+<dt><b>-debug_sockets</b>
+
+<dd>This option causes <b>ppmtompeg</b> to print to Standard Output
+messages that narrate the communication between the machines when you run
+<b>ppmtompeg</b> in <a href="#parallel">parallel mode</a>.
+
+<dt><b>-debug_machines</b>
+
+<dd>This option causes <b>ppmtompeg</b> to print to Standard Output
+messages that narrate the progress of the conversion on the various
+machines when you run <b>ppmtompeg</b> in <a href="#parallel">parallel
+mode</a>.
+     
+</DL>
+
+<H2 id="parmfile">PARAMETER FILE</H2>
+
+<P>The parameter file <strong>must</strong> contain the following
+lines (except when using the <b>-combine_gops</b> or <b>-combine_frames</b>
+options):
+
+<DL COMPACT>
+
+<DT><B>PATTERN</b> <i>pattern</i>
+
+<DD>This statement specifies the pattern (sequence) of I frames, P frames,
+and B frames.  <i>pattern</i> is just a sequence of the letters I, P, and
+B with nothing between.  Example:
+
+<pre>
+    PATTERN IBBPBBPBBPBBPBB
+</pre>     
+
+<p>See <a href="#ipb">I Frames, P Frames, B Frames</a>.
+
+<DT><B>OUTPUT</b> <i>output file</i>
+<DD>This names the file where the output MPEG stream goes.
+     
+<DT><B>INPUT_DIR</b> <i>directory</i>
+
+<DD>This statement tells where the input images (frames) come from.
+If each frame is in a separate file, <i>directory</i> is the directory
+where they all are.  You may use <b>.</b> to refer to the current 
+directory.  A null <i>directory</i> refers to the root directory of the
+system file tree.
+
+<p>To have <b>ppmtompeg</b> read all the frames serially from Standard 
+Input, specify
+<pre>
+  INPUT_DIR stdin
+</pre>
+
+<DT><B>INPUT</b>
+<DD>
+This line must be followed by a list of the input files (in display order)
+and then the line <B>END_INPUT</B>.
+
+<p>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 <i>single_star_expr</i>
+<b>[</b><i>x</i><b>-</b><i>y</i><b>]</b>.
+<i>single_star_expr</i> can have a single <b>*</b> in it.  It is
+replaced by all the numbers between x and y inclusive.  So, for
+example, the line <b>tennis*.ppm [12-15]</b> refers to the files
+tennis12.ppm, tennis13.ppm, tennis14.ppm, tennis15.ppm.
+
+<p>Uniform zero-padding occurs, as well.  For example, the line
+<b>football.*.ppm [001-130]</b> refers to the files football.001.ppm,
+football.002.ppm, ..., football.009.ppm, football.010.ppm, ...,
+football.130.ppm.
+
+<p>The third type of line is: <i>single_star_expr</i>
+<b>[</b><i>x</i><b>-</b><i>y</i><b>+</b><i>s</i><b>]</b>, where the
+line is treated exactly as above, except that we skip by <i>s</i>.  Thus, the
+line <b>football.*.ppm [001-130+4]</b> refers to the files
+football.001.ppm, football.005.ppm, football.009.ppm,
+football.013.ppm, etc.
+
+<p>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:
+
+<pre>
+  `cat myfilelist`
+</pre>
+
+<p>
+If input is from Standard Input (per the <b>INPUT_DIR</b> statement), 
+<b>ppmtompeg</b> ignores the <B>INPUT</b>/<b>END_INPUT</b> block, but
+it still must be present.
+     
+<DT><b>BASE_FILE_FORMAT</b> {<b>PPM</b> | <b>PNM</b> | <b>YUV</b> | 
+     <b>JPEG</b> | <b>JMOVIE</b>}
+
+<DD><B>ppmtompeg</b> 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.
+
+<DT><b>INPUT_CONVERT</b> <i>conversion_command</i>
+
+<DD>You must specify how to convert a file to the base file format.
+If no conversion is necessary, then you would just say:
+
+     <pre>
+     INPUT_CONVERT *
+     </pre>
+     
+<p>Otherwise, <i>conversion_command</i> is a shell command that causes
+an image in the format your specified with <B>BASE_FILE_FORMAT</b> to
+be written to Standard Output.  <b>ppmtompeg</b> executes the command
+once for each line between <b>INPUT</b> and <b>END_INPUT</b> (which is
+normally, but not necessarily, a file name).  In the conversion
+command, <b>ppmtompeg</b> replaces each '*' with the contents of that
+line.
+     
+     If you had a bunch of gif files, you might say:
+     <pre>
+     INPUT_CONVERT giftopnm *
+     </pre>
+
+     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:
+
+     <pre>
+     INPUT_CONVERT cat *.Y *.U *.V
+     </pre>
+
+<p>Input conversion is not allowed with input from stdin, so use
+
+     <pre>
+     INPUT_CONVERT *
+     </pre>
+
+as described above.
+     
+<DT><b>SIZE</b> <i>width</i><b>x</b><i>height</i>
+
+<dd>
+
+<p><i>width</i> and <i>height</i> are the width and height of each
+frame in pixels.
+
+<p>When <b>ppmtompeg</b> can get this information from the input image
+files, it ignores the <b>SIZE</b> parameter and you may omit it.
+
+<p>When the image files are in YUV format, the files don't contain
+dimension information, so <b>SIZE</b> is required.
+
+<p>When <b>ppmtompeg</b> is running in parallel mode, not all of the
+processes in the network have access to the image files, so
+<b>SIZE</b> is required and must give the same dimensions as the
+input image files.
+
+<DT><b>YUV_SIZE</b> <i>width</i><b>x</b><i>height</i>
+
+<dd>This is an obsolete synonym of <b>SIZE</b>.
+
+<DT><b>YUV_FORMAT</B> {<b>ABEKAS</b> | <b>PHILLIPS</b> | <b>UCB</B> |
+                      <b>EYUV</b> | <i>pattern</i>}
+
+<DD>This is meaningful only when <b>BASE_FILE_FORMAT</b> specifies
+YUV format, and then it is required.  It specifies the sub-format of
+the YUV class.
+
+
+<DT><b>GOP_SIZE</b> <i>n</i>
+
+<DD><i>n</i> is the number of frames in a Group of Pictures.  Except that
+because a GOP must start with an I frame, <b>ppmtompeg</b> makes a GOP as
+much longer than <i>n</i> as it has to to make the next GOP start with an
+I frame. 
+
+<p>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).
+
+<p>See <a href="#gop">Group Of Pictures</a>.
+
+<DT><b>SLICES_PER_FRAME</b> <i>n</i>
+<dd><i>n</i> 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.
+
+<DT><b>PIXEL</b> {<b>FULL</b> | <b>HALF</b>} 
+
+<dd>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.
+     
+
+<DT><b>RANGE</b> <i>n</i>
+<dd>Use a search range of <i>n</i> pixels in each of the four directions
+from a subject pixel.  (So the search window is a square <i>n</i>*2 pixels
+on a side).
+
+<DT><b>PSEARCH_ALG</b> {<b>EXHAUSTIVE</B> | <b>TWOLEVEL</b> |
+     <b>SUBSAMPLE</b> | <b>LOGARITHMIC</b>}
+
+<dd>This statement tells <b>ppmtompeg</b> what kind of search
+    technique (algorithm) to use for P frames.  You select the desired
+    combination of speed and compression.  <b>EXHAUSTIVE</b> gives the
+    best compression, but <b>LOGARITHMIC</B> is the fastest.
+    <B>TWOLEVEL</B> 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).
+
+<DT><b>BSEARCH_ALG</b> {<b>SIMPLE</B> | <B>CROSS2</B> | <B>EXHAUSTIVE</B>}
+
+<dd>This statement tells <b>ppmtompeg</b> what kind of search
+    technique (algorithm) to use for B frames.  <b>SIMPLE</B> means
+    find best forward and backward vectors, then interpolate.
+    <B>CROSS2</B> means find those two vectors, then see what backward
+    vector best matches the best forward vector, and vice versa.
+    <b>EXHAUSTIVE</b> does an n-squared search and is
+    <em>extremely</em> slow in relation to the others (<b>CROSS2</b>
+    is about half as fast as <b>SIMPLE</B>).
+
+<DT><b>IQSCALE</b> <i>n</i>
+<dd>Use <i>n</i> as the qscale for I frames.
+     See <a href="#qscale">Qscale</a>.
+
+<DT><b>PQSCALE</b> <i>n</i>
+<dd>Use <i>n</i> as the qscale for P frames.
+     See <a href="#qscale">Qscale</a>.
+
+<DT><b>BQSCALE</b> <i>n</i>
+<dd>Use <i>n</i> as the qscale for B frames.
+     See <a href="#qscale">Qscale</a>.
+
+<DT><b>REFERENCE_FRAME</b> {<B>ORIGINAL</B> | <b>DECODED</b>} <dd>This
+statement determines whether <b>ppmtompeg</b> 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 <b>ORIGINAL</b> here, and lower the
+qscale (see <b>QSCALE</b> if the quality is not good enough.
+
+<table border="1" cellpadding="5" cellspacing="0" 
+summary="comparison of original to decoded">
+  <caption>Original or Decoded? (Normalized)</caption>
+<?makeman r c c c c c. ?>
+<?makeman _ ?>
+  <tr align="center" bgcolor="#CCCCCC">
+    <th>Reference</th>
+    <th>Compression</th>
+    <th>Speed</th>
+    <th>Quality I</th>
+    <th>Quality P</th>
+    <th>Quality B</th>
+    </tr>
+  <tr>
+    <td align="right">Decoded</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    <td align="center">969</td>
+    <td align="center">919</td>
+    </tr>
+  <tr>
+    <td align="right">Original</td>
+    <td align="center">885</td>
+    <td align="center">1373</td>
+    <td align="center">1000</td>
+    <td align="center">912</td>
+    <td align="center">884</td>
+    </tr>
+  </table>
+
+
+
+</dl>
+     
+<p>The following lines are optional:
+
+<DL>
+
+<DT><B>FORCE_ENCODE_LAST_FRAME</B>
+
+<dd>This statement is obsolete.  It does nothing.
+
+<p>Before Netpbm 10.26 (January 2005), <b>ppmtompeg</b> would drop
+trailing B frames from your movie, since a movie can't end with a B
+frame.  (See <a href="#ipb">I Frames, P Frames, B Frames</a>.
+You would have to specify <b>FORCE_ENCODE_LAST_FRAME</b> to stop
+that from happening and get the same function that <b>ppmtompeg</b>
+has today.
+
+
+<DT><b>NIQTABLE</b>
+
+<dd>This statement specifies a custom non-intra quantization table.
+If you don't specify this statement, <b>ppmtompeg</b> uses a default
+non-intra quantization table.
+
+<p>
+The 8 lines immediately following <b>NIQTABLE</b> specify the quantization
+table.  Each line defines a table row and consists of 8 integers,
+whitespace-delimited, which define the table columns.
+
+<DT><B>IQTABLE</b>
+
+<dd>This is analogous to NIQTABLE, but for the intra quantization table.
+
+<DT><b>ASPECT_RATIO</b> <i>ratio</i>
+
+<dd>This statement specifies the aspect ratio for <b>ppmtompeg</b> to
+specify in the MPEG output.  I'm not sure what this is used for.
+
+<p><i>ratio</i> 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.
+
+<DT><b>FRAME_RATE</b> <i>rate</i>
+<dd>This specifies the frame rate for <b>ppmtompeg</b> to specify in the
+MPEG output.  Some players use this value to determine the playback rate.
+
+<p><i>rate</i> must be 23.976, 24, 25, 29.97, 30, 50, 59.94, or 60.
+
+<DT><b>BIT_RATE</b> <i>rate</i>
+<DD>This specifies the bit rate for Constant Bit Rate (CBR) encoding.
+
+<p><i>rate</i> must be an integer.
+
+<DT><b>BUFFER_SIZE</b> <i>size</i> 
+
+<dd>This specifies the value
+<b>ppmtompeg</b> is to specify in the MPEG output for the Video
+Buffering Verifier (VBV) buffer size needed to decode the sequence.
+
+<p>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.
+
+<p>As <b>ppmtompeg</b> 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.  
+
+<P>If you specify the <b>WARN_VBV_UNDERFLOW</b> statement,
+<b>ppmtompeg</b> 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.
+
+<P>If you specify the <b>WARN_VBV_OVERFLOW</b> statement,
+<b>ppmtompeg</b> 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.
+
+<DT><B>WARN_VBV_UNDERFLOW</B>
+<DT><B>WARN_VBV_OVERFLOW</B>
+
+<dd>See <b>BUFFER_SIZE</b>.
+
+<p>These options were new in Netpbm 10.26 (January 2005).  Before that,
+<b>ppmtompeg</b> issued the warnings always.
+
+</DL>
+
+
+The following statements apply only to parallel operation:
+
+<DL> 
+
+<DT><b>PARALLEL</b>
+
+<dd>This statement, paired with <b>END PARALLEL</B>, is what causes
+<b>ppmtompeg</b> to operate in parallel mode.  See <a
+href="#parallel">Parallel Operation</a>.
+
+<dt><b>END PARALLEL</b>
+
+<DD>This goes with <b>PARALLEL</b>.
+
+<DT><b>PARALLEL_TEST_FRAMES</b> <i>n</i> 
+
+<dd>The master starts off by measuring each slave's speed.  It does
+this by giving each slave <i>n</i> 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.
+<b>ppmtompeg</b> 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.
+
+<p>If you specify <b>FORCE_I_ALIGN</b>, <b>ppmtompeg</b> will increase
+the test frames value enough to maintain the alignment.
+
+<p>If there aren't enough frames for every slave to have the indicated
+number of test frames, <b>ppmtompeg</b> will give some slaves fewer.
+
+
+<DT><b>PARALLEL_TIME_CHUNKS</b> <i>t</i>
+
+<dd>When you specify this statement, the master attempts to feed work
+to the slaves in chunks that take <i>t</i> 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.
+
+<p>Smaller values of <i>t</i> increase communication, but improve load
+balancing.  The default is 30 seconds.
+
+<p>You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER,
+and PARALLEL_PERFECT.  PARALLEL_CHUNK_TAPER is usually best.
+
+<DT><b>PARALLEL_CHUNK_TAPER</b>
+
+<DD>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.
+
+<p>You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER,
+and PARALLEL_PERFECT.  PARALLEL_CHUNK_TAPER is usually best.
+
+
+<DT><b>PARALLEL_PERFECT</b>
+
+<dd>If this statement is present, <b>ppmtompeg</b> 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.  
+
+<p>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.
+
+<p>You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER,
+and PARALLEL_PERFECT.  PARALLEL_CHUNK_TAPER is usually best.
+
+<DT><b>RSH</b> <i>remote_shell_command</i>
+
+<DD><b>ppmtompeg</b> executes the shell command
+<i>remote_shell_command</i> to start a process on another machine.
+The default command is <b>rsh</b>, and whatever command you specify
+must have compatible semantics.  <b>ssh</b> is usually compatible.
+The command <b>ppmtompeg</b> uses is one like this:
+<b>ssh remote.host.com -l username shellcommand</b>.
+
+<p>Be sure to set up <b>.rhosts</b> files or SSH key authorizations
+where needed.  Otherwise, you'll have to type in passwords.
+
+<p>On some HP machines, <b>rsh</b> is the restricted shell, and you want
+to specify <b>remsh</b>.
+
+<DT><b>FORCE_I_ALIGN</b>
+
+<dd>This statement forces each slave to encode a chunk of frames which
+is a multiple of the pattern length (see <b>PATTERN</b>).  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.
+
+<p>This document used to say there was an argument to
+<b>FORCE_I_ALIGN</b> which was the number of frames <b>ppmtompeg</b>
+would use (and was required to be a multiple of the pattern length).
+But <b>ppmtompeg</b> has apparently always ignored that argument, and
+it does now.
+
+<DT><B>KEEP_TEMP_FILES</B>
+
+<dd>This statement causes <b>ppmtompeg</b> 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 <b>-frames</b> option.  
+
+<p>This is mostly useful for debugging.
+
+<p>This works only if you're using a shared filesystem to communicate
+between the servers.
+
+<p>This option was new in Netpbm 10.26 (January 2005).
+
+</DL>
+
+
+<H3>Parameter File Notes</h3>
+
+<P> If you use the <b>-combine_gops</b> 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 <b>ppmtompeg</b> uses by default the
+output file name with suffix <b>.gop.</b><i>gop_num</i>, with <i>gop_num</i>
+starting from 0, as the input files. 
+
+<p>If you use the <b>-combine_frames</b> 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
+<b>.frame.</b><i>frame_num</i>, with <i>frame_num</i> starting from 0,
+as the input files.
+
+<p>Any number of spaces and tabs may come between each option and value.  Lines
+beginning with <b>#</b> 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 <b>-combine_gops</b> and
+<b>-combine_frames</b>.
+
+<P>The file format is case-sensitive so all keywords should be in
+upper case.
+
+<P>The statements may appear in any order, except that the order within
+a block statement (such as INPUT ... END INPUT) is significant.
+
+<P><b>ppmtompeg</b> is prepared to handle up to 16 B frames between
+reference frames when encoding with input from stdin.  (To build a
+modified <b>ppmtompeg</b> with a higher limit, change the constant
+B_FRAME_RUN in frame.c and recompile).
+
+<H2 id="general">GENERAL USAGE INFORMATION</H2>
+
+<H3 id="qscale">Qscale</h3>
+
+<p>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.
+
+<p>You select the qscale values with the <B>IQSCALE</b>,
+<b>PQSCALE</b>, and <b>BSCALE</b> parameter file statements.
+
+<p>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:
+<img src="ppmtompeg-snr.gif" alt="signal-to-noise formula" height="52" width="302">
+where MSE is the mean squared error.
+     
+
+<p>Flower garden tests:
+
+<table border="1" cellpadding="5" cellspacing="0" summary="Qscale vs Quality">
+  <caption>Qscale vs Quality</caption>
+<?makeman r r r r. ?>
+<?makeman _ ?>
+  <tr align="center">
+    <th>Qscale</th>
+    <th>I Frames</th>
+    <th>P Frames</th>
+    <th>B Frames</th>
+    </tr>
+  <tr>
+    <td align="right">1</td>
+    <td align="right">43.2</td>
+    <td align="right">46.3</td>
+    <td align="right">46.5</td>
+    </tr>
+  <tr>
+    <td align="right">6</td>
+    <td align="right">32.6</td>
+    <td align="right">34.6</td>
+    <td align="right">34.3</td>
+    </tr>
+  <tr>
+    <td align="right">11</td>
+    <td align="right">28.6</td>
+    <td align="right">29.5</td>
+    <td align="right">30.0</td>
+    </tr>
+  <tr>
+    <td align="right">16</td>
+    <td align="right">26.3</td>
+    <td align="right">26.8</td>
+    <td align="right">28.6</td>
+    </tr>
+  <tr>
+    <td align="right">21</td>
+    <td align="right">24.7</td>
+    <td align="right">25.0</td>
+    <td align="right">27.9</td>
+    </tr>
+  <tr>
+    <td align="right">26</td>
+    <td align="right">23.5</td>
+    <td align="right">23.9</td>
+    <td align="right">27.5</td>
+    </tr>
+  <tr>
+    <td align="right">31</td>
+    <td align="right">22.6</td>
+    <td align="right">23.0</td>
+    <td align="right">27.3</td>
+    </tr>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" 
+summary="Qscale vs Compression">
+  <caption>Qscale vs Compression</caption>
+<?makeman r r r r. ?>
+<?makeman _ ?>
+  <tr align="center">
+    <th>Qscale</th>
+    <th>I Frames</th>
+    <th>P Frames</th>
+    <th>B Frames</th>
+    </tr>
+  <tr>
+    <td align="right">1</td>
+    <td align="right">2</td>
+    <td align="right">2</td>
+    <td align="right">2</td>
+    </tr>
+  <tr>
+    <td align="right">6</td>
+    <td align="right">7</td>
+    <td align="right">10</td>
+    <td align="right">15</td>
+    </tr>
+  <tr>
+    <td align="right">11</td>
+    <td align="right">11</td>
+    <td align="right">18</td>
+    <td align="right">43</td>
+    </tr>
+  <tr>
+    <td align="right">16</td>
+    <td align="right">15</td>
+    <td align="right">29</td>
+    <td align="right">97</td>
+    </tr>
+  <tr>
+    <td align="right">21</td>
+    <td align="right">19</td>
+    <td align="right">41</td>
+    <td align="right">173</td>
+    </tr>
+  <tr>
+    <td align="right">26</td>
+    <td align="right">24</td>
+    <td align="right">56</td>
+    <td align="right">256</td>
+    </tr>
+  <tr>
+    <td align="right">31</td>
+    <td align="right">28</td>
+    <td align="right">73</td>
+    <td align="right">330</td>
+    </tr>
+</table>
+
+
+<h3>Search Techniques</h3>
+     
+<p>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.
+     
+<p>There are 4 types of P frame search: Exhaustive, TwoLevel,
+SubSample, and Logarithmic.
+     
+<p>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:
+     
+<table border="1" cellpadding="5" cellspacing="0" 
+summary="P frame motion vector search">
+  <caption>P frame Motion Vector Search (Normalized)</caption>
+<?makeman r c c c. ?>
+<?makeman _ ?>
+  <tr align="center">
+    <th>Technique</th>
+    <th>Compression<a href="#smallbetter"><sup>1</sup></a></th>
+    <th>Speed      <a href="#largefaster"><sup>2</sup></a></th>
+    <th>Quality    <a href="#largebetter"><sup>3</sup></a></th>
+    </tr>
+  <tr>
+    <td align="right">Exhaustive</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    </tr>
+  <tr>
+    <td align="right">SubSample</td>
+    <td align="center">1008</td>
+    <td align="center">2456</td>
+    <td align="center">1000</td>
+    </tr>
+  <tr>
+    <td align="right">TwoLevel</td>
+    <td align="center">1009</td>
+    <td align="center">3237</td>
+    <td align="center">1000</td>
+    </tr>
+  <tr>
+    <td align="right">Logarithmic</td>
+    <td align="center">1085</td>
+    <td align="center">8229</td>
+    <td align="center">998</td>
+    </tr>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" 
+summary="B frame motion vector search">
+  <caption>B frame Motion Vector Search (Normalized)</caption>
+<?makeman r c c c. ?>
+<?makeman _ ?>
+  <tr align="center">
+    <th>Technique</th>
+    <th>Compression<a href="#smallbetter"><sup>1</sup></a></th>
+    <th>Speed<a href="#largefaster"><sup>2</sup></a></th>
+    <th>Quality<a href="#largebetter"><sup>3</sup></a></th>
+    </tr>
+  <tr>
+    <td align="right">Exhaustive</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    </tr>
+  <tr>
+    <td align="right">Cross2</td>
+    <td align="center">975</td>
+    <td align="center">1000</td>
+    <td align="center">996</td>
+    </tr>
+  <tr>
+    <td align="right">Simple</td>
+    <td align="center">938</td>
+    <td align="center">1765</td>
+    <td align="center">991</td>
+    </tr>
+</table>
+
+<a name="smallbetter">&nbsp;</a><sup>1</sup>Smaller numbers are better
+compression.
+
+<a name="largefaster">&nbsp;</a><sup>2</sup>Larger numbers mean faster
+execution.
+
+<a name="largebetter">&nbsp;</a><sup>3</sup>Larger numbers mean better quality.
+
+<p>For some reason, Simple seems to give better compression, but it
+depends on the image sequence.
+
+<p>Select the search techniques with the <B>PSEARCH_ALG</B> and
+<B>BSEARCH_ALG</b> parameter file statements.
+
+
+<a name="gop"></a>
+<h3>Group Of Pictures (GOP)</h3>
+
+<p>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
+<b>GOP_SIZE</b> parameter file statement.  A GOP always starts with an
+I frame.
+
+<p>Instead of encoding an entire sequence, you can encode a single
+GOP.  To do this, use the <b>-gop</b> command option.  You can later
+join the resulting GOP files at any time by running <b>ppmtompeg</b>
+with the <b>-combine_gops</b> command option.
+     
+     
+<h3>Slices</h3>
+
+<p>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.
+     
+<p>Control the slice size with the <B>SLICES_PER_FRAME</B> parameter
+file statement.
+
+<p>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.
+     
+<p>Note: these MPEG playback systems are really wrong, since the MPEG
+standard says this doesn't have to be so.
+
+
+
+<h3>Search Window</h3>
+     
+<p>The search window is the window in which <b>ppmtompeg</b> 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 <b>RANGE</b> and <b>PIXEL</B> parameter file statements.
+
+<h3 id="ipb">I Frames, P Frames, B Frames</h3>
+
+<p>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).
+
+<p>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 <em>and</em> after it.
+
+<p>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).
+
+<p>Beyond that, you can choose which frames are represented by which
+types.  You specify a pattern, such as IBPBP and <b>ppmtompeg</b>
+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:
+
+<table border="1" cellpadding="5" cellspacing="0" 
+summary="Comparison of I/P/B Frames">
+  <caption>Comparison of I/P/B Frames (Normalized)</caption>
+<?makeman r c c c. ?>
+<?makeman _ ?>
+  <tr align="center">
+    <th>Frame Type</th>
+    <th>Size</th>
+    <th>Speed</th>
+    <th>Quality</th>
+    </tr>
+  <tr>
+    <td align="right">I frames</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    <td align="center">1000</td>
+    </tr>
+  <tr>
+    <td align="right">P frames</td>
+    <td align="center">409</td>
+    <td align="center">609</td>
+    <td align="center">969</td>
+    </tr>
+  <tr>
+    <td align="right">B frames</td>
+    <td align="center">72</td>
+    <td align="center">260</td>
+    <td align="center">919</td>
+    </tr>
+  </table>
+
+(this is with constant qscale)
+     
+<p>A standard sequence is IBBPBBPBBPBBPBB.
+     
+<p>Select the sequence with the <B>PATTERN</B> parameter file statement.
+
+<p>Since the last MPEG frame cannot be a B frame (see above), if the
+pattern you specify indicates B frames for the last movie frames,
+<b>ppmtompeg</b> makes it an I frame instead.
+
+<p>Before Netpbm 10.26 (January 2005), <b>ppmtompeg</b> instead drops
+the trailing B frames by default, and you need the
+<b>FORCE_ENCODE_LAST_FRAME</b> parameter file statement to make it do
+this.
+
+<p>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.
+
+
+<h3>Specifying Input and Output Files</h3> 
+
+<p>Specify the input frame images with the <B>INPUT_DIR</B>,
+<B>INPUT</B>, <B>END_INPUT</B>, <B>BASE_FILE_FORMAT</B>,
+<B>SIZE</B>, <B>YUV_FORMAT</B> and <b>INPUT_CONVERT</B> parameter
+file statements.
+
+<p>Specify the output file with the <b>OUTPUT</b> parameter file statement.
+
+
+<h3>Statistics</h3>
+
+<p><b>ppmtompeg</b> can generate a variety of statistics about the 
+encoding.  See the <b>-stat</b>, <b>-snr</b>, <b>-mv_histogram</b>,
+<b>-quiet</b>, <b>-no_frame_summary</b>, and <b>-bit_rate_info</b>
+options.
+     
+
+<H2 id="parallel">PARALLEL OPERATION</H2>
+
+<P>You can run <b>ppmtompeg</b> 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 &quot;parallel mode.&quot;
+
+<p><img src="ppmtompeg-par.gif" alt="ppmtompeg-par.gif">
+
+<p>To do parallel processing, put the statement
+
+<pre>
+    PARALLEL
+</pre>
+
+in the parameter file, followed by a listing of the machines, one
+machine per line, then
+
+<pre>
+    END_PARALLEL
+</pre>
+
+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:
+
+<p>
+<i>machine</i> <i>user</i> <i>executable</i>
+
+<P>The executable is normally <b>ppmtompeg</b> (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:
+
+<P><b>REMOTE</b> <i>machine</i> <i>user</i> <i>executable</i>
+<i>parameter file</i>
+
+<p>The <b>-max_machines</b> command option limits the number of
+machines <b>ppmtompeg</b> will use.  If you specify more machines in
+the parameter file than <b>-max_machines</b> allows, <b>ppmtompeg</b>
+uses only the machines listed first.  This is handy if you want to
+experiment with different amounts of parallelism.
+
+<p>In general, you should use full path file names when describing
+executables and parameter files.  This <em>includes</em> the parameter
+file argument on the original invocation of <b>ppmtompeg</b>.
+
+<p>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).
+
+<P>Because not all of the processes involved in parallel operation
+have easy access to the input files, you must specify the <B>SIZE</B>
+parameter file statement when you do parallel operation.
+
+<p>The machine on which you originally invoke <b>ppmtompeg</b> is the
+master machine.  It hosts a &quot;combine server,&quot;, a
+&quot;decode server,&quot; and a number of &quot;i/o servers,&quot;
+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.
+
+<p>The master uses a remote shell command to start a process on a
+slave machine.  By default, it uses an <b>rsh</b> shell command to do
+this.  But use the <b>RSH</b> parameter file statement to control
+this.  The shell command the master executes remotely is
+<b>ppmtompeg</b>, but with options to indicate that it is to perform
+slave functions.
+
+<p>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.
+
+<p>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.
+
+<p>Use the <b>-nice</b> 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.
+
+<A NAME="speed">&nbsp;</A>
+<H2>SPEED</h2>
+
+<p>Here is a look at <b>ppmtompeg</b> speed, in single-node (not parallel)
+operation:
+
+<table border="1" cellpadding="5" cellspacing="0" summary="Compression speed">
+  <caption>Compression Speed</caption>
+<?makeman r c. ?>
+<?makeman _ ?>
+  <tr align="center">
+    <th>Machine Type</th>
+    <th>Macroblocks per second<sup>1</sup></th>
+    </tr>
+  <tr>
+    <td align="right">HP 9000/755</td>
+    <td align="center">280</td>
+    </tr>
+  <tr>
+    <td align="right">DEC 3000/400</td>
+    <td align="center">247</td>
+    </tr>
+  <tr>
+    <td align="right">HP 9000/750</td>
+    <td align="center">191</td>
+    </tr>
+  <tr>
+    <td align="right">Sparc 10</td>
+    <td align="center">104</td>
+    </tr>
+  <tr>
+    <td align="right">DEC 5000</td>
+    <td align="center">68</td>
+    </tr>
+</table>
+<sup>1</sup>A macroblock is a 16x16 pixel square
+
+<p>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.
+
+<p>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.
+
+<p>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.
+
+<p>When you're first trying to get parallel mode working, be sure to
+use the <b>-debug_machines</b> option so you can see what's going on.
+Also, <b>-debug_sockets</b> can help you diagnose communication
+problems.
+
+
+<H2 id="authors">AUTHORS</H2>
+
+<UL>
+
+<LI>Kevin Gong - University of California, Berkeley, <A
+HREF="mailto:keving@cs.berkeley.edu">keving@cs.berkeley.edu</A>
+
+<LI>Ketan Patel - University of California, Berkeley, <A
+HREF="mailto:kpatel@cs.berkeley.edu">kpatel@cs.berkeley.edu</A>
+
+<LI>Dan Wallach - University of California, Berkeley, <A
+HREF="mailto:dwallach@cs.berkeley.edu">dwallach@cs.berkeley.edu</A>
+
+<LI>Darryl Brown - University of California, Berkeley, <A
+HREF="mailto:darryl@cs.berkeley.edu">darryl@cs.berkeley.edu</A>
+
+<LI>Eugene Hung - University of California, Berkeley, <A
+HREF="mailto:eyhung@cs.berkeley.edu">eyhung@cs.berkeley.edu</A>
+
+<LI>Steve Smoot - University of California, Berkeley, <A
+HREF="mailto:smoot@cs.berkeley.edu">smoot@cs.berkeley.edu</A>
+
+</UL>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A></LI>
+<LI><A HREF="#description">DESCRIPTION</A></LI>
+<LI><A HREF="#options">OPTIONS</A></LI>
+<LI><A HREF="#parmfile">PARAMETER FILE</A></LI>
+<LI><A HREF="#general">GENERAL USAGE INFORMATION</A></LI>
+<LI><A HREF="#parallel">PARALLEL OPERATION</A></LI>
+<LI><A HREF="#speed">SPEED</A></LI>
+<LI><A HREF="#authors">AUTHORS</A></LI>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoneo.html b/ppmtoneo.html
new file mode 100644
index 00000000..68b123b1
--- /dev/null
+++ b/ppmtoneo.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoneo User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoneo</H1>
+Updated: 24 April 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoneo - convert a PPM into an Atari Neochrome .neo file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoneo</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoneo</b> reads a PPM image as input and produces an Atari
+Neochrome .neo file as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="neotoppm.html">neotoppm</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2001 by Teemu Hukkanen &lt;<A
+HREF="mailto:tjhukkan@iki.fi">tjhukkan@iki.fi</A>&gt;, based on
+ppmtopi1 by Steve Belczyk (<A
+HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopcx.html b/ppmtopcx.html
new file mode 100644
index 00000000..5ab9223e
--- /dev/null
+++ b/ppmtopcx.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopcx User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtopcx</H1>
+Updated: 27 March 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopcx - convert a PPM image to a PCX file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtopcx</B>
+
+[<B>-24bit</B>]
+
+[<B>-8bit</B>]
+
+[<B>-packed</B>]
+
+[<B>-stdpalette</b>]
+
+[<B>-palette=</b><i>palettefile</i>]
+
+[<B>-planes=</b><i>planes</i>]
+
+[<B>-xpos=</B><I>cols</I>]
+
+[<B>-ypos=</B><I>rows</I>]
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtopcx</b> reads a PPM image as input and produces a PCX file
+as output.  The type of the PCX file depends on the number of colors
+in the pixmap:
+
+<DL COMPACT>
+<DT>16 colors or fewer:
+
+<DD>1 bit/pixel, 1-4 planes.
+
+<DT>more than 16 colors, but no more than 256:
+
+<DD>8 bits/pixel, 1 plane, colormap at the end of the file.
+
+<DT>More than 256 colors:
+
+<DD>24bit truecolor file (8 bits/pixel, 3 planes).
+
+</DL>
+
+<p>You can override some of that and explicitly choose the format with
+the options below.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-24bit</B>
+
+<DD>Produce a 24bit truecolor PCX file, even if the image has 256
+colors or fewer.
+
+<DT><B>-8bit</B>
+
+<DD>Produce an 8bit (256 colors) PCX file, even if the image has 16
+colors or fewer.
+
+<p>This option was added in Netpbm 10.18 (August 2003).
+
+<DT><B>-packed</B>
+
+<DD>Use &quot;packed pixel&quot; format for files with 16 colors or
+fewer: 1, 2, or 4 bits/pixel, 1 plane.
+
+<DT><B>-stdpalette</B>
+
+<DD>Instead of computing a palette from the colors in the image, use
+a standard, built-in 16 color palette.  If the image contains a color
+that is not in the standard palette, <b>ppmtopcx</b> fails.
+
+<p>The standard palette is not only a set of colors, but a specific
+mapping of palette indexes to colors.  E.g. red is 4.
+
+<p>You can use <b>pnmremap</b> with a suitable PPM image of the standard
+palette to adapt your image to use exactly those colors in the palette
+so that <b>ppmtopcx -stdpalette</b> will work on it.
+
+<p>The file <b>pcxstd.ppm</b>, part of Netpbm, contains the standard
+palette.
+
+<p>Although the PCX header tells exactly what palette is used in the
+file, some older PCX interpreters do not use that information.  They
+instead assume the standard palette.  If you don't use the
+<b>-stdpalette</b> option, <b>ppmtopcx</b>, <b>ppmtopcx</b> may create
+an image that uses a different palette (a rearrangement of the same
+colors) and then one of these older interpreters would interpret the
+colors in the image wrong.
+
+<p>You cannot specify this option along with <b>-palette</b>.
+
+<p>This option was new in Netpbm 10.22 (April 2004).
+
+<dt><b>-palette=</b><i>palettefile</i>
+
+<dd>Instead of computing the palette from the colors in the image, use
+the palette from the file <i>palettefile</i>.  If the palette contains
+a color that is not in that palette, <b>ppmtopcx</b> fails.
+
+<p>The palette file must be a PPM image that contains one pixel for
+each color in the palette.  It doesn't matter what the aspect ratio
+of the palette image is.  The order of the colors in the PCX palette
+is the order of the pixels in the PPM image in standard western
+reading order (left to right, top to bottom).  If there is a duplicate
+color in the palette, <b>ppmtopcx</b> chooses between them arbitrarily
+in building the PCX raster.
+
+<p>You would need this only if you have a PCX reader that can't read
+the palette that is in the PCX file and instead assumes some particular
+palette.  See also the <b>-stdpalette</b> option.
+
+<p>If your input image might contain colors other than those in your
+palette, you can convert the input image to one that contains only
+those colors in your palette with <b>pnmremap</b>.
+
+<p>You cannot specify this along with <b>-stdpalette</b>.
+
+<p>This option was new in Netpbhm 10.25 (October 2004).
+
+<DT><B>-planes=</b><i>planes</i>
+
+<DD>Generate a PCX file with <i>planes</i> planes, even though the number
+of colors in the image could be represented in fewer.  This makes the file
+larger, but some PCX interpreters are capable of processing only certain
+numbers of planes.
+
+<p>This is meaningful only when <b>ppmtopcx</B> generates an image in
+the 16 color palette format without packed pixels.  Consequently, you
+cannot specify this option together with <b>-24bit</b> or
+<b>-8bit</b> or <b>-packed</b>.
+
+<p>The valid values for <i>planes</i> are 1, 2, 3, and 4.  By default,
+<b>ppmtopcx</b> chooses the smallest number of planes that can represent
+the colors in the image.  E.g. if there are 5 colors, <b>ppmtopcx</b> 
+chooses 3 planes.
+
+<p>This option was new in Netpbm 10.21 (March 2004).
+     
+<DT><B>-xpos=</B><I>cols</I>
+
+<DT><B>-ypos=</B><I>rows</I>
+
+<DD> These options set the position of the image in some field
+(e.g. on a screen) in columns to the right of the left edge and rows
+below the top edge.  The PCX format contains image position
+information.  Don't confuse this with the position of an area of
+interest within the image.  For example, using <B>pnmpad</B> to add a
+10 pixel left border to an image and then converting that image to PCX
+with xpos = 0 is not the same as converting the original image to PCX
+and setting xpos = 10.
+
+<P>The values may be from -32767 to 32768.
+
+<P>The default for each is zero.
+
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pcxtoppm.html">pcxtoppm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+Copyright (C) 1994 by Ingo Wilken (<A
+HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>)
+
+<p>Based on previous work by Michael Davidson.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopgm.html b/ppmtopgm.html
new file mode 100644
index 00000000..b7e59394
--- /dev/null
+++ b/ppmtopgm.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopgm User Manual</TITLE>
+</HEAD><BODY>
+<H1>ppmtopgm</H1>
+Updated: 10 April 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopgm - convert a PPM image to a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtopgm</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtopgm</b> reads a PPM as input and produces a PGM as output.
+The output is a &quot;black and white&quot; rendering of the original
+image, as in a black and white photograph.  The quantization formula
+<b>ppmtopgm</b> uses is g = .299 r + .587 g + .114 b.
+
+<P>Note that although there is a <B>pgmtoppm</B> program, it is not
+necessary for simple conversions from pgm to ppm , because any ppm
+program can read pgm (and pbm ) files automatically.  <B>pgmtoppm</B>
+is for colorizing a pgm file.  Also, see <B>ppmtorgb3</B> for a
+different way of converting color to gray.  And <B>ppmdist</B>
+generates a grayscale image from a color image, but in a way that
+makes it easy to differentiate the original colors, not necessarily a
+way that looks like a black and white photograph.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>QUOTE</H2>
+
+<PRE>
+Cold-hearted orb that rules the night
+Removes the colors from our sight
+Red is gray, and yellow white
+But we decide which is right
+And which is a quantization error.
+</PRE>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>,
+<B><A HREF="ppmtorgb3.html">ppmtorgb3</A></B>,
+<B><A HREF="rgb3toppm.html">rgb3toppm</A></B>,
+<B><A HREF="ppmdist.html">ppmdist</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+<B><A HREF="pgm.html">pgm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">QUOTE</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopi1.html b/ppmtopi1.html
new file mode 100644
index 00000000..06f6fb73
--- /dev/null
+++ b/ppmtopi1.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopi1 Use Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtopi1</H1>
+Updated: 19 July 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopi1 - convert a PPM image into an Atari Degas .pi1 file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtopi1</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtopi1</b> reads a PPM image as input and produces an Atari
+Degas .pi1 file as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pi1toppm.html">pi1toppm</A>, 
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="pbmtopi3.html">pbmtopi3</A>, 
+<A HREF="pi3topbm.html">pi3topbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Steve Belczyk (<A
+HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopict.html b/ppmtopict.html
new file mode 100644
index 00000000..09eec70a
--- /dev/null
+++ b/ppmtopict.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopict User Manual</TITLE></HEAD><BODY>
+<H1>ppmtopict</H1>
+Updated: 15 April 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopict - convert a PPM image to a Macintosh PICT file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtopict</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtopict</b> reads a PPM image as input and produces a
+Macintosh PICT file as output.
+
+<P>
+The generated file is only the data fork of a picture.  You will need
+a program such as <I>mcvert</I> to generate a Macbinary or a BinHex
+file that contains the necessary information to identify the file as a
+PICT file to MacOS.
+
+<P>Even though PICT supports 2 and 4 bits per pixel, <b>ppmtopict</b>
+always generates an 8 bits per pixel file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>The picture size field is correct only if the output is to a file
+since writing into this field requires seeking backwards on a file.
+However the PICT documentation seems to suggest that this field is not
+critical anyway since it is only the lower 16 bits of the picture
+size.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="picttoppm.html">picttoppm</A>, 
+<A HREF="ppm.html">ppm</A>, 
+<b>mcvert</b>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1990 by Ken Yap &lt;<A
+HREF="mailto:ken@cs.rocester.edu">ken@cs.rocester.edu</A>&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">BUGS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopj.html b/ppmtopj.html
new file mode 100644
index 00000000..c518a358
--- /dev/null
+++ b/ppmtopj.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopj User Manual</TITLE>
+</HEAD><BODY>
+<H1>ppmtopj</H1>
+Updated: 13 July 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopj - convert a PPM image to an HP PaintJet file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtopj</B>
+
+[<b>-gamma</b> <I>val</I>]
+
+[<B>-xpos</B> <I>val</I>]
+
+[<B>-ypos</B> <I>val</I>]
+
+[<B>-back</B> {<B>dark</B>|<B>lite</B>}]
+
+[<B>-rle</B>]
+
+[<B>-center</B>]
+
+[<B>-render</B> {
+<B>none</b> |
+<b>snap</b> |
+<b>bw</b> |
+<b>dither</b> |
+<b>diffuse</b> |
+<b>monodither</b> |
+<b>monodiffuse</b> |
+<b>clusterdither</b> |
+<b>monoclusterdither</B>
+}]
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>ppmtopj</b> reads a PPM image as input and converts it into a
+format suitable to be printed by an HP PaintJet printer.
+
+<P>
+For best results, the input file should be in 8-color RGB form;
+i.e. it should have only
+the 8 binary combinations of full-on and full-off primaries.
+You could convert your input to this format like this:
+
+<pre>
+    pamseq 3 1 testimg.ppm &gt;8color.pam
+    pnmremap -map 8color.pam testimg.pam | ppmtopj
+</pre>
+
+Or you could use use
+<pre>
+    ppmdither -red 2 -green 2 -blue 2
+</pre>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>-rle</B>
+
+<DD>
+Run length encode the image.
+(This can result in larger images)
+
+<DT><B>-back</B>
+
+<DD>
+Enhance the foreground by indicating if the background is light or
+dark compated to the foreground.
+
+<DT><B>-render</B> <I>alg</I>
+
+<DD>
+Use an internal rendering algorithm (default dither).
+
+<DT><B>-gamma</B> <I>int</I>
+
+<DD>
+Gamma correct the image using the integer <i>int</i> as a gamma (default 0).
+
+<DT><B>-center</B>
+
+<DD>
+Center the image to an 8.5 by 11 page
+
+<DT><B>-xpos</B> <I>pos</I>
+
+<DD>
+Move by <i>pos</i> pixels in the x direction.
+
+<DT><B>-ypos</B> <I>pos</I>
+
+<DD>
+Move by <i>pos</i> pixels in the y direction.
+
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+HP PaintJet XL Color Graphics Printer User's Guide,
+<a href="pnmtopclxl.html"><b>pnmtopclxl.html</b></a>,
+<a href="pjtoppm.html"><b>pjtoppm.html</b></a>,
+<A href="pamdepth.html"><b>pamdepth</b></A>,
+<A HREF="pnmremap.html"><b>pnmremap</b></A>,
+<A HREF="pamseq.html"><b>pamseq</b></A>,
+<A HREF="ppmdither.html"><b>ppmdither</b></A>,
+<a href="pbmtolj.html"><b>pbmtolj.html</b></a>,
+<a href="ppmtopj.html"><b>ppmtolj</b></a>,
+<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>,
+<A HREF="ppm.html"><b>ppm</b></A>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Christos Zoulas.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopjxl.html b/ppmtopjxl.html
new file mode 100644
index 00000000..53d3bea8
--- /dev/null
+++ b/ppmtopjxl.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopjxl User Manual</TITLE>
+</HEAD><BODY>
+<H1>PPMTOPJXL</H1>
+Updated: 14 March 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopjxl - convert a PPM image to an HP PaintJet XL PCL file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+ppmtopjxl 
+[<b>-nopack</b>] 
+[<b>-gamma</b> <I>n</I>] 
+[<b>-presentation</b>] 
+[<b>-dark</b>] 
+[<b>-diffuse</b>] 
+[<b>-cluster</b>] 
+[<b>-dither</b>] 
+[<b>-xshift</b> <I>s</I>] 
+[<b>-yshift</b> <I>s</I>] 
+[<b>-xshift</b> <I>s</I>] 
+[<b>-yshift</b> <I>s</I>] 
+[{<b>-xsize</b>|<b>-width</b>|<b>-xscale</b>} <I>s</I>] 
+[{<b>-ysize</b>|<b>-height</b>|<b>-yscale</b>} <I>s</I>] 
+[<i>ppmfile</i>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtopjxl</b> reads a PPM image as input and produces a PCL file
+suitable for printing on an HP PaintJet XL printer as output.
+
+<P>The generated file is not suitable for printing on a normal
+PrintJet printer.  The <B>-nopack</B> option generates a file which
+does not use the normal TIFF 4.0 compression method. This file might
+be printable on a normal PaintJet printer (not an XL).
+
+<P>The <B>-gamma</B> option sets the gamma correction for the
+image. The useful range for the PaintJet XL is approximately 0.6 to
+1.5.
+
+<P>You an alter the rendering algorithm used for images with the
+<B>-dither,</B> <B>-cluster,</B> and <B>-diffuse</B> options.  These
+options select ordered dithering, clustered ordered dithering, or
+error diffusion respectively.  You can use the <B>-dark</B> option to
+enhance images with a dark background when they are reduced in size.
+The <B>-presentation</B> option turns on presentation mode, in which
+two passes are made over the paper to increase ink density.  You
+should use this only for images where quality is critical.
+
+<P>You can resize the image by setting the <B>-xsize</B> and
+<B>-ysize</B> options.  The parameter to either of these options is
+interpreted as the number of dots to set the width or height to, but
+you may append an optional dimension of `<B>pt</B>' (points),
+`<B>dp</B>' (decipoints), `<B>in</B>' (inches), or `<B>cm</B>'
+(centimetres).  If you specify only one dimension, <b>ppmtopjxl</b>
+will scale the other one appropriately.
+
+<P>The options <B>-width</B> and <B>-height</B> are synonyms of
+<B>-xsize</B> and <B>-ysize.</B>
+
+<P>You can alternatively use the <B>-xscale</B> and <B>-yscale</B>
+options to scale the image by a simple factor.
+
+<P>You can shift the image on the page with the <B>-xshift</B> and
+<B>-yshift</B> options.  These move the image the specified dimensions
+right and down.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Angus Duggan
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
+
+
+
diff --git a/ppmtoppm.html b/ppmtoppm.html
new file mode 100644
index 00000000..78c1d90e
--- /dev/null
+++ b/ppmtoppm.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD><title>Ppmtoppm User Manual</title></HEAD>
+
+<BODY>
+<H1>ppmtoppm</H1>
+Updated: September 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmtoppm - copy PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoppm</B>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>ppmtoppm</b> simply copies a PPM image from Standard Input to
+Standard Output.  This may seem an unnecessary duplication of
+<b>cat</b>, but remember that a PPM program can read a PBM or PGM image as
+if it were PPM.  So <b>ppmtoppm</b> can read either a PBM, PGM, or PPM
+image and produce a PPM image as output.
+
+<p>Even that is of limited usefulness because of the fact that almost
+any program to which you would feed the resulting PPM image could also
+just take the original image directly.  However, sometimes you really
+need a true PPM image.
+
+<p>When you know you have a PGM image and want a PPM image,
+<b>pgmtoppm</b> is a more general way to do that conversion.
+When you know you have a PBM image, use that and <b>pbmtopgm</b>.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgmtopgm.html">pgmtopgm</A></B>,
+<B><A HREF="pnmtopnm.html">pnmtopnm</A></B>,
+<B><A HREF="pamtopnm.html">pamtopnm</A></B>,
+<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>,
+<B><A HREF="pbmtopgm.html">pbmtopgm</A></B>,
+<B><A HREF="pbm.html">ppm</A></B>,
+<B><A HREF="pgm.html">ppm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>,
+
+<A NAME="history">&nbsp;</A>
+<H2>HISTORY</H2>
+
+<p>This program was added to Netpbm in Release 10.9 (September 2002).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtopuzz.html b/ppmtopuzz.html
new file mode 100644
index 00000000..b777caf9
--- /dev/null
+++ b/ppmtopuzz.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtopuzz User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtopuzz</H1>
+Updated: 22 August 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtopuzz - convert a PPM image to an X11 &quot;puzzle&quot; file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtopuzz</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtopuzz</b> reads a PPM image as input and produces an X11
+&quot;puzzle&quot; file as output.  A &quot;puzzle&quot; file is for
+use with the <b>puzzle</b> program included with the X11 distribution.
+<b>puzzle</b>'s <B>-picture</B> option lets you specify an image file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>, 
+<b>puzzle</b>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtorgb3.html b/ppmtorgb3.html
new file mode 100644
index 00000000..18038cc2
--- /dev/null
+++ b/ppmtorgb3.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtorgb3 User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtorgb3</H1>
+Updated: 10 January 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtorgb3 - separate a PPM image into three PGMs
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtorgb3</B>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtorgb3</b> reads a PPM image as input and writes three PGM
+images as output, one each for red, green, and blue.
+
+<p><b>ppmtorgb3</b> constructs the output filenames by taking the
+input filename, stripping off any extension, and appending
+<b>.red</b>, <b>.grn</b>, <b>.blu</b>.  For example, separating
+<b>lenna.ppm</b> would result in <b>lenna.red</b>, <b>lenna.grn</b>,
+and <b>lenna.blu</b>.  If the input comes from stdin, the names are
+<b>noname.red</b>, <b>noname.grn</b>, and <b>noname.blu</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="rgb3toppm.html">rgb3toppm</A>, 
+<A HREF="pamchannel.html">pamchannel</A>, 
+<A HREF="ppmtopgm.html">ppmtopgm</A>, 
+<A HREF="pgmtoppm.html">pgmtoppm</A>, 
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="pgm.html">pgm</A>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtosixel.html b/ppmtosixel.html
new file mode 100644
index 00000000..e9b6d63a
--- /dev/null
+++ b/ppmtosixel.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtosixel User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtosixel</H1>
+Updated: 26 April 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtosixel - convert a PPM image to DEC sixel format
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtosixel</B>
+
+[<B>-raw</B>]
+
+[<B>-margin</B>]
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtosixel</b> reads a PPM image as input and produces sixel
+commands (SIX) as output.  The output is formatted for color printing,
+e.g. for a DEC LJ250 color inkjet printer.
+
+<P>If RGB values from the PPM file do not have maxval=100,
+<b>ppmtosixel</b> rescales them to maxval 100.  A printer control
+header and a color assignment table begin the SIX file.  Image data is
+in a compressed format by default.  A printer control footer ends the
+image file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-raw</B>
+
+<DD>If you specify this, each pixel will be explicitly described in
+the image file.  If <B>-raw</B> is not specified, output will default
+to compressed format in which identical adjacent pixels are replaced
+by &quot;repeat pixel&quot; commands.  A raw file is often an order of
+magnitude larger than a compressed file and prints much slower.
+
+<DT><B>-margin</B>
+
+<DD>If you don't specify <B>-margin</B>, the image will start at the
+left margin (of the window, paper, or whatever).  If you <em>do</em>
+specify <B>-margin</B>, a 1.5 inch left margin will offset the image.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>PRINTING</H2>
+
+<p>Generally, sixel files must reach the printer unfiltered.
+Use the lpr -x option or <b>cat filename &gt; /dev/tty0?</b>.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+Upon rescaling, truncation of the least significant bits of RGB values
+may result in poor color conversion.  If the original PPM maxval was
+greater than 100, rescaling also reduces the image depth.  While the
+actual RGB values from the ppm file are more or less retained, the
+color palette of the LJ250 may not match the colors on your screen.
+This seems to be a printer limitation.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Rick Vinci.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">PRINTING</A>
+<LI><A HREF="#lbAG">LIMITATIONS</A>
+<LI><A HREF="#lbAH">SEE ALSO</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoterm.html b/ppmtoterm.html
new file mode 100644
index 00000000..a8afc658
--- /dev/null
+++ b/ppmtoterm.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoterm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoterm</H1>
+Updated: 17 August 2002
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoterm - convert a PPM image to a ANSI ISO 6429 ascii image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoterm</B>
+
+[<I>ppmfile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+You may use two hyphens instead of one.  You may separate an option
+name and its value with white space instead of an equals sign.
+
+<A NAME="lbAD">&nbsp;</A> 
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>. 
+
+<P>This program tries to produce an accurate representation of a PPM
+image on an terminal that implements the ANSI ISO 6429 standard.  It
+aproximates colors, finding the minimum cartesian distance between the
+input RGB vectors and the ones in the generated palette.  As the
+available color palette is somewhat restricted, you get the best
+results when the colors in the original image are few and the RGB
+intensities are close to zero, half of maximum, and maximum.
+
+<P>You can usually get good results with cartoons or images with
+plain colors (no gradients).  With photos, results can vary, but are
+usually not very accurate.
+
+<P>The output image has one line for each row and one character for each
+column of the input image.  E.g. an 80 pixel by 25 pixel PPM image would
+fill up an 80x25 terminal screen.  Use <b>pamscale</b> or <b>pamcut</b>
+to make your image fit properly on your screen.
+
+<P>The image starts at the current cursor position on the terminal
+screen.  Each successive row starts at Column 0 on the screen.  If you want
+to shift the image up or down, for example to center it, use
+<b>pnmpad</b> on the input.
+
+<P>This program was born with the objective of displaying nice color
+images on the linux console, e.g. a proper logo at Linux boot.
+
+<p><b>pbmto4425</b> does a similar thing for black and white images, using
+line drawing characters, on some terminals.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>
+None.
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamscale.html">pamscale</A></B>,
+<B><A HREF="pamcut.html">pamcut</a></b>,
+<B><A HREF="pbmtoascii.html">pbmtoascii</a></b>,
+<B><A HREF="pbmto4425.html">pbmto4425</a></b>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2002 by Ero Carrera.
+
+
+<A NAME="history"></a>
+<h2>HISTORY</H2>
+
+<P>This program was new in Netpbm 10.9 (August 2002).
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/ppmtotga.html b/ppmtotga.html
new file mode 100644
index 00000000..25fdab29
--- /dev/null
+++ b/ppmtotga.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Ppmtotga User Manual</TITLE>
+</HEAD><BODY>
+<H1>ppmtotga</H1>
+Updated: July 2002
+<BR>
+<H2>NAME</H2>
+ppmtotga - replaced by pamtotga
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>ppmtotga</b> was replaced in Netpbm 10.6 (July 2002) by
+<b><a href="pamtotga.html">pamtotga</a></b>.
+
+<P><B>pamtotga</b> is backward compatible with <b>ppmtotga</b>, but
+also recognizes PAM input, including that with an alpha channel.
+
+</BODY>
+</HTML>
diff --git a/ppmtouil.html b/ppmtouil.html
new file mode 100644
index 00000000..b6790d0a
--- /dev/null
+++ b/ppmtouil.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head>
+<title>ppmtouil</title>
+</head><body>
+<h1>ppmtouil</h1>
+Updated: May 2002
+<br>
+<h2>NAME</h2>
+<B>ppmtouil</B> - replaced by pamtouil
+<h2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+In May 2002, <b>ppmtouil</b> was extended and renamed to
+<b><a href="pamtouil.html">pamtouil</a></b>.
+</body> </html>
diff --git a/ppmtowinicon.html b/ppmtowinicon.html
new file mode 100644
index 00000000..e8a5c991
--- /dev/null
+++ b/ppmtowinicon.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtowinicon User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtowinicon</H1>
+Updated: 01 May 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtowinicon - convert PPM image into a Windows .ico file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtowinicon</B>
+
+[<b>-andpgms</b>]
+
+[<b>-output=</b><i>output.ico</I>]
+
+[<I>ppmfile</I> [<i>andfile</i>] ...]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtowinicon</b> reads one or more PPM images as input and
+produces a Microsoft Windows .ico file as output.
+
+<P>A Windows icon contains 1 or more images, at different resolutions
+and color depths.  When Windows wants to display the icon, it searches
+through the images to find the one the best matches the number of colors
+and resolution of the display.
+
+<P>Microsoft recommends including at least the following formats in each
+icon.
+
+<ul>
+<li>16 x 16 - 4 bpp
+<li>32 x 32 - 4 bpp
+<li>48 x 48 - 8 bpp
+</ul>
+
+<p>If you don't specify any input files, input is from Standard Input.
+
+<p>Output is to Standard Output unless you specify <b>-output</b>.
+
+<h3 id="transparency">Transparency</h3>
+
+<p>If you specify the <b>-andmask</b> option, you get (partly)
+transparent icons.  In that case, your arguments are pairs of file
+names, with the first file name being that of the image and the second
+file name being that of a standard Netpbm PGM transparency mask (see
+the <a href="pgm.html">pgm format specification</a>).
+
+<p>In a .ico file, there is no such thing as partial transparency
+(translucency).  Where the PGM mask says completely opaque, the icon will
+be opaque.  Everywhere else, the icon will be transparent.  Note that
+as with any Netpbm program, you can use a PBM image for the transparency
+mask and <b>ppmtowinicon</b> will treat it like a PGM.
+
+<P>The and mask is like an alpha mask, except for what it signifies in
+the "not opaque" areas.  In the usual case, the foreground image is
+black in those areas, and in that case the areas are fully transparent
+-- the background shows through the icon.  But in general, a not
+opaque pixel signifies that the background and foreground should be
+merged as follows: The intensities of the color components in the
+forgeground and background are represented as binary numbers, then
+corresponding bits of the background and foreground intensities are
+exlusive-or'ed together.  So there is a sort of reverse video effect.
+
+<p>If you don't want this special effect and instead want
+straightforward transparency, use the <b>-truetransparent</b> option.
+This causes <b>ppmtowinicon</b> to make the base image black
+everywhere your transparency mask says transparent, regardless of what
+color you input image is at that location.
+
+<p>If you don't specify <b>-andmask</b>, <b>ppmtowinicon</b> puts
+all-opaque and masks into the .ico file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-andpgms</B>
+
+<DD>Include transparency information in the icons.
+See the <a href="#transparency">transparency section</a>.
+     
+<DT><B>-output=</b><i>output.ico</i>
+
+<DD>Name of output file.  By default, <b>ppmtowinicon</b> writes the
+icon to Standard Output.
+
+<DT><B>-truetransparent</b>
+
+<dd>Make transparency in the icon normal instead of the special reverse
+video effect.  See the <a href="#transparency">transparency section</a>.
+     
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="winicontoppm.html">winicontoppm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+<B><A HREF="pgm.html">pgm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2000 by Lee Benfield.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<UL>
+  <LI><A HREF="#transparency">TRANSPARENCY</A>
+  </UL>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoxpm.html b/ppmtoxpm.html
new file mode 100644
index 00000000..7c299777
--- /dev/null
+++ b/ppmtoxpm.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoxpm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoxpm</H1>
+Updated: Feb 22 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmtoxpm - convert a PPM image to an X11 pixmap
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoxpm </B>
+[<B>-name=</B><I>xpmname</I>]
+[<B>-hexonly</B>]
+[<B>-rgb=</B><I>rgb-textfile</I>]
+[<B>-alphamask=</B><I>pgmfile</I>]
+[<I>ppmfile</I>]
+
+<p>Minimum unique abbreviation of option is acceptable.  You may use double
+hyphens instead of single hyphen to denote options.  You may use white
+space in place of the equals sign to separate an option name from its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoxpm</b> reads a PPM image as input and produces X11 pixmap
+(version 3) as output.  This format can be loaded by the XPM library.
+
+<P>In the XPM output, colors may be identified by name, such as "Red", or
+in hexadecimal, for example "#FF0000".  In the hexadecimal format, there
+may be from 1 through 4 hexadecimal digits per RGB component.
+
+<p>By default, <b>ppmtoxpbm</b> tries to find a name for each color in
+the image in the <a href="libppm.html#rgb.txt">system color
+dictionary</a>, and if it finds one, uses it.  If it doesn't it uses
+hexadecimal.  You can force <b>ppmtoxpbm</b> to use hexadecimal only
+with the <b>-hexonly</b> option.  You can specify a different color
+dictionary with the <b>-rgb</b> option.
+
+<p>When <b>ppmtoxpm</b> uses the hexadecimal format for identifying a color,
+it uses the one that uses the least number of hexadecimal digits that it
+takes to represent the maxval of the input PPM.  E.g. if the maxval of the
+input PPM is 100, <b>ppmtoxpm</b> uses 2 digits per component, as in
+"#FF0000".
+
+<p>Some programs do not properly handle one-digit-per-component
+hexadecimal color specifiers.  They see the wrong colors.  To produce
+an XPM that such a program can handle, make sure the maxval of the input PPM
+is greater than 15, such as by running it through <B>pamdepth 255</b>.
+
+<h3>Color Code Lengths - Image Size</h3>
+
+<p>In the XPM format, there is a palette (&quot;color map&quot;) that
+assigns each color in the image to a unique sequence of printable
+characters called a color code, and a raster that identifies the color
+of each pixel of the image with one of those color codes.  The length
+of the color code affects the size of the image stream.  
+
+<p>All color codes in an image are the same length, and
+<b>ppmtoxpm</b> tries to make it as short as possible.  That length
+is, of course, determined by the number of colors in the image.
+<b>ppmtoxpm</b> counts the colors in the image, excluding those that
+will be transparent in the output due to your alpha mask, and chooses
+a color code length accordingly.  There are 92 printable characters
+that can be used in a color code.  Therefore, if you have 92 or fewer
+colors, your color codes will be one character.  If you have more than
+92 but not more than 92 * 92, your color codes will be two characters.
+And so on.
+
+<p>There's one exception to the above: If you specify an alpha mask
+(the <b>-alpha</b> option, one unique color code represents
+&quot;transparent.&quot;  This is true even if the alpha mask doesn't 
+actually produce any transparent pixels.  So subtract one from the number
+of possible colors if you use <b>-alpha</b>.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-name=</B><I>xpmname</I>
+
+<DD>This option specifies the prefix string which is specified in the
+resulting XPM output.  If you don't use the <b>-name</b> otpion,
+<b>ppmtoxpm</b> defaults to the filename (without extension) of the
+<i>ppmfile</i> parameter.  If you do not specify <B>-name</B> or
+<I>ppmfile</I> (i.e. your input is from Standard Input), the prefix
+string defaults to the string <B>noname</B>.
+
+<DT><B>-hexonly</B>
+
+<DD>This option says never to put color names in the XPM file, but rather
+to identify names by hexadecimal strings that explicitly identify RGB
+component intensities.  This means the reader of the file need not have
+access to a suitable color dictionary to interpret it.
+
+<P>This option was introduced in Netpbm 10.15 (April 2003).  Before that,
+it was the default, overridden by specifying <b>-rgb</b>.
+
+<DT><B>-rgb=</B><I>rgb-textfile</I>
+
+<DD>This option names the file in which the color dictionary you want
+to use resides.  By default, <b>ppmtoxpm</b> uses the <a
+href="libppm.html#rgb.txt">system color dictionary</a>. 
+
+<P>This option in meaningless when you specify <b>-hexonly</b>.
+
+<P>Before Netpbm 10.15 (April 2003), <b>ppmtoxpm</b> did not default
+to the system color dictionary.  If you didn't specify <b>-rgb</b>,
+<b>ppmtoxpbm</b> would use only hexadecimal color specifiers.
+
+<DT><B>-alphamask=</B><I>pgmfile</I>
+
+<DD> This option names a PGM file to use as an alpha (transparency)
+mask.  The file must contain an image the same dimensions as the input
+image.  <B>ppmtoxpm</B> marks as transparent any pixel whose position
+in the alpha mask image is at most half white.  
+
+<P>If you don't specify <B>-alphamask</B>, <B>ppmtoxpm</B> makes all
+pixels in the output opaque.  
+
+<P><B>ppmcolormask</B> is one way to generate an alpha mask file.  You
+might also generate it by extracting transparency information from an
+XPM file with the <B>-alphaout</B> option to <B>xpmtoppm</B>.
+
+<P>There are similar options on other Netpbm converters that convert from
+formats that include transparency information too.
+</DL>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>,
+<B><A HREF="xpmtoppm.html">xpmtoppm</A></B>,
+<B><A HREF="pamdepth.html">pamdepth</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<BR>
+XPM Manual by Arnaud Le Hors <A
+HREF="mailto:lehors@mirsa.inria.fr">lehors@mirsa.inria.fr</A>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>
+Copyright (C) 1990 by Mark W. Snitily.
+<P>
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.  This software is provided &quot;as is&quot; without express or
+implied warranty.
+<P>
+This tool was developed for Schlumberger Technologies, ATE Division, and
+with their permission is being made available to the public with the above
+copyright notice and permission notice.
+
+<P>Upgraded to XPM2 by Paul Breslaw, Mecasoft SA, Zurich, Switzerland (<A
+HREF="mailto:paul@mecazh.uu.ch">paul@mecazh.uu.ch</A>), November 8,
+1990.
+
+<P>Upgraded to XPM version 3 by Arnaud Le Hors(<A
+HREF="mailto:lehors@mirsa.inria.fr">lehors@mirsa.inria.fr</A>), April
+9, 1991.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoyuv.html b/ppmtoyuv.html
new file mode 100644
index 00000000..2ca22606
--- /dev/null
+++ b/ppmtoyuv.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoyuv User Manual</TITLE></HEAD>
+<BODY>
+
+<H1>ppmtoyuv</H1>
+Updated: 06 June 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmtoyuv - convert a PPM image to an Abekas YUV file
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoyuv</B>
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoyuv</b> reads a PPM image as input and produces an Abekas
+YUV file as output.
+
+<p>The output file contains a raster of four byte YUV codes, each
+uniquely associated with two side-by-side pixels in the image.  The raster
+contains rows in order from top to bottom, and within each row columns
+from left to right.  So the output file size in bytes is twice the number of
+pixels in the image.
+
+<p>Each YUV code is associated with two pixels from the input image that we
+will call the left pixel and the right pixel.  The 2nd byte of the code is
+the Y value of the left pixel.  The 4th byte of the code is the Y value of
+the right pixel.  The 1st byte of the code is an average of the U value of
+the pixel <em>to the left of the left pixel</em>, the left pixel, and the
+right pixel.  The 3rd byte of the code is analogous for V values.  These
+averages are weighted arithmetic means where the left pixel is weighted
+double what the other two pixels are weighted.
+
+<p>This format is reminiscent of but rather different from the common
+YUV 4:2:0 format (aka YUV 420) and the similar YUV 4:4:4, YUV 4:2:2,
+YUV 4:1:1, YUV 4:1:1s, and YUV 4:1:0.  In YUV 4:2:0, the raster is
+different for even numbered lines and odd numbered lines.  On even
+numbered lines, there are twice as many bits for Y of each pixel as
+for U or V.  On odd numbered lines, there are the same number of bits
+for Y as on even numbered lines, but no bits at all for U and V.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="yuvtoppm.html">yuvtoppm</A>,
+<A HREF="ppmtoeyuv.html">ppmtoeyuv</A>,
+<A HREF="ppmtoyuvsplit.html">ppmtoyuvsplit</A>,
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Marc Boucher <A
+HREF="mailto:marc@PostImage.COM">marc@PostImage.COM</A>, based on
+Example Conversion Program, A60/A64 Digital Video Interface Manual,
+page 69.
+
+<p>Copyright (C) 1991 by DHD PostImage Inc.
+
+<P>Copyright (C) 1987 by Abekas Video Systems Inc.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtoyuvsplit.html b/ppmtoyuvsplit.html
new file mode 100644
index 00000000..604224c1
--- /dev/null
+++ b/ppmtoyuvsplit.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtoyuvsplit User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtoyuvsplit</H1>
+Updated: 06 March 2003
+<BR>
+
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtoyuvsplit - convert a PPM image to 3 subsampled raw YUV files
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ppmtoyuvsplit</B>
+<I>basename</I>
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtoyuvsplit</b> reads a PPM image as input.  Produces 3 raw
+files <i>basename</i>.Y, <i>basename</i>.U and <i>basename.V</i> as
+output.
+
+<p>The output files are the subsampled raw YUV representation of the
+input PPM image, as required by the Stanford MPEG codec.  The Y output
+file contains a byte for each pixel in the image, with the rows going
+from top to bottom and the columns within each row going left to
+right.  The U and V output files are arranged similarly, except that
+each byte represents a square of 4 pixels of the image.  The value is
+the arithmetic mean of the value for each of those 4 pixels.  Hence, the
+Y file is 4 times the size of the U file or V file.
+
+<p>The YUV values are scaled according to CCIR.601, as assumed by
+MPEG.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="yuvsplittoppm.html">yuvsplittoppm</A>,
+<A HREF="ppmtoyuv.html">ppmtoyuv</a>,
+<A HREF="ppmtoeyuv.html">ppmtoeyuv</A>,
+<A HREF="ppmtompeg.html">ppmtompeg</A>,
+<A HREF="ppm.html">ppm</A>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1993 by Andre Beck. (<A
+HREF="mailto:Andre_Beck@IRS.Inf.TU-Dresden.de">Andre_Beck@IRS.Inf.TU-Dresden.de</A>)
+
+<P>Based on ppmtoyuv.c
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmtv.html b/ppmtv.html
new file mode 100644
index 00000000..3a77b37a
--- /dev/null
+++ b/ppmtv.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmtv User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmtv</H1>
+Updated: 16 November 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ppmtv - make a PPM image look like taken from an American TV
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+ppmtv
+<I>dimfactor</I>
+
+[<I>ppmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmtv</b> reads a PPM image as input and dims every other row of
+image data down by the specified dim factor.  This factor may be in
+the range of 0.0 (the alternate lines are totally black) to 1.0
+(original image).
+
+<P>This creates an effect similar to what I've once seen in the video
+clip 'You could be mine' by Guns'n'Roses.  In the scene I'm talking
+about you can see John Connor on his motorbike, looking up from the
+water trench (?)  he's standing in.  While the camera pulls back, the
+image gets 'normal' by brightening up the alternate rows of it. I
+thought this would be an interesting effect to try in MPEG. I did not
+yet check this out, however.  Try for yourself.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="ppmdim.html">ppmdim</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Frank Neumann
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ppmwheel.html b/ppmwheel.html
new file mode 100644
index 00000000..ab23f503
--- /dev/null
+++ b/ppmwheel.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ppmwheel User Manual</TITLE></HEAD>
+<BODY>
+<H1>ppmwheel</H1>
+Updated: 11 January 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+ppmwheel - make a PPM image of a color wheel
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+<B>ppmwheel</B>
+<I>diameter</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ppmwheel</b> produces a PPM image of a color wheel of the
+specified diameter inside a white square just large enough to hold it.
+
+<p>The color wheel is based on the HSV color model.  Hues are
+distributed angularly around the circle and the values are distributed
+radially and the saturation is zero everywhere.  The values are zero at
+the center, increasing linearly to maximum at the edge.  The maximum value
+corresponds to the maxval of the PPM image.
+
+<p>Hence, the image contains all of the secondary colors based on the
+red, green, and blue primary colors.  A secondary color is one that is
+composed of light of at most two of the three primary colors.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<P>None.
+
+<A NAME="seealso">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmcie.html">ppmcie</A></B>,
+<B><A HREF="ppmrainbow.html">ppmrainbow</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<H2>HISTORY</H2>
+<A NAME="history"></a>
+
+<P><b>ppmwheel</b> was added to Netpbm in Release 10.14 (March 2003).
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1995 by Peter Kirchgessner
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/psidtopgm.html b/psidtopgm.html
new file mode 100644
index 00000000..652416d0
--- /dev/null
+++ b/psidtopgm.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Psidtopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>psidtopgm</H1>
+Updated: 02 August 89
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+psidtopgm - convert PostScript &quot;image&quot; data to a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>psidtopgm</B>
+
+<I>width</i> <i>height</i> <i>bits/sample</I>
+
+[<I>imagedata</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>psidtopgm</b> reads the &quot;image&quot; data from a PostScript
+file as input and produces a PGM image as output.
+
+<P>This program is obsoleted by <B>pstopnm</B>.
+
+What follows was written before <B>pstopnm </B> existed.
+
+<P>This is a very simple and limited program, and is here only because
+so many people have asked for it.  To use it you have to
+<em>manually</em> extract the readhexstring data portion from your
+PostScript file, and then give the width, height, and bits/sample on
+the command line.  Before you attempt this, you should <em>at
+least</em> read the description of the &quot;image&quot; operator in
+the PostScript Language Reference Manual.
+
+<P>It would probably not be too hard to write a script that uses this
+filter to read a specific variety of PostScript image, but the
+variation is too great to make a general-purpose reader.  Unless, of
+course, you want to write a full-fledged PostScript interpreter...
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtops.html">pnmtops</A>, 
+<A HREF="pgm.html">pgm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/pstopnm.html b/pstopnm.html
new file mode 100644
index 00000000..48a119f7
--- /dev/null
+++ b/pstopnm.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Pstopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>pstopnm</H1>
+Updated: 28 May 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+pstopnm - convert a PostScript file to a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>pstopnm</B>
+
+[<B>-stdout</B>]
+
+[<B>-forceplain</B>]
+
+[<B>-help</B>]
+
+[<B>-dpi=</b><i>dpi</i>]
+
+[<B>-xsize=</B><I>pixels</I>]
+[<B>-ysize=</B><I>pixels</I>]
+
+[<B>-xborder=</B><I>frac</I>]
+[<B>-yborder=</B><I>frac</I>]
+
+[<B>-landscape</B>]
+
+[<B>-portrait</B>]
+
+[<B>-nocrop</B>]
+
+[<B>-pbm</B>
+
+|<B>-pgm</B>
+
+|<B>-ppm</B>]
+
+[<B>-llx=</B><I>s</I>]
+[<B>-lly=</B><I>s</I>]
+[<B>-urx=</B><I>s</I>]
+[<B>-ury=</B><I>s</I>]
+
+[<B>-verbose</B>]
+
+[<B>-xmax=</B><I>pixels</I>]
+[<B>-ymax=</B><I>pixels</I>]
+
+
+<I>psfile</I>[<B>.ps</B>]
+
+<?makeman .SH OPTION USAGE ?>
+<P>Minimum unique abbreviation of option is acceptable.  You may use
+double hyphens instead of single hyphen to denote options.  You may use
+white space in place of the equals sign to separate an option name
+from its value.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>pstopnm</b> reads a PostScript file as input and produces PBM,
+PGM, or PPM images as output.  This program simply uses GhostScript to
+render a PostScript file with its PNM device drivers.  If you don't
+have GhostScript installed or the version you have installed was not
+built with the relevant PNM device drivers, <B>pstopnm</B> will fail.
+You can see if you have the proper environment by issuing the command
+<kbd>gs --help </kbd>.  If it responds and lists under &quot;Available
+Devices&quot; <B>pbm</B>, <B>pbmraw</B>, <B>pgm</B>, <B>pgmraw</B>,
+<B>pnm</B>, <B>pnmraw</B>, <B>ppm</B>, or <B>ppmraw</B>, you're in
+business.
+
+<P><B>pstopnm</B> uses the value of the <B>GHOSTSCRIPT</B>
+environment variable as the file name for the Ghostscript program.  If
+<B>GHOSTSCRIPT</B> is not set, <B>pstopnm</B> searches your
+<B>PATH</B> for a regular file named <B>gs</B>.  If it doesn't find
+one, it assumes Ghostscript is in the file <b>/usr/bin/gs</b>.
+
+<P><B>pstopnm</B> does not use the Netpbm libraries to generate the
+output files, so may not be entirely consistent with most Netpbm
+programs.
+
+<P><I>psfile</I>[<B>.ps</B>] is the name of the input file.
+<B>pstopnm</B> will add the <B>ps</B> to the end of the name you
+specify if no file exists by the exact name you specify, but one with
+added does.  Use <B>-</B> to indicate Standard Input.
+
+<P>If you use the <B>-stdout </B> option, <B>pstopnm</B> outputs
+images of all the pages as a multi-image file to Standard Output.
+Otherwise, <B>pstopnm</B> creates one file for each page in the
+Postscript document.  The files are named as follows: If the input
+file is named <B>psfile.ps</B>, the name of the files will be
+<B>psfile001.ppm</B>, <B>psfile002.ppm</B>, etc.  The filetype suffix
+is <B>.ppm</B>, <B>.pgm</B>, or <B>.pbm</B>, depending on which kind
+of output you choose with your invocation options.  If the input file
+name does not end in <B>.ps</B>, the whole file name is used in the
+output file name.  For example, if the input file is named
+<B>psfile.old</B>, the output file name is <B>psfile.old001.ppm</B>,
+etc.
+
+<P>Note that the output file selection is inconsistent with most
+Netpbm programs, because it does not default to Standard Output.  This
+is for historical reasons, based on the fact that the Netpbm formats
+did not always provide for a sequence of images in a single file.
+
+<p>Each output image contains a rectangular area of the page to which
+it pertains.  See <a href="#dimensions">the Dimensions section</a> for
+details on what part of the input image goes into the output image and
+how big it is in the output and what borders and margins are in the
+output image.
+
+<P>It has been reported that on some Postscript Version 1 input,
+Ghostscript, and therefore <B>pstopnm</B>, produces no output.  To
+solve this problem, you can convert the file to Postscript Version 3
+with the program <B>ps2ps</B>.  It is reported that the program
+<B>pstops</B> does not work.
+
+<a name="dimensions"></a>
+<h3>Dimensions</h3>
+
+<p>This section describes what part of the input image gets used in
+the output and the dimensions of the output, including borders and
+background.
+
+<p>Note that an output image is associated with a single input page.
+
+<b>pstopnm</b> starts by taking a rectangular area from the input page.
+That is called the subject image.
+
+<p><b>pstopnm</b> may add borders to the subject image to form what is called
+the bordered subject image.
+
+<p><b>pstopnm</b> places the bordered subject image in the center of
+the output image and clips the edges as necessary to fit the computed
+output image size.
+
+<p>The location of the subject image in the Postscript input page is
+defined by four numbers, the lower left corner and the upper right
+corner x and y coordinates.  These coordinates are usually specified
+by the BoundingBox DSC statement (a Postscript comment) in the
+PostScript file, but they can be overridden by the user by specifying
+one or more of the following options: <B>-llx</B>, <B>-lly</B>,
+<B>-urx</B>, and <B>-ury</B>.
+
+<p>The presence and thickness of a border to be added to the subject
+image to form the bordered subject image is controlled by the options
+<B>-xborder</B> and <B>-yborder</B>.  If <B>pstopnm</B> does not find
+a BoundingBox statement in the input, and you don't specify image area
+coordinates on the command line, <B>pstopnm</B> uses default values.
+If your input is from Standard Input, <B>pstopnm</B> does not use the
+BoundingBox values (due to the technical difficulty of extracting that
+information and still feeding the file to Ghostscript), so you either
+have to specify the image area coordinates or take the default.
+
+<p>The output image size is a confusing thing.  In a Postscript file,
+things have spatial dimensions.  For example, a particular line may be
+3 centimeters long.  A Postscript printer is supposed to print the
+line 3 centimeters long, using however many pixels that takes, without
+regard to how big the sheet of paper on which it is printing is.  In a
+PNM image, by contrast, there is no spatial dimension; there are only
+pixels.  You might have a line that is 100 pixels long, but the PNM
+image says nothing about how long that line should be on a printed
+page.
+
+<p><b>pstopnm</b> fills the role of a Postscript printer.  The PNM image
+is a virtual printed page.  <b>pstopnm</b> must determine how many pixels
+it will use in the output image to represent an inch of input image,
+which is the "output device resolution."  Think of it as the number of
+dots per inch the virtual printer prints on the virtual page.
+
+<p>The simplest thing is for you to tell <b>pstopnm</b> exactly what
+output device resolution to use, using the <b>-dpi</b> option.  If you
+say for example <b>-dpi=300</b> and the bordered subject image is 2
+inches by 2 inches, the PNM output will be 600 pixels by 600 pixels.
+
+<p>Or you can set the output image dimensions with <b>-xsize</b> and
+<b>-ysize</b>.  For example, if you say <b>-xsize=1000 -ysize=1000</b>
+and the bordered subject image is 2 inches by 2 inches, the output
+image is 1000 by 1000 pixels, with each pixel representing 1/500 inch
+of input image.
+
+<p>If you specify one of <b>-xsize</b> and <b>-ysize</b> and not the
+other, <b>pstopnm</b> defaults the other such that the output image
+has the same aspect ratio as the bordered subject image.
+
+<p>If you specify neither the output size nor the output device
+resolution, <b>pstopnm</b> does some weird computation which exists
+mainly for historical reasons:
+
+<p>If you specify <b>-nocrop</b>, <b>pstopnm</b> uses the values of
+<b>-xmax</b> and <b>-ymax</b> for the output image dimensions.  These
+default to 612 and 792 pixels, respectively.
+
+<p>The final case, the default, is where you don't specify any size or
+resolution options of <b>-nocrop</b>.  This is the most complicated
+case.  In this case, <b>pstopnm</b> first chooses an output device
+resolution that would generate the number of pixels indicated by
+<b>-xmax</b> and <b>-ymax</b> from the bordered subject image.  Then,
+based on that resolution, it chooses an output image size that is just
+large enough to accomodate the subject image (no borders).  Remember
+(above) that <b>pstopnm</b> trims the edges of the bordered subject
+image to fit the computed output size.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-forceplain</B>
+
+<DD> forces the output file to be in plain (text) format.  Otherwise,
+it is in raw (binary) format.  See <B><A HREF="pbm.html">pbm</A></B>,
+etc.
+
+<DT><B>-llx=</B><I>bx</I>
+
+<DD>selects <I>bx</I> as the lower left corner x coordinate (in
+inches) on the Postscript input page of the subject image.
+See <a href="#dimensions">the Dimensions section</a>.
+
+<DT><B>-lly=</B><I>by</I>
+
+<DD>selects <I>by</I> as the lower left corner y coordinate (in inches)
+on the Postscript input page of the subject image.
+See <a href="#dimensions">the Dimensions section</a>.
+
+<DT><B>-landscape</B>
+
+<DD>renders the image in landscape orientation.  
+
+<DT><B>-portrait</B>
+
+<DD>renders the image in portrait orientation.
+
+<DT><B>-nocrop</B>
+
+<DD>This option causes <b>pstopnm</b> to make the output image
+exactly the dimensions of the bordered subject image.  By default,
+<b>pstopnm</b> makes the output image the dimensions specified by
+<b>-xmax</b> and <b>-ymax</b>.  See <a href="#dimensions">the Dimensions
+section</a>.
+
+<DT><B>-pbm</b>
+<DT><B>-pgm</B>
+<DT><B>-ppm</B>
+
+<DD>
+selects the format of the output file.  By default, all files are
+rendered as portable pixmaps (ppm format).
+
+<DT><B>-stdout</B>
+
+<DD>causes output to go to Standard Output instead of to regular
+files, one per page (see description of output files above).  Use
+<B>pnmsplit</B> to extract individual pages from Standard Output.
+
+<DT><B>-urx=</B><I>tx</I>
+
+<DD>selects <I>tx</I> as the upper right corner x coordinate (in
+inches) on the Postscript input page of the subject image.  See <a
+href="#dimensions">the Dimensions section</a>.
+
+<DT><B>-ury=</B><I>ty</I>
+
+<DD>selects <I>ty</I> as the upper right corner y coordinate (in
+inches) on the Postscript input page of the subject image.  See <a
+href="#dimensions">the Dimensions section</a>.
+
+
+<DT><B>-verbose</B>
+
+<DD>
+prints processing information to stdout.
+
+<DT><B>-xborder=</B><I>frac</I> 
+
+<DD>specifies that the left and right borders added to the subject
+image are to be <I>frac</I> times the subject image width.  The
+default value is 0.1.  See <a href="#dimensions">the Dimensions
+section</a>.
+
+
+<DT><B>-xmax=</B><I>xmax</I>
+
+<DD>specifies that the output image is to be <I>xmax</I> pixels wide.
+The default is 612.  See <a href="#dimensions">the Dimensions
+section</a>.
+
+
+<DT><B>-xsize=</B><I>xsize</I>
+
+<DD>specifies that the output image is to be <I>xsize</I> pixels wide.
+See <a href="#dimensions">the Dimensions section</a>.
+
+<DT><B>-yborder=</B><I>frac</I>
+
+<DD>specifies that the top and bottom borders added to the subject
+image are to be <I>frac</I> times the subject image height.  The
+default value is 0.1.  See <a href="#dimensions">the Dimensions
+section</a>.
+
+
+<DT><B>-ymax=</B><I>ymax</I>
+
+<DD>
+specifies that the output image is to be <i>ymax</i> pixels high.
+The default is 792.  See <a href="#dimensions">the Dimensions
+section</a>.
+
+<DT><B>-ysize=</B><I>ysize</I>
+
+<DD>specifies that the output image is to be <i>ymax</i> pixels high.
+See <a href="#dimensions">the Dimensions section</a>.
+
+<DT><B>-dpi=</b><i>dpi</i>
+
+<DD>specifies the output device resolution, in dots per inch, of the
+Postscript printer that <b>pstopnm</b> simulates.  This is the number of
+PNM pixels <b>pstopnm</b> generates for each inch of image.
+See <a href="#dimensions">the Dimensions section</a>.
+
+<p>This option was new in Netpbm 10.21 (March 2004).
+     
+</DL>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P>The program will produce incorrect results with PostScript files that
+initialize the current transformation matrix.  In these cases, page
+translation and rotation will not have any effect.  To render these
+files, probably the best bet is to use the following options:
+
+<pre>
+    pstopnm -xborder 0 -yborder 0 -portrait -nocrop file.ps
+</pre>
+
+<P>Additional options may be needed if the document is supposed to be
+rendered on a medium different from letter-size paper.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B>gs</B>,
+<B><A HREF="pnmtops.html">pnmtops</A></B>,
+<B><A HREF="psidtopgm.html">psidtopgm</A></B>,
+<B><A HREF="pbmtolps.html">pbmtolps</A></B>,
+<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>,
+<B><A HREF="pnmsplit.html">pnmsplit</A></B>,
+<B>pstofits</B>
+
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>COPYRIGHT</H2>
+
+<p>Copyright (c) 1992 Smithsonian Astrophysical Observatory
+
+<p>PostScript is a Trademark of Adobe Systems Incorporated.
+
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Alberto Accomazzi, WIPL, Center for Astrophysics.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">COPYRIGHT</A>
+<LI><A HREF="#lbAI">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/qrttoppm.html b/qrttoppm.html
new file mode 100644
index 00000000..b6bf9764
--- /dev/null
+++ b/qrttoppm.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Qrttoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>qrttoppm</H1>
+Updated: 25 August 1989
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+qrttoppm - convert output from the QRT ray tracer to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>qrttoppm</B>
+
+[<I>qrtfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>qrttoppm</b> reads a QRT file as input and and produces a PPM
+image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/rasttopnm.html b/rasttopnm.html
new file mode 100644
index 00000000..32f638dc
--- /dev/null
+++ b/rasttopnm.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Rasttopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>rasttopnm</H1>
+Updated: 13 January 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+rasttopnm - convert a Sun rasterfile to a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>rasttopnm</B>
+
+[<I>rastfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>rasttopnm</b> reads a Sun rasterfile as input and produces a PNM
+image as output.  The type of the output file depends on the input
+file - if it's black and white, <b>rasttopnm</b> writes a PBM image.
+If it's grayscale, <b>rasttopnm</b> writes a PGM.  If it's color,
+<b>rasttopnm</b> writes a PPM.  The program tells you which type it is
+generating.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtorast.html">pnmtorast</A>, 
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/rawtopgm.html b/rawtopgm.html
new file mode 100644
index 00000000..18e29775
--- /dev/null
+++ b/rawtopgm.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Rawtopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>rawtopgm</H1>
+Updated: 14 September 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+rawtopgm - convert raw grayscale bytes to a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>rawtopgm</B>
+
+[<B>-bpp</B> [<B>1</B>|<B>2</B>]]
+
+[<B>-littleendian</B>]
+
+[<B>-maxval</B> <I>N</I>]
+
+[<B>-headerskip</B> <I>N</I>]
+
+[<B>-rowskip</B> <I>N</I>]
+
+[<B>-tb</B>|<B>-topbottom</B>]
+
+[<I>width</I> <I>height</I>]
+
+[<I>imagefile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>rawtopgm</b> reads raw grayscale values as input and produces a
+PGM image as output.  The input file is just a sequence of pure binary
+numbers, either one or two bytes each, either bigendian or
+littleendian, representing gray values.  They may be arranged either
+top to bottom, left to right or bottom to top, left to right.  There
+may be arbitrary header information at the start of the file (to which
+<B>rawtopgm</B> pays no attention at all other than the header's
+size).
+
+<P>Arguments to <B>rawtopgm</B> tell how to interpret the pixels (a
+function that is served by a header in a regular graphics format).
+
+<P>The <I>width</I> and <I>height</I> parameters tell the dimensions
+of the image.  If you omit these parameters, <B>rawtopgm</B> assumes
+it is a quadratic image and bases the dimensions on the size of the
+input stream.  If this size is not a perfect square, <B>rawtopgm</B>
+fails.
+
+<P>When you don't specify <I>width</I> and <I>height</I>,
+<B>rawtopgm</B> reads the entire input stream into storage at once,
+which may take a lot of storage.  Otherwise, <B>rawtopgm</B>
+ordinarily stores only one row at a time.
+
+<P>If you don't specify <I>imagefile</I>, or specify <B>-</B>, the
+input is from Standard Input.
+
+<P>The PGM output is to Standard Output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-maxval</B> <I>N</I>
+
+<DD><I>N</I> is the maxval for the gray values in the input, and is
+also the maxval of the PGM output image.  The default is the maximum
+value that can be represented in the number of bytes used for each
+sample (i.e. 255 or 65535).
+
+<DT><B>-bpp</B> [<B>1</B>|<B>2</B>]
+
+<DD>tells the number of bytes that represent each sample in the input.
+If the value is <B>2</B>, The most significant byte is first in the
+stream.
+
+<P>The default is 1 byte per sample.
+
+<DT><B>-littleendian</B>
+
+<DD>says that the bytes of each input sample are ordered with the
+least significant byte first.  Without this option, <B>rawtopgm</B>
+assumes MSB first.  This obviously has no effect when there is only
+one byte per sample.
+
+<DT><B>-headerskip</B> <I>N</I>
+
+<DD><B>rawtopgm</B> skips over <I>N</I> bytes at the beginning of the
+stream and reads the image immediately after.  The default is 0.
+
+<P>This is useful when the input is actually some graphics format that
+has a descriptive header followed by an ordinary raster, and you don't
+have a program that understands the header or you want to ignore the
+header.
+
+<DT><B>-rowskip</B> <I>N</I>
+
+<DD>If there is padding at the ends of the rows, you can skip it with
+this option.  Note that rowskip need not be an integer.  Amazingly, I
+once had an image with 0.376 bytes of padding per row.  This turned
+out to be due to a file-transfer problem, but I was still able to read
+the image.
+
+<P>Skipping a fractional byte per row means skipping one byte per
+multiple rows.
+
+<DT><B>-bt -bottomfirst</B>
+
+<DD>By default, <B>rawtopgm</B> assumes the pixels in the input go top
+to bottom, left to right.  If you specify <B>-bt</B> or
+<B>-bottomfirst</B>, <B>rawtopgm</B> assumes the pixels go bottom to
+top, left to right.  The Molecular Dynamics and Leica confocal format,
+for example, use the latter arrangement.
+
+<P>If you don't specify <B>-bt</B> when you should or vice versa, the
+resulting image is upside down, which you can correct with
+<B>pamflip</B>.
+
+<P>This option causes <B>rawtopgm</B> to read the entire input stream
+into storage at once, which may take a lot of storage.  Ordinarly,
+<B>rawtopgm</B> stores only one row at a time.
+
+<P>For backwards compatibility, <B>rawtopgm</B> also accepts <B>-tb
+</B> and <B>-topbottom</B> to mean exactly the same thing.  The
+reasons these are named backwards is that the original author thought
+of it as specifying that the wrong results of assuming the data is top
+to bottom should be corrected by flipping the result top for bottom.
+Today, we think of it as simply specifying the format of the input
+data so that there are no wrong results.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgm.html">pgm</A></B>,
+
+<B><A HREF="rawtoppm.html">rawtoppm</A></B>,
+
+<B><A HREF="pamflip.html">pamflip</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHORS</H2>
+
+Copyright (C) 1989 by Jef Poskanzer.
+<BR>
+
+Modified June 1993 by Oliver Trepte, <A
+HREF="mailto:oliver@fysik4.kth.se">oliver@fysik4.kth.se</A>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHORS</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/rawtoppm.html b/rawtoppm.html
new file mode 100644
index 00000000..a1a8edeb
--- /dev/null
+++ b/rawtoppm.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Rawtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>rawtoppm</H1>
+Updated: 06 February 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+rawtoppm - convert a stream of raw RGB bytes to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>rawtoppm</B>
+
+[<B>-headerskip</B> <I>N</I>]
+
+[<B>-rowskip</B> <I>N</I>]
+
+[
+<B>-rgb</B>|<B>-rbg</B>|<B>-grb</B>
+|<B>-gbr</B>|<B>-brg</B>|<B>-bgr</B>
+]
+
+[<B>-interpixel</B>|<B>-interrow</B>]
+
+<I>width</i> <i>height</I>
+
+[<I>imagedata</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>rawtoppm</b> reads raw RGB bytes as input and produces a PPM
+image as output.  The input file is just RGB bytes.  You have to
+specify the width and height on the command line, since the program
+obviously can't get them from the file.  <b>rawtoppm</b> assumes the
+maxval of the input samples is 255, and makes the maxval of the output
+PPM 255.  
+
+<p><b>rawtoppm</b> assumes the pixels come top first in the input stream.
+If they are actually bottom first, the resulting PPM is upside down, so
+run it through <b>pamflip -tb</b>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-headerskip</B>
+
+<DD>Skip over this many bytes at the beginning of the input stream.
+Use this option when the input has some kind of header followed by
+a raster suitable for <b>rawtoppm</b>.
+
+<DT><B>-rowskip</B>
+
+<DD>Skip this many bytes at the end of each row of the raster.  (Some
+input streams have padding at the end of rows).
+
+<DT><B>-rgb -rbg -grb -gbr -brg -bgr</B>
+
+<DD>This option specifies the order of the color components for each
+pixel.  The default is <B>-rgb</B>.
+
+<DT><B>-interpixel -interrow</B>
+
+<DD>These options specify how the colors are interleaved.  The default
+is <B>-interpixel</B>, meaning interleaved by pixel.  A byte of red, a
+byte of green, and a byte of blue, or whatever color order you
+specified.  <B>-interrow</B> means interleaved by row - a row of red,
+a row of green, a row of blue, assuming standard rgb color order.  An
+<B>-interplane</B> option - all the red pixels, then all the green,
+then all the blue - would be an obvious extension, but is not
+implemented.  You could get the same effect by splitting the file into
+three parts (perhaps using <b>dd</b>), turning each part into a PGM
+file with <b>rawtopgm</b>, and then combining them with <b>rgb3toppm</b>.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="rawtopgm.html">rawtopgm</A>, 
+<A HREF="rgb3toppm.html">rgb3toppm</A>, 
+<A HREF="pamflip.html">pamflip</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/rgb3toppm.html b/rgb3toppm.html
new file mode 100644
index 00000000..61073083
--- /dev/null
+++ b/rgb3toppm.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Rgb3toppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>rgb3toppm</H1>
+Updated: 15 February 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+rgb3toppm - combine three PGM images (R, G, B) into one PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>rgb3toppm</B>
+
+<I>redpgmfile</I> 
+<I>greenpgmfile</I> 
+<I>bluepgmfile</I>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>rgb3toppm</B> reads three PGM images as input, taking each to
+represent one component (red, green, and blue) of a color image.  It
+produces a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtorgb3.html">ppmtorgb3</A>, 
+<A HREF="pamstack.html">pamstack</A>, 
+<A HREF="pgmtoppm.html">pgmtoppm</A>, 
+<A HREF="ppmtopgm.html">ppmtopgm</A>, 
+<A HREF="ppm.html">ppm</A>, 
+<A HREF="pgm.html">pgm</A>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/rlatopam.html b/rlatopam.html
new file mode 100644
index 00000000..b3467ed9
--- /dev/null
+++ b/rlatopam.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Rlatopam User Manual</TITLE></HEAD>
+<BODY>
+<H1>RLATOPAM</H1>
+Updated: 13 January 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<H2>NAME</H2>
+
+rlatopam - convert Alias/Wavefront RLA and RPF image files
+to PAM image files.
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>rlatopam</B>
+
+[<I>rlafile</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>rlatopam</b> converts an Alias RLA (run-length encoded type A)
+or RPF (rich pixel format) image to a PAM image file.  The output PAM
+file can be grayscale or RGB, with or without an alpha channel.
+
+<p><i>rlafile</i> is the file name of the input file.  If you omit this
+parameter, <b>rlatopam</b> reads the image from Standard Input.
+
+<p>There is no program in Netpbm that converts the other direction.x
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pam.html">pam</A></B>
+
+<h2 id="history">HISTORY</h2>
+
+<p><b>rlatopam</b> was new in Netpbm 10.32 (February 2006).
+
+<H2 id="author">AUTHOR</H2>
+
+Simon Walton
+<br>
+Matte World Digital
+<br>
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/rletopnm.html b/rletopnm.html
new file mode 100644
index 00000000..f1520cf7
--- /dev/null
+++ b/rletopnm.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Rletopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>RLETOPNM</H1>
+Updated: 13 April 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<H2>NAME</H2>
+
+rletopnm - convert a Utah Raster Tools RLE image file to a PNM image file.
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>rletopnm</B>
+
+[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}]
+[<B>--headerdump</B>|<B>-h</B>]
+
+[<B>--verbose</B>|<B>-v</B>]
+
+[<I>rlefile</I>|<B>-</B>]
+
+<P>All options may be abbreviated to their minimum unique abbreviation
+and options and arguments may be in any order.
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>rletopnm</b> converts Utah Raster Toolkit RLE image files to PNM
+image files.  <B>rletopnm</B> handles four types of RLE files:
+Grayscale (8 bit data, no color map), Pseudocolor (8 bit data with a
+color map), Truecolor (24 bit data with color map), and Directcolor
+(24 bit data, no color map).  <B>rletopnm</B> generates a PPM file for
+all these cases except for the Grayscale file, for which
+<B>rletopnm</B> generates a PGM file.
+
+<P><I>rlefile</I> is the RLE input file.  If it is absent or <B>-</B>,
+the input comes from Standard Input.
+
+<H2 id="options">OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>--alphaout=</B><I>alpha-filename</I>
+
+<DD>
+<B>rletopnm </B> creates a PGM (portable graymap) file containing the
+alpha channel values in the input image.  If the input image doesn't
+contain an alpha channel, the <I>alpha-filename</I> file contains all
+zero (transparent) alpha values.  If you don't specify
+<B>--alphaout</B>, <B>rletopnm</B> does not generate an alpha file,
+and if the input image has an alpha channel, <B>rletopnm</B> simply
+discards it.
+
+<P>If you specify <B>-</B> as the filename, <B>rletopnm</B> writes the
+alpha output to Standard Output and discards the image.
+
+<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use
+the alpha output file.
+
+<DT><B>--verbose</B>
+
+<DD>This option causes <B>rletopnm </B> to operate in verbose mode.
+It prints messages about what it's doing, including the contents of
+the RLE image header, to Standard Error.
+
+<DT><B>--headerdump</B>
+
+<DD>This option causes <B>rletopnm</B> to operate in header dump mode.
+It prints the contents of the RLE image header to Standard Error, but
+does not produce any other output.
+
+</DL>
+
+<H2 id="examples">EXAMPLES</H2>
+
+<ul>
+<li>While running in verbose mode, convert lenna.rle to PPM format and
+store the resulting image as lenna.ppm:
+
+<pre>
+<kbd>
+    rletopnm --verbose lenna.rle &gt;lenna.ppm
+</kbd>
+</pre>
+
+<li>Dump the header information of the RLE file called file.rle:
+
+<pre>
+<kbd>
+    rletopnm --headerdump file.rle
+</kbd>
+</pre>
+
+<li>Convert RLE file dart.rle to PPM format as dart.ppm.  Store the
+alpha channel of dart.rle as dartalpha.pgm (if dart.rle doesn't have
+an alpha channel, store a fully transparent alpha mask as
+dartalpha.pgm):
+
+<pre>
+<kbd>
+    rletopnm --alphaout=dartalpha.pgm dart.rle &gt;dart.ppm
+</kbd>
+</pre>
+
+</ul>
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<B><A HREF="pnmtorle.html">pnmtorle</A></B>,
+
+<B><A HREF="pnmconvol.html">pnmconvol</A></B>,
+
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>,
+
+<B><A HREF="pgm.html">pgm</A></B>,
+
+<H2 id="author">AUTHOR</H2>
+
+Wes Barris
+<BR>
+
+Army High Performance Computing Research Center (AHPCRC)
+<BR>
+
+Minnesota Supercomputer Center, Inc.
+
+<P>Modifications by Eric Haines to support raw and plain formats.
+
+<P>Modifications by Bryan Henderson to create alpha files and use
+mnemonic options.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#examples">EXAMPLES</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#author">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/sbigtopgm.html b/sbigtopgm.html
new file mode 100644
index 00000000..400bcafe
--- /dev/null
+++ b/sbigtopgm.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Sbigtopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>sbigtopgm</H1>
+Updated: 23 January 98
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+sbigtopgm - convert an SBIG CCDOPS file to PGM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>sbigtopgm</B>
+
+[<I>sbigfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>sbigtopgm</b> reads an 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
+site, <A HREF="http://www.sbig.com/">http://www.sbig.com/</A>.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pgm.html">pgm</A></B>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+John Walker (<B><A
+HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A></B>),
+January 1998.  This program is in the public domain.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/sgitopnm.html b/sgitopnm.html
new file mode 100644
index 00000000..c0f23f01
--- /dev/null
+++ b/sgitopnm.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Sgitopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>sgitopnm</H1>
+Updated: 29 Jul 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+sgitopnm - convert a SGI image file to PNM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>sgitopnm</B>
+
+[<B>-verbose</B>]
+
+[<B>-channel</B> <I>c</I>]
+
+[<I>SGIfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>sgitopnm</b> reads an SGI image file as input and produces a PGM
+image for a 2-dimensional (1 channel) input file, and a PPM image for
+a 3-dimensional (3 or more channels) input file.
+
+<P>Alternatively, the program produces a PGM image of any one of the
+channels in the input file.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-verbose</B>
+
+<DD>Give some information about the SGI image file.
+
+<DT><B>-channel</B> <I>c</I>
+
+<DD>Extract channel <I>c</I> of the image as a PGM image.  Without
+this option, <B>sgitopnm</B> extracts the first 3 channels as a PPM
+image or, if the input has only 1 channel, extracts that as a PGM
+image, and if the input has 2 channels, fails.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>REFERENCES</H2>
+
+SGI Image File Format documentation (draft v0.95) by Paul Haeberli (<A
+HREF="mailto:paul@sgi.com">paul@sgi.com</A>).  Available via ftp at
+sgi.com:graphics/SGIIMAGESPEC.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnm.html">pnm</A></B>,
+
+<B><A HREF="pnmtosgi.html">pnmtosgi</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1994 by Ingo Wilken (<A
+HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>)
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">REFERENCES</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/sirtopnm.html b/sirtopnm.html
new file mode 100644
index 00000000..f42148cc
--- /dev/null
+++ b/sirtopnm.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Sirtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>sirtopnm</H1>
+Updated: 20 March 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+sirtopnm - convert a Solitaire file to PNM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>sirtopnm</B>
+
+[<I>sirfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>sirtopnm</b> reads a Solitaire Image Recorder file as input and
+produces a PNM image as output.  The type of the output file depends
+on the input file - if it's an MGI TYPE 17 file, <b>sirtopnm</b>
+generates a PGM file.  If it's an MGI TYPE 11 file, <b>sirtopnm</b>
+generates PPM.  The program tells you which type it is writing.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtosir.html">pnmtosir</A>, 
+<A HREF="pnm.html">pnm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Marvin Landis.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
+
diff --git a/sldtoppm.html b/sldtoppm.html
new file mode 100644
index 00000000..a5408626
--- /dev/null
+++ b/sldtoppm.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Sldtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>sldtoppm</H1>
+Updated: 10 October 1991
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+sldtoppm - convert an AutoCAD slide file to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>sldtoppm</B>
+[<B>-adjust</B>]
+[<B>-dir</B>]
+[{<B>-height</B>|<B>-ysize</B>} <I>s</I>]
+[<B>-info</B>]
+[{<B>-lib</B>|<B>-Lib</B>} <I>name</I>]
+[<B>-scale</B> <I>s</I>]
+[<B>-verbose</B>]
+[{<B>-width</B>|<B>-xsize</B>} <I>s</I>]
+[<I>slidefile</I>]
+
+<P>All options can be abbreviated to their shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>sldtoppm</b> reads an AutoCAD&#174; slide file and outputs a PPM
+image.  If you don't specify <I>slidefile</I>, <b>sldtoppm</b> reads
+input from Standard Input.  <b>sldtoppm</b> uses the <b>ppmdraw</b>
+library to convert the vector and polygon information in the slide
+file to a raster; see the file <b>ppmdraw.h</b> for details on this
+package.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-adjust</B>
+
+<DD>If the display on which the slide file was created had non-square
+pixels, when you process the slide with <B>sldtoppm</B> and don't
+specify <B>-adjust</B>, <b>sldtoppm</b> issues the following warning;
+
+<blockquote>
+Warning - pixels on source screen were non-square.
+</blockquote>
+
+<p>Specifying <B>-adjust</B> will correct the image width to
+compensate.  Specifying the <B>-adjust</B> option causes
+<B>sldtoppm</B> to scale the width of the image so that pixels in the
+resulting portable pixmap are square (and hence circles appear as true
+circles, not ellipses).  The scaling is performed in the vector
+domain, before scan converting the objects.  The results are,
+therefore, superior in appearance to what you'd obtain were you to
+perform the equivalent scaling with <B>pamscale</B> after the bitmap
+had been created.
+
+<DT><B>-dir</B>
+
+<DD>The input is assumed to be an AutoCAD slide library file.  A
+directory listing each slide in the library is printed on standard
+error.
+
+<DT><B>-height</B> <I>size</I>
+
+<DD>Scales the image in the vector domain so it is <I>size</I> pixels
+in height.  If you don't specify <B>-width</B> or <B>-xsize</B>,
+<b>sldtoppm</b> adjusts the width to preserve the pixel aspect ratio.
+
+<DT><B>-info</B>
+
+<DD>Dump the slide file header on standard error, displaying the original
+screen size and aspect ratio among other information.
+
+<DT><B>-lib</B> <I>name</I>
+
+<DD>Extracts the slide with the given <I>name</I> from the slide
+library given as input.  <b>sldtoppm</b> converts the specified
+<I>name</I> to upper case.
+
+<DT><B>-Lib</B><I> name</I>
+
+<DD>Extracts the slide with the given <I>name</I> from the slide
+library given as input.  <b>sldtoppm</b> uses <I>name</I> in the case
+specified; it does not convert it to upper case.
+
+<DT><B>-scale</B> <I>s</I>
+
+<DD>Scales the image by factor <I>s</I>, which may be any floating
+point value greater than zero.  <b>sldtoppm</b> does the scaling after
+aspect ratio adjustment, if any.  Since it does the scaling in the
+vector domain, before rasterisation, the results look much better than
+running the output of <B>sldtoppm</B> through <B>pamscale</B>.
+
+<DT><B>-verbose</B>
+
+<DD>Dumps the slide file header and lists every vector and polygon 
+to Standard Error.
+
+<DT><B>-width</B> <I>size</I>
+
+<DD>Scales the image in the vector domain so it is <I>size</I> pixels
+wide.  If you don't specify <B>-height</B> or <B>-ysize</B>,
+<b>sldtoppm</b> adjusts the height to preserve the pixel aspect ratio.
+
+<DT><B>-xsize</B> <I>size</I>
+
+<DD>Scales the image in the vector domain so it is <I>size</I> pixels
+wide.  If you don't specify <B>-height</B> or <B>-ysize</B>,
+<b>sldtoppm</b> adjusts the height to preserve the pixel aspect ratio.
+
+<DT><B>-ysize</B> <I>size</I>
+
+<DD>Scales the image in the vector domain so it is <I>size</I> pixels
+in height.  If you don't specify <B>-width</B> or <B>-xsize</B>,
+<b>sldtoppm</b> adjusts the width to preserve the pixel aspect ratio.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p><b>sldtoppm</b> can convert only Level 2 slides.  Level 1 format
+has been obsolete since the advent of AutoCAD Release 9 in 1987, and
+was not portable across machine architectures.
+
+<P>Slide library items with names containing 8 bit (such as ISO) or 16
+bit (Kanji, for example) characters may not be found when chosen with
+the <B>-lib</B> option unless <B>sldtoppm</B> was built with character
+set conversion functions appropriate to the locale.  You can always
+retrieve slides from libraries regardless of the character set by
+using the <B>-Lib</B> option and specifying the precise name of
+library member.  Use the <B>-dir</B> option to list the slides in a
+library if you're unsure of the exact name.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+AutoCAD Reference Manual: <I>Slide File Format</I>,
+
+<B><A HREF="pamscale.html">pamscale</A></B>,
+
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<PRE>
+John Walker
+Autodesk SA
+Avenue des Champs-Montants 14b
+CH-2074 MARIN
+Suisse/Schweiz/Svizzera/Svizra/Switzerland
+    <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A>
+    <B>Fax:</B>038/33 88 15
+    <B>Voice:</B>038/33 76 33
+</PRE>
+
+<P>
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+without any conditions or restrictions.  This software is provided
+&quot;as is&quot; without express or implied warranty.
+
+<P>AutoCAD and Autodesk are registered trademarks of Autodesk, Inc.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">BUGS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/spctoppm.html b/spctoppm.html
new file mode 100644
index 00000000..5e9ba684
--- /dev/null
+++ b/spctoppm.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Spctoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>spctoppm</H1>
+Updated: 19 July 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+spctoppm - convert an Atari compressed Spectrum file to a PPM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>spctoppm</B>
+
+[<I>spcfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>spctoppm</b> reads an Atari compressed Spectrum file as input
+and produces a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="sputoppm.html">sputoppm</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Steve Belczyk (<A
+HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/spottopgm.html b/spottopgm.html
new file mode 100644
index 00000000..ff51fbac
--- /dev/null
+++ b/spottopgm.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Spottopgm User Manual</TITLE></HEAD>
+<BODY>
+<H1>spottopgm</H1>
+Updated: 22 July 2004
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+spottopgm - convert SPOT satellite images to a PGM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNTAX</H2>
+
+<b>spottopgm</b> 
+[<b>-1</b>|<b>-2</b>|<b>-3</b>] 
+[<i>Firstcol</i> <i>Firstline</i> <i>Lastcol</i> <i>Lastline</i>] 
+<i>inputfile</i>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-1</b>
+<DT><B>-2</b>
+<DT><B>-3</b>
+
+<DD>Extract the given color from the SPOT image.  The colors are
+infrared, visible light, and ultraviolet, although I don't know which
+corresponds to which number.  If the image is in color,
+<b>spottopgm</b> announces this on Standard Error.  The default color
+is 1.
+
+
+</dl>
+
+<A NAME="parameters">&nbsp;</A>
+<H2>PARAMETERS</H2>
+<DL>
+
+<DT><I>Firstcol Firstline Lastcol Lastline</I>
+
+<DD>Extract the specified rectangle from the SPOT image.  Most SPOT
+images are 3000 lines long and 3000 or more columns
+wide. Unfortunately, the SPOT format only gives the width and not the
+length.  The width is printed on standard error.  The default
+rectangle is the width of the input image by 3000 lines.
+
+</DL>
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<b>spottopgm</b> converts the named <B>inputfile</B> to PGM format,
+defaulting to the first color and the whole SPOT image unless
+you specify otherwise with the options.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P><B>spottopgm</B> doesn't determine the length of the input file;
+this would involve two passes over the input file.  It defaults to
+3000 lines instead.
+
+<P><B>spottopgm</b> could extract a three-color image (as a PPM), but
+I didn't feel like making the program more complicated than it is now.
+Besides, there is no one-to-one correspondence between red, green,
+blue and infrared, visible and ultraviolet.
+
+<P>I've had only a limited number of SPOT images to play with, and
+therefore wouldn't guarantee that this will work on any other images.
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Warren Toomey <A
+HREF="mailto:wkt@csadfa.cs.adfa.oz.au">wkt@csadfa.cs.adfa.oz.au</A>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<P><B><A HREF="pgm.html">pgm</A></B>
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNTAX</A>
+<LI><A HREF="#lbAD">OPTIONS</A>
+<LI><A HREF="#lbAE">DESCRIPTION</A>
+<LI><A HREF="#lbAG">LIMITATIONS</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+<LI><A HREF="#lbAI">SEE ALSO</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/sputoppm.html b/sputoppm.html
new file mode 100644
index 00000000..2d75322f
--- /dev/null
+++ b/sputoppm.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Sputoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>sputoppm</H1>
+Updated: 19 July 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+sputoppm - convert an Atari uncompressed Spectrum file to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>sputoppm</B>
+
+[<I>spufile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>sputoppm</b> reads an Atari uncompressed Spectrum file as input
+and produces a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="spctoppm.html">spctoppm</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1991 by Steve Belczyk (<A
+HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/testimg.png b/testimg.png
new file mode 100644
index 00000000..bccf3372
--- /dev/null
+++ b/testimg.png
Binary files differdiff --git a/testimg_histbar.png b/testimg_histbar.png
new file mode 100644
index 00000000..cb804fcd
--- /dev/null
+++ b/testimg_histbar.png
Binary files differdiff --git a/testimg_histdot.png b/testimg_histdot.png
new file mode 100644
index 00000000..26898cd9
--- /dev/null
+++ b/testimg_histdot.png
Binary files differdiff --git a/tgatoppm.html b/tgatoppm.html
new file mode 100644
index 00000000..eb81944e
--- /dev/null
+++ b/tgatoppm.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Tgatoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>tgatoppm</H1>
+Updated: 02 April 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+tgatoppm - convert TrueVision Targa file to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>tgatoppm</B>
+
+[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}]
+
+[<B>--headerdump</B>]
+
+<I>tga-filename</I>
+
+<P>All options can be abbreviated to their shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>tgatoppm</b> reads a TrueVision Targa file as input and produces
+a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+
+<DT><B>--alphaout=</B><I>alpha-filename</I>
+
+<DD><B>tgatoppm </B> creates a PGM image containing the alpha channel
+values in the input image.  If the input image doesn't contain an
+alpha channel, the <I>alpha-filename</I> file contains all zero
+(transparent) alpha values.  If you don't specify <B>--alphaout</B>,
+<B>tgatoppm</B> does not generate an alpha file, and if the input
+image has an alpha channel, <B>tgatoppm</B> simply discards it.
+
+<P>If you specify <B>-</B> as the filename, <B>tgatoppm</B> writes the
+alpha output to Standard Output and discards the image.
+
+<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use
+the alpha output file.
+
+<DT><B>--headerdump</B>
+
+<DD>Causes <b>tgatoppm</b> to dump information from the TGA header to
+Standard Error.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtotga.html">ppmtotga</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Partially based on tga2rast, version 1.0, by Ian J. MacPhedran.
+
+<P>Copyright (C) 1989 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/thinkjettopbm.html b/thinkjettopbm.html
new file mode 100644
index 00000000..0dd985ee
--- /dev/null
+++ b/thinkjettopbm.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Thinkjettopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>thinkjettopbm</H1>
+Updated: 03 April 2001
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+thinkjettopbm - convert HP ThinkJet printer commands file to PBM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>thinkjettopbm</B>
+
+[<b>-d</b>]
+
+[<I>thinkjet_file</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>thinkjettopbm</b> reads HP ThinkJet printer commands from the
+standard input, or <I>thinkjet_file</I> if specified, and writes a PBM
+image to Standard Output.  <p><b>thinkjettopbm</b> silently ignores
+text and non-graphics command sequences.
+
+<P>The <B>-d</B> option turns on debugging messages which are written
+to the standard error stream.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<P>The program handles only a small subset of ThinkJet command
+sequences, but enough to convert screen images from older HP test
+equipment.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<b><a href="pnmtopclxl.html">pnmtopclx.html</a></b>,
+<b><a href="pbmtolj.html">pbmtolj.html</a></b>,
+<b><a href="ppmtolj.html">ppmtopj</a></b>,
+<b><a href="ppmtopj.html">ppmtopj</a></b>,
+<b><a href="thinkjettopbm.html">thinkjettopbm</a></b>,
+<B><A HREF="pbm.html">pbm</A></B>,
+<B><A HREF="pjtoppm.html">pjtoppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2001 by W. Eric Norum
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">BUGS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/tifftopnm.html b/tifftopnm.html
new file mode 100644
index 00000000..b43e1f5c
--- /dev/null
+++ b/tifftopnm.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Tifftopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>tifftopnm</H1>
+Updated: 27 March 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+tifftopnm - convert a TIFF file into a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>tifftopnm</B>
+
+[<B>-alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}]
+[<B>-headerdump</B>]
+<br>
+[<B>-respectfillorder</B>]
+[<B>-byrow</B>]
+[<I>tiff-filename</I>]
+
+<P>You may abbreviate any option to its shortest unique prefix.  You may use
+two hyphens instead of one in options.  You may separate an option and
+its value either by an equals sign or white space.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>tifftopnm</b> reads a TIFF file as input and produces a PNM image
+as output.  The type of the output file depends on the input file - if
+it's black &amp; white, generates a PBM image; if it's grayscale,
+generates a PGM image; otherwise, a PPM image.  The program tells you
+which type it is writing.
+
+<p>If the TIFF file contains multiple images (multiple
+&quot;directories,&quot;), <b>tifftopnm</b> generates a multi-image PNM
+output stream.  Before Netpbm 10.27 (March 2005), however, it would
+just ignore all but the first input image.
+
+<P>This program cannot read every possible TIFF file -- there are
+myriad variations of the TIFF format.  However, it does understand
+monochrome and gray scale, RGB, RGBA (red/green/blue with alpha
+channel), CMYK (Cyan-Magenta-Yellow-Black ink color separation), and
+color palette TIFF files.  An RGB file can have either single plane
+(interleaved) color or multiple plane format.  The program reads 1-8
+and 16 bit-per-sample input, the latter in either bigendian or
+littlendian encoding.  Tiff directory information may also be either
+bigendian or littlendian.
+
+<p>There are many TIFF formats that <b>tifftopnm</b> can read only if
+the image is small enough to fit in memory.  <b>tifftopnm</b> uses the
+TIFF library's TIFFRGBAImageGet() function to process the TIFF image
+if it can get enough memory for TIFFRGBAImageGet() to store the whole
+image in memory at once (that's what TIFFRGBAImageGet() does).  If
+not, <b>tifftopnm</b> uses a more primitive row-by-row conversion
+strategy using the raw data returned by TIFFReadScanLine() and native
+intelligence.  That native intelligence does not know as many formats
+as TIFFRGBAImageGet() does.  And certain compressed formats simply
+cannot be read with TIFFReadScanLine().
+
+<P>Before Netpbm 10.11 (October 2002), <B>tifftopnm</b> never used
+TIFFRGBAImageGet(), so it could not interpret many of the formats it
+can interpret today.
+
+<P>There is no fundamental reason that this program could not read
+other kinds of TIFF files even when they don't fit in memory all at
+once.  The existing limitations are mainly because no one has asked
+for more.
+
+<P>The PNM output has the same maxval as the Tiff input, except that
+if the Tiff input is colormapped (which implies a maxval of 65535) the
+PNM output has a maxval of 255.  Though this may result in lost
+information, such input images hardly ever actually have more color
+resolution than a maxval of 255 provides and people often cannot deal
+with PNM files that have maxval &gt; 255.  By contrast, a
+non-colormapped Tiff image that doesn't need a maxval &gt; 255 doesn't
+<EM>have</EM> a maxval &gt; 255, so when <b>tifftopnm</b> sees a
+non-colormapped maxval &gt; 255, it takes it seriously and produces a
+matching output maxval.
+
+<P>Another exception is where the TIFF maxval is greater than 65535,
+which is the maximum allowed by the Netpbm formats.  In that case,
+<b>tifftopnm</b> uses a maxval of 65535, and you lose some information
+in the conversion.
+
+<P>The <I>tiff-filename</I> argument names the regular file that
+contains the Tiff image.  If you specify &quot;-&quot; or don't
+specify this argument, <B>tfftopnm</B> uses Standard Input. In either
+case, the file must be seekable.  That means no pipe, but any regular
+file is fine.
+
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-alphaout=</B><I>alpha-filename</I>
+
+<DD><B>tifftopnm </B>creates a PGM file containing the alpha channel
+values in the input image.  If the input image doesn't contain an
+alpha channel, the <I>alpha-filename</I> file contains all zero
+(transparent) alpha values.  If you don't specify <B>-alphaout</B>,
+
+<B>tifftopnm</B> does not generate an alpha file, and if the input
+image has an alpha channel, <B>tifftopnm</B> simply discards it.
+
+<P>If you specify <B>-</B> as the filename, <B>tifftopnm</B>
+writes the alpha output to Standard Output and discards the image.
+
+<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use
+the alpha output file.
+
+<DT><B>-respectfillorder</B>
+
+<DD>By default, <B>tifftopnm </B> ignores the &quot;fillorder&quot;
+tag in the TIFF input, which means it may incorrectly interpret the
+image.  To make it follow the spec, use this option.  For a lengthy
+but engaging discussion of why <B>tifftopnm</B> works this way and how
+to use the <B>-respectfillorder</B> option, see the note on fillorder
+below.  
+
+<DT><B>-byrow</B>
+
+<DD>This option can make <b>tifftopnm</b> run faster.
+
+<P><B>tifftopnm</B> has two different ways to do the conversion from Tiff
+to PNM, using two different facilities of the TIFF library:
+
+<DL>
+
+<DT>Whole Image
+
+<DD>Decode the entire image into memory at once, using
+TIFFRGBAImageGet(), then convert to PNM and output row by row.
+   
+<DT>Row By Row
+<DD>Read, convert, and output one row at a time using TIFFReadScanline().
+
+</DL>
+
+<P>Whole Image is preferable because the Tiff library does more of the
+work, which means it understands more of the Tiff format possibilities
+now and in the future.  Also, some compressed TIFF formats don't allow
+you to extract an individual row.
+
+<P>Row By Row uses far less memory, which means with large images, it
+can run in environments where Whole Image cannot and may also run
+faster.  And because Netpbm code does more of the work, it's possible
+that it can be more flexible or at least give better diagnostic
+information if there's something wrong with the TIFF.
+
+<P>In Netpbm, we stress function over performance, so by default we
+try Whole Image first, and if we can't get enough memory for the
+decoded image or TIFFRGBAImageGet() fails, we fall back to Row By Row.
+But if you specify the <b>-byrow</b> option, <b>tifftopnm</b> will not
+attempt Whole Image.  If Row By Row does not work, it simply fails.
+
+<P>See <a href="#cmyk">Color Separation (CMYK) TIFFs</a> for a
+description of one way Row By Row makes a significant difference in
+your results.
+
+<p>Whole Image costs you precision when your TIFF image uses more than
+8 bits per sample.  TIFFRGBAImageGet() converts the samples to 8 bits.
+<b>tifftopnm</b> then scales them back to maxval 65535, but the lower
+8 bits of information is gone.
+
+<P>Before Netpbm 10.11 (October 2002), <B>tifftopnm</b> always did Row
+By Row.  Netpbm 10.12 always tried Whole Image first.  <b>-byrow</b>
+came in with Netpbm 10.13 (January 2003).
+
+<DT><B>-headerdump</B>
+
+<DD>Dump TIFF file information to stderr.  This information may be useful 
+in debugging TIFF file conversion problems.  
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>NOTES</H2>
+
+<A NAME="lbAG">&nbsp;</A>
+<H3>Fillorder</H3>
+
+<P>
+There is a piece of information in the header of a TIFF image called
+&quot;fillorder.&quot;  The TIFF specification quite clearly states that this value
+tells the order in which bits are arranged in a byte in the description
+of the image's pixels.  There are two options, assuming that the image has
+a format where more than one pixel can be represented by a single byte:
+1) the byte is filled from most significant bit to least significant bit
+going left to right in the image; and 2) the opposite.
+<P>
+However, there is confusion in the world as to the meaning of
+fillorder.  Evidence shows that some people believe it has to do with
+byte order when a single value is represented by two bytes.
+<P>
+These people cause TIFF images to be created that, while they use a 
+MSB-to-LSB fillorder, have a fillorder tag that says they used LSB-to-MSB.
+A program that properly interprets a TIFF image will not end up with the
+image that the author intended in this case.
+<P>
+For a long time, 
+<B>tifftopnm</B>
+
+did not understand fillorder itself and assumed the fillorder was 
+MSB-to-LSB regardless of the fillorder tag in the TIFF header.  And as
+far as I know, there is no legitimate reason to use a fillorder other
+than MSB-to-LSB.  So users of
+<B>tifftopnm</B>
+
+were happily using those TIFF images that had incorrect fillorder tags.
+<P>
+So that those users can continue to be happy, 
+<B>tifftopnm</B>
+
+today continues to ignore the fillorder tag unless you tell it not to.
+(It does, however, warn you when the fillorder tag does not say
+MSB-to-LSB that the tag is being ignored).
+<P>
+If for some reason you have a TIFF image that actually has LSB-to-MSB 
+fillorder, and its fillorder tag correctly indicates that, you must use
+the 
+<B>-respectfillorder</B>
+
+option on
+<B>tifftopnm</B>
+
+to get proper results.
+<P>
+Examples of incorrect TIFF images are at <A HREF="ftp://weather.noaa.gov.">ftp://weather.noaa.gov.</A>  They
+are apparently created by a program called 
+<B>faxtotiff</B>.
+
+<P>
+This note was written on January 1, 2002.
+
+
+<a name="cmyk"></a>
+<h3>Color Separation (CMYK) TIFFs</H3>
+
+<p>Some TIFF images contain color information in CMYK form, whereas PNM
+images use RGB.  There are various formulas for converting between these
+two forms, and <b>tifftopnm</b> can use either of two.
+
+<p>The TIFF library (Version 3.5.4 from libtiff.org) uses
+Y=(1-K)*(1-B) (similar for R and G) in its TIFFRGBAImageGet() service.
+When <b>tifftopnm</b> works in Whole Image mode, it uses that service,
+so that's the conversion you get.
+
+<p>But when <b>tifftopnm</b> runs in Row By Row mode, it does not use
+TIFFRGBAImageGet(), and you get what appears to be more useful:
+Y=1-(B+K).  This is the inverse of what <b>pnmtotiffcmyk</b> does.
+
+<p>See the <b>-byrow</b> option for more information on Whole Image versus
+Row By Row mode.
+
+<p>Before Netpbm 10.21 (March 2004), <b>tifftopnm</b> used the
+Y=(1-K)*(1-B) formula always.
+
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pnmtotiff.html">pnmtotiff</A></B>,
+<B><A HREF="pnmtotiffcmyk.html">pnmtotiffcmyk</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="pnm.html">pnm</A></B>
+
+<A NAME="lbAI">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Derived by Jef Poskanzer from tif2ras.c, which is Copyright (c)
+1990 by Sun Microsystems, Inc.  Author: Patrick J. Naughton (<A
+HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>).
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+  <LI><A HREF="#lbAB">NAME</A>
+  <LI><A HREF="#lbAC">SYNOPSIS</A>
+  <LI><A HREF="#lbAD">DESCRIPTION</A>
+  <LI><A HREF="#lbAE">OPTIONS</A>
+  <LI><A HREF="#lbAF">NOTES</A>
+    <UL>
+      <LI><A HREF="#lbAG">Fillorder</A>
+      <LI><A HREF="#cmyk">Color Separation (CMYK) TIFFs</A>
+      </UL>
+  <LI><A HREF="#lbAH">SEE ALSO</A>
+  <LI><A HREF="#lbAI">AUTHOR</A>
+  </UL>
+</BODY>
+</HTML>
diff --git a/vidtoppm.html b/vidtoppm.html
new file mode 100644
index 00000000..56142a15
--- /dev/null
+++ b/vidtoppm.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD>
+<TITLE>Vidtoppm User Manual</TITLE>
+</HEAD><BODY>
+<H1>vidtoppm</H1>
+Updated: 2000
+<BR>
+<H2>NAME</H2>
+<B>vidtopppm</B> - archived but not working
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+<p><b>vidtoppm</b> is supposed to convert Parallax XVideo JPEG
+to sequence of PPM files.  It's source code is part of the Netpbm package
+for archival purposes, but it does not presently build because it requires
+header files that aren't in the package.  If someone comes up with a use
+for <b>vidtoppm</b>, we might be able to make it work.
+
+<b>vidtoppm</b> was in the Berkeley MPEG encoder package from which
+Netpbm's <b>ppmtompeg</b> was derived.
+
+</BODY>
+</HTML>
diff --git a/wbmptopbm.html b/wbmptopbm.html
new file mode 100644
index 00000000..a6b9a8a5
--- /dev/null
+++ b/wbmptopbm.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Wbmptopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>wbmptopbm</H1>
+Updated: 19 November 1999
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+wbmptopbm - convert a wireless bitmap (wbmp) file to a PBM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>wbmptopbm</B>
+
+[<I>wbmpfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><b>wbmptopbm</b> reads a wbmp file as input and produces a PBM
+image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p><b>wbmptopbm</b> recognizes only WBMP type 0.  This is the only
+type specified in the WAP 1.1 specifications.
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pbm.html">pbm</A></B>,
+
+<B><A HREF="pbmtowbmp.html">pbmtowbmp</A></B>,
+
+Wireless Application Environment Specification.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1999 Terje Sannum &lt;<A
+HREF="mailto:terje@looplab.com">terje@looplab.com</A>&gt;.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">LIMITATIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/winicontoppm.html b/winicontoppm.html
new file mode 100644
index 00000000..e5409fd2
--- /dev/null
+++ b/winicontoppm.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Winicontoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>winicontoppm</H1>
+Updated: 23 March 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+winicontoppm - convert a Windows .ico image into 1 or more PPM images
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>winicontoppm</B>
+[<B>-writeands</B>]
+[<B>-allicons</B>|<b>-bestqual</b>]
+[<b>-multippm</b>]
+[<b>-verbose</b>]
+[<I>iconfile</I>]
+[<I>ppmdestfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>winicontoppm</b> reads a Microsoft Windows .ico file and
+converts it to one or more PPMs.
+
+<P>A Windows icon contains one or more images, at different resolutions
+and color depths.  Each image has an 'and' mask, which contains transparancy
+data. 
+
+<P>By default, the output goes to Standard Output.  If you specify
+<I>ppmdestfile</I>, output goes into one or more files named as
+follows.  If it's just one file (i.e. you specify the <B>-multippm</B>
+option or don't specify <B>-allicons</B>), the file name is
+<I>ppmdestfile</I><B>.ppm</B>.  If it's multiple files, their file
+names are <I>ppmdestfile</I><B>_1.ppm</B>,
+<I>ppmdestfile</I><B>_2.ppm</B>, etc.  <P> When you specify the
+<B>-writeands</B> option, the file names above are modified to include
+the string <B>xor</B> as in <I>ppmdestfile</I><B>_xor.ppm</B> or
+<I>ppmdestfile</I><B>_xor_1.ppm</B>.
+
+<P><B>winicontoppm</b> can convert .ico images with 1, 4, 8, 24, or
+32 bits per pixel.  Before Netpbm 10.15 (April 2003), it could not handle
+24 and 32.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-writeands</B>
+
+<DD>For each icon written, also write the 'and' (transparancy) mask as
+a separate PBM file.  It's name is of the form
+<I>ppmdestfile</I><B>_and.pbm</B> or
+<I>ppmdestfile</I><B>_and_1.pbm</B>.
+
+<DT><B>-allicons</B>
+
+<DD>Extract all images from the .ico file.
+
+<DT><B>-bestqual</B>
+
+<DD>Extract only the best quality (largest, then highest bpp) image
+from the .ico file.
+
+<DT><B>-multippm</B>
+
+<DD>Write all PPMs to a single file.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtowinicon.html">ppmtowinicon</A></B>,
+<B><A HREF="bmptopnm.html">bmptopnm</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 2000, 2003 by Lee Benfield.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/xbmtopbm.html b/xbmtopbm.html
new file mode 100644
index 00000000..9b1a0dda
--- /dev/null
+++ b/xbmtopbm.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Xbmtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>xbmtopbm</H1>
+Updated: 31 August 1988
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+xbmtopbm - convert an X11 or X10 bitmap to a PBM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>xbmtopbm</B>
+
+[<I>bitmapfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>xbmtopbm</b> reads an X11 or X10 bitmap as input and produces a
+PBM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtoxbm.html">pbmtoxbm</A>, 
+<A HREF="pbmtox10bm.html">pbmtox10bm</A>, 
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1988 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ximtoppm.html b/ximtoppm.html
new file mode 100644
index 00000000..37509a79
--- /dev/null
+++ b/ximtoppm.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ximtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ximtoppm</H1>
+Updated: April 2, 2000
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ximtoppm - convert an Xim file to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ximtoppm</B>
+
+[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}]
+[<I>ximfile</I>]
+
+<P>You can abbreviate any option to its shortest unique prefix.
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ximptoppm</b> reads an Xim file as input and produces a PPM
+image as output.  The Xim toolkit is included in the contrib tree of
+the X.V11R4 release.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>--alphaout=</B><I>alpha-filename</I>
+
+<DD><B>ximtoppm</B> creates a PGM file containing the alpha channel
+values in the input image.  If the input image doesn't contain an
+alpha channel, the <I>alpha-filename</I> file contains all zero
+(transparent) alpha values.  If you don't specify <B>--alphaout</B>,
+<B>ximtoppm</B> does not generate an alpha file, and if the input
+image has an alpha channel, <B>ximtoppm</B> simply discards it.
+
+<P>If you specify <B>-</B> as the filename, <B>ximtoppm</B> writes the
+alpha output to Standard Output and discards the image.
+
+<P>Actually, an Xim image can contain an arbitrary fourth channel --
+it need not be an Alpha channel.  <B>ximtoppm</B> extracts any fourth
+channel it finds as described above; it doesn't matter if it is an
+alpha channel or not.
+
+<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use
+the alpha output file.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<p>Copyright (C) 1991 by Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/xpmtoppm.html b/xpmtoppm.html
new file mode 100644
index 00000000..dbeed4ee
--- /dev/null
+++ b/xpmtoppm.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Xpmtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>xpmtoppm</H1>
+Updated: 05 October 2005
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+xpmtoppm - convert an X11 pixmap to a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>xpmtoppm</B>
+
+[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}]
+[<B>-verbose</B>]
+
+[<I>xpmfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>xpbtoppm</b> reads an X11 pixmap (XPM version 1 or 3) as input
+and produces a PPM image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>--alphaout=</B><I>alpha-filename</I>
+
+<DD><B>xpmtoppm</B> creates a PBM file containing the transparency
+mask for the image.  If the input image doesn't contain transparency
+information, the <I>alpha-filename</I> file contains all white
+(opaque) alpha values.  If you don't specify <B>--alphaout</B>,
+<B>xpmtoppm</B> does not generate an alpha file, and if the input
+image has transparency information, <B>xpmtoppm</B> simply discards
+it.
+
+<P>If you specify <B>-</B> as the filename, <B>xpmtoppm</B> writes the
+alpha output to Standard Output and discards the image.
+
+<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use
+the alpha output file.
+
+<p><b>xpmtoppm</b> can't handle a line longer than 8K characters in
+the the XPM input.  If an input line exceeds this limit,
+<b>xpmtoppm</b> quits with an error message to that effect.  Before
+Netpbm 10.30 (October 2005), the limit was 2K.
+
+<DT><B>--verbose</B>
+
+<DD>
+<B>xpmtoppm</B> prints information about its processing on Standard Error.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>LIMITATIONS</H2>
+
+<p>The recogized XPM version 3 features are limited.  Comments can
+only be single lines and there must be for every pixel a default
+colorname for a color type visual.
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<B><A HREF="ppmtoxpm.html">ppmtoxpm</A></B>,
+<B><A HREF="pamcomp.html">pamcomp</A></B>,
+<B><A HREF="ppm.html">ppm</A></B>
+
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Copyright (C) 1991 by Jef Poskanzer.
+
+<P>Upgraded to work with XPM version 3 by
+Arnaud&nbsp;Le&nbsp;Hors&nbsp;&lt;<A
+HREF="mailto:lehors@mirsa.inria.fr">lehors@mirsa.inria.fr</A>&gt;, Tue
+Apr 9 1991.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">LIMITATIONS</A>
+<LI><A HREF="#lbAG">SEE ALSO</A>
+<LI><A HREF="#lbAH">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/xvminitoppm.html b/xvminitoppm.html
new file mode 100644
index 00000000..fe4eda19
--- /dev/null
+++ b/xvminitoppm.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Xvminitoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>xvminitoppm</H1>
+Updated: 02 April 2006
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<H2>NAME</H2>
+
+xvminitoppm - convert an XV &quot;thumbnail&quot; picture to PPM
+
+<H2 id="synopsis">SYNOPSIS</H2>
+
+<B>xvminitoppm</B>
+
+[<I>xvminipic</I>]
+
+<H2 id="description">DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>xvminittoppm</b> reads an XV &quot;thumbnail&quot; picture (a
+miniature picture generated by the &quot;VisualSchnauzer&quot;
+browser) as input and produces a PPM image as output.
+
+<H2 id="seealso">SEE ALSO</H2>
+
+<A HREF="pamtoxvmini.html">pamtoxvmini</A>, 
+<A HREF="ppm.html">ppm</A>, 
+<b>xv</b> manual
+
+<h2 id="history">HISTORY</h2>
+
+<p>A program of this name was written in 1993 by Ingo Wilken and was
+part of Netpbm until Release 10.34 (April 2006).  At that time, it was
+replaced in Netpbm by the current program, which was written by Bryan
+Henderson.  The function of the newer program is identical to that of
+the older one; the reason for the replacement is that the newer one is
+easier to maintain.
+
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#synopsis">SYNOPSIS</A>
+<LI><A HREF="#description">DESCRIPTION</A>
+<LI><A HREF="#seealso">SEE ALSO</A>
+<LI><A HREF="#history">HISTORY</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/xwdtopnm.html b/xwdtopnm.html
new file mode 100644
index 00000000..3b28615d
--- /dev/null
+++ b/xwdtopnm.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Xwdtopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>xwdtopnm</H1>
+Updated: 21 October 2003
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+xwdtopnm - convert an X11 or X10 window dump file to a PNM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>xwdtopnm</B>
+[<b>-verbose</b>]
+[<b>-headerdump</b>]
+[<I>xwdfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>xwdtopnm</b> reads an X11 or X10 window dump file as input and
+produces a PNM image as output.  The type of the output image depends
+on the input file - if it's black and white, the output is PBM.  If
+it's grayscale, the output is PGM.  Otherwise, it's PPM.  The program
+tells you which type it is writing.
+
+<P>Using this program, you can convert anything you can display on an
+X workstation's screen into a PNM image.  Just display whatever you're
+interested in, run the <b>xwd</b> program to capture the contents of
+the window, run it through <b>xwdtopnm</b>, and then use <b>pamcut</b>
+to select the part you want.
+
+<p>Note that a pseudocolor XWD image (typically what you get when you
+make a dump of a pseudocolor X window) has maxval 65535, which means
+the PNM file that <b>xwdtopnm</b> generates has maxval 65535.  Many
+older image processing programs (that aren't part of the Netpbm
+package and don't use the Netpbm programming library) don't know how
+to handle a PNM image with maxval greater than 255 (because there are
+two bytes instead of one for each sample in the image).  So you may
+want to run the output of <b>xwdtopnm</b> through <b>pamdepth</b>
+before feeding it to one of these old programs.
+
+<A NAME="options">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<dl>
+<dt><b>-verbose</b>
+<dd>This option causes <b>xwdtopnm</b> to display handy information about the
+input image and the conversion process
+
+<dt><b>-headerdump</b>
+
+<dd>This option causes <b>xwdtopnm</b> to display the contents of the
+X11 header.  It has no effect when the input is X10.  This option was
+new in Netpbm 10.26 (December 2004).
+
+</dl>
+
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnmtoxwd.html">pnmtoxwd</A>,
+<A HREF="pnm.html">pnm</A>,
+<b>xwd</b> man page
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1989, 1991 by Jef Poskanzer.
+
+<HR>
+
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#options">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/ybmtopbm.html b/ybmtopbm.html
new file mode 100644
index 00000000..d55cc08b
--- /dev/null
+++ b/ybmtopbm.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Ybmtopbm User Manual</TITLE></HEAD>
+<BODY>
+<H1>ybmtopbm</H1>
+Updated: 06 March 1990
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+ybmtopbm - convert a Bennet Yee &quot;face&quot; file to PBM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>ybmtopbm</B>
+
+[<I>facefile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>ymtopbm</b> reads a file acceptable to the <b>face</b> and
+<b>xbm</b> programs by Bennet Yee (<A
+HREF="mailto:bsy+@cs.cmu.edu">bsy+@cs.cmu.edu</A>).  and writes a PBM
+image as output.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pbmtoybm.html">pbmtoybm</A>, 
+<A HREF="pbm.html">pbm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+<P>Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+x<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/yuvsplittoppm.html b/yuvsplittoppm.html
new file mode 100644
index 00000000..f5fc19da
--- /dev/null
+++ b/yuvsplittoppm.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Yuvsplittoppm User Manual</TITLE>
+</HEAD><BODY>
+<H1>yuvsplittoppm</H1>
+Updated: 26 August 93
+<BR>
+<A HREF="#index">Table Of Contents</A>
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+yuvsplittoppm - convert separate Y, U, and V files into a PPM image
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>yuvsplittoppm </B>
+
+<I>basename</i> 
+<i>width</i> 
+<i>height</I>
+[<b>-ccir601</b>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>yuvsplittoppm</b> reads three files, containing the YUV
+components, as input.  These files are <I>basename</I>.Y,
+<I>basename</I>.U, and <I>basename</I>.V.  Produces a portable pixmap
+on stdout.
+
+<P>Since the YUV files are raw files, the dimensions <I>width</I> and
+<I>height</I> must be specified on the command line.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-ccir601</B>
+
+<DD>
+Assumes that the YUV triplets are scaled into the smaller range of the
+CCIR 601 (MPEG) standard. Else, the JFIF (JPEG) standard is assumed.
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtoyuvsplit.html">ppmtoyuvsplit</A>, 
+<A HREF="yuvtoppm.html">yuvtoppm</A>, <A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Marcel Wijkstra &lt;<A
+HREF="mailto:wijkstra@fwi.uva.nl">wijkstra@fwi.uva.nl</A>&gt;, based
+on <b>ppmtoyuvsplit</b>.
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/yuvtoppm.html b/yuvtoppm.html
new file mode 100644
index 00000000..4c2fa594
--- /dev/null
+++ b/yuvtoppm.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Yuvtoppm User Manual</TITLE></HEAD>
+<BODY>
+<H1>yuvtoppm</H1>
+Updated: 25 March 91
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+yuvtoppm - convert Abekas YUV bytes to PPM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>yuvtoppm</B>
+
+<I>width</i> 
+<i>height</i>
+[<I>imagedata</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<p><b>yuvtoppm</b> reads raw Abekas YUV bytes as input and produces a
+PPM image as output.  The input file is just YUV bytes.  You have to
+specify the width and height on the command line, since the program
+obviously can't get them from the file.  <b>yuvotppm</b> assumes the
+maxval of the input is 255.
+
+<p>The <a href="ppmtoyuv.html"><b>ppmtoyuv</b> manual</a> tells a little
+about the Abekas YUV format.
+
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="ppmtoyuv.html">ppmtoyuv</A>, 
+<A HREF="ppm.html">ppm</A>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Marc Boucher &lt;<A
+HREF="mailto:marc@PostImage.COM">marc@PostImage.COM</A>&gt;, based on
+Example Conversion Program, A60/A64 Digital Video Interface Manual,
+page 69.
+
+<p>Copyright (C) 1991 by DHD PostImage Inc.
+
+<P>Copyright (C) 1987 by Abekas Video Systems Inc.
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">SEE ALSO</A>
+<LI><A HREF="#lbAF">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/zeisstopnm.html b/zeisstopnm.html
new file mode 100644
index 00000000..a6443222
--- /dev/null
+++ b/zeisstopnm.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML><HEAD><TITLE>Zeisstopnm User Manual</TITLE></HEAD>
+<BODY>
+<H1>zeisstopnm</H1>
+Updated: 15 June 1993
+<BR>
+<A HREF="#index">Table Of Contents</A>
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+zeisstopnm - convert a Zeiss confocal file to PNM
+
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>zeisstopnm</B>
+
+[<b>-pgm</b> | <b>-ppm</b>]
+
+[<I>zeissfile</I>]
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+<p>This program is part of <a href="index.html">Netpbm</a>.
+
+<P><B>zeisstopnm</B> reads a Zeiss confocal file as input and produces
+a PNM image as output.  
+
+<p>By default, the exact type of the output depends on the input file:
+If it's grayscale a PGM image; otherwise a PPM.  The program tells you
+which type it is writing.  You can override the default with the 
+<b>-pgm</b> and <b>-ppm</b> options.
+
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-pgm</B>
+
+<DD>Force the output to be in PGM format.
+
+<DT><B>-ppm</B>
+
+<DD>
+Force the output to be in PPM format.
+
+</DL>
+
+<A NAME="lbAF">&nbsp;</A>
+<H2>SEE ALSO</H2>
+
+<A HREF="pnm.html">pnm</A>
+<A NAME="lbAG">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Copyright (C) 1993 by Oliver Trepte
+
+<HR>
+<A NAME="index">&nbsp;</A>
+<H2>Table Of Contents</H2>
+<UL>
+<LI><A HREF="#lbAB">NAME</A>
+<LI><A HREF="#lbAC">SYNOPSIS</A>
+<LI><A HREF="#lbAD">DESCRIPTION</A>
+<LI><A HREF="#lbAE">OPTIONS</A>
+<LI><A HREF="#lbAF">SEE ALSO</A>
+<LI><A HREF="#lbAG">AUTHOR</A>
+</UL>
+</BODY>
+</HTML>