Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31334/pd/src
Modified Files: configure.in g_text.c g_traversal.c m_conf.c makefile makefile.dependencies makefile.in makefile.nt notes.txt s_inter.c s_midi_alsa.c u_main.tk x_connective.c Added Files: x_list.c Log Message: New "list" object. Added "addcomma", "addsemi", "adddollar", "adddollsym" messages to message object. worked on Mac compilation problems.
Index: g_traversal.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_traversal.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** g_traversal.c 6 Sep 2004 20:20:34 -0000 1.2 --- g_traversal.c 24 Jul 2005 19:41:14 -0000 1.3 *************** *** 91,106 **** }
- /* call this if you know the pointer is fresh but don't know if we're pointing - to the head of a list or to real data. Any pointer is known to be fresh - when it appears as the argument of a message, but if your "pointer" method - or inlet stores it and you use it later, call gpointer_check above. */ - - /* LATER reconsider the above... I no longer think it's true! */ - - static int gpointer_ishead(const t_gpointer *gp) - { - return ((gp->gp_stub->gs_which == GP_GLIST) && !gp->gp_un.gp_scalar); - } - /* get the template for the object pointer to. Assumes we've already checked freshness. Returns 0 if head of list. */ --- 91,94 ---- *************** *** 123,128 **** }
! /* copy a pointer to another, assuming the first one is fresh and ! the second one hasn't yet been initialized. */ void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto) { --- 111,117 ---- }
! /* copy a pointer to another, assuming the second one hasn't yet been ! initialized. New gpointers should be initialized either by this ! routine or by gpointer_init below. */ void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto) { *************** *** 133,136 **** --- 122,127 ---- }
+ /* clear a gpointer that was previously set, releasing the associted + gstub if this was the last reference to it. */ void gpointer_unset(t_gpointer *gp) { *************** *** 417,423 **** return; } ! if (gpointer_ishead(gp)) { ! pd_error(x, "get: empty pointer"); return; } --- 408,414 ---- return; } ! if (!gpointer_check(gp, 0)) { ! pd_error(x, "get: stale or empty pointer"); return; } *************** *** 692,698 **** return; } ! if (gpointer_ishead(gp)) { ! pd_error(x, "getsize: empty pointer"); return; } --- 683,689 ---- return; } ! if (!gpointer_check(gp, 0)) { ! pd_error(x, "get: stale or empty pointer"); return; } *************** *** 1034,1040 **** return; } ! if (gpointer_ishead(gp)) { ! pd_error(x, "sublist: empty pointer"); return; } --- 1025,1031 ---- return; } ! if (!gpointer_check(gp, 0)) { ! pd_error(x, "get: stale or empty pointer"); return; }
Index: g_text.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_text.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** g_text.c 2 Jul 2005 05:03:06 -0000 1.8 --- g_text.c 24 Jul 2005 19:41:14 -0000 1.9 *************** *** 333,336 **** --- 333,368 ---- }
+ static void message_addcomma(t_message *x) + { + t_atom a; + SETCOMMA(&a); + binbuf_add(x->m_text.te_binbuf, 1, &a); + glist_retext(x->m_glist, &x->m_text); + } + + static void message_addsemi(t_message *x) + { + message_add(x, 0, 0, 0); + } + + static void message_adddollar(t_message *x, t_floatarg f) + { + int n = f; + if (n < 0) + n = 0; + t_atom a; + SETDOLLAR(&a, n); + binbuf_add(x->m_text.te_binbuf, 1, &a); + glist_retext(x->m_glist, &x->m_text); + } + + static void message_adddollsym(t_message *x, t_symbol *s) + { + t_atom a; + SETDOLLSYM(&a, s); + binbuf_add(x->m_text.te_binbuf, 1, &a); + glist_retext(x->m_glist, &x->m_text); + } + static void message_click(t_message *x, t_floatarg xpos, t_floatarg ypos, t_floatarg shift, *************** *** 1296,1299 **** --- 1328,1339 ---- class_addmethod(message_class, (t_method)message_add2, gensym("add2"), A_GIMME, 0); + class_addmethod(message_class, (t_method)message_addcomma, + gensym("addcomma"), 0); + class_addmethod(message_class, (t_method)message_addsemi, + gensym("addsemi"), 0); + class_addmethod(message_class, (t_method)message_adddollar, + gensym("adddollar"), A_FLOAT, 0); + class_addmethod(message_class, (t_method)message_adddollsym, + gensym("adddollsym"), A_SYMBOL, 0);
messresponder_class = class_new(gensym("messresponder"), 0, 0,
Index: makefile.dependencies =================================================================== RCS file: /cvsroot/pure-data/pd/src/makefile.dependencies,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** makefile.dependencies 16 Jul 2005 01:43:18 -0000 1.6 --- makefile.dependencies 24 Jul 2005 19:41:14 -0000 1.7 *************** *** 891,894 **** --- 891,902 ---- /usr/include/unistd.h /usr/include/bits/posix_opt.h \ /usr/include/bits/confname.h /usr/include/getopt.h + x_list.o: x_list.c m_pd.h \ + /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/include/stddef.h \ + /usr/include/string.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/bits/string.h \ + /usr/include/bits/string2.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/types.h \ + /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h \ + /usr/include/stdlib.h d_soundfile.o: d_soundfile.c /usr/include/unistd.h \ /usr/include/features.h /usr/include/sys/cdefs.h \
Index: u_main.tk =================================================================== RCS file: /cvsroot/pure-data/pd/src/u_main.tk,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** u_main.tk 16 Jul 2005 01:43:18 -0000 1.13 --- u_main.tk 24 Jul 2005 19:41:14 -0000 1.14 *************** *** 4008,4015 **** } if {$alsa} { ! label $id.in1f.l1 -text "In Channels:" entry $id.in1f.x1 -textvariable midi_alsain -width 4 pack $id.in1f.l1 $id.in1f.x1 -side left ! label $id.in1f.l2 -text "Out Channels:" entry $id.in1f.x2 -textvariable midi_alsaout -width 4 pack $id.in1f.l2 $id.in1f.x2 -side left --- 4008,4015 ---- } if {$alsa} { ! label $id.in1f.l1 -text "In Ports:" entry $id.in1f.x1 -textvariable midi_alsain -width 4 pack $id.in1f.l1 $id.in1f.x1 -side left ! label $id.in1f.l2 -text "Out Ports:" entry $id.in1f.x2 -textvariable midi_alsaout -width 4 pack $id.in1f.l2 $id.in1f.x2 -side left
Index: makefile.nt =================================================================== RCS file: /cvsroot/pure-data/pd/src/makefile.nt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** makefile.nt 8 Jul 2005 00:02:44 -0000 1.5 --- makefile.nt 24 Jul 2005 19:41:14 -0000 1.6 *************** *** 35,39 **** d_delay.c d_resample.c \ x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ ! x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c d_soundfile.c \ $(SYSSRC)
--- 35,39 ---- d_delay.c d_resample.c \ x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ ! x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c d_soundfile.c \ $(SYSSRC)
Index: makefile.in =================================================================== RCS file: /cvsroot/pure-data/pd/src/makefile.in,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** makefile.in 25 Jun 2005 02:49:15 -0000 1.7 --- makefile.in 24 Jul 2005 19:41:14 -0000 1.8 *************** *** 43,47 **** d_delay.c d_resample.c \ x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ ! x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c d_soundfile.c \ $(SYSSRC)
--- 43,47 ---- d_delay.c d_resample.c \ x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ ! x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c d_soundfile.c \ $(SYSSRC)
Index: configure.in =================================================================== RCS file: /cvsroot/pure-data/pd/src/configure.in,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** configure.in 16 Jul 2005 01:43:18 -0000 1.12 --- configure.in 24 Jul 2005 19:41:14 -0000 1.13 *************** *** 61,65 **** AC_FUNC_VPRINTF AC_CHECK_FUNCS(gettimeofday select socket strerror) !
dnl Checks for libraries. --- 61,65 ---- AC_FUNC_VPRINTF AC_CHECK_FUNCS(gettimeofday select socket strerror) ! AC_FUNC_ALLOCA
dnl Checks for libraries. *************** *** 350,353 **** fi
! AC_OUTPUT(makefile)
--- 350,353 ---- fi
! AC_OUTPUT(makefile config.h)
Index: makefile =================================================================== RCS file: /cvsroot/pure-data/pd/src/makefile,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** makefile 16 Jul 2005 01:43:18 -0000 1.14 --- makefile 24 Jul 2005 19:41:14 -0000 1.15 *************** *** 43,47 **** d_delay.c d_resample.c \ x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ ! x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c d_soundfile.c \ $(SYSSRC)
--- 43,47 ---- d_delay.c d_resample.c \ x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ ! x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c d_soundfile.c \ $(SYSSRC)
Index: notes.txt =================================================================== RCS file: /cvsroot/pure-data/pd/src/notes.txt,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** notes.txt 16 Jul 2005 01:43:18 -0000 1.15 --- notes.txt 24 Jul 2005 19:41:14 -0000 1.16 *************** *** 17,20 **** --- 17,24 ---- ------------ 0.39 --------- problems: + windows: + modal dialogs confuse watchdog + mac: + .pd extension not added when saving? TK commands to nonexistent windows? (maybe fixed) array name changes don't show up on parent *************** *** 22,25 **** --- 26,30 ---- what about upsampling inlet~s? ask Pd list...
+ flag for array to suppress printing name
*************** *** 41,45 ****
problems: - modal dialogs confuse watchdog patcher inlets don't deal with scalars (zbug.pd) Macintosh .pd extension not added to filenames --- 46,49 ---- *************** *** 71,75 **** rename windowname-pd instead of pd-windowname fix copyright notices - update portmusic to latest IEM guis to use queued updates pixel font sizes --- 75,78 ---- *************** *** 86,90 **** think of a way to embed abstractions in a patch make watchdog work for MACOSX - GOP bounding box object IEMGUIs better default font size search path to include both calling patch and abstraction, if different --- 89,92 ---- *************** *** 97,101 **** flags to defeat pre-loading specified classes expr to parse exponential notation !
data: --- 99,103 ---- flags to defeat pre-loading specified classes expr to parse exponential notation ! pipe to handle symbols&pointers (just takes floats now???)
data:
Index: s_inter.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_inter.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** s_inter.c 16 Jul 2005 01:43:18 -0000 1.10 --- s_inter.c 24 Jul 2005 19:41:14 -0000 1.11 *************** *** 852,856 **** int stdinpipe[2]; #endif - fprintf(stderr, "gui; %s\n", guidir); /* create an empty FD poll list */ sys_fdpoll = (t_fdpoll *)t_getbytes(0); --- 852,855 ----
--- NEW FILE: x_list.c --- /* Copyright (c) 1997- Miller Puckette and others. * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
#include "m_pd.h" /* #include <string.h> */ #include <alloca.h> extern t_pd *newest;
#define HAVE_ALLOCA 1 /* LATER this should be set by configure script! */ #define LIST_NGETBYTE 100 /* bigger that this we use alloc, not alloca */
/* the "list" object family.
list append - append a list to another list prepend - prepend a list to another list split - first n elements to first outlet, rest to second outlet list strip - send message with leading symbol as selector list length - output number of items in list list nth - nth item in list, counting from zero
Not sure we need these: list cat - build a list by accumulating elements list foreach - spit out elements of a list one by one list array - get items from a named array as a list list reverse - permute elements of a list back to front list pack - synonym for 'pack' list unpack - synonym for 'unpack' list first - output first n elements. list last - output last n elements */
/* -------------- utility functions: storage, copying -------------- */ /* List element for storage. Keep an atom and, in case it's a pointer, an associated 'gpointer' to protect against stale pointers. */ typedef struct _listelem { t_atom l_a; t_gpointer l_p; } t_listelem;
typedef struct _alist { t_pd l_pd; /* object to point inlets to */ int l_n; /* number of items */ t_listelem *l_vec; /* pointer to items */ } t_alist;
#if 0 /* probably won't use this version... */ #ifdef HAVE_ALLOCA #define LIST_ALLOCA(x, n) ( \ (x).l_n = (n), \ (x).l_vec = (t_listelem *)((n) < LIST_NGETBYTE ? \ alloca((n) * sizeof(t_listelem)) : getbytes((n) * sizeof(t_listelem)))) \ #define LIST_FREEA(x) ( \ ((x).l_n < LIST_NGETBYTE || (freebytes((x).l_vec, (x).l_n * sizeof(t_listelem)), 0)))
#else #define LIST_ALLOCA(x, n) ( \ (x).l_n = (n), \ (x).l_vec = (t_listelem *)getbytes((n) * sizeof(t_listelem))) #define LIST_FREEA(x) (freebytes((x).l_vec, (x).l_n * sizeof(t_listelem))) #endif #endif
#if HAVE_ALLOCA #define ATOMS_ALLOCA(x, n) ((x) = (t_atom *)((n) < LIST_NGETBYTE ? \ alloca((n) * sizeof(t_atom)) : getbytes((n) * sizeof(t_atom)))) #define ATOMS_FREEA(x, n) ( \ ((n) < LIST_NGETBYTE || (freebytes((x), (n) * sizeof(t_atom)), 0))) #else #define ATOMS_ALLOCA(x, n) ((x) = (t_atom *)getbytes((n) * sizeof(t_atom))) #define ATOMS_FREEA(x, n) (freebytes((x), (n) * sizeof(t_atom))) #endif
static void atoms_copy(int argc, t_atom *from, t_atom *to) { int i; for (i = 0; i < argc; i++) to[i] = from[i]; }
/* ------------- fake class to divert inlets to ----------------- */
t_class *alist_class;
static void alist_init(t_alist *x) { x->l_pd = alist_class; x->l_n = 0; x->l_vec = 0; }
static void alist_clear(t_alist *x) { int i; for (i = 0; i < x->l_n; i++) { if (x->l_vec[i].l_a.a_type == A_POINTER) gpointer_unset(x->l_vec[i].l_a.a_w.w_gpointer); } if (x->l_vec) freebytes(x->l_vec, x->l_n * sizeof(*x->l_vec)); }
static void alist_list(t_alist *x, t_symbol *s, int argc, t_atom *argv) { int i; alist_clear(x); if (!(x->l_vec = (t_listelem *)getbytes(argc * sizeof(*x->l_vec)))) { x->l_n = 0; error("list_alloc: out of memory"); return; } x->l_n = argc; for (i = 0; i < argc; i++) { x->l_vec[i].l_a = argv[i]; if (x->l_vec[i].l_a.a_type == A_POINTER) gpointer_copy(x->l_vec[i].l_a.a_w.w_gpointer, &x->l_vec[i].l_p); } }
static void alist_anything(t_alist *x, t_symbol *s, int argc, t_atom *argv) { int i; alist_clear(x); if (!(x->l_vec = (t_listelem *)getbytes((argc+1) * sizeof(*x->l_vec)))) { x->l_n = 0; error("list_alloc: out of memory"); return; } x->l_n = argc+1; SETSYMBOL(&x->l_vec[0].l_a, s); for (i = 0; i < argc; i++) { x->l_vec[i+1].l_a = argv[i]; if (x->l_vec[i+1].l_a.a_type == A_POINTER) gpointer_copy(x->l_vec[i+1].l_a.a_w.w_gpointer, &x->l_vec[i+1].l_p); } }
static void alist_toatoms(t_alist *x, t_atom *to) { int i; for (i = 0; i < x->l_n; i++) to[i] = x->l_vec[i].l_a; }
static void alist_setup(void) { alist_class = class_new(gensym("list inlet"), 0, 0, sizeof(t_alist), 0, 0); class_addlist(alist_class, alist_list); class_addanything(alist_class, alist_anything); }
/* ------------- list append --------------------- */
t_class *list_append_class;
typedef struct _list_append { t_object x_obj; t_alist x_alist; } t_list_append;
static void *list_append_new(t_symbol *s, int argc, t_atom *argv) { t_list_append *x = (t_list_append *)pd_new(list_append_class); alist_init(&x->x_alist); alist_list(&x->x_alist, 0, argc, argv); outlet_new(&x->x_obj, &s_list); inlet_new(&x->x_obj, &x->x_alist.l_pd, 0, 0); return (x); }
static void list_append_list(t_list_append *x, t_symbol *s, int argc, t_atom *argv) { t_atom *outv; int n, outc = x->x_alist.l_n + argc; ATOMS_ALLOCA(outv, outc); atoms_copy(argc, argv, outv); alist_toatoms(&x->x_alist, outv+argc); outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv); ATOMS_FREEA(outv, outc); }
static void list_append_anything(t_list_append *x, t_symbol *s, int argc, t_atom *argv) { t_atom *outv; int n, outc = x->x_alist.l_n + argc + 1; ATOMS_ALLOCA(outv, outc); SETSYMBOL(outv, s); atoms_copy(argc, argv, outv + 1); alist_toatoms(&x->x_alist, outv + 1 + argc); outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv); ATOMS_FREEA(outv, outc); }
static void list_append_free(t_list_append *x) { alist_clear(&x->x_alist); }
static void list_append_setup(void) { list_append_class = class_new(gensym("list append"), (t_newmethod)list_append_new, (t_method)list_append_free, sizeof(t_list_append), 0, A_GIMME, 0); class_addlist(list_append_class, list_append_list); class_addanything(list_append_class, list_append_anything); class_sethelpsymbol(list_append_class, &s_list); }
/* ------------- list prepend --------------------- */
t_class *list_prepend_class;
typedef struct _list_prepend { t_object x_obj; t_alist x_alist; } t_list_prepend;
static void *list_prepend_new(t_symbol *s, int argc, t_atom *argv) { t_list_prepend *x = (t_list_prepend *)pd_new(list_prepend_class); alist_init(&x->x_alist); alist_list(&x->x_alist, 0, argc, argv); outlet_new(&x->x_obj, &s_list); inlet_new(&x->x_obj, &x->x_alist.l_pd, 0, 0); return (x); }
static void list_prepend_list(t_list_prepend *x, t_symbol *s, int argc, t_atom *argv) { t_atom *outv; int n, outc = x->x_alist.l_n + argc; ATOMS_ALLOCA(outv, outc); alist_toatoms(&x->x_alist, outv); atoms_copy(argc, argv, outv + x->x_alist.l_n); outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv); ATOMS_FREEA(outv, outc); }
static void list_prepend_anything(t_list_prepend *x, t_symbol *s, int argc, t_atom *argv) { t_atom *outv; int n, outc = x->x_alist.l_n + argc + 1; ATOMS_ALLOCA(outv, outc); alist_toatoms(&x->x_alist, outv); SETSYMBOL(outv + x->x_alist.l_n, s); atoms_copy(argc, argv, outv + x->x_alist.l_n + 1); outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv); ATOMS_FREEA(outv, outc); }
static void list_prepend_free(t_list_prepend *x) { alist_clear(&x->x_alist); }
static void list_prepend_setup(void) { list_prepend_class = class_new(gensym("list prepend"), (t_newmethod)list_prepend_new, (t_method)list_prepend_free, sizeof(t_list_prepend), 0, A_GIMME, 0); class_addlist(list_prepend_class, list_prepend_list); class_addanything(list_prepend_class, list_prepend_anything); class_sethelpsymbol(list_prepend_class, &s_list); }
/* ------------- list split --------------------- */
t_class *list_split_class;
typedef struct _list_split { t_object x_obj; t_float x_f; t_outlet *x_out1; t_outlet *x_out2; t_outlet *x_out3; } t_list_split;
static void *list_split_new(t_floatarg f) { t_list_split *x = (t_list_split *)pd_new(list_split_class); x->x_out1 = outlet_new(&x->x_obj, &s_list); x->x_out2 = outlet_new(&x->x_obj, &s_list); x->x_out3 = outlet_new(&x->x_obj, &s_list); floatinlet_new(&x->x_obj, &x->x_f); x->x_f = f; return (x); }
static void list_split_list(t_list_split *x, t_symbol *s, int argc, t_atom *argv) { int n = x->x_f; if (n < 0) n = 0; if (argc >= n) { outlet_list(x->x_out2, &s_list, argc-n, argv+n); outlet_list(x->x_out1, &s_list, n, argv); } else outlet_list(x->x_out3, &s_list, argc, argv); }
static void list_split_anything(t_list_split *x, t_symbol *s, int argc, t_atom *argv) { t_atom *outv; ATOMS_ALLOCA(outv, argc+1); SETSYMBOL(outv, s); atoms_copy(argc, argv, outv + 1); list_split_list(x, &s_list, argc+1, outv); ATOMS_FREEA(outv, argc+1); }
static void list_split_setup(void) { list_split_class = class_new(gensym("list split"), (t_newmethod)list_split_new, 0, sizeof(t_list_split), 0, A_DEFFLOAT, 0); class_addlist(list_split_class, list_split_list); class_addanything(list_split_class, list_split_anything); class_sethelpsymbol(list_split_class, &s_list); }
/* ------------- list trim --------------------- */
t_class *list_trim_class;
typedef struct _list_trim { t_object x_obj; } t_list_trim;
static void *list_trim_new( void) { t_list_trim *x = (t_list_trim *)pd_new(list_trim_class); outlet_new(&x->x_obj, &s_list); return (x); }
static void list_trim_list(t_list_trim *x, t_symbol *s, int argc, t_atom *argv) { if (argc < 1 || argv[0].a_type != A_SYMBOL) outlet_list(x->x_obj.ob_outlet, &s_list, argc, argv); else outlet_anything(x->x_obj.ob_outlet, argv[0].a_w.w_symbol, argc-1, argv+1); }
static void list_trim_anything(t_list_trim *x, t_symbol *s, int argc, t_atom *argv) { outlet_anything(x->x_obj.ob_outlet, s, argc, argv); }
static void list_trim_setup(void) { list_trim_class = class_new(gensym("list trim"), (t_newmethod)list_trim_new, 0, sizeof(t_list_trim), 0, 0); class_addlist(list_trim_class, list_trim_list); class_addanything(list_trim_class, list_trim_anything); class_sethelpsymbol(list_trim_class, &s_list); }
/* ------------- list ------------------- */
static void *list_new(t_pd *dummy, t_symbol *s, int argc, t_atom *argv) { if (!argc || argv[0].a_type != A_SYMBOL) newest = list_append_new(s, argc, argv); else { t_symbol *s2 = argv[0].a_w.w_symbol; if (s2 == gensym("append")) newest = list_append_new(s, argc-1, argv+1); else if (s2 == gensym("prepend")) newest = list_prepend_new(s, argc-1, argv+1); else if (s2 == gensym("split")) newest = list_split_new(atom_getfloatarg(1, argc, argv)); else if (s2 == gensym("trim")) newest = list_trim_new(); else { error("list %s: unknown function", s2->s_name); newest = 0; } } return (newest); }
void x_list_setup(void) { alist_setup(); list_append_setup(); list_prepend_setup(); list_split_setup(); list_trim_setup(); class_addcreator((t_newmethod)list_new, &s_list, A_GIMME, 0); }
Index: s_midi_alsa.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_midi_alsa.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** s_midi_alsa.c 16 Jul 2005 01:43:18 -0000 1.2 --- s_midi_alsa.c 24 Jul 2005 19:41:14 -0000 1.3 *************** *** 49,52 **** --- 49,62 ---- alsa_nmidiin = 0; alsa_nmidiout = 0; + if(nmidiin>MAXMIDIINDEV ) + { + post("midi input ports reduced to maximum %d", MAXMIDIINDEV); + nmidiin=MAXMIDIINDEV; + } + if(nmidiout>MAXMIDIOUTDEV) + { + post("midi output ports reduced to maximum %d", MAXMIDIOUTDEV); + nmidiout=MAXMIDIOUTDEV; + }
if (nmidiin>0 && nmidiout>0) *************** *** 201,206 **** { alsa_nmidiin = alsa_nmidiout = 0; ! snd_seq_close(midi_handle); ! snd_midi_event_free(midiev); }
--- 211,222 ---- { alsa_nmidiin = alsa_nmidiout = 0; ! if(midi_handle) ! { ! snd_seq_close(midi_handle); ! if(midiev) ! { ! snd_midi_event_free(midiev); ! } ! } }
Index: m_conf.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/m_conf.c,v retrieving revision 1.1.1.3 retrieving revision 1.2 diff -C2 -d -r1.1.1.3 -r1.2 *** m_conf.c 9 May 2003 16:03:43 -0000 1.1.1.3 --- m_conf.c 24 Jul 2005 19:41:14 -0000 1.2 *************** *** 38,41 **** --- 38,42 ---- void x_qlist_setup(void); void x_gui_setup(void); + void x_list_setup(void); void d_arithmetic_setup(void); void d_array_setup(void); *************** *** 84,87 **** --- 85,89 ---- x_qlist_setup(); x_gui_setup(); + x_list_setup(); d_arithmetic_setup(); d_array_setup();
Index: x_connective.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/x_connective.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** x_connective.c 16 Jul 2005 01:43:18 -0000 1.6 --- x_connective.c 24 Jul 2005 19:41:15 -0000 1.7 *************** *** 506,514 **** { float f; ! if (!argc) /* empty lists go out reject outlet */ ! { ! outlet_bang(x->x_rejectout); ! return; ! } f = atom_getfloat(argv); for (nelement = x->x_nelement, e = x->x_vec; nelement--; e++) --- 506,510 ---- { float f; ! if (!argc) return; f = atom_getfloat(argv); for (nelement = x->x_nelement, e = x->x_vec; nelement--; e++) *************** *** 585,590 **** int n; t_routeelement *e; ! t_route *x; ! t_atom a; if (argc == 0) --- 581,585 ---- int n; t_routeelement *e; ! t_route *x = (t_route *)pd_new(route_class); t_atom a; if (argc == 0) *************** *** 594,604 **** argv = &a; } - for (n = 1; n < argc; n++) - if (argv[n].a_type != argv[0].a_type) - { - error("route: creation with mixed argument types failed"); - return (0); - } - x = (t_route *)pd_new(route_class); x->x_type = argv[0].a_type; x->x_nelement = argc; --- 589,592 ----