13e12c5d1SDavid du Colombier #define DIR "/lib/sky" 23e12c5d1SDavid du Colombier /* 3219b2ee8SDavid du Colombier * This code reflects many years of changes. There remain residues 4219b2ee8SDavid du Colombier * of prior implementations. 5219b2ee8SDavid du Colombier * 63e12c5d1SDavid du Colombier * Keys: 7219b2ee8SDavid du Colombier * 32 bits long. High 26 bits are encoded as described below. 83e12c5d1SDavid du Colombier * Low 6 bits are types: 93e12c5d1SDavid du Colombier * 103e12c5d1SDavid du Colombier * Patch is ~ one square degree of sky. It points to an otherwise 11219b2ee8SDavid du Colombier * anonymous list of Catalog keys. The 0th key is special: 12219b2ee8SDavid du Colombier * it contains up to 4 constellation identifiers. 133e12c5d1SDavid du Colombier * Catalogs (SAO,NGC,M,...) are: 143e12c5d1SDavid du Colombier * 31.........8|76|543210 153e12c5d1SDavid du Colombier * catalog # |BB|catalog name 163e12c5d1SDavid du Colombier * BB is two bits of brightness: 173e12c5d1SDavid du Colombier * 00 -inf < m <= 7 183e12c5d1SDavid du Colombier * 01 7 < m <= 10 193e12c5d1SDavid du Colombier * 10 10 < m <= 13 203e12c5d1SDavid du Colombier * 11 13 < m < inf 21219b2ee8SDavid du Colombier * The BB field is a dreg, and correct only for SAO and NGC. 22219b2ee8SDavid du Colombier * IC(n) is just NGC(n+7840) 23219b2ee8SDavid du Colombier * Others should be self-explanatory. 243e12c5d1SDavid du Colombier * 253e12c5d1SDavid du Colombier * Records: 263e12c5d1SDavid du Colombier * 273e12c5d1SDavid du Colombier * Star is an SAOrec 28219b2ee8SDavid du Colombier * Galaxy, PlanetaryN, OpenCl, GlobularCl, DiffuseN, etc., are NGCrecs. 29219b2ee8SDavid du Colombier * Abell is an Abellrec 30219b2ee8SDavid du Colombier * The Namedxxx records hold a name and a catalog entry; they result from 31219b2ee8SDavid du Colombier * name lookups. 323e12c5d1SDavid du Colombier */ 333e12c5d1SDavid du Colombier 343e12c5d1SDavid du Colombier typedef enum 353e12c5d1SDavid du Colombier { 36*59cc4ca5SDavid du Colombier Planet, 373e12c5d1SDavid du Colombier Patch, 383e12c5d1SDavid du Colombier SAO, 393e12c5d1SDavid du Colombier NGC, 403e12c5d1SDavid du Colombier M, 41219b2ee8SDavid du Colombier Constel_deprecated, 42219b2ee8SDavid du Colombier Nonstar_deprecated, 43219b2ee8SDavid du Colombier NamedSAO, 44219b2ee8SDavid du Colombier NamedNGC, 45219b2ee8SDavid du Colombier NamedAbell, 46219b2ee8SDavid du Colombier Abell, 47219b2ee8SDavid du Colombier /* NGC types */ 483e12c5d1SDavid du Colombier Galaxy, 493e12c5d1SDavid du Colombier PlanetaryN, 503e12c5d1SDavid du Colombier OpenCl, 513e12c5d1SDavid du Colombier GlobularCl, 523e12c5d1SDavid du Colombier DiffuseN, 533e12c5d1SDavid du Colombier NebularCl, 54219b2ee8SDavid du Colombier Asterism, 55219b2ee8SDavid du Colombier Knot, 56219b2ee8SDavid du Colombier Triple, 57219b2ee8SDavid du Colombier Double, 58219b2ee8SDavid du Colombier Single, 59219b2ee8SDavid du Colombier Uncertain, 603e12c5d1SDavid du Colombier Nonexistent, 613e12c5d1SDavid du Colombier Unknown, 62219b2ee8SDavid du Colombier PlateDefect, 633e12c5d1SDavid du Colombier /* internal */ 643e12c5d1SDavid du Colombier NGCN, 653e12c5d1SDavid du Colombier PatchC, 667dd7cddfSDavid du Colombier NONGC, 673e12c5d1SDavid du Colombier }Type; 68219b2ee8SDavid du Colombier 69219b2ee8SDavid du Colombier enum 70219b2ee8SDavid du Colombier { 71219b2ee8SDavid du Colombier /* 72219b2ee8SDavid du Colombier * parameters for plate 73219b2ee8SDavid du Colombier */ 74219b2ee8SDavid du Colombier Pppo1 = 0, 75219b2ee8SDavid du Colombier Pppo2, 76219b2ee8SDavid du Colombier Pppo3, 77219b2ee8SDavid du Colombier Pppo4, 78219b2ee8SDavid du Colombier Pppo5, 79219b2ee8SDavid du Colombier Pppo6, 80219b2ee8SDavid du Colombier Pamdx1, 81219b2ee8SDavid du Colombier Pamdx2, 82219b2ee8SDavid du Colombier Pamdx3, 83219b2ee8SDavid du Colombier Pamdx4, 84219b2ee8SDavid du Colombier Pamdx5, 85219b2ee8SDavid du Colombier Pamdx6, 86219b2ee8SDavid du Colombier Pamdx7, 87219b2ee8SDavid du Colombier Pamdx8, 88219b2ee8SDavid du Colombier Pamdx9, 89219b2ee8SDavid du Colombier Pamdx10, 90219b2ee8SDavid du Colombier Pamdx11, 91219b2ee8SDavid du Colombier Pamdx12, 92219b2ee8SDavid du Colombier Pamdx13, 93219b2ee8SDavid du Colombier Pamdx14, 94219b2ee8SDavid du Colombier Pamdx15, 95219b2ee8SDavid du Colombier Pamdx16, 96219b2ee8SDavid du Colombier Pamdx17, 97219b2ee8SDavid du Colombier Pamdx18, 98219b2ee8SDavid du Colombier Pamdx19, 99219b2ee8SDavid du Colombier Pamdx20, 100219b2ee8SDavid du Colombier Pamdy1, 101219b2ee8SDavid du Colombier Pamdy2, 102219b2ee8SDavid du Colombier Pamdy3, 103219b2ee8SDavid du Colombier Pamdy4, 104219b2ee8SDavid du Colombier Pamdy5, 105219b2ee8SDavid du Colombier Pamdy6, 106219b2ee8SDavid du Colombier Pamdy7, 107219b2ee8SDavid du Colombier Pamdy8, 108219b2ee8SDavid du Colombier Pamdy9, 109219b2ee8SDavid du Colombier Pamdy10, 110219b2ee8SDavid du Colombier Pamdy11, 111219b2ee8SDavid du Colombier Pamdy12, 112219b2ee8SDavid du Colombier Pamdy13, 113219b2ee8SDavid du Colombier Pamdy14, 114219b2ee8SDavid du Colombier Pamdy15, 115219b2ee8SDavid du Colombier Pamdy16, 116219b2ee8SDavid du Colombier Pamdy17, 117219b2ee8SDavid du Colombier Pamdy18, 118219b2ee8SDavid du Colombier Pamdy19, 119219b2ee8SDavid du Colombier Pamdy20, 120219b2ee8SDavid du Colombier Ppltscale, 121219b2ee8SDavid du Colombier Pxpixelsz, 122219b2ee8SDavid du Colombier Pypixelsz, 123219b2ee8SDavid du Colombier Ppltra, 124219b2ee8SDavid du Colombier Ppltrah, 125219b2ee8SDavid du Colombier Ppltram, 126219b2ee8SDavid du Colombier Ppltras, 127219b2ee8SDavid du Colombier Ppltdec, 128219b2ee8SDavid du Colombier Ppltdecd, 129219b2ee8SDavid du Colombier Ppltdecm, 130219b2ee8SDavid du Colombier Ppltdecs, 131219b2ee8SDavid du Colombier Pnparam, 132219b2ee8SDavid du Colombier }; 133219b2ee8SDavid du Colombier 1343e12c5d1SDavid du Colombier #define UNKNOWNMAG 32767 135*59cc4ca5SDavid du Colombier #define NPlanet 20 1363e12c5d1SDavid du Colombier 1373e12c5d1SDavid du Colombier typedef float Angle; /* in radians */ 1383e12c5d1SDavid du Colombier typedef long DAngle; /* on disk: in units of milliarcsec */ 1393e12c5d1SDavid du Colombier typedef short Mag; /* multiplied by 10 */ 1403e12c5d1SDavid du Colombier typedef long Key; /* known to be 4 bytes, unfortunately */ 1413e12c5d1SDavid du Colombier 1423e12c5d1SDavid du Colombier /* 1433e12c5d1SDavid du Colombier * All integers are stored in little-endian order. 1443e12c5d1SDavid du Colombier */ 1453e12c5d1SDavid du Colombier typedef struct NGCrec NGCrec; 1463e12c5d1SDavid du Colombier struct NGCrec{ 1473e12c5d1SDavid du Colombier DAngle ra; 1483e12c5d1SDavid du Colombier DAngle dec; 149219b2ee8SDavid du Colombier DAngle dummy1; /* compatibility with old RNGC version */ 150219b2ee8SDavid du Colombier DAngle diam; 151219b2ee8SDavid du Colombier Mag mag; 152219b2ee8SDavid du Colombier short ngc; /* if >NNGC, IC number is ngc-NNGC */ 153219b2ee8SDavid du Colombier char diamlim; 154219b2ee8SDavid du Colombier char type; 155219b2ee8SDavid du Colombier char magtype; 156219b2ee8SDavid du Colombier char dummy2; 157219b2ee8SDavid du Colombier char desc[52]; /* 0-terminated Dreyer description */ 158219b2ee8SDavid du Colombier }; 159219b2ee8SDavid du Colombier 160219b2ee8SDavid du Colombier typedef struct Abellrec Abellrec; 161219b2ee8SDavid du Colombier struct Abellrec{ 162219b2ee8SDavid du Colombier DAngle ra; 163219b2ee8SDavid du Colombier DAngle dec; 1643e12c5d1SDavid du Colombier DAngle glat; 1653e12c5d1SDavid du Colombier DAngle glong; 166219b2ee8SDavid du Colombier Mag mag10; /* mag of 10th brightest cluster member; in same place as ngc.mag*/ 167219b2ee8SDavid du Colombier short abell; 168219b2ee8SDavid du Colombier DAngle rad; 169219b2ee8SDavid du Colombier short pop; 170219b2ee8SDavid du Colombier short dist; 171219b2ee8SDavid du Colombier char distgrp; 172219b2ee8SDavid du Colombier char richgrp; 173219b2ee8SDavid du Colombier char flag; 174219b2ee8SDavid du Colombier char pad; 1753e12c5d1SDavid du Colombier }; 1763e12c5d1SDavid du Colombier 177*59cc4ca5SDavid du Colombier typedef struct Planetrec Planetrec; 178*59cc4ca5SDavid du Colombier struct Planetrec{ 179*59cc4ca5SDavid du Colombier DAngle ra; 180*59cc4ca5SDavid du Colombier DAngle dec; 181*59cc4ca5SDavid du Colombier DAngle az; 182*59cc4ca5SDavid du Colombier DAngle alt; 183*59cc4ca5SDavid du Colombier DAngle semidiam; 184*59cc4ca5SDavid du Colombier double phase; 185*59cc4ca5SDavid du Colombier char name[16]; 186*59cc4ca5SDavid du Colombier }; 187*59cc4ca5SDavid du Colombier 1883e12c5d1SDavid du Colombier /* 1893e12c5d1SDavid du Colombier * Star names: 0,0==unused. Numbers are name[0]=1,..,99. 1903e12c5d1SDavid du Colombier * Greek letters are alpha=101, etc. 1913e12c5d1SDavid du Colombier * Constellations are alphabetical order by abbreviation, and=1, etc. 1923e12c5d1SDavid du Colombier */ 1933e12c5d1SDavid du Colombier typedef struct SAOrec SAOrec; 1943e12c5d1SDavid du Colombier struct SAOrec{ 1953e12c5d1SDavid du Colombier DAngle ra; 1963e12c5d1SDavid du Colombier DAngle dec; 1973e12c5d1SDavid du Colombier DAngle dra; 1983e12c5d1SDavid du Colombier DAngle ddec; 1993e12c5d1SDavid du Colombier Mag mag; /* visual */ 2003e12c5d1SDavid du Colombier Mag mpg; 2013e12c5d1SDavid du Colombier char spec[3]; 2023e12c5d1SDavid du Colombier char code; 2033e12c5d1SDavid du Colombier char compid[2]; 2043e12c5d1SDavid du Colombier char hdcode; 2053e12c5d1SDavid du Colombier char pad1; 2063e12c5d1SDavid du Colombier long hd; /* HD catalog number */ 2073e12c5d1SDavid du Colombier char name[3]; /* name[0]=alpha name[1]=2 name[3]=ori */ 2083e12c5d1SDavid du Colombier char nname; /* number of prose names */ 2093e12c5d1SDavid du Colombier /* 36 bytes to here */ 2103e12c5d1SDavid du Colombier }; 2113e12c5d1SDavid du Colombier 212219b2ee8SDavid du Colombier typedef struct Mindexrec Mindexrec; 213219b2ee8SDavid du Colombier struct Mindexrec{ /* code knows the bit patterns in here; this is a long */ 214219b2ee8SDavid du Colombier char m; /* M number */ 215219b2ee8SDavid du Colombier char dummy; 2163e12c5d1SDavid du Colombier short ngc; 2173e12c5d1SDavid du Colombier }; 218219b2ee8SDavid du Colombier 2193e12c5d1SDavid du Colombier typedef struct Bayerec Bayerec; 2203e12c5d1SDavid du Colombier struct Bayerec{ 2213e12c5d1SDavid du Colombier long sao; 2223e12c5d1SDavid du Colombier char name[3]; 2233e12c5d1SDavid du Colombier char pad; 2243e12c5d1SDavid du Colombier }; 2253e12c5d1SDavid du Colombier 2263e12c5d1SDavid du Colombier /* 2273e12c5d1SDavid du Colombier * Internal form 2283e12c5d1SDavid du Colombier */ 2293e12c5d1SDavid du Colombier 230219b2ee8SDavid du Colombier typedef struct Namedrec Namedrec; 231219b2ee8SDavid du Colombier struct Namedrec{ 232219b2ee8SDavid du Colombier char name[36]; 2333e12c5d1SDavid du Colombier }; 2343e12c5d1SDavid du Colombier 2353e12c5d1SDavid du Colombier typedef struct Namerec Namerec; 2363e12c5d1SDavid du Colombier struct Namerec{ 2373e12c5d1SDavid du Colombier long sao; 238219b2ee8SDavid du Colombier long ngc; 239219b2ee8SDavid du Colombier long abell; 240219b2ee8SDavid du Colombier char name[36]; /* null terminated */ 2413e12c5d1SDavid du Colombier }; 2423e12c5d1SDavid du Colombier 2433e12c5d1SDavid du Colombier typedef struct Patchrec Patchrec; 2443e12c5d1SDavid du Colombier struct Patchrec{ 2453e12c5d1SDavid du Colombier int nkey; 2463e12c5d1SDavid du Colombier long key[60]; 2473e12c5d1SDavid du Colombier }; 2483e12c5d1SDavid du Colombier 2493e12c5d1SDavid du Colombier typedef struct Record Record; 2503e12c5d1SDavid du Colombier struct Record{ 2513e12c5d1SDavid du Colombier Type type; 2523e12c5d1SDavid du Colombier long index; 2533e12c5d1SDavid du Colombier union{ 2543e12c5d1SDavid du Colombier SAOrec sao; 2553e12c5d1SDavid du Colombier NGCrec ngc; 256219b2ee8SDavid du Colombier Abellrec abell; 257219b2ee8SDavid du Colombier Namedrec named; 2583e12c5d1SDavid du Colombier Patchrec patch; 259*59cc4ca5SDavid du Colombier Planetrec planet; 2603e12c5d1SDavid du Colombier /* PatchCrec is empty */ 2613e12c5d1SDavid du Colombier }; 2623e12c5d1SDavid du Colombier }; 2633e12c5d1SDavid du Colombier 2643e12c5d1SDavid du Colombier typedef struct Name Name; 2653e12c5d1SDavid du Colombier struct Name{ 2663e12c5d1SDavid du Colombier char *name; 2673e12c5d1SDavid du Colombier int type; 2683e12c5d1SDavid du Colombier }; 2693e12c5d1SDavid du Colombier 270219b2ee8SDavid du Colombier typedef struct Plate Plate; 271219b2ee8SDavid du Colombier struct Plate 272219b2ee8SDavid du Colombier { 273219b2ee8SDavid du Colombier char rgn[7]; 274219b2ee8SDavid du Colombier char disk; 275219b2ee8SDavid du Colombier Angle ra; 276219b2ee8SDavid du Colombier Angle dec; 277219b2ee8SDavid du Colombier }; 278219b2ee8SDavid du Colombier 279219b2ee8SDavid du Colombier typedef struct Header Header; 280219b2ee8SDavid du Colombier struct Header 281219b2ee8SDavid du Colombier { 282219b2ee8SDavid du Colombier float param[Pnparam]; 283219b2ee8SDavid du Colombier int amdflag; 284219b2ee8SDavid du Colombier 285219b2ee8SDavid du Colombier float x; 286219b2ee8SDavid du Colombier float y; 287219b2ee8SDavid du Colombier float xi; 288219b2ee8SDavid du Colombier float eta; 289219b2ee8SDavid du Colombier }; 290219b2ee8SDavid du Colombier typedef long Pix; 291219b2ee8SDavid du Colombier 2927dd7cddfSDavid du Colombier typedef struct Img Img; 2937dd7cddfSDavid du Colombier struct Img 294219b2ee8SDavid du Colombier { 295219b2ee8SDavid du Colombier int nx; 296219b2ee8SDavid du Colombier int ny; /* ny is the fast-varying dimension */ 297219b2ee8SDavid du Colombier Pix a[1]; 298219b2ee8SDavid du Colombier }; 299219b2ee8SDavid du Colombier 3003e12c5d1SDavid du Colombier #define RAD(x) ((x)*PI_180) 3013e12c5d1SDavid du Colombier #define DEG(x) ((x)/PI_180) 302219b2ee8SDavid du Colombier #define ARCSECONDS_PER_RADIAN (DEG(1)*3600) 303*59cc4ca5SDavid du Colombier #define MILLIARCSEC (1000*60*60) 304219b2ee8SDavid du Colombier 305219b2ee8SDavid du Colombier int nplate; 306219b2ee8SDavid du Colombier Plate plate[2000]; /* needs to go to 2000 when the north comes */ 307219b2ee8SDavid du Colombier double PI_180; 308219b2ee8SDavid du Colombier double TWOPI; 309219b2ee8SDavid du Colombier double LN2; 310219b2ee8SDavid du Colombier int debug; 311219b2ee8SDavid du Colombier struct 312219b2ee8SDavid du Colombier { 313219b2ee8SDavid du Colombier float min; 314219b2ee8SDavid du Colombier float max; 315219b2ee8SDavid du Colombier float gamma; 316219b2ee8SDavid du Colombier float absgamma; 317219b2ee8SDavid du Colombier float mult1; 318219b2ee8SDavid du Colombier float mult2; 319219b2ee8SDavid du Colombier int neg; 320219b2ee8SDavid du Colombier } gam; 321219b2ee8SDavid du Colombier 322219b2ee8SDavid du Colombier typedef struct Picture Picture; 323219b2ee8SDavid du Colombier struct Picture 324219b2ee8SDavid du Colombier { 325219b2ee8SDavid du Colombier int minx; 326219b2ee8SDavid du Colombier int miny; 327219b2ee8SDavid du Colombier int maxx; 328219b2ee8SDavid du Colombier int maxy; 329219b2ee8SDavid du Colombier char name[16]; 330219b2ee8SDavid du Colombier uchar *data; 331219b2ee8SDavid du Colombier }; 332219b2ee8SDavid du Colombier 3337dd7cddfSDavid du Colombier typedef struct Image Image; 3343e12c5d1SDavid du Colombier 3353e12c5d1SDavid du Colombier extern double PI_180; 3363e12c5d1SDavid du Colombier extern double TWOPI; 3373e12c5d1SDavid du Colombier extern char *progname; 338219b2ee8SDavid du Colombier extern char *desctab[][2]; 3393e12c5d1SDavid du Colombier extern Name names[]; 340*59cc4ca5SDavid du Colombier extern Record *rec; 341*59cc4ca5SDavid du Colombier extern long nrec; 342*59cc4ca5SDavid du Colombier extern Planetrec *planet; 343*59cc4ca5SDavid du Colombier /* for bbox: */ 344*59cc4ca5SDavid du Colombier extern int folded; 345*59cc4ca5SDavid du Colombier extern DAngle ramin; 346*59cc4ca5SDavid du Colombier extern DAngle ramax; 347*59cc4ca5SDavid du Colombier extern DAngle decmin; 348*59cc4ca5SDavid du Colombier extern DAngle decmax; 349*59cc4ca5SDavid du Colombier extern Biobuf bout; 3503e12c5d1SDavid du Colombier 3513e12c5d1SDavid du Colombier extern void saoopen(void); 3523e12c5d1SDavid du Colombier extern void ngcopen(void); 3533e12c5d1SDavid du Colombier extern void patchopen(void); 3543e12c5d1SDavid du Colombier extern void mopen(void); 3553e12c5d1SDavid du Colombier extern void constelopen(void); 3563e12c5d1SDavid du Colombier extern void lowercase(char*); 3573e12c5d1SDavid du Colombier extern void lookup(char*, int); 3583e12c5d1SDavid du Colombier extern int typetab(int); 3593e12c5d1SDavid du Colombier extern char*ngcstring(int); 3603e12c5d1SDavid du Colombier extern char*skip(int, char*); 3613e12c5d1SDavid du Colombier extern void prrec(Record*); 3623e12c5d1SDavid du Colombier extern int equal(char*, char*); 3633e12c5d1SDavid du Colombier extern int parsename(char*); 3643e12c5d1SDavid du Colombier extern void radec(int, int*, int*, int*); 3653e12c5d1SDavid du Colombier extern int btag(short); 3663e12c5d1SDavid du Colombier extern long patcha(Angle, Angle); 3673e12c5d1SDavid du Colombier extern long patch(int, int, int); 3683e12c5d1SDavid du Colombier extern char*hms(Angle); 3693e12c5d1SDavid du Colombier extern char*dms(Angle); 370219b2ee8SDavid du Colombier extern char*ms(Angle); 3713e12c5d1SDavid du Colombier extern char*hm(Angle); 3723e12c5d1SDavid du Colombier extern char*dm(Angle); 373*59cc4ca5SDavid du Colombier extern char*deg(Angle); 374*59cc4ca5SDavid du Colombier extern char*hm5(Angle); 3753e12c5d1SDavid du Colombier extern long dangle(Angle); 3767dd7cddfSDavid du Colombier extern Angle angle(DAngle); 3773e12c5d1SDavid du Colombier extern void prdesc(char*, char*(*)[2], short*); 378219b2ee8SDavid du Colombier extern double xsqrt(double); 379219b2ee8SDavid du Colombier extern Angle dist(Angle, Angle, Angle, Angle); 380219b2ee8SDavid du Colombier extern Header* getheader(char*); 381219b2ee8SDavid du Colombier extern char* getword(char*, char*); 382219b2ee8SDavid du Colombier extern void amdinv(Header*, Angle, Angle, float, float); 383219b2ee8SDavid du Colombier extern void ppoinv(Header*, Angle, Angle); 384219b2ee8SDavid du Colombier extern void xypos(Header*, Angle, Angle, float, float); 385219b2ee8SDavid du Colombier extern void traneqstd(Header*, Angle, Angle); 386219b2ee8SDavid du Colombier extern Angle getra(char*); 387219b2ee8SDavid du Colombier extern Angle getdec(char*); 388219b2ee8SDavid du Colombier extern void getplates(void); 3897dd7cddfSDavid du Colombier extern Img* dssread(char*); 390219b2ee8SDavid du Colombier extern void hinv(Pix*, int, int); 391219b2ee8SDavid du Colombier extern int input_bit(Biobuf*); 392219b2ee8SDavid du Colombier extern int input_nbits(Biobuf*, int); 393219b2ee8SDavid du Colombier extern int input_huffman(Biobuf*); 394219b2ee8SDavid du Colombier extern int input_nybble(Biobuf*); 395219b2ee8SDavid du Colombier extern void qtree_decode(Biobuf*, Pix*, int, int, int, int); 396219b2ee8SDavid du Colombier extern void start_inputing_bits(void); 397219b2ee8SDavid du Colombier extern Picture* image(Angle, Angle, Angle, Angle); 3987dd7cddfSDavid du Colombier extern char* dssmount(int); 399219b2ee8SDavid du Colombier extern int dogamma(Pix); 4007dd7cddfSDavid du Colombier extern void displaypic(Picture*); 4017dd7cddfSDavid du Colombier extern void displayimage(Image*); 402*59cc4ca5SDavid du Colombier extern void plot(char*); 403*59cc4ca5SDavid du Colombier extern void astro(char*, int); 404*59cc4ca5SDavid du Colombier extern char* alpha(char*, char*); 405*59cc4ca5SDavid du Colombier extern char* skipbl(char*); 406*59cc4ca5SDavid du Colombier extern void flatten(void); 407*59cc4ca5SDavid du Colombier extern int bbox(long, long, int); 408*59cc4ca5SDavid du Colombier extern int inbbox(DAngle, DAngle); 409*59cc4ca5SDavid du Colombier extern char* nameof(Record*); 4103e12c5d1SDavid du Colombier 411219b2ee8SDavid du Colombier #define NINDEX 400 412