13ff48bf5SDavid du Colombier /* Copyright (C) 1997, 1998, 1999, 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: gstrap.c,v 1.6 2002/06/16 05:48:55 lpd Exp $ */
187dd7cddfSDavid du Colombier /* Setting trapping parameters and zones */
197dd7cddfSDavid du Colombier #include "string_.h"
207dd7cddfSDavid du Colombier #include "gx.h"
217dd7cddfSDavid du Colombier #include "gserrors.h"
227dd7cddfSDavid du Colombier #include "gstrap.h"
237dd7cddfSDavid du Colombier #include "gsparamx.h"
247dd7cddfSDavid du Colombier
257dd7cddfSDavid du Colombier /* Put a float parameter. */
267dd7cddfSDavid du Colombier private bool
check_unit(float * pval)277dd7cddfSDavid du Colombier check_unit(float *pval)
287dd7cddfSDavid du Colombier {
297dd7cddfSDavid du Colombier return (*pval >= 0 && *pval <= 1);
307dd7cddfSDavid du Colombier }
317dd7cddfSDavid du Colombier private bool
check_positive(float * pval)327dd7cddfSDavid du Colombier check_positive(float *pval)
337dd7cddfSDavid du Colombier {
347dd7cddfSDavid du Colombier return (*pval > 0);
357dd7cddfSDavid du Colombier }
367dd7cddfSDavid du Colombier private int
trap_put_float_param(gs_param_list * plist,gs_param_name param_name,float * pval,bool (* check)(float * pval),int ecode)377dd7cddfSDavid du Colombier trap_put_float_param(gs_param_list * plist, gs_param_name param_name,
38*593dc095SDavid du Colombier float *pval, bool(*check) (float *pval), int ecode)
397dd7cddfSDavid du Colombier {
407dd7cddfSDavid du Colombier int code;
417dd7cddfSDavid du Colombier
427dd7cddfSDavid du Colombier switch (code = param_read_float(plist, param_name, pval)) {
437dd7cddfSDavid du Colombier case 0:
447dd7cddfSDavid du Colombier if ((*check) (pval))
457dd7cddfSDavid du Colombier return 0;
467dd7cddfSDavid du Colombier code = gs_error_rangecheck;
477dd7cddfSDavid du Colombier default:
487dd7cddfSDavid du Colombier ecode = code;
497dd7cddfSDavid du Colombier param_signal_error(plist, param_name, ecode);
507dd7cddfSDavid du Colombier break;
517dd7cddfSDavid du Colombier case 1:
527dd7cddfSDavid du Colombier break;
537dd7cddfSDavid du Colombier }
547dd7cddfSDavid du Colombier return ecode;
557dd7cddfSDavid du Colombier }
567dd7cddfSDavid du Colombier
577dd7cddfSDavid du Colombier /* settrapparams */
587dd7cddfSDavid du Colombier int
gs_settrapparams(gs_trap_params_t * pparams,gs_param_list * plist)597dd7cddfSDavid du Colombier gs_settrapparams(gs_trap_params_t * pparams, gs_param_list * plist)
607dd7cddfSDavid du Colombier {
617dd7cddfSDavid du Colombier gs_trap_params_t params;
627dd7cddfSDavid du Colombier int ecode = 0;
637dd7cddfSDavid du Colombier static const char *const trap_placement_names[] = {
647dd7cddfSDavid du Colombier gs_trap_placement_names, 0
657dd7cddfSDavid du Colombier };
667dd7cddfSDavid du Colombier
677dd7cddfSDavid du Colombier params = *pparams;
687dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "BlackColorLimit",
697dd7cddfSDavid du Colombier ¶ms.BlackColorLimit, check_unit, ecode);
707dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "BlackDensityLimit",
717dd7cddfSDavid du Colombier ¶ms.BlackDensityLimit,
727dd7cddfSDavid du Colombier check_positive, ecode);
737dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "BlackWidth",
747dd7cddfSDavid du Colombier ¶ms.BlackWidth, check_positive, ecode);
757dd7cddfSDavid du Colombier ecode = param_put_bool(plist, "Enabled",
767dd7cddfSDavid du Colombier ¶ms.Enabled, ecode);
777dd7cddfSDavid du Colombier ecode = param_put_bool(plist, "ImageInternalTrapping",
787dd7cddfSDavid du Colombier ¶ms.ImageInternalTrapping, ecode);
793ff48bf5SDavid du Colombier ecode = param_put_bool(plist, "ImagemaskTrapping",
803ff48bf5SDavid du Colombier ¶ms.ImagemaskTrapping, ecode);
817dd7cddfSDavid du Colombier ecode = param_put_int(plist, "ImageResolution",
827dd7cddfSDavid du Colombier ¶ms.ImageResolution, ecode);
837dd7cddfSDavid du Colombier if (params.ImageResolution <= 0)
847dd7cddfSDavid du Colombier param_signal_error(plist, "ImageResolution",
857dd7cddfSDavid du Colombier ecode = gs_error_rangecheck);
867dd7cddfSDavid du Colombier ecode = param_put_bool(plist, "ImageToObjectTrapping",
877dd7cddfSDavid du Colombier ¶ms.ImageToObjectTrapping, ecode);
887dd7cddfSDavid du Colombier {
897dd7cddfSDavid du Colombier int placement = params.ImageTrapPlacement;
907dd7cddfSDavid du Colombier
917dd7cddfSDavid du Colombier ecode = param_put_enum(plist, "ImageTrapPlacement",
927dd7cddfSDavid du Colombier &placement, trap_placement_names, ecode);
937dd7cddfSDavid du Colombier params.ImageTrapPlacement = placement;
947dd7cddfSDavid du Colombier }
957dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "SlidingTrapLimit",
967dd7cddfSDavid du Colombier ¶ms.SlidingTrapLimit, check_unit, ecode);
977dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "StepLimit",
987dd7cddfSDavid du Colombier ¶ms.StepLimit, check_unit, ecode);
997dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "TrapColorScaling",
1007dd7cddfSDavid du Colombier ¶ms.TrapColorScaling, check_unit, ecode);
1017dd7cddfSDavid du Colombier ecode = trap_put_float_param(plist, "TrapWidth",
1027dd7cddfSDavid du Colombier ¶ms.TrapWidth, check_positive, ecode);
1037dd7cddfSDavid du Colombier if (ecode < 0)
1047dd7cddfSDavid du Colombier return ecode;
1057dd7cddfSDavid du Colombier *pparams = params;
1067dd7cddfSDavid du Colombier return 0;
1077dd7cddfSDavid du Colombier }
108