[PD-cvs] externals/miXed/shared/unstable forky.c,1.6,1.7 fragile.c,1.5,1.6 fragile.h,1.3,1.4 pd_imp.h,1.1.1.1,1.2
Krzysztof Czaja
krzyszcz at users.sourceforge.net
Thu Jan 27 15:42:56 CET 2005
- Previous message: [PD-cvs] externals/miXed/shared/hammer file.c,1.3,1.4 file.h,1.2,1.3
- Next message: [PD-cvs] externals/miXed/test/cyclone linedrive-test.pd,NONE,1.1 matrix-test.pd,NONE,1.1 cyclone-test.pd,1.5,1.6 maxmode-test.pd,1.2,1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/externals/miXed/shared/unstable
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23748/shared/unstable
Modified Files:
forky.c fragile.c fragile.h pd_imp.h
Log Message:
cyclone alpha52 and toxy alpha15 (see notes.txt for cyclone, toxy and shared)
Index: pd_imp.h
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/unstable/pd_imp.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** pd_imp.h 23 May 2003 12:29:53 -0000 1.1.1.1
--- pd_imp.h 27 Jan 2005 14:42:54 -0000 1.2
***************
*** 7,12 ****
--- 7,14 ----
#ifdef PD_MINOR_VERSION
+ /* 0.37 and up */
#include "m_imp.h"
#else
+ /* 0.36 and down */
typedef struct _methodentry
Index: forky.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/unstable/forky.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** forky.c 10 Dec 2004 20:47:05 -0000 1.6
--- forky.c 27 Jan 2005 14:42:54 -0000 1.7
***************
*** 79,83 ****
/* Not really a forky, just found no better place to put it in.
! Used in bitwise signal binops (sickle). Checked against msp2. */
t_int forky_getbitmask(int ac, t_atom *av)
{
--- 79,84 ----
/* Not really a forky, just found no better place to put it in.
! Used in sickle's bitwise signal binops (which use forky_hasfeeders() too).
! Checked against msp2. */
t_int forky_getbitmask(int ac, t_atom *av)
{
Index: fragile.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/unstable/fragile.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** fragile.c 17 Apr 2004 17:45:29 -0000 1.5
--- fragile.c 27 Jan 2005 14:42:54 -0000 1.6
***************
*** 1,3 ****
! /* Copyright (c) 1997-2003 Miller Puckette, krzYszcz, and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
--- 1,3 ----
! /* Copyright (c) 1997-2005 Miller Puckette, krzYszcz, and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
***************
*** 16,19 ****
--- 16,191 ----
}
+ /* Raising and voluntary mutation is a method of resolving name clashes.
+ A raised class hides other equivocal candidates. A simpler method,
+ raising and lowering, works only in global scope, because, currently, Pd
+ has only one visibility stack. Until this is changed, abstraction scope
+ will involve some kind of a hack for overriding global visibility stack. */
+
+ void fragile_class_raise(t_symbol *cname, t_newmethod thiscall)
+ {
+ t_methodentry *mp = pd_objectmaker->c_methods, *topmp = 0;
+ int count = pd_objectmaker->c_nmethod;
+ while (count--)
+ {
+ if (mp->me_name == cname)
+ {
+ if (mp->me_fun == (t_gotfn)thiscall)
+ {
+ if (topmp)
+ {
+ t_methodentry auxmp;
+ /* no linkage there, but anyway... */
+ loud_warning(0, 0, "%s is raising itself...",
+ cname->s_name);
+ memcpy(&auxmp, mp, sizeof(t_methodentry));
+ memcpy(mp, topmp, sizeof(t_methodentry));
+ memcpy(topmp, &auxmp, sizeof(t_methodentry));
+ }
+ return;
+ }
+ else if (!topmp)
+ topmp = mp;
+ }
+ mp++;
+ }
+ loudbug_bug("fragile_class_raise");
+ }
+
+ t_pd *fragile_class_mutate(t_symbol *cname, t_newmethod thiscall,
+ int ac, t_atom *av)
+ {
+ t_newmethod fn;
+ t_atomtype *argtypes;
+ if (fn = fragile_class_getalien(cname, thiscall, &argtypes))
+ {
+ t_pd *z;
+ loud_warning(0, 0, "%s is mutating now...", cname->s_name);
+ if (z = fragile_class_createobject(cname, fn, argtypes, ac, av))
+ {
+ post("...succeeded");
+ return (z);
+ }
+ else post("...failed");
+ }
+ return (0);
+ }
+
+ t_newmethod fragile_class_getalien(t_symbol *cname, t_newmethod thiscall,
+ t_atomtype **argtypesp)
+ {
+ t_methodentry *mp = pd_objectmaker->c_methods;
+ int count = pd_objectmaker->c_nmethod;
+ while (count--)
+ {
+ if (mp->me_name == cname && mp->me_fun != (t_gotfn)thiscall)
+ {
+ *argtypesp = mp->me_arg;
+ return ((t_newmethod)mp->me_fun);
+ }
+ mp++;
+ }
+ return (0);
+ }
+
+ /* A specialized copy of pd_typedmess() from m_class.c,
+ somewhat simplified for readability. */
+
+ typedef t_pd *(*t_newgimme)(t_symbol *s, int ac, t_atom *av);
+ typedef t_pd *(*t_new0)(
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+ typedef t_pd *(*t_new1)(
+ t_symbol*,
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+ typedef t_pd *(*t_new2)(
+ t_symbol*, t_symbol*,
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+ typedef t_pd *(*t_new3)(
+ t_symbol*, t_symbol*, t_symbol*,
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+ typedef t_pd *(*t_new4)(
+ t_symbol*, t_symbol*, t_symbol*, t_symbol*,
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+ typedef t_pd *(*t_new5)(
+ t_symbol*, t_symbol*, t_symbol*, t_symbol*, t_symbol*,
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+ typedef t_pd *(*t_new6)(
+ t_symbol*, t_symbol*, t_symbol*, t_symbol*, t_symbol*, t_symbol*,
+ t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg);
+
+ t_pd *fragile_class_createobject(t_symbol *cname, t_newmethod callthis,
+ t_atomtype *argtypes, int ac, t_atom *av)
+ {
+ t_floatarg ff[MAXPDARG+1], *fp = ff;
+ t_symbol *ss[MAXPDARG+1], **sp = ss;
+ int nsymbols = 0;
+ t_atomtype wanttype;
+ if (*argtypes == A_GIMME)
+ return ((*((t_newgimme)(callthis)))(cname, ac, av));
+ if (ac > MAXPDARG)
+ ac = MAXPDARG;
+ while (wanttype = *argtypes++)
+ {
+ switch (wanttype)
+ {
+ case A_POINTER:
+ goto badarg;
+ case A_FLOAT:
+ if (!ac) goto badarg;
+ case A_DEFFLOAT:
+ if (!ac) *fp = 0;
+ else
+ {
+ if (av->a_type == A_FLOAT)
+ *fp = av->a_w.w_float;
+ else goto badarg;
+ ac--; av++;
+ }
+ fp++;
+ break;
+ case A_SYMBOL:
+ if (!ac) goto badarg;
+ case A_DEFSYM:
+ if (!ac) *sp = &s_;
+ else
+ {
+ if (av->a_type == A_SYMBOL)
+ *sp = av->a_w.w_symbol;
+ else if (av->a_type == A_FLOAT && av->a_w.w_float == 0)
+ *sp = &s_;
+ else goto badarg;
+ ac--; av++;
+ }
+ nsymbols++;
+ sp++;
+ }
+ }
+ switch (nsymbols)
+ {
+ case 0: return ((*(t_new0)(callthis))
+ (ff[0], ff[1], ff[2], ff[3], ff[4]));
+ case 1: return ((*(t_new1)(callthis))
+ (ss[0],
+ ff[0], ff[1], ff[2], ff[3], ff[4]));
+ case 2: return ((*(t_new2)(callthis))
+ (ss[0], ss[1],
+ ff[0], ff[1], ff[2], ff[3], ff[4]));
+ case 3: return ((*(t_new3)(callthis))
+ (ss[0], ss[1], ss[2],
+ ff[0], ff[1], ff[2], ff[3], ff[4]));
+ case 4: return ((*(t_new4)(callthis))
+ (ss[0], ss[1], ss[2], ss[3],
+ ff[0], ff[1], ff[2], ff[3], ff[4]));
+ case 5: return ((*(t_new5)(callthis))
+ (ss[0], ss[1], ss[2], ss[3], ss[4],
+ ff[0], ff[1], ff[2], ff[3], ff[4]));
+ case 6: return ((*(t_new6)(callthis))
+ (ss[0], ss[1], ss[2], ss[3], ss[4], ss[5],
+ ff[0], ff[1], ff[2], ff[3], ff[4]));
+ }
+ badarg:
+ loud_error(0, "bad creation arguments for class '%s'", cname->s_name);
+ return (0);
+ }
+
void fragile_class_printnames(char *msg, int firstndx, int lastndx)
{
Index: fragile.h
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/unstable/fragile.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** fragile.h 19 Feb 2004 22:23:17 -0000 1.3
--- fragile.h 27 Jan 2005 14:42:54 -0000 1.4
***************
*** 1,3 ****
! /* Copyright (c) 2003 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
--- 1,3 ----
! /* Copyright (c) 2005 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
***************
*** 7,10 ****
--- 7,17 ----
int fragile_class_count(void);
+ void fragile_class_raise(t_symbol *cname, t_newmethod thiscall);
+ t_pd *fragile_class_mutate(t_symbol *cname, t_newmethod thiscall,
+ int ac, t_atom *av);
+ t_newmethod fragile_class_getalien(t_symbol *cname, t_newmethod thiscall,
+ t_atomtype **argtypesp);
+ t_pd *fragile_class_createobject(t_symbol *cname, t_newmethod callthis,
+ t_atomtype *argtypes, int ac, t_atom *av);
void fragile_class_printnames(char *msg, int firstndx, int lastndx);
t_glist *fragile_garray_glist(void *arr);
- Previous message: [PD-cvs] externals/miXed/shared/hammer file.c,1.3,1.4 file.h,1.2,1.3
- Next message: [PD-cvs] externals/miXed/test/cyclone linedrive-test.pd,NONE,1.1 matrix-test.pd,NONE,1.1 cyclone-test.pd,1.5,1.6 maxmode-test.pd,1.2,1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list