Bläddra i källkod

Add man pages for the majority of utilities

rdb 11 år sedan
förälder
incheckning
794b00805e
100 ändrade filer med 3103 tillägg och 9 borttagningar
  1. 21 0
      doc/man/bam-info.1
  2. 31 0
      doc/man/bam2egg.1
  3. 75 0
      doc/man/dae2egg.1
  4. 16 0
      doc/man/dxf-points.1
  5. 72 0
      doc/man/dxf2egg.1
  6. 32 0
      doc/man/egg-crop.1
  7. 21 0
      doc/man/egg-list-textures.1
  8. 77 0
      doc/man/egg-make-tube.1
  9. 76 0
      doc/man/egg-mkfont.1
  10. 150 0
      doc/man/egg-optchar.1
  11. 91 0
      doc/man/egg-palettize.1
  12. 76 0
      doc/man/egg-qtess.1
  13. 42 0
      doc/man/egg-rename.1
  14. 66 0
      doc/man/egg-retarget-anim.1
  15. 81 0
      doc/man/egg-texture-cards.1
  16. 75 0
      doc/man/egg-topstrip.1
  17. 117 0
      doc/man/egg-trans.1
  18. 81 0
      doc/man/egg2bam.1
  19. 49 0
      doc/man/egg2c.1
  20. 29 0
      doc/man/egg2dxf.1
  21. 26 0
      doc/man/egg2flt.1
  22. 29 0
      doc/man/egg2obj.1
  23. 35 0
      doc/man/egg2x.1
  24. 15 0
      doc/man/flt-info.1
  25. 39 0
      doc/man/flt-trans.1
  26. 94 0
      doc/man/flt2egg.1
  27. 44 0
      doc/man/fltcopy.1
  28. 14 0
      doc/man/image-info.1
  29. 29 0
      doc/man/image-resize.1
  30. 35 0
      doc/man/image-trans.1
  31. 186 0
      doc/man/interrogate.1
  32. 69 0
      doc/man/interrogate_module.1
  33. 12 0
      doc/man/lwo-scan.1
  34. 91 0
      doc/man/lwo2egg.1
  35. 56 0
      doc/man/make-prc-key.1
  36. 156 0
      doc/man/multify.1
  37. 75 0
      doc/man/obj2egg.1
  38. 38 0
      doc/man/p3dcparse.1
  39. 1 0
      doc/man/pdecrypt.1
  40. 92 0
      doc/man/pencrypt.1
  41. 17 0
      doc/man/pfm-bba.1
  42. 70 0
      doc/man/pfm-trans.1
  43. 1 0
      doc/man/punzip.1
  44. 50 0
      doc/man/pview.1
  45. 64 0
      doc/man/pzip.1
  46. 22 0
      doc/man/softcvs.1
  47. 40 0
      doc/man/test_interrogate.1
  48. 20 0
      doc/man/text-stats.1
  49. 19 0
      doc/man/vrml-trans.1
  50. 72 0
      doc/man/vrml2egg.1
  51. 17 0
      doc/man/x-trans.1
  52. 103 0
      doc/man/x2egg.1
  53. 5 0
      makepanda/makepanda.py
  54. 1 0
      pandatool/src/bam/bamInfo.cxx
  55. 1 0
      pandatool/src/bam/bamToEgg.cxx
  56. 1 0
      pandatool/src/bam/eggToBam.cxx
  57. 1 0
      pandatool/src/bam/ptsToBam.cxx
  58. 1 0
      pandatool/src/cvscopy/testCopy.cxx
  59. 1 0
      pandatool/src/daeprogs/daeToEgg.cxx
  60. 1 0
      pandatool/src/daeprogs/eggToDAE.cxx
  61. 1 0
      pandatool/src/dxfprogs/dxfPoints.cxx
  62. 1 0
      pandatool/src/dxfprogs/dxfToEgg.cxx
  63. 1 0
      pandatool/src/dxfprogs/eggToDXF.cxx
  64. 1 0
      pandatool/src/egg-mkfont/eggMakeFont.cxx
  65. 1 0
      pandatool/src/egg-optchar/eggOptchar.cxx
  66. 1 0
      pandatool/src/egg-palettize/eggPalettize.cxx
  67. 6 5
      pandatool/src/egg-qtess/eggQtess.cxx
  68. 1 0
      pandatool/src/eggprogs/eggCrop.cxx
  69. 1 0
      pandatool/src/eggprogs/eggListTextures.cxx
  70. 1 0
      pandatool/src/eggprogs/eggMakeTube.cxx
  71. 1 0
      pandatool/src/eggprogs/eggRename.cxx
  72. 1 0
      pandatool/src/eggprogs/eggRetargetAnim.cxx
  73. 1 0
      pandatool/src/eggprogs/eggTextureCards.cxx
  74. 1 0
      pandatool/src/eggprogs/eggToC.cxx
  75. 1 0
      pandatool/src/eggprogs/eggTopstrip.cxx
  76. 1 0
      pandatool/src/eggprogs/eggTrans.cxx
  77. 1 0
      pandatool/src/fltprogs/eggToFlt.cxx
  78. 1 0
      pandatool/src/fltprogs/fltCopy.cxx
  79. 1 0
      pandatool/src/fltprogs/fltInfo.cxx
  80. 1 0
      pandatool/src/fltprogs/fltToEgg.cxx
  81. 1 0
      pandatool/src/fltprogs/fltTrans.cxx
  82. 1 0
      pandatool/src/imageprogs/imageFixHiddenColor.cxx
  83. 1 0
      pandatool/src/imageprogs/imageInfo.cxx
  84. 1 0
      pandatool/src/imageprogs/imageResize.cxx
  85. 1 0
      pandatool/src/imageprogs/imageTrans.cxx
  86. 1 0
      pandatool/src/imageprogs/imageTransformColors.cxx
  87. 1 0
      pandatool/src/lwoprogs/lwoScan.cxx
  88. 1 0
      pandatool/src/lwoprogs/lwoToEgg.cxx
  89. 1 0
      pandatool/src/mayaprogs/eggToMaya.cxx
  90. 1 0
      pandatool/src/mayaprogs/mayaCopy.cxx
  91. 1 0
      pandatool/src/mayaprogs/mayaToEgg.cxx
  92. 1 0
      pandatool/src/mayaprogs/mayaToEgg_server.cxx
  93. 1 0
      pandatool/src/miscprogs/binToC.cxx
  94. 1 0
      pandatool/src/objprogs/eggToObj.cxx
  95. 1 0
      pandatool/src/objprogs/objToEgg.cxx
  96. 1 0
      pandatool/src/pfmprogs/pfmBba.cxx
  97. 1 0
      pandatool/src/pfmprogs/pfmTrans.cxx
  98. 133 3
      pandatool/src/progbase/programBase.cxx
  99. 6 1
      pandatool/src/progbase/programBase.h
  100. 1 0
      pandatool/src/progbase/test_prog.cxx

+ 21 - 0
doc/man/bam-info.1

@@ -0,0 +1,21 @@
+.\" Automatically generated by bam-info -write-bam
+.TH BAM-INFO 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+bam-info \- describe the contents of .bam files
+.SH SYNOPSIS
+\fBbam-info\fR [opts] input.bam [input.bam ... ]
+.SH DESCRIPTION
+This program scans one or more Bam files\-\-Panda's Binary Animation and Models native binary format\-\-and describes their contents.
+.SH OPTIONS
+.TP
+.B \-ls
+List the scene graph hierarchy in the bam file.
+.TP
+.B \-t
+List explicitly each transition in the hierarchy.
+.TP
+.B \-g
+Output verbose information about the each Geom in the Bam file.
+.TP
+.B \-h
+Display this help page.

+ 31 - 0
doc/man/bam2egg.1

@@ -0,0 +1,31 @@
+.\" Automatically generated by bam2egg -write-bam
+.TH BAM2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+bam2egg \- convert a native Panda .bam file to an .egg file
+.SH SYNOPSIS
+\fBbam2egg\fR [opts] input.bam output.egg
+.br
+\fBbam2egg\fR [opts] -o output.egg input.bam
+.br
+\fBbam2egg\fR [opts] input.bam >output.egg
+.SH DESCRIPTION
+This program converts native Panda bam files to egg.  The conversion is somewhat incomplete; running egg2bam followed by bam2egg should not be expected to yield the same egg file you started with.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input bam file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input bam file.  By default, this is taken from the Config.prc file, which is currently zup_right.
+.TP
+.B \-h
+Display this help page.

+ 75 - 0
doc/man/dae2egg.1

@@ -0,0 +1,75 @@
+.\" Automatically generated by dae2egg -write-bam
+.TH DAE2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+dae2egg \- convert COLLADA assets into .egg files
+.SH SYNOPSIS
+\fBdae2egg\fR [opts] input.dae output.egg
+.br
+\fBdae2egg\fR [opts] -o output.egg input.dae
+.br
+\fBdae2egg\fR [opts] input.dae >output.egg
+.SH DESCRIPTION
+This program converts .dae files (COLLADA Digital Asset Exchange) to .egg.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input COLLADA file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.B \-invtrans
+Import the .dae file using inverted transparency. This is useful when importing COLLADA files from some authoring tools that export models with inverted transparency, such as Google SketchUp.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input COLLADA file.  Normally, this can be inferred from the file itself.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If this is specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input COLLADA file.  Normally, this can inferred from the file itself.
+.TP
+.B \-h
+Display this help page.

+ 16 - 0
doc/man/dxf-points.1

@@ -0,0 +1,16 @@
+.\" Automatically generated by dxf-points -write-bam
+.TH DXF-POINTS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+dxf-points \- extract points from AutoCAD .dxf files
+.SH SYNOPSIS
+\fBdxf-points\fR [opts] input.dxf > output.txt
+.br
+\fBdxf-points\fR [opts] -o output.txt input.dxf
+.br
+\fBdxf-points\fR [opts] input.dxf output.txt
+.SH DESCRIPTION
+This program reads an AutoCAD .dxf file and generates a simple list of all the points contained within it, one per line, to a text file, or to standard output.
+.SH OPTIONS
+.TP
+.B \-h
+Display this help page.

+ 72 - 0
doc/man/dxf2egg.1

@@ -0,0 +1,72 @@
+.\" Automatically generated by dxf2egg -write-bam
+.TH DXF2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+dxf2egg \- convert AutoCAD .dxf files to .egg files
+.SH SYNOPSIS
+\fBdxf2egg\fR [opts] input.dxf output.egg
+.br
+\fBdxf2egg\fR [opts] -o output.egg input.dxf
+.br
+\fBdxf2egg\fR [opts] input.dxf >output.egg
+.SH DESCRIPTION
+This program converts DXF (AutoCAD interchange format) to egg.  It only converts polygon data, with no fancy tricks.  DXF does not support hierarchical databases, so dxf2egg creates a single group at the root level for each layer in the DXF file.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input DXF file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input DXF file.  Normally, this can be inferred from the file itself.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If this is specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input DXF file.  Normally, this is z-up.
+.TP
+.B \-h
+Display this help page.

+ 32 - 0
doc/man/egg-crop.1

@@ -0,0 +1,32 @@
+.\" Automatically generated by egg-crop -write-bam
+.TH EGG-CROP 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-crop \- crop geometry in an .egg file
+.SH SYNOPSIS
+\fBegg-crop\fR [opts] -o output.egg input.egg
+.br
+\fBegg-crop\fR [opts] input.egg >output.egg
+.SH DESCRIPTION
+egg\-crop strips out all parts of an egg file that fall outside of an arbitrary bounding volume, specified with a minimum and maximum point in world coordinates.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-min " "x,y,z"
+Specify the minimum point.
+.TP
+.BI "\-max " "x,y,z"
+Specify the maximum point.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the egg file is written to standard output.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting egg file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is the same coordinate system as the input egg file.  If this is different from the input egg file, a conversion will be performed.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.B \-h
+Display this help page.

+ 21 - 0
doc/man/egg-list-textures.1

@@ -0,0 +1,21 @@
+.\" Automatically generated by egg-list-textures -write-bam
+.TH EGG-LIST-TEXTURES 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-list-textures \- list textures referenced by an .egg file
+.SH SYNOPSIS
+\fBegg-list-textures\fR [opts] input.egg
+.SH DESCRIPTION
+egg\-list\-textures reads an egg file and writes a list of the textures it references.  It is particularly useful for building up the textures.txa file used for egg\-palettize, since the output format is crafted to be compatible with that file's input format.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system to operate in.  This may be  one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is the coordinate system of the input egg file.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.B \-h
+Display this help page.

+ 77 - 0
doc/man/egg-make-tube.1

@@ -0,0 +1,77 @@
+.\" Automatically generated by egg-make-tube -write-bam
+.TH EGG-MAKE-TUBE 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-make-tube \- generate a tube or sphere from geometry in an .egg file
+.SH SYNOPSIS
+\fBegg-make-tube\fR [opts] output.egg
+.br
+\fBegg-make-tube\fR [opts] -o output.egg
+.br
+\fBegg-make-tube\fR [opts] >output.egg
+.SH DESCRIPTION
+egg\-make\-tube generates an egg file representing a "tube" model, a cylinder capped on both ends by hemispheres.  This is similar in shape to the CollisionTube object within Panda.
+.PP
+This program can also generate spheres if you omit \-b; in this case, you are generating a degenerate tube of length 0.
+.SH OPTIONS
+.TP
+.BI "\-a " "x,y,z"
+Specify the first endpoint of the tube.
+.TP
+.BI "\-b " "x,y,z"
+Specify the second endpoint of the tube.
+.TP
+.BI "\-r " "radius"
+Specify the radius of the tube.  The tube will extend beyond the endpoints in each direction by the amount of radius.
+.TP
+.BI "\-slices " "count"
+Specify the number of slices appearing radially around the tube.
+.TP
+.BI "\-crings " "count"
+Specify the number of rings appearing in each endcap of the tube.
+.TP
+.BI "\-trings " "count"
+Specify the number of rings appearing in the cylindrical body of the tube.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting egg file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is y-up.
+.TP
+.B \-h
+Display this help page.

+ 76 - 0
doc/man/egg-mkfont.1

@@ -0,0 +1,76 @@
+.\" Automatically generated by egg-mkfont -write-bam
+.TH EGG-MKFONT 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-mkfont \- generates .egg files with rasterized font glyphs
+.SH SYNOPSIS
+\fBegg-mkfont\fR [opts] -o output.egg font
+.br
+\fBegg-mkfont\fR [opts] font output.egg
+.SH DESCRIPTION
+egg\-mkfont uses the FreeType library to generate an egg file and a series of texture images from a font file input, such as a TTF file.  The resulting egg file can be loaded in Panda as a font for rendering text, even if FreeType is not compiled into the executing Panda.
+.PP
+egg\-mkfont will normally run the generated egg file through egg\-palettize automatically as part of the generation process.  This collects the individual glyph textures into a small number of texture maps.  If you intend to run the font through egg\-palettize yourself later, you may choose to omit this step.
+.SH OPTIONS
+.TP
+.BI "\-fg " "r,g,b[,a]"
+Specifies the foreground color of the generated texture map.  The default is white: 1,1,1,1, which leads to the most flexibility as the color can be modulated at runtime to any suitable color.
+.TP
+.BI "\-bg " "r,g,b[,a]"
+Specifies the background color of the generated texture map.  The default is transparent: 1,1,1,0, which allows the text to be visible against any color background by placing a polygon of a suitable color behind it.  If the alpha component of either -fg or -bg is not 1, the generated texture images will include an alpha component; if both colors specify an alpha component of 1 (or do not specify an alpha compenent), then the generated images will not include an alpha component.
+.TP
+.BI "\-interior " "r,g,b[,a]"
+Specifies the color to render the interior part of a hollow font.  This is a special effect that involves analysis of the bitmap after the font has been rendered, and so is more effective when the pixel size is large.  It also implies -noaa (but you can use a scale factor with -sf to achieve antialiasing).
+.TP
+.BI "\-chars " "range"
+Specifies the characters of the font that are used.  The range specification may include combinations of decimal or hex unicode values (where hex values are identified with a leading 0x), separated by commas and hyphens to indicate ranges, e.g. '32-126,0xfa0-0xfff'.  It also may specify ranges of ASCII characters by enclosing them within square brackets, e.g. '[A-Za-z0-9]'.  If this is not specified, the default is the set of ASCII characters.
+.TP
+.BI "\-extra " "file.egg"
+Specifies additional externally-painted glyphs to mix into the generated egg file.  The named egg file is expected to contain one or more groups, each of which is named with the decimal unicode number of a character and should contain one polygon.  These groups are simply copied into the output egg file as if they were generated locally.  This option may be repeated.
+.TP
+.BI "\-ppu " "pixels"
+Specify the pixels per unit.  This is the number of pixels in the generated texture map that are used for each onscreen unit (or each 10 points of font; see -ps).  Setting this number larger results in an easier-to-read font, but at the cost of more texture memory.  The default is 30.
+.TP
+.BI "\-ps " "size"
+Specify the point size of the resulting font.  This controls the apparent size of the font when it is rendered onscreen.  By convention, a 10 point font is 1 screen unit high, so the default is 10.
+.TP
+.BI "\-pm " "n"
+The number of extra pixels around a single character in the generated polygon.  This may be a floating-point number.  The default is 1.
+.TP
+.BI "\-tm " "n"
+The number of extra pixels around each character in the texture map.  This may only be an integer.  The default is 2.  This is meaningful when -nopal is also used; in the normal case, use -pm to control both the polygon size and the texture map spacing.
+.TP
+.BI "\-rm " "n"
+The amount of padding in screen units to place around the glyph when rendered.  This differs from -pm in that it has no effect on the generated texture map, only on the generated egg.  Use this in order to space the characters out in case they appear to be too close together when rendered. The default is 0.
+.TP
+.BI "\-sf " "factor"
+The scale factor of the generated image.  This is the factor by which the font image is generated oversized, then reduced to its final size, to improve antialiasing.  If the specified font contains one or more fixed-size fonts instead of a scalable font, the scale factor may be automatically adjusted as necessary to scale the closest-matching font to the desired pixel size.  The default is 2.
+.TP
+.B \-noaa
+Disable low-level antialiasing by the Freetype library.  This is unrelated to the antialiasing that is applied due to the scale factor specified by -sf; you may have either one, neither, or both kinds of antialiasing enabled.
+.TP
+.B \-nopal
+Don't run egg-palettize automatically on the output file, but just output the raw egg file and all of its individual texture images, one for each glyph.
+.TP
+.B \-nr
+Don't actually reduce the images after applying the scale factor, but leave them at their inflated sizes.  Presumably you will reduce them later, for instance with egg-palettize.
+.TP
+.BI "\-gp " "pattern"
+The pattern to be used to generate the glyph texture images.  This string will be passed to sprintf to generate the actual file name; it should contain the string %d or %x (or some variant such as %03d) which will be filled in with the Unicode number of each symbol.  If it is omitted, the default is based on the name of the egg file.  This is used only if -nopal is specified; in the normal case, without -nopal, use -pp instead.
+.TP
+.BI "\-pp " "pattern"
+The pattern to be used to generate the palette texture images.  This string is effectively passed to egg-palettize as the -tn option, and thus should contain %i for the palette index number.  This is used if -nopal is not specified.
+.TP
+.BI "\-palsize " "xsize,ysize"
+Specify the size of the palette texture images.  This is used if -nopal is not specified.
+.TP
+.BI "\-face " "index"
+Specify the face index of the particular face within the font file to use.  Some font files contain multiple faces, indexed beginning at 0.  The default is face 0.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting egg file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is y-up.
+.TP
+.B \-h
+Display this help page.

