X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvariable.c;h=44f8a4fe40d3b697869097fa461444076f1045a4;hb=e94c7d5a9d2e971e0e3eca623f6bf281d903c24c;hp=5f4098fc71d38abb8f0f148e6d9cdff8e3a95c6e;hpb=af144c6c687788f089328011a4fb5e7e4ef8af82;p=pspp diff --git a/src/data/variable.c b/src/data/variable.c index 5f4098fc71..44f8a4fe40 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -49,33 +49,33 @@ typedef struct { int value; const char *name; - const char *nick; + const char *label; } GEnumValue; const GEnumValue align[] = { - {ALIGN_LEFT, N_("Left"), N_("Left")}, - {ALIGN_RIGHT, N_("Right"), N_("Right")}, - {ALIGN_CENTRE, N_("Center"), N_("Center")}, + {ALIGN_LEFT, "left", N_("Left")}, + {ALIGN_RIGHT, "right", N_("Right")}, + {ALIGN_CENTRE, "center", N_("Center")}, {0,0,0} }; const GEnumValue measure[] = { - {MEASURE_NOMINAL, N_("Nominal"), N_("Nominal")}, - {MEASURE_ORDINAL, N_("Ordinal"), N_("Ordinal")}, - {MEASURE_SCALE, N_("Scale"), N_("Scale")}, + {MEASURE_NOMINAL, "nominal", N_("Nominal")}, + {MEASURE_ORDINAL, "ordinal", N_("Ordinal")}, + {MEASURE_SCALE, "scale", N_("Scale")}, {0,0,0} }; const GEnumValue role[] = { - {ROLE_INPUT, N_("Input"), N_("Input")}, - {ROLE_TARGET, N_("Output"), N_("Output")}, - {ROLE_BOTH, N_("Both"), N_("Both")}, - {ROLE_NONE, N_("None"), N_("None")}, - {ROLE_PARTITION, N_("Partition"), N_("Partition")}, - {ROLE_SPLIT, N_("Split"), N_("Split")}, + {ROLE_INPUT, "input", N_("Input")}, + {ROLE_TARGET, "output", N_("Output")}, + {ROLE_BOTH, "both", N_("Both")}, + {ROLE_NONE, "none", N_("None")}, + {ROLE_PARTITION, "partition", N_("Partition")}, + {ROLE_SPLIT, "split", N_("Split")}, {0,0,0} }; @@ -186,7 +186,6 @@ static void var_set_name_quiet (struct variable *v, const char *name) { assert (!var_has_vardict (v)); - assert (id_is_plausible (name, false)); free (v->name); v->name = xstrdup (name); @@ -497,7 +496,7 @@ var_set_value_labels (struct variable *v, const struct val_labs *vls) { struct variable *ov = var_clone (v); var_set_value_labels_quiet (v, vls); - dict_var_changed (v, VAR_TRAIT_LABEL, ov); + dict_var_changed (v, VAR_TRAIT_LABEL, ov); } @@ -580,7 +579,7 @@ var_append_value_name (const struct variable *v, const union value *value, case SETTINGS_VAL_STYLE_VALUES: append_value (v, value, str); break; - + case SETTINGS_VAL_STYLE_LABELS: if (name == NULL) append_value (v, value, str); @@ -808,7 +807,7 @@ const char * measure_to_string (enum measure m) { assert (m == measure[m].value); - return gettext (measure[m].nick); + return gettext (measure[m].label); } /* Returns a string version of measurement level M, for use in PSPP command @@ -893,7 +892,7 @@ const char * var_role_to_string (enum var_role r) { assert (r == role[r].value); - return gettext (role[r].nick); + return gettext (role[r].label); } /* Returns a string version of ROLE, for use in PSPP comamnd syntax. */ @@ -1000,7 +999,7 @@ const char * alignment_to_string (enum alignment a) { assert (a == align[a].value); - return gettext (align[a].nick); + return gettext (align[a].label); } /* Returns a string version of alignment A, for use in PSPP command syntax. */ @@ -1106,7 +1105,7 @@ var_must_leave (const struct variable *v) all if it hasn't been saved to or read from a system or portable file. */ size_t -var_get_short_name_cnt (const struct variable *var) +var_get_short_name_cnt (const struct variable *var) { return var->short_name_cnt; } @@ -1132,17 +1131,15 @@ var_set_short_name (struct variable *var, size_t idx, const char *short_name) { struct variable *ov = var_clone (var); - assert (short_name == NULL || id_is_plausible (short_name, false)); - /* Clear old short name numbered IDX, if any. */ - if (idx < var->short_name_cnt) + if (idx < var->short_name_cnt) { free (var->short_names[idx]); - var->short_names[idx] = NULL; + var->short_names[idx] = NULL; } /* Install new short name for IDX. */ - if (short_name != NULL) + if (short_name != NULL) { if (idx >= var->short_name_cnt) { @@ -1201,14 +1198,14 @@ var_get_case_index (const struct variable *v) V, or calling var_set_attributes() on V, will also destroy its attribute set. */ struct attrset * -var_get_attributes (const struct variable *v) +var_get_attributes (const struct variable *v) { return CONST_CAST (struct attrset *, &v->attributes); } /* Replaces variable V's attributes set by a copy of ATTRS. */ static void -var_set_attributes_quiet (struct variable *v, const struct attrset *attrs) +var_set_attributes_quiet (struct variable *v, const struct attrset *attrs) { attrset_destroy (&v->attributes); attrset_clone (&v->attributes, attrs); @@ -1216,7 +1213,7 @@ var_set_attributes_quiet (struct variable *v, const struct attrset *attrs) /* Replaces variable V's attributes set by a copy of ATTRS. */ void -var_set_attributes (struct variable *v, const struct attrset *attrs) +var_set_attributes (struct variable *v, const struct attrset *attrs) { struct variable *ov = var_clone (v); var_set_attributes_quiet (v, attrs); @@ -1303,3 +1300,29 @@ var_clear_vardict (struct variable *v) { v->vardict = NULL; } + + +/* + Returns zero, if W is a missing value for WV or if it is less than zero. + Typically used to force a numerical value into a valid weight. + + As a side effect, this function will emit a warning if the value + WARN_ON_INVALID points to a bool which is TRUE. That bool will be then + set to FALSE. + */ +double +var_force_valid_weight (const struct variable *wv, double w, bool *warn_on_invalid) +{ + if (w < 0.0 || (wv && var_is_num_missing (wv, w, MV_ANY))) + w = 0.0; + + if (w == 0.0 && warn_on_invalid != NULL && *warn_on_invalid) + { + *warn_on_invalid = false; + msg (SW, _("At least one case in the data file had a weight value " + "that was user-missing, system-missing, zero, or " + "negative. These case(s) were ignored.")); + } + + return w; +}