Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22638
Modified Files:
Tag: devel_0_39
m_pd.h m_class.c m_glob.c s_path.c
Log Message:
class browser code, server side
Index: m_class.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_class.c,v
retrieving revision 1.3.4.7.2.13
retrieving revision 1.3.4.7.2.14
diff -C2 -d -r1.3.4.7.2.13 -r1.3.4.7.2.14
*** m_class.c 14 Mar 2006 13:17:35 -0000 1.3.4.7.2.13
--- m_class.c 21 Apr 2006 08:46:14 -0000 1.3.4.7.2.14
***************
*** 1004,1006 ****
--- 1004,1050 ----
return -1;
}
+
+ typedef struct t_class_list {
+ t_class *head;
+ struct t_class_list *tail;
+ } t_class_list;
+
+ static t_class_list *class_list = 0;
+
+ /* O(n) asymptotic time :-} */
+ /* only looks for already loaded classes though. */
+ t_class *class_find (t_symbol *s) {
+ t_class_list *me = class_list;
+ for (; me; me=me->tail) if (me->head->c_name == s) return me->head;
+ return 0;
+ }
+
+ void glob_update_class_info (t_pd *bogus, t_symbol *s, t_symbol *cb_recv, t_symbol *cb_sel) {
+ t_class *c = class_find(s);
+ if (!c) { post("class not found!"); return; }
+ sys_vgui("global class_info; set class_info(%s) [list "
+ "helpname \"%s\" externdir \"%s\" size \"%d\" "
+ /*
+ t_methodentry *c_methods; int c_nmethod;
+ t_method c_freemethod;
+ struct _widgetbehavior *c_wb;
+ struct _parentwidgetbehavior *c_pwb;
+ t_savefn c_savefn;
+ t_propertiesfn c_propertiesfn;
+ int c_floatsignalin;
+ */
+ "gobj \"%d\" patchable \"%d\" firstin \"%d\" "
+ "firsttip \"%s\" methods {",s->s_name,c->c_helpname->s_name,c->c_externdir->s_name,
+ c->c_size,c->c_gobj,c->c_patchable,c->c_firstin,c->c_firsttip->s_name);
+ if (c-> c_bangmethod != pd_defaultbang) sys_vgui("<bang> ");
+ if (c->c_pointermethod != pd_defaultpointer) sys_vgui("<pointer> ");
+ if (c-> c_floatmethod != pd_defaultfloat) sys_vgui("<float> ");
+ if (c-> c_symbolmethod != pd_defaultsymbol) sys_vgui("<symbol> ");
+ if (c-> c_listmethod != pd_defaultlist) sys_vgui("<list> ");
+ if (c-> c_anymethod != pd_defaultanything) sys_vgui("<any> ");
+ {int i; for (i=0; i<c->c_nmethod; i++) sys_vgui("%s ",c->c_methods[i].me_name->s_name);}
+ sys_vgui("}]; %s %s %s\n",cb_recv->s_name, cb_sel->s_name, s->s_name);
+ }
+
+
#endif
Index: m_pd.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v
retrieving revision 1.4.4.11.2.17
retrieving revision 1.4.4.11.2.18
diff -C2 -d -r1.4.4.11.2.17 -r1.4.4.11.2.18
*** m_pd.h 9 Mar 2006 14:22:51 -0000 1.4.4.11.2.17
--- m_pd.h 21 Apr 2006 08:46:14 -0000 1.4.4.11.2.18
***************
*** 445,448 ****
--- 445,449 ----
#endif
+ EXTERN t_class *class_find (t_symbol *s);
EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod,
t_method freemethod, size_t size, int flags, t_atomtypearg arg1, ...);
Index: s_path.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_path.c,v
retrieving revision 1.3.4.6.2.5
retrieving revision 1.3.4.6.2.6
diff -C2 -d -r1.3.4.6.2.5 -r1.3.4.6.2.6
*** s_path.c 30 Nov 2005 13:36:58 -0000 1.3.4.6.2.5
--- s_path.c 21 Apr 2006 08:46:14 -0000 1.3.4.6.2.6
***************
*** 615,616 ****
--- 615,624 ----
+ #ifdef DESIRE
+ void glob_update_path (void) {
+ t_namelist *nl;
+ sys_vgui("global pd_path; set pd_path {");
+ for (nl=sys_searchpath; nl; nl=nl->nl_next) sys_vgui("%s ",nl->nl_string);
+ sys_vgui("}\n");
+ }
+ #endif
Index: m_glob.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_glob.c,v
retrieving revision 1.4.4.2.2.5
retrieving revision 1.4.4.2.2.6
diff -C2 -d -r1.4.4.2.2.5 -r1.4.4.2.2.6
*** m_glob.c 20 Apr 2006 13:32:33 -0000 1.4.4.2.2.5
--- m_glob.c 21 Apr 2006 08:46:14 -0000 1.4.4.2.2.6
***************
*** 93,96 ****
--- 93,126 ----
}
+ #ifdef DESIRE
+ char *class_gethelpdir(t_class *c);
+ #include <string.h>
+ /* see also canvas_done_popup */
+ void glob_help(t_pd *bogus, t_symbol *s) {
+ char namebuf[MAXPDSTRING], *dir;
+ t_class *c = class_find(s);
+ if (!c) { post("HUH? no help because no class. (!)"); return; }
+ strcpy(namebuf, class_gethelpname(c));
+ dir = class_gethelpdir(c);
+ if (strcmp(namebuf + strlen(namebuf) - 3, ".pd")) strcat(namebuf, ".pd");
+ open_via_helppath(namebuf, dir);
+ }
+
+ void glob_update_class_list (t_pd *self, t_symbol *cb_recv, t_symbol *cb_sel) {
+ int i;
+ int n = pd_objectmaker->c_nmethod;
+ sys_gui("global class_list; set class_list {");
+ for (i=0; i<n; i++) {
+ sys_vgui("%s ", pd_objectmaker->c_methods[i].me_name->s_name);
+ }
+ sys_gui("}\n");
+ sys_vgui("%s %s\n",cb_recv->s_name, cb_sel->s_name);
+ }
+ #endif
+
+ EXTERN void glob_update_class_info (t_pd *bogus, t_symbol *s, t_symbol *cb_recv, t_symbol *cb_sel);
+ EXTERN void glob_update_path (void);
+ EXTERN void glob_redraw (void);
+
void glob_init(void)
{
***************
*** 173,176 ****
--- 203,218 ----
gensym("getaudiodevice"), 0);
/* tb } */
+ #ifdef DESIRE
+ class_addmethod(glob_pdobject, (t_method)glob_update_class_list,
+ gensym("update-class-list"), A_SYMBOL, A_SYMBOL, 0);
+ class_addmethod(glob_pdobject, (t_method)glob_update_class_info,
+ gensym("update-class-info"), A_SYMBOL, A_SYMBOL, A_SYMBOL, 0);
+ class_addmethod(glob_pdobject, (t_method)glob_update_path,
+ gensym("update-path"), 0);
+ class_addmethod(glob_pdobject, (t_method)glob_help,
+ gensym("help"), A_SYMBOL, 0);
+ class_addmethod(glob_pdobject, (t_method)glob_redraw,
+ gensym("redraw"), 0);
+ #endif
#ifdef UNIX
class_addmethod(glob_pdobject, (t_method)glob_watchdog,