+ 150 - 0
doc/man/egg-optchar.1

@@ -0,0 +1,150 @@
+.\" Automatically generated by egg-optchar -write-bam
+.TH EGG-OPTCHAR 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-optchar \- optimizes character models and animations in .egg files
+.SH SYNOPSIS
+\fBegg-optchar\fR -o output.egg [opts] input.egg
+.br
+\fBegg-optchar\fR -d dirname [opts] file.egg [file.egg ...]
+.br
+\fBegg-optchar\fR -inplace [opts] file.egg [file.egg ...]
+.br
+\fBegg-optchar\fR -inf input_list_filename [opts]
+.SH DESCRIPTION
+egg\-optchar performs basic optimizations of a character model and its associated animations, primarily by analyzing the animation tables and removing unneeded joints and/or morphs.  It can also perform basic restructuring operations on the character hierarchy.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow any of the named egg files to have absolute pathnames.  If any do, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-ls
+List the joint hierarchy instead of performing any operations.
+.TP
+.B \-lsv
+List the joint hierarchy along with an indication of the properties each joint.
+.TP
+.B \-lsp
+List the existing joint hierarchy as a series of -p joint,parent commands, suitable for pasting into an egg-optchar command line.
+.TP
+.BI "\-keep " "joint[,joint...]"
+Keep the named joints (or sliders) in the character, even if they do not appear to be needed by the animation.
+.TP
+.BI "\-drop " "joint[,joint...]"
+Removes the named joints or sliders, even if they appear to be needed.
+.TP
+.BI "\-expose " "joint[,joint...]"
+Expose the named joints by flagging them with a DCS attribute, so each one can be found in the scene graph when the character is loaded, and objects can be parented to it.  This implies -keep.
+.TP
+.BI "\-suppress " "joint[,joint...]"
+The opposite of suppress, this prevents the named joints from being created with an implicit DCS attribute, even if they contain rigid geometry.  The default is to create an implicit node for any joint that contains rigid geometry, to take advantage of display list and/or vertex buffer caching.  This does not imply -keep.
+.TP
+.BI "\-flag " "node[,node...][=name]"
+Assign the indicated name to the geometry within the given nodes.  This will make the geometry visible as a node in the resulting character model when it is loaded in the scene graph (normally, the node hierarchy is suppressed when loading characters).  This is different from -expose in that it reveals geometry rather than joints; the revealed node can be hidden or its attributes changed at runtime, but it will be animated by its vertices, not the node, so objects parented to this node will not inherit its animation.
+.TP
+.BI "\-defpose " "anim.egg,frame"
+Specify the model's default pose.  The pose is taken from the indicated frame of the named animation file (which must also be named separately on the command line).  The pose will be held by the model in the absence of any animation, and need not be the same pose in which the model was originally skinned.
+.TP
+.B \-preload
+Add an <AnimPreload> entry for each animation to the model file(s).  This can be used at runtime to support asynchronous loading and binding of animation channels.
+.TP
+.BI "\-zero " "joint[,hprxyzijkabc]"
+Zeroes out the animation channels for the named joint.  If a subset of the component letters hprxyzijkabc is included, the operation is restricted to just those components; otherwise the entire transform is cleared.
+.TP
+.B \-keepall
+Keep all joints and sliders in the character, except those named explicitly by -drop.
+.TP
+.BI "\-p " "joint,parent"
+Moves the named joint under the named parent joint.  Use "-p joint," to reparent a joint to the root.  The joint transform is recomputed appropriately under its new parent so that the animation is not affected (the effect is similar to NodePath::wrt_reparent_to).
+.TP
+.BI "\-new " "joint,source"
+Creates a new joint under the named parent joint.  The new joint will inherit the same net transform as its parent.
+.TP
+.BI "\-rename " "joint,newjoint"
+Renames the indicated joint, if present, to the given name.
+.TP
+.BI "\-q " "quantum"
+Quantize joint membership values to the given unit.  This is the smallest significant change in joint membership.  There can be a significant performance (and memory utilization) runtime benefit for eliminating small differences in joint memberships between neighboring vertices.  The default is 0.01; specifying 0 means to preserve the original values.
+.TP
+.BI "\-qa " "quantum[,hprxyzijkabc]"
+Quantizes animation channels to the given unit.  This rounds each of the named components of all joints to the nearest multiple of unit.  There is no performance benefit, and little compression benefit, for doing this; and this may introduce visible artifacts to the animation.  However, sometimes it is a useful tool for animation analysis and comparison.  This option may be repeated several times to quantize different channels by a different amount.
+.TP
+.BI "\-dart " "[default, sync, nosync, or structured]"
+change the dart value in the given eggs
+.TP
+.B \-fixrest
+Specify this to force all the initial rest frames of the various model files to the same value as the first model specified.  This is a fairly drastic way to repair models whose initial rest frame values are completely bogus, but should not be performed when the input models are correct.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  This is only valid when there is only one input egg file on the command line.  If you want to process multiple files simultaneously, you must use either -d or -inplace.
+.TP
+.BI "\-d " "dirname"
+Specify the name of the directory in which to write the resulting egg files.  If you are processing only one egg file, this may be omitted in lieu of the -o option.  If you are processing multiple egg files, this may be omitted only if you specify -inplace instead.
+.TP
+.B \-inplace
+If this option is given, the input egg files will be rewritten in place with the results.  This obviates the need to specify -d for an output directory; however, it's risky because the original input egg files are lost.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system to operate in.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.BI "\-inf " "filename"
+Reads input args from a text file instead of the command line.  Useful for really, really large lists of args that break the OS-imposed limits on the length of command lines.
+.TP
+.B \-h
+Display this help page.

+ 91 - 0
doc/man/egg-palettize.1

@@ -0,0 +1,91 @@
+.\" Automatically generated by egg-palettize -write-bam
+.TH EGG-PALETTIZE 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-palettize \- pack textures from various .egg models into palette images
+.SH SYNOPSIS
+\fBegg-palettize\fR [opts] file.egg [file.egg ...]
+.SH DESCRIPTION
+egg\-palettize attempts to pack several texture maps from various models together into one or more palette images, for improved rendering performance and ease of texture management.  It can also resize textures and convert them to another image file format, whether or not they are actually placed on a palette, and can manage some simple texture properties, like mipmapping and rendering format.
+.PP
+egg\-palettize reads a texture attributes file, usually named textures.txa, which contains instructions from the user about resizing particular textures.  Type egg\-palettize \-H for an introduction to the syntax of this file.
+.PP
+The palettization information from previous runs is recorded in a file named textures.boo (assuming the attributes file is named textures.txa); a complete record of every egg file and every texture that has been referenced is kept here.  This allows the program to intelligently manage the multiple egg files that may reference the textures in question.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow any of the named egg files to have absolute pathnames.  If any do, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-af " "filename"
+Read the indicated file as the .txa file.  The default is textures.txa.
+.TP
+.BI "\-a " "filename"
+Deprecated option.  This is the same as -af.
+.TP
+.BI "\-as " "script"
+Accept the script specified on the command line as the contents of the .txa file, instead of reading a file on disk.  This implies -nodb and -opt.
+.TP
+.B \-nodb
+Don't read or record the state information to a .boo file.  By default, the palettization information is recorded so it can be preserved between multiple invocations of egg-palettize.  If you specify this parameter, all the egg files to be palettized together must be named at the same time.  This also implies -opt, since there's no point in not making an optimal packing if you won't be preserving the state for future adjustments.
+.TP
+.BI "\-tn " "pattern"
+Specify the name to generate for each palette image.  The string should contain %g for the group name, %p for the page name, and %i for the index within the page.  The extension is inferred from the image type.  The default is '%g_palette_%p_%i'.
+.TP
+.B \-pi
+Do not process anything, but instead report the detailed palettization information written in the state file.
+.TP
+.B \-s
+Do not process anything, but report statistics on palette and texture utilization from the state file.
+.TP
+.B \-R
+Remove the named egg files from the previously-generated state data file.
+.TP
+.BI "\-d " "dirname"
+The directory in which to write the palettized egg files.  This is only necessary if more than one egg file is processed at the same time; if it is included, each egg file will be processed and written into the indicated directory.
+.TP
+.BI "\-dm " "dirname"
+The directory in which to place all maps: generated palettes, as well as images which were not placed on palettes (but may have been resized).  If this contains the string %g, this will be replaced with the 'dir' string associated with a palette group; see egg-palettize -H.
+.TP
+.BI "\-ds " "dirname"
+The directory to write palette shadow images to.  These are working copies of the palette images, useful when the palette image type is a lossy-compression type like JPEG; you can avoid generational loss of quality on the palette images with each pass through the palettes by storing these extra shadow images in a lossless image type.  This directory is only used if the :shadowtype keyword appears in the .txa file.
+.TP
+.BI "\-dr " "dirname"
+The directory to make map filenames relative to when writing egg files.  If specified, this should be an initial substring of -dm.
+.TP
+.BI "\-g " "group"
+The default palette group that egg files will be assigned to if they are not explicitly assigned to any other group.
+.TP
+.BI "\-gdir " "name"
+The "dir" string to associate with the default palette group specified with -g, if no other dir name is given in the .txa file.
+.TP
+.B \-all
+Consider all the textures referenced in all egg files that have ever been palettized, not just the egg files that appear on the command line.
+.TP
+.B \-egg
+Regenerate all egg files that need modification, even those that aren't named on the command line.
+.TP
+.B \-redo
+Force a regeneration of each image from its original source(s).  When used in conjunction with -egg, this also forces each egg file to be regenerated.
+.TP
+.B \-opt
+Force an optimal packing.  By default, textures are added to existing palettes without disturbing them, which can lead to suboptimal packing.  Including this switch forces the palettes to be rebuilt if necessary to optimize the packing, but this may invalidate other egg files which share this palette.
+.TP
+.B \-omitall
+Re-enables the flag to omit all textures.  This flag is normally on by default, causing nothing actually to be palettized, until the first time egg-palettize is run with the -opt flag, which turns off the omitall flag and thenceforth allows textures to be combined into palettes.  Specifying this flag restores the original behavior of keeping every texture as a separate image (which is convenient for development).
+.TP
+.B \-H
+Describe the syntax of the attributes file.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  This is only valid when there is only one input egg file on the command line.  If you want to process multiple files simultaneously, you must use either -d or -inplace.
+.TP
+.B \-inplace
+If this option is given, the input egg files will be rewritten in place with the results.  This obviates the need to specify -d for an output directory; however, it's risky because the original input egg files are lost.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system to operate in.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.
+.TP
+.BI "\-inf " "filename"
+Reads input args from a text file instead of the command line.  Useful for really, really large lists of args that break the OS-imposed limits on the length of command lines.
+.TP
+.B \-h
+Display this help page.

+ 76 - 0
doc/man/egg-qtess.1

@@ -0,0 +1,76 @@
+.\" Automatically generated by egg-qtess -write-bam
+.TH EGG-QTESS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-qtess \- tesselate NURBS surfaces in .egg files
+.SH SYNOPSIS
+\fBegg-qtess\fR [opts] -o output.egg input.egg
+.br
+\fBegg-qtess\fR [opts] input.egg >output.egg
+.SH DESCRIPTION
+egg\-qtess reads an egg file, tessellates all of its NURBS surfaces using a simple uniform tessellation, and outputs a polygonal egg file.
+.PP
+Characters are supported, soft\-skinned and otherwise; joint ownership is computed correctly for each new polygon vertex.  Primitives other than NURBS surfaces appearing in the egg file are unaffected.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-f " "filename"
+Read the indicated parameter file.  Type egg-qtess -H to print a description of the parameter file format.
+.TP
+.BI "\-up " "subdiv"
+Specify a uniform subdivision per patch (isoparam).  Each NURBS surface is made up of N x M patches, each of which is divided into subdiv x subdiv quads.  A fractional number is allowed.
+.TP
+.BI "\-us " "subdiv"
+Specify a uniform subdivision per surface.  Each NURBS surface is subdivided into subdiv x subdiv quads, regardless of the number of isoparams it has.  A fractional number is meaningless.
+.TP
+.BI "\-t " "tris"
+Specify an approximate number of triangles to produce.  This is the total number of triangles for the entire egg file, including those surfaces that have already been given an explicit tessellation by a parameter file.
+.TP
+.B \-ap
+Attempt to automatically place tessellation lines where they'll do the most good on each surface (once the number of polygons for the surface has already been determined).
+.TP
+.B \-ad
+Attempt to automatically distribute polygons among the surfaces where they are most needed according to curvature and size, instead of according to the number of isoparams.  This only has meaning when used in conjunction with -t.
+.TP
+.BI "\-ar " "ratio"
+Specify the ratio of dominance of size to curvature for -ap and -ad.  A value of 0 forces placement by curvature only; a very large value (like 1000) forces placement by size only.  The default is 5.0.
+.TP
+.B \-e
+Respect subdivision parameters given in the egg file.  If this is specified, the egg file may define the effective number of patches of each NURBS entry.  This can be used alone or in conjunction with -u or -t to fine-tune the uniform tessellation on a per-surface basis.  (This is ignored if -ad is in effect.)
+.TP
+.B \-q
+Instead of writing an egg file, generate a parameter file for output.
+.TP
+.B \-H
+Describe the format of the parameter file specified with -f.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the egg file is written to standard output.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting egg file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is the same coordinate system as the input egg file.  If this is different from the input egg file, a conversion will be performed.
+.TP
+.B \-h
+Display this help page.

+ 42 - 0
doc/man/egg-rename.1

@@ -0,0 +1,42 @@
+.\" Automatically generated by egg-rename -write-bam
+.TH EGG-RENAME 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-rename \- rename nodes in .egg files
+.SH SYNOPSIS
+\fBegg-rename\fR -o output.egg [opts] input.egg
+.br
+\fBegg-rename\fR -d dirname [opts] file.egg [file.egg ...]
+.br
+\fBegg-rename\fR -inplace [opts] file.egg [file.egg ...]
+.br
+\fBegg-rename\fR -inf input_list_filename [opts]
+.SH DESCRIPTION
+egg\-rename reads one or more egg files and writes back with modifiednode names. ie. suppressing prefix from all the nodes' names. 
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow any of the named egg files to have absolute pathnames.  If any do, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-strip_prefix " "name"
+strips out the prefix that is put on all nodes, by maya ext. ref
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  This is only valid when there is only one input egg file on the command line.  If you want to process multiple files simultaneously, you must use either -d or -inplace.
+.TP
+.BI "\-d " "dirname"
+Specify the name of the directory in which to write the resulting egg files.  If you are processing only one egg file, this may be omitted in lieu of the -o option.  If you are processing multiple egg files, this may be omitted only if you specify -inplace instead.
+.TP
+.B \-inplace
+If this option is given, the input egg files will be rewritten in place with the results.  This obviates the need to specify -d for an output directory; however, it's risky because the original input egg files are lost.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system to operate in.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.BI "\-inf " "filename"
+Reads input args from a text file instead of the command line.  Useful for really, really large lists of args that break the OS-imposed limits on the length of command lines.
+.TP
+.B \-h
+Display this help page.

