1
/* Copyright (C) 2001-2007 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
13
/* $Id: zncdummy.c 8250 2007-09-25 13:31:24Z giles $ */
14
/* Sample implementation for client custom processing of color spaces. */
17
* This module has been created to demonstrate how to add support for the use
18
* of custom color handling to the Ghostscript graphics library via a custom color
21
* See the comments at the start of src/gsncdummy.c for more information.
32
#include "gsncdummy.h"
34
#if ENABLE_CUSTOM_COLOR_CALLBACK
36
extern pantone_list_t pantone_list[];
37
extern client_custom_color_procs_t demo_procs;
40
* Demo version of the PANTONE call back parameter structure.
42
client_custom_color_params_t demo_callback = {
45
* Use our 'list' of Pantone colors as an example data.
47
(void *)(&pantone_list)
50
#endif /* ENABLE_CUSTOM_COLOR_CALLBACK */
53
* This procedure is here to simplify debugging. Normally one would expect the
54
* custom color callback structure to be set up by a calling application.
55
* Since I do not have a calling application, I need a simple way to setup the
56
* callback parameter. The callback parameter is passed as a string value.
57
* This routine puts the address of our demo callback structure into the
60
* This routine allows the demo version of the PANTONE logic to be enabled
61
* by adding the following to the command line:
62
* -c "<< /CustomColorCallback 32 string .pantonecallback >> setsystemparams" -f
65
/* <string> .pantonecallback <string> */
67
zpantonecallback(i_ctx_t *i_ctx_p)
69
#if ENABLE_CUSTOM_COLOR_CALLBACK
71
int val, idx, buf_pos = 3;
73
#define PTR_STRING_SIZE (2 * size_of(void *) + 3)
75
/* Verify that the string size is big enough for our output */
76
check_type(*op, t_string);
78
if (r_size(op) < PTR_STRING_SIZE)
79
return_error(e_rangecheck);
81
/* Convert our call back parameter structure pointer into a string */
82
op->value.bytes[0] = '1';
83
op->value.bytes[1] = '6';
84
op->value.bytes[2] = '#';
85
iptr = (size_t)(&demo_callback);
86
for (idx = ((int)size_of(size_t)) * 8 - 4; idx >= 0; idx -= 4) {
87
val = (int)(iptr >> idx) & 0xf;
88
op->value.bytes[buf_pos++] = (byte)((val <= 9) ? '0' + val
91
r_size(op) = PTR_STRING_SIZE;
92
#endif /* ENABLE_CUSTOM_COLOR_CALLBACK */
96
/* ------ Initialization procedure ------ */
98
const op_def pantone_op_defs[] =
100
{"1.pantonecallback", zpantonecallback},