4 * This code reflects many years of changes. There remain residues
5 * of prior implementations.
8 * 32 bits long. High 26 bits are encoded as described below.
9 * Low 6 bits are types:
11 * Patch is ~ one square degree of sky. It points to an otherwise
12 * anonymous list of Catalog keys. The 0th key is special:
13 * it contains up to 4 constellation identifiers.
14 * Catalogs (SAO,NGC,M,...) are:
15 * 31.........8|76|543210
16 * catalog # |BB|catalog name
17 * BB is two bits of brightness:
22 * The BB field is a dreg, and correct only for SAO and NGC.
23 * IC(n) is just NGC(n+7840)
24 * Others should be self-explanatory.
29 * Galaxy, PlanetaryN, OpenCl, GlobularCl, DiffuseN, etc., are NGCrecs.
30 * Abell is an Abellrec
31 * The Namedxxx records hold a name and a catalog entry; they result from
73 * parameters for plate
135 #define UNKNOWNMAG 32767
138 typedef float Angle; /* in radians */
139 typedef int32 DAngle; /* on disk: in units of milliarcsec */
140 typedef short Mag; /* multiplied by 10 */
141 typedef int32 Key; /* known to be 4 bytes, unfortunately */
144 * All integers are stored in little-endian order.
146 typedef struct NGCrec NGCrec;
150 DAngle dummy1; /* compatibility with old RNGC version */
153 short ngc; /* if >NNGC, IC number is ngc-NNGC */
158 char desc[52]; /* 0-terminated Dreyer description */
161 typedef struct Abellrec Abellrec;
167 Mag mag10; /* mag of 10th brightest cluster member; in same place as ngc.mag*/
178 typedef struct Planetrec Planetrec;
190 * Star names: 0,0==unused. Numbers are name[0]=1,..,99.
191 * Greek letters are alpha=101, etc.
192 * Constellations are alphabetical order by abbreviation, and=1, etc.
194 typedef struct SAOrec SAOrec;
200 Mag mag; /* visual */
207 int32 hd; /* HD catalog number */
208 char name[3]; /* name[0]=alpha name[1]=2 name[3]=ori */
209 char nname; /* number of prose names */
210 /* 36 bytes to here */
213 typedef struct Mindexrec Mindexrec;
214 struct Mindexrec{ /* code knows the bit patterns in here; this is a long */
215 char m; /* M number */
220 typedef struct Bayerec Bayerec;
231 typedef struct Namedrec Namedrec;
236 typedef struct Namerec Namerec;
241 char name[36]; /* null terminated */
244 typedef struct Patchrec Patchrec;
250 typedef struct Record Record;
261 /* PatchCrec is empty */
265 typedef struct Name Name;
271 typedef struct Plate Plate;
280 typedef struct Header Header;
283 float param[Pnparam];
293 typedef struct Img Img;
297 int ny; /* ny is the fast-varying dimension */
301 #define RAD(x) ((x)*PI_180)
302 #define DEG(x) ((x)/PI_180)
303 #define ARCSECONDS_PER_RADIAN (DEG(1)*3600)
304 #define MILLIARCSEC (1000*60*60)
307 Plate plate[2000]; /* needs to go to 2000 when the north comes */
323 typedef struct Picture Picture;
335 typedef struct Image Image;
338 extern double PI_180;
340 extern char *progname;
341 extern char *desctab[][2];
345 extern Planetrec *planet;
350 extern DAngle decmin;
351 extern DAngle decmax;
354 extern void saoopen(void);
355 extern void ngcopen(void);
356 extern void patchopen(void);
357 extern void mopen(void);
358 extern void constelopen(void);
359 extern void lowercase(char*);
360 extern void lookup(char*, int);
361 extern int typetab(int);
362 extern char*ngcstring(int);
363 extern char*skip(int, char*);
364 extern void prrec(Record*);
365 extern int equal(char*, char*);
366 extern int parsename(char*);
367 extern void radec(int, int*, int*, int*);
368 extern int btag(short);
369 extern int32 patcha(Angle, Angle);
370 extern int32 patch(int, int, int);
371 extern char*hms(Angle);
372 extern char*dms(Angle);
373 extern char*ms(Angle);
374 extern char*hm(Angle);
375 extern char*dm(Angle);
376 extern char*deg(Angle);
377 extern char*hm5(Angle);
378 extern int32 dangle(Angle);
379 extern Angle angle(DAngle);
380 extern void prdesc(char*, char*(*)[2], short*);
381 extern double xsqrt(double);
382 extern Angle dist(Angle, Angle, Angle, Angle);
383 extern Header* getheader(char*);
384 extern char* getword(char*, char*);
385 extern void amdinv(Header*, Angle, Angle, float, float);
386 extern void ppoinv(Header*, Angle, Angle);
387 extern void xypos(Header*, Angle, Angle, float, float);
388 extern void traneqstd(Header*, Angle, Angle);
389 extern Angle getra(char*);
390 extern Angle getdec(char*);
391 extern void getplates(void);
392 extern Img* dssread(char*);
393 extern void hinv(Pix*, int, int);
394 extern int input_bit(Biobuf*);
395 extern int input_nbits(Biobuf*, int);
396 extern int input_huffman(Biobuf*);
397 extern int input_nybble(Biobuf*);
398 extern void qtree_decode(Biobuf*, Pix*, int, int, int, int);
399 extern void start_inputing_bits(void);
400 extern Picture* image(Angle, Angle, Angle, Angle);
401 extern char* dssmount(int);
402 extern int dogamma(Pix);
403 extern void displaypic(Picture*);
404 extern void displayimage(Image*);
405 extern void plot(char*);
406 extern void astro(char*, int);
407 extern char* alpha(char*, char*);
408 extern char* skipbl(char*);
409 extern void flatten(void);
410 extern int bbox(int32, int32, int);
411 extern int inbbox(DAngle, DAngle);
412 extern char* nameof(Record*);