+ 66 - 0
doc/man/egg-retarget-anim.1

@@ -0,0 +1,66 @@
+.\" Automatically generated by egg-retarget-anim -write-bam
+.TH EGG-RETARGET-ANIM 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-retarget-anim \- remove transformations from animation data in .egg files
+.SH SYNOPSIS
+\fBegg-retarget-anim\fR -o output.egg [opts] input.egg
+.br
+\fBegg-retarget-anim\fR -d dirname [opts] file.egg [file.egg ...]
+.br
+\fBegg-retarget-anim\fR -inplace [opts] file.egg [file.egg ...]
+.br
+\fBegg-retarget-anim\fR -inf input_list_filename [opts]
+.SH DESCRIPTION
+egg\-retarget\-anim reads a character model and its associated animation files, and removes the translations and scales from the animation files, replacing them with the translations and scales from the rest position of the character model.
+.PP
+This allows an animation that was generated for a model with one skeleton to be played successfully on a model with a different skeleton, provided that both skeletons have the same hierarchy and differ only in scales and/or translations of the various joints, and that scales and translations are not part of the per\-frame animations.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow any of the named egg files to have absolute pathnames.  If any do, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-r " "file.egg"
+Read the reference model from the indicated egg file.  All of the animations will be retargeted to match the indicated file.
+.TP
+.BI "\-keep " "joint[,joint...]"
+Preserve the full animation on the named joint(s).  This is especially appropriate for the root joint.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  This is only valid when there is only one input egg file on the command line.  If you want to process multiple files simultaneously, you must use either -d or -inplace.
+.TP
+.BI "\-d " "dirname"
+Specify the name of the directory in which to write the resulting egg files.  If you are processing only one egg file, this may be omitted in lieu of the -o option.  If you are processing multiple egg files, this may be omitted only if you specify -inplace instead.
+.TP
+.B \-inplace
+If this option is given, the input egg files will be rewritten in place with the results.  This obviates the need to specify -d for an output directory; however, it's risky because the original input egg files are lost.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system to operate in.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.BI "\-inf " "filename"
+Reads input args from a text file instead of the command line.  Useful for really, really large lists of args that break the OS-imposed limits on the length of command lines.
+.TP
+.B \-h
+Display this help page.

+ 81 - 0
doc/man/egg-texture-cards.1

@@ -0,0 +1,81 @@
+.\" Automatically generated by egg-texture-cards -write-bam
+.TH EGG-TEXTURE-CARDS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-texture-cards \- generate an .egg file containing texture cards
+.SH SYNOPSIS
+\fBegg-texture-cards\fR [opts] texture [texture ...] output.egg
+.br
+\fBegg-texture-cards\fR [opts] -o output.egg texture [texture ...]
+.br
+\fBegg-texture-cards\fR [opts] texture [texture ...] >output.egg
+.SH DESCRIPTION
+egg\-texture\-cards generates an egg file consisting of several square polygons, one for each texture name that appears on the command line.
+.PP
+This is a handy thing to have for importing texture images through egg\-palettize, even when those textures do not appear on any real geometry; it can also be used for creating a lot of simple polygons for rendering click buttons and similar interfaces.
+.SH OPTIONS
+.TP
+.BI "\-g " "left,right,bottom,top"
+Specifies the geometry of each polygon.  The default is a unit polygon centered on the origin: -0.5,0.5,-0.5,0.5.  Polygons are always created on the X-Y plane.  If -p is not also specified, all polygons will be the same size and shape.
+.TP
+.BI "\-p " "xpixels,ypixels"
+Indicates that polygons should be sized in proportion to the pixel size of the texture image.  This will potentially create a different size and shape polygon for each texture.  The coordinate pair represents the image size in pixels that will exactly fill up the polygon described with -g (or the default polygon if -g is not specified); smaller images will be given proportionately smaller polygons, and larger images will be given proportionately larger polygons.
+.TP
+.BI "\-suffix " "string"
+Normally, each polygon is given a name based on the basename of its corresponding texture's filename (without the filename extension).  This option specifies an ignorable suffix in the texture filename(s); if this suffix is present, it is not included in the polygon's name.  This option may be repeated multiple times.
+.TP
+.BI "\-c " "r,g,b[,a]"
+Specifies the color of each polygon.  The default is white: 1,1,1,1.
+.TP
+.BI "\-wm " "wrap"
+Indicates the wrap mode of the texture: "repeat", "clamp", or any of the other modes supported by egg syntax.  The default is to leave this unspecified.
+.TP
+.BI "\-wmu " "wrap_u"
+Indicates the wrap mode of the texture in the U direction.  This overrides -wm, if specified.
+.TP
+.BI "\-wmv " "wrap_v"
+Indicates the wrap mode of the texture in the V direction.  This overrides -wm, if specified.
+.TP
+.BI "\-minf " "filter"
+Indicates the minfilter mode of the texture: "linear", "mipmap", or any of the other modes supported by egg syntax.  The default is to leave this unspecified.
+.TP
+.BI "\-magf " "filter"
+Indicates the magfilter mode of the texture: "linear" or "nearest".  The default is to leave this unspecified.
+.TP
+.BI "\-aniso " "degree"
+Indicates the anisotropic degree of the texture.  The default is to leave this unspecified.
+.TP
+.BI "\-ql " "[default | fastest | normal | best]"
+Specifies the quality level of the texture.  This mainly affects the tinydisplay software renderer.
+.TP
+.BI "\-f " "format"
+Indicates the format for all textures: typical choices are "rgba12" or "rgb5" or "alpha".  The default is to leave this unspecified.
+.TP
+.BI "\-f1 " "format"
+Indicates the format for one-channel textures only.  If specified, this overrides the format specified by -f.
+.TP
+.BI "\-f2 " "format"
+Indicates the format for two-channel textures only.  If specified, this overrides the format specified by -f.
+.TP
+.BI "\-f3 " "format"
+Indicates the format for three-channel textures only.  If specified, this overrides the format specified by -f.
+.TP
+.BI "\-f4 " "format"
+Indicates the format for four-channel textures only.  If specified, this overrides the format specified by -f.
+.TP
+.B \-b
+Make the textured polygons backfaced (two-sided).
+.TP
+.BI "\-fps " "frame-rate"
+Normally, all of the texture cards are created as a series of nodes beneath a SequenceNode.  This allows all of the cards to be viewed, one at a time, if the output file is loaded in pview.  It also has the nice side-effect of creating an automatic texture flip that can be used directly by applications; use this parameter to specify the frame rate of that texture flip.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting egg file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is y-up.
+.TP
+.B \-h
+Display this help page.

+ 75 - 0
doc/man/egg-topstrip.1

@@ -0,0 +1,75 @@
+.\" Automatically generated by egg-topstrip -write-bam
+.TH EGG-TOPSTRIP 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-topstrip \- unapplies animation from a joint in an .egg file
+.SH SYNOPSIS
+\fBegg-topstrip\fR -o output.egg [opts] input.egg
+.br
+\fBegg-topstrip\fR -d dirname [opts] file.egg [file.egg ...]
+.br
+\fBegg-topstrip\fR -inplace [opts] file.egg [file.egg ...]
+.br
+\fBegg-topstrip\fR -inf input_list_filename [opts]
+.SH DESCRIPTION
+egg\-topstrip reads a character model and its associated animation files, and unapplies the animation from one of the top joints.  This effectively freezes that particular joint, and makes the rest of the character relative to that joint.
+.PP
+This is a particularly useful thing to do to generate character models that can stack one on top of the other in a sensible way.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow any of the named egg files to have absolute pathnames.  If any do, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-t " "name"
+Specify the name of the 'top' joint, from which to draw the animation channels which will be applied to the entire animation.
+.TP
+.B \-i
+Invert the matrix before applying.  This causes a subtractive effect.  This is the default unless -r is specified.
+.TP
+.B \-n
+Do not invert the matrix before applying.  This causes an additive effect.
+.TP
+.BI "\-s " "[ijkphrxyz]"
+Specify the components of the transform that are to be applied.  Use any combination of the nine token letters: i, j, k represent the three scale axes; h, p, r represent rotation; and x, y, z represent translation.  The default is everything: -s ijkphrxyz.
+.TP
+.BI "\-r " "file.egg"
+Read the animation channel from the indicated egg file.  If this is not specified, each egg file will supply its own animation channel.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  This is only valid when there is only one input egg file on the command line.  If you want to process multiple files simultaneously, you must use either -d or -inplace.
+.TP
+.BI "\-d " "dirname"
+Specify the name of the directory in which to write the resulting egg files.  If you are processing only one egg file, this may be omitted in lieu of the -o option.  If you are processing multiple egg files, this may be omitted only if you specify -inplace instead.
+.TP
+.B \-inplace
+If this option is given, the input egg files will be rewritten in place with the results.  This obviates the need to specify -d for an output directory; however, it's risky because the original input egg files are lost.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system to operate in.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.BI "\-inf " "filename"
+Reads input args from a text file instead of the command line.  Useful for really, really large lists of args that break the OS-imposed limits on the length of command lines.
+.TP
+.B \-h
+Display this help page.

+ 117 - 0
doc/man/egg-trans.1

@@ -0,0 +1,117 @@
+.\" Automatically generated by egg-trans -write-bam
+.TH EGG-TRANS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg-trans \- apply transformations and optimizations to an .egg file
+.SH SYNOPSIS
+\fBegg-trans\fR [opts] -o output.egg input.egg
+.br
+\fBegg-trans\fR [opts] input.egg >output.egg
+.SH DESCRIPTION
+egg\-trans reads an egg file and writes an essentially equivalent egg file to the standard output, or to the file specified with \-o.  Some simple operations on the egg file are supported.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-F
+Flatten out transforms.
+.TP
+.B \-t
+Apply texture matrices to UV's.
+.TP
+.B \-T
+Collapse equivalent texture references.
+.TP
+.B \-c
+Clean out degenerate polygons and unused vertices.
+.TP
+.B \-C
+Clean out higher-order polygons by subdividing into triangles.
+.TP
+.B \-mesh
+Mesh triangles into triangle strips.  This is mainly useful as a tool to visualize the work that the mesher will do, since triangles are automatically meshed whenever an egg file is loaded.  Note that, unlike the automatic meshing at load time, you are must ensure that you do not start out with multiple triangles with different attributes (e.g. texture) together in the same group.
+.TP
+.B \-N
+Standardize and uniquify group names.
+.TP
+.BI "\-ct " "threshold"
+Implies -c, but sets the threshold for determining whether two vertex positions are equivalent.  A higher value here may be used to merge adjacent vertices together, and an even higher value can be used to reduce the density of a model.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-td " "dirname"
+Copy textures to the indicated directory.  The copy is performed only if the destination file does not exist or is older than the source file.
+.TP
+.BI "\-te " "ext"
+Rename textures to have the indicated extension.  This also automatically copies them to the new filename (possibly in a different directory if -td is also specified), and may implicitly convert to a different image format according to the extension.
+.TP
+.BI "\-tt " "type"
+Explicitly specifies the image format to convert textures to when copying them via -td or -te.  Normally, this is unnecessary as the image format can be determined by the extension, but sometimes the extension is insufficient to unambiguously specify an image type.
+.TP
+.BI "\-delod " "dist"
+Eliminate LOD's by choosing the level that would be appropriate for a camera at the indicated fixed distance from each LOD.  Use -delod -1 to keep all the LOD's as they are, which is the default.
+
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the egg file is written to standard output.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting egg file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is the same coordinate system as the input egg file.  If this is different from the input egg file, a conversion will be performed.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.B \-h
+Display this help page.

+ 81 - 0
doc/man/egg2bam.1

@@ -0,0 +1,81 @@
+.\" Automatically generated by egg2bam -write-bam
+.TH EGG2BAM 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg2bam \- convert .egg files to .bam files
+.SH SYNOPSIS
+\fBegg2bam\fR [opts] input.egg output.bam
+.br
+\fBegg2bam\fR [opts] -o output.bam input.egg
+.SH DESCRIPTION
+This program reads Egg files and outputs Bam files, the binary format suitable for direct loading of animation and models into Panda.  Bam files are tied to a particular version of Panda, so should not be considered replacements for egg files, but they tend to be smaller and load much faster than the equivalent egg files.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-flatten " "flag"
+Specifies whether to flatten the egg hierarchy after it is loaded.  If flag is zero, the egg hierarchy will not be flattened, but will instead be written to the bam file exactly as it is.  If flag is non-zero, the hierarchy will be flattened so that unnecessary nodes (usually group nodes with only one child) are eliminated.  The default if this is not specified is taken from the egg-flatten Config.prc variable.
+.TP
+.BI "\-combine-geoms " "flag"
+Specifies whether to combine sibling GeomNodes into a common GeomNode when possible.  This flag is only respected if flatten, above, is also enabled (or implicitly true from the Config.prc file).  The default if this is not specified is taken from the egg-combine-geoms Config.prc variable.
+.TP
+.BI "\-suppress-hidden " "flag"
+Specifies whether to suppress hidden geometry.  If this is nonzero, egg geometry tagged as "hidden" will be removed from the final scene graph; otherwise, it will be preserved (but stashed).  The default is nonzero, to remove it.
+.TP
+.B \-ls
+Writes a scene graph listing to standard output after the egg file has been loaded, showing the nodes that will be written out.
+.TP
+.BI "\-C " "quality"
+Specify the quality level for lossy channel compression.  If this is specified, the animation channels will be compressed at this quality level, which is normally an integer value between 0 and 100, inclusive, where higher numbers produce larger files with greater quality.  Generally, 95 is the highest useful quality level.  Use -NC (described below) to disable channel compression.  If neither option is specified, the default comes from the Config.prc file.
+.TP
+.B \-NC
+Turn off lossy compression of animation channels.  Channels will be written exactly as they are, losslessly.
+.TP
+.B \-rawtex
+Record texture data directly in the bam file, instead of storing a reference to the texture elsewhere on disk.  The textures are stored uncompressed, unless -ctex is also specified.  A particular texture that is encoded into multiple different bam files in this way cannot be unified into the same part of texture memory if the different bam files are loaded together.  That being said, this can sometimes be a convenient way to ensure the bam file is completely self-contained.
+.TP
+.B \-txo
+Rather than writing texture data directly into the bam file, as in -rawtex, create a texture object for each referenced texture.  A texture object is a kind of mini-bam file, with a .txo extension, that contains all of the data needed to recreate a texture, including its image contents, filter and wrap settings, and so on.  3-D textures and cube maps can also be represented in a single .txo file.  Texture object files, like bam files, are tied to a particular version of Panda.
+.TP
+.B \-txopz
+In addition to writing texture object files as above, compress each one using pzip to a .txo.pz file.  In many cases, this will yield a disk file size comparable to that achieved by png compression.  This is an on-disk compression only, and does not affect the amount of RAM or texture memory consumed by the texture when it is loaded.
+.TP
+.B \-ctex
+Pre-compress the texture images using the libsquish library, when using -rawtex or -txo.  This is unrelated to the on-disk compression achieved via -txopz (and it may be used in conjunction with that parameter).  This will result in a smaller RAM and texture memory footprint for the texture images.  The same effect can be achieved at load time by setting compressed-textures in your Config.prc file; but -ctex pre-compresses the textures so that they do not need to be compressed at load time.  
+.TP
+.B \-mipmap
+Records the pre-generated mipmap levels in the texture object file when using -rawtex or -txo, regardless of the texture filter mode.  This will increase the size of the texture object file by about 33%, but it prevents the need to compute the mipmaps at runtime.  The default is to record mipmap levels only when the texture uses a mipmap filter mode.
+.TP
+.BI "\-ctexq " "quality"
+Specifies the compression quality to use when performing the texture compression requested by -ctex.  This may be one of 'default', 'fastest', 'normal', or 'best'.  The default is 'best'.  Set it to 'default' to use whatever is specified by the Config.prc file.  This is a global setting only; individual texture quality settings appearing within the egg file will override this.
+.TP
+.BI "\-load-display " "display name"
+Specifies the particular display module to load to perform the texture compression requested by -ctex.  If this is omitted, the default is taken from the Config.prc file.  Since your Panda has libsquish compiled in, this is not necessary; Panda can compress textures without loading a display module.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting Bam file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting Bam file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is z-up.
+.TP
+.B \-h
+Display this help page.

+ 49 - 0
doc/man/egg2c.1

