123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411 |
- #define DIR "/lib/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;
- };
- typedef struct Image Image;
- 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
|