xref: /plan9/sys/src/cmd/gs/src/ifunc.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
13ff48bf5SDavid du Colombier /* Copyright (C) 1997, 2000 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: ifunc.h,v 1.10 2002/10/31 18:34:25 alexcher Exp $ */
187dd7cddfSDavid du Colombier /* Internal interpreter interfaces for Functions */
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier #ifndef ifunc_INCLUDED
217dd7cddfSDavid du Colombier #  define ifunc_INCLUDED
227dd7cddfSDavid du Colombier 
237dd7cddfSDavid du Colombier #include "gsfunc.h"
247dd7cddfSDavid du Colombier 
257dd7cddfSDavid du Colombier /* Define build procedures for the various function types. */
267dd7cddfSDavid du Colombier #define build_function_proc(proc)\
27*593dc095SDavid du Colombier   int proc(i_ctx_t *i_ctx_p, const ref *op, const gs_function_params_t *params, int depth,\
28*593dc095SDavid du Colombier 	   gs_function_t **ppfn, gs_memory_t *mem)
297dd7cddfSDavid du Colombier typedef build_function_proc((*build_function_proc_t));
307dd7cddfSDavid du Colombier 
317dd7cddfSDavid du Colombier /* Define the table of build procedures, indexed by FunctionType. */
327dd7cddfSDavid du Colombier typedef struct build_function_type_s {
337dd7cddfSDavid du Colombier     int type;
347dd7cddfSDavid du Colombier     build_function_proc_t proc;
357dd7cddfSDavid du Colombier } build_function_type_t;
367dd7cddfSDavid du Colombier extern const build_function_type_t build_function_type_table[];
377dd7cddfSDavid du Colombier extern const uint build_function_type_table_count;
387dd7cddfSDavid du Colombier 
397dd7cddfSDavid du Colombier /* Build a function structure from a PostScript dictionary. */
40*593dc095SDavid du Colombier int fn_build_function(i_ctx_t *i_ctx_p, const ref * op, gs_function_t ** ppfn,
41*593dc095SDavid du Colombier 		      gs_memory_t *mem);
42*593dc095SDavid du Colombier int fn_build_sub_function(i_ctx_t *i_ctx_p, const ref * op, gs_function_t ** ppfn,
43*593dc095SDavid du Colombier 			  int depth, gs_memory_t *mem);
447dd7cddfSDavid du Colombier 
457dd7cddfSDavid du Colombier /*
467dd7cddfSDavid du Colombier  * Collect a heap-allocated array of floats.  If the key is missing, set
477dd7cddfSDavid du Colombier  * *pparray = 0 and return 0; otherwise set *pparray and return the number
487dd7cddfSDavid du Colombier  * of elements.  Note that 0-length arrays are acceptable, so if the value
497dd7cddfSDavid du Colombier  * returned is 0, the caller must check whether *pparray == 0.
507dd7cddfSDavid du Colombier  */
51*593dc095SDavid du Colombier int fn_build_float_array(const ref * op, const char *kstr, bool required,
527dd7cddfSDavid du Colombier 			 bool even, const float **pparray,
53*593dc095SDavid du Colombier 			 gs_memory_t *mem);
54*593dc095SDavid du Colombier 
55*593dc095SDavid du Colombier /*
56*593dc095SDavid du Colombier  * Similar to fn_build_float_array() except
57*593dc095SDavid du Colombier  * - numeric parameter is accepted and converted to 1-element array
58*593dc095SDavid du Colombier  * - number of elements is not checked for even/odd
59*593dc095SDavid du Colombier  */
60*593dc095SDavid du Colombier int
61*593dc095SDavid du Colombier fn_build_float_array_forced(const ref * op, const char *kstr, bool required,
62*593dc095SDavid du Colombier 		     const float **pparray, gs_memory_t *mem);
63*593dc095SDavid du Colombier 
647dd7cddfSDavid du Colombier 
653ff48bf5SDavid du Colombier /*
663ff48bf5SDavid du Colombier  * If a PostScript object is a Function procedure, return the function
673ff48bf5SDavid du Colombier  * object, otherwise return 0.
683ff48bf5SDavid du Colombier  */
69*593dc095SDavid du Colombier gs_function_t *ref_function(const ref *op);
703ff48bf5SDavid du Colombier 
713ff48bf5SDavid du Colombier /*
723ff48bf5SDavid du Colombier  * Operator to execute a function.
733ff48bf5SDavid du Colombier  * <in1> ... <function_struct> %execfunction <out1> ...
743ff48bf5SDavid du Colombier  */
75*593dc095SDavid du Colombier int zexecfunction(i_ctx_t *);
763ff48bf5SDavid du Colombier 
777dd7cddfSDavid du Colombier #endif /* ifunc_INCLUDED */
78