@@ -0,0 +1,49 @@
+.\" Automatically generated by egg2c -write-bam
+.TH EGG2C 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg2c \- convert .egg geometry into compilable C tables
+.SH SYNOPSIS
+\fBegg2c\fR [opts] input.egg output.c
+.br
+\fBegg2c\fR [opts] -o output.c input.egg
+.br
+\fBegg2c\fR [opts] input.egg >output.c
+.SH DESCRIPTION
+This program reads Egg files and outputs code that will almost compile as a C or C++ program.  You get to define the data structures for the program after the fact; the program only generates tables of vertices and polygons.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-v
+Generate a table of vertex positions.
+.TP
+.B \-u
+Generate a table of UV's per each vertex.
+.TP
+.B \-vn
+Generate a table of normals per each vertex.
+.TP
+.B \-vc
+Generate a table of colors per each vertex.
+.TP
+.B \-p
+Generate a table of polygons that index into the above tables.
+.TP
+.B \-pn
+Generate a table of normals per each polygon.
+.TP
+.B \-pc
+Generate a table of colors per each polygon.
+.TP
+.B \-t
+Output only triangles by subdividing higher-order polygons.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting C file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting C file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is the same coordinate system as the input egg file.  If this is different from the input egg file, a conversion will be performed.
+.TP
+.B \-h
+Display this help page.

+ 29 - 0
doc/man/egg2dxf.1

@@ -0,0 +1,29 @@
+.\" Automatically generated by egg2dxf -write-bam
+.TH EGG2DXF 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg2dxf \- convert .egg files to AutoCAD .dxf files
+.SH SYNOPSIS
+\fBegg2dxf\fR [opts] input.egg output.dxf
+.br
+\fBegg2dxf\fR [opts] -o output.dxf input.egg
+.SH DESCRIPTION
+This program converts files from egg format to AutoCAD DXF format.  Since DXF does not support nested hierarchies, vertex normals, or any fancy stuff you are probably used to, there is some information lost in the conversion
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-p
+Use POLYLINE to represent polygons instead of the default, 3DFACE.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting DXF file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting DXF file.  This may be one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'.  The default is the same coordinate system as the input egg file.  If this is different from the input egg file, a conversion will be performed.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.B \-h
+Display this help page.

+ 26 - 0
doc/man/egg2flt.1

@@ -0,0 +1,26 @@
+.\" Automatically generated by egg2flt -write-bam
+.TH EGG2FLT 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg2flt \- convert files from .egg format to MultiGen .flt
+.SH SYNOPSIS
+\fBegg2flt\fR [opts] input.egg output.flt
+.br
+\fBegg2flt\fR [opts] -o output.flt input.egg
+.SH DESCRIPTION
+egg2lt converts files from egg format to MultiGen .flt format.  It attempts to be as robust as possible, and matches the capabilities of flt2egg.  Generally, converting a model from egg2lt and then back via flt2egg will result in essentially the same egg file, within the limitations of what can be represented in flt.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.BI "\-attr " "none/new/all"
+Specifies whether to write (or rewrite) .attr files for each texture image.  MultiGen stores texture properties like mipmapping in a separate .attr file for each different texture image.  If this parameter is "none", these files will not be generated; if this is "new", these files will only be generated if they do not already exist (even if the properties have changed).  Specifying "all" causes these to be rewritten every time.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting MultiGen file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.B \-h
+Display this help page.

+ 29 - 0
doc/man/egg2obj.1

@@ -0,0 +1,29 @@
+.\" Automatically generated by egg2obj -write-bam
+.TH EGG2OBJ 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg2obj \- convert .egg files to .obj
+.SH SYNOPSIS
+\fBegg2obj\fR [opts] input.egg output.obj
+.br
+\fBegg2obj\fR [opts] -o output.obj input.egg
+.SH DESCRIPTION
+This program converts egg files to obj.  It only converts polygon data, with no fancy tricks.  Very bare\-bones at the moment; not even texture maps are supported.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-C
+Clean out higher-order polygons by subdividing into triangles.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting Obj file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the resulting Obj file.  Normally, this is z-up.
+.TP
+.B \-f
+Force complete loading: load up the egg file along with all of its external references.
+.TP
+.B \-h
+Display this help page.

+ 35 - 0
doc/man/egg2x.1

@@ -0,0 +1,35 @@
+.\" Automatically generated by egg2x -write-bam
+.TH EGG2X 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+egg2x \- convert an .egg file into a DirectX .x file
+.SH SYNOPSIS
+\fBegg2x\fR [opts] input.egg output.x
+.br
+\fBegg2x\fR [opts] -o output.x input.egg
+.SH DESCRIPTION
+This program reads an Egg file and outputs an equivalent, or nearly equivalent, DirectX\-style .x file.  Only simple hierarchy and polygon meshes are supported; advanced features like LOD's, decals, and animation or skinning are not supported.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input egg file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-m
+Convert all the objects in the egg file as one big mesh, instead of preserving the normal egg hierarchy.
+.TP
+.BI "\-td " "dirname"
+Copy textures to the indicated directory.  The copy is performed only if the destination file does not exist or is older than the source file.
+.TP
+.BI "\-te " "ext"
+Rename textures to have the indicated extension.  This also automatically copies them to the new filename (possibly in a different directory if -td is also specified), and may implicitly convert to a different image format according to the extension.
+.TP
+.BI "\-tt " "type"
+Explicitly specifies the image format to convert textures to when copying them via -td or -te.  Normally, this is unnecessary as the image format can be determined by the extension, but sometimes the extension is insufficient to unambiguously specify an image type.
+.TP
+.BI "\-delod " "dist"
+Eliminate LOD's by choosing the level that would be appropriate for a camera at the indicated fixed distance from each LOD.  Use -delod -1 to keep all the LOD's as they are.  The default value is 0.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting DirectX file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.B \-h
+Display this help page.

+ 15 - 0
doc/man/flt-info.1

@@ -0,0 +1,15 @@
+.\" Automatically generated by flt-info -write-bam
+.TH FLT-INFO 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+flt-info \- describe the contents of a MultiGen .flt file
+.SH SYNOPSIS
+\fBflt-info\fR [opts] input.flt
+.SH DESCRIPTION
+This program reads a MultiGen OpenFlight (.flt) file and reports some interesting things about its contents.
+.SH OPTIONS
+.TP
+.B \-ls
+List the hierarchy in the flt file.
+.TP
+.B \-h
+Display this help page.

+ 39 - 0
doc/man/flt-trans.1

@@ -0,0 +1,39 @@
+.\" Automatically generated by flt-trans -write-bam
+.TH FLT-TRANS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+flt-trans \- apply various operations to a MultiGen .flt file
+.SH SYNOPSIS
+\fBflt-trans\fR [opts] input.flt output.flt
+.br
+\fBflt-trans\fR [opts] -o output.flt input.flt
+.SH DESCRIPTION
+This program reads a MultiGen OpenFlight (.flt) file and writes an essentially equivalent .flt file, to the file specified with \-o (or as the second parameter).  Some simple operations may be performed.
+.SH OPTIONS
+.TP
+.BI "\-v " "version"
+Upgrade (or downgrade) the flt file to the indicated version.  This may not be completely correct for all version-to-version combinations.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting .flt file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.B \-h
+Display this help page.

+ 94 - 0
doc/man/flt2egg.1

@@ -0,0 +1,94 @@
+.\" Automatically generated by flt2egg -write-bam
+.TH FLT2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+flt2egg \- convert a MultiGen .flt file to .egg
+.SH SYNOPSIS
+\fBflt2egg\fR [opts] input.flt output.egg
+.br
+\fBflt2egg\fR [opts] -o output.egg input.flt
+.br
+\fBflt2egg\fR [opts] input.flt >output.egg
+.SH DESCRIPTION
+This program converts MultiGen OpenFlight (.flt) files to egg.  Most features of MultiGen that are also recognized by egg are supported.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input MultiGen file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input MultiGen file.  Normally, this can be inferred from the file itself.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If this is specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-f
+Follow and convert all external references in the source file.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input MultiGen file.  Normally, this is z-up.
+.TP
+.B \-h
+Display this help page.

+ 44 - 0
doc/man/fltcopy.1

@@ -0,0 +1,44 @@
+.\" Automatically generated by fltcopy -write-bam
+.TH FLTCOPY 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+fltcopy \- copy MultiGen .flt files into a CVS source hierarchy
+.SH SYNOPSIS
+\fBfltcopy\fR [opts] file.flt [file.flt ... ]
+.SH DESCRIPTION
+fltcopy copies one or more MultiGen .flt files into a CVS source hierarchy.  Rather than copying the named files immediately into the current directory, it first scans the entire source hierarchy, identifying all the already\-existing files.  If the named file to copy matches the name of an already\-existing file in the current directory or elsewhere in the hierarchy, that file is overwritten.  Other .flt files, as well as texture files, that are externally referenced by the named .flt file(s) are similarly copied.
+.SH OPTIONS
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.B \-f
+Force the copy to happen without any input from the user.  If a file with the same name exists anywhere in the source hierarchy, it will be overwritten without prompting; if a file does not yet exist, it will be created in the directory named by -d or by -m, as appropriate.
+.TP
+.B \-i
+The opposite of -f, this will prompt the user before each action.  The default is only to prompt the user when an action is ambiguous or unusual.
+.TP
+.BI "\-d " "dirname"
+Copy model files that are not already present somewhere in the tree to the indicated directory.  The default is the current directory.
+.TP
+.BI "\-m " "dirname"
+Copy texture map files to the indicated directory.  The default is src/maps from the root directory.
+.TP
+.BI "\-root " "dirname"
+Specify the root of the CVS source hierarchy.  The default is to use the ppremake convention of locating the directory above the -d directory that contains a file called Package.pp.
+.TP
+.BI "\-key " "filename"
+Specify the name of the file that must exist in each directory for it to be considered part of the CVS source hierarchy.  The default is the ppremake convention, "Sources.pp".  Other likely candidates are "CVS" to search a CVS hierarchy, or "." to include all subdirectories indiscriminately.
+.TP
+.B \-nc
+Do not attempt to add newly-created files to CVS.  The default is to add them.
+.TP
+.BI "\-cvs " "cvs_binary"
+Specify how to run the cvs program for adding newly-created files.  The default is simply "cvs".
+.TP
+.B \-h
+Display this help page.

+ 14 - 0
doc/man/image-info.1

@@ -0,0 +1,14 @@
+.\" Automatically generated by image-info -write-bam
+.TH IMAGE-INFO 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+image-info \- report the size of image files
+.SH SYNOPSIS
+.SH DESCRIPTION
+This program reads the headers of a series of one or more image files and reports the image sizes to standard output.
+.SH OPTIONS
+.TP
+.B \-2
+Report only images that have a non-power-of-two size in either dimension.  Images whose dimensions are both a power of two will not be mentioned.
+.TP
+.B \-h
+Display this help page.

+ 29 - 0
doc/man/image-resize.1

@@ -0,0 +1,29 @@
+.\" Automatically generated by image-resize -write-bam
+.TH IMAGE-RESIZE 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+image-resize \- resize an image file
+.SH SYNOPSIS
+\fBimage-resize\fR [opts] inputimage outputimage
+.br
+\fBimage-resize\fR [opts] -o outputimage inputimage
+.SH DESCRIPTION
+This program reads an image file and resizes it to a larger or smaller image file.
+.SH OPTIONS
+.TP
+.BI "\-x " "xsize"
+Specify the width of the output image in pixels, or as a percentage of the original width (if a trailing percent sign is included).  If this is omitted, the ratio is taken from the ysize parameter.
+.TP
+.BI "\-y " "ysize"
+Specify the height of the output image in pixels, or as a percentage of the original height (if a trailing percent sign is included).  If this is omitted, the ratio is taken from the xsize parameter.
+.TP
+.BI "\-g " "radius"
+Use Gaussian filtering to resize the image, with the indicated radius.
+.TP
+.B \-1
+This option is ignored.  It is provided only for backward compatibility with a previous version of image-resize.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting image file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.B \-h
+Display this help page.

+ 35 - 0
doc/man/image-trans.1

@@ -0,0 +1,35 @@
+.\" Automatically generated by image-trans -write-bam
+.TH IMAGE-TRANS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+image-trans \- apply transformations to an image file
+.SH SYNOPSIS
+\fBimage-trans\fR [opts] inputimage outputimage
+.br
+\fBimage-trans\fR [opts] -o outputimage inputimage
+.SH DESCRIPTION
+This program reads an image file and writes a similar image file to the output.  It can implicitly convert from one image file format to another; it uses the extension of the output filename to specify the destination file format.
+.SH OPTIONS
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting image file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.BI "\-chan " "channels"
+Elevate (or truncate) the image to the indicated number of channels.  This may be 1, 2, 3, or 4.  You may also specify one of the keywords l, la, rgb, or rgba, respectively, or any of the keywords r, g, b, or a to extract out just the indicated channel as a single grayscale image.
+.TP
+.BI "\-cscale " "r,g,b[,a]"
+Apply the indicated color scale to each pixel of the image.
+.TP
+.B \-flip
+Flip the image vertically.
+.TP
+.B \-mirror
+Reverse the image horizontally.
+.TP
+.B \-cw
+Rotate the image 90 degrees clockwise.
+.TP
+.B \-ccw
+Rotate the image 90 degrees counter-clockwise.
+.TP
+.B \-h
+Display this help page.

+ 186 - 0
doc/man/interrogate.1

@@ -0,0 +1,186 @@
+.TH INTERROGATE 1 "27 December 2014" "" Panda3D
+.SH NAME
+interrogate \- generate scripting language bindings for C/C++ APIs
+.SH SYNOPSIS
+.B interrogate
+[
+.I opts
+]
+.I file.C
+[
+.I file.C ...
+]
+.SH DESCRIPTION
+Interrogate is a program to parse a body of C++ code and build up a table
+of classes, methods, functions, and symbols found, for the purposes of
+calling into the codebase via a non-C++ scripting language like Scheme,
+Smalltalk, or Python.
+.PP
+In addition to identifying all the classes and their relationships,
+interrogate will generate a wrapper function for each callable function.
+The wrapper functions will be callable directly from the scripting language,
+with no understanding of C++ necessary; these wrapper functions will in turn
+call the actual C++ functions or methods.
+.PP
+Most exportable features of C++ are supported, including templates, default
+parameters, and function overloading.
+.SH OPTIONS
+.TP
+.BI "\-oc " output.C
+Specify the name of the file to which generated code will be written.
+This includes all of the function wrappers, as well as those tables
+which must be compiled into the library.
+.TP
+.BI "\-od " output.in
+Specify the name of the file to which the non-compiled data tables
+will be written.  This file describes the relationships between
+all the types and the functions, and associates the function wrappers
+above with this data.  This file will be opened and read at runtime
+when the scripting language first calls some interrogate query
+function.
+.TP
+.BI "\-srcdir " directory
+Specify the name of the directory to which the source filenames are
+relative.
+.TP
+.BI "\-module " module_name
+Defines the name of the module this data is associated with.  This
+is strictly a code-organizational tool.  Conceptually, a module is
+the highest level of grouping for interrogate data; a module may
+contain several libraries.  If this is omitted, no module name is
+specified.
+.PP
+Sometimes, depending on the type of wrappers being generated, there
+may be additional code that needs to be generated on the module
+level, above that which was already generated at the library level.
+Python, for instance, generates the table of python-callable function
+wrappers at the module level.  Use the program
+.BR interrogate_module (1)
+to generate the appropriate code at the module level.
+.TP
+.BI "\-library " library_name
+Defines the name of the library this data is associated with.  This
+is another code-organizational tool.  Typically, there will be one
+invocation of interrogate for each library, and there will be
+multiple libraries per module.  If this is omitted, no library name
+is specified.
+.TP
+.B \-do\-module
+Generate whatever module-level code should be generated immediately,
+rather than waiting for a special
+.BR interrogate_module (1)
+pass.  This, of course, prohibits grouping several libraries together
+into a single module.
+.TP
+.B \-fptrs
+Make void* pointers to the function wrappers directly available.  A
+scripting language will be able to call the interrogate functions
+directly by pointer.
+.TP
+.B \-fnames
+Make the names of the function wrappers public symbols so that the
+scripting language will be able to call the interrogate functions
+by name.
+.PP
+Either or both of \fB\-fptrs\fP and/or \fB\-fnames\fP may be specified.
+If both are omitted, the default is \fB\-fnames\fP.
+.TP
+.B \-string
+Treat char* and basic_string<char> as special cases, and map
+parameters of these types to type atomic string.  The scripting
+language will see only functions that receive and return strings,
+not pointers to character or structures of basic_string<char>.
+If C calling convention wrappers are being generated, the atomic
+string type means type char*.  In any other calling convention, the
+atomic string type is whatever the native string type is.
+.TP
+.B \-refcount
+Treat classes that inherit from a class called ReferenceCount as a
+special case.  Any wrapper function that returns a pointer to
+one of these classes will automatically increment the reference
+count by calling ref() on the object first, and any destructors
+that are generated will call unref_delete() on the object instead of
+simply delete.
+.PP
+Furthermore, parameters of type PointerTo<N> or ConstPointerTo<N>
+will automatically be mapped to N * and const N *, respectively.
+.TP
+.B \-assert
+Generate code in each wrapper that will check the state of the assert
+flag and trigger an exception in the scripting language when a
+C++ assertion fails.  Presently, this only has meaning to the Python
+wrappers.
+.TP
+.B \-true\-names
+Use the actual name of the function being wrapped as the name of
+the generated wrapper function, instead of an ugly hash name.
+This means the wrapper functions may be called directly using a
+meaningful name (especially if \fB\-fnames\fP is also given), but it
+also means that C++ function overloading (including default values
+for parameters) cannot be used, as it will lead to multiple wrapper
+functions with the same name.
+.TP
+.B \-c
+Generate function wrappers using the C calling convention.  Any
+scripting language that can call a C function should be able to
+make advantage of the interrogate database.
+.TP
+.B \-python
+Generate function wrappers using the Python calling convention.
+The shared library will be directly loadable as a Python module
+(especially if the module definitions are made available either by
+running
+.BR interrogate_module (1)
+later, or by specifying \fB\-do\-module\fP on the command line now).
+However, C++ objects and methods will be converted into an object
+handle and a list of independent Python functions.
+.TP
+.B \-python\-obj
+Generate Python function wrappers that convert C++ objects to true
+python objects, with all methods converted to Python methods.  This
+is currently experimental.
+.TP
+.B \-python\-native
+Generate Python function wrappers that convert C++ objects to true
+python objects, with all methods converted to Python methods.  This
+is the recommended method for creating Python wrappers.
+.PP
+Any combination of \fB\-c\fP, \fB\-python\fP, or \fB\-python\-obj\fP
+may be specified. If all are omitted, the default is \fB\-c\fP.
+.TP
+.B \-track\-interpreter
+Generate code within each wrapper function to adjust the global
+variable "in_interpreter" to indicated whether code is running
+within the Panda C++ environment or within the high-level language.
+.TP
+.B \-unique\-names
+Compile a table into the library (i.e. generate code into the
+\fB\-oc\fP file) that defines a lookup of each function wrapper by
+its unique name.  This makes it possible to consistently identify
+function wrappers between sessions, at the cost of having this
+additional table in memory.
+.TP
+.B \-nodb
+Do not build a full interrogate database, but just generate function
+wrappers.  It is assumed that the user will know how to call the
+function wrappers already, from some external source.  This is most
+useful in conjunction with \fB\-true\-names\fP.
+.TP
+.BI "\-longlong " typename
+Specify the name of the 64-bit integer type for the current compiler.
+By default, this is "long long".
+.TP
+.B \-promiscuous
+Export *all* public symbols, functions, and classes seen, even those
+not explicitly marked to be published.
+.TP
+.B \-spam
+Generate wrapper functions that report each invocation to Notify.
+This can sometimes be useful for tracking down bugs.
+.TP
+.B \-noangles
+Treat #include <file> the same as #include "file".  This means
+\fB\-I\fP and \fB\-S\fP are equivalent.
+.SH "SEE ALSO"
+.BR interrogate_module (1),
+.BR test_interrogate (1)

