[Top][All Lists]
[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);