+gboolean
+psppire_case_file_delete_cases (PsppireCaseFile *cf, casenumber n_cases, casenumber first)
+{
+ g_return_val_if_fail (cf, FALSE);
+ g_return_val_if_fail (cf->datasheet, FALSE);
+
+ datasheet_delete_rows (cf->datasheet, first, n_cases);
+
+ g_signal_emit (cf, signals [CASES_DELETED], 0, n_cases, first);
+
+ return TRUE;
+}
+
+/* Insert case CC into the case file before POSN */
+gboolean
+psppire_case_file_insert_case (PsppireCaseFile *cf,
+ struct ccase *cc,
+ casenumber posn)
+{
+ struct ccase tmp;
+ bool result ;
+
+ g_return_val_if_fail (cf, FALSE);
+ g_return_val_if_fail (cf->datasheet, FALSE);
+
+ case_clone (&tmp, cc);
+ result = datasheet_insert_rows (cf->datasheet, posn, &tmp, 1);
+
+ if ( result )
+ g_signal_emit (cf, signals [CASE_INSERTED], 0, posn);
+ else
+ g_warning ("Cannot insert case at position %ld\n", posn);
+
+ return result;
+}
+