X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fpor-file-reader.c;h=0897d77aa2e30a4520f645c9fa9a647ed7fde652;hb=24c5f7c629e68801492d7ca1766953a2a954a820;hp=bee1008ee36b939ba7c719e0be5e66fb32b37ec1;hpb=42004e91dc5a76f746b9bf902130182318806291;p=pspp diff --git a/src/data/por-file-reader.c b/src/data/por-file-reader.c index bee1008ee3..0897d77aa2 100644 --- a/src/data/por-file-reader.c +++ b/src/data/por-file-reader.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2012, 2013, 2014 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 @@ -15,7 +15,8 @@ along with this program. If not, see . */ #include -#include "por-file-reader.h" + +#include "data/por-file-reader.h" #include #include @@ -26,21 +27,22 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "data/casereader-provider.h" +#include "data/casereader.h" +#include "data/dictionary.h" +#include "data/file-handle-def.h" +#include "data/file-name.h" +#include "data/format.h" +#include "data/missing-values.h" +#include "data/short-names.h" +#include "data/value-labels.h" +#include "data/variable.h" +#include "libpspp/compiler.h" +#include "libpspp/i18n.h" +#include "libpspp/message.h" +#include "libpspp/misc.h" +#include "libpspp/pool.h" +#include "libpspp/str.h" #include "gl/intprops.h" #include "gl/minmax.h" @@ -104,10 +106,11 @@ error (struct pfm_reader *r, const char *msg, ...) m.category = MSG_C_GENERAL; m.severity = MSG_S_ERROR; - m.where.file_name = NULL; - m.where.line_number = 0; - m.where.first_column = 0; - m.where.last_column = 0; + m.file_name = NULL; + m.first_line = 0; + m.last_line = 0; + m.first_column = 0; + m.last_column = 0; m.text = ds_cstr (&text); msg_emit (&m); @@ -135,10 +138,11 @@ warning (struct pfm_reader *r, const char *msg, ...) m.category = MSG_C_GENERAL; m.severity = MSG_S_WARNING; - m.where.file_name = NULL; - m.where.line_number = 0; - m.where.first_column = 0; - m.where.last_column = 0; + m.file_name = NULL; + m.first_line = 0; + m.last_line = 0; + m.first_column = 0; + m.last_column = 0; m.text = ds_cstr (&text); msg_emit (&m); @@ -247,7 +251,7 @@ pfm_open_reader (struct file_handle *fh, struct dictionary **dict, struct pool *volatile pool = NULL; struct pfm_reader *volatile r = NULL; - *dict = dict_create (); + *dict = dict_create (get_default_encoding ()); /* Create and initialize reader. */ pool = pool_create (); @@ -536,7 +540,7 @@ read_version_data (struct pfm_reader *r, struct pfm_read_info *info) { static const char empty_string[] = ""; char *date, *time; - const char *product, *author, *subproduct; + const char *product, *subproduct; int i; /* Read file. */ @@ -545,7 +549,11 @@ read_version_data (struct pfm_reader *r, struct pfm_read_info *info) date = read_pool_string (r); time = read_pool_string (r); product = match (r, '1') ? read_pool_string (r) : empty_string; - author = match (r, '2') ? read_pool_string (r) : empty_string; + if (match (r, '2')) + { + /* Skip "author" field. */ + read_pool_string (r); + } subproduct = match (r, '3') ? read_pool_string (r) : empty_string; /* Validate file. */ @@ -649,8 +657,8 @@ read_variables (struct pfm_reader *r, struct dictionary *dict) if (r->var_cnt <= 0) error (r, _("Invalid number of variables %d."), r->var_cnt); - /* Purpose of this value is unknown. It is typically 161. */ - read_int (r); + if (match (r, '5')) + read_int (r); if (match (r, '6')) { @@ -681,7 +689,8 @@ read_variables (struct pfm_reader *r, struct dictionary *dict) for (j = 0; j < 6; j++) fmt[j] = read_int (r); - if (!var_is_valid_name (name, false) || *name == '#' || *name == '$') + if (!dict_id_is_valid (dict, name, false) + || *name == '#' || *name == '$') error (r, _("Invalid variable name `%s' in position %d."), name, i); str_uppercase (name); @@ -741,7 +750,7 @@ read_variables (struct pfm_reader *r, struct dictionary *dict) { char label[256]; read_string (r, label); - var_set_label (v, label); + var_set_label (v, label); /* XXX */ } } @@ -831,7 +840,7 @@ read_documents (struct pfm_reader *r, struct dictionary *dict) { char line[256]; read_string (r, line); - dict_add_document_line (dict, line); + dict_add_document_line (dict, line, false); } }