From b27da754180a1d86346f5f77179d607d22befe34 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Tue, 25 Feb 2003 18:18:32 +0000 Subject: "" svn path=/trunk/; revision=430 --- externals/grill/flext/source/flatom_pr.cpp | 207 +++++++++++++++++++---------- 1 file changed, 138 insertions(+), 69 deletions(-) (limited to 'externals/grill/flext/source/flatom_pr.cpp') diff --git a/externals/grill/flext/source/flatom_pr.cpp b/externals/grill/flext/source/flatom_pr.cpp index b6cc0e5f..c43da7b0 100644 --- a/externals/grill/flext/source/flatom_pr.cpp +++ b/externals/grill/flext/source/flatom_pr.cpp @@ -1,69 +1,138 @@ -/* - -flext - C++ layer for Max/MSP and pd (pure data) externals - -Copyright (c) 2001-2003 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. - -*/ - -/*! \file flatom_pr.cpp - \brief Definitions for printing and scanning the t_atom type. -*/ - -#include "flext.h" -#include -#include -#include -#include - -#ifdef __MWERKS__ -#define STD std -#else -#define STD -#endif - -void flext::PrintAtom(const t_atom &a,char *buf,int bufsz) -{ - GetAString(a,buf,bufsz?bufsz:100000); -} - -bool flext::ScanAtom(t_atom &a,const char *buf) -{ - // skip whitespace - while(*buf && isspace(*buf)) ++buf; - if(!*buf) return false; - - char tmp[1024]; - strcpy(tmp,buf); - char *c = tmp; - - // check for word type (s = 0,1,2 ... int,float,symbol) - int s = 0; - for(; *c && !isspace(*c); ++c) { - if(!isdigit(*c)) - s = (*c != '.' || s == 1)?2:1; - } - - switch(s) { - case 0: // integer -#if FLEXT_SYS == FLEXT_SYS_MAX - SetInt(a,atol(tmp)); - break; -#endif - case 1: // float - SetFloat(a,(float)atof(tmp)); - break; - default: { // anything else is a symbol - char t = *c; *c = 0; - SetString(a,tmp); - *c = t; - break; - } - } - - return true; -} - - +/* + + + +flext - C++ layer for Max/MSP and pd (pure data) externals + + + +Copyright (c) 2001-2003 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. + + + +*/ + + + +/*! \file flatom_pr.cpp + + \brief Definitions for printing and scanning the t_atom type. + +*/ + + + +#include "flext.h" + +#include + +#include + +#include + +#include + + + +#ifdef __MWERKS__ + +#define STD std + +#else + +#define STD + +#endif + + + +void flext::PrintAtom(const t_atom &a,char *buf,int bufsz) + +{ + + GetAString(a,buf,bufsz?bufsz:100000); + +} + + + +bool flext::ScanAtom(t_atom &a,const char *buf) + +{ + + // skip whitespace + + while(*buf && isspace(*buf)) ++buf; + + if(!*buf) return false; + + + + char tmp[1024]; + + strcpy(tmp,buf); + + char *c = tmp; + + + + // check for word type (s = 0,1,2 ... int,float,symbol) + + int s = 0; + + for(; *c && !isspace(*c); ++c) { + + if(!isdigit(*c)) + + s = (*c != '.' || s == 1)?2:1; + + } + + + + switch(s) { + + case 0: // integer + +#if FLEXT_SYS == FLEXT_SYS_MAX + + SetInt(a,atol(tmp)); + + break; + +#endif + + case 1: // float + + SetFloat(a,(float)atof(tmp)); + + break; + + default: { // anything else is a symbol + + char t = *c; *c = 0; + + SetString(a,tmp); + + *c = t; + + break; + + } + + } + + + + return true; + +} + + + + + -- cgit v1.2.1