#include #include #include #include "sky.h" struct { char name[9]; char offset; } Hproto[] = { "ppo1", Pppo1, "ppo2", Pppo2, "ppo3", Pppo3, "ppo4", Pppo4, "ppo5", Pppo5, "ppo6", Pppo6, "amdx1", Pamdx1, "amdx2", Pamdx2, "amdx3", Pamdx3, "amdx4", Pamdx4, "amdx5", Pamdx5, "amdx6", Pamdx6, "amdx7", Pamdx7, "amdx8", Pamdx8, "amdx9", Pamdx9, "amdx10", Pamdx10, "amdx11", Pamdx11, "amdx12", Pamdx12, "amdx13", Pamdx13, "amdx14", Pamdx14, "amdx15", Pamdx15, "amdx16", Pamdx16, "amdx17", Pamdx17, "amdx18", Pamdx18, "amdx19", Pamdx19, "amdx20", Pamdx20, "amdy1", Pamdy1, "amdy2", Pamdy2, "amdy3", Pamdy3, "amdy4", Pamdy4, "amdy5", Pamdy5, "amdy6", Pamdy6, "amdy7", Pamdy7, "amdy8", Pamdy8, "amdy9", Pamdy9, "amdy10", Pamdy10, "amdy11", Pamdy11, "amdy12", Pamdy12, "amdy13", Pamdy13, "amdy14", Pamdy14, "amdy15", Pamdy15, "amdy16", Pamdy16, "amdy17", Pamdy17, "amdy18", Pamdy18, "amdy19", Pamdy19, "amdy20", Pamdy20, "pltscale", Ppltscale, "xpixelsz", Pxpixelsz, "ypixelsz", Pypixelsz, "pltrah", Ppltrah, "pltram", Ppltram, "pltras", Ppltras, "pltdecd", Ppltdecd, "pltdecm", Ppltdecm, "pltdecs", Ppltdecs, }; Header* getheader(char *rgn) { char rec[81], name[81], value[81]; char *p; Biobuf *bin; Header hd, *h; int i, j, decsn, dss; dss = 0; sprint(rec, "/lib/sky/dssheaders/%s.hhh", rgn); bin = Bopen(unsharp(rec), OREAD); /* if(bin == 0) { dss = 102; sprint(rec, "/n/juke/dss/dss.102/headers/%s.hhh", rgn); bin = Bopen(rec, OREAD); } if(bin == 0) { dss = 61; sprint(rec, "/n/juke/dss/dss.061/headers/%s.hhh", rgn); bin = Bopen(rec, OREAD); } */ if(bin == 0) { fprint(2, "cannot open %s\n", rgn); exits("file"); } if(debug) Bprint(&bout, "reading %s\n", rec); if(dss) Bprint(&bout, "warning: reading %s from jukebox\n", rec); memset(&hd, 0, sizeof(hd)); j = 0; decsn = 0; for(;;) { if(dss) { if(Bread(bin, rec, 80) != 80) break; rec[80] = 0; } else { p = Brdline(bin, '\n'); if(p == 0) break; p[Blinelen(bin)-1] = 0; strcpy(rec, p); } p = strchr(rec, '/'); if(p) *p = 0; p = strchr(rec, '='); if(p == 0) continue; *p++ = 0; if(getword(name, rec) == 0) continue; if(getword(value, p) == 0) continue; if(strcmp(name, "pltdecsn") == 0) { if(strchr(value, '-')) decsn = 1; continue; } for(i=0; i= nelem(Hproto)) j = 0; if(strcmp(name, Hproto[j].name) == 0) { hd.param[(uchar)Hproto[j].offset] = atof(value); break; } } } Bterm(bin); hd.param[Ppltra] = RAD(hd.param[Ppltrah]*15 + hd.param[Ppltram]/4 + hd.param[Ppltras]/240); hd.param[Ppltdec] = RAD(hd.param[Ppltdecd] + hd.param[Ppltdecm]/60 + hd.param[Ppltdecs]/3600); if(decsn) hd.param[Ppltdec] = -hd.param[Ppltdec]; hd.amdflag = 0; for(i=Pamdx1; i<=Pamdx20; i++) if(hd.param[i] != 0) { hd.amdflag = 1; break; } h = malloc(sizeof(*h)); *h = hd; return h; } void getplates(void) { char rec[81], *q; Plate *p; Biobuf *bin; int c, i, dss; dss = 0; sprint(rec, "/lib/sky/dssheaders/lo_comp.lis"); bin = Bopen(rec, OREAD); if(bin == 0) { dss = 102; sprint(rec, "%s/headers/lo_comp.lis", dssmount(dss)); bin = Bopen(rec, OREAD); } if(bin == 0) { dss = 61; sprint(rec, "%s/headers/lo_comp.lis", dssmount(dss)); bin = Bopen(rec, OREAD); } if(bin == 0) { fprint(2, "can't open lo_comp.lis; try 9fs juke\n"); exits("open"); } if(debug) Bprint(&bout, "reading %s\n", rec); if(dss) Bprint(&bout, "warning: reading %s from jukebox\n", rec); for(nplate=0;;) { if(dss) { if(Bread(bin, rec, 80) != 80) break; rec[80] = 0; } else { q = Brdline(bin, '\n'); if(q == 0) break; q[Blinelen(bin)-1] = 0; strcpy(rec, q); } if(rec[0] == '#') continue; if(nplate < nelem(plate)) { p = &plate[nplate]; memmove(p->rgn, rec+0, 5); if(p->rgn[4] == ' ') p->rgn[4] = 0; for(i=0; c=p->rgn[i]; i++) if(c >= 'A' && c <= 'Z') p->rgn[i] += 'a'-'A'; p->ra = RAD(atof(rec+12)*15 + atof(rec+15)/4 + atof(rec+18)/240); p->dec = RAD(atof(rec+26) + atof(rec+29)/60 + atof(rec+32)/3600); if(rec[25] == '-') p->dec = -p->dec; p->disk = atoi(rec+53); if(p->disk == 0) continue; } nplate++; } Bterm(bin); if(nplate >= nelem(plate)) fprint(2, "nplate too small %d %d\n", nelem(plate), nplate); if(debug) Bprint(&bout, "%d plates\n", nplate); } char* dssmount(int dskno) { Bprint(&bout, "not mounting dss\n"); return "/n/dss"; }