aboutsummaryrefslogtreecommitdiff
path: root/src/fifop.c
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2006-12-12 11:15:28 +0000
committerIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2006-12-12 11:15:28 +0000
commit483bba4eecd0fdabb387e21666162d49c2bca6b6 (patch)
treed9598e030c0d0106429a0df3e4c6526e0769aa05 /src/fifop.c
parenta89ad4d196ec87c58ea83703fc465853438eaab3 (diff)
added "dump" and "clear" messages
svn path=/trunk/externals/zexy/; revision=6816
Diffstat (limited to 'src/fifop.c')
-rw-r--r--src/fifop.c48
1 files changed, 41 insertions, 7 deletions
diff --git a/src/fifop.c b/src/fifop.c
index fdbe57d..9ac07a4 100644
--- a/src/fifop.c
+++ b/src/fifop.c
@@ -205,13 +205,7 @@ static void fifop_query(t_fifop*x)
outlet_float(x->x_infout, (t_float)x->counter);
}
-static void fifop_help(t_fifop*x)
-{
- post("\n%c fifop\t\t:: a First-In-First-Out queue with priorities", HEARTSYMBOL);
-}
-
-
-static void fifop_free(t_fifop *x)
+static void fifop_clear(t_fifop*x)
{
t_fifop_prioritylist *fifo_list=x->fifo_list;
while(fifo_list){
@@ -237,6 +231,42 @@ static void fifop_free(t_fifop *x)
freebytes(fifo_list2, sizeof( t_fifop_prioritylist));
}
x->fifo_list=0;
+ x->counter=0;
+}
+/* this is NOT re-entrant! */
+static void fifop_dump(t_fifop*x)
+{
+ t_fifop_prioritylist*pfifo=getFifo(x->fifo_list);
+
+ if(!pfifo||!pfifo->fifo_start) {
+ outlet_bang(x->x_infout);
+ return;
+ }
+
+ while(pfifo) {
+ t_fifop_list*fifo=pfifo->fifo_start;
+ while(fifo) {
+ t_atom*argv=fifo->argv;
+ int argc=fifo->argc;
+
+ /* output the list */
+ outlet_list(x->x_out, &s_list, argc, argv);
+
+ fifo=fifo->next;
+ }
+ pfifo=pfifo->next;
+ }
+}
+
+static void fifop_help(t_fifop*x)
+{
+ post("\n%c fifop\t\t:: a First-In-First-Out queue with priorities", HEARTSYMBOL);
+}
+
+
+static void fifop_free(t_fifop *x)
+{
+ fifop_clear(x);
outlet_free(x->x_out);
outlet_free(x->x_infout);
@@ -263,6 +293,10 @@ void fifop_setup(void)
class_addbang (fifop_class, fifop_bang);
class_addlist (fifop_class, fifop_list);
+
+ class_addmethod (fifop_class, (t_method)fifop_clear, gensym("clear"), A_NULL);
+ class_addmethod (fifop_class, (t_method)fifop_dump, gensym("dump"), A_NULL);
+
class_addmethod (fifop_class, (t_method)fifop_query, gensym("info"), A_NULL);
class_addmethod (fifop_class, (t_method)fifop_help, gensym("help"), A_NULL);