Enforce every unconditional per-field constraint, in table order; first
violation wins. prefix is the historical message prefix ('config' or
'config_2d'). Choice comparison casefolds the candidate via to_lower
(length/blank-preserving), NOT lowercase_token (which adjustl's first):
a leading-whitespace value like ' hllc' must be REJECTED here, matching
the 2D to_lower-on-compare behavior; the 1D path already normalizes
(adjustl+lowercase) via normalize_fields before this runs, so its
stored values never carry leading blanks by the time they reach here.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(field_desc_t), | intent(in) | :: | fields(:) | |||
| character(len=*), | intent(in) | :: | prefix | |||
| logical, | intent(out) | :: | ok | |||
| character(len=*), | intent(out) | :: | message |