1*219b2ee8SDavid du Colombier #define RAD(x) ((x)*PI_180) 2*219b2ee8SDavid du Colombier #define DEG(x) ((x)/PI_180) 3*219b2ee8SDavid du Colombier #define ARCSECONDS_PER_RADIAN (DEG(1)*3600) 4*219b2ee8SDavid du Colombier #define input_nybble(infile) input_nbits(infile,4) 5*219b2ee8SDavid du Colombier 6*219b2ee8SDavid du Colombier typedef float Angle; /* in radians */ 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du Colombier enum 9*219b2ee8SDavid du Colombier { 10*219b2ee8SDavid du Colombier /* 11*219b2ee8SDavid du Colombier * parameters for plate 12*219b2ee8SDavid du Colombier */ 13*219b2ee8SDavid du Colombier Pppo1 = 0, 14*219b2ee8SDavid du Colombier Pppo2, 15*219b2ee8SDavid du Colombier Pppo3, 16*219b2ee8SDavid du Colombier Pppo4, 17*219b2ee8SDavid du Colombier Pppo5, 18*219b2ee8SDavid du Colombier Pppo6, 19*219b2ee8SDavid du Colombier Pamdx1, 20*219b2ee8SDavid du Colombier Pamdx2, 21*219b2ee8SDavid du Colombier Pamdx3, 22*219b2ee8SDavid du Colombier Pamdx4, 23*219b2ee8SDavid du Colombier Pamdx5, 24*219b2ee8SDavid du Colombier Pamdx6, 25*219b2ee8SDavid du Colombier Pamdx7, 26*219b2ee8SDavid du Colombier Pamdx8, 27*219b2ee8SDavid du Colombier Pamdx9, 28*219b2ee8SDavid du Colombier Pamdx10, 29*219b2ee8SDavid du Colombier Pamdx11, 30*219b2ee8SDavid du Colombier Pamdx12, 31*219b2ee8SDavid du Colombier Pamdx13, 32*219b2ee8SDavid du Colombier Pamdx14, 33*219b2ee8SDavid du Colombier Pamdx15, 34*219b2ee8SDavid du Colombier Pamdx16, 35*219b2ee8SDavid du Colombier Pamdx17, 36*219b2ee8SDavid du Colombier Pamdx18, 37*219b2ee8SDavid du Colombier Pamdx19, 38*219b2ee8SDavid du Colombier Pamdx20, 39*219b2ee8SDavid du Colombier Pamdy1, 40*219b2ee8SDavid du Colombier Pamdy2, 41*219b2ee8SDavid du Colombier Pamdy3, 42*219b2ee8SDavid du Colombier Pamdy4, 43*219b2ee8SDavid du Colombier Pamdy5, 44*219b2ee8SDavid du Colombier Pamdy6, 45*219b2ee8SDavid du Colombier Pamdy7, 46*219b2ee8SDavid du Colombier Pamdy8, 47*219b2ee8SDavid du Colombier Pamdy9, 48*219b2ee8SDavid du Colombier Pamdy10, 49*219b2ee8SDavid du Colombier Pamdy11, 50*219b2ee8SDavid du Colombier Pamdy12, 51*219b2ee8SDavid du Colombier Pamdy13, 52*219b2ee8SDavid du Colombier Pamdy14, 53*219b2ee8SDavid du Colombier Pamdy15, 54*219b2ee8SDavid du Colombier Pamdy16, 55*219b2ee8SDavid du Colombier Pamdy17, 56*219b2ee8SDavid du Colombier Pamdy18, 57*219b2ee8SDavid du Colombier Pamdy19, 58*219b2ee8SDavid du Colombier Pamdy20, 59*219b2ee8SDavid du Colombier Ppltscale, 60*219b2ee8SDavid du Colombier Pxpixelsz, 61*219b2ee8SDavid du Colombier Pypixelsz, 62*219b2ee8SDavid du Colombier Ppltra, 63*219b2ee8SDavid du Colombier Ppltrah, 64*219b2ee8SDavid du Colombier Ppltram, 65*219b2ee8SDavid du Colombier Ppltras, 66*219b2ee8SDavid du Colombier Ppltdec, 67*219b2ee8SDavid du Colombier Ppltdecd, 68*219b2ee8SDavid du Colombier Ppltdecm, 69*219b2ee8SDavid du Colombier Ppltdecs, 70*219b2ee8SDavid du Colombier Pnparam, 71*219b2ee8SDavid du Colombier }; 72*219b2ee8SDavid du Colombier 73*219b2ee8SDavid du Colombier typedef struct Plate Plate; 74*219b2ee8SDavid du Colombier struct Plate 75*219b2ee8SDavid du Colombier { 76*219b2ee8SDavid du Colombier char rgn[7]; 77*219b2ee8SDavid du Colombier char disk; 78*219b2ee8SDavid du Colombier Angle ra; 79*219b2ee8SDavid du Colombier Angle dec; 80*219b2ee8SDavid du Colombier }; 81*219b2ee8SDavid du Colombier 82*219b2ee8SDavid du Colombier typedef struct Header Header; 83*219b2ee8SDavid du Colombier struct Header 84*219b2ee8SDavid du Colombier { 85*219b2ee8SDavid du Colombier float param[Pnparam]; 86*219b2ee8SDavid du Colombier int amdflag; 87*219b2ee8SDavid du Colombier 88*219b2ee8SDavid du Colombier float x; 89*219b2ee8SDavid du Colombier float y; 90*219b2ee8SDavid du Colombier float xi; 91*219b2ee8SDavid du Colombier float eta; 92*219b2ee8SDavid du Colombier }; 93*219b2ee8SDavid du Colombier typedef long Type; 94*219b2ee8SDavid du Colombier 95*219b2ee8SDavid du Colombier typedef struct Image Image; 96*219b2ee8SDavid du Colombier struct Image 97*219b2ee8SDavid du Colombier { 98*219b2ee8SDavid du Colombier int nx; 99*219b2ee8SDavid du Colombier int ny; /* ny is the fast-varying dimension */ 100*219b2ee8SDavid du Colombier Type a[1]; 101*219b2ee8SDavid du Colombier }; 102*219b2ee8SDavid du Colombier 103*219b2ee8SDavid du Colombier int nplate; 104*219b2ee8SDavid du Colombier Plate plate[2000]; /* needs to go to 2000 when the north comes */ 105*219b2ee8SDavid du Colombier double PI_180; 106*219b2ee8SDavid du Colombier double TWOPI; 107*219b2ee8SDavid du Colombier int debug; 108*219b2ee8SDavid du Colombier struct 109*219b2ee8SDavid du Colombier { 110*219b2ee8SDavid du Colombier float min; 111*219b2ee8SDavid du Colombier float max; 112*219b2ee8SDavid du Colombier float del; 113*219b2ee8SDavid du Colombier double gamma; 114*219b2ee8SDavid du Colombier int neg; 115*219b2ee8SDavid du Colombier } gam; 116*219b2ee8SDavid du Colombier 117*219b2ee8SDavid du Colombier char* hms(Angle); 118*219b2ee8SDavid du Colombier char* dms(Angle); 119*219b2ee8SDavid du Colombier double xsqrt(double); 120*219b2ee8SDavid du Colombier Angle dist(Angle, Angle, Angle, Angle); 121*219b2ee8SDavid du Colombier Header* getheader(char*); 122*219b2ee8SDavid du Colombier char* getword(char*, char*); 123*219b2ee8SDavid du Colombier void amdinv(Header*, Angle, Angle, float, float); 124*219b2ee8SDavid du Colombier void ppoinv(Header*, Angle, Angle); 125*219b2ee8SDavid du Colombier void xypos(Header*, Angle, Angle, float, float); 126*219b2ee8SDavid du Colombier void traneqstd(Header*, Angle, Angle); 127*219b2ee8SDavid du Colombier Angle getra(char*); 128*219b2ee8SDavid du Colombier Angle getdec(char*); 129*219b2ee8SDavid du Colombier void getplates(void); 130*219b2ee8SDavid du Colombier 131*219b2ee8SDavid du Colombier Image* dssread(char*); 132*219b2ee8SDavid du Colombier void hinv(Type*, int, int); 133*219b2ee8SDavid du Colombier int input_bit(Biobuf*); 134*219b2ee8SDavid du Colombier int input_nbits(Biobuf*, int); 135*219b2ee8SDavid du Colombier void qtree_decode(Biobuf*, Type*, int, int, int, int); 136*219b2ee8SDavid du Colombier void start_inputing_bits(void); 137*219b2ee8SDavid du Colombier Bitmap* image(Angle, Angle, Angle, Angle); 138*219b2ee8SDavid du Colombier int dogamma(int); 139