aboutsummaryrefslogtreecommitdiff
path: root/maskxor/v3/maskxor.c
diff options
context:
space:
mode:
Diffstat (limited to 'maskxor/v3/maskxor.c')
-rw-r--r--maskxor/v3/maskxor.c259
1 files changed, 0 insertions, 259 deletions
diff --git a/maskxor/v3/maskxor.c b/maskxor/v3/maskxor.c
deleted file mode 100644
index 9137110..0000000
--- a/maskxor/v3/maskxor.c
+++ /dev/null
@@ -1,259 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-//#define MAXENTRIES 512
-
-static t_class *maskxor_class;
-
-typedef struct _mask
-{
- // t_atom maskxor[MAXENTRIES];
- // t_atom maskl[MAXENTRIES];
- // t_atom maskr[MAXENTRIES];
- t_atom *maskxor, *maskl, *maskr;
-} t_mask;
-
-typedef struct _maskxor
-{
- t_object x_obj;
- t_mask masking;
- t_atom *buffer;
-
- t_float total, suml, sumr, mode, lengthl, lengthr, ltot, rgreater;
- t_float f_in, yes, firstl, firstr, firstx;
- t_outlet *thru, *bool, *mask;
-} t_maskxor;
-
-static void maskxor_makelbuffer(t_maskxor *x, int n, t_atom *list)
-{
- int i;
- float maskel;
- if (x->masking.maskl && x->firstl) {
- freebytes(x->masking.maskl, x->lengthl * sizeof(t_atom));
- x->masking.maskl = 0;
- x->lengthl = 0;
- }
-
- x->masking.maskl = getbytes(n * sizeof(t_atom));
- x->masking.maskl = copybytes(list, n * sizeof(t_atom));
- x->lengthl = n;
- x->suml = 0;
- for (i=0;i<n;i++)
- {
- maskel = atom_getfloatarg(i, x->lengthl, x->masking.maskl);
- if (maskel != 0) x->suml++;
- }
- x->firstl = 1;
- x->rgreater = x->suml <= x->sumr ? 1 : 0;
-}
-
-static void maskxor_makerbuffer(t_maskxor *x, int n, t_atom *list)
-{
- int i;
- float maskel;
- if (x->masking.maskr && x->firstr) {
- freebytes(x->masking.maskr, x->lengthr * sizeof(t_atom));
- x->masking.maskr = 0;
- x->lengthr = 0;
- }
-
- x->masking.maskr = getbytes(n * sizeof(t_atom));
- x->masking.maskr = copybytes(list, n * sizeof(t_atom));
- x->lengthr = n;
- x->sumr = 0;
- for (i=0;i<n;i++)
- {
- maskel = atom_getfloatarg(i, x->lengthr, x->masking.maskr);
- if (maskel != 0) x->sumr++;
- }
- x->firstr = 1;
-}
-
-static void maskxor_makemaskbuffer(t_maskxor *x, int n, t_atom *list, int d, int dir)
-{
- int i;
- float left, right, mask;
- if (x->masking.maskxor && x->firstx) {
- freebytes(x->masking.maskxor, x->ltot * sizeof(t_atom));
- x->buffer = 0;
- x->ltot = 0;
- }
-
- x->masking.maskxor = getbytes(n+d * sizeof(t_atom));
- if(dir > 0)
- {
- x->ltot = x->lengthr;
- for(i=0;i<x->ltot;i++)
- {
- left = i >= n ? 0 : atom_getfloatarg(i, x->lengthl, x->masking.maskl);
- right = atom_getfloatarg(i, x->lengthr, x->masking.maskr);
- mask = (float)((int)left ^ (int)right);
- SETFLOAT(&x->masking.maskxor[i], mask);
- }
- }
- else
- {
- x->ltot = x->lengthl;
- for(i=0;i<x->ltot;i++)
- {
- right = i >= n ? 0 : atom_getfloatarg(i, x->lengthr, x->masking.maskr);
- left = atom_getfloatarg(i, x->lengthl, x->masking.maskl);
- mask = (float)((int)left ^ (int)right);
- SETFLOAT(&x->masking.maskxor[i], mask);
- }
- }
- x->firstx = 1;
-}
-
-void maskxor_float(t_maskxor *x, t_floatarg fin)
-{
- int input = fin > 0 ? (int)fin : 0;
- if(x->mode == 0)
- {
- x->f_in = fin;
- x->yes = atom_getfloatarg(input, x->ltot, x->masking.maskxor);
- outlet_float(x->bool, x->yes);
- if(x->yes != 0) outlet_float(x->thru, x->f_in);
- }
- else if (x->rgreater)
- {
- x->f_in = fin;
- x->yes = atom_getfloatarg(input, x->ltot, x->masking.maskxor);
- outlet_float(x->bool, x->yes);
- if(x->yes != 0) outlet_float(x->thru, x->f_in);
- }
-}
-
-void maskxor_bang(t_maskxor *x, t_symbol *s)
-{
- outlet_list(x->mask, &s_list, x->total, x->masking.maskxor);
- outlet_float(x->bool, x->yes);
- if(x->yes)outlet_float(x->thru, x->f_in);
-}
-
-void maskxor_listl(t_maskxor *x, t_symbol *s, int argc, t_atom *argv)
-{
- int difflen;
- maskxor_makelbuffer(x, argc, argv);
- if(x->lengthl >= x->lengthr)
- {
- difflen = (int)(x->lengthl - x->lengthr);
- maskxor_makemaskbuffer(x, argc, argv, difflen, 0);
- }
- else
- {
- difflen = (int)(x->lengthr - x->lengthl);
- maskxor_makemaskbuffer(x, argc, argv, difflen, 1);
- }
-
- // listl_element = atom_getfloat(argv+i);
- // SETFLOAT(&x->masking.maskl[i], listl_element);
- // if(listl_element != 0) x->suml++;
- // listr_element = atom_getfloatarg(i,MAXENTRIES,x->masking.maskr);
- // xor_element = (float)((int)listl_element ^ (int)listr_element);
- // SETFLOAT(&x->masking.maskxor[i], xor_element);
-
- outlet_list(x->mask, &s_list, x->total, x->masking.maskxor);
-}
-
-void maskxor_listr(t_maskxor *x, t_symbol *s, int argc, t_atom *argv)
-{
- maskxor_makerbuffer(x, argc, argv);
-}
-
-void maskxor_mode(t_maskxor *x, t_floatarg fmode)
-{
- x->mode = fmode != 0 ? 1 : 0;
-}
-
-/* substitute zexy code */
-void maskxor_clear(t_maskxor *x)
-{
- freebytes(x->masking.maskl, x->lengthl * sizeof(t_atom));
- freebytes(x->masking.maskr, x->lengthr * sizeof(t_atom));
- freebytes(x->masking.maskxor, x->ltot * sizeof(t_atom));
- // x->masking.maskl = getbytes(sizeof(t_atom));
- // x->masking.maskr = getbytes(sizeof(t_atom));
- // x->masking.maskxor = getbytes(sizeof(t_atom));
-
- // SETFLOAT(&x->masking.maskr[0], 0);
- // SETFLOAT(&x->masking.maskl[0], 0);
- // SETFLOAT(&x->masking.maskxor[0], 0);
- x->lengthl = x->lengthr = x->ltot = 0;
- x->total=1;
- x->yes = x->f_in = 0;
-}
-
-void maskxor_print(t_maskxor *x)
-{
- float le0, le1, le2, le3, le4, le5, le6, le7, le8;
- float re0, re1, re2, re3, re4, re5, re6, re7, re8;
- float xe0, xe1, xe2, xe3, xe4, xe5, xe6, xe7, xe8;
- le0 = atom_getfloatarg(0, x->ltot, x->masking.maskl);
- le1 = atom_getfloatarg(1, x->ltot, x->masking.maskl);
- le2 = atom_getfloatarg(2, x->ltot, x->masking.maskl);
- le3 = atom_getfloatarg(3, x->ltot, x->masking.maskl);
- le4 = atom_getfloatarg(4, x->ltot, x->masking.maskl);
- le5 = atom_getfloatarg(5, x->ltot, x->masking.maskl);
- le6 = atom_getfloatarg(6, x->ltot, x->masking.maskl);
- le7 = atom_getfloatarg(7, x->ltot, x->masking.maskl);
- le8 = atom_getfloatarg(8, x->ltot, x->masking.maskl);
- re0 = atom_getfloatarg(0, x->ltot, x->masking.maskr);
- re1 = atom_getfloatarg(1, x->ltot, x->masking.maskr);
- re2 = atom_getfloatarg(2, x->ltot, x->masking.maskr);
- re3 = atom_getfloatarg(3, x->ltot, x->masking.maskr);
- re4 = atom_getfloatarg(4, x->ltot, x->masking.maskr);
- re5 = atom_getfloatarg(5, x->ltot, x->masking.maskr);
- re6 = atom_getfloatarg(6, x->ltot, x->masking.maskr);
- re7 = atom_getfloatarg(7, x->ltot, x->masking.maskr);
- re8 = atom_getfloatarg(8, x->ltot, x->masking.maskr);
- xe0 = atom_getfloatarg(0, x->ltot, x->masking.maskxor);
- xe1 = atom_getfloatarg(1, x->ltot, x->masking.maskxor);
- xe2 = atom_getfloatarg(2, x->ltot, x->masking.maskxor);
- xe3 = atom_getfloatarg(3, x->ltot, x->masking.maskxor);
- xe4 = atom_getfloatarg(4, x->ltot, x->masking.maskxor);
- xe5 = atom_getfloatarg(5, x->ltot, x->masking.maskxor);
- xe6 = atom_getfloatarg(6, x->ltot, x->masking.maskxor);
- xe7 = atom_getfloatarg(7, x->ltot, x->masking.maskxor);
- xe8 = atom_getfloatarg(8, x->ltot, x->masking.maskxor);
- post("right mask = %d, %d, %d, %d, %d, %d, %d, %d, %d", re0, re1, re2, re3, re4, re5, re6, re7, re8);
- post(" left mask = %d, %d, %d, %d, %d, %d, %d, %d, %d", le0, le1, le2, le3, le4, le5, le6, le7, le8);
- post(" xor mask = %d, %d, %d, %d, %d, %d, %d, %d, %d", xe0, xe1, xe2, xe3, xe4, xe5, xe6, xe7, xe8);
-}
-
-void *maskxor_new(t_symbol *s, t_floatarg fmode)
-{
- int i;
- t_maskxor *x = (t_maskxor *)pd_new(maskxor_class);
- x->total = 1;
- x->firstl = x->firstr = x->firstx = 0;
- x->mode = fmode != 0 ? 1 : 0;
-
- // SETFLOAT(&x->masking.maskr[0], 0);
- // SETFLOAT(&x->masking.maskl[0], 0);
- // SETFLOAT(&x->masking.maskxor[0], 0);
- x->lengthl = x->lengthr = x->ltot = 0;
-
- x->thru = outlet_new(&x->x_obj, &s_float);
- x->bool = outlet_new(&x->x_obj, &s_float);
- x->mask = outlet_new(&x->x_obj, &s_list);
- return (void *)x;
-}
-
-void maskxor_setup(void)
-{
- maskxor_class = class_new(gensym("maskxor"),
- (t_newmethod)maskxor_new,
- 0, sizeof(t_maskxor),
- CLASS_DEFAULT, A_DEFFLOAT, 0);
- post("|..-.--.-..-maskxor.-...--.-..|");
- post("| exclusive-or mask-map |");
- post("|.--.- Edward Kelly 2006 ---.-|");
-
- class_addfloat(maskxor_class, maskxor_float);
- class_addmethod(maskxor_class, (t_method)maskxor_listl, gensym("listl"), A_GIMME, 0, 0);
- class_addmethod(maskxor_class, (t_method)maskxor_listr, gensym("listr"), A_GIMME, 0, 0);
- class_addbang(maskxor_class, (t_method)maskxor_bang);
- class_addmethod(maskxor_class, (t_method)maskxor_mode, gensym("mode"), A_DEFFLOAT, 0);
- class_addmethod(maskxor_class, (t_method)maskxor_clear, gensym("clear"), A_DEFFLOAT, 0);
- class_addmethod(maskxor_class, (t_method)maskxor_print, gensym("print"), A_DEFFLOAT, 0);
-}