]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - filter/imagetoraster.c
Load cups into easysw/current.
[thirdparty/cups.git] / filter / imagetoraster.c
index 6fdea10381424277516551d78619b899db6430c5..0c7d705a224dbe41833279261b74ddb78cfbf64b 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: imagetoraster.c 4767 2005-10-10 19:23:23Z mike $"
+ * "$Id: imagetoraster.c 5485 2006-05-02 23:59:56Z mike $"
  *
  *   Image file to raster filter for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 1993-2005 by Easy Software Products.
+ *   Copyright 1993-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
  *   property of Easy Software Products and are protected by Federal
@@ -26,8 +26,6 @@
  * Contents:
  *
  *   main()          - Main entry...
- *   exec_code()     - Execute PostScript setpagedevice commands as
- *                     appropriate.
  *   format_CMY()    - Convert image data to CMY.
  *   format_CMYK()   - Convert image data to CMYK.
  *   format_K()      - Convert image data to black.
@@ -38,6 +36,7 @@
  *   format_YMC()    - Convert image data to YMC.
  *   format_YMCK()   - Convert image data to YMCK.
  *   make_lut()      - Make a lookup table given gamma and brightness values.
+ *   raster_cb()     - Validate the page header.
  */
 
 /*
@@ -60,7 +59,7 @@ int   Flip = 0,                       /* Flip/mirror pages */
        YPosition = 0,                  /* Vertical position on page */
        Collate = 0,                    /* Collate copies? */
        Copies = 1;                     /* Number of copies */
