diff options
Diffstat (limited to 'externals/sprinkler')
-rw-r--r-- | externals/sprinkler/Changes | 6 | ||||
-rw-r--r-- | externals/sprinkler/README.pod | 20 | ||||
-rw-r--r-- | externals/sprinkler/configure.in | 22 | ||||
-rw-r--r-- | externals/sprinkler/sprinkler.c | 57 |
4 files changed, 79 insertions, 26 deletions
diff --git a/externals/sprinkler/Changes b/externals/sprinkler/Changes index c500a87f..33e41871 100644 --- a/externals/sprinkler/Changes +++ b/externals/sprinkler/Changes @@ -1,5 +1,11 @@ Change log for PD external 'sprinkler' (formerly 'forward') +v0.06 Tue, 14 Sep 2004 18:50:03 +0200 + + added --enable-all-forwardmess configure option to use pd_forwardmess() + for all messages (even those of length 1) : should fix 'bang' problem + + fixed gcc-3.3 warning re: (++argv) in sprinkler_list() thanks to + Erasmus Zipfel + v0.05 Mon, 23 Feb 2004 01:14:08 +0100 + added pass-through outlet for unbound destination symbols + added hack to prevent 'bang's being sprinkled as 'normal' symbols diff --git a/externals/sprinkler/README.pod b/externals/sprinkler/README.pod index 172458e9..301aa498 100644 --- a/externals/sprinkler/README.pod +++ b/externals/sprinkler/README.pod @@ -25,17 +25,29 @@ The 'configure' script supports the following options, among others: =over 4 -=item * --enable-debug , --disable-debug +=item --enable-debug , --disable-debug Whether to enable verbose debugging messages. Default=no. -=item * --enable-forward , --disable-forward +=item --enable-forward , --disable-forward Whether to create [forward] objects as instances of the [sprinkler] class (MAX-incompatible). Default=no. +=item --enable-all-forwardmess , --disable-all-forwardmess + +Whether to use pd_forwardmess() for all messages. If this +option is disabled (the default), messages of length 1 will +be handled specially; thus a symbol 'foo' will be passed as +'symbol foo', rather than just 'foo'. + +Default=no. + +Future versions of 'sprinkler' may use pd_forwardmess() for +all messages by default -- go on, try it! + =back =head1 ACKNOWLEDGEMENTS @@ -48,6 +60,8 @@ from code by Guenter Geiger, Larry Troxler, and iohannes m zmoeling. Thanks to Krzysztof Czaja for pointing out to me the existence of MAX "forward", and to Miller Puckette for the name "sprinkler". +Thanks to Erasmus Zipfel for a bugreport and useful ideas. + =head1 KNOWN BUGS One of the acknowledgements used to be in this section. @@ -55,6 +69,8 @@ Sorry, folks. Backwards-compatible version is incompatible with MAX. +Semantic strangeness with singleton messages is somewhat cryptic. + =head1 AUTHOR Bryan Jurish E<lt>moocow@ling.uni-potsdam.deE<gt> diff --git a/externals/sprinkler/configure.in b/externals/sprinkler/configure.in index 94cfb6f1..3c853da1 100644 --- a/externals/sprinkler/configure.in +++ b/externals/sprinkler/configure.in @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. dnl -- adapted from 'configure.in' in ggee distribution by Guenter Geiger AC_PREREQ(2.5) -AC_INIT(sprinkler, [0.05], [moocow@ling.uni-potsdam.de]) +AC_INIT(sprinkler, [0.06], [moocow@ling.uni-potsdam.de]) dnl dnl Programs, prefix @@ -69,7 +69,7 @@ AC_ARG_ENABLE([debug], if test "$enable_debug" == "yes" ; then AC_MSG_RESULT(yes) DEBUG="yes" - DFLAGS="$DFLAGS -DSPRINKLER_DEBUG" + AC_DEFINE(SPRINKLER_DEBUG, 1, [Define this to use pd_forwardmess() for all messages]) else AC_MSG_RESULT(no) DEBUG="no" @@ -82,7 +82,9 @@ dnl build backwards-compatible non-max 'forward'? dnl AC_MSG_CHECKING([whether to allow non-MAX "forward" alias]) AC_ARG_ENABLE([forward], - AC_HELP_STRING([--enable-forward],[allow backwards-compatible non-MAX "forward" alias (default=no)])) + AC_HELP_STRING( + [--enable-forward], + [allow backwards-compatible non-MAX "forward" alias (default=no)])) if test "$enable_forward" == "yes" ; then AC_MSG_RESULT(yes) @@ -103,7 +105,21 @@ AC_SUBST(SPRINKLER_COMPAT_TEXT) AC_SUBST(SPRINKLER_ALIAS_1) AC_SUBST(SPRINKLER_ALIAS_2) +dnl +dnl use pd_forwardmess() for everything? +dnl +AC_MSG_CHECKING([whether to use pd_forwardmess() for all messages]) +AC_ARG_ENABLE([all-forwardmess], + AC_HELP_STRING( + [--enable-all-forwardmess], + [use pd_forwardmess() for all messages (default=no)])) +if test "$enable_all_forwardmess" = "yes" ; then + AC_MSG_RESULT(yes) + AC_DEFINE(ALL_FORWARDMESS, 1, [Define this to use pd_forwardmess() for all messages]) +else + AC_MSG_RESULT(no) +fi dnl dnl machine-dependent variables diff --git a/externals/sprinkler/sprinkler.c b/externals/sprinkler/sprinkler.c index fcaca4d4..a6fd4582 100644 --- a/externals/sprinkler/sprinkler.c +++ b/externals/sprinkler/sprinkler.c @@ -1,14 +1,17 @@ -/* -*- Mode: C -*- */ -/*=============================================================================*\ - * File: sprinkler.c +/* File: sprinkler.c * Author: Bryan Jurish <moocow@ling.uni-potsdam.de> - * Description: message-forwarding : workaround for missing dynamic 'send' + * Contributors: + * Krzysztof Czaja pointed out the MAX-incompatibility of the name 'forward' + * Miller Puckette suggested the name 'sprinkler' + * Erasmus Zipfel diagnosed a bug in sprinkler_list() + * + * Description: dynamic message-forwarding object * * + code adapted from 'send_class' in $PD_ROOT/src/x_connective.c * + formerly 'forward.c' - * - * Copyright (c) 2002 Bryan Jurish. + * + * Copyright (c) 2002,2004 Bryan Jurish. * * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. @@ -31,7 +34,6 @@ *=============================================================================*/ #include <m_pd.h> -//#include "sprinkler.h" /* black magic */ #ifdef NT @@ -58,7 +60,8 @@ static char sprinkler_errbuf[EBUFSIZE]; * Structures and Types *=====================================================================*/ -static char *sprinkler_banner = "\nsprinkler version %s by Bryan Jurish : dynamic message dissemination"; +static char *sprinkler_banner = +"\nsprinkler version %s by Bryan Jurish : dynamic message dissemination"; static t_class *sprinkler_class; @@ -73,26 +76,30 @@ typedef struct _sprinkler * the guts: * + send (the tail of) a list or message to the control-bus * named by its initial element - * + HACK for single-element arglists *ONLY*: + * + [DEPRECATED] : HACK for single-element arglists *ONLY* * - sprinkler float- and pointer-initial arglists with 'pd_sprinklermess', - * everything else with 'pd_typedmess' as a *LIST* + * everything else with 'pd_forwardmess' *--------------------------------------------------------------------*/ static void sprinkler_anything(t_sprinkler *x, t_symbol *dst, int argc, t_atom *argv) { #ifdef SPRINKLER_DEBUG atom_string(argv, sprinkler_errbuf, EBUFSIZE); - post("sprinkler_debug : sprinkler_anything : dst=%s, argc=%d, arg1=%s", dst->s_name, argc, argc ? sprinkler_errbuf : "NULL"); + post("sprinkler_debug : sprinkler_anything : dst=%s, argc=%d, arg1=%s", + dst->s_name, argc, argc ? sprinkler_errbuf : "NULL"); #endif - /*----------------------------------------------------------------------- - * HACK: - * + single-element arglists *ONLY* - * + sprinkler float- and pointer-initial arglists with 'pd_sprinklermess', - * everything else with 'pd_typedmess' as a *LIST* - *------------------------------------------------------------------------ - */ if (dst->s_thing) { + +#if !defined(ALL_FORWARDMESS) + + /*----------------------------------------------------------------------- + * HACK (obsolete): + * + single-element arglists *ONLY* + * + sprinkler float- and pointer-initial arglists with 'pd_sprinklermess', + * everything else with 'pd_forwardmess' + *------------------------------------------------------------------------ + */ if (argc == 1) { switch (argv->a_type) { case A_FLOAT: @@ -124,6 +131,9 @@ static void sprinkler_anything(t_sprinkler *x, t_symbol *dst, int argc, t_atom * // just fall though } } + +#endif /* !defined(ALL_FORWARDMESS) */ + // default -- sprinkler anything else with 'pd_forwardmess' pd_forwardmess(dst->s_thing,argc,argv); return; @@ -139,7 +149,7 @@ static void sprinkler_list(t_sprinkler *x, t_symbol *s, int argc, t_atom *argv) #ifdef SPRINKLER_DEBUG post("sprinkler_debug : sprinkler_list : argc=%d", argc); #endif - sprinkler_anything(x,atom_getsymbol(argv),--argc,++argv); + sprinkler_anything(x,atom_getsymbol(argv), argc-1, argv+1); } @@ -170,17 +180,22 @@ void sprinkler_setup(void) 0, 0); #ifdef NON_MAX_FORWARD - // add aliases [forward] and [fw] + //-- add aliases [forward] and [fw] post("sprinkler : non-MAX [forward] alias enabled"); class_addcreator((t_newmethod)sprinkler_new, gensym("forward"), A_DEFSYM, 0); class_addcreator((t_newmethod)sprinkler_new, gensym("fw"), A_DEFSYM, 0); #endif +#ifdef ALL_FORWARDMESS + //-- report new semantics + post("sprinkler : will use pd_forwardmess() for all messages"); +#endif + #ifdef SPRINKLER_DEBUG post("sprinkler : debugging enabled"); #endif - // methods + //-- methods class_addlist(sprinkler_class, sprinkler_list); class_addanything(sprinkler_class, sprinkler_anything); |