libpgm - functions to support portable graymap (PGM) programs
void pgm_init( int *argcP, char *argv );
gray ** pgm_allocarray( int cols, int rows );
gray * pgm_allocrow( intcols );
void pgm_freearray( gray **grays, introws );
void pgm_freerow( gray *grayrow);
void pgm_readpgminit( FILE *fp, int *colsP, int *rowsP, gray *maxvalP,
int *formatP );
void pgm_readpgmrow( FILE *fp, gray *grayrow, int cols, gray maxval,
int format );
gray ** pgm_readpgm( FILE *fp, int *colsP, int *rowsP, gray *maxvalP );
void pgm_writepgminit( FILE * fp , int cols, int rows, gray maxval,
int forceplain );
void pgm_writepgmrow( FILE *fp, gray *grayrow, int cols, gray maxval,
int forceplain );
void pgm_writepgm( FILE *fp, gray ** grays, int cols, int rows, gray
maxval, int forceplain );
void pgm_writepgm( FILE *fp, gray **grays, int cols, int rows, gray
maxval, int forceplain );
void pgm_nextimage( FILE *file, int * const eofP);
void pgm_check( FILE * file, const enum pm_check_type check_type, const
int format, const int cols, const int rows, const int maxval, enum
pm_check_code * const retval);
typedef ... gray;
#define PGM_MAXMAXVAL ...
#define PGM_OVERALLMAXVAL ...
extern gray pgm_pbmmaxval;
#define PGM_FORMAT ...
#define RPGM_FORMAT ...
#define PGM_TYPE PGM_FORMAT
#define PGM_FORMAT_TYPE(format) ...
TYPES AND CONSTANTS
Each gray should contain only the values between 0 and
PGM_OVERALLMAXVAL. pgm_pbmmaxval is the maxval used when a PGM program
reads a PBM file. Normally it is 1; however, for some programs, a
larger value gives better results.
PGM_OVERALLMAXVAL is the maximum value of a maxval in a PGM file.
PGM_MAXMAXVAL is the maximum value of a maxval in a PGM file that is
compatible with the PGM format as it existed before April 2000. It is
also the maximum value of a maxval that results in the minimum possible
raster size for a particular image. I.e an image with a maxval higher
than PGM_MAXMAXVAL cannot be read or generated by old PGM processing
programs and requires more file space.
PGM_FORMAT is the format code for a Plain PGM format image file.
RPGM_FORMAT is the format code for a Raw PGM format image file.
PGM_TYPE is the format type code for the PGM formats. PGM_FORMAT_TYPE
is a macro that generates code to compute the format type code of a PBM
or PGM format from the format code which is its argument.
All PGM programs must call pgm_init() just after invocation, before
they process their arguments.
pgm_allocarray() allocates an array of grays.
pgm_allocrow() allocates a row of the given number of grays.
pgm_freearray() frees the array allocated with pgm_allocarray()
containing the given number of rows.
pgm_freerow() frees a row of grays allocated with pgm_allocrow().
If a function in this section is called on a PBM format file, it
translates the PBM file into a PGM file on the fly and functions as if
it were called on the equivalent PGM file. The format value returned
by pgm_readpgminit() is, however, not translated. It represents the
actual format of the PBM file.
pgm_readpgminit() reads the header of a PGM file, returning all the
information from the header and leaving the file positioned just after
pgm_readpgmrow() reads a row of grays into the grayrow array. format,
cols, and maxval are the values returned by pgm_readpgminit().
pgm_readpgm() reads an entire PGM image into memory, returning the
allocated array as its return value and returning the information from
the header as rows, cols, and maxval. This function combines
pgm_readpgminit(), pgm_allocarray(), and pgm_readpgmrow().
pgm_writepgminit() writes the header for a PGM file and leaves it
positioned just after the header.
forceplain is a logical value that tells pgm_writepgminit() to write a
header for a plain PGM format file, as opposed to a raw PGM format
pgm_writepgmrow() writes the row grayrow to a PGM file. For meaningful
results, cols, maxval, and forceplain must be the same as was used with
pgm_writepgm() write the header and all data for a PGM image. This
function combines pgm_writepgminit() and pgm_writepgmrow().
pgm_nextimage() positions a PGM input file to the next image in it (so
that a subsequent pgm_readpgminit() reads its header).
pgm_nextimage() is analogous to pbm_nextimage(), but works on PGM and
pgm_check() checks for the common file integrity error where the file
is the wrong size to contain all the image data.
pgm_check() is analogous to pbm_check(), but works on PGM and PBM
libpbm(3), libppm(3), libpnm(3)