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 */
143 * All integers are stored in little-endian order.
145 typedef struct NGCrec NGCrec;
149 DAngle dummy1; /* compatibility with old RNGC version */
152 short ngc; /* if >NNGC, IC number is ngc-NNGC */
157 char desc[52]; /* 0-terminated Dreyer description */
160 typedef struct Abellrec Abellrec;
166 Mag mag10; /* mag of 10th brightest cluster member; in same place as ngc.mag*/
177 typedef struct Planetrec Planetrec;
189 * Star names: 0,0==unused. Numbers are name[0]=1,..,99.
190 * Greek letters are alpha=101, etc.
191 * Constellations are alphabetical order by abbreviation, and=1, etc.
193 typedef struct SAOrec SAOrec;
199 Mag mag; /* visual */
206 long hd; /* HD catalog number */
207 char name[3]; /* name[0]=alpha name[1]=2 name[3]=ori */
208 char nname; /* number of prose names */
209 /* 36 bytes to here */
212 typedef struct Mindexrec Mindexrec;
213 struct Mindexrec{ /* code knows the bit patterns in here; this is a long */
214 char m; /* M number */
219 typedef struct Bayerec Bayerec;
230 typedef struct Namedrec Namedrec;
235 typedef struct Namerec Namerec;
240 char name[36]; /* null terminated */
243 typedef struct Patchrec Patchrec;
249 typedef struct Record Record;
260 /* PatchCrec is empty */
264 typedef struct Name Name;
270 typedef struct Plate Plate;
279 typedef struct Header Header;
282 float param[Pnparam];
292 typedef struct Img Img;
296 int ny; /* ny is the fast-varying dimension */
300 #define RAD(x) ((x)*PI_180)
301 #define DEG(x) ((x)/PI_180)
302 #define ARCSECONDS_PER_RADIAN (DEG(1)*3600)
303 #define MILLIARCSEC (1000*60*60)
306 Plate plate[2000]; /* needs to go to 2000 when the north comes */
322 typedef struct Picture Picture;
334 typedef struct Image Image;
337 extern double PI_180;
339 extern char *progname;
340 extern char *desctab[][2];
344 extern Planetrec *planet;
349 extern DAngle decmin;
350 extern DAngle decmax;
353 extern void saoopen(void);
354 extern void ngcopen(void);
355 extern void patchopen(void);
356 extern void mopen(void);
357 extern void constelopen(void);
358 extern void lowercase(char*);
359 extern void lookup(char*, int);
360 extern int typetab(int);
361 extern char*ngcstring(int);
362 extern char*skip(int, char*);
363 extern void prrec(Record*);
364 extern int equal(char*, char*);
365 extern int parsename(char*);
366 extern void radec(int, int*, int*, int*);
367 extern int btag(short);
368 extern long patcha(Angle, Angle);
369 extern long patch(int, int, int);
370 extern char*hms(Angle);
371 extern char*dms(Angle);
372 extern char*ms(Angle);
373 extern char*hm(Angle);
374 extern char*dm(Angle);
375 extern char*deg(Angle);
376 extern char*hm5(Angle);
377 extern long dangle(Angle);
378 extern Angle angle(DAngle);
379 extern void prdesc(char*, char*(*)[2], short*);
380 extern double xsqrt(double);
381 extern Angle dist(Angle, Angle, Angle, Angle);
382 extern Header* getheader(char*);
383 extern char* getword(char*, char*);
384 extern void amdinv(Header*, Angle, Angle, float, float);
385 extern void ppoinv(Header*, Angle, Angle);
386 extern void xypos(Header*, Angle, Angle, float, float);
387 extern void traneqstd(Header*, Angle, Angle);
388 extern Angle getra(char*);
389 extern Angle getdec(char*);
390 extern void getplates(void);
391 extern Img* dssread(char*);
392 extern void hinv(Pix*, int, int);
393 extern int input_bit(Biobuf*);
394 extern int input_nbits(Biobuf*, int);
395 extern int input_huffman(Biobuf*);
396 extern int input_nybble(Biobuf*);
397 extern void qtree_decode(Biobuf*, Pix*, int, int, int, int);
398 extern void start_inputing_bits(void);
399 extern Picture* image(Angle, Angle, Angle, Angle);
400 extern char* dssmount(int);
401 extern int dogamma(Pix);
402 extern void displaypic(Picture*);
403 extern void displayimage(Image*);
404 extern void plot(char*);
405 extern void astro(char*, int);
406 extern char* alpha(char*, char*);
407 extern char* skipbl(char*);
408 extern void flatten(void);
409 extern int bbox(long, long, int);
410 extern int inbbox(DAngle, DAngle);
411 extern char* nameof(Record*);