ReactOS 0.4.16-dev-2613-g9533ad7
mkg3states.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 1991-1997 Sam Leffler
3 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and
6 * its documentation for any purpose is hereby granted without fee, provided
7 * that (i) the above copyright notices and this permission notice appear in
8 * all copies of the software and related documentation, and (ii) the names of
9 * Sam Leffler and Silicon Graphics may not be used in any advertising or
10 * publicity relating to the software without the specific, prior written
11 * permission of Sam Leffler and Silicon Graphics.
12 *
13 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16 *
17 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22 * OF THIS SOFTWARE.
23 */
24
25/* Initialize fax decoder tables
26 * Decoder support is derived, with permission, from the code
27 * in Frank Cringle's viewfax program;
28 * Copyright (C) 1990, 1995 Frank D. Cringle.
29 */
30#include "libport.h"
31#include "tif_config.h"
32
33#include <stdio.h>
34#include <stdlib.h>
35#include <string.h>
36
37#ifdef HAVE_UNISTD_H
38#include <unistd.h>
39#endif
40
41#include "tif_fax3.h"
42
43#define streq(a, b) (strcmp(a, b) == 0)
44
45/* NB: can't use names in tif_fax3.h 'cuz they are declared const */
49
50struct proto
51{
52 uint16_t code; /* right justified, lsb-first, zero filled */
53 uint16_t val; /* (pixel count)<<4 + code width */
54};
55
56static struct proto Pass[] = {{0x0008, 4}, {0, 0}};
57
58static struct proto Horiz[] = {{0x0004, 3}, {0, 0}};
59
60static struct proto V0[] = {{0x0001, 1}, {0, 0}};
61
62static struct proto VR[] = {{0x0006, (1 << 4) + 3},
63 {0x0030, (2 << 4) + 6},
64 {0x0060, (3 << 4) + 7},
65 {0, 0}};
66
67static struct proto VL[] = {{0x0002, (1 << 4) + 3},
68 {0x0010, (2 << 4) + 6},
69 {0x0020, (3 << 4) + 7},
70 {0, 0}};
71
72static struct proto Ext[] = {{0x0040, 7}, {0, 0}};
73
74static struct proto EOLV[] = {{0x0000, 7}, {0, 0}};
75
76static struct proto MakeUpW[] = {
77 {0x001b, 1029}, {0x0009, 2053}, {0x003a, 3078}, {0x0076, 4103},
78 {0x006c, 5128}, {0x00ec, 6152}, {0x0026, 7176}, {0x00a6, 8200},
79 {0x0016, 9224}, {0x00e6, 10248}, {0x0066, 11273}, {0x0166, 12297},
80 {0x0096, 13321}, {0x0196, 14345}, {0x0056, 15369}, {0x0156, 16393},
81 {0x00d6, 17417}, {0x01d6, 18441}, {0x0036, 19465}, {0x0136, 20489},
82 {0x00b6, 21513}, {0x01b6, 22537}, {0x0032, 23561}, {0x0132, 24585},
83 {0x00b2, 25609}, {0x0006, 26630}, {0x01b2, 27657}, {0, 0}};
84
85static struct proto MakeUpB[] = {
86 {0x03c0, 1034}, {0x0130, 2060}, {0x0930, 3084}, {0x0da0, 4108},
87 {0x0cc0, 5132}, {0x02c0, 6156}, {0x0ac0, 7180}, {0x06c0, 8205},
88 {0x16c0, 9229}, {0x0a40, 10253}, {0x1a40, 11277}, {0x0640, 12301},
89 {0x1640, 13325}, {0x09c0, 14349}, {0x19c0, 15373}, {0x05c0, 16397},
90 {0x15c0, 17421}, {0x0dc0, 18445}, {0x1dc0, 19469}, {0x0940, 20493},
91 {0x1940, 21517}, {0x0540, 22541}, {0x1540, 23565}, {0x0b40, 24589},
92 {0x1b40, 25613}, {0x04c0, 26637}, {0x14c0, 27661}, {0, 0}};
93
94static struct proto MakeUp[] = {
95 {0x0080, 28683}, {0x0180, 29707}, {0x0580, 30731}, {0x0480, 31756},
96 {0x0c80, 32780}, {0x0280, 33804}, {0x0a80, 34828}, {0x0680, 35852},
97 {0x0e80, 36876}, {0x0380, 37900}, {0x0b80, 38924}, {0x0780, 39948},
98 {0x0f80, 40972}, {0, 0}};
99
100static struct proto TermW[] = {
101 {0x00ac, 8}, {0x0038, 22}, {0x000e, 36}, {0x0001, 52}, {0x000d, 68},
102 {0x0003, 84}, {0x0007, 100}, {0x000f, 116}, {0x0019, 133}, {0x0005, 149},
103 {0x001c, 165}, {0x0002, 181}, {0x0004, 198}, {0x0030, 214}, {0x000b, 230},
104 {0x002b, 246}, {0x0015, 262}, {0x0035, 278}, {0x0072, 295}, {0x0018, 311},
105 {0x0008, 327}, {0x0074, 343}, {0x0060, 359}, {0x0010, 375}, {0x000a, 391},
106 {0x006a, 407}, {0x0064, 423}, {0x0012, 439}, {0x000c, 455}, {0x0040, 472},
107 {0x00c0, 488}, {0x0058, 504}, {0x00d8, 520}, {0x0048, 536}, {0x00c8, 552},
108 {0x0028, 568}, {0x00a8, 584}, {0x0068, 600}, {0x00e8, 616}, {0x0014, 632},
109 {0x0094, 648}, {0x0054, 664}, {0x00d4, 680}, {0x0034, 696}, {0x00b4, 712},
110 {0x0020, 728}, {0x00a0, 744}, {0x0050, 760}, {0x00d0, 776}, {0x004a, 792},
111 {0x00ca, 808}, {0x002a, 824}, {0x00aa, 840}, {0x0024, 856}, {0x00a4, 872},
112 {0x001a, 888}, {0x009a, 904}, {0x005a, 920}, {0x00da, 936}, {0x0052, 952},
113 {0x00d2, 968}, {0x004c, 984}, {0x00cc, 1000}, {0x002c, 1016}, {0, 0}};
114
115static struct proto TermB[] = {
116 {0x03b0, 10}, {0x0002, 19}, {0x0003, 34}, {0x0001, 50}, {0x0006, 67},
117 {0x000c, 84}, {0x0004, 100}, {0x0018, 117}, {0x0028, 134}, {0x0008, 150},
118 {0x0010, 167}, {0x0050, 183}, {0x0070, 199}, {0x0020, 216}, {0x00e0, 232},
119 {0x0030, 249}, {0x03a0, 266}, {0x0060, 282}, {0x0040, 298}, {0x0730, 315},
120 {0x00b0, 331}, {0x01b0, 347}, {0x0760, 363}, {0x00a0, 379}, {0x0740, 395},
121 {0x00c0, 411}, {0x0530, 428}, {0x0d30, 444}, {0x0330, 460}, {0x0b30, 476},
122 {0x0160, 492}, {0x0960, 508}, {0x0560, 524}, {0x0d60, 540}, {0x04b0, 556},
123 {0x0cb0, 572}, {0x02b0, 588}, {0x0ab0, 604}, {0x06b0, 620}, {0x0eb0, 636},
124 {0x0360, 652}, {0x0b60, 668}, {0x05b0, 684}, {0x0db0, 700}, {0x02a0, 716},
125 {0x0aa0, 732}, {0x06a0, 748}, {0x0ea0, 764}, {0x0260, 780}, {0x0a60, 796},
126 {0x04a0, 812}, {0x0ca0, 828}, {0x0240, 844}, {0x0ec0, 860}, {0x01c0, 876},
127 {0x0e40, 892}, {0x0140, 908}, {0x01a0, 924}, {0x09a0, 940}, {0x0d40, 956},
128 {0x0340, 972}, {0x05a0, 988}, {0x0660, 1004}, {0x0e60, 1020}, {0, 0}};
129
130static struct proto EOLH[] = {{0x0000, 11}, {0, 0}};
131
132static void FillTable(TIFFFaxTabEnt *T, int Size, struct proto *P, int State)
133{
134 int limit = 1 << Size;
135
136 while (P->val)
137 {
138 int width = P->val & 15;
139 int param = P->val >> 4;
140 int incr = 1 << width;
141 int code;
142 for (code = P->code; code < limit; code += incr)
143 {
144 TIFFFaxTabEnt *E = T + code;
145 E->State = State;
146 E->Width = width;
147 E->Param = param;
148 }
149 P++;
150 }
151}
152
153static char *storage_class = "";
154static char *const_class = "";
155static int packoutput = 1;
156static char *prebrace = "";
157static char *postbrace = "";
158
159void WriteTable(FILE *fd, const TIFFFaxTabEnt *T, int Size, const char *name)
160{
161 int i;
162 char *sep;
163
164 fprintf(fd, "%s %s TIFFFaxTabEnt %s[%d] = {", storage_class, const_class,
165 name, Size);
166 if (packoutput)
167 {
168 sep = "\n";
169 for (i = 0; i < Size; i++)
170 {
171 fprintf(fd, "%s%s%d,%d,%d%s", sep, prebrace, T->State, T->Width,
172 (int)T->Param, postbrace);
173 if (((i + 1) % 10) == 0)
174 sep = ",\n";
175 else
176 sep = ",";
177 T++;
178 }
179 }
180 else
181 {
182 sep = "\n ";
183 for (i = 0; i < Size; i++)
184 {
185 fprintf(fd, "%s%s%3d,%3d,%4d%s", sep, prebrace, T->State, T->Width,
186 (int)T->Param, postbrace);
187 if (((i + 1) % 6) == 0)
188 sep = ",\n ";
189 else
190 sep = ",";
191 T++;
192 }
193 }
194 fprintf(fd, "\n};\n");
195}
196
197/* initialize the huffman code tables */
198int main(int argc, char *argv[])
199{
200 FILE *fd;
201 char *outputfile;
202 int c;
203
204#if !HAVE_DECL_OPTARG
205 extern int optind;
206 extern char *optarg;
207#endif
208
209 while ((c = getopt(argc, argv, "c:s:bp")) != -1)
210 switch (c)
211 {
212 case 'c':
214 break;
215 case 's':
217 break;
218 case 'p':
219 packoutput = 0;
220 break;
221 case 'b':
222 prebrace = "{";
223 postbrace = "}";
224 break;
225 case '?':
227 "usage: %s [-c const] [-s storage] [-p] [-b] file\n",
228 argv[0]);
229 return (-1);
230 }
231 outputfile = optind < argc ? argv[optind] : "g3states.h";
232 fd = fopen(outputfile, "w");
233 if (fd == NULL)
234 {
235 fprintf(stderr, "%s: %s: Cannot create output file.\n", argv[0],
236 outputfile);
237 return (-2);
238 }
254
255 fprintf(fd, "/* WARNING, this file was automatically generated by the\n");
256 fprintf(fd, " mkg3states program */\n");
257 fprintf(fd, "#include <stdint.h>\n");
258 fprintf(fd, "#include \"tiff.h\"\n");
259 fprintf(fd, "#include \"tif_fax3.h\"\n");
260 WriteTable(fd, MainTable, 128, "TIFFFaxMainTable");
261 WriteTable(fd, WhiteTable, 4096, "TIFFFaxWhiteTable");
262 WriteTable(fd, BlackTable, 8192, "TIFFFaxBlackTable");
263 fprintf(fd, "/*\n"
264 " * Local Variables:\n"
265 " * mode: c\n"
266 " * c-basic-offset: 8\n"
267 " * fill-column: 78\n"
268 " * End:\n"
269 " */\n");
270 fclose(fd);
271 return (0);
272}
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition: getopt.c:55
const char * optarg
Definition: getopt.c:49
int optind
Definition: getopt.c:47
#define NULL
Definition: types.h:112
#define P(row, col)
static const WCHAR E[]
Definition: oid.c:1253
MonoAssembly int argc
Definition: metahost.c:107
int CDECL fclose(FILE *file)
Definition: file.c:3757
int WINAPIV fprintf(FILE *file, const char *format,...)
Definition: file.c:5549
FILE *CDECL fopen(const char *path, const char *mode)
Definition: file.c:4310
#define stderr
unsigned short uint16_t
Definition: stdint.h:35
int main()
Definition: test.c:6
GLint GLint GLsizei width
Definition: gl.h:1546
const GLubyte * c
Definition: glext.h:8905
GLint limit
Definition: glext.h:10326
GLfloat param
Definition: glext.h:5796
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define c
Definition: ke_i.h:80
static char * prebrace
Definition: mkg3states.c:156
static struct proto EOLV[]
Definition: mkg3states.c:74
static struct proto Pass[]
Definition: mkg3states.c:56
static struct proto V0[]
Definition: mkg3states.c:60
static struct proto Ext[]
Definition: mkg3states.c:72
static void FillTable(TIFFFaxTabEnt *T, int Size, struct proto *P, int State)
Definition: mkg3states.c:132
TIFFFaxTabEnt BlackTable[8192]
Definition: mkg3states.c:48
static struct proto MakeUp[]
Definition: mkg3states.c:94
static struct proto TermW[]
Definition: mkg3states.c:100
TIFFFaxTabEnt WhiteTable[4096]
Definition: mkg3states.c:47
static char * const_class
Definition: mkg3states.c:154
static struct proto MakeUpW[]
Definition: mkg3states.c:76
static struct proto TermB[]
Definition: mkg3states.c:115
TIFFFaxTabEnt MainTable[128]
Definition: mkg3states.c:46
static struct proto VR[]
Definition: mkg3states.c:62
static struct proto EOLH[]
Definition: mkg3states.c:130
void WriteTable(FILE *fd, const TIFFFaxTabEnt *T, int Size, const char *name)
Definition: mkg3states.c:159
static int packoutput
Definition: mkg3states.c:155
static char * postbrace
Definition: mkg3states.c:157
static struct proto VL[]
Definition: mkg3states.c:67
static struct proto Horiz[]
Definition: mkg3states.c:58
static struct proto MakeUpB[]
Definition: mkg3states.c:85
#define argv
Definition: mplay32.c:18
#define T(num)
Definition: thunks.c:311
static int fd
Definition: io.c:51
Definition: inflate.c:139
Definition: name.c:39
uint16_t code
Definition: mkg3states.c:52
uint16_t val
Definition: mkg3states.c:53
#define S_Ext
Definition: tif_fax3.h:76
#define S_MakeUpB
Definition: tif_fax3.h:80
#define S_TermW
Definition: tif_fax3.h:77
#define S_VR
Definition: tif_fax3.h:74
#define S_EOL
Definition: tif_fax3.h:82
#define S_MakeUp
Definition: tif_fax3.h:81
#define S_Pass
Definition: tif_fax3.h:71
#define S_VL
Definition: tif_fax3.h:75
#define S_Horiz
Definition: tif_fax3.h:72
#define S_TermB
Definition: tif_fax3.h:78
#define S_V0
Definition: tif_fax3.h:73
#define S_MakeUpW
Definition: tif_fax3.h:79
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
storage_class
Definition: widltypes.h:246