+ gchar *ref_cell_text = NULL;
+
+ gint n_cases = abs (sel->end_y - sel->start_y) + 1;
+ gint n_vars = abs (sel->end_x - sel->start_x) + 1;
+
+ if (n_cases == 1 && n_vars == 1)
+ {
+ /* A single cell is selected */
+ const struct variable *var = psppire_dict_get_variable (de->dict, sel->start_x);
+
+ if (var)
+ ref_cell_text = g_strdup_printf (_("%d : %s"),
+ sel->start_y + 1, var_get_name (var));
+ }
+ else
+ {
+ struct string s;
+
+ /* The glib string library does not understand the ' printf modifier
+ on all platforms, but the "struct string" library does (because
+ Gnulib fixes that problem), so use the latter. */
+ ds_init_empty (&s);
+ ds_put_format (&s, ngettext ("%'d case", "%'d cases", n_cases),
+ n_cases);
+ ds_put_byte (&s, ' ');
+ ds_put_unichar (&s, 0xd7); /* U+00D7 MULTIPLICATION SIGN */
+ ds_put_byte (&s, ' ');
+ ds_put_format (&s, ngettext ("%'d variable", "%'d variables",
+ n_vars),
+ n_vars);
+ ref_cell_text = ds_steal_cstr (&s);
+ }
+
+ gtk_label_set_label (GTK_LABEL (de->cell_ref_label),
+ ref_cell_text ? ref_cell_text : "");
+
+ g_free (ref_cell_text);