+ do
+ {
+ if (pgm->map == NULL)
+ ok = sfm_read_case (pgm->reader, c);
+ else
+ {
+ ok = sfm_read_case (pgm->reader, &pgm->bounce);
+ if (ok)
+ map_case (pgm->map, &pgm->bounce, c);
+ }
+
+ if (ok)
+ ok = write_case (wc_data);
+ }
+ while (ok);
+}
+
+const struct case_source_class get_source_class =
+ {
+ "GET",
+ NULL,
+ get_source_read,
+ get_source_destroy,
+ };
+\f
+/* XSAVE transformation and SAVE procedure. */
+struct save_trns
+ {
+ struct trns_header h;
+ struct sfm_writer *writer; /* System file writer. */
+ struct case_map *map; /* Map from active file to system file dict. */
+ struct ccase bounce; /* Bounce buffer. */
+ };
+
+static int save_write_case_func (struct ccase *, void *);
+static trns_proc_func save_trns_proc;
+static trns_free_func save_trns_free;
+
+/* Parses the SAVE or XSAVE command
+ and returns the parsed transformation. */
+static struct save_trns *
+cmd_save_internal (void)
+{
+ struct file_handle *fh;
+ struct dictionary *dict = NULL;
+ struct save_trns *t = NULL;
+ int compress = get_scompression ();