[610] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[D-O-H] r713 - / trunk/owl

daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:07:56 2009

Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Fri, 18 May 2007 16:54:52 -0400 (EDT)

Author: nelhage
Date: 2007-05-18 16:54:51 -0400 (Fri, 18 May 2007)
New Revision: 713

Modified:
   /
   trunk/owl/perlglue.xs
   trunk/owl/perlwrap.pm
   trunk/owl/variable.c
Log:
 r21973@phanatique:  nelhage | 2007-05-18 16:54:42 -0400
 Adding the ability to define new variables from perl.



Property changes on: 
___________________________________________________________________
Name: svk:merge
   - 6122c8b4-0e12-0410-9533-8bcd7c66c992:/local/dirty-owl-hacks:24493
6aa88b72-b502-0410-8cb4-a5dd0230fb79:/owl-local:1356
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/barnowl:21971
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/d-o-h:18636
   + 6122c8b4-0e12-0410-9533-8bcd7c66c992:/local/dirty-owl-hacks:24493
6aa88b72-b502-0410-8cb4-a5dd0230fb79:/owl-local:1356
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/barnowl:21973
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/d-o-h:18636

Modified: trunk/owl/perlglue.xs
===================================================================
--- trunk/owl/perlglue.xs	2007-05-17 18:43:02 UTC (rev 712)
+++ trunk/owl/perlglue.xs	2007-05-18 20:54:51 UTC (rev 713)
@@ -322,9 +322,48 @@
 	PREINIT:
 		char *rv = NULL;
 	CODE:
-rv = owl_text_wordwrap(in, cols);
+		rv = owl_text_wordwrap(in, cols);
 		RETVAL = rv;	
 	OUTPUT:
 		RETVAL
 	CLEANUP:
 		if (rv) owl_free(rv);
+
+void
+new_variable_string_internal(name, ival, summ, desc)
+	char * name
+	char * ival
+	char * summ
+	char * desc
+	CODE:
+	owl_variable_dict_newvar_string(owl_global_get_vardict(&g),
+					name,
+					summ,
+					desc,
+					ival);
+
+void
+new_variable_int_internal(name, ival, summ, desc)
+	char * name
+	int ival
+	char * summ
+	char * desc
+	CODE:
+	owl_variable_dict_newvar_int(owl_global_get_vardict(&g),
+				     name,
+				     summ,
+				     desc,
+				     ival);
+
+void
+new_variable_bool_internal(name, ival, summ, desc)
+	char * name
+	int ival
+	char * summ
+	char * desc
+	CODE:
+	owl_variable_dict_newvar_bool(owl_global_get_vardict(&g),
+				      name,
+				      summ,
+				      desc,
+				      ival);

Modified: trunk/owl/perlwrap.pm
===================================================================
--- trunk/owl/perlwrap.pm	2007-05-17 18:43:02 UTC (rev 712)
+++ trunk/owl/perlwrap.pm	2007-05-18 20:54:51 UTC (rev 713)
@@ -79,6 +79,34 @@
     BarnOwl::new_command_internal($name, $func, $args{summary}, $args{usage}, $args{description});
 }
 
+sub new_variable_int {
+    unshift @_, \&BarnOwl::new_variable_int_internal, 0;
+    goto \&_new_variable;
+}
+
+sub new_variable_bool {
+    unshift @_, \&BarnOwl::new_variable_bool_internal, 0;
+    goto \&_new_variable;
+}
+
+sub new_variable_string {
+    unshift @_, \&BarnOwl::new_variable_string_internal, "";
+    goto \&_new_variable;
+}
+
+sub _new_variable {
+    my $func = shift;
+    my $default_default = shift;
+    my $name = shift;
+    my $args = shift || {};
+    my %args = (
+        summary     => "",
+        description => "",
+        default     => $default_default,
+        %{$args});
+    $func->($name, $args{default}, $args{summary}, $args{description});
+}
+
 #####################################################################
 #####################################################################
 

Modified: trunk/owl/variable.c
===================================================================
--- trunk/owl/variable.c	2007-05-17 18:43:02 UTC (rev 712)
+++ trunk/owl/variable.c	2007-05-18 20:54:51 UTC (rev 713)
@@ -517,6 +517,63 @@
   return 0;
 }
 
