gcc 2.6.3 under hpux has problems passing structs (and returning structs), so we change the interface to ppm_parsecolor. - Darrell Kindred (dkindred@cmu.edu), 6 June 1995 You can test for this bug by running ppmmake white 100 100 | pnmdepth 1 | ppmdither | ppmhist The output should look like this: r g b lum count --- --- --- --- ----- 255 255 255 255 10000 If you get something like this instead, try the patch: r g b lum count --- --- --- --- ----- 255 255 0 226 10000 - Darrell, 13 November 1995 *** ppm/ppm.h.orig Tue Feb 1 09:04:21 1994 --- ppm/ppm.h Tue Jun 6 18:08:08 1995 *************** *** 80,86 **** void ppm_writeppminit ARGS(( FILE* file, int cols, int rows, pixval maxval, int forceplain )); void ppm_writeppmrow ARGS(( FILE* file, pixel* pixelrow, int cols, pixval maxval, int forceplain )); ! pixel ppm_parsecolor ARGS(( char* colorname, pixval maxval )); char* ppm_colorname ARGS(( pixel* colorP, pixval maxval, int hexok )); extern pixval ppm_pbmmaxval; --- 80,86 ---- void ppm_writeppminit ARGS(( FILE* file, int cols, int rows, pixval maxval, int forceplain )); void ppm_writeppmrow ARGS(( FILE* file, pixel* pixelrow, int cols, pixval maxval, int forceplain )); ! void ppm_parsecolor ARGS(( char* colorname, pixval maxval, pixel *pix )); char* ppm_colorname ARGS(( pixel* colorP, pixval maxval, int hexok )); extern pixval ppm_pbmmaxval; *** ppm/ppmmake.c.orig Mon Oct 4 05:12:28 1993 --- ppm/ppmmake.c Tue Jun 6 18:08:09 1995 *************** *** 31,37 **** if ( argn == argc ) pm_usage( usage ); ! color = ppm_parsecolor( argv[argn], PPM_MAXMAXVAL ); ++argn; if ( argn == argc ) pm_usage( usage ); --- 31,37 ---- if ( argn == argc ) pm_usage( usage ); ! ppm_parsecolor( argv[argn], PPM_MAXMAXVAL, &color ); ++argn; if ( argn == argc ) pm_usage( usage ); *** ppm/libppm4.c.orig Tue Jun 6 17:25:10 1995 --- ppm/libppm4.c Tue Jun 6 18:08:09 1995 *************** *** 62,78 **** } #if __STDC__ ! pixel ! ppm_parsecolor( char* colorname, pixval maxval ) #else /*__STDC__*/ ! pixel ! ppm_parsecolor( colorname, maxval ) char* colorname; pixval maxval; #endif /*__STDC__*/ { int hexit[256], i; - pixel p; long lmaxval, r, g, b; char* inval = "invalid color specifier - \"%s\""; --- 62,78 ---- } #if __STDC__ ! void ! ppm_parsecolor( char* colorname, pixval maxval, pixel *pix ) #else /*__STDC__*/ ! void ! ppm_parsecolor( colorname, maxval, pix ) char* colorname; pixval maxval; + pixel *pix; #endif /*__STDC__*/ { int hexit[256], i; long lmaxval, r, g, b; char* inval = "invalid color specifier - \"%s\""; *************** *** 245,252 **** #endif /*RGB_DB*/ } ! PPM_ASSIGN( p, r, g, b ); ! return p; } static char colorname[200]; --- 245,252 ---- #endif /*RGB_DB*/ } ! PPM_ASSIGN( (*pix), r, g, b ); ! return; } static char colorname[200]; *** ppm/ppmchange.c.orig Fri Jan 28 12:11:41 1994 --- ppm/ppmchange.c Tue Jun 6 18:29:12 1995 *************** *** 39,49 **** pm_usage( usage ); for ( i = 0; argn < argc - 1 && i < TCOLS; i++ ) { ! color0[i] = ppm_parsecolor( argv[argn], PPM_MAXMAXVAL ); ++argn; if ( argn == argc ) pm_usage( usage ); ! color1[i] = ppm_parsecolor( argv[argn], PPM_MAXMAXVAL ); ++argn; } ncolors = i; --- 39,49 ---- pm_usage( usage ); for ( i = 0; argn < argc - 1 && i < TCOLS; i++ ) { ! ppm_parsecolor( argv[argn], PPM_MAXMAXVAL, &color0[i] ); ++argn; if ( argn == argc ) pm_usage( usage ); ! ppm_parsecolor( argv[argn], PPM_MAXMAXVAL, &color1[i] ); ++argn; } ncolors = i; *** ppm/ppmtogif.c.orig Mon Jan 31 06:06:51 1994 --- ppm/ppmtogif.c Tue Jun 6 18:08:09 1995 *************** *** 103,109 **** else if ( pm_keymatch( argv[argn], "-transparent", 2 ) ) { transparent = 1; if (++argn < argc) ! transcolor = ppm_parsecolor( argv[argn], 255 ); else pm_usage(usage); } --- 103,109 ---- else if ( pm_keymatch( argv[argn], "-transparent", 2 ) ) { transparent = 1; if (++argn < argc) ! ppm_parsecolor( argv[argn], 255, &transcolor ); else pm_usage(usage); } *** ppm/pgmtoppm.c.orig Mon Oct 4 05:12:16 1993 --- ppm/pgmtoppm.c Tue Jun 6 18:08:09 1995 *************** *** 97,108 **** { *color1 = '\0'; ++color1; ! p = ppm_parsecolor( color0, (pixval) maxval ); red0 = PPM_GETR( p ); grn0 = PPM_GETG( p ); blu0 = PPM_GETB( p ); } ! p = ppm_parsecolor( color1, (pixval) maxval ); red1 = PPM_GETR( p ); grn1 = PPM_GETG( p ); blu1 = PPM_GETB( p ); --- 97,108 ---- { *color1 = '\0'; ++color1; ! ppm_parsecolor( color0, (pixval) maxval, &p ); red0 = PPM_GETR( p ); grn0 = PPM_GETG( p ); blu0 = PPM_GETB( p ); } ! ppm_parsecolor( color1, (pixval) maxval, &p ); red1 = PPM_GETR( p ); grn1 = PPM_GETG( p ); blu1 = PPM_GETB( p ); *** ppm/xpmtoppm.c.orig Mon Jan 31 02:42:05 1994 --- ppm/xpmtoppm.c Tue Jun 6 18:05:11 1995 *************** *** 209,220 **** if (curkey > highkey) { /* flush string */ if (*chars_per_pixelP <= 2) /* Index into table. */ ! (*colorsP)[v] = ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL); else { /* Set up linear search table. */ ! (*colorsP)[i] = ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL); ptab[i] = v; } highkey = curkey; --- 209,222 ---- if (curkey > highkey) { /* flush string */ if (*chars_per_pixelP <= 2) /* Index into table. */ ! ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL, ! &(*colorsP)[v]); else { /* Set up linear search table. */ ! ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL, ! &(*colorsP)[i]); ptab[i] = v; } highkey = curkey; *************** *** 228,239 **** if (curkey > highkey) { if (*chars_per_pixelP <= 2) /* Index into table. */ ! (*colorsP)[v] = ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL); else { /* Set up linear search table. */ ! (*colorsP)[i] = ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL); ptab[i] = v; } highkey = curkey; --- 230,243 ---- if (curkey > highkey) { if (*chars_per_pixelP <= 2) /* Index into table. */ ! ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL, ! &(*colorsP)[v]); else { /* Set up linear search table. */ ! ppm_parsecolor(curbuf, ! (pixval) PPM_MAXMAXVAL, ! &(*colorsP)[i]); ptab[i] = v; } highkey = curkey; *************** *** 342,353 **** v = (v << 8) + str1[j]; if (*chars_per_pixelP <= 2) /* Index into table. */ ! (*colorsP)[v] = ppm_parsecolor(str2, ! (pixval) PPM_MAXMAXVAL); else { /* Set up linear search table. */ ! (*colorsP)[i] = ppm_parsecolor(str2, ! (pixval) PPM_MAXMAXVAL); ptab[i] = v; } } --- 346,359 ---- v = (v << 8) + str1[j]; if (*chars_per_pixelP <= 2) /* Index into table. */ ! ppm_parsecolor(str2, ! (pixval) PPM_MAXMAXVAL, ! &(*colorsP)[v]); else { /* Set up linear search table. */ ! ppm_parsecolor(str2, ! (pixval) PPM_MAXMAXVAL, ! &(*colorsP)[i]); ptab[i] = v; } } *** pnm/pnmalias.c.orig Thu Jan 27 14:01:23 1994 --- pnm/pnmalias.c Tue Jun 6 18:28:26 1995 *************** *** 50,56 **** if ( ++argn >= argc ) pm_usage( usage ); else ! fgcolorppm = ppm_parsecolor( argv[argn], PPM_MAXMAXVAL ); } else if ( pm_keymatch( argv[argn], "-bgcolor", 3 ) ) { --- 50,56 ---- if ( ++argn >= argc ) pm_usage( usage ); else ! ppm_parsecolor( argv[argn], PPM_MAXMAXVAL, &fgcolorppm ); } else if ( pm_keymatch( argv[argn], "-bgcolor", 3 ) ) { *************** *** 57,63 **** if ( ++argn >= argc ) pm_usage( usage ); else ! bgcolorppm = ppm_parsecolor( argv[argn], PPM_MAXMAXVAL ); } else if ( pm_keymatch( argv[argn], "-weight", 2 ) ) { --- 57,63 ---- if ( ++argn >= argc ) pm_usage( usage ); else ! ppm_parsecolor( argv[argn], PPM_MAXMAXVAL, &bgcolorppm ); } else if ( pm_keymatch( argv[argn], "-weight", 2 ) ) {