diff options
author | mescalinum <mescalinum@users.sourceforge.net> | 2009-08-29 17:07:13 +0000 |
---|---|---|
committer | mescalinum <mescalinum@users.sourceforge.net> | 2009-08-29 17:07:13 +0000 |
commit | 8b65741620bae448b96eb8ce59b85a7b1bb36c44 (patch) | |
tree | 6b22e262f1152965a656855478c4ad1a9c58aef0 /tcl_extras.cxx | |
parent | 066a639c0bb28d759c017ab2e00624dfb0a64b3f (diff) |
tidy up!
svn path=/trunk/externals/tclpd/; revision=12133
Diffstat (limited to 'tcl_extras.cxx')
-rw-r--r-- | tcl_extras.cxx | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/tcl_extras.cxx b/tcl_extras.cxx deleted file mode 100644 index e277e60..0000000 --- a/tcl_extras.cxx +++ /dev/null @@ -1,86 +0,0 @@ -#include "tcl_extras.h" -#include <map> -#include <string> -#include <string.h> - -using namespace std; - -static long cereal=0; -map<string,t_class*> class_table; -map<string,t_pd*> object_table; - -void poststring2 (const char *s) {post("%s",s);} - -static void *tclpd_init (t_symbol *classsym, int ac, t_atom *at) { - const char *name = classsym->s_name; - t_class *qlass = class_table[string(name)]; - t_tcl *self = (t_tcl *)pd_new(qlass); - char s[32]; - sprintf(s,"pd%06lx",cereal++); - self->self = Tcl_NewStringObj(s, -1); - Tcl_IncrRefCount(self->self); - object_table[string(s)] = (t_pd*)self; - Tcl_Obj *av[ac+2]; - av[0] = Tcl_NewStringObj(name, -1); - Tcl_IncrRefCount(av[0]); - av[1] = self->self; - for(int i=0; i<ac; i++) { - if(pd_to_tcl(&at[i], &av[2+i]) == TCL_ERROR) { - post("tcl error: %s\n", Tcl_GetStringResult(tcl_for_pd)); - pd_free((t_pd *)self); - return 0; - } - } - if (Tcl_EvalObjv(tcl_for_pd,ac+2,av,0) != TCL_OK) { - post("tcl error: %s\n", Tcl_GetStringResult(tcl_for_pd)); - pd_free((t_pd *)self); - return 0; - } - return self; -} - -t_pd* tclpd_get_instance(const char* cereal) { - return object_table[cereal]; -} - -t_object* tclpd_get_object(const char* cereal) { - t_tcl* x = (t_tcl*)tclpd_get_instance(cereal); - return &x->o; -} - -t_pd* tclpd_get_object_pd(const char* cereal) { - t_object* o = tclpd_get_object(cereal); - return &o->ob_pd; -} - -static void tclpd_anything (t_tcl *self, t_symbol *s, int ac, t_atom *at) { - /* proxy method */ - Tcl_Obj *av[ac+2]; - av[0] = self->self; - av[1] = Tcl_NewIntObj(0); // TODO: 0 -> outlet_number - Tcl_AppendToObj(av[1],"_",1); - Tcl_AppendToObj(av[1],s->s_name,strlen(s->s_name)); // selector - Tcl_IncrRefCount(av[1]); - for(int i=0; i<ac; i++) { - if(pd_to_tcl(&at[i], &av[2+i]) == TCL_ERROR) { - post("tcl error: %s\n", Tcl_GetStringResult(tcl_for_pd)); - return; - } - } - int result = Tcl_EvalObjv(tcl_for_pd,ac+2,av,0); - Tcl_DecrRefCount(av[1]); - if (result != TCL_OK) - post("tcl error: %s\n", Tcl_GetStringResult(tcl_for_pd)); -} - -static void tclpd_free (t_tcl *self) { - post("tclpd_free called"); -} - -t_class *tclpd_class_new (char *name, int flags) { - t_class *qlass = class_new(gensym(name), (t_newmethod) tclpd_init, - (t_method) tclpd_free, sizeof(t_tcl), flags, A_GIMME, A_NULL); - class_table[string(name)] = qlass; - class_addanything(qlass,tclpd_anything); - return qlass; -} |