diff options
Diffstat (limited to 'externals/grill/delsplit/main.cpp')
-rw-r--r-- | externals/grill/delsplit/main.cpp | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/externals/grill/delsplit/main.cpp b/externals/grill/delsplit/main.cpp deleted file mode 100644 index 82e490a6..00000000 --- a/externals/grill/delsplit/main.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - -delsplit - split a delimited list-in-a-symbol - -Copyright (c) 2002-2005 Thomas Grill (gr@grrrr.org) -For information on usage and redistribution, and for a DISCLAIMER OF ALL -WARRANTIES, see the file, "license.txt," in this distribution. - -*/ - -#define FLEXT_ATTRIBUTES 1 - -#include <flext.h> - -#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 500) -#error You need at least flext version 0.5.0 -#endif - -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include <ctype.h> - - -#define VERSION "0.1.5" - -#ifdef __MWERKS__ -#define STD std -#else -#define STD -#endif - - -class delsplit: - public flext_base -{ - FLEXT_HEADER_S(delsplit,flext_base,Setup) - -public: - delsplit(int argc,const t_atom *argv); - -protected: - void m_any(const t_symbol *s,int argc,const t_atom *argv); - void m_del(const t_symbol *s,int argc,const t_atom *argv); - - const t_symbol *delim; - - static void SetAtom(t_atom &l,const char *s); -private: - static void Setup(t_classid c); - - static const t_symbol *sym__space; - - FLEXT_CALLBACK_A(m_any) - FLEXT_CALLBACK_A(m_del) - FLEXT_ATTRVAR_S(delim) -}; - -FLEXT_NEW_V("delsplit",delsplit) - - -const t_symbol *delsplit::sym__space = NULL; - -void delsplit::Setup(t_classid c) -{ - sym__space = MakeSymbol(" "); - - FLEXT_CADDMETHOD(c,0,m_any); - FLEXT_CADDMETHOD(c,1,m_del); - FLEXT_CADDATTR_VAR1(c,"del",delim); -} - -delsplit::delsplit(int argc,const t_atom *argv): - delim(sym__) -{ - AddInAnything("Symbol in, representing the delimited list"); - AddInAnything("Set the Delimiter"); - AddOutList("The split list"); - - m_del(sym_list,argc,argv); -} - - -/** \brief check whether string represents a number - \ret 0..integer, 1..float, -1..no number -*/ -static int chknum(const char *s) -{ - int num = 0,pts = 0; - for(; *s; ++s) { - if(*s == '.') ++pts; - else if(isdigit(*s)) ++num; - else { num = 0; break; } - } - return (num > 0 && pts <= 1)?pts:-1; -} - -void delsplit::m_del(const t_symbol *s,int argc,const t_atom *argv) -{ - delim = NULL; - if(s == sym_symbol) { - FLEXT_ASSERT(argc == 1 && IsSymbol(argv[0])); - delim = GetSymbol(argv[0]); - } - else if(s == sym_list) { - if(argc == 0) - delim = sym__space; - else if(argc >= 1 && IsSymbol(argv[0])) - delim = GetSymbol(argv[0]); - } - - if(!delim) { - post("%s - Argument must be a symbol, list or int/float/bang",thisName()); - delim = sym__space; - } -} - -void delsplit::SetAtom(t_atom &l,const char *s) -{ - int n = chknum(s); - - if(n < 0) - SetString(l,s); - else if(n == 0) - SetInt(l,atoi(s)); - else - SetFloat(l,(float)atof(s)); -} - -void delsplit::m_any(const t_symbol *sym,int argc,const t_atom *argv) -{ - FLEXT_ASSERT(delim); - - t_atom lst[256]; - int cnt = 0; - const char *sdel = GetString(delim); - int ldel = strlen(sdel); - - for(int i = -1; i < argc; ++i) { - char str[1024]; - if(i < 0) { - if( - sym != sym_list && sym != sym_float && sym != sym_symbol && sym != sym_bang -#if FLEXT_SYS == FLEXT_SYS_MAX - && sym != sym_int -#endif - ) - strcpy(str,GetString(sym)); - else - str[0] = 0; - } - else if(IsString(argv[i])) - strcpy(str,GetString(argv[i])); - else if(CanbeFloat(argv[i])) - STD::sprintf(str,"%e",GetAFloat(argv[i])); - else - str[0] = 0; - - for(const char *s = str; *s; ) { - char *e = strstr(s,sdel); - if(!e) { - SetAtom(lst[cnt++],s); - break; - } - else { - *e = 0; - SetAtom(lst[cnt++],s); - s = e+ldel; - } - } - } - - ToSysList(0,cnt,lst); -} |