02111-1307, USA. */
#include <config.h>
+#include "pfm.h"
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include "alloc.h"
-#include "avl.h"
#include "error.h"
#include "file-handle.h"
#include "gmp.h"
+#include "hash.h"
#include "magic.h"
-#include "pfm.h"
#include "str.h"
+#include "value-labels.h"
#include "var.h"
#include "version.h"
{
msg (ME, _("Cannot write file %s as portable file: already opened "
"for %s."),
- fh_handle_name (handle), handle->class->name);
+ handle_get_name (handle), handle->class->name);
return 0;
}
msg (VM (1), _("%s: Opening portable-file handle %s for writing."),
- fh_handle_filename (handle), fh_handle_name (handle));
+ handle_get_filename (handle), handle_get_name (handle));
/* Open the physical disk file. */
handle->class = &pfm_w_class;
handle->ext = ext = xmalloc (sizeof (struct pfm_fhuser_ext));
- ext->file = fopen (handle->norm_fn, "wb");
+ ext->file = fopen (handle_get_filename (handle), "wb");
ext->lc = 0;
if (ext->file == NULL)
{
msg (ME, _("An error occurred while opening \"%s\" for writing "
- "as a portable file: %s."), handle->fn, strerror (errno));
+ "as a portable file: %s."),
+ handle_get_filename (handle), strerror (errno));
err_cond_fail ();
free (ext);
return 0;
{
int i;
- ext->nvars = dict->nvar;
- ext->vars = xmalloc (sizeof *ext->vars * dict->nvar);
- for (i = 0; i < dict->nvar; i++)
- ext->vars[i] = dict->var[i]->width;
+ ext->nvars = dict_get_var_cnt (dict);
+ ext->vars = xmalloc (sizeof *ext->vars * ext->nvars);
+ for (i = 0; i < ext->nvars; i++)
+ ext->vars[i] = dict_get_var (dict, i)->width;
}
/* Write the file header. */
/* Write NBYTES starting at BUF to the portable file represented by
H. Break lines properly every 80 characters. */
static int
-bufwrite (struct file_handle *h, const void *buf, size_t nbytes)
+bufwrite (struct file_handle *h, const void *buf_, size_t nbytes)
{
+ const char *buf = buf_;
struct pfm_fhuser_ext *ext = h->ext;
assert (buf != NULL);
goto lossage;
nbytes -= n;
- *((char **) &buf) += n;
+ buf += n;
ext->lc = 0;
}
lossage:
abort ();
- msg (ME, _("%s: Writing portable file: %s."), h->fn, strerror (errno));
+ msg (ME, _("%s: Writing portable file: %s."),
+ handle_get_filename (h), strerror (errno));
return 0;
}
{
int i;
- if (!bufwrite (h, "4", 1) || !write_int (h, dict->nvar)
+ if (!bufwrite (h, "4", 1) || !write_int (h, dict_get_var_cnt (dict))
|| !write_int (h, 161))
return 0;
- for (i = 0; i < dict->nvar; i++)
+ for (i = 0; i < dict_get_var_cnt (dict); i++)
{
static const char *miss_types[MISSING_COUNT] =
{
const char *m;
int j;
- struct variable *v = dict->var[i];
+ struct variable *v = dict_get_var (dict, i);
if (!bufwrite (h, "7", 1) || !write_int (h, v->width)
|| !write_string (h, v->name)
{
int i;
- for (i = 0; i < dict->nvar; i++)
+ for (i = 0; i < dict_get_var_cnt (dict); i++)
{
- avl_traverser iter;
- struct variable *v = dict->var[i];
- struct value_label *vl;
+ struct val_labs_iterator *j;
+ struct variable *v = dict_get_var (dict, i);
+ struct val_lab *vl;
- if (v->val_lab == NULL)
+ if (!val_labs_count (v->val_labs))
continue;
if (!bufwrite (h, "D", 1)
|| !write_int (h, 1)
|| !write_string (h, v->name)
- || !write_int (h, avl_count (v->val_lab)))
+ || !write_int (h, val_labs_count (v->val_labs)))
return 0;
- avl_traverser_init (iter);
- while (NULL != (vl = avl_traverse (v->val_lab, &iter)))
- if (!write_value (h, &vl->v, v)
- || !write_string (h, vl->s))
- return 0;
+ for (vl = val_labs_first_sorted (v->val_labs, &j); vl != NULL;
+ vl = val_labs_next (v->val_labs, &j))
+ if (!write_value (h, &vl->value, v)
+ || !write_string (h, vl->label))
+ {
+ val_labs_done (&j);
+ return 0;
+ }
}
return 1;
}
else
{
- if (!write_int (h, width) || !bufwrite (h, elem->c, width))
+ if (!write_int (h, width) || !bufwrite (h, elem[i].c, width))
return 0;
}
}
}
if (EOF == fclose (ext->file))
- msg (ME, _("%s: Closing portable file: %s."), h->fn, strerror (errno));
+ msg (ME, _("%s: Closing portable file: %s."),
+ handle_get_filename (h), strerror (errno));
free (ext->vars);
free (ext);