-int    Floyd16x16[16][16] =            /* Traditional Floyd ordered dither */
+int    Floyd16xc16[16][16] =           /* Traditional Floyd ordered dither */
        {
          { 0,   128, 32,  160, 8,   136, 40,  168,
            2,   130, 34,  162, 10,  138, 42,  170 },
@@ -172,7 +171,6 @@ int         Planes[] =              /* Number of planes for each colorspace */
  * Local functions...
  */
  
-static void    exec_code(cups_page_header2_t *header, const char *code);
 static void    format_CMY(cups_page_header2_t *header, unsigned char *row, int y, int z, int xsize, int ysize, int yerr0, int yerr1, cups_ib_t *r0, cups_ib_t *r1);
 static void    format_CMYK(cups_page_header2_t *header, unsigned char *row, int y, int z, int xsize, int ysize, int yerr0, int yerr1, cups_ib_t *r0, cups_ib_t *r1);
 static void    format_K(cups_page_header2_t *header, unsigned char *row, int y, int z, int xsize, int ysize, int yerr0, int yerr1, cups_ib_t *r0, cups_ib_t *r1);
@@ -184,6 +182,7 @@ static void format_W(cups_page_header2_t *header, unsigned char *row, int y, int
 static void    format_YMC(cups_page_header2_t *header, unsigned char *row, int y, int z, int xsize, int ysize, int yerr0, int yerr1, cups_ib_t *r0, cups_ib_t *r1);
 static void    format_YMCK(cups_page_header2_t *header, unsigned char *row, int y, int z, int xsize, int ysize, int yerr0, int yerr1, cups_ib_t *r0, cups_ib_t *r1);
 static void    make_lut(cups_ib_t *, int, float, float);
+static int     raster_cb(cups_page_header2_t *header, int preferred_bits);
 
 
 /*
@@ -212,12 +211,10 @@ main(int  argc,                           /* I - Number of command-line arguments */
                        xtemp,          /* Bitmap width in pixels */
                        ytemp,          /* Bitmap height in pixels */
                        page;           /* Current page number */
-  int                  x0, y0,         /* Corners of the page in image coords */
-                       x1, y1;
+  int                  xc0, yc0,       /* Corners of the page in image coords */
+                       xc1, yc1;
   ppd_file_t           *ppd;           /* PPD file */
-  ppd_choice_t         *choice,        /* PPD option choice */
-                       **choices;      /* List of marked choices */
-  int                  count;          /* Number of marked choices */
+  ppd_choice_t         *choice;        /* PPD option choice */
   char                 *resolution,    /* Output resolution */
                        *media_type;    /* Media type */
   ppd_profile_t                *profile;       /* Color profile */
@@ -407,13 +404,37 @@ main(int  argc,                           /* I - Number of command-line arguments */
     Collate = 1;
 
   if ((val = cupsGetOption("gamma", num_options, options)) != NULL)
+  {
+   /*
+    * Get gamma value from 1 to 10000...
+    */
+
     g = atoi(val) * 0.001f;
 
+    if (g < 0.001f)
+      g = 0.001f;
+    else if (g > 10.0f)
+      g = 10.0f;
+  }
+
   if ((val = cupsGetOption("brightness", num_options, options)) != NULL)
+  {
+   /*
+    * Get brightness value from 10 to 1000.
+    */
+
     b = atoi(val) * 0.01f;
 
+    if (b < 0.1f)
+      b = 0.1f;
+    else if (b > 10.0f)
+      b = 10.0f;
+  }
+
   if ((val = cupsGetOption("scaling", num_options, options)) != NULL)
     zoom = atoi(val) * 0.01;
+  else if (cupsGetOption("fitplot", num_options, options))
+    zoom = 1.0;
 
   if ((val = cupsGetOption("ppi", num_options, options)) != NULL)
     if (sscanf(val, "%dx%d", &xppi, &yppi) < 2)
@@ -482,31 +503,11 @@ main(int  argc,                           /* I - Number of command-line arguments */
   * Set the needed options in the page header...
   */
 
-  memset(&header, 0, sizeof(header));
-  header.HWResolution[0]  = 100;
-  header.HWResolution[1]  = 100;
-  header.cupsBitsPerColor = 1;
-  header.cupsColorOrder   = CUPS_ORDER_CHUNKED;
-  header.cupsColorSpace   = CUPS_CSPACE_K;
-
-  if (ppd && ppd->patches)
-    exec_code(&header, ppd->patches);
-
-  if ((count = ppdCollect(ppd, PPD_ORDER_DOCUMENT, &choices)) > 0)
-    for (i = 0; i < count; i ++)
-      exec_code(&header, choices[i]->code);
-
-  if ((count = ppdCollect(ppd, PPD_ORDER_ANY, &choices)) > 0)
-    for (i = 0; i < count; i ++)
-      exec_code(&header, choices[i]->code);
-
-  if ((count = ppdCollect(ppd, PPD_ORDER_PROLOG, &choices)) > 0)
-    for (i = 0; i < count; i ++)
-      exec_code(&header, choices[i]->code);
-
-  if ((count = ppdCollect(ppd, PPD_ORDER_PAGE, &choices)) > 0)
-    for (i = 0; i < count; i ++)
-      exec_code(&header, choices[i]->code);
+  if (cupsRasterInterpretPPD(&header, ppd, num_options, options, raster_cb))
+  {
+    fputs("ERROR: Bad page setup!\n", stderr);
+    return (1);
+  }
 
  /*
   * Get the media type and resolution that have been chosen...
@@ -531,7 +532,6 @@ main(int  argc,                             /* I - Number of command-line arguments */
     case CUPS_CSPACE_W :
         primary   = CUPS_IMAGE_WHITE;
        secondary = CUPS_IMAGE_WHITE;
-        header.cupsBitsPerPixel = header.cupsBitsPerColor;
        break;
 
     default :
@@ -540,25 +540,6 @@ main(int  argc,                            /* I - Number of command-line arguments */
     case CUPS_CSPACE_RGBW :
         primary   = CUPS_IMAGE_RGB;
        secondary = CUPS_IMAGE_RGB;
-
-       /*
-        * Ensure that colorimetric colorspaces use at least 8 bits per
-       * component...
-       */
-
-        if (header.cupsColorSpace >= CUPS_CSPACE_CIEXYZ &&
-           header.cupsBitsPerColor < 8)
-         header.cupsBitsPerColor = 8;
-
-       if (header.cupsColorOrder == CUPS_ORDER_CHUNKED)
-       {
-         if (header.cupsBitsPerColor >= 8)
-            header.cupsBitsPerPixel = header.cupsBitsPerColor * 3;
-         else
-            header.cupsBitsPerPixel = header.cupsBitsPerColor * 4;
-       }
-       else
-         header.cupsBitsPerPixel = header.cupsBitsPerColor;
        break;
 
     case CUPS_CSPACE_K :
@@ -567,7 +548,6 @@ main(int  argc,                             /* I - Number of command-line arguments */
     case CUPS_CSPACE_SILVER :
         primary   = CUPS_IMAGE_BLACK;
        secondary = CUPS_IMAGE_BLACK;
-        header.cupsBitsPerPixel = header.cupsBitsPerColor;
        break;
 
     case CUPS_CSPACE_CMYK :
@@ -577,27 +557,12 @@ main(int  argc,                           /* I - Number of command-line arguments */
     case CUPS_CSPACE_GMCS :
         primary   = CUPS_IMAGE_CMYK;
        secondary = CUPS_IMAGE_CMYK;
-
-       if (header.cupsColorOrder == CUPS_ORDER_CHUNKED)
-          header.cupsBitsPerPixel = header.cupsBitsPerColor * 4;
-       else
-         header.cupsBitsPerPixel = header.cupsBitsPerColor;
        break;
 
     case CUPS_CSPACE_CMY :
     case CUPS_CSPACE_YMC :
         primary   = CUPS_IMAGE_CMY;
        secondary = CUPS_IMAGE_CMY;
-
-       if (header.cupsColorOrder == CUPS_ORDER_CHUNKED)
-       {
-         if (header.cupsBitsPerColor >= 8)
-            header.cupsBitsPerPixel = 24;
-         else
-            header.cupsBitsPerPixel = header.cupsBitsPerColor * 4;
-       }
-       else
-         header.cupsBitsPerPixel = header.cupsBitsPerColor;
        break;
 
     case CUPS_CSPACE_KCMYcm :
@@ -605,21 +570,11 @@ main(int  argc,                           /* I - Number of command-line arguments */
        {
           primary   = CUPS_IMAGE_CMY;
          secondary = CUPS_IMAGE_CMY;
-
-         if (header.cupsColorOrder == CUPS_ORDER_CHUNKED)
-           header.cupsBitsPerPixel = 8;
-         else
-           header.cupsBitsPerPixel = 1;
        }
        else
        {
           primary   = CUPS_IMAGE_CMYK;
          secondary = CUPS_IMAGE_CMYK;
-
-         if (header.cupsColorOrder == CUPS_ORDER_CHUNKED)
-           header.cupsBitsPerPixel = header.cupsBitsPerColor * 4;
-         else
-           header.cupsBitsPerPixel = header.cupsBitsPerColor;
        }
        break;
   }
@@ -1234,20 +1189,20 @@ main(int  argc,                         /* I - Number of command-line arguments */
 
        if (Orientation & 1)
        {
-         x0    = img->xsize * ypage / ypages;
-         x1    = img->xsize * (ypage + 1) / ypages - 1;
-         y0    = img->ysize * xpage / xpages;
-         y1    = img->ysize * (xpage + 1) / xpages - 1;
+         xc0    = img->xsize * ypage / ypages;
+         xc1    = img->xsize * (ypage + 1) / ypages - 1;
+         yc0    = img->ysize * xpage / xpages;
+         yc1    = img->ysize * (xpage + 1) / xpages - 1;
 
          xtemp = header.HWResolution[0] * yprint;
          ytemp = header.HWResolution[1] * xprint;
        }
        else
        {
-         x0    = img->xsize * xpage / xpages;
-         x1    = img->xsize * (xpage + 1) / xpages - 1;
-         y0    = img->ysize * ypage / ypages;
-         y1    = img->ysize * (ypage + 1) / ypages - 1;
+         xc0    = img->xsize * xpage / xpages;
+         xc1    = img->xsize * (xpage + 1) / xpages - 1;
+         yc0    = img->ysize * ypage / ypages;
+         yc1    = img->ysize * (ypage + 1) / ypages - 1;
 
          xtemp = header.HWResolution[0] * xprint;
          ytemp = header.HWResolution[1] * yprint;
@@ -1262,10 +1217,10 @@ main(int  argc,                         /* I - Number of command-line arguments */
          */
 
           if (Flip)
-           z = cupsImageZoomNew(img, x0, y0, x1, y1, -xtemp, ytemp,
+           z = _cupsImageZoomNew(img, xc0, yc0, xc1, yc1, -xtemp, ytemp,
                                 Orientation & 1, zoom_type);
           else
-           z = cupsImageZoomNew(img, x0, y0, x1, y1, xtemp, ytemp,
+           z = _cupsImageZoomNew(img, xc0, yc0, xc1, yc1, xtemp, ytemp,
                                 Orientation & 1, zoom_type);
 
          /*
@@ -1303,9 +1258,9 @@ main(int  argc,                           /* I - Number of command-line arguments */
            if (iy != last_iy)
            {
              if (zoom_type != CUPS_IZOOM_FAST && (iy - last_iy) > 1)
-               cupsImageZoomFill(z, iy);
+               _cupsImageZoomFill(z, iy);
 
-              cupsImageZoomFill(z, iy + z->yincr);
+              _cupsImageZoomFill(z, iy + z->yincr);
 
               last_iy = iy;
            }
@@ -1425,7 +1380,7 @@ main(int  argc,                           /* I - Number of command-line arguments */
          * Free memory used for the "zoom" engine...
          */
 
-          cupsImageZoomDelete(z);
+          _cupsImageZoomDelete(z);
         }
       }
 
@@ -1442,184 +1397,6 @@ main(int  argc,                         /* I - Number of command-line arguments */
 }
 
 
-/*
- * 'exec_code()' - Execute PostScript setpagedevice commands as appropriate.
- */
-
-static void
-exec_code(cups_page_header2_t *header, /* I - Page header */
-          const char          *code)   /* I - Option choice to execute */
-{
-  char *ptr,                           /* Pointer into name/value string */
-       name[255],                      /* Name of pagedevice entry */
-       value[1024];                    /* Value of pagedevice entry */
-
-
-  for (; *code != '\0';)
-  {
-   /*
-    * Search for the start of a dictionary name...
-    */
-
-    while (*code != '/' && *code != '\0')
-      code ++;
-
-    if (*code == '\0')
-      break;
-
-   /*
-    * Get the name...
-    */
-
-    code ++;
-    for (ptr = name; isalnum(*code & 255) && (ptr - name) < (sizeof(name) - 1);)
-      *ptr++ = *code++;
-    *ptr = '\0';
-
-   /*
-    * The parse the value as needed...
-    */
-
-    while (isspace(*code & 255))
-      code ++;
-
-    if (*code == '\0')
-      break;
-
-    if (*code == '[')
-    {
-     /*
-      * Read array of values...
-      */
-
-      code ++;
-      for (ptr = value;
-           *code != ']' && *code != '\0' &&
-              (ptr - value) < (sizeof(value) - 1);)
-       *ptr++ = *code++;
-      *ptr = '\0';
-    }
-    else if (*code == '(')
-    {
-     /*
-      * Read string value...
-      */
-
-      code ++;
-      for (ptr = value;
-           *code != ')' && *code != '\0' &&
-              (ptr - value) < (sizeof(value) - 1);)
-        if (*code == '\\')
-       {
-         code ++;
-         if (isdigit(*code & 255))
-           *ptr++ = (char)strtol(code, (char **)&code, 8);
-          else
-           *ptr++ = *code++;
-       }
-       else
-          *ptr++ = *code++;
-
-      *ptr = '\0';
-    }
-    else if (isdigit(*code & 255) || *code == '-')
-    {
-     /*
-      * Read single number...
-      */
-
-      for (ptr = value;
-           (isdigit(*code & 255) || *code == '-') &&
-              (ptr - value) < (sizeof(value) - 1);)
-       *ptr++ = *code++;
-      *ptr = '\0';
-    }
-    else
-    {
-     /*
-      * Read a single name...
-      */
-
-      for (ptr = value;
-           (isalnum(*code & 255) || *code == '_') &&
-              (ptr - value) < (sizeof(value) - 1);)
-       *ptr++ = *code++;
-      *ptr = '\0';
-    }
-
-   /*
-    * Assign the value as needed...
-    */
-
-    if (!strcmp(name, "MediaClass"))
-      strlcpy(header->MediaClass, value, sizeof(header->MediaClass));
-    else if (!strcmp(name, "MediaColor"))
-      strlcpy(header->MediaColor, value, sizeof(header->MediaColor));
-    else if (!strcmp(name, "MediaType"))
-      strlcpy(header->MediaType, value, sizeof(header->MediaType));
-    else if (!strcmp(name, "OutputType"))
-      strlcpy(header->OutputType, value, sizeof(header->OutputType));
-    else if (!strcmp(name, "AdvanceDistance"))
-      header->AdvanceDistance = atoi(value);
-    else if (!strcmp(name, "AdvanceMedia"))
-      header->AdvanceMedia = atoi(value);
-    else if (!strcmp(name, "Collate"))
-      header->Collate = !strcmp(value, "true");
-    else if (!strcmp(name, "CutMedia"))
-      header->CutMedia = (cups_cut_t)atoi(value);
-    else if (!strcmp(name, "Duplex"))
-      header->Duplex = !strcmp(value, "true");
-    else if (!strcmp(name, "HWResolution"))
-      sscanf(value, "%d%d", header->HWResolution + 0, header->HWResolution + 1);
-    else if (!strcmp(name, "InsertSheet"))
-      header->InsertSheet = !strcmp(value, "true");
-    else if (!strcmp(name, "Jog"))
-      header->Jog = atoi(value);
-    else if (!strcmp(name, "LeadingEdge"))
-      header->LeadingEdge = atoi(value);
-    else if (!strcmp(name, "Margins"))
-      sscanf(value, "%d%d", header->Margins + 0, header->Margins + 1);
-    else if (!strcmp(name, "ManualFeed"))
-      header->ManualFeed = !strcmp(value, "true");
-    else if (!strcmp(name, "cupsMediaPosition") || /* Compatibility */
-             !strcmp(name, "MediaPosition"))
-      header->MediaPosition = atoi(value);
-    else if (!strcmp(name, "MediaWeight"))
-      header->MediaWeight = atoi(value);
-    else if (!strcmp(name, "MirrorPrint"))
-      header->MirrorPrint = !strcmp(value, "true");
-    else if (!strcmp(name, "NegativePrint"))
-      header->NegativePrint = !strcmp(value, "true");
-    else if (!strcmp(name, "Orientation"))
-      header->Orientation = atoi(value);
-    else if (!strcmp(name, "OutputFaceUp"))
-      header->OutputFaceUp = !strcmp(value, "true");
-    else if (!strcmp(name, "Separations"))
-      header->Separations = !strcmp(value, "true");
-    else if (!strcmp(name, "TraySwitch"))
-      header->TraySwitch = !strcmp(value, "true");
-    else if (!strcmp(name, "Tumble"))
-      header->Tumble = !strcmp(value, "true");
-    else if (!strcmp(name, "cupsMediaType"))
-      header->cupsMediaType = atoi(value);
-    else if (!strcmp(name, "cupsBitsPerColor"))
-      header->cupsBitsPerColor = atoi(value);
-    else if (!strcmp(name, "cupsColorOrder"))
-      header->cupsColorOrder = (cups_order_t)atoi(value);
-    else if (!strcmp(name, "cupsColorSpace"))
-      header->cupsColorSpace = (cups_cspace_t)atoi(value);
-    else if (!strcmp(name, "cupsCompression"))
-      header->cupsCompression = atoi(value);
-    else if (!strcmp(name, "cupsRowCount"))
-      header->cupsRowCount = atoi(value);
-    else if (!strcmp(name, "cupsRowFeed"))
-      header->cupsRowFeed = atoi(value);
-    else if (!strcmp(name, "cupsRowStep"))
-      header->cupsRowStep = atoi(value);
-  }
-}
-
-
 /*
  * 'format_CMY()' - Convert image data to CMY.
  */
@@ -1633,18 +1410,18 @@ format_CMY(cups_page_header2_t *header, /* I - Page header */
            int                ysize,   /* I - Height of image data */
            int                yerr0,   /* I - Top Y error */
            int                yerr1,   /* I - Bottom Y error */
-           cups_ib_t               *r0,        /* I - Primary image data */
-           cups_ib_t               *r1)        /* I - Image data for interpolation */
+           cups_ib_t          *r0,     /* I - Primary image data */
+           cups_ib_t          *r1)     /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -1670,7 +1447,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
         {
           case 1 :
               bitmask = 64 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --)
               {
@@ -1758,7 +1535,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -1782,7 +1559,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
 
               for (x = xsize; x > 0; x --)
@@ -1806,7 +1583,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  cptr ++;
                  mptr ++;
@@ -1876,7 +1653,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               switch (z)
              {
@@ -1931,7 +1708,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
               r0 += z;
 
@@ -1946,7 +1723,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  ptr ++;
                }
@@ -1999,7 +1776,7 @@ format_CMY(cups_page_header2_t *header,   /* I - Page header */
  */
 
 static void
-format_CMYK(cups_page_header2_t *header,       /* I - Page header */
+format_CMYK(cups_page_header2_t *header,/* I - Page header */
             unsigned char       *row,  /* IO - Bitmap data for device */
            int                 y,      /* I - Current row */
            int                 z,      /* I - Current plane */
@@ -2007,19 +1784,19 @@ format_CMYK(cups_page_header2_t *header,        /* I - Page header */
            int                 ysize,  /* I - Height of image data */
            int                 yerr0,  /* I - Top Y error */
            int                 yerr1,  /* I - Bottom Y error */
-           cups_ib_t                *r0,       /* I - Primary image data */
-           cups_ib_t                *r1)       /* I - Image data for interpolation */
+           cups_ib_t           *r0,    /* I - Primary image data */
+           cups_ib_t           *r1)    /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               *kptr,          /* Pointer into black */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               *kptr,                  /* Pointer into black */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -2045,7 +1822,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 128 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --)
               {
@@ -2080,9 +1857,9 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
               for (x = xsize ; x > 0; x --, r0 += 4)
               {
                if ((r0[0] & 63) > dither[x & 7])
-                 *ptr ^= (0xc0 & OnPixels[r0[0]]);
+                 *ptr ^= (0x0 & OnPixels[r0[0]]);
                else
-                 *ptr ^= (0xc0 & OffPixels[r0[0]]);
+                 *ptr ^= (0x0 & OffPixels[r0[0]]);
 
                if ((r0[1] & 63) > dither[x & 7])
                  *ptr ^= (0x30 & OnPixels[r0[1]]);
@@ -2148,7 +1925,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -2175,7 +1952,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
 
               for (x = xsize; x > 0; x --)
@@ -2204,7 +1981,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  cptr ++;
                  mptr ++;
@@ -2286,7 +2063,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
               r0      += z;
 
               for (x = xsize; x > 0; x --, r0 += 4)
@@ -2305,7 +2082,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
              break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
               r0      += z;
 
@@ -2320,7 +2097,7 @@ format_CMYK(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  ptr ++;
                }
@@ -2381,14 +2158,14 @@ format_K(cups_page_header2_t *header,   /* I - Page header */
         int                 ysize,     /* I - Height of image data */
         int                 yerr0,     /* I - Top Y error */
         int                 yerr1,     /* I - Bottom Y error */
-        cups_ib_t                *r0,  /* I - Primary image data */
-        cups_ib_t                *r1)  /* I - Image data for interpolation */
+        cups_ib_t           *r0,       /* I - Primary image data */
+        cups_ib_t           *r1)       /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   (void)z;
@@ -2412,7 +2189,7 @@ format_K(cups_page_header2_t *header,     /* I - Page header */
   {
     case 1 :
         bitmask = 0x80 >> (bitoffset & 7);
-        dither  = Floyd16x16[y & 15];
+        dither  = Floyd16xc16[y & 15];
 
         for (x = xsize; x > 0; x --)
         {
@@ -2430,7 +2207,7 @@ format_K(cups_page_header2_t *header,     /* I - Page header */
         break;
 
     case 2 :
-        bitmask = 0xc0 >> (bitoffset & 7);
+        bitmask = 0x0 >> (bitoffset & 7);
         dither  = Floyd8x8[y & 7];
 
         for (x = xsize; x > 0; x --)
@@ -2444,7 +2221,7 @@ format_K(cups_page_header2_t *header,     /* I - Page header */
            bitmask >>= 2;
          else
          {
-           bitmask = 0xc0;
+           bitmask = 0x0;
 
            ptr ++;
           }
@@ -2491,7 +2268,7 @@ format_K(cups_page_header2_t *header,     /* I - Page header */
  */
 
 static void
-format_KCMY(cups_page_header2_t *header,       /* I - Page header */
+format_KCMY(cups_page_header2_t *header,/* I - Page header */
             unsigned char       *row,  /* IO - Bitmap data for device */
            int                 y,      /* I - Current row */
            int                 z,      /* I - Current plane */
@@ -2499,19 +2276,19 @@ format_KCMY(cups_page_header2_t *header,        /* I - Page header */
            int                 ysize,  /* I - Height of image data */
            int                 yerr0,  /* I - Top Y error */
            int                 yerr1,  /* I - Bottom Y error */
-           cups_ib_t                *r0,       /* I - Primary image data */
-           cups_ib_t                *r1)       /* I - Image data for interpolation */
+           cups_ib_t           *r0,    /* I - Primary image data */
+           cups_ib_t           *r1)    /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               *kptr,          /* Pointer into black */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               *kptr,                  /* Pointer into black */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -2537,7 +2314,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 128 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --, r0 += 4)
               {
@@ -2572,9 +2349,9 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
               for (x = xsize ; x > 0; x --, r0 += 4)
               {
                if ((r0[3] & 63) > dither[x & 7])
-                 *ptr ^= (0xc0 & OnPixels[r0[3]]);
+                 *ptr ^= (0x0 & OnPixels[r0[3]]);
                else
-                 *ptr ^= (0xc0 & OffPixels[r0[3]]);
+                 *ptr ^= (0x0 & OffPixels[r0[3]]);
 
                if ((r0[0] & 63) > dither[x & 7])
                  *ptr ^= (0x30 & OnPixels[r0[0]]);
@@ -2657,7 +2434,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -2684,7 +2461,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
               dither  = Floyd8x8[y & 7];
 
               for (x = xsize; x > 0; x --)
@@ -2713,7 +2490,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  cptr ++;
                  mptr ++;
@@ -2795,7 +2572,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
              if (z == 0)
                r0 += 3;
              else
@@ -2817,7 +2594,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
              break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
               dither  = Floyd8x8[y & 7];
               if (z == 0)
                r0 += 3;
@@ -2835,7 +2612,7 @@ format_KCMY(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  ptr ++;
                }
@@ -2899,30 +2676,31 @@ format_KCMY(cups_page_header2_t *header,        /* I - Page header */
  */
 
 static void
-format_KCMYcm(cups_page_header2_t *header,/* I - Page header */
-              unsigned char       *row,        /* IO - Bitmap data for device */
-             int                 y,    /* I - Current row */
-             int                 z,    /* I - Current plane */
-             int                 xsize,/* I - Width of image data */
-             int                 ysize,/* I - Height of image data */
-             int                 yerr0,/* I - Top Y error */
-             int                 yerr1,/* I - Bottom Y error */
-             cups_ib_t                *r0,     /* I - Primary image data */
-             cups_ib_t                *r1)     /* I - Image data for interpolation */
+format_KCMYcm(
+    cups_page_header2_t *header,       /* I - Page header */
+    unsigned char       *row,          /* IO - Bitmap data for device */
+    int                 y,             /* I - Current row */
+    int                 z,             /* I - Current plane */
+    int                 xsize,         /* I - Width of image data */
+    int                 ysize,         /* I - Height of image data */
+    int                 yerr0,         /* I - Top Y error */
+    int                 yerr1,         /* I - Bottom Y error */
+    cups_ib_t           *r0,           /* I - Primary image data */
+    cups_ib_t           *r1)           /* I - Image data for interpolation */
 {
-  int          pc, pm, py, pk; /* Cyan, magenta, yellow, and black values */
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               *kptr,          /* Pointer into black */
-               *lcptr,         /* Pointer into light cyan */
-               *lmptr,         /* Pointer into light magenta */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  int          pc, pm, py, pk;         /* Cyan, magenta, yellow, and black values */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               *kptr,                  /* Pointer into black */
+               *lcptr,                 /* Pointer into light cyan */
+               *lmptr,                 /* Pointer into light magenta */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -2950,7 +2728,7 @@ format_KCMYcm(cups_page_header2_t *header,/* I - Page header */
         switch (header->cupsBitsPerColor)
         {
           case 1 :
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --)
               {
@@ -3015,7 +2793,7 @@ format_KCMYcm(cups_page_header2_t *header,/* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -3095,7 +2873,7 @@ format_KCMYcm(cups_page_header2_t *header,/* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               switch (z)
              {
@@ -3236,7 +3014,7 @@ format_KCMYcm(cups_page_header2_t *header,/* I - Page header */
  */
 
 static void
-format_RGBA(cups_page_header2_t *header,       /* I - Page header */
+format_RGBA(cups_page_header2_t *header,/* I - Page header */
             unsigned char       *row,  /* IO - Bitmap data for device */
            int                 y,      /* I - Current row */
            int                 z,      /* I - Current plane */
@@ -3244,18 +3022,18 @@ format_RGBA(cups_page_header2_t *header,        /* I - Page header */
            int                 ysize,  /* I - Height of image data */
            int                 yerr0,  /* I - Top Y error */
            int                 yerr1,  /* I - Bottom Y error */
-           cups_ib_t                *r0,       /* I - Primary image data */
-           cups_ib_t                *r1)       /* I - Image data for interpolation */
+           cups_ib_t           *r0,    /* I - Primary image data */
+           cups_ib_t           *r1)    /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -3281,7 +3059,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 128 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --)
               {
@@ -3315,9 +3093,9 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
               for (x = xsize ; x > 0; x --, r0 += 3)
               {
                if ((r0[0] & 63) > dither[x & 7])
-                 *ptr ^= (0xc0 & OnPixels[r0[0]]);
+                 *ptr ^= (0x0 & OnPixels[r0[0]]);
                else
-                 *ptr ^= (0xc0 & OffPixels[r0[0]]);
+                 *ptr ^= (0x0 & OffPixels[r0[0]]);
 
                if ((r0[1] & 63) > dither[x & 7])
                  *ptr ^= (0x30 & OnPixels[r0[1]]);
@@ -3392,7 +3170,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -3416,7 +3194,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
 
               for (x = xsize; x > 0; x --)
@@ -3440,7 +3218,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  cptr ++;
                  mptr ++;
@@ -3516,7 +3294,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               switch (z)
              {
@@ -3571,7 +3349,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
               r0 += z;
 
@@ -3586,7 +3364,7 @@ format_RGBA(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  ptr ++;
                }
@@ -3647,14 +3425,14 @@ format_W(cups_page_header2_t *header,   /* I - Page header */
            int              ysize,     /* I - Height of image data */
            int              yerr0,     /* I - Top Y error */
            int              yerr1,     /* I - Bottom Y error */
-           cups_ib_t             *r0,  /* I - Primary image data */
-           cups_ib_t             *r1)  /* I - Image data for interpolation */
+           cups_ib_t        *r0,       /* I - Primary image data */
+           cups_ib_t        *r1)       /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   (void)z;
@@ -3678,7 +3456,7 @@ format_W(cups_page_header2_t *header,     /* I - Page header */
   {
     case 1 :
         bitmask = 0x80 >> (bitoffset & 7);
-        dither  = Floyd16x16[y & 15];
+        dither  = Floyd16xc16[y & 15];
 
         for (x = xsize; x > 0; x --)
         {
@@ -3696,7 +3474,7 @@ format_W(cups_page_header2_t *header,     /* I - Page header */
         break;
 
     case 2 :
-        bitmask = 0xc0 >> (bitoffset & 7);
+        bitmask = 0x0 >> (bitoffset & 7);
         dither  = Floyd8x8[y & 7];
 
         for (x = xsize; x > 0; x --)
@@ -3710,7 +3488,7 @@ format_W(cups_page_header2_t *header,     /* I - Page header */
            bitmask >>= 2;
          else
          {
-           bitmask = 0xc0;
+           bitmask = 0x0;
 
            ptr ++;
           }
@@ -3765,18 +3543,18 @@ format_YMC(cups_page_header2_t *header, /* I - Page header */
            int                ysize,   /* I - Height of image data */
            int                yerr0,   /* I - Top Y error */
            int                yerr1,   /* I - Bottom Y error */
-           cups_ib_t               *r0,        /* I - Primary image data */
-           cups_ib_t               *r1)        /* I - Image data for interpolation */
+           cups_ib_t          *r0,     /* I - Primary image data */
+           cups_ib_t          *r1)     /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -3802,7 +3580,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
         {
           case 1 :
               bitmask = 64 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --, r0 += 3)
               {
@@ -3902,7 +3680,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -3926,7 +3704,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
 
               for (x = xsize; x > 0; x --)
@@ -3950,7 +3728,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  cptr ++;
                  mptr ++;
@@ -4020,7 +3798,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-             dither  = Floyd16x16[y & 15];
+             dither  = Floyd16xc16[y & 15];
 
               switch (z)
              {
@@ -4075,7 +3853,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
              dither  = Floyd8x8[y & 7];
               z       = 2 - z;
               r0      += z;
@@ -4091,7 +3869,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  ptr ++;
                }
@@ -4146,7 +3924,7 @@ format_YMC(cups_page_header2_t *header,   /* I - Page header */
  */
 
 static void
-format_YMCK(cups_page_header2_t *header,       /* I - Page header */
+format_YMCK(cups_page_header2_t *header,/* I - Page header */
             unsigned char       *row,  /* IO - Bitmap data for device */
            int                 y,      /* I - Current row */
            int                 z,      /* I - Current plane */
@@ -4154,19 +3932,19 @@ format_YMCK(cups_page_header2_t *header,        /* I - Page header */
            int                 ysize,  /* I - Height of image data */
            int                 yerr0,  /* I - Top Y error */
            int                 yerr1,  /* I - Bottom Y error */
-           cups_ib_t                *r0,       /* I - Primary image data */
-           cups_ib_t                *r1)       /* I - Image data for interpolation */
+           cups_ib_t           *r0,    /* I - Primary image data */
+           cups_ib_t           *r1)    /* I - Image data for interpolation */
 {
-  cups_ib_t            *ptr,           /* Pointer into row */
-               *cptr,          /* Pointer into cyan */
-               *mptr,          /* Pointer into magenta */
-               *yptr,          /* Pointer into yellow */
-               *kptr,          /* Pointer into black */
-               bitmask;        /* Current mask for pixel */
-  int          bitoffset;      /* Current offset in line */
-  int          bandwidth;      /* Width of a color band */
-  int          x,              /* Current X coordinate on page */
-               *dither;        /* Pointer into dither array */
+  cups_ib_t    *ptr,                   /* Pointer into row */
+               *cptr,                  /* Pointer into cyan */
+               *mptr,                  /* Pointer into magenta */
+               *yptr,                  /* Pointer into yellow */
+               *kptr,                  /* Pointer into black */
+               bitmask;                /* Current mask for pixel */
+  int          bitoffset;              /* Current offset in line */
+  int          bandwidth;              /* Width of a color band */
+  int          x,                      /* Current X coordinate on page */
+               *dither;                /* Pointer into dither array */
 
 
   switch (XPosition)
@@ -4192,7 +3970,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 128 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               for (x = xsize ; x > 0; x --, r0 += 4)
               {
@@ -4228,9 +4006,9 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
               for (x = xsize ; x > 0; x --, r0 += 4)
               {
                if ((r0[2] & 63) > dither[x & 7])
-                 *ptr ^= (0xc0 & OnPixels[r0[2]]);
+                 *ptr ^= (0x0 & OnPixels[r0[2]]);
                else
-                 *ptr ^= (0xc0 & OffPixels[r0[2]]);
+                 *ptr ^= (0x0 & OffPixels[r0[2]]);
 
                if ((r0[1] & 63) > dither[x & 7])
                  *ptr ^= (0x30 & OnPixels[r0[1]]);
@@ -4313,7 +4091,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               for (x = xsize; x > 0; x --)
               {
@@ -4341,7 +4119,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
               dither  = Floyd8x8[y & 7];
 
               for (x = xsize; x > 0; x --)
@@ -4370,7 +4148,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  cptr ++;
                  mptr ++;
@@ -4452,7 +4230,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
         {
           case 1 :
               bitmask = 0x80 >> (bitoffset & 7);
-              dither  = Floyd16x16[y & 15];
+              dither  = Floyd16xc16[y & 15];
 
               if (z < 3)
                r0 += 2 - z;
@@ -4475,7 +4253,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
               break;
 
           case 2 :
-              bitmask = 0xc0 >> (bitoffset & 7);
+              bitmask = 0x0 >> (bitoffset & 7);
               dither  = Floyd8x8[y & 7];
               if (z == 3)
                r0 += 3;
@@ -4493,7 +4271,7 @@ format_YMCK(cups_page_header2_t *header,  /* I - Page header */
                  bitmask >>= 2;
                else
                {
-                 bitmask = 0xc0;
+                 bitmask = 0x0;
 
                  ptr ++;
                }
@@ -4587,5 +4365,29 @@ make_lut(cups_ib_t  *lut,                /* I - Lookup table */
 
 
 /*
- * End of "$Id: imagetoraster.c 4767 2005-10-10 19:23:23Z mike $".
+ * 'raster_cb()' - Validate the page header.
+ */
+
+static int                             /* O - 0 if OK, -1 if not */
+raster_cb(
+    cups_page_header2_t *header,       /* IO - Raster header */
+    int                 preferred_bits)        /* I  - Preferred bits per color */
+{
+ /*
+  * Ensure that colorimetric colorspaces use at least 8 bits per
+  * component...
+  */
+
+  if ((header->cupsColorSpace == CUPS_CSPACE_CIEXYZ ||
+       header->cupsColorSpace == CUPS_CSPACE_CIELab ||
+       header->cupsColorSpace >= CUPS_CSPACE_ICC1) &&
+      header->cupsBitsPerColor < 8)
+    header->cupsBitsPerColor = 8;
+
+  return (0);
+}
+
+
+/*
+ * End of "$Id: imagetoraster.c 5485 2006-05-02 23:59:56Z mike $".
  */