#define RAD(x) ((x)*PI_180) #define DEG(x) ((x)/PI_180) #define ARCSECONDS_PER_RADIAN (DEG(1)*3600) #define input_nybble(infile) input_nbits(infile,4) typedef float Angle; /* in radians */ 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, }; 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 Type; typedef struct Image Image; struct Image { int nx; int ny; /* ny is the fast-varying dimension */ Type a[1]; }; int nplate; Plate plate[2000]; /* needs to go to 2000 when the north comes */ double PI_180; double TWOPI; int debug; struct { float min; float max; float del; double gamma; int neg; } gam; char* hms(Angle); char* dms(Angle); double xsqrt(double); Angle dist(Angle, Angle, Angle, Angle); Header* getheader(char*); char* getword(char*, char*); void amdinv(Header*, Angle, Angle, float, float); void ppoinv(Header*, Angle, Angle); void xypos(Header*, Angle, Angle, float, float); void traneqstd(Header*, Angle, Angle); Angle getra(char*); Angle getdec(char*); void getplates(void); Image* dssread(char*); void hinv(Type*, int, int); int input_bit(Biobuf*); int input_nbits(Biobuf*, int); void qtree_decode(Biobuf*, Type*, int, int, int, int); void start_inputing_bits(void); Bitmap* image(Angle, Angle, Angle, Angle); int dogamma(int);