tsky.h - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tsky.h (7611B)
       ---
            1 
            2 #define DIR        "#9/sky"
            3 /*
            4  *        This code reflects many years of changes.  There remain residues
            5  *                of prior implementations.
            6  *
            7  *        Keys:
            8  *                32 bits long. High 26 bits are encoded as described below.
            9  *                Low 6 bits are types:
           10  *
           11  *                Patch is ~ one square degree of sky.  It points to an otherwise
           12  *                        anonymous list of Catalog keys.  The 0th key is special:
           13  *                        it contains up to 4 constellation identifiers.
           14  *                Catalogs (SAO,NGC,M,...) are:
           15  *                        31.........8|76|543210
           16  *                          catalog # |BB|catalog name
           17  *                        BB is two bits of brightness:
           18  *                                00        -inf <  m <=  7
           19  *                                01           7 <  m <= 10
           20  *                                10          10 <  m <= 13
           21  *                                11          13 <  m <  inf
           22  *                        The BB field is a dreg, and correct only for SAO and NGC.
           23  *                        IC(n) is just NGC(n+7840)
           24  *                Others should be self-explanatory.
           25  *
           26  *        Records:
           27  *
           28  *        Star is an SAOrec
           29  *        Galaxy, PlanetaryN, OpenCl, GlobularCl, DiffuseN, etc., are NGCrecs.
           30  *        Abell is an Abellrec
           31  *        The Namedxxx records hold a name and a catalog entry; they result from
           32  *                name lookups.
           33  */
           34 
           35 typedef enum
           36 {
           37         Planet,
           38         Patch,
           39         SAO,
           40         NGC,
           41         M,
           42         Constel_deprecated,
           43         Nonstar_deprecated,
           44         NamedSAO,
           45         NamedNGC,
           46         NamedAbell,
           47         Abell,
           48         /* NGC types */
           49         Galaxy,
           50         PlanetaryN,
           51         OpenCl,
           52         GlobularCl,
           53         DiffuseN,
           54         NebularCl,
           55         Asterism,
           56         Knot,
           57         Triple,
           58         Double,
           59         Single,
           60         Uncertain,
           61         Nonexistent,
           62         Unknown,
           63         PlateDefect,
           64         /* internal */
           65         NGCN,
           66         PatchC,
           67         NONGC
           68 }Type;
           69 
           70 enum
           71 {
           72         /*
           73          * parameters for plate
           74          */
           75         Pppo1        = 0,
           76         Pppo2,
           77         Pppo3,
           78         Pppo4,
           79         Pppo5,
           80         Pppo6,
           81         Pamdx1,
           82         Pamdx2,
           83         Pamdx3,
           84         Pamdx4,
           85         Pamdx5,
           86         Pamdx6,
           87         Pamdx7,
           88         Pamdx8,
           89         Pamdx9,
           90         Pamdx10,
           91         Pamdx11,
           92         Pamdx12,
           93         Pamdx13,
           94         Pamdx14,
           95         Pamdx15,
           96         Pamdx16,
           97         Pamdx17,
           98         Pamdx18,
           99         Pamdx19,
          100         Pamdx20,
          101         Pamdy1,
          102         Pamdy2,
          103         Pamdy3,
          104         Pamdy4,
          105         Pamdy5,
          106         Pamdy6,
          107         Pamdy7,
          108         Pamdy8,
          109         Pamdy9,
          110         Pamdy10,
          111         Pamdy11,
          112         Pamdy12,
          113         Pamdy13,
          114         Pamdy14,
          115         Pamdy15,
          116         Pamdy16,
          117         Pamdy17,
          118         Pamdy18,
          119         Pamdy19,
          120         Pamdy20,
          121         Ppltscale,
          122         Pxpixelsz,
          123         Pypixelsz,
          124         Ppltra,
          125         Ppltrah,
          126         Ppltram,
          127         Ppltras,
          128         Ppltdec,
          129         Ppltdecd,
          130         Ppltdecm,
          131         Ppltdecs,
          132         Pnparam
          133 };
          134 
          135 #define        UNKNOWNMAG        32767
          136 #define        NPlanet                        20
          137 
          138 typedef float        Angle;        /* in radians */
          139 typedef int32        DAngle;        /* on disk: in units of milliarcsec */
          140 typedef short        Mag;        /* multiplied by 10 */
          141 typedef int32        Key;        /* known to be 4 bytes, unfortunately */
          142 
          143 /*
          144  * All integers are stored in little-endian order.
          145  */
          146 typedef struct NGCrec NGCrec;
          147 struct NGCrec{
          148         DAngle        ra;
          149         DAngle        dec;
          150         DAngle        dummy1;        /* compatibility with old RNGC version */
          151         DAngle        diam;
          152         Mag        mag;
          153         short        ngc;        /* if >NNGC, IC number is ngc-NNGC */
          154         char        diamlim;
          155         char        type;
          156         char        magtype;
          157         char        dummy2;
          158         char        desc[52];        /* 0-terminated Dreyer description */
          159 };
          160 
          161 typedef struct Abellrec Abellrec;
          162 struct Abellrec{
          163         DAngle        ra;
          164         DAngle        dec;
          165         DAngle        glat;
          166         DAngle        glong;
          167         Mag        mag10;        /* mag of 10th brightest cluster member; in same place as ngc.mag*/
          168         short        abell;
          169         DAngle        rad;
          170         short        pop;
          171         short        dist;
          172         char        distgrp;
          173         char        richgrp;
          174         char        flag;
          175         char        pad;
          176 };
          177 
          178 typedef struct Planetrec Planetrec;
          179 struct Planetrec{
          180         DAngle        ra;
          181         DAngle        dec;
          182         DAngle        az;
          183         DAngle        alt;
          184         DAngle        semidiam;
          185         double        phase;
          186         char                name[16];
          187 };
          188 
          189 /*
          190  * Star names: 0,0==unused.  Numbers are name[0]=1,..,99.
          191  * Greek letters are alpha=101, etc.
          192  * Constellations are alphabetical order by abbreviation, and=1, etc.
          193  */
          194 typedef struct SAOrec SAOrec;
          195 struct SAOrec{
          196         DAngle        ra;
          197         DAngle        dec;
          198         DAngle        dra;
          199         DAngle        ddec;
          200         Mag        mag;                /* visual */
          201         Mag        mpg;
          202         char        spec[3];
          203         char        code;
          204         char        compid[2];
          205         char        hdcode;
          206         char        pad1;
          207         int32        hd;                /* HD catalog number */
          208         char        name[3];        /* name[0]=alpha name[1]=2 name[3]=ori */
          209         char        nname;                /* number of prose names */
          210         /* 36 bytes to here */
          211 };
          212 
          213 typedef struct Mindexrec Mindexrec;
          214 struct Mindexrec{        /* code knows the bit patterns in here; this is a long */
          215         char        m;                /* M number */
          216         char        dummy;
          217         short        ngc;
          218 };
          219 
          220 typedef struct Bayerec Bayerec;
          221 struct Bayerec{
          222         int32        sao;
          223         char        name[3];
          224         char        pad;
          225 };
          226 
          227 /*
          228  * Internal form
          229  */
          230 
          231 typedef struct Namedrec Namedrec;
          232 struct Namedrec{
          233         char        name[36];
          234 };
          235 
          236 typedef struct Namerec Namerec;
          237 struct Namerec{
          238         int32        sao;
          239         int32        ngc;
          240         int32        abell;
          241         char        name[36];        /* null terminated */
          242 };
          243 
          244 typedef struct Patchrec Patchrec;
          245 struct Patchrec{
          246         int        nkey;
          247         int32        key[60];
          248 };
          249 
          250 typedef struct Record Record;
          251 struct Record{
          252         Type        type;
          253         int32        index;
          254         union{
          255                 SAOrec        sao;
          256                 NGCrec        ngc;
          257                 Abellrec        abell;
          258                 Namedrec        named;
          259                 Patchrec        patch;
          260                 Planetrec        planet;
          261                 /* PatchCrec is empty */
          262         } u;
          263 };
          264 
          265 typedef struct Name Name;
          266 struct Name{
          267         char        *name;
          268         int        type;
          269 };
          270 
          271 typedef        struct        Plate        Plate;
          272 struct        Plate
          273 {
          274         char        rgn[7];
          275         char        disk;
          276         Angle        ra;
          277         Angle        dec;
          278 };
          279 
          280 typedef        struct        Header        Header;
          281 struct        Header
          282 {
          283         float        param[Pnparam];
          284         int        amdflag;
          285 
          286         float        x;
          287         float        y;
          288         float        xi;
          289         float        eta;
          290 };
          291 typedef        int32        Pix;
          292 
          293 typedef struct        Img Img;
          294 struct        Img
          295 {
          296         int        nx;
          297         int        ny;        /* ny is the fast-varying dimension */
          298         Pix        a[1];
          299 };
          300 
          301 #define        RAD(x)        ((x)*PI_180)
          302 #define        DEG(x)        ((x)/PI_180)
          303 #define        ARCSECONDS_PER_RADIAN        (DEG(1)*3600)
          304 #define        MILLIARCSEC        (1000*60*60)
          305 
          306 int        nplate;
          307 Plate        plate[2000];                /* needs to go to 2000 when the north comes */
          308 double        PI_180;
          309 double        TWOPI;
          310 double        LN2;
          311 int        debug;
          312 struct
          313 {
          314         float        min;
          315         float        max;
          316         float        gamma;
          317         float        absgamma;
          318         float        mult1;
          319         float        mult2;
          320         int        neg;
          321 } gam;
          322 
          323 typedef struct Picture Picture;
          324 struct Picture
          325 {
          326         int        minx;
          327         int        miny;
          328         int        maxx;
          329         int        maxy;
          330         char        name[16];
          331         uchar        *data;
          332 };
          333 
          334 #ifndef _DRAW_H_
          335 typedef struct Image Image;
          336 #endif
          337 
          338 extern        double        PI_180;
          339 extern        double        TWOPI;
          340 extern        char        *progname;
          341 extern        char        *desctab[][2];
          342 extern        Name        names[];
          343 extern        Record        *rec;
          344 extern        int32                nrec;
          345 extern        Planetrec        *planet;
          346 /* for bbox: */
          347 extern        int                folded;
          348 extern        DAngle        ramin;
          349 extern        DAngle        ramax;
          350 extern        DAngle        decmin;
          351 extern        DAngle        decmax;
          352 extern        Biobuf        bout;
          353 
          354 extern void saoopen(void);
          355 extern void ngcopen(void);
          356 extern void patchopen(void);
          357 extern void mopen(void);
          358 extern void constelopen(void);
          359 extern void lowercase(char*);
          360 extern void lookup(char*, int);
          361 extern int typetab(int);
          362 extern char*ngcstring(int);
          363 extern char*skip(int, char*);
          364 extern void prrec(Record*);
          365 extern int equal(char*, char*);
          366 extern int parsename(char*);
          367 extern void radec(int, int*, int*, int*);
          368 extern int btag(short);
          369 extern int32 patcha(Angle, Angle);
          370 extern int32 patch(int, int, int);
          371 extern char*hms(Angle);
          372 extern char*dms(Angle);
          373 extern char*ms(Angle);
          374 extern char*hm(Angle);
          375 extern char*dm(Angle);
          376 extern char*deg(Angle);
          377 extern char*hm5(Angle);
          378 extern int32 dangle(Angle);
          379 extern Angle angle(DAngle);
          380 extern void prdesc(char*, char*(*)[2], short*);
          381 extern double        xsqrt(double);
          382 extern Angle        dist(Angle, Angle, Angle, Angle);
          383 extern Header*        getheader(char*);
          384 extern char*        getword(char*, char*);
          385 extern void        amdinv(Header*, Angle, Angle, float, float);
          386 extern void        ppoinv(Header*, Angle, Angle);
          387 extern void        xypos(Header*, Angle, Angle, float, float);
          388 extern void        traneqstd(Header*, Angle, Angle);
          389 extern Angle        getra(char*);
          390 extern Angle        getdec(char*);
          391 extern void        getplates(void);
          392 extern Img*        dssread(char*);
          393 extern void        hinv(Pix*, int, int);
          394 extern int        input_bit(Biobuf*);
          395 extern int        input_nbits(Biobuf*, int);
          396 extern int        input_huffman(Biobuf*);
          397 extern        int        input_nybble(Biobuf*);
          398 extern void        qtree_decode(Biobuf*, Pix*, int, int, int, int);
          399 extern void        start_inputing_bits(void);
          400 extern Picture*        image(Angle, Angle, Angle, Angle);
          401 extern char*        dssmount(int);
          402 extern int        dogamma(Pix);
          403 extern void        displaypic(Picture*);
          404 extern void        displayimage(Image*);
          405 extern void        plot(char*);
          406 extern void        astro(char*, int);
          407 extern char*        alpha(char*, char*);
          408 extern char*        skipbl(char*);
          409 extern void        flatten(void);
          410 extern int                bbox(int32, int32, int);
          411 extern int                inbbox(DAngle, DAngle);
          412 extern char*        nameof(Record*);
          413 
          414 #define        NINDEX        400