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