+ 69 - 0
doc/man/interrogate_module.1

@@ -0,0 +1,69 @@
+.TH INTERROGATE_MODULE 1 "26 December 2014" "" Panda3D
+.SH NAME
+interrogate_module \- generate module-level code for interrogate
+.SH SYNOPSIS
+.B interrogate_module
+[
+.I opts
+]
+.I libname.in
+[
+.I libname.in ...
+]
+.SH DESCRIPTION
+This program generates a module-level file for the
+.BR interrogate (1) program.
+This is a higher level than library, and groups several libraries
+together.  In particular, the code generated by interrogate_module
+typically includes a table of the classes that are to be exported
+to Python.
+.SH OPTIONS
+.TP
+.BI "\-oc " output.C
+Specify the name of the file to which generated code will be written.
+.TP
+.BI "\-module " module_name
+Defines the name of the module this data is associated with.  This
+is strictly a code-organizational tool.  Conceptually, a module is
+the highest level of grouping for interrogate data; a module may
+contain several libraries.  If this is omitted, no module name is
+specified.
+.TP
+.BI "\-library " library_name
+Defines the name of the library this data is associated with.  This
+is another code-organizational tool.  Typically, there will be one
+invocation of interrogate for each library, and there will be
+multiple libraries per module.  If this is omitted, no library name
+is specified.
+.TP
+.B \-c
+Generate function wrappers using the C calling convention.  Any
+scripting language that can call a C function should be able to
+make advantage of the interrogate database.
+.TP
+.B \-python
+Generate function wrappers using the Python calling convention.
+The shared library will be directly loadable as a Python module.
+However, C++ objects and methods will be converted into an object
+handle and a list of independent Python functions.
+.TP
+.B \-python\-obj
+Generate Python function wrappers that convert C++ objects to true
+python objects, with all methods converted to Python methods.  This
+is currently experimental.
+.TP
+.B \-python\-native
+Generate Python function wrappers that convert C++ objects to true
+python objects, with all methods converted to Python methods.  This
+is the recommended method for creating Python wrappers.
+.PP
+Any combination of \fB\-c\fP, \fB\-python\fP, or \fB\-python\-obj\fP
+may be specified. If all are omitted, the default is \fB\-c\fP.
+.TP
+.B \-track\-interpreter
+Generate code within each wrapper function to adjust the global
+variable "in_interpreter" to indicated whether code is running
+within the Panda C++ environment or within the high-level language.
+.SH "SEE ALSO"
+.BR interrogate (1),
+.BR test_interrogate (1)

+ 12 - 0
doc/man/lwo-scan.1

@@ -0,0 +1,12 @@
+.\" Automatically generated by lwo-scan -write-bam
+.TH LWO-SCAN 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+lwo-scan \- describe the contents of a Lightwave object file
+.SH SYNOPSIS
+\fBlwo-scan\fR [opts] input.lwo
+.SH DESCRIPTION
+This program simply reads a Lightwave object file and dumps its contents to standard output.  It's mainly useful for debugging problems with lwo2egg.
+.SH OPTIONS
+.TP
+.B \-h
+Display this help page.

+ 91 - 0
doc/man/lwo2egg.1

@@ -0,0 +1,91 @@
+.\" Automatically generated by lwo2egg -write-bam
+.TH LWO2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+lwo2egg \- convert a Lightwave Object file to .egg
+.SH SYNOPSIS
+\fBlwo2egg\fR [opts] input.lwo output.egg
+.br
+\fBlwo2egg\fR [opts] -o output.egg input.lwo
+.br
+\fBlwo2egg\fR [opts] input.lwo >output.egg
+.SH DESCRIPTION
+This program converts Lightwave Object (.lwo) files to egg.  Many rendering characteristics of Lightwave (like layered shaders, etc.) are not supported, but fundamental things like polygons and texture maps are.  This program is primarily designed to support files written by Lightwave version 6.x (LWO2 files), but it also has some limited support for version 5.x files (LWOB files).
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input Lightwave file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input Lightwave file.  By convention, this is assumed to be meters if it is unspecified.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If this is specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input Lightwave file.  Normally, this is y-up-left.
+.TP
+.B \-h
+Display this help page.

+ 56 - 0
doc/man/make-prc-key.1

@@ -0,0 +1,56 @@
+.TH MAKE-PRC-KEY 1 "27 December 2014" "" Panda3D
+.SH NAME
+make-prc-key \- generate keys for signing .prc files
+.SH SYNOPSIS
+.B make-prc-key
+[\fIopts\fP]
+1[,"\fIpass_phrase\fP"] [2[,"\fIpass_phrase\fP"] 3 ...]
+.SH DESCRIPTION
+This program generates one or more new keys to be used for signing
+a prc file.  The key itself is a completely arbitrary random bit
+sequence.  It is divided into a public and a private key; the public
+key is not secret and will be compiled into libdtool, while the private
+key should be safeguarded and will be written into a .cxx file that
+can be compiled as a standalone application.
+.PP
+The output is a public and private key pair for each trust level.  The
+form of the output for both public and private keys will be compilable
+C++ code; see \-a and \-b, below, for a complete description.
+.PP
+After the options, the remaining arguments list the individual trust
+level keys to generate.  For each integer specified, a different key
+will be created.  There should be one key for each trust level
+required; a typical application will only need one or two keys.
+.SH OPTIONS
+.TP
+.BI "\-a " pub_outfile.cxx
+Specifies the name and location of the public key output file
+to generate.  This file must then be named by the Config.pp
+variable PRC_PUBLIC_KEYS_FILENAME so that it will be compiled
+in with libdtool and available to verify signatures.  If this
+option is omitted, the previously-compiled value is used.
+.TP
+.BI "\-b " priv_outfile#.cxx
+Specifies the name and location of the private key output file(s)
+to generate.  A different output file will be generated for each
+different trust level; the hash mark '#' appearing in the file
+name will be filled in with the corresponding numeric trust level.
+The hash mark may be omitted if you only require one trust level.
+When compiled against dtool, each of these files will generate
+a program that can be used to sign a prc file with the corresponding
+trust level.
+.TP
+.BI "\-p " passphrase
+Uses the indicated pass phrase to encrypt the private key.
+This specifies an overall pass phrase; you may also specify
+a different pass phrase for each key by using the
+\fIkey\fB,"\fIpassphrase\fB"\fR syntax.
+.PP
+If a pass phrase is not specified on the command line, you will be
+prompted interactively.  Every user of the signing programs
+(outfile_sign1.cxx, etc.) will need to know the pass phrase
+in order to sign prc files.
+.PP
+If this is specified as the empty string (""), then the key
+will not be encrypted, and anyone can run the signing
+programs without having to supply a pass phrase.

+ 156 - 0
doc/man/multify.1

@@ -0,0 +1,156 @@
+.TH MULTIFY 1 "27 December 2014" "" Panda3D
+.SH NAME
+multify \- manipulate .mf multifiles
+.SH SYNOPSIS
+.B multify \-[c|r|u|t|x] -f
+.I multifile_name.mf
+[
+.I options
+]
+.I subfile_name ...
+.SH DESCRIPTION
+\fBmultify\fP is used to store and extract files from a Panda Multifile.
+This is similar to a tar or zip file in that it is an archive file that
+contains a number of subfiles that may later be extracted.
+.PP
+Panda's VirtualFileSystem is capable of mounting Multifiles for direct
+access to the subfiles contained within without having to extract them
+out to independent files first.
+.PP
+The command-line options for multify are designed to be similar to those
+for \fBtar\fR(1), the traditional Unix archiver utility.
+.SH OPTIONS
+You must specify exactly one of the following command switches:
+.TP
+.B \-c
+Create a new Multifile archive.  Subfiles named on the command line
+will be added to the new Multifile.  If the Multifile already exists,
+it is first removed.
+.TP
+.B \-r
+Rewrite an existing Multifile archive.  Subfiles named on the command
+line will be added to the Multifile or will replace subfiles within
+the Multifile with the same name.  The Multifile will be repacked
+after completion, even if no Subfiles were added.
+.TP
+.B \-u
+Update an existing Multifile archive.  This is similar to \fB\-r\fP,
+except that files are compared byte\-for\-byte with their corresponding
+files in the archive first.  If they have not changed, the multifile
+is not modified (other than to repack it if necessary).
+.TP
+.B \-t
+List the contents of an existing Multifile.  With -v, this shows
+the size of each Subfile and its compression ratio, if compressed.
+.TP
+.B \-x
+Extract the contents of an existing Multifile.  The Subfiles named on
+the command line, or all Subfiles if nothing is named, are extracted
+into the current directory or into whichever directory is specified
+with \fB\-C\fP.
+.TP
+.B \-k
+Delete (kill) the named Subfiles from the Multifile.  The Multifile
+will be repacked after completion.
+.PP
+You must always specify the following switch:
+.TP
+.BI "\-f " multifile_name.mf
+Names the Multifile that will be operated on.
+.PP
+The remaining switches are optional:
+.TP
+.B \-v
+Run verbosely.  In \-c, \-r, or \-x mode, list each file as it is
+written or extracted.  In \-t mode, list more information about each
+file.
+.TP
+.B \-z
+Compress subfiles as they are written to the Multifile.  Unlike tar
+(but like zip), subfiles are compressed individually, instead of the
+entire archive being compressed as one stream.  It is not necessary
+to specify \-z when extracting compressed subfiles; they will always be
+decompressed automatically.  Also see \-Z, which restricts which
+subfiles will be compressed based on the filename extension.
+.TP
+.B \-e
+Encrypt subfiles as they are written to the Multifile using the password
+specified with \-p, below.  Subfiles are encrypted individually, rather
+than encrypting the entire multifile, and different subfiles may be
+encrypted using different passwords (although this requires running
+multify multiple times).  It is not possible to encrypt the multifile's
+table of contents using this interface, but see the
+.BR pencrypt (1)
+program to encrypt the entire multifile after it has been generated.
+.TP
+.BI "\-p " password
+Specifies the password to encrypt or decrypt subfiles.  If this is not
+specified, and passwords are required, the user will be prompted from
+standard input.
+.TP
+.BI "\-P " prefix
+Specifies a header_prefix to write to the beginning of the multifile.
+This is primarily useful for creating a multifile that can be invoked
+directly as a program from the shell on Unix-like environments,
+for instance, p3d files.  The header_prefix must begin with a hash
+mark and end with a newline; this will be enforced if it is not
+already so.  This only has effect in conjunction with with -c, -u,
+or -k.
+.TP
+.BI "\-F " scale_factor
+Specify a Multifile scale factor.  This is only necessary to support
+Multifiles that will exceed 4GB in size.  The default scale factor is
+1, which should be sufficient for almost any application, but the total
+size of the Multifile will be limited to 4GB * \fIscale_factor\fP.
+The size of individual subfiles may not exceed 4GB in any case.
+.TP
+.BI "\-C " extract_dir
+Change to the named directory before working on files;
+that is, extraction/creation/update and replace will be based on this path
+.TP
+.BI "\-O
+With \-x, extract subfiles to standard output instead of to disk.
+.TP
+.BI "\-Z " extension_list
+Specify a comma-separated list of filename extensions that represent
+files that are not to be compressed.  The default if this is omitted is
+"\fIjpg,png,mp3,ogg\fP".  Specify \-Z "" (be sure to include the space)
+to allow all files to be compressed.
+.TP
+.BI "\-X " extension_list
+Specify a comma-separated list of filename extensions that represent
+text files.  These files are opened and read in text mode, and added to
+the multifile with the text flag set.  The default if this is omitted is
+"\fItxt\fP".  Specify \-X "" (be sure to include the space) to record
+all files in binary mode.
+.TP
+.BI "\-T " flag
+Enable or disable the recording of file timestamps within the multifile.
+If \fIflag\fP is 1, timestamps will be recorded within the multifile for
+each subfile added; this is the default behavior.  If <flag> is 0,
+timestamps will not be recorded, which will make it easier to do a
+bitwise comparison between multifiles to determine whether their
+contents are equivalent.
+.TP
+.B \-1 .. \-9
+Specify the compression level when \-z is in effect.  Larger numbers
+generate slightly smaller files, but compression takes longer.  The
+default is \-6.
+.TP
+.BI "\-S " file.crt[,chain.crt[,file.key[,"password"]]]
+Sign the multifile.  The signing certificate should be in PEM form in
+\fIfile.crt\fP, with its private key in PEM form in \fIfile.key\fP.
+If the key is encrypted on-disk, specify the decryption password as
+the third option.  If a certificate chain is required, \fIchain.crt\fP
+should also be specified; note that the separating commas should be
+supplied even if this optional filename is omitted.
+You may also provide a single composite file that contains the
+certificate, chain, and key in the same file.
+PEM form is the form accepted by the Apache web server.  The
+signature is written to the multifile to prove it is unchanged; any
+subsequent change to the multifile will invalidate the signature.
+This parameter may be repeated to sign the multifile with additional
+certificates.
+.SH "SEE ALSO"
+.BR pencrypt (1),
+.BR pzip (1)

+ 75 - 0
doc/man/obj2egg.1

@@ -0,0 +1,75 @@
+.\" Automatically generated by obj2egg -write-bam
+.TH OBJ2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+obj2egg \- convert .obj files to .egg
+.SH SYNOPSIS
+\fBobj2egg\fR [opts] input.obj output.egg
+.br
+\fBobj2egg\fR [opts] -o output.egg input.obj
+.br
+\fBobj2egg\fR [opts] input.obj >output.egg
+.SH DESCRIPTION
+This program converts obj files to egg.  It only converts polygon data, with no fancy tricks.  Very bare\-bones at the moment; not even texture maps are supported.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input obj file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input obj file.  Normally, this can be inferred from the file itself.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If this is specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-points
+Construct <PointLight> entries for any unreferenced vertices, to make them visible.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input obj file.  Normally, this is z-up.
+.TP
+.B \-h
+Display this help page.

+ 38 - 0
doc/man/p3dcparse.1

