xref: /plan9/sys/src/cmd/gs/src/sfilter.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1993, 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: sfilter.h,v 1.8 2002/02/21 22:24:54 giles Exp $ */
18 /* Definitions for simple Ghostscript streams */
19 /* Requires scommon.h; should require strimpl.h only if any templates */
20 /* are referenced, but some compilers always require strimpl.h. */
21 
22 #ifndef sfilter_INCLUDED
23 #  define sfilter_INCLUDED
24 
25 #include "gstypes.h"		/* for gs_[const_]string */
26 
27 /*
28  * Define the processing states of the simplest Ghostscript streams.
29  * We use abbreviations for the stream names so as not to exceed the
30  * 31-character limit that some compilers put on identifiers.
31  *
32  * The processing state of a stream has three logical sections:
33  * parameters set by the client before the stream is opened,
34  * values computed from the parameters at initialization time,
35  * and values that change dynamically.  Unless otherwise indicated,
36  * all structure members change dynamically.
37  */
38 
39 /* eexecEncode */
40 typedef struct stream_exE_state_s {
41     stream_state_common;
42     /* The following parameters are set by the client. */
43     ushort cstate;		/* encryption state */
44 } stream_exE_state;
45 
46 #define private_st_exE_state()	/* in sfilter1.c */\
47   gs_private_st_simple(st_exE_state, stream_exE_state, "eexecEncode state")
48 extern const stream_template s_exE_template;
49 
50 /* eexecDecode */
51 typedef struct stream_PFBD_state_s stream_PFBD_state;
52 typedef struct stream_exD_state_s {
53     stream_state_common;
54     /* The following parameters are set by the client. */
55     ushort cstate;		/* encryption state */
56     int binary;			/* 1=binary, 0=hex, -1=don't know yet */
57     int lenIV;			/* # of initial decoded bytes to skip */
58     stream_PFBD_state *pfb_state;	/* state of underlying */
59 				/* PFBDecode stream, if any */
60     /* The following change dynamically. */
61     int odd;			/* odd digit */
62     long record_left;		/* data left in binary record in .PFB file, */
63 				/* max_long if not reading a .PFB file */
64     long hex_left;		/* # of encoded chars to process as hex */
65 				/* if binary == 0 */
66     int skip;			/* # of decoded bytes to skip */
67 } stream_exD_state;
68 
69 #define private_st_exD_state()	/* in seexec.c */\
70   gs_private_st_ptrs1(st_exD_state, stream_exD_state, "eexecDecode state",\
71     exd_enum_ptrs, exd_reloc_ptrs, pfb_state)
72 extern const stream_template s_exD_template;
73 
74 /* PFBDecode */
75 /* The typedef for the state appears under eexecDecode above. */
76 /*typedef */ struct stream_PFBD_state_s {
77     stream_state_common;
78     /* The following parameters are set by the client. */
79     int binary_to_hex;
80     /* The following change dynamically. */
81     int record_type;
82     ulong record_left;		/* bytes left in current record */
83 } /*stream_PFBD_state */ ;
84 
85 #define private_st_PFBD_state()	/* in sfilter1.c */\
86   gs_private_st_simple(st_PFBD_state, stream_PFBD_state, "PFBDecode state")
87 extern const stream_template s_PFBD_template;
88 
89 /* SubFileDecode */
90 typedef struct stream_SFD_state_s {
91     stream_state_common;
92     /* The following parameters are set by the client. */
93     long count;			/* # of chars or EODs to scan over */
94     gs_const_string eod;
95     long skip_count;		/* # of initial chars or records to skip */
96     /* The following change dynamically. */
97     uint match;			/* # of matched chars not copied to output */
98     uint copy_count;		/* # of matched characters left to copy */
99     uint copy_ptr;		/* index of next character to copy */
100 } stream_SFD_state;
101 #define private_st_SFD_state()	/* in sfilter1.c */\
102   gs_private_st_const_strings1(st_SFD_state, stream_SFD_state,\
103     "SubFileDecode state", sfd_enum_ptrs, sfd_reloc_ptrs, eod)
104 extern const stream_template s_SFD_template;
105 
106 #endif /* sfilter_INCLUDED */
107