X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdictionary%2Fmodify-variables.c;h=70c700084fdf765450ce59a2d758f1a7da609ffa;hb=a6f1c88d9d4dee24e1f79048c8a5d8274f68c405;hp=cc847372d3d20090dc093666c6d58487e60c4b5b;hpb=55e6e7ba37a30570f5a31e2d78c22dfa7b61a36f;p=pspp diff --git a/src/language/dictionary/modify-variables.c b/src/language/dictionary/modify-variables.c index cc847372d3..70c700084f 100644 --- a/src/language/dictionary/modify-variables.c +++ b/src/language/dictionary/modify-variables.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2010 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2010, 2011, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,21 +18,22 @@ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "xalloc.h" +#include "data/dataset.h" +#include "data/dictionary.h" +#include "data/variable.h" +#include "language/command.h" +#include "language/lexer/lexer.h" +#include "language/lexer/variable-parser.h" +#include "libpspp/array.h" +#include "libpspp/assertion.h" +#include "libpspp/bit-vector.h" +#include "libpspp/compiler.h" +#include "libpspp/i18n.h" +#include "libpspp/message.h" +#include "libpspp/misc.h" +#include "libpspp/str.h" + +#include "gl/xalloc.h" #include "gettext.h" #define _(msgid) gettext (msgid) @@ -79,7 +80,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) this type. */ unsigned already_encountered = 0; - /* What we're gonna do to the active file. */ + /* What we are going to do to the active dataset. */ struct var_modification vm; /* Return code. */ @@ -88,8 +89,8 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) size_t i; if (proc_make_temporary_transformations_permanent (ds)) - msg (SE, _("MODIFY VARS may not be used after TEMPORARY. " - "Temporary transformations will be made permanent.")); + msg (SE, _("%s may not be used after %s. " + "Temporary transformations will be made permanent."), "MODIFY VARS", "TEMPORARY"); vm.reorder_vars = NULL; vm.reorder_cnt = 0; @@ -110,7 +111,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) if (already_encountered & 1) { - msg (SE, _("%s subcommand may be given at most once."), "REORDER"); + lex_sbc_only_once ("REORDER"); goto done; } already_encountered |= 1; @@ -143,7 +144,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) { if (!lex_match (lexer, T_LPAREN)) { - msg (SE, _("`(' expected on %s subcommand."), "REORDER"); + lex_error_expecting (lexer, "`('", NULL_SENTINEL); free (v); goto done; } @@ -155,8 +156,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) } if (!lex_match (lexer, T_RPAREN)) { - msg (SE, _("`)' expected following variable names on " - "REORDER subcommand.")); + lex_error_expecting (lexer, "`)'", NULL_SENTINEL); free (v); goto done; } @@ -174,7 +174,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) { if (already_encountered & 2) { - msg (SE, _("%s subcommand may be given at most once."), "RENAME"); + lex_sbc_only_once ("RENAME"); goto done; } already_encountered |= 2; @@ -187,7 +187,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) if (!lex_match (lexer, T_LPAREN)) { - msg (SE, _("`(' expected on %s subcommand."), "RENAME"); + lex_error_expecting (lexer, "`('", NULL_SENTINEL); goto done; } if (!parse_variables (lexer, dataset_dict (ds), @@ -196,12 +196,11 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) goto done; if (!lex_match (lexer, T_EQUALS)) { - msg (SE, _("`=' expected between lists of new and old variable " - "names on RENAME subcommand.")); + lex_error_expecting (lexer, "`='", NULL_SENTINEL); goto done; } - if (!parse_DATA_LIST_vars (lexer, &vm.new_names, - &prev_nv_1, PV_APPEND)) + if (!parse_DATA_LIST_vars (lexer, dataset_dict (ds), + &vm.new_names, &prev_nv_1, PV_APPEND)) goto done; if (prev_nv_1 != vm.rename_cnt) { @@ -216,8 +215,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) } if (!lex_match (lexer, T_RPAREN)) { - msg (SE, _("`)' expected after variable lists on RENAME " - "subcommand.")); + lex_error_expecting (lexer, "`)'", NULL_SENTINEL); goto done; } } @@ -231,8 +229,9 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) if (already_encountered & 4) { - msg (SE, _("KEEP subcommand may be given at most once. It may " - "not be given in conjunction with the DROP subcommand.")); + msg (SE, _("%s subcommand may be given at most once. It may " + "not be given in conjunction with the %s subcommand."), + "KEEP", "DROP"); goto done; } already_encountered |= 4; @@ -274,9 +273,11 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) if (already_encountered & 4) { - msg (SE, _("DROP subcommand may be given at most once. It may " - "not be given in conjunction with the KEEP " - "subcommand.")); + msg (SE, _("%s subcommand may be given at most once. It may " + "not be given in conjunction with the %s " + "subcommand."), + "DROP", "KEEP" + ); goto done; } already_encountered |= 4; @@ -310,7 +311,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds) break; if (lex_token (lexer) != T_SLASH) { - msg (SE, _("`/' or `.' expected.")); + lex_error_expecting (lexer, "`/'", "`.'", NULL_SENTINEL); goto done; } lex_get (lexer); @@ -358,7 +359,7 @@ compare_variables_given_ordering (const void *a_, const void *b_, result = a_index < b_index ? -1 : a_index > b_index; } else - result = strcasecmp (var_get_name (a), var_get_name (b)); + result = utf8_strcasecmp (var_get_name (a), var_get_name (b)); if (!ordering->forward) result = -result; return result; @@ -368,7 +369,7 @@ compare_variables_given_ordering (const void *a_, const void *b_, struct var_renaming { struct variable *var; - char new_name[VAR_NAME_LEN + 1]; + const char *new_name; }; /* A algo_compare_func that compares new_name members in struct @@ -380,7 +381,7 @@ compare_var_renaming_by_new_name (const void *a_, const void *b_, const struct var_renaming *a = a_; const struct var_renaming *b = b_; - return strcasecmp (a->new_name, b->new_name); + return utf8_strcasecmp (a->new_name, b->new_name); } /* Returns true if performing VM on dictionary D would not cause @@ -431,7 +432,7 @@ validate_var_modification (const struct dictionary *d, for (i = 0; i < keep_cnt; i++) { var_renaming[i].var = keep_vars[i]; - strcpy (var_renaming[i].new_name, var_get_name (keep_vars[i])); + var_renaming[i].new_name = var_get_name (keep_vars[i]); } /* Rename variables in var_renaming array. */ @@ -449,7 +450,7 @@ validate_var_modification (const struct dictionary *d, continue; vr = var_renaming + (kv - keep_vars); - strcpy (vr->new_name, vm->new_names[i]); + vr->new_name = vm->new_names[i]; } /* Sort var_renaming array by new names and check for