@@ -0,0 +1,38 @@
+.TH DCPARSE 1 "27 December 2014" "" Panda3D
+.SH NAME
+dcparse \- read distributed class files
+.SH SYNOPSIS
+.B p3dcparse
+[
+.I options
+] [
+.I file1 file2 ...
+]
+.br
+.B p3dcparse -h
+.SH DESCRIPTION
+This program reads one or more DC files, which are used to describe the
+communication channels in the distributed class system.  By default,
+the file(s) are read and concatenated, and a single hash code is printed
+corresponding to the file's contents.
+.SH OPTIONS
+.TP
+.B \-v
+Writes a complete parseable version of the file to standard
+output instead of printing a hash code.
+.TP
+.B \-b
+Writes a brief parseable version of the file instead of a full
+version.  This is semantically the same as the output produced
+the above \fB\-v\fP option--reading it would produce exactly the
+same results--but it is designed to be slightly obfuscated.  The
+comments and parameter names are not included.
+.TP
+.B \-c
+Write a list of class names, showing the inheritance hierarchy.
+Some class names will be listed twice in the presence of multiple
+inheritance.
+.TP
+.B \-f
+Write a complete list of field names available for each class,
+including all inherited fields.

+ 1 - 0
doc/man/pdecrypt.1

@@ -0,0 +1 @@
+pencrypt.1

+ 92 - 0
doc/man/pencrypt.1

@@ -0,0 +1,92 @@
+.TH PENCRYPT 1 "27 December 2014" "" Panda3D
+.SH NAME
+pencrypt, pdecrypt \- encrypt or decrypt a file
+.SH SYNOPSIS
+.B pencrypt
+[
+.I opts
+]
+.I file
+[
+.I file2 file3 ...
+]
+.br
+.B pencrypt -o
+.I dest_file file
+.PP
+.B pdecrypt
+[
+.B -p
+.I password
+]
+.I file.pe
+[
+.I file2.pe file3.pe ...
+]
+.br
+.B pdecrypt
+[
+.B -p
+.I password
+]
+.B -o
+.I dest_file file.pe
+.SH DESCRIPTION
+\fBpencrypt\fP will apply an encryption algorithm to a file (or multiple files),
+creating an encrypted version of each file which can only be recovered using
+pdecrypt and the same password that was supplied to \fBpencrypt\fP.  The
+compressed versions are written to a file with the same name as the original,
+but the extension .pe added to the filename, and the original file is removed
+(unless the version with \fB\-o\fP is used, in which case you can encrypt only
+one file, you specify the destination file name, and the original file is not
+removed).
+.PP
+Note that if you are adding files to a Panda multifile (.mf file) with the
+.BR multify (1)
+command, it is not necessary to encrypt them separately; \fBmultify\fP has an
+inline encryption option.
+.PP
+\fBpdecrypt\fP reverses the operation of a previous \fBpdecrypt\fP command.
+It decrypts the contents of the named source file(s) and removes the .pe
+extension.  The encryption algorithm need not be specified; it can be
+determined by examining the header of each encrypted file.  The password
+must match the encryption password exactly.  If it does not, an error may
+or may not be reported; but the file will not be decrypted correctly even
+if no error is reported.
+.SH OPTIONS
+.TP
+.BI "\-p " \"password\"
+Specifies the password to use for encryption.  There are no
+restrictions on the password length or contents, but longer passwords
+are more secure.  If this is not specified, the user is prompted from
+standard input.
+.PP
+The following options are only available to \fBpencrypt\fP.  These settings
+are automatically read from the header of the encrypted file by \fBpdecrypt\fP.
+.TP
+.B \-t
+Read the file as a text file.  This will automatically convert universal
+end-of-line characters into a newline character, ascii 10.
+.TP
+.BI "\-a " \"algorithm\"
+Specifies the particular encryption algorithm to use.  The complete
+set of available algorithms is defined by the current version of
+OpenSSL.  The default algorithm is taken from the encryption-
+algorithm config variable.
+.TP
+.BI "\-k " key_length
+Specifies the key length, in bits, for the selected encryption
+algorithm.  This only makes sense for those algorithms that support
+a variable key length.  The default value is taken from the
+\fBencryption\-key\-length\fP config variable.
+.TP
+.BI "\-i " iteration_count
+Specifies the number of times the password is hashed to generate
+a key.  The only purpose of this is to make it computationally
+more expensive for an attacker to search the key space exhaustively.
+This should be a multiple of 1,000 and should not exceed about 65
+million; the value 0 indicates just one application of the hashing
+algorithm.  The default value is taken from the
+\fBencryption\-iteration\-count\fP config variable.
+.SH "SEE ALSO"
+.BR multify (1)

+ 17 - 0
doc/man/pfm-bba.1

@@ -0,0 +1,17 @@
+.\" Automatically generated by pfm-bba -write-bam
+.TH PFM-BBA 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+pfm-bba \- generate .bba files from .pfm files
+.SH SYNOPSIS
+.SH DESCRIPTION
+pfm\-bba generates a .bba file from a .pfm file that lists the planar bounding volume of the pfm's internal data.
+.SH OPTIONS
+.TP
+.B \-z
+Treats (0,0,0) in the pfm file as a special don't-touch value.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting bba file will be written.
+.TP
+.B \-h
+Display this help page.

+ 70 - 0
doc/man/pfm-trans.1

@@ -0,0 +1,70 @@
+.\" Automatically generated by pfm-trans -write-bam
+.TH PFM-TRANS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+pfm-trans \- transform .pfm files
+.SH SYNOPSIS
+.SH DESCRIPTION
+pfm\-trans reads an pfm file and transforms it, filters it, operates on it, writing the output to another pfm file.  A pfm file contains a 2\-d table of floating\-point values.
+.SH OPTIONS
+.TP
+.B \-z
+Treats (0,0,0) in the pfm file as a special don't-touch value.
+.TP
+.BI "\-nan " "num_channels"
+Treats a NaN in any of the first num_channels channels as a special don't-touch value.
+.TP
+.BI "\-resize " "width,height"
+Resamples the pfm file to scale it to the indicated grid size.  A simple box filter is applied during the scale.  Don't confuse this with -TS, which scales the individual point values, but doesn't change the number of points.
+.TP
+.BI "\-crop " "xbegin,xend,ybegin,yend"
+Crops the pfm file to the indicated subregion.
+.TP
+.B \-autocrop
+Automatically crops to the smallest possible rectangle that includes all points.  Requires -z or -nan.
+.TP
+.BI "\-rotate " "degrees"
+Rotates the pfm file the specified number of degrees counterclockwise, which must be a multiple of 90.
+.TP
+.B \-mirror_x
+Flips the pfm file about the x axis.
+.TP
+.B \-mirror_y
+Flips the pfm file about the y axis.
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting pfm file will be written.  This is only valid when there is only one input pfm file on the command line.  If you want to process multiple files simultaneously, you must use -d.
+.TP
+.BI "\-d " "dirname"
+Specify the name of the directory in which to write the processed pfm files.  If you are processing only one pfm file, this may be omitted in lieu of the -o option.
+.TP
+.BI "\-vis " "filename.bam"
+Generates a bam file that represents a visualization of the pfm file as a 3-D geometric mesh.  If -vistex is specified, the mesh is textured.
+.TP
+.B \-visinv
+Inverts the visualization, generating a uniform 2-d mesh with the 3-d depth values encoded in the texture coordinates.
+.TP
+.B \-vis2d
+Respect only the first two components of each depth value, ignoring z.
+.TP
+.BI "\-vistex " "texture.jpg"
+Specifies the name of the texture to apply to the visualization.
+.TP
+.BI "\-ls " "filename.txt"
+Lists the points in the file to the indicated text file.
+.TP
+.B \-h
+Display this help page.

+ 1 - 0
doc/man/punzip.1

@@ -0,0 +1 @@
+pzip.1

+ 50 - 0
doc/man/pview.1

@@ -0,0 +1,50 @@
+.TH PVIEW 1 "27 December 2014" "" Panda3D
+.SH NAME
+pview \- quickly view a Panda model and/or animation
+.SH SYNOPSIS
+.B pview
+[
+.I opts
+]
+.I model
+[
+.I model ...
+]
+.br
+.B pview \-h
+.SH DESCRIPTION
+\fBpview\fP opens a quick Panda window for viewing one or more models
+and/or animations.
+.SH OPTIONS
+.TP
+.B \-a
+Convert and play animations, if loading an external file type
+(like .mb) directly and if the converter supports animations.
+Also implicitly enables the animation controls.
+.TP
+.B \-c
+Automatically center models within the viewing window on startup.
+This can also be achieved with the 'c' hotkey at runtime.
+.TP
+.B \-l
+Open the window before loading any models with the text "Loading"
+displayed in the window.  The default is not to open the window
+until all models are loaded.
+.TP
+.B \-i
+Ignore bundle/group names.  Normally, the <group> name must match
+the <bundle> name, or the animation will not be used.
+.TP
+.BI "\-s " filename
+After displaying the models, immediately take a screenshot and
+exit.
+.TP
+.B \-D
+Delete the model files after loading them (presumably this option
+will only be used when loading a temporary model file).
+.TP
+.B \-V
+Report the current version of Panda, and exit.
+.TP
+.B \-h
+Display this help text.

+ 64 - 0
doc/man/pzip.1

@@ -0,0 +1,64 @@
+.TH PZIP 1 "27 December 2014" "" Panda3D
+.SH NAME
+pzip, punzip \- compress or decompress files
+.SH SYNOPSIS
+.B pzip
+.I file
+[
+.I file2 file3 ...
+]
+.br
+.B pzip -c < \fIfile\fB > \fIdest_file\fB
+.br
+.B pzip -o
+.I dest_file file
+.PP
+.B punzip
+.I file.pz
+[
+.I file2.pz file3.pz ...
+]
+.br
+.B punzip -c < \fIfile.pz\fB > \fIdest_file\fB
+.br
+.B punzip -o
+.I dest_file file.pz
+.SH DESCRIPTION
+The \fBpzip\fP program compresses the named file(s) using the Panda
+native compression algorithm (gzip in practice, but with a different
+file header).  The compressed versions are written to a file with the
+same name as the original, but the extension .pz added to the
+filename, and the original file is removed (unless the version with
+\fB\-o\fP is used, in which case you can compress only one file, you
+specify the destination file name, and the original file is not removed).
+.PP
+In many cases, Panda can read the resulting .pz file directly,
+exactly as if it were still in its uncompressed original form.
+In fact, unless \fBvfs\-implicit\-pz\fP is set to \fBfalse\fP in your
+Config.prc file, you can also load the file by referencing it with its
+original filename (without the .pz extension), even though it no longer
+exists under that filename, and Panda will find the .pz file and
+transparently decompress it on the fly, as if the original, uncompressed
+file still existed.
+.PP
+Note that if you are adding files to a Panda multifile (.mf file) with the
+.BR multify (1)
+command, it is not necessary to encrypt them separately; \fBmultify\fP has an
+inline encryption option.
+.PP
+\fBpunzip\fP reverses the operation of a previous \fBpzip\fP command.
+It uncompresses the contents of the named source file(s) and removes
+the .pz extension.
+.SH OPTIONS
+These options apply to \fBpzip\fP only.
+.TP
+.B \-1
+compress faster
+.TP
+.B \-6
+compress default
+.TP
+.B \-9
+compress better (intermediate compression levels supported also)
+.SH "SEE ALSO"
+.BR multify (1)

+ 22 - 0
doc/man/softcvs.1

@@ -0,0 +1,22 @@
+.\" Automatically generated by softcvs -write-bam
+.TH SOFTCVS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+softcvs \- prepare a SoftImage database directory for adding to CVS
+.SH SYNOPSIS
+\fBsoftcvs\fR [opts]
+.SH DESCRIPTION
+softcvs is designed to prepare a directory hierarchy representing a SoftImage database for adding to CVS.  First, it eliminates SoftImage's silly filename\-based versioning system by renaming versioned filenames higher than 1\-0 back to version 1\-0.  Then, it rolls up all the files for each scene except the texture images into a Panda multifile, which is added to CVS; the texture images are directly added to CVS where they are.
+.PP
+The reduction of hundreds of SoftImage files per scene down to one multifile and a handle of texture images should greatly improve the update and commit times of CVS.
+.PP
+You must run this from within the root of a SoftImage database directory; e.g. the directory that contains SCENES, PICTURES, MODELS, and so on.
+.SH OPTIONS
+.TP
+.B \-nc
+Do not attempt to add newly-created files to CVS.  The default is to add them.
+.TP
+.BI "\-cvs " "cvs_binary"
+Specify how to run the cvs program for adding newly-created files.  The default is simply "cvs".
+.TP
+.B \-h
+Display this help page.

+ 40 - 0
doc/man/test_interrogate.1

@@ -0,0 +1,40 @@
+.TH TEST_INTERROGATE 1 "27 December 2014" "" Panda3D
+.SH NAME
+test_interrogate \- report symbols defined in an interrogate module
+.SH SYNOPSIS
+.B test_interrogate
+[
+.I opts
+]
+.I libfile.so
+[
+.I libfile.so ...
+]
+.SH DESCRIPTION
+Loads the given shared library or libraries, if possible, and reports the
+symbols, types, and functions available within those libraries as reported
+by interrogate.
+.PP
+In lieu of loading a shared library, you may also read the interrogate
+database file directly by specifying a filename like \fIlibfile.in\fP.
+This will report the symbols defined in that file only (without pulling
+in dependent files), and will not have any function pointers available.
+.SH OPTIONS
+.TP
+.BI "\-p " path
+Specify the search path for *.in files.  This option may be repeated.
+.TP
+.B \-f
+Give a detailed report of each function in the database, including
+synthesized functions like upcasts and downcasts.
+.TP
+.B \-t 
+Give a detailed report of every type in the database, including types
+like pointers and const pointers.
+.TP
+.B \-q
+Quickly load up each shared library, if possible, and then immediately
+exit.  Useful for quickly determining whether a library can even load.
+.SH "SEE ALSO"
+.BR interrogate (1),
+.BR interrogate_module (1)

+ 20 - 0
doc/man/text-stats.1

@@ -0,0 +1,20 @@
+.\" Automatically generated by text-stats -write-bam
+.TH TEXT-STATS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+text-stats \- text-based PStats client
+.SH SYNOPSIS
+.SH DESCRIPTION
+This is a simple PStats server that listens on a TCP port for a connection from a PStatClient in a Panda player.  It will then report frame rate and timing information sent by the player.
+.SH OPTIONS
+.TP
+.BI "\-p " "port"
+Specify the TCP port to listen for connections on.  By default, this is taken from the pstats-host Config variable.
+.TP
+.B \-r
+Show the raw frame data, in addition to boiling it down to a total time per collector.
+.TP
+.BI "\-o " "filename"
+Filename where to print. If not given then stderr is being used.
+.TP
+.B \-h
+Display this help page.

+ 19 - 0
doc/man/vrml-trans.1

@@ -0,0 +1,19 @@
+.\" Automatically generated by vrml-trans -write-bam
+.TH VRML-TRANS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+vrml-trans \- reads and writes VRML 2.0 files
+.SH SYNOPSIS
+\fBvrml-trans\fR [opts] input.wrl > output.wrl
+.br
+\fBvrml-trans\fR [opts] input.wrl output.wrl
+.br
+\fBvrml-trans\fR [opts] -o output.wrl input.wrl
+.SH DESCRIPTION
+This program reads a VRML 2.0 file (.wrl) and writes an essentially equivalent .wrl file.  It is primarily useful for debugging the VRML parser that is part of the Pandatool library.
+.SH OPTIONS
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting .wrl file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.B \-h
+Display this help page.

+ 72 - 0
doc/man/vrml2egg.1

@@ -0,0 +1,72 @@
+.\" Automatically generated by vrml2egg -write-bam
+.TH VRML2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+vrml2egg \- convert VRML 2.0 model files to .egg
+.SH SYNOPSIS
+\fBvrml2egg\fR [opts] input.wrl output.egg
+.br
+\fBvrml2egg\fR [opts] -o output.egg input.wrl
+.br
+\fBvrml2egg\fR [opts] input.wrl >output.egg
+.SH DESCRIPTION
+This program converts VRML 2.0 model files to egg.  Animated files, and VRML 1.0 files, are not supported.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input VRML file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input VRML file.  Normally, this can be inferred from the file itself.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If this is specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input VRML file.  Normally, this is y-up.
+.TP
+.B \-h
+Display this help page.

+ 17 - 0
doc/man/x-trans.1

@@ -0,0 +1,17 @@
+.\" Automatically generated by x-trans -write-bam
+.TH X-TRANS 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+x-trans \- reads and writes DirectX .x files
+.SH SYNOPSIS
+\fBx-trans\fR [opts] input.x output.x
+.br
+\fBx-trans\fR [opts] -o output.x input.x
+.SH DESCRIPTION
+This program reads a DirectX retained\-mode file (.x) and writes an essentially equivalent .x file.  It is primarily useful for debugging the X file parser that is part of the Pandatool library.
+.SH OPTIONS
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting .x file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file.
+.TP
+.B \-h
+Display this help page.

+ 103 - 0
doc/man/x2egg.1

