1 /* Copyright (C) 2001-2007 Artifex Software, Inc.
2 All Rights Reserved.
3
4 This software is provided AS-IS with no warranty, either express or
5 implied.
6
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.
12 */
13 /* $Id: zncdummy.c 9043 2008-08-28 22:48:19Z giles $ */
14 /* Sample implementation for client custom processing of color spaces. */
15
16 /*
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
19 * callback mechanism.
20 *
21 * See the comments at the start of src/gsncdummy.c for more information.
22 */
23
24 #include "math_.h"
25 #include "memory_.h"
26 #include "gx.h"
27 #include "gscdefs.h"
28 #include "gsnamecl.h"
29 #include "malloc_.h"
30 #include "ghost.h"
31 #include "oper.h"
32 #include "gsncdummy.h"
33
34 #if ENABLE_CUSTOM_COLOR_CALLBACK
35
36 extern pantone_list_t pantone_list[];
37 extern client_custom_color_procs_t demo_procs;
38
39 /*
40 * Demo version of the PANTONE call back parameter structure.
41 */
42 client_custom_color_params_t demo_callback = {
43 &demo_procs,
44 /*
45 * Use our 'list' of Pantone colors as an example data.
46 */
47 (void *)(&pantone_list)
48 };
49
50 #endif /* ENABLE_CUSTOM_COLOR_CALLBACK */
51
52 /*
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
58 * provided string.
59 *
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
63 */
64
65 /* <string> .pantonecallback <string> */
66 static int
zpantonecallback(i_ctx_t * i_ctx_p)67 zpantonecallback(i_ctx_t *i_ctx_p)
68 {
69 #if ENABLE_CUSTOM_COLOR_CALLBACK
70 os_ptr op = osp;
71 int val, idx, buf_pos = 3;
72 size_t iptr;
73 #define PTR_STRING_SIZE (2 * size_of(void *) + 3)
74
75 /* Verify that the string size is big enough for our output */
76 check_type(*op, t_string);
77 check_write(*op);
78 if (r_size(op) < PTR_STRING_SIZE)
79 return_error(e_rangecheck);
80
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
89 : 'a' - 10 + val);
90 }
91 r_size(op) = PTR_STRING_SIZE;
92 #endif /* ENABLE_CUSTOM_COLOR_CALLBACK */
93 return 0;
94 }
95
96 /* ------ Initialization procedure ------ */
97
98 const op_def pantone_op_defs[] =
99 {
100 {"1.pantonecallback", zpantonecallback},
101 op_def_end(0)
102 };
103