+/* Load a system file.
+ Return TRUE if successfull
+*/
+gboolean
+load_system_file(const gchar *file_name)
+{
+ int ni ;
+ gint case_num;
+
+ PsppireVarStore *var_store ;
+ PsppireDataStore *data_store ;
+ struct dictionary *new_dict;
+ struct sfm_read_info ri;
+ struct sfm_reader *reader ;
+
+ GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet");
+ GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet");
+
+
+ g_assert(data_sheet);
+ g_assert(var_sheet);
+
+ if ( psppire_handle )
+ fh_free(psppire_handle);
+
+ psppire_handle =
+ fh_create_file (handle_name, file_name, fh_default_properties());
+
+ if ( !psppire_handle )
+ {
+ g_warning("Cannot read handle for reading system file \"%s\"\n",
+ file_name);
+ return FALSE;
+ }
+
+
+ reader = sfm_open_reader (psppire_handle, &new_dict, &ri);
+
+ if ( ! reader )
+ return FALSE;
+
+ /* FIXME: We need a better way of updating a dictionary than this */
+ the_dictionary = psppire_dict_new_from_dict(new_dict);
+
+ var_store =
+ PSPPIRE_VAR_STORE(gtk_sheet_get_model(GTK_SHEET(var_sheet)));
+
+ psppire_var_store_set_dictionary(var_store, the_dictionary);
+
+
+ data_store =
+ PSPPIRE_DATA_STORE(gtk_sheet_get_model(GTK_SHEET(data_sheet)));
+
+ psppire_data_store_set_dictionary(data_store,
+ the_dictionary);
+
+ psppire_case_array_clear(data_store->cases);
+
+
+ psppire_set_window_title(basename(file_name));
+
+ ni = dict_get_next_value_idx(the_dictionary->dict);
+ if ( ni == 0 )
+ return FALSE;
+
+ for(case_num=0;;case_num++)
+ {
+ if (!psppire_case_array_append_case(the_cases,
+ populate_case_from_reader,
+ reader))
+ break;
+ }
+
+
+ sfm_close_reader(reader);
+
+ return TRUE;
+}
+
+