| #include <u.h> |
| #include <libc.h> |
| #include <bio.h> |
| #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); i++) { |
| j++; |
| if(j >= 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"; |
| } |
| |