diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2003-02-13 04:37:27 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2003-02-13 04:37:27 +0000 |
commit | 34ce52e8bec33c97e9413917f0f4b221fa0c6734 (patch) | |
tree | ac6dfc0c3a10012441d8b82c29d9fc129f0635d8 /externals/grill/flext/source/flatom_pr.cpp | |
parent | 4aea9c983b78ba15fb4358175c0599f14969628d (diff) |
""
svn path=/trunk/; revision=395
Diffstat (limited to 'externals/grill/flext/source/flatom_pr.cpp')
-rw-r--r-- | externals/grill/flext/source/flatom_pr.cpp | 156 |
1 files changed, 69 insertions, 87 deletions
diff --git a/externals/grill/flext/source/flatom_pr.cpp b/externals/grill/flext/source/flatom_pr.cpp index 7eeada93..b6cc0e5f 100644 --- a/externals/grill/flext/source/flatom_pr.cpp +++ b/externals/grill/flext/source/flatom_pr.cpp @@ -1,87 +1,69 @@ -/* - -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 <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <stdio.h> - -#ifdef __MWERKS__ -#define STD std -#else -#define STD -#endif - -void flext::PrintAtom(const t_atom &a,char *buf) -{ - if(IsFloat(a)) { -#if FLEXT_SYS == FLEXT_SYS_PD - if(a.a_w.w_float == (int)a.a_w.w_float) - STD::sprintf(buf,"%i",(int)GetFloat(a)); - else -#endif - STD::sprintf(buf,"%f",GetFloat(a)); - } - else if(IsInt(a)) - STD::sprintf(buf,"%i",GetInt(a)); - else if(IsPointer(a)) - STD::sprintf(buf,"%p",GetPointer(a)); - else if(IsSymbol(a)) - strcpy(buf,GetString(a)); - else if(IsNothing(a)) {} -#ifdef FLEXT_DEBUG - else - ERRINTERNAL(); -#endif -} - -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 <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#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;
+}
+
+
|