plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

header.c (4577B)


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