1 /* Copyright (C) 1992, 2000 Aladdin Enterprises. All rights reserved. 2 3 This software is provided AS-IS with no warranty, either express or 4 implied. 5 6 This software is distributed under license and may not be copied, 7 modified or distributed except as expressly authorized under the terms 8 of the license contained in the file LICENSE in this distribution. 9 10 For more information about licensing, please refer to 11 http://www.ghostscript.com/licensing/. For information on 12 commercial licensing, go to http://www.artifex.com/licensing/ or 13 contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14 San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15 */ 16 17 /* $Id: idparam.h,v 1.7 2004/08/04 19:36:12 stefan Exp $ */ 18 /* Interface to idparam.c */ 19 20 #ifndef idparam_INCLUDED 21 # define idparam_INCLUDED 22 23 #ifndef gs_matrix_DEFINED 24 # define gs_matrix_DEFINED 25 typedef struct gs_matrix_s gs_matrix; 26 #endif 27 28 #ifndef gs_uid_DEFINED 29 # define gs_uid_DEFINED 30 typedef struct gs_uid_s gs_uid; 31 #endif 32 33 /* 34 * Unless otherwise noted, all the following routines return 0 for 35 * a valid parameter, 1 for a defaulted parameter, or <0 on error. 36 * 37 * Note that all the dictionary parameter routines take a C string, 38 * not a t_name ref *. Even though this is slower, it means that 39 * the GC doesn't have to worry about finding statically declared 40 * name refs, and we have that many fewer static variables. 41 * 42 * All these routines allow pdict == NULL, which they treat the same as 43 * pdict referring to an empty dictionary. Routines with "null" in their 44 * name return 2 if the parameter is null, without setting *pvalue. 45 */ 46 int dict_bool_param(const ref * pdict, const char *kstr, 47 bool defaultval, bool * pvalue); 48 int dict_int_param(const ref * pdict, const char *kstr, 49 int minval, int maxval, int defaultval, int *pvalue); 50 int dict_int_null_param(const ref * pdict, const char *kstr, 51 int minval, int maxval, int defaultval, 52 int *pvalue); 53 int dict_uint_param(const ref * pdict, const char *kstr, 54 uint minval, uint maxval, uint defaultval, 55 uint * pvalue); 56 int dict_float_param(const ref * pdict, const char *kstr, 57 floatp defaultval, float *pvalue); 58 /* 59 * There are 3 variants of the procedures for getting array parameters. 60 * All return the element count if the parameter is present and of the 61 * correct size, 0 if the key is missing. 62 * _xxx_check_param return over_error if the array size > len, 63 * (under_error < 0 ? under_error : the element count) if the array 64 * size < len. 65 * _xxx_param return limitcheck if the array size > maxlen. 66 * Equivalent to _xxx_check_param(..., 0, limitcheck). 67 * _xxxs return rangecheck if the array size != len. 68 * Equivalent to _xxx_check_param(..., rangecheck, rangecheck). 69 * All can return other error codes (e.g., typecheck). 70 */ 71 int dict_int_array_check_param(const ref * pdict, const char *kstr, 72 uint len, int *ivec, 73 int under_error, int over_error); 74 int dict_int_array_param(const ref * pdict, const char *kstr, 75 uint maxlen, int *ivec); 76 int dict_ints_param(const ref * pdict, const char *kstr, 77 uint len, int *ivec); 78 /* 79 * For _float_array_param, if the parameter is missing and defaultvec is 80 * not NULL, copy (max)len elements from defaultvec to fvec and return 81 * (max)len. 82 */ 83 int dict_float_array_check_param(const gs_memory_t *mem, 84 const ref * pdict, const char *kstr, 85 uint len, float *fvec, 86 const float *defaultvec, 87 int under_error, int over_error); 88 int dict_float_array_param(const gs_memory_t *mem, 89 const ref * pdict, const char *kstr, 90 uint maxlen, float *fvec, 91 const float *defaultvec); 92 int dict_floats_param(const gs_memory_t *mem, 93 const ref * pdict, const char *kstr, 94 uint len, float *fvec, 95 const float *defaultvec); 96 97 /* 98 * For dict_proc_param, 99 * defaultval = false means substitute t__invalid; 100 * defaultval = true means substitute an empty procedure. 101 * In either case, return 1. 102 */ 103 int dict_proc_param(const ref * pdict, const char *kstr, ref * pproc, 104 bool defaultval); 105 int dict_matrix_param(const gs_memory_t *mem, 106 const ref * pdict, const char *kstr, 107 gs_matrix * pmat); 108 int dict_uid_param(const ref * pdict, gs_uid * puid, int defaultval, 109 gs_memory_t * mem, const i_ctx_t *i_ctx_p); 110 111 /* Check that a UID in a dictionary is equal to an existing, valid UID. */ 112 bool dict_check_uid_param(const ref * pdict, const gs_uid * puid); 113 114 #endif /* idparam_INCLUDED */ 115