/************/ /* drange.c */ /**************************************************/ /* to compile: gcc drange.c -o drange -lm */ /**************************************************/ /* Usage: drange path */ /* path : filename of input data */ /**************************************************/ #include #include #include #include #define LMX 6001 #define LMY 6001 main(int argc, char *argv[]) { int n=0, i, j, nc, ncc, iorg, korg, ispa, ispb; int ixs, iys, mszx, mszy, nmx, nmy; float xs, ys, vv, vnul, vsum, vmin, vmax, vdev, *vm, *pv; char buf[81], area[9], nc1[5], nc2[5], drvc; FILE *fin; strcpy(buf, "/pub/AMXS/data/"); strcat(buf, argv[1]); if ((fin=fopen(buf,"r")) == NULL) { printf("drange: input-file open fail\n"); exit(1); } while (1) { if (fgets(buf,81,fin) == NULL) { fclose(fin); printf("drange: no data found\n"); exit(1); } if (buf[0] != '#') break; } strncpy(area, buf, 8); area[8] = '\0'; strncpy(nc1, &buf[8], 4); nc1[4] = '\0'; strncpy(nc2, &buf[12], 4); nc2[4] = '\0'; sscanf(&buf[16], "%d %d %d %d", &iorg,&korg,&ispa,&ispb); if (strcmp(nc2," ") == 0) { ncc = 0; sscanf(nc1, "%d", &ncc); if ((ncc<0) || (ncc>=400)) ncc = -1; else if (ncc<200) ncc += 800; else ncc -= 200; } else { ncc = 0; sscanf(nc2, "%d", &ncc); } nc = ((ncc<800)? ncc: (ncc-800)); if ((nc>=1) && (nc<=60)) { iorg = 0; korg = (nc-30)*360 - 180; } else if (nc == 61) { iorg = +5400; korg = 0; } else if (nc == 62) { iorg = -5400; korg = 0; } fgets(buf,81,fin); sscanf(buf, "%d %d %d %d %d %d %f", &ixs,&iys,&mszx,&mszy,&nmx,&nmy,&vnul); xs = (float)ixs / 1000.; ys = (float)iys / 1000.; if ((nmx>LMX) || (nmy>LMY)) { fclose(fin); printf("drange: too large array size\n"); exit(1); } if ((nmx<2) || (nmy<2)) { fclose(fin); printf("drange: illegal array size\n"); exit(1); } if ((vm=(float *)malloc(sizeof(float)*nmx*nmy)) == NULL) { fclose(fin); printf("drange: malloc (indata) fail\n"); exit(1); } for (pv=vm,j=0; jvmax) vmax = vv; } } } } fclose(fin); vsum /= (float)n; vdev = 0.; for (pv=vm,j=0; j