aboutsummaryrefslogtreecommitdiff
path: root/shmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'shmem.c')
-rw-r--r--shmem.c34
1 files changed, 22 insertions, 12 deletions
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,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)