xref: /plan9-contrib/sys/src/cmd/scat/sky.h (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
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