1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
/* ICE: call insn does not satisfy its constraints, MMIX port.
Origin: ghostscript-6.52, reduction from hp@bitrange.com. */
struct s0
{
void (*init_color)(void *, void *);
};
struct s1
{
void (*map_cmyk)(short, void *, void **, void *);
void (*map_rgb_alpha)(short, void *, void **, void *);
};
struct s5
{
long fill1; int fill2;
long fill3; unsigned int fill4, fill5;
};
struct s2
{
struct s5 x, y;
};
struct s3
{
long dev_color;
unsigned int key;
};
struct s4
{
unsigned char spp;
int alpha;
struct mc_
{
unsigned int values[14];
unsigned int mask, test;
int exact;
} mask_color;
void **pis;
struct s0 *pcs;
struct dd_
{
struct s2 row[2];
struct s2 pixel0;
} dda;
struct s3 clues[256];
};
extern struct s1 *get_cmap_procs (void **, void *);
int image_render_color (struct s4 *, unsigned char *, int, void *);
int
image_render_color (struct s4 *penum, unsigned char *buffer,
int data_x, void *dev)
{
struct s3 *clues = penum->clues;
void **pis = penum->pis;
struct s2 pnext;
struct s0 *pcs = penum->pcs;
struct s1 *cmap_procs = get_cmap_procs(pis, dev);
void (*map_4)(short, void *, void **, void *) =
(penum->alpha ? cmap_procs->map_rgb_alpha : cmap_procs->map_cmyk);
unsigned int mask = penum->mask_color.mask;
unsigned int test = penum->mask_color.test;
struct s3 *pic_next = &clues[1];
int spp = penum->spp;
unsigned char *psrc = buffer + data_x * spp;
unsigned char v[6];
pnext = penum->dda.pixel0;
__builtin_memset (&v, 0, sizeof(v));
(*(pcs)->init_color) (0, 0);
if (spp == 4)
{
v[0] = psrc[0];
v[1] = psrc[1];
if ((buffer[0] & mask) == test && penum->mask_color.exact)
pic_next->dev_color = 0;
(*map_4)(v[0], &pic_next->dev_color, pis, dev);
}
return 0;
}
|