#include "var.h"
#include "vfm.h"
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
/* List of variable names. */
struct varname
{
struct variable **var; /* Variables to transpose. */
int *idx_to_fv; /* var[]->index to compacted sink case fv. */
- int var_cnt; /* Number of elements in `var'. */
+ size_t var_cnt; /* Number of elements in `var'. */
int case_cnt; /* Pre-flip case count. */
size_t case_size; /* Post-flip bytes per case. */
if (flip->new_names)
{
- int i;
+ size_t i;
for (i = 0; i < flip->var_cnt; i++)
if (flip->var[i] == flip->new_names)
static int
make_new_var (char name[])
{
+ char *cp;
+
+ /* Trim trailing spaces. */
+ cp = strchr (name, '\0');
+ while (cp > name && isspace ((unsigned char) cp[-1]))
+ *--cp = '\0';
+
/* Fix invalid characters. */
- {
- char *cp;
-
- for (cp = name; *cp && !isspace (*cp); cp++)
+ for (cp = name; *cp && cp < name + SHORT_NAME_LEN; cp++)
+ if (cp == name)
{
- *cp = toupper ((unsigned char) *cp);
- if (!isalpha (*cp) && *cp != '@' && *cp != '#'
- && (cp == name || (*cp != '.' && *cp != '$' && *cp != '_'
- && !isdigit (*cp))))
- {
- if (cp == name)
- *cp = 'V'; /* _ not valid in first position. */
- else
- *cp = '_';
- }
+ if (!CHAR_IS_ID1 (*cp) || *cp == '$')
+ *cp = 'V';
}
- *cp = 0;
- }
+ else
+ {
+ if (!CHAR_IS_IDN (*cp))
+ *cp = '_';
+ }
+ *cp = '\0';
+ str_uppercase (name);
if (dict_create_var (default_dict, name, 0))
return 1;
flip_sink_create (struct flip_pgm *flip)
{
struct flip_sink_info *info = xmalloc (sizeof *info);
- int i;
+ size_t i;
info->flip = flip;
- info->output_buf = xmalloc (sizeof *info->output_buf * flip->var_cnt);
+ info->output_buf = xnmalloc (flip->var_cnt, sizeof *info->output_buf);
flip->file = tmpfile ();
if (!flip->file)
/* Write variable names as first case. */
for (i = 0; i < flip->var_cnt; i++)
- st_bare_pad_copy (info->output_buf[i].s, flip->var[i]->name, MAX_SHORT_STRING);
+ buf_copy_str_rpad (info->output_buf[i].s, MAX_SHORT_STRING,
+ flip->var[i]->name);
if (fwrite (info->output_buf, sizeof *info->output_buf,
flip->var_cnt, flip->file) != (size_t) flip->var_cnt)
msg (FE, _("Error writing FLIP file: %s."), strerror (errno));
{
struct flip_sink_info *info = sink->aux;
struct flip_pgm *flip = info->flip;
- int i;
+ size_t i;
flip->case_cnt++;
if (flip->new_names != NULL)
{
- struct varname *v = xmalloc (sizeof (struct varname));
+ struct varname *v = xmalloc (sizeof *v);
v->next = NULL;
if (flip->new_names->type == NUMERIC)
{
{
char name[INT_DIGITS + 2];
sprintf (name, "V%d", (int) f);
- strncpy (v->name, name, SHORT_NAME_LEN);
- name[SHORT_NAME_LEN] = 0;
+ str_copy_trunc (v->name, sizeof v->name, name);
}
}
else
/* Allocate memory for many cases. */
case_bytes = flip->var_cnt * sizeof *input_buf;
- case_capacity = get_max_workspace() / case_bytes;
+ case_capacity = get_workspace () / case_bytes;
if (case_capacity > flip->case_cnt * 2)
case_capacity = flip->case_cnt * 2;
if (case_capacity < 2)
{
unsigned long read_cases = min (flip->case_cnt - case_idx,
case_capacity);
- int i;
+ size_t i;
if (read_cases != fread (input_buf, case_bytes, read_cases, input_file))
msg (FE, _("Error reading FLIP file: %s."), strerror (errno));
{
struct flip_pgm *flip = source->aux;
union value *input_buf;
- int i;
+ size_t i;
- input_buf = xmalloc (sizeof *input_buf * flip->case_cnt);
+ input_buf = xnmalloc (flip->case_cnt, sizeof *input_buf);
for (i = 0; i < flip->var_cnt; i++)
{
size_t j;