summaryrefslogtreecommitdiff
path: root/scripts/kconfig/kconfig.i
Side-by-side diff
Diffstat (limited to 'scripts/kconfig/kconfig.i') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/kconfig/kconfig.i133
1 files changed, 133 insertions, 0 deletions
diff --git a/scripts/kconfig/kconfig.i b/scripts/kconfig/kconfig.i
new file mode 100644
index 0000000..699cb13
--- a/dev/null
+++ b/scripts/kconfig/kconfig.i
@@ -0,0 +1,133 @@
+%module kconfig
+%{
+#include "kconfig_load.c"
+%}
+
+%init %{
+ kconfig_load();
+%}
+
+%nodefault;
+
+#ifdef SWIGRUBY
+%typemap (out) char * {
+ if ($1 == NULL)
+ $result = Qnil;
+ else
+ $result = rb_str_new2($1);
+}
+%typemap (in) char * {
+ if ($input == Qnil)
+ $1 = NULL;
+ else
+ $1 = STR2CSTR($input);
+}
+
+%{
+static void expr_to_s_help(void *data, const char *str)
+{
+ rb_str_cat((VALUE)data, str, strlen(str));
+}
+%}
+#endif
+
+%immutable;
+%include "expr.h"
+#define P(name,type,arg) extern type name arg
+%include "lkc_proto.h"
+%mutable;
+
+#ifdef SWIGRUBY
+%predicate menu::isVisible;
+%predicate symbol::isChangable;
+%predicate symbol::isChoice;
+%predicate symbol::isChoiceValue;
+#endif
+
+%extend menu {
+ bool isVisible(void) {
+ return menu_is_visible(self);
+ }
+#ifdef SWIGRUBY
+ void each(void) {
+ struct menu *child;
+ for (child = self->list; child; child = child->next)
+ rb_yield(SWIG_NewPointerObj(child, SWIGTYPE_p_menu, 0));
+ }
+ static void each_menu(void) {
+ struct menu *child;
+ for (child = rootmenu.list; child; child = child->next)
+ rb_yield(SWIG_NewPointerObj(child, SWIGTYPE_p_menu, 0));
+ }
+#endif
+}
+
+%extend symbol {
+ void calc_value(void) {
+ sym_calc_value(self);
+ }
+ tristate set_tristate(tristate val) {
+ return sym_set_tristate_value(self, val);
+ }
+ bool set_string(char *val) {
+ return sym_set_string_value(self, val);
+ }
+ const char *get_string(void) {
+ return sym_get_string_value(self);
+ }
+ bool isChangable(void) {
+ return sym_is_changable(self);
+ }
+ bool isChoice(void) {
+ return sym_is_choice(self);
+ }
+ bool isChoiceValue(void) {
+ return sym_is_choice_value(self);
+ }
+ static struct symbol *lookup(const char *name) {
+ return sym_lookup(name, 0);
+ }
+ static struct symbol *find(const char *name) {
+ return sym_find(name);
+ }
+ static const char *type_name(enum symbol_type type) {
+ return sym_type_name(type);
+ }
+#ifdef SWIGRUBY
+ void each(void) {
+ struct property *prop;
+ for (prop = self->prop; prop; prop = prop->next)
+ rb_yield(SWIG_NewPointerObj(prop, SWIGTYPE_p_property, 0));
+ }
+ static void each_sym(void) {
+ struct symbol *sym;
+ int i;
+ for (i = 0; i < SYMBOL_HASHSIZE; i++) {
+ for (sym = symbol_hash[i]; sym; sym = sym->next) {
+ if (sym->flags & SYMBOL_CONST)
+ continue;
+ rb_yield(SWIG_NewPointerObj(sym, SWIGTYPE_p_symbol, 0));
+ }
+ }
+ }
+#endif
+}
+
+%extend property {
+ static const char *type_name(enum prop_type type) {
+ return prop_get_type_name(type);
+ }
+}
+
+%extend expr {
+ static int comp_type(enum expr_type t1, enum expr_type t2) {
+ return expr_compare_type(t1, t2);
+ }
+#ifdef SWIGRUBY
+ VALUE __str__(void) {
+ VALUE str = rb_str_new2("");
+ expr_print(self, expr_to_s_help, (void*)str, E_NONE);
+ return str;
+ }
+#endif
+}