X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fpfm-write.c;h=359f0440159480c26d9d40264ccc1079e85bb232;hb=ca1feaeed4961242699d0b7ba61def0c58515ddd;hp=0683f39aecb22c0888fc4bb7d50bb0c53880f0a4;hpb=4944c86a9318bc5b5578ab145a95c116ffd2c9fd;p=pspp-builds.git diff --git a/src/pfm-write.c b/src/pfm-write.c index 0683f39a..359f0440 100644 --- a/src/pfm-write.c +++ b/src/pfm-write.c @@ -18,6 +18,7 @@ 02111-1307, USA. */ #include +#include "pfm.h" #include #include #include @@ -27,18 +28,16 @@ #include #include #include "alloc.h" -#include "avl.h" #include "error.h" #include "file-handle.h" -#include "gmp/gmp.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" -#undef DEBUGGING -/*#define DEBUGGING 1 */ #include "debug-print.h" /* pfm writer file_handle extension. */ @@ -95,10 +94,10 @@ pfm_write_dictionary (struct file_handle *handle, struct dictionary *dict) { 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. */ @@ -137,8 +136,9 @@ lossage: /* 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); @@ -154,7 +154,7 @@ bufwrite (struct file_handle *h, const void *buf, size_t nbytes) goto lossage; nbytes -= n; - *((char **) &buf) += n; + buf += n; ext->lc = 0; } @@ -386,11 +386,11 @@ write_variables (struct file_handle *h, struct dictionary *dict) { 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] = { @@ -400,7 +400,7 @@ write_variables (struct file_handle *h, struct dictionary *dict) 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) @@ -425,26 +425,29 @@ write_value_labels (struct file_handle *h, struct dictionary *dict) { 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;