mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
414 lines
7.4 KiB
C
414 lines
7.4 KiB
C
|
#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
|