annotate 3rdparty/utils/viewgif/viewgif.h @ 1986:9c683723c7aa

Added (with limitations) support for running on a CoCo 1/2/3
author afra
date Mon, 30 Jan 2006 23:09:57 +0000
parents aaae5eac20e1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1188
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
1 /*
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
2 * viewgif.h -- common header fodder for viewgif
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
3 */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
4
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
5 #include <stdio.h>
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
6
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
7 #ifdef OSK
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
8 /* the OS-9/68000 C compiler knows about void now! */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
9 #define DIRECT
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
10 typedef unsigned char BYTE;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
11 #define arith(byte) (byte)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
12 #else
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
13 typedef int void;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
14 #define DIRECT direct
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
15 typedef char BYTE;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
16 #define arith(byte) ((byte) & 0xff)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
17 #endif
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
18
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
19 /* the canonical dodge for being sure of exactly one defining declaration */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
20
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
21 #ifndef EXTERN
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
22 #define EXTERN extern
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
23 #endif
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
24
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
25 typedef char bool; /* make up for a C deficiency */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
26
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
27 #define FALSE (1 == 0)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
28 #define TRUE (!FALSE)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
29
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
30 #define elements(array) (sizeof(array) / sizeof(array[0]))
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
31 #define maxnum(bits) ((1 << (bits)) - 1)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
32
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
33 /*
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
34 * typedef to let us look at RGB colors two ways--one, as an array of
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
35 * components; two, as a structure with nameable components.
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
36 */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
37
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
38 typedef union {
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
39 BYTE rgbarr[3];
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
40 struct {
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
41 BYTE rval, gval, bval;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
42 } rgbstr;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
43 } rgbcolor;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
44
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
45 #define red rgbstr.rval
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
46 #define green rgbstr.gval
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
47 #define blue rgbstr.bval
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
48
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
49 /* Values and variables related to the GIF spec */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
50
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
51 #define MGCLUT 256 /* maximum number of colors in a GIF picture */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
52 #define GBITS 8 /* # of bits in each component of a GIF color */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
53 #define MCODE 4096 /* number of 12-bit LZ codes */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
54
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
55 typedef struct cstruct {
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
56 struct cstruct *prefix;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
57 char first, suffix;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
58 } codetype;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
59
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
60 EXTERN bool coloruse[MGCLUT]; /* flags colors in use */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
61 EXTERN bool globuse[MGCLUT]; /* global usage flag */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
62 EXTERN rgbcolor globclut[MGCLUT]; /* RGB colors in image */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
63 EXTERN DIRECT int globbits; /* # bits for global color map */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
64 EXTERN DIRECT int globcolors; /* # possible colors */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
65 EXTERN DIRECT unsigned imagwid, imaghigh; /* image width/height in pixels */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
66
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
67 EXTERN codetype codetab[MCODE]; /* LZ code table */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
68 EXTERN BYTE codestk[MCODE]; /* buffer for decoded bytes */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
69 EXTERN DIRECT int codesize; /* LZ code size in bits */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
70 EXTERN DIRECT int codemask; /* LZ code mask */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
71 EXTERN DIRECT int clear; /* code for code table clear */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
72 EXTERN DIRECT int eoi; /* code for end of image */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
73 EXTERN DIRECT int datasize; /* ??? */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
74
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
75 /* Now for CoCo-related stuff... */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
76
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
77 #define MCCLUT 16 /* max size of Color Look-Up Table on CoCo 3 */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
78 #define CBITS 2 /* # of bits in each component of a CoCo 3 color */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
79 #define MROWS 192 /* max number of rows we can display */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
80 #define MCOLS 640 /* max number of cols we can display */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
81
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
82 #define MSCREENS 2 /* number of screens we may cycle among */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
83
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
84 /* type to hold the CoCo encoding of a color */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
85
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
86 typedef BYTE colorcode;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
87
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
88 /*
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
89 * type to represent the screens that will collectively contain the
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
90 * GIF image for display--we add one to the sizes of the arrays for
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
91 * palettes to try to speed up the search for color mappings (see
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
92 * setmap.c functions)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
93 */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
94
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
95 typedef struct {
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
96 int winpath; /* path # for window to display on */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
97 int clutsize; /* colors actually used */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
98 rgbcolor clut[MCCLUT]; /* their RGB values */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
99 colorcode pal[MCCLUT]; /* their CoCo encodings */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
100 } cocoscreen;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
101
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
102 typedef struct {
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
103 char addval;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
104 char clutval[MSCREENS];
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
105 } xlate;
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
106
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
107 EXTERN cocoscreen screen[MSCREENS]; /* screens to be cycled among */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
108 EXTERN int ilevtab[MROWS + 1]; /* interleave table */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
109 EXTERN int xtab[MCOLS]; /* ??? */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
110 EXTERN int linestor[MCOLS]; /* ??? */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
111 EXTERN xlate transtab[MGCLUT][5]; /* translations of GIF colors */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
112 EXTERN char randtab[16][16]; /* pseudo-random table */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
113
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
114 /* non-scan line values for ilevtab[] */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
115 #define ILEVMISS (-1) /* marks scan lines missed */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
116 /* in readimag() scaling loops */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
117 #define ILEVEND (-20) /* end marker guaranteed not */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
118 /* to match a valid scan line */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
119 /* or ILEVMISS! */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
120
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
121 /* conversion between GIF's RGB space and the CoCo's RGB space */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
122 #define SCALE1 (maxnum(GBITS) / maxnum(CBITS))
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
123 #define SCALE2 (SCALE1 / 2)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
124
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
125 /* limits */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
126
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
127 /* dithering factor */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
128 #define MAXDITH1 (SCALE1 / 2)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
129 #define MAXDITH2 (SCALE2 / 2)
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
130 #define BOGUSDITH 127 /* end marker for addval */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
131 /* color tolerance (represented by negative "dithering factor") */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
132 #define MAXTOL1 SCALE1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
133 #define MAXTOL2 SCALE2
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
134 /* magnification factor */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
135 #define MINMAG 1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
136 #define MAXMAG 64
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
137 /* brightness */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
138 #define MINBRITE 1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
139 #define MAXBRITE 16
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
140 /* starting coordinates (units: 64ths of the image size along the axis) */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
141 #define MINCOORD 1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
142 #define MAXCOORD 64
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
143
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
144 /* some symbolic names for the values of some twistable knobs */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
145
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
146 #define NO_INFO 0
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
147 #define SOME_INFO 1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
148 #define MUCH_INFO 2
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
149
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
150 #define NO_GRAY 0
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
151 #define AVG_GRAY 1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
152 #define MAX_GRAY 2
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
153 #define NTSC_GRAY 3
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
154
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
155 /* default values */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
156
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
157 #define D_INFO SOME_INFO
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
158 #define D_GRAY NO_GRAY
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
159 #define D_BRITE MAXBRITE
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
160 #define D_DITHER MAXDITH1
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
161 #define D_MAG MINMAG
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
162 #define D_HEIGHT MROWS
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
163
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
164 EXTERN DIRECT FILE *infile; /* file containing GIF image */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
165 EXTERN DIRECT long clutpos; /* position of global CLUT in file */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
166 EXTERN DIRECT int infomode; /* control amount of commentary */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
167 EXTERN DIRECT int graytype; /* what kind of gray scale, if any */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
168 EXTERN DIRECT int dfactor; /* dithering factor */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
169 EXTERN DIRECT int maxdith; /* upper bound on random dither */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
170 EXTERN DIRECT int magfact; /* magnification factor */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
171 EXTERN DIRECT int britefac; /* brightness factor */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
172 EXTERN DIRECT int startx, starty; /* coord to map to top left corner */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
173 EXTERN DIRECT bool realrand; /* use random #s instead of table */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
174 EXTERN DIRECT bool flicker; /* cycle among screens */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
175 EXTERN DIRECT bool dispon; /* display the image */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
176 EXTERN DIRECT bool zapmap; /* overwrite unused map colors */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
177 EXTERN DIRECT bool vefon; /* save the image in VEF fmt */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
178 EXTERN DIRECT bool aligned; /* align to pixels */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
179 EXTERN DIRECT bool newscrn; /* switch to new window for display */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
180 EXTERN DIRECT char *usefname; /* to name of color usage file */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
181 EXTERN DIRECT char *vefname; /* to name of VEF output file */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
182 EXTERN DIRECT int mywidth, myheight; /* width, height we will display */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
183 EXTERN DIRECT int actwin; /* path for buffered gfx data */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
184 EXTERN DIRECT int groupnum, bufnum; /* get/put buffer information */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
185 EXTERN DIRECT int framenum; /* frame number--whatever that is */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
186 EXTERN DIRECT char *gpbufptr; /* pointer to get/put buffer */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
187 EXTERN DIRECT int gmode; /* graphics mode we're using */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
188 EXTERN DIRECT int newuse; /* ??? */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
189 EXTERN DIRECT bool (*approx)(); /* to color approximation function */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
190 EXTERN DIRECT int minmod; /* modulus for minadd() */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
191 EXTERN DIRECT int low0, up0; /* default upper/lower limits for */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
192 /* approximation searches */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
193 extern bool approx1(); /* one-screen approximation */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
194 extern bool approx2(); /* two-screen approximation */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
195
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
196 /* miscellanea for support routines */
aaae5eac20e1 Provded by James Jones
boisy
parents:
diff changeset
197 #define fatal(s) error((s), 1) /* fatal error (no natural errno) */