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