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