1 347aa646 2009-04-30 rsc typedef s32int int32;
3 8a3b2ceb 2004-04-24 devnull #define DIR "#9/sky"
5 8a3b2ceb 2004-04-24 devnull * This code reflects many years of changes. There remain residues
6 8a3b2ceb 2004-04-24 devnull * of prior implementations.
9 8a3b2ceb 2004-04-24 devnull * 32 bits long. High 26 bits are encoded as described below.
10 8a3b2ceb 2004-04-24 devnull * Low 6 bits are types:
12 8a3b2ceb 2004-04-24 devnull * Patch is ~ one square degree of sky. It points to an otherwise
13 8a3b2ceb 2004-04-24 devnull * anonymous list of Catalog keys. The 0th key is special:
14 8a3b2ceb 2004-04-24 devnull * it contains up to 4 constellation identifiers.
15 8a3b2ceb 2004-04-24 devnull * Catalogs (SAO,NGC,M,...) are:
16 8a3b2ceb 2004-04-24 devnull * 31.........8|76|543210
17 8a3b2ceb 2004-04-24 devnull * catalog # |BB|catalog name
18 8a3b2ceb 2004-04-24 devnull * BB is two bits of brightness:
19 8a3b2ceb 2004-04-24 devnull * 00 -inf < m <= 7
20 8a3b2ceb 2004-04-24 devnull * 01 7 < m <= 10
21 8a3b2ceb 2004-04-24 devnull * 10 10 < m <= 13
22 8a3b2ceb 2004-04-24 devnull * 11 13 < m < inf
23 8a3b2ceb 2004-04-24 devnull * The BB field is a dreg, and correct only for SAO and NGC.
24 8a3b2ceb 2004-04-24 devnull * IC(n) is just NGC(n+7840)
25 8a3b2ceb 2004-04-24 devnull * Others should be self-explanatory.
27 8a3b2ceb 2004-04-24 devnull * Records:
29 8a3b2ceb 2004-04-24 devnull * Star is an SAOrec
30 8a3b2ceb 2004-04-24 devnull * Galaxy, PlanetaryN, OpenCl, GlobularCl, DiffuseN, etc., are NGCrecs.
31 8a3b2ceb 2004-04-24 devnull * Abell is an Abellrec
32 8a3b2ceb 2004-04-24 devnull * The Namedxxx records hold a name and a catalog entry; they result from
33 8a3b2ceb 2004-04-24 devnull * name lookups.
36 8a3b2ceb 2004-04-24 devnull typedef enum
43 8a3b2ceb 2004-04-24 devnull Constel_deprecated,
44 8a3b2ceb 2004-04-24 devnull Nonstar_deprecated,
45 8a3b2ceb 2004-04-24 devnull NamedSAO,
46 8a3b2ceb 2004-04-24 devnull NamedNGC,
47 8a3b2ceb 2004-04-24 devnull NamedAbell,
49 8a3b2ceb 2004-04-24 devnull /* NGC types */
51 8a3b2ceb 2004-04-24 devnull PlanetaryN,
53 8a3b2ceb 2004-04-24 devnull GlobularCl,
54 8a3b2ceb 2004-04-24 devnull DiffuseN,
55 8a3b2ceb 2004-04-24 devnull NebularCl,
56 8a3b2ceb 2004-04-24 devnull Asterism,
61 8a3b2ceb 2004-04-24 devnull Uncertain,
62 8a3b2ceb 2004-04-24 devnull Nonexistent,
64 8a3b2ceb 2004-04-24 devnull PlateDefect,
65 8a3b2ceb 2004-04-24 devnull /* internal */
74 8a3b2ceb 2004-04-24 devnull * parameters for plate
76 8a3b2ceb 2004-04-24 devnull Pppo1 = 0,
100 8a3b2ceb 2004-04-24 devnull Pamdx19,
101 8a3b2ceb 2004-04-24 devnull Pamdx20,
111 8a3b2ceb 2004-04-24 devnull Pamdy10,
112 8a3b2ceb 2004-04-24 devnull Pamdy11,
113 8a3b2ceb 2004-04-24 devnull Pamdy12,
114 8a3b2ceb 2004-04-24 devnull Pamdy13,
115 8a3b2ceb 2004-04-24 devnull Pamdy14,
116 8a3b2ceb 2004-04-24 devnull Pamdy15,
117 8a3b2ceb 2004-04-24 devnull Pamdy16,
118 8a3b2ceb 2004-04-24 devnull Pamdy17,
119 8a3b2ceb 2004-04-24 devnull Pamdy18,
120 8a3b2ceb 2004-04-24 devnull Pamdy19,
121 8a3b2ceb 2004-04-24 devnull Pamdy20,
122 8a3b2ceb 2004-04-24 devnull Ppltscale,
123 8a3b2ceb 2004-04-24 devnull Pxpixelsz,
124 8a3b2ceb 2004-04-24 devnull Pypixelsz,
126 8a3b2ceb 2004-04-24 devnull Ppltrah,
127 8a3b2ceb 2004-04-24 devnull Ppltram,
128 8a3b2ceb 2004-04-24 devnull Ppltras,
129 8a3b2ceb 2004-04-24 devnull Ppltdec,
130 8a3b2ceb 2004-04-24 devnull Ppltdecd,
131 8a3b2ceb 2004-04-24 devnull Ppltdecm,
132 8a3b2ceb 2004-04-24 devnull Ppltdecs,
136 8a3b2ceb 2004-04-24 devnull #define UNKNOWNMAG 32767
137 8a3b2ceb 2004-04-24 devnull #define NPlanet 20
139 8a3b2ceb 2004-04-24 devnull typedef float Angle; /* in radians */
140 347aa646 2009-04-30 rsc typedef int32 DAngle; /* on disk: in units of milliarcsec */
141 8a3b2ceb 2004-04-24 devnull typedef short Mag; /* multiplied by 10 */
142 347aa646 2009-04-30 rsc typedef int32 Key; /* known to be 4 bytes, unfortunately */
145 8a3b2ceb 2004-04-24 devnull * All integers are stored in little-endian order.
147 8a3b2ceb 2004-04-24 devnull typedef struct NGCrec NGCrec;
148 8a3b2ceb 2004-04-24 devnull struct NGCrec{
149 8a3b2ceb 2004-04-24 devnull DAngle ra;
150 8a3b2ceb 2004-04-24 devnull DAngle dec;
151 8a3b2ceb 2004-04-24 devnull DAngle dummy1; /* compatibility with old RNGC version */
152 8a3b2ceb 2004-04-24 devnull DAngle diam;
153 8a3b2ceb 2004-04-24 devnull Mag mag;
154 8a3b2ceb 2004-04-24 devnull short ngc; /* if >NNGC, IC number is ngc-NNGC */
155 8a3b2ceb 2004-04-24 devnull char diamlim;
156 8a3b2ceb 2004-04-24 devnull char type;
157 8a3b2ceb 2004-04-24 devnull char magtype;
158 8a3b2ceb 2004-04-24 devnull char dummy2;
159 8a3b2ceb 2004-04-24 devnull char desc[52]; /* 0-terminated Dreyer description */
162 8a3b2ceb 2004-04-24 devnull typedef struct Abellrec Abellrec;
163 8a3b2ceb 2004-04-24 devnull struct Abellrec{
164 8a3b2ceb 2004-04-24 devnull DAngle ra;
165 8a3b2ceb 2004-04-24 devnull DAngle dec;
166 8a3b2ceb 2004-04-24 devnull DAngle glat;
167 8a3b2ceb 2004-04-24 devnull DAngle glong;
168 8a3b2ceb 2004-04-24 devnull Mag mag10; /* mag of 10th brightest cluster member; in same place as ngc.mag*/
169 8a3b2ceb 2004-04-24 devnull short abell;
170 8a3b2ceb 2004-04-24 devnull DAngle rad;
171 8a3b2ceb 2004-04-24 devnull short pop;
172 8a3b2ceb 2004-04-24 devnull short dist;
173 8a3b2ceb 2004-04-24 devnull char distgrp;
174 8a3b2ceb 2004-04-24 devnull char richgrp;
175 8a3b2ceb 2004-04-24 devnull char flag;
176 8a3b2ceb 2004-04-24 devnull char pad;
179 8a3b2ceb 2004-04-24 devnull typedef struct Planetrec Planetrec;
180 8a3b2ceb 2004-04-24 devnull struct Planetrec{
181 8a3b2ceb 2004-04-24 devnull DAngle ra;
182 8a3b2ceb 2004-04-24 devnull DAngle dec;
183 8a3b2ceb 2004-04-24 devnull DAngle az;
184 8a3b2ceb 2004-04-24 devnull DAngle alt;
185 8a3b2ceb 2004-04-24 devnull DAngle semidiam;
186 8a3b2ceb 2004-04-24 devnull double phase;
187 8a3b2ceb 2004-04-24 devnull char name[16];
191 8a3b2ceb 2004-04-24 devnull * Star names: 0,0==unused. Numbers are name[0]=1,..,99.
192 8a3b2ceb 2004-04-24 devnull * Greek letters are alpha=101, etc.
193 8a3b2ceb 2004-04-24 devnull * Constellations are alphabetical order by abbreviation, and=1, etc.
195 8a3b2ceb 2004-04-24 devnull typedef struct SAOrec SAOrec;
196 8a3b2ceb 2004-04-24 devnull struct SAOrec{
197 8a3b2ceb 2004-04-24 devnull DAngle ra;
198 8a3b2ceb 2004-04-24 devnull DAngle dec;
199 8a3b2ceb 2004-04-24 devnull DAngle dra;
200 8a3b2ceb 2004-04-24 devnull DAngle ddec;
201 8a3b2ceb 2004-04-24 devnull Mag mag; /* visual */
202 8a3b2ceb 2004-04-24 devnull Mag mpg;
203 8a3b2ceb 2004-04-24 devnull char spec[3];
204 8a3b2ceb 2004-04-24 devnull char code;
205 8a3b2ceb 2004-04-24 devnull char compid[2];
206 8a3b2ceb 2004-04-24 devnull char hdcode;
207 8a3b2ceb 2004-04-24 devnull char pad1;
208 347aa646 2009-04-30 rsc int32 hd; /* HD catalog number */
209 8a3b2ceb 2004-04-24 devnull char name[3]; /* name[0]=alpha name[1]=2 name[3]=ori */
210 8a3b2ceb 2004-04-24 devnull char nname; /* number of prose names */
211 8a3b2ceb 2004-04-24 devnull /* 36 bytes to here */
214 8a3b2ceb 2004-04-24 devnull typedef struct Mindexrec Mindexrec;
215 8a3b2ceb 2004-04-24 devnull struct Mindexrec{ /* code knows the bit patterns in here; this is a long */
216 8a3b2ceb 2004-04-24 devnull char m; /* M number */
217 8a3b2ceb 2004-04-24 devnull char dummy;
218 8a3b2ceb 2004-04-24 devnull short ngc;
221 8a3b2ceb 2004-04-24 devnull typedef struct Bayerec Bayerec;
222 8a3b2ceb 2004-04-24 devnull struct Bayerec{
224 8a3b2ceb 2004-04-24 devnull char name[3];
225 8a3b2ceb 2004-04-24 devnull char pad;
229 8a3b2ceb 2004-04-24 devnull * Internal form
232 8a3b2ceb 2004-04-24 devnull typedef struct Namedrec Namedrec;
233 8a3b2ceb 2004-04-24 devnull struct Namedrec{
234 8a3b2ceb 2004-04-24 devnull char name[36];
237 8a3b2ceb 2004-04-24 devnull typedef struct Namerec Namerec;
238 8a3b2ceb 2004-04-24 devnull struct Namerec{
241 347aa646 2009-04-30 rsc int32 abell;
242 8a3b2ceb 2004-04-24 devnull char name[36]; /* null terminated */
245 8a3b2ceb 2004-04-24 devnull typedef struct Patchrec Patchrec;
246 8a3b2ceb 2004-04-24 devnull struct Patchrec{
247 8a3b2ceb 2004-04-24 devnull int nkey;
248 347aa646 2009-04-30 rsc int32 key[60];
251 8a3b2ceb 2004-04-24 devnull typedef struct Record Record;
252 8a3b2ceb 2004-04-24 devnull struct Record{
253 8a3b2ceb 2004-04-24 devnull Type type;
254 347aa646 2009-04-30 rsc int32 index;
256 8a3b2ceb 2004-04-24 devnull SAOrec sao;
257 8a3b2ceb 2004-04-24 devnull NGCrec ngc;
258 8a3b2ceb 2004-04-24 devnull Abellrec abell;
259 8a3b2ceb 2004-04-24 devnull Namedrec named;
260 8a3b2ceb 2004-04-24 devnull Patchrec patch;
261 8a3b2ceb 2004-04-24 devnull Planetrec planet;
262 8a3b2ceb 2004-04-24 devnull /* PatchCrec is empty */
266 8a3b2ceb 2004-04-24 devnull typedef struct Name Name;
267 8a3b2ceb 2004-04-24 devnull struct Name{
268 8a3b2ceb 2004-04-24 devnull char *name;
269 8a3b2ceb 2004-04-24 devnull int type;
272 8a3b2ceb 2004-04-24 devnull typedef struct Plate Plate;
273 8a3b2ceb 2004-04-24 devnull struct Plate
275 8a3b2ceb 2004-04-24 devnull char rgn[7];
276 8a3b2ceb 2004-04-24 devnull char disk;
277 8a3b2ceb 2004-04-24 devnull Angle ra;
278 8a3b2ceb 2004-04-24 devnull Angle dec;
281 8a3b2ceb 2004-04-24 devnull typedef struct Header Header;
282 8a3b2ceb 2004-04-24 devnull struct Header
284 8a3b2ceb 2004-04-24 devnull float param[Pnparam];
285 8a3b2ceb 2004-04-24 devnull int amdflag;
287 8a3b2ceb 2004-04-24 devnull float x;
288 8a3b2ceb 2004-04-24 devnull float y;
289 8a3b2ceb 2004-04-24 devnull float xi;
290 8a3b2ceb 2004-04-24 devnull float eta;
292 347aa646 2009-04-30 rsc typedef int32 Pix;
294 8a3b2ceb 2004-04-24 devnull typedef struct Img Img;
295 8a3b2ceb 2004-04-24 devnull struct Img
298 8a3b2ceb 2004-04-24 devnull int ny; /* ny is the fast-varying dimension */
299 8a3b2ceb 2004-04-24 devnull Pix a[1];
302 8a3b2ceb 2004-04-24 devnull #define RAD(x) ((x)*PI_180)
303 8a3b2ceb 2004-04-24 devnull #define DEG(x) ((x)/PI_180)
304 8a3b2ceb 2004-04-24 devnull #define ARCSECONDS_PER_RADIAN (DEG(1)*3600)
305 8a3b2ceb 2004-04-24 devnull #define MILLIARCSEC (1000*60*60)
307 8a3b2ceb 2004-04-24 devnull int nplate;
308 8a3b2ceb 2004-04-24 devnull Plate plate[2000]; /* needs to go to 2000 when the north comes */
309 8a3b2ceb 2004-04-24 devnull double PI_180;
310 8a3b2ceb 2004-04-24 devnull double TWOPI;
311 8a3b2ceb 2004-04-24 devnull double LN2;
312 8a3b2ceb 2004-04-24 devnull int debug;
315 8a3b2ceb 2004-04-24 devnull float min;
316 8a3b2ceb 2004-04-24 devnull float max;
317 8a3b2ceb 2004-04-24 devnull float gamma;
318 8a3b2ceb 2004-04-24 devnull float absgamma;
319 8a3b2ceb 2004-04-24 devnull float mult1;
320 8a3b2ceb 2004-04-24 devnull float mult2;
321 8a3b2ceb 2004-04-24 devnull int neg;
324 8a3b2ceb 2004-04-24 devnull typedef struct Picture Picture;
325 8a3b2ceb 2004-04-24 devnull struct Picture
327 8a3b2ceb 2004-04-24 devnull int minx;
328 8a3b2ceb 2004-04-24 devnull int miny;
329 8a3b2ceb 2004-04-24 devnull int maxx;
330 8a3b2ceb 2004-04-24 devnull int maxy;
331 8a3b2ceb 2004-04-24 devnull char name[16];
332 8a3b2ceb 2004-04-24 devnull uchar *data;
335 8a3b2ceb 2004-04-24 devnull #ifndef _DRAW_H_
336 8a3b2ceb 2004-04-24 devnull typedef struct Image Image;
339 8a3b2ceb 2004-04-24 devnull extern double PI_180;
340 8a3b2ceb 2004-04-24 devnull extern double TWOPI;
341 8a3b2ceb 2004-04-24 devnull extern char *progname;
342 8a3b2ceb 2004-04-24 devnull extern char *desctab[][2];
343 8a3b2ceb 2004-04-24 devnull extern Name names[];
344 8a3b2ceb 2004-04-24 devnull extern Record *rec;
345 347aa646 2009-04-30 rsc extern int32 nrec;
346 8a3b2ceb 2004-04-24 devnull extern Planetrec *planet;
347 8a3b2ceb 2004-04-24 devnull /* for bbox: */
348 8a3b2ceb 2004-04-24 devnull extern int folded;
349 8a3b2ceb 2004-04-24 devnull extern DAngle ramin;
350 8a3b2ceb 2004-04-24 devnull extern DAngle ramax;
351 8a3b2ceb 2004-04-24 devnull extern DAngle decmin;
352 8a3b2ceb 2004-04-24 devnull extern DAngle decmax;
353 8a3b2ceb 2004-04-24 devnull extern Biobuf bout;
355 8a3b2ceb 2004-04-24 devnull extern void saoopen(void);
356 8a3b2ceb 2004-04-24 devnull extern void ngcopen(void);
357 8a3b2ceb 2004-04-24 devnull extern void patchopen(void);
358 8a3b2ceb 2004-04-24 devnull extern void mopen(void);
359 8a3b2ceb 2004-04-24 devnull extern void constelopen(void);
360 8a3b2ceb 2004-04-24 devnull extern void lowercase(char*);
361 8a3b2ceb 2004-04-24 devnull extern void lookup(char*, int);
362 8a3b2ceb 2004-04-24 devnull extern int typetab(int);
363 8a3b2ceb 2004-04-24 devnull extern char*ngcstring(int);
364 8a3b2ceb 2004-04-24 devnull extern char*skip(int, char*);
365 8a3b2ceb 2004-04-24 devnull extern void prrec(Record*);
366 8a3b2ceb 2004-04-24 devnull extern int equal(char*, char*);
367 8a3b2ceb 2004-04-24 devnull extern int parsename(char*);
368 8a3b2ceb 2004-04-24 devnull extern void radec(int, int*, int*, int*);
369 8a3b2ceb 2004-04-24 devnull extern int btag(short);
370 347aa646 2009-04-30 rsc extern int32 patcha(Angle, Angle);
371 347aa646 2009-04-30 rsc extern int32 patch(int, int, int);
372 8a3b2ceb 2004-04-24 devnull extern char*hms(Angle);
373 8a3b2ceb 2004-04-24 devnull extern char*dms(Angle);
374 8a3b2ceb 2004-04-24 devnull extern char*ms(Angle);
375 8a3b2ceb 2004-04-24 devnull extern char*hm(Angle);
376 8a3b2ceb 2004-04-24 devnull extern char*dm(Angle);
377 8a3b2ceb 2004-04-24 devnull extern char*deg(Angle);
378 8a3b2ceb 2004-04-24 devnull extern char*hm5(Angle);
379 347aa646 2009-04-30 rsc extern int32 dangle(Angle);
380 8a3b2ceb 2004-04-24 devnull extern Angle angle(DAngle);
381 8a3b2ceb 2004-04-24 devnull extern void prdesc(char*, char*(*)[2], short*);
382 8a3b2ceb 2004-04-24 devnull extern double xsqrt(double);
383 8a3b2ceb 2004-04-24 devnull extern Angle dist(Angle, Angle, Angle, Angle);
384 8a3b2ceb 2004-04-24 devnull extern Header* getheader(char*);
385 8a3b2ceb 2004-04-24 devnull extern char* getword(char*, char*);
386 8a3b2ceb 2004-04-24 devnull extern void amdinv(Header*, Angle, Angle, float, float);
387 8a3b2ceb 2004-04-24 devnull extern void ppoinv(Header*, Angle, Angle);
388 8a3b2ceb 2004-04-24 devnull extern void xypos(Header*, Angle, Angle, float, float);
389 8a3b2ceb 2004-04-24 devnull extern void traneqstd(Header*, Angle, Angle);
390 8a3b2ceb 2004-04-24 devnull extern Angle getra(char*);
391 8a3b2ceb 2004-04-24 devnull extern Angle getdec(char*);
392 8a3b2ceb 2004-04-24 devnull extern void getplates(void);
393 8a3b2ceb 2004-04-24 devnull extern Img* dssread(char*);
394 8a3b2ceb 2004-04-24 devnull extern void hinv(Pix*, int, int);
395 8a3b2ceb 2004-04-24 devnull extern int input_bit(Biobuf*);
396 8a3b2ceb 2004-04-24 devnull extern int input_nbits(Biobuf*, int);
397 8a3b2ceb 2004-04-24 devnull extern int input_huffman(Biobuf*);
398 8a3b2ceb 2004-04-24 devnull extern int input_nybble(Biobuf*);
399 8a3b2ceb 2004-04-24 devnull extern void qtree_decode(Biobuf*, Pix*, int, int, int, int);
400 8a3b2ceb 2004-04-24 devnull extern void start_inputing_bits(void);
401 8a3b2ceb 2004-04-24 devnull extern Picture* image(Angle, Angle, Angle, Angle);
402 8a3b2ceb 2004-04-24 devnull extern char* dssmount(int);
403 8a3b2ceb 2004-04-24 devnull extern int dogamma(Pix);
404 8a3b2ceb 2004-04-24 devnull extern void displaypic(Picture*);
405 8a3b2ceb 2004-04-24 devnull extern void displayimage(Image*);
406 8a3b2ceb 2004-04-24 devnull extern void plot(char*);
407 8a3b2ceb 2004-04-24 devnull extern void astro(char*, int);
408 8a3b2ceb 2004-04-24 devnull extern char* alpha(char*, char*);
409 8a3b2ceb 2004-04-24 devnull extern char* skipbl(char*);
410 8a3b2ceb 2004-04-24 devnull extern void flatten(void);
411 347aa646 2009-04-30 rsc extern int bbox(int32, int32, int);
412 8a3b2ceb 2004-04-24 devnull extern int inbbox(DAngle, DAngle);
413 8a3b2ceb 2004-04-24 devnull extern char* nameof(Record*);
415 8a3b2ceb 2004-04-24 devnull #define NINDEX 400