summaryrefslogtreecommitdiff
path: root/graphics/netpbm/files/patch-au
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/netpbm/files/patch-au')
-rw-r--r--graphics/netpbm/files/patch-au327
1 files changed, 38 insertions, 289 deletions
diff --git a/graphics/netpbm/files/patch-au b/graphics/netpbm/files/patch-au
index 5f217adbf401..416ab21df1da 100644
--- a/graphics/netpbm/files/patch-au
+++ b/graphics/netpbm/files/patch-au
@@ -1,289 +1,38 @@
---- ppm/ppmtobmp.c.orig Thu Mar 23 16:34:34 2000
-+++ ppm/ppmtobmp.c Sun Apr 1 12:00:00 2000
-@@ -75,7 +75,7 @@
- unsigned short cBitCount, pixel **pixels, colorhash_table cht));
- static int colorstobpp ARGS((int colors));
- static void BMPEncode ARGS((FILE *fp, int class, int x, int y, pixel **pixels,
-- int colors, colorhash_table cht, pixval *R, pixval *G, pixval *B));
-+ int bpp, int colors, colorhash_table cht, pixval *R, pixval *G, pixval *B));
- static void
- PutByte(FILE *fp, char v)
- {
-@@ -244,16 +244,20 @@
- int i;
- long ncolors;
-
-- for (i = 0; i < colors; i++)
-+ if (bpp != 24)
- {
-- nbyte += BMPwritergb(fp,class,R[i],G[i],B[i]);
-- }
-
-- ncolors = (1 << bpp);
-+ for (i = 0; i < colors; i++)
-+ {
-+ nbyte += BMPwritergb(fp,class,R[i],G[i],B[i]);
-+ }
-+
-+ ncolors = (1 << bpp);
-
-- for (; i < ncolors; i++)
-- {
-- nbyte += BMPwritergb(fp,class,0,0,0);
-+ for (; i < ncolors; i++)
-+ {
-+ nbyte += BMPwritergb(fp,class,0,0,0);
-+ }
- }
-
- return nbyte;
-@@ -271,26 +275,38 @@
- int rc;
- unsigned x;
-
-- if ((b = pm_bitinit(fp, "w")) == (BITSTREAM) 0)
-+ if (bpp != 24)
- {
-- return -1;
-- }
-+ if ((b = pm_bitinit(fp, "w")) == (BITSTREAM) 0)
-+ {
-+ return -1;
-+ }
-
-- for (x = 0; x < cx; x++, row++)
-- {
-- if ((rc = pm_bitwrite(b, bpp, ppm_lookupcolor(cht, row))) == -1)
-+ for (x = 0; x < cx; x++, row++)
-+ {
-+ if ((rc = pm_bitwrite(b, bpp, ppm_lookupcolor(cht, row))) == -1)
-+ {
-+ return -1;
-+ }
-+ nbyte += rc;
-+ }
-+
-+ if ((rc = pm_bitfini(b)) == -1)
- {
- return -1;
- }
- nbyte += rc;
- }
--
-- if ((rc = pm_bitfini(b)) == -1)
-+ else
- {
-- return -1;
-+ for (x = 0; x < cx; x++, row++)
-+ {
-+ PutByte(fp, PPM_GETB(*row));
-+ PutByte(fp, PPM_GETG(*row));
-+ PutByte(fp, PPM_GETR(*row));
-+ nbyte += 3;
-+ }
- }
-- nbyte += rc;
--
- /*
- * Make sure we write a multiple of 4 bytes.
- */
-@@ -376,48 +392,21 @@
- * arrays are undefined.
- */
- static void
--BMPEncode(fp, class, x, y, pixels, colors, cht, R, G, B)
-+BMPEncode(fp, class, x, y, pixels, bpp, colors, cht, R, G, B)
- FILE *fp;
- int class;
- int x;
- int y;
- pixel **pixels;
-+ int bpp; /* bits per pixel */
- int colors; /* number of valid entries in R,G,B */
- colorhash_table cht;
- pixval *R;
- pixval *G;
- pixval *B;
- {
-- int bpp; /* bits per pixel */
- unsigned long nbyte = 0;
-
-- bpp = colorstobpp(colors);
--
-- /*
-- * I have found empirically at least one BMP-displaying program
-- * that can't deal with (for instance) using 3 bits per pixel.
-- * I have seen no programs that can deal with using 3 bits per
-- * pixel. I have seen programs which can deal with 1, 4, and
-- * 8 bits per pixel.
-- *
-- * Based on this, I adjust actual the number of bits per pixel
-- * as follows. If anyone knows better, PLEASE tell me!
-- */
-- switch(bpp)
-- {
-- case 2:
-- case 3:
-- bpp = 4;
-- break;
-- case 5:
-- case 6:
-- case 7:
-- bpp = 8;
-- break;
-- }
--
-- pm_message("Using %d bits per pixel", bpp);
--
- nbyte += BMPwritefileheader(fp, class, bpp, x, y);
- nbyte += BMPwriteinfoheader(fp, class, bpp, x, y);
- nbyte += BMPwritergbtable(fp, class, bpp, colors, R, G, B);
-@@ -499,13 +488,15 @@
- char **argv;
- {
- FILE *ifp = stdin;
-- char *usage = "[-windows] [-os2] [ppmfile]";
-+ char *usage = "[-windows] [-os2] [-1/4/8/24bits] [ppmfile]";
- int class = C_OS2;
-
- int argn;
- int rows;
- int cols;
- int colors;
-+ int maxcolors = MAXCOLORS;
-+ int bpp = 0;
- int i;
- pixval maxval;
- colorhist_vector chv;
-@@ -527,6 +518,14 @@
- class = C_WIN;
- else if (pm_keymatch(argv[argn], "-os2", 2))
- class = C_OS2;
-+ else if (pm_keymatch(argv[argn], "-24bits", 3))
-+ bpp = 24, maxcolors = 256;
-+ else if (pm_keymatch(argv[argn], "-8bits", 2))
-+ bpp = 8, maxcolors = 256;
-+ else if (pm_keymatch(argv[argn], "-4bits", 2))
-+ bpp = 4, maxcolors = 16;
-+ else if (pm_keymatch(argv[argn], "-1bit", 2))
-+ bpp = 1, maxcolors = 2;
- else
- pm_usage(usage);
- ++argn;
-@@ -567,44 +566,90 @@
- #endif
-
- /* Figure out the colormap. */
-- pm_message("computing colormap...");
-- chv = ppm_computecolorhist(pixels, cols, rows, MAXCOLORS, &colors);
-- if (chv == (colorhist_vector) 0)
-- pm_error("too many colors - try doing a 'ppmquant %d'"
-- , MAXCOLORS);
-- pm_message("%d colors found", colors);
--
-- /*
-- * Now turn the ppm colormap into the appropriate GIF
-- * colormap.
-- */
-- if (maxval > 255)
-+ chv = (colorhist_vector) 0;
-+ if (bpp != 24)
- {
-- pm_message("maxval is not 255 - automatically rescaling colors");
-+ pm_message("computing colormap...");
-+ chv = ppm_computecolorhist(pixels, cols, rows, maxcolors, &colors);
- }
-- for (i = 0; i < colors; ++i)
-+ if (chv == (colorhist_vector) 0)
- {
-- if (maxval == 255)
-+ if (bpp == 0)
- {
-- Red[i] = PPM_GETR(chv[i].color);
-- Green[i] = PPM_GETG(chv[i].color);
-- Blue[i] = PPM_GETB(chv[i].color);
-+ pm_message("over 256 colors found");
-+ bpp = 24;
- }
-- else
-+ else if (bpp != 24)
-+ pm_error("too many colors - try doing a 'ppmquant %d'"
-+ , maxcolors);
-+ }
-+ else
-+ {
-+ pm_message("%d colors found", colors);
-+
-+ /*
-+ * I have found empirically at least one BMP-displaying program
-+ * that can't deal with (for instance) using 3 bits per pixel.
-+ * I have seen no programs that can deal with using 3 bits per
-+ * pixel. I have seen programs which can deal with 1, 4, and
-+ * 8 bits per pixel.
-+ *
-+ * Based on this, I adjust actual the number of bits per pixel
-+ * as follows. If anyone knows better, PLEASE tell me!
-+ */
-+
-+ if (!bpp)
-+ {
-+ bpp = colorstobpp(colors);
-+
-+ switch(bpp)
-+ {
-+ case 2:
-+ case 3:
-+ bpp = 4;
-+ break;
-+ case 5:
-+ case 6:
-+ case 7:
-+ bpp = 8;
-+ break;
-+ }
-+ }
-+
-+ /*
-+ * Now turn the ppm colormap into the appropriate GIF
-+ * colormap.
-+ */
-+ if (maxval > 255)
-+ {
-+ pm_message("maxval is not 255 - automatically rescaling colors");
-+ }
-+ for (i = 0; i < colors; ++i)
- {
-- Red[i] = (pixval) PPM_GETR(chv[i].color) * 255 / maxval;
-- Green[i] = (pixval) PPM_GETG(chv[i].color) * 255 / maxval;
-- Blue[i] = (pixval) PPM_GETB(chv[i].color) * 255 / maxval;
-+ if (maxval == 255)
-+ {
-+ Red[i] = PPM_GETR(chv[i].color);
-+ Green[i] = PPM_GETG(chv[i].color);
-+ Blue[i] = PPM_GETB(chv[i].color);
-+ }
-+ else
-+ {
-+ Red[i] = (pixval) PPM_GETR(chv[i].color) * 255 / maxval;
-+ Green[i] = (pixval) PPM_GETG(chv[i].color) * 255 / maxval;
-+ Blue[i] = (pixval) PPM_GETB(chv[i].color) * 255 / maxval;
-+ }
- }
-+
-+ /* And make a hash table for fast lookup. */
-+ cht = ppm_colorhisttocolorhash(chv, colors);
-+ ppm_freecolorhist(chv);
- }
-
-- /* And make a hash table for fast lookup. */
-- cht = ppm_colorhisttocolorhash(chv, colors);
-- ppm_freecolorhist(chv);
-+ pm_message("Using %d bits per pixel", bpp);
-
- /* All set, let's do it. */
- BMPEncode(stdout, class
-- , cols, rows, pixels, colors, cht
-+ , cols, rows, pixels, bpp, colors, cht
- ,Red, Green, Blue);
-
- pm_close(stdout);
+--- ppm/ppmtobmp.c.orig Sat Jul 1 03:00:34 2000
++++ ppm/ppmtobmp.c Sat Jul 1 12:00:00 2000
+@@ -51,6 +51,7 @@
+ #include "ppm.h"
+ #include "ppmcmap.h"
+ #include "bitio.h"
++#include "shhopt.h"
+
+ #define MAXCOLORS 256
+
+@@ -93,16 +94,26 @@
+ opt.short_allowed = FALSE; /* We have no short (old-fashioned) options */
+ opt.allowNegNum = FALSE; /* We have no parms that are negative numbers */
+
++ /* Create the OptStruct structure describing our options */
++ #define OPTENTRY(shortvalue,longvalue,typevalue,outputvalue,flagvalue) {\
++ option_def[option_def_index].shortName = (shortvalue); \
++ option_def[option_def_index].longName = (longvalue); \
++ option_def[option_def_index].type = (typevalue); \
++ option_def[option_def_index].arg = (outputvalue); \
++ option_def[option_def_index].flags = (flagvalue); \
++ option_def_index++; \
++ }
+ option_def_index = 0; /* incremented by OPTENTRY */
+ OPTENTRY('w', "windows", OPT_FLAG, &windows, 0);
+ OPTENTRY('o', "os2", OPT_FLAG, &os2, 0);
+ OPTENTRY(0, "bpp", OPT_UINT, &bpp, 0);
++ option_def[option_def_index].type = OPT_END;
+
+ /* Set the defaults */
+ windows = os2 = FALSE;
+ bpp = -1;
+
+- pm_optParseOptions2(&argc, argv, opt, 0);
++ optParseOptions2(&argc, argv, opt, 0);
+ /* Uses and sets argc, and argv */
+
+ if (argc - 1 == 0)