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