sky.h 7.4 KB

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