From 356d0569f9eab63238e966bbb309746bcf81d490 Mon Sep 17 00:00:00 2001
From: "N.N." <krzyszcz@users.sourceforge.net>
Date: Fri, 23 Apr 2004 11:26:52 +0000
Subject: *** empty log message ***

svn path=/trunk/externals/miXed/; revision=1629
---
 shared/common/port.c | 67 +++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 56 insertions(+), 11 deletions(-)

(limited to 'shared')

diff --git a/shared/common/port.c b/shared/common/port.c
index 9c08802..87f770e 100644
--- a/shared/common/port.c
+++ b/shared/common/port.c
@@ -89,6 +89,7 @@ static t_symbol *portps_outlet;
 static t_symbol *portps_vtable;
 static t_symbol *portps_coll;
 static t_symbol *portps_funbuff;
+static t_symbol *portps_prob;
 static t_symbol *portps_picture;
 
 static t_int port_getint(t_port *x, int ndx)
@@ -509,6 +510,12 @@ static int imaction_N1_funbuff(t_port *x, char *arg)
     return (PORT_NEXT);
 }
 
+static int imaction_N1_prob(t_port *x, char *arg)
+{
+    import_emstart(x, portps_prob, &s_, 0);
+    return (PORT_NEXT);
+}
+
 static int imaction_N1_picture(t_port *x, char *arg)
 {
     import_emstart(x, portps_picture, 0, 0);
@@ -583,6 +590,16 @@ static int imaction_P6_funbuff(t_port *x, char *arg)
     return (PORT_NEXT);
 }
 
+static int imaction_P6_prob(t_port *x, char *arg)
+{
+    binbuf_addv(x->x_outbb, "ssffs;",
+		gensym("#X"), gensym("obj"),
+		port_getx(x, 2), port_gety(x, 3), portps_prob);
+    import_emflush(x, portps_prob, &s_);
+    x->x_nobj++;
+    return (PORT_NEXT);
+}
+
 /* LATER use hammer replacements */
 static int imaction_P6_pack(t_port *x, char *arg)
 {
@@ -755,7 +772,12 @@ static int imaction_P1_connect(t_port *x, char *arg)
 
 static int imaction_T1_int(t_port *x, char *arg)
 {
-    import_emcopy(x, portps_coll);
+    if (x->x_emstate == portps_coll)
+	import_emcopy(x, portps_coll);
+    else if (x->x_emstate == portps_prob)
+	import_emcopy(x, portps_prob);
+    else
+	import_unexpected(x);
     return (PORT_NEXT);
 }
 
@@ -767,16 +789,34 @@ static int imaction_T1_flags(t_port *x, char *arg)
 
 static int imaction_T1_set(t_port *x, char *arg)
 {
-    /* FIXME funbuff */
-    if (import_emcopy(x, portps_vtable))
+    if (x->x_emstate == portps_vtable)
     {
-	int count = port_getint(x, 2);
-	if (count != x->x_emcount)
-	    loud_warning(0, "import",
-			 "[%d] bad vtable chunk index %d (%d already taken)",
-			 x->x_messcount, count, x->x_emcount);
-	x->x_emcount += x->x_inatoms - 3;
+	if (import_emcopy(x, portps_vtable))
+	{
+	    int count = port_getint(x, 2);
+	    if (count != x->x_emcount)
+		loud_warning(0, "import",
+			    "[%d] bad vtable chunk index %d (%d already taken)",
+			     x->x_messcount, count, x->x_emcount);
+	    x->x_emcount += x->x_inatoms - 3;
+	}
     }
+    else if (x->x_emstate == portps_funbuff)
+	import_emcopy(x, portps_funbuff);
+    else
+	import_unexpected(x);
+    return (PORT_NEXT);
+}
+
+static int imaction_T1_reset(t_port *x, char *arg)
+{
+    import_emcopy(x, portps_prob);
+    return (PORT_NEXT);
+}
+
+static int imaction_T1_embed(t_port *x, char *arg)
+{
+    import_emcopy(x, portps_prob);
     return (PORT_NEXT);
 }
 
@@ -861,6 +901,7 @@ static t_portslot imslots__N[] =
     { "vtable",      imaction_N1_vtable, 0, 0, 0 },
     { "coll",        imaction_N1_coll, 0, 0, 0 },
     { "funbuff",     imaction_N1_funbuff, 0, 0, 0 },
+    { "prob",        imaction_N1_prob, 0, 0, 0 },
     { "picture",     imaction_N1_picture, 0, 0, 0 }
 };
 static t_portnode imnode__N = { imslots__N, PORT_NSLOTS(imslots__N), 1 };
@@ -871,7 +912,8 @@ static t_portslot imslots_newobj[] =
     { "p",           imaction_P6_patcher, 0, 0, 0 },
     { "table",       imaction_P6_table, 0, 0, 0 },
     { "coll",        imaction_P6_coll, 0, 0, 0 },
-    { "funbuff",     imaction_P6_funbuff, 0, 0, 0 }
+    { "funbuff",     imaction_P6_funbuff, 0, 0, 0 },
+    { "prob",        imaction_P6_prob, 0, 0, 0 }
 };
 static t_portnode imnode_newobj = { imslots_newobj,
 				    PORT_NSLOTS(imslots_newobj), 6 };
@@ -963,7 +1005,9 @@ static t_portslot imslots__T[] =
 {
     { "int",         imaction_T1_int, 0, 0, 0 },
     { "flags",       imaction_T1_flags, 0, 0, 0 },
-    { "set",         imaction_T1_set, 0, 0, 0 }
+    { "set",         imaction_T1_set, 0, 0, 0 },
+    { "reset",       imaction_T1_reset, 0, 0, 0 },
+    { "embed",       imaction_T1_embed, 0, 0, 0 }
 };
 static t_portnode imnode__T = { imslots__T, PORT_NSLOTS(imslots__T), 1 };
 
@@ -1292,6 +1336,7 @@ static void port_checksetup(void)
 	portps_vtable = gensym("vtable");
 	portps_coll = gensym("coll");
 	portps_funbuff = gensym("funbuff");
+	portps_prob = gensym("prob");
 	portps_picture = gensym("picture");
 
 	if (zgetfn(&pd_objectmaker, portps_bogus) == 0)
-- 
cgit v1.2.1