From 8a3b2ceb0ff632c47e1516d3ffef8572dc8eb974 Mon Sep 17 00:00:00 2001 From: rsc Date: Sat, 24 Apr 2004 17:05:43 +0000 Subject: Add scat. Temporary fix to rc r.e. note groups. --- src/cmd/scat/sky.h | 413 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 413 insertions(+) create mode 100644 src/cmd/scat/sky.h (limited to 'src/cmd/scat/sky.h') diff --git a/src/cmd/scat/sky.h b/src/cmd/scat/sky.h new file mode 100644 index 00000000..420a2a9a --- /dev/null +++ b/src/cmd/scat/sky.h @@ -0,0 +1,413 @@ +#define DIR "#9/sky" +/* + * This code reflects many years of changes. There remain residues + * of prior implementations. + * + * Keys: + * 32 bits long. High 26 bits are encoded as described below. + * Low 6 bits are types: + * + * Patch is ~ one square degree of sky. It points to an otherwise + * anonymous list of Catalog keys. The 0th key is special: + * it contains up to 4 constellation identifiers. + * Catalogs (SAO,NGC,M,...) are: + * 31.........8|76|543210 + * catalog # |BB|catalog name + * BB is two bits of brightness: + * 00 -inf < m <= 7 + * 01 7 < m <= 10 + * 10 10 < m <= 13 + * 11 13 < m < inf + * The BB field is a dreg, and correct only for SAO and NGC. + * IC(n) is just NGC(n+7840) + * Others should be self-explanatory. + * + * Records: + * + * Star is an SAOrec + * Galaxy, PlanetaryN, OpenCl, GlobularCl, DiffuseN, etc., are NGCrecs. + * Abell is an Abellrec + * The Namedxxx records hold a name and a catalog entry; they result from + * name lookups. + */ + +typedef enum +{ + Planet, + Patch, + SAO, + NGC, + M, + Constel_deprecated, + Nonstar_deprecated, + NamedSAO, + NamedNGC, + NamedAbell, + Abell, + /* NGC types */ + Galaxy, + PlanetaryN, + OpenCl, + GlobularCl, + DiffuseN, + NebularCl, + Asterism, + Knot, + Triple, + Double, + Single, + Uncertain, + Nonexistent, + Unknown, + PlateDefect, + /* internal */ + NGCN, + PatchC, + NONGC, +}Type; + +enum +{ + /* + * parameters for plate + */ + Pppo1 = 0, + Pppo2, + Pppo3, + Pppo4, + Pppo5, + Pppo6, + Pamdx1, + Pamdx2, + Pamdx3, + Pamdx4, + Pamdx5, + Pamdx6, + Pamdx7, + Pamdx8, + Pamdx9, + Pamdx10, + Pamdx11, + Pamdx12, + Pamdx13, + Pamdx14, + Pamdx15, + Pamdx16, + Pamdx17, + Pamdx18, + Pamdx19, + Pamdx20, + Pamdy1, + Pamdy2, + Pamdy3, + Pamdy4, + Pamdy5, + Pamdy6, + Pamdy7, + Pamdy8, + Pamdy9, + Pamdy10, + Pamdy11, + Pamdy12, + Pamdy13, + Pamdy14, + Pamdy15, + Pamdy16, + Pamdy17, + Pamdy18, + Pamdy19, + Pamdy20, + Ppltscale, + Pxpixelsz, + Pypixelsz, + Ppltra, + Ppltrah, + Ppltram, + Ppltras, + Ppltdec, + Ppltdecd, + Ppltdecm, + Ppltdecs, + Pnparam, +}; + +#define UNKNOWNMAG 32767 +#define NPlanet 20 + +typedef float Angle; /* in radians */ +typedef long DAngle; /* on disk: in units of milliarcsec */ +typedef short Mag; /* multiplied by 10 */ +typedef long Key; /* known to be 4 bytes, unfortunately */ + +/* + * All integers are stored in little-endian order. + */ +typedef struct NGCrec NGCrec; +struct NGCrec{ + DAngle ra; + DAngle dec; + DAngle dummy1; /* compatibility with old RNGC version */ + DAngle diam; + Mag mag; + short ngc; /* if >NNGC, IC number is ngc-NNGC */ + char diamlim; + char type; + char magtype; + char dummy2; + char desc[52]; /* 0-terminated Dreyer description */ +}; + +typedef struct Abellrec Abellrec; +struct Abellrec{ + DAngle ra; + DAngle dec; + DAngle glat; + DAngle glong; + Mag mag10; /* mag of 10th brightest cluster member; in same place as ngc.mag*/ + short abell; + DAngle rad; + short pop; + short dist; + char distgrp; + char richgrp; + char flag; + char pad; +}; + +typedef struct Planetrec Planetrec; +struct Planetrec{ + DAngle ra; + DAngle dec; + DAngle az; + DAngle alt; + DAngle semidiam; + double phase; + char name[16]; +}; + +/* + * Star names: 0,0==unused. Numbers are name[0]=1,..,99. + * Greek letters are alpha=101, etc. + * Constellations are alphabetical order by abbreviation, and=1, etc. + */ +typedef struct SAOrec SAOrec; +struct SAOrec{ + DAngle ra; + DAngle dec; + DAngle dra; + DAngle ddec; + Mag mag; /* visual */ + Mag mpg; + char spec[3]; + char code; + char compid[2]; + char hdcode; + char pad1; + long hd; /* HD catalog number */ + char name[3]; /* name[0]=alpha name[1]=2 name[3]=ori */ + char nname; /* number of prose names */ + /* 36 bytes to here */ +}; + +typedef struct Mindexrec Mindexrec; +struct Mindexrec{ /* code knows the bit patterns in here; this is a long */ + char m; /* M number */ + char dummy; + short ngc; +}; + +typedef struct Bayerec Bayerec; +struct Bayerec{ + long sao; + char name[3]; + char pad; +}; + +/* + * Internal form + */ + +typedef struct Namedrec Namedrec; +struct Namedrec{ + char name[36]; +}; + +typedef struct Namerec Namerec; +struct Namerec{ + long sao; + long ngc; + long abell; + char name[36]; /* null terminated */ +}; + +typedef struct Patchrec Patchrec; +struct Patchrec{ + int nkey; + long key[60]; +}; + +typedef struct Record Record; +struct Record{ + Type type; + long index; + union{ + SAOrec sao; + NGCrec ngc; + Abellrec abell; + Namedrec named; + Patchrec patch; + Planetrec planet; + /* PatchCrec is empty */ + }; +}; + +typedef struct Name Name; +struct Name{ + char *name; + int type; +}; + +typedef struct Plate Plate; +struct Plate +{ + char rgn[7]; + char disk; + Angle ra; + Angle dec; +}; + +typedef struct Header Header; +struct Header +{ + float param[Pnparam]; + int amdflag; + + float x; + float y; + float xi; + float eta; +}; +typedef long Pix; + +typedef struct Img Img; +struct Img +{ + int nx; + int ny; /* ny is the fast-varying dimension */ + Pix a[1]; +}; + +#define RAD(x) ((x)*PI_180) +#define DEG(x) ((x)/PI_180) +#define ARCSECONDS_PER_RADIAN (DEG(1)*3600) +#define MILLIARCSEC (1000*60*60) + +int nplate; +Plate plate[2000]; /* needs to go to 2000 when the north comes */ +double PI_180; +double TWOPI; +double LN2; +int debug; +struct +{ + float min; + float max; + float gamma; + float absgamma; + float mult1; + float mult2; + int neg; +} gam; + +typedef struct Picture Picture; +struct Picture +{ + int minx; + int miny; + int maxx; + int maxy; + char name[16]; + uchar *data; +}; + +#ifndef _DRAW_H_ +typedef struct Image Image; +#endif + +extern double PI_180; +extern double TWOPI; +extern char *progname; +extern char *desctab[][2]; +extern Name names[]; +extern Record *rec; +extern long nrec; +extern Planetrec *planet; +/* for bbox: */ +extern int folded; +extern DAngle ramin; +extern DAngle ramax; +extern DAngle decmin; +extern DAngle decmax; +extern Biobuf bout; + +extern void saoopen(void); +extern void ngcopen(void); +extern void patchopen(void); +extern void mopen(void); +extern void constelopen(void); +extern void lowercase(char*); +extern void lookup(char*, int); +extern int typetab(int); +extern char*ngcstring(int); +extern char*skip(int, char*); +extern void prrec(Record*); +extern int equal(char*, char*); +extern int parsename(char*); +extern void radec(int, int*, int*, int*); +extern int btag(short); +extern long patcha(Angle, Angle); +extern long patch(int, int, int); +extern char*hms(Angle); +extern char*dms(Angle); +extern char*ms(Angle); +extern char*hm(Angle); +extern char*dm(Angle); +extern char*deg(Angle); +extern char*hm5(Angle); +extern long dangle(Angle); +extern Angle angle(DAngle); +extern void prdesc(char*, char*(*)[2], short*); +extern double xsqrt(double); +extern Angle dist(Angle, Angle, Angle, Angle); +extern Header* getheader(char*); +extern char* getword(char*, char*); +extern void amdinv(Header*, Angle, Angle, float, float); +extern void ppoinv(Header*, Angle, Angle); +extern void xypos(Header*, Angle, Angle, float, float); +extern void traneqstd(Header*, Angle, Angle); +extern Angle getra(char*); +extern Angle getdec(char*); +extern void getplates(void); +extern Img* dssread(char*); +extern void hinv(Pix*, int, int); +extern int input_bit(Biobuf*); +extern int input_nbits(Biobuf*, int); +extern int input_huffman(Biobuf*); +extern int input_nybble(Biobuf*); +extern void qtree_decode(Biobuf*, Pix*, int, int, int, int); +extern void start_inputing_bits(void); +extern Picture* image(Angle, Angle, Angle, Angle); +extern char* dssmount(int); +extern int dogamma(Pix); +extern void displaypic(Picture*); +extern void displayimage(Image*); +extern void plot(char*); +extern void astro(char*, int); +extern char* alpha(char*, char*); +extern char* skipbl(char*); +extern void flatten(void); +extern int bbox(long, long, int); +extern int inbbox(DAngle, DAngle); +extern char* nameof(Record*); + +#define NINDEX 400 -- cgit v1.2.3