"Fossies" - the Fresh Open Source Software Archive 
Member "xearth-1.1/xearth.h" (7 Nov 1999, 10513 Bytes) of package /linux/misc/old/xearth-1.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 /*
2 * xearth.h
3 * kirk johnson
4 * july 1993
5 *
6 * Copyright (C) 1989, 1990, 1993-1995, 1999 Kirk Lauritz Johnson
7 *
8 * Parts of the source code (as marked) are:
9 * Copyright (C) 1989, 1990, 1991 by Jim Frost
10 * Copyright (C) 1992 by Jamie Zawinski <jwz@lucid.com>
11 *
12 * Permission to use, copy, modify and freely distribute xearth for
13 * non-commercial and not-for-profit purposes is hereby granted
14 * without fee, provided that both the above copyright notice and this
15 * permission notice appear in all copies and in supporting
16 * documentation.
17 *
18 * Unisys Corporation holds worldwide patent rights on the Lempel Zev
19 * Welch (LZW) compression technique employed in the CompuServe GIF
20 * image file format as well as in other formats. Unisys has made it
21 * clear, however, that it does not require licensing or fees to be
22 * paid for freely distributed, non-commercial applications (such as
23 * xearth) that employ LZW/GIF technology. Those wishing further
24 * information about licensing the LZW patent should contact Unisys
25 * directly at (lzw_info@unisys.com) or by writing to
26 *
27 * Unisys Corporation
28 * Welch Licensing Department
29 * M/S-C1SW19
30 * P.O. Box 500
31 * Blue Bell, PA 19424
32 *
33 * The author makes no representations about the suitability of this
34 * software for any purpose. It is provided "as is" without express or
35 * implied warranty.
36 *
37 * THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
38 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
39 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT
40 * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
41 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
42 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
43 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
44 */
45
46 #ifndef _XEARTH_H_
47 #define _XEARTH_H_
48
49 #include <X11/Xos.h>
50 #include <stdio.h>
51 #include <stdlib.h>
52 #include <math.h>
53 #include <assert.h>
54 #include <time.h>
55 #include "port.h"
56 #include "extarr.h"
57 #include "kljcpyrt.h"
58
59 #define VersionString "1.1"
60 #define HomePageURL "http://www.cs.colorado.edu/~tuna/xearth/index.html"
61
62 /* if NO_RANDOM is defined, use lrand48() and srand48()
63 * instead of random() and srandom()
64 */
65 #ifdef NO_RANDOM
66 #define random() lrand48()
67 #define srandom(x) srand48((long) (x))
68 #endif /* NO_RANDOM */
69
70 #ifndef M_PI
71 #define M_PI 3.14159265358979323846
72 #endif /* !M_PI */
73
74 /* a particularly large number
75 */
76 #define BigNumber (1e6)
77
78 /* rotational period of the earth (seconds)
79 */
80 #define EarthPeriod (86400)
81
82 /* default width and height, if not otherwise specified
83 */
84 #define DefaultWdthHght (512)
85
86 /* default border width, if not otherwise specified
87 */
88 #define DefaultBorderWidth (1)
89
90 /* types of pixels
91 */
92 #define PixTypeSpace (0)
93 #define PixTypeLand (1)
94 #define PixTypeWater (2)
95 #define PixTypeStar (3)
96 #define PixTypeGridLand (4)
97 #define PixTypeGridWater (5)
98
99 /* types of dots
100 */
101 #define DotTypeStar (0)
102 #define DotTypeGrid (1)
103
104 /* types of viewing positions
105 */
106 #define ViewPosTypeFixed (0)
107 #define ViewPosTypeSun (1)
108 #define ViewPosTypeOrbit (2)
109 #define ViewPosTypeRandom (3)
110 #define ViewPosTypeMoon (4)
111
112 /* types of viewing rotations
113 */
114 #define ViewRotNorth (0)
115 #define ViewRotGalactic (1)
116
117 /* types of projections
118 */
119 #define ProjTypeOrthographic (0)
120 #define ProjTypeMercator (1)
121 #define ProjTypeCylindrical (2)
122
123 /* types of marker label alignment
124 */
125 #define MarkerAlignDefault (0)
126 #define MarkerAlignLeft (1)
127 #define MarkerAlignRight (2)
128 #define MarkerAlignAbove (3)
129 #define MarkerAlignBelow (4)
130
131 /* vector rotation
132 */
133 #define XFORM_ROTATE(p,vpi) \
134 do { \
135 double _p0_, _p1_, _p2_; \
136 double _c_, _s_, _t_; \
137 _p0_ = p[0]; \
138 _p1_ = p[1]; \
139 _p2_ = p[2]; \
140 _c_ = vpi.cos_lon; \
141 _s_ = vpi.sin_lon; \
142 _t_ = (_c_ * _p0_) - (_s_ * _p2_); \
143 _p2_ = (_s_ * _p0_) + (_c_ * _p2_); \
144 _p0_ = _t_; \
145 _c_ = vpi.cos_lat; \
146 _s_ = vpi.sin_lat; \
147 _t_ = (_c_ * _p1_) - (_s_ * _p2_); \
148 _p2_ = (_s_ * _p1_) + (_c_ * _p2_); \
149 _p1_ = _t_; \
150 _c_ = vpi.cos_rot; \
151 _s_ = vpi.sin_rot; \
152 _t_ = (_c_ * _p0_) - (_s_ * _p1_); \
153 _p1_ = (_s_ * _p0_) + (_c_ * _p1_); \
154 _p0_ = _t_; \
155 p[0] = _p0_; \
156 p[1] = _p1_; \
157 p[2] = _p2_; \
158 } while (0)
159
160 /* mercator projection (xyz->xy)
161 * [the argument to MERCATOR_Y() is thresholded against 0.9999999999
162 * and -0.9999999999 instead of 1.0 and -1.0 to avoid numerical
163 * difficulties that can arise when the argument of tan() gets close
164 * to PI/2; thanks to Bill Leonard for helping debug this.]
165 */
166 #define MERCATOR_X(x, z) (atan2((x), (z)))
167 #define MERCATOR_Y(y) (((y) >= 0.9999999999) ? (BigNumber) \
168 : (((y) <= -0.9999999999) ? (-BigNumber) \
169 : log(tan((asin(y)/2) + (M_PI/4)))))
170 #define INV_MERCATOR_Y(y) (sin(2 * (atan(exp(y)) - (M_PI/4))))
171
172 /* cylindrical projection (xyz->xy)
173 */
174 #define CYLINDRICAL_X(x, z) (atan2((x), (z)))
175 #define CYLINDRICAL_Y(y) (((y) >= 0.9999999999) ? (BigNumber) \
176 : (((y) <= -0.9999999999) ? (-BigNumber) \
177 : (tan(asin(y)))))
178 #define INV_CYLINDRICAL_Y(y) (sin(atan(y)))
179
180 /* xy->screen projections
181 */
182 #define XPROJECT(x) ((proj_info.proj_scale*(x))+proj_info.proj_xofs)
183 #define YPROJECT(y) (proj_info.proj_yofs-(proj_info.proj_scale*(y)))
184 #define INV_XPROJECT(x) (((x)-proj_info.proj_xofs)*proj_info.inv_proj_scale)
185 #define INV_YPROJECT(y) ((proj_info.proj_yofs-(y))*proj_info.inv_proj_scale)
186
187 #ifdef __alpha
188 /* on alpha systems, trade off space for more efficient access
189 */
190 typedef int s8or32;
191 typedef unsigned u8or32;
192 typedef int s16or32;
193 typedef unsigned u16or32;
194 #else
195 /* other systems can access 8- and 16-bit items efficiently
196 */
197 typedef char s8or32;
198 typedef unsigned char u8or32;
199 typedef short s16or32;
200 typedef unsigned short u16or32;
201 #endif
202
203 typedef struct
204 {
205 double cos_lat, sin_lat; /* cos/sin of view_lat */
206 double cos_lon, sin_lon; /* cos/sin of view_lon */
207 double cos_rot, sin_rot; /* cos/sin of view_rot */
208 } ViewPosInfo;
209
210 typedef struct
211 {
212 double proj_scale;
213 double proj_xofs;
214 double proj_yofs;
215 double inv_proj_scale;
216 } ProjInfo;
217
218 typedef struct
219 {
220 short y;
221 short lo_x;
222 short hi_x;
223 short val;
224 } ScanBit;
225
226 typedef struct
227 {
228 short x;
229 short y;
230 u_char type;
231 } ScanDot;
232
233 typedef struct
234 {
235 float lat;
236 float lon;
237 char *label;
238 int align;
239 } MarkerInfo;
240
241 /* dither.c */
242 extern int dither_ncolors;
243 extern u_char *dither_colormap;
244 extern void dither_setup _P((int));
245 extern void dither_row _P((u_char *, u16or32 *));
246 extern void dither_cleanup _P((void));
247 extern void mono_dither_setup _P((void));
248 extern void mono_dither_row _P((u_char *, u16or32 *));
249 extern void mono_dither_cleanup _P((void));
250
251 /* gif.c */
252 extern void gif_output _P((void));
253
254 /* mapdata.c */
255 extern short map_data[];
256
257 /* markers.c */
258 extern MarkerInfo *marker_info;
259 extern void load_marker_info _P((char *));
260 extern void show_marker_info _P((char *));
261
262 /* ppm.c */
263 extern void ppm_output _P((void));
264
265 /* render.c */
266 extern void render _P((int (*)(u_char *)));
267 extern void do_dots _P((void));
268
269 /* resources.c */
270 extern char *get_string_resource _P((const char *, const char *));
271 extern int get_boolean_resource _P((const char *, const char *));
272 extern int get_integer_resource _P((const char *, const char *));
273 extern double get_float_resource _P((const char *, const char *));
274 extern unsigned int get_pixel_resource _P((const char *, const char *));
275
276 /* scan.c */
277 extern ViewPosInfo view_pos_info;
278 extern ProjInfo proj_info;
279 extern ExtArr scanbits;
280 extern void scan_map _P((void));
281
282 /* sunpos.c */
283 extern void sun_position _P((time_t, double *, double *));
284 extern void moon_position _P((time_t, double *, double *));
285
286 /* x11.c */
287 extern void command_line_x _P((int, char *[]));
288 extern void x11_output _P((void));
289
290 /* xearth.c */
291 extern char *progname;
292 extern int proj_type;
293 extern double view_lon;
294 extern double view_lat;
295 extern double view_rot;
296 extern double view_mag;
297 extern int do_shade;
298 extern double sun_lon;
299 extern double sun_lat;
300 extern int wdth;
301 extern int hght;
302 extern int shift_x;
303 extern int shift_y;
304 extern int do_stars;
305 extern double star_freq;
306 extern int big_stars;
307 extern int do_grid;
308 extern int grid_big;
309 extern int grid_small;
310 extern int do_label;
311 extern int do_markers;
312 extern char *markerfile;
313 extern int wait_time;
314 extern double time_warp;
315 extern int fixed_time;
316 extern int day;
317 extern int night;
318 extern int terminator;
319 extern double xgamma;
320 extern int use_two_pixmaps;
321 extern int num_colors;
322 extern int do_fork;
323 extern int priority;
324 extern time_t current_time;
325
326 extern void compute_positions _P((void));
327 extern char **tokenize _P((char *, int *, const char **));
328 extern void decode_proj_type _P((char *));
329 extern void decode_rotation _P((char *));
330 extern void decode_viewing_pos _P((char *));
331 extern void decode_sun_pos _P((char *));
332 extern void decode_size _P((char *));
333 extern void decode_shift _P((char *));
334 extern void xearth_bzero _P((char *, unsigned));
335 extern void version_info _P((int));
336 extern void usage _P((const char *)) _noreturn;
337 extern void warning _P((const char *));
338 extern void fatal _P((const char *)) _noreturn;
339
340 #ifdef USE_EXACT_SQRT
341
342 #define SQRT(x) (((x) <= 0.0) ? (0.0) : (sqrt(x)))
343
344 #else
345
346 /*
347 * brute force approximation for sqrt() over [0,1]
348 * - two quadratic regions
349 * - returns zero for args less than zero
350 */
351 #define SQRT(x) \
352 (((x) > 0.13) \
353 ? ((((-0.3751672414*(x))+1.153263483)*(x))+0.2219037586) \
354 : (((x) > 0.0) \
355 ? ((((-9.637346154*(x))+3.56143)*(x))+0.065372935) \
356 : (0.0)))
357
358 #endif /* USE_EXACT_SQRT */
359
360 #ifndef isupper
361 # define isupper(c) ((c) >= 'A' && (c) <= 'Z')
362 #endif
363 #ifndef _tolower
364 # define _tolower(c) ((c) - 'A' + 'a')
365 #endif
366
367 #endif