X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdictionary%2Fnumeric.c;h=ae9619638c060d0259fe14d8a64a849c66e444ad;hb=fd0958dc7caa5806b82b9757e2b937c5b7def369;hp=71de3d8770ef1bc1e9f5085d96acc534bb641bbd;hpb=8e018d25310cb53e5339b46e95f0abe02db83782;p=pspp diff --git a/src/language/dictionary/numeric.c b/src/language/dictionary/numeric.c index 71de3d8770..ae9619638c 100644 --- a/src/language/dictionary/numeric.c +++ b/src/language/dictionary/numeric.c @@ -1,5 +1,5 @@ /* PSPP - computes sample statistics. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc. Written by Ben Pfaff . This program is free software; you can redistribute it and/or @@ -37,7 +37,7 @@ /* Parses the NUMERIC command. */ int -cmd_numeric (void) +cmd_numeric (struct dataset *ds) { size_t i; @@ -59,10 +59,11 @@ cmd_numeric (void) { if (!parse_format_specifier (&f)) goto fail; - if (formats[f.type].cat & FCAT_STRING) + if (fmt_is_string (f.type)) { + char str[FMT_STRING_LEN_MAX + 1]; msg (SE, _("Format type %s may not be used with a numeric " - "variable."), fmt_to_string (&f)); + "variable."), fmt_to_string (&f, str)); goto fail; } @@ -78,7 +79,7 @@ cmd_numeric (void) /* Create each variable. */ for (i = 0; i < nv; i++) { - struct variable *new_var = dict_create_var (default_dict, v[i], 0); + struct variable *new_var = dict_create_var (dataset_dict (ds), v[i], 0); if (!new_var) msg (SE, _("There is already a variable named %s."), v[i]); else @@ -108,7 +109,7 @@ fail: /* Parses the STRING command. */ int -cmd_string (void) +cmd_string (struct dataset *ds) { size_t i; @@ -127,37 +128,26 @@ cmd_string (void) if (!parse_DATA_LIST_vars (&v, &nv, PV_NONE)) return CMD_FAILURE; - if (!lex_force_match ('(') || !parse_format_specifier (&f)) + if (!lex_force_match ('(') + || !parse_format_specifier (&f) + || !lex_force_match (')')) goto fail; - if (!(formats[f.type].cat & FCAT_STRING)) + if (!fmt_is_string (f.type)) { + char str[FMT_STRING_LEN_MAX + 1]; msg (SE, _("Format type %s may not be used with a string " - "variable."), fmt_to_string (&f)); + "variable."), fmt_to_string (&f, str)); goto fail; } + if (!fmt_check_output (&f)) + goto fail; - if (!lex_match (')')) - { - msg (SE, _("`)' expected after output format.")); - goto fail; - } - - switch (f.type) - { - case FMT_A: - width = f.w; - break; - case FMT_AHEX: - width = f.w / 2; - break; - default: - NOT_REACHED (); - } + width = fmt_var_width (&f); /* Create each variable. */ for (i = 0; i < nv; i++) { - struct variable *new_var = dict_create_var (default_dict, v[i], + struct variable *new_var = dict_create_var (dataset_dict (ds), v[i], width); if (!new_var) msg (SE, _("There is already a variable named %s."), v[i]); @@ -185,14 +175,14 @@ fail: /* Parses the LEAVE command. */ int -cmd_leave (void) +cmd_leave (struct dataset *ds) { struct variable **v; size_t nv; size_t i; - if (!parse_variables (default_dict, &v, &nv, PV_NONE)) + if (!parse_variables (dataset_dict (ds), &v, &nv, PV_NONE)) return CMD_CASCADING_FAILURE; for (i = 0; i < nv; i++) v[i]->leave = true;