Fix compiler warnings
[pspp] / src / ui / gui / widget-io.c
index 81ffd7311dea4273e4557fae687acc945dec746e..da9c9cb1e868f7469c152a62307790779a5829d3 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007  Free Software Foundation
+   Copyright (C) 2007, 2009, 2011  Free Software Foundation
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <gl/gettext.h>
 
+#include "xalloc.h"
 
 
-static void
-ship_label (GtkBox *box, const char **s, const char_directive *dir)
-{
-  GtkWidget *label ;
-  gchar *text = g_strdup (*s);
-
-  if ( dir )
-    {
-      text [ dir->dir_start - *s ] = '\0';
-      *s = dir->dir_end;
-    }
-
-  label = gtk_label_new (text);
-  g_free (text);
-
-  gtk_box_pack_start (box, label, FALSE, FALSE, 0);
-  gtk_widget_show (label);
-}
-
 /* Returns a string generated from FMT and a list of GtkEntry widgets.
    Each conversion in FMT will be replaced with the text from the
    corresponding GtkEntry.  The normal printf semantics will be ignored.
@@ -69,7 +51,7 @@ widget_printf (const gchar *fmt, ...)
   if ( 0 !=  printf_parse (fmt, &d, &a) )
     return NULL;
 
-  widgets = calloc (sizeof (*widgets), d.count);
+  widgets = xcalloc (d.count, sizeof (*widgets));
   va_start (ap, fmt);
   for (i = 0 ; i < d.count ; ++i )
     {
@@ -78,7 +60,8 @@ widget_printf (const gchar *fmt, ...)
     }
   va_end (ap);
 
-  g_free (a.arg);
+  if (a.arg != a.direct_alloc_arg)
+    free (a.arg);
 
   output = g_string_sized_new (strlen (fmt));
 
@@ -106,7 +89,8 @@ widget_printf (const gchar *fmt, ...)
     }
 
   free (widgets);
-  free (d.dir);
+  if (d.dir != d.direct_alloc_dir)
+    free (d.dir);
 
   if (*s)
     g_string_append_len (output, s, -1);
@@ -115,100 +99,3 @@ widget_printf (const gchar *fmt, ...)
   g_string_free (output, FALSE);
   return text;
 }
-
-/*
-   Returns a GtkHBox populated with an GtkLabel and GtkEntry widgets.
-   Each conversion in FMT will cause a GtkEntry (possibly a GtkSpinButton) to
-   be created.  Any text between conversions produces a GtkLabel.
-   There should be N arguments following FMT should be of type GtkEntry **,
-   where N is the number of conversions.
-   These arguments will be filled with a pointer to the corresponding widgets.
-   Their properties may be changed, but they should not be unrefed.
- */
-GtkWidget *
-widget_scanf (const gchar *fmt, ...)
-{
-  char_directives d;
-  arguments a;
-  int i;
-  va_list ap;
-  GtkWidget ***widgets = NULL;
-  GtkWidget *hbox = NULL;
-  GtkWidget **w;
-  const char *s = fmt;
-
-  if ( 0 !=  printf_parse (fmt, &d, &a) )
-    return NULL;
-
-  g_free (a.arg);
-
-  va_start (ap, fmt);
-
-  if ( d.count > 0 )
-    {
-      hbox = gtk_hbox_new (FALSE, 0);
-      widgets = calloc (sizeof (*widgets), d.count);
-    }
-
-  for (i = 0 ; i < d.count ; ++i )
-    {
-      if ( d.dir[i].conversion != '%')
-       widgets[i] = va_arg (ap, GtkWidget **);
-    }
-  va_end (ap);
-
-
-  for (i = 0 ; i < d.count ; ++i )
-    {
-      char_directive dir = d.dir[i];
-      int precision = 0;
-      int width = 0;
-
-
-      if ( dir.precision_start && dir.precision_end)
-       precision = strtol (dir.precision_start + 1,
-                           (char **) &dir.precision_end, 10);
-
-      if ( dir.width_start && dir.width_end )
-       width = strtol (dir.width_start, (char **) &dir.width_end, 10);
-
-      if ( dir.dir_start > s )
-       ship_label (GTK_BOX (hbox), &s, &dir);
-
-      if ( dir.conversion == '%')
-       {
-         s++;
-         continue;
-       }
-
-      w = widgets [dir.arg_index];
-      switch (dir.conversion)
-       {
-       case 'd':
-       case 'i':
-       case 'f':
-         {
-           *w = gtk_spin_button_new_with_range (0, 100.0, 1.0);
-           g_object_set (*w, "digits", precision, NULL);
-         }
-         break;
-       case 's':
-         *w = gtk_entry_new ();
-         break;
-       };
-
-      g_object_set (*w, "width-chars", width, NULL);
-      gtk_box_pack_start (GTK_BOX (hbox), *w, FALSE, FALSE, 0);
-      gtk_widget_show (*w);
-    }
-
-  if ( *s )
-    ship_label (GTK_BOX (hbox), &s, NULL);
-
-
-  g_free (widgets);
-
-  free (d.dir);
-
-  return hbox;
-}