#include <config.h>
#include "pfm.h"
-#include <assert.h>
+#include "error.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>
#include "alloc.h"
+#include "case.h"
#include "file-handle.h"
#include "format.h"
#include "getline.h"
{
char *title;
struct error e;
+ const char *filename;
e.class = ME;
getl_location (&e.where.filename, &e.where.line_number);
- e.title = title = local_alloc (strlen (h->fn) + 80);
+ filename = handle_get_filename (h);
+ e.title = title = local_alloc (strlen (filename) + 80);
sprintf (title, _("portable file %s corrupt at offset %ld: "),
- h->fn, ftell (ext->file) - (82 - (long) (ext->bp - ext->buf)));
+ filename, ftell (ext->file) - (82 - (long) (ext->bp - ext->buf)));
e.text = buf;
err_vmsg (&e);
/* Closes a portable file after we're done with it. */
static void
-pfm_close (struct file_handle * h)
+pfm_close (struct file_handle *h)
{
struct pfm_fhuser_ext *ext = h->ext;
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->trans);
free (h->ext);
{
msg (ME, _("Cannot read file %s as portable file: already opened "
"for %s."),
- fh_handle_name (h), h->class->name);
+ handle_get_name (h), h->class->name);
return NULL;
}
msg (VM (1), _("%s: Opening portable-file handle %s for reading."),
- fh_handle_filename (h), fh_handle_name (h));
+ handle_get_filename (h), handle_get_name (h));
/* Open the physical disk file. */
ext = xmalloc (sizeof (struct pfm_fhuser_ext));
- ext->file = fopen (h->norm_fn, "rb");
+ ext->file = fopen (handle_get_filename (h), "rb");
if (ext->file == NULL)
{
msg (ME, _("An error occurred while opening \"%s\" for reading "
- "as a portable file: %s."), h->fn, strerror (errno));
+ "as a portable file: %s."),
+ handle_get_filename (h), strerror (errno));
err_cond_fail ();
free (ext);
return NULL;
msg (VM (2), _("Read portable-file dictionary successfully."));
-#if DEBUGGING
- dump_dictionary (ext->dict);
-#endif
return ext->dict;
lossage:
convert_format (struct file_handle *h, int fmt[3], struct fmt_spec *v,
struct variable *vv)
{
- if (fmt[0] < 0
- || (size_t) fmt[0] >= sizeof translate_fmt / sizeof *translate_fmt)
+ v->type = translate_fmt (fmt[0]);
+ if (v->type == -1)
lose ((h, _("%s: Bad format specifier byte (%d)."), vv->name, fmt[0]));
-
- v->type = translate_fmt[fmt[0]];
v->w = fmt[1];
v->d = fmt[2];
return 0;
}
-/* Reads one case from portable file H into the value array PERM
+/* Reads one case from portable file H into PERM
according to the instuctions given in associated dictionary DICT,
which must have the get.fv elements appropriately set. Returns
nonzero only if successful. */
int
-pfm_read_case (struct file_handle *h, union value *perm, struct dictionary *dict)
+pfm_read_case (struct file_handle *h, struct ccase *perm,
+ struct dictionary *dict)
{
struct pfm_fhuser_ext *ext = h->ext;
continue;
if (v->type == NUMERIC)
- perm[v->fv].f = temp[v->get.fv].f;
+ case_data_rw (perm, v->fv)->f = temp[v->get.fv].f;
else
- memcpy (&perm[v->fv].s, &temp[v->get.fv], v->width);
+ memcpy (case_data_rw (perm, v->fv)->s, &temp[v->get.fv], v->width);
}
local_free (temp);