static char *findInArcList(char *acquisition_time, char *arclist) { char line[1024]; char *odr = NULL; // ODR files will be in the same directory as arclist char *dir = get_dirname(arclist); FILE *fp = FOPEN(arclist, "r"); if (!fp) { asfPrintError("Failed to open: %s\n", arclist); } ymd_date ymd; hms_time hms; parse_DMYdate(acquisition_time, &ymd, &hms); // YYYYMMDD as an integer int scene_time = ymd.year * 10000 + ymd.month * 100 + ymd.day; while (fgets(line, 1024, fp) != NULL) { if (isdigit(line[0])) { int arc, start, end, junk, n; n = sscanf(line, "%d %d %d:%d - %d %d:%d", &arc, &start, &junk, &junk, &end, &junk, &junk); start = arclist_time_fudge(start); end = arclist_time_fudge(end); if (n == 7) { if (scene_time > start && scene_time < end) { odr = MALLOC(sizeof(char)*(strlen(dir)+64)); sprintf(odr, "%sODR.%03d", dir, arc); break; } } } } FCLOSE(fp); if (!odr) odr = STRDUP(""); FREE(dir); return odr; }
static void sort_input_preference(char **infiles, int n_inputs, char *preference) { int ii, kk; double lat[n_inputs], lon[n_inputs], sec[n_inputs], sorter[n_inputs]; ymd_date date; hms_time time; julian_date jd; char **tmpfiles = (char **) MALLOC(sizeof(char *)*n_inputs); asfPrintStatus("Sort input images for preference: %s\n\n", preference); // Read in metadata for (ii=0; ii<n_inputs; ii++) { tmpfiles[ii] = (char *) MALLOC(sizeof(char)*50); meta_parameters *meta = meta_read(infiles[ii]); lat[ii] = meta->general->center_latitude; lon[ii] = meta->general->center_longitude; parse_DMYdate(meta->general->acquisition_date, &date, &time); date_ymd2jd(&date, &jd); sec[ii] = date2sec(&jd, &time); if (strcmp_case(preference, "north") == 0 || strcmp_case(preference, "south") == 0) sorter[ii] = lat[ii]; else if (strcmp_case(preference, "west") == 0 || strcmp_case(preference, "east") == 0) sorter[ii] = lon[ii]; else if (strcmp_case(preference, "old") == 0 || strcmp_case(preference, "new") == 0) sorter[ii] = sec[ii]; meta_free(meta); } // Get on with the sorting business if (strcmp_case(preference, "south") == 0 || strcmp_case(preference, "west") == 0 || strcmp_case(preference, "old") == 0) qsort(sorter, n_inputs, sizeof(double), compare_big_doubles); else qsort(sorter, n_inputs, sizeof(double), compare_small_doubles); // Apply the order to input file list for (ii=0; ii<n_inputs; ii++) { for (kk=0; kk<n_inputs; kk++) { if ((strcmp_case(preference, "north") == 0 || strcmp_case(preference, "south") == 0) && sorter[ii] == lat[kk]) sprintf(tmpfiles[ii], "%s", infiles[kk]); else if ((strcmp_case(preference, "east") == 0 || strcmp_case(preference, "west") == 0) && sorter[ii] == lon[kk]) sprintf(tmpfiles[ii], "%s", infiles[kk]); else if ((strcmp_case(preference, "old") == 0 || strcmp_case(preference, "new") == 0) && sorter[ii] == sec[kk]) sprintf(tmpfiles[ii], "%s", infiles[kk]); } } for (ii=0; ii<n_inputs; ii++) { sprintf(infiles[ii], "%s", tmpfiles[ii]); //printf("Sorted file[%d]: %s\n", ii+1, infiles[ii]); } // Clean up for (ii=0; ii<n_inputs; ii++) FREE(tmpfiles[ii]); FREE(tmpfiles); }