xref: /plan9/sys/src/cmd/scat/header.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include	<u.h>
2*219b2ee8SDavid du Colombier #include	<libc.h>
3*219b2ee8SDavid du Colombier #include	<bio.h>
4*219b2ee8SDavid du Colombier #include	"sky.h"
5*219b2ee8SDavid du Colombier 
6*219b2ee8SDavid du Colombier struct
7*219b2ee8SDavid du Colombier {
8*219b2ee8SDavid du Colombier 	char	name[9];
9*219b2ee8SDavid du Colombier 	char	offset;
10*219b2ee8SDavid du Colombier } Hproto[] =
11*219b2ee8SDavid du Colombier {
12*219b2ee8SDavid du Colombier 	"ppo1",		Pppo1,
13*219b2ee8SDavid du Colombier 	"ppo2",		Pppo2,
14*219b2ee8SDavid du Colombier 	"ppo3",		Pppo3,
15*219b2ee8SDavid du Colombier 	"ppo4",		Pppo4,
16*219b2ee8SDavid du Colombier 	"ppo5",		Pppo5,
17*219b2ee8SDavid du Colombier 	"ppo6",		Pppo6,
18*219b2ee8SDavid du Colombier 
19*219b2ee8SDavid du Colombier 	"amdx1",	Pamdx1,
20*219b2ee8SDavid du Colombier 	"amdx2",	Pamdx2,
21*219b2ee8SDavid du Colombier 	"amdx3",	Pamdx3,
22*219b2ee8SDavid du Colombier 	"amdx4",	Pamdx4,
23*219b2ee8SDavid du Colombier 	"amdx5",	Pamdx5,
24*219b2ee8SDavid du Colombier 	"amdx6",	Pamdx6,
25*219b2ee8SDavid du Colombier 	"amdx7",	Pamdx7,
26*219b2ee8SDavid du Colombier 	"amdx8",	Pamdx8,
27*219b2ee8SDavid du Colombier 	"amdx9",	Pamdx9,
28*219b2ee8SDavid du Colombier 	"amdx10",	Pamdx10,
29*219b2ee8SDavid du Colombier 	"amdx11",	Pamdx11,
30*219b2ee8SDavid du Colombier 	"amdx12",	Pamdx12,
31*219b2ee8SDavid du Colombier 	"amdx13",	Pamdx13,
32*219b2ee8SDavid du Colombier 	"amdx14",	Pamdx14,
33*219b2ee8SDavid du Colombier 	"amdx15",	Pamdx15,
34*219b2ee8SDavid du Colombier 	"amdx16",	Pamdx16,
35*219b2ee8SDavid du Colombier 	"amdx17",	Pamdx17,
36*219b2ee8SDavid du Colombier 	"amdx18",	Pamdx18,
37*219b2ee8SDavid du Colombier 	"amdx19",	Pamdx19,
38*219b2ee8SDavid du Colombier 	"amdx20",	Pamdx20,
39*219b2ee8SDavid du Colombier 
40*219b2ee8SDavid du Colombier 	"amdy1",	Pamdy1,
41*219b2ee8SDavid du Colombier 	"amdy2",	Pamdy2,
42*219b2ee8SDavid du Colombier 	"amdy3",	Pamdy3,
43*219b2ee8SDavid du Colombier 	"amdy4",	Pamdy4,
44*219b2ee8SDavid du Colombier 	"amdy5",	Pamdy5,
45*219b2ee8SDavid du Colombier 	"amdy6",	Pamdy6,
46*219b2ee8SDavid du Colombier 	"amdy7",	Pamdy7,
47*219b2ee8SDavid du Colombier 	"amdy8",	Pamdy8,
48*219b2ee8SDavid du Colombier 	"amdy9",	Pamdy9,
49*219b2ee8SDavid du Colombier 	"amdy10",	Pamdy10,
50*219b2ee8SDavid du Colombier 	"amdy11",	Pamdy11,
51*219b2ee8SDavid du Colombier 	"amdy12",	Pamdy12,
52*219b2ee8SDavid du Colombier 	"amdy13",	Pamdy13,
53*219b2ee8SDavid du Colombier 	"amdy14",	Pamdy14,
54*219b2ee8SDavid du Colombier 	"amdy15",	Pamdy15,
55*219b2ee8SDavid du Colombier 	"amdy16",	Pamdy16,
56*219b2ee8SDavid du Colombier 	"amdy17",	Pamdy17,
57*219b2ee8SDavid du Colombier 	"amdy18",	Pamdy18,
58*219b2ee8SDavid du Colombier 	"amdy19",	Pamdy19,
59*219b2ee8SDavid du Colombier 	"amdy20",	Pamdy20,
60*219b2ee8SDavid du Colombier 
61*219b2ee8SDavid du Colombier 	"pltscale",	Ppltscale,
62*219b2ee8SDavid du Colombier 	"xpixelsz",	Pxpixelsz,
63*219b2ee8SDavid du Colombier 	"ypixelsz",	Pypixelsz,
64*219b2ee8SDavid du Colombier 
65*219b2ee8SDavid du Colombier 	"pltrah",	Ppltrah,
66*219b2ee8SDavid du Colombier 	"pltram",	Ppltram,
67*219b2ee8SDavid du Colombier 	"pltras",	Ppltras,
68*219b2ee8SDavid du Colombier 	"pltdecd",	Ppltdecd,
69*219b2ee8SDavid du Colombier 	"pltdecm",	Ppltdecm,
70*219b2ee8SDavid du Colombier 	"pltdecs",	Ppltdecs,
71*219b2ee8SDavid du Colombier 
72*219b2ee8SDavid du Colombier };
73*219b2ee8SDavid du Colombier 
74*219b2ee8SDavid du Colombier Header*
75*219b2ee8SDavid du Colombier getheader(char *rgn)
76*219b2ee8SDavid du Colombier {
77*219b2ee8SDavid du Colombier 	char rec[81], name[81], value[81];
78*219b2ee8SDavid du Colombier 	char *p;
79*219b2ee8SDavid du Colombier 	Biobuf *bin;
80*219b2ee8SDavid du Colombier 	Header hd, *h;
81*219b2ee8SDavid du Colombier 	int i, j, decsn, dss;
82*219b2ee8SDavid du Colombier 
83*219b2ee8SDavid du Colombier 	dss = 0;
84*219b2ee8SDavid du Colombier 	sprint(rec, "/lib/sky/dssheaders/%s.hhh", rgn);
85*219b2ee8SDavid du Colombier 	bin = Bopen(rec, OREAD);
86*219b2ee8SDavid du Colombier 	if(bin == 0) {
87*219b2ee8SDavid du Colombier 		dss = 102;
88*219b2ee8SDavid du Colombier 		sprint(rec, "/n/juke/dss.102/headers/%s.hhh", rgn);
89*219b2ee8SDavid du Colombier 		bin = Bopen(rec, OREAD);
90*219b2ee8SDavid du Colombier 	}
91*219b2ee8SDavid du Colombier 	if(bin == 0) {
92*219b2ee8SDavid du Colombier 		dss = 61;
93*219b2ee8SDavid du Colombier 		sprint(rec, "/n/juke/dss.61/headers/%s.hhh", rgn);
94*219b2ee8SDavid du Colombier 		bin = Bopen(rec, OREAD);
95*219b2ee8SDavid du Colombier 	}
96*219b2ee8SDavid du Colombier 	if(bin == 0) {
97*219b2ee8SDavid du Colombier 		fprint(2, "cannot open %s\n", rgn);
98*219b2ee8SDavid du Colombier 		exits("file");
99*219b2ee8SDavid du Colombier 	}
100*219b2ee8SDavid du Colombier 	if(debug)
101*219b2ee8SDavid du Colombier 		print("reading %s\n", rec);
102*219b2ee8SDavid du Colombier 	if(dss)
103*219b2ee8SDavid du Colombier 		print("warning: reading %s from jukebox\n, rec");
104*219b2ee8SDavid du Colombier 
105*219b2ee8SDavid du Colombier 	memset(&hd, 0, sizeof(hd));
106*219b2ee8SDavid du Colombier 	j = 0;
107*219b2ee8SDavid du Colombier 	decsn = 0;
108*219b2ee8SDavid du Colombier 	for(;;) {
109*219b2ee8SDavid du Colombier 		if(dss) {
110*219b2ee8SDavid du Colombier 			if(Bread(bin, rec, 80) != 80)
111*219b2ee8SDavid du Colombier 				break;
112*219b2ee8SDavid du Colombier 			rec[80] = 0;
113*219b2ee8SDavid du Colombier 		} else {
114*219b2ee8SDavid du Colombier 			p = Brdline(bin, '\n');
115*219b2ee8SDavid du Colombier 			if(p == 0)
116*219b2ee8SDavid du Colombier 				break;
117*219b2ee8SDavid du Colombier 			p[Blinelen(bin)-1] = 0;
118*219b2ee8SDavid du Colombier 			strcpy(rec, p);
119*219b2ee8SDavid du Colombier 		}
120*219b2ee8SDavid du Colombier 
121*219b2ee8SDavid du Colombier 		p = strchr(rec, '/');
122*219b2ee8SDavid du Colombier 		if(p)
123*219b2ee8SDavid du Colombier 			*p = 0;
124*219b2ee8SDavid du Colombier 		p = strchr(rec, '=');
125*219b2ee8SDavid du Colombier 		if(p == 0)
126*219b2ee8SDavid du Colombier 			continue;
127*219b2ee8SDavid du Colombier 		*p++ = 0;
128*219b2ee8SDavid du Colombier 		if(getword(name, rec) == 0)
129*219b2ee8SDavid du Colombier 			continue;
130*219b2ee8SDavid du Colombier 		if(getword(value, p) == 0)
131*219b2ee8SDavid du Colombier 			continue;
132*219b2ee8SDavid du Colombier 		if(strcmp(name, "pltdecsn") == 0) {
133*219b2ee8SDavid du Colombier 			if(strchr(value, '-'))
134*219b2ee8SDavid du Colombier 				decsn = 1;
135*219b2ee8SDavid du Colombier 			continue;
136*219b2ee8SDavid du Colombier 		}
137*219b2ee8SDavid du Colombier 		for(i=0; i<nelem(Hproto); i++) {
138*219b2ee8SDavid du Colombier 			j++;
139*219b2ee8SDavid du Colombier 			if(j >= nelem(Hproto))
140*219b2ee8SDavid du Colombier 				j = 0;
141*219b2ee8SDavid du Colombier 			if(strcmp(name, Hproto[j].name) == 0) {
142*219b2ee8SDavid du Colombier 				hd.param[Hproto[j].offset] = atof(value);
143*219b2ee8SDavid du Colombier 				break;
144*219b2ee8SDavid du Colombier 			}
145*219b2ee8SDavid du Colombier 		}
146*219b2ee8SDavid du Colombier 	}
147*219b2ee8SDavid du Colombier 	Bterm(bin);
148*219b2ee8SDavid du Colombier 
149*219b2ee8SDavid du Colombier 	hd.param[Ppltra] = RAD(hd.param[Ppltrah]*15 +
150*219b2ee8SDavid du Colombier 		hd.param[Ppltram]/4 + hd.param[Ppltras]/240);
151*219b2ee8SDavid du Colombier 	hd.param[Ppltdec] = RAD(hd.param[Ppltdecd] +
152*219b2ee8SDavid du Colombier 		hd.param[Ppltdecm]/60 + hd.param[Ppltdecs]/3600);
153*219b2ee8SDavid du Colombier 	if(decsn)
154*219b2ee8SDavid du Colombier 		hd.param[Ppltdec] = -hd.param[Ppltdec];
155*219b2ee8SDavid du Colombier 	hd.amdflag = 0;
156*219b2ee8SDavid du Colombier 	for(i=Pamdx1; i<=Pamdx20; i++)
157*219b2ee8SDavid du Colombier 		if(hd.param[i] != 0) {
158*219b2ee8SDavid du Colombier 			hd.amdflag = 1;
159*219b2ee8SDavid du Colombier 			break;
160*219b2ee8SDavid du Colombier 		}
161*219b2ee8SDavid du Colombier 	h = malloc(sizeof(*h));
162*219b2ee8SDavid du Colombier 	*h = hd;
163*219b2ee8SDavid du Colombier 	return h;
164*219b2ee8SDavid du Colombier }
165*219b2ee8SDavid du Colombier 
166*219b2ee8SDavid du Colombier void
167*219b2ee8SDavid du Colombier getplates(void)
168*219b2ee8SDavid du Colombier {
169*219b2ee8SDavid du Colombier 	char rec[81], *q;
170*219b2ee8SDavid du Colombier 	Plate *p;
171*219b2ee8SDavid du Colombier 	Biobuf *bin;
172*219b2ee8SDavid du Colombier 	int c, i, dss;
173*219b2ee8SDavid du Colombier 
174*219b2ee8SDavid du Colombier 	dss = 0;
175*219b2ee8SDavid du Colombier 	sprint(rec, "/lib/sky/dssheaders/lo_comp.lis");
176*219b2ee8SDavid du Colombier 	bin = Bopen(rec, OREAD);
177*219b2ee8SDavid du Colombier 	if(bin == 0) {
178*219b2ee8SDavid du Colombier 		dss = 102;
179*219b2ee8SDavid du Colombier 		sprint(rec, "/n/juke/dss.102/headers/lo_comp.lis");
180*219b2ee8SDavid du Colombier 		bin = Bopen(rec, OREAD);
181*219b2ee8SDavid du Colombier 	}
182*219b2ee8SDavid du Colombier 	if(bin == 0) {
183*219b2ee8SDavid du Colombier 		dss = 61;
184*219b2ee8SDavid du Colombier 		sprint(rec, "/n/juke/dss.61/headers/lo_comp.lis");
185*219b2ee8SDavid du Colombier 		bin = Bopen(rec, OREAD);
186*219b2ee8SDavid du Colombier 	}
187*219b2ee8SDavid du Colombier 	if(bin == 0) {
188*219b2ee8SDavid du Colombier 		fprint(2, "can't open lo_comp.lis; try 9fs juke\n");
189*219b2ee8SDavid du Colombier 		exits("open");
190*219b2ee8SDavid du Colombier 	}
191*219b2ee8SDavid du Colombier 	if(debug)
192*219b2ee8SDavid du Colombier 		print("reading %s\n", rec);
193*219b2ee8SDavid du Colombier 	if(dss)
194*219b2ee8SDavid du Colombier 		print("warning: reading %s from jukebox\n, rec");
195*219b2ee8SDavid du Colombier 	for(nplate=0;;) {
196*219b2ee8SDavid du Colombier 		if(dss) {
197*219b2ee8SDavid du Colombier 			if(Bread(bin, rec, 80) != 80)
198*219b2ee8SDavid du Colombier 				break;
199*219b2ee8SDavid du Colombier 			rec[80] = 0;
200*219b2ee8SDavid du Colombier 		} else {
201*219b2ee8SDavid du Colombier 			q = Brdline(bin, '\n');
202*219b2ee8SDavid du Colombier 			if(q == 0)
203*219b2ee8SDavid du Colombier 				break;
204*219b2ee8SDavid du Colombier 			q[Blinelen(bin)-1] = 0;
205*219b2ee8SDavid du Colombier 			strcpy(rec, q);
206*219b2ee8SDavid du Colombier 		}
207*219b2ee8SDavid du Colombier 		if(rec[0] == '#')
208*219b2ee8SDavid du Colombier 			continue;
209*219b2ee8SDavid du Colombier 		if(nplate < nelem(plate)) {
210*219b2ee8SDavid du Colombier 			p = &plate[nplate];
211*219b2ee8SDavid du Colombier 			memmove(p->rgn, rec+0, 5);
212*219b2ee8SDavid du Colombier 			if(p->rgn[4] == ' ')
213*219b2ee8SDavid du Colombier 				p->rgn[4] = 0;
214*219b2ee8SDavid du Colombier 			for(i=0; c=p->rgn[i]; i++)
215*219b2ee8SDavid du Colombier 				if(c >= 'A' && c <= 'Z')
216*219b2ee8SDavid du Colombier 					p->rgn[i] += 'a'-'A';
217*219b2ee8SDavid du Colombier 			p->ra = RAD(atof(rec+12)*15 +
218*219b2ee8SDavid du Colombier 				atof(rec+15)/4 +
219*219b2ee8SDavid du Colombier 				atof(rec+18)/240);
220*219b2ee8SDavid du Colombier 			p->dec = RAD(atof(rec+26) +
221*219b2ee8SDavid du Colombier 				atof(rec+29)/60 +
222*219b2ee8SDavid du Colombier 				atof(rec+32)/3600);
223*219b2ee8SDavid du Colombier 			if(rec[25] == '-')
224*219b2ee8SDavid du Colombier 				p->dec = -p->dec;
225*219b2ee8SDavid du Colombier 			p->disk = atoi(rec+53);
226*219b2ee8SDavid du Colombier 			if(p->disk == 0)
227*219b2ee8SDavid du Colombier 				continue;
228*219b2ee8SDavid du Colombier 		}
229*219b2ee8SDavid du Colombier 		nplate++;
230*219b2ee8SDavid du Colombier 	}
231*219b2ee8SDavid du Colombier 	Bterm(bin);
232*219b2ee8SDavid du Colombier 
233*219b2ee8SDavid du Colombier 	if(nplate >= nelem(plate))
234*219b2ee8SDavid du Colombier 		fprint(2, "nplate too small %d %d\n", nelem(plate), nplate);
235*219b2ee8SDavid du Colombier 	if(debug)
236*219b2ee8SDavid du Colombier 		print("%d plates\n", nplate);
237*219b2ee8SDavid du Colombier }
238