aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/scat/sky.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/scat/sky.h')
-rw-r--r--src/cmd/scat/sky.h413
1 files changed, 413 insertions, 0 deletions
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