X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fspreadsheet-reader.c;h=02e5c2d3c04b18e3cc38dcce5359ac9fbbada59d;hb=209fcc2d582be812858b179d4c8b54d4a2b797eb;hp=e34fcb38faa8045e216ffc99bc0c2e179b437f8f;hpb=1d05dd7fce36ca16a644705b0b05fd144f52463e;p=pspp diff --git a/src/data/spreadsheet-reader.c b/src/data/spreadsheet-reader.c index e34fcb38fa..02e5c2d3c0 100644 --- a/src/data/spreadsheet-reader.c +++ b/src/data/spreadsheet-reader.c @@ -18,26 +18,72 @@ #include "spreadsheet-reader.h" +#include +#include "gnumeric-reader.h" +#include "ods-reader.h" + #include #include #include +#include +#include +#include + + +void +spreadsheet_destroy (struct spreadsheet *s) +{ + switch (s->type) + { + case SPREADSHEET_ODS: + ods_destroy (s); + break; + case SPREADSHEET_GNUMERIC: + gnumeric_destroy (s); + break; + default: + NOT_REACHED (); + break; + } +} -struct spreadsheet * -spreadsheet_open (const char *filename) +struct casereader * +spreadsheet_make_reader (struct spreadsheet *s, const struct spreadsheet_read_options *opts) { - struct spreadsheet *ss = NULL; + if ( s->type == SPREADSHEET_ODS) + return ods_make_reader (s, opts); + if ( s->type == SPREADSHEET_GNUMERIC) + return gnumeric_make_reader (s, opts); - ss = gnumeric_probe (filename); - - return ss; + return NULL; } -void -spreadsheet_close (struct spreadsheet *spreadsheet) +const char * +spreadsheet_get_sheet_name (struct spreadsheet *s, int n) { + if ( s->type == SPREADSHEET_ODS) + return ods_get_sheet_name (s, n); + + if ( s->type == SPREADSHEET_GNUMERIC) + return gnumeric_get_sheet_name (s, n); + + return NULL; } +char * +spreadsheet_get_sheet_range (struct spreadsheet *s, int n) +{ + if ( s->type == SPREADSHEET_ODS) + return ods_get_sheet_range (s, n); + + if ( s->type == SPREADSHEET_GNUMERIC) + return gnumeric_get_sheet_range (s, n); + + return NULL; +} + + #define RADIX 26 static void @@ -107,7 +153,7 @@ int_to_ps26 (int i) i -= lower; i += base; - ret = malloc (exp); + ret = xmalloc (exp + 1); exp = 0; do @@ -123,16 +169,34 @@ int_to_ps26 (int i) return ret; } + char * -create_cell_ref (int col0, int row0, int coli, int rowi) +create_cell_ref (int col0, int row0) { - char *cs0 = int_to_ps26 (col0); - char *csi = int_to_ps26 (coli); - char *s = c_xasprintf ("%s%d:%s%ld", - cs0, row0 + 1, - csi, rowi + 1); + char *cs0 ; + char *s ; + + if ( col0 < 0) return NULL; + if ( row0 < 0) return NULL; + + cs0 = int_to_ps26 (col0); + s = c_xasprintf ("%s%d", cs0, row0 + 1); + free (cs0); - free (csi); + + return s; +} + +char * +create_cell_range (int col0, int row0, int coli, int rowi) +{ + char *s0 = create_cell_ref (col0, row0); + char *si = create_cell_ref (coli, rowi); + + char *s = c_xasprintf ("%s:%s", s0, si); + + free (s0); + free (si); return s; }