1 /* Copyright (C) 2001-2006 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 
14 /* $Id: zpaint.c 9043 2008-08-28 22:48:19Z giles $ */
15 /* Painting operators */
16 #include "ghost.h"
17 #include "oper.h"
18 #include "gspaint.h"
19 #include "igstate.h"
20 
21 /* - fill - */
22 static int
zfill(i_ctx_t * i_ctx_p)23 zfill(i_ctx_t *i_ctx_p)
24 {
25     return gs_fill(igs);
26 }
27 
28 /* - eofill - */
29 static int
zeofill(i_ctx_t * i_ctx_p)30 zeofill(i_ctx_t *i_ctx_p)
31 {
32     return gs_eofill(igs);
33 }
34 
35 /* - stroke - */
36 static int
zstroke(i_ctx_t * i_ctx_p)37 zstroke(i_ctx_t *i_ctx_p)
38 {
39     return gs_stroke(igs);
40 }
41 
42 /* ------ Non-standard operators ------ */
43 
44 /* - .fillpage - */
45 static int
zfillpage(i_ctx_t * i_ctx_p)46 zfillpage(i_ctx_t *i_ctx_p)
47 {
48     return gs_fillpage(igs);
49 }
50 
51 /* <width> <height> <data> .imagepath - */
52 static int
zimagepath(i_ctx_t * i_ctx_p)53 zimagepath(i_ctx_t *i_ctx_p)
54 {
55     os_ptr op = osp;
56     int code;
57 
58     check_type(op[-2], t_integer);
59     check_type(op[-1], t_integer);
60     check_read_type(*op, t_string);
61     if (r_size(op) < ((op[-2].value.intval + 7) >> 3) * op[-1].value.intval)
62 	return_error(e_rangecheck);
63     code = gs_imagepath(igs,
64 			(int)op[-2].value.intval, (int)op[-1].value.intval,
65 			op->value.const_bytes);
66     if (code >= 0)
67 	pop(3);
68     return code;
69 }
70 
71 /* ------ Initialization procedure ------ */
72 
73 const op_def zpaint_op_defs[] =
74 {
75     {"0eofill", zeofill},
76     {"0fill", zfill},
77     {"0stroke", zstroke},
78 		/* Non-standard operators */
79     {"0.fillpage", zfillpage},
80     {"3.imagepath", zimagepath},
81     op_def_end(0)
82 };
83