[610] in BarnOwl Developers
[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");