/[pspp]/pspp/src/sfm-read.c
ViewVC logotype

Diff of /pspp/src/sfm-read.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.24 by blp, Sun Jul 31 21:42:46 2005 UTC revision 1.25 by blp, Sun Aug 7 04:39:28 2005 UTC
# Line 926  read_variables (struct sfm_reader *r, Line 926  read_variables (struct sfm_reader *r,
926        if (sv.n_missing_values != 0)        if (sv.n_missing_values != 0)
927          {          {
928            flt64 mv[3];            flt64 mv[3];
929              int mv_cnt = abs (sv.n_missing_values);
930    
931            if (vv->width > MAX_SHORT_STRING)            if (vv->width > MAX_SHORT_STRING)
932              lose ((ME, _("%s: Long string variable %s may not have missing "              lose ((ME, _("%s: Long string variable %s may not have missing "
933                           "values."),                           "values."),
934                     handle_get_filename (r->fh), vv->name));                     handle_get_filename (r->fh), vv->name));
935    
936            assertive_buf_read (r, mv, sizeof *mv * abs (sv.n_missing_values), 0);            assertive_buf_read (r, mv, sizeof *mv * mv_cnt, 0);
937    
938            if (r->reverse_endian && vv->type == NUMERIC)            if (r->reverse_endian && vv->type == NUMERIC)
939              for (j = 0; j < abs (sv.n_missing_values); j++)              for (j = 0; j < mv_cnt; j++)
940                bswap_flt64 (&mv[j]);                bswap_flt64 (&mv[j]);
941    
942            if (sv.n_missing_values > 0)            if (sv.n_missing_values > 0)
943              {              {
944                vv->miss_type = sv.n_missing_values;                for (j = 0; j < sv.n_missing_values; j++)
945                if (vv->type == NUMERIC)                  if (vv->type == NUMERIC)
946                  for (j = 0; j < sv.n_missing_values; j++)                    mv_add_num (&vv->miss, mv[j]);
947                    vv->missing[j].f = mv[j];                  else
948                else                    mv_add_str (&vv->miss, (unsigned char *) &mv[j]);
                 for (j = 0; j < sv.n_missing_values; j++)  
                   memcpy (vv->missing[j].s, &mv[j], vv->width);  
949              }              }
950            else            else
951              {              {
               int x = 0;  
   
952                if (vv->type == ALPHA)                if (vv->type == ALPHA)
953                  lose ((ME, _("%s: String variable %s may not have missing "                  lose ((ME, _("%s: String variable %s may not have missing "
954                               "values specified as a range."),                               "values specified as a range."),
955                         handle_get_filename (r->fh), vv->name));                         handle_get_filename (r->fh), vv->name));
956    
957                if (mv[0] == r->lowest)                if (mv[0] == r->lowest)
958                  {                  mv_add_num_range (&vv->miss, LOWEST, mv[1]);
                   vv->miss_type = MISSING_LOW;  
                   vv->missing[x++].f = mv[1];  
                 }  
959                else if (mv[1] == r->highest)                else if (mv[1] == r->highest)
960                  {                  mv_add_num_range (&vv->miss, mv[0], HIGHEST);
                   vv->miss_type = MISSING_HIGH;  
                   vv->missing[x++].f = mv[0];  
                 }  
961                else                else
962                  {                  mv_add_num_range (&vv->miss, mv[0], mv[1]);
                   vv->miss_type = MISSING_RANGE;  
                   vv->missing[x++].f = mv[0];  
                   vv->missing[x++].f = mv[1];  
                 }  
963    
964                if (sv.n_missing_values == -3)                if (sv.n_missing_values == -3)
965                  {                  mv_add_num (&vv->miss, mv[2]);
                   vv->miss_type += 3;  
                   vv->missing[x++].f = mv[2];  
                 }  
966              }              }
967          }          }
       else  
         vv->miss_type = MISSING_NONE;  
968    
969        if (!parse_format_spec (r, sv.print, &vv->print, vv)        if (!parse_format_spec (r, sv.print, &vv->print, vv)
970            || !parse_format_spec (r, sv.write, &vv->write, vv))            || !parse_format_spec (r, sv.write, &vv->write, vv))

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.25

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26