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 <config.h>
#include "error.h"
#include "magic.h"
#include "str.h"
#include "var.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
\f
/* Definitions. */
struct variable *src; /* Source variable. */
struct variable *dest; /* Destination variable. */
- char dest_name[SHORT_NAME_LEN + 1]; /* Name of dest variable if we're creating it. */
+ char dest_name[LONG_NAME_LEN + 1]; /* Name of dest variable if we're creating it. */
int has_sysmis; /* Do we recode for SYSMIS? */
union value sysmis; /* Coding for SYSMIS (if src is numeric). */
struct coding *map; /* Coding for other values. */
- int nmap, mmap; /* Length of map, max capacity of map. */
+ size_t nmap, mmap; /* Length of map, max capacity of map. */
};
/* RECODE transformation. */
int
cmd_recode (void)
{
- int i;
+ size_t i;
/* Transformation that we're constructing. */
struct rcd_var *rcd;
/* Variables in the current part of the recoding. */
struct variable **v;
- int nv;
+ size_t nv;
/* Parses each specification between slashes. */
head = rcd = xmalloc (sizeof *rcd);
for (;;)
{
/* Get the input value (before the `='). */
- int mark = rcd->nmap;
+ size_t mark = rcd->nmap;
int code = parse_src_spec (rcd, type, max_src_width);
if (!code)
goto lossage;
else
{
for (i = mark; i < rcd->nmap; i++)
- rcd->map[i].t.c = (output.c?xstrdup (output.c):NULL);
+ rcd->map[i].t.c = output.c ? xstrdup (output.c) : NULL;
free (output.c);
}
}
if (lex_match_id ("INTO"))
{
char **names;
- int nnames;
+ size_t nnames;
int success = 0;
for (i = 0; i < nnames; i++)
free (names[i]);
free (names);
- msg (SE, _("%d variable(s) cannot be recoded into "
- "%d variable(s). Specify the same number "
+ msg (SE, _("%u variable(s) cannot be recoded into "
+ "%u variable(s). Specify the same number "
"of variables as input and output variables."),
- nv, nnames);
+ (unsigned) nv, (unsigned) nnames);
goto lossage;
}
if (!v)
{
msg (SE, _("There is no string variable named "
- "%s. (All string variables specified "
- "on INTO must already exist. Use the "
- "STRING command to create a string "
- "variable.)"), names[i]);
+ "%s. (All string variables specified "
+ "on INTO must already exist. Use the "
+ "STRING command to create a string "
+ "variable.)"),
+ names[i]);
goto INTO_fail;
}
if (v->type != ALPHA)
{
msg (SE, _("Type mismatch between input and output "
- "variables. Output variable %s is not "
- "a string variable, but all the input "
- "variables are string variables."), v->name);
+ "variables. Output variable %s is not "
+ "a string variable, but all the input "
+ "variables are string variables."),
+ v->name);
goto INTO_fail;
}
if (v->width > (int) max_dst_width)
/* The NULL is only really necessary for the
debugging code. */
char *repl = xmalloc (max_dst_width + 1);
- st_pad_copy (repl, cp->t.c, max_dst_width + 1);
+ str_copy_rpad (repl, max_dst_width + 1, cp->t.c);
free (cp->t.c);
cp->t.c = repl;
}
rcd->dest = dict_create_var (default_dict, rcd->dest_name, 0);
if (!rcd->dest)
{
- /* FIXME: This can occur if a destname is duplicated.
+ /* FIXME: This can fail if a destname is duplicated.
We could give an error at parse time but I don't
care enough. */
rcd->dest = dict_lookup_var_assert (default_dict, rcd->dest_name);
if (toklen > max)
max = toklen;
v->c = xmalloc (max + 1);
- st_pad_copy (v->c, ds_c_str (&tokstr), max + 1);
+ str_copy_rpad (v->c, max + 1, ds_c_str (&tokstr));
flags = RCD_DEST_STRING;
*max_dst_width = max;
lex_get ();
for (;;)
{
- if (rcd->nmap >= rcd->mmap - 1)
+ if (rcd->nmap + 1 >= rcd->mmap)
{
rcd->mmap += 16;
- rcd->map = xrealloc (rcd->map, rcd->mmap * sizeof *rcd->map);
+ rcd->map = xnrealloc (rcd->map, rcd->mmap, sizeof *rcd->map);
}
c = &rcd->map[rcd->nmap];
if (!lex_force_string ())
return 0;
c->f1.c = xmalloc (max_src_width + 1);
- st_pad_copy (c->f1.c, ds_c_str (&tokstr), max_src_width + 1);
+ str_copy_rpad (c->f1.c, max_src_width + 1, ds_c_str (&tokstr));
lex_get ();
}
}
static void
recode_trns_free (struct trns_header * t)
{
- int i;
+ size_t i;
struct rcd_var *head, *next;
head = ((struct recode_trns *) t)->codings;
case RCD_END:
return NULL;
case RCD_USER:
- if (is_num_user_missing (cmp, v->src))
+ if (mv_is_num_user_missing (&v->src->miss, cmp))
return cp;
break;
case RCD_SINGLE:
if (val == NULL)
{
if (v->dest->fv != v->src->fv)
- st_bare_pad_len_copy (case_data_rw (c, v->dest->fv)->s,
- case_str (c, v->src->fv),
- v->dest->width, v->src->width);
+ buf_copy_rpad (case_data_rw (c, v->dest->fv)->s,
+ v->dest->width,
+ case_str (c, v->src->fv), v->src->width);
}
else
memcpy (case_data_rw (c, v->dest->fv)->s, cp->t.c, v->dest->width);
string_to_long (const char *nptr, int width, const char **endptr)
{
int negative;
- register unsigned long int cutoff;
- register unsigned int cutlim;
- register unsigned long int i;
- register const char *s;
- register unsigned char c;
+ unsigned long int cutoff;
+ unsigned int cutlim;
+ unsigned long int i;
+ const char *s;
+ unsigned char c;
const char *save;
s = nptr;
static double
convert_to_double (const char *s, int width)
{
- register const char *end = &s[width];
+ const char *end = &s[width];
short int sign;