X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fpfm-read.c;h=1999628c462ae7fdde3c15048d22995d37dcf464;hb=93abfcc57a1e6ff792e5ae01784172459eee783f;hp=7967926e600c0cb33a99859f487b85eac1483d48;hpb=317e6b778833b5dcd5dd195c0b677835a8024b2a;p=pspp-builds.git diff --git a/src/pfm-read.c b/src/pfm-read.c index 7967926e..1999628c 100644 --- a/src/pfm-read.c +++ b/src/pfm-read.c @@ -30,12 +30,12 @@ #include #include #include "alloc.h" -#include "bool.h" +#include #include "case.h" #include "dictionary.h" #include "file-handle.h" #include "format.h" -#include "getline.h" +#include "getl.h" #include "hash.h" #include "magic.h" #include "misc.h" @@ -44,6 +44,9 @@ #include "value-labels.h" #include "var.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + #include "debug-print.h" /* Portable file reader. */ @@ -408,7 +411,7 @@ read_header (struct pfm_reader *r) static void read_version_data (struct pfm_reader *r, struct pfm_read_info *info) { - char *date, *time, *product, *subproduct; + char *date, *time, *product, *author, *subproduct; int i; /* Read file. */ @@ -417,6 +420,7 @@ 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) : (unsigned char *) ""; + author = match (r, '2') ? read_pool_string (r) : (unsigned char *) ""; subproduct = match (r, '3') ? read_pool_string (r) : (unsigned char *) ""; @@ -522,7 +526,7 @@ read_variables (struct pfm_reader *r, struct dictionary *dict) fmt[j] = read_int (r); if (!var_is_valid_name (name, false) || *name == '#' || *name == '$') - error (r, _("position %d: Invalid variable name `%s'."), name); + error (r, _("position %d: Invalid variable name `%s'."), i, name); str_uppercase (name); if (width < 0 || width > 255) @@ -536,45 +540,23 @@ read_variables (struct pfm_reader *r, struct dictionary *dict) convert_format (r, &fmt[3], &v->write, v); /* Range missing values. */ - if (match (r, 'B')) - { - v->miss_type = MISSING_RANGE; - v->missing[0] = parse_value (r, v); - v->missing[1] = parse_value (r, v); - } + if (match (r, 'B')) + { + double x = read_float (r); + double y = read_float (r); + mv_add_num_range (&v->miss, x, y); + } else if (match (r, 'A')) - { - v->miss_type = MISSING_HIGH; - v->missing[0] = parse_value (r, v); - } + mv_add_num_range (&v->miss, read_float (r), HIGHEST); else if (match (r, '9')) - { - v->miss_type = MISSING_LOW; - v->missing[0] = parse_value (r, v); - } + mv_add_num_range (&v->miss, LOWEST, read_float (r)); /* Single missing values. */ - while (match (r, '8')) - { - static const int map_next[MISSING_COUNT] = - { - MISSING_1, MISSING_2, MISSING_3, -1, - MISSING_RANGE_1, MISSING_LOW_1, MISSING_HIGH_1, - -1, -1, -1, - }; - - static const int map_ofs[MISSING_COUNT] = - { - -1, 0, 1, 2, -1, -1, -1, 2, 1, 1, - }; - - v->miss_type = map_next[v->miss_type]; - if (v->miss_type == -1) - error (r, _("Bad missing values for %s."), v->name); - - assert (map_ofs[v->miss_type] != -1); - v->missing[map_ofs[v->miss_type]] = parse_value (r, v); - } + while (match (r, '8')) + { + union value value = parse_value (r, v); + mv_add_value (&v->miss, &value); + } if (match (r, 'C')) {