X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fspreadsheet-reader.c;h=9cd118c758673b93eb89687124f1b95d96954f01;hb=771599745cfe2a306dc45f2f299b9bfbfa19601b;hp=4a85cb22ddbc05597e1e456bac10ef7b4dc372ac;hpb=6fba66073900819ff07cb486c97a15cb0fc36724;p=pspp diff --git a/src/data/spreadsheet-reader.c b/src/data/spreadsheet-reader.c index 4a85cb22dd..9cd118c758 100644 --- a/src/data/spreadsheet-reader.c +++ b/src/data/spreadsheet-reader.c @@ -18,6 +18,7 @@ #include "spreadsheet-reader.h" +#include #include "gnumeric-reader.h" #include "ods-reader.h" @@ -28,42 +29,64 @@ #include #include -void -spreadsheet_close (UNUSED struct spreadsheet *spreadsheet) +void +spreadsheet_ref (struct spreadsheet *s) { + s->ref_cnt++; +} + +void +spreadsheet_unref (struct spreadsheet *s) +{ + switch (s->type) + { + case SPREADSHEET_ODS: + ods_unref (s); + break; + + case SPREADSHEET_GNUMERIC: + gnumeric_unref (s); + break; + default: + NOT_REACHED (); + break; + } } -struct casereader * -spreadsheet_make_reader (struct spreadsheet *s, const struct spreadsheet_read_options *opts) +struct casereader * +spreadsheet_make_reader (struct spreadsheet *s, + const struct spreadsheet_read_options *opts) { - if ( s->type == SPREADSHEET_ODS) + if (s->type == SPREADSHEET_ODS) return ods_make_reader (s, opts); - if ( s->type == SPREADSHEET_GNUMERIC) + + if (s->type == SPREADSHEET_GNUMERIC) return gnumeric_make_reader (s, opts); return NULL; } -const char * +const char * spreadsheet_get_sheet_name (struct spreadsheet *s, int n) { - if ( s->type == SPREADSHEET_ODS) + if (s->type == SPREADSHEET_ODS) return ods_get_sheet_name (s, n); - if ( s->type == SPREADSHEET_GNUMERIC) + if (s->type == SPREADSHEET_GNUMERIC) return gnumeric_get_sheet_name (s, n); return NULL; } -char * + +char * spreadsheet_get_sheet_range (struct spreadsheet *s, int n) { - if ( s->type == SPREADSHEET_ODS) + if (s->type == SPREADSHEET_ODS) return ods_get_sheet_range (s, n); - if ( s->type == SPREADSHEET_GNUMERIC) + if (s->type == SPREADSHEET_GNUMERIC) return gnumeric_get_sheet_range (s, n); return NULL; @@ -131,7 +154,7 @@ int_to_ps26 (int i) while (i > lower + base - 1) { lower += base; - base *= RADIX; + base *= RADIX; assert (base > 0); exp++; } @@ -155,25 +178,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 ; - char *csi ; char *s ; - if ( col0 < 0) return NULL; - if ( rowi < 0) return NULL; - if ( coli < 0) return NULL; - if ( row0 < 0) return NULL; + if (col0 < 0) return NULL; + if (row0 < 0) return NULL; cs0 = int_to_ps26 (col0); - csi = int_to_ps26 (coli); - s = c_xasprintf ("%s%d:%s%d", - cs0, row0 + 1, - csi, rowi + 1); + 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; } @@ -197,7 +229,7 @@ convert_cell_ref (const char *ref, int n = sscanf (ref, "%4[a-zA-Z]%d:%4[a-zA-Z]%d", startcol, &startrow, stopcol, &stoprow); - if ( n != 4) + if (n != 4) return false; str_uppercase (startcol);