int main(int argc, char **argv) { handle_common_asf_args(&argc, &argv, "ASF CEOS Metadata Viewer"); gchar *glade_xml_file; gtk_init(&argc, &argv); // glade_xml_file = (gchar *) find_in_path("mdv.glade"); glade_xml_file = (gchar *) find_in_share("mdv.glade"); glade_xml = glade_xml_new(glade_xml_file, NULL, NULL); g_free(glade_xml_file); set_app_title(); set_font(); if (argc > 1) add_file(argv[1]); glade_xml_signal_autoconnect(glade_xml); gtk_main (); exit (EXIT_SUCCESS); }
int main(int argc, char **argv) { gtk_init(&argc, &argv); gchar *glade_xml_file = (gchar *) find_in_share("proj2proj.glade"); printf("Found proj2proj.glade: %s\n", glade_xml_file); glade_xml = glade_xml_new(glade_xml_file, NULL, NULL); free(glade_xml_file); set_font(); glade_xml_signal_autoconnect(glade_xml); // default to lat/lon -> UTM GtkWidget *w = get_widget_checked("source_projection_option_menu"); set_combo_box_item(w, 5); geocode_options_changed(TRUE); geocode_options_changed(FALSE); if (argc > 1) { put_file_in_textview(argv[1], "source_textview"); forward(); } set_toolbar_images(); gtk_main (); exit (EXIT_SUCCESS); }
void add_delta_shapes(meta_parameters *meta) { const char *file = "corner_reflectors.csv"; char *crf = find_in_share(file); add_generic_csv(meta,crf,TRUE); free(crf); }
void img_loc(gchar *loc, gchar* file) { gchar * tmp = find_in_share(file); if (tmp) { strcpy(loc, tmp); g_free(tmp); } else { strcpy(loc, file); } }
// try to find a program we can use to view the generated csv files const char * detect_csv_assoc() { static char *csv_app = NULL; if (!csv_app) { char *csv_file = find_in_share("asf_view_cfg.csv"); #ifdef win32 // On Windows, use the file association table to find out what we // can do with csv files. char path[1024]; int ret = (int)FindExecutable((LPCTSTR)csv_file, (LPCTSTR)get_asf_share_dir(), (LPTSTR)path); if (ret > 32 && strlen(path) > 0) { csv_app = escapify(path); printf("Path to CSV Application: %s\n", csv_app); } else { if (ret==SE_ERR_FNF) printf("File not found: %s\n", csv_file); else if (ret==SE_ERR_NOASSOC) printf("No association for: %s\n", csv_file); else if (ret==SE_ERR_OOM) printf("Out of resources.\n"); else printf("Unknown error! (return value: %d)\n", ret); csv_app = STRDUP("notepad.exe"); printf("CSV Application not found -- using notepad.\n"); } FREE(csv_file); #else // On Linux, get the app from the configuration file FILE *cfg = fopen(csv_file, "r"); if (cfg) { char tmp[1024]; while (fgets(tmp, 1024, cfg) != NULL) { if (strncmp_case(tmp, "CSV,", 4) == 0) { csv_app = trim_whitespace(tmp+4); printf("CSV Application from config file: %s\n", csv_app); } } if (!csv_app) csv_app = STRDUP(""); fclose(cfg); } else { printf("Failed to open %s: %s\n", csv_file, strerror(errno)); csv_app = STRDUP(""); printf("CSV Application not found.\n"); } #endif } return csv_app; }
/* danger: returns pointer to static data!! */ static const char * imgloc(char * file) { static char loc[1024]; gchar * tmp = find_in_share(file); if (tmp) { strcpy(loc, tmp); g_free(tmp); } else { strcpy(loc, file); } return loc; }
static char *get_arclist_from_settings(char *sensor) { if (strcmp_case(sensor, "ERS-1") == 0 || strcmp_case(sensor, "ERS-2") == 0) { char *settings_file = find_in_share("mapready_settings.cfg"); if (!settings_file) { asfPrintWarning("Could not find mapready_settings.cfg"); return NULL; } char match_str[256]; char *arclist = NULL; sprintf(match_str, "precise orbits %s", sensor); FILE *fSettings = FOPEN(settings_file, "r"); if (fSettings) { char line[1024]; while (fgets(line, 1024, fSettings) != NULL) { if (strncmp(line, match_str, strlen(match_str)) == 0) { arclist = read_str(line, match_str); if (strcmp_case(arclist, "<location of arclist file>") == 0) strcpy(arclist, ""); break; } } FCLOSE(fSettings); if (!arclist || strlen(arclist) == 0) { // not an error, user probably does not have precision state vectors asfPrintStatus("No precise orbits found in mapready_settings.cfg for %s\n", sensor); } FREE(settings_file); return arclist; } else { asfPrintError("Could not open mapready_settings.cfg"); return NULL; } } else { asfPrintError("Internal error, bad sensor: %s\n", sensor); return NULL; } // not reached return NULL; }
int main(int argc, char **argv) { gtk_init(&argc, &argv); char *glade_xml_file = find_in_share("c2v.glade"); if (!glade_xml_file) { printf("Couldn't find the glade file: c2v.glade. " "Aborting...\n"); exit(1); } glade_xml = glade_xml_new(glade_xml_file, NULL, NULL); free(glade_xml_file); set_font(); set_title(); GtkWidget *win = get_widget_checked("c2v_window"); GError *err=NULL; int ok=gtk_window_set_icon_from_file(GTK_WINDOW(win), imgloc("c2v.png"),&err); if (!ok) printf("Error loading icon: %s\n", err->message); if (argc>1) { select_defaults_by_file_type(argv[1],TRUE); add_input_file(argv[1]); int output_format = get_combo_box_item("output_format_combobox"); process(); // if we opened up an external application, we can just exit now // otherwise we will stay open if (output_format == OUTPUT_KML || output_format == OUTPUT_ALOS_CSV) exit(EXIT_SUCCESS); } else { set_combo_box_item("input_format_combobox", INPUT_AUTO); set_combo_box_item("output_format_combobox", OUTPUT_KML); } glade_xml_signal_autoconnect(glade_xml); gtk_main (); exit (EXIT_SUCCESS); }
int main(int argc, char **argv) { gchar *glade_xml_file; gtk_init(&argc, &argv); glade_xml_file = (gchar *) find_in_share("preview.glade"); glade_xml = glade_xml_new(glade_xml_file, NULL, NULL); g_free(glade_xml_file); set_app_title(); set_font(); if (argc > 1) add_file(argv[1]); glade_xml_signal_autoconnect(glade_xml); gtk_main (); exit (EXIT_SUCCESS); }
int main(int argc, char **argv) { GtkWidget *widget; gchar *glade_xml_file; gtk_init(&argc, &argv); set_font(); get_asf_share_dir_with_argv0(argv[0]); set_tiff_warning_handler(); asfPrintStatus("\nASF MapReady:\n"); const char *share_dir = get_asf_share_dir(); if (!share_dir) // this actually should never happen with the current implementation // of get_asf_share_dir() -- always sets the share dir to something // even if it is a bad guess... in which case the next check will fail asfPrintError("Could not find the ASF share directory!\n"); glade_xml_file = (gchar *)find_in_share("mapready.glade"); if (!glade_xml_file) asfPrintError("Could not find the mapready.glade file!\n" "It should be in the share files directory, here:\n" " %s\n", share_dir); glade_xml = glade_xml_new(glade_xml_file, NULL, NULL); if (!glade_xml) asfPrintError("Could not load the mapready.glade file!\n" "This file may be corrupt. mapready.glade was found in:\n" " %s\n", share_dir); g_free(glade_xml_file); asfPrintStatus("Using share files directory: %s\n\n", share_dir); /* thumbnails supported in GTK 2.4 or greater */ #ifdef G_THREADS_ENABLED use_thumbnails = gtk_major_version >= 2 && gtk_minor_version >= 4; #else use_thumbnails = FALSE; #endif #ifdef win32 // On windows, ensure that our installed sh.exe is the one that is found, // by severely restricting the path. char pathenv[1024]; sprintf(pathenv, "PATH=%s", get_asf_bin_dir()); putenv(pathenv); #endif if (!use_thumbnails) { printf("GTK Version < 2.4 -- output thumbnails disabled.\n"); } else { // We will want to load thumbnails in other threads. if ( !g_thread_supported () ) { g_thread_init (NULL); } } /* allow FOPEN, FREAD, FWRITE to fail without aborting */ caplib_behavior_on_error = BEHAVIOR_ON_ERROR_CONTINUE; /* add version number to window title, request a default size */ char gtitle [256]; sprintf (gtitle, "ASF MapReady: Version %s", MAPREADY_VERSION_STRING); widget = get_widget_checked("asf_convert"); gtk_window_set_title(GTK_WINDOW(widget), gtitle); // commenting this out - now supported within glade //gtk_window_resize(GTK_WINDOW(widget), 1000, 700); /* select defaults for dropdowns & buttons & labeling */ widget = get_widget_checked("scaling_method_combobox"); set_combo_box_item(widget, SCALING_METHOD_SIGMA); widget = get_widget_checked("import_checkbutton"); gtk_widget_set_sensitive(widget, FALSE); widget = get_widget_checked("input_data_type_combobox"); set_combo_box_item(widget, INPUT_TYPE_AMP); widget = get_widget_checked("resample_option_menu"); set_combo_box_item(widget, RESAMPLE_BILINEAR); // Populate the colormap drop-downs on both the import tab and in the // browse dialog populate_polsarpro_classification_optionmenu(); widget = get_widget_checked("browse_select_colormap_optionmenu"); gtk_option_menu_set_history(GTK_OPTION_MENU(widget), 0); widget = get_widget_checked("output_format_combobox"); set_combo_box_item(widget, OUTPUT_FORMAT_JPEG); widget = get_widget_checked("geocode_checkbutton"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE); geocode_options_changed(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE); widget = get_widget_checked("about_dialog_copyright_label"); gtk_label_set_text(GTK_LABEL(widget), ASF_COPYRIGHT_STRING); // Hide latitude selection stuff until we start supporting // swath products (level 0) again widget = get_widget_checked("latitude_checkbutton"); gtk_widget_hide(widget); widget = get_widget_checked("latitude_low_label"); gtk_widget_hide(widget); widget = get_widget_checked("latitude_hi_label"); gtk_widget_hide(widget); widget = get_widget_checked("latitude_low_entry"); gtk_widget_hide(widget); widget = get_widget_checked("latitude_hi_entry"); gtk_widget_hide(widget); // For now, do not allow manual offsets show_widget("hbox_tc_matching", FALSE); // This option is deprecated -- we always apply the fix now // and don't give the user the option of turning it off. Probably // we can just delete all code associated with it, but for now we // just turn it on, and hide it. set_checked("apply_metadata_fix_checkbutton", TRUE); widget = get_widget_checked("apply_metadata_fix_checkbutton"); gtk_widget_hide(widget); // Muck with the fonts in the About dialog widget = get_widget_checked("about_dialog_mapready_label"); gchar *str = gtitle; gchar *text; PangoAttrList *attrs; sprintf(gtitle, "\n<b>ASF MapReady</b>\n" "<i>Remote Sensing Toolkit</i>\n" "ver. %s", MAPREADY_VERSION_STRING); if (strlen(SVN_REV)>0) sprintf(gtitle, "%s (build %s)", gtitle, SVN_REV); else strcat(gtitle, " (custom build)"); pango_parse_markup(str, -1, 0, &attrs, &text, NULL, NULL); gtk_label_set_attributes(GTK_LABEL(widget), attrs); gtk_label_set_text(GTK_LABEL(widget), text); PangoFontDescription *font_desc = pango_font_description_from_string("Sans 12"); gtk_widget_modify_font(widget, font_desc); // Muck with the "Select Processing Steps" label widget = get_widget_checked("select_processing_steps_label"); str = gtitle; sprintf(gtitle, "<b><i> Select Processing Steps:</i></b>"); pango_parse_markup(str, -1, 0, &attrs, &text, NULL, NULL); gtk_label_set_attributes(GTK_LABEL(widget), attrs); gtk_label_set_text(GTK_LABEL(widget), text); font_desc = pango_font_description_from_string("Sans 12"); gtk_widget_modify_font(widget, font_desc); /* fire handlers for hiding/showing stuff */ output_format_combobox_changed(); input_data_type_changed(); geocode_options_changed(); load_external_commands(); external_settings_changed(); set_toolbar_images(); show_execute_button(TRUE); /* build columns in the files section */ show_full_paths = FALSE; // Set before setup_files_list(), default to FALSE widget = get_widget_checked("show_full_path_names_checkbutton"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE); setup_files_list(); /* allow multiple selects */ widget = get_widget_checked("input_file_selection"); gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(widget), TRUE); /* drag-n-drop setup */ setup_dnd(); /* right-click menu setup */ setup_popup_menu(); /* bands dropdown setup*/ setup_band_comboboxes(); current_naming_scheme = naming_scheme_default(); /* set initial vpanel setting */ //widget = get_widget_checked("vertical_pane"); //gtk_paned_set_position(GTK_PANED(widget), 240); /* Connect signal handlers. */ glade_xml_signal_autoconnect (glade_xml); /* initial flag settings */ processing = FALSE; settings_on_execute = NULL; /* explicit call to the function that refreshes the "summary" */ /* section when options are changed, so get the settings */ /* initially in there */ input_data_formats_changed(); input_data_type_combobox_changed(); default_to_terrcorr_on(); default_to_keep_temp(); terrcorr_options_changed(); init_browse_format_combobox(); /* For some reason, it did not work to set this via glade */ /* So, we have to select our default faraday rotation style here */ rb_select("rb_fr_global", TRUE); polarimetry_settings_changed(); /* put files on the command-line into the files section */ populate_files_list(argc, argv); /* set up the rgb stuff on the export tab */ rgb_combo_box_setup(); /* enters the main GTK loop */ gtk_main (); /* clean up, application has been closed */ if (settings_on_execute) settings_delete(settings_on_execute); if (output_directory) g_free(output_directory); if (current_naming_scheme) naming_scheme_delete(current_naming_scheme); release_predefined_projections(); exit (EXIT_SUCCESS); }
void settings_save(Settings *s) { char *sav_file = find_in_share("req_settings.txt"); if (sav_file && fileExists(sav_file)) { // update an existing file printf("Found settings file: %s\n", sav_file); char *new_sav_txt = MALLOC(sizeof(char)*1024); strcpy(new_sav_txt, ""); int i,len=2048; int wrote_csv=FALSE, wrote_output=FALSE, wrote_obs_req_num=FALSE, wrote_obs_req_id_aadn=FALSE, wrote_obs_req_id_tdrs=FALSE, wrote_acq_req_num=FALSE, wrote_odl0_seq_num=FALSE, wrote_odl0_req_id=FALSE, wrote_station_code=FALSE; int wrote_acq_req_id[MAX_STATIONS]; int wrote_acq_req_stn_code[MAX_STATIONS]; for (i=0; i<MAX_STATIONS; ++i) { wrote_acq_req_id[i] = FALSE; wrote_acq_req_stn_code[i] = FALSE; } FILE *fp = FOPEN(sav_file, "r"); if (!fp) { message_box("Error opening output file!\n"); return; } char buf[1024]; while (fgets(buf, 1024, fp) != NULL) { if (s->csv_dir && matches(buf, csv_dir_key)) { add_to_text(&new_sav_txt, &len, "%s = %s\r\n", csv_dir_key, s->csv_dir); wrote_csv = TRUE; } else if (s->output_dir && matches(buf, output_dir_key)) { add_to_text(&new_sav_txt, &len, "%s = %s\r\n", output_dir_key, s->output_dir); wrote_output = TRUE; } else if (matches(buf, obs_req_num_key)) { add_to_text(&new_sav_txt, &len, "%s = %d\r\n", obs_req_num_key, s->obs_req_num); wrote_obs_req_num = TRUE; } else if (matches(buf, obs_req_id_aadn_key)) { add_to_text(&new_sav_txt, &len, "%s = %d\r\n", obs_req_id_aadn_key, s->obs_req_id_aadn); wrote_obs_req_id_aadn = TRUE; } else if (matches(buf, obs_req_id_tdrs_key)) { add_to_text(&new_sav_txt, &len, "%s = %d\r\n", obs_req_id_tdrs_key, s->obs_req_id_tdrs); wrote_obs_req_id_tdrs = TRUE; } else if (matches(buf, acq_req_num_key)) { add_to_text(&new_sav_txt, &len, "%s = %d\r\n", acq_req_num_key, s->acq_req_num); wrote_acq_req_num = TRUE; } else if (matches(buf, odl0_seq_num_key)) { add_to_text(&new_sav_txt, &len, "%s = %d\r\n", odl0_seq_num_key, s->odl0_seq_num); wrote_odl0_seq_num = TRUE; } else if (matches(buf, odl0_req_id_key)) { add_to_text(&new_sav_txt, &len, "%s = %d\r\n", odl0_req_id_key, s->odl0_req_id); wrote_odl0_req_id = TRUE; } else if (s->station_code && matches(buf, station_code_key)) { add_to_text(&new_sav_txt, &len, "%s = %s\r\n", station_code_key, s->station_code); wrote_station_code = TRUE; } else { int found=0; for (i=0; i<MAX_STATIONS; ++i) { char id_key[128], stn_code_key[128]; snprintf(id_key, 128, "%s %d", acq_req_id_key, i+1); snprintf(stn_code_key, 128, "%s %d", acq_req_stn_code_key, i+1); if (matches(buf, id_key)) { found = TRUE; add_to_text(&new_sav_txt, &len, "%s = %s\r\n", stn_code_key, s->acq_req_stn_codes[i]); wrote_acq_req_stn_code[i] = TRUE; } else if (matches(buf, stn_code_key)) { found = TRUE; add_to_text(&new_sav_txt, &len, "%s = %d\r\n", id_key, s->acq_req_ids[i]); wrote_acq_req_id[i] = TRUE; } } if (!found) add_to_text(&new_sav_txt, &len, "%s", buf); } } FCLOSE(fp); if (s->csv_dir && !wrote_csv) add_to_text(&new_sav_txt, &len, "%s = %s\r\n", csv_dir_key, s->csv_dir); if (s->output_dir && !wrote_output) add_to_text(&new_sav_txt, &len, "%s = %s\r\n", output_dir_key, s->output_dir); if (!wrote_obs_req_num && s->obs_req_num > 1) add_to_text(&new_sav_txt, &len, "%s = %d\r\n", obs_req_num_key, s->obs_req_num); if (!wrote_obs_req_id_aadn && s->obs_req_id_aadn > 1) add_to_text(&new_sav_txt, &len, "%s = %d\r\n", obs_req_id_aadn_key, s->obs_req_id_aadn); if (!wrote_obs_req_id_tdrs && s->obs_req_id_tdrs > 1) add_to_text(&new_sav_txt, &len, "%s = %d\r\n", obs_req_id_tdrs_key, s->obs_req_id_tdrs); if (!wrote_acq_req_num && s->acq_req_num > 1) add_to_text(&new_sav_txt, &len, "%s = %d\r\n", acq_req_num_key, s->acq_req_num); if (!wrote_odl0_seq_num && s->odl0_seq_num > 1) add_to_text(&new_sav_txt, &len, "%s = %d\r\n", odl0_seq_num_key, s->odl0_seq_num); if (!wrote_odl0_req_id && s->odl0_req_id > 1) add_to_text(&new_sav_txt, &len, "%s = %d\r\n", s->odl0_req_id); if (s->station_code && !wrote_station_code) add_to_text(&new_sav_txt, &len, "%s = %s\r\n", station_code_key, s->station_code); for (i=0; i<MAX_STATIONS; ++i) { if (!wrote_acq_req_id[i] && s->acq_req_ids[i] > 0 && !wrote_acq_req_stn_code[i] && strlen(s->acq_req_stn_codes[i]) > 0) { char id_key[128], stn_code_key[128]; snprintf(id_key, 128, "%s %d", acq_req_id_key, i+1); snprintf(stn_code_key, 128, "%s %d", acq_req_stn_code_key, i+1); add_to_text(&new_sav_txt, &len, "%s = %d\r\n", stn_code_key, s->acq_req_stn_codes[i]); add_to_text(&new_sav_txt, &len, "%s = %d\r\n", id_key, s->acq_req_ids[i]); } } fp = FOPEN(sav_file, "w"); fprintf(fp, "%s", new_sav_txt); FCLOSE(fp); } else { sav_file = MALLOC(sizeof(char)*(strlen(get_asf_share_dir())+32)); sprintf(sav_file, "%s/req_settings.txt", get_asf_share_dir()); // write a new file FILE *fp = FOPEN(sav_file, "w"); if (s->csv_dir) fprintf(fp, "%s = %s\r\n", csv_dir_key, s->csv_dir); if (s->output_dir) fprintf(fp, "%s = %s\r\n", output_dir_key, s->output_dir); fprintf(fp, "%s = %d\r\n", obs_req_num_key, s->obs_req_num); fprintf(fp, "%s = %d\r\n", obs_req_id_aadn_key, s->obs_req_id_aadn); fprintf(fp, "%s = %d\r\n", obs_req_id_tdrs_key, s->obs_req_id_tdrs); fprintf(fp, "%s = %d\r\n", acq_req_num_key, s->acq_req_num); fprintf(fp, "%s = %d\r\n", odl0_seq_num_key, s->odl0_seq_num); fprintf(fp, "%s = %d\r\n", odl0_req_id_key, s->odl0_req_id); int i; for (i=0; i<MAX_STATIONS; ++i) { if (s->acq_req_ids[i] > 0 && strlen(s->acq_req_stn_codes[i]) > 0) { char id_key[128], stn_code_key[128]; snprintf(stn_code_key, 128, "%s %d", acq_req_stn_code_key, i+1); fprintf(fp, "%s = %s\r\n", stn_code_key, s->acq_req_stn_codes[i]); snprintf(id_key, 128, "%s %d", acq_req_id_key, i+1); fprintf(fp, "%s = %d\r\n", id_key, s->acq_req_ids[i]); } } if (s->station_code) fprintf(fp, "%s = %s\r\n", station_code_key, s->station_code); FCLOSE(fp); } free(sav_file); }
Settings *settings_load() { int i; Settings *s = settings_new(); char *sav_file = find_in_share("req_settings.txt"); if (fileExists(sav_file)) { FILE *fp = FOPEN(sav_file, "r"); if (fp) { char buf[1024]; while (fgets(buf, 1024, fp) != NULL) { read_string_param(buf, csv_dir_key, &s->csv_dir); read_string_param(buf, output_dir_key, &s->output_dir); read_int_param(buf, obs_req_num_key, &s->obs_req_num); read_int_param(buf, obs_req_id_aadn_key, &s->obs_req_id_aadn); read_int_param(buf, obs_req_id_tdrs_key, &s->obs_req_id_tdrs); read_int_param(buf, acq_req_num_key, &s->acq_req_num); read_int_param(buf, odl0_seq_num_key, &s->odl0_seq_num); read_int_param(buf, odl0_req_id_key, &s->odl0_req_id); read_string_param(buf, station_code_key, &s->station_code); for (i=0; i<MAX_STATIONS; ++i) { char id_key[128], stn_code_key[128]; snprintf(id_key, 128, "%s %d", acq_req_id_key, i+1); read_int_param(buf, id_key, &s->acq_req_ids[i]); snprintf(stn_code_key, 128, "%s %d", acq_req_stn_code_key, i+1); char *tmp=NULL; read_string_param(buf, stn_code_key, &tmp); if (tmp) { if (strlen(tmp) > 4) tmp[4] = '\0'; strcpy(s->acq_req_stn_codes[i], tmp); free(tmp); } } } FCLOSE(fp); } else { printf("Failed to open settings file: %s\n", sav_file); } } else { printf("No settings file found.\n"); } FREE(sav_file); if (s->obs_req_num < 1) s->obs_req_num = 1; if (s->obs_req_id_aadn < 1) s->obs_req_id_aadn = 1; if (s->obs_req_id_tdrs < 1) s->obs_req_id_tdrs = 1; if (s->acq_req_num < 1) s->acq_req_num = 1; for (i=0; i<MAX_STATIONS; ++i) if (s->acq_req_ids[i] < 1) s->acq_req_ids[i] = 1; if (s->odl0_seq_num < 1) s->odl0_seq_num = 1; if (s->odl0_req_id < 1) s->odl0_req_id = 1; if (!s->station_code) s->station_code = STRDUP("AADN"); #ifdef DEBUG_SETTINGS settings_print(s); #endif return s; }
int main(int argc, char **argv) { if (detect_flag_options(argc, argv, "-help", "--help", NULL)) help(); char band[512], lut[512], mask_file_name[512]; strcpy(band, ""); strcpy(mask_file_name, ""); int band_specified = extract_string_options(&argc, &argv, band, "-band", "--band", "-b", NULL); int lut_specified = extract_string_options(&argc, &argv, lut, "-colormap", "--colormap", "-lut", "--lut", NULL); int planner_mode = extract_flag_options(&argc, &argv, "-plan", "--plan", NULL); int mask_specified = extract_string_options(&argc, &argv, mask_file_name, "-mask", "--mask", "--layover-mask", "--layover-mask", NULL); generic_specified = extract_flag_options(&argc, &argv, "-generic", "--generic", NULL); if (generic_specified) { char type[512]; if (!extract_int_options(&argc, &argv, &generic_bin_width, "-width", "--width", "-cols", "--cols", NULL) || !extract_int_options(&argc, &argv, &generic_bin_height, "-height", "--height", "-rows", "--rows", NULL)) { asfPrintError("When reading generic data, specify the size " "(--width, --height).\n"); } generic_bin_byteswap = extract_flag_options(&argc, &argv, "--byteswap", "-byteswap", NULL); if (extract_string_options(&argc, &argv, type, "-type", "--type", NULL)) { if (strcmp_case(type, "BYTE") == 0 || strcmp_case(type, "INT8") == 0) { generic_bin_datatype = BYTE; } else if (strcmp_case(type, "FLOAT") == 0 || strcmp_case(type, "REAL32") == 0) { generic_bin_datatype = REAL32; } else { asfPrintError("Unknown generic data type: %s\n", type); } } else { asfPrintStatus("Generic binary: assuming REAL32 data.\n"); generic_bin_datatype = REAL32; } } if (planner_mode) { if (detect_flag_options(argc, argv, "-calibrate-reference", NULL)) { calibrate_planner_reference(); exit(EXIT_SUCCESS); } } handle_common_asf_args(&argc, &argv, "ASF View"); // point to "polygon 0" as the one we initially work on g_poly = &g_polys[0]; // set up image array curr = &image_info[0]; curr->data_name = curr->meta_name = NULL; int ii; if (argc < 2) { curr->filename = STRDUP(find_in_share("startup.jpg")); } else { n_images_loaded = 0; for (ii=1; ii<argc; ++ii) { if (strlen(argv[ii]) > 0) { image_info[n_images_loaded].filename = STRDUP(argv[ii]); ++n_images_loaded; } } } if (n_images_loaded == 1) { asfPrintStatus("Loading 1 image: %s\n", image_info[0].filename); } else { asfPrintStatus("Loading %d images:\n", n_images_loaded); for (ii=0; ii<n_images_loaded; ++ii) asfPrintStatus("%d: %s\n", ii+1, image_info[ii].filename); } if (mask_specified) asfPrintStatus("Mask: %s\n", mask_file_name); // we could call load_file() here, but don't because this way we can // interleave the call to gtk_init() with some of the loading code -- // which keeps the window from showing up until after it has been loaded, // which looks much nicer // initialize globals reset_globals(TRUE); // Get rid of leftover (temporary) colormap luts if they exist, say if asf_view errored out // rather than being exited normally char embedded_tiff_lut_file[1024]; char embedded_asf_colormap_file[1024]; char *lut_loc = (char *)MALLOC(sizeof(char)*(strlen(get_asf_share_dir())+64)); sprintf(lut_loc, "%s%clook_up_tables", get_asf_share_dir(), DIR_SEPARATOR); sprintf(embedded_tiff_lut_file,"%s%c%s", lut_loc, DIR_SEPARATOR, EMBEDDED_TIFF_COLORMAP_LUT_FILE); sprintf(embedded_asf_colormap_file,"%s%c%s", lut_loc, DIR_SEPARATOR, EMBEDDED_ASF_COLORMAP_LUT_FILE); FREE(lut_loc); if (fileExists(embedded_tiff_lut_file)) remove(embedded_tiff_lut_file); if (fileExists(embedded_asf_colormap_file)) remove(embedded_asf_colormap_file); if (mask_specified) { curr = mask = &mask_info; mask->filename = STRDUP(mask_file_name); if (mask->filename[strlen(mask->filename)-1] == '.') mask->filename[strlen(mask->filename)-1] = '\0'; read_file(mask->filename, NULL, FALSE, TRUE); //set_lut("layover_mask"); } // load the image we're going to actually show last for (ii=n_images_loaded-1; ii>=0; --ii) { curr = &image_info[ii]; // strip off any trailing "." if (curr->filename[strlen(curr->filename)-1] == '.') curr->filename[strlen(curr->filename)-1] = '\0'; read_file(curr->filename, band_specified ? band : NULL, FALSE, TRUE); check_for_embedded_tiff_lut(curr->filename, &lut_specified, lut); if (lut_specified) set_lut(lut); assert(curr->data_name); assert(curr->meta_name); // we load the thumbnail data before bringing up the window, looks // much nicer. When loading an image within the GUI, we don't need // to do get_thumbnail_data() as a separate step. ThumbnailData *thumbnail_data = get_thumbnail_data(curr); // first time through the loop only, set up GTK if (ii == n_images_loaded-1) { gtk_init(&argc, &argv); gchar *glade_xml_file = (gchar *)find_in_share("asf_view.glade"); printf("Found asf_view.glade: %s\n", glade_xml_file); glade_xml = glade_xml_new(glade_xml_file, NULL, NULL); free(glade_xml_file); // set up window title, etc set_button_images(); // set up the acquisition planner, if we are in that mode if (planner_mode) { setup_planner(); // getting rid of the info section makes more room for the found // acquisitions, and isn't really necessary in the planner show_widget("info_hbox", FALSE); } // populate the look up table list, and apply the default // look-up-table, if there is one. In this case, we will need to // apply it retroactively to the thumbnail data we already loaded // (In new.c, this kludge isn't required - we load/apply in the // same pass -- here it is required because we pre-load the thumbnail) populate_lut_combo(); if (check_for_embedded_tiff_lut(curr->filename, &lut_specified, lut)) { GtkWidget *option_menu = get_widget_checked("lut_optionmenu"); gtk_option_menu_set_history(GTK_OPTION_MENU(option_menu), get_tiff_lut_index()); set_current_index(get_tiff_lut_index()); } else if (is_colormap_ASF_file(curr->filename)) { /* * lut_specified = 1; * strcpy(lut, EMBEDDED_ASF_COLORMAP_LUT); * GtkWidget *option_menu = get_widget_checked("lut_optionmenu"); * gtk_option_menu_set_history(GTK_OPTION_MENU(option_menu), get_asf_lut_index()); * set_current_index(get_asf_lut_index()); * check_lut(); * apply_lut_to_data(thumbnail_data); */ } } else if (ii == 0) { set_title(band_specified, band); } if (curr->meta && curr->meta->general) { if (set_lut_based_on_image_type(curr->meta->general->image_data_type)) { check_lut(); // data we loaded needs to be lutted apply_lut_to_data(thumbnail_data); } } // load the metadata & image data, other setup setup_gdk_window_ids(); setup_small_image_size(); fill_small_have_data(thumbnail_data, curr); fill_big(curr); update_pixel_info(curr); update_zoom(); set_font(); fill_meta_info(); update_map_settings(curr); fill_stats(curr); set_mapping_defaults(curr); setup_bands_tab(curr->meta); disable_meta_button_if_necessary(); if (lut_specified) select_lut(lut); } if (n_images_loaded>0) { asfPrintStatus("Currently displaying %d: %s\n", current_image_info_index, curr->filename); } glade_xml_signal_autoconnect(glade_xml); gtk_main (); // If the last viewed file left behind a (temporary) color map lut, // then get rid of it if (fileExists(embedded_tiff_lut_file)) remove(embedded_tiff_lut_file); if (fileExists(embedded_asf_colormap_file)) remove(embedded_asf_colormap_file); image_info_free(curr); free_shapes(); exit (EXIT_SUCCESS); }