diff options
author | N.N. <nimon@users.sourceforge.net> | 2012-11-02 08:18:53 +0000 |
---|---|---|
committer | N.N. <nimon@users.sourceforge.net> | 2012-11-02 08:18:53 +0000 |
commit | bcd306745a6bc273ab9ac188af1b99b2c83fd3c5 (patch) | |
tree | ef4c8b1d2b1673c2efffa0f04afba9f6247c0b53 /shmem.c | |
parent | e472db40c1b0d9d9781086d8905b6efcca7a9f31 (diff) |
share_mem : expanding syntax of [memdump(
svn path=/trunk/externals/share_mem/; revision=16517
Diffstat (limited to 'shmem.c')
-rw-r--r-- | shmem.c | 34 |
1 files changed, 22 insertions, 12 deletions
@@ -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,16 +92,14 @@ 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; @@ -109,9 +107,21 @@ void shmem_dump(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) for (i=0; i<index_max; i++) vec[i].w_float = x->share_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; i<index_max; i++) + vec[i+dest_offset].w_float = x->share_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) |