mirror of
https://github.com/MopriaAlliance/CUPS-for-Android.git
synced 2026-06-25 06:33:42 +08:00
Moving to 2.2.4
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
# property of Apple Inc. and are protected by Federal copyright
|
||||
# law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
# which should have been included with this file. If this file is
|
||||
# file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
# missing or damaged, see the license at "http://www.cups.org/".
|
||||
#
|
||||
# This file is subject to the Apple OS-Developed Software exception.
|
||||
#
|
||||
|
||||
@@ -34,7 +34,7 @@ function. For example, to read raster data from the standard input, open
|
||||
file descriptor 0:</p>
|
||||
|
||||
<pre class="example">
|
||||
#include <cups/raster.h>>
|
||||
#include <cups/raster.h>
|
||||
|
||||
<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
|
||||
</pre>
|
||||
@@ -61,7 +61,7 @@ hardware resolution, and so forth used for the page.</p>
|
||||
function:</p>
|
||||
|
||||
<pre class="example">
|
||||
#include <cups/raster.h>>
|
||||
#include <cups/raster.h>
|
||||
|
||||
<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
|
||||
<a href="#cups_page_header2_t">cups_page_header2_t</a> header;
|
||||
@@ -84,7 +84,7 @@ function. A <code>for</code> loop is normally used to read the page one line
|
||||
at a time:</p>
|
||||
|
||||
<pre class="example">
|
||||
#include <cups/raster.h>>
|
||||
#include <cups/raster.h>
|
||||
|
||||
<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
|
||||
<a href="#cups_page_header2_t">cups_page_header2_t</a> header;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
329
filter/raster.c
329
filter/raster.c
@@ -10,7 +10,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
@@ -36,7 +36,8 @@ struct _cups_raster_s /**** Raster stream data ****/
|
||||
cups_raster_iocb_t iocb; /* IO callback */
|
||||
cups_mode_t mode; /* Read/write mode */
|
||||
cups_page_header2_t header; /* Raster header for current page */
|
||||
unsigned count, /* Current row run-length count */
|
||||
unsigned rowheight, /* Row height in lines */
|
||||
count, /* Current row run-length count */
|
||||
remaining, /* Remaining rows in page image */
|
||||
bpp; /* Bytes per pixel/color */
|
||||
unsigned char *pixels, /* Pixels for current row */
|
||||
@@ -51,6 +52,7 @@ struct _cups_raster_s /**** Raster stream data ****/
|
||||
#ifdef DEBUG
|
||||
size_t iocount; /* Number of bytes read/written */
|
||||
#endif /* DEBUG */
|
||||
unsigned apple_page_count;/* Apple raster page count */
|
||||
};
|
||||
|
||||
|
||||
@@ -418,7 +420,9 @@ cupsRasterOpenIO(
|
||||
r->sync != CUPS_RASTER_SYNCv1 &&
|
||||
r->sync != CUPS_RASTER_REVSYNCv1 &&
|
||||
r->sync != CUPS_RASTER_SYNCv2 &&
|
||||
r->sync != CUPS_RASTER_REVSYNCv2)
|
||||
r->sync != CUPS_RASTER_REVSYNCv2 &&
|
||||
r->sync != CUPS_RASTER_SYNCapple &&
|
||||
r->sync != CUPS_RASTER_REVSYNCapple)
|
||||
{
|
||||
_cupsRasterAddError("Unknown raster format %08x!\n", r->sync);
|
||||
free(r);
|
||||
@@ -426,14 +430,33 @@ cupsRasterOpenIO(
|
||||
}
|
||||
|
||||
if (r->sync == CUPS_RASTER_SYNCv2 ||
|
||||
r->sync == CUPS_RASTER_REVSYNCv2)
|
||||
r->sync == CUPS_RASTER_REVSYNCv2 ||
|
||||
r->sync == CUPS_RASTER_SYNCapple ||
|
||||
r->sync == CUPS_RASTER_REVSYNCapple)
|
||||
r->compressed = 1;
|
||||
|
||||
if (r->sync == CUPS_RASTER_REVSYNC ||
|
||||
r->sync == CUPS_RASTER_REVSYNCv1 ||
|
||||
r->sync == CUPS_RASTER_REVSYNCv2)
|
||||
r->sync == CUPS_RASTER_REVSYNCv2 ||
|
||||
r->sync == CUPS_RASTER_REVSYNCapple)
|
||||
r->swapped = 1;
|
||||
|
||||
if (r->sync == CUPS_RASTER_SYNCapple ||
|
||||
r->sync == CUPS_RASTER_REVSYNCapple)
|
||||
{
|
||||
unsigned char header[8]; /* File header */
|
||||
|
||||
if (cups_raster_io(r, (unsigned char *)header, sizeof(header)) !=
|
||||
sizeof(header))
|
||||
{
|
||||
_cupsRasterAddError("Unable to read header from raster stream: %s\n",
|
||||
strerror(errno));
|
||||
free(r);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DEBUG_printf(("1cupsRasterOpenIO: r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
|
||||
}
|
||||
else
|
||||
@@ -459,6 +482,13 @@ cupsRasterOpenIO(
|
||||
r->sync = htonl(CUPS_RASTER_SYNC_PWG);
|
||||
r->swapped = r->sync != CUPS_RASTER_SYNC_PWG;
|
||||
break;
|
||||
|
||||
case CUPS_RASTER_WRITE_APPLE :
|
||||
r->compressed = 1;
|
||||
r->sync = htonl(CUPS_RASTER_SYNCapple);
|
||||
r->swapped = r->sync != CUPS_RASTER_SYNCapple;
|
||||
r->apple_page_count = 0xffffffffU;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cups_raster_io(r, (unsigned char *)&(r->sync), sizeof(r->sync)) < (ssize_t)sizeof(r->sync))
|
||||
@@ -662,7 +692,31 @@ cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (byte & 128)
|
||||
if (byte == 128)
|
||||
{
|
||||
/*
|
||||
* Clear to end of line...
|
||||
*/
|
||||
|
||||
switch (r->header.cupsColorSpace)
|
||||
{
|
||||
case CUPS_CSPACE_W :
|
||||
case CUPS_CSPACE_RGB :
|
||||
case CUPS_CSPACE_SW :
|
||||
case CUPS_CSPACE_SRGB :
|
||||
case CUPS_CSPACE_RGBW :
|
||||
case CUPS_CSPACE_ADOBERGB :
|
||||
memset(temp, 0xff, (size_t)bytes);
|
||||
break;
|
||||
default :
|
||||
memset(temp, 0x00, (size_t)bytes);
|
||||
break;
|
||||
}
|
||||
|
||||
temp += bytes;
|
||||
bytes = 0;
|
||||
}
|
||||
else if (byte & 128)
|
||||
{
|
||||
/*
|
||||
* Copy N literal pixels...
|
||||
@@ -891,6 +945,60 @@ cupsRasterWriteHeader(
|
||||
|
||||
return (cups_raster_io(r, (unsigned char *)&fh, sizeof(fh)) == sizeof(fh));
|
||||
}
|
||||
else if (r->mode == CUPS_RASTER_WRITE_APPLE)
|
||||
{
|
||||
/*
|
||||
* Raw raster data is always network byte order with most of the page header
|
||||
* zeroed.
|
||||
*/
|
||||
|
||||
unsigned char appleheader[32]; /* Raw page header */
|
||||
|
||||
if (r->apple_page_count == 0xffffffffU)
|
||||
{
|
||||
/*
|
||||
* Write raw page count from raster page header...
|
||||
*/
|
||||
|
||||
r->apple_page_count = r->header.cupsInteger[0];
|
||||
|
||||
appleheader[0] = 'A';
|
||||
appleheader[1] = 'S';
|
||||
appleheader[2] = 'T';
|
||||
appleheader[3] = 0;
|
||||
appleheader[4] = (unsigned char)(r->apple_page_count >> 24);
|
||||
appleheader[5] = (unsigned char)(r->apple_page_count >> 16);
|
||||
appleheader[6] = (unsigned char)(r->apple_page_count >> 8);
|
||||
appleheader[7] = (unsigned char)(r->apple_page_count);
|
||||
|
||||
if (cups_raster_io(r, appleheader, 8) != 8)
|
||||
return (0);
|
||||
}
|
||||
|
||||
memset(appleheader, 0, sizeof(appleheader));
|
||||
|
||||
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_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[12] = (unsigned char)(r->header.cupsWidth >> 24);
|
||||
appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16);
|
||||
appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8);
|
||||
appleheader[15] = (unsigned char)(r->header.cupsWidth);
|
||||
appleheader[16] = (unsigned char)(r->header.cupsHeight >> 24);
|
||||
appleheader[17] = (unsigned char)(r->header.cupsHeight >> 16);
|
||||
appleheader[18] = (unsigned char)(r->header.cupsHeight >> 8);
|
||||
appleheader[19] = (unsigned char)(r->header.cupsHeight);
|
||||
appleheader[20] = (unsigned char)(r->header.HWResolution[0] >> 24);
|
||||
appleheader[21] = (unsigned char)(r->header.HWResolution[0] >> 16);
|
||||
appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8);
|
||||
appleheader[23] = (unsigned char)(r->header.HWResolution[0]);
|
||||
|
||||
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
|
||||
}
|
||||
else
|
||||
return (cups_raster_io(r, (unsigned char *)&(r->header), sizeof(r->header))
|
||||
== sizeof(r->header));
|
||||
@@ -901,7 +1009,7 @@ cupsRasterWriteHeader(
|
||||
* 'cupsRasterWriteHeader2()' - Write a raster page header from a version 2
|
||||
* page header structure.
|
||||
*
|
||||
* The page header can be initialized using @link cupsRasterInterpretPPD@.
|
||||
* The page header can be initialized using @link cupsRasterInitPWGHeader@.
|
||||
*
|
||||
* @since CUPS 1.2/macOS 10.5@
|
||||
*/
|
||||
@@ -924,6 +1032,16 @@ cupsRasterWriteHeader2(
|
||||
if (!cups_raster_update(r))
|
||||
return (0);
|
||||
|
||||
if (r->mode == CUPS_RASTER_WRITE_APPLE)
|
||||
{
|
||||
r->rowheight = h->HWResolution[0] / h->HWResolution[1];
|
||||
|
||||
if (h->HWResolution[0] != (r->rowheight * h->HWResolution[1]))
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
r->rowheight = 1;
|
||||
|
||||
/*
|
||||
* Write the raster header...
|
||||
*/
|
||||
@@ -985,6 +1103,62 @@ cupsRasterWriteHeader2(
|
||||
|
||||
return (cups_raster_io(r, (unsigned char *)&fh, sizeof(fh)) == sizeof(fh));
|
||||
}
|
||||
else if (r->mode == CUPS_RASTER_WRITE_APPLE)
|
||||
{
|
||||
/*
|
||||
* Raw raster data is always network byte order with most of the page header
|
||||
* zeroed.
|
||||
*/
|
||||
|
||||
unsigned char appleheader[32]; /* Raw page header */
|
||||
unsigned height = r->header.cupsHeight * r->rowheight;
|
||||
/* Computed page height */
|
||||
|
||||
if (r->apple_page_count == 0xffffffffU)
|
||||
{
|
||||
/*
|
||||
* Write raw page count from raster page header...
|
||||
*/
|
||||
|
||||
r->apple_page_count = r->header.cupsInteger[0];
|
||||
|
||||
appleheader[0] = 'A';
|
||||
appleheader[1] = 'S';
|
||||
appleheader[2] = 'T';
|
||||
appleheader[3] = 0;
|
||||
appleheader[4] = (unsigned char)(r->apple_page_count >> 24);
|
||||
appleheader[5] = (unsigned char)(r->apple_page_count >> 16);
|
||||
appleheader[6] = (unsigned char)(r->apple_page_count >> 8);
|
||||
appleheader[7] = (unsigned char)(r->apple_page_count);
|
||||
|
||||
if (cups_raster_io(r, appleheader, 8) != 8)
|
||||
return (0);
|
||||
}
|
||||
|
||||
memset(appleheader, 0, sizeof(appleheader));
|
||||
|
||||
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_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[12] = (unsigned char)(r->header.cupsWidth >> 24);
|
||||
appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16);
|
||||
appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8);
|
||||
appleheader[15] = (unsigned char)(r->header.cupsWidth);
|
||||
appleheader[16] = (unsigned char)(height >> 24);
|
||||
appleheader[17] = (unsigned char)(height >> 16);
|
||||
appleheader[18] = (unsigned char)(height >> 8);
|
||||
appleheader[19] = (unsigned char)(height);
|
||||
appleheader[20] = (unsigned char)(r->header.HWResolution[0] >> 24);
|
||||
appleheader[21] = (unsigned char)(r->header.HWResolution[0] >> 16);
|
||||
appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8);
|
||||
appleheader[23] = (unsigned char)(r->header.HWResolution[0]);
|
||||
|
||||
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
|
||||
}
|
||||
else
|
||||
return (cups_raster_io(r, (unsigned char *)&(r->header), sizeof(r->header))
|
||||
== sizeof(r->header));
|
||||
@@ -1116,7 +1290,7 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
|
||||
* Increase the repeat count...
|
||||
*/
|
||||
|
||||
r->count ++;
|
||||
r->count += r->rowheight;
|
||||
r->pcurrent = r->pixels;
|
||||
|
||||
/*
|
||||
@@ -1132,7 +1306,7 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
|
||||
else
|
||||
return (len);
|
||||
}
|
||||
else if (r->count == 256)
|
||||
else if (r->count > (256 - r->rowheight))
|
||||
{
|
||||
if (cups_raster_write(r, r->pixels) <= 0)
|
||||
return (0);
|
||||
@@ -1161,7 +1335,7 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
|
||||
* Increase the repeat count...
|
||||
*/
|
||||
|
||||
r->count ++;
|
||||
r->count += r->rowheight;
|
||||
r->pcurrent = r->pixels;
|
||||
|
||||
/*
|
||||
@@ -1201,53 +1375,118 @@ cups_raster_read_header(
|
||||
|
||||
DEBUG_printf(("4cups_raster_read_header: r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
|
||||
|
||||
/*
|
||||
* Get the length of the raster header...
|
||||
*/
|
||||
|
||||
if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1)
|
||||
len = sizeof(cups_page_header_t);
|
||||
else
|
||||
len = sizeof(cups_page_header2_t);
|
||||
|
||||
DEBUG_printf(("4cups_raster_read_header: len=%d", (int)len));
|
||||
memset(&(r->header), 0, sizeof(r->header));
|
||||
|
||||
/*
|
||||
* Read the header...
|
||||
*/
|
||||
|
||||
memset(&(r->header), 0, sizeof(r->header));
|
||||
|
||||
if (cups_raster_read(r, (unsigned char *)&(r->header), len) < (ssize_t)len)
|
||||
switch (r->sync)
|
||||
{
|
||||
DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
|
||||
return (0);
|
||||
}
|
||||
default :
|
||||
/*
|
||||
* Get the length of the raster header...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Swap bytes as needed...
|
||||
*/
|
||||
if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1)
|
||||
len = sizeof(cups_page_header_t);
|
||||
else
|
||||
len = sizeof(cups_page_header2_t);
|
||||
|
||||
if (r->swapped)
|
||||
{
|
||||
unsigned *s, /* Current word */
|
||||
temp; /* Temporary copy */
|
||||
DEBUG_printf(("4cups_raster_read_header: len=%d", (int)len));
|
||||
|
||||
/*
|
||||
* Read it...
|
||||
*/
|
||||
|
||||
if (cups_raster_read(r, (unsigned char *)&(r->header), len) < (ssize_t)len)
|
||||
{
|
||||
DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Swap bytes as needed...
|
||||
*/
|
||||
|
||||
if (r->swapped)
|
||||
{
|
||||
unsigned *s, /* Current word */
|
||||
temp; /* Temporary copy */
|
||||
|
||||
|
||||
DEBUG_puts("4cups_raster_read_header: Swapping header bytes.");
|
||||
DEBUG_puts("4cups_raster_read_header: Swapping header bytes.");
|
||||
|
||||
for (len = 81, s = &(r->header.AdvanceDistance);
|
||||
len > 0;
|
||||
len --, s ++)
|
||||
{
|
||||
temp = *s;
|
||||
*s = ((temp & 0xff) << 24) |
|
||||
((temp & 0xff00) << 8) |
|
||||
((temp & 0xff0000) >> 8) |
|
||||
((temp & 0xff000000) >> 24);
|
||||
for (len = 81, s = &(r->header.AdvanceDistance);
|
||||
len > 0;
|
||||
len --, s ++)
|
||||
{
|
||||
temp = *s;
|
||||
*s = ((temp & 0xff) << 24) |
|
||||
((temp & 0xff00) << 8) |
|
||||
((temp & 0xff0000) >> 8) |
|
||||
((temp & 0xff000000) >> 24);
|
||||
|
||||
DEBUG_printf(("4cups_raster_read_header: %08x => %08x", temp, *s));
|
||||
}
|
||||
DEBUG_printf(("4cups_raster_read_header: %08x => %08x", temp, *s));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CUPS_RASTER_SYNCapple :
|
||||
case CUPS_RASTER_REVSYNCapple :
|
||||
{
|
||||
unsigned char appleheader[32]; /* Raw header */
|
||||
static const unsigned rawcspace[] =
|
||||
{
|
||||
CUPS_CSPACE_SW,
|
||||
CUPS_CSPACE_SRGB,
|
||||
CUPS_CSPACE_RGBW,
|
||||
CUPS_CSPACE_ADOBERGB,
|
||||
CUPS_CSPACE_W,
|
||||
CUPS_CSPACE_RGB,
|
||||
CUPS_CSPACE_CMYK
|
||||
};
|
||||
static const unsigned rawnumcolors[] =
|
||||
{
|
||||
1,
|
||||
3,
|
||||
4,
|
||||
3,
|
||||
1,
|
||||
3,
|
||||
4
|
||||
};
|
||||
|
||||
if (cups_raster_read(r, appleheader, sizeof(appleheader)) < (ssize_t)sizeof(appleheader))
|
||||
{
|
||||
DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
|
||||
return (0);
|
||||
}
|
||||
|
||||
strlcpy(r->header.MediaClass, "PwgRaster", sizeof(r->header.MediaClass));
|
||||
/* PwgRaster */
|
||||
r->header.cupsBitsPerPixel = appleheader[0];
|
||||
r->header.cupsColorSpace = appleheader[1] >= (sizeof(rawcspace) / sizeof(rawcspace[0])) ? CUPS_CSPACE_DEVICE1 : rawcspace[appleheader[1]];
|
||||
r->header.cupsNumColors = appleheader[1] >= (sizeof(rawnumcolors) / sizeof(rawnumcolors[0])) ? 1 : rawnumcolors[appleheader[1]];
|
||||
r->header.cupsBitsPerColor = r->header.cupsBitsPerPixel / r->header.cupsNumColors;
|
||||
r->header.cupsWidth = ((((((unsigned)appleheader[12] << 8) | (unsigned)appleheader[13]) << 8) | (unsigned)appleheader[14]) << 8) | (unsigned)appleheader[15];
|
||||
r->header.cupsHeight = ((((((unsigned)appleheader[16] << 8) | (unsigned)appleheader[17]) << 8) | (unsigned)appleheader[18]) << 8) | (unsigned)appleheader[19];
|
||||
r->header.cupsBytesPerLine = r->header.cupsWidth * r->header.cupsBitsPerPixel / 8;
|
||||
r->header.cupsColorOrder = CUPS_ORDER_CHUNKED;
|
||||
r->header.HWResolution[0] = r->header.HWResolution[1] = ((((((unsigned)appleheader[20] << 8) | (unsigned)appleheader[21]) << 8) | (unsigned)appleheader[22]) << 8) | (unsigned)appleheader[23];
|
||||
|
||||
if (r->header.HWResolution[0] > 0)
|
||||
{
|
||||
r->header.PageSize[0] = (unsigned)(r->header.cupsWidth * 72 / r->header.HWResolution[0]);
|
||||
r->header.PageSize[1] = (unsigned)(r->header.cupsHeight * 72 / r->header.HWResolution[1]);
|
||||
r->header.cupsPageSize[0] = (float)(r->header.cupsWidth * 72.0 / r->header.HWResolution[0]);
|
||||
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;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/*
|
||||
* Label printer filter for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 2007-2016 by Apple Inc.
|
||||
* Copyright 2001-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
@@ -438,7 +438,7 @@ StartPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
*/
|
||||
|
||||
void
|
||||
EndPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
EndPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
cups_page_header2_t *header) /* I - Page header */
|
||||
{
|
||||
int val; /* Option value */
|
||||
@@ -495,6 +495,19 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
|
||||
puts("^XA");
|
||||
|
||||
/*
|
||||
* Rotate 180 degrees so that the top of the label/page is at the
|
||||
* leading edge...
|
||||
*/
|
||||
|
||||
puts("^POI");
|
||||
|
||||
/*
|
||||
* Set print width...
|
||||
*/
|
||||
|
||||
printf("^PW%u\n", header->cupsWidth);
|
||||
|
||||
/*
|
||||
* Set print rate...
|
||||
*/
|
||||
@@ -605,8 +618,8 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
* End the label and eject...
|
||||
*/
|
||||
|
||||
puts("^IDR:CUPS.GRF^FS");
|
||||
puts("^XZ");
|
||||
puts("^IDR:CUPS.GRF^FS");
|
||||
|
||||
/*
|
||||
* Cut the label as needed...
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/*
|
||||
* CUPS raster to PWG raster format filter for CUPS.
|
||||
*
|
||||
* Copyright 2011, 2014-2016 Apple Inc.
|
||||
* Copyright 2011, 2014-2017 Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright law.
|
||||
* Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
@@ -31,6 +31,8 @@ int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line args */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
const char *final_content_type;
|
||||
/* FINAL_CONTENT_TYPE env var */
|
||||
int fd; /* Raster file */
|
||||
cups_raster_t *inras, /* Input raster stream */
|
||||
*outras; /* Output raster stream */
|
||||
@@ -48,7 +50,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
lineoffset; /* Offset into line */
|
||||
unsigned char white; /* White pixel */
|
||||
ppd_file_t *ppd; /* PPD file */
|
||||
ppd_attr_t *back; /* cupsBackSize attribute */
|
||||
ppd_attr_t *back; /* cupsBackSide attribute */
|
||||
_ppd_cache_t *cache; /* PPD cache */
|
||||
pwg_size_t *pwg_size; /* PWG media size */
|
||||
pwg_media_t *pwg_media; /* PWG media name */
|
||||
@@ -73,8 +75,11 @@ main(int argc, /* I - Number of command-line args */
|
||||
else
|
||||
fd = 0;
|
||||
|
||||
if ((final_content_type = getenv("FINAL_CONTENT_TYPE")) == NULL)
|
||||
final_content_type = "image/pwg-raster";
|
||||
|
||||
inras = cupsRasterOpen(fd, CUPS_RASTER_READ);
|
||||
outras = cupsRasterOpen(1, CUPS_RASTER_WRITE_PWG);
|
||||
outras = cupsRasterOpen(1, !strcmp(final_content_type, "image/pwg-raster") ? CUPS_RASTER_WRITE_PWG : CUPS_RASTER_WRITE_APPLE);
|
||||
|
||||
ppd = ppdOpenFile(getenv("PPD"));
|
||||
back = ppdFindAttr(ppd, "cupsBackSide", NULL);
|
||||
@@ -430,6 +435,9 @@ main(int argc, /* I - Number of command-line args */
|
||||
if (linesize < inheader.cupsBytesPerLine)
|
||||
linesize = inheader.cupsBytesPerLine;
|
||||
|
||||
if ((lineoffset + inheader.cupsBytesPerLine) > linesize)
|
||||
lineoffset = linesize - inheader.cupsBytesPerLine;
|
||||
|
||||
line = malloc(linesize);
|
||||
|
||||
memset(line, white, linesize);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
* missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
@@ -208,6 +208,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
errors += do_raster_tests(CUPS_RASTER_WRITE);
|
||||
errors += do_raster_tests(CUPS_RASTER_WRITE_COMPRESSED);
|
||||
errors += do_raster_tests(CUPS_RASTER_WRITE_PWG);
|
||||
errors += do_raster_tests(CUPS_RASTER_WRITE_APPLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -526,8 +527,9 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
|
||||
|
||||
printf("cupsRasterOpen(%s): ",
|
||||
mode == CUPS_RASTER_WRITE ? "CUPS_RASTER_WRITE" :
|
||||
mode == CUPS_RASTER_WRITE ? "CUPS_RASTER_WRITE_COMPRESSED" :
|
||||
"CUPS_RASTER_WRITE_PWG");
|
||||
mode == CUPS_RASTER_WRITE_COMPRESSED ? "CUPS_RASTER_WRITE_COMPRESSED" :
|
||||
mode == CUPS_RASTER_WRITE_PWG ? "CUPS_RASTER_WRITE_PWG" :
|
||||
"CUPS_RASTER_WRITE_APPLE");
|
||||
fflush(stdout);
|
||||
|
||||
if ((fp = fopen("test.raster", "wb")) == NULL)
|
||||
@@ -551,18 +553,24 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
|
||||
header.cupsWidth = 256;
|
||||
header.cupsHeight = 256;
|
||||
header.cupsBytesPerLine = 256;
|
||||
header.HWResolution[0] = 64;
|
||||
header.HWResolution[1] = 64;
|
||||
header.PageSize[0] = 288;
|
||||
header.PageSize[1] = 288;
|
||||
header.cupsPageSize[0] = 288.0f;
|
||||
header.cupsPageSize[1] = 288.0f;
|
||||
|
||||
if (page & 1)
|
||||
{
|
||||
header.cupsBytesPerLine *= 2;
|
||||
header.cupsBytesPerLine *= 4;
|
||||
header.cupsColorSpace = CUPS_CSPACE_CMYK;
|
||||
header.cupsColorOrder = CUPS_ORDER_CHUNKED;
|
||||
header.cupsNumColors = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
header.cupsColorSpace = CUPS_CSPACE_K;
|
||||
header.cupsColorOrder = CUPS_ORDER_BANDED;
|
||||
header.cupsColorSpace = CUPS_CSPACE_W;
|
||||
header.cupsColorOrder = CUPS_ORDER_CHUNKED;
|
||||
header.cupsNumColors = 1;
|
||||
}
|
||||
|
||||
@@ -677,8 +685,18 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
|
||||
expected.cupsWidth = 256;
|
||||
expected.cupsHeight = 256;
|
||||
expected.cupsBytesPerLine = 256;
|
||||
expected.HWResolution[0] = 64;
|
||||
expected.HWResolution[1] = 64;
|
||||
expected.PageSize[0] = 288;
|
||||
expected.PageSize[1] = 288;
|
||||
|
||||
if (mode == CUPS_RASTER_WRITE_PWG)
|
||||
if (mode != CUPS_RASTER_WRITE_PWG)
|
||||
{
|
||||
expected.cupsPageSize[0] = 288.0f;
|
||||
expected.cupsPageSize[1] = 288.0f;
|
||||
}
|
||||
|
||||
if (mode >= CUPS_RASTER_WRITE_PWG)
|
||||
{
|
||||
strlcpy(expected.MediaClass, "PwgRaster", sizeof(expected.MediaClass));
|
||||
expected.cupsInteger[7] = 0xffffff;
|
||||
@@ -686,15 +704,15 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
|
||||
|
||||
if (page & 1)
|
||||
{
|
||||
expected.cupsBytesPerLine *= 2;
|
||||
expected.cupsBytesPerLine *= 4;
|
||||
expected.cupsColorSpace = CUPS_CSPACE_CMYK;
|
||||
expected.cupsColorOrder = CUPS_ORDER_CHUNKED;
|
||||
expected.cupsNumColors = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
expected.cupsColorSpace = CUPS_CSPACE_K;
|
||||
expected.cupsColorOrder = CUPS_ORDER_BANDED;
|
||||
expected.cupsColorSpace = CUPS_CSPACE_W;
|
||||
expected.cupsColorOrder = CUPS_ORDER_CHUNKED;
|
||||
expected.cupsNumColors = 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user