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