aboutsummaryrefslogtreecommitdiff
path: root/cyclone/sickle
diff options
context:
space:
mode:
Diffstat (limited to 'cyclone/sickle')
-rw-r--r--cyclone/sickle/Line.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/cyclone/sickle/Line.c b/cyclone/sickle/Line.c
index 03fcba1..fc9dffc 100644
--- a/cyclone/sickle/Line.c
+++ b/cyclone/sickle/Line.c
@@ -1,6 +1,7 @@
/* Copyright (c) 2002-2003 krzYszcz and others.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+/* Added code for the stop, pause and resume messages, fjkraan, 20141202. */
#include "m_pd.h"
#include "shared.h"
@@ -35,6 +36,7 @@ typedef struct _line
int x_retarget;
int x_size; /* as allocated */
int x_nsegs; /* as used */
+ int x_pause;
t_lineseg *x_curseg;
t_lineseg *x_segs;
t_lineseg x_segini[LINE_INISIZE];
@@ -70,6 +72,12 @@ static t_int *line_perform(t_int *w)
float curval = x->x_value;
float inc = x->x_inc;
float biginc = x->x_biginc;
+
+ if (x->x_pause)
+ {
+ while (nblock--) *out++ = curval;
+ return (w + 4);
+ }
if (PD_BIGORSMALL(curval)) /* LATER rethink */
curval = x->x_value = 0;
retarget:
@@ -180,6 +188,7 @@ static void line_float(t_line *x, t_float f)
x->x_nleft = 0;
x->x_retarget = 0;
}
+ x->x_pause = 0;
}
static void line_ft1(t_line *x, t_floatarg f)
@@ -246,9 +255,9 @@ static void line_list(t_line *x, t_symbol *s, int ac, t_atom *av)
x->x_target = x->x_segs->s_target;
x->x_curseg = x->x_segs;
x->x_retarget = 1;
+ x->x_pause = 0;
}
-/* CHECKED no stop, pity... */
#if 0
static void line_stop(t_line *x)
{
@@ -273,6 +282,22 @@ static void line_free(t_line *x)
if (x->x_clock) clock_free(x->x_clock);
}
+static void line_stop(t_line *x)
+{
+ x->x_nsegs = 0;
+ x->x_nleft = 0;
+}
+
+static void line_pause(t_line *x)
+{
+ x->x_pause = 1;
+}
+
+static void line_resume(t_line *x)
+{
+ x->x_pause = 0;
+}
+
static void *line_new(t_floatarg f)
{
t_line *x = (t_line *)pd_new(line_class);
@@ -282,6 +307,7 @@ static void *line_new(t_floatarg f)
x->x_retarget = 0;
x->x_size = LINE_INISIZE;
x->x_nsegs = 0;
+ x->x_pause = 0;
x->x_segs = x->x_segini;
x->x_curseg = 0;
inlet_new((t_object *)x, (t_pd *)x, &s_float, gensym("ft1"));
@@ -304,9 +330,18 @@ void Line_tilde_setup(void)
class_addlist(line_class, line_list);
class_addmethod(line_class, (t_method)line_ft1,
gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(line_class, (t_method)line_stop,
+ gensym("stop"), 0);
+ class_addmethod(line_class, (t_method)line_pause,
+ gensym("pause"), 0);
+ class_addmethod(line_class, (t_method)line_resume,
+ gensym("resume"), 0);
+ logpost(NULL, 4, "this is cyclone/Line~ %s, %dth %s build",
+ CYCLONE_VERSION, CYCLONE_BUILD, CYCLONE_RELEASE);
}
void line_tilde_setup(void)
{
Line_tilde_setup();
}
+