From bcd306745a6bc273ab9ac188af1b99b2c83fd3c5 Mon Sep 17 00:00:00 2001 From: "N.N." Date: Fri, 2 Nov 2012 08:18:53 +0000 Subject: share_mem : expanding syntax of [memdump( svn path=/trunk/externals/share_mem/; revision=16517 --- shmem.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) (limited to 'shmem.c') diff --git a/shmem.c b/shmem.c index f3e1bc2..53dd11c 100644 --- a/shmem.c +++ b/shmem.c @@ -30,11 +30,11 @@ void shmem_set(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) int i, index_max, shmem_offset; if (argc <= 1) { - pd_error(x, "shmem usage : memset offset data (data can be a float, a list, or a table name)"); + pd_error(x, "shmem usage : [memset offset data [offset_data]( (data can be a float, a list, or a table name)"); return; } if (argv[0].a_type != A_FLOAT) { - pd_error(x, "shmem usage : memset offset data (data can be a float, a list, or a table name)"); + pd_error(x, "shmem usage : [memset offset data [offset_data]( (data can be a float, a list, or a table name)"); return; } @@ -75,16 +75,16 @@ void shmem_set(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) void shmem_dump(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) { - int i, vecsize, index_max, shmem_offset; + int i, vecsize, index_max, shmem_offset, dest_offset; t_garray *a; t_word *vec; - if (argc == 0) { - pd_error(x, "shmem usage : memdump offset dest (dest can be nothing (outlet), or a table name)"); + if (argc < 2) { + pd_error(x, "shmem usage : [memdump offset dest [offset_dest]( "); return; } if (argv[0].a_type != A_FLOAT) { - pd_error(x, "shmem usage : memdump offset dest (dest can be nothing (outlet), or a table name)"); + pd_error(x, "shmem usage : [memdump offset dest [offset_dest]( "); return; } shmem_offset = atom_getfloatarg(0,argc,argv); @@ -92,26 +92,36 @@ void shmem_dump(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) if (shmem_offset > x->segment_size-1) i = x->segment_size-1; // post("i=%d", offset); - if (argc == 1) - outlet_float(x->x_obj.ob_outlet, x->share_memory[shmem_offset]); - else if (argv[1].a_type == A_SYMBOL) { // argument is an arrayname + if (argv[1].a_type == A_SYMBOL) { // [memdump offset dest t_symbol *s = atom_getsymbolarg(1,argc,argv); if (!(a = (t_garray *)pd_findbyclass(s, garray_class))) pd_error(x, "%s: no such array", s->s_name); - else { - if (!garray_getfloatwords(a, &vecsize, &vec)) + else if (!garray_getfloatwords(a, &vecsize, &vec)) pd_error(x, "%s: bad template for tabwrite", s->s_name); - else { + else { + if (argc == 2) { index_max = x->segment_size-shmem_offset; if (index_max > vecsize) index_max = vecsize; // post("i=%d", index_max); for (i=0; ishare_memory[i+shmem_offset]; + } + else if (argc == 3) { + dest_offset = atom_getfloatarg(2,argc,argv); + index_max = min(x->segment_size-shmem_offset,vecsize-dest_offset); + // post("i=%d", index_max); + for (i=0; ishare_memory[i+shmem_offset]; } garray_redraw(a); } } + else { + pd_error(x, "shmem usage : [memdump offset dest [offset_dest]( "); + return; + } + } void shmem_read(t_shmem *x, t_float index) -- cgit v1.2.1