+
+/* Load a system file.
+ Return TRUE if successfull
+*/
+gboolean
+load_system_file(const gchar *file_name)
+{
+ int var_cnt ;
+
+ 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);
+
+ clear_file();
+
+ 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_set_window_title(basename(file_name));
+
+ var_cnt = dict_get_next_value_idx(the_dictionary->dict);
+ if ( var_cnt == 0 )
+ return FALSE;
+
+
+ for(;;)
+ {
+ struct ccase c;
+ case_create(&c, var_cnt);
+ if ( 0 == sfm_read_case (reader, &c) )
+ {
+ case_destroy(&c);
+ break;
+ }
+
+ if ( !psppire_case_file_append_case(data_store->case_file, &c) )
+ {
+ g_warning("Cannot write case to casefile\n");
+ break;
+ }
+ case_destroy(&c);
+ }
+
+ sfm_close_reader(reader);
+
+ psppire_case_file_get_case_count(data_store->case_file);
+
+ return TRUE;
+}
+