X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-case-file.c;h=35db14ef9b6b2aa0eaf374700322afba56454d2b;hb=480a0746507ce73d26f528b56dc3ed80195096e0;hp=f869e4b0dbf6aaea22383e7735efa8bd56c49397;hpb=57b436a22d9ae0e395fb2e3ce101c2b5c2e6939e;p=pspp-builds.git diff --git a/src/ui/gui/psppire-case-file.c b/src/ui/gui/psppire-case-file.c index f869e4b0..35db14ef 100644 --- a/src/ui/gui/psppire-case-file.c +++ b/src/ui/gui/psppire-case-file.c @@ -18,7 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - +#include #include #include @@ -156,7 +156,7 @@ psppire_case_file_new (gint val_cnt) { PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL); - cf->flexifile = flexifile_create(val_cnt); + cf->flexifile = flexifile_create (val_cnt); return cf; } @@ -177,23 +177,19 @@ psppire_case_file_delete_cases(PsppireCaseFile *cf, gint n_cases, gint first) return result; } -/* Insert a blank case to the case file */ +/* Insert case CC into the case file before POSN */ gboolean psppire_case_file_insert_case(PsppireCaseFile *cf, - gint posn) + struct ccase *cc, + gint posn) { bool result ; - struct ccase cc; g_return_val_if_fail(cf, FALSE); g_return_val_if_fail(cf->flexifile, FALSE); - case_create (&cc, casefile_get_value_cnt(cf->flexifile)); - - result = flexifile_insert_case(FLEXIFILE(cf->flexifile), &cc, posn); + result = flexifile_insert_case(FLEXIFILE(cf->flexifile), cc, posn); - case_destroy (&cc); - if ( result ) g_signal_emit(cf, signal[CASE_INSERTED], 0, posn); else @@ -202,6 +198,7 @@ psppire_case_file_insert_case(PsppireCaseFile *cf, return result; } + /* Append a case to the case file */ gboolean psppire_case_file_append_case(PsppireCaseFile *cf, @@ -250,7 +247,7 @@ psppire_case_file_get_value(const PsppireCaseFile *cf, gint casenum, gint idx) flexifile_get_case(FLEXIFILE(cf->flexifile), casenum, &c); - v = case_data(&c, idx); + v = case_data_idx(&c, idx); case_destroy(&c); @@ -287,7 +284,7 @@ psppire_case_file_set_value(PsppireCaseFile *cf, gint casenum, gint idx, bytes = DIV_RND_UP(width, MAX_SHORT_STRING) * MAX_SHORT_STRING ; /* Cast away const in flagrant abuse of the casefile */ - memcpy((union value *)case_data(&cc, idx), v, bytes); + memcpy((union value *)case_data_idx(&cc, idx), v, bytes); g_signal_emit(cf, signal[CASE_CHANGED], 0, casenum); @@ -299,7 +296,7 @@ psppire_case_file_set_value(PsppireCaseFile *cf, gint casenum, gint idx, /* Set the IDXth value of case C using D_IN */ gboolean psppire_case_file_data_in(PsppireCaseFile *cf, gint casenum, gint idx, - struct data_in *d_in) + struct substring input, const struct fmt_spec *fmt) { struct ccase cc ; @@ -312,9 +309,8 @@ psppire_case_file_data_in(PsppireCaseFile *cf, gint casenum, gint idx, return FALSE; /* Cast away const in flagrant abuse of the casefile */ - d_in->v = (union value *) case_data(&cc, idx); - - if ( ! data_in(d_in) ) + if (!data_in (input, fmt->type, 0, 0, + (union value *) case_data_idx(&cc, idx), fmt_var_width (fmt))) g_warning("Cant set value\n"); g_signal_emit(cf, signal[CASE_CHANGED], 0, casenum); @@ -329,7 +325,7 @@ psppire_case_file_sort(PsppireCaseFile *cf, const struct sort_criteria *sc) struct ccase cc; gint c; struct casefile *cfile; - struct casereader *reader = casefile_get_reader(cf->flexifile); + struct casereader *reader = casefile_get_reader (cf->flexifile, NULL); const int value_cnt = casefile_get_value_cnt(cf->flexifile); cfile = sort_execute(reader, sc); @@ -354,8 +350,8 @@ psppire_case_file_sort(PsppireCaseFile *cf, const struct sort_criteria *sc) /* Resize the cases in the casefile, by inserting N_VALUES into every one of them. */ gboolean -psppire_case_file_insert_values(PsppireCaseFile *cf, - gint n_values, gint before) +psppire_case_file_insert_values (PsppireCaseFile *cf, + gint n_values, gint before) { g_return_val_if_fail(cf, FALSE); @@ -365,6 +361,18 @@ psppire_case_file_insert_values(PsppireCaseFile *cf, return TRUE; } - return flexifile_resize(FLEXIFILE(cf->flexifile), n_values, before); + return flexifile_resize (FLEXIFILE(cf->flexifile), n_values, before); } +/* Fills C with the CASENUMth case. + Returns true on success, false otherwise. + */ +gboolean +psppire_case_file_get_case (const PsppireCaseFile *cf, gint casenum, + struct ccase *c) +{ + g_return_val_if_fail (cf, FALSE); + g_return_val_if_fail (cf->flexifile, FALSE); + + return flexifile_get_case (FLEXIFILE(cf->flexifile), casenum, c); +}