+void owl_variable_dict_add_variable(owl_vardict * vardict,
+                                    owl_variable * var) {
+  owl_dict_insert_element(vardict, var->name, (void*)var, NULL);
+}
+
+owl_variable * owl_variable_newvar(char *name, char *summary, char * description) {
+  owl_variable * var = (owl_variable*)owl_malloc(sizeof(owl_variable));
+  memset(var, 0, sizeof(owl_variable));
+  var->name = owl_strdup(name);
+  var->summary = owl_strdup(summary);
+  var->description = owl_strdup(description);
+  return var;
+}
+
+void owl_variable_dict_newvar_string(owl_vardict * vd, char *name, char *summ, char * desc, char * initval) {
+  owl_variable * var = owl_variable_newvar(name, summ, desc);
+  var->type = OWL_VARIABLE_STRING;
+  var->pval_default = owl_strdup(initval);
+  var->set_fn = owl_variable_string_set_default;
+  var->set_fromstring_fn = owl_variable_string_set_fromstring_default;
+  var->get_fn = owl_variable_get_default;
+  var->get_tostring_fn = owl_variable_string_get_tostring_default;
+  var->free_fn = owl_variable_free_default;
+  var->set_fn(var, initval);
+  owl_variable_dict_add_variable(vd, var);
+}
+
+void owl_variable_dict_newvar_int(owl_vardict * vd, char *name, char *summ, char * desc, int initval) {
+  owl_variable * var = owl_variable_newvar(name, summ, desc);
+  var->type = OWL_VARIABLE_INT;
+  var->ival_default = initval;
+  var->validate_fn = owl_variable_int_validate_default;
+  var->set_fn = owl_variable_int_set_default;
+  var->set_fromstring_fn = owl_variable_int_set_fromstring_default;
+  var->get_fn = owl_variable_get_default;
+  var->get_tostring_fn = owl_variable_int_get_tostring_default;
+  var->free_fn = owl_variable_free_default;
+  var->val = owl_malloc(sizeof(int));
+  var->set_fn(var, &initval);
+  owl_variable_dict_add_variable(vd, var);
+}
+
+void owl_variable_dict_newvar_bool(owl_vardict * vd, char *name, char *summ, char * desc, int initval) {
+  owl_variable * var = owl_variable_newvar(name, summ, desc);
+  var->type = OWL_VARIABLE_BOOL;
+  var->ival_default = initval;
+  var->validate_fn = owl_variable_bool_validate_default;
+  var->set_fn = owl_variable_bool_set_default;
+  var->set_fromstring_fn = owl_variable_bool_set_fromstring_default;
+  var->get_fn = owl_variable_get_default;
+  var->get_tostring_fn = owl_variable_bool_get_tostring_default;
+  var->free_fn = owl_variable_free_default;
+  var->val = owl_malloc(sizeof(int));
+  var->set_fn(var, &initval);
+  owl_variable_dict_add_variable(vd, var);
+}
+
 void owl_variable_dict_free(owl_vardict *d) {
   owl_dict_free_all(d, (void(*)(void*))owl_variable_free);
 }
@@ -969,8 +1026,26 @@
   FAIL_UNLESS("set enum 9", -1==owl_variable_set_fromstring(&vd,"webbrowser","netscapey",0,0));
   FAIL_UNLESS("get enum 10", OWL_WEBBROWSER_NETSCAPE==owl_variable_get_int(&vd,"webbrowser"));
 
+  owl_variable * v;
+  
+  owl_variable_dict_newvar_string(&vd, "stringvar", "", "", "testval");
+  FAIL_UNLESS("get new string var", NULL != (v = owl_variable_get(&vd, "stringvar", OWL_VARIABLE_STRING)));
+  FAIL_UNLESS("get new string val", !strcmp("testval", owl_variable_get_string(&vd, "stringvar")));
+  owl_variable_set_string(&vd, "stringvar", "new val");
+  FAIL_UNLESS("update string val", !strcmp("new val", owl_variable_get_string(&vd, "stringvar")));
 
+  owl_variable_dict_newvar_int(&vd, "intvar", "", "", 47);
+  FAIL_UNLESS("get new int var", NULL != (v = owl_variable_get(&vd, "intvar", OWL_VARIABLE_INT)));
+  FAIL_UNLESS("get new int val", 47 == owl_variable_get_int(&vd, "intvar"));
+  owl_variable_set_int(&vd, "intvar", 17);
+  FAIL_UNLESS("update bool val", 17 == owl_variable_get_int(&vd, "intvar"));
 
+  owl_variable_dict_newvar_bool(&vd, "boolvar", "", "", 1);
+  FAIL_UNLESS("get new bool var", NULL != (v = owl_variable_get(&vd, "boolvar", OWL_VARIABLE_BOOL)));
+  FAIL_UNLESS("get new bool val", owl_variable_get_bool(&vd, "boolvar"));
+  owl_variable_set_bool_off(&vd, "boolvar");
+  FAIL_UNLESS("update string val", !owl_variable_get_bool(&vd, "boolvar"));
+
   owl_variable_dict_free(&vd);
 
   if (numfailed) printf("*** WARNING: failures encountered with owl_variable\n");


home help back first fref pref prev next nref lref last post