xref: /plan9/sys/src/cmd/gs/src/scfx.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999 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: scfx.h,v 1.6 2005/06/03 20:03:54 ray Exp $ */
18 /* CCITTFax filter state definition */
19 /* Requires strimpl.h */
20 
21 #ifndef scfx_INCLUDED
22 #  define scfx_INCLUDED
23 
24 #include "shc.h"
25 
26 /* Common state */
27 #define stream_CF_state_common\
28 	stream_hc_state_common;\
29 		/* The client sets the following before initialization. */\
30 	bool Uncompressed;\
31 	int K;\
32 	bool EndOfLine;\
33 	bool EncodedByteAlign;\
34 	int Columns;\
35 	int Rows;\
36 	bool EndOfBlock;\
37 	bool BlackIs1;\
38 	int DamagedRowsBeforeError;	/* (Decode only) */\
39 	/*bool FirstBitLowOrder;*/	/* in stream_hc_state_common */\
40 	int DecodedByteAlign;\
41 		/* The init procedure sets the following. */\
42 	uint raster;\
43 	byte *lbuf;		/* current scan line buffer */\
44 				/* (only if decoding or 2-D encoding) */\
45 	byte *lprev;		/* previous scan line buffer (only if 2-D) */\
46 		/* The following are updated dynamically. */\
47 	int k_left		/* number of next rows to encode in 2-D */\
48 				/* (only if K > 0) */
49 typedef struct stream_CF_state_s {
50     stream_CF_state_common;
51 } stream_CF_state;
52 
53 /* Define common default parameter setting. */
54 #define s_CF_set_defaults_inline(ss)\
55   ((ss)->Uncompressed = false,\
56    (ss)->K = 0,\
57    (ss)->EndOfLine = false,\
58    (ss)->EncodedByteAlign = false,\
59    (ss)->Columns = 1728,\
60    (ss)->Rows = 0,\
61    (ss)->EndOfBlock = true,\
62    (ss)->BlackIs1 = false,\
63 		/* Added by Adobe since the Red Book */\
64    (ss)->DamagedRowsBeforeError = 0, /* always set, for s_CF_get_params */\
65    (ss)->FirstBitLowOrder = false,\
66 		/* Added by us */\
67    (ss)->DecodedByteAlign = 1,\
68 	/* Clear pointers */\
69    (ss)->lbuf = 0, (ss)->lprev = 0)
70 
71 /* CCITTFaxEncode */
72 typedef struct stream_CFE_state_s {
73     stream_CF_state_common;
74     /* The init procedure sets the following. */
75     int max_code_bytes;		/* max # of bytes for an encoded line */
76     byte *lcode;		/* buffer for encoded output line */
77     /* The following change dynamically. */
78     int read_count;		/* # of bytes to copy into lbuf */
79     int write_count;		/* # of bytes to copy out of lcode */
80     int code_bytes;		/* # of occupied bytes in lcode */
81 } stream_CFE_state;
82 
83 #define private_st_CFE_state()	/* in scfe.c */\
84   gs_private_st_ptrs3(st_CFE_state, stream_CFE_state, "CCITTFaxEncode state",\
85     cfe_enum_ptrs, cfe_reloc_ptrs, lbuf, lprev, lcode)
86 #define s_CFE_set_defaults_inline(ss)\
87   (s_CF_set_defaults_inline(ss), (ss)->lcode = 0)
88 extern const stream_template s_CFE_template;
89 
90 /* CCITTFaxDecode */
91 typedef struct stream_CFD_state_s {
92     stream_CF_state_common;
93     int cbit;			/* bits left to fill in current decoded */
94     /* byte at lbuf[wpos] (0..7) */
95     int rows_left;		/* number of rows left */
96     int row;			/* current row, first is 0 */
97     int rpos;			/* rptr for copying lbuf to client */
98     int wpos;			/* rlimit/wptr for filling lbuf or */
99     /* copying to client */
100     int eol_count;		/* number of EOLs seen so far */
101     byte invert;		/* current value of 'white' */
102     /* for 2-D decoding */
103     int run_color;		/* -1 if processing white run, */
104     /* 0 if between runs but white is next, */
105     /* 1 if between runs and black is next, */
106     /* 2 if processing black run */
107     int damaged_rows;		/* # of consecutive damaged rows preceding */
108     /* the current row */
109     bool skipping_damage;	/* true if skipping a damaged row looking */
110     /* for EOL */
111     /* The following are not used yet. */
112     int uncomp_run;		/* non-0 iff we are in an uncompressed */
113     /* run straddling a scan line (-1 if white, */
114     /* 1 if black) */
115     int uncomp_left;		/* # of bits left in the run */
116     int uncomp_exit;		/* non-0 iff this is an exit run */
117     /* (-1 if next run white, 1 if black) */
118 } stream_CFD_state;
119 
120 #define private_st_CFD_state()	/* in scfd.c */\
121   gs_private_st_ptrs2(st_CFD_state, stream_CFD_state, "CCITTFaxDecode state",\
122     cfd_enum_ptrs, cfd_reloc_ptrs, lbuf, lprev)
123 #define s_CFD_set_defaults_inline(ss)\
124   s_CF_set_defaults_inline(ss)
125 extern const stream_template s_CFD_template;
126 
127 #endif /* scfx_INCLUDED */
128