+ struct string dss;
+
+ const gchar *filter = "filter_$";
+ const gchar key[]="case_$";
+
+ ds_init_empty (&dss);
+
+ if (gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
+ "radiobutton-range"))))
+ {
+ GtkSpinButton *first =
+ GTK_SPIN_BUTTON (get_widget_assert (scd->xml,
+ "range-dialog-first"));
+
+ GtkSpinButton *last =
+ GTK_SPIN_BUTTON (get_widget_assert (scd->xml,
+ "range-dialog-last"));
+
+ ds_put_c_format (&dss,
+ "COMPUTE filter_$ = ($CASENUM >= %ld "
+ "AND $CASENUM <= %ld).\n",
+ (long) gtk_spin_button_get_value (first),
+ (long) gtk_spin_button_get_value (last)
+ );
+
+ ds_put_cstr (&dss, "EXECUTE.\n");
+ }
+ else if ( gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
+ "radiobutton-sample"))))
+ {
+ GtkWidget *random_sample =
+ get_widget_assert (scd->xml,
+ "radiobutton-sample-percent");
+
+ if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (random_sample)))
+ {
+ const double percentage =
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton));
+
+ ds_put_c_format (&dss,
+ "COMPUTE %s = RV.UNIFORM (0,1) < %g.\n",
+ filter,
+ percentage / 100.0 );
+ }
+ else
+ {
+ const gint n_cases =
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton1));
+ const gint from_n_cases =
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton2));
+
+
+ const gchar ranvar[]="rv_$";
+
+ ds_put_c_format (&dss,
+ "COMPUTE %s = $CASENUM.\n", key);
+
+ ds_put_c_format (&dss,
+ "COMPUTE %s = %s > %d.\n",
+ filter, key, from_n_cases);
+
+ ds_put_c_format (&dss,
+ "COMPUTE %s = RV.UNIFORM (0, 1).\n",
+ ranvar);
+
+ ds_put_c_format (&dss,
+ "SORT BY %s, %s.\n",
+ filter, ranvar);
+
+ ds_put_cstr (&dss, "EXECUTE.\n");
+
+
+ ds_put_c_format (&dss,
+ "COMPUTE %s = $CASENUM.\n",
+ filter );
+
+ ds_put_c_format (&dss,
+ "COMPUTE %s = %s <= %d\n",
+ filter,
+ filter,
+ n_cases );
+
+ ds_put_cstr (&dss, "EXECUTE.\n");
+
+
+ ds_put_c_format (&dss,
+ "SORT BY %s.\n",
+ key);
+
+ ds_put_c_format (&dss,
+ "DELETE VARIABLES %s, %s.\n",
+ key, ranvar);
+ }
+
+ ds_put_cstr (&dss, "EXECUTE.\n");
+ }
+ else
+ {
+ GtkEntry *entry =
+ GTK_ENTRY (get_widget_assert (scd->xml,
+ "filter-variable-entry"));
+ filter = gtk_entry_get_text (entry);
+ }
+
+ ds_put_c_format (&dss, "FILTER BY %s.\n", filter);
+
+ text = ds_steal_cstr (&dss);
+
+ ds_destroy (&dss);
+
+ return text;
+}
+
+static gchar *
+generate_syntax_delete (const struct select_cases_dialog *scd)
+{
+ gchar *text = NULL;
+ struct string dss;