/*
* Raster file routines for CUPS.
*
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* This file is part of the CUPS Imaging library.
* Include necessary headers...
*/
-#include <cups/raster-private.h>
+#include "raster-private.h"
+#include "debug-internal.h"
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif /* HAVE_STDINT_H */
* Local globals...
*/
+static const char * const apple_media_types[] =
+{ /* media-type values for Apple Raster */
+ "auto",
+ "stationery",
+ "transparency",
+ "envelope",
+ "cardstock",
+ "labels",
+ "stationery-letterhead",
+ "disc",
+ "photographic-matte",
+ "photographic-satin",
+ "photographic-semi-gloss",
+ "photographic-glossy",
+ "photographic-high-gloss",
+ "other"
+};
+
#ifdef DEBUG
static const char * const cups_modes[] =
{ /* Open modes */
{
CUPS_CSPACE_SW,
CUPS_CSPACE_SRGB,
- CUPS_CSPACE_RGBW,
+ CUPS_CSPACE_CIELab,
CUPS_CSPACE_ADOBERGB,
CUPS_CSPACE_W,
CUPS_CSPACE_RGB,
{
1,
3,
- 4,
+ 3,
3,
1,
3,
r->header.cupsPageSize[1] = (float)(r->header.cupsHeight * 72.0 / r->header.HWResolution[1]);
}
- r->header.cupsInteger[0] = r->apple_page_count;
- r->header.cupsInteger[7] = 0xffffff;
+ r->header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount] = r->apple_page_count;
+ r->header.cupsInteger[CUPS_RASTER_PWG_AlternatePrimary] = 0xffffff;
+ r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality] = appleheader[3];
+
+ if (appleheader[2] >= 2)
+ r->header.Duplex = 1;
+ if (appleheader[2] == 2)
+ r->header.Tumble = 1;
+
+ r->header.MediaPosition = appleheader[5];
+
+ if (appleheader[4] < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])))
+ strlcpy(r->header.MediaType, apple_media_types[appleheader[4]], sizeof(r->header.MediaType));
+ else
+ strlcpy(r->header.MediaType, "other", sizeof(r->header.MediaType));
}
break;
}
if (!cups_raster_update(r))
return (0);
- DEBUG_printf(("4_cupsRasterReadHeader: cupsBitsPerPixel=%u, cupsBitsPerColor=%u, cupsBytesPerLine=%u, cupsWidth=%u, cupsHeight=%u, r->bpp=%d", r->header.cupsBitsPerPixel, r->header.cupsBitsPerColor, r->header.cupsBytesPerLine, r->header.cupsWidth, r->header.cupsHeight, r->bpp));
+ DEBUG_printf(("4_cupsRasterReadHeader: cupsColorSpace=%s", _cupsRasterColorSpaceString(r->header.cupsColorSpace)));
+ DEBUG_printf(("4_cupsRasterReadHeader: cupsBitsPerColor=%u", r->header.cupsBitsPerColor));
+ DEBUG_printf(("4_cupsRasterReadHeader: cupsBitsPerPixel=%u", r->header.cupsBitsPerPixel));
+ DEBUG_printf(("4_cupsRasterReadHeader: cupsBytesPerLine=%u", r->header.cupsBytesPerLine));
+ DEBUG_printf(("4_cupsRasterReadHeader: cupsWidth=%u", r->header.cupsWidth));
+ DEBUG_printf(("4_cupsRasterReadHeader: cupsHeight=%u", r->header.cupsHeight));
+ DEBUG_printf(("4_cupsRasterReadHeader: r->bpp=%d", r->bpp));
return (r->header.cupsBitsPerPixel > 0 && r->header.cupsBitsPerPixel <= 240 && r->header.cupsBitsPerColor > 0 && r->header.cupsBitsPerColor <= 16 && r->header.cupsBytesPerLine > 0 && r->header.cupsBytesPerLine <= 0x7fffffff && r->header.cupsHeight != 0 && (r->header.cupsBytesPerLine % r->bpp) == 0);
}
* zeroed.
*/
- unsigned char appleheader[32]; /* Raw page header */
- unsigned height = r->header.cupsHeight * r->rowheight;
+ int i; /* Looping var */
+ unsigned char appleheader[32];/* Raw page header */
+ unsigned height = r->header.cupsHeight * r->rowheight;
/* Computed page height */
if (r->apple_page_count == 0xffffffffU)
appleheader[0] = (unsigned char)r->header.cupsBitsPerPixel;
appleheader[1] = r->header.cupsColorSpace == CUPS_CSPACE_SRGB ? 1 :
- r->header.cupsColorSpace == CUPS_CSPACE_RGBW ? 2 :
+ r->header.cupsColorSpace == CUPS_CSPACE_CIELab ? 2 :
r->header.cupsColorSpace == CUPS_CSPACE_ADOBERGB ? 3 :
r->header.cupsColorSpace == CUPS_CSPACE_W ? 4 :
r->header.cupsColorSpace == CUPS_CSPACE_RGB ? 5 :
r->header.cupsColorSpace == CUPS_CSPACE_CMYK ? 6 : 0;
+ appleheader[2] = r->header.Duplex ? (r->header.Tumble ? 2 : 3) : 1;
+ appleheader[3] = (unsigned char)(r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality]);
+ appleheader[5] = (unsigned char)(r->header.MediaPosition);
appleheader[12] = (unsigned char)(r->header.cupsWidth >> 24);
appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16);
appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8);
appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8);
appleheader[23] = (unsigned char)(r->header.HWResolution[0]);
+ for (i = 0; i < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])); i ++)
+ {
+ if (!strcmp(r->header.MediaType, apple_media_types[i]))
+ {
+ appleheader[4] = (unsigned char)i;
+ break;
+ }
+ }
+
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
}
else