Adobe.com
Contents Files

BasicExternalObject.cpp

Go to the documentation of this file.
00001 /**************************************************************************
00002 * ADOBE SYSTEMS INCORPORATED
00003 * Copyright 2007 Adobe Systems Incorporated
00004 * All Rights Reserved
00005 *
00006 * NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the
00007 * terms of the Adobe license agreement accompanying it.  If you have received this file from a
00008 * source other than Adobe, then your use, modification, or distribution of it requires the prior
00009 * written permission of Adobe.
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         // Dynamically allocate memory buffer to hold the string 
00066         // to pass back to JavaScript
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         // accept no arguments
00095         if(argc != 0)
00096         {
00097                 return kESErrBadArgumentList;
00098         }
00099 
00100         // The returned value type
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         // Return an error if we do not get what we expect
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         // Accept 1 and only 1 argument
00167         if(argc != 1)
00168         {
00169                 return kESErrBadArgumentList;
00170         }
00171 
00172         // The argument must be a string
00173         if(argv[0].type != kTypeString)
00174         {
00175                 return kESErrBadArgumentList;
00176         }
00177 
00178         // The returned value type
00179         retval->type = kTypeString;
00180 
00181         // argv[0].data.string = the string passed in from the script
00182         string s (argv[0].data.string);
00183         
00184         // add a little bit of data onto the passed in string
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         // The returned value type
00214         retval->type = kTypeScript;
00215 
00216         // Create a script to be run
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 }
Contents Files
Adobe Solutions Network
 
Copyright © 2010 Adobe Systems Incorporated. All rights reserved.
Terms of Use Online Privacy Policy Adobe and accessibility Avoid software piracy Permissions and Trademarks