@@ -0,0 +1,103 @@
+.\" Automatically generated by x2egg -write-bam
+.TH X2EGG 1 "27 December 2014" "1.9.0" Panda3D
+.SH NAME
+x2egg \- convert a DirectX .x file to an .egg file
+.SH SYNOPSIS
+\fBx2egg\fR [opts] input.x output.egg
+.br
+\fBx2egg\fR [opts] -o output.egg input.x
+.br
+\fBx2egg\fR [opts] input.x >output.egg
+.SH DESCRIPTION
+This program converts DirectX retained\-mode (.x) files to egg.  Polygon meshes, materials, and textures, as well as skeleton animation and skinning data, are supported.  All animations found in the source .x file are written together into the same egg file.
+.SH OPTIONS
+.TP
+.B \-noabs
+Don't allow the input DirectX file to have absolute pathnames.  If it does, abort with an error.  This option is designed to help detect errors when populating or building a standalone model tree, which should be self-contained and include only relative pathnames.
+.TP
+.B \-noexist
+Don't treat it as an error if the input file references pathnames (e.g. textures) that don't exist.  Normally, this will be flagged as an error and the command aborted; with this option, an egg file will be generated anyway, referencing pathnames that do not exist.
+.TP
+.B \-ignore
+Ignore non-fatal errors and generate an egg file anyway.
+.TP
+.BI "\-a " "name"
+Specify the name of the animated character to generate.  This option forces the model to be converted as an animatable character, even if animation channels are not found in the file.  Without this option, the model is converted as a static model (which is usually more efficient to load within Panda), unless animation channels are present in the .x file.
+.TP
+.BI "\-fr " "fps"
+Specify the frame rate of the resulting animation.  If this is omitted or 0, the frame rate is inferred from the file itself; but note that the file must contain evenly-spaced keyframes.
+.TP
+.B \-anim
+Generate animation data only (all geometry will be discarded).
+.TP
+.B \-model
+Generate model data only (all animation data will be discarded).
+.TP
+.BI "\-pr " "path_replace"
+Sometimes references to other files (textures, external references) are stored with a full path that is appropriate for some other system, but does not exist here.  This option may be used to specify how those invalid paths map to correct paths.  Generally, this is of the form 'orig_prefix=replacement_prefix', which indicates a particular initial sequence of characters that should be replaced with a new sequence; e.g. '/c/home/models=/beta/fish'.  If the replacement prefix does not begin with a slash, the file will then be searched for along the search path specified by -pp.  You may use standard filename matching characters ('*', '?', etc.) in the original prefix, and '**' as a component by itself stands for any number of components.
+
+This option may be repeated as necessary; each file will be tried against each specified method, in the order in which they appear in the command line, until the file is found.  If the file is not found, the last matching prefix is used anyway.
+.TP
+.BI "\-pp " "dirname"
+Adds the indicated directory name to the list of directories to search for filenames referenced by the source file.  This is used only for relative paths, or for paths that are made relative by a -pr replacement string that doesn't begin with a leading slash.  The model-path is always implicitly searched anyway.
+.TP
+.BI "\-ps " "path_store"
+Specifies the way an externally referenced file is to be represented in the resulting output file.  This assumes the named filename actually exists; see -pr to indicate how to deal with external references that have bad pathnames.  This option will not help you to find a missing file, but simply controls how filenames are represented in the output.
+
+The option may be one of: rel, abs, rel_abs, strip, or keep.  If either rel or rel_abs is specified, the files are made relative to the directory specified by -pd.  The default is rel.
+.TP
+.BI "\-pd " "path_directory"
+Specifies the name of a directory to make paths relative to, if '-ps rel' or '-ps rel_abs' is specified.  If this is omitted, the directory name is taken from the name of the output file.
+.TP
+.BI "\-pc " "target_directory"
+Copies textures and other dependent files into the indicated directory.  If a relative pathname is specified, it is relative to the directory specified with -pd, above.
+.TP
+.BI "\-ui " "units"
+Specify the units of the input DirectX file.
+.TP
+.BI "\-uo " "units"
+Specify the units of the resulting egg file.  If both this and -ui are specified, the vertices in the egg file will be scaled as necessary to make the appropriate units conversion; otherwise, the vertices will be left as they are.
+.TP
+.B \-no
+Strip all normals.
+.TP
+.B \-np
+Strip existing normals and redefine polygon normals.
+.TP
+.BI "\-nv " "threshold"
+Strip existing normals and redefine vertex normals.  Consider an edge between adjacent polygons to be smooth if the angle between them is less than threshold degrees.
+.TP
+.B \-nn
+Preserve normals exactly as they are.  This is the default.
+.TP
+.BI "\-tbn " "name"
+Compute tangent and binormal for the named texture coordinate set(s).  The name may include wildcard characters such as * and ?.  The normal must already exist or have been computed via one of the above options.  The tangent and binormal are used to implement bump mapping and related texture-based lighting effects.  This option may be repeated as necessary to name multiple texture coordinate sets.
+.TP
+.B \-tbnall
+Compute tangent and binormal for all texture coordinate sets.  This is equivalent to -tbn "*".
+.TP
+.B \-tbnauto
+Compute tangent and binormal for all normal maps. 
+.TP
+.BI "\-TS " "sx[,sy,sz]"
+Scale the model uniformly by the given factor (if only one number is given) or in each axis by sx, sy, sz (if three numbers are given).
+.TP
+.BI "\-TR " "x,y,z"
+Rotate the model x degrees about the x axis, then y degrees about the y axis, and then z degrees about the z axis.
+.TP
+.BI "\-TA " "angle,x,y,z"
+Rotate the model angle degrees counterclockwise about the given axis.
+.TP
+.BI "\-TT " "x,y,z"
+Translate the model by the indicated amount.
+
+All transformation options (-TS, -TR, -TA, -TT) are cumulative and are applied in the order they are encountered on the command line.
+.TP
+.BI "\-o " "filename"
+Specify the filename to which the resulting egg file will be written.  If this option is omitted, the last parameter name is taken to be the name of the output file, or standard output is used if there are no other parameters.
+.TP
+.BI "\-cs " "coordinate-system"
+Specify the coordinate system of the input DirectX file.  Normally, this is y-up-left.
+.TP
+.B \-h
+Display this help page.

+ 5 - 0
makepanda/makepanda.py

@@ -6290,6 +6290,8 @@ def MakeInstallerLinux():
         else:
             InstallPanda(destdir="targetroot", prefix="/usr", outputdir=GetOutputDir(), libdir=GetDebLibDir())
             oscmd("chmod -R 755 targetroot/usr/share/panda3d")
+            oscmd("mkdir -p targetroot/usr/share/man/man1")
+            oscmd("cp doc/man/*.1 targetroot/usr/share/man/man1/")
 
         oscmd("dpkg --print-architecture > "+GetOutputDir()+"/tmp/architecture.txt")
         pkg_arch = ReadFile(GetOutputDir()+"/tmp/architecture.txt").strip()
@@ -6463,6 +6465,9 @@ def MakeInstallerOSX():
     # Trailing newline is important, works around a bug in OSX
     WriteFile("dstroot/tools/etc/paths.d/Panda3D", "/Developer/Tools/Panda3D\n")
 
+    oscmd("mkdir -p dstroot/tools/usr/share/man/man1")
+    oscmd("cp doc/man/*.1 dstroot/tools/usr/share/man/man1/")
+
     for base in os.listdir(GetOutputDir()+"/bin"):
         binname = "dstroot/tools/Developer/Tools/Panda3D/" + base
         # OSX needs the -R argument to copy symbolic links correctly, it doesn't have -d. How weird.

+ 1 - 0
pandatool/src/bam/bamInfo.cxx

