aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/deljoin/main.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2002-12-03 22:08:23 +0000
committerThomas Grill <xovo@users.sourceforge.net>2002-12-03 22:08:23 +0000
commitd25c9bbd00935f2410228710ce87438e2260d91e (patch)
treee0002161a491bb6dee43688bdf4cced2ffd8300a /externals/grill/deljoin/main.cpp
parent1242ecdbfafd008263f0cca418c10dc1322ff21f (diff)
"version 0.1.1"
svn path=/trunk/; revision=270
Diffstat (limited to 'externals/grill/deljoin/main.cpp')
-rwxr-xr-xexternals/grill/deljoin/main.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/externals/grill/deljoin/main.cpp b/externals/grill/deljoin/main.cpp
new file mode 100755
index 00000000..b52303cb
--- /dev/null
+++ b/externals/grill/deljoin/main.cpp
@@ -0,0 +1,143 @@
+/*
+
+deljoin - join a list with delimiter
+
+Copyright (c) 2002 Thomas Grill (xovo@gmx.net)
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "license.txt," in this distribution.
+
+*/
+
+#include <flext.h>
+
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 400)
+#error You need at least flext version 0.4.0
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define I int
+#define L long
+#define F float
+#define D double
+#define V void
+#define C char
+#define BL bool
+
+#define VERSION "0.1.1"
+
+#ifdef __MWERKS__
+#define STD std
+#else
+#define STD
+#endif
+
+
+class deljoin:
+ public flext_base
+{
+ FLEXT_HEADER(deljoin,flext_base)
+
+public:
+ deljoin(I argc,const t_atom *argv);
+
+protected:
+ V m_list(const t_symbol *s,int argc,const t_atom *argv);
+ V m_del(const t_symbol *s);
+
+ const t_symbol *delim;
+
+ virtual void m_help();
+ virtual void m_assist(long /*msg*/,long /*arg*/,char * /*s*/);
+
+private:
+ FLEXT_CALLBACK_A(m_list)
+ FLEXT_CALLBACK_S(m_del)
+};
+
+FLEXT_NEW_V("deljoin",deljoin)
+
+
+deljoin::deljoin(I argc,const t_atom *argv):
+ delim(NULL)
+{
+ AddInAnything();
+ AddInSymbol();
+ AddOutSymbol();
+
+ FLEXT_ADDMETHOD_A(0,m_list);
+ FLEXT_ADDMETHOD(1,m_del);
+
+ if(argc && IsSymbol(argv[0])) delim = GetSymbol(argv[0]);
+}
+
+V deljoin::m_help()
+{
+ post("%s version " VERSION " (using flext " FLEXT_VERSTR "), (C) 2002 Thomas Grill",thisName());
+}
+
+V deljoin::m_assist(long msg,long arg,char *s)
+{
+ switch(msg) {
+ case 1: //ASSIST_INLET:
+ switch(arg) {
+ case 0:
+ STD::sprintf(s,"Anything in - triggers output"); break;
+ case 1:
+ STD::sprintf(s,"Set the Delimiter"); break;
+ }
+ break;
+ case 2: //ASSIST_OUTLET:
+ switch(arg) {
+ case 0:
+ STD::sprintf(s,"A symbol representing the joined list"); break;
+ }
+ break;
+ }
+}
+
+/** \brief convert incoming list to a concatenated string
+
+ Handles symbols, integers and floats
+*/
+V deljoin::m_list(const t_symbol *s,int argc,const t_atom *argv)
+{
+ C tmp[1024],*t = tmp;
+ const C *sdel = GetString(delim);
+ I ldel = strlen(sdel);
+
+ if(s && s != sym_list && s != sym_float && s != sym_int) {
+ strcpy(t,GetString(s));
+ t += strlen(t);
+ }
+
+ for(int i = 0; i < argc; ++i) {
+ if(t != tmp) {
+ strcpy(t,sdel);
+ t += ldel;
+ }
+
+ const t_atom &a = argv[i];
+ if(IsSymbol(a))
+ strcpy(t,GetString(a));
+ else if(IsInt(a)) {
+ STD::sprintf(t,"%i",GetInt(a),10);
+ }
+ else if(IsFloat(a)) {
+ STD::sprintf(t,"%f",GetFloat(a),10);
+ }
+// else do nothing
+
+ t += strlen(t);
+ }
+
+ ToOutString(0,tmp);
+}
+
+V deljoin::m_del(const t_symbol *s)
+{
+ delim = s;
+}
+