diff options
Diffstat (limited to 'editor')
-rw-r--r-- | editor/pamcut.c | 2 | ||||
-rw-r--r-- | editor/pamscale.c | 4 | ||||
-rw-r--r-- | editor/pamthreshold.c | 2 | ||||
-rw-r--r-- | editor/pnmcrop.c | 4 | ||||
-rwxr-xr-x | editor/pnmflip | 25 | ||||
-rw-r--r-- | editor/pnmnlfilt.c | 2 | ||||
-rwxr-xr-x | editor/pnmquant | 25 | ||||
-rwxr-xr-x | editor/pnmquantall | 24 | ||||
-rw-r--r-- | editor/pnmremap.c | 4 | ||||
-rw-r--r-- | editor/ppmdraw.c | 10 | ||||
-rwxr-xr-x | editor/ppmfade | 32 | ||||
-rwxr-xr-x | editor/ppmquant | 26 | ||||
-rwxr-xr-x | editor/ppmshadow | 35 | ||||
-rw-r--r-- | editor/specialty/ppmntsc.c | 311 |
14 files changed, 327 insertions, 179 deletions
diff --git a/editor/pamcut.c b/editor/pamcut.c index 068ad377..03573796 100644 --- a/editor/pamcut.c +++ b/editor/pamcut.c @@ -675,7 +675,7 @@ main(int argc, const char *argv[]) { struct cmdlineInfo cmdline; FILE * ifP; - bool eof; + int eof; pm_proginit(&argc, argv); diff --git a/editor/pamscale.c b/editor/pamscale.c index 1b3ab8f0..485ae27f 100644 --- a/editor/pamscale.c +++ b/editor/pamscale.c @@ -1392,7 +1392,7 @@ outputOneResampledRow(const struct pam * const outpamP, -----------------------------------------------------------------------------*/ unsigned int col; - bool haveOpacity; /* There is an opacity plane */ + int haveOpacity; /* There is an opacity plane */ unsigned int opacityPlane; /* Plane number of opacity plane, if any */ pnm_getopacity(outpamP, &haveOpacity, &opacityPlane); @@ -2205,7 +2205,7 @@ main(int argc, const char **argv ) { struct cmdlineInfo cmdline; FILE * ifP; - bool eof; + int eof; pm_proginit(&argc, argv); diff --git a/editor/pamthreshold.c b/editor/pamthreshold.c index 8369602d..8d28bc4a 100644 --- a/editor/pamthreshold.c +++ b/editor/pamthreshold.c @@ -658,7 +658,7 @@ main(int argc, char **argv) { FILE * ifP; struct cmdlineInfo cmdline; struct pam inpam, outpam; - bool eof; /* No more images in input stream */ + int eof; /* No more images in input stream */ pnm_init(&argc, argv); diff --git a/editor/pnmcrop.c b/editor/pnmcrop.c index 042e9e20..c6aabff1 100644 --- a/editor/pnmcrop.c +++ b/editor/pnmcrop.c @@ -870,8 +870,8 @@ main(int argc, const char *argv[]) { */ FILE * bdfP; /* The border file. NULL if none. */ - bool eof; /* no more images in input stream */ - bool beof; /* no more images in borderfile stream */ + int eof; /* no more images in input stream */ + int beof; /* no more images in borderfile stream */ pm_proginit(&argc, argv); diff --git a/editor/pnmflip b/editor/pnmflip index 44d95b45..07d4ddb9 100755 --- a/editor/pnmflip +++ b/editor/pnmflip @@ -1,5 +1,28 @@ -#!/usr/bin/perl -w +#!/bin/sh +############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" + +#!/usr/bin/perl #============================================================================ # This is a compatibility interface to Pamflip. # diff --git a/editor/pnmnlfilt.c b/editor/pnmnlfilt.c index bde0cd82..f55a67bd 100644 --- a/editor/pnmnlfilt.c +++ b/editor/pnmnlfilt.c @@ -990,7 +990,7 @@ main(int argc, char *argv[]) { FILE * ifP; struct cmdlineInfo cmdline; - bool eof; /* We've hit the end of the input stream */ + int eof; /* We've hit the end of the input stream */ unsigned int imageSeq; /* Sequence number of image, starting from 0 */ pnm_init(&argc, argv); diff --git a/editor/pnmquant b/editor/pnmquant index ae461a3d..93d452cd 100755 --- a/editor/pnmquant +++ b/editor/pnmquant @@ -1,6 +1,29 @@ -#!/usr/bin/perl -w +#!/bin/sh ############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" + +#!/usr/bin/perl +############################################################################## # pnmquant ############################################################################## # By Bryan Henderson, San Jose CA; December 2001. diff --git a/editor/pnmquantall b/editor/pnmquantall index b7bb03d7..0890383e 100755 --- a/editor/pnmquantall +++ b/editor/pnmquantall @@ -1,3 +1,27 @@ +#!/bin/sh + +############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" + #!/usr/bin/perl ############################################################################## # pnmquantall diff --git a/editor/pnmremap.c b/editor/pnmremap.c index ec381f32..b2448cbb 100644 --- a/editor/pnmremap.c +++ b/editor/pnmremap.c @@ -749,7 +749,7 @@ lookupThroughHash(struct pam * const pamP, } else searchColormapClose(pamP, tuple, colorFinderP, colormapIndexP); if (*usehashP) { - bool fits; + int fits; pnm_addtotuplehash(pamP, colorhash, tuple, *colormapIndexP, &fits); if (!fits) { @@ -1063,7 +1063,7 @@ remap(FILE * const ifP, same as that of the input even though the individual pixels have different colors. -----------------------------------------------------------------------------*/ - bool eof; + int eof; eof = FALSE; while (!eof) { struct pam inpam, outpam; diff --git a/editor/ppmdraw.c b/editor/ppmdraw.c index ba513581..c733ffcb 100644 --- a/editor/ppmdraw.c +++ b/editor/ppmdraw.c @@ -44,7 +44,7 @@ struct cmdlineInfo { static void -parseCommandLine (int argc, char ** argv, +parseCommandLine (int argc, const char ** argv, struct cmdlineInfo * const cmdlineP) { /*---------------------------------------------------------------------------- parse program command line described in Unix standard form by argc @@ -80,7 +80,7 @@ parseCommandLine (int argc, char ** argv, opt.short_allowed = FALSE; /* We have no short (old-fashioned) options */ opt.allowNegNum = FALSE; /* We have no parms that are negative numbers */ - pm_optParseOptions3( &argc, argv, opt, sizeof(opt), 0); + pm_optParseOptions3(&argc, (char **)argv, opt, sizeof(opt), 0); /* Uses and sets argc, argv, and some of *cmdlineP and others. */ if (!scriptSpec && !scriptfileSpec) @@ -899,14 +899,14 @@ doOneImage(FILE * const ifP, int -main(int argc, char * argv[]) { +main(int argc, const char * argv[]) { struct cmdlineInfo cmdline; FILE * ifP; struct script * scriptP; - bool eof; + int eof; - ppm_init(&argc, argv); + pm_proginit(&argc, argv); parseCommandLine(argc, argv, &cmdline); diff --git a/editor/ppmfade b/editor/ppmfade index fbc62968..027fc793 100755 --- a/editor/ppmfade +++ b/editor/ppmfade @@ -1,5 +1,31 @@ -#!/usr/bin/perl -w -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +#!/bin/sh + +############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" + +#!/usr/bin/perl +############################################################################## +# ppmfade +############################################################################## # # This program creates a fade (a sequence of frames) between two images. # @@ -12,7 +38,7 @@ # much the same thing, but handles non-Netpbm formats too, and is # implemented in a more primitive language. # -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +############################################################################## use strict; my $SPREAD = 1; diff --git a/editor/ppmquant b/editor/ppmquant index 08f4c187..57963982 100755 --- a/editor/ppmquant +++ b/editor/ppmquant @@ -1,4 +1,28 @@ -#!/usr/bin/perl -w +#!/bin/sh + +############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" + +#!/usr/bin/perl ############################################################################## # This is nothing but a compatibility interface for Pnmquant. # An old program coded to call Ppmquant will continue working because diff --git a/editor/ppmshadow b/editor/ppmshadow index 2a32fca0..62cdf8b8 100755 --- a/editor/ppmshadow +++ b/editor/ppmshadow @@ -1,15 +1,40 @@ -#!/usr/bin/perl -w +#!/bin/sh -# P P M S H A D O W +############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" +#!/usr/bin/perl +############################################################################## +# ppmshadow +############################################################################## +# # by John Walker -- http://www.fourmilab.ch/ # version = 1.2; # --> with minor changes by Bryan Henderson to adapt to Netbpm. # See above web site for the real John Walker work, named pnmshadow. - +# # Bryan Henderson later made some major style changes (use strict, etc) and # eliminated most use of shells. See Netbpm HISTORY file. - +# # Pnmshadow is a brutal sledgehammer implemented in Perl which # adds attractive shadows to images, as often seen in titles # of World-Wide Web pages. This program does not actually @@ -20,7 +45,7 @@ # # This program is in the public domain. # -# +############################################################################## use strict; require 5.0; diff --git a/editor/specialty/ppmntsc.c b/editor/specialty/ppmntsc.c index 2585662f..a721b891 100644 --- a/editor/specialty/ppmntsc.c +++ b/editor/specialty/ppmntsc.c @@ -51,9 +51,6 @@ #include "mallocvar.h" #include "shhopt.h" -#define TRUE 1 -#define FALSE 0 - enum legalize {RAISE_SAT, LOWER_SAT, ALREADY_LEGAL}; /* The actions that make a legal pixel */ @@ -70,6 +67,61 @@ struct cmdlineInfo { +static void +parseCommandLine(int argc, const char ** argv, + struct cmdlineInfo * const cmdlineP) { +/*---------------------------------------------------------------------------- + Note that many of the strings that this function returns in the + *cmdlineP structure are actually in the supplied argv array. And + sometimes, one of these strings is actually just a suffix of an entry + in argv! +-----------------------------------------------------------------------------*/ + optStruct3 opt; + optEntry *option_def; + /* Instructions to OptParseOptions on how to parse our options. + */ + unsigned int option_def_index; + unsigned int legalonly, illegalonly, correctedonly; + + MALLOCARRAY(option_def, 100); + + option_def_index = 0; /* incremented by OPTENTRY */ + OPTENT3('v', "verbose", OPT_FLAG, NULL, &cmdlineP->verbose, 0); + OPTENT3('V', "debug", OPT_FLAG, NULL, &cmdlineP->debug, 0); + OPTENT3('p', "pal", OPT_FLAG, NULL, &cmdlineP->pal, 0); + OPTENT3('l', "legalonly", OPT_FLAG, NULL, &legalonly, 0); + OPTENT3('i', "illegalonly", OPT_FLAG, NULL, &illegalonly, 0); + OPTENT3('c', "correctedonly", OPT_FLAG, NULL, &correctedonly, 0); + + opt.opt_table = option_def; + opt.short_allowed = true; + opt.allowNegNum = false; + + pm_optParseOptions3(&argc, (char **)argv, opt, sizeof(opt), 0); + + if (argc - 1 == 0) + cmdlineP->inputFilename = "-"; /* he wants stdin */ + else if (argc - 1 == 1) + cmdlineP->inputFilename = argv[1]; + else + pm_error("Too many arguments. The only arguments accepted " + "are the mask color and optional input file specification"); + + if (legalonly + illegalonly + correctedonly > 1) + pm_error("--legalonly, --illegalonly, and --correctedonly are " + "conflicting options. Specify at most one of these."); + + if (legalonly) + cmdlineP->output = LEGAL_ONLY; + else if (illegalonly) + cmdlineP->output = ILLEGAL_ONLY; + else if (correctedonly) + cmdlineP->output = CORRECTED_ONLY; + else + cmdlineP->output = ALL; +} + + static void rgbtoyiq(const int r, const int g, const int b, @@ -118,39 +170,39 @@ yuvtorgb(const double y, const double u, const double v, static void -make_legal_yiq(const double y, const double i, const double q, - double * const y_new_p, - double * const i_new_p, - double * const q_new_p, - enum legalize * const action_p - ) { +makeLegalYiq(double const y, + double const i, + double const q, + double * const yNewP, + double * const iNewP, + double * const qNewP, + enum legalize * const actionP) { - double sat_old, sat_new; + double satOld, satNew; /* * I and Q are legs of a right triangle. Saturation is the hypotenuse. */ - sat_old = sqrt(i*i + q*q); - if (y+sat_old > 1.0) { - const double diff = 0.5*((y+sat_old) - 1.0); - *y_new_p = y - diff; - sat_new = 1.0 - *y_new_p; - *i_new_p = i*(sat_new/sat_old); - *q_new_p = q*(sat_new/sat_old); - *action_p = LOWER_SAT; - } else if (y-sat_old <= -0.251) { - const double diff = 0.5*((sat_old-y) - 0.251); - *y_new_p = y + diff; - sat_new = 0.250 + *y_new_p; - *i_new_p = i*(sat_new/sat_old); - *q_new_p = q*(sat_new/sat_old); - *action_p = RAISE_SAT; + satOld = sqrt(SQR(i) + SQR(q)); + if (y+satOld > 1.0) { + const double diff = 0.5*((y + satOld) - 1.0); + *yNewP = y - diff; + satNew = 1.0 - *yNewP; + *iNewP = i * (satNew/satOld); + *qNewP = q * (satNew/satOld); + *actionP = LOWER_SAT; + } else if (y - satOld <= -0.251) { + const double diff = 0.5*((satOld - y) - 0.251); + *yNewP = y + diff; + satNew = 0.250 + *yNewP; + *iNewP = i * (satNew/satOld); + *qNewP = q * (satNew/satOld); + *actionP = RAISE_SAT; } else { - *y_new_p = y; - *i_new_p = i; - *q_new_p = q; - *action_p = ALREADY_LEGAL; + *yNewP = y; + *iNewP = i; + *qNewP = q; + *actionP = ALREADY_LEGAL; } - return; } @@ -206,7 +258,7 @@ make_legal_yiq_i(const int r_in, const int g_in, const int b_in, * Convert to YIQ and compute the new saturation. */ rgbtoyiq(r_in, g_in, b_in, &y, &i, &q); - make_legal_yiq(y, i, q, &y_new, &i_new, &q_new, action_p); + makeLegalYiq(y, i, q, &y_new, &i_new, &q_new, action_p); if (*action_p != ALREADY_LEGAL) /* * Given the new I and Q, compute new RGB values. @@ -295,204 +347,155 @@ make_legal_yuv_b(const pixel input, static void -report_mapping(const pixel old_pixel, const pixel new_pixel) { +reportMapping(pixel const oldPixel, + pixel const newPixel) { /*---------------------------------------------------------------------------- - Assuming old_pixel and new_pixel are input and output pixels, + Assuming oldPixel and newPixel are input and output pixels, tell the user that we changed a pixel to make it legal, if in fact we did and it isn't the same change that we just reported. -----------------------------------------------------------------------------*/ - static pixel last_changed_pixel; - static int first_time = TRUE; - - if (!PPM_EQUAL(old_pixel, new_pixel) && - (first_time || PPM_EQUAL(old_pixel, last_changed_pixel))) { - pm_message("Mapping %d %d %d -> %d %d %d\n", - PPM_GETR(old_pixel), - PPM_GETG(old_pixel), - PPM_GETB(old_pixel), - PPM_GETR(new_pixel), - PPM_GETG(new_pixel), - PPM_GETB(new_pixel) + static pixel lastChangedPixel; + static bool firstTime = true; + + if (!PPM_EQUAL(oldPixel, newPixel) && + (firstTime || PPM_EQUAL(oldPixel, lastChangedPixel))) { + pm_message("Mapping %u %u %u -> %u %u %u\n", + PPM_GETR(oldPixel), + PPM_GETG(oldPixel), + PPM_GETB(oldPixel), + PPM_GETR(newPixel), + PPM_GETG(newPixel), + PPM_GETB(newPixel) ); - last_changed_pixel = old_pixel; - first_time = FALSE; + lastChangedPixel = oldPixel; + firstTime = false; } } static void -convert_one_image(FILE * const ifp, struct cmdlineInfo const cmdline, - bool * const eofP, - int * const hicountP, int * const locountP) { +convertOneImage(FILE * const ifP, + struct cmdlineInfo const cmdline, + unsigned int * const hiCountP, + unsigned int * const loCountP) { /* Parameters of input image: */ int rows, cols; pixval maxval; int format; - ppm_readppminit(ifp, &cols, &rows, &maxval, &format); - ppm_writeppminit(stdout, cols, rows, maxval, FALSE); + ppm_readppminit(ifP, &cols, &rows, &maxval, &format); + ppm_writeppminit(stdout, cols, rows, maxval, 0); { - pixel* const input_row = ppm_allocrow(cols); - pixel* const output_row = ppm_allocrow(cols); - pixel last_illegal_pixel; - /* Value of the illegal pixel we most recently processed */ + pixel * const inputRow = ppm_allocrow(cols); + pixel * const outputRow = ppm_allocrow(cols); + + pixel lastIllegalPixel; + /* Value of the illegal pixel we most recently processed */ pixel black; - /* A constant - black pixel */ + /* A constant - black pixel */ PPM_ASSIGN(black, 0, 0, 0); - PPM_ASSIGN(last_illegal_pixel, 0, 0, 0); /* initial value */ + PPM_ASSIGN(lastIllegalPixel, 0, 0, 0); /* initial value */ { - int row; + unsigned int row; - *hicountP = 0; *locountP = 0; /* initial values */ + *hiCountP = 0; *loCountP = 0; /* initial values */ for (row = 0; row < rows; ++row) { - int col; - ppm_readppmrow(ifp, input_row, cols, maxval, format); + unsigned int col; + ppm_readppmrow(ifP, inputRow, cols, maxval, format); for (col = 0; col < cols; ++col) { pixel corrected; - /* Corrected or would-be corrected value for pixel */ + /* Corrected or would-be corrected value for pixel */ enum legalize action; - /* What action was used to make pixel legal */ + /* What action was used to make pixel legal */ if (cmdline.pal) - make_legal_yuv_b(input_row[col], + make_legal_yuv_b(inputRow[col], &corrected, &action); else - make_legal_yiq_b(input_row[col], + make_legal_yiq_b(inputRow[col], &corrected, &action); if (action == LOWER_SAT) - (*hicountP)++; + ++*hiCountP; if (action == RAISE_SAT) - (*locountP)++; - if (cmdline.debug) report_mapping(input_row[col], - corrected); + ++*loCountP; + if (cmdline.debug) + reportMapping(inputRow[col], corrected); switch (cmdline.output) { case ALL: - output_row[col] = corrected; + outputRow[col] = corrected; break; case LEGAL_ONLY: - output_row[col] = (action == ALREADY_LEGAL) ? - input_row[col] : black; + outputRow[col] = (action == ALREADY_LEGAL) ? + inputRow[col] : black; break; case ILLEGAL_ONLY: - output_row[col] = (action != ALREADY_LEGAL) ? - input_row[col] : black; + outputRow[col] = (action != ALREADY_LEGAL) ? + inputRow[col] : black; break; case CORRECTED_ONLY: - output_row[col] = (action != ALREADY_LEGAL) ? + outputRow[col] = (action != ALREADY_LEGAL) ? corrected : black; break; } } - ppm_writeppmrow(stdout, output_row, cols, maxval, FALSE); + ppm_writeppmrow(stdout, outputRow, cols, maxval, 0); } } - ppm_freerow(output_row); - ppm_freerow(input_row); + ppm_freerow(outputRow); + ppm_freerow(inputRow); } } -static void -parseCommandLine(int argc, char ** argv, - struct cmdlineInfo * const cmdlineP) { -/*---------------------------------------------------------------------------- - Note that many of the strings that this function returns in the - *cmdlineP structure are actually in the supplied argv array. And - sometimes, one of these strings is actually just a suffix of an entry - in argv! ------------------------------------------------------------------------------*/ - optStruct3 opt; - optEntry *option_def; - /* Instructions to OptParseOptions on how to parse our options. - */ - unsigned int option_def_index; - unsigned int legalonly, illegalonly, correctedonly; - - MALLOCARRAY(option_def, 100); - - option_def_index = 0; /* incremented by OPTENTRY */ - OPTENT3('v', "verbose", OPT_FLAG, NULL, &cmdlineP->verbose, 0); - OPTENT3('V', "debug", OPT_FLAG, NULL, &cmdlineP->debug, 0); - OPTENT3('p', "pal", OPT_FLAG, NULL, &cmdlineP->pal, 0); - OPTENT3('l', "legalonly", OPT_FLAG, NULL, &legalonly, 0); - OPTENT3('i', "illegalonly", OPT_FLAG, NULL, &illegalonly, 0); - OPTENT3('c', "correctedonly", OPT_FLAG, NULL, &correctedonly, 0); - - opt.opt_table = option_def; - opt.short_allowed = TRUE; - opt.allowNegNum = FALSE; - - pm_optParseOptions3(&argc, argv, opt, sizeof(opt), 0); - - if (argc - 1 == 0) - cmdlineP->inputFilename = "-"; /* he wants stdin */ - else if (argc - 1 == 1) - cmdlineP->inputFilename = argv[1]; - else - pm_error("Too many arguments. The only arguments accepted " - "are the mask color and optional input file specification"); - - if (legalonly + illegalonly + correctedonly > 1) - pm_error("--legalonly, --illegalonly, and --correctedonly are " - "conflicting options. Specify at most one of these."); - - if (legalonly) - cmdlineP->output = LEGAL_ONLY; - else if (illegalonly) - cmdlineP->output = ILLEGAL_ONLY; - else if (correctedonly) - cmdlineP->output = CORRECTED_ONLY; - else - cmdlineP->output = ALL; -} - - int -main(int argc, char **argv) { +main(int argc, const char **argv) { struct cmdlineInfo cmdline; FILE * ifP; - int total_hicount, total_locount; - int image_count; + unsigned int totalHiCount, totalLoCount; + unsigned int imageCount; - bool eof; + int eof; - ppm_init(&argc, argv); + pm_proginit(&argc, argv); parseCommandLine(argc, argv, &cmdline); ifP = pm_openr(cmdline.inputFilename); + + imageCount = 0; /* initial value */ + totalHiCount = 0; /* initial value */ + totalLoCount = 0; /* initial value */ - image_count = 0; /* initial value */ - total_hicount = 0; /* initial value */ - total_locount = 0; /* initial value */ - - eof = FALSE; + eof = false; while (!eof) { - int hicount, locount; - convert_one_image(ifP, cmdline, &eof, &hicount, &locount); - image_count++; - total_hicount += hicount; - total_locount += locount; + unsigned int hiCount, loCount; + + convertOneImage(ifP, cmdline, &hiCount, &loCount); + + ++imageCount; + totalHiCount += hiCount; + totalLoCount += loCount; + ppm_nextimage(ifP, &eof); } if (cmdline.verbose) { - pm_message("%d images processed.", image_count); - pm_message("%d pixels were above the saturation limit.", - total_hicount); - pm_message("%d pixels were below the saturation limit.", - total_locount); + pm_message("%u images processed.", imageCount); + pm_message("%u pixels were above the saturation limit.", + totalHiCount); + pm_message("%u pixels were below the saturation limit.", + totalLoCount); } pm_close(ifP); |