/*************************************************************** LST_PROF.C Within a time range, this program produces a list of profile times and positions. It is a minimal conversion from LLGRID.C. Eric Firing Tue 08-09-1988 Thu 01-04-90 Modified to print longitudes within -179 to +180 range (JR) ---------------------------------------------------------------- control file structure: dbname: (e.g. WEP) output: (file name) step_size: (number of profiles to advance) time_ranges: (list of YMDHMS time pairs:) (yy/mm/dd hh:mm:ss) to (yy/mm/dd hh:mm:ss) . . ****************************************************************/ #include "geninc.h" #include "ioserv.h" /* PARAMETER_LIST_ENTRY_TYPE, get_parameters(), ... */ #include "use_db.h" /* check_db*() */ #define TRUE 1 #define FALSE 0 #define sqr(x) (x)*(x) #define good_float(x) ( (x) < ADJ_BADFLOAT ) int main(int argc, char *argv[]) { FILE *fp_out; FILE *fp_cnt; int IERR; YMDHMS_TIME_TYPE start, end, /* for time range */ this_time; /* current profile time */ HUN_LL_TYPE this_position; /*************************************************************** static variables needed for initialization of the parameter array */ static FILE_NAME_TYPE dbname, out_filename; static int STEPS; static PARAMETER_LIST_ENTRY_TYPE parameters[] = { { " dbname:", PATH_FMT, dbname, TYPE_STRING }, { " output:", PATH_FMT, out_filename, TYPE_STRING }, { " step_size:", " %d", &STEPS, TYPE_INT }, { NULL, NULL, NULL, 0 } }; /* parameters[] */ /***************************************************************/ fp_cnt = get_fpcnt(argc, argv); if (get_parameters(fp_cnt, parameters, NULL)) exit(-1); check_dbopen(1, dbname, READ_ONLY, DIR_IN_MEMORY); fp_out = check_fopen(out_filename,"w"); check_error( (fscanf(fp_cnt, " time_ranges:") != 0), "reading time range start"); /* ---> Print the header. */ fprintf(fp_out, "/* Profile times and positions for:\n"); print_parameters(fp_out, parameters, NULL, " "); fprintf(fp_out, "\n*/"); /* ---> Start the loop through time ranges listed in the control file. */ while (get_time_range(fp_cnt, &start, &end) == 1) { check_dbsrch(TIME_SEARCH, (char *)&start); fprintf(fp_out, "\n/* "); print_time_range(fp_out, &start, &end); print_time_range(stdout, &start, &end); fprintf(fp_out, " */"); IERR = 0; /* ---> Start the loop through profiles within the time range. */ while (!IERR && check_time(&this_time, &start, &end)) { fprintf(fp_out, "\n"); write_ymdhms_time(fp_out, &this_time); get_hun_latlon(&this_position); if (this_position.lon == BADLONG) fprintf(fp_out, " /* 1E38 1E38 */"); else { if (this_position.lon > 64800000L) /* 180 degrees */ { /* convert to -179 to 180 range */ this_position.lon -= 129600000L; if (this_position.lon > 64800000L) this_position.lon -= 129600000L; } fprintf(fp_out, " /* %7.3f %8.3f */", to_degrees(this_position.lat), to_degrees(this_position.lon)); } DBMOVE(&STEPS, &IERR); /* IERR is checked at the start of the loop */ } /* end of loop through profiles within a time range */ fprintf(fp_out, "\n\n"); } /* end of loop through time ranges read from control file */ fclose(fp_out); DBCLOSE(&IERR); check_error(IERR, "DBCLOSE"); printf("\nlst_prof completed.\n"); return 0; }