diff options
Diffstat (limited to 'libcrystfel')
-rw-r--r-- | libcrystfel/src/datatemplate.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/libcrystfel/src/datatemplate.c b/libcrystfel/src/datatemplate.c index f746b7f5..6733c108 100644 --- a/libcrystfel/src/datatemplate.c +++ b/libcrystfel/src/datatemplate.c @@ -850,7 +850,8 @@ static int parse_toplevel(DataTemplate *dt, struct rgc_definition ***rgc_defl, int *n_rg_defs, int *n_rgc_defs, - struct panel_template *defaults) + struct panel_template *defaults, + int *defaults_updated) { if ( strcmp(key, "detector_shift_x") == 0 ) { dt->shift_x_from = strdup(val); @@ -917,8 +918,13 @@ static int parse_toplevel(DataTemplate *dt, (*rgc_defl)[*n_rgc_defs]->rgs = strdup(val); *n_rgc_defs = *n_rgc_defs+1; - } else if ( parse_field_for_panel(defaults, key, val, dt) ) { - return 1; + } else { + + if ( parse_field_for_panel(defaults, key, val, dt) == 0 ) { + *defaults_updated = 1; + } else { + return 1; + } } return 0; @@ -1025,6 +1031,7 @@ DataTemplate *data_template_new_from_string(const char *string_in) char *string_orig; size_t len; struct panel_template defaults; + int have_unused_defaults = 0; dt = calloc(1, sizeof(DataTemplate)); if ( dt == NULL ) return NULL; @@ -1161,7 +1168,8 @@ DataTemplate *data_template_new_from_string(const char *string_in) &rgc_defl, &n_rg_definitions, &n_rgc_definitions, - &defaults) ) + &defaults, + &have_unused_defaults) ) { ERROR("Invalid top-level line '%s'\n", line); @@ -1185,6 +1193,7 @@ DataTemplate *data_template_new_from_string(const char *string_in) panel = find_panel_by_name(dt, line); if ( panel == NULL ) { panel = new_panel(dt, line, &defaults); + have_unused_defaults = 0; } } @@ -1212,6 +1221,13 @@ DataTemplate *data_template_new_from_string(const char *string_in) reject = 1; } + if ( have_unused_defaults ) { + ERROR("WARNING: There are statements at the end of the geometry " + "file which have no effect because they only apply to " + "subsequently-defined panels.\n"); + reject = 1; + } + for ( i=0; i<dt->n_panels; i++ ) { int j; |