commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue/geas/src/classdef classdef.c classdef.h gc...


From: Reinhard Mueller
Subject: gnue/geas/src/classdef classdef.c classdef.h gc...
Date: Sun, 25 Nov 2001 16:11:22 -0500

CVSROOT:        /cvsroot/gnue
Module name:    gnue
Changes by:     Reinhard Mueller <address@hidden>       01/11/25 16:11:22

Modified files:
        geas/src/classdef: classdef.c classdef.h gcdinfo.c parse.y 

Log message:
        Implemented default values.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/classdef.c.diff?tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/classdef.h.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/gcdinfo.c.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/parse.y.diff?tr1=1.26&tr2=1.27&r1=text&r2=text

Patches:
Index: gnue/geas/src/classdef/classdef.c
diff -u gnue/geas/src/classdef/classdef.c:1.24 
gnue/geas/src/classdef/classdef.c:1.25
--- gnue/geas/src/classdef/classdef.c:1.24      Wed Nov 14 17:04:29 2001
+++ gnue/geas/src/classdef/classdef.c   Sun Nov 25 16:11:22 2001
@@ -19,7 +19,7 @@
    along with GEAS; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-   $Id: classdef.c,v 1.24 2001/11/14 22:04:29 reinhard Exp $
+   $Id: classdef.c,v 1.25 2001/11/25 21:11:22 reinhard Exp $
 */
 
 #include "config.h"
@@ -1091,6 +1091,24 @@
 }
 
 /* ------------------------------------------------------------------------- *\
+ * Set the default value of a field
+\* ------------------------------------------------------------------------- */
+void
+geas_cd_field_set_default (geas_cd_field *f, const char *default_val)
+{
+  g_return_if_fail (f);
+
+  if (default_val)
+    {
+      f->default_val = g_strdup (default_val);
+    }
+  else
+    {
+      f->default_val = NULL;
+    }
+}
+
+/* ------------------------------------------------------------------------- *\
  * Get the name of the field without module prefix
 \* ------------------------------------------------------------------------- */
 const char *
@@ -1196,6 +1214,17 @@
   g_return_val_if_fail (f, NULL);
 
   return (f->otherfield);
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Get the default value of a field
+\* ------------------------------------------------------------------------- */
+const char *
+geas_cd_field_get_default (const geas_cd_field *f)
+{
+  g_return_val_if_fail (f, NULL);
+
+  return (f->default_val);
 }
 
 /* ------------------------------------------------------------------------- *\
Index: gnue/geas/src/classdef/classdef.h
diff -u gnue/geas/src/classdef/classdef.h:1.21 
gnue/geas/src/classdef/classdef.h:1.22
--- gnue/geas/src/classdef/classdef.h:1.21      Wed Nov 14 17:04:29 2001
+++ gnue/geas/src/classdef/classdef.h   Sun Nov 25 16:11:22 2001
@@ -19,7 +19,7 @@
    along with GEAS; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-   $Id: classdef.h,v 1.21 2001/11/14 22:04:29 reinhard Exp $
+   $Id: classdef.h,v 1.22 2001/11/25 21:11:22 reinhard Exp $
 */
 
 /* ------------------------------------------------------------------------- *\
@@ -151,6 +151,8 @@
 #define GEAS_CD_FPROP_INTERNAL 0x0002   /* only for internal use of GEAS */
 
 void             geas_cd_field_set_format (geas_cd_field *f, int format);
+void             geas_cd_field_set_default (geas_cd_field *f,
+                                            const char *default_val);
 const char      *geas_cd_field_get_name (const geas_cd_field *f);
 const char      *geas_cd_field_get_name_full (const geas_cd_field *f);
 const char      *geas_cd_field_get_name_db (const geas_cd_field *f);
@@ -160,6 +162,7 @@
 geas_cd_field   *geas_cd_field_get_thisfield (const geas_cd_field *f);
 geas_cd_class   *geas_cd_field_get_otherclass (const geas_cd_field *f);
 geas_cd_field   *geas_cd_field_get_otherfield (const geas_cd_field *f);