@@ -34,6 +34,7 @@
 ////////////////////////////////////////////////////////////////////
 BamInfo::
 BamInfo() {
+  set_program_brief("describe the contents of .bam files");
   set_program_description
     ("This program scans one or more Bam files--Panda's Binary Animation "
      "and Models native binary format--and describes their contents.");

+ 1 - 0
pandatool/src/bam/bamToEgg.cxx

@@ -28,6 +28,7 @@ BamToEgg::
 BamToEgg() :
   SomethingToEgg("bam", ".bam")
 {
+  set_program_brief("convert a native Panda .bam file to an .egg file");
   set_program_description
     ("This program converts native Panda bam files to egg.  The conversion "
      "is somewhat incomplete; running egg2bam followed by bam2egg should not "

+ 1 - 0
pandatool/src/bam/eggToBam.cxx

@@ -43,6 +43,7 @@ EggToBam::
 EggToBam() :
   EggToSomething("Bam", ".bam", true, false)
 {
+  set_program_brief("convert .egg files to .bam files");
   set_program_description
     ("This program reads Egg files and outputs Bam files, the binary format "
      "suitable for direct loading of animation and models into Panda.  Bam "

+ 1 - 0
pandatool/src/bam/ptsToBam.cxx

@@ -32,6 +32,7 @@
 PtsToBam::
 PtsToBam() : WithOutputFile(true, false, true)
 {
+  set_program_brief("convert point cloud data into a .bam file");
   set_program_description
     ("This program reads a point clound in a pts file and outputs a bam files, "
      "suitable for viewing in Panda.");

+ 1 - 0
pandatool/src/cvscopy/testCopy.cxx

@@ -23,6 +23,7 @@
 ////////////////////////////////////////////////////////////////////
 TestCopy::
 TestCopy() {
+  set_program_brief("copy files into a CVS source hierarchy");
   set_program_description
     ("This program copies one or more files into a CVS source hierarchy.  "
      "Rather than copying the named files immediately into the current "

+ 1 - 0
pandatool/src/daeprogs/daeToEgg.cxx

@@ -37,6 +37,7 @@ DAEToEgg():
      "that export models with inverted transparency, such as Google SketchUp.",
      &SomethingToEgg::dispatch_none, &_invert_transparency);
 
+  set_program_brief("convert COLLADA assets into .egg files");
   set_program_description
     ("This program converts .dae files (COLLADA Digital Asset Exchange) to .egg.");
 

+ 1 - 0
pandatool/src/daeprogs/eggToDAE.cxx

@@ -40,6 +40,7 @@ EggToDAE() :
   EggToSomething("COLLADA", ".dae", true, false)
 {
   set_binary_output(false);
+  set_program_brief("convert .egg files into COLLADA asset files");
   set_program_description
     ("This program converts files from the egg format to the COLLADA "
      ".dae (Digital Asset Exchange) format.");

+ 1 - 0
pandatool/src/dxfprogs/dxfPoints.cxx

@@ -28,6 +28,7 @@ DXFPoints() :
   // output files.
   _preferred_extension = ".txt";
 
+  set_program_brief("extract points from AutoCAD .dxf files");
   set_program_description
     ("This program reads an AutoCAD .dxf file and generates a simple "
      "list of all the points contained within it, one per line, to a "

+ 1 - 0
pandatool/src/dxfprogs/dxfToEgg.cxx

@@ -30,6 +30,7 @@ DXFToEgg() :
   add_normals_options();
   add_transform_options();
 
+  set_program_brief("convert AutoCAD .dxf files to .egg files");
   set_program_description
     ("This program converts DXF (AutoCAD interchange format) to egg.  It "
      "only converts polygon data, with no fancy tricks.  DXF does not support "

+ 1 - 0
pandatool/src/dxfprogs/eggToDXF.cxx

@@ -27,6 +27,7 @@ EggToDXF() :
   EggToSomething("DXF", ".dxf", true, false)
 {
   set_binary_output(true);
+  set_program_brief("convert .egg files to AutoCAD .dxf files");
   set_program_description
     ("This program converts files from egg format to AutoCAD DXF format.  "
      "Since DXF does not support nested hierarchies, vertex normals, or any "

+ 1 - 0
pandatool/src/egg-mkfont/eggMakeFont.cxx

@@ -41,6 +41,7 @@
 ////////////////////////////////////////////////////////////////////
 EggMakeFont::
 EggMakeFont() : EggWriter(true, false) {
+  set_program_brief("generates .egg files with rasterized font glyphs");
   set_program_description
     ("egg-mkfont uses the FreeType library to generate an egg file "
      "and a series of texture images from a font file "

+ 1 - 0
pandatool/src/egg-optchar/eggOptchar.cxx

@@ -49,6 +49,7 @@ EggOptchar() {
   add_transform_options();
   add_fixrest_option();
 
+  set_program_brief("optimizes character models and animations in .egg files");
   set_program_description
     ("egg-optchar performs basic optimizations of a character model "
      "and its associated animations, primarily by analyzing the "

+ 1 - 0
pandatool/src/egg-palettize/eggPalettize.cxx

@@ -35,6 +35,7 @@
 ////////////////////////////////////////////////////////////////////
 EggPalettize::
 EggPalettize() : EggMultiFilter(true) {
+  set_program_brief("pack textures from various .egg models into palette images");
   set_program_description
     ("egg-palettize attempts to pack several texture maps from various models "
      "together into one or more palette images, for improved rendering performance "

+ 6 - 5
pandatool/src/egg-qtess/eggQtess.cxx

@@ -26,9 +26,10 @@ EggQtess::
 EggQtess() {
   add_normals_options();
 
+  set_program_brief("tesselate NURBS surfaces in .egg files");
   set_program_description
-    ("egg-qtess reads an egg file, tesselates all of its NURBS surfaces "
-     "using a simple uniform tesselation, and outputs a polygonal "
+    ("egg-qtess reads an egg file, tessellates all of its NURBS surfaces "
+     "using a simple uniform tessellation, and outputs a polygonal "
      "egg file.\n\n"
 
      "Characters are supported, soft-skinned and otherwise; joint "
@@ -62,12 +63,12 @@ EggQtess() {
      "Specify an approximate number of triangles to produce.  This "
      "is the total number of triangles for the entire egg file, "
      "including those surfaces that have already been given an "
-     "explicit tesselation by a parameter file.",
+     "explicit tessellation by a parameter file.",
      &EggQtess::dispatch_int, NULL, &_total_tris);
 
   add_option
     ("ap", "", 0,
-     "Attempt to automatically place tesselation lines where they'll "
+     "Attempt to automatically place tessellation lines where they'll "
      "do the most good on each surface (once the number of polygons "
      "for the surface has already been determined).",
      &EggQtess::dispatch_none, &QtessGlobals::_auto_place);
@@ -93,7 +94,7 @@ EggQtess() {
      "Respect subdivision parameters given in the egg file.  If this "
      "is specified, the egg file may define the effective number of "
      "patches of each NURBS entry.  This can be used alone or in "
-     "conjunction with -u or -t to fine-tune the uniform tesselation "
+     "conjunction with -u or -t to fine-tune the uniform tessellation "
      "on a per-surface basis.  (This is ignored if -ad is in effect.)",
      &EggQtess::dispatch_none, &QtessGlobals::_respect_egg);
 

+ 1 - 0
pandatool/src/eggprogs/eggCrop.cxx

@@ -27,6 +27,7 @@
 ////////////////////////////////////////////////////////////////////
 EggCrop::
 EggCrop() {
+  set_program_brief("crop geometry in an .egg file");
   set_program_description
     ("egg-crop strips out all parts of an egg file that fall outside of an "
      "arbitrary bounding volume, specified with a minimum and maximum point "

+ 1 - 0
pandatool/src/eggprogs/eggListTextures.cxx

@@ -24,6 +24,7 @@
 ////////////////////////////////////////////////////////////////////
 EggListTextures::
 EggListTextures() {
+  set_program_brief("list textures referenced by an .egg file");
   set_program_description
     ("egg-list-textures reads an egg file and writes a list of the "
      "textures it references.  It is particularly useful for building "

+ 1 - 0
pandatool/src/eggprogs/eggMakeTube.cxx

@@ -29,6 +29,7 @@
 EggMakeTube::
 EggMakeTube() {
 
+  set_program_brief("generate a tube or sphere from geometry in an .egg file");
   set_program_description
     ("egg-make-tube generates an egg file representing a \"tube\" model, "
      "a cylinder capped on both ends by hemispheres.  This is similar "

+ 1 - 0
pandatool/src/eggprogs/eggRename.cxx

@@ -22,6 +22,7 @@
 ////////////////////////////////////////////////////////////////////
 EggRename::
 EggRename() {
+  set_program_brief("rename nodes in .egg files");
   set_program_description
     ("egg-rename reads one or more egg files and writes back with modified"
      "node names. ie. suppressing prefix from all the nodes' names. ");

+ 1 - 0
pandatool/src/eggprogs/eggRetargetAnim.cxx

@@ -34,6 +34,7 @@ EggRetargetAnim() {
   add_path_replace_options();
   add_path_store_options();
 
+  set_program_brief("remove transformations from animation data in .egg files");
   set_program_description
     ("egg-retarget-anim reads a character model and its associated animation "
      "files, and removes the translations and scales from the animation "

+ 1 - 0
pandatool/src/eggprogs/eggTextureCards.cxx

@@ -31,6 +31,7 @@
 ////////////////////////////////////////////////////////////////////
 EggTextureCards::
 EggTextureCards() : EggWriter(true, true) {
+  set_program_brief("generate an .egg file containing texture cards");
   set_program_description
     ("egg-texture-cards generates an egg file consisting of several "
      "square polygons, one for each texture name that appears on the "

+ 1 - 0
pandatool/src/eggprogs/eggToC.cxx

@@ -33,6 +33,7 @@ EggToC::
 EggToC() :
   EggToSomething("C", ".c", true, true)
 {
+  set_program_brief("convert .egg geometry into compilable C tables");
   set_program_description
     ("This program reads Egg files and outputs code that will almost "
      "compile as a C or C++ program.  You get to define the data structures "

+ 1 - 0
pandatool/src/eggprogs/eggTopstrip.cxx

@@ -34,6 +34,7 @@ EggTopstrip() {
   add_path_replace_options();
   add_path_store_options();
 
+  set_program_brief("unapplies animation from a joint in an .egg file");
   set_program_description
     ("egg-topstrip reads a character model and its associated animation "
      "files, and unapplies the animation from one of the top joints.  "

+ 1 - 0
pandatool/src/eggprogs/eggTrans.cxx

@@ -30,6 +30,7 @@ EggTrans() {
   add_texture_options();
   add_delod_options();
 
+  set_program_brief("apply transformations and optimizations to an .egg file");
   set_program_description
     ("egg-trans reads an egg file and writes an essentially equivalent "
      "egg file to the standard output, or to the file specified with -o.  "

+ 1 - 0
pandatool/src/fltprogs/eggToFlt.cxx

@@ -47,6 +47,7 @@ EggToFlt() :
   EggToSomething("MultiGen", ".flt", true, false)
 {
   set_binary_output(true);
+  set_program_brief("convert files from .egg format to MultiGen .flt");
   set_program_description
     ("egg2lt converts files from egg format to MultiGen .flt "
      "format.  It attempts to be as robust as possible, and matches "

+ 1 - 0
pandatool/src/fltprogs/fltCopy.cxx

@@ -29,6 +29,7 @@
 ////////////////////////////////////////////////////////////////////
 FltCopy::
 FltCopy() {
+  set_program_brief("copy MultiGen .flt files into a CVS source hierarchy");
   set_program_description
     ("fltcopy copies one or more MultiGen .flt files into a "
      "CVS source hierarchy.  "

+ 1 - 0
pandatool/src/fltprogs/fltInfo.cxx

@@ -25,6 +25,7 @@
 ////////////////////////////////////////////////////////////////////
 FltInfo::
 FltInfo() {
+  set_program_brief("describe the contents of a MultiGen .flt file");
   set_program_description
     ("This program reads a MultiGen OpenFlight (.flt) file and reports "
      "some interesting things about its contents.");

+ 1 - 0
pandatool/src/fltprogs/fltToEgg.cxx

@@ -34,6 +34,7 @@ FltToEgg() :
   add_transform_options();
   add_merge_externals_options();
 
+  set_program_brief("convert a MultiGen .flt file to .egg");
   set_program_description
     ("This program converts MultiGen OpenFlight (.flt) files to egg.  Most "
      "features of MultiGen that are also recognized by egg are supported.");

+ 1 - 0
pandatool/src/fltprogs/fltTrans.cxx

@@ -30,6 +30,7 @@ FltTrans() :
   // output files.
   _preferred_extension = ".flt";
 
+  set_program_brief("apply various operations to a MultiGen .flt file");
   set_program_description
     ("This program reads a MultiGen OpenFlight (.flt) file and writes an "
      "essentially equivalent .flt file, to the file specified with -o (or "

+ 1 - 0
pandatool/src/imageprogs/imageFixHiddenColor.cxx

@@ -23,6 +23,7 @@
 ////////////////////////////////////////////////////////////////////
 ImageFixHiddenColor::
 ImageFixHiddenColor() : ImageFilter(true) {
+  set_program_brief("change the color of transparent pixels in an image");
   set_program_description
     ("This program is designed to fix the color channels of an "
      "alpha-cutout image, making the \"color\" of the invisible part of the "

+ 1 - 0
pandatool/src/imageprogs/imageInfo.cxx

@@ -23,6 +23,7 @@
 ////////////////////////////////////////////////////////////////////
 ImageInfo::
 ImageInfo() {
+  set_program_brief("report the size of image files");
   set_program_description
     ("This program reads the headers of a series of one or more "
      "image files and reports the image sizes to standard output.");

+ 1 - 0
pandatool/src/imageprogs/imageResize.cxx

@@ -23,6 +23,7 @@
 ////////////////////////////////////////////////////////////////////
 ImageResize::
 ImageResize() : ImageFilter(true) {
+  set_program_brief("resize an image file");
   set_program_description
     ("This program reads an image file and resizes it to a larger or smaller "
      "image file.");

+ 1 - 0
pandatool/src/imageprogs/imageTrans.cxx

@@ -23,6 +23,7 @@
 ////////////////////////////////////////////////////////////////////
 ImageTrans::
 ImageTrans() : ImageFilter(true) {
+  set_program_brief("apply transformations to an image file");
   set_program_description
     ("This program reads an image file and writes a similar "
      "image file to the output.  It can implicitly convert from one image "

+ 1 - 0
pandatool/src/imageprogs/imageTransformColors.cxx

@@ -25,6 +25,7 @@
 ////////////////////////////////////////////////////////////////////
 ImageTransformColors::
 ImageTransformColors() {
+  set_program_brief("transform colors in an image file");
   set_program_description
     ("This program can apply a global color transform to all of the "
      "pixels in an image, or in a series of images.  This can be used, "

+ 1 - 0
pandatool/src/lwoprogs/lwoScan.cxx

@@ -29,6 +29,7 @@ LwoScan() {
   clear_runlines();
   add_runline("[opts] input.lwo");
 
+  set_program_brief("describe the contents of a Lightwave object file");
   set_program_description
     ("This program simply reads a Lightwave object file and dumps its "
      "contents to standard output.  It's mainly useful for debugging "

+ 1 - 0
pandatool/src/lwoprogs/lwoToEgg.cxx

@@ -35,6 +35,7 @@ LwoToEgg() :
   add_normals_options();
   add_transform_options();
 
+  set_program_brief("convert a Lightwave Object file to .egg");
   set_program_description
     ("This program converts Lightwave Object (.lwo) files to egg.  Many "
      "rendering characteristics of Lightwave (like layered shaders, etc.) "

+ 1 - 0
pandatool/src/mayaprogs/eggToMaya.cxx

@@ -40,6 +40,7 @@ EggToMaya() :
   add_units_options();
 
   set_binary_output(true);
+  set_program_brief("convert .egg files to Maya .mb or .ma files");
   set_program_description
     ("egg2maya converts files from egg format to Maya .mb or .ma "
      "format.  It contains support for basic geometry (polygons with textures)."

+ 1 - 0
pandatool/src/mayaprogs/mayaCopy.cxx

@@ -43,6 +43,7 @@
 ////////////////////////////////////////////////////////////////////
 MayaCopy::
 MayaCopy() {
+  set_program_brief("copy Maya .mb files into a CVS source hierarchy");
   set_program_description
     ("mayacopy copies one or more Maya .mb files into a "
      "CVS source hierarchy.  "

+ 1 - 0
pandatool/src/mayaprogs/mayaToEgg.cxx

@@ -64,6 +64,7 @@ MayaToEgg() :
   add_normals_options();
   add_transform_options();
 
+  set_program_brief("convert Maya model files to .egg");
   set_program_description
     ("This program converts Maya model files to egg.  Static and animatable "
      "models can be converted, with polygon or NURBS output.  Animation tables "

+ 1 - 0
pandatool/src/mayaprogs/mayaToEgg_server.cxx

@@ -40,6 +40,7 @@ MayaToEggServer() :
   add_normals_options();
   add_transform_options();
 
+  set_program_brief("convert Maya model files to .egg");
   set_program_description
     ("This program converts Maya model files to egg.  Static and animatable "
      "models can be converted, with polygon or NURBS output.  Animation tables "

+ 1 - 0
pandatool/src/miscprogs/binToC.cxx

@@ -33,6 +33,7 @@ BinToC() :
   add_runline("input -o output.c");
   add_runline("input >output.c");
 
+  set_program_brief("convert binary data to a compilable C table");
   set_program_description
     ("bin2c is a simple utility program to read a disk file, presumably "
      "one with binary contents, and output a table that can be "

+ 1 - 0
pandatool/src/objprogs/eggToObj.cxx

@@ -28,6 +28,7 @@ EggToObj::
 EggToObj() :
   EggToSomething("Obj", ".obj", true, false)
 {
+  set_program_brief("convert .egg files to .obj");
   set_program_description
     ("This program converts egg files to obj.  It "
      "only converts polygon data, with no fancy tricks.  "

+ 1 - 0
pandatool/src/objprogs/objToEgg.cxx

@@ -31,6 +31,7 @@ ObjToEgg() :
   add_normals_options();
   add_transform_options();
 
+  set_program_brief("convert .obj files to .egg");
   set_program_description
     ("This program converts obj files to egg.  It "
      "only converts polygon data, with no fancy tricks.  "

+ 1 - 0
pandatool/src/pfmprogs/pfmBba.cxx

@@ -24,6 +24,7 @@
 ////////////////////////////////////////////////////////////////////
 PfmBba::
 PfmBba() {
+  set_program_brief("generate .bba files from .pfm files");
   set_program_description
     ("pfm-bba generates a .bba file from a .pfm file that lists the "
      "planar bounding volume of the pfm's internal data.");

+ 1 - 0
pandatool/src/pfmprogs/pfmTrans.cxx

@@ -37,6 +37,7 @@ PfmTrans() {
 
   add_transform_options();
 
+  set_program_brief("transform .pfm files");
   set_program_description
     ("pfm-trans reads an pfm file and transforms it, filters it, "
      "operates on it, writing the output to another pfm file.  A pfm "

+ 133 - 3
pandatool/src/progbase/programBase.cxx

@@ -27,6 +27,7 @@
 #include "configVariableBool.h"
 #include "panda_getopt_long.h"
 #include "preprocess_argv.h"
+#include "pandaVersion.h"
 
 #include <stdlib.h>
 #include <algorithm>
@@ -80,7 +81,7 @@ static ConfigVariableBool use_terminal_width
 //  Description:
 ////////////////////////////////////////////////////////////////////
 ProgramBase::
-ProgramBase() {
+ProgramBase(const string &name) : _name(name) {
   // Set up Notify to write output to our own formatted stream.
   Notify::ptr()->set_ostream_ptr(new WordWrapStream(this), true);
 
@@ -141,7 +142,7 @@ void ProgramBase::
 show_usage() {
   nout << "\rUsage:\n";
   Runlines::const_iterator ri;
-  string prog = "  " +_program_name.get_basename_wo_extension();
+  string prog = "  " + _program_name.get_basename_wo_extension();
 
   for (ri = _runlines.begin(); ri != _runlines.end(); ++ri) {
     show_text(prog, prog.length() + 1, *ri);
@@ -189,6 +190,92 @@ show_text(const string &prefix, int indent_width, string text) {
               prefix, indent_width, text, _terminal_width);
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: ProgramBase::write_man_page
+//       Access: Public
+//  Description: Generates a man page in nroff syntax based on the
+//               description and options.  This is useful when
+//               creating a man page for this utility.
+////////////////////////////////////////////////////////////////////
+void ProgramBase::
+write_man_page(ostream &out) {
+  string prog = _program_name.get_basename_wo_extension();
+  out << ".\\\" Automatically generated by " << prog << " -write-bam\n";
+
+  // Format the man page title as the uppercase version of the program name,
+  // as per the UNIX manual conventions.
+  out << ".TH ";
+  string::const_iterator si;
+  for (si = _name.begin(); si != _name.end(); ++si) {
+    out << (char)toupper(*si);
+  }
+
+  // Generate a date string for inclusion into the footer.
+  char date_str[256];
+  date_str[0] = 0;
+  time_t current_time = time(NULL);
+
+  if (current_time != (time_t) -1) {
+    tm *today = localtime(&current_time);
+    if (today == NULL || 0 == strftime(date_str, 256, "%d %B %Y", today)) {
+      date_str[0] = 0;
+    }
+  }
+
+  out << " 1 \"" << date_str << "\" \"" PANDA_VERSION_STR "\" Panda3D\n";
+
+  out << ".SH NAME\n";
+  if (_brief.empty()) {
+    out << _name << "\n";
+  } else {
+    out << _name << " \\- " << _brief << "\n";
+  }
+
+  out << ".SH SYNOPSIS\n";
+  Runlines::const_iterator ri = _runlines.begin();
+  if (ri != _runlines.end()) {
+    out << "\\fB" << prog << "\\fR " << *ri << "\n";
+    ++ri;
+  }
+
+  for (; ri != _runlines.end(); ++ri) {
+    out << ".br\n";
+    out << "\\fB" << prog << "\\fR " << *ri << "\n";
+  }
+
+  out << ".SH DESCRIPTION\n";
+  string::const_iterator di;
+  char prev = 0;
+  for (di = _description.begin(); di != _description.end(); ++di) {
+    if ((*di) == '-') {
+      // We have to escape hyphens.
+      out << "\\-";
+    } else if (prev == '\n' && (*di) == '\n') {
+      // Indicate the start of a new paragraph.
+      out << ".PP\n";
+    } else {
+      out << (char)(*di);
+    }
+    prev = (*di);
+  }
+  out << "\n";
+
+  out << ".SH OPTIONS\n";
+  sort_options();
+  OptionsByIndex::const_iterator oi;
+  for (oi = _options_by_index.begin(); oi != _options_by_index.end(); ++oi) {
+    const Option &opt = *(*oi);
+    out << ".TP\n";
+
+    if (opt._parm_name.empty()) {
+      out << ".B \\-" << opt._option << "\n";
+    } else {
+      out << ".BI \"\\-" << opt._option << " \" \"" << opt._parm_name << "\"\n";
+    }
+    out << opt._description << "\n";
+  }
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: ProgramBase::parse_command_line
 //       Access: Public, Virtual
@@ -208,13 +295,41 @@ parse_command_line(int argc, char **argv) {
   extern int optind;
   optind = 0;
 
-
   _program_name = Filename::from_os_specific(argv[0]);
   int i;
   for (i = 1; i < argc; i++) {
     _program_args.push_back(argv[i]);
   }
 
+  if (_name.empty()) {
+    _name = _program_name.get_basename_wo_extension();
+  }
+
+  // Catch a special hidden option: -write-man, which causes the tool
+  // to generate a manual page.
+  if (argc > 1 && strcmp(argv[1], "-write-man") == 0) {
+    if (argc == 2) {
+      write_man_page(cout);
+
+    } else if (argc == 3) {
+      if (strlen(argv[2]) == 1 && argv[2][0] == '-') {
+        write_man_page(cout);
+
+      } else {
+        pofstream man_out(argv[2], ios::out | ios::trunc);
+        if (!man_out) {
+          cerr << "Failed to open output file " << argv[2] << "!\n";
+        }
+        write_man_page(man_out);
+        man_out.close();
+      }
+    } else {
+      cerr << "Invalid number of options for -write-man!\n";
+      exit(1);
+    }
+    exit(0);
+  }
+
   // Build up the long options list and the short options string for
   // getopt_long_only().
   pvector<struct option> long_options;
@@ -438,6 +553,21 @@ post_command_line() {
   return true;
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: ProgramBase::set_program_brief
+//       Access: Protected
+//  Description: Sets a brief synopsis of the program's function.
+//               This is currently only used for generating the
+//               synopsis of the program's man page.
+//
+//               This should be of the format:
+//               "perform operation foo on bar files"
+////////////////////////////////////////////////////////////////////
+void ProgramBase::
+set_program_brief(const string &brief) {
+  _brief = brief;
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: ProgramBase::set_program_description
 //       Access: Protected

+ 6 - 1
pandatool/src/progbase/programBase.h

@@ -36,7 +36,7 @@
 ////////////////////////////////////////////////////////////////////
 class ProgramBase {
 public:
-  ProgramBase();
+  ProgramBase(const string &name = string());
   virtual ~ProgramBase();
 
   void show_description();
@@ -46,6 +46,8 @@ public:
   INLINE void show_text(const string &text);
   void show_text(const string &prefix, int indent_width, string text);
 
+  void write_man_page(ostream &out);
+
   virtual void parse_command_line(int argc, char **argv);
 
   string get_exec_command() const;
@@ -61,6 +63,7 @@ protected:
   virtual bool handle_args(Args &args);
   virtual bool post_command_line();
 
+  void set_program_brief(const string &brief);
   void set_program_description(const string &description);
   void clear_runlines();
   void add_runline(const string &runline);
@@ -137,6 +140,8 @@ private:
     bool operator () (const Option *a, const Option *b) const;
   };
 
+  string _name;
+  string _brief;
   string _description;
   typedef vector_string Runlines;
   Runlines _runlines;

+ 1 - 0
pandatool/src/progbase/test_prog.cxx

@@ -28,6 +28,7 @@ public:
 
 TestProgram::
 TestProgram() {
+  set_program_brief("test program for ProgramBase class");
   set_program_description
     ("This is a simple test program to verify the effectiveness of the "
      "ProgramBase base class as a base class for simple programs.  It "

Vissa filer visades inte eftersom för många filer har ändrats