[PD-cvs] packages/patches add_string_support.patch,1.2,1.3
Martin Peach
mrpeach at users.sourceforge.net
Wed Nov 7 21:25:09 CET 2007
Update of /cvsroot/pure-data/packages/patches
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24617
Modified Files:
add_string_support.patch
Log Message:
strings are now blobs. replaced "string' by "blob" everywhere
Index: add_string_support.patch
===================================================================
RCS file: /cvsroot/pure-data/packages/patches/add_string_support.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** add_string_support.patch 29 May 2007 15:26:12 -0000 1.2
--- add_string_support.patch 7 Nov 2007 20:25:06 -0000 1.3
***************
*** 10,16 ****
}
! +static void messresponder_string(t_messresponder *x, t_string *st)
! +{ /* MP 20070107 string type */
! + outlet_string(x->mr_outlet, st);
+}
+
--- 10,16 ----
}
! +static void messresponder_blob(t_messresponder *x, t_blob *st)
! +{ /* MP 20070107 blob type */
! + outlet_blob(x->mr_outlet, st);
+}
+
***************
*** 22,29 ****
}
! +static void message_string(t_message *x, t_string *st)
+{
+ t_atom at;
! + SETSTRING(&at, st);
+ binbuf_eval(x->m_text.te_binbuf, &x->m_messresponder.mr_pd, 1, &at);
+}
--- 22,29 ----
}
! +static void message_blob(t_message *x, t_blob *st)
+{
+ t_atom at;
! + SETBLOB(&at, st);
+ binbuf_eval(x->m_text.te_binbuf, &x->m_messresponder.mr_pd, 1, &at);
+}
***************
*** 36,40 ****
class_addfloat(message_class, message_float);
class_addsymbol(message_class, message_symbol);
! + class_addstring(message_class, message_string);
class_addlist(message_class, message_list);
class_addanything(message_class, message_list);
--- 36,40 ----
class_addfloat(message_class, message_float);
class_addsymbol(message_class, message_symbol);
! + class_addblob(message_class, message_blob);
class_addlist(message_class, message_list);
class_addanything(message_class, message_list);
***************
*** 51,59 ****
}
! +t_string *atom_getstring(t_atom *a) /* MP 20070108 */
+{
! + static unsigned char c = 0;/* a default string to avoid null pointers. This should be somewhere else...? */
! + static t_string st = {1L, &c};
! + if (a->a_type == A_STRING) return (a->a_w.w_string);
+ else return (&st);
+}
--- 51,59 ----
}
! +t_blob *atom_getblob(t_atom *a) /* MP 20070108 */
+{
! + static unsigned char c = 0;/* a default blob to avoid null pointers. This should be somewhere else...? */
! + static t_blob st = {1L, &c};
! + if (a->a_type == A_BLOB) return (a->a_w.w_blob);
+ else return (&st);
+}
***************
*** 73,78 ****
typedmess(target, stackwas->a_w.w_symbol, nargs-1, stackwas+1);
break;
! + case A_STRING: /* MP 20070106 string type */
! + if (nargs == 1) pd_string(target, stackwas->a_w.w_string);
+ else pd_list(target, 0, nargs, stackwas);
+ break;
--- 73,78 ----
typedmess(target, stackwas->a_w.w_symbol, nargs-1, stackwas+1);
break;
! + case A_BLOB: /* MP 20070106 blob type */
! + if (nargs == 1) pd_blob(target, stackwas->a_w.w_blob);
+ else pd_list(target, 0, nargs, stackwas);
+ break;
***************
*** 91,95 ****
static t_symbol *class_loadsym; /* name under which an extern is invoked */
static void pd_defaultfloat(t_pd *x, t_float f);
! +static void pd_defaultstring(t_pd *x, t_string *st); /* MP20061226 string type */
static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv);
t_pd pd_objectmaker; /* factory for creating "object" boxes */
--- 91,95 ----
static t_symbol *class_loadsym; /* name under which an extern is invoked */
static void pd_defaultfloat(t_pd *x, t_float f);
! +static void pd_defaultblob(t_pd *x, t_blob *st); /* MP20061226 blob type */
static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv);
t_pd pd_objectmaker; /* factory for creating "object" boxes */
***************
*** 99,105 ****
}
! +static void pd_defaultstring(t_pd *x, t_string *st) /* MP 20061226 string type */
+{ /* for now just reject it, later convert to symbol/float/list */
! + pd_error(x, "%s: no method for string so far...", (*x)->c_name->s_name);
+}
+
--- 99,105 ----
}
! +static void pd_defaultblob(t_pd *x, t_blob *st) /* MP 20061226 blob type */
+{ /* for now just reject it, later convert to symbol/float/list */
! + pd_error(x, "%s: no method for blob so far...", (*x)->c_name->s_name);
+}
+
***************
*** 111,115 ****
c->c_floatmethod = pd_defaultfloat;
c->c_symbolmethod = pd_defaultsymbol;
! + c->c_stringmethod = pd_defaultstring; /* MP 20061226 string type */
c->c_listmethod = pd_defaultlist;
c->c_anymethod = pd_defaultanything;
--- 111,115 ----
c->c_floatmethod = pd_defaultfloat;
c->c_symbolmethod = pd_defaultsymbol;
! + c->c_blobmethod = pd_defaultblob; /* MP 20061226 blob type */
c->c_listmethod = pd_defaultlist;
c->c_anymethod = pd_defaultanything;
***************
*** 119,127 ****
class_addsymbol(c, fn);
}
! + else if (sel == &s_string) /* MP 20070106 string type */
+ {
+ post("class_addmethod: %p", fn);
! + if (argtype != A_STRING || va_arg(ap, t_atomtype)) goto phooey;
! + class_addstring(c, fn);
+ }
else if (sel == &s_list)
--- 119,127 ----
class_addsymbol(c, fn);
}
! + else if (sel == &s_blob) /* MP 20070106 blob type */
+ {
+ post("class_addmethod: %p", fn);
! + if (argtype != A_BLOB || va_arg(ap, t_atomtype)) goto phooey;
! + class_addblob(c, fn);
+ }
else if (sel == &s_list)
***************
*** 132,138 ****
}
! +void class_addstring(t_class *c, t_method fn) /* MP 20061226 string type */
+{
! + c->c_stringmethod = (t_stringmethod)fn;
+}
+
--- 132,138 ----
}
! +void class_addblob(t_class *c, t_method fn) /* MP 20061226 blob type */
+{
! + c->c_blobmethod = (t_blobmethod)fn;
+}
+
***************
*** 144,152 ****
t_symbol s_y = {"y", 0, 0};
t_symbol s_ = {"", 0, 0};
! +t_symbol s_string = {"string", 0, 0}; /* MP 20061223 string type */
static t_symbol *symlist[] = { &s_pointer, &s_float, &s_symbol, &s_bang,
- &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_};
! + &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_, &s_string}; /* MP 20061223 added s_string */
void mess_init(void)
--- 144,152 ----
t_symbol s_y = {"y", 0, 0};
t_symbol s_ = {"", 0, 0};
! +t_symbol s_blob = {"blob", 0, 0}; /* MP 20061223 blob type */
static t_symbol *symlist[] = { &s_pointer, &s_float, &s_symbol, &s_bang,
- &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_};
! + &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_, &s_blob}; /* MP 20061223 added s_blob */
void mess_init(void)
***************
*** 156,163 ****
return;
}
! + if (s == &s_string) /* MP 20061226 string type */
+ {
+ /*post("pd_typedmess argc = %d\n", argc);*//* MP 20061226 debug */
! + if (argc == 1) (*c->c_stringmethod)(x, argv->a_w.w_string);
+ else goto badarg;
+ return;
--- 156,163 ----
return;
}
! + if (s == &s_blob) /* MP 20061226 blob type */
+ {
+ /*post("pd_typedmess argc = %d\n", argc);*//* MP 20061226 debug */
! + if (argc == 1) (*c->c_blobmethod)(x, argv->a_w.w_blob);
+ else goto badarg;
+ return;
***************
*** 170,180 ****
dp++;
break;
! + case A_STRING:/* MP 20070106 string type */
! + /*post("pd_typedmess A_STRING");*/
+ if (!argc) goto badarg;
! + if (argv->a_type == A_STRING)
+ {
! + /*post("argv->a_type == A_STRING, argc = %d, narg= %d", argc, narg);*/
! + *ap = (t_int)(argv->a_w.w_string);
+ }
+ argc--;
--- 170,180 ----
dp++;
break;
! + case A_BLOB:/* MP 20070106 blob type */
! + /*post("pd_typedmess A_BLOB");*/
+ if (!argc) goto badarg;
! + if (argv->a_type == A_BLOB)
+ {
! + /*post("argv->a_type == A_BLOB, argc = %d, narg= %d", argc, narg);*/
! + *ap = (t_int)(argv->a_w.w_blob);
+ }
+ argc--;
***************
*** 191,197 ****
case 's': SETSYMBOL(at, va_arg(ap, t_symbol *)); break;
+ case 't':
! + SETSTRING(at, va_arg(ap, t_string *));
! + /*post("pd_vmess: arg[0].a_w.w_string = %p", arg[0].a_w.w_string);*/
! + break; /* MP 20061226 string type */
case 'i': SETFLOAT(at, va_arg(ap, t_int)); break;
case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break;
--- 191,197 ----
case 's': SETSYMBOL(at, va_arg(ap, t_symbol *)); break;
+ case 't':
! + SETBLOB(at, va_arg(ap, t_blob *));
! + /*post("pd_vmess: arg[0].a_w.w_blob = %p", arg[0].a_w.w_blob);*/
! + break; /* MP 20061226 blob type */
case 'i': SETFLOAT(at, va_arg(ap, t_int)); break;
case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break;
***************
*** 208,212 ****
typedef void (*t_floatmethod)(t_pd *x, t_float f);
typedef void (*t_symbolmethod)(t_pd *x, t_symbol *s);
! +typedef void (*t_stringmethod)(t_pd *x, t_string *st); /* MP20061226 string type */
typedef void (*t_listmethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
typedef void (*t_anymethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
--- 208,212 ----
typedef void (*t_floatmethod)(t_pd *x, t_float f);
typedef void (*t_symbolmethod)(t_pd *x, t_symbol *s);
! +typedef void (*t_blobmethod)(t_pd *x, t_blob *st); /* MP20061226 blob type */
typedef void (*t_listmethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
typedef void (*t_anymethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
***************
*** 216,220 ****
t_floatmethod c_floatmethod;
t_symbolmethod c_symbolmethod;
! + t_stringmethod c_stringmethod; /* MP20061226 string type */
t_listmethod c_listmethod;
t_anymethod c_anymethod;
--- 216,220 ----
t_floatmethod c_floatmethod;
t_symbolmethod c_symbolmethod;
! + t_blobmethod c_blobmethod; /* MP20061226 blob type */
t_listmethod c_listmethod;
t_anymethod c_anymethod;
***************
*** 231,235 ****
t_float *iu_floatslot;
t_symbol **iu_symslot;
! + t_string **iu_stringslot; /* MP 20061226 string type */
t_sample iu_floatsignalvalue;
};
--- 231,235 ----
t_float *iu_floatslot;
t_symbol **iu_symslot;
! + t_blob **iu_blobslot; /* MP 20061226 blob type */
t_sample iu_floatsignalvalue;
};
***************
*** 239,247 ****
#define i_floatslot i_un.iu_floatslot
#define i_symslot i_un.iu_symslot
! +#define i_stringslot i_un.iu_stringslot /* MP 20061226 string type */
static t_class *inlet_class, *pointerinlet_class, *floatinlet_class,
- *symbolinlet_class;
! + *symbolinlet_class, *stringinlet_class; /* MP 20061226 added stringinlet_class */
#define ISINLET(pd) ((*(pd) == inlet_class) || \
--- 239,247 ----
#define i_floatslot i_un.iu_floatslot
#define i_symslot i_un.iu_symslot
! +#define i_blobslot i_un.iu_blobslot /* MP 20061226 blob type */
static t_class *inlet_class, *pointerinlet_class, *floatinlet_class,
- *symbolinlet_class;
! + *symbolinlet_class, *blobinlet_class; /* MP 20061226 added blobinlet_class */
#define ISINLET(pd) ((*(pd) == inlet_class) || \
***************
*** 251,271 ****
}
! +static void inlet_string(t_inlet *x, t_string *st) /* MP20061226 string type */
+{
! + /*post("inlet_string (%p): st %p", &inlet_string, st);*/
! + if (x->i_symfrom == &s_string)
+ {
! + /*post("inlet_string calling pd_vmess");*/
+ pd_vmess(x->i_dest, x->i_symto, "t", st);
+ }
+ else if (!x->i_symfrom)
+ {
! + /*post("inlet_string calling pd_string");*/
! + pd_string(x->i_dest, st);
+ }
+ else
+ {
! + /*post("inlet_string calling inlet_wrong");*/
! + inlet_wrong(x, &s_string);
+ }
+}
--- 251,271 ----
}
! +static void inlet_blob(t_inlet *x, t_blob *st) /* MP20061226 blob type */
+{
! + /*post("inlet_blob (%p): st %p", &inlet_blob, st);*/
! + if (x->i_symfrom == &s_blob)
+ {
! + /*post("inlet_blob calling pd_vmess");*/
+ pd_vmess(x->i_dest, x->i_symto, "t", st);
+ }
+ else if (!x->i_symfrom)
+ {
! + /*post("inlet_blob calling pd_blob");*/
! + pd_blob(x->i_dest, st);
+ }
+ else
+ {
! + /*post("inlet_blob calling inlet_wrong");*/
! + inlet_wrong(x, &s_blob);
+ }
+}
***************
*** 278,288 ****
}
! +t_inlet *stringinlet_new(t_object *owner, t_string **stp) /* MP 20061226 string type */
+{
! + t_inlet *x = (t_inlet *)pd_new(stringinlet_class), *y, *y2;
+ x->i_owner = owner;
+ x->i_dest = 0;
! + x->i_symfrom = &s_string;
! + x->i_stringslot = stp;
+ x->i_next = 0;
+ if (y = owner->ob_inlet)
--- 278,288 ----
}
! +t_inlet *blobinlet_new(t_object *owner, t_blob **stp) /* MP 20061226 blob type */
+{
! + t_inlet *x = (t_inlet *)pd_new(blobinlet_class), *y, *y2;
+ x->i_owner = owner;
+ x->i_dest = 0;
! + x->i_symfrom = &s_blob;
! + x->i_blobslot = stp;
+ x->i_next = 0;
+ if (y = owner->ob_inlet)
***************
*** 302,306 ****
class_addfloat(inlet_class, inlet_float);
class_addsymbol(inlet_class, inlet_symbol);
! + class_addstring(inlet_class, inlet_string); /* MP 20061226 string type */
class_addlist(inlet_class, inlet_list);
class_addanything(inlet_class, inlet_anything);
--- 302,306 ----
class_addfloat(inlet_class, inlet_float);
class_addsymbol(inlet_class, inlet_symbol);
! + class_addblob(inlet_class, inlet_blob); /* MP 20061226 blob type */
class_addlist(inlet_class, inlet_list);
class_addanything(inlet_class, inlet_anything);
***************
*** 310,316 ****
}
! +void outlet_string(t_outlet *x, t_string *st) /* MP 20061226 string type */
+{
! + /*post("outlet_string %p %lu", st, st->s_length);*/
+ t_outconnect *oc;
+ if(++stackcount >= STACKITER)
--- 310,316 ----
}
! +void outlet_blob(t_outlet *x, t_blob *st) /* MP 20061226 blob type */
+{
! + /*post("outlet_blob %p %lu", st, st->s_length);*/
+ t_outconnect *oc;
+ if(++stackcount >= STACKITER)
***************
*** 318,322 ****
+ else
+ for (oc = x->o_connections; oc; oc = oc->oc_next)
! + pd_string(oc->oc_to, st);
+ --stackcount;
+}
--- 318,322 ----
+ else
+ for (oc = x->o_connections; oc; oc = oc->oc_next)
! + pd_blob(oc->oc_to, st);
+ --stackcount;
+}
***************
*** 336,343 ****
}
! +void pd_string(t_pd *x, t_string *st) /* MP20061226 string type */
+{
! + /*post("pd_string: st %p length %lu (*x)->c_stringmethod %p", st, st->s_length, (*x)->c_stringmethod);*/
! + (*(*x)->c_stringmethod)(x, st);
+}
+
--- 336,343 ----
}
! +void pd_blob(t_pd *x, t_blob *st) /* MP20061226 blob type */
+{
! + /*post("pd_blob: st %p length %lu (*x)->c_blobmethod %p", st, st->s_length, (*x)->c_blobmethod);*/
! + (*(*x)->c_blobmethod)(x, st);
+}
+
***************
*** 356,367 ****
} t_gpointer;
! +#define PD_STRINGS 1 /* MP20070211 Use this to test for string capability */
! +/* MP20061223 string type: */
! +typedef struct _string /* pointer to a string */
+{
! + unsigned long s_length; /* length of string in bytes */
! + unsigned char *s_data; /* pointer to 1st byte of string */
! +} t_string;
! +/* ...MP20061223 string type */
+
+
--- 356,367 ----
} t_gpointer;
! +#define PD_BLOBS 1 /* MP20070211 Use this to test for blob capability */
! +/* MP20061223 blob type: */
! +typedef struct _blob /* pointer to a blob */
+{
! + unsigned long s_length; /* length of blob in bytes */
! + unsigned char *s_data; /* pointer to 1st byte of blob */
! +} t_blob;
! +/* ...MP20061223 blob type */
+
+
***************
*** 373,377 ****
struct _glist *w_list;
int w_index;
! + t_string *w_string; /* MP20061223 string type */
} t_word;
--- 373,377 ----
struct _glist *w_list;
int w_index;
! + t_blob *w_blob; /* MP20061223 blob type */
} t_word;
***************
*** 383,387 ****
- A_CANT
+ A_CANT,
! + A_STRING /* MP20061223 string type */
} t_atomtype;
--- 383,387 ----
- A_CANT
+ A_CANT,
! + A_BLOB /* MP20061223 blob type */
} t_atomtype;
***************
*** 391,395 ****
EXTERN t_symbol s_float;
EXTERN t_symbol s_symbol;
! +EXTERN t_symbol s_string;
EXTERN t_symbol s_bang;
EXTERN t_symbol s_list;
--- 391,395 ----
EXTERN t_symbol s_float;
EXTERN t_symbol s_symbol;
! +EXTERN t_symbol s_blob;
EXTERN t_symbol s_bang;
EXTERN t_symbol s_list;
***************
*** 399,403 ****
#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
(atom)->a_w.w_symbol = (s))
! +#define SETSTRING(atom, st) ((atom)->a_type = A_STRING, (atom)->a_w.w_string = (st)) /* MP 20061226 string type */
#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
(atom)->a_w.w_index = (n))
--- 399,403 ----
#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
(atom)->a_w.w_symbol = (s))
! +#define SETBLOB(atom, st) ((atom)->a_type = A_BLOB, (atom)->a_w.w_blob = (st)) /* MP 20061226 blob type */
#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
(atom)->a_w.w_index = (n))
***************
*** 407,411 ****
EXTERN t_int atom_getint(t_atom *a);
EXTERN t_symbol *atom_getsymbol(t_atom *a);
! +EXTERN t_string *atom_getstring(t_atom *a);/* MP 20070108 sring type */
EXTERN t_symbol *atom_gensym(t_atom *a);
EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
--- 407,411 ----
EXTERN t_int atom_getint(t_atom *a);
EXTERN t_symbol *atom_getsymbol(t_atom *a);
! +EXTERN t_blob *atom_getblob(t_atom *a);/* MP 20070108 blob type */
EXTERN t_symbol *atom_gensym(t_atom *a);
EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
***************
*** 415,419 ****
EXTERN void pd_float(t_pd *x, t_float f);
EXTERN void pd_symbol(t_pd *x, t_symbol *s);
! +EXTERN void pd_string(t_pd *x, t_string *st); /* MP 20061226 string type */
EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
--- 415,419 ----
EXTERN void pd_float(t_pd *x, t_float f);
EXTERN void pd_symbol(t_pd *x, t_symbol *s);
! +EXTERN void pd_blob(t_pd *x, t_blob *st); /* MP 20061226 blob type */
EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
***************
*** 423,427 ****
EXTERN void outlet_float(t_outlet *x, t_float f);
EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
! +EXTERN void outlet_string(t_outlet *x, t_string *st); /* MP 20061226 string type */
EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
--- 423,427 ----
EXTERN void outlet_float(t_outlet *x, t_float f);
EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
! +EXTERN void outlet_blob(t_outlet *x, t_blob *st); /* MP 20061226 blob type */
EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
***************
*** 431,435 ****
EXTERN void class_doaddfloat(t_class *c, t_method fn);
EXTERN void class_addsymbol(t_class *c, t_method fn);
! +EXTERN void class_addstring(t_class *c, t_method fn);/* MP 20061226 string type */
EXTERN void class_addlist(t_class *c, t_method fn);
EXTERN void class_addanything(t_class *c, t_method fn);
--- 431,435 ----
EXTERN void class_doaddfloat(t_class *c, t_method fn);
EXTERN void class_addsymbol(t_class *c, t_method fn);
! +EXTERN void class_addblob(t_class *c, t_method fn);/* MP 20061226 blob type */
EXTERN void class_addlist(t_class *c, t_method fn);
EXTERN void class_addanything(t_class *c, t_method fn);
***************
*** 439,443 ****
#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
! +#define class_addstring(x, y) class_addstring((x), (t_method)(y)) /* MP20061226 string type */
#define class_addlist(x, y) class_addlist((x), (t_method)(y))
#define class_addanything(x, y) class_addanything((x), (t_method)(y))
--- 439,443 ----
#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
! +#define class_addblob(x, y) class_addblob((x), (t_method)(y)) /* MP20061226 blob type */
#define class_addlist(x, y) class_addlist((x), (t_method)(y))
#define class_addanything(x, y) class_addanything((x), (t_method)(y))
More information about the Pd-cvs
mailing list