+const char      *geas_cd_field_get_default (const geas_cd_field *f);
 void             geas_cd_field_prop_set (geas_cd_field *f, int property);
 void             geas_cd_field_prop_clr (geas_cd_field *f, int property);
 int              geas_cd_field_prop_get (geas_cd_field *f, int property);
Index: gnue/geas/src/classdef/gcdinfo.c
diff -u gnue/geas/src/classdef/gcdinfo.c:1.10 
gnue/geas/src/classdef/gcdinfo.c:1.11
--- gnue/geas/src/classdef/gcdinfo.c:1.10       Wed Nov 21 16:41:58 2001
+++ gnue/geas/src/classdef/gcdinfo.c    Sun Nov 25 16:11:22 2001
@@ -19,7 +19,7 @@
    along with GEAS; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-   $Id: gcdinfo.c,v 1.10 2001/11/21 21:41:58 reinhard Exp $
+   $Id: gcdinfo.c,v 1.11 2001/11/25 21:11:22 reinhard Exp $
 */
 
 #include <stdio.h>
@@ -35,6 +35,7 @@
   geas_cd_class *c;
   geas_cd_fieldlist *fl;
   geas_cd_field *f;
+  char *default_val;
 
   geas_cd_init ();
   geas_cd_read_gcd ("../../../gnue-config");
@@ -111,6 +112,15 @@
           if (geas_cd_field_prop_get (f, GEAS_CD_FPROP_NOTNULL))
             {
               printf ("N");
+            }
+          else
+            {
+              printf (" ");
+            }
+          default_val = geas_cd_field_get_default (f);
+          if (default_val)
+            {
+              printf (default_val);
             }
           printf ("\n");
         }
Index: gnue/geas/src/classdef/parse.y
diff -u gnue/geas/src/classdef/parse.y:1.26 gnue/geas/src/classdef/parse.y:1.27
--- gnue/geas/src/classdef/parse.y:1.26 Wed Nov 21 16:57:43 2001
+++ gnue/geas/src/classdef/parse.y      Sun Nov 25 16:11:22 2001
@@ -19,7 +19,7 @@
    along with GEAS; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-   $Id: parse.y,v 1.26 2001/11/21 21:57:43 reinhard Exp $
+   $Id: parse.y,v 1.27 2001/11/25 21:11:22 reinhard Exp $
 */
 
 %{
@@ -87,6 +87,10 @@
                            geas_cd_field *otherfield);
 
 static gboolean _set_field_format (int format);
+static gboolean _set_field_default_string (const gchar *string);
+static gboolean _set_field_default_symbol (const gchar *symbol);
+static gboolean _set_field_default_integer (gint integer);
+static gboolean _set_field_default_floating (gdouble floating);
 static void     _set_field_prop (int property);
 
 %}
@@ -339,10 +343,28 @@
 ;
 
 fdefault:   /* */
-  |         '=' STRING                  { g_free ($2); /* TODO */ }
-  |         '=' SYMBOL                  { g_free ($2); /* TODO */ }
-  |         '=' INTEGER                 { /* TODO */ }
-  |         '=' FLOAT                   { /* TODO */ }
+  |         '=' STRING                  {
+                                          gboolean r;
+                                          r = _set_field_default_string ($2);
+                                          g_free ($2);
+                                          if (!r) YYERROR;
+                                        }
+  |         '=' SYMBOL                  {
+                                          gboolean r;
+                                          r = _set_field_default_symbol ($2);
+                                          g_free ($2);
+                                          if (!r) YYERROR;
+                                        }
+  |         '=' INTEGER                 {
+                                          gboolean r;
+                                          r = _set_field_default_integer ($2);
+                                          if (!r) YYERROR;
+                                        }
+  |         '=' FLOAT                   {
+                                          gboolean r;
+                                          r = _set_field_default_floating ($2);
+                                          if (!r) YYERROR;
+                                        }
 ;
 
 properties: /* */
