+
+void
+gnumeric_destroy (struct spreadsheet *s)
+{
+ struct gnumeric_reader *r = (struct gnumeric_reader *) s;
+
+ if (0 == --r->ref_cnt)
+ {
+ int i;
+
+ for (i = 0; i < s->n_sheets; ++i)
+ {
+ xmlFree (r->sheets[i].name);
+ }
+
+ free (r->sheets);
+ state_data_destroy (&r->msd);
+
+ free (r);
+ }
+}
+
+
+const char *
+gnumeric_get_sheet_name (struct spreadsheet *s, int n)
+{
+ struct gnumeric_reader *gr = (struct gnumeric_reader *) s;
+ assert (n < s->n_sheets);
+
+ return gr->sheets[n].name;
+}
+
+
+static void process_node (struct gnumeric_reader *r, struct state_data *sd);
+
+
+
+char *
+gnumeric_get_sheet_range (struct spreadsheet *s, int n)
+{
+ int ret;
+ struct gnumeric_reader *gr = (struct gnumeric_reader *) s;
+
+ assert (n < s->n_sheets);
+
+ while (
+ (gr->sheets[n].stop_col == -1)
+ &&
+ (1 == (ret = xmlTextReaderRead (gr->msd.xtr)))
+ )
+ {
+ process_node (gr, &gr->msd);
+ }
+
+ return create_cell_range (
+ gr->sheets[n].start_col,
+ gr->sheets[n].start_row,
+ gr->sheets[n].stop_col,
+ gr->sheets[n].stop_row);
+}