123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /* Copyright (C) 1998 Aladdin Enterprises. All rights reserved.
-
- This file is part of AFPL Ghostscript.
-
- AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author or
- distributor accepts any responsibility for the consequences of using it, or
- for whether it serves any particular purpose or works at all, unless he or
- she says so in writing. Refer to the Aladdin Free Public License (the
- "License") for full details.
-
- Every copy of AFPL Ghostscript must include a copy of the License, normally
- in a plain ASCII text file named PUBLIC. The License grants you the right
- to copy, modify and redistribute AFPL Ghostscript, but only under certain
- conditions described in the License. Among other things, the License
- requires that the copyright notice and this notice be preserved on all
- copies.
- */
- /*$Id: scfparam.c,v 1.2 2000/09/19 19:00:49 lpd Exp $ */
- /* CCITTFax filter parameter setting and reading */
- #include "std.h"
- #include "gserror.h"
- #include "gserrors.h"
- #include "gstypes.h"
- #include "gsmemory.h"
- #include "gsparam.h"
- #include "scommon.h"
- #include "scf.h" /* for cfe_max_width */
- #include "scfx.h"
- /* Define the CCITTFax parameters. */
- private const gs_param_item_t s_CF_param_items[] =
- {
- #define cfp(key, type, memb) { key, type, offset_of(stream_CF_state, memb) }
- cfp("Uncompressed", gs_param_type_bool, Uncompressed),
- cfp("K", gs_param_type_int, K),
- cfp("EndOfLine", gs_param_type_bool, EndOfLine),
- cfp("EncodedByteAlign", gs_param_type_bool, EncodedByteAlign),
- cfp("Columns", gs_param_type_int, Columns),
- cfp("Rows", gs_param_type_int, Rows),
- cfp("EndOfBlock", gs_param_type_bool, EndOfBlock),
- cfp("BlackIs1", gs_param_type_bool, BlackIs1),
- cfp("DamagedRowsBeforeError", gs_param_type_int, DamagedRowsBeforeError),
- cfp("FirstBitLowOrder", gs_param_type_bool, FirstBitLowOrder),
- cfp("DecodedByteAlign", gs_param_type_int, DecodedByteAlign),
- #undef cfp
- gs_param_item_end
- };
- /* Define a limit on the Rows parameter, close to max_int. */
- #define cf_max_height 32000
- /* Get non-default CCITTFax filter parameters. */
- stream_state_proc_get_params(s_CF_get_params, stream_CF_state); /* check */
- int
- s_CF_get_params(gs_param_list * plist, const stream_CF_state * ss, bool all)
- {
- stream_CF_state cfs_defaults;
- const stream_CF_state *defaults;
- if (all)
- defaults = 0;
- else {
- s_CF_set_defaults_inline(&cfs_defaults);
- defaults = &cfs_defaults;
- }
- return gs_param_write_items(plist, ss, defaults, s_CF_param_items);
- }
- /* Put CCITTFax filter parameters. */
- stream_state_proc_put_params(s_CF_put_params, stream_CF_state); /* check */
- int
- s_CF_put_params(gs_param_list * plist, stream_CF_state * ss)
- {
- stream_CF_state state;
- int code;
- state = *ss;
- code = gs_param_read_items(plist, (void *)&state, s_CF_param_items);
- if (code >= 0 &&
- (state.K < -cf_max_height || state.K > cf_max_height ||
- state.Columns < 0 || state.Columns > cfe_max_width ||
- state.Rows < 0 || state.Rows > cf_max_height ||
- state.DamagedRowsBeforeError < 0 ||
- state.DamagedRowsBeforeError > cf_max_height ||
- state.DecodedByteAlign < 1 || state.DecodedByteAlign > 16 ||
- (state.DecodedByteAlign & (state.DecodedByteAlign - 1)) != 0)
- )
- code = gs_note_error(gs_error_rangecheck);
- if (code >= 0)
- *ss = state;
- return code;
- }
|