Hi all,
I'm thinking about adding some configurable default attributes to a
newly placed pin.
I thought about two options:
- Option 1: Load a list with name,values of attributes to be added
from the file gschemrc.
- Option 2: Write an add-pin-hook function and do it in scheme.
By now I like option 2, but my knowledge about C interfacing to scheme
is limited, so I have some doubts...
At the end of o_pin_end function I added:
if (scm_hook_empty_p(add_pin_hook) == SCM_BOOL_F &&
o_current != NULL) {
scm_run_hook(add_pin_hook,
scm_cons(g_make_attrib_smob_list(w_current, o_current),
SCM_EOL));
}
so the new hook is run. As I understand, the first two parameters are
w_current and o_current.
The new hook is run, and if I put into gschemrc the following:
(define (print-all-attributes attribute-list)
(for-each (lambda (attribute) (display attribute)) attribute-list))
(add-hook! add-pin-hook print-all-attributes)
I get nothing printed: the attribute list is empty. This isn't
surprising because by default, a pin has no attributes.
Now I wrote a very basic (and untested) scheme function which calls to
o_attrib_add_attrib:
SCM
g_add_attrib(SCM scm_wcurrent, SCM scm_object, SCM scm_newtext,
SCM scm_vis, SCM scm_show)
{
TOPLEVEL *w_current = (TOPLEVEL *) SCM_SMOB_DATA(scm_wcurrent);
OBJECT *object = (OBJECT *) SCM_SMOB_DATA (scm_object);
int vis, show;
gchar *newtext=SCM_STRING_CHARS(scm_newtext);
vis = SCM_INUM(scm_vis);
show = SCM_INUM(scm_show);
o_attrib_add_attrib (w_current, newtext, vis, show, object);
return SCM_BOOL_T;
}
This function is registered in g_register.nw as:
scm_c_define_gsubr ("add-attribute-to-object", 5, 0, 0, g_add_attrib);
I expect to be able to call this function inside the add-pin-hook
function, just adding the new parameters. The problem is: how can I do
it? if I try to print all the arguments to the add-pin-hook function, I
get an empty list.
Even if I do:
(define (print-all-attributes attribute-list)
(display "Parameter List length: ")
(display (length attribute-list))
(display ".\n")
(for-each (lambda (attribute) (display attribute)) attribute-list))
(add-hook! add-pin-hook print-all-attributes)
It reports a 0 elements list. Where have w_current and o_current gone?
Any ideas?. Thanks,
Carlos