@@ -1112,6 +1134,145 @@
       geas_cd_field_set_format (_current_field, format);
       return (TRUE);
 
+    default:
+      g_assert_not_reached ();
+      return (FALSE);
+    }
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Set the default value of the current field as a string
+\* ------------------------------------------------------------------------- */
+static gboolean
+_set_field_default_string (const char *string)
+{
+  switch (_current_pass)
+    {
+    case 1:
+      return (TRUE);
+      break;
+
+    case 2:
+      switch (geas_cd_field_get_datatype (_current_field))
+        {
+        case GEAS_CD_DATATYPE_CHAR:
+        case GEAS_CD_DATATYPE_TEXT:
+          geas_cd_field_set_default (_current_field, string);
+          return (TRUE);
+        default:
+          yyerror ("invalid default value type");
+          return (FALSE);
+        }
+    default:
+      g_assert_not_reached ();
+      return (FALSE);
+    }
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Set the default value of the current field as a symbol
+\* ------------------------------------------------------------------------- */
+static gboolean
+_set_field_default_symbol (const char *symbol)
+{
+  switch (_current_pass)
+    {
+    case 1:
+      return (TRUE);
+      break;
+
+    case 2:
+      switch (geas_cd_field_get_datatype (_current_field))
+        {
+        case GEAS_CD_DATATYPE_BOOL:
+          if (strcmp (symbol, "true") && strcmp (symbol, "false"))
+            {
+              yyerror ("invalid boolean value");
+              return (FALSE);
+            }
+          break;
+        case GEAS_CD_DATATYPE_DATE:
+        case GEAS_CD_DATATYPE_TIME:
+        case GEAS_CD_DATATYPE_DATETIME:
+          if (strcmp (symbol, "now"))
+            {
+              yyerror ("invalid date/time value");
+              return (FALSE);
+            }
+          break;
+        default:
+          yyerror ("invalid default value type");
+          return (FALSE);
+        }
+      geas_cd_field_set_default (_current_field, symbol);
+      return (TRUE);
+    default:
+      g_assert_not_reached ();
+      return (FALSE);
+    }
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Set the default value of the current field as an integer
+\* ------------------------------------------------------------------------- */
+static gboolean
+_set_field_default_integer (gint integer)
+{
+  char *s;
+
+  switch (_current_pass)
+    {
+    case 1:
+      return (TRUE);
+      break;
+
+    case 2:
+      switch (geas_cd_field_get_datatype (_current_field))
+        {
+        case GEAS_CD_DATATYPE_INT16:
+        case GEAS_CD_DATATYPE_INT32:
+        case GEAS_CD_DATATYPE_INT64:
+        case GEAS_CD_DATATYPE_FLOAT:
+          s = g_strdup_printf ("%d", integer);
+          geas_cd_field_set_default (_current_field, s);
+          g_free (s);
+          return (TRUE);
+        default:
+          yyerror ("invalid default value type");
+          return (FALSE);
+        }
+    default:
+      g_assert_not_reached ();
+      return (FALSE);
+    }
+}
+
+/* ------------------------------------------------------------------------- *\
+ * Set the default value of the current field as a floating point number
+\* ------------------------------------------------------------------------- */
+static gboolean
+_set_field_default_floating (gdouble floating)
+{
+  char *s;
+
+  switch (_current_pass)
+    {
+    case 1:
+      return (TRUE);
+      break;
+
+    case 2:
+      switch (geas_cd_field_get_datatype (_current_field))
+        {
+        case GEAS_CD_DATATYPE_FLOAT:
+          s = g_strdup_printf ("%f", floating);
+          geas_cd_field_set_default (_current_field, s);
+          g_free (s);
+          return (TRUE);
+        default:
+          yyerror ("invalid default value type");
+          return (FALSE);
+        }
     default:
       g_assert_not_reached ();
       return (FALSE);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]