[PD-cvs] pd/src builtins.c,1.1.2.50,1.1.2.51

Mathieu Bouchard matju at users.sourceforge.net
Mon Jul 30 06:26:03 CEST 2007


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16722

Modified Files:
      Tag: desiredata
	builtins.c 
Log Message:
[unpack] checks types f s p again; also added e meaning any atom. ("e" stands for "element" because "a" is reserved for the real "anything")


Index: builtins.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/builtins.c,v
retrieving revision 1.1.2.50
retrieving revision 1.1.2.51
diff -C2 -d -r1.1.2.50 -r1.1.2.51
*** builtins.c	30 Jul 2007 03:02:44 -0000	1.1.2.50
--- builtins.c	30 Jul 2007 04:26:01 -0000	1.1.2.51
***************
*** 1508,1512 ****
--- 1508,1524 ----
      t_int n;
      t_outlet **vec;
+     char *vat;
  };
+ 
+ static t_atomtype atomtype_from_letter(char c) {
+     switch (c) {
+     case 'e': return A_ATOM;
+     case 'f': return A_FLOAT;
+     case 's': return A_SYMBOL;
+     case 'p': return A_POINTER;
+     default:  return A_CANT;
+     }
+ }
+ 
  static void *unpack_new(t_symbol *s, int argc, t_atom *argv) {
      t_unpack *x = (t_unpack *)pd_new(unpack_class);
***************
*** 1520,1540 ****
      x->n = argc;
      x->vec = (t_outlet **)getbytes(argc * sizeof(*x->vec));
!     t_outlet **u = x->vec;
      t_atom *ap=argv;
!     for (int i=0; i < argc; ap++, i++) u[i] = outlet_new(x,0);
      return x;
  }
  static void unpack_list(t_unpack *x, t_symbol *s, int argc, t_atom *argv) {
      if (argc > x->n) argc = x->n;
!     for (int i=argc-1; i>=0; i--) outlet_atom(x->vec[i],&argv[i]);
  }
  static void unpack_anything(t_unpack *x, t_symbol *s, int ac, t_atom *av) {
!     t_atom *av2 = (t_atom *)getbytes((ac + 1) * sizeof(t_atom));
!     for (int i = 0; i < ac; i++) av2[i + 1] = av[i];
      SETSYMBOL(av2, s);
      unpack_list(x, 0, ac+1, av2);
      free(av2);
  }
! static void unpack_free(t_unpack *x) {free(x->vec);}
  static void unpack_setup() {
      unpack_class = class_new2("unpack",unpack_new,unpack_free,sizeof(t_unpack),0,"*");
--- 1532,1567 ----
      x->n = argc;
      x->vec = (t_outlet **)getbytes(argc * sizeof(*x->vec));
!     x->vat =      (char *)getbytes(argc);
      t_atom *ap=argv;
!     for (int i=0; i<argc; ap++, i++) {
! 	x->vec[i] = outlet_new(x,0);
!         switch (argv[i].a_type) {
! 	    case A_FLOAT: x->vat[i]='f'; break;
! 	    case A_SYMBOL: {
! 		const char *s = atom_getstring(&argv[i]);
! 		if (strlen(s)<1 || (x->vat[i]=atomtype_from_letter(s[0]))==A_CANT) {error("%s: bad type", s); x->vat[i]='f';}
! 		break;
! 	    }
! 	    default: error("bad type");
! 	}
!     }
      return x;
  }
  static void unpack_list(t_unpack *x, t_symbol *s, int argc, t_atom *argv) {
      if (argc > x->n) argc = x->n;
!     //for (int i=argc-1; i>=0; i--) outlet_atom(x->vec[i],&argv[i]);
!     for (int i=argc-1; i>=0; i--) {
! 	if (x->vat[i]==A_ATOM || x->vat[i]==argv[i].a_type) outlet_atom(x->vec[i],&argv[i]);
! 	else error("type mismatch");
!     }
  }
  static void unpack_anything(t_unpack *x, t_symbol *s, int ac, t_atom *av) {
!     t_atom *av2 = (t_atom *)getbytes((ac+1) * sizeof(t_atom));
!     for (int i=0; i<ac; i++) av2[i+1] = av[i];
      SETSYMBOL(av2, s);
      unpack_list(x, 0, ac+1, av2);
      free(av2);
  }
! static void unpack_free(t_unpack *x) {free(x->vec); free(x->vat);}
  static void unpack_setup() {
      unpack_class = class_new2("unpack",unpack_new,unpack_free,sizeof(t_unpack),0,"*");





More information about the Pd-cvs mailing list