[PD-cvs] externals/zexy/src lister.c,1.8,1.9

IOhannes m zmölnig zmoelnig at users.sourceforge.net
Mon Oct 1 13:12:04 CEST 2007


Update of /cvsroot/pure-data/externals/zexy/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10739

Modified Files:
	lister.c 
Log Message:
fixed bug with inline modification of buffer


Index: lister.c
===================================================================
RCS file: /cvsroot/pure-data/externals/zexy/src/lister.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** lister.c	14 Mar 2007 09:08:56 -0000	1.8
--- lister.c	1 Oct 2007 11:12:02 -0000	1.9
***************
*** 21,55 ****
  #include <string.h>
  
  /* ------------------------- list ------------------------------- */
  
  /* this is for packages, what "float" is for floats */
  
  static t_class *mypdlist_class;
  
  static void mypdlist_secondlist(t_mypdlist *x, t_symbol *s, int argc, t_atom *argv)
  {
!   ZEXY_USEVAR(s);
!   if (argc) {
!     if (x->x_n != argc) {
!       freebytes(x->x_list, x->x_n * sizeof(t_atom));
!       x->x_n = argc;
!       x->x_list = copybytes(argv, argc * sizeof(t_atom));
!     } else memcpy(x->x_list, argv, argc * sizeof(t_atom));
!   }
  }
  
  static void mypdlist_list(t_mypdlist *x, t_symbol *s, int argc, t_atom *argv)
  {
!   ZEXY_USEVAR(s);
!   if (x->x_n != argc) {
!     freebytes(x->x_list, x->x_n * sizeof(t_atom));
!     x->x_n = argc;
!     x->x_list = copybytes(argv, argc * sizeof(t_atom));
!   } else memcpy(x->x_list, argv, argc * sizeof(t_atom));
!   
!   outlet_list(x->x_obj.ob_outlet, gensym("list"), x->x_n, x->x_list);
  }
! static void mypdlist_bang(t_mypdlist *x)
! { outlet_list(x->x_obj.ob_outlet, gensym("list"), x->x_n, x->x_list);}
  
  static void mypdlist_free(t_mypdlist *x)
--- 21,85 ----
  #include <string.h>
  
+ #ifdef HAVE_ALLOCA_H
+ # include <alloca.h>
+ #endif
+ 
  /* ------------------------- list ------------------------------- */
  
  /* this is for packages, what "float" is for floats */
  
+ #define LIST_NGETBYTE 100 /* bigger that this we use alloc, not alloca */
+ 
+ 
  static t_class *mypdlist_class;
  
+ #ifdef HAVE_ALLOCA_H
+ # 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];
+ }
+ 
+ 
+ static void mypdlist_storelist(t_mypdlist *x, int argc, t_atom *argv)
+ {
+   if(x->x_list)freebytes(x->x_list, x->x_n*sizeof(t_atom));
+   x->x_n=argc;
+   x->x_list=(t_atom*)getbytes(x->x_n*sizeof(t_atom));
+ 
+   atoms_copy(argc, argv, x->x_list);
+ }
  static void mypdlist_secondlist(t_mypdlist *x, t_symbol *s, int argc, t_atom *argv)
  {
!   mypdlist_storelist(x, argc, argv);
! }
! 
! static void mypdlist_bang(t_mypdlist *x)
! { 
!   int outc=x->x_n;
!   t_atom*outv;
!   ATOMS_ALLOCA(outv, outc);
!   atoms_copy(x->x_n, x->x_list, outv);
!   outlet_list(x->x_obj.ob_outlet, gensym("list"), outc, outv);
!   ATOMS_FREEA(outv, outc);
  }
  
+ 
  static void mypdlist_list(t_mypdlist *x, t_symbol *s, int argc, t_atom *argv)
  {
!   mypdlist_secondlist(x, s, argc, argv);
!   mypdlist_bang(x);
  }
! 
  
  static void mypdlist_free(t_mypdlist *x)
***************
*** 59,63 ****
  {
    t_mypdlist *x = (t_mypdlist *)pd_new(mypdlist_class);
-   ZEXY_USEVAR(s);
  
    outlet_new(&x->x_obj, 0);
--- 89,92 ----
***************
*** 67,71 ****
    x->x_list = 0;
  
!   mypdlist_secondlist(x, gensym("list"), argc, argv);
  
    return (x);
--- 96,101 ----
    x->x_list = 0;
  
!   if(argc)
!     mypdlist_secondlist(x, gensym("list"), argc, argv);
  
    return (x);





More information about the Pd-cvs mailing list