aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/scat/header.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/scat/header.c')
-rw-r--r--src/cmd/scat/header.c247
1 files changed, 247 insertions, 0 deletions
diff --git a/src/cmd/scat/header.c b/src/cmd/scat/header.c
new file mode 100644
index 00000000..519d98f9
--- /dev/null
+++ b/src/cmd/scat/header.c
@@ -0,0 +1,247 @@
+#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";
+}
+