00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00045 #include "BasicExternalObject.h"
00046 #include "SoSharedLibDefs.h"
00047 #include <string>
00048
00049 #if defined (_WINDOWS)
00050 #pragma warning(disable : 4996) // Turn off warning about deprecated strcpy on Win
00051 #endif
00052
00056 using namespace std;
00057
00063 static char* getNewBuffer(string& s)
00064 {
00065
00066
00067 char* buff = new char[1+s.length()];
00068
00069 memset(buff, 0, s.length()+1);
00070 strcpy(buff, s.c_str());
00071
00072 return buff;
00073 }
00074
00092 extern "C" BASICEXTERNALOBJECT_API long makeArray(TaggedData* argv, long argc, TaggedData * retval) {
00093
00094
00095 if(argc != 0)
00096 {
00097 return kESErrBadArgumentList;
00098 }
00099
00100
00101 retval->type = kTypeScript;
00102
00103 string s ("[1, 2, 3]");
00104
00105 retval->data.string = getNewBuffer(s);
00106
00107 return kESErrOK;
00108 }
00109
00126 extern "C" BASICEXTERNALOBJECT_API long getAverage(TaggedData* argv, long argc, TaggedData* retval)
00127 {
00128
00129
00130 if(argv[0].type != kTypeDouble)
00131 {
00132 return kESErrBadArgumentList;
00133 }
00134
00135 double sum = 0.0;
00136 int i;
00137 for (i = 0; i < argc; i++)
00138 {
00139 sum += argv [i].data.fltval;
00140 }
00141
00142 retval->type = kTypeDouble;
00143 retval->data.fltval = sum / argc;
00144 return kESErrOK;
00145 }
00146
00164 extern "C" BASICEXTERNALOBJECT_API long appendString(TaggedData* argv, long argc, TaggedData * retval)
00165 {
00166
00167 if(argc != 1)
00168 {
00169 return kESErrBadArgumentList;
00170 }
00171
00172
00173 if(argv[0].type != kTypeString)
00174 {
00175 return kESErrBadArgumentList;
00176 }
00177
00178
00179 retval->type = kTypeString;
00180
00181
00182 string s (argv[0].data.string);
00183
00184
00185 s.append("_appended by BasicExternalObject");
00186
00187 retval->data.string = getNewBuffer(s);
00188
00189 return kESErrOK;
00190 }
00191
00210 extern "C" BASICEXTERNALOBJECT_API long myScript(TaggedData* argv, long argc, TaggedData* retval)
00211 {
00212
00213
00214 retval->type = kTypeScript;
00215
00216
00217 string s("if(MenuElement.find('myBeoID') == null){");
00218 s.append("MenuElement.create('menu', 'BEO Menu', '', 'myBeoID');");
00219 s.append("var beoMenuItem = MenuElement.create('command', 'BEO Menu Item', 'at the end of myBeoID', 'myBeoIDsub');");
00220 s.append("beoMenuItem.onSelect = function(){ alert('Menu created by BasicExternalObject'); }}");
00221
00222 retval->data.string = getNewBuffer(s);
00223
00224 return kESErrOK;
00225 }
00226
00243 extern "C" BASICEXTERNALOBJECT_API long acceptBoolean(TaggedData* argv, long argc, TaggedData* retval)
00244 {
00245 if((argv[0].type != kTypeBool) && (argc != 1))
00246 {
00247 return kESErrBadArgumentList;
00248 }
00249
00250 string s;
00251 retval->type = kTypeString;
00252
00253 if(argv[0].data.intval)
00254 {
00255 s.append("Accepted a value of TRUE");
00256 }
00257 else
00258 {
00259 s.append("Accepted a value of FALSE");
00260 }
00261
00262 retval->data.string = getNewBuffer(s);
00263
00264 return kESErrOK;
00265
00266 }
00267
00273 BASICEXTERNALOBJECT_API void ESFreeMem (void* p)
00274 {
00275 delete(char*)(p);
00276 }
00277
00284 BASICEXTERNALOBJECT_API long ESGetVersion()
00285 {
00286 return 0x1;
00287 }
00288
00296 BASICEXTERNALOBJECT_API char* ESInitialize (const TaggedData ** argv, long argc)
00297 {
00298 return "makeArray,getAverage,appendString_s,myScript_a,acceptBoolean_b";
00299 }
00300
00306 BASICEXTERNALOBJECT_API void ESTerminate()
00307 {
00308
00309 }