aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/flatom_pr.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2002-11-25 22:37:04 +0000
committerThomas Grill <xovo@users.sourceforge.net>2002-11-25 22:37:04 +0000
commitc6620995f41c40560fee52e12b8629244d6d793e (patch)
tree41449d94e018cab0b713653c98c32bcc5eb28674 /externals/grill/flext/source/flatom_pr.cpp
parenta55a5773570e56a1fb59887f1215f3d05a055700 (diff)
""
svn path=/trunk/; revision=244
Diffstat (limited to 'externals/grill/flext/source/flatom_pr.cpp')
-rw-r--r--externals/grill/flext/source/flatom_pr.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/externals/grill/flext/source/flatom_pr.cpp b/externals/grill/flext/source/flatom_pr.cpp
new file mode 100644
index 00000000..808f0543
--- /dev/null
+++ b/externals/grill/flext/source/flatom_pr.cpp
@@ -0,0 +1,97 @@
+/*
+
+flext - C++ layer for Max/MSP and pd (pure data) externals
+
+Copyright (c) 2001,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.
+
+*/
+
+/*! \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)
+{
+ switch(a.a_type) {
+ case A_NULL:
+ break;
+ case A_FLOAT:
+#ifdef 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));
+ break;
+#ifdef MAXMSP
+ case A_LONG:
+ STD::sprintf(buf,"%i",GetInt(a));
+ break;
+#endif
+#ifdef PD
+ case A_POINTER:
+ STD::sprintf(buf,"%x",GetPointer(a));
+ break;
+#endif
+ case A_SYMBOL:
+ strcpy(buf,GetString(a));
+ break;
+#ifdef _DEBUG
+ default:
+ 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
+#ifdef MAXMSP
+ 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;
+}
+
+