X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapply-dict.c;h=473daf0148981f3c8367b813071b1ad645063a94;hb=fa489d6ef77150e60c31906ee322bea2901da57f;hp=541d93382ddafed986cfe1811a684438573cdf85;hpb=3a7fba81ceae5b049d0f7d671e9e3c3c43bbf703;p=pspp-builds.git diff --git a/src/apply-dict.c b/src/apply-dict.c index 541d9338..473daf01 100644 --- a/src/apply-dict.c +++ b/src/apply-dict.c @@ -14,21 +14,25 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ #include #include #include "command.h" +#include "dictionary.h" #include "error.h" #include "file-handle.h" #include "hash.h" #include "lexer.h" -#include "sfm.h" +#include "sfm-read.h" #include "str.h" #include "value-labels.h" #include "var.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + #include "debug-print.h" /* Parses and executes APPLY DICTIONARY. */ @@ -36,24 +40,23 @@ int cmd_apply_dictionary (void) { struct file_handle *handle; + struct sfm_reader *reader; struct dictionary *dict; int n_matched = 0; int i; - lex_match_id ("APPLY"); - lex_match_id ("DICTIONARY"); - lex_match_id ("FROM"); lex_match ('='); - handle = fh_parse_file_handle (); + handle = fh_parse (); if (!handle) return CMD_FAILURE; - dict = sfm_read_dictionary (handle, NULL); + reader = sfm_open_reader (handle, &dict, NULL); if (dict == NULL) return CMD_FAILURE; + sfm_close_reader (reader); for (i = 0; i < dict_get_var_cnt (dict); i++) { @@ -126,31 +129,18 @@ cmd_apply_dictionary (void) } } - if (s->miss_type != MISSING_NONE && t->width > MAX_SHORT_STRING) + if (!mv_is_empty (&s->miss) && t->width > MAX_SHORT_STRING) msg (SW, _("Cannot apply missing values from source file to " "long string variable %s."), s->name); - else if (s->miss_type != MISSING_NONE) + else if (!mv_is_empty (&s->miss)) { - if (t->width < s->width) - { - static const int miss_count[MISSING_COUNT] = - { - 0, 1, 2, 3, 2, 1, 1, 3, 2, 2, - }; - - int j, k; - - for (j = 0; j < miss_count[s->miss_type]; j++) - for (k = t->width; k < s->width; k++) - if (s->missing[j].s[k] != ' ') - goto skip_missing_values; - } - - t->miss_type = s->miss_type; - memcpy (t->missing, s->missing, sizeof s->missing); + if (mv_is_resizable (&s->miss, t->width)) + { + mv_copy (&t->miss, &s->miss); + mv_resize (&t->miss, t->width); + } } - skip_missing_values: ; if (s->type == NUMERIC) { @@ -173,7 +163,7 @@ cmd_apply_dictionary (void) dict_set_weight (default_dict, new_weight); } - sfm_maybe_close (handle); + sfm_close_reader (reader); return lex_end_of_command (); }